@zendir/ui 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +640 -631
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/index.js +17 -221
  5. package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
  6. package/dist/react/3d/CesiumCaptureSource.js +364 -283
  7. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  8. package/dist/react/3d/ZenSpace3D.d.ts +2 -3
  9. package/dist/react/3d/ZenSpace3D.js +1681 -1237
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -1
  11. package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
  12. package/dist/react/3d/ZenSpace3DCesium.js +513 -560
  13. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
  14. package/dist/react/3d/ZenSpace3DShaders.js +61 -66
  15. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
  16. package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
  17. package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
  18. package/dist/react/3d/ZenSpace3DUtils.js +37 -24
  19. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  20. package/dist/react/3d/capturePngAnalysis.js +42 -36
  21. package/dist/react/3d/capturePngAnalysis.js.map +1 -1
  22. package/dist/react/3d/index.d.ts +3 -3
  23. package/dist/react/3d/index.js +5 -53
  24. package/dist/react/3d/threeLoader.d.ts +1 -1
  25. package/dist/react/3d/threeLoader.js +23 -18
  26. package/dist/react/3d/threeLoader.js.map +1 -1
  27. package/dist/react/astro/ClassificationBanner.d.ts +2 -3
  28. package/dist/react/astro/ClassificationBanner.js +95 -79
  29. package/dist/react/astro/ClassificationBanner.js.map +1 -1
  30. package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
  31. package/dist/react/astro/GlobalStatusBar.js +157 -163
  32. package/dist/react/astro/GlobalStatusBar.js.map +1 -1
  33. package/dist/react/astro/MissionClock.d.ts +7 -8
  34. package/dist/react/astro/MissionClock.js +377 -400
  35. package/dist/react/astro/MissionClock.js.map +1 -1
  36. package/dist/react/astro/MonitoringIcon.d.ts +1 -2
  37. package/dist/react/astro/MonitoringIcon.js +422 -358
  38. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  39. package/dist/react/astro/Notification.d.ts +1 -2
  40. package/dist/react/astro/Notification.js +229 -126
  41. package/dist/react/astro/Notification.js.map +1 -1
  42. package/dist/react/astro/Progress.d.ts +0 -1
  43. package/dist/react/astro/Progress.js +199 -141
  44. package/dist/react/astro/Progress.js.map +1 -1
  45. package/dist/react/astro/SimulationControls.d.ts +3 -4
  46. package/dist/react/astro/SimulationControls.js +596 -650
  47. package/dist/react/astro/SimulationControls.js.map +1 -1
  48. package/dist/react/astro/StatusIndicator.d.ts +0 -1
  49. package/dist/react/astro/StatusIndicator.js +236 -170
  50. package/dist/react/astro/StatusIndicator.js.map +1 -1
  51. package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
  52. package/dist/react/astro/UnifiedTimeline.js +2345 -2392
  53. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  54. package/dist/react/astro/index.d.ts +5 -5
  55. package/dist/react/astro/index.js +1 -25
  56. package/dist/react/cards/AccessCard.d.ts +0 -1
  57. package/dist/react/cards/AccessCard.js +471 -405
  58. package/dist/react/cards/AccessCard.js.map +1 -1
  59. package/dist/react/cards/OrbitCard.d.ts +0 -1
  60. package/dist/react/cards/OrbitCard.js +487 -364
  61. package/dist/react/cards/OrbitCard.js.map +1 -1
  62. package/dist/react/cards/SpacecraftCard.d.ts +0 -1
  63. package/dist/react/cards/SpacecraftCard.js +813 -925
  64. package/dist/react/cards/SpacecraftCard.js.map +1 -1
  65. package/dist/react/cards/TelemetryCard.d.ts +0 -1
  66. package/dist/react/cards/TelemetryCard.js +1055 -732
  67. package/dist/react/cards/TelemetryCard.js.map +1 -1
  68. package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
  69. package/dist/react/cards/TelemetryStreamCard.js +323 -297
  70. package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
  71. package/dist/react/cards/index.d.ts +1 -1
  72. package/dist/react/cards/index.js +1 -8
  73. package/dist/react/charts/GroundTrackMap.d.ts +6 -7
  74. package/dist/react/charts/GroundTrackMap.js +1377 -1256
  75. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  76. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
  77. package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
  78. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
  79. package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
  80. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
  81. package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
  82. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
  83. package/dist/react/charts/index.d.ts +1 -1
  84. package/dist/react/charts/index.js +7 -100
  85. package/dist/react/charts/unified/AstroChart.d.ts +1 -2
  86. package/dist/react/charts/unified/AstroChart.js +1331 -1411
  87. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  88. package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
  89. package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
  90. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
  91. package/dist/react/charts/unified/domain.d.ts +12 -13
  92. package/dist/react/charts/unified/domain.js +3999 -3145
  93. package/dist/react/charts/unified/domain.js.map +1 -1
  94. package/dist/react/charts/unified/generators.d.ts +3 -4
  95. package/dist/react/charts/unified/generators.js +561 -498
  96. package/dist/react/charts/unified/generators.js.map +1 -1
  97. package/dist/react/charts/unified/index.d.ts +1 -1
  98. package/dist/react/charts/unified/presets.d.ts +14 -15
  99. package/dist/react/charts/unified/presets.js +857 -994
  100. package/dist/react/charts/unified/presets.js.map +1 -1
  101. package/dist/react/charts/unified/sync.d.ts +2 -3
  102. package/dist/react/charts/unified/sync.js +229 -195
  103. package/dist/react/charts/unified/sync.js.map +1 -1
  104. package/dist/react/charts/unified/theme.d.ts +11 -12
  105. package/dist/react/charts/unified/theme.js +606 -642
  106. package/dist/react/charts/unified/theme.js.map +1 -1
  107. package/dist/react/charts/unified/types.d.ts +32 -33
  108. package/dist/react/charts/unified/useChartStream.d.ts +1 -2
  109. package/dist/react/charts/unified/useChartStream.js +203 -216
  110. package/dist/react/charts/unified/useChartStream.js.map +1 -1
  111. package/dist/react/chatgpt/AppCard.d.ts +1 -2
  112. package/dist/react/chatgpt/index.d.ts +7 -7
  113. package/dist/react/chatgpt/index.js +160 -139
  114. package/dist/react/chatgpt/index.js.map +1 -1
  115. package/dist/react/context/CategoryContext.d.ts +0 -1
  116. package/dist/react/context/CategoryContext.js +78 -29
  117. package/dist/react/context/CategoryContext.js.map +1 -1
  118. package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
  119. package/dist/react/context/DisplaySettingsContext.js +205 -156
  120. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  121. package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
  122. package/dist/react/context/SpatialSelectionContext.js +36 -7
  123. package/dist/react/context/SpatialSelectionContext.js.map +1 -1
  124. package/dist/react/core/data/DataTable.d.ts +3 -4
  125. package/dist/react/core/data/DataTable.js +473 -440
  126. package/dist/react/core/data/DataTable.js.map +1 -1
  127. package/dist/react/core/data/DataValue.d.ts +4 -5
  128. package/dist/react/core/data/DataValue.js +605 -571
  129. package/dist/react/core/data/DataValue.js.map +1 -1
  130. package/dist/react/core/data/propertyConfig.d.ts +1 -2
  131. package/dist/react/core/data/propertyConfig.js +446 -382
  132. package/dist/react/core/data/propertyConfig.js.map +1 -1
  133. package/dist/react/core/display/AstroIcon.d.ts +4 -5
  134. package/dist/react/core/display/AstroIcon.js +339 -429
  135. package/dist/react/core/display/AstroIcon.js.map +1 -1
  136. package/dist/react/core/display/Badge.d.ts +2 -3
  137. package/dist/react/core/display/Badge.js +131 -131
  138. package/dist/react/core/display/Badge.js.map +1 -1
  139. package/dist/react/core/display/CardHeader.d.ts +0 -1
  140. package/dist/react/core/display/CardHeader.js +398 -311
  141. package/dist/react/core/display/CardHeader.js.map +1 -1
  142. package/dist/react/core/display/Container.d.ts +2 -3
  143. package/dist/react/core/display/Container.js +640 -668
  144. package/dist/react/core/display/Container.js.map +1 -1
  145. package/dist/react/core/display/CopyButton.d.ts +1 -2
  146. package/dist/react/core/display/CopyButton.js +158 -101
  147. package/dist/react/core/display/CopyButton.js.map +1 -1
  148. package/dist/react/core/display/GlassCard.d.ts +3 -4
  149. package/dist/react/core/display/GlassCard.js +416 -369
  150. package/dist/react/core/display/GlassCard.js.map +1 -1
  151. package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
  152. package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
  153. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
  154. package/dist/react/core/display/Icon.d.ts +2 -3
  155. package/dist/react/core/display/Icon.js +172 -143
  156. package/dist/react/core/display/Icon.js.map +1 -1
  157. package/dist/react/core/display/Typography.d.ts +24 -25
  158. package/dist/react/core/display/Typography.js +360 -178
  159. package/dist/react/core/display/Typography.js.map +1 -1
  160. package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
  161. package/dist/react/core/feedback/ConfirmDialog.js +343 -304
  162. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
  163. package/dist/react/core/feedback/Dialog.d.ts +2 -3
  164. package/dist/react/core/feedback/Dialog.js +189 -197
  165. package/dist/react/core/feedback/Dialog.js.map +1 -1
  166. package/dist/react/core/feedback/Toast.d.ts +2 -3
  167. package/dist/react/core/feedback/Toast.js +346 -207
  168. package/dist/react/core/feedback/Toast.js.map +1 -1
  169. package/dist/react/core/index.d.ts +26 -26
  170. package/dist/react/core/index.js +7 -119
  171. package/dist/react/core/inputs/Button.d.ts +2 -3
  172. package/dist/react/core/inputs/Button.js +281 -304
  173. package/dist/react/core/inputs/Button.js.map +1 -1
  174. package/dist/react/core/inputs/Checkbox.d.ts +2 -3
  175. package/dist/react/core/inputs/Checkbox.js +139 -127
  176. package/dist/react/core/inputs/Checkbox.js.map +1 -1
  177. package/dist/react/core/inputs/Input.d.ts +3 -4
  178. package/dist/react/core/inputs/Input.js +277 -285
  179. package/dist/react/core/inputs/Input.js.map +1 -1
  180. package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
  181. package/dist/react/core/inputs/LimitsBar.js +271 -196
  182. package/dist/react/core/inputs/LimitsBar.js.map +1 -1
  183. package/dist/react/core/inputs/NumberInput.d.ts +2 -3
  184. package/dist/react/core/inputs/NumberInput.js +531 -503
  185. package/dist/react/core/inputs/NumberInput.js.map +1 -1
  186. package/dist/react/core/inputs/PinInput.d.ts +2 -3
  187. package/dist/react/core/inputs/PinInput.js +224 -207
  188. package/dist/react/core/inputs/PinInput.js.map +1 -1
  189. package/dist/react/core/inputs/Select.d.ts +1 -2
  190. package/dist/react/core/inputs/Select.js +298 -299
  191. package/dist/react/core/inputs/Select.js.map +1 -1
  192. package/dist/react/core/inputs/Toggle.d.ts +2 -3
  193. package/dist/react/core/inputs/Toggle.js +142 -148
  194. package/dist/react/core/inputs/Toggle.js.map +1 -1
  195. package/dist/react/core/layout/Box.d.ts +3 -4
  196. package/dist/react/core/layout/Box.js +118 -122
  197. package/dist/react/core/layout/Box.js.map +1 -1
  198. package/dist/react/core/layout/Center.d.ts +0 -1
  199. package/dist/react/core/layout/Center.js +45 -32
  200. package/dist/react/core/layout/Center.js.map +1 -1
  201. package/dist/react/core/layout/Divider.d.ts +1 -2
  202. package/dist/react/core/layout/Divider.js +112 -106
  203. package/dist/react/core/layout/Divider.js.map +1 -1
  204. package/dist/react/core/layout/Flex.d.ts +4 -5
  205. package/dist/react/core/layout/Flex.js +120 -124
  206. package/dist/react/core/layout/Flex.js.map +1 -1
  207. package/dist/react/core/layout/Grid.d.ts +5 -6
  208. package/dist/react/core/layout/Grid.js +131 -138
  209. package/dist/react/core/layout/Grid.js.map +1 -1
  210. package/dist/react/core/layout/Spacer.d.ts +0 -1
  211. package/dist/react/core/layout/Spacer.js +36 -29
  212. package/dist/react/core/layout/Spacer.js.map +1 -1
  213. package/dist/react/core/layout/Stack.d.ts +4 -5
  214. package/dist/react/core/layout/Stack.js +127 -70
  215. package/dist/react/core/layout/Stack.js.map +1 -1
  216. package/dist/react/core/layout/responsive.d.ts +1 -2
  217. package/dist/react/core/layout/responsive.js +25 -19
  218. package/dist/react/core/layout/responsive.js.map +1 -1
  219. package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
  220. package/dist/react/core/layout/useBreakpoint.js +119 -66
  221. package/dist/react/core/layout/useBreakpoint.js.map +1 -1
  222. package/dist/react/core/navigation/AppBar.d.ts +1 -2
  223. package/dist/react/core/navigation/AppBar.js +827 -805
  224. package/dist/react/core/navigation/AppBar.js.map +1 -1
  225. package/dist/react/core/navigation/Pagination.d.ts +2 -3
  226. package/dist/react/core/navigation/Pagination.js +207 -187
  227. package/dist/react/core/navigation/Pagination.js.map +1 -1
  228. package/dist/react/core/navigation/SideNav.d.ts +5 -6
  229. package/dist/react/core/navigation/SideNav.js +855 -629
  230. package/dist/react/core/navigation/SideNav.js.map +1 -1
  231. package/dist/react/core/navigation/Tabs.d.ts +0 -1
  232. package/dist/react/core/navigation/Tabs.js +113 -119
  233. package/dist/react/core/navigation/Tabs.js.map +1 -1
  234. package/dist/react/core/overlays/Popover.d.ts +2 -3
  235. package/dist/react/core/overlays/Popover.js +303 -282
  236. package/dist/react/core/overlays/Popover.js.map +1 -1
  237. package/dist/react/core/overlays/SidePanel.d.ts +1 -2
  238. package/dist/react/core/overlays/SidePanel.js +217 -212
  239. package/dist/react/core/overlays/SidePanel.js.map +1 -1
  240. package/dist/react/core/overlays/Tooltip.d.ts +1 -2
  241. package/dist/react/core/overlays/Tooltip.js +170 -176
  242. package/dist/react/core/overlays/Tooltip.js.map +1 -1
  243. package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
  244. package/dist/react/core/widgets/ActivityPlanner.js +855 -517
  245. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
  246. package/dist/react/core/widgets/Capture.d.ts +2 -3
  247. package/dist/react/core/widgets/Capture.js +965 -779
  248. package/dist/react/core/widgets/Capture.js.map +1 -1
  249. package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
  250. package/dist/react/core/widgets/ChatPanel.js +1734 -1034
  251. package/dist/react/core/widgets/ChatPanel.js.map +1 -1
  252. package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
  253. package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
  254. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
  255. package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
  256. package/dist/react/core/widgets/CommandBuilder.js +624 -516
  257. package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
  258. package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
  259. package/dist/react/core/widgets/ConnectionForm.js +528 -492
  260. package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
  261. package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
  262. package/dist/react/core/widgets/FileExplorer.js +617 -505
  263. package/dist/react/core/widgets/FileExplorer.js.map +1 -1
  264. package/dist/react/core/widgets/HexViewer.d.ts +2 -3
  265. package/dist/react/core/widgets/HexViewer.js +1353 -1091
  266. package/dist/react/core/widgets/HexViewer.js.map +1 -1
  267. package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
  268. package/dist/react/core/widgets/ImageFrame.js +230 -193
  269. package/dist/react/core/widgets/ImageFrame.js.map +1 -1
  270. package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
  271. package/dist/react/core/widgets/ImageGallery.js +380 -314
  272. package/dist/react/core/widgets/ImageGallery.js.map +1 -1
  273. package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
  274. package/dist/react/core/widgets/ImagePanel.js +110 -101
  275. package/dist/react/core/widgets/ImagePanel.js.map +1 -1
  276. package/dist/react/core/widgets/LogViewer.d.ts +2 -3
  277. package/dist/react/core/widgets/LogViewer.js +711 -607
  278. package/dist/react/core/widgets/LogViewer.js.map +1 -1
  279. package/dist/react/core/widgets/MessageStream.d.ts +3 -4
  280. package/dist/react/core/widgets/MessageStream.js +514 -444
  281. package/dist/react/core/widgets/MessageStream.js.map +1 -1
  282. package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
  283. package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
  284. package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
  285. package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
  286. package/dist/react/core/widgets/PacketViewer.js +550 -421
  287. package/dist/react/core/widgets/PacketViewer.js.map +1 -1
  288. package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
  289. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
  290. package/dist/react/hooks/index.d.ts +5 -5
  291. package/dist/react/hooks/useAccessWindows.d.ts +0 -1
  292. package/dist/react/hooks/useCompactMode.d.ts +1 -1
  293. package/dist/react/hooks/useCompactMode.js +104 -58
  294. package/dist/react/hooks/useCompactMode.js.map +1 -1
  295. package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
  296. package/dist/react/hooks/useSimulationScene.d.ts +1 -2
  297. package/dist/react/hooks/useSimulationScene.js +481 -374
  298. package/dist/react/hooks/useSimulationScene.js.map +1 -1
  299. package/dist/react/index.d.ts +3 -3
  300. package/dist/react/panels/LayerControlPanel.d.ts +1 -2
  301. package/dist/react/panels/LayerControlPanel.js +223 -180
  302. package/dist/react/panels/LayerControlPanel.js.map +1 -1
  303. package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
  304. package/dist/react/panels/ObjectInventoryPanel.js +315 -250
  305. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
  306. package/dist/react/panels/index.d.ts +1 -1
  307. package/dist/react/panels/index.js +1 -6
  308. package/dist/react/shared/ErrorBoundary.d.ts +1 -2
  309. package/dist/react/shared/ErrorBoundary.js +170 -139
  310. package/dist/react/shared/ErrorBoundary.js.map +1 -1
  311. package/dist/react/shared/Skeleton.d.ts +1 -2
  312. package/dist/react/shared/Skeleton.js +300 -301
  313. package/dist/react/shared/Skeleton.js.map +1 -1
  314. package/dist/react/theme/ThemeProvider.d.ts +2 -321
  315. package/dist/react/theme/ThemeProvider.js +312 -939
  316. package/dist/react/theme/ThemeProvider.js.map +1 -1
  317. package/dist/react/theme/cardAccent.d.ts +1 -2
  318. package/dist/react/theme/cardAccent.js +196 -126
  319. package/dist/react/theme/cardAccent.js.map +1 -1
  320. package/dist/react/theme/config.d.ts +0 -1
  321. package/dist/react/theme/config.js +47 -25
  322. package/dist/react/theme/config.js.map +1 -1
  323. package/dist/react/theme/index.d.ts +2 -2
  324. package/dist/react/theme/index.js +1 -16
  325. package/dist/react/theme/types.d.ts +332 -0
  326. package/dist/react/theme/types.js +39 -0
  327. package/dist/react/theme/types.js.map +1 -0
  328. package/dist/react/types.d.ts +8 -8
  329. package/dist/react/types.js +147 -47
  330. package/dist/react/types.js.map +1 -1
  331. package/dist/react/utils/categoryPalette.d.ts +0 -1
  332. package/dist/react/utils/categoryPalette.js +91 -102
  333. package/dist/react/utils/categoryPalette.js.map +1 -1
  334. package/dist/react/utils/index.d.ts +5 -5
  335. package/dist/react/utils/index.js +457 -371
  336. package/dist/react/utils/index.js.map +1 -1
  337. package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
  338. package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
  339. package/dist/react/visualizations/NavBallCard.d.ts +0 -1
  340. package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
  341. package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
  342. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
  343. package/dist/react/visualizations/index.d.ts +3 -3
  344. package/dist/react.d.ts +2 -1
  345. package/dist/react.js +17 -221
  346. package/dist/shaders/atmosphere.frag.js +6 -5
  347. package/dist/shaders/atmosphere.frag.js.map +1 -1
  348. package/dist/shaders/atmosphere.vert.js +6 -5
  349. package/dist/shaders/atmosphere.vert.js.map +1 -1
  350. package/dist/shaders/stars.frag.js +6 -5
  351. package/dist/shaders/stars.frag.js.map +1 -1
  352. package/dist/shaders/stars.vert.js +6 -5
  353. package/dist/shaders/stars.vert.js.map +1 -1
  354. package/dist/style.css +217 -194
  355. package/dist/tokens/core.d.ts +159 -0
  356. package/dist/tokens/core.js +144 -0
  357. package/dist/tokens/core.js.map +1 -0
  358. package/dist/tokens/css-vars.d.ts +213 -2
  359. package/dist/tokens/css-vars.js +590 -227
  360. package/dist/tokens/css-vars.js.map +1 -1
  361. package/dist/tokens/index.d.ts +31 -228
  362. package/dist/tokens/index.js +281 -366
  363. package/dist/tokens/index.js.map +1 -1
  364. package/dist/tokens/palettes/astro.d.ts +129 -0
  365. package/dist/tokens/palettes/astro.js +112 -0
  366. package/dist/tokens/palettes/astro.js.map +1 -0
  367. package/dist/tokens/palettes/index.d.ts +288 -0
  368. package/dist/tokens/palettes/index.js +35 -0
  369. package/dist/tokens/palettes/index.js.map +1 -0
  370. package/dist/tokens/palettes/tailwind.d.ts +324 -0
  371. package/dist/tokens/palettes/tailwind.js +201 -0
  372. package/dist/tokens/palettes/tailwind.js.map +1 -0
  373. package/dist/tokens/palettes/zendir.d.ts +126 -0
  374. package/dist/tokens/palettes/zendir.js +92 -0
  375. package/dist/tokens/palettes/zendir.js.map +1 -0
  376. package/dist/tokens/themes.d.ts +30 -0
  377. package/dist/tokens/themes.js +704 -0
  378. package/dist/tokens/themes.js.map +1 -0
  379. package/dist/tokens/tokens.css +419 -41
  380. package/dist/types/index.d.ts +2 -2
  381. package/package.json +310 -313
  382. package/dist/index.js.map +0 -1
  383. package/dist/react/3d/index.js.map +0 -1
  384. package/dist/react/astro/index.js.map +0 -1
  385. package/dist/react/cards/index.js.map +0 -1
  386. package/dist/react/charts/index.js.map +0 -1
  387. package/dist/react/core/index.js.map +0 -1
  388. package/dist/react/panels/index.js.map +0 -1
  389. package/dist/react/theme/astro-tokens.d.ts +0 -153
  390. package/dist/react/theme/index.js.map +0 -1
  391. package/dist/react.js.map +0 -1
