create-project-template-cli 1.0.0 → 1.0.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 (37) hide show
  1. package/README.md +5 -5
  2. package/index.js +133 -133
  3. package/package.json +2 -2
  4. package/template/react-shadcn/.gitignore +24 -0
  5. package/template/react-shadcn/.husky/commit-msg +4 -4
  6. package/template/react-shadcn/.stylelintignore +19 -19
  7. package/template/react-shadcn/.stylelintrc.cjs +258 -258
  8. package/template/react-shadcn/.vscode/extensions.json +7 -7
  9. package/template/react-shadcn/README.md +75 -75
  10. package/template/react-shadcn/commitlint.config.cjs +90 -90
  11. package/template/react-shadcn/components.json +22 -22
  12. package/template/react-shadcn/eslint.config.js +58 -58
  13. package/template/react-shadcn/index.html +13 -13
  14. package/template/react-shadcn/lint-staged.config.cjs +4 -4
  15. package/template/react-shadcn/package.json +62 -62
  16. package/template/react-shadcn/pnpm-lock.yaml +4514 -4514
  17. package/template/react-shadcn/src/App.css +23 -23
  18. package/template/react-shadcn/src/App.tsx +20 -20
  19. package/template/react-shadcn/src/assets/css/tailwindcss.css +120 -120
  20. package/template/react-shadcn/src/components/ui/button.tsx +58 -58
  21. package/template/react-shadcn/src/components/ui/card.tsx +92 -92
  22. package/template/react-shadcn/src/components/ui/input.tsx +21 -21
  23. package/template/react-shadcn/src/components/ui/label.tsx +22 -22
  24. package/template/react-shadcn/src/components/ui/navigation-menu.tsx +168 -168
  25. package/template/react-shadcn/src/lib/utils.ts +6 -6
  26. package/template/react-shadcn/src/main.tsx +11 -11
  27. package/template/react-shadcn/src/router/index.tsx +71 -71
  28. package/template/react-shadcn/src/views/404/index.scss +133 -133
  29. package/template/react-shadcn/src/views/404/index.tsx +26 -26
  30. package/template/react-shadcn/src/views/Index/index.tsx +7 -7
  31. package/template/react-shadcn/src/views/index.tsx +58 -58
  32. package/template/react-shadcn/tsconfig.app.json +33 -33
  33. package/template/react-shadcn/tsconfig.json +13 -13
  34. package/template/react-shadcn/tsconfig.node.json +32 -32
  35. package/template/react-shadcn/vite.config.ts +36 -36
  36. package/template/vue-tailwindcss/.gitignore +30 -0
  37. package/utils.js +73 -73
