@lt-three/love3 0.0.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.md +85 -1
  2. package/dist/native/analytics/animation.d.ts +4 -0
  3. package/dist/native/analytics/animation.js +6 -0
  4. package/dist/native/analytics/chart.types.d.ts +25 -0
  5. package/dist/native/analytics/chart.types.js +0 -0
  6. package/dist/native/analytics/line-chart.d.ts +4 -0
  7. package/dist/native/analytics/line-chart.ios.d.ts +4 -0
  8. package/dist/native/analytics/line-chart.ios.js +24 -0
  9. package/dist/native/analytics/line-chart.js +33 -0
  10. package/dist/native/analytics/metric-card.d.ts +10 -0
  11. package/dist/native/analytics/metric-card.js +29 -0
  12. package/dist/native/analytics/multi-line-chart.d.ts +18 -0
  13. package/dist/native/analytics/multi-line-chart.js +216 -0
  14. package/dist/native/analytics/pie-chart.d.ts +15 -0
  15. package/dist/native/analytics/pie-chart.ios.d.ts +4 -0
  16. package/dist/native/analytics/pie-chart.ios.js +24 -0
  17. package/dist/native/analytics/pie-chart.js +92 -0
  18. package/dist/native/analytics/single-number.d.ts +19 -0
  19. package/dist/native/analytics/single-number.js +101 -0
  20. package/dist/native/atom/avatar.d.ts +21 -0
  21. package/dist/native/atom/avatar.js +46 -0
  22. package/dist/native/atom/badge.d.ts +28 -0
  23. package/dist/native/atom/badge.js +51 -0
  24. package/dist/native/atom/button.d.ts +46 -0
  25. package/dist/native/atom/button.js +109 -0
  26. package/dist/native/atom/checkbox.d.ts +21 -0
  27. package/dist/native/atom/checkbox.js +47 -0
  28. package/dist/native/atom/colored-value.d.ts +12 -0
  29. package/dist/native/atom/colored-value.js +24 -0
  30. package/dist/native/atom/image.d.ts +21 -0
  31. package/dist/native/atom/image.js +72 -0
  32. package/dist/native/atom/label.d.ts +18 -0
  33. package/dist/native/atom/label.js +33 -0
  34. package/dist/native/atom/link.d.ts +18 -0
  35. package/dist/native/atom/link.js +25 -0
  36. package/dist/native/atom/readout.d.ts +22 -0
  37. package/dist/native/atom/readout.js +39 -0
  38. package/dist/native/atom/search-input.d.ts +12 -0
  39. package/dist/native/atom/search-input.js +36 -0
  40. package/dist/native/atom/select.d.ts +54 -0
  41. package/dist/native/atom/select.js +200 -0
  42. package/dist/native/atom/separator.d.ts +12 -0
  43. package/dist/native/atom/separator.js +16 -0
  44. package/dist/native/atom/skeleton.d.ts +12 -0
  45. package/dist/native/atom/skeleton.js +39 -0
  46. package/dist/native/atom/slider.d.ts +32 -0
  47. package/dist/native/atom/slider.js +75 -0
  48. package/dist/native/atom/spinner.d.ts +15 -0
  49. package/dist/native/atom/spinner.js +25 -0
  50. package/dist/native/atom/switch.d.ts +18 -0
  51. package/dist/native/atom/switch.js +52 -0
  52. package/dist/native/atom/symbol.d.ts +16 -0
  53. package/dist/native/atom/symbol.js +38 -0
  54. package/dist/native/atom/symbol.types.d.ts +25 -0
  55. package/dist/native/atom/symbol.types.js +49 -0
  56. package/dist/native/atom/text-field.d.ts +49 -0
  57. package/dist/native/atom/text-field.js +56 -0
  58. package/dist/native/atom/text.d.ts +2 -0
  59. package/dist/native/atom/text.js +3 -0
  60. package/dist/native/atom/theme-toggle.d.ts +21 -0
  61. package/dist/native/atom/theme-toggle.js +36 -0
  62. package/dist/native/atom/timezone-select.d.ts +16 -0
  63. package/dist/native/atom/timezone-select.js +28 -0
  64. package/dist/native/atom/typography.d.ts +13 -0
  65. package/dist/native/atom/typography.js +28 -0
  66. package/dist/native/base/button.d.ts +61 -0
  67. package/dist/native/base/button.js +92 -0
  68. package/dist/native/base/form.d.ts +72 -0
  69. package/dist/native/base/form.js +113 -0
  70. package/dist/native/base/glass-card.d.ts +15 -0
  71. package/dist/native/base/glass-card.js +38 -0
  72. package/dist/native/base/input.d.ts +29 -0
  73. package/dist/native/base/input.js +27 -0
  74. package/dist/native/base/sheet.d.ts +71 -0
  75. package/dist/native/base/sheet.js +187 -0
  76. package/dist/native/base/text.d.ts +14 -0
  77. package/dist/native/base/text.js +53 -0
  78. package/dist/native/form/checkbox.d.ts +13 -0
  79. package/dist/native/form/checkbox.js +55 -0
  80. package/dist/native/form/date-picker.d.ts +23 -0
  81. package/dist/native/form/date-picker.js +119 -0
  82. package/dist/native/form/form.d.ts +22 -0
  83. package/dist/native/form/form.js +44 -0
  84. package/dist/native/form/radio-group.d.ts +23 -0
  85. package/dist/native/form/radio-group.js +88 -0
  86. package/dist/native/form/select.d.ts +13 -0
  87. package/dist/native/form/select.js +45 -0
  88. package/dist/native/form/slider.d.ts +14 -0
  89. package/dist/native/form/slider.js +42 -0
  90. package/dist/native/form/switch.d.ts +9 -0
  91. package/dist/native/form/switch.js +59 -0
  92. package/dist/native/form/text-area.d.ts +11 -0
  93. package/dist/native/form/text-area.js +50 -0
  94. package/dist/native/form/text-input.d.ts +18 -0
  95. package/dist/native/form/text-input.js +90 -0
  96. package/dist/native/index.d.ts +1 -0
  97. package/dist/native/index.js +0 -0
  98. package/dist/native/layout/accordion.d.ts +25 -0
  99. package/dist/native/layout/accordion.js +54 -0
  100. package/dist/native/layout/card.d.ts +47 -0
  101. package/dist/native/layout/card.js +57 -0
  102. package/dist/native/layout/description.d.ts +16 -0
  103. package/dist/native/layout/description.js +32 -0
  104. package/dist/native/layout/error.d.ts +21 -0
  105. package/dist/native/layout/error.js +44 -0
  106. package/dist/native/layout/information.d.ts +25 -0
  107. package/dist/native/layout/information.js +35 -0
  108. package/dist/native/layout/locked.d.ts +38 -0
  109. package/dist/native/layout/locked.js +94 -0
  110. package/dist/native/layout/modal.d.ts +25 -0
  111. package/dist/native/layout/modal.js +93 -0
  112. package/dist/native/layout/not-found.d.ts +17 -0
  113. package/dist/native/layout/not-found.js +30 -0
  114. package/dist/native/layout/page-frame.d.ts +23 -0
  115. package/dist/native/layout/page-frame.js +46 -0
  116. package/dist/native/layout/panel.d.ts +18 -0
  117. package/dist/native/layout/panel.js +23 -0
  118. package/dist/native/layout/reorderable-list.d.ts +42 -0
  119. package/dist/native/layout/reorderable-list.js +52 -0
  120. package/dist/native/layout/sheet.d.ts +30 -0
  121. package/dist/native/layout/sheet.js +46 -0
  122. package/dist/native/layout/simple-dialog.d.ts +16 -0
  123. package/dist/native/layout/simple-dialog.js +20 -0
  124. package/dist/native/layout/simple-table.d.ts +50 -0
  125. package/dist/native/layout/simple-table.js +75 -0
  126. package/dist/native/layout/tab-bar.d.ts +33 -0
  127. package/dist/native/layout/tab-bar.js +48 -0
  128. package/dist/native/layout/tabs.d.ts +28 -0
  129. package/dist/native/layout/tabs.js +54 -0
  130. package/dist/native/layout/tuning-panel.d.ts +24 -0
  131. package/dist/native/layout/tuning-panel.js +246 -0
  132. package/dist/native/lib/autocomplete.d.ts +7 -0
  133. package/dist/native/lib/autocomplete.js +34 -0
  134. package/dist/native/lib/breakpoints.d.ts +14 -0
  135. package/dist/native/lib/breakpoints.js +17 -0
  136. package/dist/native/lib/chart-palette.d.ts +8 -0
  137. package/dist/native/lib/chart-palette.js +20 -0
  138. package/dist/native/lib/confirm.d.ts +48 -0
  139. package/dist/native/lib/confirm.js +69 -0
  140. package/dist/native/lib/control.d.ts +24 -0
  141. package/dist/native/lib/control.js +0 -0
  142. package/dist/native/lib/external-store.d.ts +16 -0
  143. package/dist/native/lib/external-store.js +30 -0
  144. package/dist/native/lib/keyboard.d.ts +15 -0
  145. package/dist/native/lib/keyboard.js +24 -0
  146. package/dist/native/lib/labels.d.ts +15 -0
  147. package/dist/native/lib/labels.js +17 -0
  148. package/dist/native/lib/loading.d.ts +10 -0
  149. package/dist/native/lib/loading.js +15 -0
  150. package/dist/native/lib/network.d.ts +11 -0
  151. package/dist/native/lib/network.js +20 -0
  152. package/dist/native/lib/scheme.d.ts +18 -0
  153. package/dist/native/lib/scheme.js +22 -0
  154. package/dist/native/lib/snackbar.d.ts +45 -0
  155. package/dist/native/lib/snackbar.js +59 -0
  156. package/dist/native/lib/theme.d.ts +34 -0
  157. package/dist/native/lib/theme.js +53 -0
  158. package/dist/native/lib/timezone.d.ts +26 -0
  159. package/dist/native/lib/timezone.js +95 -0
  160. package/dist/native/lib/token-color.d.ts +5 -0
  161. package/dist/native/lib/token-color.js +13 -0
  162. package/dist/native/lib/token-color.web.d.ts +4 -0
  163. package/dist/native/lib/token-color.web.js +7 -0
  164. package/dist/native/lib/tuning-context.d.ts +9 -0
  165. package/dist/native/lib/tuning-context.js +7 -0
  166. package/dist/native/lib/tuning.d.ts +24 -0
  167. package/dist/native/lib/tuning.js +42 -0
  168. package/dist/native/lib/typography.d.ts +10 -0
  169. package/dist/native/lib/typography.js +11 -0
  170. package/dist/native/lib/utils.d.ts +11 -0
  171. package/dist/native/lib/utils.js +21 -0
  172. package/dist/native/once/confirm.d.ts +7 -0
  173. package/dist/native/once/confirm.js +60 -0
  174. package/dist/native/once/error-boundary.d.ts +28 -0
  175. package/dist/native/once/error-boundary.js +55 -0
  176. package/dist/native/once/loading-lock.d.ts +8 -0
  177. package/dist/native/once/loading-lock.js +28 -0
  178. package/dist/native/once/offline-banner.d.ts +15 -0
  179. package/dist/native/once/offline-banner.js +35 -0
  180. package/dist/native/once/snackbar.d.ts +17 -0
  181. package/dist/native/once/snackbar.js +106 -0
  182. package/dist/native/styles.css +46 -0
  183. package/dist/shared/analytics.d.ts +71 -0
  184. package/dist/shared/analytics.js +0 -0
  185. package/dist/shared/button.d.ts +7 -0
  186. package/dist/shared/button.js +23 -0
  187. package/dist/shared/form.d.ts +45 -0
  188. package/dist/shared/form.js +46 -0
  189. package/dist/shared/index.d.ts +3 -0
  190. package/dist/shared/index.js +3 -0
  191. package/dist/tokens/contrast-pairs.d.ts +30 -0
  192. package/dist/tokens/contrast-pairs.js +404 -0
  193. package/dist/tokens/index.d.ts +6 -0
  194. package/dist/tokens/index.js +10 -0
  195. package/dist/tokens/styles.gen.css +250 -0
  196. package/dist/tokens/tokens.gen.d.ts +141 -0
  197. package/dist/tokens/tokens.gen.js +206 -0
  198. package/dist/tuning/catalog.d.ts +27 -0
  199. package/dist/tuning/catalog.gen.d.ts +4 -0
  200. package/dist/tuning/catalog.gen.js +397 -0
  201. package/dist/tuning/catalog.js +128 -0
  202. package/dist/tuning/color.d.ts +20 -0
  203. package/dist/tuning/color.js +80 -0
  204. package/dist/tuning/css.d.ts +35 -0
  205. package/dist/tuning/css.js +147 -0
  206. package/dist/tuning/index.d.ts +8 -0
  207. package/dist/tuning/index.js +9 -0
  208. package/dist/tuning/model.d.ts +33 -0
  209. package/dist/tuning/model.js +154 -0
  210. package/dist/tuning/native.d.ts +35 -0
  211. package/dist/tuning/native.js +80 -0
  212. package/dist/tuning/schema.d.ts +69 -0
  213. package/dist/tuning/schema.js +247 -0
  214. package/dist/tuning/types.d.ts +75 -0
  215. package/dist/tuning/types.js +39 -0
  216. package/dist/web/analytics/line-chart.d.ts +20 -0
  217. package/dist/web/analytics/line-chart.js +28 -0
  218. package/dist/web/analytics/metric-card.d.ts +18 -0
  219. package/dist/web/analytics/metric-card.js +40 -0
  220. package/dist/web/analytics/multi-line-chart.d.ts +39 -0
  221. package/dist/web/analytics/multi-line-chart.js +345 -0
  222. package/dist/web/atom/avatar.d.ts +11 -0
  223. package/dist/web/atom/avatar.js +24 -0
  224. package/dist/web/atom/badge.d.ts +2 -0
  225. package/dist/web/atom/badge.js +3 -0
  226. package/dist/web/atom/button.d.ts +23 -0
  227. package/dist/web/atom/button.js +35 -0
  228. package/dist/web/atom/checkbox.d.ts +19 -0
  229. package/dist/web/atom/checkbox.js +33 -0
  230. package/dist/web/atom/colored-value.d.ts +13 -0
  231. package/dist/web/atom/colored-value.js +24 -0
  232. package/dist/web/atom/help.d.ts +10 -0
  233. package/dist/web/atom/help.js +18 -0
  234. package/dist/web/atom/label.d.ts +2 -0
  235. package/dist/web/atom/label.js +3 -0
  236. package/dist/web/atom/segmented-control.d.ts +39 -0
  237. package/dist/web/atom/segmented-control.js +42 -0
  238. package/dist/web/atom/select.d.ts +43 -0
  239. package/dist/web/atom/select.js +93 -0
  240. package/dist/web/atom/separator.d.ts +2 -0
  241. package/dist/web/atom/separator.js +3 -0
  242. package/dist/web/atom/skeleton.d.ts +2 -0
  243. package/dist/web/atom/skeleton.js +3 -0
  244. package/dist/web/atom/slider.d.ts +33 -0
  245. package/dist/web/atom/slider.js +70 -0
  246. package/dist/web/atom/spinner.d.ts +8 -0
  247. package/dist/web/atom/spinner.js +14 -0
  248. package/dist/web/atom/switch.d.ts +11 -0
  249. package/dist/web/atom/switch.js +10 -0
  250. package/dist/web/atom/text-area.d.ts +23 -0
  251. package/dist/web/atom/text-area.js +27 -0
  252. package/dist/web/atom/text-field.d.ts +18 -0
  253. package/dist/web/atom/text-field.js +22 -0
  254. package/dist/web/atom/toggle-chip.d.ts +22 -0
  255. package/dist/web/atom/toggle-chip.js +28 -0
  256. package/dist/web/atom/tooltip.d.ts +23 -0
  257. package/dist/web/atom/tooltip.js +26 -0
  258. package/dist/web/atom/typography.d.ts +6 -0
  259. package/dist/web/atom/typography.js +23 -0
  260. package/dist/web/base/accordion.d.ts +9 -0
  261. package/dist/web/base/accordion.js +44 -0
  262. package/dist/web/base/alert.d.ts +11 -0
  263. package/dist/web/base/alert.js +37 -0
  264. package/dist/web/base/avatar.d.ts +8 -0
  265. package/dist/web/base/avatar.js +29 -0
  266. package/dist/web/base/badge.d.ts +12 -0
  267. package/dist/web/base/badge.js +26 -0
  268. package/dist/web/base/breadcrumb.d.ts +16 -0
  269. package/dist/web/base/breadcrumb.js +72 -0
  270. package/dist/web/base/button.d.ts +12 -0
  271. package/dist/web/base/button.js +47 -0
  272. package/dist/web/base/card.d.ts +19 -0
  273. package/dist/web/base/card.js +74 -0
  274. package/dist/web/base/checkbox.d.ts +6 -0
  275. package/dist/web/base/checkbox.js +21 -0
  276. package/dist/web/base/dialog.d.ts +20 -0
  277. package/dist/web/base/dialog.js +92 -0
  278. package/dist/web/base/dropdown-menu.d.ts +29 -0
  279. package/dist/web/base/dropdown-menu.js +125 -0
  280. package/dist/web/base/field.d.ts +27 -0
  281. package/dist/web/base/field.js +118 -0
  282. package/dist/web/base/form.d.ts +38 -0
  283. package/dist/web/base/form.js +110 -0
  284. package/dist/web/base/input.d.ts +9 -0
  285. package/dist/web/base/input.js +23 -0
  286. package/dist/web/base/label.d.ts +6 -0
  287. package/dist/web/base/label.js +15 -0
  288. package/dist/web/base/pagination.d.ts +34 -0
  289. package/dist/web/base/pagination.js +90 -0
  290. package/dist/web/base/popover.d.ts +11 -0
  291. package/dist/web/base/popover.js +37 -0
  292. package/dist/web/base/radio-group.d.ts +7 -0
  293. package/dist/web/base/radio-group.js +27 -0
  294. package/dist/web/base/scroll-area.d.ts +10 -0
  295. package/dist/web/base/scroll-area.js +41 -0
  296. package/dist/web/base/select.d.ts +17 -0
  297. package/dist/web/base/select.js +96 -0
  298. package/dist/web/base/separator.d.ts +6 -0
  299. package/dist/web/base/separator.js +17 -0
  300. package/dist/web/base/sheet.d.ts +19 -0
  301. package/dist/web/base/sheet.js +88 -0
  302. package/dist/web/base/skeleton.d.ts +5 -0
  303. package/dist/web/base/skeleton.js +14 -0
  304. package/dist/web/base/slider.d.ts +9 -0
  305. package/dist/web/base/slider.js +39 -0
  306. package/dist/web/base/sonner.d.ts +9 -0
  307. package/dist/web/base/sonner.js +25 -0
  308. package/dist/web/base/spinner.d.ts +5 -0
  309. package/dist/web/base/spinner.js +17 -0
  310. package/dist/web/base/switch.d.ts +6 -0
  311. package/dist/web/base/switch.js +19 -0
  312. package/dist/web/base/table.d.ts +14 -0
  313. package/dist/web/base/table.js +68 -0
  314. package/dist/web/base/tabs.d.ts +9 -0
  315. package/dist/web/base/tabs.js +36 -0
  316. package/dist/web/base/textarea.d.ts +9 -0
  317. package/dist/web/base/textarea.js +23 -0
  318. package/dist/web/base/tooltip.d.ts +9 -0
  319. package/dist/web/base/tooltip.js +36 -0
  320. package/dist/web/form/checkbox.d.ts +35 -0
  321. package/dist/web/form/checkbox.js +91 -0
  322. package/dist/web/form/radio-group.d.ts +24 -0
  323. package/dist/web/form/radio-group.js +75 -0
  324. package/dist/web/form/select.d.ts +16 -0
  325. package/dist/web/form/select.js +44 -0
  326. package/dist/web/form/slider.d.ts +19 -0
  327. package/dist/web/form/slider.js +51 -0
  328. package/dist/web/form/switch.d.ts +11 -0
  329. package/dist/web/form/switch.js +50 -0
  330. package/dist/web/form/text-area.d.ts +10 -0
  331. package/dist/web/form/text-area.js +31 -0
  332. package/dist/web/form/text-input.d.ts +10 -0
  333. package/dist/web/form/text-input.js +42 -0
  334. package/dist/web/index.d.ts +1 -0
  335. package/dist/web/index.js +0 -0
  336. package/dist/web/layout/accordion.d.ts +26 -0
  337. package/dist/web/layout/accordion.js +29 -0
  338. package/dist/web/layout/alert-modal.d.ts +41 -0
  339. package/dist/web/layout/alert-modal.js +71 -0
  340. package/dist/web/layout/card.d.ts +17 -0
  341. package/dist/web/layout/card.js +35 -0
  342. package/dist/web/layout/description.d.ts +12 -0
  343. package/dist/web/layout/description.js +20 -0
  344. package/dist/web/layout/information.d.ts +36 -0
  345. package/dist/web/layout/information.js +53 -0
  346. package/dist/web/layout/modal.d.ts +16 -0
  347. package/dist/web/layout/modal.js +37 -0
  348. package/dist/web/layout/page-frame.d.ts +37 -0
  349. package/dist/web/layout/page-frame.js +79 -0
  350. package/dist/web/layout/scroll-area.d.ts +10 -0
  351. package/dist/web/layout/scroll-area.js +13 -0
  352. package/dist/web/layout/sheet.d.ts +32 -0
  353. package/dist/web/layout/sheet.js +68 -0
  354. package/dist/web/layout/simple-dialog.d.ts +11 -0
  355. package/dist/web/layout/simple-dialog.js +24 -0
  356. package/dist/web/layout/simple-table.d.ts +49 -0
  357. package/dist/web/layout/simple-table.js +58 -0
  358. package/dist/web/layout/tabs.d.ts +26 -0
  359. package/dist/web/layout/tabs.js +42 -0
  360. package/dist/web/layout/titled-modal.d.ts +32 -0
  361. package/dist/web/layout/titled-modal.js +58 -0
  362. package/dist/web/lib/css-vars.d.ts +14 -0
  363. package/dist/web/lib/css-vars.js +18 -0
  364. package/dist/web/lib/dialog.d.ts +13 -0
  365. package/dist/web/lib/dialog.js +0 -0
  366. package/dist/web/lib/form.d.ts +2 -0
  367. package/dist/web/lib/form.js +3 -0
  368. package/dist/web/lib/labels.d.ts +27 -0
  369. package/dist/web/lib/labels.js +29 -0
  370. package/dist/web/lib/modal-open-focus.d.ts +17 -0
  371. package/dist/web/lib/modal-open-focus.js +44 -0
  372. package/dist/web/lib/restore-focus.d.ts +12 -0
  373. package/dist/web/lib/restore-focus.js +32 -0
  374. package/dist/web/lib/utils.d.ts +4 -0
  375. package/dist/web/lib/utils.js +10 -0
  376. package/dist/web/styles.css +162 -0
  377. package/package.json +203 -4
