@lab206/ui 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 (327) hide show
  1. package/LICENSE +114 -0
  2. package/README.md +6 -0
  3. package/dist/components/Accordion.d.ts +25 -0
  4. package/dist/components/Accordion.d.ts.map +1 -0
  5. package/dist/components/Accordion.js +123 -0
  6. package/dist/components/Accordion.js.map +1 -0
  7. package/dist/components/Alert.d.ts +17 -0
  8. package/dist/components/Alert.d.ts.map +1 -0
  9. package/dist/components/Alert.js +59 -0
  10. package/dist/components/Alert.js.map +1 -0
  11. package/dist/components/AspectRatio.d.ts +13 -0
  12. package/dist/components/AspectRatio.d.ts.map +1 -0
  13. package/dist/components/AspectRatio.js +38 -0
  14. package/dist/components/AspectRatio.js.map +1 -0
  15. package/dist/components/Avatar.d.ts +17 -0
  16. package/dist/components/Avatar.d.ts.map +1 -0
  17. package/dist/components/Avatar.js +57 -0
  18. package/dist/components/Avatar.js.map +1 -0
  19. package/dist/components/Badge.d.ts +12 -0
  20. package/dist/components/Badge.d.ts.map +1 -0
  21. package/dist/components/Badge.js +62 -0
  22. package/dist/components/Badge.js.map +1 -0
  23. package/dist/components/Breadcrumb.d.ts +16 -0
  24. package/dist/components/Breadcrumb.d.ts.map +1 -0
  25. package/dist/components/Breadcrumb.js +76 -0
  26. package/dist/components/Breadcrumb.js.map +1 -0
  27. package/dist/components/Button.d.ts +28 -0
  28. package/dist/components/Button.d.ts.map +1 -0
  29. package/dist/components/Button.js +110 -0
  30. package/dist/components/Button.js.map +1 -0
  31. package/dist/components/Card.d.ts +18 -0
  32. package/dist/components/Card.d.ts.map +1 -0
  33. package/dist/components/Card.js +57 -0
  34. package/dist/components/Card.js.map +1 -0
  35. package/dist/components/Checkbox.d.ts +23 -0
  36. package/dist/components/Checkbox.d.ts.map +1 -0
  37. package/dist/components/Checkbox.js +107 -0
  38. package/dist/components/Checkbox.js.map +1 -0
  39. package/dist/components/Chip.d.ts +18 -0
  40. package/dist/components/Chip.d.ts.map +1 -0
  41. package/dist/components/Chip.js +103 -0
  42. package/dist/components/Chip.js.map +1 -0
  43. package/dist/components/Code.d.ts +12 -0
  44. package/dist/components/Code.d.ts.map +1 -0
  45. package/dist/components/Code.js +57 -0
  46. package/dist/components/Code.js.map +1 -0
  47. package/dist/components/Collapse.d.ts +15 -0
  48. package/dist/components/Collapse.d.ts.map +1 -0
  49. package/dist/components/Collapse.js +49 -0
  50. package/dist/components/Collapse.js.map +1 -0
  51. package/dist/components/Combobox.d.ts +47 -0
  52. package/dist/components/Combobox.d.ts.map +1 -0
  53. package/dist/components/Combobox.js +325 -0
  54. package/dist/components/Combobox.js.map +1 -0
  55. package/dist/components/Command.d.ts +42 -0
  56. package/dist/components/Command.d.ts.map +1 -0
  57. package/dist/components/Command.js +263 -0
  58. package/dist/components/Command.js.map +1 -0
  59. package/dist/components/Container.d.ts +11 -0
  60. package/dist/components/Container.d.ts.map +1 -0
  61. package/dist/components/Container.js +38 -0
  62. package/dist/components/Container.js.map +1 -0
  63. package/dist/components/Dialog.d.ts +26 -0
  64. package/dist/components/Dialog.d.ts.map +1 -0
  65. package/dist/components/Dialog.js +159 -0
  66. package/dist/components/Dialog.js.map +1 -0
  67. package/dist/components/Divider.d.ts +10 -0
  68. package/dist/components/Divider.d.ts.map +1 -0
  69. package/dist/components/Divider.js +52 -0
  70. package/dist/components/Divider.js.map +1 -0
  71. package/dist/components/Drawer.d.ts +19 -0
  72. package/dist/components/Drawer.d.ts.map +1 -0
  73. package/dist/components/Drawer.js +131 -0
  74. package/dist/components/Drawer.js.map +1 -0
  75. package/dist/components/Empty.d.ts +17 -0
  76. package/dist/components/Empty.d.ts.map +1 -0
  77. package/dist/components/Empty.js +51 -0
  78. package/dist/components/Empty.js.map +1 -0
  79. package/dist/components/Field.d.ts +27 -0
  80. package/dist/components/Field.d.ts.map +1 -0
  81. package/dist/components/Field.js +153 -0
  82. package/dist/components/Field.js.map +1 -0
  83. package/dist/components/Grid.d.ts +13 -0
  84. package/dist/components/Grid.d.ts.map +1 -0
  85. package/dist/components/Grid.js +44 -0
  86. package/dist/components/Grid.js.map +1 -0
  87. package/dist/components/Input.d.ts +55 -0
  88. package/dist/components/Input.d.ts.map +1 -0
  89. package/dist/components/Input.js +113 -0
  90. package/dist/components/Input.js.map +1 -0
  91. package/dist/components/Kbd.d.ts +10 -0
  92. package/dist/components/Kbd.d.ts.map +1 -0
  93. package/dist/components/Kbd.js +41 -0
  94. package/dist/components/Kbd.js.map +1 -0
  95. package/dist/components/Label.d.ts +13 -0
  96. package/dist/components/Label.d.ts.map +1 -0
  97. package/dist/components/Label.js +34 -0
  98. package/dist/components/Label.js.map +1 -0
  99. package/dist/components/Link.d.ts +18 -0
  100. package/dist/components/Link.d.ts.map +1 -0
  101. package/dist/components/Link.js +41 -0
  102. package/dist/components/Link.js.map +1 -0
  103. package/dist/components/List.d.ts +22 -0
  104. package/dist/components/List.d.ts.map +1 -0
  105. package/dist/components/List.js +157 -0
  106. package/dist/components/List.js.map +1 -0
  107. package/dist/components/Menu.d.ts +28 -0
  108. package/dist/components/Menu.d.ts.map +1 -0
  109. package/dist/components/Menu.js +126 -0
  110. package/dist/components/Menu.js.map +1 -0
  111. package/dist/components/NumberInput.d.ts +27 -0
  112. package/dist/components/NumberInput.d.ts.map +1 -0
  113. package/dist/components/NumberInput.js +92 -0
  114. package/dist/components/NumberInput.js.map +1 -0
  115. package/dist/components/Pagination.d.ts +13 -0
  116. package/dist/components/Pagination.d.ts.map +1 -0
  117. package/dist/components/Pagination.js +104 -0
  118. package/dist/components/Pagination.js.map +1 -0
  119. package/dist/components/Popover.d.ts +26 -0
  120. package/dist/components/Popover.d.ts.map +1 -0
  121. package/dist/components/Popover.js +165 -0
  122. package/dist/components/Popover.js.map +1 -0
  123. package/dist/components/Progress.d.ts +15 -0
  124. package/dist/components/Progress.d.ts.map +1 -0
  125. package/dist/components/Progress.js +63 -0
  126. package/dist/components/Progress.js.map +1 -0
  127. package/dist/components/Radio.d.ts +25 -0
  128. package/dist/components/Radio.d.ts.map +1 -0
  129. package/dist/components/Radio.js +95 -0
  130. package/dist/components/Radio.js.map +1 -0
  131. package/dist/components/ScrollArea.d.ts +13 -0
  132. package/dist/components/ScrollArea.d.ts.map +1 -0
  133. package/dist/components/ScrollArea.js +33 -0
  134. package/dist/components/ScrollArea.js.map +1 -0
  135. package/dist/components/Select.d.ts +34 -0
  136. package/dist/components/Select.d.ts.map +1 -0
  137. package/dist/components/Select.js +108 -0
  138. package/dist/components/Select.js.map +1 -0
  139. package/dist/components/Skeleton.d.ts +18 -0
  140. package/dist/components/Skeleton.d.ts.map +1 -0
  141. package/dist/components/Skeleton.js +86 -0
  142. package/dist/components/Skeleton.js.map +1 -0
  143. package/dist/components/Slider.d.ts +26 -0
  144. package/dist/components/Slider.d.ts.map +1 -0
  145. package/dist/components/Slider.js +113 -0
  146. package/dist/components/Slider.js.map +1 -0
  147. package/dist/components/Spinner.d.ts +12 -0
  148. package/dist/components/Spinner.d.ts.map +1 -0
  149. package/dist/components/Spinner.js +44 -0
  150. package/dist/components/Spinner.js.map +1 -0
  151. package/dist/components/Stack.d.ts +21 -0
  152. package/dist/components/Stack.d.ts.map +1 -0
  153. package/dist/components/Stack.js +48 -0
  154. package/dist/components/Stack.js.map +1 -0
  155. package/dist/components/Stat.d.ts +23 -0
  156. package/dist/components/Stat.d.ts.map +1 -0
  157. package/dist/components/Stat.js +115 -0
  158. package/dist/components/Stat.js.map +1 -0
  159. package/dist/components/Steps.d.ts +20 -0
  160. package/dist/components/Steps.d.ts.map +1 -0
  161. package/dist/components/Steps.js +126 -0
  162. package/dist/components/Steps.js.map +1 -0
  163. package/dist/components/Switch.d.ts +23 -0
  164. package/dist/components/Switch.d.ts.map +1 -0
  165. package/dist/components/Switch.js +108 -0
  166. package/dist/components/Switch.js.map +1 -0
  167. package/dist/components/Table.d.ts +27 -0
  168. package/dist/components/Table.d.ts.map +1 -0
  169. package/dist/components/Table.js +112 -0
  170. package/dist/components/Table.js.map +1 -0
  171. package/dist/components/Tabs.d.ts +27 -0
  172. package/dist/components/Tabs.d.ts.map +1 -0
  173. package/dist/components/Tabs.js +171 -0
  174. package/dist/components/Tabs.js.map +1 -0
  175. package/dist/components/Text.d.ts +17 -0
  176. package/dist/components/Text.d.ts.map +1 -0
  177. package/dist/components/Text.js +48 -0
  178. package/dist/components/Text.js.map +1 -0
  179. package/dist/components/Textarea.d.ts +32 -0
  180. package/dist/components/Textarea.d.ts.map +1 -0
  181. package/dist/components/Textarea.js +91 -0
  182. package/dist/components/Textarea.js.map +1 -0
  183. package/dist/components/Timeline.d.ts +17 -0
  184. package/dist/components/Timeline.d.ts.map +1 -0
  185. package/dist/components/Timeline.js +95 -0
  186. package/dist/components/Timeline.js.map +1 -0
  187. package/dist/components/Toast.d.ts +36 -0
  188. package/dist/components/Toast.d.ts.map +1 -0
  189. package/dist/components/Toast.js +143 -0
  190. package/dist/components/Toast.js.map +1 -0
  191. package/dist/components/ToggleGroup.d.ts +25 -0
  192. package/dist/components/ToggleGroup.d.ts.map +1 -0
  193. package/dist/components/ToggleGroup.js +103 -0
  194. package/dist/components/ToggleGroup.js.map +1 -0
  195. package/dist/components/Tooltip.d.ts +19 -0
  196. package/dist/components/Tooltip.d.ts.map +1 -0
  197. package/dist/components/Tooltip.js +141 -0
  198. package/dist/components/Tooltip.js.map +1 -0
  199. package/dist/components/Transition.d.ts +22 -0
  200. package/dist/components/Transition.d.ts.map +1 -0
  201. package/dist/components/Transition.js +139 -0
  202. package/dist/components/Transition.js.map +1 -0
  203. package/dist/density.d.ts +21 -0
  204. package/dist/density.d.ts.map +1 -0
  205. package/dist/density.js +31 -0
  206. package/dist/density.js.map +1 -0
  207. package/dist/dev.d.ts +27 -0
  208. package/dist/dev.d.ts.map +1 -0
  209. package/dist/dev.js +77 -0
  210. package/dist/dev.js.map +1 -0
  211. package/dist/focusTrap.d.ts +6 -0
  212. package/dist/focusTrap.d.ts.map +1 -0
  213. package/dist/focusTrap.js +55 -0
  214. package/dist/focusTrap.js.map +1 -0
  215. package/dist/form.d.ts +125 -0
  216. package/dist/form.d.ts.map +1 -0
  217. package/dist/form.js +192 -0
  218. package/dist/form.js.map +1 -0
  219. package/dist/index.d.ts +134 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.js +85 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/motion.d.ts +29 -0
  224. package/dist/motion.d.ts.map +1 -0
  225. package/dist/motion.js +43 -0
  226. package/dist/motion.js.map +1 -0
  227. package/dist/overlay.d.ts +63 -0
  228. package/dist/overlay.d.ts.map +1 -0
  229. package/dist/overlay.js +172 -0
  230. package/dist/overlay.js.map +1 -0
  231. package/dist/palette.d.ts +20 -0
  232. package/dist/palette.d.ts.map +1 -0
  233. package/dist/palette.js +52 -0
  234. package/dist/palette.js.map +1 -0
  235. package/dist/reactive.d.ts +25 -0
  236. package/dist/reactive.d.ts.map +1 -0
  237. package/dist/reactive.js +43 -0
  238. package/dist/reactive.js.map +1 -0
  239. package/dist/rovingFocus.d.ts +36 -0
  240. package/dist/rovingFocus.d.ts.map +1 -0
  241. package/dist/rovingFocus.js +127 -0
  242. package/dist/rovingFocus.js.map +1 -0
  243. package/dist/size-entries/form-kit.d.ts +12 -0
  244. package/dist/size-entries/form-kit.d.ts.map +1 -0
  245. package/dist/size-entries/form-kit.js +12 -0
  246. package/dist/size-entries/form-kit.js.map +1 -0
  247. package/dist/styles.d.ts +29 -0
  248. package/dist/styles.d.ts.map +1 -0
  249. package/dist/styles.js +53 -0
  250. package/dist/styles.js.map +1 -0
  251. package/dist/theme.d.ts +22 -0
  252. package/dist/theme.d.ts.map +1 -0
  253. package/dist/theme.js +32 -0
  254. package/dist/theme.js.map +1 -0
  255. package/dist/utils.d.ts +5 -0
  256. package/dist/utils.d.ts.map +1 -0
  257. package/dist/utils.js +24 -0
  258. package/dist/utils.js.map +1 -0
  259. package/package.json +71 -0
  260. package/src/components/Accordion.tsx +194 -0
  261. package/src/components/Alert.tsx +88 -0
  262. package/src/components/AspectRatio.tsx +64 -0
  263. package/src/components/Avatar.tsx +89 -0
  264. package/src/components/Badge.tsx +84 -0
  265. package/src/components/Breadcrumb.tsx +116 -0
  266. package/src/components/Button.tsx +148 -0
  267. package/src/components/Card.tsx +92 -0
  268. package/src/components/Checkbox.tsx +143 -0
  269. package/src/components/Chip.tsx +153 -0
  270. package/src/components/Code.tsx +71 -0
  271. package/src/components/Collapse.tsx +76 -0
  272. package/src/components/Combobox.tsx +438 -0
  273. package/src/components/Command.tsx +380 -0
  274. package/src/components/Container.tsx +58 -0
  275. package/src/components/Dialog.tsx +226 -0
  276. package/src/components/Divider.tsx +72 -0
  277. package/src/components/Drawer.tsx +191 -0
  278. package/src/components/Empty.tsx +86 -0
  279. package/src/components/Field.tsx +184 -0
  280. package/src/components/Grid.tsx +67 -0
  281. package/src/components/Input.tsx +169 -0
  282. package/src/components/Kbd.tsx +57 -0
  283. package/src/components/Label.tsx +54 -0
  284. package/src/components/Link.tsx +87 -0
  285. package/src/components/List.tsx +236 -0
  286. package/src/components/Menu.tsx +195 -0
  287. package/src/components/NumberInput.tsx +158 -0
  288. package/src/components/Pagination.tsx +153 -0
  289. package/src/components/Popover.tsx +219 -0
  290. package/src/components/Progress.tsx +108 -0
  291. package/src/components/Radio.tsx +161 -0
  292. package/src/components/ScrollArea.tsx +58 -0
  293. package/src/components/Select.tsx +128 -0
  294. package/src/components/Skeleton.tsx +117 -0
  295. package/src/components/Slider.tsx +175 -0
  296. package/src/components/Spinner.tsx +70 -0
  297. package/src/components/Stack.tsx +79 -0
  298. package/src/components/Stat.tsx +169 -0
  299. package/src/components/Steps.tsx +191 -0
  300. package/src/components/Switch.tsx +146 -0
  301. package/src/components/Table.tsx +168 -0
  302. package/src/components/Tabs.tsx +246 -0
  303. package/src/components/Text.tsx +69 -0
  304. package/src/components/Textarea.tsx +128 -0
  305. package/src/components/Timeline.tsx +150 -0
  306. package/src/components/Toast.tsx +221 -0
  307. package/src/components/ToggleGroup.tsx +161 -0
  308. package/src/components/Tooltip.tsx +187 -0
  309. package/src/components/Transition.tsx +155 -0
  310. package/src/density.ts +46 -0
  311. package/src/dev.ts +87 -0
  312. package/src/focusTrap.ts +61 -0
  313. package/src/form.ts +269 -0
  314. package/src/index.ts +243 -0
  315. package/src/motion.ts +62 -0
  316. package/src/overlay.ts +232 -0
  317. package/src/palette.ts +70 -0
  318. package/src/reactive.ts +54 -0
  319. package/src/rovingFocus.ts +171 -0
  320. package/src/size-entries/form-kit.ts +11 -0
  321. package/src/styles/base.css +70 -0
  322. package/src/styles/theme.css +14 -0
  323. package/src/styles/tokens.css +377 -0
  324. package/src/styles/utilities.css +216 -0
  325. package/src/styles.ts +52 -0
  326. package/src/theme.ts +48 -0
  327. package/src/utils.ts +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../src/components/Radio.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAkBhD,MAAM,MAAM,GAAG,gBAAgB,CAC7B,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ED,CACA,CAAC;AAEF,mDAAmD;AACnD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,GAAoB,EAAE,EAAE;IAC3D,MAAM,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,UAAU,CACtB,EAAE,WAAW,EAAE,UAAmB,EAAE,EACpC,GAAG,CAC4E,CAAC;IAElF,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAErE,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;QAC/B,CAAC,CAAE,KAAK,CAAC,KAAsB,EAAE;QACjC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1B,MAAM,aAAa,GAAG,GAAG,EAAE,CACzB,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE/E,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU;QACjC,CAAC,CAAE,KAAK,CAAC,OAA+B,EAAE;QAC1C,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAE5B,OAAO,CACL,cACE,KAAK,EAAE,GAAG,EAAE,CACV,EAAE,CACA,gBAAgB,EAChB,KAAK,CAAC,WAAW,KAAK,YAAY,IAAI,4BAA4B,EAClE,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAChE,EAEH,IAAI,EAAC,YAAY,EACjB,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,YAErC,KAAC,GAAG,IAAC,IAAI,EAAE,UAAU,YAClB,CAAC,GAAG,EAAE,EAAE,CAAC,CACR,iBACE,KAAK,EAAC,UAAU,kBACF,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,mBACnD,GAAG,EAAE,CAClB,aAAa,EAAE,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,aAGtD,gBACE,KAAK,EAAC,iBAAiB,EACvB,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC,KAAK,EACxC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EACnD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAC7C,EACF,eAAM,KAAK,EAAC,eAAe,iBAAa,MAAM,GAAG,EACjD,yBAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,GAAQ,IAC1B,CACT,GACG,GACF,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type ScrollAreaProps = {
2
+ /** Max height (CSS length) */
3
+ maxHeight?: string;
4
+ class?: string | (() => string);
5
+ children?: unknown;
6
+ };
7
+ /** Scrollable region with refined scrollbars. */
8
+ export declare const ScrollArea: import("@lab206/dom").Component<{
9
+ maxHeight?: string;
10
+ class?: string | (() => string);
11
+ children?: unknown;
12
+ }>;
13
+ //# sourceMappingURL=ScrollArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollArea.d.ts","sourceRoot":"","sources":["../../src/components/ScrollArea.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AA4BF,iDAAiD;AACjD,eAAO,MAAM,UAAU;gBAhCT,MAAM;YACV,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;eACpB,OAAO;EAiDlB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "@lab206/dom/jsx-runtime";
2
+ import { component } from "@lab206/dom";
3
+ import { cx } from "../utils.js";
4
+ import { createStyleSheet } from "../styles.js";
5
+ const ensure = createStyleSheet("scroll-area", `
6
+ .pu-scroll {
7
+ overflow: auto;
8
+ overscroll-behavior: contain;
9
+ scrollbar-gutter: stable;
10
+ border-radius: var(--pu-radius-md);
11
+ }
12
+ .pu-scroll::-webkit-scrollbar {
13
+ width: 8px;
14
+ height: 8px;
15
+ }
16
+ .pu-scroll::-webkit-scrollbar-thumb {
17
+ background: color-mix(in srgb, var(--pu-color-text-muted) 35%, transparent);
18
+ border-radius: 999px;
19
+ }
20
+ .pu-scroll::-webkit-scrollbar-thumb:hover {
21
+ background: color-mix(in srgb, var(--pu-color-text-muted) 55%, transparent);
22
+ }
23
+ .pu-scroll::-webkit-scrollbar-track {
24
+ background: transparent;
25
+ }
26
+ `);
27
+ /** Scrollable region with refined scrollbars. */
28
+ export const ScrollArea = component((raw) => {
29
+ ensure();
30
+ const props = raw;
31
+ return (_jsx("div", { class: () => cx("pu-scroll", typeof props.class === "function" ? props.class() : props.class), style: () => props.maxHeight ? { maxHeight: props.maxHeight } : undefined, ref: (el) => ensure(el.ownerDocument), children: props.children }));
32
+ });
33
+ //# sourceMappingURL=ScrollArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollArea.js","sourceRoot":"","sources":["../../src/components/ScrollArea.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAShD,MAAM,MAAM,GAAG,gBAAgB,CAC7B,aAAa,EACb;;;;;;;;;;;;;;;;;;;;;CAqBD,CACA,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,GAAoB,EAAE,EAAE;IAC3D,MAAM,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,GAAsC,CAAC;IACrD,OAAO,CACL,cACE,KAAK,EAAE,GAAG,EAAE,CACV,EAAE,CACA,WAAW,EACX,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAChE,EAEH,KAAK,EAAE,GAAG,EAAE,CACV,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,EAE9D,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,YAEpC,KAAK,CAAC,QAAiB,GACpB,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type Signal } from "@lab206/core";
2
+ import { type MaybeReactive } from "../reactive.js";
3
+ import type { Bindable } from "../form.js";
4
+ export type SelectOption = {
5
+ value: string;
6
+ label: string;
7
+ disabled?: boolean;
8
+ };
9
+ export type SelectProps = {
10
+ value?: MaybeReactive<string>;
11
+ /** Two-way bind a string signal — preferred over value + onChange. */
12
+ bind?: Bindable<string> | Signal<string>;
13
+ options: MaybeReactive<SelectOption[]>;
14
+ /** Shown as a disabled first option when value is empty (optional). */
15
+ placeholder?: string;
16
+ disabled?: MaybeReactive<boolean>;
17
+ class?: MaybeReactive<string>;
18
+ onChange?: (e: Event) => void;
19
+ id?: string;
20
+ "aria-label"?: string;
21
+ };
22
+ /** Native select. Prefer `<Select bind={status} options={…} />`. */
23
+ export declare const Select: import("@lab206/dom").Component<{
24
+ value?: MaybeReactive<string>;
25
+ bind?: Bindable<string>;
26
+ options: MaybeReactive<SelectOption[]>;
27
+ placeholder?: string;
28
+ disabled?: MaybeReactive<boolean>;
29
+ class?: MaybeReactive<string>;
30
+ onChange?: (e: Event) => void;
31
+ id?: string;
32
+ "aria-label"?: string;
33
+ }>;
34
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/components/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,sEAAsE;IACtE,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;IACvC,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwCF,oEAAoE;AACpE,eAAO,MAAM,MAAM;YApDT,aAAa,CAAC,MAAM,CAAC;;aAGpB,aAAa,CAAC,YAAY,EAAE,CAAC;kBAExB,MAAM;eACT,aAAa,CAAC,OAAO,CAAC;YACzB,aAAa,CAAC,MAAM,CAAC;eAClB,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI;SACxB,MAAM;mBACI,MAAM;EA4GrB,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { effect } from "@lab206/core";
2
+ import { component, mergeProps } from "@lab206/dom";
3
+ import { cx } from "../utils.js";
4
+ import { readBool, readProp } from "../reactive.js";
5
+ const styles = `
6
+ .pu-select {
7
+ width: 100%;
8
+ height: var(--pu-control-h-md);
9
+ padding: 0 calc(var(--pu-control-px) + 1rem) 0 var(--pu-control-px);
10
+ border-radius: var(--pu-radius-md);
11
+ border: 1px solid var(--pu-color-control-border, var(--pu-color-border));
12
+ background-color: var(--pu-color-surface);
13
+ color: var(--pu-color-text);
14
+ appearance: none;
15
+ background-image: linear-gradient(45deg, transparent 50%, var(--pu-color-text-muted) 50%),
16
+ linear-gradient(135deg, var(--pu-color-text-muted) 50%, transparent 50%);
17
+ background-position: calc(100% - 14px) calc(50% - 3px), calc(100% - 9px) calc(50% - 3px);
18
+ background-size: 5px 5px, 5px 5px;
19
+ background-repeat: no-repeat;
20
+ transition: border-color var(--pu-duration) var(--pu-ease), box-shadow var(--pu-duration) var(--pu-ease);
21
+ }
22
+ .pu-select:hover:not(:disabled) {
23
+ border-color: color-mix(in srgb, var(--pu-color-border) 60%, var(--pu-color-text-muted));
24
+ }
25
+ .pu-select:focus {
26
+ outline: none;
27
+ border-color: color-mix(in srgb, var(--pu-color-focus) 55%, var(--pu-color-border));
28
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--pu-color-focus) 18%, transparent);
29
+ }
30
+ .pu-select:disabled { opacity: 0.55; cursor: not-allowed; }
31
+ `;
32
+ let injected = false;
33
+ function ensureStyles() {
34
+ if (injected || typeof document === "undefined")
35
+ return;
36
+ injected = true;
37
+ const el = document.createElement("style");
38
+ el.setAttribute("data-pu-ui", "select");
39
+ el.textContent = styles;
40
+ document.head.appendChild(el);
41
+ }
42
+ /** Native select. Prefer `<Select bind={status} options={…} />`. */
43
+ export const Select = component((raw) => {
44
+ ensureStyles();
45
+ const props = mergeProps({}, raw);
46
+ const bound = raw.bind;
47
+ const selectEl = document.createElement("select");
48
+ if (props.id)
49
+ selectEl.id = props.id;
50
+ if (props["aria-label"])
51
+ selectEl.setAttribute("aria-label", props["aria-label"]);
52
+ selectEl.addEventListener("change", (e) => {
53
+ if (bound) {
54
+ const t = (e.currentTarget ?? e.target);
55
+ if (t && "value" in t)
56
+ bound.set(t.value);
57
+ }
58
+ props.onChange?.(e);
59
+ });
60
+ effect(() => {
61
+ // mergeProps unwraps accessors on read; readProp stays defensive.
62
+ selectEl.className = cx("pu-select", readProp(props.class));
63
+ selectEl.disabled = readBool(props.disabled);
64
+ const opts = readProp(props.options) ?? [];
65
+ const current = bound
66
+ ? readProp(bound)
67
+ : readProp(props.value);
68
+ const prev = selectEl.value;
69
+ const placeholder = raw.placeholder;
70
+ selectEl.innerHTML = "";
71
+ const values = new Set();
72
+ if (placeholder) {
73
+ const ph = document.createElement("option");
74
+ ph.value = "";
75
+ ph.textContent = placeholder;
76
+ ph.disabled = true;
77
+ // Keep selectable only when nothing chosen yet so the label can show
78
+ ph.hidden = !!(current && current !== "");
79
+ selectEl.appendChild(ph);
80
+ values.add("");
81
+ }
82
+ for (const opt of opts) {
83
+ const o = document.createElement("option");
84
+ o.value = opt.value;
85
+ o.textContent = opt.label;
86
+ if (opt.disabled)
87
+ o.disabled = true;
88
+ selectEl.appendChild(o);
89
+ values.add(opt.value);
90
+ }
91
+ // Prefer controlled value when it exists in the list; else keep prev; else first option.
92
+ // Avoid browser “blank select” when options shrink (reactive project/client filters).
93
+ let next = "";
94
+ if (current !== undefined && values.has(current)) {
95
+ next = current;
96
+ }
97
+ else if (prev && values.has(prev)) {
98
+ next = prev;
99
+ }
100
+ else if (opts[0]) {
101
+ next = opts[0].value;
102
+ }
103
+ if (selectEl.value !== next)
104
+ selectEl.value = next;
105
+ });
106
+ return selectEl;
107
+ });
108
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../src/components/Select.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type SkeletonProps = {
2
+ /** Visual shape */
3
+ variant?: "text" | "rect" | "circle";
4
+ width?: string;
5
+ height?: string;
6
+ /** Number of text lines when variant is text */
7
+ lines?: number;
8
+ class?: string | (() => string);
9
+ };
10
+ /** Loading placeholder with soft shimmer. */
11
+ export declare const Skeleton: import("@lab206/dom").Component<{
12
+ variant?: "text" | "rect" | "circle";
13
+ width?: string;
14
+ height?: string;
15
+ lines?: number;
16
+ class?: string | (() => string);
17
+ }>;
18
+ //# sourceMappingURL=Skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../src/components/Skeleton.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACjC,CAAC;AA2DF,6CAA6C;AAC7C,eAAO,MAAM,QAAQ;cAlET,MAAM,GAAG,MAAM,GAAG,QAAQ;YAC5B,MAAM;aACL,MAAM;YAEP,MAAM;YACN,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;EA0G/B,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx } from "@lab206/dom/jsx-runtime";
2
+ import { component, mergeProps } from "@lab206/dom";
3
+ import { cx } from "../utils.js";
4
+ const styles = `
5
+ .pu-skeleton {
6
+ display: block;
7
+ background: linear-gradient(
8
+ 90deg,
9
+ var(--pu-color-surface-2) 0%,
10
+ color-mix(in srgb, var(--pu-color-surface-2) 55%, var(--pu-color-surface)) 50%,
11
+ var(--pu-color-surface-2) 100%
12
+ );
13
+ background-size: 200% 100%;
14
+ animation: pu-skeleton-shimmer 1.4s ease-in-out infinite;
15
+ border-radius: var(--pu-radius-sm);
16
+ }
17
+ .pu-skeleton--text {
18
+ height: 0.75rem;
19
+ width: 100%;
20
+ margin-bottom: 0.45rem;
21
+ border-radius: 4px;
22
+ }
23
+ .pu-skeleton--text:last-child {
24
+ width: 72%;
25
+ margin-bottom: 0;
26
+ }
27
+ .pu-skeleton--rect {
28
+ width: 100%;
29
+ height: 6rem;
30
+ border-radius: var(--pu-radius-md);
31
+ }
32
+ .pu-skeleton--circle {
33
+ width: 2.5rem;
34
+ height: 2.5rem;
35
+ border-radius: 50%;
36
+ }
37
+ .pu-skeleton-stack {
38
+ display: flex;
39
+ flex-direction: column;
40
+ width: 100%;
41
+ }
42
+ @keyframes pu-skeleton-shimmer {
43
+ 0% { background-position: 100% 0; }
44
+ 100% { background-position: -100% 0; }
45
+ }
46
+ @media (prefers-reduced-motion: reduce) {
47
+ .pu-skeleton { animation: none; }
48
+ }
49
+ `;
50
+ let injected = false;
51
+ function ensureStyles() {
52
+ if (injected || typeof document === "undefined")
53
+ return;
54
+ injected = true;
55
+ const el = document.createElement("style");
56
+ el.setAttribute("data-pu-ui", "skeleton");
57
+ el.textContent = styles;
58
+ document.head.appendChild(el);
59
+ }
60
+ /** Loading placeholder with soft shimmer. */
61
+ export const Skeleton = component((raw) => {
62
+ ensureStyles();
63
+ const props = mergeProps({ variant: "text", lines: 1 }, raw);
64
+ const style = () => {
65
+ const s = {};
66
+ if (props.width)
67
+ s.width = props.width;
68
+ if (props.height)
69
+ s.height = props.height;
70
+ return s;
71
+ };
72
+ if (props.variant === "text" && props.lines > 1) {
73
+ const n = Math.max(1, Math.min(12, props.lines));
74
+ const host = document.createElement("div");
75
+ host.className = cx("pu-skeleton-stack", typeof props.class === "function" ? props.class() : props.class);
76
+ host.setAttribute("aria-hidden", "true");
77
+ for (let i = 0; i < n; i++) {
78
+ const line = document.createElement("span");
79
+ line.className = "pu-skeleton pu-skeleton--text";
80
+ host.appendChild(line);
81
+ }
82
+ return host;
83
+ }
84
+ return (_jsx("span", { class: () => cx("pu-skeleton", `pu-skeleton--${props.variant}`, typeof props.class === "function" ? props.class() : props.class), style: style, "aria-hidden": "true" }));
85
+ });
86
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.js","sourceRoot":"","sources":["../../src/components/Skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAYjC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Cd,CAAC;AAEF,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAS,YAAY;IACnB,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IACxD,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1C,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAkB,EAAE,EAAE;IACvD,YAAY,EAAE,CAAC;IACf,MAAM,KAAK,GAAG,UAAU,CACtB,EAAE,OAAO,EAAE,MAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EACtC,GAAG,CAGJ,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,CAAC,GAA2B,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,KAAK;YAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,EAAE,CACjB,mBAAmB,EACnB,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAChE,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,GAAG,+BAA+B,CAAC;YACjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eACE,KAAK,EAAE,GAAG,EAAE,CACV,EAAE,CACA,aAAa,EACb,gBAAgB,KAAK,CAAC,OAAO,EAAE,EAC/B,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAChE,EAEH,KAAK,EAAE,KAAK,iBACA,MAAM,GAClB,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ export type SliderProps = {
2
+ value?: number | (() => number);
3
+ min?: number;
4
+ max?: number;
5
+ step?: number;
6
+ disabled?: boolean | (() => boolean);
7
+ onChange?: (value: number) => void;
8
+ label?: string;
9
+ showValue?: boolean;
10
+ class?: string | (() => string);
11
+ id?: string;
12
+ };
13
+ /** Range slider with fill track. */
14
+ export declare const Slider: import("@lab206/dom").Component<{
15
+ value?: number | (() => number);
16
+ min?: number;
17
+ max?: number;
18
+ step?: number;
19
+ disabled?: boolean | (() => boolean);
20
+ onChange?: (value: number) => void;
21
+ label?: string;
22
+ showValue?: boolean;
23
+ class?: string | (() => string);
24
+ id?: string;
25
+ }>;
26
+ //# sourceMappingURL=Slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../src/components/Slider.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AA8FF,oCAAoC;AACpC,eAAO,MAAM,MAAM;YAzGT,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;UACzB,MAAM;UACN,MAAM;WACL,MAAM;eACF,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC;eACzB,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;YAC1B,MAAM;gBACF,OAAO;YACX,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;SAC1B,MAAM;EAgKX,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@lab206/dom/jsx-runtime";
2
+ import { component, mergeProps } from "@lab206/dom";
3
+ import { cx } from "../utils.js";
4
+ import { createStyleSheet } from "../styles.js";
5
+ const ensure = createStyleSheet("slider", `
6
+ .pu-slider {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 0.4rem;
10
+ width: 100%;
11
+ min-width: 8rem;
12
+ }
13
+ .pu-slider__head {
14
+ display: flex;
15
+ justify-content: space-between;
16
+ align-items: baseline;
17
+ gap: 0.5rem;
18
+ font-size: var(--pu-text-sm);
19
+ }
20
+ .pu-slider__label {
21
+ color: var(--pu-color-text);
22
+ font-weight: var(--pu-font-medium);
23
+ }
24
+ .pu-slider__value {
25
+ color: var(--pu-color-text-muted);
26
+ font-variant-numeric: tabular-nums;
27
+ font-family: var(--pu-font-mono);
28
+ font-size: var(--pu-text-xs);
29
+ }
30
+ .pu-slider__track {
31
+ -webkit-appearance: none;
32
+ appearance: none;
33
+ width: 100%;
34
+ height: 0.4rem;
35
+ border-radius: var(--pu-radius-full);
36
+ background: linear-gradient(
37
+ to right,
38
+ var(--pu-color-accent) 0%,
39
+ var(--pu-color-accent) var(--pu-slider-pct, 0%),
40
+ var(--pu-color-surface-sunken) var(--pu-slider-pct, 0%),
41
+ var(--pu-color-surface-sunken) 100%
42
+ );
43
+ border: 1px solid var(--pu-color-control-border, var(--pu-color-border));
44
+ outline: none;
45
+ cursor: pointer;
46
+ }
47
+ .pu-slider__track:disabled {
48
+ opacity: 0.5;
49
+ cursor: not-allowed;
50
+ }
51
+ .pu-slider__track:focus-visible {
52
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--pu-color-focus) 22%, transparent);
53
+ }
54
+ .pu-slider__track::-webkit-slider-thumb {
55
+ -webkit-appearance: none;
56
+ appearance: none;
57
+ width: 1.1rem;
58
+ height: 1.1rem;
59
+ border-radius: 50%;
60
+ background: var(--pu-color-accent);
61
+ border: 2px solid var(--pu-color-accent-fg);
62
+ box-shadow: var(--pu-shadow-sm);
63
+ cursor: pointer;
64
+ transition: transform var(--pu-duration-fast) var(--pu-ease-out);
65
+ }
66
+ .pu-slider__track:hover:not(:disabled)::-webkit-slider-thumb {
67
+ transform: scale(1.08);
68
+ }
69
+ .pu-slider__track:focus-visible::-webkit-slider-thumb {
70
+ box-shadow:
71
+ var(--pu-shadow-sm),
72
+ 0 0 0 3px color-mix(in srgb, var(--pu-color-focus) 40%, transparent);
73
+ }
74
+ .pu-slider__track::-moz-range-thumb {
75
+ width: 1.1rem;
76
+ height: 1.1rem;
77
+ border-radius: 50%;
78
+ background: var(--pu-color-accent);
79
+ border: 2px solid var(--pu-color-accent-fg);
80
+ box-shadow: var(--pu-shadow-sm);
81
+ cursor: pointer;
82
+ }
83
+ .pu-slider__track:focus-visible::-moz-range-thumb {
84
+ box-shadow:
85
+ var(--pu-shadow-sm),
86
+ 0 0 0 3px color-mix(in srgb, var(--pu-color-focus) 40%, transparent);
87
+ }
88
+ @media (prefers-reduced-motion: reduce) {
89
+ .pu-slider__track::-webkit-slider-thumb { transition: none; }
90
+ .pu-slider__track:hover:not(:disabled)::-webkit-slider-thumb { transform: none; }
91
+ }
92
+ `);
93
+ /** Range slider with fill track. */
94
+ export const Slider = component((raw) => {
95
+ ensure();
96
+ const props = mergeProps({ min: 0, max: 100, step: 1, showValue: true }, raw);
97
+ const id = props.id ?? `pu-slider-${Math.random().toString(36).slice(2, 9)}`;
98
+ const val = () => {
99
+ const v = typeof props.value === "function"
100
+ ? props.value()
101
+ : (props.value ?? props.min);
102
+ return Math.min(props.max, Math.max(props.min, Number(v)));
103
+ };
104
+ const isDisabled = () => !!(typeof props.disabled === "function" ? props.disabled() : props.disabled);
105
+ const pct = () => {
106
+ const span = props.max - props.min || 1;
107
+ return ((val() - props.min) / span) * 100;
108
+ };
109
+ return (_jsxs("div", { class: () => cx("pu-slider", typeof props.class === "function" ? props.class() : props.class), ref: (el) => ensure(el.ownerDocument), children: [(props.label || props.showValue) && (_jsxs("div", { class: "pu-slider__head", children: [props.label ? (_jsx("label", { class: "pu-slider__label", for: id, children: props.label })) : (_jsx("span", {})), props.showValue ? (_jsx("span", { class: "pu-slider__value", children: () => String(val()) })) : null] })), _jsx("input", { id: id, class: "pu-slider__track", type: "range", min: props.min, max: props.max, step: props.step, value: val, disabled: isDisabled, style: () => ({ "--pu-slider-pct": `${pct()}%` }), onInput: (e) => {
110
+ props.onChange?.(Number(e.target.value));
111
+ } })] }));
112
+ });
113
+ //# sourceMappingURL=Slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../src/components/Slider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type SpinnerSize = "sm" | "md" | "lg";
2
+ export type SpinnerProps = {
3
+ size?: SpinnerSize;
4
+ label?: string;
5
+ class?: string | (() => string);
6
+ };
7
+ export declare const Spinner: import("@lab206/dom").Component<{
8
+ size?: SpinnerSize;
9
+ label?: string;
10
+ class?: string | (() => string);
11
+ }>;
12
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../src/components/Spinner.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACjC,CAAC;AAsCF,eAAO,MAAM,OAAO;WAzCX,WAAW;YACV,MAAM;YACN,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;EA6D/B,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@lab206/dom/jsx-runtime";
2
+ import { component, mergeProps } from "@lab206/dom";
3
+ import { cx } from "../utils.js";
4
+ const styles = `
5
+ .pu-spinner {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ gap: var(--pu-space-2);
9
+ color: var(--pu-color-accent);
10
+ font-size: var(--pu-text-sm);
11
+ }
12
+ .pu-spinner__disk {
13
+ border-radius: 50%;
14
+ border-style: solid;
15
+ border-color: color-mix(in srgb, currentColor 25%, transparent);
16
+ border-top-color: currentColor;
17
+ animation: pu-spin 0.7s linear infinite;
18
+ }
19
+ .pu-spinner--sm .pu-spinner__disk { width: 1rem; height: 1rem; border-width: 2px; }
20
+ .pu-spinner--md .pu-spinner__disk { width: 1.35rem; height: 1.35rem; border-width: 2.5px; }
21
+ .pu-spinner--lg .pu-spinner__disk { width: 1.75rem; height: 1.75rem; border-width: 3px; }
22
+ @keyframes pu-spin {
23
+ to { transform: rotate(360deg); }
24
+ }
25
+ @media (prefers-reduced-motion: reduce) {
26
+ .pu-spinner__disk { animation: none; border-top-color: currentColor; opacity: 0.7; }
27
+ }
28
+ `;
29
+ let injected = false;
30
+ function ensureStyles() {
31
+ if (injected || typeof document === "undefined")
32
+ return;
33
+ injected = true;
34
+ const el = document.createElement("style");
35
+ el.setAttribute("data-pu-ui", "spinner");
36
+ el.textContent = styles;
37
+ document.head.appendChild(el);
38
+ }
39
+ export const Spinner = component((raw) => {
40
+ ensureStyles();
41
+ const props = mergeProps({ size: "md", label: "Loading" }, raw);
42
+ return (_jsxs("span", { class: () => cx("pu-spinner", `pu-spinner--${props.size}`, typeof props.class === "function" ? props.class() : props.class), role: "status", children: [_jsx("span", { class: "pu-spinner__disk", "aria-hidden": "true" }), _jsx("span", { class: "pu-sr-only", children: props.label })] }));
43
+ });
44
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../src/components/Spinner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBd,CAAC;AAEF,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAS,YAAY;IACnB,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IACxD,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACzC,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,GAAiB,EAAE,EAAE;IACrD,YAAY,EAAE,CAAC;IACf,MAAM,KAAK,GAAG,UAAU,CACtB,EAAE,IAAI,EAAE,IAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,EAC/C,GAAG,CACmE,CAAC;IAEzE,OAAO,CACL,gBACE,KAAK,EAAE,GAAG,EAAE,CACV,EAAE,CACA,YAAY,EACZ,eAAe,KAAK,CAAC,IAAI,EAAE,EAC3B,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAChE,EAEH,IAAI,EAAC,QAAQ,aAEb,eAAM,KAAK,EAAC,kBAAkB,iBAAa,MAAM,GAAG,EACpD,eAAM,KAAK,EAAC,YAAY,YAAE,KAAK,CAAC,KAAK,GAAQ,IACxC,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type StackProps = {
2
+ /** flex direction */
3
+ direction?: "row" | "column";
4
+ gap?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8;
5
+ align?: "start" | "center" | "end" | "stretch";
6
+ justify?: "start" | "center" | "end" | "between";
7
+ wrap?: boolean;
8
+ class?: string | (() => string);
9
+ children?: unknown;
10
+ };
11
+ /** Layout primitive — row/column with tokenized gap. */
12
+ export declare const Stack: import("@lab206/dom").Component<{
13
+ direction?: "row" | "column";
14
+ gap?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8;
15
+ align?: "start" | "center" | "end" | "stretch";
16
+ justify?: "start" | "center" | "end" | "between";
17
+ wrap?: boolean;
18
+ class?: string | (() => string);
19
+ children?: unknown;
20
+ }>;
21
+ //# sourceMappingURL=Stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG;IACvB,qBAAqB;IACrB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAmCF,wDAAwD;AACxD,eAAO,MAAM,KAAK;gBA3CJ,KAAK,GAAG,QAAQ;UACtB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAC3B,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS;cACpC,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS;WACzC,OAAO;YACN,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC;eACpB,OAAO;EAmElB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx } from "@lab206/dom/jsx-runtime";
2
+ import { component, mergeProps } from "@lab206/dom";
3
+ import { cx } from "../utils.js";
4
+ const styles = `
5
+ .pu-stack { display: flex; min-width: 0; }
6
+ .pu-stack--row { flex-direction: row; }
7
+ .pu-stack--column { flex-direction: column; }
8
+ .pu-stack--wrap { flex-wrap: wrap; }
9
+ .pu-stack--gap-0 { gap: var(--pu-space-0); }
10
+ .pu-stack--gap-1 { gap: var(--pu-space-1); }
11
+ .pu-stack--gap-2 { gap: var(--pu-space-2); }
12
+ .pu-stack--gap-3 { gap: var(--pu-space-3); }
13
+ .pu-stack--gap-4 { gap: var(--pu-space-4); }
14
+ .pu-stack--gap-5 { gap: var(--pu-space-5); }
15
+ .pu-stack--gap-6 { gap: var(--pu-space-6); }
16
+ .pu-stack--gap-8 { gap: var(--pu-space-8); }
17
+ .pu-stack--align-start { align-items: flex-start; }
18
+ .pu-stack--align-center { align-items: center; }
19
+ .pu-stack--align-end { align-items: flex-end; }
20
+ .pu-stack--align-stretch { align-items: stretch; }
21
+ .pu-stack--justify-start { justify-content: flex-start; }
22
+ .pu-stack--justify-center { justify-content: center; }
23
+ .pu-stack--justify-end { justify-content: flex-end; }
24
+ .pu-stack--justify-between { justify-content: space-between; }
25
+ `;
26
+ let injected = false;
27
+ function ensureStyles() {
28
+ if (injected || typeof document === "undefined")
29
+ return;
30
+ injected = true;
31
+ const el = document.createElement("style");
32
+ el.setAttribute("data-pu-ui", "stack");
33
+ el.textContent = styles;
34
+ document.head.appendChild(el);
35
+ }
36
+ /** Layout primitive — row/column with tokenized gap. */
37
+ export const Stack = component((raw) => {
38
+ ensureStyles();
39
+ const props = mergeProps({
40
+ direction: "column",
41
+ gap: 3,
42
+ align: "stretch",
43
+ justify: "start",
44
+ wrap: false,
45
+ }, raw);
46
+ return (_jsx("div", { class: () => cx("pu-stack", `pu-stack--${props.direction}`, `pu-stack--gap-${props.gap}`, `pu-stack--align-${props.align}`, `pu-stack--justify-${props.justify}`, props.wrap && "pu-stack--wrap", typeof props.class === "function" ? props.class() : props.class), children: props.children }));
47
+ });
48
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/components/Stack.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAajC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBd,CAAC;AAEF,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,SAAS,YAAY;IACnB,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IACxD,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvC,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,GAAe,EAAE,EAAE;IACjD,YAAY,EAAE,CAAC;IACf,MAAM,KAAK,GAAG,UAAU,CACtB;QACE,SAAS,EAAE,QAAiB;QAC5B,GAAG,EAAE,CAAU;QACf,KAAK,EAAE,SAAkB;QACzB,OAAO,EAAE,OAAgB;QACzB,IAAI,EAAE,KAAK;KACZ,EACD,GAAG,CACoC,CAAC;IAE1C,OAAO,CACL,cACE,KAAK,EAAE,GAAG,EAAE,CACV,EAAE,CACA,UAAU,EACV,aAAa,KAAK,CAAC,SAAS,EAAE,EAC9B,iBAAiB,KAAK,CAAC,GAAG,EAAE,EAC5B,mBAAmB,KAAK,CAAC,KAAK,EAAE,EAChC,qBAAqB,KAAK,CAAC,OAAO,EAAE,EACpC,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAC9B,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAChE,YAGF,KAAK,CAAC,QAAiB,GACpB,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}