@undp/create-app 0.2.21 → 0.3.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 +8 -8
- package/bin/generateFiles/generateGitIgnore.js +0 -1
- package/bin/generateFiles/generatePackageJson.js +62 -61
- package/bin/generateFiles/generatePageForNext.js +3 -3
- package/bin/generateFiles/generateViteConfig.js +12 -4
- package/bin/templates/next/auth/README.md +6 -6
- package/bin/templates/next/auth/app/about/page.tsx +1 -1
- package/bin/templates/next/auth/app/login/page.tsx +1 -1
- package/bin/templates/next/auth/app/page.tsx +2 -2
- package/bin/templates/next/auth/app/user/page.tsx +1 -1
- package/bin/templates/next/auth/biome.json +3 -0
- package/bin/templates/next/basic/README.md +6 -6
- package/bin/templates/next/basic/app/about/page.tsx +1 -1
- package/bin/templates/next/basic/app/page.tsx +2 -2
- package/bin/templates/next/basic/biome.json +3 -0
- package/bin/templates/vite/basic/README.md +6 -6
- package/bin/templates/vite/basic/biome.json +3 -0
- package/bin/templates/vite/basic/src/App.tsx +3 -3
- package/bin/templates/vite/basic/tsconfig.json +1 -1
- package/bin/templates/vite/basic/vite.config.ts +1 -7
- package/bin/templates/vite/query/README.md +6 -6
- package/bin/templates/vite/query/biome.json +3 -0
- package/bin/templates/vite/query/src/App.tsx +4 -4
- package/bin/templates/vite/query/tsconfig.json +1 -1
- package/bin/templates/vite/query/vite.config.ts +1 -7
- package/bin/templates/vite/query+router/README.md +6 -6
- package/bin/templates/vite/query+router/biome.json +3 -0
- package/bin/templates/vite/query+router/src/App.tsx +2 -2
- package/bin/templates/vite/query+router/src/routes/queryDemo.tsx +2 -2
- package/bin/templates/vite/query+router/tsconfig.json +1 -1
- package/bin/templates/vite/query+router/vite.config.ts +1 -7
- package/bin/templates/vite/router/README.md +6 -6
- package/bin/templates/vite/router/biome.json +3 -0
- package/bin/templates/vite/router/src/App.tsx +2 -2
- package/bin/templates/vite/router/src/routes/about.tsx +1 -1
- package/bin/templates/vite/router/tsconfig.json +1 -1
- package/bin/templates/vite/router/vite.config.ts +1 -7
- package/bin/templates/viteWithLanguage/basic/README.md +18 -6
- package/bin/templates/viteWithLanguage/basic/biome.json +3 -0
- package/bin/templates/viteWithLanguage/basic/src/App.tsx +3 -3
- package/bin/templates/viteWithLanguage/basic/tsconfig.json +1 -1
- package/bin/templates/viteWithLanguage/basic/vite.config.ts +1 -7
- package/bin/templates/viteWithLanguage/query/README.md +18 -6
- package/bin/templates/viteWithLanguage/query/biome.json +3 -0
- package/bin/templates/viteWithLanguage/query/src/App.tsx +4 -4
- package/bin/templates/viteWithLanguage/query/tsconfig.json +1 -1
- package/bin/templates/viteWithLanguage/query/vite.config.ts +1 -7
- package/bin/templates/viteWithLanguage/query+router/README.md +20 -6
- package/bin/templates/viteWithLanguage/query+router/biome.json +3 -0
- package/bin/templates/viteWithLanguage/query+router/src/App.tsx +2 -2
- package/bin/templates/viteWithLanguage/query+router/src/components/Header.tsx +1 -1
- package/bin/templates/viteWithLanguage/query+router/src/routes/queryDemo.tsx +2 -2
- package/bin/templates/viteWithLanguage/query+router/tsconfig.json +1 -1
- package/bin/templates/viteWithLanguage/query+router/vite.config.ts +1 -7
- package/bin/templates/viteWithLanguage/router/README.md +20 -6
- package/bin/templates/viteWithLanguage/router/biome.json +3 -0
- package/bin/templates/viteWithLanguage/router/src/App.tsx +2 -2
- package/bin/templates/viteWithLanguage/router/src/components/Header.tsx +1 -1
- package/bin/templates/viteWithLanguage/router/src/routes/about.tsx +1 -1
- package/bin/templates/viteWithLanguage/router/tsconfig.json +1 -1
- package/bin/templates/viteWithLanguage/router/vite.config.ts +1 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🏗️ UNDP Create App CLI 
|
|
2
2
|
|
|
3
|
-
**`@undp/create-app`** is UNDP’s official **project scaffolding tool** for quickly bootstrapping frontend applications using **React**, and **TypeScript** — complete with sensible defaults for
|
|
3
|
+
**`@undp/create-app`** is UNDP’s official **project scaffolding tool** for quickly bootstrapping frontend applications using **React**, and **TypeScript** — complete with sensible defaults for Biome.
|
|
4
4
|
|
|
5
5
|
[NPM Package](https://www.npmjs.com/package/@undp/create-app)
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
- 🎨 Preconfigured for **UNDP’s Design System**
|
|
17
17
|
- ⚡️ Optional integration with **Tanstack query** for data fetching
|
|
18
18
|
- 📊 Optional integration with **@undp/data-viz** for interactive data visualization
|
|
19
|
-
-
|
|
19
|
+
- 🔣 Optional integration with **i18next** for internationalization
|
|
20
20
|
- ✨ **Biome** preconfigured for consistent code style
|
|
21
21
|
|
|
22
22
|
---
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
|
|
26
26
|
All setups include **Tailwind CSS** for styling and **Zustand** for state management.
|
|
27
27
|
|
|
28
|
-
| Framework | Variants | Description |
|
|
29
|
-
|
|
30
|
-
| **Vite** | Basic | Minimal React + TypeScript setup |
|
|
31
|
-
| **Vite** | + Router | Adds TanStack Router for routing |
|
|
32
|
-
| **Next.js** | Basic | SSR and file-based routing |
|
|
33
|
-
| **Next.js** | + Auth | Includes authentication via Better Auth |
|
|
28
|
+
| Framework | Variants | Description | Internationalization Available |
|
|
29
|
+
|------------|-----------|-------------|-------------|
|
|
30
|
+
| **Vite** | Basic | Minimal React + TypeScript setup | ✅ |
|
|
31
|
+
| **Vite** | + Router | Adds TanStack Router for routing | ✅ |
|
|
32
|
+
| **Next.js** | Basic | SSR and file-based routing | ❌ |
|
|
33
|
+
| **Next.js** | + Auth | Includes authentication via Better Auth | ❌ |
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -14,34 +14,34 @@ export function generatePackageJson(config) {
|
|
|
14
14
|
const designSystemVer = `^${getLatestVersion('@undp/design-system-react')}`
|
|
15
15
|
const zustandVer = `^${getLatestVersion('zustand')}`
|
|
16
16
|
const dependenciesTemp = config.libraries.includes('peer') && config.libraries.includes('@undp/data-viz') ? {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
'@undp/design-system-react': designSystemVer,
|
|
18
|
+
'@dnd-kit/core': '^6.3.1',
|
|
19
|
+
'@dnd-kit/modifiers': '^9.0.0',
|
|
20
|
+
'ajv': '^8.17.1',
|
|
21
|
+
'dom-to-svg': '^0.12.2',
|
|
22
|
+
'file-saver': '^2.0.5',
|
|
23
|
+
'handlebars': '^4.7.8',
|
|
24
|
+
'maplibre-gl': '^5.12.0',
|
|
25
|
+
'marked': '^16.4.1',
|
|
26
|
+
'math-expression-evaluator': '^2.0.7',
|
|
27
|
+
'pmtiles': '^4.3.0',
|
|
28
|
+
'react': '^19.2.3',
|
|
29
|
+
'react-dom': '^19.2.3',
|
|
30
|
+
'react-globe.gl': '^2.37.0',
|
|
31
|
+
'three': '^0.180.0',
|
|
32
|
+
'zustand': zustandVer
|
|
33
33
|
} : {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
'@undp/design-system-react': designSystemVer,
|
|
35
|
+
'react': '^19.2.3',
|
|
36
|
+
'react-dom': '^19.2.3',
|
|
37
|
+
'zustand': zustandVer
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
const dependencies = config.language && !config.framework.includes('next') ? {
|
|
41
41
|
...dependenciesTemp,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
'i18next': '^26.0.8',
|
|
43
|
+
'i18next-browser-languagedetector': '^8.2.1',
|
|
44
|
+
'react-i18next': '^17.0.6',
|
|
45
45
|
} : {...dependenciesTemp}
|
|
46
46
|
|
|
47
47
|
switch (config.framework) {
|
|
@@ -73,43 +73,40 @@ export function generatePackageJson(config) {
|
|
|
73
73
|
Object.entries(dependencies).sort(([a], [b]) => a.localeCompare(b))
|
|
74
74
|
);
|
|
75
75
|
const devDependencies = config.framework.includes('vite') ? {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
"vite": "^8.0.13",
|
|
96
|
-
"vite-plugin-static-copy": "^4.1.0"
|
|
76
|
+
'@biomejs/biome': '^2.4.12',
|
|
77
|
+
'@tailwindcss/postcss': '^4.1.17',
|
|
78
|
+
'@tailwindcss/vite': '^4.3.0',
|
|
79
|
+
'@types/node': '^24.10.0',
|
|
80
|
+
'@types/react': '^19.2.7',
|
|
81
|
+
'@types/react-dom': '^19.2.3',
|
|
82
|
+
'@vitejs/plugin-react': '^6.0.2',
|
|
83
|
+
'autoprefixer': '^10.4.21',
|
|
84
|
+
'postcss': '^8.5.6',
|
|
85
|
+
'postcss-nested': '^7.0.2',
|
|
86
|
+
'rimraf': '^6.1.0',
|
|
87
|
+
'rollup-plugin-visualizer': '^6.0.5',
|
|
88
|
+
'tailwind-animate': '^0.2.10',
|
|
89
|
+
'tailwind-merge': '^3.4.0',
|
|
90
|
+
'tailwindcss': '^4.1.17',
|
|
91
|
+
'tailwindcss-animate': '^1.0.7',
|
|
92
|
+
'typescript': '^5.9.3',
|
|
93
|
+
'vite': '^8.0.13',
|
|
94
|
+
'vite-plugin-static-copy': '^4.1.0'
|
|
97
95
|
} : {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
"typescript-eslint": "^8.46.3"
|
|
96
|
+
'@biomejs/biome': '^2.4.12',
|
|
97
|
+
'@tailwindcss/postcss': '^4.1.17',
|
|
98
|
+
'@types/node': '^24.10.0',
|
|
99
|
+
'@types/react': '^19.2.7',
|
|
100
|
+
'@types/react-dom': '^19.2.3',
|
|
101
|
+
'postcss': '^8.5.6',
|
|
102
|
+
'postcss-nested': '^7.0.2',
|
|
103
|
+
'rimraf': '^6.1.0',
|
|
104
|
+
'rollup-plugin-visualizer': '^6.0.5',
|
|
105
|
+
'tailwind-animate': '^0.2.10',
|
|
106
|
+
'tailwind-merge': '^3.3.1',
|
|
107
|
+
'tailwindcss': '^4.1.17',
|
|
108
|
+
'tailwindcss-animate': '^1.0.7',
|
|
109
|
+
'typescript': '^5.9.3',
|
|
113
110
|
};
|
|
114
111
|
const sortedDevDependencies = Object.fromEntries(
|
|
115
112
|
Object.entries(devDependencies).sort(([a], [b]) => a.localeCompare(b))
|
|
@@ -131,14 +128,18 @@ export function generatePackageJson(config) {
|
|
|
131
128
|
build: 'next build',
|
|
132
129
|
start: 'next start',
|
|
133
130
|
clean: 'rimraf node_modules && rimraf .next && rimraf package-lock.json',
|
|
134
|
-
|
|
131
|
+
check: 'biome check .',
|
|
132
|
+
'check:fix': 'biome check --write .',
|
|
133
|
+
'check:unsafe': 'biome check --write --unsafe .',
|
|
135
134
|
} : {
|
|
136
135
|
dev: 'vite',
|
|
137
136
|
build: 'tsc && vite build',
|
|
138
137
|
preview: 'vite preview',
|
|
139
138
|
clean: 'rimraf node_modules && rimraf dist && rimraf package-lock.json',
|
|
140
139
|
'install:build': 'npm install && tsc && vite build',
|
|
141
|
-
|
|
140
|
+
check: 'biome check .',
|
|
141
|
+
'check:fix': 'biome check --write .',
|
|
142
|
+
'check:unsafe': 'biome check --write --unsafe .',
|
|
142
143
|
},
|
|
143
144
|
dependencies: sortedDependencies,
|
|
144
145
|
devDependencies: sortedDevDependencies
|
|
@@ -27,12 +27,12 @@ export default function Home() {
|
|
|
27
27
|
|
|
28
28
|
const { data, isLoading, isError } = useTodoData();
|
|
29
29
|
|
|
30
|
-
if (isLoading) return <Spinner size='lg' className='my-20
|
|
30
|
+
if (isLoading) return <Spinner size='lg' className='mx-auto my-20' />;
|
|
31
31
|
|
|
32
32
|
if (isError) return <>Error</>;` : ''}
|
|
33
33
|
return (
|
|
34
34
|
<>
|
|
35
|
-
<div className='
|
|
35
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
36
36
|
<Image
|
|
37
37
|
className='dark:invert'
|
|
38
38
|
src='/imgs/next.svg'
|
|
@@ -73,7 +73,7 @@ export default function Home() {
|
|
|
73
73
|
To get started, edit the App.tsx file.{' '}
|
|
74
74
|
<span className='font-bold'>Count: {count}</span>
|
|
75
75
|
</P>
|
|
76
|
-
<div className='flex
|
|
76
|
+
<div className='mb-8 flex justify-center gap-4'>
|
|
77
77
|
<Button
|
|
78
78
|
variant='tertiary'
|
|
79
79
|
onClick={() => {
|
|
@@ -95,12 +95,16 @@ export default defineConfig({
|
|
|
95
95
|
// 1. Append media first
|
|
96
96
|
mediaRules
|
|
97
97
|
.sort((a, b) => a.pxValue - b.pxValue)
|
|
98
|
-
.forEach(({ rule }) =>
|
|
98
|
+
.forEach(({ rule }) => {
|
|
99
|
+
root.append(rule);
|
|
100
|
+
});
|
|
99
101
|
|
|
100
102
|
// 2. Append container after
|
|
101
103
|
containerRules
|
|
102
104
|
.sort((a, b) => a.pxValue - b.pxValue)
|
|
103
|
-
.forEach(({ rule }) =>
|
|
105
|
+
.forEach(({ rule }) => {
|
|
106
|
+
root.append(rule);
|
|
107
|
+
});
|
|
104
108
|
},
|
|
105
109
|
},` : `
|
|
106
110
|
{
|
|
@@ -144,12 +148,16 @@ export default defineConfig({
|
|
|
144
148
|
// 1. Append media first
|
|
145
149
|
mediaRules
|
|
146
150
|
.sort((a, b) => a.pxValue - b.pxValue)
|
|
147
|
-
.forEach(({ rule }) =>
|
|
151
|
+
.forEach(({ rule }) => {
|
|
152
|
+
root.append(rule);
|
|
153
|
+
});
|
|
148
154
|
|
|
149
155
|
// 2. Append container after
|
|
150
156
|
containerRules
|
|
151
157
|
.sort((a, b) => a.pxValue - b.pxValue)
|
|
152
|
-
.forEach(({ rule }) =>
|
|
158
|
+
.forEach(({ rule }) => {
|
|
159
|
+
root.append(rule);
|
|
160
|
+
});
|
|
153
161
|
},
|
|
154
162
|
},`
|
|
155
163
|
}
|
|
@@ -5,7 +5,7 @@ It includes:
|
|
|
5
5
|
* UNDP Design System
|
|
6
6
|
* Authentication with [Better Auth](https://www.better-auth.com/)
|
|
7
7
|
* TailwindCSS
|
|
8
|
-
* Code linting and formatting via
|
|
8
|
+
* Code linting and formatting via Biome
|
|
9
9
|
|
|
10
10
|
## 🧩 Installation
|
|
11
11
|
|
|
@@ -33,19 +33,19 @@ The page will reload if you make edits. You will also see any lint errors in the
|
|
|
33
33
|
- `npm run build`: Executes `next build` and builds the app for production and deployment.
|
|
34
34
|
- `npm run preview`: Executes `next start` and serves the static build output locally.
|
|
35
35
|
- `npm run clean`: Executes `rimraf node_modules && rimraf .next && rimraf package-lock.json` and remove node_modules folder, dist folder and package-lock.json.
|
|
36
|
-
- `npm run
|
|
36
|
+
- `npm run check`: Executes `biome check .` and lists all the linting and prettier errors.
|
|
37
|
+
- `npm run check:fix`: Executes `biome check --write .` and resolve all the linting and prettier errors.
|
|
37
38
|
|
|
38
39
|
## 🧰 Tooling Setup
|
|
39
40
|
|
|
40
|
-
This project uses
|
|
41
|
+
This project uses Biome integrated to automatically format and lint your code.
|
|
41
42
|
|
|
42
43
|
If you’re using Visual Studio Code, install:
|
|
43
|
-
* [
|
|
44
|
-
* [Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
|
44
|
+
* [Biome extension](https://marketplace.visualstudio.com/items?itemName=biomejs.biome)
|
|
45
45
|
|
|
46
46
|
Your editor should now show linting errors and automatically fix issues where possible.
|
|
47
47
|
|
|
48
|
-
More info: [
|
|
48
|
+
More info: [Biome Docs](https://biomejs.dev/guides/getting-started/)
|
|
49
49
|
|
|
50
50
|
## 🎨 Styling
|
|
51
51
|
|
|
@@ -6,7 +6,7 @@ import Image from 'next/image';
|
|
|
6
6
|
export default function About() {
|
|
7
7
|
return (
|
|
8
8
|
<>
|
|
9
|
-
<div className='
|
|
9
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
10
10
|
<Image
|
|
11
11
|
className='dark:invert'
|
|
12
12
|
src='/imgs/next.svg'
|
|
@@ -16,7 +16,7 @@ export default function LoginPage() {
|
|
|
16
16
|
|
|
17
17
|
return (
|
|
18
18
|
<>
|
|
19
|
-
<div className='
|
|
19
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
20
20
|
<Image
|
|
21
21
|
className='dark:invert'
|
|
22
22
|
src='/imgs/next.svg'
|
|
@@ -11,7 +11,7 @@ export default function Home() {
|
|
|
11
11
|
const { increment, decrement } = useCounterActions();
|
|
12
12
|
return (
|
|
13
13
|
<>
|
|
14
|
-
<div className='
|
|
14
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
15
15
|
<Image
|
|
16
16
|
className='dark:invert'
|
|
17
17
|
src='/imgs/next.svg'
|
|
@@ -52,7 +52,7 @@ export default function Home() {
|
|
|
52
52
|
To get started, edit the App.tsx file.{' '}
|
|
53
53
|
<span className='font-bold'>Count: {count}</span>
|
|
54
54
|
</P>
|
|
55
|
-
<div className='flex gap-4
|
|
55
|
+
<div className='flex justify-center gap-4'>
|
|
56
56
|
<Button
|
|
57
57
|
variant='tertiary'
|
|
58
58
|
onClick={() => {
|
|
@@ -26,7 +26,7 @@ export default function UserPage() {
|
|
|
26
26
|
|
|
27
27
|
return (
|
|
28
28
|
<>
|
|
29
|
-
<div className='
|
|
29
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
30
30
|
<Image
|
|
31
31
|
className='dark:invert'
|
|
32
32
|
src='/imgs/next.svg'
|
|
@@ -4,7 +4,7 @@ It includes:
|
|
|
4
4
|
* Next 16.x with React compiler
|
|
5
5
|
* UNDP Design System
|
|
6
6
|
* TailwindCSS
|
|
7
|
-
* Code linting and formatting via
|
|
7
|
+
* Code linting and formatting via Biome
|
|
8
8
|
|
|
9
9
|
## 🧩 Installation
|
|
10
10
|
|
|
@@ -32,19 +32,19 @@ The page will reload if you make edits. You will also see any lint errors in the
|
|
|
32
32
|
- `npm run build`: Executes `next build` and builds the app for production and deployment.
|
|
33
33
|
- `npm run preview`: Executes `next start` and serves the static build output locally.
|
|
34
34
|
- `npm run clean`: Executes `rimraf node_modules && rimraf .next && rimraf package-lock.json` and remove node_modules folder, dist folder and package-lock.json.
|
|
35
|
-
- `npm run
|
|
35
|
+
- `npm run check`: Executes `biome check .` and lists all the linting and prettier errors.
|
|
36
|
+
- `npm run check:fix`: Executes `biome check --write .` and resolve all the linting and prettier errors.
|
|
36
37
|
|
|
37
38
|
## 🧰 Tooling Setup
|
|
38
39
|
|
|
39
|
-
This project uses
|
|
40
|
+
This project uses Biome integrated to automatically format and lint your code.
|
|
40
41
|
|
|
41
42
|
If you’re using Visual Studio Code, install:
|
|
42
|
-
* [
|
|
43
|
-
* [Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
|
43
|
+
* [Biome extension](https://marketplace.visualstudio.com/items?itemName=biomejs.biome)
|
|
44
44
|
|
|
45
45
|
Your editor should now show linting errors and automatically fix issues where possible.
|
|
46
46
|
|
|
47
|
-
More info: [
|
|
47
|
+
More info: [Biome Docs](https://biomejs.dev/guides/getting-started/)
|
|
48
48
|
|
|
49
49
|
## 🎨 Styling
|
|
50
50
|
|
|
@@ -6,7 +6,7 @@ import Image from 'next/image';
|
|
|
6
6
|
export default function About() {
|
|
7
7
|
return (
|
|
8
8
|
<>
|
|
9
|
-
<div className='
|
|
9
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
10
10
|
<Image
|
|
11
11
|
className='dark:invert'
|
|
12
12
|
src='/imgs/next.svg'
|
|
@@ -11,7 +11,7 @@ export default function Home() {
|
|
|
11
11
|
const { increment, decrement } = useCounterActions();
|
|
12
12
|
return (
|
|
13
13
|
<>
|
|
14
|
-
<div className='
|
|
14
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
15
15
|
<Image
|
|
16
16
|
className='dark:invert'
|
|
17
17
|
src='/imgs/next.svg'
|
|
@@ -52,7 +52,7 @@ export default function Home() {
|
|
|
52
52
|
To get started, edit the App.tsx file.{' '}
|
|
53
53
|
<span className='font-bold'>Count: {count}</span>
|
|
54
54
|
</P>
|
|
55
|
-
<div className='flex gap-4
|
|
55
|
+
<div className='flex justify-center gap-4'>
|
|
56
56
|
<Button
|
|
57
57
|
variant='tertiary'
|
|
58
58
|
onClick={() => {
|
|
@@ -4,7 +4,7 @@ It includes:
|
|
|
4
4
|
* React 19.x with React compiler
|
|
5
5
|
* UNDP Design System
|
|
6
6
|
* TailwindCSS
|
|
7
|
-
* Code linting and formatting via
|
|
7
|
+
* Code linting and formatting via Biome
|
|
8
8
|
|
|
9
9
|
## 🧩 Installation
|
|
10
10
|
|
|
@@ -32,19 +32,19 @@ The page will reload if you make edits. You will also see any lint errors in the
|
|
|
32
32
|
- `npm run build`: Executes `tsc && vite build` and builds the app for production and deployment.
|
|
33
33
|
- `npm run preview`: Executes `vite preview` and serves the static build output (from vite build) locally.
|
|
34
34
|
- `npm run clean`: Executes `rimraf node_modules && rimraf dist && rimraf package-lock.json` and remove node_modules folder, dist folder and package-lock.json.
|
|
35
|
-
- `npm run
|
|
35
|
+
- `npm run check`: Executes `biome check .` and lists all the linting and prettier errors.
|
|
36
|
+
- `npm run check:fix`: Executes `biome check --write .` and resolve all the linting and prettier errors.
|
|
36
37
|
|
|
37
38
|
## 🧰 Tooling Setup
|
|
38
39
|
|
|
39
|
-
This project uses
|
|
40
|
+
This project uses Biome integrated to automatically format and lint your code.
|
|
40
41
|
|
|
41
42
|
If you’re using Visual Studio Code, install:
|
|
42
|
-
* [
|
|
43
|
-
* [Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
|
43
|
+
* [Biome extension](https://marketplace.visualstudio.com/items?itemName=biomejs.biome)
|
|
44
44
|
|
|
45
45
|
Your editor should now show linting errors and automatically fix issues where possible.
|
|
46
46
|
|
|
47
|
-
More info: [
|
|
47
|
+
More info: [Biome Docs](https://biomejs.dev/guides/getting-started/)
|
|
48
48
|
|
|
49
49
|
## 🎨 Styling
|
|
50
50
|
|
|
@@ -10,8 +10,8 @@ function App() {
|
|
|
10
10
|
const count = useCounter();
|
|
11
11
|
const { increment, decrement } = useCounterActions();
|
|
12
12
|
return (
|
|
13
|
-
<div className=' min-h-screen flex
|
|
14
|
-
<div className='
|
|
13
|
+
<div className='flex min-h-screen flex-col justify-center'>
|
|
14
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
15
15
|
<img
|
|
16
16
|
src='./imgs/Vitejs-logo.svg'
|
|
17
17
|
alt='vite logo'
|
|
@@ -44,7 +44,7 @@ function App() {
|
|
|
44
44
|
To get started, edit the App.tsx file.{' '}
|
|
45
45
|
<span className='font-bold'>Count: {count}</span>
|
|
46
46
|
</P>
|
|
47
|
-
<div className='flex gap-4
|
|
47
|
+
<div className='flex justify-center gap-4'>
|
|
48
48
|
<Button
|
|
49
49
|
variant='tertiary'
|
|
50
50
|
onClick={() => {
|
|
@@ -2,7 +2,6 @@ import path from 'path';
|
|
|
2
2
|
|
|
3
3
|
import { defineConfig } from 'vite';
|
|
4
4
|
import react from '@vitejs/plugin-react';
|
|
5
|
-
import eslint from '@nabla/vite-plugin-eslint';
|
|
6
5
|
import { visualizer } from 'rollup-plugin-visualizer';
|
|
7
6
|
import postcssNested from 'postcss-nested';
|
|
8
7
|
import tailwindcss from '@tailwindcss/postcss';
|
|
@@ -10,12 +9,7 @@ import { viteStaticCopy } from 'vite-plugin-static-copy';
|
|
|
10
9
|
|
|
11
10
|
export default defineConfig({
|
|
12
11
|
plugins: [
|
|
13
|
-
react(
|
|
14
|
-
babel: {
|
|
15
|
-
plugins: ['babel-plugin-react-compiler'],
|
|
16
|
-
},
|
|
17
|
-
}),
|
|
18
|
-
eslint(),
|
|
12
|
+
react(),
|
|
19
13
|
visualizer({ filename: 'stats.html', open: true }),
|
|
20
14
|
viteStaticCopy({
|
|
21
15
|
targets: [{ src: 'staticwebapp.config.json', dest: '' }],
|
|
@@ -5,7 +5,7 @@ It includes:
|
|
|
5
5
|
* UNDP Design System
|
|
6
6
|
* Data fetching with [TanStack Query](https://tanstack.com/query)
|
|
7
7
|
* TailwindCSS
|
|
8
|
-
* Code linting and formatting via
|
|
8
|
+
* Code linting and formatting via Biome
|
|
9
9
|
|
|
10
10
|
## 🧩 Installation
|
|
11
11
|
|
|
@@ -33,19 +33,19 @@ The page will reload if you make edits. You will also see any lint errors in the
|
|
|
33
33
|
- `npm run build`: Executes `tsc && vite build` and builds the app for production and deployment.
|
|
34
34
|
- `npm run preview`: Executes `vite preview` and serves the static build output (from vite build) locally.
|
|
35
35
|
- `npm run clean`: Executes `rimraf node_modules && rimraf dist && rimraf package-lock.json` and remove node_modules folder, dist folder and package-lock.json.
|
|
36
|
-
- `npm run
|
|
36
|
+
- `npm run check`: Executes `biome check .` and lists all the linting and prettier errors.
|
|
37
|
+
- `npm run check:fix`: Executes `biome check --write .` and resolve all the linting and prettier errors.
|
|
37
38
|
|
|
38
39
|
## 🧰 Tooling Setup
|
|
39
40
|
|
|
40
|
-
This project uses
|
|
41
|
+
This project uses Biome integrated to automatically format and lint your code.
|
|
41
42
|
|
|
42
43
|
If you’re using Visual Studio Code, install:
|
|
43
|
-
* [
|
|
44
|
-
* [Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
|
44
|
+
* [Biome extension](https://marketplace.visualstudio.com/items?itemName=biomejs.biome)
|
|
45
45
|
|
|
46
46
|
Your editor should now show linting errors and automatically fix issues where possible.
|
|
47
47
|
|
|
48
|
-
More info: [
|
|
48
|
+
More info: [Biome Docs](https://biomejs.dev/guides/getting-started/)
|
|
49
49
|
|
|
50
50
|
## 🎨 Styling
|
|
51
51
|
|
|
@@ -26,12 +26,12 @@ function App() {
|
|
|
26
26
|
const count = useCounter();
|
|
27
27
|
const { increment, decrement } = useCounterActions();
|
|
28
28
|
|
|
29
|
-
if (isLoading) return <Spinner size='lg' className='my-20
|
|
29
|
+
if (isLoading) return <Spinner size='lg' className='mx-auto my-20' />;
|
|
30
30
|
|
|
31
31
|
if (isError) return <>Error</>;
|
|
32
32
|
return (
|
|
33
|
-
<div className=' min-h-screen flex
|
|
34
|
-
<div className='
|
|
33
|
+
<div className='flex min-h-screen flex-col justify-center'>
|
|
34
|
+
<div className='mx-auto my-8 flex items-center justify-center gap-4'>
|
|
35
35
|
<img
|
|
36
36
|
src='./imgs/Vitejs-logo.svg'
|
|
37
37
|
alt='vite logo'
|
|
@@ -71,7 +71,7 @@ function App() {
|
|
|
71
71
|
To get started, edit the App.tsx file.{' '}
|
|
72
72
|
<span className='font-bold'>Count: {count}</span>
|
|
73
73
|
</P>
|
|
74
|
-
<div className='flex
|
|
74
|
+
<div className='mb-8 flex justify-center gap-4'>
|
|
75
75
|
<Button
|
|
76
76
|
variant='tertiary'
|
|
77
77
|
onClick={() => {
|