@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,190 +1,210 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { memo, useMemo } from "react";
3
1
  import { useTheme } from "../../theme/ThemeProvider.js";
4
2
  import { classNames } from "../../utils/index.js";
5
- const Pagination = memo(function Pagination2({
6
- currentPage,
7
- totalPages,
8
- onChange,
9
- siblingCount = 1,
10
- showFirstLast = true,
11
- showPrevNext = true,
12
- size = "medium",
13
- displayMode = "buttons",
14
- disabled = false,
15
- className = ""
16
- }) {
17
- const { tokens, theme } = useTheme();
18
- const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
19
- const sizeConfig = {
20
- small: { buttonSize: "28px", fontSize: tokens.typography.fontSize.xxs },
21
- medium: { buttonSize: "34px", fontSize: tokens.typography.fontSize.xs }
22
- };
23
- const config = sizeConfig[size];
24
- const pageNumbers = useMemo(() => {
25
- const range = [];
26
- const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
27
- const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
28
- const showLeftEllipsis = leftSiblingIndex > 2;
29
- const showRightEllipsis = rightSiblingIndex < totalPages - 1;
30
- if (!showLeftEllipsis && showRightEllipsis) {
31
- const leftRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => i + 1);
32
- range.push(...leftRange, "ellipsis", totalPages);
33
- } else if (showLeftEllipsis && !showRightEllipsis) {
34
- const rightRange = Array.from(
35
- { length: 3 + 2 * siblingCount },
36
- (_, i) => totalPages - 3 - 2 * siblingCount + i + 1
37
- );
38
- range.push(1, "ellipsis", ...rightRange);
39
- } else if (showLeftEllipsis && showRightEllipsis) {
40
- const middleRange = Array.from(
41
- { length: 2 * siblingCount + 1 },
42
- (_, i) => leftSiblingIndex + i
43
- );
44
- range.push(1, "ellipsis", ...middleRange, "ellipsis", totalPages);
45
- } else {
46
- range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));
47
- }
48
- return range;
49
- }, [currentPage, totalPages, siblingCount]);
50
- const buttonStyle = {
51
- width: config.buttonSize,
52
- height: config.buttonSize,
53
- display: "flex",
54
- alignItems: "center",
55
- justifyContent: "center",
56
- fontSize: config.fontSize,
57
- fontFamily: tokens.typography.fontFamily.mono,
58
- fontWeight: tokens.typography.fontWeight.medium,
59
- backgroundColor: isTransparentTheme ? `${tokens.colors.background.surface}99` : "transparent",
60
- border: `1px solid ${tokens.colors.border.muted}`,
61
- borderRadius: tokens.borderRadius.md,
62
- cursor: disabled ? "not-allowed" : "pointer",
63
- opacity: disabled ? 0.5 : 1,
64
- transition: `all ${tokens.animation.fast}`,
65
- color: tokens.colors.text.primary,
66
- backdropFilter: isTransparentTheme ? "blur(8px)" : void 0,
67
- WebkitBackdropFilter: isTransparentTheme ? "blur(8px)" : void 0
68
- };
69
- const activeButtonStyle = {
70
- ...buttonStyle,
71
- backgroundColor: tokens.colors.accent.primary,
72
- borderColor: tokens.colors.accent.primary,
73
- color: tokens.colors.text.inverse,
74
- boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`
75
- };
76
- const handleClick = (page) => {
77
- if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {
78
- onChange(page);
79
- }
80
- };
81
- const NavButton = ({
82
- direction,
83
- targetPage,
84
- children
85
- }) => {
86
- const isDisabled = disabled || (direction === "first" || direction === "prev" ? currentPage <= 1 : currentPage >= totalPages);
87
- return /* @__PURE__ */ jsx(
88
- "button",
89
- {
90
- type: "button",
91
- onClick: () => handleClick(targetPage),
92
- disabled: isDisabled,
93
- "aria-label": direction === "first" ? "Go to first page" : direction === "prev" ? "Go to previous page" : direction === "next" ? "Go to next page" : "Go to last page",
94
- style: {
95
- ...buttonStyle,
96
- opacity: isDisabled ? 0.3 : 1,
97
- cursor: isDisabled ? "not-allowed" : "pointer"
98
- },
99
- children
100
- }
101
- );
102
- };
103
- return /* @__PURE__ */ jsxs(
104
- "nav",
105
- {
106
- className: classNames("zendir-pagination", className),
107
- "aria-label": "Pagination",
108
- style: {
109
- display: "flex",
110
- alignItems: "center",
111
- gap: tokens.spacing.xs,
112
- padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,
113
- borderRadius: tokens.borderRadius.lg,
114
- ...tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` },
115
- background: isTransparentTheme ? `${tokens.colors.background.surface}66` : `${tokens.colors.background.surface}66`,
116
- backdropFilter: isTransparentTheme ? "blur(10px)" : void 0,
117
- WebkitBackdropFilter: isTransparentTheme ? "blur(10px)" : void 0
118
- },
119
- children: [
120
- showFirstLast && /* @__PURE__ */ jsx(NavButton, { direction: "first", targetPage: 1, children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z" }) }) }),
121
- showPrevNext && /* @__PURE__ */ jsx(NavButton, { direction: "prev", targetPage: currentPage - 1, children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" }) }) }),
122
- displayMode === "text" ? /* @__PURE__ */ jsxs(
123
- "span",
124
- {
125
- style: {
126
- padding: `0 ${tokens.spacing.sm}`,
127
- color: tokens.colors.text.secondary,
128
- fontSize: tokens.typography.fontSize.xs,
129
- fontFamily: tokens.typography.fontFamily.mono,
130
- letterSpacing: "0.02em",
131
- whiteSpace: "nowrap"
132
- },
133
- children: [
134
- "Page ",
135
- currentPage,
136
- " of ",
137
- totalPages
138
- ]
139
- }
140
- ) : pageNumbers.map(
141
- (page, index) => page === "ellipsis" ? /* @__PURE__ */ jsx(
142
- "span",
143
- {
144
- style: {
145
- width: config.buttonSize,
146
- display: "flex",
147
- alignItems: "center",
148
- justifyContent: "center",
149
- color: tokens.colors.text.muted
150
- },
151
- children: "..."
152
- },
153
- `ellipsis-${index}`
154
- ) : /* @__PURE__ */ jsx(
155
- "button",
156
- {
157
- type: "button",
158
- onClick: () => handleClick(page),
159
- disabled,
160
- "aria-current": page === currentPage ? "page" : void 0,
161
- style: page === currentPage ? activeButtonStyle : buttonStyle,
162
- onMouseEnter: (e) => {
163
- if (!disabled && page !== currentPage) {
164
- e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;
165
- e.currentTarget.style.borderColor = tokens.colors.accent.primary;
166
- e.currentTarget.style.transform = "translateY(-1px)";
167
- }
168
- },
169
- onMouseLeave: (e) => {
170
- if (!disabled && page !== currentPage) {
171
- e.currentTarget.style.backgroundColor = isTransparentTheme ? `${tokens.colors.background.surface}99` : "transparent";
172
- e.currentTarget.style.borderColor = tokens.colors.border.muted;
173
- e.currentTarget.style.transform = "translateY(0)";
174
- }
175
- },
176
- children: page
177
- },
178
- page
179
- )
180
- ),
181
- showPrevNext && /* @__PURE__ */ jsx(NavButton, { direction: "next", targetPage: currentPage + 1, children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }) }) }),
182
- showFirstLast && /* @__PURE__ */ jsx(NavButton, { direction: "last", targetPage: totalPages, children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z" }) }) })
183
- ]
184
- }
185
- );
3
+ import { memo, useMemo } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/react/core/navigation/Pagination.tsx
6
+ /**
7
+ * @zendir/ui - Pagination Component
8
+ *
9
+ * Pagination following Astro UX Design System.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * <Pagination
14
+ * currentPage={page}
15
+ * totalPages={10}
16
+ * onChange={setPage}
17
+ * />
18
+ * ```
19
+ */
20
+ var Pagination = memo(function Pagination({ currentPage, totalPages, onChange, siblingCount = 1, showFirstLast = true, showPrevNext = true, size = "medium", displayMode = "buttons", disabled = false, className = "" }) {
21
+ const { tokens, theme } = useTheme();
22
+ const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
23
+ const config = {
24
+ small: {
25
+ buttonSize: "28px",
26
+ fontSize: tokens.typography.fontSize.xxs
27
+ },
28
+ medium: {
29
+ buttonSize: "34px",
30
+ fontSize: tokens.typography.fontSize.xs
31
+ }
32
+ }[size];
33
+ const pageNumbers = useMemo(() => {
34
+ const range = [];
35
+ const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
36
+ const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
37
+ const showLeftEllipsis = leftSiblingIndex > 2;
38
+ const showRightEllipsis = rightSiblingIndex < totalPages - 1;
39
+ if (!showLeftEllipsis && showRightEllipsis) {
40
+ const leftRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => i + 1);
41
+ range.push(...leftRange, "ellipsis", totalPages);
42
+ } else if (showLeftEllipsis && !showRightEllipsis) {
43
+ const rightRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => totalPages - 3 - 2 * siblingCount + i + 1);
44
+ range.push(1, "ellipsis", ...rightRange);
45
+ } else if (showLeftEllipsis && showRightEllipsis) {
46
+ const middleRange = Array.from({ length: 2 * siblingCount + 1 }, (_, i) => leftSiblingIndex + i);
47
+ range.push(1, "ellipsis", ...middleRange, "ellipsis", totalPages);
48
+ } else range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));
49
+ return range;
50
+ }, [
51
+ currentPage,
52
+ totalPages,
53
+ siblingCount
54
+ ]);
55
+ const buttonStyle = {
56
+ width: config.buttonSize,
57
+ height: config.buttonSize,
58
+ display: "flex",
59
+ alignItems: "center",
60
+ justifyContent: "center",
61
+ fontSize: config.fontSize,
62
+ fontFamily: tokens.typography.fontFamily.mono,
63
+ fontWeight: tokens.typography.fontWeight.medium,
64
+ backgroundColor: isTransparentTheme ? `${tokens.colors.background.surface}99` : "transparent",
65
+ border: `1px solid ${tokens.colors.border.muted}`,
66
+ borderRadius: tokens.borderRadius.md,
67
+ cursor: disabled ? "not-allowed" : "pointer",
68
+ opacity: disabled ? .5 : 1,
69
+ transition: `all ${tokens.animation.fast}`,
70
+ color: tokens.colors.text.primary,
71
+ backdropFilter: isTransparentTheme ? "blur(8px)" : void 0,
72
+ WebkitBackdropFilter: isTransparentTheme ? "blur(8px)" : void 0
73
+ };
74
+ const activeButtonStyle = {
75
+ ...buttonStyle,
76
+ backgroundColor: tokens.colors.accent.primary,
77
+ borderColor: tokens.colors.accent.primary,
78
+ color: tokens.colors.text.inverse,
79
+ boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`
80
+ };
81
+ const handleClick = (page) => {
82
+ if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) onChange(page);
83
+ };
84
+ const NavButton = ({ direction, targetPage, children }) => {
85
+ const isDisabled = disabled || (direction === "first" || direction === "prev" ? currentPage <= 1 : currentPage >= totalPages);
86
+ return /* @__PURE__ */ jsx("button", {
87
+ type: "button",
88
+ onClick: () => handleClick(targetPage),
89
+ disabled: isDisabled,
90
+ "aria-label": direction === "first" ? "Go to first page" : direction === "prev" ? "Go to previous page" : direction === "next" ? "Go to next page" : "Go to last page",
91
+ style: {
92
+ ...buttonStyle,
93
+ opacity: isDisabled ? .3 : 1,
94
+ cursor: isDisabled ? "not-allowed" : "pointer"
95
+ },
96
+ children
97
+ });
98
+ };
99
+ return /* @__PURE__ */ jsxs("nav", {
100
+ className: classNames("zendir-pagination", className),
101
+ "aria-label": "Pagination",
102
+ style: {
103
+ display: "flex",
104
+ alignItems: "center",
105
+ gap: tokens.spacing.xs,
106
+ padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,
107
+ borderRadius: tokens.borderRadius.lg,
108
+ ...tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` },
109
+ background: isTransparentTheme ? `${tokens.colors.background.surface}66` : `${tokens.colors.background.surface}66`,
110
+ backdropFilter: isTransparentTheme ? "blur(10px)" : void 0,
111
+ WebkitBackdropFilter: isTransparentTheme ? "blur(10px)" : void 0
112
+ },
113
+ children: [
114
+ showFirstLast && /* @__PURE__ */ jsx(NavButton, {
115
+ direction: "first",
116
+ targetPage: 1,
117
+ children: /* @__PURE__ */ jsx("svg", {
118
+ width: "16",
119
+ height: "16",
120
+ viewBox: "0 0 24 24",
121
+ fill: "currentColor",
122
+ children: /* @__PURE__ */ jsx("path", { d: "M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z" })
123
+ })
124
+ }),
125
+ showPrevNext && /* @__PURE__ */ jsx(NavButton, {
126
+ direction: "prev",
127
+ targetPage: currentPage - 1,
128
+ children: /* @__PURE__ */ jsx("svg", {
129
+ width: "16",
130
+ height: "16",
131
+ viewBox: "0 0 24 24",
132
+ fill: "currentColor",
133
+ children: /* @__PURE__ */ jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" })
134
+ })
135
+ }),
136
+ displayMode === "text" ? /* @__PURE__ */ jsxs("span", {
137
+ style: {
138
+ padding: `0 ${tokens.spacing.sm}`,
139
+ color: tokens.colors.text.secondary,
140
+ fontSize: tokens.typography.fontSize.xs,
141
+ fontFamily: tokens.typography.fontFamily.mono,
142
+ letterSpacing: "0.02em",
143
+ whiteSpace: "nowrap"
144
+ },
145
+ children: [
146
+ "Page ",
147
+ currentPage,
148
+ " of ",
149
+ totalPages
150
+ ]
151
+ }) : pageNumbers.map((page, index) => page === "ellipsis" ? /* @__PURE__ */ jsx("span", {
152
+ style: {
153
+ width: config.buttonSize,
154
+ display: "flex",
155
+ alignItems: "center",
156
+ justifyContent: "center",
157
+ color: tokens.colors.text.muted
158
+ },
159
+ children: "..."
160
+ }, `ellipsis-${index}`) : /* @__PURE__ */ jsx("button", {
161
+ type: "button",
162
+ onClick: () => handleClick(page),
163
+ disabled,
164
+ "aria-current": page === currentPage ? "page" : void 0,
165
+ style: page === currentPage ? activeButtonStyle : buttonStyle,
166
+ onMouseEnter: (e) => {
167
+ if (!disabled && page !== currentPage) {
168
+ e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;
169
+ e.currentTarget.style.borderColor = tokens.colors.accent.primary;
170
+ e.currentTarget.style.transform = "translateY(-1px)";
171
+ }
172
+ },
173
+ onMouseLeave: (e) => {
174
+ if (!disabled && page !== currentPage) {
175
+ e.currentTarget.style.backgroundColor = isTransparentTheme ? `${tokens.colors.background.surface}99` : "transparent";
176
+ e.currentTarget.style.borderColor = tokens.colors.border.muted;
177
+ e.currentTarget.style.transform = "translateY(0)";
178
+ }
179
+ },
180
+ children: page
181
+ }, page)),
182
+ showPrevNext && /* @__PURE__ */ jsx(NavButton, {
183
+ direction: "next",
184
+ targetPage: currentPage + 1,
185
+ children: /* @__PURE__ */ jsx("svg", {
186
+ width: "16",
187
+ height: "16",
188
+ viewBox: "0 0 24 24",
189
+ fill: "currentColor",
190
+ children: /* @__PURE__ */ jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" })
191
+ })
192
+ }),
193
+ showFirstLast && /* @__PURE__ */ jsx(NavButton, {
194
+ direction: "last",
195
+ targetPage: totalPages,
196
+ children: /* @__PURE__ */ jsx("svg", {
197
+ width: "16",
198
+ height: "16",
199
+ viewBox: "0 0 24 24",
200
+ fill: "currentColor",
201
+ children: /* @__PURE__ */ jsx("path", { d: "M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z" })
202
+ })
203
+ })
204
+ ]
205
+ });
186
206
  });
