create-aron-app 0.1.5 → 0.1.7

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 (261) hide show
  1. package/README.md +73 -38
  2. package/dist/index.js +50 -115
  3. package/package.json +5 -2
  4. package/templates/{_base/.cursor → .cursor}/rules/api_architecture.mdc +27 -33
  5. package/templates/{_base/.cursor → .cursor}/rules/coding_standards.mdc +1 -1
  6. package/templates/{_base/.cursor → .cursor}/rules/convex_rules.mdc +78 -422
  7. package/templates/.cursor/rules/frontend_architecture_core.mdc +495 -0
  8. package/templates/.cursor/rules/frontend_architecture_nextjs.mdc +458 -0
  9. package/templates/.cursor/rules/frontend_architecture_reactrouter.mdc +473 -0
  10. package/templates/apps/api/_generated/api.d.ts +57 -0
  11. package/templates/apps/api/_generated/api.js +23 -0
  12. package/templates/apps/api/_generated/dataModel.d.ts +60 -0
  13. package/templates/apps/api/_generated/server.d.ts +143 -0
  14. package/templates/apps/api/_generated/server.js +93 -0
  15. package/templates/apps/api/http.ts +16 -0
  16. package/templates/apps/nextjs/.env.example +10 -0
  17. package/templates/{nextjs → apps/nextjs}/project.json +5 -5
  18. package/templates/{nextjs → apps/nextjs}/src/app/(auth)/not-allowed/page.tsx +1 -0
  19. package/templates/apps/nextjs/src/app/(dashboard)/layout.tsx +22 -0
  20. package/templates/apps/nextjs/src/app/(dashboard)/page.tsx +12 -0
  21. package/templates/{nextjs → apps/nextjs}/src/app/(dashboard)/todos/[id]/page.tsx +5 -2
  22. package/templates/apps/nextjs/src/app/(dashboard)/todos/page.tsx +19 -0
  23. package/templates/apps/nextjs/src/middleware.ts +18 -0
  24. package/templates/apps/nextjs/src/surfaces/home/bootstrap.ts +9 -0
  25. package/templates/apps/nextjs/src/surfaces/home/home.tsx +27 -0
  26. package/templates/apps/nextjs/src/surfaces/home/install.tsx +17 -0
  27. package/templates/apps/nextjs/src/surfaces/home/layout.tsx +44 -0
  28. package/templates/apps/nextjs/src/surfaces/home/main/create.tsx +34 -0
  29. package/templates/apps/nextjs/src/surfaces/sidebar/install.tsx +23 -0
  30. package/templates/apps/nextjs/src/surfaces/sidebar/layout.tsx +118 -0
  31. package/templates/apps/nextjs/src/surfaces/sidebar/nav_main/create.tsx +19 -0
  32. package/templates/apps/nextjs/src/surfaces/sidebar/nav_main/nav_config.ts +22 -0
  33. package/templates/apps/nextjs/src/surfaces/sidebar/nav_main/nav_main.tsx +25 -0
  34. package/templates/apps/nextjs/src/surfaces/sidebar/nav_secondary/create.tsx +21 -0
  35. package/templates/apps/nextjs/src/surfaces/sidebar/nav_secondary/nav_secondary.tsx +33 -0
  36. package/templates/apps/nextjs/src/surfaces/sidebar/sidebar.tsx +23 -0
  37. package/templates/{nextjs/src/ui/sidebar/nav_link.tsx → apps/nextjs/src/surfaces/sidebar/ui/sidebar_nav_link.tsx} +13 -10
  38. package/templates/apps/nextjs/src/surfaces/sidebar/user_menu/create.tsx +28 -0
  39. package/templates/apps/nextjs/src/surfaces/sidebar/user_menu/user_menu.tsx +42 -0
  40. package/templates/apps/nextjs/src/surfaces/todos/all_todos/all_todos.tsx +29 -0
  41. package/templates/apps/nextjs/src/surfaces/todos/all_todos/all_todos_controller.ts +61 -0
  42. package/templates/apps/nextjs/src/surfaces/todos/all_todos/bootstrap.ts +21 -0
  43. package/templates/apps/nextjs/src/surfaces/todos/all_todos/header/create.tsx +23 -0
  44. package/templates/apps/nextjs/src/surfaces/todos/all_todos/install.tsx +23 -0
  45. package/templates/apps/nextjs/src/surfaces/todos/all_todos/layout.tsx +44 -0
  46. package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/create.tsx +49 -0
  47. package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/main.tsx +70 -0
  48. package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/new_todo_sheet/create.tsx +56 -0
  49. package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/new_todo_sheet/new_todo_sheet.tsx +99 -0
  50. package/templates/apps/nextjs/src/surfaces/todos/all_todos/main/new_todo_sheet/schema.ts +11 -0
  51. package/templates/apps/nextjs/src/surfaces/todos/single_todo/bootstrap.ts +32 -0
  52. package/templates/apps/nextjs/src/surfaces/todos/single_todo/header/create.tsx +26 -0
  53. package/templates/apps/nextjs/src/surfaces/todos/single_todo/header/header.tsx +22 -0
  54. package/templates/apps/nextjs/src/surfaces/todos/single_todo/install.tsx +27 -0
  55. package/templates/apps/nextjs/src/surfaces/todos/single_todo/layout.tsx +55 -0
  56. package/templates/apps/nextjs/src/surfaces/todos/single_todo/main/create.tsx +38 -0
  57. package/templates/apps/nextjs/src/surfaces/todos/single_todo/main/main.tsx +49 -0
  58. package/templates/apps/nextjs/src/surfaces/todos/single_todo/single_todo.tsx +29 -0
  59. package/templates/apps/nextjs/src/surfaces/todos/single_todo/single_todo_controller.ts +13 -0
  60. package/templates/apps/nextjs/src/utils/auth.ts +18 -0
  61. package/templates/apps/react-router/.env.example +10 -0
  62. package/templates/apps/react-router/.react-router/types/+future.ts +9 -0
  63. package/templates/apps/react-router/.react-router/types/+routes.ts +71 -0
  64. package/templates/apps/react-router/.react-router/types/+server-build.d.ts +18 -0
  65. package/templates/apps/react-router/.react-router/types/src/+types/root.ts +59 -0
  66. package/templates/apps/react-router/.react-router/types/src/routes/(auth)/+types/layout.ts +62 -0
  67. package/templates/apps/react-router/.react-router/types/src/routes/(auth)/sign-in/+types/index.ts +65 -0
  68. package/templates/apps/react-router/.react-router/types/src/routes/(dashboard)/+types/index.ts +65 -0
  69. package/templates/apps/react-router/.react-router/types/src/routes/(dashboard)/+types/layout.ts +62 -0
  70. package/templates/apps/react-router/.react-router/types/src/routes/(dashboard)/todos/+types/[id].ts +65 -0
  71. package/templates/apps/react-router/.react-router/types/src/routes/(dashboard)/todos/+types/index.ts +65 -0
  72. package/templates/{react-router → apps/react-router}/project.json +4 -4
  73. package/templates/apps/react-router/src/app.css +3 -0
  74. package/templates/{react-router → apps/react-router}/src/components/error_boundary.tsx +1 -1
  75. package/templates/{react-router → apps/react-router}/src/providers/api_auth_provider.tsx +2 -0
  76. package/templates/{react-router/src/routes/auth → apps/react-router/src/routes/(auth)}/layout.tsx +1 -1
  77. package/templates/apps/react-router/src/routes/(dashboard)/index.tsx +19 -0
  78. package/templates/apps/react-router/src/routes/(dashboard)/layout.tsx +37 -0
  79. package/templates/apps/react-router/src/routes/(dashboard)/todos/[id].tsx +19 -0
  80. package/templates/apps/react-router/src/routes/(dashboard)/todos/index.tsx +19 -0
  81. package/templates/apps/react-router/src/routes.ts +12 -0
  82. package/templates/apps/react-router/src/surfaces/home/bootstrap.ts +9 -0
  83. package/templates/apps/react-router/src/surfaces/home/home.tsx +25 -0
  84. package/templates/apps/react-router/src/surfaces/home/install.tsx +17 -0
  85. package/templates/apps/react-router/src/surfaces/home/layout.tsx +35 -0
  86. package/templates/apps/react-router/src/surfaces/home/main/create.tsx +32 -0
  87. package/templates/apps/react-router/src/surfaces/sidebar/install.tsx +23 -0
  88. package/templates/apps/react-router/src/surfaces/sidebar/layout.tsx +110 -0
  89. package/templates/apps/react-router/src/surfaces/sidebar/nav_main/create.tsx +31 -0
  90. package/templates/apps/react-router/src/surfaces/sidebar/nav_main/nav_main.tsx +42 -0
  91. package/templates/apps/react-router/src/surfaces/sidebar/nav_secondary/create.tsx +21 -0
  92. package/templates/apps/react-router/src/surfaces/sidebar/nav_secondary/nav_secondary.tsx +31 -0
  93. package/templates/apps/react-router/src/surfaces/sidebar/sidebar.tsx +18 -0
  94. package/templates/apps/react-router/src/surfaces/sidebar/user_menu/create.tsx +26 -0
  95. package/templates/{react-router/src/layouts/sidebar/sidebar_aside → apps/react-router/src/surfaces/sidebar/user_menu}/user_menu.tsx +13 -9
  96. package/templates/apps/react-router/src/surfaces/todos/all_todos/all_todos.tsx +25 -0
  97. package/templates/apps/react-router/src/surfaces/todos/all_todos/all_todos_controller.ts +47 -0
  98. package/templates/apps/react-router/src/surfaces/todos/all_todos/bootstrap.ts +18 -0
  99. package/templates/apps/react-router/src/surfaces/todos/all_todos/header/create.tsx +21 -0
  100. package/templates/apps/react-router/src/surfaces/todos/all_todos/install.tsx +20 -0
  101. package/templates/apps/react-router/src/surfaces/todos/all_todos/layout.tsx +35 -0
  102. package/templates/apps/react-router/src/surfaces/todos/all_todos/main/create.tsx +47 -0
  103. package/templates/apps/react-router/src/surfaces/todos/all_todos/main/main.tsx +68 -0
  104. package/templates/apps/react-router/src/surfaces/todos/all_todos/main/new_todo_sheet/create.tsx +54 -0
  105. package/templates/apps/react-router/src/surfaces/todos/all_todos/main/new_todo_sheet/new_todo_sheet.tsx +97 -0
  106. package/templates/apps/react-router/src/surfaces/todos/all_todos/main/new_todo_sheet/schema.ts +11 -0
  107. package/templates/apps/react-router/src/surfaces/todos/single_todo/bootstrap.ts +36 -0
  108. package/templates/apps/react-router/src/surfaces/todos/single_todo/header/create.tsx +32 -0
  109. package/templates/apps/react-router/src/surfaces/todos/single_todo/header/header.tsx +25 -0
  110. package/templates/apps/react-router/src/surfaces/todos/single_todo/install.tsx +27 -0
  111. package/templates/apps/react-router/src/surfaces/todos/single_todo/layout.tsx +45 -0
  112. package/templates/apps/react-router/src/surfaces/todos/single_todo/main/create.tsx +35 -0
  113. package/templates/apps/react-router/src/surfaces/todos/single_todo/main/main.tsx +47 -0
  114. package/templates/apps/react-router/src/surfaces/todos/single_todo/single_todo.tsx +27 -0
  115. package/templates/apps/react-router/src/surfaces/todos/single_todo/single_todo_controller.ts +16 -0
  116. package/templates/{react-router → apps/react-router}/vite.config.ts +27 -3
  117. package/templates/{_base/biome.json → biome.json} +7 -0
  118. package/templates/bun.lock +3187 -0
  119. package/templates/{_base/emails → emails}/project.json +1 -1
  120. package/templates/{_base/nx.json → nx.json} +11 -0
  121. package/templates/package.json +92 -0
  122. package/templates/{_base/tsconfig.base.json → tsconfig.base.json} +4 -1
  123. package/templates/_base/.cursor/rules/frontend_rules.mdc +0 -268
  124. package/templates/_base/.env.convex.example +0 -3
  125. package/templates/_base/_gitignore +0 -58
  126. package/templates/_base/package.json +0 -73
  127. package/templates/nextjs/.env.example +0 -8
  128. package/templates/nextjs/src/app/(dashboard)/layout.tsx +0 -27
  129. package/templates/nextjs/src/app/(dashboard)/page.tsx +0 -5
  130. package/templates/nextjs/src/app/(dashboard)/todos/page.tsx +0 -16
  131. package/templates/nextjs/src/middleware.ts +0 -18
  132. package/templates/nextjs/src/surfaces/home_surface.tsx +0 -22
  133. package/templates/nextjs/src/surfaces/todos/all_todos_surface.tsx +0 -97
  134. package/templates/nextjs/src/surfaces/todos/create_todo_sheet.tsx +0 -107
  135. package/templates/nextjs/src/surfaces/todos/single_todo_surface.tsx +0 -90
  136. package/templates/nextjs/src/ui/sidebar/sidebar.tsx +0 -125
  137. package/templates/react-router/.env.example +0 -8
  138. package/templates/react-router/src/app.css +0 -3
  139. package/templates/react-router/src/layouts/sidebar/sidebar_aside/sidebar_aside.tsx +0 -76
  140. package/templates/react-router/src/layouts/sidebar/sidebar_layout.tsx +0 -22
  141. package/templates/react-router/src/routes/index.tsx +0 -9
  142. package/templates/react-router/src/routes/layout.tsx +0 -26
  143. package/templates/react-router/src/routes/todos/[id].tsx +0 -22
  144. package/templates/react-router/src/routes/todos/index.tsx +0 -13
  145. package/templates/react-router/src/routes.ts +0 -12
  146. package/templates/react-router/src/surfaces/home_surface.tsx +0 -20
  147. package/templates/react-router/src/surfaces/todos/all_todos_surface.tsx +0 -87
  148. package/templates/react-router/src/surfaces/todos/create_todo_sheet.tsx +0 -102
  149. package/templates/react-router/src/surfaces/todos/single_todo_surface.tsx +0 -81
  150. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/SKILL.md +0 -0
  151. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-backend-api/SKILL.md +0 -0
  152. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-backend-api/scripts/api-specs-context.sh +0 -0
  153. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-backend-api/scripts/execute-request.sh +0 -0
  154. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-backend-api/scripts/extract-endpoint-detail.sh +0 -0
  155. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-backend-api/scripts/extract-tag-endpoints.sh +0 -0
  156. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-backend-api/scripts/extract-tags.js +0 -0
  157. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-custom-ui/SKILL.md +0 -0
  158. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-custom-ui/core-2/custom-sign-in.md +0 -0
  159. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-custom-ui/core-2/custom-sign-up.md +0 -0
  160. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-custom-ui/core-3/custom-sign-in.md +0 -0
  161. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-custom-ui/core-3/custom-sign-up.md +0 -0
  162. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-custom-ui/core-3/show-component.md +0 -0
  163. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-nextjs-patterns/SKILL.md +0 -0
  164. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-nextjs-patterns/references/api-routes.md +0 -0
  165. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-nextjs-patterns/references/caching-auth.md +0 -0
  166. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-nextjs-patterns/references/middleware-strategies.md +0 -0
  167. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-nextjs-patterns/references/server-actions.md +0 -0
  168. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-nextjs-patterns/references/server-vs-client.md +0 -0
  169. /package/templates/{_base/.cursor → .cursor}/agents/skills/clerk/clerk-webhooks/SKILL.md +0 -0
  170. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/SKILL.md +0 -0
  171. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/agents/openai.yml +0 -0
  172. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/assets/shadcn-small.png +0 -0
  173. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/assets/shadcn.png +0 -0
  174. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/cli.md +0 -0
  175. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/customization.md +0 -0
  176. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/evals/evals.json +0 -0
  177. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/mcp.md +0 -0
  178. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/rules/base-vs-radix.md +0 -0
  179. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/rules/composition.md +0 -0
  180. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/rules/forms.md +0 -0
  181. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/rules/icons.md +0 -0
  182. /package/templates/{_base/.cursor → .cursor}/agents/skills/shadcn/rules/styling.md +0 -0
  183. /package/templates/{_base/.cursor → .cursor}/commands/builder.md +0 -0
  184. /package/templates/{_base/.cursor → .cursor}/commands/pr.md +0 -0
  185. /package/templates/{_base/.github → .github}/workflows/ci.yml +0 -0
  186. /package/templates/{_base/.nvmrc → .nvmrc} +0 -0
  187. /package/templates/{_base/.vscode → .vscode}/settings.json +0 -0
  188. /package/templates/{_base/apps → apps}/api/auth.config.ts +0 -0
  189. /package/templates/{_base/apps → apps}/api/functions.ts +0 -0
  190. /package/templates/{_base/apps → apps}/api/project.json +0 -0
  191. /package/templates/{_base/apps → apps}/api/schema.ts +0 -0
  192. /package/templates/{_base/apps → apps}/api/todos/crud.ts +0 -0
  193. /package/templates/{_base/apps → apps}/api/todos/schema.ts +0 -0
  194. /package/templates/{_base/apps → apps}/api/todos/types.ts +0 -0
  195. /package/templates/{_base/apps → apps}/api/tsconfig.json +0 -0
  196. /package/templates/{_base/apps → apps}/api/types.ts +0 -0
  197. /package/templates/{nextjs → apps/nextjs}/index.d.ts +0 -0
  198. /package/templates/{nextjs → apps/nextjs}/next-env.d.ts +0 -0
  199. /package/templates/{nextjs → apps/nextjs}/next.config.js +0 -0
  200. /package/templates/{nextjs → apps/nextjs}/postcss.config.js +0 -0
  201. /package/templates/{nextjs → apps/nextjs}/src/app/(auth)/layout.tsx +0 -0
  202. /package/templates/{nextjs → apps/nextjs}/src/app/(auth)/sign-in/[[...sign-in]]/page.tsx +0 -0
  203. /package/templates/{nextjs → apps/nextjs}/src/app/app.css +0 -0
  204. /package/templates/{nextjs → apps/nextjs}/src/app/layout.tsx +0 -0
  205. /package/templates/{nextjs → apps/nextjs}/src/providers/convex_provider.tsx +0 -0
  206. /package/templates/{nextjs/src → apps/nextjs/src/utils}/convex.ts +0 -0
  207. /package/templates/{nextjs → apps/nextjs}/src/utils/font.ts +0 -0
  208. /package/templates/{nextjs → apps/nextjs}/tsconfig.json +0 -0
  209. /package/templates/{react-router → apps/react-router}/postcss.config.js +0 -0
  210. /package/templates/{react-router → apps/react-router}/public/favicon.ico +0 -0
  211. /package/templates/{react-router → apps/react-router}/react-router.config.ts +0 -0
  212. /package/templates/{react-router → apps/react-router}/src/root.tsx +0 -0
  213. /package/templates/{react-router/src/routes/auth/sign-in.tsx → apps/react-router/src/routes/(auth)/sign-in/index.tsx} +0 -0
  214. /package/templates/{react-router → apps/react-router}/tsconfig.json +0 -0
  215. /package/templates/{_base/convex.json → convex.json} +0 -0
  216. /package/templates/{_base/emails → emails}/tsconfig.json +0 -0
  217. /package/templates/{_base/emails → emails}/welcome_email.tsx +0 -0
  218. /package/templates/{_base/scripts → scripts}/sync_convex_env.ts +0 -0
  219. /package/templates/{_base/shared → shared}/assets/image.d.ts +0 -0
  220. /package/templates/{_base/shared → shared}/assets/src/styles/global.css +0 -0
  221. /package/templates/{_base/shared → shared}/assets/tsconfig.json +0 -0
  222. /package/templates/{_base/shared → shared}/ui/src/base/alert_dialog.tsx +0 -0
  223. /package/templates/{_base/shared → shared}/ui/src/base/badge.tsx +0 -0
  224. /package/templates/{_base/shared → shared}/ui/src/base/basic_data_table.tsx +0 -0
  225. /package/templates/{_base/shared → shared}/ui/src/base/button.tsx +0 -0
  226. /package/templates/{_base/shared → shared}/ui/src/base/button_group.tsx +0 -0
  227. /package/templates/{_base/shared → shared}/ui/src/base/card.tsx +0 -0
  228. /package/templates/{_base/shared → shared}/ui/src/base/checkbox.tsx +0 -0
  229. /package/templates/{_base/shared → shared}/ui/src/base/command.tsx +0 -0
  230. /package/templates/{_base/shared → shared}/ui/src/base/dialog.tsx +0 -0
  231. /package/templates/{_base/shared → shared}/ui/src/base/dropdown_menu.tsx +0 -0
  232. /package/templates/{_base/shared → shared}/ui/src/base/form.tsx +0 -0
  233. /package/templates/{_base/shared → shared}/ui/src/base/input.tsx +0 -0
  234. /package/templates/{_base/shared → shared}/ui/src/base/label.tsx +0 -0
  235. /package/templates/{_base/shared → shared}/ui/src/base/popover.tsx +0 -0
  236. /package/templates/{_base/shared → shared}/ui/src/base/radio_group.tsx +0 -0
  237. /package/templates/{_base/shared → shared}/ui/src/base/resizable.tsx +0 -0
  238. /package/templates/{_base/shared → shared}/ui/src/base/scroll_area.tsx +0 -0
  239. /package/templates/{_base/shared → shared}/ui/src/base/select.tsx +0 -0
  240. /package/templates/{_base/shared → shared}/ui/src/base/separator.tsx +0 -0
  241. /package/templates/{_base/shared → shared}/ui/src/base/sheet.tsx +0 -0
  242. /package/templates/{_base/shared → shared}/ui/src/base/side_bar.tsx +0 -0
  243. /package/templates/{_base/shared → shared}/ui/src/base/skeleton.tsx +0 -0
  244. /package/templates/{_base/shared → shared}/ui/src/base/spinner.tsx +0 -0
  245. /package/templates/{_base/shared → shared}/ui/src/base/switch.tsx +0 -0
  246. /package/templates/{_base/shared → shared}/ui/src/base/table.tsx +0 -0
  247. /package/templates/{_base/shared → shared}/ui/src/base/text_area.tsx +0 -0
  248. /package/templates/{_base/shared → shared}/ui/src/base/tooltip.tsx +0 -0
  249. /package/templates/{_base/shared → shared}/ui/src/base/utils.ts +0 -0
  250. /package/templates/{_base/shared → shared}/ui/src/hooks/use_keyboard_press.tsx +0 -0
  251. /package/templates/{_base/shared → shared}/ui/src/hooks/use_keyboard_release.tsx +0 -0
  252. /package/templates/{_base/shared → shared}/ui/src/hooks/use_mobile.tsx +0 -0
  253. /package/templates/{_base/shared → shared}/ui/src/hooks/use_mouse_click.tsx +0 -0
  254. /package/templates/{_base/shared → shared}/ui/src/hooks/use_mouse_location.tsx +0 -0
  255. /package/templates/{_base/shared → shared}/ui/src/hooks/use_outside_click.tsx +0 -0
  256. /package/templates/{_base/shared → shared}/ui/src/hooks/use_query_params.tsx +0 -0
  257. /package/templates/{_base/shared → shared}/ui/tsconfig.json +0 -0
  258. /package/templates/{_base/shared → shared}/utils/src/convex.ts +0 -0
  259. /package/templates/{_base/shared → shared}/utils/src/time.ts +0 -0
  260. /package/templates/{_base/shared → shared}/utils/tsconfig.json +0 -0
  261. /package/templates/{_base/skills-lock.json → skills-lock.json} +0 -0
