create-tauri-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/README.md +41 -0
  2. package/dist/index.mjs +53 -0
  3. package/index.js +3 -0
  4. package/package.json +62 -0
  5. package/templates/next/.env +1 -0
  6. package/templates/next/.github/workflows/release.yml +108 -0
  7. package/templates/next/.vscode/extensions.json +3 -0
  8. package/templates/next/LICENSE +21 -0
  9. package/templates/next/README.md +82 -0
  10. package/templates/next/app-icon.png +0 -0
  11. package/templates/next/next-env.d.ts +5 -0
  12. package/templates/next/next.config.js +17 -0
  13. package/templates/next/package.json +82 -0
  14. package/templates/next/pnpm-lock.yaml +4318 -0
  15. package/templates/next/postcss.config.js +6 -0
  16. package/templates/next/prettier.config.js +35 -0
  17. package/templates/next/public/avatars/01.png +0 -0
  18. package/templates/next/public/avatars/02.png +0 -0
  19. package/templates/next/public/avatars/03.png +0 -0
  20. package/templates/next/public/avatars/04.png +0 -0
  21. package/templates/next/public/avatars/05.png +0 -0
  22. package/templates/next/src/app/examples/authentication/components/user-auth-form.tsx +71 -0
  23. package/templates/next/src/app/examples/authentication/page.tsx +80 -0
  24. package/templates/next/src/app/examples/cards/components/cookie-settings.tsx +60 -0
  25. package/templates/next/src/app/examples/cards/components/create-account.tsx +60 -0
  26. package/templates/next/src/app/examples/cards/components/date-picker.tsx +18 -0
  27. package/templates/next/src/app/examples/cards/components/github-card.tsx +81 -0
  28. package/templates/next/src/app/examples/cards/components/notifications.tsx +51 -0
  29. package/templates/next/src/app/examples/cards/components/payment-method.tsx +117 -0
  30. package/templates/next/src/app/examples/cards/components/report-an-issue.tsx +82 -0
  31. package/templates/next/src/app/examples/cards/components/share-document.tsx +116 -0
  32. package/templates/next/src/app/examples/cards/components/team-members.tsx +147 -0
  33. package/templates/next/src/app/examples/cards/page.tsx +75 -0
  34. package/templates/next/src/app/examples/cards/styles.css +63 -0
  35. package/templates/next/src/app/examples/dashboard/components/date-range-picker.tsx +66 -0
  36. package/templates/next/src/app/examples/dashboard/components/main-nav.tsx +38 -0
  37. package/templates/next/src/app/examples/dashboard/components/overview.tsx +78 -0
  38. package/templates/next/src/app/examples/dashboard/components/recent-sales.tsx +67 -0
  39. package/templates/next/src/app/examples/dashboard/components/search.tsx +13 -0
  40. package/templates/next/src/app/examples/dashboard/components/team-switcher.tsx +205 -0
  41. package/templates/next/src/app/examples/dashboard/components/user-nav.tsx +67 -0
  42. package/templates/next/src/app/examples/dashboard/page.tsx +147 -0
  43. package/templates/next/src/app/examples/forms/account/account-form.tsx +219 -0
  44. package/templates/next/src/app/examples/forms/account/page.tsx +18 -0
  45. package/templates/next/src/app/examples/forms/appearance/appearance-form.tsx +164 -0
  46. package/templates/next/src/app/examples/forms/appearance/page.tsx +18 -0
  47. package/templates/next/src/app/examples/forms/components/sidebar-nav.tsx +43 -0
  48. package/templates/next/src/app/examples/forms/display/display-form.tsx +132 -0
  49. package/templates/next/src/app/examples/forms/display/page.tsx +17 -0
  50. package/templates/next/src/app/examples/forms/layout.tsx +57 -0
  51. package/templates/next/src/app/examples/forms/notifications/notifications-form.tsx +221 -0
  52. package/templates/next/src/app/examples/forms/notifications/page.tsx +18 -0
  53. package/templates/next/src/app/examples/forms/page.tsx +17 -0
  54. package/templates/next/src/app/examples/forms/profile-form.tsx +190 -0
  55. package/templates/next/src/app/examples/layout.tsx +7 -0
  56. package/templates/next/src/app/examples/music/components/album-artwork.tsx +84 -0
  57. package/templates/next/src/app/examples/music/components/menu.tsx +178 -0
  58. package/templates/next/src/app/examples/music/components/podcast-empty-placeholder.tsx +53 -0
  59. package/templates/next/src/app/examples/music/components/sidebar.tsx +100 -0
  60. package/templates/next/src/app/examples/music/data/albums.ts +71 -0
  61. package/templates/next/src/app/examples/music/data/playlists.ts +16 -0
  62. package/templates/next/src/app/examples/music/page.tsx +134 -0
  63. package/templates/next/src/app/examples/music/styles.css +65 -0
  64. package/templates/next/src/app/examples/playground/components/code-viewer.tsx +89 -0
  65. package/templates/next/src/app/examples/playground/components/icons.tsx +153 -0
  66. package/templates/next/src/app/examples/playground/components/maxlength-selector.tsx +55 -0
  67. package/templates/next/src/app/examples/playground/components/model-selector.tsx +163 -0
  68. package/templates/next/src/app/examples/playground/components/preset-actions.tsx +124 -0
  69. package/templates/next/src/app/examples/playground/components/preset-save.tsx +44 -0
  70. package/templates/next/src/app/examples/playground/components/preset-selector.tsx +82 -0
  71. package/templates/next/src/app/examples/playground/components/preset-share.tsx +46 -0
  72. package/templates/next/src/app/examples/playground/components/temperature-selector.tsx +57 -0
  73. package/templates/next/src/app/examples/playground/components/top-p-selector.tsx +54 -0
  74. package/templates/next/src/app/examples/playground/data/models.ts +62 -0
  75. package/templates/next/src/app/examples/playground/data/presets.ts +47 -0
  76. package/templates/next/src/app/examples/playground/page.tsx +160 -0
  77. package/templates/next/src/app/examples/playground/styles.css +65 -0
  78. package/templates/next/src/app/examples/tasks/components/columns.tsx +120 -0
  79. package/templates/next/src/app/examples/tasks/components/data-table-column-header.tsx +66 -0
  80. package/templates/next/src/app/examples/tasks/components/data-table-faceted-filter.tsx +147 -0
  81. package/templates/next/src/app/examples/tasks/components/data-table-pagination.tsx +97 -0
  82. package/templates/next/src/app/examples/tasks/components/data-table-row-actions.tsx +82 -0
  83. package/templates/next/src/app/examples/tasks/components/data-table-toolbar.tsx +63 -0
  84. package/templates/next/src/app/examples/tasks/components/data-table-view-options.tsx +59 -0
  85. package/templates/next/src/app/examples/tasks/components/data-table.tsx +126 -0
  86. package/templates/next/src/app/examples/tasks/components/user-nav.tsx +67 -0
  87. package/templates/next/src/app/examples/tasks/data/data.tsx +71 -0
  88. package/templates/next/src/app/examples/tasks/data/schema.ts +13 -0
  89. package/templates/next/src/app/examples/tasks/data/seed.ts +20 -0
  90. package/templates/next/src/app/examples/tasks/data/tasks.json +702 -0
  91. package/templates/next/src/app/examples/tasks/page.tsx +47 -0
  92. package/templates/next/src/app/layout.tsx +43 -0
  93. package/templates/next/src/app/page.tsx +5 -0
  94. package/templates/next/src/assets/Inter.var.woff2 +0 -0
  95. package/templates/next/src/assets/logo.png +0 -0
  96. package/templates/next/src/components/examples/.eslintrc.json +6 -0
  97. package/templates/next/src/components/examples/accordion/demo.tsx +32 -0
  98. package/templates/next/src/components/examples/alert/demo.tsx +15 -0
  99. package/templates/next/src/components/examples/alert/destructive.tsx +15 -0
  100. package/templates/next/src/components/examples/alert-dialog/demo.tsx +35 -0
  101. package/templates/next/src/components/examples/aspect-ratio/demo.tsx +16 -0
  102. package/templates/next/src/components/examples/avatar/demo.tsx +10 -0
  103. package/templates/next/src/components/examples/badge/demo.tsx +5 -0
  104. package/templates/next/src/components/examples/badge/destructive.tsx +5 -0
  105. package/templates/next/src/components/examples/badge/outline.tsx +5 -0
  106. package/templates/next/src/components/examples/badge/secondary.tsx +5 -0
  107. package/templates/next/src/components/examples/button/as-child.tsx +10 -0
  108. package/templates/next/src/components/examples/button/demo.tsx +5 -0
  109. package/templates/next/src/components/examples/button/destructive.tsx +5 -0
  110. package/templates/next/src/components/examples/button/ghost.tsx +5 -0
  111. package/templates/next/src/components/examples/button/link.tsx +5 -0
  112. package/templates/next/src/components/examples/button/loading.tsx +12 -0
  113. package/templates/next/src/components/examples/button/outline.tsx +5 -0
  114. package/templates/next/src/components/examples/button/secondary.tsx +5 -0
  115. package/templates/next/src/components/examples/button/with-icon.tsx +11 -0
  116. package/templates/next/src/components/examples/calendar/date-picker.tsx +43 -0
  117. package/templates/next/src/components/examples/calendar/date-range-picker.tsx +65 -0
  118. package/templates/next/src/components/examples/calendar/demo.tsx +18 -0
  119. package/templates/next/src/components/examples/calendar/react-hook-form.tsx +101 -0
  120. package/templates/next/src/components/examples/calendar/with-presets.tsx +62 -0
  121. package/templates/next/src/components/examples/card/demo.tsx +79 -0
  122. package/templates/next/src/components/examples/card/with-form.tsx +59 -0
  123. package/templates/next/src/components/examples/checkbox/demo.tsx +17 -0
  124. package/templates/next/src/components/examples/checkbox/disabled.tsx +15 -0
  125. package/templates/next/src/components/examples/checkbox/react-hook-form-multiple.tsx +127 -0
  126. package/templates/next/src/components/examples/checkbox/react-hook-form-single.tsx +72 -0
  127. package/templates/next/src/components/examples/checkbox/with-text.tsx +22 -0
  128. package/templates/next/src/components/examples/collapsible/demo.tsx +46 -0
  129. package/templates/next/src/components/examples/combobox/demo.tsx +90 -0
  130. package/templates/next/src/components/examples/combobox/dropdown-menu.tsx +110 -0
  131. package/templates/next/src/components/examples/combobox/popover.tsx +124 -0
  132. package/templates/next/src/components/examples/combobox/react-hook-form.tsx +135 -0
  133. package/templates/next/src/components/examples/command/combobox.tsx +90 -0
  134. package/templates/next/src/components/examples/command/demo.tsx +62 -0
  135. package/templates/next/src/components/examples/command/dialog.tsx +86 -0
  136. package/templates/next/src/components/examples/command/dropdown-menu.tsx +110 -0
  137. package/templates/next/src/components/examples/command/popover.tsx +124 -0
  138. package/templates/next/src/components/examples/context-menu/demo.tsx +67 -0
  139. package/templates/next/src/components/examples/data-table/columns.tsx +110 -0
  140. package/templates/next/src/components/examples/data-table/data-table.tsx +185 -0
  141. package/templates/next/src/components/examples/data-table/demo.tsx +41 -0
  142. package/templates/next/src/components/examples/date-picker/demo.tsx +43 -0
  143. package/templates/next/src/components/examples/date-picker/react-hook-form.tsx +101 -0
  144. package/templates/next/src/components/examples/date-picker/with-presets.tsx +62 -0
  145. package/templates/next/src/components/examples/date-picker/with-range.tsx +65 -0
  146. package/templates/next/src/components/examples/dialog/demo.tsx +47 -0
  147. package/templates/next/src/components/examples/dropdown-menu/checkboxes.tsx +53 -0
  148. package/templates/next/src/components/examples/dropdown-menu/demo.tsx +122 -0
  149. package/templates/next/src/components/examples/dropdown-menu/radio-group.tsx +37 -0
  150. package/templates/next/src/components/examples/hover-card/demo.tsx +39 -0
  151. package/templates/next/src/components/examples/index.tsx +213 -0
  152. package/templates/next/src/components/examples/input/demo.tsx +5 -0
  153. package/templates/next/src/components/examples/input/disabled.tsx +5 -0
  154. package/templates/next/src/components/examples/input/file.tsx +11 -0
  155. package/templates/next/src/components/examples/input/react-hook-form.tsx +65 -0
  156. package/templates/next/src/components/examples/input/with-button.tsx +11 -0
  157. package/templates/next/src/components/examples/input/with-label.tsx +11 -0
  158. package/templates/next/src/components/examples/input/with-text.tsx +12 -0
  159. package/templates/next/src/components/examples/label/demo.tsx +13 -0
  160. package/templates/next/src/components/examples/menubar/demo.tsx +107 -0
  161. package/templates/next/src/components/examples/navigation-menu/demo.tsx +144 -0
  162. package/templates/next/src/components/examples/popover/demo.tsx +67 -0
  163. package/templates/next/src/components/examples/progress/demo.tsx +16 -0
  164. package/templates/next/src/components/examples/radio-group/demo.tsx +21 -0
  165. package/templates/next/src/components/examples/radio-group/react-hook-form.tsx +88 -0
  166. package/templates/next/src/components/examples/scroll-area/demo.tsx +26 -0
  167. package/templates/next/src/components/examples/select/demo.tsx +31 -0
  168. package/templates/next/src/components/examples/select/react-hook-form.tsx +83 -0
  169. package/templates/next/src/components/examples/separator/demo.tsx +22 -0
  170. package/templates/next/src/components/examples/sheet/demo.tsx +47 -0
  171. package/templates/next/src/components/examples/sheet/position.tsx +75 -0
  172. package/templates/next/src/components/examples/sheet/size.tsx +75 -0
  173. package/templates/next/src/components/examples/skeleton/demo.tsx +13 -0
  174. package/templates/next/src/components/examples/slider/demo.tsx +16 -0
  175. package/templates/next/src/components/examples/switch/demo.tsx +11 -0
  176. package/templates/next/src/components/examples/switch/react-hook-form.tsx +101 -0
  177. package/templates/next/src/components/examples/table/demo.tsx +80 -0
  178. package/templates/next/src/components/examples/tabs/demo.tsx +69 -0
  179. package/templates/next/src/components/examples/textarea/demo.tsx +5 -0
  180. package/templates/next/src/components/examples/textarea/disabled.tsx +5 -0
  181. package/templates/next/src/components/examples/textarea/react-hook-form.tsx +77 -0
  182. package/templates/next/src/components/examples/textarea/with-button.tsx +11 -0
  183. package/templates/next/src/components/examples/textarea/with-label.tsx +11 -0
  184. package/templates/next/src/components/examples/textarea/with-text.tsx +14 -0
  185. package/templates/next/src/components/examples/toast/demo.tsx +26 -0
  186. package/templates/next/src/components/examples/toast/destructive.tsx +25 -0
  187. package/templates/next/src/components/examples/toast/simple.tsx +21 -0
  188. package/templates/next/src/components/examples/toast/with-action.tsx +24 -0
  189. package/templates/next/src/components/examples/toast/with-title.tsx +22 -0
  190. package/templates/next/src/components/examples/toggle/demo.tsx +11 -0
  191. package/templates/next/src/components/examples/toggle/disabled.tsx +11 -0
  192. package/templates/next/src/components/examples/toggle/lg.tsx +11 -0
  193. package/templates/next/src/components/examples/toggle/outline.tsx +11 -0
  194. package/templates/next/src/components/examples/toggle/sm.tsx +11 -0
  195. package/templates/next/src/components/examples/toggle/with-text.tsx +12 -0
  196. package/templates/next/src/components/examples/tooltip/demo.tsx +27 -0
  197. package/templates/next/src/components/examples/typography/blockquote.tsx +8 -0
  198. package/templates/next/src/components/examples/typography/demo.tsx +119 -0
  199. package/templates/next/src/components/examples/typography/h1.tsx +7 -0
  200. package/templates/next/src/components/examples/typography/h2.tsx +7 -0
  201. package/templates/next/src/components/examples/typography/h3.tsx +7 -0
  202. package/templates/next/src/components/examples/typography/h4.tsx +7 -0
  203. package/templates/next/src/components/examples/typography/inline-code.tsx +7 -0
  204. package/templates/next/src/components/examples/typography/large.tsx +5 -0
  205. package/templates/next/src/components/examples/typography/lead.tsx +8 -0
  206. package/templates/next/src/components/examples/typography/list.tsx +9 -0
  207. package/templates/next/src/components/examples/typography/muted.tsx +5 -0
  208. package/templates/next/src/components/examples/typography/p.tsx +8 -0
  209. package/templates/next/src/components/examples/typography/small.tsx +5 -0
  210. package/templates/next/src/components/examples/typography/table.tsx +44 -0
  211. package/templates/next/src/components/examples-nav.tsx +70 -0
  212. package/templates/next/src/components/greeting.tsx +21 -0
  213. package/templates/next/src/components/icons.tsx +154 -0
  214. package/templates/next/src/components/menu-mode-toggle.tsx +46 -0
  215. package/templates/next/src/components/menu.tsx +268 -0
  216. package/templates/next/src/components/mode-toggle.tsx +43 -0
  217. package/templates/next/src/components/page-header.tsx +50 -0
  218. package/templates/next/src/components/react-hook-form/form.tsx +176 -0
  219. package/templates/next/src/components/style-switcher.tsx +19 -0
  220. package/templates/next/src/components/tailwind-indicator.tsx +18 -0
  221. package/templates/next/src/components/theme-provider.tsx +9 -0
  222. package/templates/next/src/components/ui/accordion.tsx +60 -0
  223. package/templates/next/src/components/ui/alert-dialog.tsx +150 -0
  224. package/templates/next/src/components/ui/alert.tsx +61 -0
  225. package/templates/next/src/components/ui/aspect-ratio.tsx +7 -0
  226. package/templates/next/src/components/ui/avatar.tsx +50 -0
  227. package/templates/next/src/components/ui/badge.tsx +36 -0
  228. package/templates/next/src/components/ui/button.tsx +51 -0
  229. package/templates/next/src/components/ui/calendar.tsx +64 -0
  230. package/templates/next/src/components/ui/card.tsx +81 -0
  231. package/templates/next/src/components/ui/checkbox.tsx +30 -0
  232. package/templates/next/src/components/ui/collapsible.tsx +11 -0
  233. package/templates/next/src/components/ui/command.tsx +155 -0
  234. package/templates/next/src/components/ui/context-menu.tsx +200 -0
  235. package/templates/next/src/components/ui/dialog.tsx +128 -0
  236. package/templates/next/src/components/ui/dropdown-menu.tsx +200 -0
  237. package/templates/next/src/components/ui/hover-card.tsx +29 -0
  238. package/templates/next/src/components/ui/input.tsx +27 -0
  239. package/templates/next/src/components/ui/label.tsx +26 -0
  240. package/templates/next/src/components/ui/menubar.tsx +236 -0
  241. package/templates/next/src/components/ui/navigation-menu.tsx +130 -0
  242. package/templates/next/src/components/ui/popover.tsx +31 -0
  243. package/templates/next/src/components/ui/progress.tsx +28 -0
  244. package/templates/next/src/components/ui/radio-group.tsx +44 -0
  245. package/templates/next/src/components/ui/scroll-area.tsx +48 -0
  246. package/templates/next/src/components/ui/select.tsx +120 -0
  247. package/templates/next/src/components/ui/separator.tsx +31 -0
  248. package/templates/next/src/components/ui/sheet.tsx +230 -0
  249. package/templates/next/src/components/ui/skeleton.tsx +17 -0
  250. package/templates/next/src/components/ui/slider.tsx +28 -0
  251. package/templates/next/src/components/ui/switch.tsx +29 -0
  252. package/templates/next/src/components/ui/table.tsx +114 -0
  253. package/templates/next/src/components/ui/tabs.tsx +55 -0
  254. package/templates/next/src/components/ui/textarea.tsx +26 -0
  255. package/templates/next/src/components/ui/toast.tsx +129 -0
  256. package/templates/next/src/components/ui/toaster.tsx +35 -0
  257. package/templates/next/src/components/ui/toggle.tsx +45 -0
  258. package/templates/next/src/components/ui/tooltip.tsx +30 -0
  259. package/templates/next/src/components/ui/use-toast.ts +191 -0
  260. package/templates/next/src/data/albums.ts +71 -0
  261. package/templates/next/src/data/playlists.ts +16 -0
  262. package/templates/next/src/hooks/use-lock-body.ts +12 -0
  263. package/templates/next/src/hooks/use-mounted.ts +11 -0
  264. package/templates/next/src/hooks/use-mutation-observer.ts +20 -0
  265. package/templates/next/src/lib/fonts.ts +11 -0
  266. package/templates/next/src/lib/utils.ts +19 -0
  267. package/templates/next/src/styles/globals.css +124 -0
  268. package/templates/next/src-tauri/Cargo.lock +3636 -0
  269. package/templates/next/src-tauri/Cargo.toml +36 -0
  270. package/templates/next/src-tauri/build.rs +3 -0
  271. package/templates/next/src-tauri/icons/128x128.png +0 -0
  272. package/templates/next/src-tauri/icons/128x128@2x.png +0 -0
  273. package/templates/next/src-tauri/icons/32x32.png +0 -0
  274. package/templates/next/src-tauri/icons/Square107x107Logo.png +0 -0
  275. package/templates/next/src-tauri/icons/Square142x142Logo.png +0 -0
  276. package/templates/next/src-tauri/icons/Square150x150Logo.png +0 -0
  277. package/templates/next/src-tauri/icons/Square284x284Logo.png +0 -0
  278. package/templates/next/src-tauri/icons/Square30x30Logo.png +0 -0
  279. package/templates/next/src-tauri/icons/Square310x310Logo.png +0 -0
  280. package/templates/next/src-tauri/icons/Square44x44Logo.png +0 -0
  281. package/templates/next/src-tauri/icons/Square71x71Logo.png +0 -0
  282. package/templates/next/src-tauri/icons/Square89x89Logo.png +0 -0
  283. package/templates/next/src-tauri/icons/StoreLogo.png +0 -0
  284. package/templates/next/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png +0 -0
  285. package/templates/next/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  286. package/templates/next/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png +0 -0
  287. package/templates/next/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png +0 -0
  288. package/templates/next/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  289. package/templates/next/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png +0 -0
  290. package/templates/next/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png +0 -0
  291. package/templates/next/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  292. package/templates/next/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png +0 -0
  293. package/templates/next/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
  294. package/templates/next/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  295. package/templates/next/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  296. package/templates/next/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
  297. package/templates/next/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  298. package/templates/next/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  299. package/templates/next/src-tauri/icons/icon.icns +0 -0
  300. package/templates/next/src-tauri/icons/icon.ico +0 -0
  301. package/templates/next/src-tauri/icons/icon.png +0 -0
  302. package/templates/next/src-tauri/icons/ios/AppIcon-20x20@1x.png +0 -0
  303. package/templates/next/src-tauri/icons/ios/AppIcon-20x20@2x-1.png +0 -0
  304. package/templates/next/src-tauri/icons/ios/AppIcon-20x20@2x.png +0 -0
  305. package/templates/next/src-tauri/icons/ios/AppIcon-20x20@3x.png +0 -0
  306. package/templates/next/src-tauri/icons/ios/AppIcon-29x29@1x.png +0 -0
  307. package/templates/next/src-tauri/icons/ios/AppIcon-29x29@2x-1.png +0 -0
  308. package/templates/next/src-tauri/icons/ios/AppIcon-29x29@2x.png +0 -0
  309. package/templates/next/src-tauri/icons/ios/AppIcon-29x29@3x.png +0 -0
  310. package/templates/next/src-tauri/icons/ios/AppIcon-40x40@1x.png +0 -0
  311. package/templates/next/src-tauri/icons/ios/AppIcon-40x40@2x-1.png +0 -0
  312. package/templates/next/src-tauri/icons/ios/AppIcon-40x40@2x.png +0 -0
  313. package/templates/next/src-tauri/icons/ios/AppIcon-40x40@3x.png +0 -0
  314. package/templates/next/src-tauri/icons/ios/AppIcon-512@2x.png +0 -0
  315. package/templates/next/src-tauri/icons/ios/AppIcon-60x60@2x.png +0 -0
  316. package/templates/next/src-tauri/icons/ios/AppIcon-60x60@3x.png +0 -0
  317. package/templates/next/src-tauri/icons/ios/AppIcon-76x76@1x.png +0 -0
  318. package/templates/next/src-tauri/icons/ios/AppIcon-76x76@2x.png +0 -0
  319. package/templates/next/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png +0 -0
  320. package/templates/next/src-tauri/src/main.rs +19 -0
  321. package/templates/next/src-tauri/tauri.conf.json +63 -0
  322. package/templates/next/tailwind.config.js +80 -0
  323. package/templates/next/tsconfig.json +35 -0
  324. package/templates/vite/.github/workflows/release.yml +108 -0
  325. package/templates/vite/.vscode/extensions.json +3 -0
  326. package/templates/vite/README.md +7 -0
  327. package/templates/vite/app-icon.png +0 -0
  328. package/templates/vite/index.html +16 -0
  329. package/templates/vite/package.json +75 -0
  330. package/templates/vite/pnpm-lock.yaml +4569 -0
  331. package/templates/vite/postcss.config.js +6 -0
  332. package/templates/vite/prettier.config.cjs +35 -0
  333. package/templates/vite/src/App.tsx +39 -0
  334. package/templates/vite/src/aa +34 -0
  335. package/templates/vite/src/assets/Inter.var.woff2 +0 -0
  336. package/templates/vite/src/components/icons.tsx +154 -0
  337. package/templates/vite/src/components/menu-mode-toggle.tsx +46 -0
  338. package/templates/vite/src/components/menu.tsx +232 -0
  339. package/templates/vite/src/components/tailwind-indicator.tsx +18 -0
  340. package/templates/vite/src/components/theme-provider.tsx +9 -0
  341. package/templates/vite/src/components/ui/accordion.tsx +60 -0
  342. package/templates/vite/src/components/ui/alert-dialog.tsx +150 -0
  343. package/templates/vite/src/components/ui/alert.tsx +61 -0
  344. package/templates/vite/src/components/ui/aspect-ratio.tsx +7 -0
  345. package/templates/vite/src/components/ui/avatar.tsx +50 -0
  346. package/templates/vite/src/components/ui/badge.tsx +36 -0
  347. package/templates/vite/src/components/ui/button.tsx +51 -0
  348. package/templates/vite/src/components/ui/calendar.tsx +64 -0
  349. package/templates/vite/src/components/ui/card.tsx +81 -0
  350. package/templates/vite/src/components/ui/checkbox.tsx +30 -0
  351. package/templates/vite/src/components/ui/collapsible.tsx +11 -0
  352. package/templates/vite/src/components/ui/command.tsx +155 -0
  353. package/templates/vite/src/components/ui/context-menu.tsx +200 -0
  354. package/templates/vite/src/components/ui/dialog.tsx +128 -0
  355. package/templates/vite/src/components/ui/dropdown-menu.tsx +200 -0
  356. package/templates/vite/src/components/ui/hover-card.tsx +29 -0
  357. package/templates/vite/src/components/ui/input.tsx +27 -0
  358. package/templates/vite/src/components/ui/label.tsx +26 -0
  359. package/templates/vite/src/components/ui/menubar.tsx +236 -0
  360. package/templates/vite/src/components/ui/navigation-menu.tsx +130 -0
  361. package/templates/vite/src/components/ui/popover.tsx +31 -0
  362. package/templates/vite/src/components/ui/progress.tsx +28 -0
  363. package/templates/vite/src/components/ui/radio-group.tsx +44 -0
  364. package/templates/vite/src/components/ui/scroll-area.tsx +48 -0
  365. package/templates/vite/src/components/ui/select.tsx +120 -0
  366. package/templates/vite/src/components/ui/separator.tsx +31 -0
  367. package/templates/vite/src/components/ui/sheet.tsx +230 -0
  368. package/templates/vite/src/components/ui/skeleton.tsx +17 -0
  369. package/templates/vite/src/components/ui/slider.tsx +28 -0
  370. package/templates/vite/src/components/ui/switch.tsx +29 -0
  371. package/templates/vite/src/components/ui/table.tsx +114 -0
  372. package/templates/vite/src/components/ui/tabs.tsx +55 -0
  373. package/templates/vite/src/components/ui/textarea.tsx +26 -0
  374. package/templates/vite/src/components/ui/toast.tsx +129 -0
  375. package/templates/vite/src/components/ui/toaster.tsx +35 -0
  376. package/templates/vite/src/components/ui/toggle.tsx +45 -0
  377. package/templates/vite/src/components/ui/tooltip.tsx +30 -0
  378. package/templates/vite/src/components/ui/use-toast.ts +191 -0
  379. package/templates/vite/src/dashboard/components/date-range-picker.tsx +66 -0
  380. package/templates/vite/src/dashboard/components/main-nav.tsx +38 -0
  381. package/templates/vite/src/dashboard/components/overview.tsx +78 -0
  382. package/templates/vite/src/dashboard/components/recent-sales.tsx +67 -0
  383. package/templates/vite/src/dashboard/components/search.tsx +13 -0
  384. package/templates/vite/src/dashboard/components/team-switcher.tsx +205 -0
  385. package/templates/vite/src/dashboard/components/user-nav.tsx +67 -0
  386. package/templates/vite/src/dashboard/page.tsx +140 -0
  387. package/templates/vite/src/lib/utils.ts +19 -0
  388. package/templates/vite/src/main.tsx +10 -0
  389. package/templates/vite/src/styles/globals.css +124 -0
  390. package/templates/vite/src/vite-env.d.ts +1 -0
  391. package/templates/vite/src-tauri/Cargo.lock +3636 -0
  392. package/templates/vite/src-tauri/Cargo.toml +33 -0
  393. package/templates/vite/src-tauri/build.rs +3 -0
  394. package/templates/vite/src-tauri/icons/128x128.png +0 -0
  395. package/templates/vite/src-tauri/icons/128x128@2x.png +0 -0
  396. package/templates/vite/src-tauri/icons/32x32.png +0 -0
  397. package/templates/vite/src-tauri/icons/Square107x107Logo.png +0 -0
  398. package/templates/vite/src-tauri/icons/Square142x142Logo.png +0 -0
  399. package/templates/vite/src-tauri/icons/Square150x150Logo.png +0 -0
  400. package/templates/vite/src-tauri/icons/Square284x284Logo.png +0 -0
  401. package/templates/vite/src-tauri/icons/Square30x30Logo.png +0 -0
  402. package/templates/vite/src-tauri/icons/Square310x310Logo.png +0 -0
  403. package/templates/vite/src-tauri/icons/Square44x44Logo.png +0 -0
  404. package/templates/vite/src-tauri/icons/Square71x71Logo.png +0 -0
  405. package/templates/vite/src-tauri/icons/Square89x89Logo.png +0 -0
  406. package/templates/vite/src-tauri/icons/StoreLogo.png +0 -0
  407. package/templates/vite/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png +0 -0
  408. package/templates/vite/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  409. package/templates/vite/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png +0 -0
  410. package/templates/vite/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png +0 -0
  411. package/templates/vite/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  412. package/templates/vite/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png +0 -0
  413. package/templates/vite/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png +0 -0
  414. package/templates/vite/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  415. package/templates/vite/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png +0 -0
  416. package/templates/vite/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
  417. package/templates/vite/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  418. package/templates/vite/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  419. package/templates/vite/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
  420. package/templates/vite/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  421. package/templates/vite/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  422. package/templates/vite/src-tauri/icons/icon.icns +0 -0
  423. package/templates/vite/src-tauri/icons/icon.ico +0 -0
  424. package/templates/vite/src-tauri/icons/icon.png +0 -0
  425. package/templates/vite/src-tauri/icons/ios/AppIcon-20x20@1x.png +0 -0
  426. package/templates/vite/src-tauri/icons/ios/AppIcon-20x20@2x-1.png +0 -0
  427. package/templates/vite/src-tauri/icons/ios/AppIcon-20x20@2x.png +0 -0
  428. package/templates/vite/src-tauri/icons/ios/AppIcon-20x20@3x.png +0 -0
  429. package/templates/vite/src-tauri/icons/ios/AppIcon-29x29@1x.png +0 -0
  430. package/templates/vite/src-tauri/icons/ios/AppIcon-29x29@2x-1.png +0 -0
  431. package/templates/vite/src-tauri/icons/ios/AppIcon-29x29@2x.png +0 -0
  432. package/templates/vite/src-tauri/icons/ios/AppIcon-29x29@3x.png +0 -0
  433. package/templates/vite/src-tauri/icons/ios/AppIcon-40x40@1x.png +0 -0
  434. package/templates/vite/src-tauri/icons/ios/AppIcon-40x40@2x-1.png +0 -0
  435. package/templates/vite/src-tauri/icons/ios/AppIcon-40x40@2x.png +0 -0
  436. package/templates/vite/src-tauri/icons/ios/AppIcon-40x40@3x.png +0 -0
  437. package/templates/vite/src-tauri/icons/ios/AppIcon-512@2x.png +0 -0
  438. package/templates/vite/src-tauri/icons/ios/AppIcon-60x60@2x.png +0 -0
  439. package/templates/vite/src-tauri/icons/ios/AppIcon-60x60@3x.png +0 -0
  440. package/templates/vite/src-tauri/icons/ios/AppIcon-76x76@1x.png +0 -0
  441. package/templates/vite/src-tauri/icons/ios/AppIcon-76x76@2x.png +0 -0
  442. package/templates/vite/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png +0 -0
  443. package/templates/vite/src-tauri/src/main.rs +16 -0
  444. package/templates/vite/src-tauri/tauri.conf.json +63 -0
  445. package/templates/vite/tailwind.config.js +78 -0
  446. package/templates/vite/tsconfig.json +26 -0
  447. package/templates/vite/tsconfig.node.json +9 -0
  448. package/templates/vite/vite.config.ts +33 -0