@@ -1,133 +1,133 @@
1
- .error-container {
2
- width: 100%;
3
- max-width: 600px;
4
- margin: auto;
5
- margin-top: 20px;
6
- padding: 60px 30px;
7
- border-radius: 12px;
8
- background: #fff;
9
- box-shadow: 0 8px 32px rgb(0 0 0 / 8%);
10
- text-align: center;
11
- transition: transform 0.3s ease;
12
- }
13
-
14
- .error-container:hover {
15
- transform: translateY(-5px);
16
- }
17
-
18
- .error-code {
19
- position: relative;
20
- margin-bottom: 20px;
21
- color: #3498db;
22
- font-weight: 700;
23
- font-size: 8rem;
24
- }
25
-
26
- .error-code::after {
27
- content: "";
28
- position: absolute;
29
- bottom: -10px;
30
- left: 50%;
31
- width: 80px;
32
- height: 4px;
33
- border-radius: 2px;
34
- background: #3498db;
35
- transform: translateX(-50%);
36
- animation: line-pulse 2s infinite;
37
- }
38
-
39
- .error-title {
40
- margin-bottom: 15px;
41
- color: #2c3e50;
42
- font-size: 1.8rem;
43
- }
44
-
45
- .error-desc {
46
- margin-bottom: 30px;
47
- color: #7f8c8d;
48
- font-size: 1rem;
49
- line-height: 1.6;
50
- }
51
-
52
- .btn-group {
53
- display: flex;
54
- flex-wrap: wrap;
55
- gap: 15px;
56
- justify-content: center;
57
- }
58
-
59
- .btn {
60
- padding: 12px 24px;
61
- border: none;
62
- border-radius: 6px;
63
- font-weight: 500;
64
- font-size: 1rem;
65
- text-decoration: none;
66
- cursor: pointer;
67
- transition: all 0.3s ease;
68
- }
69
-
70
- .btn-back {
71
- background-color: #3498db;
72
- color: #fff;
73
- }
74
-
75
- .btn-back:hover {
76
- background-color: #2980b9;
77
- transform: translateY(-2px);
78
- }
79
-
80
- .btn-home {
81
- border: 1px solid #3498db;
82
- background-color: #fff;
83
- color: #3498db;
84
- }
85
-
86
- .btn-home:hover {
87
- background-color: #f0f7ff;
88
- transform: translateY(-2px);
89
- }
90
-
91
- @keyframes line-pulse {
92
- 0% {
93
- width: 80px;
94
- }
95
-
96
- 50% {
97
- width: 120px;
98
- }
99
-
100
- 100% {
101
- width: 80px;
102
- }
103
- }
104
-
105
- /* 移动端适配 */
106
- @media (width <= 768px) {
107
- .error-code {
108
- font-size: 6rem;
109
- }
110
-
111
- .error-title {
112
- font-size: 1.5rem;
113
- }
114
-
115
- .error-container {
116
- padding: 40px 20px;
117
- }
118
- }
119
-
120
- @media (width <= 480px) {
121
- .error-code {
122
- font-size: 4.5rem;
123
- }
124
-
125
- .btn-group {
126
- flex-direction: column;
127
- gap: 10px;
128
- }
129
-
130
- .btn {
131
- width: 100%;
132
- }
133
- }
1
+ .error-container {
2
+ width: 100%;
3
+ max-width: 600px;
4
+ margin: auto;
5
+ margin-top: 20px;
6
+ padding: 60px 30px;
7
+ border-radius: 12px;
8
+ background: #fff;
9
+ box-shadow: 0 8px 32px rgb(0 0 0 / 8%);
10
+ text-align: center;
11
+ transition: transform 0.3s ease;
12
+ }
13
+
14
+ .error-container:hover {
15
+ transform: translateY(-5px);
16
+ }
17
+
18
+ .error-code {
19
+ position: relative;
20
+ margin-bottom: 20px;
21
+ color: #3498db;
22
+ font-weight: 700;
23
+ font-size: 8rem;
24
+ }
25
+
26
+ .error-code::after {
27
+ content: "";
28
+ position: absolute;
29
+ bottom: -10px;
30
+ left: 50%;
31
+ width: 80px;
32
+ height: 4px;
33
+ border-radius: 2px;
34
+ background: #3498db;
35
+ transform: translateX(-50%);
36
+ animation: line-pulse 2s infinite;
37
+ }
38
+
39
+ .error-title {
40
+ margin-bottom: 15px;
41
+ color: #2c3e50;
42
+ font-size: 1.8rem;
43
+ }
44
+
45
+ .error-desc {
46
+ margin-bottom: 30px;
47
+ color: #7f8c8d;
48
+ font-size: 1rem;
49
+ line-height: 1.6;
50
+ }
51
+
52
+ .btn-group {
53
+ display: flex;
54
+ flex-wrap: wrap;
55
+ gap: 15px;
56
+ justify-content: center;
57
+ }
58
+
59
+ .btn {
60
+ padding: 12px 24px;
61
+ border: none;
62
+ border-radius: 6px;
63
+ font-weight: 500;
64
+ font-size: 1rem;
65
+ text-decoration: none;
66
+ cursor: pointer;
67
+ transition: all 0.3s ease;
68
+ }
69
+
70
+ .btn-back {
71
+ background-color: #3498db;
72
+ color: #fff;
73
+ }
74
+
75
+ .btn-back:hover {
76
+ background-color: #2980b9;
77
+ transform: translateY(-2px);
78
+ }
79
+
80
+ .btn-home {
81
+ border: 1px solid #3498db;
82
+ background-color: #fff;
83
+ color: #3498db;
84
+ }
85
+
86
+ .btn-home:hover {
87
+ background-color: #f0f7ff;
88
+ transform: translateY(-2px);
89
+ }
90
+
91
+ @keyframes line-pulse {
92
+ 0% {
93
+ width: 80px;
94
+ }
95
+
96
+ 50% {
97
+ width: 120px;
98
+ }
99
+
100
+ 100% {
101
+ width: 80px;
102
+ }
103
+ }
104
+
105
+ /* 移动端适配 */
106
+ @media (width <= 768px) {
107
+ .error-code {
108
+ font-size: 6rem;
109
+ }
110
+
111
+ .error-title {
112
+ font-size: 1.5rem;
113
+ }
114
+
115
+ .error-container {
116
+ padding: 40px 20px;
117
+ }
118
+ }
119
+
120
+ @media (width <= 480px) {
121
+ .error-code {
122
+ font-size: 4.5rem;
123
+ }
124
+
125
+ .btn-group {
126
+ flex-direction: column;
127
+ gap: 10px;
128
+ }
129
+
130
+ .btn {
131
+ width: 100%;
132
+ }
133
+ }
@@ -1,27 +1,27 @@
1
- import './index.scss';
2
- import { useNavigate } from 'react-router-dom';
3
- function NotFound() {
4
- const navigate = useNavigate();
5
- const change = () => {
6
-
7
- };
8
- // 跳转到首页
9
- const indexUrl = () => {
10
- navigate('/');
11
- };
12
- return (
13
- <div className="error-container">
14
- <div className="error-code">404</div>
15
- <h1 className="error-title">页面好像迷路了</h1>
16
- <p className="error-desc">
17
- 很抱歉,你访问的页面不存在、已被删除或暂时无法访问<br ></br>
18
- 可能是链接错误,也可能是页面已迁移到其他地址
19
- </p>
20
- <div className="btn-group">
21
- <button className="btn btn-back" onClick={change}>返回上一页</button>
22
- <button className="btn btn-home" onClick={indexUrl}>返回首页</button>
23
- </div>
24
- </div>
25
- );
26
- }
1
+ import './index.scss';
2
+ import { useNavigate } from 'react-router-dom';
3
+ function NotFound() {
4
+ const navigate = useNavigate();
5
+ const change = () => {
6
+
7
+ };
8
+ // 跳转到首页
9
+ const indexUrl = () => {
10
+ navigate('/');
11
+ };
12
+ return (
13
+ <div className="error-container">
14
+ <div className="error-code">404</div>
15
+ <h1 className="error-title">页面好像迷路了</h1>
16
+ <p className="error-desc">
17
+ 很抱歉,你访问的页面不存在、已被删除或暂时无法访问<br ></br>
18
+ 可能是链接错误,也可能是页面已迁移到其他地址
19
+ </p>
20
+ <div className="btn-group">
21
+ <button className="btn btn-back" onClick={change}>返回上一页</button>
22
+ <button className="btn btn-home" onClick={indexUrl}>返回首页</button>
23
+ </div>
24
+ </div>
25
+ );
26
+ }
27
27
  export default NotFound;
