@webjsdev/ui 0.3.17 → 0.5.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 (360) hide show
  1. package/README.md +67 -8
  2. package/THIRD_PARTY_NOTICES.md +349 -0
  3. package/package.json +4 -2
  4. package/packages/registry/blocks/_shared/placeholder.svg +1 -0
  5. package/packages/registry/blocks/charts/chart-area-axes.ts +72 -0
  6. package/packages/registry/blocks/charts/chart-area-default.ts +64 -0
  7. package/packages/registry/blocks/charts/chart-area-gradient.ts +82 -0
  8. package/packages/registry/blocks/charts/chart-area-icons.ts +77 -0
  9. package/packages/registry/blocks/charts/chart-area-interactive.ts +204 -0
  10. package/packages/registry/blocks/charts/chart-area-legend.ts +72 -0
  11. package/packages/registry/blocks/charts/chart-area-linear.ts +64 -0
  12. package/packages/registry/blocks/charts/chart-area-stacked-expand.ts +77 -0
  13. package/packages/registry/blocks/charts/chart-area-stacked.ts +71 -0
  14. package/packages/registry/blocks/charts/chart-area-step.ts +68 -0
  15. package/packages/registry/blocks/charts/chart-bar-active.ts +93 -0
  16. package/packages/registry/blocks/charts/chart-bar-default.ts +60 -0
  17. package/packages/registry/blocks/charts/chart-bar-horizontal.ts +62 -0
  18. package/packages/registry/blocks/charts/chart-bar-interactive.ts +185 -0
  19. package/packages/registry/blocks/charts/chart-bar-label-custom.ts +78 -0
  20. package/packages/registry/blocks/charts/chart-bar-label.ts +66 -0
  21. package/packages/registry/blocks/charts/chart-bar-mixed.ts +87 -0
  22. package/packages/registry/blocks/charts/chart-bar-multiple.ts +67 -0
  23. package/packages/registry/blocks/charts/chart-bar-negative.ts +61 -0
  24. package/packages/registry/blocks/charts/chart-bar-stacked.ts +68 -0
  25. package/packages/registry/blocks/charts/chart-line-default.ts +61 -0
  26. package/packages/registry/blocks/charts/chart-line-dots-colors.ts +86 -0
  27. package/packages/registry/blocks/charts/chart-line-dots-custom.ts +75 -0
  28. package/packages/registry/blocks/charts/chart-line-dots.ts +65 -0
  29. package/packages/registry/blocks/charts/chart-line-interactive.ts +185 -0
  30. package/packages/registry/blocks/charts/chart-line-label-custom.ts +94 -0
  31. package/packages/registry/blocks/charts/chart-line-label.ts +73 -0
  32. package/packages/registry/blocks/charts/chart-line-linear.ts +61 -0
  33. package/packages/registry/blocks/charts/chart-line-multiple.ts +71 -0
  34. package/packages/registry/blocks/charts/chart-line-step.ts +61 -0
  35. package/packages/registry/blocks/charts/chart-pie-donut-active.ts +86 -0
  36. package/packages/registry/blocks/charts/chart-pie-donut-text.ts +89 -0
  37. package/packages/registry/blocks/charts/chart-pie-donut.ts +77 -0
  38. package/packages/registry/blocks/charts/chart-pie-interactive.ts +120 -0
  39. package/packages/registry/blocks/charts/chart-pie-label-custom.ts +82 -0
  40. package/packages/registry/blocks/charts/chart-pie-label-list.ts +86 -0
  41. package/packages/registry/blocks/charts/chart-pie-label.ts +77 -0
  42. package/packages/registry/blocks/charts/chart-pie-legend.ts +79 -0
  43. package/packages/registry/blocks/charts/chart-pie-separator-none.ts +77 -0
  44. package/packages/registry/blocks/charts/chart-pie-simple.ts +77 -0
  45. package/packages/registry/blocks/charts/chart-pie-stacked.ts +99 -0
  46. package/packages/registry/blocks/charts/chart-radar-default.ts +61 -0
  47. package/packages/registry/blocks/charts/chart-radar-dots.ts +61 -0
  48. package/packages/registry/blocks/charts/chart-radar-grid-circle-fill.ts +61 -0
  49. package/packages/registry/blocks/charts/chart-radar-grid-circle-no-lines.ts +61 -0
  50. package/packages/registry/blocks/charts/chart-radar-grid-circle.ts +61 -0
  51. package/packages/registry/blocks/charts/chart-radar-grid-custom.ts +61 -0
  52. package/packages/registry/blocks/charts/chart-radar-grid-fill.ts +61 -0
  53. package/packages/registry/blocks/charts/chart-radar-grid-none.ts +60 -0
  54. package/packages/registry/blocks/charts/chart-radar-icons.ts +76 -0
  55. package/packages/registry/blocks/charts/chart-radar-label-custom.ts +77 -0
  56. package/packages/registry/blocks/charts/chart-radar-legend.ts +70 -0
  57. package/packages/registry/blocks/charts/chart-radar-lines-only.ts +68 -0
  58. package/packages/registry/blocks/charts/chart-radar-multiple.ts +68 -0
  59. package/packages/registry/blocks/charts/chart-radar-radius.ts +68 -0
  60. package/packages/registry/blocks/charts/chart-radial-grid.ts +80 -0
  61. package/packages/registry/blocks/charts/chart-radial-label.ts +85 -0
  62. package/packages/registry/blocks/charts/chart-radial-shape.ts +81 -0
  63. package/packages/registry/blocks/charts/chart-radial-simple.ts +79 -0
  64. package/packages/registry/blocks/charts/chart-radial-stacked.ts +69 -0
  65. package/packages/registry/blocks/charts/chart-radial-text.ts +82 -0
  66. package/packages/registry/blocks/charts/chart-tooltip-advanced.ts +84 -0
  67. package/packages/registry/blocks/charts/chart-tooltip-default.ts +62 -0
  68. package/packages/registry/blocks/charts/chart-tooltip-formatter.ts +75 -0
  69. package/packages/registry/blocks/charts/chart-tooltip-icons.ts +68 -0
  70. package/packages/registry/blocks/charts/chart-tooltip-indicator-line.ts +62 -0
  71. package/packages/registry/blocks/charts/chart-tooltip-indicator-none.ts +62 -0
  72. package/packages/registry/blocks/charts/chart-tooltip-label-custom.ts +65 -0
  73. package/packages/registry/blocks/charts/chart-tooltip-label-formatter.ts +66 -0
  74. package/packages/registry/blocks/charts/chart-tooltip-label-none.ts +62 -0
  75. package/packages/registry/blocks/dashboard-01/components/app-sidebar.ts +108 -0
  76. package/packages/registry/blocks/dashboard-01/components/chart-area-interactive.ts +276 -0
  77. package/packages/registry/blocks/dashboard-01/components/dashboard-data.ts +89 -0
  78. package/packages/registry/blocks/dashboard-01/components/data-table.ts +644 -0
  79. package/packages/registry/blocks/dashboard-01/components/nav-documents.ts +65 -0
  80. package/packages/registry/blocks/dashboard-01/components/nav-main.ts +61 -0
  81. package/packages/registry/blocks/dashboard-01/components/nav-secondary.ts +40 -0
  82. package/packages/registry/blocks/dashboard-01/components/nav-user.ts +66 -0
  83. package/packages/registry/blocks/dashboard-01/components/section-cards.ts +59 -0
  84. package/packages/registry/blocks/dashboard-01/components/site-header.ts +52 -0
  85. package/packages/registry/blocks/dashboard-01/page.ts +39 -0
  86. package/packages/registry/blocks/login-01/components/login-form.ts +70 -0
  87. package/packages/registry/blocks/login-01/page.ts +19 -0
  88. package/packages/registry/blocks/login-02/components/login-form.ts +68 -0
  89. package/packages/registry/blocks/login-02/page.ts +36 -0
  90. package/packages/registry/blocks/login-03/components/login-form.ts +89 -0
  91. package/packages/registry/blocks/login-03/page.ts +28 -0
  92. package/packages/registry/blocks/login-04/components/login-form.ts +91 -0
  93. package/packages/registry/blocks/login-04/page.ts +20 -0
  94. package/packages/registry/blocks/login-05/components/login-form.ts +75 -0
  95. package/packages/registry/blocks/login-05/page.ts +19 -0
  96. package/packages/registry/blocks/preview/cards/activate-agent-dialog.ts +77 -0
  97. package/packages/registry/blocks/preview/cards/analytics-card.ts +64 -0
  98. package/packages/registry/blocks/preview/cards/anomaly-alert.ts +35 -0
  99. package/packages/registry/blocks/preview/cards/bar-chart-card.ts +91 -0
  100. package/packages/registry/blocks/preview/cards/book-appointment.ts +51 -0
  101. package/packages/registry/blocks/preview/cards/codespaces-card.ts +172 -0
  102. package/packages/registry/blocks/preview/cards/contributions-activity.ts +63 -0
  103. package/packages/registry/blocks/preview/cards/contributors.ts +51 -0
  104. package/packages/registry/blocks/preview/cards/environment-variables.ts +47 -0
  105. package/packages/registry/blocks/preview/cards/feedback-form.ts +61 -0
  106. package/packages/registry/blocks/preview/cards/file-upload.ts +51 -0
  107. package/packages/registry/blocks/preview/cards/github-profile.ts +66 -0
  108. package/packages/registry/blocks/preview/cards/icon-preview-grid.ts +47 -0
  109. package/packages/registry/blocks/preview/cards/invite-team.ts +78 -0
  110. package/packages/registry/blocks/preview/cards/invoice.ts +91 -0
  111. package/packages/registry/blocks/preview/cards/live-waveform.ts +330 -0
  112. package/packages/registry/blocks/preview/cards/no-team-members.ts +61 -0
  113. package/packages/registry/blocks/preview/cards/not-found.ts +46 -0
  114. package/packages/registry/blocks/preview/cards/observability-card.ts +44 -0
  115. package/packages/registry/blocks/preview/cards/pie-chart-card.ts +84 -0
  116. package/packages/registry/blocks/preview/cards/report-bug.ts +71 -0
  117. package/packages/registry/blocks/preview/cards/shipping-address.ts +79 -0
  118. package/packages/registry/blocks/preview/cards/shortcuts.ts +57 -0
  119. package/packages/registry/blocks/preview/cards/skeleton-loading.ts +37 -0
  120. package/packages/registry/blocks/preview/cards/sleep-report.ts +85 -0
  121. package/packages/registry/blocks/preview/cards/style-overview.ts +64 -0
  122. package/packages/registry/blocks/preview/cards/typography-specimen.ts +107 -0
  123. package/packages/registry/blocks/preview/cards/ui-elements.ts +164 -0
  124. package/packages/registry/blocks/preview/cards/usage-card.ts +63 -0
  125. package/packages/registry/blocks/preview/cards/visitors.ts +71 -0
  126. package/packages/registry/blocks/preview/cards/weekly-fitness-summary.ts +54 -0
  127. package/packages/registry/blocks/preview/page.ts +103 -0
  128. package/packages/registry/blocks/preview-02/cards/account-access.ts +70 -0
  129. package/packages/registry/blocks/preview-02/cards/card-overview.ts +75 -0
  130. package/packages/registry/blocks/preview-02/cards/claimable-balance.ts +54 -0
  131. package/packages/registry/blocks/preview-02/cards/contribution-history.ts +80 -0
  132. package/packages/registry/blocks/preview-02/cards/cover-art.ts +41 -0
  133. package/packages/registry/blocks/preview-02/cards/dividend-income.ts +76 -0
  134. package/packages/registry/blocks/preview-02/cards/empty-connect-bank.ts +38 -0
  135. package/packages/registry/blocks/preview-02/cards/empty-distribute-track.ts +38 -0
  136. package/packages/registry/blocks/preview-02/cards/empty-explore-catalog.ts +39 -0
  137. package/packages/registry/blocks/preview-02/cards/faq.ts +79 -0
  138. package/packages/registry/blocks/preview-02/cards/front-door.ts +40 -0
  139. package/packages/registry/blocks/preview-02/cards/index-investing.ts +31 -0
  140. package/packages/registry/blocks/preview-02/cards/kitchen-island.ts +90 -0
  141. package/packages/registry/blocks/preview-02/cards/loading-card.ts +34 -0
  142. package/packages/registry/blocks/preview-02/cards/new-milestone.ts +53 -0
  143. package/packages/registry/blocks/preview-02/cards/notification-settings.ts +126 -0
  144. package/packages/registry/blocks/preview-02/cards/payments.ts +88 -0
  145. package/packages/registry/blocks/preview-02/cards/payout-threshold.ts +92 -0
  146. package/packages/registry/blocks/preview-02/cards/power-usage.ts +84 -0
  147. package/packages/registry/blocks/preview-02/cards/preferences.ts +89 -0
  148. package/packages/registry/blocks/preview-02/cards/qr-connect.ts +54 -0
  149. package/packages/registry/blocks/preview-02/cards/receiving-method.ts +89 -0
  150. package/packages/registry/blocks/preview-02/cards/recent-transactions.ts +101 -0
  151. package/packages/registry/blocks/preview-02/cards/release-catalog.ts +73 -0
  152. package/packages/registry/blocks/preview-02/cards/roller-shades.ts +110 -0
  153. package/packages/registry/blocks/preview-02/cards/savings-progress.ts +68 -0
  154. package/packages/registry/blocks/preview-02/cards/savings-targets.ts +132 -0
  155. package/packages/registry/blocks/preview-02/cards/sidebar-nav.ts +88 -0
  156. package/packages/registry/blocks/preview-02/cards/social-links.ts +57 -0
  157. package/packages/registry/blocks/preview-02/cards/stock-performance.ts +106 -0
  158. package/packages/registry/blocks/preview-02/cards/syncing-state.ts +37 -0
  159. package/packages/registry/blocks/preview-02/cards/transfer-funds.ts +111 -0
  160. package/packages/registry/blocks/preview-02/cards/upcoming-payments.ts +69 -0
  161. package/packages/registry/blocks/preview-02/page.ts +111 -0
  162. package/packages/registry/blocks/preview-03/cards/files-chat.ts +75 -0
  163. package/packages/registry/blocks/preview-03/cards/group-chat.ts +114 -0
  164. package/packages/registry/blocks/preview-03/cards/reasoning-chat.ts +88 -0
  165. package/packages/registry/blocks/preview-03/cards/simple-chat.ts +53 -0
  166. package/packages/registry/blocks/preview-03/components/chat-card.ts +126 -0
  167. package/packages/registry/blocks/preview-03/components/chat-player.ts +174 -0
  168. package/packages/registry/blocks/preview-03/components/part-file.ts +77 -0
  169. package/packages/registry/blocks/preview-03/components/part-reasoning.ts +25 -0
  170. package/packages/registry/blocks/preview-03/components/part-source.ts +48 -0
  171. package/packages/registry/blocks/preview-03/components/part-text.ts +69 -0
  172. package/packages/registry/blocks/preview-03/components/part-tool.ts +71 -0
  173. package/packages/registry/blocks/preview-03/components/prompt-input.ts +86 -0
  174. package/packages/registry/blocks/preview-03/page.ts +39 -0
  175. package/packages/registry/blocks/sidebar-01/components/app-sidebar.ts +113 -0
  176. package/packages/registry/blocks/sidebar-01/components/search-form.ts +33 -0
  177. package/packages/registry/blocks/sidebar-01/components/version-switcher.ts +50 -0
  178. package/packages/registry/blocks/sidebar-01/page.ts +58 -0
  179. package/packages/registry/blocks/sidebar-02/components/app-sidebar.ts +131 -0
  180. package/packages/registry/blocks/sidebar-02/components/search-form.ts +33 -0
  181. package/packages/registry/blocks/sidebar-02/components/version-switcher.ts +50 -0
  182. package/packages/registry/blocks/sidebar-02/page.ts +53 -0
  183. package/packages/registry/blocks/sidebar-03/components/app-sidebar.ts +134 -0
  184. package/packages/registry/blocks/sidebar-03/page.ts +60 -0
  185. package/packages/registry/blocks/sidebar-04/components/app-sidebar.ts +136 -0
  186. package/packages/registry/blocks/sidebar-04/page.ts +58 -0
  187. package/packages/registry/blocks/sidebar-05/components/app-sidebar.ts +147 -0
  188. package/packages/registry/blocks/sidebar-05/components/search-form.ts +33 -0
  189. package/packages/registry/blocks/sidebar-05/page.ts +58 -0
  190. package/packages/registry/blocks/sidebar-06/components/app-sidebar.ts +105 -0
  191. package/packages/registry/blocks/sidebar-06/components/nav-main.ts +56 -0
  192. package/packages/registry/blocks/sidebar-06/components/sidebar-opt-in-form.ts +44 -0
  193. package/packages/registry/blocks/sidebar-06/page.ts +57 -0
  194. package/packages/registry/blocks/sidebar-07/components/app-sidebar.ts +108 -0
  195. package/packages/registry/blocks/sidebar-07/components/nav-main.ts +61 -0
  196. package/packages/registry/blocks/sidebar-07/components/nav-projects.ts +65 -0
  197. package/packages/registry/blocks/sidebar-07/components/nav-user.ts +70 -0
  198. package/packages/registry/blocks/sidebar-07/components/team-switcher.ts +66 -0
  199. package/packages/registry/blocks/sidebar-07/page.ts +59 -0
  200. package/packages/registry/blocks/sidebar-08/components/app-sidebar.ts +122 -0
  201. package/packages/registry/blocks/sidebar-08/components/nav-main.ts +68 -0
  202. package/packages/registry/blocks/sidebar-08/components/nav-projects.ts +65 -0
  203. package/packages/registry/blocks/sidebar-08/components/nav-secondary.ts +40 -0
  204. package/packages/registry/blocks/sidebar-08/components/nav-user.ts +70 -0
  205. package/packages/registry/blocks/sidebar-08/page.ts +59 -0
  206. package/packages/registry/blocks/sidebar-09/components/app-sidebar.ts +213 -0
  207. package/packages/registry/blocks/sidebar-09/components/nav-user.ts +70 -0
  208. package/packages/registry/blocks/sidebar-09/page.ts +52 -0
  209. package/packages/registry/blocks/sidebar-10/components/app-sidebar.ts +125 -0
  210. package/packages/registry/blocks/sidebar-10/components/nav-actions.ts +84 -0
  211. package/packages/registry/blocks/sidebar-10/components/nav-favorites.ts +66 -0
  212. package/packages/registry/blocks/sidebar-10/components/nav-main.ts +37 -0
  213. package/packages/registry/blocks/sidebar-10/components/nav-secondary.ts +43 -0
  214. package/packages/registry/blocks/sidebar-10/components/nav-workspaces.ts +78 -0
  215. package/packages/registry/blocks/sidebar-10/components/team-switcher.ts +63 -0
  216. package/packages/registry/blocks/sidebar-10/page.ts +46 -0
  217. package/packages/registry/blocks/sidebar-11/components/app-sidebar.ts +114 -0
  218. package/packages/registry/blocks/sidebar-11/page.ts +63 -0
  219. package/packages/registry/blocks/sidebar-12/components/app-sidebar.ts +63 -0
  220. package/packages/registry/blocks/sidebar-12/components/calendars.ts +53 -0
  221. package/packages/registry/blocks/sidebar-12/components/date-picker.ts +26 -0
  222. package/packages/registry/blocks/sidebar-12/components/nav-user.ts +70 -0
  223. package/packages/registry/blocks/sidebar-12/page.ts +43 -0
  224. package/packages/registry/blocks/sidebar-13/components/settings-dialog.ts +114 -0
  225. package/packages/registry/blocks/sidebar-13/page.ts +21 -0
  226. package/packages/registry/blocks/sidebar-14/components/app-sidebar.ts +120 -0
  227. package/packages/registry/blocks/sidebar-14/page.ts +55 -0
  228. package/packages/registry/blocks/sidebar-15/components/calendars.ts +53 -0
  229. package/packages/registry/blocks/sidebar-15/components/date-picker.ts +26 -0
  230. package/packages/registry/blocks/sidebar-15/components/nav-favorites.ts +66 -0
  231. package/packages/registry/blocks/sidebar-15/components/nav-main.ts +35 -0
  232. package/packages/registry/blocks/sidebar-15/components/nav-secondary.ts +43 -0
  233. package/packages/registry/blocks/sidebar-15/components/nav-user.ts +70 -0
  234. package/packages/registry/blocks/sidebar-15/components/nav-workspaces.ts +75 -0
  235. package/packages/registry/blocks/sidebar-15/components/sidebar-left.ts +126 -0
  236. package/packages/registry/blocks/sidebar-15/components/sidebar-right.ts +62 -0
  237. package/packages/registry/blocks/sidebar-15/components/team-switcher.ts +63 -0
  238. package/packages/registry/blocks/sidebar-15/page.ts +47 -0
  239. package/packages/registry/blocks/sidebar-16/components/app-sidebar.ts +124 -0
  240. package/packages/registry/blocks/sidebar-16/components/nav-main.ts +67 -0
  241. package/packages/registry/blocks/sidebar-16/components/nav-projects.ts +65 -0
  242. package/packages/registry/blocks/sidebar-16/components/nav-secondary.ts +40 -0
  243. package/packages/registry/blocks/sidebar-16/components/nav-user.ts +70 -0
  244. package/packages/registry/blocks/sidebar-16/components/search-form.ts +27 -0
  245. package/packages/registry/blocks/sidebar-16/components/site-header.ts +42 -0
  246. package/packages/registry/blocks/sidebar-16/page.ts +38 -0
  247. package/packages/registry/blocks/signup-01/components/signup-form.ts +78 -0
  248. package/packages/registry/blocks/signup-01/page.ts +19 -0
  249. package/packages/registry/blocks/signup-02/components/signup-form.ts +78 -0
  250. package/packages/registry/blocks/signup-02/page.ts +36 -0
  251. package/packages/registry/blocks/signup-03/components/signup-form.ts +79 -0
  252. package/packages/registry/blocks/signup-03/page.ts +28 -0
  253. package/packages/registry/blocks/signup-04/components/signup-form.ts +100 -0
  254. package/packages/registry/blocks/signup-04/page.ts +20 -0
  255. package/packages/registry/blocks/signup-05/components/signup-form.ts +75 -0
  256. package/packages/registry/blocks/signup-05/page.ts +20 -0
  257. package/packages/registry/components/accordion.ts +20 -7
  258. package/packages/registry/components/alert-dialog.ts +58 -13
  259. package/packages/registry/components/alert.ts +11 -6
  260. package/packages/registry/components/attachment.ts +119 -0
  261. package/packages/registry/components/avatar.ts +17 -8
  262. package/packages/registry/components/badge.ts +16 -9
  263. package/packages/registry/components/breadcrumb.ts +6 -6
  264. package/packages/registry/components/bubble.ts +95 -0
  265. package/packages/registry/components/button-group.ts +73 -0
  266. package/packages/registry/components/button.ts +35 -25
  267. package/packages/registry/components/calendar.ts +566 -0
  268. package/packages/registry/components/card.ts +8 -8
  269. package/packages/registry/components/carousel.ts +352 -0
  270. package/packages/registry/components/chart-element.ts +547 -0
  271. package/packages/registry/components/chart-geometry.ts +457 -0
  272. package/packages/registry/components/chart.ts +932 -0
  273. package/packages/registry/components/checkbox.ts +22 -84
  274. package/packages/registry/components/code-block.ts +191 -0
  275. package/packages/registry/components/collapsible.ts +5 -2
  276. package/packages/registry/components/combobox.ts +802 -0
  277. package/packages/registry/components/command.ts +618 -0
  278. package/packages/registry/components/context-menu.ts +302 -0
  279. package/packages/registry/components/dialog.ts +156 -45
  280. package/packages/registry/components/direction.ts +43 -0
  281. package/packages/registry/components/drawer.ts +226 -0
  282. package/packages/registry/components/dropdown-menu.ts +262 -83
  283. package/packages/registry/components/empty.ts +8 -8
  284. package/packages/registry/components/field.ts +20 -18
  285. package/packages/registry/components/floating.ts +124 -0
  286. package/packages/registry/components/hover-card.ts +19 -8
  287. package/packages/registry/components/input-group.ts +118 -0
  288. package/packages/registry/components/input-otp.ts +365 -0
  289. package/packages/registry/components/input.ts +3 -3
  290. package/packages/registry/components/item.ts +134 -0
  291. package/packages/registry/components/kbd.ts +2 -2
  292. package/packages/registry/components/label.ts +1 -1
  293. package/packages/registry/components/marker.ts +63 -0
  294. package/packages/registry/components/menubar.ts +388 -0
  295. package/packages/registry/components/message-scroller.ts +470 -0
  296. package/packages/registry/components/message.ts +69 -0
  297. package/packages/registry/components/native-select.ts +5 -5
  298. package/packages/registry/components/navigation-menu.ts +564 -0
  299. package/packages/registry/components/pagination.ts +5 -5
  300. package/packages/registry/components/popover.ts +30 -84
  301. package/packages/registry/components/progress.ts +7 -3
  302. package/packages/registry/components/questionnaire.ts +840 -0
  303. package/packages/registry/components/radio-group.ts +18 -73
  304. package/packages/registry/components/resizable.ts +330 -0
  305. package/packages/registry/components/scroll-area.ts +46 -0
  306. package/packages/registry/components/select.ts +650 -0
  307. package/packages/registry/components/separator.ts +1 -1
  308. package/packages/registry/components/sheet.ts +128 -0
  309. package/packages/registry/components/sidebar.ts +457 -0
  310. package/packages/registry/components/skeleton.ts +1 -1
  311. package/packages/registry/components/slider.ts +333 -0
  312. package/packages/registry/components/sonner.ts +74 -7
  313. package/packages/registry/components/spinner.ts +7 -4
  314. package/packages/registry/components/switch.ts +117 -9
  315. package/packages/registry/components/table.ts +11 -9
  316. package/packages/registry/components/tabs.ts +76 -25
  317. package/packages/registry/components/textarea.ts +1 -1
  318. package/packages/registry/components/toggle-group.ts +30 -11
  319. package/packages/registry/components/toggle.ts +20 -13
  320. package/packages/registry/components/tooltip.ts +68 -7
  321. package/packages/registry/components/trace.ts +75 -0
  322. package/packages/registry/lib/dom.ts +3 -4
  323. package/packages/registry/lib/icons-hugeicons.ts +955 -0
  324. package/packages/registry/lib/icons-phosphor.ts +955 -0
  325. package/packages/registry/lib/icons-remixicon.ts +955 -0
  326. package/packages/registry/lib/icons-tabler.ts +955 -0
  327. package/packages/registry/lib/icons.ts +768 -0
  328. package/packages/registry/lib/utils.ts +52 -8
  329. package/packages/registry/registry.json +4056 -72
  330. package/packages/registry/styles/shadcn-tailwind.css +654 -0
  331. package/packages/registry/styles/style-luma.css +1987 -0
  332. package/packages/registry/styles/style-lyra.css +1965 -0
  333. package/packages/registry/styles/style-maia.css +1987 -0
  334. package/packages/registry/styles/style-mira.css +1992 -0
  335. package/packages/registry/styles/style-new-york.css +1597 -0
  336. package/packages/registry/styles/style-nova.css +1990 -0
  337. package/packages/registry/styles/style-rhea.css +1987 -0
  338. package/packages/registry/styles/style-sera.css +1977 -0
  339. package/packages/registry/styles/style-vega.css +1990 -0
  340. package/packages/registry/styles/supplement.json +54 -0
  341. package/packages/registry/styles/tw-animate.css +6 -0
  342. package/packages/registry/themes/base-colors.js +8 -2
  343. package/packages/registry/themes/fonts.js +120 -0
  344. package/packages/registry/themes/index.css +2 -0
  345. package/packages/registry/themes/items.js +61 -0
  346. package/packages/registry/themes/preset.js +302 -0
  347. package/packages/registry/themes/themes.js +1193 -0
  348. package/src/commands/add.js +266 -14
  349. package/src/commands/diff.js +34 -20
  350. package/src/commands/info.js +7 -0
  351. package/src/commands/init.js +127 -10
  352. package/src/commands/list.js +43 -11
  353. package/src/commands/view.js +33 -5
  354. package/src/lint/rules/no-restyle.js +1 -1
  355. package/src/registry/extract.js +194 -5
  356. package/src/registry/icons.js +31 -0
  357. package/src/registry/local.js +15 -1
  358. package/src/registry/schema.js +13 -0
  359. package/src/registry/style-bake.js +506 -0
  360. package/src/utils/theme.js +110 -21
