@helloleo/plugins 0.2.21 → 0.2.23

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 (340) hide show
  1. package/dist/index.js +73 -42
  2. package/package.json +3 -4
  3. package/dist/templates/tanstack-router-2026-06-15/components.json +0 -22
  4. package/dist/templates/tanstack-router-2026-06-15/index.html +0 -20
  5. package/dist/templates/tanstack-router-2026-06-15/package.json +0 -90
  6. package/dist/templates/tanstack-router-2026-06-15/src/components/error-component.tsx +0 -50
  7. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/accordion.tsx +0 -51
  8. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/alert-dialog.tsx +0 -115
  9. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/alert.tsx +0 -49
  10. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/aspect-ratio.tsx +0 -5
  11. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/avatar.tsx +0 -47
  12. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/badge.tsx +0 -32
  13. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/breadcrumb.tsx +0 -101
  14. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/button.tsx +0 -49
  15. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/calendar.tsx +0 -177
  16. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/card.tsx +0 -55
  17. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/carousel.tsx +0 -240
  18. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/chart.tsx +0 -331
  19. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/checkbox.tsx +0 -26
  20. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/collapsible.tsx +0 -11
  21. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/command.tsx +0 -143
  22. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/context-menu.tsx +0 -187
  23. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/dialog.tsx +0 -104
  24. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/drawer.tsx +0 -98
  25. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/dropdown-menu.tsx +0 -188
  26. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/form.tsx +0 -171
  27. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/hover-card.tsx +0 -27
  28. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/input-otp.tsx +0 -69
  29. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/input.tsx +0 -22
  30. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/label.tsx +0 -21
  31. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/menubar.tsx +0 -229
  32. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/navigation-menu.tsx +0 -120
  33. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/pagination.tsx +0 -98
  34. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/popover.tsx +0 -31
  35. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/progress.tsx +0 -25
  36. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/radio-group.tsx +0 -36
  37. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/resizable.tsx +0 -37
  38. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/scroll-area.tsx +0 -44
  39. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/select.tsx +0 -152
  40. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/separator.tsx +0 -24
  41. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/sheet.tsx +0 -122
  42. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/sidebar.tsx +0 -744
  43. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/skeleton.tsx +0 -7
  44. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/slider.tsx +0 -23
  45. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/sonner.tsx +0 -23
  46. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/switch.tsx +0 -27
  47. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/table.tsx +0 -94
  48. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/tabs.tsx +0 -53
  49. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/textarea.tsx +0 -21
  50. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/toggle-group.tsx +0 -57
  51. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/toggle.tsx +0 -42
  52. package/dist/templates/tanstack-router-2026-06-15/src/components/ui/tooltip.tsx +0 -32
  53. package/dist/templates/tanstack-router-2026-06-15/src/hooks/use-mobile.tsx +0 -19
  54. package/dist/templates/tanstack-router-2026-06-15/src/lib/proxy.ts +0 -123
  55. package/dist/templates/tanstack-router-2026-06-15/src/lib/utils.ts +0 -6
  56. package/dist/templates/tanstack-router-2026-06-15/src/main.tsx +0 -37
  57. package/dist/templates/tanstack-router-2026-06-15/src/routeTree.gen.ts +0 -59
  58. package/dist/templates/tanstack-router-2026-06-15/src/routes/README.md +0 -85
  59. package/dist/templates/tanstack-router-2026-06-15/src/routes/__root.tsx +0 -18
  60. package/dist/templates/tanstack-router-2026-06-15/src/routes/index.tsx +0 -18
  61. package/dist/templates/tanstack-router-2026-06-15/src/styles.css +0 -214
  62. package/dist/templates/tanstack-router-2026-06-15/tsconfig.json +0 -27
  63. package/dist/templates/tanstack-router-2026-06-15/vite.config.ts +0 -23
  64. package/dist/templates/tanstack-start-2026-06-18/components.json +0 -22
  65. package/dist/templates/tanstack-start-2026-06-18/drizzle.config.ts +0 -15
  66. package/dist/templates/tanstack-start-2026-06-18/package.json +0 -104
  67. package/dist/templates/tanstack-start-2026-06-18/src/components/error-component.tsx +0 -50
  68. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/accordion.tsx +0 -51
  69. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/alert-dialog.tsx +0 -115
  70. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/alert.tsx +0 -49
  71. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/aspect-ratio.tsx +0 -5
  72. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/avatar.tsx +0 -47
  73. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/badge.tsx +0 -32
  74. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/breadcrumb.tsx +0 -101
  75. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/button.tsx +0 -49
  76. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/calendar.tsx +0 -177
  77. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/card.tsx +0 -55
  78. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/carousel.tsx +0 -240
  79. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/chart.tsx +0 -371
  80. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/checkbox.tsx +0 -26
  81. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/collapsible.tsx +0 -11
  82. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/command.tsx +0 -143
  83. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/context-menu.tsx +0 -187
  84. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/dialog.tsx +0 -104
  85. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/drawer.tsx +0 -98
  86. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/dropdown-menu.tsx +0 -188
  87. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/form.tsx +0 -171
  88. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/hover-card.tsx +0 -27
  89. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/input-otp.tsx +0 -69
  90. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/input.tsx +0 -22
  91. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/label.tsx +0 -21
  92. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/menubar.tsx +0 -229
  93. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/navigation-menu.tsx +0 -120
  94. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/pagination.tsx +0 -98
  95. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/popover.tsx +0 -31
  96. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/progress.tsx +0 -25
  97. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/radio-group.tsx +0 -36
  98. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/resizable.tsx +0 -37
  99. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/scroll-area.tsx +0 -44
  100. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/select.tsx +0 -152
  101. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/separator.tsx +0 -24
  102. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/sheet.tsx +0 -122
  103. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/sidebar.tsx +0 -744
  104. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/skeleton.tsx +0 -7
  105. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/slider.tsx +0 -23
  106. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/sonner.tsx +0 -23
  107. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/switch.tsx +0 -27
  108. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/table.tsx +0 -94
  109. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/tabs.tsx +0 -53
  110. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/textarea.tsx +0 -21
  111. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/toggle-group.tsx +0 -57
  112. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/toggle.tsx +0 -42
  113. package/dist/templates/tanstack-start-2026-06-18/src/components/ui/tooltip.tsx +0 -32
  114. package/dist/templates/tanstack-start-2026-06-18/src/db/index.ts +0 -9
  115. package/dist/templates/tanstack-start-2026-06-18/src/db/schema.ts +0 -18
  116. package/dist/templates/tanstack-start-2026-06-18/src/global.d.ts +0 -3
  117. package/dist/templates/tanstack-start-2026-06-18/src/hooks/use-mobile.tsx +0 -19
  118. package/dist/templates/tanstack-start-2026-06-18/src/lib/proxy.ts +0 -119
  119. package/dist/templates/tanstack-start-2026-06-18/src/lib/utils.ts +0 -6
  120. package/dist/templates/tanstack-start-2026-06-18/src/routeTree.gen.ts +0 -86
  121. package/dist/templates/tanstack-start-2026-06-18/src/router.tsx +0 -37
  122. package/dist/templates/tanstack-start-2026-06-18/src/routes/README.md +0 -94
  123. package/dist/templates/tanstack-start-2026-06-18/src/routes/__root.tsx +0 -65
  124. package/dist/templates/tanstack-start-2026-06-18/src/routes/api/health.ts +0 -81
  125. package/dist/templates/tanstack-start-2026-06-18/src/routes/index.tsx +0 -33
  126. package/dist/templates/tanstack-start-2026-06-18/src/server.ts +0 -32
  127. package/dist/templates/tanstack-start-2026-06-18/src/styles.css +0 -214
  128. package/dist/templates/tanstack-start-2026-06-18/tsconfig.json +0 -27
  129. package/dist/templates/tanstack-start-2026-06-18/vite.config.ts +0 -17
  130. package/src/index.ts +0 -8
  131. package/src/template-render.ts +0 -53
  132. package/src/templates/tanstack-router-2026-06-15/components.json +0 -22
  133. package/src/templates/tanstack-router-2026-06-15/index.html +0 -20
  134. package/src/templates/tanstack-router-2026-06-15/package.json +0 -90
  135. package/src/templates/tanstack-router-2026-06-15/src/components/error-component.tsx +0 -50
  136. package/src/templates/tanstack-router-2026-06-15/src/components/ui/accordion.tsx +0 -51
  137. package/src/templates/tanstack-router-2026-06-15/src/components/ui/alert-dialog.tsx +0 -115
  138. package/src/templates/tanstack-router-2026-06-15/src/components/ui/alert.tsx +0 -49
  139. package/src/templates/tanstack-router-2026-06-15/src/components/ui/aspect-ratio.tsx +0 -5
  140. package/src/templates/tanstack-router-2026-06-15/src/components/ui/avatar.tsx +0 -47
  141. package/src/templates/tanstack-router-2026-06-15/src/components/ui/badge.tsx +0 -32
  142. package/src/templates/tanstack-router-2026-06-15/src/components/ui/breadcrumb.tsx +0 -101
  143. package/src/templates/tanstack-router-2026-06-15/src/components/ui/button.tsx +0 -49
  144. package/src/templates/tanstack-router-2026-06-15/src/components/ui/calendar.tsx +0 -177
  145. package/src/templates/tanstack-router-2026-06-15/src/components/ui/card.tsx +0 -55
  146. package/src/templates/tanstack-router-2026-06-15/src/components/ui/carousel.tsx +0 -240
  147. package/src/templates/tanstack-router-2026-06-15/src/components/ui/chart.tsx +0 -331
  148. package/src/templates/tanstack-router-2026-06-15/src/components/ui/checkbox.tsx +0 -26
  149. package/src/templates/tanstack-router-2026-06-15/src/components/ui/collapsible.tsx +0 -11
  150. package/src/templates/tanstack-router-2026-06-15/src/components/ui/command.tsx +0 -143
  151. package/src/templates/tanstack-router-2026-06-15/src/components/ui/context-menu.tsx +0 -187
  152. package/src/templates/tanstack-router-2026-06-15/src/components/ui/dialog.tsx +0 -104
  153. package/src/templates/tanstack-router-2026-06-15/src/components/ui/drawer.tsx +0 -98
  154. package/src/templates/tanstack-router-2026-06-15/src/components/ui/dropdown-menu.tsx +0 -188
  155. package/src/templates/tanstack-router-2026-06-15/src/components/ui/form.tsx +0 -171
  156. package/src/templates/tanstack-router-2026-06-15/src/components/ui/hover-card.tsx +0 -27
  157. package/src/templates/tanstack-router-2026-06-15/src/components/ui/input-otp.tsx +0 -69
  158. package/src/templates/tanstack-router-2026-06-15/src/components/ui/input.tsx +0 -22
  159. package/src/templates/tanstack-router-2026-06-15/src/components/ui/label.tsx +0 -21
  160. package/src/templates/tanstack-router-2026-06-15/src/components/ui/menubar.tsx +0 -229
  161. package/src/templates/tanstack-router-2026-06-15/src/components/ui/navigation-menu.tsx +0 -120
  162. package/src/templates/tanstack-router-2026-06-15/src/components/ui/pagination.tsx +0 -98
  163. package/src/templates/tanstack-router-2026-06-15/src/components/ui/popover.tsx +0 -31
  164. package/src/templates/tanstack-router-2026-06-15/src/components/ui/progress.tsx +0 -25
  165. package/src/templates/tanstack-router-2026-06-15/src/components/ui/radio-group.tsx +0 -36
  166. package/src/templates/tanstack-router-2026-06-15/src/components/ui/resizable.tsx +0 -37
  167. package/src/templates/tanstack-router-2026-06-15/src/components/ui/scroll-area.tsx +0 -44
  168. package/src/templates/tanstack-router-2026-06-15/src/components/ui/select.tsx +0 -152
  169. package/src/templates/tanstack-router-2026-06-15/src/components/ui/separator.tsx +0 -24
  170. package/src/templates/tanstack-router-2026-06-15/src/components/ui/sheet.tsx +0 -122
  171. package/src/templates/tanstack-router-2026-06-15/src/components/ui/sidebar.tsx +0 -744
  172. package/src/templates/tanstack-router-2026-06-15/src/components/ui/skeleton.tsx +0 -7
  173. package/src/templates/tanstack-router-2026-06-15/src/components/ui/slider.tsx +0 -23
  174. package/src/templates/tanstack-router-2026-06-15/src/components/ui/sonner.tsx +0 -23
  175. package/src/templates/tanstack-router-2026-06-15/src/components/ui/switch.tsx +0 -27
  176. package/src/templates/tanstack-router-2026-06-15/src/components/ui/table.tsx +0 -94
  177. package/src/templates/tanstack-router-2026-06-15/src/components/ui/tabs.tsx +0 -53
  178. package/src/templates/tanstack-router-2026-06-15/src/components/ui/textarea.tsx +0 -21
  179. package/src/templates/tanstack-router-2026-06-15/src/components/ui/toggle-group.tsx +0 -57
  180. package/src/templates/tanstack-router-2026-06-15/src/components/ui/toggle.tsx +0 -42
  181. package/src/templates/tanstack-router-2026-06-15/src/components/ui/tooltip.tsx +0 -32
  182. package/src/templates/tanstack-router-2026-06-15/src/hooks/use-mobile.tsx +0 -19
  183. package/src/templates/tanstack-router-2026-06-15/src/lib/proxy.ts +0 -123
  184. package/src/templates/tanstack-router-2026-06-15/src/lib/utils.ts +0 -6
  185. package/src/templates/tanstack-router-2026-06-15/src/main.tsx +0 -37
  186. package/src/templates/tanstack-router-2026-06-15/src/routeTree.gen.ts +0 -59
  187. package/src/templates/tanstack-router-2026-06-15/src/routes/README.md +0 -85
  188. package/src/templates/tanstack-router-2026-06-15/src/routes/__root.tsx +0 -18
  189. package/src/templates/tanstack-router-2026-06-15/src/routes/index.tsx +0 -18
  190. package/src/templates/tanstack-router-2026-06-15/src/styles.css +0 -214
  191. package/src/templates/tanstack-router-2026-06-15/tsconfig.json +0 -27
  192. package/src/templates/tanstack-router-2026-06-15/vite.config.ts +0 -23
  193. package/src/templates/tanstack-start-2026-06-18/components.json +0 -22
  194. package/src/templates/tanstack-start-2026-06-18/drizzle.config.ts +0 -15
  195. package/src/templates/tanstack-start-2026-06-18/package.json +0 -104
  196. package/src/templates/tanstack-start-2026-06-18/src/components/error-component.tsx +0 -50
  197. package/src/templates/tanstack-start-2026-06-18/src/components/ui/accordion.tsx +0 -51
  198. package/src/templates/tanstack-start-2026-06-18/src/components/ui/alert-dialog.tsx +0 -115
  199. package/src/templates/tanstack-start-2026-06-18/src/components/ui/alert.tsx +0 -49
  200. package/src/templates/tanstack-start-2026-06-18/src/components/ui/aspect-ratio.tsx +0 -5
  201. package/src/templates/tanstack-start-2026-06-18/src/components/ui/avatar.tsx +0 -47
  202. package/src/templates/tanstack-start-2026-06-18/src/components/ui/badge.tsx +0 -32
  203. package/src/templates/tanstack-start-2026-06-18/src/components/ui/breadcrumb.tsx +0 -101
  204. package/src/templates/tanstack-start-2026-06-18/src/components/ui/button.tsx +0 -49
  205. package/src/templates/tanstack-start-2026-06-18/src/components/ui/calendar.tsx +0 -177
  206. package/src/templates/tanstack-start-2026-06-18/src/components/ui/card.tsx +0 -55
  207. package/src/templates/tanstack-start-2026-06-18/src/components/ui/carousel.tsx +0 -240
  208. package/src/templates/tanstack-start-2026-06-18/src/components/ui/chart.tsx +0 -371
  209. package/src/templates/tanstack-start-2026-06-18/src/components/ui/checkbox.tsx +0 -26
  210. package/src/templates/tanstack-start-2026-06-18/src/components/ui/collapsible.tsx +0 -11
  211. package/src/templates/tanstack-start-2026-06-18/src/components/ui/command.tsx +0 -143
  212. package/src/templates/tanstack-start-2026-06-18/src/components/ui/context-menu.tsx +0 -187
  213. package/src/templates/tanstack-start-2026-06-18/src/components/ui/dialog.tsx +0 -104
  214. package/src/templates/tanstack-start-2026-06-18/src/components/ui/drawer.tsx +0 -98
  215. package/src/templates/tanstack-start-2026-06-18/src/components/ui/dropdown-menu.tsx +0 -188
  216. package/src/templates/tanstack-start-2026-06-18/src/components/ui/form.tsx +0 -171
  217. package/src/templates/tanstack-start-2026-06-18/src/components/ui/hover-card.tsx +0 -27
  218. package/src/templates/tanstack-start-2026-06-18/src/components/ui/input-otp.tsx +0 -69
  219. package/src/templates/tanstack-start-2026-06-18/src/components/ui/input.tsx +0 -22
  220. package/src/templates/tanstack-start-2026-06-18/src/components/ui/label.tsx +0 -21
  221. package/src/templates/tanstack-start-2026-06-18/src/components/ui/menubar.tsx +0 -229
  222. package/src/templates/tanstack-start-2026-06-18/src/components/ui/navigation-menu.tsx +0 -120
  223. package/src/templates/tanstack-start-2026-06-18/src/components/ui/pagination.tsx +0 -98
  224. package/src/templates/tanstack-start-2026-06-18/src/components/ui/popover.tsx +0 -31
  225. package/src/templates/tanstack-start-2026-06-18/src/components/ui/progress.tsx +0 -25
  226. package/src/templates/tanstack-start-2026-06-18/src/components/ui/radio-group.tsx +0 -36
  227. package/src/templates/tanstack-start-2026-06-18/src/components/ui/resizable.tsx +0 -37
  228. package/src/templates/tanstack-start-2026-06-18/src/components/ui/scroll-area.tsx +0 -44
  229. package/src/templates/tanstack-start-2026-06-18/src/components/ui/select.tsx +0 -152
  230. package/src/templates/tanstack-start-2026-06-18/src/components/ui/separator.tsx +0 -24
  231. package/src/templates/tanstack-start-2026-06-18/src/components/ui/sheet.tsx +0 -122
  232. package/src/templates/tanstack-start-2026-06-18/src/components/ui/sidebar.tsx +0 -744
  233. package/src/templates/tanstack-start-2026-06-18/src/components/ui/skeleton.tsx +0 -7
  234. package/src/templates/tanstack-start-2026-06-18/src/components/ui/slider.tsx +0 -23
  235. package/src/templates/tanstack-start-2026-06-18/src/components/ui/sonner.tsx +0 -23
  236. package/src/templates/tanstack-start-2026-06-18/src/components/ui/switch.tsx +0 -27
  237. package/src/templates/tanstack-start-2026-06-18/src/components/ui/table.tsx +0 -94
  238. package/src/templates/tanstack-start-2026-06-18/src/components/ui/tabs.tsx +0 -53
  239. package/src/templates/tanstack-start-2026-06-18/src/components/ui/textarea.tsx +0 -21
  240. package/src/templates/tanstack-start-2026-06-18/src/components/ui/toggle-group.tsx +0 -57
  241. package/src/templates/tanstack-start-2026-06-18/src/components/ui/toggle.tsx +0 -42
  242. package/src/templates/tanstack-start-2026-06-18/src/components/ui/tooltip.tsx +0 -32
  243. package/src/templates/tanstack-start-2026-06-18/src/db/index.ts +0 -9
  244. package/src/templates/tanstack-start-2026-06-18/src/db/schema.ts +0 -18
  245. package/src/templates/tanstack-start-2026-06-18/src/global.d.ts +0 -3
  246. package/src/templates/tanstack-start-2026-06-18/src/hooks/use-mobile.tsx +0 -19
  247. package/src/templates/tanstack-start-2026-06-18/src/lib/proxy.ts +0 -119
  248. package/src/templates/tanstack-start-2026-06-18/src/lib/utils.ts +0 -6
  249. package/src/templates/tanstack-start-2026-06-18/src/routeTree.gen.ts +0 -86
  250. package/src/templates/tanstack-start-2026-06-18/src/router.tsx +0 -37
  251. package/src/templates/tanstack-start-2026-06-18/src/routes/README.md +0 -94
  252. package/src/templates/tanstack-start-2026-06-18/src/routes/__root.tsx +0 -65
  253. package/src/templates/tanstack-start-2026-06-18/src/routes/api/health.ts +0 -81
  254. package/src/templates/tanstack-start-2026-06-18/src/routes/index.tsx +0 -33
  255. package/src/templates/tanstack-start-2026-06-18/src/server.ts +0 -32
  256. package/src/templates/tanstack-start-2026-06-18/src/styles.css +0 -214
  257. package/src/templates/tanstack-start-2026-06-18/tsconfig.json +0 -27
  258. package/src/templates/tanstack-start-2026-06-18/vite.config.ts +0 -17
  259. package/src/templates/tanstack-start-2026-07-30/components.json +0 -22
  260. package/src/templates/tanstack-start-2026-07-30/drizzle/meta/_journal.json +0 -1
  261. package/src/templates/tanstack-start-2026-07-30/drizzle.config.ts +0 -18
  262. package/src/templates/tanstack-start-2026-07-30/package.json +0 -103
  263. package/src/templates/tanstack-start-2026-07-30/src/components/error-component.tsx +0 -50
  264. package/src/templates/tanstack-start-2026-07-30/src/components/ui/accordion.tsx +0 -51
  265. package/src/templates/tanstack-start-2026-07-30/src/components/ui/alert-dialog.tsx +0 -115
  266. package/src/templates/tanstack-start-2026-07-30/src/components/ui/alert.tsx +0 -49
  267. package/src/templates/tanstack-start-2026-07-30/src/components/ui/aspect-ratio.tsx +0 -5
  268. package/src/templates/tanstack-start-2026-07-30/src/components/ui/avatar.tsx +0 -47
  269. package/src/templates/tanstack-start-2026-07-30/src/components/ui/badge.tsx +0 -32
  270. package/src/templates/tanstack-start-2026-07-30/src/components/ui/breadcrumb.tsx +0 -101
  271. package/src/templates/tanstack-start-2026-07-30/src/components/ui/button.tsx +0 -49
  272. package/src/templates/tanstack-start-2026-07-30/src/components/ui/calendar.tsx +0 -177
  273. package/src/templates/tanstack-start-2026-07-30/src/components/ui/card.tsx +0 -55
  274. package/src/templates/tanstack-start-2026-07-30/src/components/ui/carousel.tsx +0 -240
  275. package/src/templates/tanstack-start-2026-07-30/src/components/ui/chart.tsx +0 -371
  276. package/src/templates/tanstack-start-2026-07-30/src/components/ui/checkbox.tsx +0 -26
  277. package/src/templates/tanstack-start-2026-07-30/src/components/ui/collapsible.tsx +0 -11
  278. package/src/templates/tanstack-start-2026-07-30/src/components/ui/command.tsx +0 -143
  279. package/src/templates/tanstack-start-2026-07-30/src/components/ui/context-menu.tsx +0 -187
  280. package/src/templates/tanstack-start-2026-07-30/src/components/ui/dialog.tsx +0 -104
  281. package/src/templates/tanstack-start-2026-07-30/src/components/ui/drawer.tsx +0 -98
  282. package/src/templates/tanstack-start-2026-07-30/src/components/ui/dropdown-menu.tsx +0 -188
  283. package/src/templates/tanstack-start-2026-07-30/src/components/ui/form.tsx +0 -171
  284. package/src/templates/tanstack-start-2026-07-30/src/components/ui/hover-card.tsx +0 -27
  285. package/src/templates/tanstack-start-2026-07-30/src/components/ui/input-otp.tsx +0 -69
  286. package/src/templates/tanstack-start-2026-07-30/src/components/ui/input.tsx +0 -22
  287. package/src/templates/tanstack-start-2026-07-30/src/components/ui/label.tsx +0 -21
  288. package/src/templates/tanstack-start-2026-07-30/src/components/ui/menubar.tsx +0 -229
  289. package/src/templates/tanstack-start-2026-07-30/src/components/ui/navigation-menu.tsx +0 -120
  290. package/src/templates/tanstack-start-2026-07-30/src/components/ui/pagination.tsx +0 -98
  291. package/src/templates/tanstack-start-2026-07-30/src/components/ui/popover.tsx +0 -31
  292. package/src/templates/tanstack-start-2026-07-30/src/components/ui/progress.tsx +0 -25
  293. package/src/templates/tanstack-start-2026-07-30/src/components/ui/radio-group.tsx +0 -36
  294. package/src/templates/tanstack-start-2026-07-30/src/components/ui/resizable.tsx +0 -37
  295. package/src/templates/tanstack-start-2026-07-30/src/components/ui/scroll-area.tsx +0 -44
  296. package/src/templates/tanstack-start-2026-07-30/src/components/ui/select.tsx +0 -152
  297. package/src/templates/tanstack-start-2026-07-30/src/components/ui/separator.tsx +0 -24
  298. package/src/templates/tanstack-start-2026-07-30/src/components/ui/sheet.tsx +0 -122
  299. package/src/templates/tanstack-start-2026-07-30/src/components/ui/sidebar.tsx +0 -744
  300. package/src/templates/tanstack-start-2026-07-30/src/components/ui/skeleton.tsx +0 -7
  301. package/src/templates/tanstack-start-2026-07-30/src/components/ui/slider.tsx +0 -23
  302. package/src/templates/tanstack-start-2026-07-30/src/components/ui/sonner.tsx +0 -23
  303. package/src/templates/tanstack-start-2026-07-30/src/components/ui/switch.tsx +0 -27
  304. package/src/templates/tanstack-start-2026-07-30/src/components/ui/table.tsx +0 -94
  305. package/src/templates/tanstack-start-2026-07-30/src/components/ui/tabs.tsx +0 -53
  306. package/src/templates/tanstack-start-2026-07-30/src/components/ui/textarea.tsx +0 -21
  307. package/src/templates/tanstack-start-2026-07-30/src/components/ui/toggle-group.tsx +0 -57
  308. package/src/templates/tanstack-start-2026-07-30/src/components/ui/toggle.tsx +0 -42
  309. package/src/templates/tanstack-start-2026-07-30/src/components/ui/tooltip.tsx +0 -32
  310. package/src/templates/tanstack-start-2026-07-30/src/db/index.ts +0 -9
  311. package/src/templates/tanstack-start-2026-07-30/src/db/schema.ts +0 -34
  312. package/src/templates/tanstack-start-2026-07-30/src/global.d.ts +0 -3
  313. package/src/templates/tanstack-start-2026-07-30/src/hooks/use-mobile.tsx +0 -19
  314. package/src/templates/tanstack-start-2026-07-30/src/lib/kv.ts +0 -37
  315. package/src/templates/tanstack-start-2026-07-30/src/lib/proxy.ts +0 -111
  316. package/src/templates/tanstack-start-2026-07-30/src/lib/storage.ts +0 -45
  317. package/src/templates/tanstack-start-2026-07-30/src/lib/utils.ts +0 -6
  318. package/src/templates/tanstack-start-2026-07-30/src/routeTree.gen.ts +0 -86
  319. package/src/templates/tanstack-start-2026-07-30/src/router.tsx +0 -37
  320. package/src/templates/tanstack-start-2026-07-30/src/routes/README.md +0 -94
  321. package/src/templates/tanstack-start-2026-07-30/src/routes/__root.tsx +0 -65
  322. package/src/templates/tanstack-start-2026-07-30/src/routes/api/health.ts +0 -83
  323. package/src/templates/tanstack-start-2026-07-30/src/routes/index.tsx +0 -33
  324. package/src/templates/tanstack-start-2026-07-30/src/server.ts +0 -32
  325. package/src/templates/tanstack-start-2026-07-30/src/styles.css +0 -214
  326. package/src/templates/tanstack-start-2026-07-30/tsconfig.json +0 -27
  327. package/src/templates/tanstack-start-2026-07-30/vite.config.ts +0 -17
  328. package/src/tools/create-plan.ts +0 -61
  329. package/src/tools/inspect-http.ts +0 -276
  330. package/src/tools/list-plans.ts +0 -85
  331. package/src/tools/modify-plan.ts +0 -79
  332. package/src/tools/remove.ts +0 -53
  333. package/src/tools/scaffold.ts +0 -213
  334. package/src/tools/setup-authentication/auth-files.ts +0 -144
  335. package/src/tools/setup-authentication/constants.ts +0 -19
  336. package/src/tools/setup-authentication/db-schema.ts +0 -96
  337. package/src/tools/setup-authentication/index.ts +0 -148
  338. package/src/tools/setup-authentication/package-json.ts +0 -17
  339. package/src/tools/setup-authentication/pages.ts +0 -241
  340. package/src/tools/setup-netsuite.ts +0 -1404
