@hyperpackai/hyperui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/dist/components/Accordion/index.d.ts +17 -0
  4. package/dist/components/Accordion/index.d.ts.map +1 -0
  5. package/dist/components/Accordion/index.js +46 -0
  6. package/dist/components/Alert/index.d.ts +13 -0
  7. package/dist/components/Alert/index.d.ts.map +1 -0
  8. package/dist/components/Alert/index.js +46 -0
  9. package/dist/components/AppBar/index.d.ts +19 -0
  10. package/dist/components/AppBar/index.d.ts.map +1 -0
  11. package/dist/components/AppBar/index.js +48 -0
  12. package/dist/components/AspectRatio/index.d.ts +8 -0
  13. package/dist/components/AspectRatio/index.d.ts.map +1 -0
  14. package/dist/components/AspectRatio/index.js +32 -0
  15. package/dist/components/Autocomplete/index.d.ts +21 -0
  16. package/dist/components/Autocomplete/index.d.ts.map +1 -0
  17. package/dist/components/Autocomplete/index.js +94 -0
  18. package/dist/components/Avatar/index.d.ts +12 -0
  19. package/dist/components/Avatar/index.d.ts.map +1 -0
  20. package/dist/components/Avatar/index.js +32 -0
  21. package/dist/components/AvatarGroup/index.d.ts +9 -0
  22. package/dist/components/AvatarGroup/index.d.ts.map +1 -0
  23. package/dist/components/AvatarGroup/index.js +24 -0
  24. package/dist/components/Backdrop/index.d.ts +10 -0
  25. package/dist/components/Backdrop/index.d.ts.map +1 -0
  26. package/dist/components/Backdrop/index.js +25 -0
  27. package/dist/components/Badge/index.d.ts +10 -0
  28. package/dist/components/Badge/index.d.ts.map +1 -0
  29. package/dist/components/Badge/index.js +30 -0
  30. package/dist/components/BottomNavigation/index.d.ts +16 -0
  31. package/dist/components/BottomNavigation/index.d.ts.map +1 -0
  32. package/dist/components/BottomNavigation/index.js +43 -0
  33. package/dist/components/Box/index.d.ts +21 -0
  34. package/dist/components/Box/index.d.ts.map +1 -0
  35. package/dist/components/Box/index.js +30 -0
  36. package/dist/components/Breadcrumb/index.d.ts +13 -0
  37. package/dist/components/Breadcrumb/index.d.ts.map +1 -0
  38. package/dist/components/Breadcrumb/index.js +19 -0
  39. package/dist/components/Button/index.d.ts +22 -0
  40. package/dist/components/Button/index.d.ts.map +1 -0
  41. package/dist/components/Button/index.js +93 -0
  42. package/dist/components/ButtonGroup/index.d.ts +9 -0
  43. package/dist/components/ButtonGroup/index.d.ts.map +1 -0
  44. package/dist/components/ButtonGroup/index.js +27 -0
  45. package/dist/components/Card/index.d.ts +14 -0
  46. package/dist/components/Card/index.d.ts.map +1 -0
  47. package/dist/components/Card/index.js +33 -0
  48. package/dist/components/Checkbox/index.d.ts +17 -0
  49. package/dist/components/Checkbox/index.d.ts.map +1 -0
  50. package/dist/components/Checkbox/index.js +42 -0
  51. package/dist/components/Chip/index.d.ts +18 -0
  52. package/dist/components/Chip/index.d.ts.map +1 -0
  53. package/dist/components/Chip/index.js +60 -0
  54. package/dist/components/CircularProgress/index.d.ts +14 -0
  55. package/dist/components/CircularProgress/index.d.ts.map +1 -0
  56. package/dist/components/CircularProgress/index.js +58 -0
  57. package/dist/components/ClickAwayListener/index.d.ts +11 -0
  58. package/dist/components/ClickAwayListener/index.d.ts.map +1 -0
  59. package/dist/components/ClickAwayListener/index.js +31 -0
  60. package/dist/components/Code/index.d.ts +9 -0
  61. package/dist/components/Code/index.d.ts.map +1 -0
  62. package/dist/components/Code/index.js +50 -0
  63. package/dist/components/Collapse/index.d.ts +11 -0
  64. package/dist/components/Collapse/index.d.ts.map +1 -0
  65. package/dist/components/Collapse/index.js +30 -0
  66. package/dist/components/CommandPalette/index.d.ts +26 -0
  67. package/dist/components/CommandPalette/index.d.ts.map +1 -0
  68. package/dist/components/CommandPalette/index.js +141 -0
  69. package/dist/components/Container/index.d.ts +11 -0
  70. package/dist/components/Container/index.d.ts.map +1 -0
  71. package/dist/components/Container/index.js +18 -0
  72. package/dist/components/DashboardLayout/index.d.ts +15 -0
  73. package/dist/components/DashboardLayout/index.d.ts.map +1 -0
  74. package/dist/components/DashboardLayout/index.js +67 -0
  75. package/dist/components/DataTable/index.d.ts +27 -0
  76. package/dist/components/DataTable/index.d.ts.map +1 -0
  77. package/dist/components/DataTable/index.js +59 -0
  78. package/dist/components/Dialog/index.d.ts +19 -0
  79. package/dist/components/Dialog/index.d.ts.map +1 -0
  80. package/dist/components/Dialog/index.js +96 -0
  81. package/dist/components/Divider/index.d.ts +13 -0
  82. package/dist/components/Divider/index.d.ts.map +1 -0
  83. package/dist/components/Divider/index.js +40 -0
  84. package/dist/components/Drawer/index.d.ts +17 -0
  85. package/dist/components/Drawer/index.d.ts.map +1 -0
  86. package/dist/components/Drawer/index.js +77 -0
  87. package/dist/components/DropdownMenu/index.d.ts +25 -0
  88. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  89. package/dist/components/DropdownMenu/index.js +67 -0
  90. package/dist/components/EmptyState/index.d.ts +11 -0
  91. package/dist/components/EmptyState/index.d.ts.map +1 -0
  92. package/dist/components/EmptyState/index.js +53 -0
  93. package/dist/components/ErrorState/index.d.ts +12 -0
  94. package/dist/components/ErrorState/index.d.ts.map +1 -0
  95. package/dist/components/ErrorState/index.js +54 -0
  96. package/dist/components/Fab/index.d.ts +16 -0
  97. package/dist/components/Fab/index.d.ts.map +1 -0
  98. package/dist/components/Fab/index.js +39 -0
  99. package/dist/components/Fade/index.d.ts +10 -0
  100. package/dist/components/Fade/index.d.ts.map +1 -0
  101. package/dist/components/Fade/index.js +13 -0
  102. package/dist/components/FocusTrap/index.d.ts +11 -0
  103. package/dist/components/FocusTrap/index.d.ts.map +1 -0
  104. package/dist/components/FocusTrap/index.js +69 -0
  105. package/dist/components/FormControl/index.d.ts +34 -0
  106. package/dist/components/FormControl/index.d.ts.map +1 -0
  107. package/dist/components/FormControl/index.js +52 -0
  108. package/dist/components/GlobalSearch/index.d.ts +23 -0
  109. package/dist/components/GlobalSearch/index.d.ts.map +1 -0
  110. package/dist/components/GlobalSearch/index.js +91 -0
  111. package/dist/components/Grid/index.d.ts +19 -0
  112. package/dist/components/Grid/index.d.ts.map +1 -0
  113. package/dist/components/Grid/index.js +30 -0
  114. package/dist/components/Grow/index.d.ts +10 -0
  115. package/dist/components/Grow/index.d.ts.map +1 -0
  116. package/dist/components/Grow/index.js +13 -0
  117. package/dist/components/IconButton/index.d.ts +16 -0
  118. package/dist/components/IconButton/index.d.ts.map +1 -0
  119. package/dist/components/IconButton/index.js +43 -0
  120. package/dist/components/ImageList/index.d.ts +21 -0
  121. package/dist/components/ImageList/index.d.ts.map +1 -0
  122. package/dist/components/ImageList/index.js +39 -0
  123. package/dist/components/Input/index.d.ts +33 -0
  124. package/dist/components/Input/index.d.ts.map +1 -0
  125. package/dist/components/Input/index.js +45 -0
  126. package/dist/components/Kbd/index.d.ts +8 -0
  127. package/dist/components/Kbd/index.d.ts.map +1 -0
  128. package/dist/components/Kbd/index.js +41 -0
  129. package/dist/components/KeyboardShortcut/index.d.ts +20 -0
  130. package/dist/components/KeyboardShortcut/index.d.ts.map +1 -0
  131. package/dist/components/KeyboardShortcut/index.js +63 -0
  132. package/dist/components/Label/index.d.ts +10 -0
  133. package/dist/components/Label/index.d.ts.map +1 -0
  134. package/dist/components/Label/index.js +17 -0
  135. package/dist/components/LinearProgress/index.d.ts +13 -0
  136. package/dist/components/LinearProgress/index.d.ts.map +1 -0
  137. package/dist/components/LinearProgress/index.js +69 -0
  138. package/dist/components/Link/index.d.ts +16 -0
  139. package/dist/components/Link/index.d.ts.map +1 -0
  140. package/dist/components/Link/index.js +25 -0
  141. package/dist/components/List/index.d.ts +40 -0
  142. package/dist/components/List/index.d.ts.map +1 -0
  143. package/dist/components/List/index.js +70 -0
  144. package/dist/components/LoadingState/index.d.ts +11 -0
  145. package/dist/components/LoadingState/index.d.ts.map +1 -0
  146. package/dist/components/LoadingState/index.js +66 -0
  147. package/dist/components/Menu/index.d.ts +40 -0
  148. package/dist/components/Menu/index.d.ts.map +1 -0
  149. package/dist/components/Menu/index.js +103 -0
  150. package/dist/components/MobileStepper/index.d.ts +16 -0
  151. package/dist/components/MobileStepper/index.d.ts.map +1 -0
  152. package/dist/components/MobileStepper/index.js +67 -0
  153. package/dist/components/Modal/index.d.ts +14 -0
  154. package/dist/components/Modal/index.d.ts.map +1 -0
  155. package/dist/components/Modal/index.js +51 -0
  156. package/dist/components/Navbar/index.d.ts +14 -0
  157. package/dist/components/Navbar/index.d.ts.map +1 -0
  158. package/dist/components/Navbar/index.js +27 -0
  159. package/dist/components/NoSSR/index.d.ts +7 -0
  160. package/dist/components/NoSSR/index.d.ts.map +1 -0
  161. package/dist/components/NoSSR/index.js +9 -0
  162. package/dist/components/PageLayout/index.d.ts +13 -0
  163. package/dist/components/PageLayout/index.d.ts.map +1 -0
  164. package/dist/components/PageLayout/index.js +41 -0
  165. package/dist/components/Pagination/index.d.ts +11 -0
  166. package/dist/components/Pagination/index.d.ts.map +1 -0
  167. package/dist/components/Pagination/index.js +56 -0
  168. package/dist/components/Paper/index.d.ts +12 -0
  169. package/dist/components/Paper/index.d.ts.map +1 -0
  170. package/dist/components/Paper/index.js +24 -0
  171. package/dist/components/Popover/index.d.ts +13 -0
  172. package/dist/components/Popover/index.d.ts.map +1 -0
  173. package/dist/components/Popover/index.js +34 -0
  174. package/dist/components/Progress/index.d.ts +13 -0
  175. package/dist/components/Progress/index.d.ts.map +1 -0
  176. package/dist/components/Progress/index.js +40 -0
  177. package/dist/components/Radio/index.d.ts +7 -0
  178. package/dist/components/Radio/index.d.ts.map +1 -0
  179. package/dist/components/Radio/index.js +28 -0
  180. package/dist/components/Rating/index.d.ts +15 -0
  181. package/dist/components/Rating/index.d.ts.map +1 -0
  182. package/dist/components/Rating/index.js +41 -0
  183. package/dist/components/ResizablePanel/index.d.ts +16 -0
  184. package/dist/components/ResizablePanel/index.d.ts.map +1 -0
  185. package/dist/components/ResizablePanel/index.js +41 -0
  186. package/dist/components/ScrollArea/index.d.ts +12 -0
  187. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  188. package/dist/components/ScrollArea/index.js +50 -0
  189. package/dist/components/Select/index.d.ts +23 -0
  190. package/dist/components/Select/index.d.ts.map +1 -0
  191. package/dist/components/Select/index.js +52 -0
  192. package/dist/components/Sheet/index.d.ts +15 -0
  193. package/dist/components/Sheet/index.d.ts.map +1 -0
  194. package/dist/components/Sheet/index.js +61 -0
  195. package/dist/components/Sidebar/index.d.ts +23 -0
  196. package/dist/components/Sidebar/index.d.ts.map +1 -0
  197. package/dist/components/Sidebar/index.js +37 -0
  198. package/dist/components/Skeleton/index.d.ts +9 -0
  199. package/dist/components/Skeleton/index.d.ts.map +1 -0
  200. package/dist/components/Skeleton/index.js +22 -0
  201. package/dist/components/Slide/index.d.ts +12 -0
  202. package/dist/components/Slide/index.d.ts.map +1 -0
  203. package/dist/components/Slide/index.js +21 -0
  204. package/dist/components/Slider/index.d.ts +19 -0
  205. package/dist/components/Slider/index.d.ts.map +1 -0
  206. package/dist/components/Slider/index.js +49 -0
  207. package/dist/components/Snackbar/index.d.ts +28 -0
  208. package/dist/components/Snackbar/index.d.ts.map +1 -0
  209. package/dist/components/Snackbar/index.js +71 -0
  210. package/dist/components/SpeedDial/index.d.ts +18 -0
  211. package/dist/components/SpeedDial/index.d.ts.map +1 -0
  212. package/dist/components/SpeedDial/index.js +71 -0
  213. package/dist/components/Spinner/index.d.ts +10 -0
  214. package/dist/components/Spinner/index.d.ts.map +1 -0
  215. package/dist/components/Spinner/index.js +67 -0
  216. package/dist/components/SplitPane/index.d.ts +11 -0
  217. package/dist/components/SplitPane/index.d.ts.map +1 -0
  218. package/dist/components/SplitPane/index.js +46 -0
  219. package/dist/components/Stack/index.d.ts +17 -0
  220. package/dist/components/Stack/index.d.ts.map +1 -0
  221. package/dist/components/Stack/index.js +30 -0
  222. package/dist/components/Stepper/index.d.ts +20 -0
  223. package/dist/components/Stepper/index.d.ts.map +1 -0
  224. package/dist/components/Stepper/index.js +66 -0
  225. package/dist/components/Switch/index.d.ts +13 -0
  226. package/dist/components/Switch/index.d.ts.map +1 -0
  227. package/dist/components/Switch/index.js +38 -0
  228. package/dist/components/Tabs/index.d.ts +20 -0
  229. package/dist/components/Tabs/index.d.ts.map +1 -0
  230. package/dist/components/Tabs/index.js +62 -0
  231. package/dist/components/TextField/index.d.ts +35 -0
  232. package/dist/components/TextField/index.d.ts.map +1 -0
  233. package/dist/components/TextField/index.js +69 -0
  234. package/dist/components/Textarea/index.d.ts +22 -0
  235. package/dist/components/Textarea/index.d.ts.map +1 -0
  236. package/dist/components/Textarea/index.js +27 -0
  237. package/dist/components/Timeline/index.d.ts +16 -0
  238. package/dist/components/Timeline/index.d.ts.map +1 -0
  239. package/dist/components/Timeline/index.js +30 -0
  240. package/dist/components/Toast/index.d.ts +34 -0
  241. package/dist/components/Toast/index.d.ts.map +1 -0
  242. package/dist/components/Toast/index.js +106 -0
  243. package/dist/components/ToggleButton/index.d.ts +21 -0
  244. package/dist/components/ToggleButton/index.d.ts.map +1 -0
  245. package/dist/components/ToggleButton/index.js +81 -0
  246. package/dist/components/Tooltip/index.d.ts +14 -0
  247. package/dist/components/Tooltip/index.d.ts.map +1 -0
  248. package/dist/components/Tooltip/index.js +47 -0
  249. package/dist/components/TreeView/index.d.ts +19 -0
  250. package/dist/components/TreeView/index.d.ts.map +1 -0
  251. package/dist/components/TreeView/index.js +50 -0
  252. package/dist/components/Typography/index.d.ts +17 -0
  253. package/dist/components/Typography/index.d.ts.map +1 -0
  254. package/dist/components/Typography/index.js +44 -0
  255. package/dist/components/VisuallyHidden/index.d.ts +7 -0
  256. package/dist/components/VisuallyHidden/index.d.ts.map +1 -0
  257. package/dist/components/VisuallyHidden/index.js +18 -0
  258. package/dist/components/Zoom/index.d.ts +10 -0
  259. package/dist/components/Zoom/index.d.ts.map +1 -0
  260. package/dist/components/Zoom/index.js +13 -0
  261. package/dist/components/ai.d.ts +133 -0
  262. package/dist/components/ai.d.ts.map +1 -0
  263. package/dist/components/ai.js +184 -0
  264. package/dist/components/charts.d.ts +143 -0
  265. package/dist/components/charts.d.ts.map +1 -0
  266. package/dist/components/charts.js +435 -0
  267. package/dist/components/data.d.ts +192 -0
  268. package/dist/components/data.d.ts.map +1 -0
  269. package/dist/components/data.js +581 -0
  270. package/dist/components/date.d.ts +73 -0
  271. package/dist/components/date.d.ts.map +1 -0
  272. package/dist/components/date.js +199 -0
  273. package/dist/components/enterprise.d.ts +246 -0
  274. package/dist/components/enterprise.d.ts.map +1 -0
  275. package/dist/components/enterprise.js +428 -0
  276. package/dist/components/form.d.ts +132 -0
  277. package/dist/components/form.d.ts.map +1 -0
  278. package/dist/components/form.js +380 -0
  279. package/dist/components/index.d.ts +173 -0
  280. package/dist/components/index.d.ts.map +1 -0
  281. package/dist/components/index.js +107 -0
  282. package/dist/components/inputs.d.ts +169 -0
  283. package/dist/components/inputs.d.ts.map +1 -0
  284. package/dist/components/inputs.js +437 -0
  285. package/dist/components/layout.d.ts +224 -0
  286. package/dist/components/layout.d.ts.map +1 -0
  287. package/dist/components/layout.js +644 -0
  288. package/dist/components/overlay.d.ts +102 -0
  289. package/dist/components/overlay.d.ts.map +1 -0
  290. package/dist/components/overlay.js +318 -0
  291. package/dist/components/surfaces.d.ts +180 -0
  292. package/dist/components/surfaces.d.ts.map +1 -0
  293. package/dist/components/surfaces.js +423 -0
  294. package/dist/components/typography.d.ts +69 -0
  295. package/dist/components/typography.d.ts.map +1 -0
  296. package/dist/components/typography.js +206 -0
  297. package/dist/index.d.ts +23 -0
  298. package/dist/index.d.ts.map +1 -0
  299. package/dist/index.js +29 -0
  300. package/dist/portal.d.ts +3 -0
  301. package/dist/portal.d.ts.map +1 -0
  302. package/dist/portal.js +17 -0
  303. package/dist/theme/index.d.ts +31 -0
  304. package/dist/theme/index.d.ts.map +1 -0
  305. package/dist/theme/index.js +258 -0
  306. package/dist/tokens/component.d.ts +124 -0
  307. package/dist/tokens/component.d.ts.map +1 -0
  308. package/dist/tokens/component.js +113 -0
  309. package/dist/tokens/index.d.ts +494 -0
  310. package/dist/tokens/index.d.ts.map +1 -0
  311. package/dist/tokens/index.js +345 -0
  312. package/dist/tokens/primitives.d.ts +675 -0
  313. package/dist/tokens/primitives.d.ts.map +1 -0
  314. package/dist/tokens/primitives.js +356 -0
  315. package/dist/tokens/semantic.d.ts +252 -0
  316. package/dist/tokens/semantic.d.ts.map +1 -0
  317. package/dist/tokens/semantic.js +242 -0
  318. package/dist/tokens/themes.d.ts +18 -0
  319. package/dist/tokens/themes.d.ts.map +1 -0
  320. package/dist/tokens/themes.js +316 -0
  321. package/package.json +69 -0