187
- export {
188
- Pagination
189
- };
190
- //# sourceMappingURL=Pagination.js.map
207
+ //#endregion
208
+ export { Pagination, Pagination as default };
209
+
210
+ //# sourceMappingURL=Pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.js","sources":["../../../../src/react/core/navigation/Pagination.tsx"],"sourcesContent":["/**\n * @zendir/ui - Pagination Component\n * \n * Pagination following Astro UX Design System.\n * \n * @example\n * ```tsx\n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onChange={setPage}\n * />\n * ```\n */\n\nimport React, { memo, useMemo } from 'react';\nimport { useTheme } from '../../theme';\nimport { classNames } from '../../utils';\n\nexport interface PaginationProps {\n /** Current page (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Change handler */\n onChange: (page: number) => void;\n /** Number of page buttons to show */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Show prev/next buttons */\n showPrevNext?: boolean;\n /** Size variant */\n size?: 'small' | 'medium';\n /**\n * Display mode.\n * - `'buttons'` — numbered page buttons with ellipsis (default).\n * - `'text'` — compact \"Page X of Y\" label with prev/next arrows.\n */\n displayMode?: 'buttons' | 'text';\n /** Disabled state */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const Pagination = memo(function Pagination({\n currentPage,\n totalPages,\n onChange,\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n size = 'medium',\n displayMode = 'buttons',\n disabled = false,\n className = '',\n}: PaginationProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme =\n theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n \n const sizeConfig = {\n small: { buttonSize: '28px', fontSize: tokens.typography.fontSize.xxs },\n medium: { buttonSize: '34px', fontSize: tokens.typography.fontSize.xs },\n };\n const config = sizeConfig[size];\n \n // Calculate visible page numbers\n const pageNumbers = useMemo(() => {\n const range: (number | 'ellipsis')[] = [];\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n \n const showLeftEllipsis = leftSiblingIndex > 2;\n const showRightEllipsis = rightSiblingIndex < totalPages - 1;\n \n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => i + 1);\n range.push(...leftRange, 'ellipsis', totalPages);\n } else if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = Array.from(\n { length: 3 + 2 * siblingCount },\n (_, i) => totalPages - 3 - 2 * siblingCount + i + 1\n );\n range.push(1, 'ellipsis', ...rightRange);\n } else if (showLeftEllipsis && showRightEllipsis) {\n const middleRange = Array.from(\n { length: 2 * siblingCount + 1 },\n (_, i) => leftSiblingIndex + i\n );\n range.push(1, 'ellipsis', ...middleRange, 'ellipsis', totalPages);\n } else {\n range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));\n }\n \n return range;\n }, [currentPage, totalPages, siblingCount]);\n \n const buttonStyle: React.CSSProperties = {\n width: config.buttonSize,\n height: config.buttonSize,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: config.fontSize,\n fontFamily: tokens.typography.fontFamily.mono,\n fontWeight: tokens.typography.fontWeight.medium,\n backgroundColor: isTransparentTheme ? `${tokens.colors.background.surface}99` : 'transparent',\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: `all ${tokens.animation.fast}`,\n color: tokens.colors.text.primary,\n backdropFilter: isTransparentTheme ? 'blur(8px)' : undefined,\n WebkitBackdropFilter: isTransparentTheme ? 'blur(8px)' : undefined,\n };\n \n const activeButtonStyle: React.CSSProperties = {\n ...buttonStyle,\n backgroundColor: tokens.colors.accent.primary,\n borderColor: tokens.colors.accent.primary,\n color: tokens.colors.text.inverse,\n boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`,\n };\n \n const handleClick = (page: number) => {\n if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {\n onChange(page);\n }\n };\n \n const NavButton = ({ \n direction, \n targetPage, \n children \n }: { \n direction: 'first' | 'prev' | 'next' | 'last'; \n targetPage: number;\n children: React.ReactNode;\n }) => {\n const isDisabled = disabled || \n (direction === 'first' || direction === 'prev' ? currentPage <= 1 : currentPage >= totalPages);\n \n return (\n <button\n type=\"button\"\n onClick={() => handleClick(targetPage)}\n disabled={isDisabled}\n aria-label={\n direction === 'first' ? 'Go to first page' :\n direction === 'prev' ? 'Go to previous page' :\n direction === 'next' ? 'Go to next page' :\n 'Go to last page'\n }\n style={{\n ...buttonStyle,\n opacity: isDisabled ? 0.3 : 1,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n }}\n >\n {children}\n </button>\n );\n };\n \n return (\n <nav\n className={classNames('zendir-pagination', className)}\n aria-label=\"Pagination\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.xs,\n padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,\n borderRadius: tokens.borderRadius.lg,\n ...(tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` }),\n background: isTransparentTheme ? `${tokens.colors.background.surface}66` : `${tokens.colors.background.surface}66`,\n backdropFilter: isTransparentTheme ? 'blur(10px)' : undefined,\n WebkitBackdropFilter: isTransparentTheme ? 'blur(10px)' : undefined,\n }}\n >\n {showFirstLast && (\n <NavButton direction=\"first\" targetPage={1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\" />\n </svg>\n </NavButton>\n )}\n \n {showPrevNext && (\n <NavButton direction=\"prev\" targetPage={currentPage - 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </NavButton>\n )}\n \n {displayMode === 'text' ? (\n <span\n style={{\n padding: `0 ${tokens.spacing.sm}`,\n color: tokens.colors.text.secondary,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.mono,\n letterSpacing: '0.02em',\n whiteSpace: 'nowrap',\n }}\n >\n Page {currentPage} of {totalPages}\n </span>\n ) : (\n pageNumbers.map((page, index) => \n page === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n style={{\n width: config.buttonSize,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: tokens.colors.text.muted,\n }}\n >\n ...\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => handleClick(page)}\n disabled={disabled}\n aria-current={page === currentPage ? 'page' : undefined}\n style={page === currentPage ? activeButtonStyle : buttonStyle}\n onMouseEnter={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;\n e.currentTarget.style.borderColor = tokens.colors.accent.primary;\n e.currentTarget.style.transform = 'translateY(-1px)';\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = isTransparentTheme ? `${tokens.colors.background.surface}99` : 'transparent';\n e.currentTarget.style.borderColor = tokens.colors.border.muted;\n e.currentTarget.style.transform = 'translateY(0)';\n }\n }}\n >\n {page}\n </button>\n )\n )\n )}\n \n {showPrevNext && (\n <NavButton direction=\"next\" targetPage={currentPage + 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </NavButton>\n )}\n \n {showFirstLast && (\n <NavButton direction=\"last\" targetPage={totalPages}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\" />\n </svg>\n </NavButton>\n )}\n </nav>\n );\n});\n\nexport default Pagination;\n"],"names":["Pagination"],"mappings":"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"}
1
+ {"version":3,"file":"Pagination.js","names":[],"sources":["../../../../src/react/core/navigation/Pagination.tsx"],"sourcesContent":["/**\n * @zendir/ui - Pagination Component\n *\n * Pagination following Astro UX Design System.\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onChange={setPage}\n * />\n * ```\n */\n\nimport React, { memo, useMemo } from \"react\";\nimport { useTheme } from \"../../theme\";\nimport { classNames } from \"../../utils\";\n\nexport interface PaginationProps {\n /** Current page (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Change handler */\n onChange: (page: number) => void;\n /** Number of page buttons to show */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Show prev/next buttons */\n showPrevNext?: boolean;\n /** Size variant */\n size?: \"small\" | \"medium\";\n /**\n * Display mode.\n * - `'buttons'` — numbered page buttons with ellipsis (default).\n * - `'text'` — compact \"Page X of Y\" label with prev/next arrows.\n */\n displayMode?: \"buttons\" | \"text\";\n /** Disabled state */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const Pagination = memo(function Pagination({\n currentPage,\n totalPages,\n onChange,\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n size = \"medium\",\n displayMode = \"buttons\",\n disabled = false,\n className = \"\",\n}: PaginationProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme =\n theme === \"transparent\" ||\n theme === \"transparent-bold\" ||\n theme === \"transparent-minimal\";\n\n const sizeConfig = {\n small: { buttonSize: \"28px\", fontSize: tokens.typography.fontSize.xxs },\n medium: { buttonSize: \"34px\", fontSize: tokens.typography.fontSize.xs },\n };\n const config = sizeConfig[size];\n\n // Calculate visible page numbers\n const pageNumbers = useMemo(() => {\n const range: (number | \"ellipsis\")[] = [];\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const showLeftEllipsis = leftSiblingIndex > 2;\n const showRightEllipsis = rightSiblingIndex < totalPages - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = Array.from(\n { length: 3 + 2 * siblingCount },\n (_, i) => i + 1,\n );\n range.push(...leftRange, \"ellipsis\", totalPages);\n } else if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = Array.from(\n { length: 3 + 2 * siblingCount },\n (_, i) => totalPages - 3 - 2 * siblingCount + i + 1,\n );\n range.push(1, \"ellipsis\", ...rightRange);\n } else if (showLeftEllipsis && showRightEllipsis) {\n const middleRange = Array.from(\n { length: 2 * siblingCount + 1 },\n (_, i) => leftSiblingIndex + i,\n );\n range.push(1, \"ellipsis\", ...middleRange, \"ellipsis\", totalPages);\n } else {\n range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));\n }\n\n return range;\n }, [currentPage, totalPages, siblingCount]);\n\n const buttonStyle: React.CSSProperties = {\n width: config.buttonSize,\n height: config.buttonSize,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: config.fontSize,\n fontFamily: tokens.typography.fontFamily.mono,\n fontWeight: tokens.typography.fontWeight.medium,\n backgroundColor: isTransparentTheme\n ? `${tokens.colors.background.surface}99`\n : \"transparent\",\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n transition: `all ${tokens.animation.fast}`,\n color: tokens.colors.text.primary,\n backdropFilter: isTransparentTheme ? \"blur(8px)\" : undefined,\n WebkitBackdropFilter: isTransparentTheme ? \"blur(8px)\" : undefined,\n };\n\n const activeButtonStyle: React.CSSProperties = {\n ...buttonStyle,\n backgroundColor: tokens.colors.accent.primary,\n borderColor: tokens.colors.accent.primary,\n color: tokens.colors.text.inverse,\n boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`,\n };\n\n const handleClick = (page: number) => {\n if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {\n onChange(page);\n }\n };\n\n const NavButton = ({\n direction,\n targetPage,\n children,\n }: {\n direction: \"first\" | \"prev\" | \"next\" | \"last\";\n targetPage: number;\n children: React.ReactNode;\n }) => {\n const isDisabled =\n disabled ||\n (direction === \"first\" || direction === \"prev\"\n ? currentPage <= 1\n : currentPage >= totalPages);\n\n return (\n <button\n type=\"button\"\n onClick={() => handleClick(targetPage)}\n disabled={isDisabled}\n aria-label={\n direction === \"first\"\n ? \"Go to first page\"\n : direction === \"prev\"\n ? \"Go to previous page\"\n : direction === \"next\"\n ? \"Go to next page\"\n : \"Go to last page\"\n }\n style={{\n ...buttonStyle,\n opacity: isDisabled ? 0.3 : 1,\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n }}\n >\n {children}\n </button>\n );\n };\n\n return (\n <nav\n className={classNames(\"zendir-pagination\", className)}\n aria-label=\"Pagination\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.xs,\n padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,\n borderRadius: tokens.borderRadius.lg,\n ...(tokens.colors.border.cardStyle ?? {\n border: `1px solid ${tokens.colors.border.muted}`,\n }),\n background: isTransparentTheme\n ? `${tokens.colors.background.surface}66`\n : `${tokens.colors.background.surface}66`,\n backdropFilter: isTransparentTheme ? \"blur(10px)\" : undefined,\n WebkitBackdropFilter: isTransparentTheme ? \"blur(10px)\" : undefined,\n }}\n >\n {showFirstLast && (\n <NavButton direction=\"first\" targetPage={1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\" />\n </svg>\n </NavButton>\n )}\n\n {showPrevNext && (\n <NavButton direction=\"prev\" targetPage={currentPage - 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </NavButton>\n )}\n\n {displayMode === \"text\" ? (\n <span\n style={{\n padding: `0 ${tokens.spacing.sm}`,\n color: tokens.colors.text.secondary,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.mono,\n letterSpacing: \"0.02em\",\n whiteSpace: \"nowrap\",\n }}\n >\n Page {currentPage} of {totalPages}\n </span>\n ) : (\n pageNumbers.map((page, index) =>\n page === \"ellipsis\" ? (\n <span\n key={`ellipsis-${index}`}\n style={{\n width: config.buttonSize,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: tokens.colors.text.muted,\n }}\n >\n ...\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => handleClick(page)}\n disabled={disabled}\n aria-current={page === currentPage ? \"page\" : undefined}\n style={page === currentPage ? activeButtonStyle : buttonStyle}\n onMouseEnter={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;\n e.currentTarget.style.borderColor =\n tokens.colors.accent.primary;\n e.currentTarget.style.transform = \"translateY(-1px)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = isTransparentTheme\n ? `${tokens.colors.background.surface}99`\n : \"transparent\";\n e.currentTarget.style.borderColor =\n tokens.colors.border.muted;\n e.currentTarget.style.transform = \"translateY(0)\";\n }\n }}\n >\n {page}\n </button>\n ),\n )\n )}\n\n {showPrevNext && (\n <NavButton direction=\"next\" targetPage={currentPage + 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </NavButton>\n )}\n\n {showFirstLast && (\n <NavButton direction=\"last\" targetPage={totalPages}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\" />\n </svg>\n </NavButton>\n )}\n </nav>\n );\n});\n\nexport default Pagination;\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { default as React } from 'react';
2
2
  import { IconName } from '../display/Icon';
3
-
4
3
  export interface SideNavProps {
5
4
  /** Collapsed mode (icon-only). When omitted, auto-collapses on tablet viewports. */
6
5
  collapsed?: boolean;
@@ -18,13 +17,13 @@ export interface SideNavProps {
18
17
  * label — matching the v2.3 operator/admin secondary-nav mock. Default
19
18
  * `'default'`. (TODO: row inset + mono section headings for full mock parity.)
20
19
  */
21
- density?: 'default' | 'compact';
20
+ density?: "default" | "compact";
22
21
  /**
23
22
  * Mobile viewport behavior.
24
23
  * - `'drawer'` (default): hamburger button with slide-out overlay drawer.
25
24
  * - `'collapsed'`: persistent collapsed icon-only strip (same as tablet).
26
25
  */
27
- mobileVariant?: 'drawer' | 'collapsed';
26
+ mobileVariant?: "drawer" | "collapsed";
28
27
  /** Children (SideNav.Header, SideNav.Item, SideNav.Section, SideNav.Footer) */
29
28
  children?: React.ReactNode;
30
29
  /** Custom style */
@@ -45,7 +44,7 @@ export interface SideNavHeaderProps {
45
44
  /** Role badge (e.g., "Operator", "Admin") */
46
45
  badge?: string;
47
46
  /** Badge variant for color */
48
- badgeVariant?: 'info' | 'success' | 'warning' | 'caution';
47
+ badgeVariant?: "info" | "success" | "warning" | "caution";
49
48
  /**
50
49
  * Fixed height (px) for the top logo band. Title, subtitle, and badge render below this band
51
50
  * so different logo assets still line up across apps (dashboard vs operator).
@@ -65,7 +64,7 @@ export interface SideNavItemProps {
65
64
  /** Small tag/chip displayed after the label (e.g. "v2", "NEW", "BETA") */
66
65
  tag?: string;
67
66
  /** Tag color variant */
68
- tagVariant?: 'default' | 'info' | 'success' | 'warning' | 'danger';
67
+ tagVariant?: "default" | "info" | "success" | "warning" | "danger";
69
68
  /** Link href (renders <a>) */
70
69
  href?: string;
71
70
  /** Click handler (renders <button>) */
@@ -83,7 +82,7 @@ export interface SideNavItemProps {
83
82
  * Shapes per official Astro UXDS: normal = ● filled circle, standby = ◎ ring,
84
83
  * caution = ■ square, serious = ◆ diamond, critical = ▼ triangle, off = · small circle.
85
84
  */
86
- status?: 'off' | 'standby' | 'normal' | 'caution' | 'serious' | 'critical';
85
+ status?: "off" | "standby" | "normal" | "caution" | "serious" | "critical";
87
86
  /** Optional status label shown as tooltip or text next to status shape */
88
87
  statusLabel?: string;
89
88
  /** Right-side slot — arbitrary ReactNode rendered at the end of the item row */