create-react-forge 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.d.ts +1 -1
  3. package/dist/cli/parser.d.ts.map +1 -1
  4. package/dist/cli/parser.js +3 -2
  5. package/dist/cli/parser.js.map +1 -1
  6. package/dist/config/defaults.d.ts +1 -1
  7. package/dist/config/defaults.js +2 -2
  8. package/dist/config/defaults.js.map +1 -1
  9. package/dist/config/schema.d.ts +11 -9
  10. package/dist/config/schema.d.ts.map +1 -1
  11. package/dist/config/schema.js +4 -3
  12. package/dist/config/schema.js.map +1 -1
  13. package/dist/templates/registry.d.ts +6 -2
  14. package/dist/templates/registry.d.ts.map +1 -1
  15. package/dist/templates/registry.js +31 -16
  16. package/dist/templates/registry.js.map +1 -1
  17. package/dist/templates/utils.js +4 -4
  18. package/dist/templates/utils.js.map +1 -1
  19. package/package.json +1 -1
  20. package/src/templates/overlays/base/manifest.json +4 -3
  21. package/src/templates/overlays/base/src/components/ui/Button.tsx +103 -31
  22. package/src/templates/overlays/base/src/components/ui/Input.tsx +55 -29
  23. package/src/templates/overlays/base/src/lib/utils.ts +0 -10
  24. package/src/templates/overlays/runtime/nextjs/src/app/error.tsx +39 -10
  25. package/src/templates/overlays/runtime/nextjs/src/app/loading.tsx +25 -7
  26. package/src/templates/overlays/runtime/nextjs/src/app/not-found.tsx +54 -13
  27. package/src/templates/overlays/runtime/nextjs/src/app/page.tsx +55 -13
  28. package/src/templates/overlays/runtime/nextjs/src/styles/globals.css +1 -1
  29. package/src/templates/overlays/runtime/vite/src/components/errors/ErrorFallback.tsx +49 -15
  30. package/src/templates/overlays/runtime/vite/src/components/ui/LoadingSpinner.tsx +33 -13
  31. package/src/templates/overlays/runtime/vite/src/features/misc/routes/Landing.tsx +78 -21
  32. package/src/templates/overlays/runtime/vite/src/features/misc/routes/NotFound.tsx +77 -19
  33. package/src/templates/overlays/runtime/vite/src/main.tsx +0 -2
  34. package/src/templates/overlays/styling/css/_nextjs/src/app/error.css +49 -0
  35. package/src/templates/overlays/styling/css/_nextjs/src/app/error.tsx +34 -0
  36. package/src/templates/overlays/styling/css/_nextjs/src/app/loading.css +28 -0
  37. package/src/templates/overlays/styling/css/_nextjs/src/app/loading.tsx +13 -0
  38. package/src/templates/overlays/styling/css/_nextjs/src/app/not-found.css +70 -0
  39. package/src/templates/overlays/styling/css/_nextjs/src/app/not-found.tsx +25 -0
  40. package/src/templates/overlays/styling/css/_nextjs/src/app/page.css +73 -0
  41. package/src/templates/overlays/styling/css/_nextjs/src/app/page.tsx +32 -0
  42. package/src/templates/overlays/styling/css/_vite/src/components/errors/ErrorFallback.css +49 -0
  43. package/src/templates/overlays/styling/css/_vite/src/components/errors/ErrorFallback.tsx +22 -0
  44. package/src/templates/overlays/styling/css/_vite/src/components/ui/LoadingSpinner.css +40 -0
  45. package/src/templates/overlays/styling/css/_vite/src/components/ui/LoadingSpinner.tsx +21 -0
  46. package/src/templates/overlays/styling/css/_vite/src/features/misc/routes/Landing.css +73 -0
  47. package/src/templates/overlays/styling/css/_vite/src/features/misc/routes/Landing.tsx +32 -0
  48. package/src/templates/overlays/styling/css/_vite/src/features/misc/routes/NotFound.css +70 -0
  49. package/src/templates/overlays/styling/css/_vite/src/features/misc/routes/NotFound.tsx +25 -0
  50. package/src/templates/overlays/styling/css/manifest.json +17 -0
  51. package/src/templates/overlays/styling/css/src/styles/globals.css +107 -0
  52. package/src/templates/overlays/styling/css-modules/_nextjs/src/app/loading.tsx +13 -0
  53. package/src/templates/overlays/styling/css-modules/_nextjs/src/app/page.module.css +73 -0
  54. package/src/templates/overlays/styling/css-modules/_nextjs/src/app/page.tsx +32 -0
  55. package/src/templates/overlays/styling/css-modules/_vite/src/components/errors/ErrorFallback.module.css +45 -0
  56. package/src/templates/overlays/styling/css-modules/_vite/src/components/errors/ErrorFallback.tsx +22 -0
  57. package/src/templates/overlays/styling/css-modules/_vite/src/components/ui/LoadingSpinner.module.css +40 -0
  58. package/src/templates/overlays/styling/css-modules/_vite/src/components/ui/LoadingSpinner.tsx +23 -0
  59. package/src/templates/overlays/styling/css-modules/_vite/src/features/misc/routes/Landing.module.css +73 -0
  60. package/src/templates/overlays/styling/css-modules/_vite/src/features/misc/routes/Landing.tsx +32 -0
  61. package/src/templates/overlays/styling/css-modules/_vite/src/features/misc/routes/NotFound.module.css +67 -0
  62. package/src/templates/overlays/styling/css-modules/_vite/src/features/misc/routes/NotFound.tsx +25 -0
  63. package/src/templates/overlays/styling/css-modules/manifest.json +6 -3
  64. package/src/templates/overlays/styling/css-modules/src/css.d.ts +13 -0
  65. package/src/templates/overlays/styling/styled-components/_nextjs/src/app/error.tsx +72 -0
  66. package/src/templates/overlays/styling/styled-components/_nextjs/src/app/layout.tsx +25 -0
  67. package/src/templates/overlays/styling/styled-components/_nextjs/src/app/loading.tsx +40 -0
  68. package/src/templates/overlays/styling/styled-components/_nextjs/src/app/not-found.tsx +91 -0
  69. package/src/templates/overlays/styling/styled-components/_nextjs/src/app/page.tsx +102 -0
  70. package/src/templates/overlays/styling/styled-components/_nextjs/src/app/providers.tsx +22 -0
  71. package/src/templates/overlays/styling/styled-components/{src → _nextjs/src}/lib/StyledComponentsRegistry.tsx +10 -2
  72. package/src/templates/overlays/styling/styled-components/_vite/src/app/provider.tsx +27 -0
  73. package/src/templates/overlays/styling/styled-components/_vite/src/components/errors/ErrorFallback.tsx +59 -0
  74. package/src/templates/overlays/styling/styled-components/_vite/src/components/ui/LoadingSpinner.tsx +47 -0
  75. package/src/templates/overlays/styling/styled-components/_vite/src/features/misc/routes/Landing.tsx +100 -0
  76. package/src/templates/overlays/styling/styled-components/_vite/src/features/misc/routes/NotFound.tsx +89 -0
  77. package/src/templates/overlays/styling/styled-components/_vite/src/main.tsx +13 -0
  78. package/src/templates/overlays/styling/styled-components/manifest.json +5 -1
  79. package/src/templates/overlays/styling/tailwind/_nextjs/src/app/error.tsx +33 -0
  80. package/src/templates/overlays/styling/tailwind/_nextjs/src/app/loading.tsx +12 -0
  81. package/src/templates/overlays/styling/tailwind/_nextjs/src/app/not-found.tsx +26 -0
  82. package/src/templates/overlays/styling/tailwind/_nextjs/src/app/page.tsx +33 -0
  83. package/src/templates/overlays/styling/tailwind/manifest.json +5 -3
  84. package/src/templates/overlays/runtime/vite/src/styles/globals.css +0 -55
  85. package/src/templates/overlays/styling/css-modules/src/components/ui/Button.module.css +0 -87
  86. package/src/templates/overlays/styling/css-modules/src/styles/globals.css +0 -91