@@ -1,8 +1,8 @@
1
- function Index() {
2
- return (
3
- <div>
4
- <h1>Index</h1>
5
- </div>
6
- );
7
- }
1
+ function Index() {
2
+ return (
3
+ <div>
4
+ <h1>Index</h1>
5
+ </div>
6
+ );
7
+ }
8
8
  export default Index;
@@ -1,59 +1,59 @@
1
- import { Outlet } from 'react-router-dom';
2
- import { useState } from 'react';
3
- import {
4
- NavigationMenu,
5
-
6
-
7
- NavigationMenuItem,
8
- NavigationMenuLink,
9
- NavigationMenuList,
10
- navigationMenuTriggerStyle
11
-
12
- } from "@/components/ui/navigation-menu";
13
- import { useNavigate } from 'react-router-dom';
14
- const navItems = [
15
- {
16
- label: '首页',
17
- path: '/',
18
- },
19
- {
20
- label: '直播',
21
- path: '/live',
22
- },
23
- {
24
- label: '设备',
25
- path: '/device',
26
- },
27
- ];
28
-
29
- function ROOT() {
30
- const navigate = useNavigate();
31
- const [currentPath, setCurrentPath] = useState('/');
32
- const setCurrentPaths = (path: string) => {
33
- setCurrentPath(path);
34
- console.log(path);
35
- // 跳转
36
- // router.navigate(path);
37
- navigate(path);
38
- };
39
- return (
40
- <div>
41
- <nav className='nav '>
42
- <NavigationMenu>
43
- <NavigationMenuList>
44
- <NavigationMenuItem>
45
-
46
- {navItems.map((item) => (
47
- <NavigationMenuLink asChild key={item.path} >
48
- <div className={`${navigationMenuTriggerStyle()} cursor-pointer py-6`} onClick={() => setCurrentPaths(item.path)}>{item.label}</div>
49
- </NavigationMenuLink>
50
- ))}
51
- </NavigationMenuItem>
52
- </NavigationMenuList>
53
- </NavigationMenu>
54
- </nav>
55
- <div className='content'><Outlet /></div>
56
- </div>
57
- );
58
- }
1
+ import { Outlet } from 'react-router-dom';
2
+ import { useState } from 'react';
3
+ import {
4
+ NavigationMenu,
5
+
6
+
7
+ NavigationMenuItem,
8
+ NavigationMenuLink,
9
+ NavigationMenuList,
10
+ navigationMenuTriggerStyle
11
+
12
+ } from "@/components/ui/navigation-menu";
13
+ import { useNavigate } from 'react-router-dom';
14
+ const navItems = [
15
+ {
16
+ label: '首页',
17
+ path: '/',
18
+ },
19
+ {
20
+ label: '直播',
21
+ path: '/live',
22
+ },
23
+ {
24
+ label: '设备',
25
+ path: '/device',
26
+ },
27
+ ];
28
+
29
+ function ROOT() {
30
+ const navigate = useNavigate();
31
+ const [currentPath, setCurrentPath] = useState('/');
32
+ const setCurrentPaths = (path: string) => {
33
+ setCurrentPath(path);
34
+ console.log(path);
35
+ // 跳转
36
+ // router.navigate(path);
37
+ navigate(path);
38
+ };
39
+ return (
40
+ <div>
41
+ <nav className='nav '>
42
+ <NavigationMenu>
43
+ <NavigationMenuList>
44
+ <NavigationMenuItem>
45
+
46
+ {navItems.map((item) => (
47
+ <NavigationMenuLink asChild key={item.path} >
48
+ <div className={`${navigationMenuTriggerStyle()} cursor-pointer py-6`} onClick={() => setCurrentPaths(item.path)}>{item.label}</div>
49
+ </NavigationMenuLink>
50
+ ))}
51
+ </NavigationMenuItem>
52
+ </NavigationMenuList>
53
+ </NavigationMenu>
54
+ </nav>
55
+ <div className='content'><Outlet /></div>
56
+ </div>
57
+ );
58
+ }
59
59
  export default ROOT;