@@ -0,0 +1,67 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const CSS = `
3
+ .hu-mobile-stepper {
4
+ display: flex; align-items: center; justify-content: space-between;
5
+ padding: var(--hu-space-2) var(--hu-space-2);
6
+ background: var(--hu-bg); border-top: 1px solid var(--hu-border);
7
+ }
8
+ .hu-mobile-stepper--bottom { position: fixed; bottom: 0; left: 0; right: 0; z-index: 50; }
9
+ .hu-mobile-stepper--static { position: static; }
10
+
11
+ .hu-mobile-stepper__dots { display: flex; align-items: center; gap: 6px; }
12
+ .hu-mobile-stepper__dot {
13
+ width: 8px; height: 8px; border-radius: 50%;
14
+ background: var(--hu-border-2);
15
+ transition: width var(--hu-duration) var(--hu-ease), background var(--hu-duration) var(--hu-ease), border-radius var(--hu-duration) var(--hu-ease);
16
+ }
17
+ .hu-mobile-stepper__dot--active { background: var(--hu-primary); width: 20px; border-radius: 4px; }
18
+
19
+ .hu-mobile-stepper__progress {
20
+ flex: 1; margin: 0 var(--hu-space-3); height: 4px;
21
+ background: var(--hu-border-2); border-radius: 2px; overflow: hidden;
22
+ }
23
+ .hu-mobile-stepper__progress-bar {
24
+ height: 100%; background: var(--hu-primary); border-radius: inherit;
25
+ transition: width 300ms cubic-bezier(.4,0,.2,1);
26
+ }
27
+
28
+ .hu-mobile-stepper__text {
29
+ font-size: var(--hu-font-size-sm); color: var(--hu-text-2);
30
+ font-weight: var(--hu-font-weight-medium);
31
+ }
32
+
33
+ .hu-mobile-stepper__btn {
34
+ background: linear-gradient(180deg, var(--hu-bg), var(--hu-bg-2)); border: 1px solid var(--hu-border); color: var(--hu-text);
35
+ min-height: 36px; padding: var(--hu-space-2) var(--hu-space-3); border-radius: var(--hu-radius-md);
36
+ cursor: pointer; font-size: var(--hu-font-size-sm); font-family: var(--hu-font-sans);
37
+ font-weight: var(--hu-font-weight-medium);
38
+ transition: background var(--hu-duration) var(--hu-ease), border-color var(--hu-duration) var(--hu-ease), color var(--hu-duration) var(--hu-ease), box-shadow var(--hu-duration) var(--hu-ease);
39
+ display: flex; align-items: center; gap: var(--hu-space-1);
40
+ }
41
+ .hu-mobile-stepper__btn:hover { background: var(--hu-bg-3); border-color: var(--hu-border-2); }
42
+ .hu-mobile-stepper__btn:focus-visible { outline: 2px solid var(--hu-primary); outline-offset: 2px; }
43
+ .hu-mobile-stepper__btn:disabled { opacity: .4; pointer-events: none; }
44
+ `;
45
+ export function MobileStepper(props) {
46
+ injectCSS("hu-mobile-stepper", CSS);
47
+ const { steps, activeStep, variant = "dots", position = "static" } = props;
48
+ const progress = (activeStep / (steps - 1)) * 100;
49
+ const center = variant === "dots"
50
+ ? h("div", { class: "hu-mobile-stepper__dots" }, ...Array.from({ length: steps }, (_, i) => h("span", { class: cn("hu-mobile-stepper__dot", i === activeStep && "hu-mobile-stepper__dot--active") })))
51
+ : variant === "progress"
52
+ ? h("div", { class: "hu-mobile-stepper__progress" }, h("div", { class: "hu-mobile-stepper__progress-bar", style: `width:${progress}%` }))
53
+ : h("span", { class: "hu-mobile-stepper__text" }, `${activeStep + 1} / ${steps}`);
54
+ const back = props.backButton ?? h("button", {
55
+ class: "hu-mobile-stepper__btn",
56
+ onClick: props.onBack,
57
+ disabled: activeStep === 0
58
+ }, "← Back");
59
+ const next = props.nextButton ?? h("button", {
60
+ class: "hu-mobile-stepper__btn",
61
+ onClick: props.onNext,
62
+ disabled: activeStep === steps - 1
63
+ }, "Next →");
64
+ return h("div", {
65
+ class: cn("hu-mobile-stepper", `hu-mobile-stepper--${position}`, props.class)
66
+ }, back, center, next);
67
+ }
@@ -0,0 +1,14 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface ModalProps {
3
+ open: boolean;
4
+ onClose?: (reason?: "backdrop" | "escape") => void;
5
+ onOpenChange?: (open: boolean, reason?: "backdrop" | "escape") => void;
6
+ align?: "center" | "top" | "bottom";
7
+ disableBackdropClick?: boolean;
8
+ disableEscapeKey?: boolean;
9
+ keepMounted?: boolean;
10
+ class?: string;
11
+ children?: unknown;
12
+ }
13
+ export declare function Modal(props: ModalProps): VNode | null;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAyBpE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,KAAK,IAAI,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,KAAK,IAAI,CAAC;IACvE,KAAK,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,GAAG,IAAI,CA6BrD"}
@@ -0,0 +1,51 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ import { renderInPortal } from "../../portal.js";
3
+ import { FocusTrap } from "../FocusTrap/index.js";
4
+ const CSS = `
5
+ .hu-modal {
6
+ position: fixed; inset: 0; z-index: var(--hu-z-modal);
7
+ display: flex; align-items: center; justify-content: center;
8
+ padding: var(--hu-space-4);
9
+ }
10
+ .hu-modal__backdrop {
11
+ position: absolute; inset: 0; background: var(--hu-overlay);
12
+ animation: hu-modal-bg-in 180ms ease forwards;
13
+ }
14
+ .hu-modal__content {
15
+ position: relative; z-index: 1; max-height: 90vh; overflow-y: auto;
16
+ outline: none;
17
+ animation: hu-modal-in 200ms cubic-bezier(.34,1.56,.64,1) forwards;
18
+ }
19
+ @keyframes hu-modal-bg-in { from { opacity: 0; } to { opacity: 1; } }
20
+ @keyframes hu-modal-in { from { opacity: 0; transform: scale(.94); } to { opacity: 1; transform: scale(1); } }
21
+ .hu-modal--align-top { align-items: flex-start; padding-top: var(--hu-space-8); }
22
+ .hu-modal--align-bottom { align-items: flex-end; padding-bottom: var(--hu-space-8); }
23
+ `;
24
+ export function Modal(props) {
25
+ injectCSS("hu-modal", CSS);
26
+ const { open, onClose, onOpenChange, align = "center", disableBackdropClick } = props;
27
+ const close = (reason) => {
28
+ onOpenChange?.(false, reason);
29
+ onClose?.(reason);
30
+ };
31
+ if (!open && !props.keepMounted)
32
+ return null;
33
+ if (!open)
34
+ return h("div", { style: "display:none", "aria-hidden": "true" }, props.children);
35
+ return renderInPortal(h("div", {
36
+ class: cn("hu-modal", align !== "center" && `hu-modal--align-${align}`, props.class),
37
+ role: "dialog",
38
+ "aria-modal": "true",
39
+ onKeydown: !props.disableEscapeKey && onClose ? (e) => { if (e.key === "Escape")
40
+ close("escape"); } : undefined
41
+ }, h("div", {
42
+ class: "hu-modal__backdrop",
43
+ onClick: !disableBackdropClick && onClose ? () => close("backdrop") : undefined
44
+ }), FocusTrap({
45
+ active: true,
46
+ restoreFocus: true,
47
+ autoFocus: true,
48
+ onEscape: !props.disableEscapeKey && onClose ? () => close("escape") : undefined,
49
+ children: h("div", { class: "hu-modal__content", tabindex: "-1" }, props.children)
50
+ })), "modal");
51
+ }
@@ -0,0 +1,14 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface NavLink {
3
+ label: string;
4
+ href: string;
5
+ active?: boolean;
6
+ }
7
+ export interface NavbarProps {
8
+ brand?: unknown;
9
+ links?: NavLink[];
10
+ actions?: unknown;
11
+ class?: string;
12
+ }
13
+ export declare function Navbar(props: NavbarProps): VNode;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Navbar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAwBpE,MAAM,WAAW,OAAO;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAAE;AAE3E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAWhD"}
@@ -0,0 +1,27 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const NAVBAR_CSS = `
3
+ .hu-navbar {
4
+ display: flex; align-items: center; justify-content: space-between;
5
+ gap: var(--hu-space-4); padding: 0 var(--hu-space-6); min-height: 60px;
6
+ border-bottom: 1px solid color-mix(in srgb, var(--hu-border) 82%, transparent);
7
+ position: sticky; top: 0; z-index: var(--hu-z-sticky);
8
+ backdrop-filter: blur(12px); background: color-mix(in srgb, var(--hu-bg) 88%, transparent);
9
+ box-shadow: var(--hu-shadow-xs);
10
+ }
11
+ .hu-navbar-brand { display: flex; align-items: center; gap: var(--hu-space-3); min-width: max-content; text-decoration: none; color: var(--hu-text); font-weight: var(--hu-font-weight-bold); font-size: var(--hu-font-size-md); }
12
+ .hu-navbar-nav { display: flex; align-items: center; gap: var(--hu-space-1); min-width: 0; overflow-x: auto; }
13
+ .hu-navbar-link {
14
+ padding: 7px 12px; border-radius: var(--hu-radius-md); font-size: var(--hu-font-size-sm); color: var(--hu-text-2);
15
+ text-decoration: none; font-weight: var(--hu-font-weight-medium); white-space: nowrap;
16
+ transition: background var(--hu-duration) var(--hu-ease), color var(--hu-duration) var(--hu-ease), box-shadow var(--hu-duration) var(--hu-ease);
17
+ }
18
+ .hu-navbar-link:hover { color: var(--hu-text); background: var(--hu-bg-3); }
19
+ .hu-navbar-link:focus-visible { outline: 2px solid var(--hu-primary); outline-offset: 2px; }
20
+ .hu-navbar-link--active { color: var(--hu-primary); background: var(--hu-primary-bg); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--hu-primary) 20%, transparent); }
21
+ .hu-navbar-actions { display: flex; align-items: center; gap: var(--hu-space-2); min-width: max-content; }
22
+ `;
23
+ export function Navbar(props) {
24
+ injectCSS("hu-navbar", NAVBAR_CSS);
25
+ const { brand, links = [], actions } = props;
26
+ return h("header", { class: cn("hu-navbar", props.class) }, brand && h("a", { class: "hu-navbar-brand", href: "/" }, brand), links.length > 0 && h("nav", { class: "hu-navbar-nav", "aria-label": "Main navigation" }, ...links.map((l) => h("a", { key: l.href, href: l.href, class: cn("hu-navbar-link", l.active && "hu-navbar-link--active") }, l.label))), actions && h("div", { class: "hu-navbar-actions" }, actions));
27
+ }
@@ -0,0 +1,7 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface NoSSRProps {
3
+ fallback?: unknown;
4
+ children?: unknown;
5
+ }
6
+ export declare function NoSSR(props: NoSSRProps): VNode;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/NoSSR/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAO9C"}
@@ -0,0 +1,9 @@
1
+ import { signal, onMount } from "@hyperpackai/hyperion";
2
+ import { h } from "../../theme/index.js";
3
+ export function NoSSR(props) {
4
+ const mounted = signal(false);
5
+ onMount(() => { mounted.value = true; });
6
+ return (() => mounted.value
7
+ ? h("span", { "data-hu-nosr": "mounted" }, props.children)
8
+ : h("span", { "data-hu-nosr": "fallback" }, props.fallback ?? null));
9
+ }
@@ -0,0 +1,13 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface PageLayoutProps {
3
+ header?: unknown;
4
+ footer?: unknown;
5
+ contained?: boolean;
6
+ stickyHeader?: boolean;
7
+ maxWidth?: string | number;
8
+ padding?: string | number;
9
+ class?: string;
10
+ children?: unknown;
11
+ }
12
+ export declare function PageLayout(props: PageLayoutProps): VNode;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PageLayout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AA8BpE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAgBxD"}
@@ -0,0 +1,41 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const ENTERPRISE_LAYOUT_CSS = `
3
+ .hu-page-layout {
4
+ min-height: 100dvh; display: grid; grid-template-rows: auto 1fr auto;
5
+ background: var(--hu-bg-2); color: var(--hu-text);
6
+ }
7
+ .hu-page-layout--contained .hu-page-layout__main {
8
+ width: 100%; max-width: var(--hu-page-max, 1200px); margin-inline: auto;
9
+ }
10
+ .hu-page-layout__header {
11
+ position: relative; z-index: var(--hu-z-sticky); background: var(--hu-bg);
12
+ border-block-end: 1px solid var(--hu-border);
13
+ }
14
+ .hu-page-layout__header--sticky { position: sticky; inset-block-start: 0; }
15
+ .hu-page-layout__main {
16
+ min-width: 0; padding: var(--hu-page-padding, var(--hu-space-6));
17
+ }
18
+ .hu-page-layout__footer {
19
+ background: var(--hu-bg); border-block-start: 1px solid var(--hu-border);
20
+ }
21
+ @media (max-width: 768px) {
22
+ .hu-page-layout__main { padding: var(--hu-space-4); }
23
+ }
24
+ `;
25
+ function toCssUnit(value) {
26
+ return typeof value === "number" ? `${value}px` : value;
27
+ }
28
+ export function PageLayout(props) {
29
+ injectCSS("hu-page-layout", ENTERPRISE_LAYOUT_CSS);
30
+ const styles = [];
31
+ if (props.maxWidth !== undefined)
32
+ styles.push(`--hu-page-max:${toCssUnit(props.maxWidth)}`);
33
+ if (props.padding !== undefined)
34
+ styles.push(`--hu-page-padding:${toCssUnit(props.padding)}`);
35
+ return h("div", {
36
+ class: cn("hu-page-layout", props.contained && "hu-page-layout--contained", props.class),
37
+ style: styles.join(";") || undefined
38
+ }, props.header && h("header", {
39
+ class: cn("hu-page-layout__header", props.stickyHeader && "hu-page-layout__header--sticky")
40
+ }, props.header), h("main", { class: "hu-page-layout__main" }, props.children), props.footer && h("footer", { class: "hu-page-layout__footer" }, props.footer));
41
+ }
@@ -0,0 +1,11 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface PaginationProps {
3
+ page: number;
4
+ totalPages: number;
5
+ siblingCount?: number;
6
+ onChange: (page: number) => void;
7
+ showFirstLast?: boolean;
8
+ class?: string;
9
+ }
10
+ export declare function Pagination(props: PaginationProps): VNode;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Pagination/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAuBpE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CA0CxD"}
@@ -0,0 +1,56 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const PAGINATION_CSS = `
3
+ .hu-pagination { display: flex; align-items: center; gap: var(--hu-space-1); max-width: 100%; overflow-x: auto; padding: 2px; }
4
+ .hu-pagination-btn {
5
+ display: inline-flex; align-items: center; justify-content: center;
6
+ min-width: 36px; height: 36px; padding: 0 var(--hu-space-2);
7
+ border: 1px solid var(--hu-border); border-radius: var(--hu-radius-md);
8
+ background: linear-gradient(180deg, var(--hu-bg), var(--hu-bg-2)); font-size: var(--hu-font-size-sm); color: var(--hu-text-2);
9
+ cursor: pointer; flex-shrink: 0; box-shadow: var(--hu-shadow-xs);
10
+ transition: background var(--hu-duration) var(--hu-ease), border-color var(--hu-duration) var(--hu-ease), color var(--hu-duration) var(--hu-ease), box-shadow var(--hu-duration) var(--hu-ease), transform var(--hu-duration-fast) var(--hu-ease);
11
+ }
12
+ .hu-pagination-btn:hover:not(:disabled) { background: var(--hu-bg-3); color: var(--hu-text); border-color: var(--hu-border-2); transform: translateY(-1px); }
13
+ .hu-pagination-btn:focus-visible { outline: 2px solid var(--hu-primary); outline-offset: 2px; }
14
+ .hu-pagination-btn--active {
15
+ background: linear-gradient(180deg, color-mix(in srgb, var(--hu-primary) 86%, white), var(--hu-primary));
16
+ border-color: var(--hu-primary); color: white; font-weight: var(--hu-font-weight-semibold);
17
+ }
18
+ .hu-pagination-btn--active:hover { background: var(--hu-primary); }
19
+ .hu-pagination-btn:disabled { opacity: .4; cursor: not-allowed; }
20
+ .hu-pagination-ellipsis { display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 36px; color: var(--hu-text-3); font-size: var(--hu-font-size-sm); flex-shrink: 0; }
21
+ `;
22
+ export function Pagination(props) {
23
+ injectCSS("hu-pagination", PAGINATION_CSS);
24
+ const { page, totalPages, siblingCount = 1, onChange, showFirstLast = true } = props;
25
+ const pages = [];
26
+ const delta = siblingCount;
27
+ const left = page - delta;
28
+ const right = page + delta + 1;
29
+ const range = [];
30
+ const rangeWithDots = [];
31
+ for (let i = 1; i <= totalPages; i++) {
32
+ if (i === 1 || i === totalPages || (i >= left && i < right))
33
+ range.push(i);
34
+ }
35
+ let prev;
36
+ for (const i of range) {
37
+ if (prev !== undefined) {
38
+ if (i - prev === 2)
39
+ rangeWithDots.push(prev + 1);
40
+ else if (i - prev > 2)
41
+ rangeWithDots.push("...");
42
+ }
43
+ rangeWithDots.push(i);
44
+ prev = i;
45
+ }
46
+ const prevSVG = `<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M10 4L6 8l4 4"/></svg>`;
47
+ const nextSVG = `<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M6 4l4 4-4 4"/></svg>`;
48
+ return h("nav", { class: cn("hu-pagination", props.class), "aria-label": "Pagination" }, h("button", { class: "hu-pagination-btn", onClick: () => onChange(page - 1), disabled: page <= 1, "aria-label": "Previous page", innerHTML: prevSVG }), ...rangeWithDots.map((p, i) => p === "..."
49
+ ? h("span", { key: `ellipsis-${i}`, class: "hu-pagination-ellipsis" }, "…")
50
+ : h("button", {
51
+ key: p,
52
+ class: cn("hu-pagination-btn", p === page && "hu-pagination-btn--active"),
53
+ onClick: () => onChange(p),
54
+ "aria-label": `Page ${p}`, "aria-current": p === page ? "page" : undefined
55
+ }, p)), h("button", { class: "hu-pagination-btn", onClick: () => onChange(page + 1), disabled: page >= totalPages, "aria-label": "Next page", innerHTML: nextSVG }));
56
+ }
@@ -0,0 +1,12 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export type PaperElevation = 0 | 1 | 2 | 3 | 4 | 5;
3
+ export interface PaperProps {
4
+ elevation?: PaperElevation;
5
+ variant?: "elevation" | "outlined";
6
+ square?: boolean;
7
+ component?: string;
8
+ class?: string;
9
+ children?: unknown;
10
+ }
11
+ export declare function Paper(props: PaperProps): VNode;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Paper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAmBpE,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAW9C"}
@@ -0,0 +1,24 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const PAPER_CSS = `
3
+ .hu-paper {
4
+ background: linear-gradient(180deg, var(--hu-bg), color-mix(in srgb, var(--hu-bg-2) 56%, var(--hu-bg)));
5
+ border: 1px solid color-mix(in srgb, var(--hu-border) 68%, transparent);
6
+ border-radius: var(--hu-radius-md);
7
+ transition: box-shadow var(--hu-duration) var(--hu-ease), border-color var(--hu-duration) var(--hu-ease);
8
+ }
9
+ .hu-paper--elevation-0 { box-shadow: none; }
10
+ .hu-paper--elevation-1 { box-shadow: var(--hu-shadow-xs); }
11
+ .hu-paper--elevation-2 { box-shadow: var(--hu-shadow-sm); }
12
+ .hu-paper--elevation-3 { box-shadow: var(--hu-shadow-md); }
13
+ .hu-paper--elevation-4 { box-shadow: var(--hu-shadow-lg); }
14
+ .hu-paper--elevation-5 { box-shadow: var(--hu-shadow-xl); }
15
+ .hu-paper--outlined { border: 1px solid var(--hu-border); box-shadow: none; }
16
+ .hu-paper--square { border-radius: 0; }
17
+ `;
18
+ export function Paper(props) {
19
+ injectCSS("hu-paper", PAPER_CSS);
20
+ const { elevation = 1, variant = "elevation", square, component = "div" } = props;
21
+ return h(component, {
22
+ class: cn("hu-paper", variant === "elevation" ? `hu-paper--elevation-${elevation}` : "hu-paper--outlined", square && "hu-paper--square", props.class)
23
+ }, props.children);
24
+ }
@@ -0,0 +1,13 @@
1
+ import { type Signal } from "@hyperpackai/hyperion";
2
+ import { type VNode } from "../../theme/index.js";
3
+ export interface PopoverProps {
4
+ open: boolean | Signal<boolean>;
5
+ side?: "top" | "bottom" | "left" | "right";
6
+ trigger?: unknown;
7
+ onClose?: () => void;
8
+ onOpenChange?: (open: boolean) => void;
9
+ children?: unknown;
10
+ class?: string;
11
+ }
12
+ export declare function Popover(props: PopoverProps): VNode;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Popover/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAgBpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAuBlD"}
@@ -0,0 +1,34 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const POPOVER_CSS = `
3
+ .hu-popover-wrap { position: relative; display: inline-flex; }
4
+ .hu-popover-content {
5
+ position: absolute; z-index: var(--hu-z-popover); min-width: 200px;
6
+ background: var(--hu-bg); border: 1px solid var(--hu-border);
7
+ border-radius: var(--hu-radius-md); box-shadow: var(--hu-shadow-lg); padding: var(--hu-space-4);
8
+ animation: hu-scale-in var(--hu-duration-fast) var(--hu-ease);
9
+ }
10
+ .hu-popover-content--top { bottom: calc(100% + 6px); left: 0; }
11
+ .hu-popover-content--bottom { top: calc(100% + 6px); left: 0; }
12
+ .hu-popover-content--left { right: calc(100% + 6px); top: 0; }
13
+ .hu-popover-content--right { left: calc(100% + 6px); top: 0; }
14
+ `;
15
+ export function Popover(props) {
16
+ injectCSS("hu-popover", POPOVER_CSS);
17
+ const { side = "bottom", trigger, children } = props;
18
+ const isSignalOpen = typeof props.open === "object" && "peek" in props.open;
19
+ const isOpen = () => isSignalOpen
20
+ ? props.open.value
21
+ : props.open;
22
+ const overlay = () => isOpen()
23
+ ? h("div", {
24
+ class: cn("hu-popover-content", `hu-popover-content--${side}`),
25
+ onKeyDown: (e) => {
26
+ if (e.key === "Escape") {
27
+ props.onOpenChange?.(false);
28
+ props.onClose?.();
29
+ }
30
+ }
31
+ }, children)
32
+ : null;
33
+ return h("div", { class: cn("hu-popover-wrap", props.class) }, trigger, typeof props.open === "boolean" ? overlay() : overlay);
34
+ }
@@ -0,0 +1,13 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface ProgressProps {
3
+ value?: number;
4
+ max?: number;
5
+ label?: string;
6
+ showValue?: boolean;
7
+ size?: "sm" | "md" | "lg";
8
+ color?: "primary" | "success" | "error" | "warning";
9
+ indeterminate?: boolean;
10
+ class?: string;
11
+ }
12
+ export declare function Progress(props: ProgressProps): VNode;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Progress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AA6BpE,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK,CAqBpD"}
@@ -0,0 +1,40 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const PROGRESS_CSS = `
3
+ .hu-progress-wrap { display: flex; flex-direction: column; gap: var(--hu-space-1); }
4
+ .hu-progress-header { display: flex; justify-content: space-between; align-items: center; font-size: var(--hu-font-size-xs); color: var(--hu-text-2); }
5
+ .hu-progress-label { font-weight: var(--hu-font-weight-medium); }
6
+ .hu-progress-track {
7
+ width: 100%; background: var(--hu-bg-3); border-radius: var(--hu-radius-full);
8
+ overflow: hidden;
9
+ }
10
+ .hu-progress-track--sm { height: 4px; }
11
+ .hu-progress-track--md { height: 8px; }
12
+ .hu-progress-track--lg { height: 12px; }
13
+ .hu-progress-bar {
14
+ height: 100%; background: var(--hu-primary); border-radius: var(--hu-radius-full);
15
+ transition: width .4s var(--hu-ease-out);
16
+ }
17
+ .hu-progress-bar--success { background: var(--hu-success); }
18
+ .hu-progress-bar--error { background: var(--hu-error); }
19
+ .hu-progress-bar--warning { background: var(--hu-warning); }
20
+ .hu-progress-bar--indeterminate {
21
+ width: 40% !important; animation: hu-progress-indeterminate 1.5s infinite;
22
+ }
23
+ @keyframes hu-progress-indeterminate {
24
+ 0% { transform: translateX(-100%); }
25
+ 100%{ transform: translateX(350%); }
26
+ }
27
+ `;
28
+ export function Progress(props) {
29
+ injectCSS("hu-progress", PROGRESS_CSS);
30
+ const { value = 0, max = 100, label, showValue = false, size = "md", color = "primary", indeterminate = false } = props;
31
+ const pct = Math.min(100, Math.max(0, (value / max) * 100));
32
+ return h("div", { class: cn("hu-progress-wrap", props.class) }, (label || showValue) && h("div", { class: "hu-progress-header" }, label && h("span", { class: "hu-progress-label" }, label), showValue && h("span", {}, `${Math.round(pct)}%`)), h("div", {
33
+ class: cn("hu-progress-track", `hu-progress-track--${size}`),
34
+ role: "progressbar", "aria-valuenow": indeterminate ? undefined : value,
35
+ "aria-valuemin": 0, "aria-valuemax": max, "aria-label": label
36
+ }, h("div", {
37
+ class: cn("hu-progress-bar", color !== "primary" && `hu-progress-bar--${color}`, indeterminate && "hu-progress-bar--indeterminate"),
38
+ style: !indeterminate ? `width:${pct}%` : undefined
39
+ })));
40
+ }
@@ -0,0 +1,7 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ import type { CheckboxProps } from "../Checkbox/index.js";
3
+ export interface RadioProps extends Omit<CheckboxProps, "indeterminate" | "defaultChecked"> {
4
+ value: string;
5
+ }
6
+ export declare function Radio(props: RadioProps): VNode;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAyB1D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,aAAa,EAAE,eAAe,GAAG,gBAAgB,CAAC;IACzF,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAW9C"}
@@ -0,0 +1,28 @@
1
+ import { injectCSS, cn, h } from "../../theme/index.js";
2
+ const RADIO_CSS = `
3
+ .hu-radio-wrap { display: inline-flex; align-items: center; gap: var(--hu-space-2); cursor: pointer; min-height: 28px; max-width: 100%; }
4
+ .hu-radio-wrap--disabled { opacity: .5; cursor: not-allowed; }
5
+ .hu-radio {
6
+ appearance: none; width: 18px; height: 18px; min-width: 18px;
7
+ border: 1.5px solid var(--hu-border-2); border-radius: var(--hu-radius-full);
8
+ background: linear-gradient(180deg, var(--hu-bg), var(--hu-bg-2)); cursor: pointer; position: relative;
9
+ box-shadow: var(--hu-shadow-xs);
10
+ transition: background var(--hu-duration) var(--hu-ease), border-color var(--hu-duration) var(--hu-ease), box-shadow var(--hu-duration) var(--hu-ease);
11
+ margin: 0;
12
+ }
13
+ .hu-radio:hover { border-color: var(--hu-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--hu-primary) 10%, transparent); }
14
+ .hu-radio:checked { background: var(--hu-bg); border-color: var(--hu-primary); border-width: 2px; }
15
+ .hu-radio:checked::after {
16
+ content: ""; position: absolute; inset: 3px;
17
+ background: linear-gradient(180deg, color-mix(in srgb, var(--hu-primary) 88%, white), var(--hu-primary));
18
+ border-radius: var(--hu-radius-full);
19
+ }
20
+ .hu-radio:focus-visible { outline: 2px solid var(--hu-primary); outline-offset: 2px; }
21
+ .hu-radio-group { display: flex; flex-direction: column; gap: var(--hu-space-2); }
22
+ .hu-radio-group--horizontal { flex-direction: row; flex-wrap: wrap; }
23
+ `;
24
+ export function Radio(props) {
25
+ injectCSS("hu-radio", RADIO_CSS);
26
+ const { label, description, disabled, id, ...rest } = props;
27
+ return h("label", { class: cn("hu-radio-wrap", disabled && "hu-radio-wrap--disabled", props.class) }, h("input", { ...rest, type: "radio", id, disabled, class: "hu-radio" }), (label || description) && h("span", { class: "hu-checkbox-text" }, label && h("span", { class: "hu-checkbox-label" }, label), description && h("span", { class: "hu-checkbox-desc" }, description)));
28
+ }
@@ -0,0 +1,15 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export type RatingSize = "sm" | "md" | "lg";
3
+ export interface RatingProps {
4
+ value?: number;
5
+ defaultValue?: number;
6
+ max?: number;
7
+ precision?: number;
8
+ size?: RatingSize;
9
+ readOnly?: boolean;
10
+ disabled?: boolean;
11
+ onChange?: (value: number) => void;
12
+ class?: string;
13
+ }
14
+ export declare function Rating(props: RatingProps): VNode;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Rating/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAsBpE,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAqBhD"}
@@ -0,0 +1,41 @@
1
+ import { signal } from "@hyperpackai/hyperion";
2
+ import { injectCSS, cn, h } from "../../theme/index.js";
3
+ const RATING_CSS = `
4
+ .hu-rating { display: inline-flex; gap: 2px; user-select: none; }
5
+ .hu-rating__star {
6
+ font-size: 24px; cursor: pointer; color: var(--hu-border-2);
7
+ transition: color var(--hu-duration) var(--hu-ease), transform 80ms;
8
+ line-height: 1;
9
+ }
10
+ .hu-rating__star--filled { color: #f59e0b; }
11
+ .hu-rating__star--half { position: relative; color: var(--hu-border-2); }
12
+ .hu-rating__star--half::after {
13
+ content: "★"; position: absolute; left: 0; top: 0; width: 50%; overflow: hidden; color: #f59e0b;
14
+ }
15
+ .hu-rating__star:hover { transform: scale(1.15); }
16
+ .hu-rating--sm .hu-rating__star { font-size: 18px; }
17
+ .hu-rating--lg .hu-rating__star { font-size: 30px; }
18
+ .hu-rating--readonly .hu-rating__star { cursor: default; }
19
+ .hu-rating--readonly .hu-rating__star:hover { transform: none; }
20
+ .hu-rating--disabled { opacity: .5; pointer-events: none; }
21
+ `;
22
+ export function Rating(props) {
23
+ injectCSS("hu-rating", RATING_CSS);
24
+ const { max = 5, precision = 1, size = "md", readOnly, disabled, onChange } = props;
25
+ const val = signal(props.value ?? props.defaultValue ?? 0);
26
+ const stars = Array.from({ length: max }, (_, i) => {
27
+ const starVal = i + 1;
28
+ const filled = val.value >= starVal;
29
+ const half = !filled && precision === 0.5 && val.value >= starVal - 0.5;
30
+ return h("span", {
31
+ class: cn("hu-rating__star", filled && "hu-rating__star--filled", half && "hu-rating__star--half"),
32
+ onClick: !readOnly && !disabled ? () => { val.value = starVal; onChange?.(starVal); } : undefined,
33
+ "aria-label": `${starVal} star${starVal > 1 ? "s" : ""}`
34
+ }, "★");
35
+ });
36
+ return h("div", {
37
+ class: cn("hu-rating", `hu-rating--${size}`, readOnly && "hu-rating--readonly", disabled && "hu-rating--disabled", props.class),
38
+ role: "radiogroup",
39
+ "aria-label": "rating"
40
+ }, ...stars);
41
+ }
@@ -0,0 +1,16 @@
1
+ import { type VNode } from "../../theme/index.js";
2
+ export interface ResizablePanelProps {
3
+ title?: unknown;
4
+ actions?: unknown;
5
+ width?: string | number;
6
+ height?: string | number;
7
+ minWidth?: string | number;
8
+ maxWidth?: string | number;
9
+ minHeight?: string | number;
10
+ maxHeight?: string | number;
11
+ resize?: "none" | "both" | "horizontal" | "vertical";
12
+ class?: string;
13
+ children?: unknown;
14
+ }
15
+ export declare function ResizablePanel(props: ResizablePanelProps): VNode;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ResizablePanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAuBpE,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAqBhE"}