@@ -77,8 +77,8 @@ export type CardSize = 'default' | 'sm';
77
77
  export const cardClass = (opts: { size?: CardSize } = {}): string => {
78
78
  const size = opts.size ?? 'default';
79
79
  const base =
80
- 'group/card flex flex-col rounded-xl border bg-card text-card-foreground shadow-sm';
81
- return size === 'sm' ? base + ' gap-3 py-3' : base + ' gap-6 py-6';
80
+ 'cn-card group/card flex flex-col';
81
+ return size === 'sm' ? base + ' cn-card-size-sm' : base + ' cn-card-size-default';
82
82
  };
83
83
 
84
84
  /**
@@ -87,23 +87,23 @@ export const cardClass = (opts: { size?: CardSize } = {}): string => {
87
87
  * root card carries data-size="sm".
88
88
  */
89
89
  export const cardHeaderClass = (): string =>
90
- '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:gap-1 group-data-[size=sm]/card:[.border-b]:pb-3';
90
+ 'cn-card-header group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]';
91
91
 
92
92
  /** Card title: heading text within the header. Smaller when card is data-size="sm". */
93
93
  export const cardTitleClass = (): string =>
94
- 'leading-none font-semibold group-data-[size=sm]/card:text-sm';
94
+ 'cn-card-title';
95
95
 
