@webjsdev/ui 0.3.16 → 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 +71 -10
  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 +88 -0
  284. package/packages/registry/components/field.ts +165 -0
  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 +66 -0
  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 +4092 -60
  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,89 @@
1
+ /**
2
+ * A donut chart with text, a chart block ported from shadcn/ui's chart-pie-donut-text.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-donut-text` at
5
+ * `components/charts/chart-pie-donut-text.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieDonutText()}`.
7
+ */
8
+ import { html, svg } from '@webjsdev/core';
9
+ import { cn } from '../../lib/utils.ts';
10
+ import {
11
+ cardClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass,
12
+ } from '../../components/card.ts';
13
+ import { pieChart, type ChartConfig } from '../../components/chart.ts';
14
+
15
+ const chartData = [
16
+ { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
17
+ { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
18
+ { browser: 'firefox', visitors: 287, fill: 'var(--color-firefox)' },
19
+ { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
20
+ { browser: 'other', visitors: 190, fill: 'var(--color-other)' },
21
+ ];
22
+
23
+ const chartConfig = {
24
+ visitors: {
25
+ label: 'Visitors',
26
+ },
27
+ chrome: {
28
+ label: 'Chrome',
29
+ color: 'var(--chart-1)',
30
+ },
31
+ safari: {
32
+ label: 'Safari',
33
+ color: 'var(--chart-2)',
34
+ },
35
+ firefox: {
36
+ label: 'Firefox',
37
+ color: 'var(--chart-3)',
38
+ },
39
+ edge: {
40
+ label: 'Edge',
41
+ color: 'var(--chart-4)',
42
+ },
43
+ other: {
44
+ label: 'Other',
45
+ color: 'var(--chart-5)',
46
+ },
47
+ } satisfies ChartConfig;
48
+
49
+ // lucide's trending-up, the icon in shadcn's footer.
50
+ const TrendingUp = (cls = '') => svg`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class=${'lucide lucide-trending-up ' + cls}><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>`;
51
+
52
+ const totalVisitors = chartData.reduce((acc, curr) => acc + curr.visitors, 0);
53
+
54
+ export default function ChartPieDonutText() {
55
+ return html`
56
+ <div data-slot="card" class=${cn(cardClass(), 'flex flex-col')}>
57
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'items-center pb-0')}>
58
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Donut with Text</div>
59
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
60
+ </div>
61
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex-1 pb-0')}>
62
+ ${pieChart({
63
+ config: chartConfig,
64
+ class: 'mx-auto aspect-square max-h-[250px]',
65
+ data: chartData,
66
+ title: 'Visitors by browser',
67
+ tooltip: { cursor: false, hideLabel: true },
68
+ pies: [{
69
+ dataKey: 'visitors',
70
+ nameKey: 'browser',
71
+ innerRadius: 60,
72
+ strokeWidth: 5,
73
+ center: ({ cx, cy }) => svg`
74
+ <text x=${cx} y=${cy} text-anchor="middle" dominant-baseline="middle">
75
+ <tspan x=${cx} y=${cy} class="fill-foreground text-3xl font-bold">${totalVisitors.toLocaleString('en-US')}</tspan>
76
+ <tspan x=${cx} y=${cy + 24} class="fill-muted-foreground">Visitors</tspan>
77
+ </text>`,
78
+ }],
79
+ })}
80
+ </div>
81
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col gap-2 text-sm')}>
82
+ <div class="flex items-center gap-2 leading-none font-medium">
83
+ Trending up by 5.2% this month ${TrendingUp('h-4 w-4')}
84
+ </div>
85
+ <div class="leading-none text-muted-foreground">Showing total visitors for the last 6 months</div>
86
+ </div>
87
+ </div>
88
+ `;
89
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * A donut chart, a chart block ported from shadcn/ui's chart-pie-donut.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-donut` at
5
+ * `components/charts/chart-pie-donut.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieDonut()}`.
7
+ */
8
+ import { html, svg } from '@webjsdev/core';
9
+ import { cn } from '../../lib/utils.ts';
10
+ import {
11
+ cardClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass,
12
+ } from '../../components/card.ts';
13
+ import { pieChart, type ChartConfig } from '../../components/chart.ts';
14
+
15
+ const chartData = [
16
+ { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
17
+ { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
18
+ { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
19
+ { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
20
+ { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
21
+ ];
22
+
23
+ const chartConfig = {
24
+ visitors: {
25
+ label: 'Visitors',
26
+ },
27
+ chrome: {
28
+ label: 'Chrome',
29
+ color: 'var(--chart-1)',
30
+ },
31
+ safari: {
32
+ label: 'Safari',
33
+ color: 'var(--chart-2)',
34
+ },
35
+ firefox: {
36
+ label: 'Firefox',
37
+ color: 'var(--chart-3)',
38
+ },
39
+ edge: {
40
+ label: 'Edge',
41
+ color: 'var(--chart-4)',
42
+ },
43
+ other: {
44
+ label: 'Other',
45
+ color: 'var(--chart-5)',
46
+ },
47
+ } satisfies ChartConfig;
48
+
49
+ // lucide's trending-up, the icon in shadcn's footer.
50
+ const TrendingUp = (cls = '') => svg`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class=${'lucide lucide-trending-up ' + cls}><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>`;
51
+
52
+ export default function ChartPieDonut() {
53
+ return html`
54
+ <div data-slot="card" class=${cn(cardClass(), 'flex flex-col')}>
55
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'items-center pb-0')}>
56
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Donut</div>
57
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
58
+ </div>
59
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex-1 pb-0')}>
60
+ ${pieChart({
61
+ config: chartConfig,
62
+ class: 'mx-auto aspect-square max-h-[250px]',
63
+ data: chartData,
64
+ title: 'Visitors by browser',
65
+ tooltip: { cursor: false, hideLabel: true },
66
+ pies: [{ dataKey: 'visitors', nameKey: 'browser', innerRadius: 60 }],
67
+ })}
68
+ </div>
69
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col gap-2 text-sm')}>
70
+ <div class="flex items-center gap-2 leading-none font-medium">
71
+ Trending up by 5.2% this month ${TrendingUp('h-4 w-4')}
72
+ </div>
73
+ <div class="leading-none text-muted-foreground">Showing total visitors for the last 6 months</div>
74
+ </div>
75
+ </div>
76
+ `;
77
+ }
@@ -0,0 +1,120 @@
1
+ /**
2
+ * An interactive pie chart, a chart block ported from shadcn/ui's chart-pie-interactive.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-interactive` at
5
+ * `components/charts/chart-pie-interactive.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieInteractive()}`.
7
+ *
8
+ * The month picker is a native `<select>` inside `<ui-select>`, and the chart
9
+ * for every month is served; the card shows the chosen one through `:has()`,
10
+ * so the picker works with JavaScript off. shadcn's re-renders one chart from
11
+ * React state instead, and draws a colour swatch beside each month, which a
12
+ * native option cannot hold.
13
+ */
14
+ import { html, svg } from '@webjsdev/core';
15
+ import { cn } from '../../lib/utils.ts';
16
+ import {
17
+ cardClass, cardContentClass, cardDescriptionClass, cardHeaderClass, cardTitleClass,
18
+ } from '../../components/card.ts';
19
+ import { selectTriggerClass } from '../../components/select.ts';
20
+ import { chartSector, chartStyle, pieChart, type ChartConfig } from '../../components/chart.ts';
21
+
22
+ const chartConfig = {
23
+ visitors: {
24
+ label: 'Visitors',
25
+ },
26
+ desktop: {
27
+ label: 'Desktop',
28
+ },
29
+ mobile: {
30
+ label: 'Mobile',
31
+ },
32
+ january: {
33
+ label: 'January',
34
+ color: 'var(--chart-1)',
35
+ },
36
+ february: {
37
+ label: 'February',
38
+ color: 'var(--chart-2)',
39
+ },
40
+ march: {
41
+ label: 'March',
42
+ color: 'var(--chart-3)',
43
+ },
44
+ april: {
45
+ label: 'April',
46
+ color: 'var(--chart-4)',
47
+ },
48
+ may: {
49
+ label: 'May',
50
+ color: 'var(--chart-5)',
51
+ },
52
+ } satisfies ChartConfig;
53
+
54
+ const desktopData = [
55
+ { month: 'january', desktop: 186, fill: 'var(--color-january)' },
56
+ { month: 'february', desktop: 305, fill: 'var(--color-february)' },
57
+ { month: 'march', desktop: 237, fill: 'var(--color-march)' },
58
+ { month: 'april', desktop: 173, fill: 'var(--color-april)' },
59
+ { month: 'may', desktop: 209, fill: 'var(--color-may)' },
60
+ ];
61
+
62
+ const months = desktopData.map((item) => item.month);
63
+
64
+ // Which month's chart shows, read from the picker's checked option. Written
65
+ // out whole so Tailwind finds every class in the source.
66
+ const SHOWN_WHEN: Record<string, string> = {
67
+ january: 'w-full group-has-[option[value=february]:checked]/chart:hidden group-has-[option[value=march]:checked]/chart:hidden group-has-[option[value=april]:checked]/chart:hidden group-has-[option[value=may]:checked]/chart:hidden',
68
+ february: 'hidden w-full group-has-[option[value=february]:checked]/chart:block',
69
+ march: 'hidden w-full group-has-[option[value=march]:checked]/chart:block',
70
+ april: 'hidden w-full group-has-[option[value=april]:checked]/chart:block',
71
+ may: 'hidden w-full group-has-[option[value=may]:checked]/chart:block',
72
+ };
73
+
74
+ // The donut with `activeIndex` pulled out and ringed, and its total in the middle.
75
+ function chart(activeIndex: number) {
76
+ return pieChart({
77
+ config: chartConfig,
78
+ class: 'mx-auto aspect-square w-full max-w-[300px]',
79
+ width: 300,
80
+ data: desktopData,
81
+ title: `Desktop visitors by month, ${chartConfig[months[activeIndex] as keyof typeof chartConfig].label} highlighted`,
82
+ tooltip: { cursor: false, hideLabel: true },
83
+ pies: [{
84
+ dataKey: 'desktop',
85
+ nameKey: 'month',
86
+ innerRadius: 60,
87
+ strokeWidth: 5,
88
+ shape: ({ index, outerRadius, ...props }) => index === activeIndex
89
+ ? svg`<g>${chartSector({ ...props, outerRadius: outerRadius + 10 })}${chartSector({ ...props, outerRadius: outerRadius + 25, innerRadius: outerRadius + 12 })}</g>`
90
+ : chartSector({ ...props, outerRadius }),
91
+ center: ({ cx, cy }) => svg`
92
+ <text x=${cx} y=${cy} text-anchor="middle" dominant-baseline="middle">
93
+ <tspan x=${cx} y=${cy} class="fill-foreground text-3xl font-bold">${desktopData[activeIndex].desktop.toLocaleString('en-US')}</tspan>
94
+ <tspan x=${cx} y=${cy + 24} class="fill-muted-foreground">Visitors</tspan>
95
+ </text>`,
96
+ }],
97
+ });
98
+ }
99
+
100
+ export default function ChartPieInteractive() {
101
+ // shadcn's ChartStyle on the card, so the month colours reach the header too.
102
+ return html`
103
+ <div data-slot="card" data-chart="pie-interactive" style=${chartStyle(chartConfig)} class=${cn(cardClass(), 'group/chart flex flex-col')}>
104
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'flex-row items-start space-y-0 pb-0')}>
105
+ <div class="grid gap-1">
106
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Interactive</div>
107
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
108
+ </div>
109
+ <ui-select class="ml-auto w-fit">
110
+ <select aria-label="Select a value" class=${cn(selectTriggerClass(), 'h-7 w-[130px] rounded-lg pl-2.5')}>
111
+ ${months.map((key, i) => html`<option value=${key} ?selected=${i === 0}>${chartConfig[key as keyof typeof chartConfig].label}</option>`)}
112
+ </select>
113
+ </ui-select>
114
+ </div>
115
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex flex-1 justify-center pb-0')}>
116
+ ${months.map((key, i) => html`<div class=${SHOWN_WHEN[key]}>${chart(i)}</div>`)}
117
+ </div>
118
+ </div>
119
+ `;
120
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * A pie chart with a custom label, a chart block ported from shadcn/ui's chart-pie-label-custom.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-label-custom` at
5
+ * `components/charts/chart-pie-label-custom.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieLabelCustom()}`.
7
+ */
8
+ import { html, svg } from '@webjsdev/core';
9
+ import { cn } from '../../lib/utils.ts';
10
+ import {
11
+ cardClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass,
12
+ } from '../../components/card.ts';
13
+ import { pieChart, type ChartConfig } from '../../components/chart.ts';
14
+
15
+ const chartData = [
16
+ { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
17
+ { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
18
+ { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
19
+ { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
20
+ { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
21
+ ];
22
+
23
+ const chartConfig = {
24
+ visitors: {
25
+ label: 'Visitors',
26
+ },
27
+ chrome: {
28
+ label: 'Chrome',
29
+ color: 'var(--chart-1)',
30
+ },
31
+ safari: {
32
+ label: 'Safari',
33
+ color: 'var(--chart-2)',
34
+ },
35
+ firefox: {
36
+ label: 'Firefox',
37
+ color: 'var(--chart-3)',
38
+ },
39
+ edge: {
40
+ label: 'Edge',
41
+ color: 'var(--chart-4)',
42
+ },
43
+ other: {
44
+ label: 'Other',
45
+ color: 'var(--chart-5)',
46
+ },
47
+ } satisfies ChartConfig;
48
+
49
+ // lucide's trending-up, the icon in shadcn's footer.
50
+ const TrendingUp = (cls = '') => svg`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class=${'lucide lucide-trending-up ' + cls}><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>`;
51
+
52
+ export default function ChartPieLabelCustom() {
53
+ return html`
54
+ <div data-slot="card" class=${cn(cardClass(), 'flex flex-col')}>
55
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'items-center pb-0')}>
56
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Custom Label</div>
57
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
58
+ </div>
59
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex-1 pb-0')}>
60
+ ${pieChart({
61
+ config: chartConfig,
62
+ class: 'mx-auto aspect-square max-h-[250px] px-0',
63
+ data: chartData,
64
+ title: 'Visitors by browser',
65
+ tooltip: { nameKey: 'visitors', hideLabel: true },
66
+ pies: [{
67
+ dataKey: 'visitors',
68
+ labelLine: false,
69
+ label: ({ x, y, textAnchor, datum }) => svg`<text x=${x} y=${y} text-anchor=${textAnchor} fill="var(--foreground)">${datum.visitors}</text>`,
70
+ nameKey: 'browser',
71
+ }],
72
+ })}
73
+ </div>
74
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col gap-2 text-sm')}>
75
+ <div class="flex items-center gap-2 leading-none font-medium">
76
+ Trending up by 5.2% this month ${TrendingUp('h-4 w-4')}
77
+ </div>
78
+ <div class="leading-none text-muted-foreground">Showing total visitors for the last 6 months</div>
79
+ </div>
80
+ </div>
81
+ `;
82
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * A pie chart with a label list, a chart block ported from shadcn/ui's chart-pie-label-list.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-label-list` at
5
+ * `components/charts/chart-pie-label-list.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieLabelList()}`.
7
+ */
8
+ import { html, svg } from '@webjsdev/core';
9
+ import { cn } from '../../lib/utils.ts';
10
+ import {
11
+ cardClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass,
12
+ } from '../../components/card.ts';
13
+ import { pieChart, type ChartConfig } from '../../components/chart.ts';
14
+
15
+ const chartData = [
16
+ { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
17
+ { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
18
+ { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
19
+ { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
20
+ { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
21
+ ];
22
+
23
+ const chartConfig = {
24
+ visitors: {
25
+ label: 'Visitors',
26
+ },
27
+ chrome: {
28
+ label: 'Chrome',
29
+ color: 'var(--chart-1)',
30
+ },
31
+ safari: {
32
+ label: 'Safari',
33
+ color: 'var(--chart-2)',
34
+ },
35
+ firefox: {
36
+ label: 'Firefox',
37
+ color: 'var(--chart-3)',
38
+ },
39
+ edge: {
40
+ label: 'Edge',
41
+ color: 'var(--chart-4)',
42
+ },
43
+ other: {
44
+ label: 'Other',
45
+ color: 'var(--chart-5)',
46
+ },
47
+ } satisfies ChartConfig;
48
+
49
+ // lucide's trending-up, the icon in shadcn's footer.
50
+ const TrendingUp = (cls = '') => svg`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class=${'lucide lucide-trending-up ' + cls}><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>`;
51
+
52
+ export default function ChartPieLabelList() {
53
+ return html`
54
+ <div data-slot="card" class=${cn(cardClass(), 'flex flex-col')}>
55
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'items-center pb-0')}>
56
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Label List</div>
57
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
58
+ </div>
59
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex-1 pb-0')}>
60
+ ${pieChart({
61
+ config: chartConfig,
62
+ class: 'mx-auto aspect-square max-h-[250px] [&_.ui-chart-text]:fill-background',
63
+ data: chartData,
64
+ title: 'Visitors by browser',
65
+ tooltip: { nameKey: 'visitors', hideLabel: true },
66
+ pies: [{
67
+ dataKey: 'visitors',
68
+ labels: [{
69
+ dataKey: 'browser',
70
+ class: 'fill-background',
71
+ stroke: 'none',
72
+ fontSize: 12,
73
+ formatter: (value) => chartConfig[value as keyof typeof chartConfig]?.label,
74
+ }],
75
+ }],
76
+ })}
77
+ </div>
78
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col gap-2 text-sm')}>
79
+ <div class="flex items-center gap-2 leading-none font-medium">
80
+ Trending up by 5.2% this month ${TrendingUp('h-4 w-4')}
81
+ </div>
82
+ <div class="leading-none text-muted-foreground">Showing total visitors for the last 6 months</div>
83
+ </div>
84
+ </div>
85
+ `;
86
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * A pie chart with a label, a chart block ported from shadcn/ui's chart-pie-label.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-label` at
5
+ * `components/charts/chart-pie-label.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieLabel()}`.
7
+ */
8
+ import { html, svg } from '@webjsdev/core';
9
+ import { cn } from '../../lib/utils.ts';
10
+ import {
11
+ cardClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass,
12
+ } from '../../components/card.ts';
13
+ import { pieChart, type ChartConfig } from '../../components/chart.ts';
14
+
15
+ const chartData = [
16
+ { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
17
+ { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
18
+ { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
19
+ { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
20
+ { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
21
+ ];
22
+
23
+ const chartConfig = {
24
+ visitors: {
25
+ label: 'Visitors',
26
+ },
27
+ chrome: {
28
+ label: 'Chrome',
29
+ color: 'var(--chart-1)',
30
+ },
31
+ safari: {
32
+ label: 'Safari',
33
+ color: 'var(--chart-2)',
34
+ },
35
+ firefox: {
36
+ label: 'Firefox',
37
+ color: 'var(--chart-3)',
38
+ },
39
+ edge: {
40
+ label: 'Edge',
41
+ color: 'var(--chart-4)',
42
+ },
43
+ other: {
44
+ label: 'Other',
45
+ color: 'var(--chart-5)',
46
+ },
47
+ } satisfies ChartConfig;
48
+
49
+ // lucide's trending-up, the icon in shadcn's footer.
50
+ const TrendingUp = (cls = '') => svg`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class=${'lucide lucide-trending-up ' + cls}><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>`;
51
+
52
+ export default function ChartPieLabel() {
53
+ return html`
54
+ <div data-slot="card" class=${cn(cardClass(), 'flex flex-col')}>
55
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'items-center pb-0')}>
56
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Label</div>
57
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
58
+ </div>
59
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex-1 pb-0')}>
60
+ ${pieChart({
61
+ config: chartConfig,
62
+ class: 'mx-auto aspect-square max-h-[250px] pb-0 [&_.ui-chart-pie-label-text]:fill-foreground',
63
+ data: chartData,
64
+ title: 'Visitors by browser',
65
+ tooltip: { hideLabel: true },
66
+ pies: [{ dataKey: 'visitors', label: true, nameKey: 'browser' }],
67
+ })}
68
+ </div>
69
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col gap-2 text-sm')}>
70
+ <div class="flex items-center gap-2 leading-none font-medium">
71
+ Trending up by 5.2% this month ${TrendingUp('h-4 w-4')}
72
+ </div>
73
+ <div class="leading-none text-muted-foreground">Showing total visitors for the last 6 months</div>
74
+ </div>
75
+ </div>
76
+ `;
77
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * A pie chart with a legend, a chart block ported from shadcn/ui's chart-pie-legend.
3
+ *
4
+ * Installed by `npx @webjsdev/ui add chart-pie-legend` at
5
+ * `components/charts/chart-pie-legend.ts`. It is app code you own, so edit it
6
+ * freely, and render it from any page with `${ChartPieLegend()}`.
7
+ */
8
+ import { html, svg } from '@webjsdev/core';
9
+ import { cn } from '../../lib/utils.ts';
10
+ import {
11
+ cardClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass,
12
+ } from '../../components/card.ts';
13
+ import { pieChart, type ChartConfig } from '../../components/chart.ts';
14
+
15
+ const chartData = [
16
+ { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
17
+ { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
18
+ { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
19
+ { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
20
+ { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
21
+ ];
22
+
23
+ const chartConfig = {
24
+ visitors: {
25
+ label: 'Visitors',
26
+ },
27
+ chrome: {
28
+ label: 'Chrome',
29
+ color: 'var(--chart-1)',
30
+ },
31
+ safari: {
32
+ label: 'Safari',
33
+ color: 'var(--chart-2)',
34
+ },
35
+ firefox: {
36
+ label: 'Firefox',
37
+ color: 'var(--chart-3)',
38
+ },
39
+ edge: {
40
+ label: 'Edge',
41
+ color: 'var(--chart-4)',
42
+ },
43
+ other: {
44
+ label: 'Other',
45
+ color: 'var(--chart-5)',
46
+ },
47
+ } satisfies ChartConfig;
48
+
49
+ // lucide's trending-up, the icon in shadcn's footer.
50
+ const TrendingUp = (cls = '') => svg`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class=${'lucide lucide-trending-up ' + cls}><path d="M16 7h6v6"></path><path d="m22 7-8.5 8.5-5-5L2 17"></path></svg>`;
51
+
52
+ export default function ChartPieLegend() {
53
+ return html`
54
+ <div data-slot="card" class=${cn(cardClass(), 'flex flex-col')}>
55
+ <div data-slot="card-header" class=${cn(cardHeaderClass(), 'items-center pb-0')}>
56
+ <div data-slot="card-title" class=${cardTitleClass()}>Pie Chart - Legend</div>
57
+ <div data-slot="card-description" class=${cardDescriptionClass()}>January - June 2024</div>
58
+ </div>
59
+ <div data-slot="card-content" class=${cn(cardContentClass(), 'flex-1 pb-0')}>
60
+ ${pieChart({
61
+ config: chartConfig,
62
+ class: 'mx-auto aspect-square max-h-[300px]',
63
+ width: 300,
64
+ data: chartData,
65
+ title: 'Visitors by browser',
66
+ tooltip: false,
67
+ legend: { nameKey: 'browser', class: '-translate-y-2 flex-wrap gap-2 *:basis-1/4 *:justify-center', height: 48 },
68
+ pies: [{ dataKey: 'visitors' }],
69
+ })}
70
+ </div>
71
+ <div data-slot="card-footer" class=${cn(cardFooterClass(), 'flex-col gap-2 text-sm')}>
72
+ <div class="flex items-center gap-2 leading-none font-medium">
73
+ Trending up by 5.2% this month ${TrendingUp('h-4 w-4')}
74
+ </div>
75
+ <div class="leading-none text-muted-foreground">Showing total visitors for the last 6 months</div>
76
+ </div>
77
+ </div>
78
+ `;
79
+ }