@zendir/ui 0.1.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 (359) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +589 -0
  4. package/dist/index.d.ts +8 -0
  5. package/dist/index.js +421 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/react/3d/EarthViewer.d.ts +46 -0
  8. package/dist/react/3d/EarthViewer.js +836 -0
  9. package/dist/react/3d/EarthViewer.js.map +1 -0
  10. package/dist/react/3d/SolarSystemViewer.d.ts +43 -0
  11. package/dist/react/3d/SolarSystemViewer.js +372 -0
  12. package/dist/react/3d/SolarSystemViewer.js.map +1 -0
  13. package/dist/react/3d/ZenSpace3D.d.ts +16 -0
  14. package/dist/react/3d/ZenSpace3D.js +1253 -0
  15. package/dist/react/3d/ZenSpace3D.js.map +1 -0
  16. package/dist/react/3d/ZenSpace3DCesium.d.ts +9 -0
  17. package/dist/react/3d/ZenSpace3DCesium.js +186 -0
  18. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -0
  19. package/dist/react/3d/ZenSpace3DShaders.d.ts +78 -0
  20. package/dist/react/3d/ZenSpace3DShaders.js +94 -0
  21. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -0
  22. package/dist/react/3d/ZenSpace3DTypes.d.ts +614 -0
  23. package/dist/react/3d/ZenSpace3DUtils.d.ts +183 -0
  24. package/dist/react/3d/ZenSpace3DUtils.js +213 -0
  25. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -0
  26. package/dist/react/3d/index.d.ts +23 -0
  27. package/dist/react/3d/threeLoader.d.ts +22 -0
  28. package/dist/react/3d/threeLoader.js +18 -0
  29. package/dist/react/3d/threeLoader.js.map +1 -0
  30. package/dist/react/astro/ClassificationBanner.d.ts +25 -0
  31. package/dist/react/astro/ClassificationBanner.js +83 -0
  32. package/dist/react/astro/ClassificationBanner.js.map +1 -0
  33. package/dist/react/astro/GlobalStatusBar.d.ts +42 -0
  34. package/dist/react/astro/GlobalStatusBar.js +165 -0
  35. package/dist/react/astro/GlobalStatusBar.js.map +1 -0
  36. package/dist/react/astro/MissionClock.d.ts +169 -0
  37. package/dist/react/astro/MissionClock.js +411 -0
  38. package/dist/react/astro/MissionClock.js.map +1 -0
  39. package/dist/react/astro/MonitoringIcon.d.ts +60 -0
  40. package/dist/react/astro/MonitoringIcon.js +369 -0
  41. package/dist/react/astro/MonitoringIcon.js.map +1 -0
  42. package/dist/react/astro/Notification.d.ts +42 -0
  43. package/dist/react/astro/Notification.js +156 -0
  44. package/dist/react/astro/Notification.js.map +1 -0
  45. package/dist/react/astro/Progress.d.ts +39 -0
  46. package/dist/react/astro/Progress.js +149 -0
  47. package/dist/react/astro/Progress.js.map +1 -0
  48. package/dist/react/astro/SimulationControls.d.ts +136 -0
  49. package/dist/react/astro/SimulationControls.js +668 -0
  50. package/dist/react/astro/SimulationControls.js.map +1 -0
  51. package/dist/react/astro/StatusIndicator.d.ts +34 -0
  52. package/dist/react/astro/StatusIndicator.js +189 -0
  53. package/dist/react/astro/StatusIndicator.js.map +1 -0
  54. package/dist/react/astro/UnifiedTimeline.d.ts +106 -0
  55. package/dist/react/astro/UnifiedTimeline.js +1768 -0
  56. package/dist/react/astro/UnifiedTimeline.js.map +1 -0
  57. package/dist/react/astro/index.d.ts +63 -0
  58. package/dist/react/cards/AccessCard.d.ts +37 -0
  59. package/dist/react/cards/AccessCard.js +410 -0
  60. package/dist/react/cards/AccessCard.js.map +1 -0
  61. package/dist/react/cards/OrbitCard.d.ts +31 -0
  62. package/dist/react/cards/OrbitCard.js +372 -0
  63. package/dist/react/cards/OrbitCard.js.map +1 -0
  64. package/dist/react/cards/SpacecraftCard.d.ts +54 -0
  65. package/dist/react/cards/SpacecraftCard.js +941 -0
  66. package/dist/react/cards/SpacecraftCard.js.map +1 -0
  67. package/dist/react/cards/TelemetryCard.d.ts +40 -0
  68. package/dist/react/cards/TelemetryCard.js +742 -0
  69. package/dist/react/cards/TelemetryCard.js.map +1 -0
  70. package/dist/react/cards/TelemetryStreamCard.d.ts +59 -0
  71. package/dist/react/cards/TelemetryStreamCard.js +309 -0
  72. package/dist/react/cards/TelemetryStreamCard.js.map +1 -0
  73. package/dist/react/cards/index.d.ts +13 -0
  74. package/dist/react/charts/GroundTrackMap.d.ts +112 -0
  75. package/dist/react/charts/GroundTrackMap.js +1123 -0
  76. package/dist/react/charts/GroundTrackMap.js.map +1 -0
  77. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +26 -0
  78. package/dist/react/charts/GroundTrackMapLeaflet.js +571 -0
  79. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -0
  80. package/dist/react/charts/groundTrackMapLeafletTiles.d.ts +22 -0
  81. package/dist/react/charts/groundTrackMapLeafletTiles.js +11 -0
  82. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -0
  83. package/dist/react/charts/groundTrackMapLeafletUtils.d.ts +24 -0
  84. package/dist/react/charts/groundTrackMapLeafletUtils.js +109 -0
  85. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -0
  86. package/dist/react/charts/index.d.ts +10 -0
  87. package/dist/react/charts/unified/AstroChart.d.ts +24 -0
  88. package/dist/react/charts/unified/AstroChart.js +1405 -0
  89. package/dist/react/charts/unified/AstroChart.js.map +1 -0
  90. package/dist/react/charts/unified/PowerOverviewChart.d.ts +73 -0
  91. package/dist/react/charts/unified/PowerOverviewChart.js +488 -0
  92. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -0
  93. package/dist/react/charts/unified/domain.d.ts +845 -0
  94. package/dist/react/charts/unified/domain.js +3168 -0
  95. package/dist/react/charts/unified/domain.js.map +1 -0
  96. package/dist/react/charts/unified/generators.d.ts +276 -0
  97. package/dist/react/charts/unified/generators.js +518 -0
  98. package/dist/react/charts/unified/generators.js.map +1 -0
  99. package/dist/react/charts/unified/index.d.ts +55 -0
  100. package/dist/react/charts/unified/presets.d.ts +290 -0
  101. package/dist/react/charts/unified/presets.js +999 -0
  102. package/dist/react/charts/unified/presets.js.map +1 -0
  103. package/dist/react/charts/unified/sync.d.ts +69 -0
  104. package/dist/react/charts/unified/sync.js +219 -0
  105. package/dist/react/charts/unified/sync.js.map +1 -0
  106. package/dist/react/charts/unified/theme.d.ts +447 -0
  107. package/dist/react/charts/unified/theme.js +562 -0
  108. package/dist/react/charts/unified/theme.js.map +1 -0
  109. package/dist/react/charts/unified/types.d.ts +826 -0
  110. package/dist/react/charts/unified/useChartStream.d.ts +58 -0
  111. package/dist/react/charts/unified/useChartStream.js +226 -0
  112. package/dist/react/charts/unified/useChartStream.js.map +1 -0
  113. package/dist/react/chatgpt/AppCard.d.ts +59 -0
  114. package/dist/react/chatgpt/AppCard.js +306 -0
  115. package/dist/react/chatgpt/AppCard.js.map +1 -0
  116. package/dist/react/chatgpt/ChatGPTCard.d.ts +6 -0
  117. package/dist/react/chatgpt/index.d.ts +167 -0
  118. package/dist/react/chatgpt/index.js +166 -0
  119. package/dist/react/chatgpt/index.js.map +1 -0
  120. package/dist/react/context/DisplaySettingsContext.d.ts +107 -0
  121. package/dist/react/context/DisplaySettingsContext.js +169 -0
  122. package/dist/react/context/DisplaySettingsContext.js.map +1 -0
  123. package/dist/react/context/index.d.ts +5 -0
  124. package/dist/react/core/ActivityPlanner.d.ts +45 -0
  125. package/dist/react/core/ActivityPlanner.js +532 -0
  126. package/dist/react/core/ActivityPlanner.js.map +1 -0
  127. package/dist/react/core/AppBar.d.ts +71 -0
  128. package/dist/react/core/AppBar.js +817 -0
  129. package/dist/react/core/AppBar.js.map +1 -0
  130. package/dist/react/core/AstroIcon.d.ts +84 -0
  131. package/dist/react/core/AstroIcon.js +1243 -0
  132. package/dist/react/core/AstroIcon.js.map +1 -0
  133. package/dist/react/core/Badge.d.ts +27 -0
  134. package/dist/react/core/Badge.js +134 -0
  135. package/dist/react/core/Badge.js.map +1 -0
  136. package/dist/react/core/Button.d.ts +26 -0
  137. package/dist/react/core/Button.js +306 -0
  138. package/dist/react/core/Button.js.map +1 -0
  139. package/dist/react/core/CardHeader.d.ts +34 -0
  140. package/dist/react/core/CardHeader.js +316 -0
  141. package/dist/react/core/CardHeader.js.map +1 -0
  142. package/dist/react/core/ChatPanel.d.ts +627 -0
  143. package/dist/react/core/ChatPanel.js +1144 -0
  144. package/dist/react/core/ChatPanel.js.map +1 -0
  145. package/dist/react/core/Checkbox.d.ts +26 -0
  146. package/dist/react/core/Checkbox.js +130 -0
  147. package/dist/react/core/Checkbox.js.map +1 -0
  148. package/dist/react/core/ColorPickerPanel.d.ts +25 -0
  149. package/dist/react/core/ColorPickerPanel.js +293 -0
  150. package/dist/react/core/ColorPickerPanel.js.map +1 -0
  151. package/dist/react/core/CommandBuilder.d.ts +74 -0
  152. package/dist/react/core/CommandBuilder.js +518 -0
  153. package/dist/react/core/CommandBuilder.js.map +1 -0
  154. package/dist/react/core/ConfirmDialog.d.ts +45 -0
  155. package/dist/react/core/ConfirmDialog.js +315 -0
  156. package/dist/react/core/ConfirmDialog.js.map +1 -0
  157. package/dist/react/core/ConnectionForm.d.ts +57 -0
  158. package/dist/react/core/ConnectionForm.js +496 -0
  159. package/dist/react/core/ConnectionForm.js.map +1 -0
  160. package/dist/react/core/Container.d.ts +51 -0
  161. package/dist/react/core/Container.js +670 -0
  162. package/dist/react/core/Container.js.map +1 -0
  163. package/dist/react/core/CopyButton.d.ts +39 -0
  164. package/dist/react/core/CopyButton.js +105 -0
  165. package/dist/react/core/CopyButton.js.map +1 -0
  166. package/dist/react/core/DataTable.d.ts +113 -0
  167. package/dist/react/core/DataTable.js +446 -0
  168. package/dist/react/core/DataTable.js.map +1 -0
  169. package/dist/react/core/DataValue.d.ts +64 -0
  170. package/dist/react/core/DataValue.js +545 -0
  171. package/dist/react/core/DataValue.js.map +1 -0
  172. package/dist/react/core/Dialog.d.ts +32 -0
  173. package/dist/react/core/Dialog.js +201 -0
  174. package/dist/react/core/Dialog.js.map +1 -0
  175. package/dist/react/core/FileExplorer.d.ts +65 -0
  176. package/dist/react/core/FileExplorer.js +520 -0
  177. package/dist/react/core/FileExplorer.js.map +1 -0
  178. package/dist/react/core/GlassCard.d.ts +129 -0
  179. package/dist/react/core/GlassCard.js +375 -0
  180. package/dist/react/core/GlassCard.js.map +1 -0
  181. package/dist/react/core/HeaderIconWithStatus.d.ts +39 -0
  182. package/dist/react/core/HeaderIconWithStatus.js +157 -0
  183. package/dist/react/core/HeaderIconWithStatus.js.map +1 -0
  184. package/dist/react/core/HexViewer.d.ts +143 -0
  185. package/dist/react/core/HexViewer.js +1106 -0
  186. package/dist/react/core/HexViewer.js.map +1 -0
  187. package/dist/react/core/Icon.d.ts +32 -0
  188. package/dist/react/core/Icon.js +142 -0
  189. package/dist/react/core/Icon.js.map +1 -0
  190. package/dist/react/core/ImageGallery.d.ts +41 -0
  191. package/dist/react/core/ImageGallery.js +320 -0
  192. package/dist/react/core/ImageGallery.js.map +1 -0
  193. package/dist/react/core/Input.d.ts +38 -0
  194. package/dist/react/core/Input.js +288 -0
  195. package/dist/react/core/Input.js.map +1 -0
  196. package/dist/react/core/LimitsBar.d.ts +51 -0
  197. package/dist/react/core/LimitsBar.js +200 -0
  198. package/dist/react/core/LimitsBar.js.map +1 -0
  199. package/dist/react/core/LogViewer.d.ts +61 -0
  200. package/dist/react/core/LogViewer.js +599 -0
  201. package/dist/react/core/LogViewer.js.map +1 -0
  202. package/dist/react/core/MessageStream.d.ts +58 -0
  203. package/dist/react/core/MessageStream.js +455 -0
  204. package/dist/react/core/MessageStream.js.map +1 -0
  205. package/dist/react/core/MissionCalendar.d.ts +81 -0
  206. package/dist/react/core/MissionCalendar.js +1049 -0
  207. package/dist/react/core/MissionCalendar.js.map +1 -0
  208. package/dist/react/core/NumberInput.d.ts +85 -0
  209. package/dist/react/core/NumberInput.js +507 -0
  210. package/dist/react/core/NumberInput.js.map +1 -0
  211. package/dist/react/core/PacketViewer.d.ts +73 -0
  212. package/dist/react/core/PacketViewer.js +431 -0
  213. package/dist/react/core/PacketViewer.js.map +1 -0
  214. package/dist/react/core/Pagination.d.ts +30 -0
  215. package/dist/react/core/Pagination.js +190 -0
  216. package/dist/react/core/Pagination.js.map +1 -0
  217. package/dist/react/core/PinInput.d.ts +41 -0
  218. package/dist/react/core/PinInput.js +210 -0
  219. package/dist/react/core/PinInput.js.map +1 -0
  220. package/dist/react/core/Popover.d.ts +55 -0
  221. package/dist/react/core/Popover.js +288 -0
  222. package/dist/react/core/Popover.js.map +1 -0
  223. package/dist/react/core/Select.d.ts +42 -0
  224. package/dist/react/core/Select.js +303 -0
  225. package/dist/react/core/Select.js.map +1 -0
  226. package/dist/react/core/SideNav.d.ts +103 -0
  227. package/dist/react/core/SideNav.js +551 -0
  228. package/dist/react/core/SideNav.js.map +1 -0
  229. package/dist/react/core/SidePanel.d.ts +33 -0
  230. package/dist/react/core/SidePanel.js +199 -0
  231. package/dist/react/core/SidePanel.js.map +1 -0
  232. package/dist/react/core/Tabs.d.ts +47 -0
  233. package/dist/react/core/Tabs.js +129 -0
  234. package/dist/react/core/Tabs.js.map +1 -0
  235. package/dist/react/core/Toast.d.ts +56 -0
  236. package/dist/react/core/Toast.js +229 -0
  237. package/dist/react/core/Toast.js.map +1 -0
  238. package/dist/react/core/Toggle.d.ts +22 -0
  239. package/dist/react/core/Toggle.js +151 -0
  240. package/dist/react/core/Toggle.js.map +1 -0
  241. package/dist/react/core/Tooltip.d.ts +19 -0
  242. package/dist/react/core/Tooltip.js +179 -0
  243. package/dist/react/core/Tooltip.js.map +1 -0
  244. package/dist/react/core/Typography.d.ts +127 -0
  245. package/dist/react/core/Typography.js +187 -0
  246. package/dist/react/core/Typography.js.map +1 -0
  247. package/dist/react/core/index.d.ts +108 -0
  248. package/dist/react/core/layout/Box.d.ts +77 -0
  249. package/dist/react/core/layout/Box.js +126 -0
  250. package/dist/react/core/layout/Box.js.map +1 -0
  251. package/dist/react/core/layout/Center.d.ts +20 -0
  252. package/dist/react/core/layout/Center.js +34 -0
  253. package/dist/react/core/layout/Center.js.map +1 -0
  254. package/dist/react/core/layout/Divider.d.ts +16 -0
  255. package/dist/react/core/layout/Divider.js +108 -0
  256. package/dist/react/core/layout/Divider.js.map +1 -0
  257. package/dist/react/core/layout/Flex.d.ts +30 -0
  258. package/dist/react/core/layout/Flex.js +128 -0
  259. package/dist/react/core/layout/Flex.js.map +1 -0
  260. package/dist/react/core/layout/Grid.d.ts +36 -0
  261. package/dist/react/core/layout/Grid.js +142 -0
  262. package/dist/react/core/layout/Grid.js.map +1 -0
  263. package/dist/react/core/layout/Spacer.d.ts +8 -0
  264. package/dist/react/core/layout/Spacer.js +31 -0
  265. package/dist/react/core/layout/Spacer.js.map +1 -0
  266. package/dist/react/core/layout/Stack.d.ts +54 -0
  267. package/dist/react/core/layout/Stack.js +74 -0
  268. package/dist/react/core/layout/Stack.js.map +1 -0
  269. package/dist/react/core/layout/index.d.ts +38 -0
  270. package/dist/react/core/layout/responsive.d.ts +23 -0
  271. package/dist/react/core/layout/responsive.js +26 -0
  272. package/dist/react/core/layout/responsive.js.map +1 -0
  273. package/dist/react/core/layout/useBreakpoint.d.ts +77 -0
  274. package/dist/react/core/layout/useBreakpoint.js +73 -0
  275. package/dist/react/core/layout/useBreakpoint.js.map +1 -0
  276. package/dist/react/core/propertyConfig.d.ts +443 -0
  277. package/dist/react/core/propertyConfig.js +399 -0
  278. package/dist/react/core/propertyConfig.js.map +1 -0
  279. package/dist/react/hooks/index.d.ts +21 -0
  280. package/dist/react/hooks/useAccessWindows.d.ts +66 -0
  281. package/dist/react/hooks/useCompactMode.d.ts +82 -0
  282. package/dist/react/hooks/useCompactMode.js +62 -0
  283. package/dist/react/hooks/useCompactMode.js.map +1 -0
  284. package/dist/react/hooks/useLiveSelection.d.ts +57 -0
  285. package/dist/react/hooks/useSimulationPlayback.d.ts +97 -0
  286. package/dist/react/hooks/useSimulationTime.d.ts +61 -0
  287. package/dist/react/hooks/useSpacecraftPosition.d.ts +50 -0
  288. package/dist/react/hooks/useSpacecraftPosition.js +89 -0
  289. package/dist/react/hooks/useSpacecraftPosition.js.map +1 -0
  290. package/dist/react/hooks/useTelemetry.d.ts +55 -0
  291. package/dist/react/hooks/useTelemetry.js +73 -0
  292. package/dist/react/hooks/useTelemetry.js.map +1 -0
  293. package/dist/react/hooks/useZendirSession.d.ts +109 -0
  294. package/dist/react/hooks/useZendirSession.js +148 -0
  295. package/dist/react/hooks/useZendirSession.js.map +1 -0
  296. package/dist/react/index.d.ts +74 -0
  297. package/dist/react/shared/ErrorBoundary.d.ts +63 -0
  298. package/dist/react/shared/ErrorBoundary.js +142 -0
  299. package/dist/react/shared/ErrorBoundary.js.map +1 -0
  300. package/dist/react/shared/Skeleton.d.ts +110 -0
  301. package/dist/react/shared/Skeleton.js +324 -0
  302. package/dist/react/shared/Skeleton.js.map +1 -0
  303. package/dist/react/shared/index.d.ts +12 -0
  304. package/dist/react/theme/ThemeProvider.d.ts +385 -0
  305. package/dist/react/theme/ThemeProvider.js +1096 -0
  306. package/dist/react/theme/ThemeProvider.js.map +1 -0
  307. package/dist/react/theme/astro-tokens.d.ts +153 -0
  308. package/dist/react/theme/cardAccent.d.ts +75 -0
  309. package/dist/react/theme/cardAccent.js +137 -0
  310. package/dist/react/theme/cardAccent.js.map +1 -0
  311. package/dist/react/theme/config.d.ts +39 -0
  312. package/dist/react/theme/index.d.ts +9 -0
  313. package/dist/react/types.d.ts +360 -0
  314. package/dist/react/types.js +58 -0
  315. package/dist/react/types.js.map +1 -0
  316. package/dist/react/utils/index.d.ts +247 -0
  317. package/dist/react/utils/index.js +423 -0
  318. package/dist/react/utils/index.js.map +1 -0
  319. package/dist/react/visualizations/EclipseTimerCard.d.ts +17 -0
  320. package/dist/react/visualizations/EclipseTimerCard.js +250 -0
  321. package/dist/react/visualizations/EclipseTimerCard.js.map +1 -0
  322. package/dist/react/visualizations/LinkBudgetCard.d.ts +50 -0
  323. package/dist/react/visualizations/LinkBudgetCard.js +444 -0
  324. package/dist/react/visualizations/LinkBudgetCard.js.map +1 -0
  325. package/dist/react/visualizations/NavBallCard.d.ts +17 -0
  326. package/dist/react/visualizations/NavBallCard.js +243 -0
  327. package/dist/react/visualizations/NavBallCard.js.map +1 -0
  328. package/dist/react/visualizations/PropulsionCard.d.ts +37 -0
  329. package/dist/react/visualizations/PropulsionCard.js +298 -0
  330. package/dist/react/visualizations/PropulsionCard.js.map +1 -0
  331. package/dist/react/visualizations/SensorFootprintCard.d.ts +33 -0
  332. package/dist/react/visualizations/SensorFootprintCard.js +326 -0
  333. package/dist/react/visualizations/SensorFootprintCard.js.map +1 -0
  334. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +38 -0
  335. package/dist/react/visualizations/ThermalHeatmapCard.js +372 -0
  336. package/dist/react/visualizations/ThermalHeatmapCard.js.map +1 -0
  337. package/dist/react/visualizations/index.d.ts +17 -0
  338. package/dist/react.d.ts +1 -0
  339. package/dist/react.js +421 -0
  340. package/dist/react.js.map +1 -0
  341. package/dist/shaders/atmosphere.frag.js +5 -0
  342. package/dist/shaders/atmosphere.frag.js.map +1 -0
  343. package/dist/shaders/atmosphere.vert.js +5 -0
  344. package/dist/shaders/atmosphere.vert.js.map +1 -0
  345. package/dist/shaders/stars.frag.js +5 -0
  346. package/dist/shaders/stars.frag.js.map +1 -0
  347. package/dist/shaders/stars.vert.js +5 -0
  348. package/dist/shaders/stars.vert.js.map +1 -0
  349. package/dist/style.css +143 -0
  350. package/dist/tokens/index.d.ts +296 -0
  351. package/dist/tokens/index.js +263 -0
  352. package/dist/tokens/index.js.map +1 -0
  353. package/dist/tokens/tokens.css +155 -0
  354. package/dist/types/index.d.ts +23 -0
  355. package/dist/types.d.ts +1 -0
  356. package/dist/types.js +2 -0
  357. package/dist/types.js.map +1 -0
  358. package/package.json +220 -0
  359. package/sdk-stub.js +22 -0