@@ -1,303 +1,302 @@
1
- import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
- import { memo, forwardRef, useState, useRef, useId, useLayoutEffect, useEffect } from "react";
3
- import { createPortal } from "react-dom";
4
1
  import { useTheme } from "../../theme/ThemeProvider.js";
5
2
  import { classNames } from "../../utils/index.js";
6
3
  import { useBreakpoint } from "../layout/useBreakpoint.js";
7
- const Select = memo(forwardRef(function Select2({
8
- label,
9
- options,
10
- value,
11
- onChange,
12
- placeholder = "Select...",
13
- helperText,
14
- error,
15
- disabled = false,
16
- fullWidth = false,
17
- size = "medium",
18
- className = "",
19
- labelPlacement = "outlined",
20
- required
21
- }, ref) {
22
- const { tokens, theme } = useTheme();
23
- const { isMobile } = useBreakpoint();
24
- const [isOpen, setIsOpen] = useState(false);
25
- const [focused, setFocused] = useState(false);
26
- const [dropdownRect, setDropdownRect] = useState(null);
27
- const selectRef = useRef(null);
28
- const triggerRef = useRef(null);
29
- const dropdownRef = useRef(null);
30
- const generatedId = useId();
31
- const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
32
- tokens.colors.interactive.transparentDefault;
33
- tokens.colors.interactive.transparentInputBg;
34
- const hasError = !!error;
35
- const selectedOption = options.find((o) => o.value === value);
36
- const isOutlined = labelPlacement === "outlined";
37
- const sizeConfig = {
38
- small: { height: tokens.elementSize.sm, fontSize: tokens.typography.fontSize.xs, padding: tokens.spacing.sm, inputPaddingLeft: 8 },
39
- medium: { height: tokens.elementSize.md, fontSize: tokens.typography.fontSize.sm, padding: tokens.spacing.md, inputPaddingLeft: 16 },
40
- large: { height: tokens.elementSize.lg, fontSize: tokens.typography.fontSize.base, padding: tokens.spacing.lg, inputPaddingLeft: 24 }
41
- };
42
- const config = sizeConfig[size];
43
- const controlHeight = isMobile ? "44px" : config.height;
44
- const optionRowHeight = isMobile ? 40 : size === "small" ? 30 : size === "medium" ? 34 : 38;
45
- const DROPDOWN_MAX_HEIGHT = 200;
46
- const GAP = 4;
47
- useLayoutEffect(() => {
48
- if (!isOpen || !triggerRef.current) {
49
- setDropdownRect(null);
50
- return;
51
- }
52
- const update = () => {
53
- if (triggerRef.current) {
54
- const rect = triggerRef.current.getBoundingClientRect();
55
- const spaceBelow = window.innerHeight - rect.bottom - GAP;
56
- const spaceAbove = rect.top - GAP;
57
- const openUp = spaceBelow < Math.min(DROPDOWN_MAX_HEIGHT, options.length * optionRowHeight) && spaceAbove > spaceBelow;
58
- setDropdownRect({
59
- top: openUp ? rect.top - GAP : rect.bottom + GAP,
60
- left: rect.left,
61
- width: rect.width,
62
- openUp
63
- });
64
- }
65
- };
66
- update();
67
- window.addEventListener("scroll", update, true);
68
- window.addEventListener("resize", update);
69
- return () => {
70
- window.removeEventListener("scroll", update, true);
71
- window.removeEventListener("resize", update);
72
- };
73
- }, [isOpen, options.length, optionRowHeight]);
74
- useEffect(() => {
75
- if (!isOpen) return;
76
- const handleClickOutside = (e) => {
77
- var _a, _b;
78
- const target = e.target;
79
- if (((_a = selectRef.current) == null ? void 0 : _a.contains(target)) || ((_b = dropdownRef.current) == null ? void 0 : _b.contains(target))) {
80
- return;
81
- }
82
- setIsOpen(false);
83
- };
84
- document.addEventListener("click", handleClickOutside, true);
85
- return () => document.removeEventListener("click", handleClickOutside, true);
86
- }, [isOpen]);
87
- const computedBorder = hasError ? tokens.borders.input.error : focused || isOpen ? tokens.borders.input.focus : tokens.borders.input.default;
88
- const labelBg = isTransparentTheme ? tokens.colors.background.base : tokens.colors.background.surface;
89
- const outlinedLabelSizeMap = { small: "0.625rem", medium: "0.6875rem", large: "0.75rem" };
90
- const outlinedLabelLeftMap = { small: "2px", medium: "10px", large: "18px" };
91
- const labelContent = /* @__PURE__ */ jsxs(Fragment, { children: [
92
- label,
93
- required && /* @__PURE__ */ jsx("span", { style: { color: tokens.colors.status.critical, marginLeft: "2px" }, children: "*" })
94
- ] });
95
- return /* @__PURE__ */ jsxs(
96
- "div",
97
- {
98
- ref,
99
- className: classNames("zendir-select-wrapper", className),
100
- style: {
101
- display: "flex",
102
- flexDirection: "column",
103
- gap: tokens.spacing.xs,
104
- width: fullWidth ? "100%" : void 0
105
- },
106
- children: [
107
- label && !isOutlined && /* @__PURE__ */ jsx(
108
- "span",
109
- {
110
- id: `${generatedId}-label`,
111
- style: {
112
- fontSize: tokens.typography.fontSize.xs,
113
- fontWeight: tokens.typography.fontWeight.medium,
114
- color: tokens.colors.text.secondary
115
- },
116
- children: labelContent
117
- }
118
- ),
119
- /* @__PURE__ */ jsxs("div", { ref: selectRef, style: { position: "relative" }, children: [
120
- label && isOutlined && /* @__PURE__ */ jsx(
121
- "span",
122
- {
123
- id: `${generatedId}-label`,
124
- style: {
125
- position: "absolute",
126
- top: 0,
127
- left: outlinedLabelLeftMap[size],
128
- transform: "translateY(-50%)",
129
- backgroundColor: labelBg,
130
- padding: `0 ${tokens.spacing.xs}`,
131
- fontSize: outlinedLabelSizeMap[size],
132
- fontWeight: tokens.typography.fontWeight.medium,
133
- color: focused || isOpen ? hasError ? tokens.colors.status.critical : tokens.colors.accent.primary : hasError ? tokens.colors.status.critical : tokens.colors.text.secondary,
134
- zIndex: 1,
135
- pointerEvents: "none",
136
- transition: `color ${tokens.animation.fast}`,
137
- lineHeight: 1.2,
138
- whiteSpace: "nowrap",
139
- letterSpacing: "0.01em"
140
- },
141
- children: labelContent
142
- }
143
- ),
144
- /* @__PURE__ */ jsxs(
145
- "button",
146
- {
147
- ref: triggerRef,
148
- type: "button",
149
- disabled,
150
- onClick: () => !disabled && setIsOpen(!isOpen),
151
- onFocus: () => setFocused(true),
152
- onBlur: () => setFocused(false),
153
- "aria-haspopup": "listbox",
154
- "aria-expanded": isOpen,
155
- "aria-labelledby": label ? `${generatedId}-label` : void 0,
156
- "aria-describedby": helperText || error ? `${generatedId}-hint` : void 0,
157
- style: {
158
- width: "100%",
159
- height: controlHeight,
160
- padding: `0 ${config.padding}`,
161
- fontSize: config.fontSize,
162
- fontFamily: tokens.typography.fontFamily.primary,
163
- color: selectedOption ? tokens.colors.text.primary : tokens.colors.text.muted,
164
- backgroundColor: isTransparentTheme ? "rgba(10, 15, 25, 0.4)" : tokens.colors.background.surface,
165
- border: computedBorder,
166
- borderRadius: tokens.borderRadius.md,
167
- cursor: disabled ? "not-allowed" : "pointer",
168
- opacity: disabled ? 0.5 : 1,
169
- display: "flex",
170
- alignItems: "center",
171
- justifyContent: "space-between",
172
- textAlign: "left",
173
- outline: "none",
174
- transition: `border-color ${tokens.animation.fast}`,
175
- boxShadow: focused || isOpen ? tokens.borders.focusRing.default : "none"
176
- },
177
- children: [
178
- /* @__PURE__ */ jsx("span", { children: (selectedOption == null ? void 0 : selectedOption.label) ?? placeholder }),
179
- /* @__PURE__ */ jsx(
180
- "svg",
181
- {
182
- width: "16",
183
- height: "16",
184
- viewBox: "0 0 24 24",
185
- fill: tokens.colors.text.muted,
186
- style: {
187
- transform: isOpen ? "rotate(180deg)" : "rotate(0)",
188
- transition: `transform ${tokens.animation.fast}`
189
- },
190
- children: /* @__PURE__ */ jsx("path", { d: "M7 10l5 5 5-5z" })
191
- }
192
- )
193
- ]
194
- }
195
- ),
196
- isOpen && dropdownRect && createPortal(
197
- /* @__PURE__ */ jsxs(
198
- "ul",
199
- {
200
- ref: dropdownRef,
201
- role: "listbox",
202
- style: {
203
- position: "fixed",
204
- top: dropdownRect.openUp ? void 0 : dropdownRect.top,
205
- bottom: dropdownRect.openUp ? window.innerHeight - dropdownRect.top : void 0,
206
- left: dropdownRect.left,
207
- width: dropdownRect.width,
208
- padding: tokens.spacing.xs,
209
- backgroundColor: isTransparentTheme ? "rgba(139, 92, 246, 0.12)" : tokens.colors.background.elevated,
210
- backdropFilter: isTransparentTheme ? "blur(12px)" : void 0,
211
- WebkitBackdropFilter: isTransparentTheme ? "blur(12px)" : void 0,
212
- border: tokens.borders.dropdown,
213
- borderRadius: tokens.borderRadius.md,
214
- boxShadow: `${tokens.shadows.lg}, 0 0 30px ${tokens.colors.accent.primary}10`,
215
- zIndex: 1e4,
216
- maxHeight: "200px",
217
- overflowY: "auto",
218
- listStyle: "none",
219
- margin: 0,
220
- animation: `zendir-dropdown ${tokens.animation.duration.normal}ms ${tokens.animation.easing.default} both`
221
- },
222
- children: [
223
- /* @__PURE__ */ jsx("style", { children: `@keyframes zendir-dropdown { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: translateY(0); } }` }),
224
- options.map((option) => /* @__PURE__ */ jsx(
225
- "li",
226
- {
227
- role: "option",
228
- "aria-selected": option.value === value,
229
- tabIndex: option.disabled ? -1 : 0,
230
- onMouseDown: (e) => {
231
- e.stopPropagation();
232
- },
233
- onClick: (e) => {
234
- e.stopPropagation();
235
- if (!option.disabled) {
236
- onChange == null ? void 0 : onChange(option.value);
237
- setIsOpen(false);
238
- }
239
- },
240
- onKeyDown: (e) => {
241
- if (option.disabled) return;
242
- if (e.key === "Enter" || e.key === " ") {
243
- e.preventDefault();
244
- onChange == null ? void 0 : onChange(option.value);
245
- setIsOpen(false);
246
- }
247
- },
248
- style: {
249
- padding: `0 ${tokens.spacing.md}`,
250
- height: optionRowHeight,
251
- minHeight: optionRowHeight,
252
- display: "flex",
253
- alignItems: "center",
254
- fontSize: config.fontSize,
255
- lineHeight: 1.2,
256
- whiteSpace: "nowrap",
257
- overflow: "hidden",
258
- textOverflow: "ellipsis",
259
- color: option.disabled ? tokens.colors.text.muted : tokens.colors.text.primary,
260
- backgroundColor: option.value === value ? `${tokens.colors.accent.primary}15` : "transparent",
261
- borderRadius: tokens.borderRadius.sm,
262
- cursor: option.disabled ? "not-allowed" : "pointer",
263
- opacity: option.disabled ? 0.5 : 1,
264
- transition: `background-color ${tokens.animation.fast}`
265
- },
266
- onMouseEnter: (e) => {
267
- if (!option.disabled) {
268
- e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}10`;
269
- }
270
- },
271
- onMouseLeave: (e) => {
272
- e.currentTarget.style.backgroundColor = option.value === value ? `${tokens.colors.accent.primary}15` : "transparent";
273
- },
274
- children: option.label
275
- },
276
- option.value
277
- ))
278
- ]
279
- }
280
- ),
281
- document.body
282
- )
283
- ] }),
284
- (helperText || error) && /* @__PURE__ */ jsx(
285
- "span",
286
- {
287
- id: `${generatedId}-hint`,
288
- role: hasError ? "alert" : void 0,
289
- style: {
290
- fontSize: tokens.typography.fontSize.xs,
291
- color: hasError ? tokens.colors.status.critical : tokens.colors.text.muted
292
- },
293
- children: error || helperText
294
- }
295
- )
296
- ]
297
- }
298
- );
4
+ import { forwardRef, memo, useEffect, useId, useLayoutEffect, useRef, useState } from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { createPortal } from "react-dom";
7
+ //#region src/react/core/inputs/Select.tsx
8
+ /**
9
+ * @zendir/ui - Select Component
10
+ *
11
+ * Dropdown select following Astro UX Design System.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <Select
16
+ * label="Spacecraft"
17
+ * options={[
18
+ * { value: 'sat-001', label: 'Explorer-1' },
19
+ * { value: 'sat-002', label: 'Voyager-2' },
20
+ * ]}
21
+ * value={selected}
22
+ * onChange={setSelected}
23
+ * />
24
+ * ```
25
+ */
26
+ var Select = memo(forwardRef(function Select({ label, options, value, onChange, placeholder = "Select...", helperText, error, disabled = false, fullWidth = false, size = "medium", className = "", labelPlacement = "outlined", required }, ref) {
27
+ const { tokens, theme } = useTheme();
28
+ const { isMobile } = useBreakpoint();
29
+ const [isOpen, setIsOpen] = useState(false);
30
+ const [focused, setFocused] = useState(false);
31
+ const [dropdownRect, setDropdownRect] = useState(null);
32
+ const selectRef = useRef(null);
33
+ const triggerRef = useRef(null);
34
+ const dropdownRef = useRef(null);
35
+ const generatedId = useId();
36
+ const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
37
+ tokens.colors.interactive.transparentDefault;
38
+ tokens.colors.interactive.transparentInputBg;
39
+ const hasError = !!error;
40
+ const selectedOption = options.find((o) => o.value === value);
41
+ const isOutlined = labelPlacement === "outlined";
42
+ const config = {
43
+ small: {
44
+ height: tokens.elementSize.sm,
45
+ fontSize: tokens.typography.fontSize.xs,
46
+ padding: tokens.spacing.sm,
47
+ inputPaddingLeft: 8
48
+ },
49
+ medium: {
50
+ height: tokens.elementSize.md,
51
+ fontSize: tokens.typography.fontSize.sm,
52
+ padding: tokens.spacing.md,
53
+ inputPaddingLeft: 16
54
+ },
55
+ large: {
56
+ height: tokens.elementSize.lg,
57
+ fontSize: tokens.typography.fontSize.base,
58
+ padding: tokens.spacing.lg,
59
+ inputPaddingLeft: 24
60
+ }
61
+ }[size];
62
+ const controlHeight = isMobile ? "44px" : config.height;
63
+ const optionRowHeight = isMobile ? 40 : size === "small" ? 30 : size === "medium" ? 34 : 38;
64
+ const DROPDOWN_MAX_HEIGHT = 200;
65
+ const GAP = 4;
66
+ useLayoutEffect(() => {
67
+ if (!isOpen || !triggerRef.current) {
68
+ setDropdownRect(null);
69
+ return;
70
+ }
71
+ const update = () => {
72
+ if (triggerRef.current) {
73
+ const rect = triggerRef.current.getBoundingClientRect();
74
+ const spaceBelow = window.innerHeight - rect.bottom - GAP;
75
+ const spaceAbove = rect.top - GAP;
76
+ const openUp = spaceBelow < Math.min(DROPDOWN_MAX_HEIGHT, options.length * optionRowHeight) && spaceAbove > spaceBelow;
77
+ setDropdownRect({
78
+ top: openUp ? rect.top - GAP : rect.bottom + GAP,
79
+ left: rect.left,
80
+ width: rect.width,
81
+ openUp
82
+ });
83
+ }
84
+ };
85
+ update();
86
+ window.addEventListener("scroll", update, true);
87
+ window.addEventListener("resize", update);
88
+ return () => {
89
+ window.removeEventListener("scroll", update, true);
90
+ window.removeEventListener("resize", update);
91
+ };
92
+ }, [
93
+ isOpen,
94
+ options.length,
95
+ optionRowHeight
96
+ ]);
97
+ useEffect(() => {
98
+ if (!isOpen) return;
99
+ const handleClickOutside = (e) => {
100
+ const target = e.target;
101
+ if (selectRef.current?.contains(target) || dropdownRef.current?.contains(target)) return;
102
+ setIsOpen(false);
103
+ };
104
+ document.addEventListener("click", handleClickOutside, true);
105
+ return () => document.removeEventListener("click", handleClickOutside, true);
106
+ }, [isOpen]);
107
+ const computedBorder = hasError ? tokens.borders.input.error : focused || isOpen ? tokens.borders.input.focus : tokens.borders.input.default;
108
+ const labelBg = isTransparentTheme ? tokens.colors.background.base : tokens.colors.background.surface;
109
+ const outlinedLabelSizeMap = {
110
+ small: "0.625rem",
111
+ medium: "0.6875rem",
112
+ large: "0.75rem"
113
+ };
114
+ const outlinedLabelLeftMap = {
115
+ small: "2px",
116
+ medium: "10px",
117
+ large: "18px"
118
+ };
119
+ const labelContent = /* @__PURE__ */ jsxs(Fragment, { children: [label, required && /* @__PURE__ */ jsx("span", {
120
+ style: {
121
+ color: tokens.colors.status.critical,
122
+ marginLeft: "2px"
123
+ },
124
+ children: "*"
125
+ })] });
126
+ return /* @__PURE__ */ jsxs("div", {
127
+ ref,
128
+ className: classNames("zendir-select-wrapper", className),
129
+ style: {
130
+ display: "flex",
131
+ flexDirection: "column",
132
+ gap: tokens.spacing.xs,
133
+ width: fullWidth ? "100%" : void 0
134
+ },
135
+ children: [
136
+ label && !isOutlined && /* @__PURE__ */ jsx("span", {
137
+ id: `${generatedId}-label`,
138
+ style: {
139
+ fontSize: tokens.typography.fontSize.xs,
140
+ fontWeight: tokens.typography.fontWeight.medium,
141
+ color: tokens.colors.text.secondary
142
+ },
143
+ children: labelContent
144
+ }),
145
+ /* @__PURE__ */ jsxs("div", {
146
+ ref: selectRef,
147
+ style: { position: "relative" },
148
+ children: [
149
+ label && isOutlined && /* @__PURE__ */ jsx("span", {
150
+ id: `${generatedId}-label`,
151
+ style: {
152
+ position: "absolute",
153
+ top: 0,
154
+ left: outlinedLabelLeftMap[size],
155
+ transform: "translateY(-50%)",
156
+ backgroundColor: labelBg,
157
+ padding: `0 ${tokens.spacing.xs}`,
158
+ fontSize: outlinedLabelSizeMap[size],
159
+ fontWeight: tokens.typography.fontWeight.medium,
160
+ color: focused || isOpen ? hasError ? tokens.colors.status.critical : tokens.colors.accent.primary : hasError ? tokens.colors.status.critical : tokens.colors.text.secondary,
161
+ zIndex: 1,
162
+ pointerEvents: "none",
163
+ transition: `color ${tokens.animation.fast}`,
164
+ lineHeight: 1.2,
165
+ whiteSpace: "nowrap",
166
+ letterSpacing: "0.01em"
167
+ },
168
+ children: labelContent
169
+ }),
170
+ /* @__PURE__ */ jsxs("button", {
171
+ ref: triggerRef,
172
+ type: "button",
173
+ disabled,
174
+ onClick: () => !disabled && setIsOpen(!isOpen),
175
+ onFocus: () => setFocused(true),
176
+ onBlur: () => setFocused(false),
177
+ "aria-haspopup": "listbox",
178
+ "aria-expanded": isOpen,
179
+ "aria-labelledby": label ? `${generatedId}-label` : void 0,
180
+ "aria-describedby": helperText || error ? `${generatedId}-hint` : void 0,
181
+ style: {
182
+ width: "100%",
183
+ height: controlHeight,
184
+ padding: `0 ${config.padding}`,
185
+ fontSize: config.fontSize,
186
+ fontFamily: tokens.typography.fontFamily.primary,
187
+ color: selectedOption ? tokens.colors.text.primary : tokens.colors.text.muted,
188
+ backgroundColor: isTransparentTheme ? "rgba(10, 15, 25, 0.4)" : tokens.colors.background.surface,
189
+ border: computedBorder,
190
+ borderRadius: tokens.borderRadius.md,
191
+ cursor: disabled ? "not-allowed" : "pointer",
192
+ opacity: disabled ? .5 : 1,
193
+ display: "flex",
194
+ alignItems: "center",
195
+ justifyContent: "space-between",
196
+ textAlign: "left",
197
+ outline: "none",
198
+ transition: `border-color ${tokens.animation.fast}`,
199
+ boxShadow: focused || isOpen ? tokens.borders.focusRing.default : "none"
200
+ },
201
+ children: [/* @__PURE__ */ jsx("span", { children: selectedOption?.label ?? placeholder }), /* @__PURE__ */ jsx("svg", {
202
+ width: "16",
203
+ height: "16",
204
+ viewBox: "0 0 24 24",
205
+ fill: tokens.colors.text.muted,
206
+ style: {
207
+ transform: isOpen ? "rotate(180deg)" : "rotate(0)",
208
+ transition: `transform ${tokens.animation.fast}`
209
+ },
210
+ children: /* @__PURE__ */ jsx("path", { d: "M7 10l5 5 5-5z" })
211
+ })]
212
+ }),
213
+ isOpen && dropdownRect && createPortal(/* @__PURE__ */ jsxs("ul", {
214
+ ref: dropdownRef,
215
+ role: "listbox",
216
+ style: {
217
+ position: "fixed",
218
+ top: dropdownRect.openUp ? void 0 : dropdownRect.top,
219
+ bottom: dropdownRect.openUp ? window.innerHeight - dropdownRect.top : void 0,
220
+ left: dropdownRect.left,
221
+ width: dropdownRect.width,
222
+ padding: tokens.spacing.xs,
223
+ backgroundColor: isTransparentTheme ? `${tokens.colors.accent.primary}1f` : tokens.colors.background.elevated,
224
+ backdropFilter: isTransparentTheme ? "blur(12px)" : void 0,
225
+ WebkitBackdropFilter: isTransparentTheme ? "blur(12px)" : void 0,
226
+ border: tokens.borders.dropdown,
227
+ borderRadius: tokens.borderRadius.md,
228
+ boxShadow: `${tokens.shadows.lg}, 0 0 30px ${tokens.colors.accent.primary}10`,
229
+ zIndex: 1e4,
230
+ maxHeight: "200px",
231
+ overflowY: "auto",
232
+ listStyle: "none",
233
+ margin: 0,
234
+ animation: `zendir-dropdown ${tokens.animation.duration.normal}ms ${tokens.animation.easing.default} both`
235
+ },
236
+ children: [/* @__PURE__ */ jsx("style", { children: `@keyframes zendir-dropdown { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: translateY(0); } }` }), options.map((option) => /* @__PURE__ */ jsx("li", {
237
+ role: "option",
238
+ "aria-selected": option.value === value,
239
+ tabIndex: option.disabled ? -1 : 0,
240
+ onMouseDown: (e) => {
241
+ e.stopPropagation();
242
+ },
243
+ onClick: (e) => {
244
+ e.stopPropagation();
245
+ if (!option.disabled) {
246
+ onChange?.(option.value);
247
+ setIsOpen(false);
248
+ }
249
+ },
250
+ onKeyDown: (e) => {
251
+ if (option.disabled) return;
252
+ if (e.key === "Enter" || e.key === " ") {
253
+ e.preventDefault();
254
+ onChange?.(option.value);
255
+ setIsOpen(false);
256
+ }
257
+ },
258
+ style: {
259
+ padding: `0 ${tokens.spacing.md}`,
260
+ height: optionRowHeight,
261
+ minHeight: optionRowHeight,
262
+ display: "flex",
263
+ alignItems: "center",
264
+ fontSize: config.fontSize,
265
+ lineHeight: 1.2,
266
+ whiteSpace: "nowrap",
267
+ overflow: "hidden",
268
+ textOverflow: "ellipsis",
269
+ color: option.disabled ? tokens.colors.text.muted : tokens.colors.text.primary,
270
+ backgroundColor: option.value === value ? `${tokens.colors.accent.primary}15` : "transparent",
271
+ borderRadius: tokens.borderRadius.sm,
272
+ cursor: option.disabled ? "not-allowed" : "pointer",
273
+ opacity: option.disabled ? .5 : 1,
274
+ transition: `background-color ${tokens.animation.fast}`
275
+ },
276
+ onMouseEnter: (e) => {
277
+ if (!option.disabled) e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}10`;
278
+ },
279
+ onMouseLeave: (e) => {
280
+ e.currentTarget.style.backgroundColor = option.value === value ? `${tokens.colors.accent.primary}15` : "transparent";
281
+ },
282
+ children: option.label
283
+ }, option.value))]
284
+ }), document.body)
285
+ ]
286
+ }),
287
+ (helperText || error) && /* @__PURE__ */ jsx("span", {
288
+ id: `${generatedId}-hint`,
289
+ role: hasError ? "alert" : void 0,
290
+ style: {
291
+ fontSize: tokens.typography.fontSize.xs,
292
+ color: hasError ? tokens.colors.status.critical : tokens.colors.text.muted
293
+ },
294
+ children: error || helperText
295
+ })
296
+ ]
297
+ });
299
298
  }));
300
- export {
301
- Select
302
- };
303
- //# sourceMappingURL=Select.js.map
299
+ //#endregion
300
+ export { Select, Select as default };
301
+
302
+ //# sourceMappingURL=Select.js.map