@@ -0,0 +1,155 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { DialogProps } from "@radix-ui/react-dialog"
5
+ import { Command as CommandPrimitive } from "cmdk"
6
+ import { Search } from "lucide-react"
7
+
8
+ import { cn } from "@/lib/utils"
9
+ import { Dialog, DialogContent } from "@/components/ui/dialog"
10
+
11
+ const Command = React.forwardRef<
12
+ React.ElementRef<typeof CommandPrimitive>,
13
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive>
14
+ >(({ className, ...props }, ref) => (
15
+ <CommandPrimitive
16
+ ref={ref}
17
+ className={cn(
18
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
19
+ className
20
+ )}
21
+ {...props}
22
+ />
23
+ ))
24
+ Command.displayName = CommandPrimitive.displayName
25
+
26
+ interface CommandDialogProps extends DialogProps {}
27
+
28
+ const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
29
+ return (
30
+ <Dialog {...props}>
31
+ <DialogContent className="overflow-hidden p-0 shadow-2xl">
32
+ <Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
33
+ {children}
34
+ </Command>
35
+ </DialogContent>
36
+ </Dialog>
37
+ )
38
+ }
39
+
40
+ const CommandInput = React.forwardRef<
41
+ React.ElementRef<typeof CommandPrimitive.Input>,
42
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
43
+ >(({ className, ...props }, ref) => (
44
+ <div className="flex items-center border-b px-3" cmdk-input-wrapper="">
45
+ <Search className="mr-2 h-4 w-4 shrink-0 opacity-50" />
46
+ <CommandPrimitive.Input
47
+ ref={ref}
48
+ className={cn(
49
+ "placeholder:text-foreground-muted flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50",
50
+ className
51
+ )}
52
+ {...props}
53
+ />
54
+ </div>
55
+ ))
56
+
57
+ CommandInput.displayName = CommandPrimitive.Input.displayName
58
+
59
+ const CommandList = React.forwardRef<
60
+ React.ElementRef<typeof CommandPrimitive.List>,
61
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>
62
+ >(({ className, ...props }, ref) => (
63
+ <CommandPrimitive.List
64
+ ref={ref}
65
+ className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
66
+ {...props}
67
+ />
68
+ ))
69
+
70
+ CommandList.displayName = CommandPrimitive.List.displayName
71
+
72
+ const CommandEmpty = React.forwardRef<
73
+ React.ElementRef<typeof CommandPrimitive.Empty>,
74
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>
75
+ >((props, ref) => (
76
+ <CommandPrimitive.Empty
77
+ ref={ref}
78
+ className="py-6 text-center text-sm"
79
+ {...props}
80
+ />
81
+ ))
82
+
83
+ CommandEmpty.displayName = CommandPrimitive.Empty.displayName
84
+
85
+ const CommandGroup = React.forwardRef<
86
+ React.ElementRef<typeof CommandPrimitive.Group>,
87
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>
88
+ >(({ className, ...props }, ref) => (
89
+ <CommandPrimitive.Group
90
+ ref={ref}
91
+ className={cn(
92
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
93
+ className
94
+ )}
95
+ {...props}
96
+ />
97
+ ))
98
+
99
+ CommandGroup.displayName = CommandPrimitive.Group.displayName
100
+
101
+ const CommandSeparator = React.forwardRef<
102
+ React.ElementRef<typeof CommandPrimitive.Separator>,
103
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>
104
+ >(({ className, ...props }, ref) => (
105
+ <CommandPrimitive.Separator
106
+ ref={ref}
107
+ className={cn("-mx-1 h-px bg-border", className)}
108
+ {...props}
109
+ />
110
+ ))
111
+ CommandSeparator.displayName = CommandPrimitive.Separator.displayName
112
+
113
+ const CommandItem = React.forwardRef<
114
+ React.ElementRef<typeof CommandPrimitive.Item>,
115
+ React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>
116
+ >(({ className, ...props }, ref) => (
117
+ <CommandPrimitive.Item
118
+ ref={ref}
119
+ className={cn(
120
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
121
+ className
122
+ )}
123
+ {...props}
124
+ />
125
+ ))
126
+
127
+ CommandItem.displayName = CommandPrimitive.Item.displayName
128
+
129
+ const CommandShortcut = ({
130
+ className,
131
+ ...props
132
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
133
+ return (
134
+ <span
135
+ className={cn(
136
+ "ml-auto text-xs tracking-widest text-muted-foreground",
137
+ className
138
+ )}
139
+ {...props}
140
+ />
141
+ )
142
+ }
143
+ CommandShortcut.displayName = "CommandShortcut"
144
+
145
+ export {
146
+ Command,
147
+ CommandDialog,
148
+ CommandInput,
149
+ CommandList,
150
+ CommandEmpty,
151
+ CommandGroup,
152
+ CommandItem,
153
+ CommandShortcut,
154
+ CommandSeparator,
155
+ }
@@ -0,0 +1,200 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
5
+ import { Check, ChevronRight, Circle } from "lucide-react"
6
+
7
+ import { cn } from "@/lib/utils"
8
+
9
+ const ContextMenu = ContextMenuPrimitive.Root
10
+
11
+ const ContextMenuTrigger = ContextMenuPrimitive.Trigger
12
+
13
+ const ContextMenuGroup = ContextMenuPrimitive.Group
14
+
15
+ const ContextMenuPortal = ContextMenuPrimitive.Portal
16
+
17
+ const ContextMenuSub = ContextMenuPrimitive.Sub
18
+
19
+ const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
20
+
21
+ const ContextMenuSubTrigger = React.forwardRef<
22
+ React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,
23
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {
24
+ inset?: boolean
25
+ }
26
+ >(({ className, inset, children, ...props }, ref) => (
27
+ <ContextMenuPrimitive.SubTrigger
28
+ ref={ref}
29
+ className={cn(
30
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent data-[state=open]:text-accent-foreground focus:bg-accent focus:text-accent-foreground",
31
+ inset && "pl-8",
32
+ className
33
+ )}
34
+ {...props}
35
+ >
36
+ {children}
37
+ <ChevronRight className="ml-auto h-4 w-4" />
38
+ </ContextMenuPrimitive.SubTrigger>
39
+ ))
40
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName
41
+
42
+ const ContextMenuSubContent = React.forwardRef<
43
+ React.ElementRef<typeof ContextMenuPrimitive.SubContent>,
44
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>
45
+ >(({ className, ...props }, ref) => (
46
+ <ContextMenuPrimitive.SubContent
47
+ ref={ref}
48
+ className={cn(
49
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in slide-in-from-left-1",
50
+ className
51
+ )}
52
+ {...props}
53
+ />
54
+ ))
55
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName
56
+
57
+ const ContextMenuContent = React.forwardRef<
58
+ React.ElementRef<typeof ContextMenuPrimitive.Content>,
59
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>
60
+ >(({ className, ...props }, ref) => (
61
+ <ContextMenuPrimitive.Portal>
62
+ <ContextMenuPrimitive.Content
63
+ ref={ref}
64
+ className={cn(
65
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80",
66
+ className
67
+ )}
68
+ {...props}
69
+ />
70
+ </ContextMenuPrimitive.Portal>
71
+ ))
72
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName
73
+
74
+ const ContextMenuItem = React.forwardRef<
75
+ React.ElementRef<typeof ContextMenuPrimitive.Item>,
76
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {
77
+ inset?: boolean
78
+ }
79
+ >(({ className, inset, ...props }, ref) => (
80
+ <ContextMenuPrimitive.Item
81
+ ref={ref}
82
+ className={cn(
83
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",
84
+ inset && "pl-8",
85
+ className
86
+ )}
87
+ {...props}
88
+ />
89
+ ))
90
+ ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName
91
+
92
+ const ContextMenuCheckboxItem = React.forwardRef<
93
+ React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,
94
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>
95
+ >(({ className, children, checked, ...props }, ref) => (
96
+ <ContextMenuPrimitive.CheckboxItem
97
+ ref={ref}
98
+ className={cn(
99
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",
100
+ className
101
+ )}
102
+ checked={checked}
103
+ {...props}
104
+ >
105
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
106
+ <ContextMenuPrimitive.ItemIndicator>
107
+ <Check className="h-4 w-4" />
108
+ </ContextMenuPrimitive.ItemIndicator>
109
+ </span>
110
+ {children}
111
+ </ContextMenuPrimitive.CheckboxItem>
112
+ ))
113
+ ContextMenuCheckboxItem.displayName =
114
+ ContextMenuPrimitive.CheckboxItem.displayName
115
+
116
+ const ContextMenuRadioItem = React.forwardRef<
117
+ React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,
118
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>
119
+ >(({ className, children, ...props }, ref) => (
120
+ <ContextMenuPrimitive.RadioItem
121
+ ref={ref}
122
+ className={cn(
123
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",
124
+ className
125
+ )}
126
+ {...props}
127
+ >
128
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
129
+ <ContextMenuPrimitive.ItemIndicator>
130
+ <Circle className="h-2 w-2 fill-current" />
131
+ </ContextMenuPrimitive.ItemIndicator>
132
+ </span>
133
+ {children}
134
+ </ContextMenuPrimitive.RadioItem>
135
+ ))
136
+ ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName
137
+
138
+ const ContextMenuLabel = React.forwardRef<
139
+ React.ElementRef<typeof ContextMenuPrimitive.Label>,
140
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {
141
+ inset?: boolean
142
+ }
143
+ >(({ className, inset, ...props }, ref) => (
144
+ <ContextMenuPrimitive.Label
145
+ ref={ref}
146
+ className={cn(
147
+ "px-2 py-1.5 text-sm font-semibold text-foreground",
148
+ inset && "pl-8",
149
+ className
150
+ )}
151
+ {...props}
152
+ />
153
+ ))
154
+ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName
155
+
156
+ const ContextMenuSeparator = React.forwardRef<
157
+ React.ElementRef<typeof ContextMenuPrimitive.Separator>,
158
+ React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>
159
+ >(({ className, ...props }, ref) => (
160
+ <ContextMenuPrimitive.Separator
161
+ ref={ref}
162
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
163
+ {...props}
164
+ />
165
+ ))
166
+ ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName
167
+
168
+ const ContextMenuShortcut = ({
169
+ className,
170
+ ...props
171
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
172
+ return (
173
+ <span
174
+ className={cn(
175
+ "ml-auto text-xs tracking-widest text-muted-foreground",
176
+ className
177
+ )}
178
+ {...props}
179
+ />
180
+ )
181
+ }
182
+ ContextMenuShortcut.displayName = "ContextMenuShortcut"
183
+
184
+ export {
185
+ ContextMenu,
186
+ ContextMenuTrigger,
187
+ ContextMenuContent,
188
+ ContextMenuItem,
189
+ ContextMenuCheckboxItem,
190
+ ContextMenuRadioItem,
191
+ ContextMenuLabel,
192
+ ContextMenuSeparator,
193
+ ContextMenuShortcut,
194
+ ContextMenuGroup,
195
+ ContextMenuPortal,
196
+ ContextMenuSub,
197
+ ContextMenuSubContent,
198
+ ContextMenuSubTrigger,
199
+ ContextMenuRadioGroup,
200
+ }
@@ -0,0 +1,128 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog"
5
+ import { X } from "lucide-react"
6
+
7
+ import { cn } from "@/lib/utils"
8
+
9
+ const Dialog = DialogPrimitive.Root
10
+
11
+ const DialogTrigger = DialogPrimitive.Trigger
12
+
13
+ const DialogPortal = ({
14
+ className,
15
+ children,
16
+ ...props
17
+ }: DialogPrimitive.DialogPortalProps) => (
18
+ <DialogPrimitive.Portal className={cn(className)} {...props}>
19
+ <div className="fixed inset-0 z-50 flex items-start justify-center sm:items-center">
20
+ {children}
21
+ </div>
22
+ </DialogPrimitive.Portal>
23
+ )
24
+ DialogPortal.displayName = DialogPrimitive.Portal.displayName
25
+
26
+ const DialogOverlay = React.forwardRef<
27
+ React.ElementRef<typeof DialogPrimitive.Overlay>,
28
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
29
+ >(({ className, ...props }, ref) => (
30
+ <DialogPrimitive.Overlay
31
+ ref={ref}
32
+ className={cn(
33
+ "fixed inset-0 z-50 bg-background/80 backdrop-blur-sm transition-all duration-100 data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in",
34
+ className
35
+ )}
36
+ {...props}
37
+ />
38
+ ))
39
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
40
+
41
+ const DialogContent = React.forwardRef<
42
+ React.ElementRef<typeof DialogPrimitive.Content>,
43
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
44
+ >(({ className, children, ...props }, ref) => (
45
+ <DialogPortal>
46
+ <DialogOverlay />
47
+ <DialogPrimitive.Content
48
+ ref={ref}
49
+ className={cn(
50
+ "fixed z-50 grid w-full gap-4 rounded-b-lg border bg-background p-6 shadow-lg animate-in data-[state=open]:fade-in-90 data-[state=open]:slide-in-from-bottom-10 sm:max-w-lg sm:rounded-lg sm:zoom-in-90 data-[state=open]:sm:slide-in-from-bottom-0",
51
+ className
52
+ )}
53
+ {...props}
54
+ >
55
+ {children}
56
+ <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none">
57
+ <X className="h-4 w-4" />
58
+ <span className="sr-only">Close</span>
59
+ </DialogPrimitive.Close>
60
+ </DialogPrimitive.Content>
61
+ </DialogPortal>
62
+ ))
63
+ DialogContent.displayName = DialogPrimitive.Content.displayName
64
+
65
+ const DialogHeader = ({
66
+ className,
67
+ ...props
68
+ }: React.HTMLAttributes<HTMLDivElement>) => (
69
+ <div
70
+ className={cn(
71
+ "flex flex-col space-y-1.5 text-center sm:text-left",
72
+ className
73
+ )}
74
+ {...props}
75
+ />
76
+ )
77
+ DialogHeader.displayName = "DialogHeader"
78
+
79
+ const DialogFooter = ({
80
+ className,
81
+ ...props
82
+ }: React.HTMLAttributes<HTMLDivElement>) => (
83
+ <div
84
+ className={cn(
85
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
86
+ className
87
+ )}
88
+ {...props}
89
+ />
90
+ )
91
+ DialogFooter.displayName = "DialogFooter"
92
+
93
+ const DialogTitle = React.forwardRef<
94
+ React.ElementRef<typeof DialogPrimitive.Title>,
95
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
96
+ >(({ className, ...props }, ref) => (
97
+ <DialogPrimitive.Title
98
+ ref={ref}
99
+ className={cn(
100
+ "text-lg font-semibold leading-none tracking-tight",
101
+ className
102
+ )}
103
+ {...props}
104
+ />
105
+ ))
106
+ DialogTitle.displayName = DialogPrimitive.Title.displayName
107
+
108
+ const DialogDescription = React.forwardRef<
109
+ React.ElementRef<typeof DialogPrimitive.Description>,
110
+ React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
111
+ >(({ className, ...props }, ref) => (
112
+ <DialogPrimitive.Description
113
+ ref={ref}
114
+ className={cn("text-sm text-muted-foreground", className)}
115
+ {...props}
116
+ />
117
+ ))
118
+ DialogDescription.displayName = DialogPrimitive.Description.displayName
119
+
120
+ export {
121
+ Dialog,
122
+ DialogTrigger,
123
+ DialogContent,
124
+ DialogHeader,
125
+ DialogFooter,
126
+ DialogTitle,
127
+ DialogDescription,
128
+ }
@@ -0,0 +1,200 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
5
+ import { Check, ChevronRight, Circle } from "lucide-react"
6
+
7
+ import { cn } from "@/lib/utils"
8
+
9
+ const DropdownMenu = DropdownMenuPrimitive.Root
10
+
11
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
12
+
13
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group
14
+
15
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal
16
+
17
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub
18
+
19
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
20
+
21
+ const DropdownMenuSubTrigger = React.forwardRef<
22
+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
23
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
24
+ inset?: boolean
25
+ }
26
+ >(({ className, inset, children, ...props }, ref) => (
27
+ <DropdownMenuPrimitive.SubTrigger
28
+ ref={ref}
29
+ className={cn(
30
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[state=open]:bg-accent focus:bg-accent",
31
+ inset && "pl-8",
32
+ className
33
+ )}
34
+ {...props}
35
+ >
36
+ {children}
37
+ <ChevronRight className="ml-auto h-4 w-4" />
38
+ </DropdownMenuPrimitive.SubTrigger>
39
+ ))
40
+ DropdownMenuSubTrigger.displayName =
41
+ DropdownMenuPrimitive.SubTrigger.displayName
42
+
43
+ const DropdownMenuSubContent = React.forwardRef<
44
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
45
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
46
+ >(({ className, ...props }, ref) => (
47
+ <DropdownMenuPrimitive.SubContent
48
+ ref={ref}
49
+ className={cn(
50
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1",
51
+ className
52
+ )}
53
+ {...props}
54
+ />
55
+ ))
56
+ DropdownMenuSubContent.displayName =
57
+ DropdownMenuPrimitive.SubContent.displayName
58
+
59
+ const DropdownMenuContent = React.forwardRef<
60
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
61
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
62
+ >(({ className, sideOffset = 4, ...props }, ref) => (
63
+ <DropdownMenuPrimitive.Portal>
64
+ <DropdownMenuPrimitive.Content
65
+ ref={ref}
66
+ sideOffset={sideOffset}
67
+ className={cn(
68
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
69
+ className
70
+ )}
71
+ {...props}
72
+ />
73
+ </DropdownMenuPrimitive.Portal>
74
+ ))
75
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
76
+
77
+ const DropdownMenuItem = React.forwardRef<
78
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
79
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
80
+ inset?: boolean
81
+ }
82
+ >(({ className, inset, ...props }, ref) => (
83
+ <DropdownMenuPrimitive.Item
84
+ ref={ref}
85
+ className={cn(
86
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",
87
+ inset && "pl-8",
88
+ className
89
+ )}
90
+ {...props}
91
+ />
92
+ ))
93
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
94
+
95
+ const DropdownMenuCheckboxItem = React.forwardRef<
96
+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
97
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
98
+ >(({ className, children, checked, ...props }, ref) => (
99
+ <DropdownMenuPrimitive.CheckboxItem
100
+ ref={ref}
101
+ className={cn(
102
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",
103
+ className
104
+ )}
105
+ checked={checked}
106
+ {...props}
107
+ >
108
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
109
+ <DropdownMenuPrimitive.ItemIndicator>
110
+ <Check className="h-4 w-4" />
111
+ </DropdownMenuPrimitive.ItemIndicator>
112
+ </span>
113
+ {children}
114
+ </DropdownMenuPrimitive.CheckboxItem>
115
+ ))
116
+ DropdownMenuCheckboxItem.displayName =
117
+ DropdownMenuPrimitive.CheckboxItem.displayName
118
+
119
+ const DropdownMenuRadioItem = React.forwardRef<
120
+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
121
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
122
+ >(({ className, children, ...props }, ref) => (
123
+ <DropdownMenuPrimitive.RadioItem
124
+ ref={ref}
125
+ className={cn(
126
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-accent focus:text-accent-foreground",
127
+ className
128
+ )}
129
+ {...props}
130
+ >
131
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
132
+ <DropdownMenuPrimitive.ItemIndicator>
133
+ <Circle className="h-2 w-2 fill-current" />
134
+ </DropdownMenuPrimitive.ItemIndicator>
135
+ </span>
136
+ {children}
137
+ </DropdownMenuPrimitive.RadioItem>
138
+ ))
139
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
140
+
141
+ const DropdownMenuLabel = React.forwardRef<
142
+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
143
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
144
+ inset?: boolean
145
+ }
146
+ >(({ className, inset, ...props }, ref) => (
147
+ <DropdownMenuPrimitive.Label
148
+ ref={ref}
149
+ className={cn(
150
+ "px-2 py-1.5 text-sm font-semibold",
151
+ inset && "pl-8",
152
+ className
153
+ )}
154
+ {...props}
155
+ />
156
+ ))
157
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
158
+
159
+ const DropdownMenuSeparator = React.forwardRef<
160
+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
161
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
162
+ >(({ className, ...props }, ref) => (
163
+ <DropdownMenuPrimitive.Separator
164
+ ref={ref}
165
+ className={cn("-mx-1 my-1 h-px bg-muted", className)}
166
+ {...props}
167
+ />
168
+ ))
169
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
170
+
171
+ const DropdownMenuShortcut = ({
172
+ className,
173
+ ...props
174
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
175
+ return (
176
+ <span
177
+ className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
178
+ {...props}
179
+ />
180
+ )
181
+ }
182
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
183
+
184
+ export {
185
+ DropdownMenu,
186
+ DropdownMenuTrigger,
187
+ DropdownMenuContent,
188
+ DropdownMenuItem,
189
+ DropdownMenuCheckboxItem,
190
+ DropdownMenuRadioItem,
191
+ DropdownMenuLabel,
192
+ DropdownMenuSeparator,
193
+ DropdownMenuShortcut,
194
+ DropdownMenuGroup,
195
+ DropdownMenuPortal,
196
+ DropdownMenuSub,
197
+ DropdownMenuSubContent,
198
+ DropdownMenuSubTrigger,
199
+ DropdownMenuRadioGroup,
200
+ }