@@ -0,0 +1,129 @@
1
+ import { default as React } from 'react';
2
+ import { StatusLevel } from '../utils';
3
+
4
+ export declare const GLASS_COLOR_OVERLAYS: {
5
+ readonly electric: {
6
+ readonly gradient: "linear-gradient(135deg, rgba(62, 60, 255, 0.15) 0%, rgba(62, 60, 255, 0.05) 100%)";
7
+ readonly accent: "#3E3CFF";
8
+ readonly border: "rgba(62, 60, 255, 0.3)";
9
+ readonly glow: "rgba(62, 60, 255, 0.4)";
10
+ };
11
+ readonly purple: {
12
+ readonly gradient: "linear-gradient(135deg, rgba(157, 112, 255, 0.15) 0%, rgba(157, 112, 255, 0.05) 100%)";
13
+ readonly accent: "#9D70FF";
14
+ readonly border: "rgba(157, 112, 255, 0.3)";
15
+ readonly glow: "rgba(157, 112, 255, 0.4)";
16
+ };
17
+ readonly prussianBlue: {
18
+ readonly gradient: "linear-gradient(135deg, rgba(27, 45, 160, 0.2) 0%, rgba(27, 45, 160, 0.08) 100%)";
19
+ readonly accent: "#1B2DA0";
20
+ readonly border: "rgba(27, 45, 160, 0.4)";
21
+ readonly glow: "rgba(27, 45, 160, 0.5)";
22
+ };
23
+ readonly cyan: {
24
+ readonly gradient: "linear-gradient(135deg, rgba(0, 212, 255, 0.12) 0%, rgba(0, 180, 220, 0.04) 100%)";
25
+ readonly accent: "#00D4FF";
26
+ readonly border: "rgba(0, 212, 255, 0.35)";
27
+ readonly glow: "rgba(0, 212, 255, 0.5)";
28
+ };
29
+ readonly teal: {
30
+ readonly gradient: "linear-gradient(135deg, rgba(45, 204, 255, 0.12) 0%, rgba(45, 204, 255, 0.04) 100%)";
31
+ readonly accent: "#2DCCFF";
32
+ readonly border: "rgba(45, 204, 255, 0.35)";
33
+ readonly glow: "rgba(45, 204, 255, 0.5)";
34
+ };
35
+ readonly dark: {
36
+ readonly gradient: "linear-gradient(135deg, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 100%)";
37
+ readonly accent: "#1a1a2e";
38
+ readonly border: "rgba(255, 255, 255, 0.1)";
39
+ readonly glow: "rgba(0, 0, 0, 0.3)";
40
+ };
41
+ readonly light: {
42
+ readonly gradient: "linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0.05) 100%)";
43
+ readonly accent: "#ffffff";
44
+ readonly border: "rgba(255, 255, 255, 0.25)";
45
+ readonly glow: "rgba(255, 255, 255, 0.3)";
46
+ };
47
+ readonly white: {
48
+ readonly gradient: "linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.08) 100%)";
49
+ readonly accent: "#ffffff";
50
+ readonly border: "rgba(255, 255, 255, 0.3)";
51
+ readonly glow: "rgba(255, 255, 255, 0.4)";
52
+ };
53
+ readonly electricLight: {
54
+ readonly gradient: "linear-gradient(135deg, rgba(107, 105, 255, 0.15) 0%, rgba(107, 105, 255, 0.05) 100%)";
55
+ readonly accent: "#6B69FF";
56
+ readonly border: "rgba(107, 105, 255, 0.3)";
57
+ readonly glow: "rgba(107, 105, 255, 0.4)";
58
+ };
59
+ readonly purpleLight: {
60
+ readonly gradient: "linear-gradient(135deg, rgba(180, 141, 255, 0.15) 0%, rgba(180, 141, 255, 0.05) 100%)";
61
+ readonly accent: "#B48DFF";
62
+ readonly border: "rgba(180, 141, 255, 0.3)";
63
+ readonly glow: "rgba(180, 141, 255, 0.4)";
64
+ };
65
+ readonly none: {
66
+ readonly gradient: "none";
67
+ readonly accent: "transparent";
68
+ readonly border: "rgba(255, 255, 255, 0.1)";
69
+ readonly glow: "transparent";
70
+ };
71
+ };
72
+ export type GlassColorOverlay = keyof typeof GLASS_COLOR_OVERLAYS;
73
+ export type GlassAccentPosition = 'top' | 'left' | 'right' | 'bottom' | 'none';
74
+ export interface GlassCardProps {
75
+ /** Card title with optional icon */
76
+ title?: React.ReactNode;
77
+ /** Subtitle text */
78
+ subtitle?: React.ReactNode;
79
+ /** Color overlay from Zendir brand palette */
80
+ colorOverlay?: GlassColorOverlay;
81
+ /** Custom color overlay (hex or rgba) */
82
+ customOverlay?: {
83
+ gradient: string;
84
+ accent: string;
85
+ border: string;
86
+ glow?: string;
87
+ };
88
+ /**
89
+ * Accent color (hex) - auto-generates overlay from this color
90
+ * Overrides colorOverlay if provided
91
+ * Can be used with CardAccentProvider: accentColor={getAccentColor(title)}
92
+ */
93
+ accentColor?: string;
94
+ /** Position of the accent line/glow */
95
+ accentPosition?: GlassAccentPosition;
96
+ /** Accent line style */
97
+ accentStyle?: 'solid' | 'gradient' | 'glow' | 'dots';
98
+ /** Header icon (rendered before title) */
99
+ icon?: React.ReactNode;
100
+ /** Header right actions (legend, buttons, etc.) */
101
+ actions?: React.ReactNode;
102
+ /** Legend items to display in header */
103
+ legend?: Array<{
104
+ label: string;
105
+ color: string;
106
+ }>;
107
+ /** Status indicator */
108
+ status?: StatusLevel;
109
+ /** Blur intensity (0-20) */
110
+ blur?: number;
111
+ /** Background opacity (0-1) */
112
+ backgroundOpacity?: number;
113
+ /** Enable glow effect on hover */
114
+ glowOnHover?: boolean;
115
+ /** Children content */
116
+ children: React.ReactNode;
117
+ /** Custom className */
118
+ className?: string;
119
+ /** Custom style */
120
+ style?: React.CSSProperties;
121
+ /** Click handler */
122
+ onClick?: () => void;
123
+ /** Full height mode */
124
+ fullHeight?: boolean;
125
+ /** Padding size */
126
+ padding?: 'none' | 'sm' | 'md' | 'lg';
127
+ }
128
+ export declare const GlassCard: React.NamedExoticComponent<GlassCardProps>;
129
+ export default GlassCard;
@@ -0,0 +1,375 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import { classNames } from "../utils/index.js";
4
+ import { useTheme } from "../theme/ThemeProvider.js";
5
+ const GLASS_COLOR_OVERLAYS = {
6
+ // Core brand colors
7
+ electric: {
8
+ gradient: "linear-gradient(135deg, rgba(62, 60, 255, 0.15) 0%, rgba(62, 60, 255, 0.05) 100%)",
9
+ accent: "#3E3CFF",
10
+ border: "rgba(62, 60, 255, 0.3)",
11
+ glow: "rgba(62, 60, 255, 0.4)"
12
+ },
13
+ purple: {
14
+ gradient: "linear-gradient(135deg, rgba(157, 112, 255, 0.15) 0%, rgba(157, 112, 255, 0.05) 100%)",
15
+ accent: "#9D70FF",
16
+ border: "rgba(157, 112, 255, 0.3)",
17
+ glow: "rgba(157, 112, 255, 0.4)"
18
+ },
19
+ prussianBlue: {
20
+ gradient: "linear-gradient(135deg, rgba(27, 45, 160, 0.2) 0%, rgba(27, 45, 160, 0.08) 100%)",
21
+ accent: "#1B2DA0",
22
+ border: "rgba(27, 45, 160, 0.4)",
23
+ glow: "rgba(27, 45, 160, 0.5)"
24
+ },
25
+ // Cyan/Teal (matching the reference image style)
26
+ cyan: {
27
+ gradient: "linear-gradient(135deg, rgba(0, 212, 255, 0.12) 0%, rgba(0, 180, 220, 0.04) 100%)",
28
+ accent: "#00D4FF",
29
+ border: "rgba(0, 212, 255, 0.35)",
30
+ glow: "rgba(0, 212, 255, 0.5)"
31
+ },
32
+ teal: {
33
+ gradient: "linear-gradient(135deg, rgba(45, 204, 255, 0.12) 0%, rgba(45, 204, 255, 0.04) 100%)",
34
+ accent: "#2DCCFF",
35
+ border: "rgba(45, 204, 255, 0.35)",
36
+ glow: "rgba(45, 204, 255, 0.5)"
37
+ },
38
+ // Neutral options
39
+ dark: {
40
+ gradient: "linear-gradient(135deg, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 100%)",
41
+ accent: "#1a1a2e",
42
+ border: "rgba(255, 255, 255, 0.1)",
43
+ glow: "rgba(0, 0, 0, 0.3)"
44
+ },
45
+ light: {
46
+ gradient: "linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0.05) 100%)",
47
+ accent: "#ffffff",
48
+ border: "rgba(255, 255, 255, 0.25)",
49
+ glow: "rgba(255, 255, 255, 0.3)"
50
+ },
51
+ white: {
52
+ gradient: "linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.08) 100%)",
53
+ accent: "#ffffff",
54
+ border: "rgba(255, 255, 255, 0.3)",
55
+ glow: "rgba(255, 255, 255, 0.4)"
56
+ },
57
+ // Additional shades
58
+ electricLight: {
59
+ gradient: "linear-gradient(135deg, rgba(107, 105, 255, 0.15) 0%, rgba(107, 105, 255, 0.05) 100%)",
60
+ accent: "#6B69FF",
61
+ border: "rgba(107, 105, 255, 0.3)",
62
+ glow: "rgba(107, 105, 255, 0.4)"
63
+ },
64
+ purpleLight: {
65
+ gradient: "linear-gradient(135deg, rgba(180, 141, 255, 0.15) 0%, rgba(180, 141, 255, 0.05) 100%)",
66
+ accent: "#B48DFF",
67
+ border: "rgba(180, 141, 255, 0.3)",
68
+ glow: "rgba(180, 141, 255, 0.4)"
69
+ },
70
+ // No overlay (transparent)
71
+ none: {
72
+ gradient: "none",
73
+ accent: "transparent",
74
+ border: "rgba(255, 255, 255, 0.1)",
75
+ glow: "transparent"
76
+ }
77
+ };
78
+ function createOverlayFromColor(color) {
79
+ const hex = color.replace("#", "");
80
+ const r = parseInt(hex.substring(0, 2), 16);
81
+ const g = parseInt(hex.substring(2, 4), 16);
82
+ const b = parseInt(hex.substring(4, 6), 16);
83
+ return {
84
+ gradient: `linear-gradient(135deg, rgba(${r}, ${g}, ${b}, 0.15) 0%, rgba(${r}, ${g}, ${b}, 0.05) 100%)`,
85
+ accent: color,
86
+ border: `rgba(${r}, ${g}, ${b}, 0.35)`,
87
+ glow: `rgba(${r}, ${g}, ${b}, 0.5)`
88
+ };
89
+ }
90
+ const GlassCard = memo(function GlassCard2({
91
+ title,
92
+ subtitle,
93
+ colorOverlay = "cyan",
94
+ customOverlay,
95
+ accentColor,
96
+ accentPosition = "top",
97
+ accentStyle = "gradient",
98
+ icon,
99
+ actions,
100
+ legend,
101
+ status,
102
+ blur = 12,
103
+ backgroundOpacity = 0.85,
104
+ glowOnHover = true,
105
+ children,
106
+ className = "",
107
+ style,
108
+ onClick,
109
+ fullHeight = false,
110
+ padding = "md"
111
+ }) {
112
+ var _a, _b, _c, _d, _e, _f;
113
+ const { tokens, mode, theme } = useTheme();
114
+ const isDark = mode === "dark";
115
+ const isTransparent = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
116
+ const isBoldVariant = theme === "transparent-bold";
117
+ const isMinimalVariant = theme === "transparent-minimal";
118
+ const showAccentStyling = isBoldVariant || isMinimalVariant || !isTransparent;
119
+ const effectiveColorOverlay = isTransparent && colorOverlay === "cyan" ? "purple" : colorOverlay;
120
+ const overlay = accentColor ? createOverlayFromColor(accentColor) : customOverlay || GLASS_COLOR_OVERLAYS[effectiveColorOverlay];
121
+ const effectiveOverlay = mode === "light" && colorOverlay === "white" && !accentColor && !customOverlay ? GLASS_COLOR_OVERLAYS.dark : overlay;
122
+ const cardBackground = isDark ? `rgba(15, 20, 35, ${backgroundOpacity})` : `rgba(255, 255, 255, ${backgroundOpacity})`;
123
+ const baseBorderColor = isDark ? effectiveOverlay.border : `rgba(100, 116, 139, 0.25)`;
124
+ const paddingConfig = {
125
+ none: "0",
126
+ sm: tokens.spacing.sm,
127
+ md: tokens.spacing.md,
128
+ lg: tokens.spacing.lg
129
+ };
130
+ const isInteractive = !!onClick;
131
+ const getAccentStyles = () => {
132
+ if (isTransparent && !showAccentStyling) {
133
+ return {};
134
+ }
135
+ if (accentPosition === "none") return {};
136
+ const accentColorValue = effectiveOverlay.accent;
137
+ const glowColor = effectiveOverlay.glow || accentColorValue;
138
+ const baseAccentStyle = {};
139
+ const positions = {
140
+ top: "borderTop",
141
+ left: "borderLeft",
142
+ right: "borderRight",
143
+ bottom: "borderBottom",
144
+ none: ""
145
+ };
146
+ const borderProp = positions[accentPosition];
147
+ if (accentStyle === "solid") {
148
+ baseAccentStyle[borderProp] = `2px solid ${accentColorValue}`;
149
+ } else if (accentStyle === "gradient" || accentStyle === "glow") {
150
+ baseAccentStyle[borderProp] = `2px solid ${accentColorValue}`;
151
+ if (accentStyle === "glow") {
152
+ baseAccentStyle.boxShadow = `0 -2px 20px ${glowColor}, 0 -1px 8px ${glowColor}`;
153
+ }
154
+ } else if (accentStyle === "dots") {
155
+ baseAccentStyle[borderProp] = `2px dotted ${accentColorValue}`;
156
+ }
157
+ return baseAccentStyle;
158
+ };
159
+ const statusColor = status ? tokens.colors.status[status] : void 0;
160
+ return /* @__PURE__ */ jsxs(
161
+ "div",
162
+ {
163
+ className: classNames("zendir-glass-card", `zendir-glass-card--${colorOverlay}`, className),
164
+ onClick,
165
+ role: isInteractive ? "button" : void 0,
166
+ tabIndex: isInteractive ? 0 : void 0,
167
+ onKeyDown: onClick ? (e) => {
168
+ if (e.key === "Enter" || e.key === " ") {
169
+ e.preventDefault();
170
+ onClick();
171
+ }
172
+ } : void 0,
173
+ style: {
174
+ position: "relative",
175
+ borderRadius: tokens.borderRadius.lg,
176
+ overflow: "hidden",
177
+ height: fullHeight ? "100%" : "auto",
178
+ display: "flex",
179
+ flexDirection: "column",
180
+ cursor: isInteractive ? "pointer" : "default",
181
+ // Glassmorphic base (theme-aware)
182
+ background: cardBackground,
183
+ backdropFilter: isTransparent ? `blur(${blur}px)` : "none",
184
+ WebkitBackdropFilter: isTransparent ? `blur(${blur}px)` : "none",
185
+ // Border with color tint (theme-aware)
186
+ border: `1px solid ${baseBorderColor}`,
187
+ // Accent positioning
188
+ ...getAccentStyles(),
189
+ // Hover glow effect
190
+ transition: "all 0.3s ease-out",
191
+ boxShadow: glowOnHover ? "none" : void 0,
192
+ ...style
193
+ },
194
+ onMouseEnter: (e) => {
195
+ if (glowOnHover && effectiveOverlay.glow) {
196
+ e.currentTarget.style.boxShadow = `0 0 30px ${effectiveOverlay.glow}, 0 4px 20px rgba(0,0,0,0.3)`;
197
+ }
198
+ },
199
+ onMouseLeave: (e) => {
200
+ if (glowOnHover) {
201
+ e.currentTarget.style.boxShadow = "none";
202
+ }
203
+ },
204
+ children: [
205
+ /* @__PURE__ */ jsx(
206
+ "div",
207
+ {
208
+ style: {
209
+ position: "absolute",
210
+ inset: 0,
211
+ background: effectiveOverlay.gradient,
212
+ pointerEvents: "none",
213
+ zIndex: 0
214
+ }
215
+ }
216
+ ),
217
+ showAccentStyling && accentPosition === "top" && accentStyle === "glow" && /* @__PURE__ */ jsx(
218
+ "div",
219
+ {
220
+ style: {
221
+ position: "absolute",
222
+ top: 0,
223
+ left: "10%",
224
+ right: "10%",
225
+ height: "2px",
226
+ background: `linear-gradient(90deg, transparent, ${effectiveOverlay.accent}, transparent)`,
227
+ boxShadow: `0 0 15px ${effectiveOverlay.glow}, 0 0 30px ${effectiveOverlay.glow}`,
228
+ zIndex: 1
229
+ }
230
+ }
231
+ ),
232
+ /* @__PURE__ */ jsxs("div", { style: { position: "relative", zIndex: 1, display: "flex", flexDirection: "column", flex: 1 }, children: [
233
+ (title || actions || legend) && /* @__PURE__ */ jsxs(
234
+ "div",
235
+ {
236
+ style: {
237
+ display: "flex",
238
+ alignItems: "center",
239
+ justifyContent: "space-between",
240
+ gap: tokens.spacing.md,
241
+ padding: `${paddingConfig[padding]} ${paddingConfig[padding]} 0`,
242
+ marginBottom: tokens.spacing.sm
243
+ },
244
+ children: [
245
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.sm }, children: [
246
+ icon && /* @__PURE__ */ jsx("span", { style: { color: effectiveOverlay.accent, display: "flex", alignItems: "center" }, children: icon }),
247
+ status && statusColor && (() => {
248
+ const s = 10;
249
+ const h = s / 2;
250
+ const glow = `drop-shadow(0 0 4px ${statusColor})`;
251
+ switch (status) {
252
+ case "critical":
253
+ return /* @__PURE__ */ jsx("svg", { width: s, height: s, viewBox: `0 0 ${s} ${s}`, style: { flexShrink: 0, filter: glow }, children: /* @__PURE__ */ jsx("polygon", { points: `${h},${s} 0,0 ${s},0`, fill: statusColor }) });
254
+ case "serious":
255
+ return /* @__PURE__ */ jsx("svg", { width: s, height: s, viewBox: `0 0 ${s} ${s}`, style: { flexShrink: 0, filter: glow }, children: /* @__PURE__ */ jsx("polygon", { points: `${h},0 ${s},${h} ${h},${s} 0,${h}`, fill: statusColor }) });
256
+ case "caution":
257
+ return /* @__PURE__ */ jsx("svg", { width: s, height: s, viewBox: `0 0 ${s} ${s}`, style: { flexShrink: 0, filter: glow }, children: /* @__PURE__ */ jsx("rect", { width: s, height: s, fill: statusColor }) });
258
+ case "standby":
259
+ return /* @__PURE__ */ jsx("svg", { width: s, height: s, viewBox: "0 0 12 12", style: { flexShrink: 0, filter: glow }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3.5", fill: "none", stroke: statusColor, strokeWidth: "2" }) });
260
+ case "off":
261
+ return /* @__PURE__ */ jsx("svg", { width: s, height: s, viewBox: "0 0 12 12", style: { flexShrink: 0, filter: glow }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3", fill: statusColor }) });
262
+ default:
263
+ return /* @__PURE__ */ jsx("svg", { width: s, height: s, viewBox: `0 0 ${s} ${s}`, style: { flexShrink: 0, filter: glow }, children: /* @__PURE__ */ jsx("circle", { cx: h, cy: h, r: h, fill: statusColor }) });
264
+ }
265
+ })(),
266
+ /* @__PURE__ */ jsxs("div", { children: [
267
+ title && /* @__PURE__ */ jsx(
268
+ "h3",
269
+ {
270
+ style: {
271
+ margin: 0,
272
+ fontSize: ((_c = (_b = (_a = tokens.layout) == null ? void 0 : _a.card) == null ? void 0 : _b.heading) == null ? void 0 : _c.titleFontSize) ?? "1.125rem",
273
+ fontWeight: ((_f = (_e = (_d = tokens.layout) == null ? void 0 : _d.card) == null ? void 0 : _e.heading) == null ? void 0 : _f.titleFontWeight) ?? 500,
274
+ color: effectiveOverlay.accent,
275
+ letterSpacing: "0.5px",
276
+ textShadow: `0 0 20px ${effectiveOverlay.glow}`
277
+ },
278
+ children: title
279
+ }
280
+ ),
281
+ subtitle && /* @__PURE__ */ jsx(
282
+ "p",
283
+ {
284
+ style: {
285
+ margin: `${tokens.spacing.xs} 0 0`,
286
+ fontSize: tokens.typography.body[3].fontSize,
287
+ color: tokens.colors.text.secondary
288
+ },
289
+ children: subtitle
290
+ }
291
+ )
292
+ ] })
293
+ ] }),
294
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.md }, children: [
295
+ legend && legend.length > 0 && /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.md }, children: legend.map((item, idx) => /* @__PURE__ */ jsxs(
296
+ "div",
297
+ {
298
+ style: {
299
+ display: "flex",
300
+ alignItems: "center",
301
+ gap: tokens.spacing.xs
302
+ },
303
+ children: [
304
+ /* @__PURE__ */ jsx(
305
+ "span",
306
+ {
307
+ style: {
308
+ width: "8px",
309
+ height: "8px",
310
+ borderRadius: "2px",
311
+ backgroundColor: item.color
312
+ }
313
+ }
314
+ ),
315
+ /* @__PURE__ */ jsx(
316
+ "span",
317
+ {
318
+ style: {
319
+ fontSize: tokens.typography.body[3].fontSize,
320
+ color: tokens.colors.text.secondary
321
+ },
322
+ children: item.label
323
+ }
324
+ )
325
+ ]
326
+ },
327
+ idx
328
+ )) }),
329
+ actions && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: tokens.spacing.xs }, children: actions })
330
+ ] })
331
+ ]
332
+ }
333
+ ),
334
+ showAccentStyling && accentPosition === "top" && /* @__PURE__ */ jsx(
335
+ "div",
336
+ {
337
+ style: {
338
+ display: "flex",
339
+ alignItems: "center",
340
+ padding: `0 ${paddingConfig[padding]}`,
341
+ marginBottom: tokens.spacing.sm
342
+ },
343
+ children: /* @__PURE__ */ jsx(
344
+ "div",
345
+ {
346
+ style: {
347
+ flex: 1,
348
+ height: "2px",
349
+ background: `linear-gradient(90deg, ${effectiveOverlay.accent} 0%, ${effectiveOverlay.accent}60 70%, ${effectiveOverlay.accent}20 100%)`,
350
+ boxShadow: `0 0 6px ${effectiveOverlay.accent}40`
351
+ }
352
+ }
353
+ )
354
+ }
355
+ ),
356
+ /* @__PURE__ */ jsx(
357
+ "div",
358
+ {
359
+ style: {
360
+ flex: 1,
361
+ padding: title ? `0 ${paddingConfig[padding]} ${paddingConfig[padding]}` : paddingConfig[padding]
362
+ },
363
+ children
364
+ }
365
+ )
366
+ ] })
367
+ ]
368
+ }
369
+ );
370
+ });
371
+ export {
372
+ GLASS_COLOR_OVERLAYS,
373
+ GlassCard
374
+ };
375
+ //# sourceMappingURL=GlassCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlassCard.js","sources":["../../../src/react/core/GlassCard.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - GlassCard Component\r\n * \r\n * Glassmorphic card component with transparent blur backgrounds,\r\n * gradient overlays, and Zendir brand color accent system.\r\n * \r\n * Inspired by AstroUXDS radar chart styling with modern glassmorphism.\r\n * \r\n * @example\r\n * ```tsx\r\n * <GlassCard title=\"Radar Chart 001\" colorOverlay=\"electric\">\r\n * <RadarChart data={data} />\r\n * </GlassCard>\r\n * \r\n * <GlassCard title=\"System Status\" colorOverlay=\"purple\" accentPosition=\"top\">\r\n * <StatusContent />\r\n * </GlassCard>\r\n * ```\r\n */\r\n\r\nimport React, { memo } from 'react';\r\nimport { useTheme } from '../theme';\r\nimport { classNames, type StatusLevel } from '../utils';\r\n\r\n// =============================================================================\r\n// Zendir Brand Color Palette for Glass Overlays\r\n// =============================================================================\r\n\r\nexport const GLASS_COLOR_OVERLAYS = {\r\n // Core brand colors\r\n electric: {\r\n gradient: 'linear-gradient(135deg, rgba(62, 60, 255, 0.15) 0%, rgba(62, 60, 255, 0.05) 100%)',\r\n accent: '#3E3CFF',\r\n border: 'rgba(62, 60, 255, 0.3)',\r\n glow: 'rgba(62, 60, 255, 0.4)',\r\n },\r\n purple: {\r\n gradient: 'linear-gradient(135deg, rgba(157, 112, 255, 0.15) 0%, rgba(157, 112, 255, 0.05) 100%)',\r\n accent: '#9D70FF',\r\n border: 'rgba(157, 112, 255, 0.3)',\r\n glow: 'rgba(157, 112, 255, 0.4)',\r\n },\r\n prussianBlue: {\r\n gradient: 'linear-gradient(135deg, rgba(27, 45, 160, 0.2) 0%, rgba(27, 45, 160, 0.08) 100%)',\r\n accent: '#1B2DA0',\r\n border: 'rgba(27, 45, 160, 0.4)',\r\n glow: 'rgba(27, 45, 160, 0.5)',\r\n },\r\n \r\n // Cyan/Teal (matching the reference image style)\r\n cyan: {\r\n gradient: 'linear-gradient(135deg, rgba(0, 212, 255, 0.12) 0%, rgba(0, 180, 220, 0.04) 100%)',\r\n accent: '#00D4FF',\r\n border: 'rgba(0, 212, 255, 0.35)',\r\n glow: 'rgba(0, 212, 255, 0.5)',\r\n },\r\n teal: {\r\n gradient: 'linear-gradient(135deg, rgba(45, 204, 255, 0.12) 0%, rgba(45, 204, 255, 0.04) 100%)',\r\n accent: '#2DCCFF',\r\n border: 'rgba(45, 204, 255, 0.35)',\r\n glow: 'rgba(45, 204, 255, 0.5)',\r\n },\r\n \r\n // Neutral options\r\n dark: {\r\n gradient: 'linear-gradient(135deg, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.2) 100%)',\r\n accent: '#1a1a2e',\r\n border: 'rgba(255, 255, 255, 0.1)',\r\n glow: 'rgba(0, 0, 0, 0.3)',\r\n },\r\n light: {\r\n gradient: 'linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0.05) 100%)',\r\n accent: '#ffffff',\r\n border: 'rgba(255, 255, 255, 0.25)',\r\n glow: 'rgba(255, 255, 255, 0.3)',\r\n },\r\n white: {\r\n gradient: 'linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.08) 100%)',\r\n accent: '#ffffff',\r\n border: 'rgba(255, 255, 255, 0.3)',\r\n glow: 'rgba(255, 255, 255, 0.4)',\r\n },\r\n \r\n // Additional shades\r\n electricLight: {\r\n gradient: 'linear-gradient(135deg, rgba(107, 105, 255, 0.15) 0%, rgba(107, 105, 255, 0.05) 100%)',\r\n accent: '#6B69FF',\r\n border: 'rgba(107, 105, 255, 0.3)',\r\n glow: 'rgba(107, 105, 255, 0.4)',\r\n },\r\n purpleLight: {\r\n gradient: 'linear-gradient(135deg, rgba(180, 141, 255, 0.15) 0%, rgba(180, 141, 255, 0.05) 100%)',\r\n accent: '#B48DFF',\r\n border: 'rgba(180, 141, 255, 0.3)',\r\n glow: 'rgba(180, 141, 255, 0.4)',\r\n },\r\n \r\n // No overlay (transparent)\r\n none: {\r\n gradient: 'none',\r\n accent: 'transparent',\r\n border: 'rgba(255, 255, 255, 0.1)',\r\n glow: 'transparent',\r\n },\r\n} as const;\r\n\r\nexport type GlassColorOverlay = keyof typeof GLASS_COLOR_OVERLAYS;\r\n\r\nexport type GlassAccentPosition = 'top' | 'left' | 'right' | 'bottom' | 'none';\r\n\r\nexport interface GlassCardProps {\r\n /** Card title with optional icon */\r\n title?: React.ReactNode;\r\n /** Subtitle text */\r\n subtitle?: React.ReactNode;\r\n /** Color overlay from Zendir brand palette */\r\n colorOverlay?: GlassColorOverlay;\r\n /** Custom color overlay (hex or rgba) */\r\n customOverlay?: {\r\n gradient: string;\r\n accent: string;\r\n border: string;\r\n glow?: string;\r\n };\r\n /** \r\n * Accent color (hex) - auto-generates overlay from this color\r\n * Overrides colorOverlay if provided\r\n * Can be used with CardAccentProvider: accentColor={getAccentColor(title)}\r\n */\r\n accentColor?: string;\r\n /** Position of the accent line/glow */\r\n accentPosition?: GlassAccentPosition;\r\n /** Accent line style */\r\n accentStyle?: 'solid' | 'gradient' | 'glow' | 'dots';\r\n /** Header icon (rendered before title) */\r\n icon?: React.ReactNode;\r\n /** Header right actions (legend, buttons, etc.) */\r\n actions?: React.ReactNode;\r\n /** Legend items to display in header */\r\n legend?: Array<{ label: string; color: string }>;\r\n /** Status indicator */\r\n status?: StatusLevel;\r\n /** Blur intensity (0-20) */\r\n blur?: number;\r\n /** Background opacity (0-1) */\r\n backgroundOpacity?: number;\r\n /** Enable glow effect on hover */\r\n glowOnHover?: boolean;\r\n /** Children content */\r\n children: React.ReactNode;\r\n /** Custom className */\r\n className?: string;\r\n /** Custom style */\r\n style?: React.CSSProperties;\r\n /** Click handler */\r\n onClick?: () => void;\r\n /** Full height mode */\r\n fullHeight?: boolean;\r\n /** Padding size */\r\n padding?: 'none' | 'sm' | 'md' | 'lg';\r\n}\r\n\r\n/**\r\n * GlassCard - Glassmorphic card with Zendir brand styling\r\n * \r\n * Features:\r\n * - Transparent blur background\r\n * - Gradient color overlays\r\n * - Accent lines with glow effects\r\n * - Legend support for charts\r\n * - Customizable via props or custom overlay object\r\n */\r\n/**\r\n * Create overlay from accent color hex\r\n */\r\nfunction createOverlayFromColor(color: string) {\r\n // Extract RGB from hex\r\n const hex = color.replace('#', '');\r\n const r = parseInt(hex.substring(0, 2), 16);\r\n const g = parseInt(hex.substring(2, 4), 16);\r\n const b = parseInt(hex.substring(4, 6), 16);\r\n \r\n return {\r\n gradient: `linear-gradient(135deg, rgba(${r}, ${g}, ${b}, 0.15) 0%, rgba(${r}, ${g}, ${b}, 0.05) 100%)`,\r\n accent: color,\r\n border: `rgba(${r}, ${g}, ${b}, 0.35)`,\r\n glow: `rgba(${r}, ${g}, ${b}, 0.5)`,\r\n };\r\n}\r\n\r\nexport const GlassCard = memo(function GlassCard({\r\n title,\r\n subtitle,\r\n colorOverlay = 'cyan',\r\n customOverlay,\r\n accentColor,\r\n accentPosition = 'top',\r\n accentStyle = 'gradient',\r\n icon,\r\n actions,\r\n legend,\r\n status,\r\n blur = 12,\r\n backgroundOpacity = 0.85,\r\n glowOnHover = true,\r\n children,\r\n className = '',\r\n style,\r\n onClick,\r\n fullHeight = false,\r\n padding = 'md',\r\n}: GlassCardProps): React.ReactElement {\r\n const { tokens, mode, theme } = useTheme();\r\n const isDark = mode === 'dark';\r\n const isTransparent = theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\r\n const isBoldVariant = theme === 'transparent-bold';\r\n const isMinimalVariant = theme === 'transparent-minimal';\r\n \r\n // Accent styling only for Bold/Minimal themes (or when position explicitly set for non-transparent)\r\n const showAccentStyling = isBoldVariant || isMinimalVariant || !isTransparent;\r\n \r\n // For all transparent themes, default to purple (Zendir accent) instead of cyan\r\n const effectiveColorOverlay = isTransparent && colorOverlay === 'cyan' ? 'purple' : colorOverlay;\r\n \r\n // Get overlay colors (priority: accentColor > customOverlay > colorOverlay)\r\n const overlay = accentColor \r\n ? createOverlayFromColor(accentColor)\r\n : customOverlay || GLASS_COLOR_OVERLAYS[effectiveColorOverlay];\r\n \r\n // Auto-switch to light token for 'white' overlay in light mode\r\n const effectiveOverlay = mode === 'light' && colorOverlay === 'white' && !accentColor && !customOverlay\r\n ? GLASS_COLOR_OVERLAYS.dark\r\n : overlay;\r\n \r\n // Theme-aware background colors\r\n const cardBackground = isDark\r\n ? `rgba(15, 20, 35, ${backgroundOpacity})`\r\n : `rgba(255, 255, 255, ${backgroundOpacity})`;\r\n \r\n // Theme-aware border colors\r\n const baseBorderColor = isDark\r\n ? effectiveOverlay.border\r\n : `rgba(100, 116, 139, 0.25)`;\r\n \r\n const paddingConfig = {\r\n none: '0',\r\n sm: tokens.spacing.sm,\r\n md: tokens.spacing.md,\r\n lg: tokens.spacing.lg,\r\n };\r\n \r\n const isInteractive = !!onClick;\r\n \r\n // Accent line styles based on position and style\r\n // Only show accent styling for Bold/Minimal themes (or non-transparent themes)\r\n const getAccentStyles = (): React.CSSProperties => {\r\n // For normal Glass theme, use subtle muted border instead of colored accent\r\n if (isTransparent && !showAccentStyling) {\r\n return {};\r\n }\r\n \r\n if (accentPosition === 'none') return {};\r\n \r\n const accentColorValue = effectiveOverlay.accent;\r\n const glowColor = effectiveOverlay.glow || accentColorValue;\r\n \r\n const baseAccentStyle: React.CSSProperties = {};\r\n \r\n // Position-based border\r\n const positions: Record<GlassAccentPosition, string> = {\r\n top: 'borderTop',\r\n left: 'borderLeft',\r\n right: 'borderRight',\r\n bottom: 'borderBottom',\r\n none: '',\r\n };\r\n \r\n const borderProp = positions[accentPosition] as keyof React.CSSProperties;\r\n \r\n if (accentStyle === 'solid') {\r\n (baseAccentStyle as any)[borderProp] = `2px solid ${accentColorValue}`;\r\n } else if (accentStyle === 'gradient' || accentStyle === 'glow') {\r\n // Using pseudo-element for gradient, so just set position indicator\r\n (baseAccentStyle as any)[borderProp] = `2px solid ${accentColorValue}`;\r\n if (accentStyle === 'glow') {\r\n baseAccentStyle.boxShadow = `0 -2px 20px ${glowColor}, 0 -1px 8px ${glowColor}`;\r\n }\r\n } else if (accentStyle === 'dots') {\r\n (baseAccentStyle as any)[borderProp] = `2px dotted ${accentColorValue}`;\r\n }\r\n \r\n return baseAccentStyle;\r\n };\r\n \r\n // Status color\r\n const statusColor = status ? tokens.colors.status[status] : undefined;\r\n \r\n return (\r\n <div\r\n className={classNames('zendir-glass-card', `zendir-glass-card--${colorOverlay}`, className)}\r\n onClick={onClick}\r\n role={isInteractive ? 'button' : undefined}\r\n tabIndex={isInteractive ? 0 : undefined}\r\n onKeyDown={onClick ? (e: React.KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onClick(); } } : undefined}\r\n style={{\r\n position: 'relative',\r\n borderRadius: tokens.borderRadius.lg,\r\n overflow: 'hidden',\r\n height: fullHeight ? '100%' : 'auto',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n cursor: isInteractive ? 'pointer' : 'default',\r\n \r\n // Glassmorphic base (theme-aware)\r\n background: cardBackground,\r\n backdropFilter: isTransparent ? `blur(${blur}px)` : 'none',\r\n WebkitBackdropFilter: isTransparent ? `blur(${blur}px)` : 'none',\r\n \r\n // Border with color tint (theme-aware)\r\n border: `1px solid ${baseBorderColor}`,\r\n \r\n // Accent positioning\r\n ...getAccentStyles(),\r\n \r\n // Hover glow effect\r\n transition: 'all 0.3s ease-out',\r\n boxShadow: glowOnHover ? 'none' : undefined,\r\n \r\n ...style,\r\n }}\r\n onMouseEnter={(e) => {\r\n if (glowOnHover && effectiveOverlay.glow) {\r\n e.currentTarget.style.boxShadow = `0 0 30px ${effectiveOverlay.glow}, 0 4px 20px rgba(0,0,0,0.3)`;\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (glowOnHover) {\r\n e.currentTarget.style.boxShadow = 'none';\r\n }\r\n }}\r\n >\r\n {/* Gradient overlay layer */}\r\n <div\r\n style={{\r\n position: 'absolute',\r\n inset: 0,\r\n background: effectiveOverlay.gradient,\r\n pointerEvents: 'none',\r\n zIndex: 0,\r\n }}\r\n />\r\n \r\n {/* Accent glow line (top) - only for Bold/Minimal themes */}\r\n {showAccentStyling && accentPosition === 'top' && accentStyle === 'glow' && (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: '10%',\r\n right: '10%',\r\n height: '2px',\r\n background: `linear-gradient(90deg, transparent, ${effectiveOverlay.accent}, transparent)`,\r\n boxShadow: `0 0 15px ${effectiveOverlay.glow}, 0 0 30px ${effectiveOverlay.glow}`,\r\n zIndex: 1,\r\n }}\r\n />\r\n )}\r\n \r\n {/* Content wrapper */}\r\n <div style={{ position: 'relative', zIndex: 1, display: 'flex', flexDirection: 'column', flex: 1 }}>\r\n {/* Header */}\r\n {(title || actions || legend) && (\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: tokens.spacing.md,\r\n padding: `${paddingConfig[padding]} ${paddingConfig[padding]} 0`,\r\n marginBottom: tokens.spacing.sm,\r\n }}\r\n >\r\n {/* Title section */}\r\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.sm }}>\r\n {/* Icon */}\r\n {icon && (\r\n <span style={{ color: effectiveOverlay.accent, display: 'flex', alignItems: 'center' }}>\r\n {icon}\r\n </span>\r\n )}\r\n \r\n {/* Status shape — Astro UX dual-coded */}\r\n {status && statusColor && (() => {\r\n const s = 10;\r\n const h = s / 2;\r\n const glow = `drop-shadow(0 0 4px ${statusColor})`;\r\n switch (status) {\r\n case 'critical':\r\n return (\r\n <svg width={s} height={s} viewBox={`0 0 ${s} ${s}`} style={{ flexShrink: 0, filter: glow }}>\r\n <polygon points={`${h},${s} 0,0 ${s},0`} fill={statusColor} />\r\n </svg>\r\n );\r\n case 'serious':\r\n return (\r\n <svg width={s} height={s} viewBox={`0 0 ${s} ${s}`} style={{ flexShrink: 0, filter: glow }}>\r\n <polygon points={`${h},0 ${s},${h} ${h},${s} 0,${h}`} fill={statusColor} />\r\n </svg>\r\n );\r\n case 'caution':\r\n return (\r\n <svg width={s} height={s} viewBox={`0 0 ${s} ${s}`} style={{ flexShrink: 0, filter: glow }}>\r\n <rect width={s} height={s} fill={statusColor} />\r\n </svg>\r\n );\r\n case 'standby':\r\n return (\r\n <svg width={s} height={s} viewBox=\"0 0 12 12\" style={{ flexShrink: 0, filter: glow }}>\r\n <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={statusColor} strokeWidth=\"2\" />\r\n </svg>\r\n );\r\n case 'off':\r\n return (\r\n <svg width={s} height={s} viewBox=\"0 0 12 12\" style={{ flexShrink: 0, filter: glow }}>\r\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill={statusColor} />\r\n </svg>\r\n );\r\n default: // normal\r\n return (\r\n <svg width={s} height={s} viewBox={`0 0 ${s} ${s}`} style={{ flexShrink: 0, filter: glow }}>\r\n <circle cx={h} cy={h} r={h} fill={statusColor} />\r\n </svg>\r\n );\r\n }\r\n })()}\r\n \r\n {/* Title text — card heading system */}\r\n <div>\r\n {title && (\r\n <h3\r\n style={{\r\n margin: 0,\r\n fontSize: tokens.layout?.card?.heading?.titleFontSize ?? '1.125rem',\r\n fontWeight: tokens.layout?.card?.heading?.titleFontWeight ?? 500,\r\n color: effectiveOverlay.accent,\r\n letterSpacing: '0.5px',\r\n textShadow: `0 0 20px ${effectiveOverlay.glow}`,\r\n }}\r\n >\r\n {title}\r\n </h3>\r\n )}\r\n {subtitle && (\r\n <p\r\n style={{\r\n margin: `${tokens.spacing.xs} 0 0`,\r\n fontSize: tokens.typography.body[3].fontSize,\r\n color: tokens.colors.text.secondary,\r\n }}\r\n >\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n \r\n {/* Right section: legend + actions */}\r\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.md }}>\r\n {/* Legend items */}\r\n {legend && legend.length > 0 && (\r\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.md }}>\r\n {legend.map((item, idx) => (\r\n <div\r\n key={idx}\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.xs,\r\n }}\r\n >\r\n <span\r\n style={{\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '2px',\r\n backgroundColor: item.color,\r\n }}\r\n />\r\n <span\r\n style={{\r\n fontSize: tokens.typography.body[3].fontSize,\r\n color: tokens.colors.text.secondary,\r\n }}\r\n >\r\n {item.label}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n \r\n {/* Actions */}\r\n {actions && (\r\n <div style={{ display: 'flex', gap: tokens.spacing.xs }}>\r\n {actions}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n \r\n {/* Accent line - only for Bold/Minimal themes (no decorative dashes) */}\r\n {showAccentStyling && accentPosition === 'top' && (\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: `0 ${paddingConfig[padding]}`,\r\n marginBottom: tokens.spacing.sm,\r\n }}\r\n >\r\n {/* Clean accent line with smooth gradient */}\r\n <div\r\n style={{\r\n flex: 1,\r\n height: '2px',\r\n background: `linear-gradient(90deg, ${effectiveOverlay.accent} 0%, ${effectiveOverlay.accent}60 70%, ${effectiveOverlay.accent}20 100%)`,\r\n boxShadow: `0 0 6px ${effectiveOverlay.accent}40`,\r\n }}\r\n />\r\n </div>\r\n )}\r\n \r\n {/* Content */}\r\n <div\r\n style={{\r\n flex: 1,\r\n padding: title ? `0 ${paddingConfig[padding]} ${paddingConfig[padding]}` : paddingConfig[padding],\r\n }}\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nexport default GlassCard;\r\n"],"names":["GlassCard"],"mappings":";;;;AA4BO,MAAM,uBAAuB;AAAA;AAAA,EAElC,UAAU;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,eAAe;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAEV;AAuEA,SAAS,uBAAuB,OAAe;AAE7C,QAAM,MAAM,MAAM,QAAQ,KAAK,EAAE;AACjC,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;AAC1C,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;AAC1C,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;AAE1C,SAAO;AAAA,IACL,UAAU,gCAAgC,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,IACxF,QAAQ;AAAA,IACR,QAAQ,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,IAC7B,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,EAAA;AAE/B;AAEO,MAAM,YAAY,KAAK,SAASA,WAAU;AAAA,EAC/C;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,UAAU;AACZ,GAAuC;;AACrC,QAAM,EAAE,QAAQ,MAAM,MAAA,IAAU,SAAA;AAChC,QAAM,SAAS,SAAS;AACxB,QAAM,gBAAgB,UAAU,iBAAiB,UAAU,sBAAsB,UAAU;AAC3F,QAAM,gBAAgB,UAAU;AAChC,QAAM,mBAAmB,UAAU;AAGnC,QAAM,oBAAoB,iBAAiB,oBAAoB,CAAC;AAGhE,QAAM,wBAAwB,iBAAiB,iBAAiB,SAAS,WAAW;AAGpF,QAAM,UAAU,cACZ,uBAAuB,WAAW,IAClC,iBAAiB,qBAAqB,qBAAqB;AAG/D,QAAM,mBAAmB,SAAS,WAAW,iBAAiB,WAAW,CAAC,eAAe,CAAC,gBACtF,qBAAqB,OACrB;AAGJ,QAAM,iBAAiB,SACnB,oBAAoB,iBAAiB,MACrC,uBAAuB,iBAAiB;AAG5C,QAAM,kBAAkB,SACpB,iBAAiB,SACjB;AAEJ,QAAM,gBAAgB;AAAA,IACpB,MAAM;AAAA,IACN,IAAI,OAAO,QAAQ;AAAA,IACnB,IAAI,OAAO,QAAQ;AAAA,IACnB,IAAI,OAAO,QAAQ;AAAA,EAAA;AAGrB,QAAM,gBAAgB,CAAC,CAAC;AAIxB,QAAM,kBAAkB,MAA2B;AAEjD,QAAI,iBAAiB,CAAC,mBAAmB;AACvC,aAAO,CAAA;AAAA,IACT;AAEA,QAAI,mBAAmB,OAAQ,QAAO,CAAA;AAEtC,UAAM,mBAAmB,iBAAiB;AAC1C,UAAM,YAAY,iBAAiB,QAAQ;AAE3C,UAAM,kBAAuC,CAAA;AAG7C,UAAM,YAAiD;AAAA,MACrD,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAGR,UAAM,aAAa,UAAU,cAAc;AAE3C,QAAI,gBAAgB,SAAS;AAC1B,sBAAwB,UAAU,IAAI,aAAa,gBAAgB;AAAA,IACtE,WAAW,gBAAgB,cAAc,gBAAgB,QAAQ;AAE9D,sBAAwB,UAAU,IAAI,aAAa,gBAAgB;AACpE,UAAI,gBAAgB,QAAQ;AAC1B,wBAAgB,YAAY,eAAe,SAAS,gBAAgB,SAAS;AAAA,MAC/E;AAAA,IACF,WAAW,gBAAgB,QAAQ;AAChC,sBAAwB,UAAU,IAAI,cAAc,gBAAgB;AAAA,IACvE;AAEA,WAAO;AAAA,EACT;AAGA,QAAM,cAAc,SAAS,OAAO,OAAO,OAAO,MAAM,IAAI;AAE5D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,qBAAqB,sBAAsB,YAAY,IAAI,SAAS;AAAA,MAC1F;AAAA,MACA,MAAM,gBAAgB,WAAW;AAAA,MACjC,UAAU,gBAAgB,IAAI;AAAA,MAC9B,WAAW,UAAU,CAAC,MAA2B;AAAE,YAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AAAE,YAAE,eAAA;AAAkB,kBAAA;AAAA,QAAW;AAAA,MAAE,IAAI;AAAA,MAClI,OAAO;AAAA,QACL,UAAU;AAAA,QACV,cAAc,OAAO,aAAa;AAAA,QAClC,UAAU;AAAA,QACV,QAAQ,aAAa,SAAS;AAAA,QAC9B,SAAS;AAAA,QACT,eAAe;AAAA,QACf,QAAQ,gBAAgB,YAAY;AAAA;AAAA,QAGpC,YAAY;AAAA,QACZ,gBAAgB,gBAAgB,QAAQ,IAAI,QAAQ;AAAA,QACpD,sBAAsB,gBAAgB,QAAQ,IAAI,QAAQ;AAAA;AAAA,QAG1D,QAAQ,aAAa,eAAe;AAAA;AAAA,QAGpC,GAAG,gBAAA;AAAA;AAAA,QAGH,YAAY;AAAA,QACZ,WAAW,cAAc,SAAS;AAAA,QAElC,GAAG;AAAA,MAAA;AAAA,MAEL,cAAc,CAAC,MAAM;AACnB,YAAI,eAAe,iBAAiB,MAAM;AACxC,YAAE,cAAc,MAAM,YAAY,YAAY,iBAAiB,IAAI;AAAA,QACrE;AAAA,MACF;AAAA,MACA,cAAc,CAAC,MAAM;AACnB,YAAI,aAAa;AACf,YAAE,cAAc,MAAM,YAAY;AAAA,QACpC;AAAA,MACF;AAAA,MAGA,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU;AAAA,cACV,OAAO;AAAA,cACP,YAAY,iBAAiB;AAAA,cAC7B,eAAe;AAAA,cACf,QAAQ;AAAA,YAAA;AAAA,UACV;AAAA,QAAA;AAAA,QAID,qBAAqB,mBAAmB,SAAS,gBAAgB,UAChE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU;AAAA,cACV,KAAK;AAAA,cACL,MAAM;AAAA,cACN,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,YAAY,uCAAuC,iBAAiB,MAAM;AAAA,cAC1E,WAAW,YAAY,iBAAiB,IAAI,cAAc,iBAAiB,IAAI;AAAA,cAC/E,QAAQ;AAAA,YAAA;AAAA,UACV;AAAA,QAAA;AAAA,QAKJ,qBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,QAAQ,GAAG,SAAS,QAAQ,eAAe,UAAU,MAAM,KAE3F,UAAA;AAAA,WAAA,SAAS,WAAW,WACpB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,gBAAgB;AAAA,gBAChB,KAAK,OAAO,QAAQ;AAAA,gBACpB,SAAS,GAAG,cAAc,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC;AAAA,gBAC5D,cAAc,OAAO,QAAQ;AAAA,cAAA;AAAA,cAI/B,UAAA;AAAA,gBAAA,qBAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,QAAQ,GAAA,GAEtE,UAAA;AAAA,kBAAA,QACC,oBAAC,QAAA,EAAK,OAAO,EAAE,OAAO,iBAAiB,QAAQ,SAAS,QAAQ,YAAY,SAAA,GACzE,UAAA,MACH;AAAA,kBAID,UAAU,gBAAgB,MAAM;AAC/B,0BAAM,IAAI;AACV,0BAAM,IAAI,IAAI;AACd,0BAAM,OAAO,uBAAuB,WAAW;AAC/C,4BAAQ,QAAA;AAAA,sBACN,KAAK;AACH,+BACE,oBAAC,OAAA,EAAI,OAAO,GAAG,QAAQ,GAAG,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,YAAY,GAAG,QAAQ,KAAA,GAClF,UAAA,oBAAC,WAAA,EAAQ,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAM,aAAa,GAC9D;AAAA,sBAEJ,KAAK;AACH,mDACG,OAAA,EAAI,OAAO,GAAG,QAAQ,GAAG,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,YAAY,GAAG,QAAQ,QAClF,UAAA,oBAAC,aAAQ,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,aAAa,GAC3E;AAAA,sBAEJ,KAAK;AACH,+BACE,oBAAC,OAAA,EAAI,OAAO,GAAG,QAAQ,GAAG,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,YAAY,GAAG,QAAQ,KAAA,GAClF,UAAA,oBAAC,QAAA,EAAK,OAAO,GAAG,QAAQ,GAAG,MAAM,YAAA,CAAa,EAAA,CAChD;AAAA,sBAEJ,KAAK;AACH,+BACE,oBAAC,OAAA,EAAI,OAAO,GAAG,QAAQ,GAAG,SAAQ,aAAY,OAAO,EAAE,YAAY,GAAG,QAAQ,QAC5E,UAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,OAAM,MAAK,QAAO,QAAQ,aAAa,aAAY,KAAI,GACjF;AAAA,sBAEJ,KAAK;AACH,+BACE,oBAAC,OAAA,EAAI,OAAO,GAAG,QAAQ,GAAG,SAAQ,aAAY,OAAO,EAAE,YAAY,GAAG,QAAQ,KAAA,GAC5E,UAAA,oBAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAM,YAAA,CAAa,EAAA,CACjD;AAAA,sBAEJ;AACE,+BACE,oBAAC,OAAA,EAAI,OAAO,GAAG,QAAQ,GAAG,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,YAAY,GAAG,QAAQ,KAAA,GAClF,UAAA,oBAAC,UAAA,EAAO,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,aAAa,GACjD;AAAA,oBAAA;AAAA,kBAGR,GAAA;AAAA,uCAGC,OAAA,EACE,UAAA;AAAA,oBAAA,SACC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,QAAQ;AAAA,0BACR,YAAU,wBAAO,WAAP,mBAAe,SAAf,mBAAqB,YAArB,mBAA8B,kBAAiB;AAAA,0BACzD,cAAY,wBAAO,WAAP,mBAAe,SAAf,mBAAqB,YAArB,mBAA8B,oBAAmB;AAAA,0BAC7D,OAAO,iBAAiB;AAAA,0BACxB,eAAe;AAAA,0BACf,YAAY,YAAY,iBAAiB,IAAI;AAAA,wBAAA;AAAA,wBAG9C,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGJ,YACC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,QAAQ,GAAG,OAAO,QAAQ,EAAE;AAAA,0BAC5B,UAAU,OAAO,WAAW,KAAK,CAAC,EAAE;AAAA,0BACpC,OAAO,OAAO,OAAO,KAAK;AAAA,wBAAA;AAAA,wBAG3B,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH,EAAA,CAEJ;AAAA,gBAAA,GACF;AAAA,gBAGA,qBAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,QAAQ,GAAA,GAEtE,UAAA;AAAA,kBAAA,UAAU,OAAO,SAAS,KACzB,oBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,QAAQ,MACtE,iBAAO,IAAI,CAAC,MAAM,QACjB;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,OAAO;AAAA,wBACL,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,KAAK,OAAO,QAAQ;AAAA,sBAAA;AAAA,sBAGtB,UAAA;AAAA,wBAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAO;AAAA,8BACL,OAAO;AAAA,8BACP,QAAQ;AAAA,8BACR,cAAc;AAAA,8BACd,iBAAiB,KAAK;AAAA,4BAAA;AAAA,0BACxB;AAAA,wBAAA;AAAA,wBAEF;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAO;AAAA,8BACL,UAAU,OAAO,WAAW,KAAK,CAAC,EAAE;AAAA,8BACpC,OAAO,OAAO,OAAO,KAAK;AAAA,4BAAA;AAAA,4BAG3B,UAAA,KAAK;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACR;AAAA,oBAAA;AAAA,oBAtBK;AAAA,kBAAA,CAwBR,GACH;AAAA,kBAID,WACC,oBAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,QAAQ,GAAA,GAChD,UAAA,QAAA,CACH;AAAA,gBAAA,EAAA,CAEJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKH,qBAAqB,mBAAmB,SACvC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,SAAS,KAAK,cAAc,OAAO,CAAC;AAAA,gBACpC,cAAc,OAAO,QAAQ;AAAA,cAAA;AAAA,cAI/B,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,QAAQ;AAAA,oBACR,YAAY,0BAA0B,iBAAiB,MAAM,QAAQ,iBAAiB,MAAM,WAAW,iBAAiB,MAAM;AAAA,oBAC9H,WAAW,WAAW,iBAAiB,MAAM;AAAA,kBAAA;AAAA,gBAC/C;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAKJ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN,SAAS,QAAQ,KAAK,cAAc,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC,KAAK,cAAc,OAAO;AAAA,cAAA;AAAA,cAGjG;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
@@ -0,0 +1,39 @@
1
+ import { default as React } from 'react';
2
+ import { StatusLevel } from '../utils';
3
+ import { AstroIconName } from './AstroIcon';
4
+
5
+ export interface HeaderIconWithStatusProps {
6
+ /** Astro icon name */
7
+ icon: AstroIconName | string;
8
+ /** Icon size in pixels */
9
+ size?: number;
10
+ /** Status level */
11
+ status: StatusLevel;
12
+ /** Custom status color (optional - defaults to theme status color) */
13
+ statusColor?: string;
14
+ /** Override light theme detection */
15
+ isLightTheme?: boolean;
16
+ /** Additional CSS class */
17
+ className?: string;
18
+ /** Additional inline styles */
19
+ style?: React.CSSProperties;
20
+ }
21
+ /**
22
+ * HeaderIconWithStatus - Card/Chart header icon with status indicator
23
+ *
24
+ * Follows MonitoringIcon pattern exactly:
25
+ * - Icon colored by status
26
+ * - Status symbol at top-left with transform offset
27
+ * - Glow in dark mode, border in light mode
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <HeaderIconWithStatus
32
+ * icon="satellite-transmit"
33
+ * status="normal"
34
+ * size={24}
35
+ * />
36
+ * ```
37
+ */
38
+ export declare const HeaderIconWithStatus: React.NamedExoticComponent<HeaderIconWithStatusProps>;
39
+ export default HeaderIconWithStatus;