@zendir/ui 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +419 -386
  2. package/README.md +640 -631
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/index.js +17 -221
  5. package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
  6. package/dist/react/3d/CesiumCaptureSource.js +364 -283
  7. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  8. package/dist/react/3d/ZenSpace3D.d.ts +2 -3
  9. package/dist/react/3d/ZenSpace3D.js +1681 -1237
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -1
  11. package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
  12. package/dist/react/3d/ZenSpace3DCesium.js +513 -560
  13. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
  14. package/dist/react/3d/ZenSpace3DShaders.js +61 -66
  15. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
  16. package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
  17. package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
  18. package/dist/react/3d/ZenSpace3DUtils.js +37 -24
  19. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  20. package/dist/react/3d/capturePngAnalysis.js +42 -36
  21. package/dist/react/3d/capturePngAnalysis.js.map +1 -1
  22. package/dist/react/3d/index.d.ts +3 -3
  23. package/dist/react/3d/index.js +5 -53
  24. package/dist/react/3d/threeLoader.d.ts +1 -1
  25. package/dist/react/3d/threeLoader.js +23 -18
  26. package/dist/react/3d/threeLoader.js.map +1 -1
  27. package/dist/react/astro/ClassificationBanner.d.ts +2 -3
  28. package/dist/react/astro/ClassificationBanner.js +95 -79
  29. package/dist/react/astro/ClassificationBanner.js.map +1 -1
  30. package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
  31. package/dist/react/astro/GlobalStatusBar.js +157 -163
  32. package/dist/react/astro/GlobalStatusBar.js.map +1 -1
  33. package/dist/react/astro/MissionClock.d.ts +7 -8
  34. package/dist/react/astro/MissionClock.js +377 -400
  35. package/dist/react/astro/MissionClock.js.map +1 -1
  36. package/dist/react/astro/MonitoringIcon.d.ts +1 -2
  37. package/dist/react/astro/MonitoringIcon.js +422 -358
  38. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  39. package/dist/react/astro/Notification.d.ts +1 -2
  40. package/dist/react/astro/Notification.js +229 -126
  41. package/dist/react/astro/Notification.js.map +1 -1
  42. package/dist/react/astro/Progress.d.ts +0 -1
  43. package/dist/react/astro/Progress.js +199 -141
  44. package/dist/react/astro/Progress.js.map +1 -1
  45. package/dist/react/astro/SimulationControls.d.ts +3 -4
  46. package/dist/react/astro/SimulationControls.js +596 -650
  47. package/dist/react/astro/SimulationControls.js.map +1 -1
  48. package/dist/react/astro/StatusIndicator.d.ts +0 -1
  49. package/dist/react/astro/StatusIndicator.js +236 -170
  50. package/dist/react/astro/StatusIndicator.js.map +1 -1
  51. package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
  52. package/dist/react/astro/UnifiedTimeline.js +2345 -2392
  53. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  54. package/dist/react/astro/index.d.ts +5 -5
  55. package/dist/react/astro/index.js +1 -25
  56. package/dist/react/cards/AccessCard.d.ts +0 -1
  57. package/dist/react/cards/AccessCard.js +471 -405
  58. package/dist/react/cards/AccessCard.js.map +1 -1
  59. package/dist/react/cards/OrbitCard.d.ts +0 -1
  60. package/dist/react/cards/OrbitCard.js +487 -364
  61. package/dist/react/cards/OrbitCard.js.map +1 -1
  62. package/dist/react/cards/SpacecraftCard.d.ts +0 -1
  63. package/dist/react/cards/SpacecraftCard.js +813 -925
  64. package/dist/react/cards/SpacecraftCard.js.map +1 -1
  65. package/dist/react/cards/TelemetryCard.d.ts +0 -1
  66. package/dist/react/cards/TelemetryCard.js +1055 -732
  67. package/dist/react/cards/TelemetryCard.js.map +1 -1
  68. package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
  69. package/dist/react/cards/TelemetryStreamCard.js +323 -297
  70. package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
  71. package/dist/react/cards/index.d.ts +1 -1
  72. package/dist/react/cards/index.js +1 -8
  73. package/dist/react/charts/GroundTrackMap.d.ts +6 -7
  74. package/dist/react/charts/GroundTrackMap.js +1377 -1256
  75. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  76. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
  77. package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
  78. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
  79. package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
  80. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
  81. package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
  82. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
  83. package/dist/react/charts/index.d.ts +1 -1
  84. package/dist/react/charts/index.js +7 -100
  85. package/dist/react/charts/unified/AstroChart.d.ts +1 -2
  86. package/dist/react/charts/unified/AstroChart.js +1331 -1411
  87. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  88. package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
  89. package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
  90. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
  91. package/dist/react/charts/unified/domain.d.ts +12 -13
  92. package/dist/react/charts/unified/domain.js +3999 -3145
  93. package/dist/react/charts/unified/domain.js.map +1 -1
  94. package/dist/react/charts/unified/generators.d.ts +3 -4
  95. package/dist/react/charts/unified/generators.js +561 -498
  96. package/dist/react/charts/unified/generators.js.map +1 -1
  97. package/dist/react/charts/unified/index.d.ts +1 -1
  98. package/dist/react/charts/unified/presets.d.ts +14 -15
  99. package/dist/react/charts/unified/presets.js +857 -994
  100. package/dist/react/charts/unified/presets.js.map +1 -1
  101. package/dist/react/charts/unified/sync.d.ts +2 -3
  102. package/dist/react/charts/unified/sync.js +229 -195
  103. package/dist/react/charts/unified/sync.js.map +1 -1
  104. package/dist/react/charts/unified/theme.d.ts +11 -12
  105. package/dist/react/charts/unified/theme.js +606 -642
  106. package/dist/react/charts/unified/theme.js.map +1 -1
  107. package/dist/react/charts/unified/types.d.ts +32 -33
  108. package/dist/react/charts/unified/useChartStream.d.ts +1 -2
  109. package/dist/react/charts/unified/useChartStream.js +203 -216
  110. package/dist/react/charts/unified/useChartStream.js.map +1 -1
  111. package/dist/react/chatgpt/AppCard.d.ts +1 -2
  112. package/dist/react/chatgpt/index.d.ts +7 -7
  113. package/dist/react/chatgpt/index.js +160 -139
  114. package/dist/react/chatgpt/index.js.map +1 -1
  115. package/dist/react/context/CategoryContext.d.ts +0 -1
  116. package/dist/react/context/CategoryContext.js +78 -29
  117. package/dist/react/context/CategoryContext.js.map +1 -1
  118. package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
  119. package/dist/react/context/DisplaySettingsContext.js +205 -156
  120. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  121. package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
  122. package/dist/react/context/SpatialSelectionContext.js +36 -7
  123. package/dist/react/context/SpatialSelectionContext.js.map +1 -1
  124. package/dist/react/core/data/DataTable.d.ts +3 -4
  125. package/dist/react/core/data/DataTable.js +473 -440
  126. package/dist/react/core/data/DataTable.js.map +1 -1
  127. package/dist/react/core/data/DataValue.d.ts +4 -5
  128. package/dist/react/core/data/DataValue.js +605 -571
  129. package/dist/react/core/data/DataValue.js.map +1 -1
  130. package/dist/react/core/data/propertyConfig.d.ts +1 -2
  131. package/dist/react/core/data/propertyConfig.js +446 -382
  132. package/dist/react/core/data/propertyConfig.js.map +1 -1
  133. package/dist/react/core/display/AstroIcon.d.ts +4 -5
  134. package/dist/react/core/display/AstroIcon.js +339 -429
  135. package/dist/react/core/display/AstroIcon.js.map +1 -1
  136. package/dist/react/core/display/Badge.d.ts +2 -3
  137. package/dist/react/core/display/Badge.js +131 -131
  138. package/dist/react/core/display/Badge.js.map +1 -1
  139. package/dist/react/core/display/CardHeader.d.ts +0 -1
  140. package/dist/react/core/display/CardHeader.js +398 -311
  141. package/dist/react/core/display/CardHeader.js.map +1 -1
  142. package/dist/react/core/display/Container.d.ts +2 -3
  143. package/dist/react/core/display/Container.js +640 -668
  144. package/dist/react/core/display/Container.js.map +1 -1
  145. package/dist/react/core/display/CopyButton.d.ts +1 -2
  146. package/dist/react/core/display/CopyButton.js +158 -101
  147. package/dist/react/core/display/CopyButton.js.map +1 -1
  148. package/dist/react/core/display/GlassCard.d.ts +3 -4
  149. package/dist/react/core/display/GlassCard.js +416 -369
  150. package/dist/react/core/display/GlassCard.js.map +1 -1
  151. package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
  152. package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
  153. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
  154. package/dist/react/core/display/Icon.d.ts +2 -3
  155. package/dist/react/core/display/Icon.js +172 -143
  156. package/dist/react/core/display/Icon.js.map +1 -1
  157. package/dist/react/core/display/Typography.d.ts +24 -25
  158. package/dist/react/core/display/Typography.js +360 -178
  159. package/dist/react/core/display/Typography.js.map +1 -1
  160. package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
  161. package/dist/react/core/feedback/ConfirmDialog.js +343 -304
  162. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
  163. package/dist/react/core/feedback/Dialog.d.ts +2 -3
  164. package/dist/react/core/feedback/Dialog.js +189 -197
  165. package/dist/react/core/feedback/Dialog.js.map +1 -1
  166. package/dist/react/core/feedback/Toast.d.ts +2 -3
  167. package/dist/react/core/feedback/Toast.js +346 -207
  168. package/dist/react/core/feedback/Toast.js.map +1 -1
  169. package/dist/react/core/index.d.ts +26 -26
  170. package/dist/react/core/index.js +7 -119
  171. package/dist/react/core/inputs/Button.d.ts +2 -3
  172. package/dist/react/core/inputs/Button.js +281 -304
  173. package/dist/react/core/inputs/Button.js.map +1 -1
  174. package/dist/react/core/inputs/Checkbox.d.ts +2 -3
  175. package/dist/react/core/inputs/Checkbox.js +139 -127
  176. package/dist/react/core/inputs/Checkbox.js.map +1 -1
  177. package/dist/react/core/inputs/Input.d.ts +3 -4
  178. package/dist/react/core/inputs/Input.js +277 -285
  179. package/dist/react/core/inputs/Input.js.map +1 -1
  180. package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
  181. package/dist/react/core/inputs/LimitsBar.js +271 -196
  182. package/dist/react/core/inputs/LimitsBar.js.map +1 -1
  183. package/dist/react/core/inputs/NumberInput.d.ts +2 -3
  184. package/dist/react/core/inputs/NumberInput.js +531 -503
  185. package/dist/react/core/inputs/NumberInput.js.map +1 -1
  186. package/dist/react/core/inputs/PinInput.d.ts +2 -3
  187. package/dist/react/core/inputs/PinInput.js +224 -207
  188. package/dist/react/core/inputs/PinInput.js.map +1 -1
  189. package/dist/react/core/inputs/Select.d.ts +1 -2
  190. package/dist/react/core/inputs/Select.js +298 -299
  191. package/dist/react/core/inputs/Select.js.map +1 -1
  192. package/dist/react/core/inputs/Toggle.d.ts +2 -3
  193. package/dist/react/core/inputs/Toggle.js +142 -148
  194. package/dist/react/core/inputs/Toggle.js.map +1 -1
  195. package/dist/react/core/layout/Box.d.ts +3 -4
  196. package/dist/react/core/layout/Box.js +118 -122
  197. package/dist/react/core/layout/Box.js.map +1 -1
  198. package/dist/react/core/layout/Center.d.ts +0 -1
  199. package/dist/react/core/layout/Center.js +45 -32
  200. package/dist/react/core/layout/Center.js.map +1 -1
  201. package/dist/react/core/layout/Divider.d.ts +1 -2
  202. package/dist/react/core/layout/Divider.js +112 -106
  203. package/dist/react/core/layout/Divider.js.map +1 -1
  204. package/dist/react/core/layout/Flex.d.ts +4 -5
  205. package/dist/react/core/layout/Flex.js +120 -124
  206. package/dist/react/core/layout/Flex.js.map +1 -1
  207. package/dist/react/core/layout/Grid.d.ts +5 -6
  208. package/dist/react/core/layout/Grid.js +131 -138
  209. package/dist/react/core/layout/Grid.js.map +1 -1
  210. package/dist/react/core/layout/Spacer.d.ts +0 -1
  211. package/dist/react/core/layout/Spacer.js +36 -29
  212. package/dist/react/core/layout/Spacer.js.map +1 -1
  213. package/dist/react/core/layout/Stack.d.ts +4 -5
  214. package/dist/react/core/layout/Stack.js +127 -70
  215. package/dist/react/core/layout/Stack.js.map +1 -1
  216. package/dist/react/core/layout/responsive.d.ts +1 -2
  217. package/dist/react/core/layout/responsive.js +25 -19
  218. package/dist/react/core/layout/responsive.js.map +1 -1
  219. package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
  220. package/dist/react/core/layout/useBreakpoint.js +119 -66
  221. package/dist/react/core/layout/useBreakpoint.js.map +1 -1
  222. package/dist/react/core/navigation/AppBar.d.ts +1 -2
  223. package/dist/react/core/navigation/AppBar.js +827 -805
  224. package/dist/react/core/navigation/AppBar.js.map +1 -1
  225. package/dist/react/core/navigation/Pagination.d.ts +2 -3
  226. package/dist/react/core/navigation/Pagination.js +207 -187
  227. package/dist/react/core/navigation/Pagination.js.map +1 -1
  228. package/dist/react/core/navigation/SideNav.d.ts +5 -6
  229. package/dist/react/core/navigation/SideNav.js +855 -629
  230. package/dist/react/core/navigation/SideNav.js.map +1 -1
  231. package/dist/react/core/navigation/Tabs.d.ts +0 -1
  232. package/dist/react/core/navigation/Tabs.js +113 -119
  233. package/dist/react/core/navigation/Tabs.js.map +1 -1
  234. package/dist/react/core/overlays/Popover.d.ts +2 -3
  235. package/dist/react/core/overlays/Popover.js +303 -282
  236. package/dist/react/core/overlays/Popover.js.map +1 -1
  237. package/dist/react/core/overlays/SidePanel.d.ts +1 -2
  238. package/dist/react/core/overlays/SidePanel.js +217 -212
  239. package/dist/react/core/overlays/SidePanel.js.map +1 -1
  240. package/dist/react/core/overlays/Tooltip.d.ts +1 -2
  241. package/dist/react/core/overlays/Tooltip.js +170 -176
  242. package/dist/react/core/overlays/Tooltip.js.map +1 -1
  243. package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
  244. package/dist/react/core/widgets/ActivityPlanner.js +855 -517
  245. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
  246. package/dist/react/core/widgets/Capture.d.ts +2 -3
  247. package/dist/react/core/widgets/Capture.js +965 -779
  248. package/dist/react/core/widgets/Capture.js.map +1 -1
  249. package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
  250. package/dist/react/core/widgets/ChatPanel.js +1734 -1034
  251. package/dist/react/core/widgets/ChatPanel.js.map +1 -1
  252. package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
  253. package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
  254. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
  255. package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
  256. package/dist/react/core/widgets/CommandBuilder.js +624 -516
  257. package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
  258. package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
  259. package/dist/react/core/widgets/ConnectionForm.js +528 -492
  260. package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
  261. package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
  262. package/dist/react/core/widgets/FileExplorer.js +617 -505
  263. package/dist/react/core/widgets/FileExplorer.js.map +1 -1
  264. package/dist/react/core/widgets/HexViewer.d.ts +2 -3
  265. package/dist/react/core/widgets/HexViewer.js +1353 -1091
  266. package/dist/react/core/widgets/HexViewer.js.map +1 -1
  267. package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
  268. package/dist/react/core/widgets/ImageFrame.js +230 -193
  269. package/dist/react/core/widgets/ImageFrame.js.map +1 -1
  270. package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
  271. package/dist/react/core/widgets/ImageGallery.js +380 -314
  272. package/dist/react/core/widgets/ImageGallery.js.map +1 -1
  273. package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
  274. package/dist/react/core/widgets/ImagePanel.js +110 -101
  275. package/dist/react/core/widgets/ImagePanel.js.map +1 -1
  276. package/dist/react/core/widgets/LogViewer.d.ts +2 -3
  277. package/dist/react/core/widgets/LogViewer.js +711 -607
  278. package/dist/react/core/widgets/LogViewer.js.map +1 -1
  279. package/dist/react/core/widgets/MessageStream.d.ts +3 -4
  280. package/dist/react/core/widgets/MessageStream.js +514 -444
  281. package/dist/react/core/widgets/MessageStream.js.map +1 -1
  282. package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
  283. package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
  284. package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
  285. package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
  286. package/dist/react/core/widgets/PacketViewer.js +550 -421
  287. package/dist/react/core/widgets/PacketViewer.js.map +1 -1
  288. package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
  289. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
  290. package/dist/react/hooks/index.d.ts +5 -5
  291. package/dist/react/hooks/useAccessWindows.d.ts +0 -1
  292. package/dist/react/hooks/useCompactMode.d.ts +1 -1
  293. package/dist/react/hooks/useCompactMode.js +104 -58
  294. package/dist/react/hooks/useCompactMode.js.map +1 -1
  295. package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
  296. package/dist/react/hooks/useSimulationScene.d.ts +1 -2
  297. package/dist/react/hooks/useSimulationScene.js +481 -374
  298. package/dist/react/hooks/useSimulationScene.js.map +1 -1
  299. package/dist/react/index.d.ts +3 -3
  300. package/dist/react/panels/LayerControlPanel.d.ts +1 -2
  301. package/dist/react/panels/LayerControlPanel.js +223 -180
  302. package/dist/react/panels/LayerControlPanel.js.map +1 -1
  303. package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
  304. package/dist/react/panels/ObjectInventoryPanel.js +315 -250
  305. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
  306. package/dist/react/panels/index.d.ts +1 -1
  307. package/dist/react/panels/index.js +1 -6
  308. package/dist/react/shared/ErrorBoundary.d.ts +1 -2
  309. package/dist/react/shared/ErrorBoundary.js +170 -139
  310. package/dist/react/shared/ErrorBoundary.js.map +1 -1
  311. package/dist/react/shared/Skeleton.d.ts +1 -2
  312. package/dist/react/shared/Skeleton.js +300 -301
  313. package/dist/react/shared/Skeleton.js.map +1 -1
  314. package/dist/react/theme/ThemeProvider.d.ts +2 -321
  315. package/dist/react/theme/ThemeProvider.js +313 -939
  316. package/dist/react/theme/ThemeProvider.js.map +1 -1
  317. package/dist/react/theme/cardAccent.d.ts +1 -2
  318. package/dist/react/theme/cardAccent.js +196 -126
  319. package/dist/react/theme/cardAccent.js.map +1 -1
  320. package/dist/react/theme/config.d.ts +0 -1
  321. package/dist/react/theme/config.js +47 -25
  322. package/dist/react/theme/config.js.map +1 -1
  323. package/dist/react/theme/index.d.ts +2 -2
  324. package/dist/react/theme/index.js +1 -16
  325. package/dist/react/theme/types.d.ts +332 -0
  326. package/dist/react/theme/types.js +39 -0
  327. package/dist/react/theme/types.js.map +1 -0
  328. package/dist/react/types.d.ts +8 -8
  329. package/dist/react/types.js +147 -47
  330. package/dist/react/types.js.map +1 -1
  331. package/dist/react/utils/categoryPalette.d.ts +0 -1
  332. package/dist/react/utils/categoryPalette.js +91 -102
  333. package/dist/react/utils/categoryPalette.js.map +1 -1
  334. package/dist/react/utils/index.d.ts +5 -5
  335. package/dist/react/utils/index.js +457 -371
  336. package/dist/react/utils/index.js.map +1 -1
  337. package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
  338. package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
  339. package/dist/react/visualizations/NavBallCard.d.ts +0 -1
  340. package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
  341. package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
  342. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
  343. package/dist/react/visualizations/index.d.ts +3 -3
  344. package/dist/react.d.ts +2 -1
  345. package/dist/react.js +17 -221
  346. package/dist/shaders/atmosphere.frag.js +6 -5
  347. package/dist/shaders/atmosphere.frag.js.map +1 -1
  348. package/dist/shaders/atmosphere.vert.js +6 -5
  349. package/dist/shaders/atmosphere.vert.js.map +1 -1
  350. package/dist/shaders/stars.frag.js +6 -5
  351. package/dist/shaders/stars.frag.js.map +1 -1
  352. package/dist/shaders/stars.vert.js +6 -5
  353. package/dist/shaders/stars.vert.js.map +1 -1
  354. package/dist/style.css +26 -3
  355. package/dist/tokens/core.d.ts +159 -0
  356. package/dist/tokens/core.js +144 -0
  357. package/dist/tokens/core.js.map +1 -0
  358. package/dist/tokens/css-vars.d.ts +213 -2
  359. package/dist/tokens/css-vars.js +590 -227
  360. package/dist/tokens/css-vars.js.map +1 -1
  361. package/dist/tokens/index.d.ts +31 -228
  362. package/dist/tokens/index.js +281 -366
  363. package/dist/tokens/index.js.map +1 -1
  364. package/dist/tokens/palettes/astro.d.ts +129 -0
  365. package/dist/tokens/palettes/astro.js +112 -0
  366. package/dist/tokens/palettes/astro.js.map +1 -0
  367. package/dist/tokens/palettes/index.d.ts +288 -0
  368. package/dist/tokens/palettes/index.js +35 -0
  369. package/dist/tokens/palettes/index.js.map +1 -0
  370. package/dist/tokens/palettes/tailwind.d.ts +324 -0
  371. package/dist/tokens/palettes/tailwind.js +201 -0
  372. package/dist/tokens/palettes/tailwind.js.map +1 -0
  373. package/dist/tokens/palettes/zendir.d.ts +126 -0
  374. package/dist/tokens/palettes/zendir.js +92 -0
  375. package/dist/tokens/palettes/zendir.js.map +1 -0
  376. package/dist/tokens/themes.d.ts +30 -0
  377. package/dist/tokens/themes.js +704 -0
  378. package/dist/tokens/themes.js.map +1 -0
  379. package/dist/tokens/tokens.css +533 -155
  380. package/dist/types/index.d.ts +2 -2
  381. package/package.json +310 -313
  382. package/dist/index.js.map +0 -1
  383. package/dist/react/3d/index.js.map +0 -1
  384. package/dist/react/astro/index.js.map +0 -1
  385. package/dist/react/cards/index.js.map +0 -1
  386. package/dist/react/charts/index.js.map +0 -1
  387. package/dist/react/core/index.js.map +0 -1
  388. package/dist/react/panels/index.js.map +0 -1
  389. package/dist/react/theme/astro-tokens.d.ts +0 -153
  390. package/dist/react/theme/index.js.map +0 -1
  391. package/dist/react.js.map +0 -1