@@ -0,0 +1,89 @@
1
+ import { Link } from 'react-router-dom';
2
+ import styled from 'styled-components';
3
+
4
+ const Container = styled.div`
5
+ display: flex;
6
+ min-height: 100vh;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ justify-content: center;
10
+ `;
11
+
12
+ const Content = styled.div`
13
+ text-align: center;
14
+ `;
15
+
16
+ const ErrorCode = styled.p`
17
+ font-size: 1rem;
18
+ font-weight: 600;
19
+ color: #4f46e5;
20
+ `;
21
+
22
+ const Title = styled.h1`
23
+ margin-top: 1rem;
24
+ font-size: 1.875rem;
25
+ font-weight: 700;
26
+ letter-spacing: -0.025em;
27
+ color: #111827;
28
+
29
+ @media (min-width: 640px) {
30
+ font-size: 3rem;
31
+ }
32
+ `;
33
+
34
+ const Description = styled.p`
35
+ margin-top: 1.5rem;
36
+ font-size: 1rem;
37
+ line-height: 1.75rem;
38
+ color: #4b5563;
39
+ `;
40
+
41
+ const ButtonGroup = styled.div`
42
+ margin-top: 2.5rem;
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ gap: 1.5rem;
47
+ `;
48
+
49
+ const PrimaryButton = styled(Link)`
50
+ border-radius: 0.375rem;
51
+ background-color: #4f46e5;
52
+ padding: 0.625rem 0.875rem;
53
+ font-size: 0.875rem;
54
+ font-weight: 600;
55
+ color: white;
56
+ text-decoration: none;
57
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
58
+ transition: background-color 0.2s;
59
+
60
+ &:hover {
61
+ background-color: #6366f1;
62
+ }
63
+
64
+ &:focus-visible {
65
+ outline: 2px solid #4f46e5;
66
+ outline-offset: 2px;
67
+ }
68
+ `;
69
+
70
+ export function NotFound() {
71
+ return (
72
+ <Container>
73
+ <Content>
74
+ <ErrorCode>404</ErrorCode>
75
+ <Title>Page not found</Title>
76
+ <Description>
77
+ Sorry, we couldn't find the page you're looking for.
78
+ </Description>
79
+ <ButtonGroup>
80
+ <PrimaryButton to="/">Go back home</PrimaryButton>
81
+ </ButtonGroup>
82
+ </Content>
83
+ </Container>
84
+ );
85
+ }
86
+
87
+
88
+
89
+
@@ -0,0 +1,13 @@
1
+ import { App } from '@/app/App';
2
+ import React from 'react';
3
+ import ReactDOM from 'react-dom/client';
4
+
5
+ ReactDOM.createRoot(document.getElementById('root')!).render(
6
+ <React.StrictMode>
7
+ <App />
8
+ </React.StrictMode>
9
+ );
10
+
11
+
12
+
13
+
@@ -13,7 +13,11 @@
13
13
  "scripts": {},