@@ -1,33 +1,33 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
- "target": "ES2022",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "module": "ESNext",
8
- "types": ["vite/client"],
9
- "skipLibCheck": true,
10
-
11
- /* Bundler mode */
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "verbatimModuleSyntax": true,
15
- "moduleDetection": "force",
16
- "noEmit": true,
17
- "jsx": "react-jsx",
18
-
19
- /* Linting */
20
- "strict": true,
21
- "noUnusedLocals": true,
22
- "noUnusedParameters": true,
23
- "erasableSyntaxOnly": false,
24
- "noFallthroughCasesInSwitch": true,
25
- "noUncheckedSideEffectImports": true,
26
- "ignoreDeprecations": "6.0",
27
- "baseUrl": ".",
28
- "paths": {
29
- "@/*": ["./src/*"]
30
- }
31
- },
32
- "include": ["src"]
33
- }
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
+ "target": "ES2022",
5
+ "useDefineForClassFields": true,
6
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+ "module": "ESNext",
8
+ "types": ["vite/client"],
9
+ "skipLibCheck": true,
10
+
11
+ /* Bundler mode */
12
+ "moduleResolution": "bundler",
13
+ "allowImportingTsExtensions": true,
14
+ "verbatimModuleSyntax": true,
15
+ "moduleDetection": "force",
16
+ "noEmit": true,
17
+ "jsx": "react-jsx",
18
+
19
+ /* Linting */
20
+ "strict": true,
21
+ "noUnusedLocals": true,
22
+ "noUnusedParameters": true,
23
+ "erasableSyntaxOnly": false,
24
+ "noFallthroughCasesInSwitch": true,
25
+ "noUncheckedSideEffectImports": true,
26
+ "ignoreDeprecations": "6.0",
27
+ "baseUrl": ".",
28
+ "paths": {
29
+ "@/*": ["./src/*"]
30
+ }
31
+ },
32
+ "include": ["src"]
33
+ }
@@ -1,13 +1,13 @@
1
- {
2
- "files": [],
3
- "references": [
4
- { "path": "./tsconfig.app.json" },
5
- { "path": "./tsconfig.node.json" }
6
- ],
7
- "compilerOptions": {
8
- "baseUrl": ".",
9
- "paths": {
10
- "@/*": ["./src/*"]
11
- }
12
- }
13
- }
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ],
7
+ "compilerOptions": {
8
+ "baseUrl": ".",
9
+ "paths": {
10
+ "@/*": ["./src/*"]
11
+ }
12
+ }
13
+ }
@@ -1,32 +1,32 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
- "target": "ES2023",
5
- "lib": ["ES2023"],
6
- "module": "ESNext",
7
- "types": [],
8
- "skipLibCheck": true,
9
-
10
- /* Bundler mode */
11
- "moduleResolution": "bundler",
12
- "allowImportingTsExtensions": true,
13
- "verbatimModuleSyntax": true,
14
- "moduleDetection": "force",
15
- "noEmit": true,
16
-
17
- "jsx": "react-jsx", // 支持 React 17+ 的 JSX 转换,
18
- /* Linting */
19
- "strict": true,
20
- "noUnusedLocals": true,
21
- "noUnusedParameters": true,
22
- "erasableSyntaxOnly": false,
23
- "noFallthroughCasesInSwitch": true,
24
- "noUncheckedSideEffectImports": true,
25
- "ignoreDeprecations": "6.0",
26
- "baseUrl": ".",
27
- "paths": {
28
- "@/*": ["./src/*"]
29
- }
30
- },
31
- "include": ["vite.config.ts"]
32
- }
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "ES2023",
5
+ "lib": ["ES2023"],
6
+ "module": "ESNext",
7
+ "types": [],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "verbatimModuleSyntax": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+
17
+ "jsx": "react-jsx", // 支持 React 17+ 的 JSX 转换,
18
+ /* Linting */
19
+ "strict": true,
20
+ "noUnusedLocals": true,
21
+ "noUnusedParameters": true,
22
+ "erasableSyntaxOnly": false,
23
+ "noFallthroughCasesInSwitch": true,
24
+ "noUncheckedSideEffectImports": true,
25
+ "ignoreDeprecations": "6.0",
26
+ "baseUrl": ".",
27
+ "paths": {
28
+ "@/*": ["./src/*"]
29
+ }
30
+ },
31
+ "include": ["vite.config.ts"]
32
+ }