create-lumen 1.1.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -34
- package/package.json +5 -1
- package/src/configure.js +6 -2
- package/src/css.js +71 -24
- package/src/dependencies.js +15 -6
- package/src/injector.js +116 -24
- package/src/main.js +3 -1
- package/src/readme.js +64 -22
- package/templates/architectures/component-based/src/App.jsx +6 -3
- package/templates/architectures/component-based/src/App.tsx +6 -3
- package/templates/architectures/component-based/src/components/common/Button.jsx +5 -2
- package/templates/architectures/component-based/src/components/common/Button.tsx +5 -2
- package/templates/architectures/component-based/src/hooks/useApp.js +10 -0
- package/templates/architectures/component-based/src/hooks/useApp.ts +10 -0
- package/templates/architectures/component-based/src/layouts/MainLayout.jsx +12 -4
- package/templates/architectures/component-based/src/layouts/MainLayout.tsx +12 -4
- package/templates/architectures/component-based/src/pages/Home/Home.jsx +6 -1
- package/templates/architectures/component-based/src/pages/Home/Home.tsx +6 -1
- package/templates/architectures/component-based/src/providers/AppProvider.jsx +20 -0
- package/templates/architectures/component-based/src/providers/AppProvider.tsx +24 -0
- package/templates/architectures/component-based/src/providers/appcontext.js +3 -0
- package/templates/architectures/component-based/src/{context/app-context.ts → providers/appcontext.ts} +1 -3
- package/templates/architectures/{feature-based → component-based}/src/types/index.js +7 -0
- package/templates/architectures/{feature-based → component-based}/src/types/index.ts +5 -0
- package/templates/architectures/feature-based/main.jsx +1 -1
- package/templates/architectures/feature-based/main.tsx +1 -1
- package/templates/architectures/feature-based/scripts/create-feature.mjs +2 -2
- package/templates/architectures/feature-based/src/app/App.jsx +15 -4
- package/templates/architectures/feature-based/src/app/App.tsx +15 -4
- package/templates/architectures/feature-based/src/app/contexts/themecontext.js +3 -0
- package/templates/architectures/feature-based/src/app/contexts/themecontext.ts +8 -0
- package/templates/architectures/feature-based/src/app/hooks/useTheme.js +10 -0
- package/templates/architectures/feature-based/src/app/hooks/useTheme.ts +10 -0
- package/templates/architectures/feature-based/src/app/providers/ThemeProvider.jsx +18 -1
- package/templates/architectures/feature-based/src/app/providers/ThemeProvider.tsx +19 -2
- package/templates/architectures/feature-based/src/features/home/pages/HomePage.jsx +18 -4
- package/templates/architectures/feature-based/src/features/home/pages/HomePage.tsx +18 -4
- package/templates/architectures/feature-based/src/shared/components/ui/Button.jsx +31 -0
- package/templates/architectures/feature-based/src/shared/components/ui/Button.tsx +36 -0
- package/templates/architectures/feature-based/src/shared/layouts/.gitkeep +0 -0
- package/templates/architectures/feature-based/src/shared/stores/.gitkeep +0 -0
- package/templates/architectures/feature-based/src/shared/styles/.gitkeep +0 -0
- package/templates/architectures/feature-based/src/shared/types/index.js +20 -0
- package/templates/architectures/feature-based/src/shared/types/index.ts +16 -0
- package/templates/conditional/axios/component-based/src/config/axios.config.js +7 -0
- package/templates/conditional/axios/component-based/src/config/axios.config.ts +7 -0
- package/templates/conditional/axios/component-based/src/services/axios.client.js +24 -0
- package/templates/conditional/axios/component-based/src/services/axios.client.ts +24 -0
- package/templates/conditional/axios/component-based/src/services/user.service.js +33 -0
- package/templates/conditional/axios/component-based/src/services/user.service.ts +29 -0
- package/templates/conditional/axios/feature-based/src/features/home/services/user.service.js +33 -0
- package/templates/conditional/axios/feature-based/src/features/home/services/user.service.ts +29 -0
- package/templates/conditional/axios/feature-based/src/shared/lib/axios/api.client.js +24 -0
- package/templates/conditional/axios/feature-based/src/shared/lib/axios/api.client.ts +24 -0
- package/templates/conditional/axios/feature-based/src/shared/lib/axios/api.config.js +7 -0
- package/templates/conditional/axios/feature-based/src/shared/lib/axios/api.config.ts +7 -0
- package/templates/conditional/axios/feature-based/src/shared/lib/axios/index.js +1 -0
- package/templates/conditional/axios/feature-based/src/shared/lib/axios/index.ts +1 -0
- package/templates/conditional/fetch/component-based/src/config/api.config.js +7 -0
- package/templates/conditional/fetch/component-based/src/config/api.config.ts +7 -0
- package/templates/conditional/fetch/component-based/src/services/api.client.js +51 -0
- package/templates/conditional/fetch/component-based/src/services/api.client.ts +55 -0
- package/templates/conditional/fetch/component-based/src/services/user.service.js +33 -0
- package/templates/conditional/fetch/component-based/src/services/user.service.ts +29 -0
- package/templates/conditional/fetch/feature-based/src/features/home/services/user.service.js +33 -0
- package/templates/conditional/fetch/feature-based/src/features/home/services/user.service.ts +29 -0
- package/templates/conditional/fetch/feature-based/src/shared/api/api.client.js +51 -0
- package/templates/conditional/fetch/feature-based/src/shared/api/api.client.ts +55 -0
- package/templates/conditional/fetch/feature-based/src/shared/api/api.config.js +7 -0
- package/templates/conditional/fetch/feature-based/src/shared/api/api.config.ts +7 -0
- package/templates/conditional/fetch/feature-based/src/shared/api/index.js +1 -0
- package/templates/conditional/fetch/feature-based/src/shared/api/index.ts +1 -0
- package/templates/conditional/icons/huge/component-based/bootstrap/src/pages/Home/Home.jsx +20 -0
- package/templates/conditional/icons/huge/component-based/bootstrap/src/pages/Home/Home.tsx +20 -0
- package/templates/conditional/icons/huge/component-based/src/pages/Home/Home.jsx +24 -8
- package/templates/conditional/icons/huge/component-based/src/pages/Home/Home.tsx +24 -8
- package/templates/conditional/icons/huge/component-based/tailwind/src/pages/Home/Home.jsx +20 -0
- package/templates/conditional/icons/huge/component-based/tailwind/src/pages/Home/Home.tsx +20 -0
- package/templates/conditional/icons/huge/feature-based/bootstrap/src/features/home/pages/HomePage.jsx +20 -0
- package/templates/conditional/icons/huge/feature-based/bootstrap/src/features/home/pages/HomePage.tsx +20 -0
- package/templates/conditional/icons/huge/feature-based/src/features/home/pages/HomePage.jsx +25 -9
- package/templates/conditional/icons/huge/feature-based/src/features/home/pages/HomePage.tsx +25 -9
- package/templates/conditional/icons/huge/feature-based/tailwind/src/features/home/pages/HomePage.jsx +20 -0
- package/templates/conditional/icons/huge/feature-based/tailwind/src/features/home/pages/HomePage.tsx +20 -0
- package/templates/conditional/icons/lucide/component-based/bootstrap/src/pages/Home/Home.jsx +19 -0
- package/templates/conditional/icons/lucide/component-based/bootstrap/src/pages/Home/Home.tsx +19 -0
- package/templates/conditional/icons/lucide/component-based/src/pages/Home/Home.jsx +24 -8
- package/templates/conditional/icons/lucide/component-based/src/pages/Home/Home.tsx +24 -8
- package/templates/conditional/icons/lucide/component-based/tailwind/src/pages/Home/Home.jsx +19 -0
- package/templates/conditional/icons/lucide/component-based/tailwind/src/pages/Home/Home.tsx +19 -0
- package/templates/conditional/icons/lucide/feature-based/bootstrap/src/features/home/pages/HomePage.jsx +19 -0
- package/templates/conditional/icons/lucide/feature-based/bootstrap/src/features/home/pages/HomePage.tsx +19 -0
- package/templates/conditional/icons/lucide/feature-based/src/features/home/pages/HomePage.jsx +25 -9
- package/templates/conditional/icons/lucide/feature-based/src/features/home/pages/HomePage.tsx +25 -9
- package/templates/conditional/icons/lucide/feature-based/tailwind/src/features/home/pages/HomePage.jsx +19 -0
- package/templates/conditional/icons/lucide/feature-based/tailwind/src/features/home/pages/HomePage.tsx +19 -0
- package/templates/conditional/router/component-based/bootstrap/src/layouts/MainLayout.jsx +17 -0
- package/templates/conditional/router/component-based/bootstrap/src/layouts/MainLayout.tsx +17 -0
- package/templates/conditional/router/component-based/src/App.jsx +4 -4
- package/templates/conditional/router/component-based/src/App.tsx +4 -4
- package/templates/conditional/router/component-based/src/layouts/MainLayout.jsx +39 -0
- package/templates/conditional/router/component-based/src/layouts/MainLayout.tsx +39 -0
- package/templates/conditional/router/component-based/src/router/guards/AuthGuard.jsx +8 -0
- package/templates/conditional/router/component-based/src/router/guards/AuthGuard.tsx +14 -0
- package/templates/conditional/router/component-based/src/router/guards/GuestGuard.jsx +8 -0
- package/templates/conditional/router/component-based/src/router/guards/GuestGuard.tsx +14 -0
- package/templates/conditional/router/component-based/src/router/index.jsx +44 -0
- package/templates/conditional/router/component-based/src/router/index.tsx +44 -0
- package/templates/conditional/router/component-based/tailwind/src/layouts/MainLayout.jsx +17 -0
- package/templates/conditional/router/component-based/tailwind/src/layouts/MainLayout.tsx +17 -0
- package/templates/conditional/router/feature-based/bootstrap/src/shared/layouts/RootLayout.jsx +9 -0
- package/templates/conditional/router/feature-based/bootstrap/src/shared/layouts/RootLayout.tsx +9 -0
- package/templates/conditional/router/feature-based/src/app/App.jsx +6 -1
- package/templates/conditional/router/feature-based/src/app/App.tsx +6 -1
- package/templates/conditional/router/feature-based/src/app/router/guards/AuthGuard.jsx +8 -0
- package/templates/conditional/router/feature-based/src/app/router/guards/AuthGuard.tsx +14 -0
- package/templates/conditional/router/feature-based/src/app/router/guards/RoleGuard.jsx +8 -0
- package/templates/conditional/router/feature-based/src/app/router/guards/RoleGuard.tsx +15 -0
- package/templates/conditional/router/feature-based/src/app/router/index.jsx +16 -0
- package/templates/conditional/router/feature-based/src/app/router/index.tsx +16 -0
- package/templates/conditional/router/feature-based/src/app/router/routes/auth.routes.jsx +18 -0
- package/templates/conditional/router/feature-based/src/app/router/routes/auth.routes.tsx +18 -0
- package/templates/conditional/router/feature-based/src/app/router/routes/home.routes.jsx +8 -0
- package/templates/conditional/router/feature-based/src/app/router/routes/home.routes.tsx +8 -0
- package/templates/conditional/router/feature-based/src/shared/layouts/RootLayout.jsx +17 -0
- package/templates/conditional/router/feature-based/src/shared/layouts/RootLayout.tsx +17 -0
- package/templates/conditional/router/feature-based/tailwind/src/shared/layouts/RootLayout.jsx +9 -0
- package/templates/conditional/router/feature-based/tailwind/src/shared/layouts/RootLayout.tsx +9 -0
- package/templates/conditional/state/redux/feature-based/src/app/providers/StoreProvider.jsx +1 -1
- package/templates/conditional/state/redux/feature-based/src/app/providers/StoreProvider.tsx +1 -1
- package/templates/css/bootstrap/src/themes.css +14 -0
- package/templates/css/component-styles/bootstrap/component-based/src/components/common/Button.jsx +17 -0
- package/templates/css/component-styles/bootstrap/component-based/src/components/common/Button.tsx +22 -0
- package/templates/css/component-styles/bootstrap/component-based/src/layouts/MainLayout.jsx +15 -0
- package/templates/css/component-styles/bootstrap/component-based/src/layouts/MainLayout.tsx +19 -0
- package/templates/css/component-styles/bootstrap/component-based/src/pages/Home/Home.jsx +13 -0
- package/templates/css/component-styles/bootstrap/component-based/src/pages/Home/Home.tsx +13 -0
- package/templates/css/component-styles/bootstrap/feature-based/src/app/App.jsx +9 -0
- package/templates/css/component-styles/bootstrap/feature-based/src/app/App.tsx +9 -0
- package/templates/css/component-styles/bootstrap/feature-based/src/features/home/pages/HomePage.jsx +13 -0
- package/templates/css/component-styles/bootstrap/feature-based/src/features/home/pages/HomePage.tsx +13 -0
- package/templates/css/component-styles/bootstrap/feature-based/src/shared/components/ui/Button.jsx +17 -0
- package/templates/css/component-styles/bootstrap/feature-based/src/shared/components/ui/Button.tsx +22 -0
- package/templates/{architectures/feature-based/src/components/ui → css/component-styles/tailwind/component-based/src/components/common}/Button.jsx +1 -1
- package/templates/{architectures/feature-based/src/components/ui → css/component-styles/tailwind/component-based/src/components/common}/Button.tsx +1 -1
- package/templates/css/component-styles/tailwind/component-based/src/layouts/MainLayout.jsx +15 -0
- package/templates/css/component-styles/tailwind/component-based/src/layouts/MainLayout.tsx +19 -0
- package/templates/css/component-styles/tailwind/component-based/src/pages/Home/Home.jsx +13 -0
- package/templates/css/component-styles/tailwind/component-based/src/pages/Home/Home.tsx +13 -0
- package/templates/css/component-styles/tailwind/feature-based/src/app/App.jsx +9 -0
- package/templates/css/component-styles/tailwind/feature-based/src/app/App.tsx +9 -0
- package/templates/css/component-styles/tailwind/feature-based/src/features/home/pages/HomePage.jsx +13 -0
- package/templates/css/component-styles/tailwind/feature-based/src/features/home/pages/HomePage.tsx +13 -0
- package/templates/css/component-styles/tailwind/feature-based/src/shared/components/ui/Button.jsx +21 -0
- package/templates/css/component-styles/tailwind/feature-based/src/shared/components/ui/Button.tsx +26 -0
- package/templates/css/none/src/{index.css → main.css} +2 -0
- package/templates/css/none/src/themes.css +19 -0
- package/templates/css/tailwind/src/themes.css +9 -0
- package/templates/architectures/component-based/src/config/constants.js +0 -1
- package/templates/architectures/component-based/src/config/constants.ts +0 -1
- package/templates/architectures/component-based/src/config/routes.js +0 -7
- package/templates/architectures/component-based/src/config/routes.ts +0 -7
- package/templates/architectures/component-based/src/context/AppContext.jsx +0 -12
- package/templates/architectures/component-based/src/context/AppContext.tsx +0 -18
- package/templates/architectures/component-based/src/context/app-context.js +0 -5
- package/templates/architectures/component-based/src/hooks/index.js +0 -1
- package/templates/architectures/component-based/src/hooks/index.ts +0 -1
- package/templates/architectures/component-based/src/layouts/index.js +0 -1
- package/templates/architectures/component-based/src/layouts/index.ts +0 -1
- package/templates/architectures/component-based/src/styles/globals.css +0 -7
- package/templates/architectures/component-based/src/utils/index.js +0 -1
- package/templates/architectures/component-based/src/utils/index.ts +0 -1
- package/templates/architectures/feature-based/src/config/constants.js +0 -1
- package/templates/architectures/feature-based/src/config/constants.ts +0 -1
- package/templates/architectures/feature-based/src/hooks/index.js +0 -1
- package/templates/architectures/feature-based/src/hooks/index.ts +0 -1
- package/templates/architectures/feature-based/src/utils/index.js +0 -1
- package/templates/architectures/feature-based/src/utils/index.ts +0 -1
- package/templates/conditional/axios/component-based/src/services/axios.jsx +0 -19
- package/templates/conditional/axios/component-based/src/services/axios.ts +0 -19
- package/templates/conditional/axios/component-based/src/services/index.js +0 -1
- package/templates/conditional/axios/component-based/src/services/index.ts +0 -1
- package/templates/conditional/axios/feature-based/src/lib/axios.jsx +0 -19
- package/templates/conditional/axios/feature-based/src/lib/axios.ts +0 -19
- package/templates/conditional/axios/feature-based/src/lib/index.js +0 -1
- package/templates/conditional/axios/feature-based/src/lib/index.ts +0 -1
- package/templates/conditional/fetch/component-based/src/services/api.jsx +0 -27
- package/templates/conditional/fetch/component-based/src/services/api.ts +0 -27
- package/templates/conditional/fetch/component-based/src/services/index.js +0 -1
- package/templates/conditional/fetch/component-based/src/services/index.ts +0 -1
- package/templates/conditional/fetch/feature-based/src/lib/api.jsx +0 -27
- package/templates/conditional/fetch/feature-based/src/lib/api.ts +0 -27
- package/templates/conditional/fetch/feature-based/src/lib/index.js +0 -1
- package/templates/conditional/fetch/feature-based/src/lib/index.ts +0 -1
- package/templates/conditional/router/component-based/src/routes/index.jsx +0 -12
- package/templates/conditional/router/component-based/src/routes/index.tsx +0 -12
- package/templates/conditional/router/feature-based/src/app/router.jsx +0 -13
- package/templates/conditional/router/feature-based/src/app/router.tsx +0 -13
- package/templates/css/tailwind/src/index.css +0 -1
- /package/templates/architectures/component-based/src/{components/layout → config}/.gitkeep +0 -0
- /package/templates/architectures/{feature-based/src/features/home/interfaces → component-based/src/providers}/.gitkeep +0 -0
- /package/templates/architectures/{feature-based/src/lib → component-based/src/styles}/.gitkeep +0 -0
- /package/templates/architectures/feature-based/src/{stores → features/home/types}/.gitkeep +0 -0
- /package/templates/architectures/feature-based/src/{components → shared/components}/ui/index.js +0 -0
- /package/templates/architectures/feature-based/src/{components → shared/components}/ui/index.ts +0 -0
- /package/templates/architectures/feature-based/src/{hooks → shared/hooks}/useLocalStorage.jsx +0 -0
- /package/templates/architectures/feature-based/src/{hooks → shared/hooks}/useLocalStorage.ts +0 -0
- /package/templates/architectures/feature-based/src/{utils → shared/utils}/cn.jsx +0 -0
- /package/templates/architectures/feature-based/src/{utils → shared/utils}/cn.ts +0 -0
- /package/templates/conditional/state/redux/component-based/src/{context → providers}/StoreProvider.jsx +0 -0
- /package/templates/conditional/state/redux/component-based/src/{context → providers}/StoreProvider.tsx +0 -0
- /package/templates/conditional/state/redux/feature-based/src/{stores → shared/stores}/hooks.js +0 -0
- /package/templates/conditional/state/redux/feature-based/src/{stores → shared/stores}/hooks.ts +0 -0
- /package/templates/conditional/state/redux/feature-based/src/{stores → shared/stores}/index.js +0 -0
- /package/templates/conditional/state/redux/feature-based/src/{stores → shared/stores}/index.ts +0 -0
- /package/templates/css/bootstrap/src/{index.css → globals.css} +0 -0
- /package/templates/{architectures/feature-based/src/styles → css/tailwind/src}/globals.css +0 -0
package/templates/css/component-styles/bootstrap/component-based/src/components/common/Button.tsx
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
2
|
+
variant?: "primary" | "secondary";
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function Button({
|
|
7
|
+
variant = "primary",
|
|
8
|
+
children,
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}: ButtonProps) {
|
|
12
|
+
const variants = {
|
|
13
|
+
primary: "btn btn-primary",
|
|
14
|
+
secondary: "btn btn-secondary",
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<button className={`${variants[variant]} ${className ?? ""}`} {...props}>
|
|
19
|
+
{children}
|
|
20
|
+
</button>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function MainLayout({ children }) {
|
|
2
|
+
return (
|
|
3
|
+
<div className="min-vh-100 d-flex flex-column">
|
|
4
|
+
<header className="px-4 py-3 border-bottom">
|
|
5
|
+
<h2 className="h5 fw-semibold mb-0">Lumen</h2>
|
|
6
|
+
</header>
|
|
7
|
+
<main className="flex-grow-1 p-4 d-flex align-items-center justify-content-center">
|
|
8
|
+
{children}
|
|
9
|
+
</main>
|
|
10
|
+
<footer className="px-4 py-3 border-top text-center text-muted">
|
|
11
|
+
<p className="mb-0">Built with Lumen</p>
|
|
12
|
+
</footer>
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface MainLayoutProps {
|
|
2
|
+
children: React.ReactNode;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function MainLayout({ children }: MainLayoutProps) {
|
|
6
|
+
return (
|
|
7
|
+
<div className="min-vh-100 d-flex flex-column">
|
|
8
|
+
<header className="px-4 py-3 border-bottom">
|
|
9
|
+
<h2 className="h5 fw-semibold mb-0">Lumen</h2>
|
|
10
|
+
</header>
|
|
11
|
+
<main className="flex-grow-1 p-4 d-flex align-items-center justify-content-center">
|
|
12
|
+
{children}
|
|
13
|
+
</main>
|
|
14
|
+
<footer className="px-4 py-3 border-top text-center text-muted">
|
|
15
|
+
<p className="mb-0">Built with Lumen</p>
|
|
16
|
+
</footer>
|
|
17
|
+
</div>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/components/common";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="h1 fw-bold text-dark mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-muted mb-5">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/components/common";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="h1 fw-bold text-dark mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-muted mb-5">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/templates/css/component-styles/bootstrap/feature-based/src/features/home/pages/HomePage.jsx
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/shared/components/ui";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="h1 fw-bold text-dark mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-muted mb-5">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/templates/css/component-styles/bootstrap/feature-based/src/features/home/pages/HomePage.tsx
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/shared/components/ui";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="h1 fw-bold text-dark mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-muted mb-5">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/templates/css/component-styles/bootstrap/feature-based/src/shared/components/ui/Button.jsx
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function Button({
|
|
2
|
+
variant = "primary",
|
|
3
|
+
children,
|
|
4
|
+
className,
|
|
5
|
+
...props
|
|
6
|
+
}) {
|
|
7
|
+
const variants = {
|
|
8
|
+
primary: "btn btn-primary",
|
|
9
|
+
secondary: "btn btn-secondary",
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<button className={`${variants[variant]} ${className ?? ""}`} {...props}>
|
|
14
|
+
{children}
|
|
15
|
+
</button>
|
|
16
|
+
);
|
|
17
|
+
}
|
package/templates/css/component-styles/bootstrap/feature-based/src/shared/components/ui/Button.tsx
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
2
|
+
variant?: "primary" | "secondary";
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function Button({
|
|
7
|
+
variant = "primary",
|
|
8
|
+
children,
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}: ButtonProps) {
|
|
12
|
+
const variants = {
|
|
13
|
+
primary: "btn btn-primary",
|
|
14
|
+
secondary: "btn btn-secondary",
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<button className={`${variants[variant]} ${className ?? ""}`} {...props}>
|
|
19
|
+
{children}
|
|
20
|
+
</button>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function MainLayout({ children }) {
|
|
2
|
+
return (
|
|
3
|
+
<div className="min-h-screen flex flex-col">
|
|
4
|
+
<header className="px-6 py-4 border-b">
|
|
5
|
+
<h2 className="text-xl font-semibold">Lumen</h2>
|
|
6
|
+
</header>
|
|
7
|
+
<main className="flex-1 p-6 flex items-center justify-center">
|
|
8
|
+
{children}
|
|
9
|
+
</main>
|
|
10
|
+
<footer className="px-6 py-4 border-t text-center text-gray-500">
|
|
11
|
+
<p>Built with Lumen</p>
|
|
12
|
+
</footer>
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface MainLayoutProps {
|
|
2
|
+
children: React.ReactNode;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function MainLayout({ children }: MainLayoutProps) {
|
|
6
|
+
return (
|
|
7
|
+
<div className="min-h-screen flex flex-col">
|
|
8
|
+
<header className="px-6 py-4 border-b">
|
|
9
|
+
<h2 className="text-xl font-semibold">Lumen</h2>
|
|
10
|
+
</header>
|
|
11
|
+
<main className="flex-1 p-6 flex items-center justify-center">
|
|
12
|
+
{children}
|
|
13
|
+
</main>
|
|
14
|
+
<footer className="px-6 py-4 border-t text-center text-gray-500">
|
|
15
|
+
<p>Built with Lumen</p>
|
|
16
|
+
</footer>
|
|
17
|
+
</div>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/components/common";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="text-4xl font-bold text-gray-900 mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-gray-600 mb-8">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/components/common";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="text-4xl font-bold text-gray-900 mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-gray-600 mb-8">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/templates/css/component-styles/tailwind/feature-based/src/features/home/pages/HomePage.jsx
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/shared/components/ui";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="text-4xl font-bold text-gray-900 mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-gray-600 mb-8">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/templates/css/component-styles/tailwind/feature-based/src/features/home/pages/HomePage.tsx
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Button } from "@/shared/components/ui";
|
|
2
|
+
|
|
3
|
+
export function HomePage() {
|
|
4
|
+
return (
|
|
5
|
+
<div className="text-center">
|
|
6
|
+
<h1 className="text-4xl font-bold text-gray-900 mb-4">Welcome to Lumen</h1>
|
|
7
|
+
<p className="text-gray-600 mb-8">
|
|
8
|
+
Your React + Vite project is ready. Start building!
|
|
9
|
+
</p>
|
|
10
|
+
<Button>Get Started</Button>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/templates/css/component-styles/tailwind/feature-based/src/shared/components/ui/Button.jsx
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function Button({
|
|
2
|
+
variant = "primary",
|
|
3
|
+
children,
|
|
4
|
+
className,
|
|
5
|
+
...props
|
|
6
|
+
}) {
|
|
7
|
+
const base = "px-4 py-2 rounded-lg font-medium transition-colors";
|
|
8
|
+
const variants = {
|
|
9
|
+
primary: "bg-blue-600 text-white hover:bg-blue-700",
|
|
10
|
+
secondary: "bg-gray-200 text-gray-800 hover:bg-gray-300",
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<button
|
|
15
|
+
className={`${base} ${variants[variant]} ${className ?? ""}`}
|
|
16
|
+
{...props}
|
|
17
|
+
>
|
|
18
|
+
{children}
|
|
19
|
+
</button>
|
|
20
|
+
);
|
|
21
|
+
}
|
package/templates/css/component-styles/tailwind/feature-based/src/shared/components/ui/Button.tsx
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
2
|
+
variant?: "primary" | "secondary";
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function Button({
|
|
7
|
+
variant = "primary",
|
|
8
|
+
children,
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}: ButtonProps) {
|
|
12
|
+
const base = "px-4 py-2 rounded-lg font-medium transition-colors";
|
|
13
|
+
const variants = {
|
|
14
|
+
primary: "bg-blue-600 text-white hover:bg-blue-700",
|
|
15
|
+
secondary: "bg-gray-200 text-gray-800 hover:bg-gray-300",
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<button
|
|
20
|
+
className={`${base} ${variants[variant]} ${className ?? ""}`}
|
|
21
|
+
{...props}
|
|
22
|
+
>
|
|
23
|
+
{children}
|
|
24
|
+
</button>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/* themes.css — vanilla CSS theme tokens
|
|
2
|
+
* Driven by the ThemeProvider (feat) / AppProvider (comp) via
|
|
3
|
+
* document.documentElement.dataset.theme.
|
|
4
|
+
*/
|
|
5
|
+
:root {
|
|
6
|
+
--color-bg: #ffffff;
|
|
7
|
+
--color-fg: #111827;
|
|
8
|
+
--color-muted: #6b7280;
|
|
9
|
+
--color-primary: #6366f1;
|
|
10
|
+
--color-border: #e5e7eb;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
:root[data-theme="dark"] {
|
|
14
|
+
--color-bg: #111827;
|
|
15
|
+
--color-fg: #f9fafb;
|
|
16
|
+
--color-muted: #9ca3af;
|
|
17
|
+
--color-primary: #818cf8;
|
|
18
|
+
--color-border: #374151;
|
|
19
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const API_BASE_URL = import.meta.env.VITE_API_URL || "http://localhost:3000";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const API_BASE_URL = import.meta.env.VITE_API_URL || "http://localhost:3000";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useState } from "react";
|
|
2
|
-
import { AppContext } from "./app-context";
|
|
3
|
-
|
|
4
|
-
export function AppProvider({ children }) {
|
|
5
|
-
const [theme, setTheme] = useState("light");
|
|
6
|
-
|
|
7
|
-
return (
|
|
8
|
-
<AppContext.Provider value={{ theme, setTheme }}>
|
|
9
|
-
{children}
|
|
10
|
-
</AppContext.Provider>
|
|
11
|
-
);
|
|
12
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, type ReactNode } from "react";
|
|
2
|
-
import { AppContext, type AppContextValue } from "./app-context";
|
|
3
|
-
|
|
4
|
-
export function AppProvider({ children }: { children: ReactNode }) {
|
|
5
|
-
const [theme, setTheme] = useState(() => localStorage.getItem("theme") ?? "light");
|
|
6
|
-
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
localStorage.setItem("theme", theme);
|
|
9
|
-
}, [theme]);
|
|
10
|
-
|
|
11
|
-
const value: AppContextValue = { theme, setTheme };
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<AppContext.Provider value={value}>
|
|
15
|
-
{children}
|
|
16
|
-
</AppContext.Provider>
|
|
17
|
-
);
|
|
18
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { useLocalStorage } from "./useLocalStorage";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { useLocalStorage } from "./useLocalStorage";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { MainLayout } from "./MainLayout";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { MainLayout } from "./MainLayout";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { cn } from "./cn";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { cn } from "./cn";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const API_BASE_URL = import.meta.env.VITE_API_URL || "http://localhost:3000";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const API_BASE_URL = import.meta.env.VITE_API_URL || "http://localhost:3000";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { useLocalStorage } from "./useLocalStorage";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { useLocalStorage } from "./useLocalStorage";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { cn } from "./cn";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { cn } from "./cn";
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { API_BASE_URL } from "@/config/constants";
|
|
3
|
-
|
|
4
|
-
const api = axios.create({
|
|
5
|
-
baseURL: API_BASE_URL,
|
|
6
|
-
headers: {
|
|
7
|
-
"Content-Type": "application/json",
|
|
8
|
-
},
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
api.interceptors.request.use((config) => {
|
|
12
|
-
const token = localStorage.getItem("access_token");
|
|
13
|
-
if (token) {
|
|
14
|
-
config.headers.Authorization = `Bearer ${token}`;
|
|
15
|
-
}
|
|
16
|
-
return config;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
export default api;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { API_BASE_URL } from "@/config/constants";
|
|
3
|
-
|
|
4
|
-
const api = axios.create({
|
|
5
|
-
baseURL: API_BASE_URL,
|
|
6
|
-
headers: {
|
|
7
|
-
"Content-Type": "application/json",
|
|
8
|
-
},
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
api.interceptors.request.use((config) => {
|
|
12
|
-
const token = localStorage.getItem("access_token");
|
|
13
|
-
if (token) {
|
|
14
|
-
config.headers.Authorization = `Bearer ${token}`;
|
|
15
|
-
}
|
|
16
|
-
return config;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
export default api;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as api } from "./axios";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as api } from "./axios";
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { API_BASE_URL } from "@/config/constants";
|
|
3
|
-
|
|
4
|
-
const api = axios.create({
|
|
5
|
-
baseURL: API_BASE_URL,
|
|
6
|
-
headers: {
|
|
7
|
-
"Content-Type": "application/json",
|
|
8
|
-
},
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
api.interceptors.request.use((config) => {
|
|
12
|
-
const token = localStorage.getItem("access_token");
|
|
13
|
-
if (token) {
|
|
14
|
-
config.headers.Authorization = `Bearer ${token}`;
|
|
15
|
-
}
|
|
16
|
-
return config;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
export default api;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
import { API_BASE_URL } from "@/config/constants";
|
|
3
|
-
|
|
4
|
-
const api = axios.create({
|
|
5
|
-
baseURL: API_BASE_URL,
|
|
6
|
-
headers: {
|
|
7
|
-
"Content-Type": "application/json",
|
|
8
|
-
},
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
api.interceptors.request.use((config) => {
|
|
12
|
-
const token = localStorage.getItem("access_token");
|
|
13
|
-
if (token) {
|
|
14
|
-
config.headers.Authorization = `Bearer ${token}`;
|
|
15
|
-
}
|
|
16
|
-
return config;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
export default api;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as api } from "./axios";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as api } from "./axios";
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { API_BASE_URL } from "@/config/constants";
|
|
2
|
-
|
|
3
|
-
const apiClient = async (endpoint, options = {}) => {
|
|
4
|
-
const token = localStorage.getItem("access_token");
|
|
5
|
-
|
|
6
|
-
const headers = {
|
|
7
|
-
"Content-Type": "application/json",
|
|
8
|
-
...options.headers,
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
if (token) {
|
|
12
|
-
headers["Authorization"] = `Bearer ${token}`;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const response = await fetch(`${API_BASE_URL}${endpoint}`, {
|
|
16
|
-
...options,
|
|
17
|
-
headers,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
if (!response.ok) {
|
|
21
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return response.json();
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export default apiClient;
|