14
14
  "filePatterns": {
15
15
  "include": ["**/*"],
16
- "exclude": ["manifest.json"]
16
+ "exclude": ["manifest.json", "_vite", "_nextjs"]
17
+ },
18
+ "runtimeOverrides": {
19
+ "vite": "_vite",
20
+ "nextjs": "_nextjs"
17
21
  }
18
22
  }
19
23
 
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+
3
+ import { useEffect } from 'react';
4
+
5
+ export default function Error({
6
+ error,
7
+ reset,
8
+ }: {
9
+ error: Error & { digest?: string };
10
+ reset: () => void;
11
+ }) {
12
+ useEffect(() => {
13
+ console.error(error);
14
+ }, [error]);
15
+
16
+ return (
17
+ <div className="flex min-h-screen flex-col items-center justify-center" role="alert">
18
+ <div className="text-center">
19
+ <h1 className="text-2xl font-bold text-red-600">Something went wrong</h1>
20
+ <p className="mt-4 text-gray-600">
21
+ {error.message || 'An unexpected error occurred'}
22
+ </p>
23
+ <button
24
+ onClick={reset}
25
+ className="mt-6 rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500"
26
+ >
27
+ Try again
28
+ </button>
29
+ </div>
30
+ </div>
31
+ );
32
+ }
33
+
@@ -0,0 +1,12 @@
1
+ export default function Loading() {
2
+ return (
3
+ <div className="flex min-h-screen items-center justify-center">
4
+ <div
5
+ className="h-8 w-8 animate-spin rounded-full border-2 border-gray-300 border-t-indigo-600"
6
+ role="status"
7
+ aria-label="Loading"
8
+ />
9
+ </div>
10
+ );
11
+ }
12
+
@@ -0,0 +1,26 @@
1
+ import Link from 'next/link';
2
+
3
+ export default function NotFound() {
4
+ return (
5
+ <div className="flex min-h-screen flex-col items-center justify-center">
6
+ <div className="text-center">
7
+ <p className="text-base font-semibold text-indigo-600">404</p>
8
+ <h1 className="mt-4 text-3xl font-bold tracking-tight sm:text-5xl">
9
+ Page not found
10
+ </h1>
11
+ <p className="mt-6 text-base leading-7 text-gray-600">
12
+ Sorry, we couldn't find the page you're looking for.
13
+ </p>
14
+ <div className="mt-10 flex items-center justify-center gap-x-6">
15
+ <Link
16
+ href="/"
17
+ className="rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
18
+ >
19
+ Go back home
20
+ </Link>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ );
25
+ }
26
+
@@ -0,0 +1,33 @@
1
+ import Link from 'next/link';
2
+
3
+ export default function HomePage() {
4
+ return (
5
+ <div className="flex min-h-screen flex-col items-center justify-center">
6
+ <div className="text-center">
7
+ <h1 className="text-4xl font-bold tracking-tight sm:text-6xl">
8
+ Welcome to Your App
9
+ </h1>
10
+ <p className="mt-6 text-lg leading-8 text-gray-600">
11
+ A production-ready Next.js application scaffolded with create-react-forge.
12
+ </p>
13
+ <div className="mt-10 flex items-center justify-center gap-x-6">
14
+ <Link
15
+ href="/dashboard"
16
+ className="rounded-md bg-indigo-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
17
+ >
18
+ Get started
19
+ </Link>
20
+ <a
21
+ href="https://github.com/alan2207/bulletproof-react"
22
+ className="text-sm font-semibold leading-6"
23
+ target="_blank"
24
+ rel="noopener noreferrer"
25
+ >
26
+ Learn more <span aria-hidden="true">→</span>
27
+ </a>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ );
32
+ }
33
+
@@ -2,7 +2,7 @@
2
2
  "name": "styling-tailwind",
3
3
  "version": "1.0.0",
4
4
  "description": "Tailwind CSS styling setup with modern configuration",
5
- "compatibleWith": ["runtime-vite", "runtime-nextjs"],
5
+ "compatibleWith": ["runtime-nextjs"],
6
6
  "dependencies": {},
7
7
  "devDependencies": {
8
8
  "tailwindcss": "^4.0.0",
@@ -13,7 +13,9 @@
13
13
  "scripts": {},
14
14
  "filePatterns": {
15
15
  "include": ["**/*"],
16
- "exclude": ["manifest.json"]
16
+ "exclude": ["manifest.json", "_nextjs"]
17
+ },
18
+ "runtimeOverrides": {
19
+ "nextjs": "_nextjs"
17
20
  }
18
21
  }
19
-
@@ -1,55 +0,0 @@
1
- /* Base styles - will be enhanced by styling overlay (tailwind/css-modules) */
2
-
3
- *,
4
- *::before,
5
- *::after {
6
- box-sizing: border-box;
7
- }
8
-
9
- * {
10
- margin: 0;
11
- }
12
-
13
- html,
14
- body {
15
- height: 100%;
16
- }
17
-
18
- body {
19
- line-height: 1.5;
20
- -webkit-font-smoothing: antialiased;
21
- font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
22
- 'Helvetica Neue', Arial, sans-serif;
23
- }
24
-
25
- img,
26
- picture,
27
- video,
28
- canvas,
29
- svg {
30
- display: block;
31
- max-width: 100%;
32
- }
33
-
34
- input,
35
- button,
36
- textarea,
37
- select {
38
- font: inherit;
39
- }
40
-
41
- p,
42
- h1,
43
- h2,
44
- h3,
45
- h4,
46
- h5,
47
- h6 {
48
- overflow-wrap: break-word;
49
- }
50
-
51
- #root {
52
- isolation: isolate;
53
- height: 100%;
54
- }
55
-
@@ -1,87 +0,0 @@
1
- .button {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: center;
5
- border-radius: var(--radius-md);
6
- font-weight: 600;
7
- transition: all 0.15s ease;
8
- cursor: pointer;
9
- border: none;
10
- }
11
-
12
- .button:disabled {
13
- opacity: 0.5;
14
- cursor: not-allowed;
15
- }
16
-
17
- /* Variants */
18
- .primary {
19
- background-color: var(--color-primary-600);
20
- color: white;
21
- }
22
-
23
- .primary:hover:not(:disabled) {
24
- background-color: var(--color-primary-500);
25
- }
26
-
27
- .secondary {
28
- background-color: var(--color-gray-100);
29
- color: var(--color-gray-900);
30
- }
31
-
32
- .secondary:hover:not(:disabled) {
33
- background-color: var(--color-gray-200);
34
- }
35
-
36
- .outline {
37
- background-color: transparent;
38
- border: 1px solid var(--color-gray-300);
39
- color: var(--color-gray-700);
40
- }
41
-
42
- .outline:hover:not(:disabled) {
43
- background-color: var(--color-gray-50);
44
- }
45
-
46
- .danger {
47
- background-color: var(--color-red-600);
48
- color: white;
49
- }
50
-
51
- .danger:hover:not(:disabled) {
52
- background-color: var(--color-red-500);
53
- }
54
-
55
- /* Sizes */
56
- .sm {
57
- padding: var(--spacing-1) var(--spacing-2);
58
- font-size: 0.75rem;
59
- }
60
-
61
- .md {
62
- padding: var(--spacing-2) var(--spacing-4);
63
- font-size: 0.875rem;
64
- }
65
-
66
- .lg {
67
- padding: var(--spacing-3) var(--spacing-4);
68
- font-size: 1rem;
69
- }
70
-
71
- /* Loading spinner */
72
- .spinner {
73
- width: 1rem;
74
- height: 1rem;
75
- margin-right: var(--spacing-2);
76
- border: 2px solid currentColor;
77
- border-top-color: transparent;
78
- border-radius: var(--radius-full);
79
- animation: spin 0.6s linear infinite;
80
- }
81
-
82
- @keyframes spin {
83
- to {
84
- transform: rotate(360deg);
85
- }
86
- }
87
-
@@ -1,91 +0,0 @@
1
- /* CSS Custom Properties (Design Tokens) */
2
- :root {
3
- /* Colors */
4
- --color-primary-50: #eff6ff;
5
- --color-primary-100: #dbeafe;
6
- --color-primary-500: #3b82f6;
7
- --color-primary-600: #2563eb;
8
- --color-primary-700: #1d4ed8;
9
-
10
- --color-gray-50: #f9fafb;
11
- --color-gray-100: #f3f4f6;
12
- --color-gray-200: #e5e7eb;
13
- --color-gray-300: #d1d5db;
14
- --color-gray-400: #9ca3af;
15
- --color-gray-500: #6b7280;
16
- --color-gray-600: #4b5563;
17
- --color-gray-700: #374151;
18
- --color-gray-800: #1f2937;
19
- --color-gray-900: #111827;
20
-
21
- --color-red-500: #ef4444;
22
- --color-red-600: #dc2626;
23
-
24
- /* Typography */
25
- --font-family-sans: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
26
- Roboto, 'Helvetica Neue', Arial, sans-serif;
27
- --font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
28
- monospace;
29
-
30
- /* Spacing */
31
- --spacing-1: 0.25rem;
32
- --spacing-2: 0.5rem;
33
- --spacing-3: 0.75rem;
34
- --spacing-4: 1rem;
35
- --spacing-6: 1.5rem;
36
- --spacing-8: 2rem;
37
-
38
- /* Border Radius */
39
- --radius-sm: 0.25rem;
40
- --radius-md: 0.375rem;
41
- --radius-lg: 0.5rem;
42
- --radius-full: 9999px;
43
-
44
- /* Shadows */
45
- --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
46
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
47
- }
48
-
49
- /* Reset */
50
- *,
51
- *::before,
52
- *::after {
53
- box-sizing: border-box;
54
- margin: 0;
55
- padding: 0;
56
- }
57
-
58
- html {
59
- -webkit-font-smoothing: antialiased;
60
- -moz-osx-font-smoothing: grayscale;
61
- }
62
-
63
- body {
64
- font-family: var(--font-family-sans);
65
- line-height: 1.5;
66
- color: var(--color-gray-900);
67
- background-color: white;
68
- }
69
-
70
- img,
71
- picture,
72
- video,
73
- canvas,
74
- svg {
75
- display: block;
76
- max-width: 100%;
77
- }
78
-
79
- input,
80
- button,
81
- textarea,
82
- select {
83
- font: inherit;
84
- }
85
-
86
- /* Focus styles */
87
- :focus-visible {
88
- outline: 2px solid var(--color-primary-500);
89
- outline-offset: 2px;
90
- }
91
-