@@ -1,87 +0,0 @@
1
- /*
2
- * Copyright (c) Aron Weston 2026.
3
- */
4
-
5
- import { convexQuery, useConvexMutation } from "@convex-dev/react-query";
6
- import { useMutation, useQuery } from "@tanstack/react-query";
7
- import { Trash2 } from "lucide-react";
8
- import { Link } from "react-router";
9
-
10
- import { api } from "@/api/_generated/api";
11
- import type { Id } from "@/api/_generated/dataModel";
12
- import { Button } from "@/ui/base/button";
13
- import { Checkbox } from "@/ui/base/checkbox";
14
- import { Spinner } from "@/ui/base/spinner";
15
- import { CreateTodoSheet } from "@/web/surfaces/todos/create_todo_sheet";
16
-
17
- export const AllTodosSurface = () => {
18
- const { data: todos, isPending } = useQuery(convexQuery(api.todos.crud.listTodos, {}));
19
-
20
- const { mutate: updateTodo } = useMutation({
21
- mutationFn: useConvexMutation(api.todos.crud.updateTodo),
22
- });
23
-
24
- const { mutate: deleteTodo } = useMutation({
25
- mutationFn: useConvexMutation(api.todos.crud.deleteTodo),
26
- });
27
-
28
- return (
29
- <main className="flex flex-1 flex-col overflow-auto p-6">
30
- <div className="flex items-center justify-between mb-6">
31
- <h1 className="text-2xl font-semibold">Todos</h1>
32
- <CreateTodoSheet />
33
- </div>
34
-
35
- {isPending && (
36
- <div className="flex flex-1 items-center justify-center">
37
- <Spinner />
38
- </div>
39
- )}
40
-
41
- {!isPending && todos?.length === 0 && (
42
- <div className="flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground">
43
- <p>No todos yet.</p>
44
- <CreateTodoSheet />
45
- </div>
46
- )}
47
-
48
- {todos && todos.length > 0 && (
49
- <ul className="flex flex-col gap-2 max-w-2xl">
50
- {todos.map((todo) => (
51
- <li
52
- key={todo._id}
53
- className="flex items-center gap-3 rounded-lg border bg-card px-4 py-3"
54
- >
55
- <Checkbox
56
- checked={todo.isCompleted}
57
- onCheckedChange={(checked) =>
58
- updateTodo({
59
- todoId: todo._id as Id<"todos">,
60
- isCompleted: !!checked,
61
- })
62
- }
63
- />
64
- <Link
65
- to={`/todos/${todo._id}`}
66
- className="flex-1 truncate text-sm hover:underline"
67
- style={{
68
- textDecoration: todo.isCompleted ? "line-through" : undefined,
69
- }}
70
- >
71
- {todo.title}
72
- </Link>
73
- <Button
74
- variant="ghost"
75
- size="icon"
76
- className="size-7 shrink-0 text-muted-foreground hover:text-destructive"
77
- onClick={() => deleteTodo({ todoId: todo._id as Id<"todos"> })}
78
- >
79
- <Trash2 className="size-4" />
80
- </Button>
81
- </li>
82
- ))}
83
- </ul>
84
- )}
85
- </main>
86
- );
87
- };
@@ -1,102 +0,0 @@
1
- /*
2
- * Copyright (c) Aron Weston 2026.
3
- */
4
-
5
- import { useConvexMutation } from "@convex-dev/react-query";
6
- import { zodResolver } from "@hookform/resolvers/zod";
7
- import { useMutation } from "@tanstack/react-query";
8
- import { Plus } from "lucide-react";
9
- import { useForm } from "react-hook-form";
10
- import { z } from "zod";
11
-
12
- import { api } from "@/api/_generated/api";
13
- import { Button } from "@/ui/base/button";
14
- import { DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/ui/base/dialog";
15
- import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/ui/base/form";
16
- import { Input } from "@/ui/base/input";
17
- import { Sheet, SheetContent, SheetTrigger } from "@/ui/base/sheet";
18
- import { TextArea } from "@/ui/base/text_area";
19
-
20
- const createTodoSchema = z.object({
21
- title: z.string().min(1, "Title is required"),
22
- description: z.string().optional(),
23
- });
24
-
25
- type CreateTodoSchema = z.infer<typeof createTodoSchema>;
26
-
27
- export const CreateTodoSheet = () => {
28
- const form = useForm<CreateTodoSchema>({
29
- resolver: zodResolver(createTodoSchema),
30
- defaultValues: { title: "", description: "" },
31
- });
32
-
33
- const { mutate: createTodo, isPending } = useMutation({
34
- mutationFn: useConvexMutation(api.todos.crud.createTodo),
35
- onSuccess: () => form.reset(),
36
- });
37
-
38
- const handleSubmit = form.handleSubmit((values) => {
39
- createTodo(values);
40
- });
41
-
42
- return (
43
- <Sheet>
44
- <SheetTrigger asChild>
45
- <Button size="sm">
46
- <Plus className="mr-2 size-4" />
47
- New Todo
48
- </Button>
49
- </SheetTrigger>
50
- <SheetContent className="sm:max-w-[480px]">
51
- <DialogHeader>
52
- <DialogTitle>New Todo</DialogTitle>
53
- <DialogDescription>Add a new todo to your list.</DialogDescription>
54
- </DialogHeader>
55
- <Form {...form}>
56
- <form
57
- onSubmit={handleSubmit}
58
- className="flex flex-col gap-4 pt-4"
59
- onKeyDown={(e) => {
60
- if (e.key === "Enter" && !e.shiftKey) {
61
- e.preventDefault();
62
- handleSubmit();
63
- }
64
- }}
65
- >
66
- <FormField
67
- control={form.control}
68
- name="title"
69
- render={({ field }) => (
70
- <FormItem>
71
- <FormLabel>Title</FormLabel>
72
- <FormControl>
73
- <Input placeholder="Buy groceries" {...field} />
74
- </FormControl>
75
- <FormMessage />
76
- </FormItem>
77
- )}
78
- />
79
- <FormField
80
- control={form.control}
81
- name="description"
82
- render={({ field }) => (
83
- <FormItem>
84
- <FormLabel>Description</FormLabel>
85
- <FormControl>
86
- <TextArea placeholder="Optional details..." rows={3} {...field} />
87
- </FormControl>
88
- <FormMessage />
89
- </FormItem>
90
- )}
91
- />
92
- <DialogFooter>
93
- <Button type="submit" disabled={isPending}>
94
- {isPending ? "Creating…" : "Create Todo"}
95
- </Button>
96
- </DialogFooter>
97
- </form>
98
- </Form>
99
- </SheetContent>
100
- </Sheet>
101
- );
102
- };
@@ -1,81 +0,0 @@
1
- /*
2
- * Copyright (c) Aron Weston 2026.
3
- */
4
-
5
- import { convexQuery, useConvexMutation } from "@convex-dev/react-query";
6
- import { useMutation, useQuery } from "@tanstack/react-query";
7
- import { ArrowLeft } from "lucide-react";
8
- import { Link } from "react-router";
9
-
10
- import { api } from "@/api/_generated/api";
11
- import type { TodoId } from "@/api/todos/types";
12
- import { Badge } from "@/ui/base/badge";
13
- import { Button } from "@/ui/base/button";
14
- import { Checkbox } from "@/ui/base/checkbox";
15
- import { Spinner } from "@/ui/base/spinner";
16
-
17
- type SingleTodoSurfaceProps = {
18
- todoId: TodoId;
19
- };
20
-
21
- export const SingleTodoSurface = ({ todoId }: SingleTodoSurfaceProps) => {
22
- const { data: todo, isPending } = useQuery(convexQuery(api.todos.crud.getTodo, { todoId }));
23
-
24
- const { mutate: updateTodo } = useMutation({
25
- mutationFn: useConvexMutation(api.todos.crud.updateTodo),
26
- });
27
-
28
- if (isPending) {
29
- return (
30
- <main className="flex flex-1 items-center justify-center">
31
- <Spinner />
32
- </main>
33
- );
34
- }
35
-
36
- if (!todo) {
37
- return (
38
- <main className="flex flex-1 flex-col items-center justify-center gap-4">
39
- <p className="text-muted-foreground">Todo not found.</p>
40
- <Button variant="outline" asChild>
41
- <Link to="/todos">
42
- <ArrowLeft className="mr-2 size-4" />
43
- Back to todos
44
- </Link>
45
- </Button>
46
- </main>
47
- );
48
- }
49
-
50
- return (
51
- <main className="flex flex-1 flex-col gap-6 overflow-auto p-6 max-w-2xl">
52
- <Button variant="ghost" className="w-fit -ml-2 text-muted-foreground" asChild>
53
- <Link to="/todos">
54
- <ArrowLeft className="mr-2 size-4" />
55
- Back
56
- </Link>
57
- </Button>
58
-
59
- <div className="flex items-start gap-3">
60
- <Checkbox
61
- className="mt-1"
62
- checked={todo.isCompleted}
63
- onCheckedChange={(checked) => updateTodo({ todoId, isCompleted: !!checked })}
64
- />
65
- <div className="flex flex-col gap-2">
66
- <h1
67
- className="text-2xl font-semibold"
68
- style={{ textDecoration: todo.isCompleted ? "line-through" : undefined }}
69
- >
70
- {todo.title}
71
- </h1>
72
- <Badge variant={todo.isCompleted ? "secondary" : "default"}>
73
- {todo.isCompleted ? "Completed" : "In progress"}
74
- </Badge>
75
- </div>
76
- </div>
77
-
78
- {todo.description && <p className="text-muted-foreground">{todo.description}</p>}
79
- </main>
80
- );
81
- };
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes