@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,306 +1,283 @@
1
- import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { memo, forwardRef, useState, useMemo, useRef, useCallback, useLayoutEffect } from "react";
3
- import ReactDOM from "react-dom";
4
1
  import { useTheme } from "../../theme/ThemeProvider.js";
5
- import { safeAccentText, classNames } from "../../utils/index.js";
6
- const Button = memo(forwardRef(function Button2({
7
- variant = "primary",
8
- size = "medium",
9
- icon,
10
- iconEnd,
11
- loading = false,
12
- fullWidth = false,
13
- tooltip,
14
- disabled,
15
- className = "",
16
- children,
17
- style,
18
- onMouseEnter,
19
- onMouseLeave,
20
- onFocus,
21
- onBlur,
22
- ...rest
23
- }, ref) {
24
- const { tokens, theme } = useTheme();
25
- const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
26
- const [isHovered, setIsHovered] = useState(false);
27
- const [isActive, setIsActive] = useState(false);
28
- const [isFocused, setIsFocused] = useState(false);
29
- const [showTooltip, setShowTooltip] = useState(false);
30
- const isDisabled = disabled || loading;
31
- const transparentDefault = tokens.colors.interactive.transparentDefault;
32
- const transparentHover = tokens.colors.interactive.transparentHover;
33
- const safeAccentBg = useMemo(() => {
34
- const hex = tokens.colors.accent.primary.replace("#", "");
35
- if (hex.length < 6) return tokens.colors.accent.primary;
36
- const toLinear = (c) => c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
37
- const r = parseInt(hex.slice(0, 2), 16) / 255;
38
- const g = parseInt(hex.slice(2, 4), 16) / 255;
39
- const b = parseInt(hex.slice(4, 6), 16) / 255;
40
- const L = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
41
- if (1.05 / (L + 0.05) >= 4.5) return tokens.colors.accent.primary;
42
- const factor = 0.88;
43
- const dr = Math.min(255, Math.round(r * 255 * factor));
44
- const dg = Math.min(255, Math.round(g * 255 * factor));
45
- const db = Math.min(255, Math.round(b * 255 * factor));
46
- return `#${dr.toString(16).padStart(2, "0")}${dg.toString(16).padStart(2, "0")}${db.toString(16).padStart(2, "0")}`;
47
- }, [tokens.colors.accent.primary]);
48
- const safeAccentFg = useMemo(() => safeAccentText(tokens.colors.accent.primary), [tokens.colors.accent.primary]);
49
- const sizeConfig = {
50
- small: {
51
- padding: `${tokens.spacing.xxs} ${tokens.spacing.smd}`,
52
- fontSize: tokens.typography.fontSize.xs,
53
- height: "24px",
54
- gap: tokens.spacing.xs,
55
- iconSize: 13,
56
- borderRadius: tokens.borderRadius.sm
57
- },
58
- medium: {
59
- padding: `${tokens.spacing.xxs} ${tokens.spacing.md}`,
60
- fontSize: tokens.typography.fontSize.sm,
61
- height: "28px",
62
- gap: tokens.spacing.xs,
63
- iconSize: 15,
64
- borderRadius: tokens.borderRadius.md
65
- },
66
- large: {
67
- padding: `${tokens.spacing.xs} ${tokens.spacing.lg}`,
68
- fontSize: tokens.typography.fontSize.base,
69
- height: "34px",
70
- gap: tokens.spacing.sm,
71
- iconSize: 17,
72
- borderRadius: tokens.borderRadius.md
73
- }
74
- };
75
- const config = sizeConfig[size];
76
- const getVariantStyles = () => {
77
- const baseTransition = `${tokens.animation.normal}, opacity ${tokens.animation.duration.normal}ms ${tokens.animation.easing.default}`;
78
- if (isTransparentTheme && transparentDefault && transparentHover) {
79
- switch (variant) {
80
- case "primary":
81
- return {
82
- backgroundColor: isHovered && !isDisabled ? transparentHover : transparentDefault,
83
- color: tokens.colors.text.primary,
84
- border: `1px solid ${isHovered && !isDisabled ? "rgba(139, 92, 246, 0.5)" : "rgba(139, 92, 246, 0.25)"}`,
85
- boxShadow: isHovered && !isDisabled ? "0 0 10px rgba(139, 92, 246, 0.15)" : "none",
86
- transition: baseTransition,
87
- backdropFilter: "blur(8px)",
88
- WebkitBackdropFilter: "blur(8px)"
89
- };
90
- case "secondary":
91
- return {
92
- backgroundColor: isHovered && !isDisabled ? `${tokens.colors.accent.primary}15` : transparentDefault,
93
- color: safeAccentFg,
94
- border: `1px solid ${isHovered && !isDisabled ? `${tokens.colors.accent.primary}70` : `${tokens.colors.accent.primary}30`}`,
95
- boxShadow: "none",
96
- transition: baseTransition,
97
- backdropFilter: "blur(8px)",
98
- WebkitBackdropFilter: "blur(8px)"
99
- };
100
- case "borderless":
101
- return {
102
- backgroundColor: isHovered && !isDisabled ? transparentHover : transparentDefault,
103
- color: safeAccentFg,
104
- border: "none",
105
- boxShadow: "none",
106
- transition: baseTransition,
107
- backdropFilter: "blur(6px)",
108
- WebkitBackdropFilter: "blur(6px)"
109
- };
110
- }
111
- }
112
- switch (variant) {
113
- case "primary":
114
- return {
115
- backgroundColor: isHovered && !isDisabled ? tokens.colors.interactive.hover : safeAccentBg,
116
- color: "#ffffff",
117
- border: "none",
118
- boxShadow: isHovered && !isDisabled ? `0 2px 8px -2px ${tokens.colors.accent.primary}35` : "none",
119
- transition: baseTransition
120
- };
121
- case "secondary":
122
- return {
123
- backgroundColor: isHovered && !isDisabled ? `${tokens.colors.accent.primary}12` : "transparent",
124
- color: isHovered && !isDisabled ? safeAccentFg : safeAccentFg,
125
- border: `${tokens.borders.width.medium} solid ${isHovered && !isDisabled ? tokens.colors.accent.primary : `${tokens.colors.accent.primary}80`}`,
126
- boxShadow: "none",
127
- transition: baseTransition
128
- };
129
- case "borderless":
130
- return {
131
- backgroundColor: isHovered && !isDisabled ? `${tokens.colors.accent.primary}10` : "transparent",
132
- color: safeAccentFg,
133
- border: `${tokens.borders.width.medium} solid transparent`,
134
- boxShadow: "none",
135
- transition: baseTransition
136
- };
137
- }
138
- };
139
- const focusStyles = isFocused ? {
140
- outline: "none",
141
- boxShadow: tokens.borders.focusRing.button
142
- } : {};
143
- const activeStyles = isActive && !isDisabled ? {
144
- filter: "brightness(0.85)",
145
- transform: "scale(0.98)",
146
- boxShadow: "none"
147
- } : {};
148
- const baseStyle = {
149
- display: "inline-flex",
150
- alignItems: "center",
151
- justifyContent: "center",
152
- gap: config.gap,
153
- padding: config.padding,
154
- height: config.height,
155
- fontSize: config.fontSize,
156
- fontWeight: 400,
157
- fontFamily: tokens.typography.fontFamily.primary,
158
- letterSpacing: "0.02em",
159
- borderRadius: config.borderRadius,
160
- cursor: isDisabled ? "not-allowed" : "pointer",
161
- opacity: isDisabled ? 0.5 : 1,
162
- outline: "none",
163
- textDecoration: "none",
164
- whiteSpace: "nowrap",
165
- userSelect: "none",
166
- width: fullWidth ? "100%" : "auto",
167
- position: "relative",
168
- ...getVariantStyles(),
169
- ...focusStyles,
170
- ...activeStyles,
171
- ...style
172
- };
173
- const spinner = /* @__PURE__ */ jsxs(
174
- "svg",
175
- {
176
- width: config.iconSize,
177
- height: config.iconSize,
178
- viewBox: "0 0 24 24",
179
- fill: "none",
180
- style: {
181
- animation: "zendir-spin 0.8s cubic-bezier(0.4, 0, 0.6, 1) infinite"
182
- },
183
- children: [
184
- /* @__PURE__ */ jsx(
185
- "circle",
186
- {
187
- cx: "12",
188
- cy: "12",
189
- r: "10",
190
- stroke: "currentColor",
191
- strokeWidth: "2.5",
192
- strokeLinecap: "round",
193
- strokeDasharray: "31.4 31.4",
194
- strokeDashoffset: "10",
195
- opacity: "0.9"
196
- }
197
- ),
198
- /* @__PURE__ */ jsx("style", { children: `@keyframes zendir-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }` })
199
- ]
200
- }
201
- );
202
- const internalRef = useRef(null);
203
- const tooltipNodeRef = useRef(null);
204
- const [tooltipPos, setTooltipPos] = useState(null);
205
- const mergedRef = useCallback((node) => {
206
- internalRef.current = node;
207
- if (typeof ref === "function") ref(node);
208
- else if (ref) ref.current = node;
209
- }, [ref]);
210
- useLayoutEffect(() => {
211
- if (!showTooltip || !tooltip || !internalRef.current) {
212
- setTooltipPos(null);
213
- return;
214
- }
215
- const btn = internalRef.current.getBoundingClientRect();
216
- const gap = 8;
217
- let top = btn.top - gap;
218
- let left = btn.left + btn.width / 2;
219
- if (tooltipNodeRef.current) {
220
- const tt = tooltipNodeRef.current.getBoundingClientRect();
221
- top = btn.top - tt.height - gap;
222
- left = btn.left + (btn.width - tt.width) / 2;
223
- if (left < 8) left = 8;
224
- if (left + tt.width > window.innerWidth - 8) left = window.innerWidth - tt.width - 8;
225
- if (top < 8) top = btn.bottom + gap;
226
- }
227
- setTooltipPos({ top, left });
228
- }, [showTooltip, tooltip]);
229
- const tooltipPortal = tooltip && showTooltip && ReactDOM.createPortal(
230
- /* @__PURE__ */ jsxs(
231
- "div",
232
- {
233
- ref: tooltipNodeRef,
234
- role: "tooltip",
235
- style: {
236
- position: "fixed",
237
- top: tooltipPos ? tooltipPos.top : -9999,
238
- left: tooltipPos ? tooltipPos.left : -9999,
239
- padding: `${tokens.spacing.xs} ${tokens.spacing.smd}`,
240
- fontSize: "0.75rem",
241
- fontWeight: 500,
242
- color: tokens.colors.text.primary,
243
- backgroundColor: tokens.colors.background.elevated,
244
- border: tokens.borders.divider,
245
- borderRadius: tokens.borderRadius.md,
246
- boxShadow: tokens.shadows.md,
247
- whiteSpace: "nowrap",
248
- zIndex: 2147483100,
249
- pointerEvents: "none",
250
- opacity: tooltipPos ? 1 : 0,
251
- animation: tooltipPos ? `zendir-btn-tip ${tokens.animation.duration.fast}ms ${tokens.animation.easing.default} both` : "none"
252
- },
253
- children: [
254
- tooltip,
255
- /* @__PURE__ */ jsx("style", { children: `@keyframes zendir-btn-tip { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }` })
256
- ]
257
- }
258
- ),
259
- document.body
260
- );
261
- return /* @__PURE__ */ jsxs(Fragment, { children: [
262
- /* @__PURE__ */ jsxs(
263
- "button",
264
- {
265
- ref: mergedRef,
266
- type: "button",
267
- disabled: isDisabled,
268
- className: classNames("zendir-button", `zendir-button--${variant}`, `zendir-button--${size}`, className),
269
- style: baseStyle,
270
- title: tooltip && !showTooltip ? tooltip : void 0,
271
- onMouseDown: () => setIsActive(true),
272
- onMouseUp: () => setIsActive(false),
273
- onMouseEnter: (e) => {
274
- setIsHovered(true);
275
- setShowTooltip(true);
276
- onMouseEnter == null ? void 0 : onMouseEnter(e);
277
- },
278
- onMouseLeave: (e) => {
279
- setIsHovered(false);
280
- setIsActive(false);
281
- setShowTooltip(false);
282
- onMouseLeave == null ? void 0 : onMouseLeave(e);
283
- },
284
- onFocus: (e) => {
285
- setIsFocused(true);
286
- onFocus == null ? void 0 : onFocus(e);
287
- },
288
- onBlur: (e) => {
289
- setIsFocused(false);
290
- onBlur == null ? void 0 : onBlur(e);
291
- },
292
- ...rest,
293
- children: [
294
- loading ? spinner : icon,
295
- children && /* @__PURE__ */ jsx("span", { children }),
296
- iconEnd && !loading && iconEnd
297
- ]
298
- }
299
- ),
300
- tooltipPortal
301
- ] });
2
+ import { classNames, safeAccentText } from "../../utils/index.js";
3
+ import { forwardRef, memo, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import ReactDOM from "react-dom";
6
+ //#region src/react/core/inputs/Button.tsx
7
+ /**
8
+ * @zendir/ui - Button Component
9
+ *
10
+ * Enterprise-grade button following Astro UX Design System with Zendir purple accents.
11
+ *
12
+ * Astro UX Compliance:
13
+ * - Three visual variants: primary, secondary, borderless
14
+ * - Size variants: small, medium, large
15
+ * - Sentence case capitalization
16
+ * - Focus ring for accessibility (WCAG 2.1 AA)
17
+ * - Right-align in button groups (primary on right)
18
+ *
19
+ * Zendir Enhancements:
20
+ * - Purple accent colors
21
+ * - Smooth micro-interactions
22
+ * - Subtle glow effects
23
+ * - Modern glassmorphism hover states
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <Button>Primary Action</Button>
28
+ * <Button variant="secondary">Cancel</Button>
29
+ * <Button variant="borderless" icon={<Icon name="settings" />}>Settings</Button>
30
+ * <Button loading>Saving...</Button>
31
+ * ```
32
+ */
33
+ var Button = memo(forwardRef(function Button({ variant = "primary", size = "medium", icon, iconEnd, loading = false, fullWidth = false, tooltip, disabled, className = "", children, style, onMouseEnter, onMouseLeave, onFocus, onBlur, ...rest }, ref) {
34
+ const { tokens, theme } = useTheme();
35
+ const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
36
+ const [isHovered, setIsHovered] = useState(false);
37
+ const [isActive, setIsActive] = useState(false);
38
+ const [isFocused, setIsFocused] = useState(false);
39
+ const [showTooltip, setShowTooltip] = useState(false);
40
+ const isDisabled = disabled || loading;
41
+ const transparentDefault = tokens.colors.interactive.transparentDefault;
42
+ const transparentHover = tokens.colors.interactive.transparentHover;
43
+ const safeAccentBg = useMemo(() => {
44
+ const hex = tokens.colors.accent.primary.replace("#", "");
45
+ if (hex.length < 6) return tokens.colors.accent.primary;
46
+ const toLinear = (c) => c <= .03928 ? c / 12.92 : Math.pow((c + .055) / 1.055, 2.4);
47
+ const r = parseInt(hex.slice(0, 2), 16) / 255;
48
+ const g = parseInt(hex.slice(2, 4), 16) / 255;
49
+ const b = parseInt(hex.slice(4, 6), 16) / 255;
50
+ if (1.05 / (.2126 * toLinear(r) + .7152 * toLinear(g) + .0722 * toLinear(b) + .05) >= 4.5) return tokens.colors.accent.primary;
51
+ const factor = .88;
52
+ const dr = Math.min(255, Math.round(r * 255 * factor));
53
+ const dg = Math.min(255, Math.round(g * 255 * factor));
54
+ const db = Math.min(255, Math.round(b * 255 * factor));
55
+ return `#${dr.toString(16).padStart(2, "0")}${dg.toString(16).padStart(2, "0")}${db.toString(16).padStart(2, "0")}`;
56
+ }, [tokens.colors.accent.primary]);
57
+ const safeAccentFg = useMemo(() => safeAccentText(tokens.colors.accent.primary), [tokens.colors.accent.primary]);
58
+ const config = {
59
+ small: {
60
+ padding: `${tokens.spacing.xxs} ${tokens.spacing.smd}`,
61
+ fontSize: tokens.typography.fontSize.xs,
62
+ height: "24px",
63
+ gap: tokens.spacing.xs,
64
+ iconSize: 13,
65
+ borderRadius: tokens.borderRadius.sm
66
+ },
67
+ medium: {
68
+ padding: `${tokens.spacing.xxs} ${tokens.spacing.md}`,
69
+ fontSize: tokens.typography.fontSize.sm,
70
+ height: "28px",
71
+ gap: tokens.spacing.xs,
72
+ iconSize: 15,
73
+ borderRadius: tokens.borderRadius.md
74
+ },
75
+ large: {
76
+ padding: `${tokens.spacing.xs} ${tokens.spacing.lg}`,
77
+ fontSize: tokens.typography.fontSize.base,
78
+ height: "34px",
79
+ gap: tokens.spacing.sm,
80
+ iconSize: 17,
81
+ borderRadius: tokens.borderRadius.md
82
+ }
83
+ }[size];
84
+ const getVariantStyles = () => {
85
+ const baseTransition = `${tokens.animation.normal}, opacity ${tokens.animation.duration.normal}ms ${tokens.animation.easing.default}`;
86
+ if (isTransparentTheme && transparentDefault && transparentHover) switch (variant) {
87
+ case "primary": return {
88
+ backgroundColor: isHovered && !isDisabled ? transparentHover : transparentDefault,
89
+ color: tokens.colors.text.primary,
90
+ border: `1px solid ${isHovered && !isDisabled ? `${tokens.colors.accent.primary}80` : `${tokens.colors.accent.primary}40`}`,
91
+ boxShadow: isHovered && !isDisabled ? `0 0 10px ${tokens.colors.accent.primary}26` : "none",
92
+ transition: baseTransition,
93
+ backdropFilter: "blur(8px)",
94
+ WebkitBackdropFilter: "blur(8px)"
95
+ };
96
+ case "secondary": return {
97
+ backgroundColor: isHovered && !isDisabled ? `${tokens.colors.accent.primary}15` : transparentDefault,
98
+ color: safeAccentFg,
99
+ border: `1px solid ${isHovered && !isDisabled ? `${tokens.colors.accent.primary}70` : `${tokens.colors.accent.primary}30`}`,
100
+ boxShadow: "none",
101
+ transition: baseTransition,
102
+ backdropFilter: "blur(8px)",
103
+ WebkitBackdropFilter: "blur(8px)"
104
+ };
105
+ case "borderless": return {
106
+ backgroundColor: isHovered && !isDisabled ? transparentHover : transparentDefault,
107
+ color: safeAccentFg,
108
+ border: "none",
109
+ boxShadow: "none",
110
+ transition: baseTransition,
111
+ backdropFilter: "blur(6px)",
112
+ WebkitBackdropFilter: "blur(6px)"
113
+ };
114
+ }
115
+ switch (variant) {
116
+ case "primary": return {
117
+ backgroundColor: isHovered && !isDisabled ? tokens.colors.interactive.hover : safeAccentBg,
118
+ color: "#ffffff",
119
+ border: "none",
120
+ boxShadow: isHovered && !isDisabled ? `0 2px 8px -2px ${tokens.colors.accent.primary}35` : "none",
121
+ transition: baseTransition
122
+ };
123
+ case "secondary": return {
124
+ backgroundColor: isHovered && !isDisabled ? `${tokens.colors.accent.primary}12` : "transparent",
125
+ color: isHovered && !isDisabled ? safeAccentFg : safeAccentFg,
126
+ border: `${tokens.borders.width.medium} solid ${isHovered && !isDisabled ? tokens.colors.accent.primary : `${tokens.colors.accent.primary}80`}`,
127
+ boxShadow: "none",
128
+ transition: baseTransition
129
+ };
130
+ case "borderless": return {
131
+ backgroundColor: isHovered && !isDisabled ? `${tokens.colors.accent.primary}10` : "transparent",
132
+ color: safeAccentFg,
133
+ border: `${tokens.borders.width.medium} solid transparent`,
134
+ boxShadow: "none",
135
+ transition: baseTransition
136
+ };
137
+ }
138
+ };
139
+ const focusStyles = isFocused ? {
140
+ outline: "none",
141
+ boxShadow: tokens.borders.focusRing.button
142
+ } : {};
143
+ const activeStyles = isActive && !isDisabled ? {
144
+ filter: "brightness(0.85)",
145
+ transform: "scale(0.98)",
146
+ boxShadow: "none"
147
+ } : {};
148
+ const baseStyle = {
149
+ display: "inline-flex",
150
+ alignItems: "center",
151
+ justifyContent: "center",
152
+ gap: config.gap,
153
+ padding: config.padding,
154
+ height: config.height,
155
+ fontSize: config.fontSize,
156
+ fontWeight: 400,
157
+ fontFamily: tokens.typography.fontFamily.primary,
158
+ letterSpacing: "0.02em",
159
+ borderRadius: config.borderRadius,
160
+ cursor: isDisabled ? "not-allowed" : "pointer",
161
+ opacity: isDisabled ? .5 : 1,
162
+ outline: "none",
163
+ textDecoration: "none",
164
+ whiteSpace: "nowrap",
165
+ userSelect: "none",
166
+ width: fullWidth ? "100%" : "auto",
167
+ position: "relative",
168
+ ...getVariantStyles(),
169
+ ...focusStyles,
170
+ ...activeStyles,
171
+ ...style
172
+ };
173
+ const spinner = /* @__PURE__ */ jsxs("svg", {
174
+ width: config.iconSize,
175
+ height: config.iconSize,
176
+ viewBox: "0 0 24 24",
177
+ fill: "none",
178
+ style: { animation: "zendir-spin 0.8s cubic-bezier(0.4, 0, 0.6, 1) infinite" },
179
+ children: [/* @__PURE__ */ jsx("circle", {
180
+ cx: "12",
181
+ cy: "12",
182
+ r: "10",
183
+ stroke: "currentColor",
184
+ strokeWidth: "2.5",
185
+ strokeLinecap: "round",
186
+ strokeDasharray: "31.4 31.4",
187
+ strokeDashoffset: "10",
188
+ opacity: "0.9"
189
+ }), /* @__PURE__ */ jsx("style", { children: `@keyframes zendir-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }` })]
190
+ });
191
+ const internalRef = useRef(null);
192
+ const tooltipNodeRef = useRef(null);
193
+ const [tooltipPos, setTooltipPos] = useState(null);
194
+ const mergedRef = useCallback((node) => {
195
+ internalRef.current = node;
196
+ if (typeof ref === "function") ref(node);
197
+ else if (ref) ref.current = node;
198
+ }, [ref]);
199
+ useLayoutEffect(() => {
200
+ if (!showTooltip || !tooltip || !internalRef.current) {
201
+ setTooltipPos(null);
202
+ return;
203
+ }
204
+ const btn = internalRef.current.getBoundingClientRect();
205
+ const gap = 8;
206
+ let top = btn.top - gap;
207
+ let left = btn.left + btn.width / 2;
208
+ if (tooltipNodeRef.current) {
209
+ const tt = tooltipNodeRef.current.getBoundingClientRect();
210
+ top = btn.top - tt.height - gap;
211
+ left = btn.left + (btn.width - tt.width) / 2;
212
+ if (left < 8) left = 8;
213
+ if (left + tt.width > window.innerWidth - 8) left = window.innerWidth - tt.width - 8;
214
+ if (top < 8) top = btn.bottom + gap;
215
+ }
216
+ setTooltipPos({
217
+ top,
218
+ left
219
+ });
220
+ }, [showTooltip, tooltip]);
221
+ const tooltipPortal = tooltip && showTooltip && ReactDOM.createPortal(/* @__PURE__ */ jsxs("div", {
222
+ ref: tooltipNodeRef,
223
+ role: "tooltip",
224
+ style: {
225
+ position: "fixed",
226
+ top: tooltipPos ? tooltipPos.top : -9999,
227
+ left: tooltipPos ? tooltipPos.left : -9999,
228
+ padding: `${tokens.spacing.xs} ${tokens.spacing.smd}`,
229
+ fontSize: "0.75rem",
230
+ fontWeight: 500,
231
+ color: tokens.colors.text.primary,
232
+ backgroundColor: tokens.colors.background.elevated,
233
+ border: tokens.borders.divider,
234
+ borderRadius: tokens.borderRadius.md,
235
+ boxShadow: tokens.shadows.md,
236
+ whiteSpace: "nowrap",
237
+ zIndex: 2147483100,
238
+ pointerEvents: "none",
239
+ opacity: tooltipPos ? 1 : 0,
240
+ animation: tooltipPos ? `zendir-btn-tip ${tokens.animation.duration.fast}ms ${tokens.animation.easing.default} both` : "none"
241
+ },
242
+ children: [tooltip, /* @__PURE__ */ jsx("style", { children: `@keyframes zendir-btn-tip { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }` })]
243
+ }), document.body);
244
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("button", {
245
+ ref: mergedRef,
246
+ type: "button",
247
+ disabled: isDisabled,
248
+ className: classNames("zendir-button", `zendir-button--${variant}`, `zendir-button--${size}`, className),
249
+ style: baseStyle,
250
+ title: tooltip && !showTooltip ? tooltip : void 0,
251
+ onMouseDown: () => setIsActive(true),
252
+ onMouseUp: () => setIsActive(false),
253
+ onMouseEnter: (e) => {
254
+ setIsHovered(true);
255
+ setShowTooltip(true);
256
+ onMouseEnter?.(e);
257
+ },
258
+ onMouseLeave: (e) => {
259
+ setIsHovered(false);
260
+ setIsActive(false);
261
+ setShowTooltip(false);
262
+ onMouseLeave?.(e);
263
+ },
264
+ onFocus: (e) => {
265
+ setIsFocused(true);
266
+ onFocus?.(e);
267
+ },
268
+ onBlur: (e) => {
269
+ setIsFocused(false);
270
+ onBlur?.(e);
271
+ },
272
+ ...rest,
273
+ children: [
274
+ loading ? spinner : icon,
275
+ children && /* @__PURE__ */ jsx("span", { children }),
276
+ iconEnd && !loading && iconEnd
277
+ ]
278
+ }), tooltipPortal] });
302
279
  }));
303
- export {
304
- Button
305
- };
306
- //# sourceMappingURL=Button.js.map
280
+ //#endregion
281
+ export { Button, Button as default };
282
+
283
+ //# sourceMappingURL=Button.js.map