package/dist/index.js CHANGED
@@ -24900,23 +24900,9 @@ async function renderTemplate(templateId, vars, destDir) {
24900
24900
  }
24901
24901
 
24902
24902
  // src/tools/scaffold.ts
24903
- var SCAFFOLD_TEMPLATES = {
24904
- "tanstack-start": "tanstack-start-2026-07-30",
24905
- "tanstack-router": "tanstack-router-2026-06-15"
24906
- };
24907
- var LEGACY_TEMPLATES = ["tanstack-start-2026-06-18"];
24908
- var SCAFFOLD_VERSION = SCAFFOLD_TEMPLATES["tanstack-start"];
24909
- function resolveTemplateId(type) {
24910
- const version3 = process.env.PLUGINS_SCAFFOLD_VERSION;
24911
- const known = [
24912
- ...Object.values(SCAFFOLD_TEMPLATES),
24913
- ...LEGACY_TEMPLATES
24914
- ];
24915
- const pinned = version3 && known.includes(version3) ? version3 : undefined;
24916
- if (type) {
24917
- return pinned?.startsWith(type) ? pinned : SCAFFOLD_TEMPLATES[type];
24918
- }
24919
- return pinned ?? SCAFFOLD_TEMPLATES["tanstack-router"];
24903
+ var SCAFFOLD_VERSION = "tanstack-start-2026-07-30";
24904
+ function resolveTemplateId() {
24905
+ return SCAFFOLD_VERSION;
24920
24906
  }
24921
24907
  function projectUuidFromDir(dir) {
24922
24908
  return path3.basename(dir);
@@ -24927,14 +24913,13 @@ function integrationProxyUrl(projectUuid) {
24927
24913
  }
24928
24914
  var scaffoldOptionsSchema = exports_external2.object({
24929
24915
  name: exports_external2.string().describe("Human-readable name for SEO, e.g. 'Shipping Platform'"),
24930
- description: exports_external2.string().describe("One sentence describing the app. Used as the meta description."),
24931
- type: exports_external2.enum(["tanstack-start", "tanstack-router"]).optional().describe("Project type. 'tanstack-start': SSR app with API routes and a " + "database, KV and bucket \u2014 use it whenever the app needs to " + "persist data or run server-side code, and always for " + "setup_authentication (it needs server routes). " + "'tanstack-router': client-only SPA with no server and no database " + "\u2014 use it only for pure frontends that talk to external APIs. " + "Omit to use the deployment's default.")
24916
+ description: exports_external2.string().describe("One sentence describing the app. Used as the meta description.")
24932
24917
  });
24933
24918
  function slugify(name) {
24934
24919
  return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "leo-project";
24935
24920
  }
24936
- async function writeBaseScaffold({ name, description, type }, dir) {
24937
- const templateId = resolveTemplateId(type);
24921
+ async function writeBaseScaffold({ name, description }, dir) {
24922
+ const templateId = resolveTemplateId();
24938
24923
  const projectUuid = projectUuidFromDir(dir);
24939
24924
  const created = await renderTemplate(templateId, {
24940
24925
  LEO_NAME: name,
@@ -24949,33 +24934,26 @@ async function writeBaseScaffold({ name, description, type }, dir) {
24949
24934
  return [...created, leoPath];
24950
24935
  }
24951
24936
  var scaffold = tool({
24952
- description: "Scaffold a new project with React 19, file-based routing (TanStack), " + "Tailwind v4, shadcn/ui, and react-query. Two types: 'tanstack-start' " + "(SSR, API routes, and a database, KV and bucket via @helloleo/runtime) " + "or 'tanstack-router' (client-only SPA, no server, no database). Call " + "this first for any new project, before writing routes or components.",
24937
+ description: "Scaffold a new project with React 19, file-based routing (TanStack), " + "Tailwind v4, shadcn/ui, and react-query. Projects are TanStack Start: " + "SSR with API routes and a database, KV and bucket via @helloleo/runtime. " + "Call this first for any new project, before writing routes or components.",
24953
24938
  args: {
24954
24939
  name: scaffoldOptionsSchema.shape.name,
24955
- description: scaffoldOptionsSchema.shape.description,
24956
- type: scaffoldOptionsSchema.shape.type
24940
+ description: scaffoldOptionsSchema.shape.description
24957
24941
  },
24958
24942
  async execute(args, context) {
24959
- const isStart = resolveTemplateId(args.type).startsWith("tanstack-start");
24960
24943
  const created = await writeBaseScaffold(args, context.directory);
24961
24944
  const uiComponents = created.filter((f) => f.startsWith("src/components/ui/"));
24962
24945
  const rest = created.filter((f) => !f.startsWith("src/components/ui/"));
24963
- const typeNotes = isStart ? [
24946
+ const typeNotes = [
24964
24947
  "- This is a TanStack Start project. The server entry is src/server.ts. There is no index.html or client entrypoint.",
24965
24948
  "- For JSON/CRUD APIs, add server routes under src/routes/api/. Read src/routes/api/health.ts first, add routes as needed.",
24966
24949
  "- The database schema lives in src/db/schema.ts and is the single source of truth. Migration files under drizzle/ are generated and applied automatically. Never create, edit or delete them.",
24967
24950
  "- Never rename existing tables or columns in schema.ts. Renames cannot be auto-migrated: no migration file is generated, the database keeps the old name, and every query against the new name fails at runtime with a 500. To reshape data, add a new column or table, write to it, and migrate old values in app code (e.g. fall back to the old column on read).",
24968
24951
  "- Persistence goes through @helloleo/runtime exclusively: database via #/db (see src/db/index.ts), key-value store via #/lib/kv (see src/lib/kv.ts), file storage via #/lib/storage (see src/lib/storage.ts -- uploads/downloads flow through your API routes; presigned URLs are NOT available), env/secrets via env from @helloleo/runtime. Read those files before server-side data work. Never install another DB/storage client, never import from cloudflare:workers, all of it is server-side only."
24969
- ] : [
24970
- "- This is a TanStack Router SPA. The client entry is index.html -> src/main.tsx. There is no server: no API routes, no server functions, no database.",
24971
- "- Fetch data from external APIs only. If the app needs its own persistence or server-side code, it should have been scaffolded as tanstack-start."
24972
24952
  ];
24973
- const nextSteps = isStart ? [
24953
+ const nextSteps = [
24974
24954
  "Next: read src/routes/index.tsx and continue with the user's request.",
24975
24955
  "For authentication (password and/or OAuth), call setup_authentication.",
24976
24956
  "For NetSuite projects, call setup_netsuite."
24977
- ] : [
24978
- "Next: read src/routes/index.tsx and continue with the user's request."
24979
24957
  ];
24980
24958
  return [
24981
24959
  `Scaffolded ${created.length} files:`,
@@ -25879,6 +25857,9 @@ export async function netsuiteFetch(sid: string, path: string, init: RequestInit
25879
25857
  const headers = new Headers(init.headers)
25880
25858
  headers.set('Authorization', \`Bearer \${session.accessToken}\`)
25881
25859
  if (init.body && !headers.has('Content-Type')) headers.set('Content-Type', 'application/json')
25860
+ // NetSuite's suiteql endpoint requires Prefer: transient (400s without it on
25861
+ // some accounts). Set centrally so no call site can forget it.
25862
+ if (url.includes('/suiteql') && !headers.has('Prefer')) headers.set('Prefer', 'transient')
25882
25863
  return fetch(url, { ...init, headers })
25883
25864
  }
25884
25865
  `;
@@ -25988,6 +25969,21 @@ export const Route = createFileRoute('/auth/netsuite/callback')({
25988
25969
  })
25989
25970
 
25990
25971
  const dest = new URL(flow.returnTo)
25972
+
25973
+ // Popup flow: signInWithNetSuite appended popup=1 to return_to. Hand
25974
+ // the sid back to the opener via postMessage and close -- the preview
25975
+ // iframe never navigates. Target the app's own origin, never '*'.
25976
+ if (dest.searchParams.get('popup') === '1') {
25977
+ dest.searchParams.delete('popup')
25978
+ const html = \`<!DOCTYPE html><html><body><p>Signed in. You can close this window.</p><script>
25979
+ (function(){
25980
+ try{window.opener && window.opener.postMessage({type:'netsuite_auth',sid:\${JSON.stringify(sid)}},\${JSON.stringify(dest.origin)});}catch(e){}
25981
+ window.close();
25982
+ })();
25983
+ <\\/script></body></html>\`
25984
+ return new Response(html, { status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' } })
25985
+ }
25986
+
25991
25987
  dest.hash = \`nssid=\${sid}\`
25992
25988
  return new Response(null, { status: 302, headers: { Location: dest.toString() } })
25993
25989
  },
@@ -26110,23 +26106,58 @@ export function getSessionToken(): string | null {
26110
26106
  }
26111
26107
 
26112
26108
  export function signInWithNetSuite(returnTo: string = window.location.href) {
26113
- const url = new URL('/auth/netsuite/start', window.location.origin)
26114
- url.searchParams.set('return_to', returnTo)
26115
- // The app renders inside the HelloLeo preview iframe; /start 302s to
26116
- // NetSuite, whose OAuth page sends X-Frame-Options: DENY. Navigate the TOP
26117
- // frame so the flow runs at top level and the callback lands there to read
26118
- // #nssid=. Assign .href (NOT .assign(): reading .assign off a cross-origin
26119
- // window.top.location throws, dropping us into the iframe fallback ->
26120
- // "refused to connect").
26109
+ const startUrl = new URL('/auth/netsuite/start', window.location.origin)
26110
+
26111
+ // Open OAuth in a POPUP -- not the iframe (NetSuite's OAuth page sends
26112
+ // X-Frame-Options: DENY and can never render there), and not the top frame
26113
+ // (that kicks the whole HelloLeo preview out to the raw app and strands the
26114
+ // session in a different browsing context). The callback sees popup=1 on
26115
+ // return_to and postMessages the sid back to this exact window.
26116
+ const popupReturnTo = new URL(returnTo)
26117
+ popupReturnTo.searchParams.set('popup', '1')
26118
+ startUrl.searchParams.set('return_to', popupReturnTo.toString())
26119
+
26120
+ const width = 600
26121
+ const height = 760
26122
+ const left = Math.max(0, Math.round(window.screenX + (window.outerWidth - width) / 2))
26123
+ const top = Math.max(0, Math.round(window.screenY + (window.outerHeight - height) / 2))
26124
+ const popup = window.open(
26125
+ startUrl.toString(),
26126
+ 'netsuite_oauth',
26127
+ \`width=\${width},height=\${height},left=\${left},top=\${top},toolbar=0,menubar=0,location=1,status=0,scrollbars=1,resizable=1\`,
26128
+ )
26129
+
26130
+ if (popup && !popup.closed) {
26131
+ const onMessage = (ev: MessageEvent) => {
26132
+ if (ev.origin !== window.location.origin) return
26133
+ const data = ev.data as { type?: string; sid?: string } | null
26134
+ if (!data || data.type !== 'netsuite_auth' || !data.sid) return
26135
+ window.removeEventListener('message', onMessage)
26136
+ try {
26137
+ sessionStorage.setItem(TOKEN_KEY, data.sid)
26138
+ } catch {}
26139
+ // Re-render as signed-in -- the auth provider re-checks /api/me on load.
26140
+ window.location.reload()
26141
+ }
26142
+ window.addEventListener('message', onMessage)
26143
+ return
26144
+ }
26145
+
26146
+ // Popup blocked -> previous behavior: navigate the top frame (or same frame)
26147
+ // with a CLEAN return_to (no popup flag) so the callback uses the #nssid=
26148
+ // redirect. Assign .href (NOT .assign(): reading .assign off a cross-origin
26149
+ // window.top.location throws, dropping us into the same-frame fallback).
26150
+ const fallbackUrl = new URL('/auth/netsuite/start', window.location.origin)
26151
+ fallbackUrl.searchParams.set('return_to', returnTo)
26121
26152
  try {
26122
26153
  if (window.top && window.top !== window) {
26123
- window.top.location.href = url.toString()
26154
+ window.top.location.href = fallbackUrl.toString()
26124
26155
  return
26125
26156
  }
26126
26157
  } catch {
26127
26158
  /* top window unreachable -- fall through to same-frame navigation */
26128
26159
  }
26129
- window.location.href = url.toString()
26160
+ window.location.href = fallbackUrl.toString()
26130
26161
  }
26131
26162
 
26132
26163
  export interface NetSuiteSession {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helloleo/plugins",
3
- "version": "0.2.21",
3
+ "version": "0.2.23",
4
4
  "description": "OpenCode plugins for HelloLeo",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -9,14 +9,13 @@
9
9
  ".": "./dist/index.js"
10
10
  },
11
11
  "files": [
12
- "dist",
13
- "src"
12
+ "dist"
14
13
  ],
15
14
  "publishConfig": {
16
15
  "access": "public"
17
16
  },
18
17
  "scripts": {
19
- "build": "rm -rf dist && bun build src/index.ts --outdir dist --target bun --format esm && cp -R src/templates dist/templates",
18
+ "build": "rm -rf dist && bun build src/index.ts --outdir dist --target bun --format esm && bun run scripts/copy-templates.ts",
20
19
  "format": "bunx --bun @biomejs/biome format --write src",
21
20
  "lint": "bunx --bun @biomejs/biome lint --write src",
22
21
  "check": "bunx --bun @biomejs/biome check --write src",
@@ -1,22 +0,0 @@
1
- {
2
- "$schema": "https://ui.shadcn.com/schema.json",
3
- "style": "new-york",
4
- "rsc": false,
5
- "tsx": true,
6
- "tailwind": {
7
- "css": "src/styles.css",
8
- "baseColor": "slate",
9
- "cssVariables": true,
10
- "prefix": ""
11
- },
12
- "iconLibrary": "lucide",
13
- "rtl": false,
14
- "aliases": {
15
- "components": "@/components",
16
- "utils": "@/lib/utils",
17
- "ui": "@/components/ui",
18
- "lib": "@/lib",
19
- "hooks": "@/hooks"
20
- },
21
- "registries": {}
22
- }
@@ -1,20 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>{{LEO_NAME}}</title>
8
- <meta name="description" content="{{LEO_DESCRIPTION}}" />
9
- <meta property="og:title" content="{{LEO_NAME}}" />
10
- <meta property="og:description" content="{{LEO_DESCRIPTION}}" />
11
- <meta property="og:type" content="website" />
12
- <link rel="preconnect" href="https://fonts.googleapis.com">
13
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
14
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
15
- </head>
16
- <body>
17
- <div id="app"></div>
18
- <script type="module" src="/src/main.tsx"></script>
19
- </body>
20
- </html>
@@ -1,90 +0,0 @@
1
- {
2
- "name": "{{LEO_SLUG}}",
3
- "private": true,
4
- "type": "module",
5
- "imports": {
6
- "#/*": "./src/*"
7
- },
8
- "scripts": {
9
- "dev": "vite dev",
10
- "generate-routes": "tsr generate",
11
- "build": "oxlint --fix && vite build",
12
- "preview": "vite preview",
13
- "lint": "oxlint --fix",
14
- "test": "vitest run"
15
- },
16
- "dependencies": {
17
- "@hookform/resolvers": "^5.2.2",
18
- "@radix-ui/react-accordion": "^1.2.12",
19
- "@radix-ui/react-alert-dialog": "^1.1.15",
20
- "@radix-ui/react-aspect-ratio": "^1.1.8",
21
- "@radix-ui/react-avatar": "^1.1.11",
22
- "@radix-ui/react-checkbox": "^1.3.3",
23
- "@radix-ui/react-collapsible": "^1.1.12",
24
- "@radix-ui/react-context-menu": "^2.2.16",
25
- "@radix-ui/react-dialog": "^1.1.15",
26
- "@radix-ui/react-dropdown-menu": "^2.1.16",
27
- "@radix-ui/react-hover-card": "^1.1.15",
28
- "@radix-ui/react-label": "^2.1.8",
29
- "@radix-ui/react-menubar": "^1.1.16",
30
- "@radix-ui/react-navigation-menu": "^1.2.14",
31
- "@radix-ui/react-popover": "^1.1.15",
32
- "@radix-ui/react-progress": "^1.1.8",
33
- "@radix-ui/react-radio-group": "^1.3.8",
34
- "@radix-ui/react-scroll-area": "^1.2.10",
35
- "@radix-ui/react-select": "^2.2.6",
36
- "@radix-ui/react-separator": "^1.1.8",
37
- "@radix-ui/react-slider": "^1.3.6",
38
- "@radix-ui/react-slot": "^1.2.4",
39
- "@radix-ui/react-switch": "^1.2.6",
40
- "@radix-ui/react-tabs": "^1.1.13",
41
- "@radix-ui/react-toggle": "^1.1.10",
42
- "@radix-ui/react-toggle-group": "^1.1.11",
43
- "@radix-ui/react-tooltip": "^1.2.8",
44
- "@tailwindcss/vite": "^4.1.18",
45
- "@tanstack/react-query": "^5.90.0",
46
- "@tanstack/react-router": "latest",
47
- "@tanstack/router-plugin": "^1.132.0",
48
- "class-variance-authority": "^0.7.1",
49
- "clsx": "^2.1.1",
50
- "cmdk": "^1.1.1",
51
- "date-fns": "^4.1.0",
52
- "embla-carousel-react": "^8.6.0",
53
- "input-otp": "^1.4.2",
54
- "lucide-react": "^0.575.0",
55
- "react": "^19.2.0",
56
- "react-day-picker": "^9.14.0",
57
- "react-dom": "^19.2.0",
58
- "react-hook-form": "^7.71.2",
59
- "react-resizable-panels": "^4.6.5",
60
- "recharts": "^2.15.4",
61
- "sonner": "^2.0.7",
62
- "tailwind-merge": "^3.5.0",
63
- "tailwindcss": "^4.1.18",
64
- "tw-animate-css": "^1.3.4",
65
- "vaul": "^1.1.2",
66
- "zod": "^3.24.2"
67
- },
68
- "devDependencies": {
69
- "@tailwindcss/typography": "^0.5.16",
70
- "@tanstack/router-cli": "^1.132.0",
71
- "@tanstack/router-plugin": "latest",
72
- "@testing-library/dom": "^10.4.1",
73
- "@testing-library/react": "^16.3.0",
74
- "@types/node": "^22.10.2",
75
- "@types/react": "^19.2.0",
76
- "@types/react-dom": "^19.2.0",
77
- "@vitejs/plugin-react": "^6.0.1",
78
- "jsdom": "^28.1.0",
79
- "oxlint": "^1.69.0",
80
- "typescript": "^6.0.2",
81
- "vite": "^8.0.0",
82
- "vitest": "^4.1.5"
83
- },
84
- "pnpm": {
85
- "onlyBuiltDependencies": [
86
- "esbuild",
87
- "lightningcss"
88
- ]
89
- }
90
- }
@@ -1,50 +0,0 @@
1
- import { useState } from 'react'
2
- import { useRouterState } from '@tanstack/react-router'
3
-
4
- // Rendered by the router's defaultErrorComponent for any uncaught render or
5
- // loader error. Per-route `errorComponent` options override it. Keep this
6
- // component free of app dependencies (toasts, auth, ui components, etc).
7
- export function DefaultErrorComponent({ error }: { error: Error }) {
8
- const pathname = useRouterState({ select: (s) => s.location.pathname })
9
- const [copied, setCopied] = useState(false)
10
-
11
- async function copyForLeo() {
12
- // Blank lines + fenced stack so the report keeps its structure when
13
- // pasted into a markdown-rendering chat.
14
- const report = [
15
- 'My app threw an error, please fix it:',
16
- `Page: ${pathname}`,
17
- `Error: ${error.message}`,
18
- ['Stack:', '```', error.stack ?? '(no stack trace)', '```'].join('\n'),
19
- ].join('\n\n')
20
-
21
- await navigator.clipboard.writeText(report)
22
- setCopied(true)
23
- setTimeout(() => setCopied(false), 2000)
24
- }
25
-
26
- return (
27
- <div className="min-h-screen flex items-center justify-center bg-white p-4">
28
- <div className="w-full max-w-lg rounded-xl border border-neutral-200 bg-white p-6 shadow-sm">
29
- <h2 className="text-base font-semibold text-neutral-900">
30
- Something went wrong
31
- </h2>
32
- <div className="mt-4 space-y-4">
33
- <pre className="text-sm text-red-600 whitespace-pre-wrap break-words rounded-md bg-neutral-100 p-3">
34
- {error.message}
35
- </pre>
36
- <button
37
- type="button"
38
- onClick={copyForLeo}
39
- className="inline-flex items-center rounded-md bg-neutral-900 px-4 py-2 text-sm font-medium text-neutral-50"
40
- >
41
- {copied ? 'Copied!' : 'Copy error'}
42
- </button>
43
- <p className="text-sm text-neutral-500">
44
- Paste the copied error to Leo and it will help you fix it.
45
- </p>
46
- </div>
47
- </div>
48
- </div>
49
- )
50
- }
@@ -1,51 +0,0 @@
1
- import * as React from "react";
2
- import * as AccordionPrimitive from "@radix-ui/react-accordion";
3
- import { ChevronDown } from "lucide-react";
4
-
5
- import { cn } from "@/lib/utils";
6
-
7
- const Accordion = AccordionPrimitive.Root;
8
-
9
- const AccordionItem = React.forwardRef<
10
- React.ElementRef<typeof AccordionPrimitive.Item>,
11
- React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
12
- >(({ className, ...props }, ref) => (
13
- <AccordionPrimitive.Item ref={ref} className={cn("border-b", className)} {...props} />
14
- ));
15
- AccordionItem.displayName = "AccordionItem";
16
-
17
- const AccordionTrigger = React.forwardRef<
18
- React.ElementRef<typeof AccordionPrimitive.Trigger>,
19
- React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
20
- >(({ className, children, ...props }, ref) => (
21
- <AccordionPrimitive.Header className="flex">
22
- <AccordionPrimitive.Trigger
23
- ref={ref}
24
- className={cn(
25
- "flex flex-1 items-center justify-between py-4 text-sm font-medium cursor-pointer transition-all hover:underline text-left [&[data-state=open]>svg]:rotate-180",
26
- className,
27
- )}
28
- {...props}
29
- >
30
- {children}
31
- <ChevronDown className="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" />
32
- </AccordionPrimitive.Trigger>
33
- </AccordionPrimitive.Header>
34
- ));
35
- AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
36
-
37
- const AccordionContent = React.forwardRef<
38
- React.ElementRef<typeof AccordionPrimitive.Content>,
39
- React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
40
- >(({ className, children, ...props }, ref) => (
41
- <AccordionPrimitive.Content
42
- ref={ref}
43
- className="overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
44
- {...props}
45
- >
46
- <div className={cn("pb-4 pt-0", className)}>{children}</div>
47
- </AccordionPrimitive.Content>
48
- ));
49
- AccordionContent.displayName = AccordionPrimitive.Content.displayName;
50
-
51
- export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
@@ -1,115 +0,0 @@
1
- import * as React from "react";
2
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
-
4
- import { cn } from "@/lib/utils";
5
- import { buttonVariants } from "@/components/ui/button";
6
-
7
- const AlertDialog = AlertDialogPrimitive.Root;
8
-
9
- const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
10
-
11
- const AlertDialogPortal = AlertDialogPrimitive.Portal;
12
-
13
- const AlertDialogOverlay = React.forwardRef<
14
- React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
15
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
16
- >(({ className, ...props }, ref) => (
17
- <AlertDialogPrimitive.Overlay
18
- className={cn(
19
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
20
- className,
21
- )}
22
- {...props}
23
- ref={ref}
24
- />
25
- ));
26
- AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
27
-
28
- const AlertDialogContent = React.forwardRef<
29
- React.ElementRef<typeof AlertDialogPrimitive.Content>,
30
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
31
- >(({ className, ...props }, ref) => (
32
- <AlertDialogPortal>
33
- <AlertDialogOverlay />
34
- <AlertDialogPrimitive.Content
35
- ref={ref}
36
- className={cn(
37
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 sm:rounded-lg",
38
- className,
39
- )}
40
- {...props}
41
- />
42
- </AlertDialogPortal>
43
- ));
44
- AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
45
-
46
- const AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
47
- <div className={cn("flex flex-col space-y-2 text-center sm:text-left", className)} {...props} />
48
- );
49
- AlertDialogHeader.displayName = "AlertDialogHeader";
50
-
51
- const AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
52
- <div
53
- className={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)}
54
- {...props}
55
- />
56
- );
57
- AlertDialogFooter.displayName = "AlertDialogFooter";
58
-
59
- const AlertDialogTitle = React.forwardRef<
60
- React.ElementRef<typeof AlertDialogPrimitive.Title>,
61
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
62
- >(({ className, ...props }, ref) => (
63
- <AlertDialogPrimitive.Title
64
- ref={ref}
65
- className={cn("text-lg font-semibold", className)}
66
- {...props}
67
- />
68
- ));
69
- AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
70
-
71
- const AlertDialogDescription = React.forwardRef<
72
- React.ElementRef<typeof AlertDialogPrimitive.Description>,
73
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
74
- >(({ className, ...props }, ref) => (
75
- <AlertDialogPrimitive.Description
76
- ref={ref}
77
- className={cn("text-sm text-muted-foreground", className)}
78
- {...props}
79
- />
80
- ));
81
- AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
82
-
83
- const AlertDialogAction = React.forwardRef<
84
- React.ElementRef<typeof AlertDialogPrimitive.Action>,
85
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
86
- >(({ className, ...props }, ref) => (
87
- <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />
88
- ));
89
- AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
90
-
91
- const AlertDialogCancel = React.forwardRef<
92
- React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
93
- React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
94
- >(({ className, ...props }, ref) => (
95
- <AlertDialogPrimitive.Cancel
96
- ref={ref}
97
- className={cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className)}
98
- {...props}
99
- />
100
- ));
101
- AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
102
-
103
- export {
104
- AlertDialog,
105
- AlertDialogPortal,
106
- AlertDialogOverlay,
107
- AlertDialogTrigger,
108
- AlertDialogContent,
109
- AlertDialogHeader,
110
- AlertDialogFooter,
111
- AlertDialogTitle,
112
- AlertDialogDescription,
113
- AlertDialogAction,
114
- AlertDialogCancel,
115
- };
@@ -1,49 +0,0 @@
1
- import * as React from "react";
2
- import { cva, type VariantProps } from "class-variance-authority";
3
-
4
- import { cn } from "@/lib/utils";
5
-
6
- const alertVariants = cva(
7
- "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
8
- {
9
- variants: {
10
- variant: {
11
- default: "bg-background text-foreground",
12
- destructive:
13
- "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
14
- },
15
- },
16
- defaultVariants: {
17
- variant: "default",
18
- },
19
- },
20
- );
21
-
22
- const Alert = React.forwardRef<
23
- HTMLDivElement,
24
- React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>
25
- >(({ className, variant, ...props }, ref) => (
26
- <div ref={ref} role="alert" className={cn(alertVariants({ variant }), className)} {...props} />
27
- ));
28
- Alert.displayName = "Alert";
29
-
30
- const AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(
31
- ({ className, ...props }, ref) => (
32
- <h5
33
- ref={ref}
34
- className={cn("mb-1 font-medium leading-none tracking-tight", className)}
35
- {...props}
36
- />
37
- ),
38
- );
39
- AlertTitle.displayName = "AlertTitle";
40
-
41
- const AlertDescription = React.forwardRef<
42
- HTMLParagraphElement,
43
- React.HTMLAttributes<HTMLParagraphElement>
44
- >(({ className, ...props }, ref) => (
45
- <div ref={ref} className={cn("text-sm [&_p]:leading-relaxed", className)} {...props} />
46
- ));
47
- AlertDescription.displayName = "AlertDescription";
48
-
49
- export { Alert, AlertTitle, AlertDescription };
@@ -1,5 +0,0 @@
1
- import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
2
-
3
- const AspectRatio = AspectRatioPrimitive.Root;
4
-
5
- export { AspectRatio };