@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.
- package/dist/index.js +73 -42
- package/package.json +3 -4
- package/dist/templates/tanstack-router-2026-06-15/components.json +0 -22
- package/dist/templates/tanstack-router-2026-06-15/index.html +0 -20
- package/dist/templates/tanstack-router-2026-06-15/package.json +0 -90
- package/dist/templates/tanstack-router-2026-06-15/src/components/error-component.tsx +0 -50
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/accordion.tsx +0 -51
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/alert-dialog.tsx +0 -115
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/alert.tsx +0 -49
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/aspect-ratio.tsx +0 -5
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/avatar.tsx +0 -47
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/badge.tsx +0 -32
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/breadcrumb.tsx +0 -101
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/button.tsx +0 -49
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/calendar.tsx +0 -177
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/card.tsx +0 -55
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/carousel.tsx +0 -240
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/chart.tsx +0 -331
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/checkbox.tsx +0 -26
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/collapsible.tsx +0 -11
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/command.tsx +0 -143
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/context-menu.tsx +0 -187
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/dialog.tsx +0 -104
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/drawer.tsx +0 -98
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/dropdown-menu.tsx +0 -188
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/form.tsx +0 -171
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/hover-card.tsx +0 -27
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/input-otp.tsx +0 -69
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/input.tsx +0 -22
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/label.tsx +0 -21
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/menubar.tsx +0 -229
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/navigation-menu.tsx +0 -120
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/pagination.tsx +0 -98
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/popover.tsx +0 -31
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/progress.tsx +0 -25
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/radio-group.tsx +0 -36
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/resizable.tsx +0 -37
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/scroll-area.tsx +0 -44
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/select.tsx +0 -152
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/separator.tsx +0 -24
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/sheet.tsx +0 -122
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/sidebar.tsx +0 -744
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/skeleton.tsx +0 -7
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/slider.tsx +0 -23
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/sonner.tsx +0 -23
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/switch.tsx +0 -27
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/table.tsx +0 -94
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/tabs.tsx +0 -53
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/textarea.tsx +0 -21
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/toggle-group.tsx +0 -57
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/toggle.tsx +0 -42
- package/dist/templates/tanstack-router-2026-06-15/src/components/ui/tooltip.tsx +0 -32
- package/dist/templates/tanstack-router-2026-06-15/src/hooks/use-mobile.tsx +0 -19
- package/dist/templates/tanstack-router-2026-06-15/src/lib/proxy.ts +0 -123
- package/dist/templates/tanstack-router-2026-06-15/src/lib/utils.ts +0 -6
- package/dist/templates/tanstack-router-2026-06-15/src/main.tsx +0 -37
- package/dist/templates/tanstack-router-2026-06-15/src/routeTree.gen.ts +0 -59
- package/dist/templates/tanstack-router-2026-06-15/src/routes/README.md +0 -85
- package/dist/templates/tanstack-router-2026-06-15/src/routes/__root.tsx +0 -18
- package/dist/templates/tanstack-router-2026-06-15/src/routes/index.tsx +0 -18
- package/dist/templates/tanstack-router-2026-06-15/src/styles.css +0 -214
- package/dist/templates/tanstack-router-2026-06-15/tsconfig.json +0 -27
- package/dist/templates/tanstack-router-2026-06-15/vite.config.ts +0 -23
- package/dist/templates/tanstack-start-2026-06-18/components.json +0 -22
- package/dist/templates/tanstack-start-2026-06-18/drizzle.config.ts +0 -15
- package/dist/templates/tanstack-start-2026-06-18/package.json +0 -104
- package/dist/templates/tanstack-start-2026-06-18/src/components/error-component.tsx +0 -50
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/accordion.tsx +0 -51
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/alert-dialog.tsx +0 -115
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/alert.tsx +0 -49
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/aspect-ratio.tsx +0 -5
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/avatar.tsx +0 -47
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/badge.tsx +0 -32
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/breadcrumb.tsx +0 -101
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/button.tsx +0 -49
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/calendar.tsx +0 -177
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/card.tsx +0 -55
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/carousel.tsx +0 -240
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/chart.tsx +0 -371
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/checkbox.tsx +0 -26
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/collapsible.tsx +0 -11
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/command.tsx +0 -143
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/context-menu.tsx +0 -187
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/dialog.tsx +0 -104
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/drawer.tsx +0 -98
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/dropdown-menu.tsx +0 -188
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/form.tsx +0 -171
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/hover-card.tsx +0 -27
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/input-otp.tsx +0 -69
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/input.tsx +0 -22
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/label.tsx +0 -21
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/menubar.tsx +0 -229
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/navigation-menu.tsx +0 -120
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/pagination.tsx +0 -98
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/popover.tsx +0 -31
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/progress.tsx +0 -25
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/radio-group.tsx +0 -36
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/resizable.tsx +0 -37
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/scroll-area.tsx +0 -44
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/select.tsx +0 -152
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/separator.tsx +0 -24
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/sheet.tsx +0 -122
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/sidebar.tsx +0 -744
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/skeleton.tsx +0 -7
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/slider.tsx +0 -23
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/sonner.tsx +0 -23
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/switch.tsx +0 -27
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/table.tsx +0 -94
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/tabs.tsx +0 -53
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/textarea.tsx +0 -21
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/toggle-group.tsx +0 -57
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/toggle.tsx +0 -42
- package/dist/templates/tanstack-start-2026-06-18/src/components/ui/tooltip.tsx +0 -32
- package/dist/templates/tanstack-start-2026-06-18/src/db/index.ts +0 -9
- package/dist/templates/tanstack-start-2026-06-18/src/db/schema.ts +0 -18
- package/dist/templates/tanstack-start-2026-06-18/src/global.d.ts +0 -3
- package/dist/templates/tanstack-start-2026-06-18/src/hooks/use-mobile.tsx +0 -19
- package/dist/templates/tanstack-start-2026-06-18/src/lib/proxy.ts +0 -119
- package/dist/templates/tanstack-start-2026-06-18/src/lib/utils.ts +0 -6
- package/dist/templates/tanstack-start-2026-06-18/src/routeTree.gen.ts +0 -86
- package/dist/templates/tanstack-start-2026-06-18/src/router.tsx +0 -37
- package/dist/templates/tanstack-start-2026-06-18/src/routes/README.md +0 -94
- package/dist/templates/tanstack-start-2026-06-18/src/routes/__root.tsx +0 -65
- package/dist/templates/tanstack-start-2026-06-18/src/routes/api/health.ts +0 -81
- package/dist/templates/tanstack-start-2026-06-18/src/routes/index.tsx +0 -33
- package/dist/templates/tanstack-start-2026-06-18/src/server.ts +0 -32
- package/dist/templates/tanstack-start-2026-06-18/src/styles.css +0 -214
- package/dist/templates/tanstack-start-2026-06-18/tsconfig.json +0 -27
- package/dist/templates/tanstack-start-2026-06-18/vite.config.ts +0 -17
- package/src/index.ts +0 -8
- package/src/template-render.ts +0 -53
- package/src/templates/tanstack-router-2026-06-15/components.json +0 -22
- package/src/templates/tanstack-router-2026-06-15/index.html +0 -20
- package/src/templates/tanstack-router-2026-06-15/package.json +0 -90
- package/src/templates/tanstack-router-2026-06-15/src/components/error-component.tsx +0 -50
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/accordion.tsx +0 -51
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/alert-dialog.tsx +0 -115
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/alert.tsx +0 -49
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/aspect-ratio.tsx +0 -5
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/avatar.tsx +0 -47
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/badge.tsx +0 -32
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/breadcrumb.tsx +0 -101
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/button.tsx +0 -49
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/calendar.tsx +0 -177
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/card.tsx +0 -55
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/carousel.tsx +0 -240
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/chart.tsx +0 -331
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/checkbox.tsx +0 -26
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/collapsible.tsx +0 -11
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/command.tsx +0 -143
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/context-menu.tsx +0 -187
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/dialog.tsx +0 -104
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/drawer.tsx +0 -98
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/dropdown-menu.tsx +0 -188
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/form.tsx +0 -171
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/hover-card.tsx +0 -27
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/input-otp.tsx +0 -69
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/input.tsx +0 -22
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/label.tsx +0 -21
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/menubar.tsx +0 -229
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/navigation-menu.tsx +0 -120
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/pagination.tsx +0 -98
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/popover.tsx +0 -31
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/progress.tsx +0 -25
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/radio-group.tsx +0 -36
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/resizable.tsx +0 -37
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/scroll-area.tsx +0 -44
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/select.tsx +0 -152
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/separator.tsx +0 -24
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/sheet.tsx +0 -122
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/sidebar.tsx +0 -744
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/skeleton.tsx +0 -7
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/slider.tsx +0 -23
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/sonner.tsx +0 -23
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/switch.tsx +0 -27
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/table.tsx +0 -94
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/tabs.tsx +0 -53
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/textarea.tsx +0 -21
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/toggle-group.tsx +0 -57
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/toggle.tsx +0 -42
- package/src/templates/tanstack-router-2026-06-15/src/components/ui/tooltip.tsx +0 -32
- package/src/templates/tanstack-router-2026-06-15/src/hooks/use-mobile.tsx +0 -19
- package/src/templates/tanstack-router-2026-06-15/src/lib/proxy.ts +0 -123
- package/src/templates/tanstack-router-2026-06-15/src/lib/utils.ts +0 -6
- package/src/templates/tanstack-router-2026-06-15/src/main.tsx +0 -37
- package/src/templates/tanstack-router-2026-06-15/src/routeTree.gen.ts +0 -59
- package/src/templates/tanstack-router-2026-06-15/src/routes/README.md +0 -85
- package/src/templates/tanstack-router-2026-06-15/src/routes/__root.tsx +0 -18
- package/src/templates/tanstack-router-2026-06-15/src/routes/index.tsx +0 -18
- package/src/templates/tanstack-router-2026-06-15/src/styles.css +0 -214
- package/src/templates/tanstack-router-2026-06-15/tsconfig.json +0 -27
- package/src/templates/tanstack-router-2026-06-15/vite.config.ts +0 -23
- package/src/templates/tanstack-start-2026-06-18/components.json +0 -22
- package/src/templates/tanstack-start-2026-06-18/drizzle.config.ts +0 -15
- package/src/templates/tanstack-start-2026-06-18/package.json +0 -104
- package/src/templates/tanstack-start-2026-06-18/src/components/error-component.tsx +0 -50
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/accordion.tsx +0 -51
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/alert-dialog.tsx +0 -115
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/alert.tsx +0 -49
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/aspect-ratio.tsx +0 -5
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/avatar.tsx +0 -47
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/badge.tsx +0 -32
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/breadcrumb.tsx +0 -101
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/button.tsx +0 -49
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/calendar.tsx +0 -177
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/card.tsx +0 -55
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/carousel.tsx +0 -240
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/chart.tsx +0 -371
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/checkbox.tsx +0 -26
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/collapsible.tsx +0 -11
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/command.tsx +0 -143
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/context-menu.tsx +0 -187
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/dialog.tsx +0 -104
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/drawer.tsx +0 -98
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/dropdown-menu.tsx +0 -188
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/form.tsx +0 -171
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/hover-card.tsx +0 -27
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/input-otp.tsx +0 -69
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/input.tsx +0 -22
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/label.tsx +0 -21
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/menubar.tsx +0 -229
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/navigation-menu.tsx +0 -120
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/pagination.tsx +0 -98
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/popover.tsx +0 -31
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/progress.tsx +0 -25
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/radio-group.tsx +0 -36
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/resizable.tsx +0 -37
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/scroll-area.tsx +0 -44
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/select.tsx +0 -152
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/separator.tsx +0 -24
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/sheet.tsx +0 -122
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/sidebar.tsx +0 -744
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/skeleton.tsx +0 -7
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/slider.tsx +0 -23
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/sonner.tsx +0 -23
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/switch.tsx +0 -27
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/table.tsx +0 -94
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/tabs.tsx +0 -53
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/textarea.tsx +0 -21
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/toggle-group.tsx +0 -57
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/toggle.tsx +0 -42
- package/src/templates/tanstack-start-2026-06-18/src/components/ui/tooltip.tsx +0 -32
- package/src/templates/tanstack-start-2026-06-18/src/db/index.ts +0 -9
- package/src/templates/tanstack-start-2026-06-18/src/db/schema.ts +0 -18
- package/src/templates/tanstack-start-2026-06-18/src/global.d.ts +0 -3
- package/src/templates/tanstack-start-2026-06-18/src/hooks/use-mobile.tsx +0 -19
- package/src/templates/tanstack-start-2026-06-18/src/lib/proxy.ts +0 -119
- package/src/templates/tanstack-start-2026-06-18/src/lib/utils.ts +0 -6
- package/src/templates/tanstack-start-2026-06-18/src/routeTree.gen.ts +0 -86
- package/src/templates/tanstack-start-2026-06-18/src/router.tsx +0 -37
- package/src/templates/tanstack-start-2026-06-18/src/routes/README.md +0 -94
- package/src/templates/tanstack-start-2026-06-18/src/routes/__root.tsx +0 -65
- package/src/templates/tanstack-start-2026-06-18/src/routes/api/health.ts +0 -81
- package/src/templates/tanstack-start-2026-06-18/src/routes/index.tsx +0 -33
- package/src/templates/tanstack-start-2026-06-18/src/server.ts +0 -32
- package/src/templates/tanstack-start-2026-06-18/src/styles.css +0 -214
- package/src/templates/tanstack-start-2026-06-18/tsconfig.json +0 -27
- package/src/templates/tanstack-start-2026-06-18/vite.config.ts +0 -17
- package/src/templates/tanstack-start-2026-07-30/components.json +0 -22
- package/src/templates/tanstack-start-2026-07-30/drizzle/meta/_journal.json +0 -1
- package/src/templates/tanstack-start-2026-07-30/drizzle.config.ts +0 -18
- package/src/templates/tanstack-start-2026-07-30/package.json +0 -103
- package/src/templates/tanstack-start-2026-07-30/src/components/error-component.tsx +0 -50
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/accordion.tsx +0 -51
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/alert-dialog.tsx +0 -115
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/alert.tsx +0 -49
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/aspect-ratio.tsx +0 -5
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/avatar.tsx +0 -47
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/badge.tsx +0 -32
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/breadcrumb.tsx +0 -101
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/button.tsx +0 -49
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/calendar.tsx +0 -177
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/card.tsx +0 -55
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/carousel.tsx +0 -240
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/chart.tsx +0 -371
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/checkbox.tsx +0 -26
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/collapsible.tsx +0 -11
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/command.tsx +0 -143
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/context-menu.tsx +0 -187
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/dialog.tsx +0 -104
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/drawer.tsx +0 -98
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/dropdown-menu.tsx +0 -188
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/form.tsx +0 -171
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/hover-card.tsx +0 -27
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/input-otp.tsx +0 -69
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/input.tsx +0 -22
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/label.tsx +0 -21
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/menubar.tsx +0 -229
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/navigation-menu.tsx +0 -120
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/pagination.tsx +0 -98
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/popover.tsx +0 -31
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/progress.tsx +0 -25
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/radio-group.tsx +0 -36
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/resizable.tsx +0 -37
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/scroll-area.tsx +0 -44
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/select.tsx +0 -152
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/separator.tsx +0 -24
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/sheet.tsx +0 -122
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/sidebar.tsx +0 -744
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/skeleton.tsx +0 -7
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/slider.tsx +0 -23
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/sonner.tsx +0 -23
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/switch.tsx +0 -27
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/table.tsx +0 -94
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/tabs.tsx +0 -53
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/textarea.tsx +0 -21
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/toggle-group.tsx +0 -57
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/toggle.tsx +0 -42
- package/src/templates/tanstack-start-2026-07-30/src/components/ui/tooltip.tsx +0 -32
- package/src/templates/tanstack-start-2026-07-30/src/db/index.ts +0 -9
- package/src/templates/tanstack-start-2026-07-30/src/db/schema.ts +0 -34
- package/src/templates/tanstack-start-2026-07-30/src/global.d.ts +0 -3
- package/src/templates/tanstack-start-2026-07-30/src/hooks/use-mobile.tsx +0 -19
- package/src/templates/tanstack-start-2026-07-30/src/lib/kv.ts +0 -37
- package/src/templates/tanstack-start-2026-07-30/src/lib/proxy.ts +0 -111
- package/src/templates/tanstack-start-2026-07-30/src/lib/storage.ts +0 -45
- package/src/templates/tanstack-start-2026-07-30/src/lib/utils.ts +0 -6
- package/src/templates/tanstack-start-2026-07-30/src/routeTree.gen.ts +0 -86
- package/src/templates/tanstack-start-2026-07-30/src/router.tsx +0 -37
- package/src/templates/tanstack-start-2026-07-30/src/routes/README.md +0 -94
- package/src/templates/tanstack-start-2026-07-30/src/routes/__root.tsx +0 -65
- package/src/templates/tanstack-start-2026-07-30/src/routes/api/health.ts +0 -83
- package/src/templates/tanstack-start-2026-07-30/src/routes/index.tsx +0 -33
- package/src/templates/tanstack-start-2026-07-30/src/server.ts +0 -32
- package/src/templates/tanstack-start-2026-07-30/src/styles.css +0 -214
- package/src/templates/tanstack-start-2026-07-30/tsconfig.json +0 -27
- package/src/templates/tanstack-start-2026-07-30/vite.config.ts +0 -17
- package/src/tools/create-plan.ts +0 -61
- package/src/tools/inspect-http.ts +0 -276
- package/src/tools/list-plans.ts +0 -85
- package/src/tools/modify-plan.ts +0 -79
- package/src/tools/remove.ts +0 -53
- package/src/tools/scaffold.ts +0 -213
- package/src/tools/setup-authentication/auth-files.ts +0 -144
- package/src/tools/setup-authentication/constants.ts +0 -19
- package/src/tools/setup-authentication/db-schema.ts +0 -96
- package/src/tools/setup-authentication/index.ts +0 -148
- package/src/tools/setup-authentication/package-json.ts +0 -17
- package/src/tools/setup-authentication/pages.ts +0 -241
- 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
|
|
24904
|
-
|
|
24905
|
-
|
|
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
|
|
24937
|
-
const templateId = resolveTemplateId(
|
|
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.
|
|
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 =
|
|
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 =
|
|
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
|
|
26114
|
-
|
|
26115
|
-
//
|
|
26116
|
-
//
|
|
26117
|
-
//
|
|
26118
|
-
//
|
|
26119
|
-
//
|
|
26120
|
-
|
|
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 =
|
|
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 =
|
|
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.
|
|
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 &&
|
|
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 };
|