96
96
  /** Card description: subdued caption beneath the title. */
97
- export const cardDescriptionClass = (): string => 'text-sm text-muted-foreground';
97
+ export const cardDescriptionClass = (): string => 'cn-card-description';
98
98
 
99
99
  /** Card action: right-aligned controls inside the header (matches shadcn CardAction). */
100
100
  export const cardActionClass = (): string =>
101
- 'col-start-2 row-span-2 row-start-1 self-start justify-self-end';
101
+ 'cn-card-action col-start-2 row-span-2 row-start-1 self-start justify-self-end';
102
102
 
103
103
  /** Card content: the main body region. Tighter padding when card is data-size="sm". */
104
104
  export const cardContentClass = (): string =>
105
- 'px-6 group-data-[size=sm]/card:px-4';
105
+ 'cn-card-content';
106
106
 
107
107
  /** Card footer: trailing controls or actions. Tighter padding when card is data-size="sm". */
108
108
  export const cardFooterClass = (): string =>
109
- 'flex items-center px-6 [.border-t]:pt-6 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:[.border-t]:pt-3';
109
+ 'cn-card-footer flex items-center';
@@ -0,0 +1,352 @@
1
+ /**
2
+ * Carousel: a row (or column) of slides you swipe, scroll or step through.
3
+ * Tier-2. shadcn's is Embla; this is CSS scroll snap, so the slides scroll
4
+ * and snap natively, by touch, trackpad and wheel, with no JavaScript at all.
5
+ * The element adds the Previous / Next buttons, the arrow keys, and an `api`
6
+ * for stepping.
7
+ *
8
+ * shadcn parity:
9
+ * Carousel orientation → <ui-carousel orientation="horizontal" | "vertical" loop>
10
+ * CarouselContent → <ui-carousel-content>
11
+ * CarouselItem → <ui-carousel-item> (size a slide with basis-*, e.g. class="basis-1/3")
12
+ * CarouselPrevious / Next → <ui-carousel-previous> / <ui-carousel-next> (`variant`, `size`)
13
+ * setApi / api → the element itself: scrollPrev(), scrollNext(), scrollTo(i),
14
+ * selectedIndex, canScrollPrev, canScrollNext
15
+ * api.on("select") → `ui-slide-change` ({ detail: { index } })
16
+ *
17
+ * Slides are spaced the way shadcn spaces them (a start padding on each, a
18
+ * negative margin on the track), and each snaps on its content, so a stepped
19
+ * slide rests exactly where the first one does. A vertical carousel needs a
20
+ * height: put it on `<ui-carousel-content>`.
21
+ *
22
+ * A11y (handled by the element, plus your part): the root is a
23
+ * `role="region"` with `aria-roledescription="carousel"`, each slide a
24
+ * `role="group"` with `aria-roledescription="slide"`, the buttons are named
25
+ * "Previous slide" / "Next slide" and disabled at the ends, and ArrowLeft /
26
+ * ArrowRight step while focus is inside. Your part: name the carousel
27
+ * (`aria-label` on `<ui-carousel>`), and keep the buttons on screen, which
28
+ * means room beside it, since they sit outside its edges as in shadcn.
29
+ *
30
+ * @example
31
+ * ```html
32
+ * <ui-carousel aria-label="Featured" class="w-full max-w-xs">
33
+ * <ui-carousel-content>
34
+ * <ui-carousel-item><div class="flex aspect-square items-center justify-center rounded-lg border p-6">1</div></ui-carousel-item>
35
+ * <ui-carousel-item><div class="flex aspect-square items-center justify-center rounded-lg border p-6">2</div></ui-carousel-item>
36
+ * <ui-carousel-item><div class="flex aspect-square items-center justify-center rounded-lg border p-6">3</div></ui-carousel-item>
37
+ * </ui-carousel-content>
38
+ * <ui-carousel-previous></ui-carousel-previous>
39
+ * <ui-carousel-next></ui-carousel-next>
40
+ * </ui-carousel>
41
+ * ```
42
+ */
43
+ import { WebComponent, html, prop, signal, nothing } from '@webjsdev/core';
44
+ import { cn, takeAuthoredClass } from '../lib/utils.ts';
45
+ import { buttonClass, type ButtonVariant, type ButtonSize } from './button.ts';
46
+
47
+ /** The scroller's classes (the element applies them). */
48
+ export function carouselContentClass(orientation: 'horizontal' | 'vertical' = 'horizontal'): string {
49
+ return orientation === 'vertical'
50
+ ? 'h-full overflow-x-hidden overflow-y-auto overscroll-y-contain snap-y snap-mandatory [scrollbar-width:none] [&::-webkit-scrollbar]:hidden'
51
+ : 'overflow-x-auto overflow-y-hidden overscroll-x-contain snap-x snap-mandatory [scrollbar-width:none] [&::-webkit-scrollbar]:hidden';
52
+ }
53
+
54
+ /** A slide's classes (the element puts them on the slide itself). */
55
+ export function carouselItemClass(orientation: 'horizontal' | 'vertical' = 'horizontal'): string {
56
+ return cn('relative min-w-0 shrink-0 grow-0 basis-full', orientation === 'vertical' ? 'pt-4' : 'ps-4');
57
+ }
58
+
59
+ const ROOT = 'ui-carousel';
60
+
61
+ function rootOf(el: Element): UiCarousel | null {
62
+ return (typeof el.closest === 'function' ? el.closest(ROOT) : null) as UiCarousel | null;
63
+ }
64
+
65
+ function orientationOf(el: Element): 'horizontal' | 'vertical' {
66
+ return rootOf(el)?.orientation === 'vertical' ? 'vertical' : 'horizontal';
67
+ }
68
+
69
+ // --------------------------------------------------------------------------
70
+ // <ui-carousel>
71
+ // --------------------------------------------------------------------------
72
+
73
+ export class UiCarousel extends WebComponent({
74
+ orientation: prop<'horizontal' | 'vertical'>(String, { reflect: true }),
75
+ loop: Boolean,
76
+ }) {
77
+ readonly #edges = signal<{ prev: boolean; next: boolean }>({ prev: false, next: false });
78
+ /** The slide nearest the start of the scroller. */
79
+ selectedIndex = 0;
80
+ _frame = 0;
81
+
82
+ constructor() {
83
+ super();
84
+ this.orientation = 'horizontal';
85
+ this.loop = false;
86
+ }
87
+
88
+ get canScrollPrev(): boolean {
89
+ return this.loop ? this._items().length > 1 : this.#edges.get().prev;
90
+ }
91
+
92
+ get canScrollNext(): boolean {
93
+ return this.loop ? this._items().length > 1 : this.#edges.get().next;
94
+ }
95
+
96
+ connectedCallback(): void {
97
+ super.connectedCallback?.();
98
+ window.addEventListener('resize', this._measure);
99
+ queueMicrotask(() => this._measure());
100
+ }
101
+
102
+ disconnectedCallback(): void {
103
+ window.removeEventListener('resize', this._measure);
104
+ cancelAnimationFrame(this._frame);
105
+ super.disconnectedCallback?.();
106
+ }
107
+
108
+ render() {
109
+ return html`<div
110
+ data-slot="carousel"
111
+ role="region"
112
+ aria-roledescription="carousel"
113
+ aria-label=${this.getAttribute?.('aria-label') || nothing}
114
+ class="relative"
115
+ @keydown=${this._onKeyDown}
116
+ @scroll=${this._onScroll}
117
+ ><slot></slot></div>`;
118
+ }
119
+
120
+ _scroller(): HTMLElement | null {
121
+ return this.querySelector<HTMLElement>('[data-slot="carousel-content"]');
122
+ }
123
+
124
+ _items(): HTMLElement[] {
125
+ if (typeof this.querySelectorAll !== 'function') return [];
126
+ return Array.from(this.querySelectorAll<HTMLElement>('ui-carousel-item')).filter((i) => rootOf(i) === this);
127
+ }
128
+
129
+ // Where a slide's content starts, which is where it snaps.
130
+ _start(item: HTMLElement): number {
131
+ const marker = item.querySelector<HTMLElement>('[data-carousel-snap]') ?? item;
132
+ const r = marker.getBoundingClientRect();
133
+ return this.orientation === 'vertical' ? r.top : (this._rtl() ? r.right : r.left);
134
+ }
135
+
136
+ _rtl(): boolean {
137
+ return typeof getComputedStyle === 'function' && getComputedStyle(this).direction === 'rtl';
138
+ }
139
+
140
+ /**
141
+ * Scroll slide `index` to the start, shadcn's `api.scrollTo(index)`. The
142
+ * element IS the api, so this sits on Element.scrollTo: one number is a
143
+ * slide index, and the native forms (`scrollTo(x, y)`, `scrollTo(options)`)
144
+ * still scroll the element itself.
145
+ */
146
+ scrollTo(index?: number | ScrollToOptions, y?: number): void {
147
+ if (typeof index !== 'number' || y !== undefined) {
148
+ if (typeof index === 'number') super.scrollTo(index, y as number);
149
+ else super.scrollTo(index);
150
+ return;
151
+ }
152
+ const scroller = this._scroller();
153
+ const items = this._items();
154
+ const item = items[index];
155
+ if (!scroller || !item) return;
156
+ const s = scroller.getBoundingClientRect();
157
+ const origin = this.orientation === 'vertical' ? s.top : (this._rtl() ? s.right : s.left);
158
+ const delta = this._start(item) - origin;
159
+ const smooth = !matchMedia?.('(prefers-reduced-motion: reduce)').matches;
160
+ scroller.scrollBy(this.orientation === 'vertical'
161
+ ? { top: delta, behavior: smooth ? 'smooth' : 'auto' }
162
+ : { left: delta, behavior: smooth ? 'smooth' : 'auto' });
163
+ }
164
+
165
+ /** Step back one slide (to the last with `loop`). */
166
+ scrollPrev(): void {
167
+ const n = this._items().length;
168
+ if (!n) return;
169
+ if (this.selectedIndex > 0) this.scrollTo(this.selectedIndex - 1);
170
+ else if (this.loop) this.scrollTo(n - 1);
171
+ }
172
+
173
+ /** Step on one slide (to the first with `loop`). */
174
+ scrollNext(): void {
175
+ const n = this._items().length;
176
+ if (!n) return;
177
+ if (this.selectedIndex < n - 1 && this.#edges.get().next) this.scrollTo(this.selectedIndex + 1);
178
+ else if (this.loop) this.scrollTo(0);
179
+ }
180
+
181
+ _onKeyDown = (e: KeyboardEvent): void => {
182
+ if (e.key === 'ArrowLeft') { e.preventDefault(); this.scrollPrev(); }
183
+ else if (e.key === 'ArrowRight') { e.preventDefault(); this.scrollNext(); }
184
+ };
185
+
186
+ // Scroll does not bubble, so the scroller's own listener calls this.
187
+ _onScroll = (): void => {
188
+ cancelAnimationFrame(this._frame);
189
+ this._frame = requestAnimationFrame(this._measure);
190
+ };
191
+
192
+ // Which slide is selected, and whether the ends are reached.
193
+ _measure = (): void => {
194
+ const scroller = this._scroller();
195
+ if (!scroller) return;
196
+ const vertical = this.orientation === 'vertical';
197
+ const pos = Math.abs(vertical ? scroller.scrollTop : scroller.scrollLeft);
198
+ const max = vertical ? scroller.scrollHeight - scroller.clientHeight : scroller.scrollWidth - scroller.clientWidth;
199
+ const s = scroller.getBoundingClientRect();
200
+ const origin = vertical ? s.top : (this._rtl() ? s.right : s.left);
201
+ const items = this._items();
202
+ let best = 0;
203
+ let bestD = Infinity;
204
+ items.forEach((item, i) => {
205
+ const d = Math.abs(this._start(item) - origin);
206
+ if (d < bestD) { bestD = d; best = i; }
207
+ });
208
+ // At the far end, the last slide counts as selected even when it cannot
209
+ // reach the start.
210
+ if (max > 0 && pos >= max - 1) best = items.length - 1;
211
+ const edges = { prev: pos > 1, next: pos < max - 1 };
212
+ if (edges.prev !== this.#edges.get().prev || edges.next !== this.#edges.get().next) this.#edges.set(edges);
213
+ if (best !== this.selectedIndex) {
214
+ this.selectedIndex = best;
215
+ this.dispatchEvent(new CustomEvent('ui-slide-change', { bubbles: true, detail: { index: best } }));
216
+ }
217
+ for (const b of Array.from(this.querySelectorAll<UiCarouselButton>('ui-carousel-previous, ui-carousel-next'))) b.requestUpdate?.();
218
+ };
219
+ }
220
+ UiCarousel.register('ui-carousel');
221
+
222
+ // --------------------------------------------------------------------------
223
+ // <ui-carousel-content>
224
+ // --------------------------------------------------------------------------
225
+
226
+ export class UiCarouselContent extends WebComponent {
227
+ _resize: ResizeObserver | null = null;
228
+
229
+ // The slides arrive and lay out after this connects, and can change size
230
+ // at any time, so the ends are re-measured whenever the strip resizes.
231
+ connectedCallback(): void {
232
+ super.connectedCallback?.();
233
+ if (typeof ResizeObserver === 'function') {
234
+ this._resize = new ResizeObserver(() => rootOf(this)?._onScroll());
235
+ queueMicrotask(() => {
236
+ const scroller = this.querySelector('[data-slot="carousel-content"]');
237
+ if (scroller) {
238
+ this._resize?.observe(scroller);
239
+ if (scroller.firstElementChild) this._resize?.observe(scroller.firstElementChild);
240
+ }
241
+ });
242
+ }
243
+ }
244
+
245
+ disconnectedCallback(): void {
246
+ this._resize?.disconnect();
247
+ this._resize = null;
248
+ super.disconnectedCallback?.();
249
+ }
250
+
251
+ render() {
252
+ const o = orientationOf(this);
253
+ return html`<div
254
+ data-slot="carousel-content"
255
+ class=${carouselContentClass(o)}
256
+ @scroll=${() => rootOf(this)?._onScroll()}
257
+ ><div class=${cn('flex', o === 'vertical' ? 'h-full -mt-4 flex-col' : '-ms-4')}><slot></slot></div></div>`;
258
+ }
259
+ }
260
+ UiCarouselContent.register('ui-carousel-content');
261
+
262
+ // --------------------------------------------------------------------------
263
+ // <ui-carousel-item>
264
+ // --------------------------------------------------------------------------
265
+
266
+ export class UiCarouselItem extends WebComponent {
267
+ _authored: string | null = null;
268
+
269
+ _root: UiCarousel | null = null;
270
+
271
+ // Adding or removing a slide changes how far the strip scrolls without
272
+ // resizing it, so the carousel re-measures. A removed slide can no longer
273
+ // find its carousel, so it remembers it.
274
+ connectedCallback(): void {
275
+ super.connectedCallback?.();
276
+ this._root = rootOf(this);
277
+ this._root?._onScroll();
278
+ }
279
+
280
+ disconnectedCallback(): void {
281
+ this._root?._onScroll();
282
+ this._root = null;
283
+ super.disconnectedCallback?.();
284
+ }
285
+
286
+ // A slide is the flex child itself, so it carries its own classes, role and
287
+ // slot name; the first render keeps whatever classes the author wrote.
288
+ render() {
289
+ this._authored = takeAuthoredClass(this);
290
+ if (typeof this.setAttribute === 'function') {
291
+ this.setAttribute('class', cn(carouselItemClass(orientationOf(this)), this._authored));
292
+ this.setAttribute('role', 'group');
293
+ this.setAttribute('aria-roledescription', 'slide');
294
+ this.setAttribute('data-slot', 'carousel-item');
295
+ }
296
+ // The snap point is the content's start, past the spacing padding: an
297
+ // absolutely positioned marker with no insets sits at its static
298
+ // position, which is exactly there, and adds no height. It is 1px, not
299
+ // 0, because a zero-size snap area is ignored and mandatory snapping
300
+ // then has nowhere to land.
301
+ return html`<span data-carousel-snap aria-hidden="true" class="absolute size-px snap-start"></span><slot></slot>`;
302
+ }
303
+ }
304
+ UiCarouselItem.register('ui-carousel-item');
305
+
306
+ // --------------------------------------------------------------------------
307
+ // <ui-carousel-previous> and <ui-carousel-next>
308
+ // --------------------------------------------------------------------------
309
+
310
+ export class UiCarouselButton extends WebComponent({
311
+ variant: String,
312
+ size: String,
313
+ }) {
314
+ static part = '';
315
+ static label = '';
316
+
317
+ constructor() {
318
+ super();
319
+ this.variant = 'outline';
320
+ this.size = 'icon-sm';
321
+ }
322
+
323
+ render() {
324
+ const ctor = this.constructor as typeof UiCarouselButton;
325
+ const root = rootOf(this);
326
+ const prev = ctor.part === 'previous';
327
+ const vertical = orientationOf(this) === 'vertical';
328
+ const can = root ? (prev ? root.canScrollPrev : root.canScrollNext) : false;
329
+ const place = prev
330
+ ? (vertical ? '-top-12 left-1/2 -translate-x-1/2 rotate-90' : 'inset-y-0 -start-12 my-auto')
331
+ : (vertical ? '-bottom-12 left-1/2 -translate-x-1/2 rotate-90' : 'inset-y-0 -end-12 my-auto');
332
+ return html`<button
333
+ type="button"
334
+ data-slot=${`carousel-${ctor.part}`}
335
+ ?disabled=${!can}
336
+ class=${cn(buttonClass({ variant: this.variant as ButtonVariant, size: this.size as ButtonSize }), prev ? 'cn-carousel-previous absolute touch-manipulation' : 'cn-carousel-next absolute touch-manipulation', place)}
337
+ @click=${() => (prev ? root?.scrollPrev() : root?.scrollNext())}
338
+ ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="cn-rtl-flip rtl:rotate-180"><path d=${prev ? 'm15 18-6-6 6-6' : 'm9 18 6-6-6-6'}></path></svg><span class="sr-only">${ctor.label}</span></button>`;
339
+ }
340
+ }
341
+
342
+ export class UiCarouselPrevious extends UiCarouselButton {
343
+ static part = 'previous';
344
+ static label = 'Previous slide';
345
+ }
346
+ UiCarouselPrevious.register('ui-carousel-previous');
347
+
348
+ export class UiCarouselNext extends UiCarouselButton {
349
+ static part = 'next';
350
+ static label = 'Next slide';
351
+ }
352
+ UiCarouselNext.register('ui-carousel-next');