@@ -1,108 +1,114 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { memo } from "react";
3
1
  import { useTheme } from "../../theme/ThemeProvider.js";
4
- const Divider = memo(function Divider2({
5
- orientation = "horizontal",
6
- label,
7
- spacing,
8
- color,
9
- dashed = false,
10
- style,
11
- ...rest
12
- }) {
13
- const { tokens } = useTheme();
14
- const lineColor = color || tokens.colors.border.muted;
15
- const borderStyle = dashed ? "dashed" : "solid";
16
- if (orientation === "vertical") {
17
- return /* @__PURE__ */ jsx(
18
- "div",
19
- {
20
- role: "separator",
21
- "aria-orientation": "vertical",
22
- style: {
23
- width: "1px",
24
- alignSelf: "stretch",
25
- backgroundColor: lineColor,
26
- flexShrink: 0,
27
- ...spacing ? { margin: `0 ${spacing}` } : {},
28
- ...dashed ? {
29
- backgroundColor: "transparent",
30
- borderLeft: `1px ${borderStyle} ${lineColor}`
31
- } : {},
32
- ...style
33
- },
34
- ...rest
35
- }
36
- );
37
- }
38
- if (label) {
39
- return /* @__PURE__ */ jsxs(
40
- "div",
41
- {
42
- role: "separator",
43
- style: {
44
- display: "flex",
45
- alignItems: "center",
46
- gap: tokens.spacing.sm,
47
- ...spacing ? { margin: `${spacing} 0` } : {},
48
- ...style
49
- },
50
- ...rest,
51
- children: [
52
- /* @__PURE__ */ jsx("div", { style: {
53
- flex: 1,
54
- height: "1px",
55
- backgroundColor: lineColor,
56
- ...dashed ? {
57
- backgroundColor: "transparent",
58
- borderTop: `1px ${borderStyle} ${lineColor}`
59
- } : {}
60
- } }),
61
- /* @__PURE__ */ jsx("span", { style: {
62
- fontSize: tokens.typography.fontSize.xs,
63
- fontWeight: tokens.typography.fontWeight.medium,
64
- color: tokens.colors.text.tertiary,
65
- fontFamily: tokens.typography.fontFamily.primary,
66
- letterSpacing: tokens.typography.letterSpacing.wide,
67
- textTransform: "uppercase",
68
- flexShrink: 0,
69
- padding: `0 ${tokens.spacing.xs}`
70
- }, children: label }),
71
- /* @__PURE__ */ jsx("div", { style: {
72
- flex: 1,
73
- height: "1px",
74
- backgroundColor: lineColor,
75
- ...dashed ? {
76
- backgroundColor: "transparent",
77
- borderTop: `1px ${borderStyle} ${lineColor}`
78
- } : {}
79
- } })
80
- ]
81
- }
82
- );
83
- }
84
- return /* @__PURE__ */ jsx(
85
- "div",
86
- {
87
- role: "separator",
88
- "aria-orientation": "horizontal",
89
- style: {
90
- width: "100%",
91
- height: "1px",
92
- backgroundColor: lineColor,
93
- flexShrink: 0,
94
- ...spacing ? { margin: `${spacing} 0` } : {},
95
- ...dashed ? {
96
- backgroundColor: "transparent",
97
- borderTop: `1px ${borderStyle} ${lineColor}`
98
- } : {},
99
- ...style
100
- },
101
- ...rest
102
- }
103
- );
2
+ import { memo } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/react/core/layout/Divider.tsx
5
+ /**
6
+ * @zendir/ui - Divider
7
+ *
8
+ * Visual separator line following Astro UX Design System.
9
+ * Theme-aware with muted border colors. Supports horizontal and vertical orientation.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * <VStack spacing="md">
14
+ * <Section1 />
15
+ * <Divider />
16
+ * <Section2 />
17
+ * </VStack>
18
+ *
19
+ * <HStack spacing="md">
20
+ * <Panel1 />
21
+ * <Divider orientation="vertical" />
22
+ * <Panel2 />
23
+ * </HStack>
24
+ *
25
+ * <Divider label="OR" />
26
+ * ```
27
+ */
28
+ var Divider = memo(function Divider({ orientation = "horizontal", label, spacing, color, dashed = false, style, ...rest }) {
29
+ const { tokens } = useTheme();
30
+ const lineColor = color || tokens.colors.border.muted;
31
+ const borderStyle = dashed ? "dashed" : "solid";
32
+ if (orientation === "vertical") return /* @__PURE__ */ jsx("div", {
33
+ role: "separator",
34
+ "aria-orientation": "vertical",
35
+ style: {
36
+ width: "1px",
37
+ alignSelf: "stretch",
38
+ backgroundColor: lineColor,
39
+ flexShrink: 0,
40
+ ...spacing ? { margin: `0 ${spacing}` } : {},
41
+ ...dashed ? {
42
+ backgroundColor: "transparent",
43
+ borderLeft: `1px ${borderStyle} ${lineColor}`
44
+ } : {},
45
+ ...style
46
+ },
47
+ ...rest
48
+ });
49
+ if (label) return /* @__PURE__ */ jsxs("div", {
50
+ role: "separator",
51
+ style: {
52
+ display: "flex",
53
+ alignItems: "center",
54
+ gap: tokens.spacing.sm,
55
+ ...spacing ? { margin: `${spacing} 0` } : {},
56
+ ...style
57
+ },
58
+ ...rest,
59
+ children: [
60
+ /* @__PURE__ */ jsx("div", { style: {
61
+ flex: 1,
62
+ height: "1px",
63
+ backgroundColor: lineColor,
64
+ ...dashed ? {
65
+ backgroundColor: "transparent",
66
+ borderTop: `1px ${borderStyle} ${lineColor}`
67
+ } : {}
68
+ } }),
69
+ /* @__PURE__ */ jsx("span", {
70
+ style: {
71
+ fontSize: tokens.typography.fontSize.xs,
72
+ fontWeight: tokens.typography.fontWeight.medium,
73
+ color: tokens.colors.text.tertiary,
74
+ fontFamily: tokens.typography.fontFamily.primary,
75
+ letterSpacing: tokens.typography.letterSpacing.wide,
76
+ textTransform: "uppercase",
77
+ flexShrink: 0,
78
+ padding: `0 ${tokens.spacing.xs}`
79
+ },
80
+ children: label
81
+ }),
82
+ /* @__PURE__ */ jsx("div", { style: {
83
+ flex: 1,
84
+ height: "1px",
85
+ backgroundColor: lineColor,
86
+ ...dashed ? {
87
+ backgroundColor: "transparent",
88
+ borderTop: `1px ${borderStyle} ${lineColor}`
89
+ } : {}
90
+ } })
91
+ ]
92
+ });
93
+ return /* @__PURE__ */ jsx("div", {
94
+ role: "separator",
95
+ "aria-orientation": "horizontal",
96
+ style: {
97
+ width: "100%",
98
+ height: "1px",
99
+ backgroundColor: lineColor,
100
+ flexShrink: 0,
101
+ ...spacing ? { margin: `${spacing} 0` } : {},
102
+ ...dashed ? {
103
+ backgroundColor: "transparent",
104
+ borderTop: `1px ${borderStyle} ${lineColor}`
105
+ } : {},
106
+ ...style
107
+ },
108
+ ...rest
109
+ });
104
110
  });
105
- export {
106
- Divider
107
- };
108
- //# sourceMappingURL=Divider.js.map
111
+ //#endregion
112
+ export { Divider, Divider as default };
113
+
114
+ //# sourceMappingURL=Divider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Divider.js","sources":["../../../../src/react/core/layout/Divider.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Divider\r\n * \r\n * Visual separator line following Astro UX Design System.\r\n * Theme-aware with muted border colors. Supports horizontal and vertical orientation.\r\n * \r\n * @example\r\n * ```tsx\r\n * <VStack spacing=\"md\">\r\n * <Section1 />\r\n * <Divider />\r\n * <Section2 />\r\n * </VStack>\r\n * \r\n * <HStack spacing=\"md\">\r\n * <Panel1 />\r\n * <Divider orientation=\"vertical\" />\r\n * <Panel2 />\r\n * </HStack>\r\n * \r\n * <Divider label=\"OR\" />\r\n * ```\r\n */\r\n\r\nimport React, { memo } from 'react';\r\nimport { useTheme } from '../../theme';\r\n\r\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /** Divider orientation */\r\n orientation?: 'horizontal' | 'vertical';\r\n /** Optional centered label text */\r\n label?: string;\r\n /** Spacing around the divider (CSS value) */\r\n spacing?: string;\r\n /** Color override */\r\n color?: string;\r\n /** Dashed style */\r\n dashed?: boolean;\r\n}\r\n\r\nexport const Divider = memo(function Divider({\r\n orientation = 'horizontal',\r\n label,\r\n spacing,\r\n color,\r\n dashed = false,\r\n style,\r\n ...rest\r\n}: DividerProps): React.ReactElement {\r\n const { tokens } = useTheme();\r\n \r\n const lineColor = color || tokens.colors.border.muted;\r\n const borderStyle = dashed ? 'dashed' : 'solid';\r\n \r\n if (orientation === 'vertical') {\r\n return (\r\n <div\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n style={{\r\n width: '1px',\r\n alignSelf: 'stretch',\r\n backgroundColor: lineColor,\r\n flexShrink: 0,\r\n ...(spacing ? { margin: `0 ${spacing}` } : {}),\r\n ...(dashed ? {\r\n backgroundColor: 'transparent',\r\n borderLeft: `1px ${borderStyle} ${lineColor}`,\r\n } : {}),\r\n ...style,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n }\r\n \r\n // Horizontal with optional label\r\n if (label) {\r\n return (\r\n <div\r\n role=\"separator\"\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacing.sm,\r\n ...(spacing ? { margin: `${spacing} 0` } : {}),\r\n ...style,\r\n }}\r\n {...rest}\r\n >\r\n <div style={{\r\n flex: 1,\r\n height: '1px',\r\n backgroundColor: lineColor,\r\n ...(dashed ? {\r\n backgroundColor: 'transparent',\r\n borderTop: `1px ${borderStyle} ${lineColor}`,\r\n } : {}),\r\n }} />\r\n <span style={{\r\n fontSize: tokens.typography.fontSize.xs,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.colors.text.tertiary,\r\n fontFamily: tokens.typography.fontFamily.primary,\r\n letterSpacing: tokens.typography.letterSpacing.wide,\r\n textTransform: 'uppercase',\r\n flexShrink: 0,\r\n padding: `0 ${tokens.spacing.xs}`,\r\n }}>\r\n {label}\r\n </span>\r\n <div style={{\r\n flex: 1,\r\n height: '1px',\r\n backgroundColor: lineColor,\r\n ...(dashed ? {\r\n backgroundColor: 'transparent',\r\n borderTop: `1px ${borderStyle} ${lineColor}`,\r\n } : {}),\r\n }} />\r\n </div>\r\n );\r\n }\r\n \r\n return (\r\n <div\r\n role=\"separator\"\r\n aria-orientation=\"horizontal\"\r\n style={{\r\n width: '100%',\r\n height: '1px',\r\n backgroundColor: lineColor,\r\n flexShrink: 0,\r\n ...(spacing ? { margin: `${spacing} 0` } : {}),\r\n ...(dashed ? {\r\n backgroundColor: 'transparent',\r\n borderTop: `1px ${borderStyle} ${lineColor}`,\r\n } : {}),\r\n ...style,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n});\r\n\r\nexport default Divider;\r\n"],"names":["Divider"],"mappings":";;;AAwCO,MAAM,UAAU,KAAK,SAASA,SAAQ;AAAA,EAC3C,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,GAAG;AACL,GAAqC;AACnC,QAAM,EAAE,OAAA,IAAW,SAAA;AAEnB,QAAM,YAAY,SAAS,OAAO,OAAO,OAAO;AAChD,QAAM,cAAc,SAAS,WAAW;AAExC,MAAI,gBAAgB,YAAY;AAC9B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,oBAAiB;AAAA,QACjB,OAAO;AAAA,UACL,OAAO;AAAA,UACP,WAAW;AAAA,UACX,iBAAiB;AAAA,UACjB,YAAY;AAAA,UACZ,GAAI,UAAU,EAAE,QAAQ,KAAK,OAAO,GAAA,IAAO,CAAA;AAAA,UAC3C,GAAI,SAAS;AAAA,YACX,iBAAiB;AAAA,YACjB,YAAY,OAAO,WAAW,IAAI,SAAS;AAAA,UAAA,IACzC,CAAA;AAAA,UACJ,GAAG;AAAA,QAAA;AAAA,QAEJ,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AAGA,MAAI,OAAO;AACT,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK,OAAO,QAAQ;AAAA,UACpB,GAAI,UAAU,EAAE,QAAQ,GAAG,OAAO,KAAA,IAAS,CAAA;AAAA,UAC3C,GAAG;AAAA,QAAA;AAAA,QAEJ,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAA,oBAAC,SAAI,OAAO;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,GAAI,SAAS;AAAA,cACX,iBAAiB;AAAA,cACjB,WAAW,OAAO,WAAW,IAAI,SAAS;AAAA,YAAA,IACxC,CAAA;AAAA,UAAC,GACJ;AAAA,UACH,oBAAC,UAAK,OAAO;AAAA,YACX,UAAU,OAAO,WAAW,SAAS;AAAA,YACrC,YAAY,OAAO,WAAW,WAAW;AAAA,YACzC,OAAO,OAAO,OAAO,KAAK;AAAA,YAC1B,YAAY,OAAO,WAAW,WAAW;AAAA,YACzC,eAAe,OAAO,WAAW,cAAc;AAAA,YAC/C,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,SAAS,KAAK,OAAO,QAAQ,EAAE;AAAA,UAAA,GAE9B,UAAA,OACH;AAAA,UACA,oBAAC,SAAI,OAAO;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,GAAI,SAAS;AAAA,cACX,iBAAiB;AAAA,cACjB,WAAW,OAAO,WAAW,IAAI,SAAS;AAAA,YAAA,IACxC,CAAA;AAAA,UAAC,EACP,CAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGT;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,oBAAiB;AAAA,MACjB,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,GAAI,UAAU,EAAE,QAAQ,GAAG,OAAO,KAAA,IAAS,CAAA;AAAA,QAC3C,GAAI,SAAS;AAAA,UACX,iBAAiB;AAAA,UACjB,WAAW,OAAO,WAAW,IAAI,SAAS;AAAA,QAAA,IACxC,CAAA;AAAA,QACJ,GAAG;AAAA,MAAA;AAAA,MAEJ,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;"}
1
+ {"version":3,"file":"Divider.js","names":[],"sources":["../../../../src/react/core/layout/Divider.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Divider\r\n *\r\n * Visual separator line following Astro UX Design System.\r\n * Theme-aware with muted border colors. Supports horizontal and vertical orientation.\r\n *\r\n * @example\r\n * ```tsx\r\n * <VStack spacing=\"md\">\r\n * <Section1 />\r\n * <Divider />\r\n * <Section2 />\r\n * </VStack>\r\n *\r\n * <HStack spacing=\"md\">\r\n * <Panel1 />\r\n * <Divider orientation=\"vertical\" />\r\n * <Panel2 />\r\n * </HStack>\r\n *\r\n * <Divider label=\"OR\" />\r\n * ```\r\n */\r\n\r\nimport React, { memo } from \"react\";\r\nimport { useTheme } from \"../../theme\";\r\n\r\nexport interface DividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /** Divider orientation */\r\n orientation?: \"horizontal\" | \"vertical\";\r\n /** Optional centered label text */\r\n label?: string;\r\n /** Spacing around the divider (CSS value) */\r\n spacing?: string;\r\n /** Color override */\r\n color?: string;\r\n /** Dashed style */\r\n dashed?: boolean;\r\n}\r\n\r\nexport const Divider = memo(function Divider({\r\n orientation = \"horizontal\",\r\n label,\r\n spacing,\r\n color,\r\n dashed = false,\r\n style,\r\n ...rest\r\n}: DividerProps): React.ReactElement {\r\n const { tokens } = useTheme();\r\n\r\n const lineColor = color || tokens.colors.border.muted;\r\n const borderStyle = dashed ? \"dashed\" : \"solid\";\r\n\r\n if (orientation === \"vertical\") {\r\n return (\r\n <div\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n style={{\r\n width: \"1px\",\r\n alignSelf: \"stretch\",\r\n backgroundColor: lineColor,\r\n flexShrink: 0,\r\n ...(spacing ? { margin: `0 ${spacing}` } : {}),\r\n ...(dashed\r\n ? {\r\n backgroundColor: \"transparent\",\r\n borderLeft: `1px ${borderStyle} ${lineColor}`,\r\n }\r\n : {}),\r\n ...style,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n }\r\n\r\n // Horizontal with optional label\r\n if (label) {\r\n return (\r\n <div\r\n role=\"separator\"\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n ...(spacing ? { margin: `${spacing} 0` } : {}),\r\n ...style,\r\n }}\r\n {...rest}\r\n >\r\n <div\r\n style={{\r\n flex: 1,\r\n height: \"1px\",\r\n backgroundColor: lineColor,\r\n ...(dashed\r\n ? {\r\n backgroundColor: \"transparent\",\r\n borderTop: `1px ${borderStyle} ${lineColor}`,\r\n }\r\n : {}),\r\n }}\r\n />\r\n <span\r\n style={{\r\n fontSize: tokens.typography.fontSize.xs,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n color: tokens.colors.text.tertiary,\r\n fontFamily: tokens.typography.fontFamily.primary,\r\n letterSpacing: tokens.typography.letterSpacing.wide,\r\n textTransform: \"uppercase\",\r\n flexShrink: 0,\r\n padding: `0 ${tokens.spacing.xs}`,\r\n }}\r\n >\r\n {label}\r\n </span>\r\n <div\r\n style={{\r\n flex: 1,\r\n height: \"1px\",\r\n backgroundColor: lineColor,\r\n ...(dashed\r\n ? {\r\n backgroundColor: \"transparent\",\r\n borderTop: `1px ${borderStyle} ${lineColor}`,\r\n }\r\n : {}),\r\n }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n role=\"separator\"\r\n aria-orientation=\"horizontal\"\r\n style={{\r\n width: \"100%\",\r\n height: \"1px\",\r\n backgroundColor: lineColor,\r\n flexShrink: 0,\r\n ...(spacing ? { margin: `${spacing} 0` } : {}),\r\n ...(dashed\r\n ? {\r\n backgroundColor: \"transparent\",\r\n borderTop: `1px ${borderStyle} ${lineColor}`,\r\n }\r\n : {}),\r\n ...style,\r\n }}\r\n {...rest}\r\n />\r\n );\r\n});\r\n\r\nexport default Divider;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,IAAa,UAAU,KAAK,SAAS,QAAQ,EAC3C,cAAc,cACd,OACA,SACA,OACA,SAAS,OACT,OACA,GAAG,QACgC;CACnC,MAAM,EAAE,WAAW,SAAS;CAE5B,MAAM,YAAY,SAAS,OAAO,OAAO,OAAO;CAChD,MAAM,cAAc,SAAS,WAAW;CAExC,IAAI,gBAAgB,YAClB,OACE,oBAAC,OAAD;EACE,MAAK;EACL,oBAAiB;EACjB,OAAO;GACL,OAAO;GACP,WAAW;GACX,iBAAiB;GACjB,YAAY;GACZ,GAAI,UAAU,EAAE,QAAQ,KAAK,UAAU,IAAI,CAAC;GAC5C,GAAI,SACA;IACE,iBAAiB;IACjB,YAAY,OAAO,YAAY,GAAG;GACpC,IACA,CAAC;GACL,GAAG;EACL;EACA,GAAI;CACL,CAAA;CAKL,IAAI,OACF,OACE,qBAAC,OAAD;EACE,MAAK;EACL,OAAO;GACL,SAAS;GACT,YAAY;GACZ,KAAK,OAAO,QAAQ;GACpB,GAAI,UAAU,EAAE,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;GAC5C,GAAG;EACL;EACA,GAAI;YATN;GAWE,oBAAC,OAAD,EACE,OAAO;IACL,MAAM;IACN,QAAQ;IACR,iBAAiB;IACjB,GAAI,SACA;KACE,iBAAiB;KACjB,WAAW,OAAO,YAAY,GAAG;IACnC,IACA,CAAC;GACP,EACD,CAAA;GACD,oBAAC,QAAD;IACE,OAAO;KACL,UAAU,OAAO,WAAW,SAAS;KACrC,YAAY,OAAO,WAAW,WAAW;KACzC,OAAO,OAAO,OAAO,KAAK;KAC1B,YAAY,OAAO,WAAW,WAAW;KACzC,eAAe,OAAO,WAAW,cAAc;KAC/C,eAAe;KACf,YAAY;KACZ,SAAS,KAAK,OAAO,QAAQ;IAC/B;cAEC;GACG,CAAA;GACN,oBAAC,OAAD,EACE,OAAO;IACL,MAAM;IACN,QAAQ;IACR,iBAAiB;IACjB,GAAI,SACA;KACE,iBAAiB;KACjB,WAAW,OAAO,YAAY,GAAG;IACnC,IACA,CAAC;GACP,EACD,CAAA;EACE;;CAIT,OACE,oBAAC,OAAD;EACE,MAAK;EACL,oBAAiB;EACjB,OAAO;GACL,OAAO;GACP,QAAQ;GACR,iBAAiB;GACjB,YAAY;GACZ,GAAI,UAAU,EAAE,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC;GAC5C,GAAI,SACA;IACE,iBAAiB;IACjB,WAAW,OAAO,YAAY,GAAG;GACnC,IACA,CAAC;GACL,GAAG;EACL;EACA,GAAI;CACL,CAAA;AAEL,CAAC"}
@@ -2,13 +2,12 @@ import { default as React } from 'react';
2
2
  import { ResponsiveValue } from './useBreakpoint';
3
3
  import { SpacingToken } from './responsive';
4
4
  import { BoxProps } from './Box';
5
-
6
5
  type SpacingInput = SpacingToken | string | number;
7
6
  export interface FlexProps extends BoxProps {
8
7
  /** Flex direction */
9
- direction?: ResponsiveValue<'row' | 'column' | 'row-reverse' | 'column-reverse'>;
8
+ direction?: ResponsiveValue<"row" | "column" | "row-reverse" | "column-reverse">;
10
9
  /** Flex wrap */
11
- wrap?: ResponsiveValue<'nowrap' | 'wrap' | 'wrap-reverse'>;
10
+ wrap?: ResponsiveValue<"nowrap" | "wrap" | "wrap-reverse">;
12
11
  /** Gap between children (spacing token, px number, or CSS string) */
13
12
  gap?: ResponsiveValue<SpacingInput>;
14
13
  /** Row gap (overrides gap for rows) */
@@ -16,9 +15,9 @@ export interface FlexProps extends BoxProps {
16
15
  /** Column gap (overrides gap for columns) */
17
16
  columnGap?: ResponsiveValue<SpacingInput>;
18
17
  /** Align items (cross-axis) */
19
- align?: ResponsiveValue<'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'>;
18
+ align?: ResponsiveValue<"flex-start" | "flex-end" | "center" | "baseline" | "stretch">;
20
19
  /** Justify content (main-axis) */
21
- justify?: ResponsiveValue<'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly'>;
20
+ justify?: ResponsiveValue<"flex-start" | "flex-end" | "center" | "space-between" | "space-around" | "space-evenly">;
22
21
  /** Shorthand: set both direction="column" */
23
22
  column?: boolean;
24
23
  /** Shorthand: center both axes */
@@ -1,128 +1,124 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { memo, forwardRef } from "react";
3
1
  import { useTheme } from "../../theme/ThemeProvider.js";
4
2
  import { useBreakpoint } from "./useBreakpoint.js";
5
3
  import { resolveResponsive, resolveResponsiveSpacing } from "./responsive.js";
6
- const Flex = memo(forwardRef(function Flex2({
7
- direction,
8
- wrap,
9
- gap,
10
- rowGap,
11
- columnGap,
12
- align,
13
- justify,
14
- column = false,
15
- center = false,
16
- inline = false,
17
- style,
18
- children,
19
- // Extract BoxProps we handle ourselves
20
- padding,
21
- p,
22
- px,
23
- py,
24
- pt,
25
- pr,
26
- pb,
27
- pl,
28
- margin,
29
- m,
30
- mx,
31
- my,
32
- mt,
33
- mr,
34
- mb,
35
- ml,
36
- background,
37
- border,
38
- borderRadius,
39
- shadow,
40
- display: _display,
41
- width,
42
- height,
43
- minWidth,
44
- minHeight,
45
- maxWidth,
46
- maxHeight,
47
- overflow,
48
- position,
49
- flex: flexProp,
50
- flexGrow,
51
- flexShrink,
52
- as: Component = "div",
53
- ...rest
54
- }, ref) {
55
- const { tokens } = useTheme();
56
- const { breakpoint } = useBreakpoint();
57
- const resolveSpacing = (val) => resolveResponsiveSpacing(val, breakpoint, tokens);
58
- const paddingAll = resolveSpacing(padding ?? p);
59
- const paddingXVal = resolveSpacing(px);
60
- const paddingYVal = resolveSpacing(py);
61
- const marginAll = resolveSpacing(margin ?? m);
62
- const marginXVal = resolveSpacing(mx);
63
- const marginYVal = resolveSpacing(my);
64
- const bgMap = {
65
- base: tokens.colors.background.base,
66
- surface: tokens.colors.background.surface,
67
- elevated: tokens.colors.background.elevated,
68
- overlay: tokens.colors.background.overlay
69
- };
70
- const resolveSize = (val) => {
71
- if (val === void 0) return void 0;
72
- if (typeof val === "number") return `${val}px`;
73
- return val;
74
- };
75
- const resolvedDirection = column ? "column" : resolveResponsive(direction, breakpoint) ?? "row";
76
- const resolvedGap = resolveSpacing(gap);
77
- const resolvedRowGap = resolveSpacing(rowGap);
78
- const resolvedColumnGap = resolveSpacing(columnGap);
79
- const computedStyle = {
80
- display: inline ? "inline-flex" : "flex",
81
- flexDirection: resolvedDirection,
82
- flexWrap: resolveResponsive(wrap, breakpoint),
83
- ...resolvedGap !== void 0 ? { gap: resolvedGap } : {},
84
- ...resolvedRowGap !== void 0 ? { rowGap: resolvedRowGap } : {},
85
- ...resolvedColumnGap !== void 0 ? { columnGap: resolvedColumnGap } : {},
86
- alignItems: center ? "center" : resolveResponsive(align, breakpoint),
87
- justifyContent: center ? "center" : resolveResponsive(justify, breakpoint),
88
- // Padding
89
- ...paddingAll ? { padding: paddingAll } : {},
90
- ...paddingXVal ? { paddingLeft: paddingXVal, paddingRight: paddingXVal } : {},
91
- ...paddingYVal ? { paddingTop: paddingYVal, paddingBottom: paddingYVal } : {},
92
- ...resolveSpacing(pt) ? { paddingTop: resolveSpacing(pt) } : {},
93
- ...resolveSpacing(pr) ? { paddingRight: resolveSpacing(pr) } : {},
94
- ...resolveSpacing(pb) ? { paddingBottom: resolveSpacing(pb) } : {},
95
- ...resolveSpacing(pl) ? { paddingLeft: resolveSpacing(pl) } : {},
96
- // Margin
97
- ...marginAll ? { margin: marginAll } : {},
98
- ...marginXVal ? { marginLeft: marginXVal, marginRight: marginXVal } : {},
99
- ...marginYVal ? { marginTop: marginYVal, marginBottom: marginYVal } : {},
100
- ...resolveSpacing(mt) ? { marginTop: resolveSpacing(mt) } : {},
101
- ...resolveSpacing(mr) ? { marginRight: resolveSpacing(mr) } : {},
102
- ...resolveSpacing(mb) ? { marginBottom: resolveSpacing(mb) } : {},
103
- ...resolveSpacing(ml) ? { marginLeft: resolveSpacing(ml) } : {},
104
- // Visual
105
- ...background ? { backgroundColor: bgMap[background] || background } : {},
106
- ...border ? { border: border === true ? `1px solid ${tokens.colors.border.default}` : border } : {},
107
- ...borderRadius ? { borderRadius: tokens.borderRadius[borderRadius] || borderRadius } : {},
108
- ...shadow && shadow !== "glow" ? { boxShadow: tokens.shadows[shadow] || shadow } : {},
109
- // Size
110
- width: resolveSize(resolveResponsive(width, breakpoint)),
111
- height: resolveSize(resolveResponsive(height, breakpoint)),
112
- minWidth: resolveSize(minWidth),
113
- minHeight: resolveSize(minHeight),
114
- maxWidth: resolveSize(maxWidth),
115
- maxHeight: resolveSize(maxHeight),
116
- overflow,
117
- position,
118
- flex: flexProp,
119
- flexGrow,
120
- flexShrink,
121
- ...style
122
- };
123
- return /* @__PURE__ */ jsx(Component, { ref, style: computedStyle, ...rest, children });
4
+ import { forwardRef, memo } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/react/core/layout/Flex.tsx
7
+ /**
8
+ * @zendir/ui - Flex Layout Primitive
9
+ *
10
+ * Flexbox container with theme-aware spacing and responsive direction/alignment.
11
+ * The workhorse layout component for horizontal and vertical arrangements.
12
+ *
13
+ * Astro UX Compliance:
14
+ * - 4px grid spacing tokens
15
+ * - Responsive gap for mobile → mission control
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * // Horizontal row with centered items
20
+ * <Flex gap="md" align="center">
21
+ * <StatusIndicator status="normal" />
22
+ * <Body1>All Systems Nominal</Body1>
23
+ * </Flex>
24
+ *
25
+ * // Vertical column, responsive gap
26
+ * <Flex direction="column" gap={['sm', 'md', 'lg']}>
27
+ * <TelemetryCard />
28
+ * <LinkBudgetCard />
29
+ * </Flex>
30
+ *
31
+ * // Space between items
32
+ * <Flex justify="space-between" align="center">
33
+ * <H3>Telemetry</H3>
34
+ * <Button variant="secondary">Refresh</Button>
35
+ * </Flex>
36
+ * ```
37
+ */
38
+ var Flex = memo(forwardRef(function Flex({ direction, wrap, gap, rowGap, columnGap, align, justify, column = false, center = false, inline = false, style, children, padding, p, px, py, pt, pr, pb, pl, margin, m, mx, my, mt, mr, mb, ml, background, border, borderRadius, shadow, display: _display, width, height, minWidth, minHeight, maxWidth, maxHeight, overflow, position, flex: flexProp, flexGrow, flexShrink, as: Component = "div", ...rest }, ref) {
39
+ const { tokens } = useTheme();
40
+ const { breakpoint } = useBreakpoint();
41
+ const resolveSpacing = (val) => resolveResponsiveSpacing(val, breakpoint, tokens);
42
+ const paddingAll = resolveSpacing(padding ?? p);
43
+ const paddingXVal = resolveSpacing(px);
44
+ const paddingYVal = resolveSpacing(py);
45
+ const marginAll = resolveSpacing(margin ?? m);
46
+ const marginXVal = resolveSpacing(mx);
47
+ const marginYVal = resolveSpacing(my);
48
+ const bgMap = {
49
+ base: tokens.colors.background.base,
50
+ surface: tokens.colors.background.surface,
51
+ elevated: tokens.colors.background.elevated,
52
+ overlay: tokens.colors.background.overlay
53
+ };
54
+ const resolveSize = (val) => {
55
+ if (val === void 0) return void 0;
56
+ if (typeof val === "number") return `${val}px`;
57
+ return val;
58
+ };
59
+ const resolvedDirection = column ? "column" : resolveResponsive(direction, breakpoint) ?? "row";
60
+ const resolvedGap = resolveSpacing(gap);
61
+ const resolvedRowGap = resolveSpacing(rowGap);
62
+ const resolvedColumnGap = resolveSpacing(columnGap);
63
+ return /* @__PURE__ */ jsx(Component, {
64
+ ref,
65
+ style: {
66
+ display: inline ? "inline-flex" : "flex",
67
+ flexDirection: resolvedDirection,
68
+ flexWrap: resolveResponsive(wrap, breakpoint),
69
+ ...resolvedGap !== void 0 ? { gap: resolvedGap } : {},
70
+ ...resolvedRowGap !== void 0 ? { rowGap: resolvedRowGap } : {},
71
+ ...resolvedColumnGap !== void 0 ? { columnGap: resolvedColumnGap } : {},
72
+ alignItems: center ? "center" : resolveResponsive(align, breakpoint),
73
+ justifyContent: center ? "center" : resolveResponsive(justify, breakpoint),
74
+ ...paddingAll ? { padding: paddingAll } : {},
75
+ ...paddingXVal ? {
76
+ paddingLeft: paddingXVal,
77
+ paddingRight: paddingXVal
78
+ } : {},
79
+ ...paddingYVal ? {
80
+ paddingTop: paddingYVal,
81
+ paddingBottom: paddingYVal
82
+ } : {},
83
+ ...resolveSpacing(pt) ? { paddingTop: resolveSpacing(pt) } : {},
84
+ ...resolveSpacing(pr) ? { paddingRight: resolveSpacing(pr) } : {},
85
+ ...resolveSpacing(pb) ? { paddingBottom: resolveSpacing(pb) } : {},
86
+ ...resolveSpacing(pl) ? { paddingLeft: resolveSpacing(pl) } : {},
87
+ ...marginAll ? { margin: marginAll } : {},
88
+ ...marginXVal ? {
89
+ marginLeft: marginXVal,
90
+ marginRight: marginXVal
91
+ } : {},
92
+ ...marginYVal ? {
93
+ marginTop: marginYVal,
94
+ marginBottom: marginYVal
95
+ } : {},
96
+ ...resolveSpacing(mt) ? { marginTop: resolveSpacing(mt) } : {},
97
+ ...resolveSpacing(mr) ? { marginRight: resolveSpacing(mr) } : {},
98
+ ...resolveSpacing(mb) ? { marginBottom: resolveSpacing(mb) } : {},
99
+ ...resolveSpacing(ml) ? { marginLeft: resolveSpacing(ml) } : {},
100
+ ...background ? { backgroundColor: bgMap[background] || background } : {},
101
+ ...border ? { border: border === true ? `1px solid ${tokens.colors.border.default}` : border } : {},
102
+ ...borderRadius ? { borderRadius: tokens.borderRadius[borderRadius] || borderRadius } : {},
103
+ ...shadow && shadow !== "glow" ? { boxShadow: tokens.shadows[shadow] || shadow } : {},
104
+ width: resolveSize(resolveResponsive(width, breakpoint)),
105
+ height: resolveSize(resolveResponsive(height, breakpoint)),
106
+ minWidth: resolveSize(minWidth),
107
+ minHeight: resolveSize(minHeight),
108
+ maxWidth: resolveSize(maxWidth),
109
+ maxHeight: resolveSize(maxHeight),
110
+ overflow,
111
+ position,
112
+ flex: flexProp,
113
+ flexGrow,
114
+ flexShrink,
115
+ ...style
116
+ },
117
+ ...rest,
118
+ children
119
+ });
124
120
  }));
125
- export {
126
- Flex
127
- };
128
- //# sourceMappingURL=Flex.js.map
121
+ //#endregion
122
+ export { Flex, Flex as default };
123
+
124
+ //# sourceMappingURL=Flex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Flex.js","sources":["../../../../src/react/core/layout/Flex.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Flex Layout Primitive\r\n * \r\n * Flexbox container with theme-aware spacing and responsive direction/alignment.\r\n * The workhorse layout component for horizontal and vertical arrangements.\r\n * \r\n * Astro UX Compliance:\r\n * - 4px grid spacing tokens\r\n * - Responsive gap for mobile → mission control\r\n * \r\n * @example\r\n * ```tsx\r\n * // Horizontal row with centered items\r\n * <Flex gap=\"md\" align=\"center\">\r\n * <StatusIndicator status=\"normal\" />\r\n * <Body1>All Systems Nominal</Body1>\r\n * </Flex>\r\n * \r\n * // Vertical column, responsive gap\r\n * <Flex direction=\"column\" gap={['sm', 'md', 'lg']}>\r\n * <TelemetryCard />\r\n * <LinkBudgetCard />\r\n * </Flex>\r\n * \r\n * // Space between items\r\n * <Flex justify=\"space-between\" align=\"center\">\r\n * <H3>Telemetry</H3>\r\n * <Button variant=\"secondary\">Refresh</Button>\r\n * </Flex>\r\n * ```\r\n */\r\n\r\nimport React, { memo, forwardRef } from 'react';\r\nimport { useTheme } from '../../theme';\r\nimport { useBreakpoint } from './useBreakpoint';\r\nimport { resolveResponsiveSpacing, resolveResponsive } from './responsive';\r\nimport type { ResponsiveValue } from './useBreakpoint';\r\nimport type { SpacingToken } from './responsive';\r\nimport type { BoxProps } from './Box';\r\n\r\ntype SpacingInput = SpacingToken | string | number;\r\n\r\nexport interface FlexProps extends BoxProps {\r\n /** Flex direction */\r\n direction?: ResponsiveValue<'row' | 'column' | 'row-reverse' | 'column-reverse'>;\r\n /** Flex wrap */\r\n wrap?: ResponsiveValue<'nowrap' | 'wrap' | 'wrap-reverse'>;\r\n /** Gap between children (spacing token, px number, or CSS string) */\r\n gap?: ResponsiveValue<SpacingInput>;\r\n /** Row gap (overrides gap for rows) */\r\n rowGap?: ResponsiveValue<SpacingInput>;\r\n /** Column gap (overrides gap for columns) */\r\n columnGap?: ResponsiveValue<SpacingInput>;\r\n /** Align items (cross-axis) */\r\n align?: ResponsiveValue<'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'>;\r\n /** Justify content (main-axis) */\r\n justify?: ResponsiveValue<'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly'>;\r\n /** Shorthand: set both direction=\"column\" */\r\n column?: boolean;\r\n /** Shorthand: center both axes */\r\n center?: boolean;\r\n /** Make flex container inline */\r\n inline?: boolean;\r\n}\r\n\r\nexport const Flex = memo(forwardRef<HTMLDivElement, FlexProps>(function Flex(\r\n {\r\n direction,\r\n wrap,\r\n gap,\r\n rowGap,\r\n columnGap,\r\n align,\r\n justify,\r\n column = false,\r\n center = false,\r\n inline = false,\r\n style,\r\n children,\r\n // Extract BoxProps we handle ourselves\r\n padding, p, px, py, pt, pr, pb, pl,\r\n margin, m, mx, my, mt, mr, mb, ml,\r\n background,\r\n border,\r\n borderRadius,\r\n shadow,\r\n display: _display,\r\n width,\r\n height,\r\n minWidth,\r\n minHeight,\r\n maxWidth,\r\n maxHeight,\r\n overflow,\r\n position,\r\n flex: flexProp,\r\n flexGrow,\r\n flexShrink,\r\n as: Component = 'div',\r\n ...rest\r\n },\r\n ref\r\n): React.ReactElement {\r\n const { tokens } = useTheme();\r\n const { breakpoint } = useBreakpoint();\r\n \r\n const resolveSpacing = (val: ResponsiveValue<SpacingInput> | undefined) =>\r\n resolveResponsiveSpacing(val, breakpoint, tokens);\r\n \r\n // Resolve padding\r\n const paddingAll = resolveSpacing(padding ?? p);\r\n const paddingXVal = resolveSpacing(px);\r\n const paddingYVal = resolveSpacing(py);\r\n \r\n // Resolve margin\r\n const marginAll = resolveSpacing(margin ?? m);\r\n const marginXVal = resolveSpacing(mx);\r\n const marginYVal = resolveSpacing(my);\r\n\r\n // Background color resolution\r\n const bgMap: Record<string, string> = {\r\n base: tokens.colors.background.base,\r\n surface: tokens.colors.background.surface,\r\n elevated: tokens.colors.background.elevated,\r\n overlay: tokens.colors.background.overlay,\r\n };\r\n \r\n const resolveSize = (val: string | number | undefined): string | undefined => {\r\n if (val === undefined) return undefined;\r\n if (typeof val === 'number') return `${val}px`;\r\n return val;\r\n };\r\n\r\n const resolvedDirection = column\r\n ? 'column'\r\n : resolveResponsive(direction, breakpoint) ?? 'row';\r\n\r\n // Resolve gap values — use conditional spreads to avoid setting\r\n // rowGap/columnGap to undefined, which clears the gap shorthand\r\n // in browsers (setting `style.rowGap = ''` removes the value\r\n // that `style.gap` set for row-gap).\r\n const resolvedGap = resolveSpacing(gap);\r\n const resolvedRowGap = resolveSpacing(rowGap);\r\n const resolvedColumnGap = resolveSpacing(columnGap);\r\n\r\n const computedStyle: React.CSSProperties = {\r\n display: inline ? 'inline-flex' : 'flex',\r\n flexDirection: resolvedDirection,\r\n flexWrap: resolveResponsive(wrap, breakpoint),\r\n ...(resolvedGap !== undefined ? { gap: resolvedGap } : {}),\r\n ...(resolvedRowGap !== undefined ? { rowGap: resolvedRowGap } : {}),\r\n ...(resolvedColumnGap !== undefined ? { columnGap: resolvedColumnGap } : {}),\r\n alignItems: center\r\n ? 'center'\r\n : resolveResponsive(align, breakpoint),\r\n justifyContent: center\r\n ? 'center'\r\n : resolveResponsive(justify, breakpoint),\r\n \r\n // Padding\r\n ...(paddingAll ? { padding: paddingAll } : {}),\r\n ...(paddingXVal ? { paddingLeft: paddingXVal, paddingRight: paddingXVal } : {}),\r\n ...(paddingYVal ? { paddingTop: paddingYVal, paddingBottom: paddingYVal } : {}),\r\n ...(resolveSpacing(pt) ? { paddingTop: resolveSpacing(pt) } : {}),\r\n ...(resolveSpacing(pr) ? { paddingRight: resolveSpacing(pr) } : {}),\r\n ...(resolveSpacing(pb) ? { paddingBottom: resolveSpacing(pb) } : {}),\r\n ...(resolveSpacing(pl) ? { paddingLeft: resolveSpacing(pl) } : {}),\r\n \r\n // Margin\r\n ...(marginAll ? { margin: marginAll } : {}),\r\n ...(marginXVal ? { marginLeft: marginXVal, marginRight: marginXVal } : {}),\r\n ...(marginYVal ? { marginTop: marginYVal, marginBottom: marginYVal } : {}),\r\n ...(resolveSpacing(mt) ? { marginTop: resolveSpacing(mt) } : {}),\r\n ...(resolveSpacing(mr) ? { marginRight: resolveSpacing(mr) } : {}),\r\n ...(resolveSpacing(mb) ? { marginBottom: resolveSpacing(mb) } : {}),\r\n ...(resolveSpacing(ml) ? { marginLeft: resolveSpacing(ml) } : {}),\r\n \r\n // Visual\r\n ...(background ? { backgroundColor: bgMap[background] || background } : {}),\r\n ...(border ? { border: border === true ? `1px solid ${tokens.colors.border.default}` : border as string } : {}),\r\n ...(borderRadius ? { borderRadius: (tokens.borderRadius as Record<string, string>)[borderRadius as string] || borderRadius } : {}),\r\n ...(shadow && shadow !== 'glow' ? { boxShadow: (tokens.shadows as unknown as Record<string, string>)[shadow as string] || shadow } : {}),\r\n \r\n // Size\r\n width: resolveSize(resolveResponsive(width, breakpoint)),\r\n height: resolveSize(resolveResponsive(height, breakpoint)),\r\n minWidth: resolveSize(minWidth),\r\n minHeight: resolveSize(minHeight),\r\n maxWidth: resolveSize(maxWidth),\r\n maxHeight: resolveSize(maxHeight),\r\n overflow,\r\n position,\r\n flex: flexProp,\r\n flexGrow,\r\n flexShrink,\r\n \r\n ...style,\r\n };\r\n \r\n return (\r\n <Component ref={ref} style={computedStyle} {...rest}>\r\n {children}\r\n </Component>\r\n );\r\n}));\r\n\r\nexport default Flex;\r\n"],"names":["Flex"],"mappings":"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"}
1
+ {"version":3,"file":"Flex.js","names":[],"sources":["../../../../src/react/core/layout/Flex.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - Flex Layout Primitive\r\n *\r\n * Flexbox container with theme-aware spacing and responsive direction/alignment.\r\n * The workhorse layout component for horizontal and vertical arrangements.\r\n *\r\n * Astro UX Compliance:\r\n * - 4px grid spacing tokens\r\n * - Responsive gap for mobile → mission control\r\n *\r\n * @example\r\n * ```tsx\r\n * // Horizontal row with centered items\r\n * <Flex gap=\"md\" align=\"center\">\r\n * <StatusIndicator status=\"normal\" />\r\n * <Body1>All Systems Nominal</Body1>\r\n * </Flex>\r\n *\r\n * // Vertical column, responsive gap\r\n * <Flex direction=\"column\" gap={['sm', 'md', 'lg']}>\r\n * <TelemetryCard />\r\n * <LinkBudgetCard />\r\n * </Flex>\r\n *\r\n * // Space between items\r\n * <Flex justify=\"space-between\" align=\"center\">\r\n * <H3>Telemetry</H3>\r\n * <Button variant=\"secondary\">Refresh</Button>\r\n * </Flex>\r\n * ```\r\n */\r\n\r\nimport React, { memo, forwardRef } from \"react\";\r\nimport { useTheme } from \"../../theme\";\r\nimport { useBreakpoint } from \"./useBreakpoint\";\r\nimport { resolveResponsiveSpacing, resolveResponsive } from \"./responsive\";\r\nimport type { ResponsiveValue } from \"./useBreakpoint\";\r\nimport type { SpacingToken } from \"./responsive\";\r\nimport type { BoxProps } from \"./Box\";\r\n\r\ntype SpacingInput = SpacingToken | string | number;\r\n\r\nexport interface FlexProps extends BoxProps {\r\n /** Flex direction */\r\n direction?: ResponsiveValue<\r\n \"row\" | \"column\" | \"row-reverse\" | \"column-reverse\"\r\n >;\r\n /** Flex wrap */\r\n wrap?: ResponsiveValue<\"nowrap\" | \"wrap\" | \"wrap-reverse\">;\r\n /** Gap between children (spacing token, px number, or CSS string) */\r\n gap?: ResponsiveValue<SpacingInput>;\r\n /** Row gap (overrides gap for rows) */\r\n rowGap?: ResponsiveValue<SpacingInput>;\r\n /** Column gap (overrides gap for columns) */\r\n columnGap?: ResponsiveValue<SpacingInput>;\r\n /** Align items (cross-axis) */\r\n align?: ResponsiveValue<\r\n \"flex-start\" | \"flex-end\" | \"center\" | \"baseline\" | \"stretch\"\r\n >;\r\n /** Justify content (main-axis) */\r\n justify?: ResponsiveValue<\r\n | \"flex-start\"\r\n | \"flex-end\"\r\n | \"center\"\r\n | \"space-between\"\r\n | \"space-around\"\r\n | \"space-evenly\"\r\n >;\r\n /** Shorthand: set both direction=\"column\" */\r\n column?: boolean;\r\n /** Shorthand: center both axes */\r\n center?: boolean;\r\n /** Make flex container inline */\r\n inline?: boolean;\r\n}\r\n\r\nexport const Flex = memo(\r\n forwardRef<HTMLDivElement, FlexProps>(function Flex(\r\n {\r\n direction,\r\n wrap,\r\n gap,\r\n rowGap,\r\n columnGap,\r\n align,\r\n justify,\r\n column = false,\r\n center = false,\r\n inline = false,\r\n style,\r\n children,\r\n // Extract BoxProps we handle ourselves\r\n padding,\r\n p,\r\n px,\r\n py,\r\n pt,\r\n pr,\r\n pb,\r\n pl,\r\n margin,\r\n m,\r\n mx,\r\n my,\r\n mt,\r\n mr,\r\n mb,\r\n ml,\r\n background,\r\n border,\r\n borderRadius,\r\n shadow,\r\n display: _display,\r\n width,\r\n height,\r\n minWidth,\r\n minHeight,\r\n maxWidth,\r\n maxHeight,\r\n overflow,\r\n position,\r\n flex: flexProp,\r\n flexGrow,\r\n flexShrink,\r\n as: Component = \"div\",\r\n ...rest\r\n },\r\n ref,\r\n ): React.ReactElement {\r\n const { tokens } = useTheme();\r\n const { breakpoint } = useBreakpoint();\r\n\r\n const resolveSpacing = (val: ResponsiveValue<SpacingInput> | undefined) =>\r\n resolveResponsiveSpacing(val, breakpoint, tokens);\r\n\r\n // Resolve padding\r\n const paddingAll = resolveSpacing(padding ?? p);\r\n const paddingXVal = resolveSpacing(px);\r\n const paddingYVal = resolveSpacing(py);\r\n\r\n // Resolve margin\r\n const marginAll = resolveSpacing(margin ?? m);\r\n const marginXVal = resolveSpacing(mx);\r\n const marginYVal = resolveSpacing(my);\r\n\r\n // Background color resolution\r\n const bgMap: Record<string, string> = {\r\n base: tokens.colors.background.base,\r\n surface: tokens.colors.background.surface,\r\n elevated: tokens.colors.background.elevated,\r\n overlay: tokens.colors.background.overlay,\r\n };\r\n\r\n const resolveSize = (\r\n val: string | number | undefined,\r\n ): string | undefined => {\r\n if (val === undefined) return undefined;\r\n if (typeof val === \"number\") return `${val}px`;\r\n return val;\r\n };\r\n\r\n const resolvedDirection = column\r\n ? \"column\"\r\n : (resolveResponsive(direction, breakpoint) ?? \"row\");\r\n\r\n // Resolve gap values — use conditional spreads to avoid setting\r\n // rowGap/columnGap to undefined, which clears the gap shorthand\r\n // in browsers (setting `style.rowGap = ''` removes the value\r\n // that `style.gap` set for row-gap).\r\n const resolvedGap = resolveSpacing(gap);\r\n const resolvedRowGap = resolveSpacing(rowGap);\r\n const resolvedColumnGap = resolveSpacing(columnGap);\r\n\r\n const computedStyle: React.CSSProperties = {\r\n display: inline ? \"inline-flex\" : \"flex\",\r\n flexDirection: resolvedDirection,\r\n flexWrap: resolveResponsive(wrap, breakpoint),\r\n ...(resolvedGap !== undefined ? { gap: resolvedGap } : {}),\r\n ...(resolvedRowGap !== undefined ? { rowGap: resolvedRowGap } : {}),\r\n ...(resolvedColumnGap !== undefined\r\n ? { columnGap: resolvedColumnGap }\r\n : {}),\r\n alignItems: center ? \"center\" : resolveResponsive(align, breakpoint),\r\n justifyContent: center\r\n ? \"center\"\r\n : resolveResponsive(justify, breakpoint),\r\n\r\n // Padding\r\n ...(paddingAll ? { padding: paddingAll } : {}),\r\n ...(paddingXVal\r\n ? { paddingLeft: paddingXVal, paddingRight: paddingXVal }\r\n : {}),\r\n ...(paddingYVal\r\n ? { paddingTop: paddingYVal, paddingBottom: paddingYVal }\r\n : {}),\r\n ...(resolveSpacing(pt) ? { paddingTop: resolveSpacing(pt) } : {}),\r\n ...(resolveSpacing(pr) ? { paddingRight: resolveSpacing(pr) } : {}),\r\n ...(resolveSpacing(pb) ? { paddingBottom: resolveSpacing(pb) } : {}),\r\n ...(resolveSpacing(pl) ? { paddingLeft: resolveSpacing(pl) } : {}),\r\n\r\n // Margin\r\n ...(marginAll ? { margin: marginAll } : {}),\r\n ...(marginXVal\r\n ? { marginLeft: marginXVal, marginRight: marginXVal }\r\n : {}),\r\n ...(marginYVal\r\n ? { marginTop: marginYVal, marginBottom: marginYVal }\r\n : {}),\r\n ...(resolveSpacing(mt) ? { marginTop: resolveSpacing(mt) } : {}),\r\n ...(resolveSpacing(mr) ? { marginRight: resolveSpacing(mr) } : {}),\r\n ...(resolveSpacing(mb) ? { marginBottom: resolveSpacing(mb) } : {}),\r\n ...(resolveSpacing(ml) ? { marginLeft: resolveSpacing(ml) } : {}),\r\n\r\n // Visual\r\n ...(background\r\n ? { backgroundColor: bgMap[background] || background }\r\n : {}),\r\n ...(border\r\n ? {\r\n border:\r\n border === true\r\n ? `1px solid ${tokens.colors.border.default}`\r\n : (border as string),\r\n }\r\n : {}),\r\n ...(borderRadius\r\n ? {\r\n borderRadius:\r\n (tokens.borderRadius as Record<string, string>)[\r\n borderRadius as string\r\n ] || borderRadius,\r\n }\r\n : {}),\r\n ...(shadow && shadow !== \"glow\"\r\n ? {\r\n boxShadow:\r\n (tokens.shadows as unknown as Record<string, string>)[\r\n shadow as string\r\n ] || shadow,\r\n }\r\n : {}),\r\n\r\n // Size\r\n width: resolveSize(resolveResponsive(width, breakpoint)),\r\n height: resolveSize(resolveResponsive(height, breakpoint)),\r\n minWidth: resolveSize(minWidth),\r\n minHeight: resolveSize(minHeight),\r\n maxWidth: resolveSize(maxWidth),\r\n maxHeight: resolveSize(maxHeight),\r\n overflow,\r\n position,\r\n flex: flexProp,\r\n flexGrow,\r\n flexShrink,\r\n\r\n ...style,\r\n };\r\n\r\n return (\r\n <Component ref={ref} style={computedStyle} {...rest}>\r\n {children}\r\n </Component>\r\n );\r\n }),\r\n);\r\n\r\nexport default Flex;\r\n"],"mappings":"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"}