@webjsdev/ui 0.3.17 → 0.4.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 (358) hide show
  1. package/README.md +66 -7
  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 +637 -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/icons-hugeicons.ts +955 -0
  323. package/packages/registry/lib/icons-phosphor.ts +955 -0
  324. package/packages/registry/lib/icons-remixicon.ts +955 -0
  325. package/packages/registry/lib/icons-tabler.ts +955 -0
  326. package/packages/registry/lib/icons.ts +768 -0
  327. package/packages/registry/lib/utils.ts +49 -4
  328. package/packages/registry/registry.json +4056 -72
  329. package/packages/registry/styles/shadcn-tailwind.css +654 -0
  330. package/packages/registry/styles/style-luma.css +1987 -0
  331. package/packages/registry/styles/style-lyra.css +1965 -0
  332. package/packages/registry/styles/style-maia.css +1987 -0
  333. package/packages/registry/styles/style-mira.css +1992 -0
  334. package/packages/registry/styles/style-new-york.css +1597 -0
  335. package/packages/registry/styles/style-nova.css +1990 -0
  336. package/packages/registry/styles/style-rhea.css +1987 -0
  337. package/packages/registry/styles/style-sera.css +1977 -0
  338. package/packages/registry/styles/style-vega.css +1990 -0
  339. package/packages/registry/styles/supplement.json +54 -0
  340. package/packages/registry/styles/tw-animate.css +6 -0
  341. package/packages/registry/themes/base-colors.js +8 -2
  342. package/packages/registry/themes/fonts.js +120 -0
  343. package/packages/registry/themes/index.css +2 -0
  344. package/packages/registry/themes/items.js +61 -0
  345. package/packages/registry/themes/preset.js +302 -0
  346. package/packages/registry/themes/themes.js +1193 -0
  347. package/src/commands/add.js +236 -12
  348. package/src/commands/diff.js +34 -20
  349. package/src/commands/info.js +7 -0
  350. package/src/commands/init.js +125 -8
  351. package/src/commands/list.js +43 -11
  352. package/src/commands/view.js +33 -5
  353. package/src/registry/extract.js +192 -2
  354. package/src/registry/icons.js +31 -0
  355. package/src/registry/local.js +15 -1
  356. package/src/registry/schema.js +13 -0
  357. package/src/registry/style-bake.js +506 -0
  358. package/src/utils/theme.js +110 -21
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The dashboard-01 documents list: one link per document, each with a "More"
3
+ * menu that shows on hover, and a trailing "More" item. Hidden while the
4
+ * sidebar is collapsed to icons. A fragment helper; the menus are the kit's
5
+ * `<ui-dropdown-menu>`. Ported from shadcn/ui's dashboard-01.
6
+ *
7
+ * Each "More" button sits right after its link, a sibling of it, because the
8
+ * kit's styles place it with `peer-*` selectors that need exactly that. The
9
+ * menu names it through `trigger="<id>"`, so the ids must be unique on the page.
10
+ */
11
+ import { html } from '@webjsdev/core';
12
+ import type { TemplateResult } from '@webjsdev/core';
13
+ import { cn } from '../../../lib/utils.ts';
14
+ import '../../../components/dropdown-menu.ts';
15
+ import {
16
+ sidebarGroupClass,
17
+ sidebarGroupLabelClass,
18
+ sidebarMenuActionClass,
19
+ sidebarMenuButtonClass,
20
+ sidebarMenuClass,
21
+ sidebarMenuItemClass,
22
+ } from '../../../components/sidebar.ts';
23
+ import { FolderIcon, MoreHorizontalIcon, ShareIcon, Trash2Icon } from '../../../lib/icons.ts';
24
+
25
+ export interface NavDocument {
26
+ name: string;
27
+ url: string;
28
+ icon: (cls?: string) => TemplateResult;
29
+ }
30
+
31
+ export function navDocuments({ items }: { items: NavDocument[] }) {
32
+ return html`
33
+ <div data-slot="sidebar-group" data-sidebar="group" class=${cn(sidebarGroupClass(), 'group-data-[collapsible=icon]:hidden')}>
34
+ <div data-slot="sidebar-group-label" data-sidebar="group-label" class=${sidebarGroupLabelClass()}>Documents</div>
35
+ <ul data-slot="sidebar-menu" data-sidebar="menu" class=${sidebarMenuClass()}>
36
+ ${items.map((item, i) => html`
37
+ <li data-slot="sidebar-menu-item" data-sidebar="menu-item" class=${sidebarMenuItemClass()}>
38
+ <a href=${item.url} data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" class=${sidebarMenuButtonClass()}>
39
+ ${item.icon()}
40
+ <span>${item.name}</span>
41
+ </a>
42
+ <button type="button" id=${`nav-document-more-${i}`} data-slot="sidebar-menu-action" data-sidebar="menu-action" class=${cn(sidebarMenuActionClass({ showOnHover: true }), 'rounded-sm aria-expanded:bg-accent')}>
43
+ ${MoreHorizontalIcon()}
44
+ <span class="sr-only">More</span>
45
+ </button>
46
+ <ui-dropdown-menu trigger=${`nav-document-more-${i}`}>
47
+ <ui-dropdown-menu-content class="w-24 rounded-lg" side="right" align="start">
48
+ <ui-dropdown-menu-item>${FolderIcon()}<span>Open</span></ui-dropdown-menu-item>
49
+ <ui-dropdown-menu-item>${ShareIcon()}<span>Share</span></ui-dropdown-menu-item>
50
+ <ui-dropdown-menu-separator></ui-dropdown-menu-separator>
51
+ <ui-dropdown-menu-item variant="destructive">${Trash2Icon()}<span>Delete</span></ui-dropdown-menu-item>
52
+ </ui-dropdown-menu-content>
53
+ </ui-dropdown-menu>
54
+ </li>
55
+ `)}
56
+ <li data-slot="sidebar-menu-item" data-sidebar="menu-item" class=${sidebarMenuItemClass()}>
57
+ <button type="button" data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" class=${cn(sidebarMenuButtonClass(), 'text-sidebar-foreground/70')}>
58
+ ${MoreHorizontalIcon('text-sidebar-foreground/70')}
59
+ <span>More</span>
60
+ </button>
61
+ </li>
62
+ </ul>
63
+ </div>
64
+ `;
65
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The dashboard-01 main nav: the "Quick Create" button beside an inbox
3
+ * button, then one link per section. A fragment helper. Ported from
4
+ * shadcn/ui's dashboard-01.
5
+ *
6
+ * "Quick Create" and the inbox button are placeholders: point them at your
7
+ * own create flow and inbox route. `quickCreate: false` drops that row and
8
+ * `label` titles the group (shadcn's examples/dashboard has a "Home" group with
9
+ * no Quick Create row).
10
+ */
11
+ import { html } from '@webjsdev/core';
12
+ import type { TemplateResult } from '@webjsdev/core';
13
+ import { cn } from '../../../lib/utils.ts';
14
+ import { buttonClass } from '../../../components/button.ts';
15
+ import {
16
+ sidebarGroupClass,
17
+ sidebarGroupContentClass,
18
+ sidebarGroupLabelClass,
19
+ sidebarMenuButtonClass,
20
+ sidebarMenuClass,
21
+ sidebarMenuItemClass,
22
+ } from '../../../components/sidebar.ts';
23
+ import { CirclePlusIcon, MailIcon } from '../../../lib/icons.ts';
24
+
25
+ export interface NavMainItem {
26
+ title: string;
27
+ url: string;
28
+ icon?: (cls?: string) => TemplateResult;
29
+ }
30
+
31
+ export function navMain({ items, label, quickCreate = true }: { items: NavMainItem[]; label?: string; quickCreate?: boolean }) {
32
+ return html`
33
+ <div data-slot="sidebar-group" data-sidebar="group" class=${sidebarGroupClass()}>
34
+ <div data-slot="sidebar-group-content" data-sidebar="group-content" class=${cn(sidebarGroupContentClass(), 'flex flex-col gap-2')}>
35
+ ${label ? html`<div data-slot="sidebar-group-label" data-sidebar="group-label" class=${sidebarGroupLabelClass()}>${label}</div>` : ''}
36
+ ${quickCreate ? html`<ul data-slot="sidebar-menu" data-sidebar="menu" class=${sidebarMenuClass()}>
37
+ <li data-slot="sidebar-menu-item" data-sidebar="menu-item" class=${cn(sidebarMenuItemClass(), 'flex items-center gap-2')}>
38
+ <button type="button" data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" class=${cn(sidebarMenuButtonClass(), 'min-w-8 bg-primary text-primary-foreground duration-200 ease-linear hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground')}>
39
+ ${CirclePlusIcon()}
40
+ <span>Quick Create</span>
41
+ </button>
42
+ <button type="button" data-slot="button" data-variant="outline" data-size="icon" class=${cn(buttonClass({ variant: 'outline', size: 'icon' }), 'size-8 group-data-[collapsible=icon]:opacity-0')}>
43
+ ${MailIcon()}
44
+ <span class="sr-only">Inbox</span>
45
+ </button>
46
+ </li>
47
+ </ul>` : ''}
48
+ <ul data-slot="sidebar-menu" data-sidebar="menu" class=${sidebarMenuClass()}>
49
+ ${items.map((item) => html`
50
+ <li data-slot="sidebar-menu-item" data-sidebar="menu-item" class=${sidebarMenuItemClass()}>
51
+ <a href=${item.url} data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" class=${sidebarMenuButtonClass()}>
52
+ ${item.icon ? item.icon() : ''}
53
+ <span>${item.title}</span>
54
+ </a>
55
+ </li>
56
+ `)}
57
+ </ul>
58
+ </div>
59
+ </div>
60
+ `;
61
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The dashboard-01 secondary nav: settings, help and search, pinned to the
3
+ * bottom of the sidebar by the `class` the app sidebar passes (`mt-auto`).
4
+ * A fragment helper. Ported from shadcn/ui's dashboard-01.
5
+ */
6
+ import { html } from '@webjsdev/core';
7
+ import type { TemplateResult } from '@webjsdev/core';
8
+ import { cn } from '../../../lib/utils.ts';
9
+ import {
10
+ sidebarGroupClass,
11
+ sidebarGroupContentClass,
12
+ sidebarMenuButtonClass,
13
+ sidebarMenuClass,
14
+ sidebarMenuItemClass,
15
+ } from '../../../components/sidebar.ts';
16
+
17
+ export interface NavSecondaryItem {
18
+ title: string;
19
+ url: string;
20
+ icon: (cls?: string) => TemplateResult;
21
+ }
22
+
23
+ export function navSecondary({ items, class: cls }: { items: NavSecondaryItem[]; class?: string }) {
24
+ return html`
25
+ <div data-slot="sidebar-group" data-sidebar="group" class=${cn(sidebarGroupClass(), cls)}>
26
+ <div data-slot="sidebar-group-content" data-sidebar="group-content" class=${sidebarGroupContentClass()}>
27
+ <ul data-slot="sidebar-menu" data-sidebar="menu" class=${sidebarMenuClass()}>
28
+ ${items.map((item) => html`
29
+ <li data-slot="sidebar-menu-item" data-sidebar="menu-item" class=${sidebarMenuItemClass()}>
30
+ <a href=${item.url} data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" class=${sidebarMenuButtonClass()}>
31
+ ${item.icon()}
32
+ <span>${item.title}</span>
33
+ </a>
34
+ </li>
35
+ `)}
36
+ </ul>
37
+ </div>
38
+ </div>
39
+ `;
40
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The dashboard-01 user menu: the signed-in user's avatar, name and email,
3
+ * opening an account menu. A fragment helper; the menu is the kit's
4
+ * `<ui-dropdown-menu>`. Ported from shadcn/ui's dashboard-01.
5
+ *
6
+ * The menu items are placeholders. Make "Log out" a form that posts to your
7
+ * sign-out action, and the others links to your account pages.
8
+ */
9
+ import { html } from '@webjsdev/core';
10
+ import { cn } from '../../../lib/utils.ts';
11
+ import { avatarClass, avatarFallbackClass, avatarImageClass } from '../../../components/avatar.ts';
12
+ import '../../../components/dropdown-menu.ts';
13
+ import {
14
+ sidebarMenuButtonClass,
15
+ sidebarMenuClass,
16
+ sidebarMenuItemClass,
17
+ } from '../../../components/sidebar.ts';
18
+ import { BellIcon, CircleUserRoundIcon, CreditCardIcon, EllipsisVerticalIcon, LogOutIcon } from '../../../lib/icons.ts';
19
+
20
+ function userAvatar(user: { name: string; avatar: string }) {
21
+ return html`<span data-slot="avatar" data-size="default" class=${cn(avatarClass(), 'h-8 w-8 rounded-lg grayscale')}>
22
+ <span data-slot="avatar-fallback" class=${cn(avatarFallbackClass(), 'rounded-lg')}>VK</span>
23
+ <img data-slot="avatar-image" src=${user.avatar} alt="@vivek" class=${avatarImageClass()}>
24
+ </span>`;
25
+ }
26
+
27
+ function userText(user: { name: string; email: string }) {
28
+ return html`<div class="grid flex-1 text-left text-sm leading-tight">
29
+ <span class="truncate font-medium">${user.name}</span>
30
+ <span class="truncate text-xs text-muted-foreground">${user.email}</span>
31
+ </div>`;
32
+ }
33
+
34
+ export function navUser({ user }: { user: { name: string; email: string; avatar: string } }) {
35
+ return html`
36
+ <ul data-slot="sidebar-menu" data-sidebar="menu" class=${sidebarMenuClass()}>
37
+ <li data-slot="sidebar-menu-item" data-sidebar="menu-item" class=${sidebarMenuItemClass()}>
38
+ <ui-dropdown-menu>
39
+ <ui-dropdown-menu-trigger>
40
+ <button type="button" data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="lg" class=${cn(sidebarMenuButtonClass({ size: 'lg' }), 'aria-expanded:bg-sidebar-accent aria-expanded:text-sidebar-accent-foreground')}>
41
+ ${userAvatar(user)}
42
+ ${userText(user)}
43
+ ${EllipsisVerticalIcon('ml-auto size-4')}
44
+ </button>
45
+ </ui-dropdown-menu-trigger>
46
+ <ui-dropdown-menu-content class="w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg" side="right" align="end">
47
+ <ui-dropdown-menu-label class="p-0 font-normal">
48
+ <div class="flex items-center gap-2 px-1 py-1.5 text-left text-sm">
49
+ ${userAvatar(user)}
50
+ ${userText(user)}
51
+ </div>
52
+ </ui-dropdown-menu-label>
53
+ <ui-dropdown-menu-separator></ui-dropdown-menu-separator>
54
+ <ui-dropdown-menu-group>
55
+ <ui-dropdown-menu-item>${CircleUserRoundIcon()}Account</ui-dropdown-menu-item>
56
+ <ui-dropdown-menu-item>${CreditCardIcon()}Billing</ui-dropdown-menu-item>
57
+ <ui-dropdown-menu-item>${BellIcon()}Notifications</ui-dropdown-menu-item>
58
+ </ui-dropdown-menu-group>
59
+ <ui-dropdown-menu-separator></ui-dropdown-menu-separator>
60
+ <ui-dropdown-menu-item>${LogOutIcon()}Log out</ui-dropdown-menu-item>
61
+ </ui-dropdown-menu-content>
62
+ </ui-dropdown-menu>
63
+ </li>
64
+ </ul>
65
+ `;
66
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The dashboard-01 section cards: four headline metrics, each with its
3
+ * trend badge and a two-line footer. A fragment helper. Ported from
4
+ * shadcn/ui's dashboard-01.
5
+ *
6
+ * The figures are sample data. Compute them on the server (a query in a
7
+ * `'use server'` file) and pass them in.
8
+ */
9
+ import { html } from '@webjsdev/core';
10
+ import type { TemplateResult } from '@webjsdev/core';
11
+ import { cn } from '../../../lib/utils.ts';
12
+ import { badgeClass } from '../../../components/badge.ts';
13
+ import {
14
+ cardActionClass,
15
+ cardClass,
16
+ cardDescriptionClass,
17
+ cardFooterClass,
18
+ cardHeaderClass,
19
+ cardTitleClass,
20
+ } from '../../../components/card.ts';
21
+ import { TrendingDownIcon, TrendingUpIcon } from '../../../lib/icons.ts';
22
+
23
+ interface Metric {
24
+ label: string;
25
+ value: string;
26
+ change: string;
27
+ trend: (cls?: string) => TemplateResult;
28
+ summary: string;
29
+ detail: string;
30
+ }
31
+
32
+ const metrics: Metric[] = [
33
+ { label: 'Total Revenue', value: '$1,250.00', change: '+12.5%', trend: TrendingUpIcon, summary: 'Trending up this month', detail: 'Visitors for the last 6 months' },
34
+ { label: 'New Customers', value: '1,234', change: '-20%', trend: TrendingDownIcon, summary: 'Down 20% this period', detail: 'Acquisition needs attention' },
35
+ { label: 'Active Accounts', value: '45,678', change: '+12.5%', trend: TrendingUpIcon, summary: 'Strong user retention', detail: 'Engagement exceed targets' },
36
+ { label: 'Growth Rate', value: '4.5%', change: '+4.5%', trend: TrendingUpIcon, summary: 'Steady performance increase', detail: 'Meets growth projections' },
37
+ ];
38
+
39
+ export function sectionCards() {
40
+ return html`
41
+ <div class="grid grid-cols-1 gap-4 px-4 *:data-[slot=card]:bg-gradient-to-t *:data-[slot=card]:from-primary/5 *:data-[slot=card]:to-card *:data-[slot=card]:shadow-xs lg:px-6 @xl/main:grid-cols-2 @5xl/main:grid-cols-4 dark:*:data-[slot=card]:bg-card">
42
+ ${metrics.map((m) => html`
43
+ <div data-slot="card" data-size="default" class=${cn(cardClass(), '@container/card')}>
44
+ <div data-slot="card-header" class=${cardHeaderClass()}>
45
+ <div data-slot="card-description" class=${cardDescriptionClass()}>${m.label}</div>
46
+ <div data-slot="card-title" class=${cn(cardTitleClass(), 'text-2xl font-semibold tabular-nums @[250px]/card:text-3xl')}>${m.value}</div>
47
+ <div data-slot="card-action" class=${cardActionClass()}>
48
+ <span data-slot="badge" data-variant="outline" class=${badgeClass({ variant: 'outline' })}>${m.trend()}${m.change}</span>
49
+ </div>
50
+ </div>
51
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col items-start gap-1.5 text-sm')}>
52
+ <div class="line-clamp-1 flex gap-2 font-medium">${m.summary} ${m.trend('size-4')}</div>
53
+ <div class="text-muted-foreground">${m.detail}</div>
54
+ </div>
55
+ </div>
56
+ `)}
57
+ </div>
58
+ `;
59
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * The dashboard-01 site header: the sidebar trigger and the page title, at
3
+ * the height the page sets through `--header-height`. A fragment helper.
4
+ * Ported from shadcn/ui's dashboard-01.
5
+ *
6
+ * Options: `title`, `trigger: false` for a sidebar that does not collapse,
7
+ * `quickCreate` for a "Quick Create" button at the end (`quickCreateIcon` its
8
+ * icon), and `sticky` to pin the header over the scrolling page, as shadcn's
9
+ * examples/dashboard does. The button is a placeholder for your create flow.
10
+ * `github` is the ghost link at the end, shadcn's "GitHub" button pointing at
11
+ * this block's source: point it at your own repository, or pass `false` to
12
+ * leave it out.
13
+ */
14
+ import { html } from '@webjsdev/core';
15
+ import { cn } from '../../../lib/utils.ts';
16
+ import type { TemplateResult } from '@webjsdev/core';
17
+ import { buttonClass } from '../../../components/button.ts';
18
+ import { separatorClass } from '../../../components/separator.ts';
19
+ import { CirclePlusIcon } from '../../../lib/icons.ts';
20
+ import '../../../components/sidebar.ts';
21
+
22
+ export interface SiteHeaderOptions {
23
+ title?: string;
24
+ trigger?: boolean;
25
+ quickCreate?: boolean;
26
+ quickCreateIcon?: TemplateResult;
27
+ sticky?: boolean;
28
+ github?: string | false;
29
+ }
30
+
31
+ const GITHUB = 'https://github.com/webjsdev/webjs/tree/main/packages/ui/packages/registry/blocks/dashboard-01';
32
+
33
+ export function siteHeader(opts: SiteHeaderOptions = {}) {
34
+ const trigger = opts.trigger ?? true;
35
+ const github = opts.github ?? GITHUB;
36
+ return html`
37
+ <header class=${cn('flex h-(--header-height) shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-(--header-height)', opts.sticky && 'sticky top-0 z-10 bg-background/90')}>
38
+ <div class="flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6">
39
+ ${trigger ? html`<ui-sidebar-trigger class="-ml-1"></ui-sidebar-trigger>
40
+ <div role="none" data-slot="separator" data-orientation="vertical" class=${cn(separatorClass(), 'mx-2 data-[orientation=vertical]:h-4')}></div>` : ''}
41
+ <h1 class="text-base font-medium">${opts.title ?? 'Documents'}</h1>
42
+ ${opts.quickCreate || github ? html`<div class="ml-auto flex items-center gap-2">
43
+ ${opts.quickCreate ? html`<button type="button" data-slot="button" data-variant="default" data-size="sm" class=${cn(buttonClass({ size: 'sm' }), 'hidden h-7 sm:flex')}>
44
+ ${opts.quickCreateIcon ?? CirclePlusIcon()}
45
+ <span>Quick Create</span>
46
+ </button>` : ''}
47
+ ${github ? html`<a href=${github} rel="noopener noreferrer" target="_blank" data-slot="button" data-variant="ghost" data-size="sm" class=${cn(buttonClass({ variant: 'ghost', size: 'sm' }), 'hidden no-underline sm:flex dark:text-foreground')}>GitHub</a>` : ''}
48
+ </div>` : ''}
49
+ </div>
50
+ </header>
51
+ `;
52
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The dashboard-01 block's page: an inset sidebar beside a header, four
3
+ * metric cards, an interactive area chart and a data table.
4
+ *
5
+ * Installed by `npx @webjsdev/ui add dashboard-01` at `app/dashboard/page.ts`.
6
+ * It is app code you own, so edit it freely: replace `dashboardData` with
7
+ * rows from your own query. Ported from shadcn/ui's dashboard-01.
8
+ */
9
+ import { html } from '@webjsdev/core';
10
+ import type { Metadata } from '@webjsdev/core';
11
+ import '../../components/sidebar.ts';
12
+ import { appSidebar } from './components/app-sidebar.ts';
13
+ import { chartAreaInteractive } from './components/chart-area-interactive.ts';
14
+ import { dashboardData } from './components/dashboard-data.ts';
15
+ import { dataTable } from './components/data-table.ts';
16
+ import { sectionCards } from './components/section-cards.ts';
17
+ import { siteHeader } from './components/site-header.ts';
18
+
19
+ export const metadata: Metadata = { title: 'Dashboard' };
20
+
21
+ export default function DashboardPage() {
22
+ return html`
23
+ <ui-sidebar-provider class="[--header-height:calc(var(--spacing)*12)]">
24
+ ${appSidebar({ variant: 'inset' })}
25
+ <ui-sidebar-inset>
26
+ ${siteHeader()}
27
+ <div class="flex flex-1 flex-col">
28
+ <div class="@container/main flex flex-1 flex-col gap-2">
29
+ <div class="flex flex-col gap-4 py-4 md:gap-6 md:py-6">
30
+ ${sectionCards()}
31
+ <div class="px-4 lg:px-6">${chartAreaInteractive()}</div>
32
+ ${dataTable({ data: dashboardData })}
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </ui-sidebar-inset>
37
+ </ui-sidebar-provider>
38
+ `;
39
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The login-01 form: a card with an email and password form, a
3
+ * forgot-password link, and a Google button. A fragment helper (a function
4
+ * returning an `html` template), so it renders on the server and ships no
5
+ * JavaScript. Ported from shadcn/ui's login-01.
6
+ *
7
+ * The `<form>` has no `action` yet. Bind a server action from a
8
+ * `'use server'` file (`<form action=${signIn}>`) before you ship it: the
9
+ * framework then supplies `method="post"`, and the no-JS post, the 422
10
+ * re-render with `fieldErrors` / `values`, and the 303 redirect all work.
11
+ * Until it is bound, the form submits as a GET back to the page with the
12
+ * typed values in the URL. The Google button is a placeholder for your
13
+ * provider's sign-in link.
14
+ */
15
+ import { html } from '@webjsdev/core';
16
+ import { cn } from '../../../lib/utils.ts';
17
+ import { buttonClass } from '../../../components/button.ts';
18
+ import {
19
+ cardClass,
20
+ cardContentClass,
21
+ cardDescriptionClass,
22
+ cardHeaderClass,
23
+ cardTitleClass,
24
+ } from '../../../components/card.ts';
25
+ import {
26
+ fieldClass,
27
+ fieldDescriptionClass,
28
+ fieldGroupClass,
29
+ fieldLabelClass,
30
+ } from '../../../components/field.ts';
31
+ import { inputClass } from '../../../components/input.ts';
32
+
33
+ export function loginForm(opts: { class?: string } = {}) {
34
+ return html`
35
+ <div class=${cn('flex flex-col gap-6', opts.class)}>
36
+ <div class=${cardClass()} data-slot="card" data-size="default">
37
+ <div class=${cardHeaderClass()} data-slot="card-header">
38
+ <h1 class=${cardTitleClass()} data-slot="card-title">Login to your account</h1>
39
+ <p class=${cardDescriptionClass()} data-slot="card-description">
40
+ Enter your email below to login to your account
41
+ </p>
42
+ </div>
43
+ <div class=${cardContentClass()} data-slot="card-content">
44
+ <form>
45
+ <div class=${fieldGroupClass()} data-slot="field-group">
46
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
47
+ <label class=${fieldLabelClass()} data-slot="field-label" for="email">Email</label>
48
+ <input class=${inputClass()} data-slot="input" id="email" name="email" type="email" autocomplete="email" placeholder="m@example.com" required>
49
+ </div>
50
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
51
+ <div class="flex items-center">
52
+ <label class=${fieldLabelClass()} data-slot="field-label" for="password">Password</label>
53
+ <a href="#" class="ml-auto inline-block text-sm underline-offset-4 hover:underline">Forgot your password?</a>
54
+ </div>
55
+ <input class=${inputClass()} data-slot="input" id="password" name="password" type="password" autocomplete="current-password" required>
56
+ </div>
57
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
58
+ <button class=${buttonClass()} data-slot="button" type="submit">Login</button>
59
+ <button class=${buttonClass({ variant: 'outline' })} data-slot="button" type="button">Login with Google</button>
60
+ <p class=${cn(fieldDescriptionClass(), 'text-center')} data-slot="field-description">
61
+ Don't have an account? <a href="/signup">Sign up</a>
62
+ </p>
63
+ </div>
64
+ </div>
65
+ </form>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ `;
70
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The login-01 block's page: a simple login form, centred on the page.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add login-01` at `app/login/page.ts`. It is
5
+ * app code you own, so edit it freely. Ported from shadcn/ui's login-01.
6
+ */
7
+ import { html } from '@webjsdev/core';
8
+ import type { Metadata } from '@webjsdev/core';
9
+ import { loginForm } from './components/login-form.ts';
10
+
11
+ export const metadata: Metadata = { title: 'Login' };
12
+
13
+ export default function LoginPage() {
14
+ return html`
15
+ <div class="flex min-h-svh w-full items-center justify-center p-6 md:p-10">
16
+ <div class="w-full max-w-sm">${loginForm()}</div>
17
+ </div>
18
+ `;
19
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * The login-02 form: a heading, an email and password form, and a GitHub
3
+ * button under an "Or continue with" separator, laid straight on the page
4
+ * with no card. A fragment helper (a function returning an `html` template),
5
+ * so it renders on the server and ships no JavaScript. Ported from
6
+ * shadcn/ui's login-02.
7
+ *
8
+ * The `<form>` has no `action` yet. Bind a server action from a
9
+ * `'use server'` file (`<form action=${signIn}>`) before you ship it: the
10
+ * framework then supplies `method="post"`, and the no-JS post, the 422
11
+ * re-render with `fieldErrors` / `values`, and the 303 redirect all work.
12
+ * Until it is bound, the form submits as a GET back to the page with the
13
+ * typed values in the URL. The GitHub button is a placeholder for your
14
+ * provider's sign-in link.
15
+ */
16
+ import { html } from '@webjsdev/core';
17
+ import { cn } from '../../../lib/utils.ts';
18
+ import { buttonClass } from '../../../components/button.ts';
19
+ import {
20
+ fieldClass,
21
+ fieldDescriptionClass,
22
+ fieldGroupClass,
23
+ fieldLabelClass,
24
+ fieldSeparatorClass,
25
+ fieldSeparatorContentClass,
26
+ } from '../../../components/field.ts';
27
+ import { inputClass } from '../../../components/input.ts';
28
+
29
+ const GITHUB = 'M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12';
30
+
31
+ export function loginForm(opts: { class?: string } = {}) {
32
+ return html`
33
+ <form class=${cn('flex flex-col gap-6', opts.class)}>
34
+ <div class=${fieldGroupClass()} data-slot="field-group">
35
+ <div class="flex flex-col items-center gap-1 text-center">
36
+ <h1 class="text-2xl font-bold">Login to your account</h1>
37
+ <p class="text-sm text-balance text-muted-foreground">Enter your email below to login to your account</p>
38
+ </div>
39
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
40
+ <label class=${fieldLabelClass()} data-slot="field-label" for="email">Email</label>
41
+ <input class=${cn(inputClass(), 'bg-background')} data-slot="input" id="email" name="email" type="email" autocomplete="email" placeholder="m@example.com" required>
42
+ </div>
43
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
44
+ <div class="flex items-center">
45
+ <label class=${fieldLabelClass()} data-slot="field-label" for="password">Password</label>
46
+ <a href="#" class="ml-auto text-sm underline-offset-4 hover:underline">Forgot your password?</a>
47
+ </div>
48
+ <input class=${cn(inputClass(), 'bg-background')} data-slot="input" id="password" name="password" type="password" autocomplete="current-password" required>
49
+ </div>
50
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
51
+ <button class=${buttonClass()} data-slot="button" type="submit">Login</button>
52
+ </div>
53
+ <div class=${fieldSeparatorClass()} data-slot="field-separator" role="none">
54
+ <span class=${fieldSeparatorContentClass()} data-slot="field-separator-content">Or continue with</span>
55
+ </div>
56
+ <div class=${fieldClass()} data-slot="field" data-orientation="vertical">
57
+ <button class=${buttonClass({ variant: 'outline' })} data-slot="button" type="button">
58
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true"><path d=${GITHUB} fill="currentColor"></path></svg>
59
+ Login with GitHub
60
+ </button>
61
+ <p class=${cn(fieldDescriptionClass(), 'text-center')} data-slot="field-description">
62
+ Don't have an account? <a href="/signup" class="underline underline-offset-4">Sign up</a>
63
+ </p>
64
+ </div>
65
+ </div>
66
+ </form>
67
+ `;
68
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The login-02 block's page: a two column login page, the form on one side
3
+ * and a cover image on the other (hidden below `lg`).
4
+ *
5
+ * Installed by `npx @webjsdev/ui add login-02` at `app/login/page.ts`, with
6
+ * the cover at `public/placeholder.svg`. Swap in your own image and brand.
7
+ * Ported from shadcn/ui's login-02.
8
+ */
9
+ import { html } from '@webjsdev/core';
10
+ import type { Metadata } from '@webjsdev/core';
11
+ import { loginForm } from './components/login-form.ts';
12
+
13
+ export const metadata: Metadata = { title: 'Login' };
14
+
15
+ export default function LoginPage() {
16
+ return html`
17
+ <div class="grid min-h-svh lg:grid-cols-2">
18
+ <div class="flex flex-col gap-4 p-6 md:p-10">
19
+ <div class="flex justify-center gap-2 md:justify-start">
20
+ <a href="/" class="flex items-center gap-2 font-medium">
21
+ <div class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground">
22
+ <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" class="size-4" aria-hidden="true"><path d="M7 2h10"></path><path d="M5 6h14"></path><rect width="18" height="12" x="3" y="10" rx="2"></rect></svg>
23
+ </div>
24
+ Acme Inc.
25
+ </a>
26
+ </div>
27
+ <div class="flex flex-1 items-center justify-center">
28
+ <div class="w-full max-w-xs">${loginForm()}</div>
29
+ </div>
30
+ </div>
31
+ <div class="relative hidden bg-muted lg:block">
32
+ <img src="/public/placeholder.svg" alt="" class="absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale">
33
+ </div>
34
+ </div>
35
+ `;
36
+ }