@@ -0,0 +1,118 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { Label } from "./label.js";
3
+ import { Separator } from "./separator.js";
4
+ import { useMemo } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { cva } from "class-variance-authority";
7
+
8
+ //#region src/web/base/field.tsx
9
+ function FieldSet({ className, ...props }) {
10
+ return /* @__PURE__ */ jsx("fieldset", {
11
+ "data-slot": "field-set",
12
+ className: cn("flex flex-col gap-6", "has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className),
13
+ ...props
14
+ });
15
+ }
16
+ function FieldLegend({ className, variant = "legend", ...props }) {
17
+ return /* @__PURE__ */ jsx("legend", {
18
+ "data-slot": "field-legend",
19
+ "data-variant": variant,
20
+ className: cn("mb-3 font-medium", "data-[variant=legend]:text-base", "data-[variant=label]:text-sm", className),
21
+ ...props
22
+ });
23
+ }
24
+ function FieldGroup({ className, ...props }) {
25
+ return /* @__PURE__ */ jsx("div", {
26
+ "data-slot": "field-group",
27
+ className: cn("group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4", className),
28
+ ...props
29
+ });
30
+ }
31
+ const fieldVariants = cva("group/field flex w-full gap-3 data-[invalid=true]:text-destructive", {
32
+ variants: { orientation: {
33
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
34
+ horizontal: [
35
+ "flex-row items-center",
36
+ "[&>[data-slot=field-label]]:flex-auto",
37
+ "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
38
+ ],
39
+ responsive: [
40
+ "flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto",
41
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
42
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
43
+ ]
44
+ } },
45
+ defaultVariants: { orientation: "vertical" }
46
+ });
47
+ function Field({ className, orientation = "vertical", ...props }) {
48
+ return /* @__PURE__ */ jsx("div", {
49
+ "data-slot": "field",
50
+ "data-orientation": orientation,
51
+ className: cn(fieldVariants({ orientation }), className),
52
+ ...props
53
+ });
54
+ }
55
+ function FieldContent({ className, ...props }) {
56
+ return /* @__PURE__ */ jsx("div", {
57
+ "data-slot": "field-content",
58
+ className: cn("group/field-content flex flex-1 flex-col gap-1.5 leading-snug", className),
59
+ ...props
60
+ });
61
+ }
62
+ function FieldLabel({ className, ...props }) {
63
+ return /* @__PURE__ */ jsx(Label, {
64
+ "data-slot": "field-label",
65
+ className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-control has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4", "has-data-[state=checked]:bg-action/5 has-data-[state=checked]:border-action dark:has-data-[state=checked]:bg-action/10", className),
66
+ ...props
67
+ });
68
+ }
69
+ function FieldTitle({ className, ...props }) {
70
+ return /* @__PURE__ */ jsx("div", {
71
+ "data-slot": "field-label",
72
+ className: cn("flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50", className),
73
+ ...props
74
+ });
75
+ }
76
+ function FieldDescription({ className, ...props }) {
77
+ return /* @__PURE__ */ jsx("p", {
78
+ "data-slot": "field-description",
79
+ className: cn("text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance", "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5", "[&>a:hover]:text-action-ink [&>a]:underline [&>a]:underline-offset-4", className),
80
+ ...props
81
+ });
82
+ }
83
+ function FieldSeparator({ children, className, ...props }) {
84
+ return /* @__PURE__ */ jsxs("div", {
85
+ "data-slot": "field-separator",
86
+ "data-content": !!children,
87
+ className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className),
88
+ ...props,
89
+ children: [/* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }), children && /* @__PURE__ */ jsx("span", {
90
+ className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
91
+ "data-slot": "field-separator-content",
92
+ children
93
+ })]
94
+ });
95
+ }
96
+ function FieldError({ className, children, errors, ...props }) {
97
+ const content = useMemo(() => {
98
+ if (children) return children;
99
+ if (!errors?.length) return null;
100
+ const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
101
+ if (uniqueErrors?.length === 1) return uniqueErrors[0]?.message;
102
+ return /* @__PURE__ */ jsx("ul", {
103
+ className: "ml-4 flex list-disc flex-col gap-1",
104
+ children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index.toString()))
105
+ });
106
+ }, [children, errors]);
107
+ if (!content) return null;
108
+ return /* @__PURE__ */ jsx("div", {
109
+ role: "alert",
110
+ "data-slot": "field-error",
111
+ className: cn("text-destructive text-sm font-normal", className),
112
+ ...props,
113
+ children: content
114
+ });
115
+ }
116
+
117
+ //#endregion
118
+ export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle };
@@ -0,0 +1,38 @@
1
+ import * as React$1 from "react";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ import * as LabelPrimitive from "@radix-ui/react-label";
4
+ //#region src/web/base/form.d.ts
5
+ declare const useFormField: () => {
6
+ id: string;
7
+ formItemId: string;
8
+ formLabelId: string;
9
+ formDescriptionId: string;
10
+ formMessageId: string;
11
+ errors: readonly unknown[];
12
+ };
13
+ declare function FormItem({ className, errors, ...props }: React$1.ComponentProps<"div"> & {
14
+ /**
15
+ * Errors for use outside a field (TanStack Form). Used for the input's `aria-invalid` and `aria-describedby`,
16
+ * the label's `data-error`, and the display of `FormMessage`. Not needed inside a field (it reads the field's errors).
17
+ */
18
+ errors?: readonly unknown[];
19
+ }): React$1.JSX.Element;
20
+ declare function FormLabel({ required, helpText, helpLabel, className, ...props }: {
21
+ required?: boolean;
22
+ helpText?: React$1.ReactNode;
23
+ /** Accessible name of the help trigger */
24
+ helpLabel?: string;
25
+ } & React$1.ComponentProps<typeof LabelPrimitive.Root>): React$1.JSX.Element;
26
+ /**
27
+ * Passes id, aria-describedby and aria-invalid to the input.
28
+ * The default id is `formItemId`, which the label's `htmlFor` points at. **When one field has several controls** (the options of a radio, etc.),
29
+ * the same id would repeat, so the second and later controls pass `id` to tell them apart (aria-describedby and aria-invalid are applied to every control).
30
+ */
31
+ declare function FormControl({ className: _className, id, ...props }: React$1.ComponentProps<typeof Slot>): React$1.JSX.Element;
32
+ declare function FormDescription({ className, ...props }: React$1.ComponentProps<"p">): React$1.JSX.Element;
33
+ declare function FormMessage({ className, errors: overriddenErrors, ...props }: React$1.ComponentProps<"p"> & {
34
+ /** An error shown only in this message. It does not affect the input's aria-invalid (that comes from FormItem's errors) */
35
+ errors?: readonly unknown[];
36
+ }): React$1.JSX.Element | null;
37
+ //#endregion
38
+ export { FormControl, FormDescription, FormItem, FormLabel, FormMessage, useFormField };
@@ -0,0 +1,110 @@
1
+ import { useOptionalFieldContext } from "../../shared/form.js";
2
+ import { cn } from "../lib/utils.js";
3
+ import { HELP_LABEL } from "../lib/labels.js";
4
+ import { Field, FieldDescription, FieldError, FieldLabel } from "./field.js";
5
+ import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
6
+ import * as React$1 from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { CircleQuestionMark } from "lucide-react";
9
+ import { Slot } from "@radix-ui/react-slot";
10
+
11
+ //#region src/web/base/form.tsx
12
+ const useFormField = () => {
13
+ const itemContext = React$1.useContext(FormItemContext);
14
+ const field = useOptionalFieldContext();
15
+ const errors = itemContext.errors ?? field?.state.meta.errors ?? [];
16
+ const { id } = itemContext;
17
+ return {
18
+ id,
19
+ formItemId: `${id}-form-item`,
20
+ formLabelId: `${id}-form-item-label`,
21
+ formDescriptionId: `${id}-form-item-description`,
22
+ formMessageId: `${id}-form-item-message`,
23
+ errors
24
+ };
25
+ };
26
+ const FormItemContext = React$1.createContext({ id: "" });
27
+ function FormItem({ className, errors, ...props }) {
28
+ const id = React$1.useId();
29
+ const isValidating = useOptionalFieldContext()?.state.meta.isValidating ?? false;
30
+ return /* @__PURE__ */ jsx(FormItemContext.Provider, {
31
+ value: {
32
+ id,
33
+ errors
34
+ },
35
+ children: /* @__PURE__ */ jsx(Field, {
36
+ "data-slot": "form-item",
37
+ className: cn("gap-2", isValidating && "animate-pulse pointer-events-none", className),
38
+ orientation: "responsive",
39
+ ...props
40
+ })
41
+ });
42
+ }
43
+ function FormLabel({ required, helpText, helpLabel = HELP_LABEL, className, ...props }) {
44
+ const { errors, formItemId, formLabelId } = useFormField();
45
+ return /* @__PURE__ */ jsxs("div", {
46
+ className: "flex items-center gap-2",
47
+ children: [
48
+ /* @__PURE__ */ jsx(FieldLabel, {
49
+ id: formLabelId,
50
+ "data-slot": "form-label",
51
+ "data-error": errors.length > 0,
52
+ className: cn("font-semibold text-xs opacity-80 data-[error=true]:text-destructive data-[error=true]:opacity-100", className),
53
+ htmlFor: formItemId,
54
+ ...props
55
+ }),
56
+ required && /* @__PURE__ */ jsx("p", {
57
+ "data-slot": "form-required",
58
+ className: "text-state-error text-sm",
59
+ children: "*"
60
+ }),
61
+ helpText && /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
62
+ "aria-label": helpLabel,
63
+ children: /* @__PURE__ */ jsx(CircleQuestionMark, {
64
+ className: "h-4 w-4",
65
+ "aria-hidden": true
66
+ })
67
+ }), /* @__PURE__ */ jsx(TooltipContent, { children: helpText })] })
68
+ ]
69
+ });
70
+ }
71
+ /**
72
+ * Passes id, aria-describedby and aria-invalid to the input.
73
+ * The default id is `formItemId`, which the label's `htmlFor` points at. **When one field has several controls** (the options of a radio, etc.),
74
+ * the same id would repeat, so the second and later controls pass `id` to tell them apart (aria-describedby and aria-invalid are applied to every control).
75
+ */
76
+ function FormControl({ className: _className, id, ...props }) {
77
+ const { errors, formItemId, formDescriptionId, formMessageId } = useFormField();
78
+ return /* @__PURE__ */ jsx(Slot, {
79
+ "data-slot": "form-control",
80
+ id: id ?? formItemId,
81
+ "aria-describedby": errors.length === 0 ? formDescriptionId : `${formDescriptionId} ${formMessageId}`,
82
+ "aria-invalid": errors.length > 0,
83
+ ...props
84
+ });
85
+ }
86
+ function FormDescription({ className, ...props }) {
87
+ const { formDescriptionId } = useFormField();
88
+ return /* @__PURE__ */ jsx(FieldDescription, {
89
+ "data-slot": "form-description",
90
+ id: formDescriptionId,
91
+ className: cn("text-muted-foreground text-sm whitespace-pre-wrap", className),
92
+ ...props
93
+ });
94
+ }
95
+ function FormMessage({ className, errors: overriddenErrors, ...props }) {
96
+ const { errors, formMessageId } = useFormField();
97
+ const list = overriddenErrors ?? errors;
98
+ const body = list.length > 0 ? list.join("\n") : null;
99
+ if (!body) return null;
100
+ return /* @__PURE__ */ jsx(FieldError, {
101
+ "data-slot": "form-message",
102
+ id: formMessageId,
103
+ className: cn("text-destructive text-sm pb-3 whitespace-pre-wrap", className),
104
+ ...props,
105
+ children: body
106
+ });
107
+ }
108
+
109
+ //#endregion
110
+ export { FormControl, FormDescription, FormItem, FormLabel, FormMessage, useFormField };
@@ -0,0 +1,9 @@
1
+ import { ComponentProps } from "react";
2
+ import { VariantProps } from "class-variance-authority";
3
+ //#region src/web/base/input.d.ts
4
+ declare const inputVariants: (props?: ({
5
+ variant?: "<3" | "default" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare function Input({ className, type, variant, ...props }: ComponentProps<"input"> & VariantProps<typeof inputVariants>): import("react").JSX.Element;
8
+ //#endregion
9
+ export { Input, inputVariants };
@@ -0,0 +1,23 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+
5
+ //#region src/web/base/input.tsx
6
+ const inputVariants = cva("file:text-foreground placeholder:text-muted-foreground selection:bg-action selection:text-action-foreground flex transition-[border-color,box-shadow] w-full min-w-0 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", {
7
+ variants: { variant: {
8
+ default: "border-input h-8 rounded-control border bg-card px-2.5 py-1 text-base focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/25 aria-invalid:focus-visible:ring-destructive/25 md:text-[13px]",
9
+ "<3": "border-0 border-b border-dashed border-border bg-transparent px-0 py-0.5 text-xs focus-visible:border-solid focus-visible:border-ring"
10
+ } },
11
+ defaultVariants: { variant: "default" }
12
+ });
13
+ function Input({ className, type, variant, ...props }) {
14
+ return /* @__PURE__ */ jsx("input", {
15
+ type,
16
+ "data-slot": "input",
17
+ className: cn(inputVariants({ variant }), className),
18
+ ...props
19
+ });
20
+ }
21
+
22
+ //#endregion
23
+ export { Input, inputVariants };
@@ -0,0 +1,6 @@
1
+ import * as React$1 from "react";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ //#region src/web/base/label.d.ts
4
+ declare function Label({ className, ...props }: React$1.ComponentProps<typeof LabelPrimitive.Root>): React$1.JSX.Element;
5
+ //#endregion
6
+ export { Label };
@@ -0,0 +1,15 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as LabelPrimitive from "@radix-ui/react-label";
4
+
5
+ //#region src/web/base/label.tsx
6
+ function Label({ className, ...props }) {
7
+ return /* @__PURE__ */ jsx(LabelPrimitive.Root, {
8
+ "data-slot": "label",
9
+ className: cn("flex items-center gap-2 text-[13px] leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
10
+ ...props
11
+ });
12
+ }
13
+
14
+ //#endregion
15
+ export { Label };
@@ -0,0 +1,34 @@
1
+ import { Button } from "./button.js";
2
+ import * as React$1 from "react";
3
+ //#region src/web/base/pagination.d.ts
4
+ declare function Pagination({ className, ...props }: React$1.ComponentProps<"nav">): React$1.JSX.Element;
5
+ declare function PaginationContent({ className, ...props }: React$1.ComponentProps<"ul">): React$1.JSX.Element;
6
+ declare function PaginationItem({ ...props }: React$1.ComponentProps<"li">): React$1.JSX.Element;
7
+ type PaginationLinkCommonProps = {
8
+ isActive?: boolean;
9
+ disabled?: boolean;
10
+ } & Pick<React$1.ComponentProps<typeof Button>, "size">;
11
+ /**
12
+ * A link (`<a>`) when there is an `href`, **a button (`<button type="button">`) when there is not**. Screens that change pages through client state
13
+ * have no href, and an `<a>` left as it is can be neither focused nor operated by keyboard (an `<a>` without href is not a link).
14
+ */
15
+ type PaginationLinkProps = PaginationLinkCommonProps & (({
16
+ href: string;
17
+ } & Omit<React$1.ComponentProps<"a">, "href">) | ({
18
+ href?: undefined;
19
+ } & Omit<React$1.ComponentProps<"button">, "type">));
20
+ declare function PaginationLink(props: PaginationLinkProps): React$1.JSX.Element;
21
+ declare function PaginationPrevious({ className, previousLabel, ...props }: React$1.ComponentProps<typeof PaginationLink> & {
22
+ /** Accessible name (it is shown as an icon only, so the name is given here) */
23
+ previousLabel?: string;
24
+ }): React$1.JSX.Element;
25
+ declare function PaginationNext({ className, nextLabel, ...props }: React$1.ComponentProps<typeof PaginationLink> & {
26
+ /** Accessible name (it is shown as an icon only, so the name is given here) */
27
+ nextLabel?: string;
28
+ }): React$1.JSX.Element;
29
+ declare function PaginationEllipsis({ className, moreLabel, ...props }: React$1.ComponentProps<"span"> & {
30
+ /** Accessible name of the omitted pages */
31
+ moreLabel?: string;
32
+ }): React$1.JSX.Element;
33
+ //#endregion
34
+ export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
@@ -0,0 +1,90 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { MORE_PAGES_LABEL, NEXT_PAGE_LABEL, PAGINATION_LABEL, PREVIOUS_PAGE_LABEL } from "../lib/labels.js";
3
+ import { buttonVariants } from "./button.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
6
+
7
+ //#region src/web/base/pagination.tsx
8
+ function Pagination({ className, ...props }) {
9
+ return /* @__PURE__ */ jsx("nav", {
10
+ "aria-label": PAGINATION_LABEL,
11
+ "data-slot": "pagination",
12
+ className: cn("mx-auto flex w-full justify-center", className),
13
+ ...props
14
+ });
15
+ }
16
+ function PaginationContent({ className, ...props }) {
17
+ return /* @__PURE__ */ jsx("ul", {
18
+ "data-slot": "pagination-content",
19
+ className: cn("flex flex-row items-center gap-1", className),
20
+ ...props
21
+ });
22
+ }
23
+ function PaginationItem({ ...props }) {
24
+ return /* @__PURE__ */ jsx("li", {
25
+ "data-slot": "pagination-item",
26
+ className: "select-none",
27
+ ...props
28
+ });
29
+ }
30
+ function PaginationLink(props) {
31
+ const { isActive, disabled, size = "icon" } = props;
32
+ const className = cn(buttonVariants({
33
+ variant: isActive ? "outline" : "ghost",
34
+ size
35
+ }), disabled && "cursor-none opacity-50 pointer-events-none", props.className);
36
+ const common = {
37
+ "aria-current": isActive ? "page" : void 0,
38
+ "data-slot": "pagination-link",
39
+ "data-active": isActive
40
+ };
41
+ if (props.href !== void 0) {
42
+ const { isActive: _a, disabled: _d, size: _s, className: _c, ...anchor } = props;
43
+ return /* @__PURE__ */ jsx("a", {
44
+ ...common,
45
+ ...anchor,
46
+ className
47
+ });
48
+ }
49
+ const { isActive: _a, disabled: _d, size: _s, className: _c, href: _h, ...button } = props;
50
+ return /* @__PURE__ */ jsx("button", {
51
+ type: "button",
52
+ ...common,
53
+ ...button,
54
+ disabled,
55
+ className
56
+ });
57
+ }
58
+ function PaginationPrevious({ className, previousLabel = PREVIOUS_PAGE_LABEL, ...props }) {
59
+ return /* @__PURE__ */ jsx(PaginationLink, {
60
+ "aria-label": previousLabel,
61
+ size: "default",
62
+ className: cn("gap-1 px-2.5 sm:pl-2.5", className),
63
+ ...props,
64
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, {})
65
+ });
66
+ }
67
+ function PaginationNext({ className, nextLabel = NEXT_PAGE_LABEL, ...props }) {
68
+ return /* @__PURE__ */ jsx(PaginationLink, {
69
+ "aria-label": nextLabel,
70
+ size: "default",
71
+ className: cn("gap-1 px-2.5 sm:pr-2.5", className),
72
+ ...props,
73
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
74
+ });
75
+ }
76
+ function PaginationEllipsis({ className, moreLabel = MORE_PAGES_LABEL, ...props }) {
77
+ return /* @__PURE__ */ jsxs("span", {
78
+ "aria-hidden": true,
79
+ "data-slot": "pagination-ellipsis",
80
+ className: cn("flex size-9 items-center justify-center", className),
81
+ ...props,
82
+ children: [/* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-4" }), /* @__PURE__ */ jsx("span", {
83
+ className: "sr-only",
84
+ children: moreLabel
85
+ })]
86
+ });
87
+ }
88
+
89
+ //#endregion
90
+ export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
@@ -0,0 +1,11 @@
1
+ import * as React$1 from "react";
2
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
3
+ //#region src/web/base/popover.d.ts
4
+ declare function Popover({ ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Root>): React$1.JSX.Element;
5
+ declare function PopoverTrigger({ ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Trigger>): React$1.JSX.Element;
6
+ declare function PopoverContent({ className, align, sideOffset, portal, ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Content> & {
7
+ portal?: boolean;
8
+ }): React$1.JSX.Element;
9
+ declare function PopoverAnchor({ ...props }: React$1.ComponentProps<typeof PopoverPrimitive.Anchor>): React$1.JSX.Element;
10
+ //#endregion
11
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -0,0 +1,37 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
4
+
5
+ //#region src/web/base/popover.tsx
6
+ function Popover({ ...props }) {
7
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Root, {
8
+ "data-slot": "popover",
9
+ ...props
10
+ });
11
+ }
12
+ function PopoverTrigger({ ...props }) {
13
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, {
14
+ "data-slot": "popover-trigger",
15
+ ...props
16
+ });
17
+ }
18
+ function PopoverContent({ className, align = "center", sideOffset = 4, portal = true, ...props }) {
19
+ const comp = /* @__PURE__ */ jsx(PopoverPrimitive.Content, {
20
+ "data-slot": "popover-content",
21
+ align,
22
+ sideOffset,
23
+ className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-surface border border-border p-4 shadow-md outline-hidden", className),
24
+ ...props
25
+ });
26
+ if (!portal) return comp;
27
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: comp });
28
+ }
29
+ function PopoverAnchor({ ...props }) {
30
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, {
31
+ "data-slot": "popover-anchor",
32
+ ...props
33
+ });
34
+ }
35
+
36
+ //#endregion
37
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };
@@ -0,0 +1,7 @@
1
+ import * as React$1 from "react";
2
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
3
+ //#region src/web/base/radio-group.d.ts
4
+ declare function RadioGroup({ className, ...props }: React$1.ComponentProps<typeof RadioGroupPrimitive.Root>): React$1.JSX.Element;
5
+ declare function RadioGroupItem({ className, ...props }: React$1.ComponentProps<typeof RadioGroupPrimitive.Item>): React$1.JSX.Element;
6
+ //#endregion
7
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,27 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
4
+
5
+ //#region src/web/base/radio-group.tsx
6
+ function RadioGroup({ className, ...props }) {
7
+ return /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, {
8
+ "data-slot": "radio-group",
9
+ className: cn("grid gap-3", className),
10
+ ...props
11
+ });
12
+ }
13
+ function RadioGroupItem({ className, ...props }) {
14
+ return /* @__PURE__ */ jsx(RadioGroupPrimitive.Item, {
15
+ "data-slot": "radio-group-item",
16
+ className: cn("border-line-control data-[state=checked]:border-action bg-card aria-invalid:border-destructive flex size-4 shrink-0 items-center justify-center rounded-full border outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50", className),
17
+ ...props,
18
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, {
19
+ "data-slot": "radio-group-indicator",
20
+ className: "flex items-center justify-center",
21
+ children: /* @__PURE__ */ jsx("span", { className: "bg-action block size-2 rounded-full" })
22
+ })
23
+ });
24
+ }
25
+
26
+ //#endregion
27
+ export { RadioGroup, RadioGroupItem };
@@ -0,0 +1,10 @@
1
+ import * as React$1 from "react";
2
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
3
+ //#region src/web/base/scroll-area.d.ts
4
+ declare function ScrollArea({ ref, className, viewPortClassName, innerViewPortClassName, children, ...props }: React$1.ComponentProps<typeof ScrollAreaPrimitive.Root> & {
5
+ viewPortClassName?: string;
6
+ innerViewPortClassName?: string;
7
+ }): React$1.JSX.Element;
8
+ declare function ScrollBar({ className, orientation, ...props }: React$1.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>): React$1.JSX.Element;
9
+ //#endregion
10
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,41 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
4
+
5
+ //#region src/web/base/scroll-area.tsx
6
+ function ScrollArea({ ref, className, viewPortClassName, innerViewPortClassName, children, ...props }) {
7
+ return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, {
8
+ "data-slot": "scroll-area",
9
+ className: cn("flex flex-col relative overflow-hidden", className),
10
+ ...props,
11
+ children: [
12
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Viewport, {
13
+ ref,
14
+ "data-slot": "scroll-area-viewport",
15
+ className: cn("rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background", "flex-grow w-full !block", viewPortClassName),
16
+ asChild: true,
17
+ children: /* @__PURE__ */ jsx("div", {
18
+ className: cn(innerViewPortClassName),
19
+ children
20
+ })
21
+ }),
22
+ /* @__PURE__ */ jsx(ScrollBar, {}),
23
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
24
+ ]
25
+ });
26
+ }
27
+ function ScrollBar({ className, orientation = "vertical", ...props }) {
28
+ return /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, {
29
+ "data-slot": "scroll-area-scrollbar",
30
+ orientation,
31
+ className: cn("flex touch-none p-px select-none", orientation === "vertical" && "h-full w-1.5 border-l border-l-transparent", orientation === "horizontal" && "h-1.5 flex-col border-t border-t-transparent", className),
32
+ ...props,
33
+ children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.ScrollAreaThumb, {
34
+ "data-slot": "scroll-area-thumb",
35
+ className: "bg-border relative flex-1 rounded-full"
36
+ })
37
+ });
38
+ }
39
+
40
+ //#endregion
41
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,17 @@
1
+ import * as React$1 from "react";
2
+ import * as SelectPrimitive from "@radix-ui/react-select";
3
+ //#region src/web/base/select.d.ts
4
+ declare function Select({ ...props }: React$1.ComponentProps<typeof SelectPrimitive.Root>): React$1.JSX.Element;
5
+ declare function SelectGroup({ ...props }: React$1.ComponentProps<typeof SelectPrimitive.Group>): React$1.JSX.Element;
6
+ declare function SelectValue({ ...props }: React$1.ComponentProps<typeof SelectPrimitive.Value>): React$1.JSX.Element;
7
+ declare function SelectTrigger({ className, size, children, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Trigger> & {
8
+ size?: "xs" | "sm" | "default";
9
+ }): React$1.JSX.Element;
10
+ declare function SelectContent({ className, children, position, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Content>): React$1.JSX.Element;
11
+ declare function SelectLabel({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Label>): React$1.JSX.Element;
12
+ declare function SelectItem({ className, children, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Item>): React$1.JSX.Element;
13
+ declare function SelectSeparator({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Separator>): React$1.JSX.Element;
14
+ declare function SelectScrollUpButton({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): React$1.JSX.Element;
15
+ declare function SelectScrollDownButton({ className, ...props }: React$1.ComponentProps<typeof SelectPrimitive.ScrollDownButton>): React$1.JSX.Element;
16
+ //#endregion
17
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };