@undp/create-app 0.2.23 → 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.
Files changed (61) hide show
  1. package/bin/generateFiles/generateGitIgnore.js +0 -1
  2. package/bin/generateFiles/generatePackageJson.js +62 -61
  3. package/bin/generateFiles/generatePageForNext.js +3 -3
  4. package/bin/generateFiles/generateViteConfig.js +12 -4
  5. package/bin/templates/next/auth/README.md +2 -1
  6. package/bin/templates/next/auth/app/about/page.tsx +1 -1
  7. package/bin/templates/next/auth/app/login/page.tsx +1 -1
  8. package/bin/templates/next/auth/app/page.tsx +2 -2
  9. package/bin/templates/next/auth/app/user/page.tsx +1 -1
  10. package/bin/templates/next/auth/biome.json +3 -0
  11. package/bin/templates/next/basic/README.md +2 -1
  12. package/bin/templates/next/basic/app/about/page.tsx +1 -1
  13. package/bin/templates/next/basic/app/page.tsx +2 -2
  14. package/bin/templates/next/basic/biome.json +3 -0
  15. package/bin/templates/vite/basic/README.md +2 -1
  16. package/bin/templates/vite/basic/biome.json +3 -0
  17. package/bin/templates/vite/basic/src/App.tsx +3 -3
  18. package/bin/templates/vite/basic/tsconfig.json +1 -1
  19. package/bin/templates/vite/basic/vite.config.ts +1 -7
  20. package/bin/templates/vite/query/README.md +2 -1
  21. package/bin/templates/vite/query/biome.json +3 -0
  22. package/bin/templates/vite/query/src/App.tsx +4 -4
  23. package/bin/templates/vite/query/tsconfig.json +1 -1
  24. package/bin/templates/vite/query/vite.config.ts +1 -7
  25. package/bin/templates/vite/query+router/README.md +2 -1
  26. package/bin/templates/vite/query+router/biome.json +3 -0
  27. package/bin/templates/vite/query+router/src/App.tsx +2 -2
  28. package/bin/templates/vite/query+router/src/routes/queryDemo.tsx +2 -2
  29. package/bin/templates/vite/query+router/tsconfig.json +1 -1
  30. package/bin/templates/vite/query+router/vite.config.ts +1 -7
  31. package/bin/templates/vite/router/README.md +2 -1
  32. package/bin/templates/vite/router/biome.json +3 -0
  33. package/bin/templates/vite/router/src/App.tsx +2 -2
  34. package/bin/templates/vite/router/src/routes/about.tsx +1 -1
  35. package/bin/templates/vite/router/tsconfig.json +1 -1
  36. package/bin/templates/vite/router/vite.config.ts +1 -7
  37. package/bin/templates/viteWithLanguage/basic/README.md +2 -1
  38. package/bin/templates/viteWithLanguage/basic/biome.json +3 -0
  39. package/bin/templates/viteWithLanguage/basic/src/App.tsx +3 -3
  40. package/bin/templates/viteWithLanguage/basic/tsconfig.json +1 -1
  41. package/bin/templates/viteWithLanguage/basic/vite.config.ts +1 -7
  42. package/bin/templates/viteWithLanguage/query/README.md +2 -1
  43. package/bin/templates/viteWithLanguage/query/biome.json +3 -0
  44. package/bin/templates/viteWithLanguage/query/src/App.tsx +4 -4
  45. package/bin/templates/viteWithLanguage/query/tsconfig.json +1 -1
  46. package/bin/templates/viteWithLanguage/query/vite.config.ts +1 -7
  47. package/bin/templates/viteWithLanguage/query+router/README.md +2 -1
  48. package/bin/templates/viteWithLanguage/query+router/biome.json +3 -0
  49. package/bin/templates/viteWithLanguage/query+router/src/App.tsx +2 -2
  50. package/bin/templates/viteWithLanguage/query+router/src/components/Header.tsx +1 -1
  51. package/bin/templates/viteWithLanguage/query+router/src/routes/queryDemo.tsx +2 -2
  52. package/bin/templates/viteWithLanguage/query+router/tsconfig.json +1 -1
  53. package/bin/templates/viteWithLanguage/query+router/vite.config.ts +1 -7
  54. package/bin/templates/viteWithLanguage/router/README.md +2 -1
  55. package/bin/templates/viteWithLanguage/router/biome.json +3 -0
  56. package/bin/templates/viteWithLanguage/router/src/App.tsx +2 -2
  57. package/bin/templates/viteWithLanguage/router/src/components/Header.tsx +1 -1
  58. package/bin/templates/viteWithLanguage/router/src/routes/about.tsx +1 -1
  59. package/bin/templates/viteWithLanguage/router/tsconfig.json +1 -1
  60. package/bin/templates/viteWithLanguage/router/vite.config.ts +1 -7
  61. package/package.json +1 -1
@@ -13,7 +13,6 @@ build
13
13
  dist
14
14
  dist-ssr
15
15
  *.local
16
- .eslintcache
17
16
  stats.html
18
17
 
19
18
  # Editor directories and files
@@ -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
- "@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
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
- "@undp/design-system-react": designSystemVer,
35
- "react": "^19.2.3",
36
- "react-dom": "^19.2.3",
37
- "zustand": zustandVer
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
- "i18next": "^26.0.8",
43
- "i18next-browser-languagedetector": "^8.2.1",
44
- "react-i18next": "^17.0.6",
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
- "@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
- "babel-plugin-react-compiler": "^1.0.0",
85
- "postcss": "^8.5.6",
86
- "postcss-nested": "^7.0.2",
87
- "rimraf": "^6.1.0",
88
- "rollup-plugin-visualizer": "^6.0.5",
89
- "tailwind-animate": "^0.2.10",
90
- "tailwind-merge": "^3.4.0",
91
- "tailwindcss": "^4.1.17",
92
- "tailwindcss-animate": "^1.0.7",
93
- "typescript": "^5.9.3",
94
- "typescript-eslint": "^8.46.3",
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
- "@biomejs/biome": "^2.4.12",
99
- "@tailwindcss/postcss": "^4.1.17",
100
- "@types/node": "^24.10.0",
101
- "@types/react": "^19.2.7",
102
- "@types/react-dom": "^19.2.3",
103
- "postcss": "^8.5.6",
104
- "postcss-nested": "^7.0.2",
105
- "rimraf": "^6.1.0",
106
- "rollup-plugin-visualizer": "^6.0.5",
107
- "tailwind-animate": "^0.2.10",
108
- "tailwind-merge": "^3.3.1",
109
- "tailwindcss": "^4.1.17",
110
- "tailwindcss-animate": "^1.0.7",
111
- "typescript": "^5.9.3",
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
- lint: "biome check . --write"
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
- lint: "biome check . --write"
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 m-auto' />;
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='flex gap-4 items-center justify-center my-8 mx-auto'>
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 gap-4 justify-center mb-8'>
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 }) => root.append(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 }) => root.append(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 }) => root.append(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 }) => root.append(rule));
158
+ .forEach(({ rule }) => {
159
+ root.append(rule);
160
+ });
153
161
  },
154
162
  },`
155
163
  }
@@ -33,7 +33,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -6,7 +6,7 @@ import Image from 'next/image';
6
6
  export default function About() {
7
7
  return (
8
8
  <>
9
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
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='flex gap-4 items-center justify-center my-8 mx-auto'>
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='flex gap-4 items-center justify-center my-8 mx-auto'>
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 justify-center'>
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='flex gap-4 items-center justify-center my-8 mx-auto'>
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'
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -32,7 +32,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -6,7 +6,7 @@ import Image from 'next/image';
6
6
  export default function About() {
7
7
  return (
8
8
  <>
9
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
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='flex gap-4 items-center justify-center my-8 mx-auto'>
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 justify-center'>
55
+ <div className='flex justify-center gap-4'>
56
56
  <Button
57
57
  variant='tertiary'
58
58
  onClick={() => {
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -32,7 +32,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -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 flex-col justify-center'>
14
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
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 justify-center'>
47
+ <div className='flex justify-center gap-4'>
48
48
  <Button
49
49
  variant='tertiary'
50
50
  onClick={() => {
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -33,7 +33,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -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 m-auto' />;
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 flex-col justify-center'>
34
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
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 gap-4 justify-center mb-8'>
74
+ <div className='mb-8 flex justify-center gap-4'>
75
75
  <Button
76
76
  variant='tertiary'
77
77
  onClick={() => {
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -34,7 +34,8 @@ The page will reload if you make edits. You will also see any lint errors in the
34
34
  - `npm run build`: Executes `tsc && vite build` and builds the app for production and deployment.
35
35
  - `npm run preview`: Executes `vite preview` and serves the static build output (from vite build) locally.
36
36
  - `npm run clean`: Executes `rimraf node_modules && rimraf dist && rimraf package-lock.json` and remove node_modules folder, dist folder and package-lock.json.
37
- - `npm run lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
37
+ - `npm run check`: Executes `biome check .` and lists all the linting and prettier errors.
38
+ - `npm run check:fix`: Executes `biome check --write .` and resolve all the linting and prettier errors.
38
39
 
39
40
  ## 🧰 Tooling Setup
40
41
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -8,7 +8,7 @@ function App() {
8
8
  const { increment, decrement } = useCounterActions();
9
9
  return (
10
10
  <>
11
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
11
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
12
12
  <img
13
13
  src='./imgs/Vitejs-logo.svg'
14
14
  alt='vite logo'
@@ -48,7 +48,7 @@ function App() {
48
48
  To get started, edit the App.tsx file.{' '}
49
49
  <span className='font-bold'>Count: {count}</span>
50
50
  </P>
51
- <div className='flex gap-4 justify-center mb-8'>
51
+ <div className='mb-8 flex justify-center gap-4'>
52
52
  <Button
53
53
  variant='tertiary'
54
54
  onClick={() => {
@@ -19,12 +19,12 @@ function useTodoData() {
19
19
  export function TanStackQueryDemo() {
20
20
  const { data, isLoading, isError } = useTodoData();
21
21
 
22
- if (isLoading) return <Spinner size='lg' className='my-20 m-auto' />;
22
+ if (isLoading) return <Spinner size='lg' className='mx-auto my-20' />;
23
23
 
24
24
  if (isError) return <>Error</>;
25
25
  return (
26
26
  <>
27
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
27
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
28
28
  <img
29
29
  src='/imgs/Vitejs-logo.svg'
30
30
  alt='vite logo'
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -33,7 +33,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -8,7 +8,7 @@ export function App() {
8
8
  const { increment, decrement } = useCounterActions();
9
9
  return (
10
10
  <>
11
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
11
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
12
12
  <img
13
13
  src='./imgs/Vitejs-logo.svg'
14
14
  alt='vite logo'
@@ -48,7 +48,7 @@ export function App() {
48
48
  To get started, edit the App.tsx file.{' '}
49
49
  <span className='font-bold'>Count: {count}</span>
50
50
  </P>
51
- <div className='flex gap-4 justify-center mb-8'>
51
+ <div className='mb-8 flex justify-center gap-4'>
52
52
  <Button
53
53
  variant='tertiary'
54
54
  onClick={() => {
@@ -5,7 +5,7 @@ import { P } from '@undp/design-system-react/Typography';
5
5
  export function About() {
6
6
  return (
7
7
  <>
8
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
8
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
9
9
  <img
10
10
  src='/imgs/Vitejs-logo.svg'
11
11
  alt='vite logo'
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -32,7 +32,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -14,8 +14,8 @@ function App() {
14
14
  const { increment, decrement } = useCounterActions();
15
15
  const { i18n, t } = useTranslation();
16
16
  return (
17
- <div className=' min-h-screen flex flex-col justify-center'>
18
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
17
+ <div className='flex min-h-screen flex-col justify-center'>
18
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
19
19
  <img
20
20
  src='./imgs/Vitejs-logo.svg'
21
21
  alt='vite logo'
@@ -70,7 +70,7 @@ function App() {
70
70
  {t('started', { fileName: 'app.tsx' })}{' '}
71
71
  <span className='font-bold'>{t('count', { count: count })}</span>
72
72
  </P>
73
- <div className='flex gap-4 justify-center'>
73
+ <div className='flex justify-center gap-4'>
74
74
  <Button
75
75
  variant='tertiary'
76
76
  onClick={() => {
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -33,7 +33,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -30,12 +30,12 @@ function App() {
30
30
  const count = useCounter();
31
31
  const { increment, decrement } = useCounterActions();
32
32
 
33
- if (isLoading) return <Spinner size='lg' className='my-20 m-auto' />;
33
+ if (isLoading) return <Spinner size='lg' className='mx-auto my-20' />;
34
34
 
35
35
  if (isError) return <>Error</>;
36
36
  return (
37
- <div className=' min-h-screen flex flex-col justify-center'>
38
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
37
+ <div className='flex min-h-screen flex-col justify-center'>
38
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
39
39
  <img
40
40
  src='./imgs/Vitejs-logo.svg'
41
41
  alt='vite logo'
@@ -97,7 +97,7 @@ function App() {
97
97
  {t('started', { fileName: 'app.tsx' })}{' '}
98
98
  <span className='font-bold'>{t('count', { count: count })}</span>
99
99
  </P>
100
- <div className='flex gap-4 justify-center mb-8'>
100
+ <div className='mb-8 flex justify-center gap-4'>
101
101
  <Button
102
102
  variant='tertiary'
103
103
  onClick={() => {
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -34,7 +34,8 @@ The page will reload if you make edits. You will also see any lint errors in the
34
34
  - `npm run build`: Executes `tsc && vite build` and builds the app for production and deployment.
35
35
  - `npm run preview`: Executes `vite preview` and serves the static build output (from vite build) locally.
36
36
  - `npm run clean`: Executes `rimraf node_modules && rimraf dist && rimraf package-lock.json` and remove node_modules folder, dist folder and package-lock.json.
37
- - `npm run lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
37
+ - `npm run check`: Executes `biome check .` and lists all the linting and prettier errors.
38
+ - `npm run check:fix`: Executes `biome check --write .` and resolve all the linting and prettier errors.
38
39
 
39
40
  ## 🧰 Tooling Setup
40
41
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -10,7 +10,7 @@ function App() {
10
10
  const { increment, decrement } = useCounterActions();
11
11
  return (
12
12
  <>
13
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
13
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
14
14
  <img
15
15
  src='/imgs/Vitejs-logo.svg'
16
16
  alt='vite logo'
@@ -50,7 +50,7 @@ function App() {
50
50
  {t('started', { fileName: 'app.tsx' })}{' '}
51
51
  <span className='font-bold'>{t('count', { count: count })}</span>
52
52
  </P>
53
- <div className='flex gap-4 justify-center mb-8'>
53
+ <div className='mb-8 flex justify-center gap-4'>
54
54
  <Button
55
55
  variant='tertiary'
56
56
  onClick={() => {
@@ -39,7 +39,7 @@ export default function HeaderEl() {
39
39
  <HeaderActions>
40
40
  <DropdownMenu>
41
41
  <DropdownMenuTrigger asChild>
42
- <div className='cursor-pointer flex h-9 flex gap-2 rtl:[direction:rtl] items-center text-primary-blue-600 hover:text-primary-blue-400 dark:text-primary-white dark:hover:text-primary-white uppercase font-semibold text-sm justify-between whitespace-nowrap bg-transparent p-0 data-[placeholder]:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 [&[data-state=open]>.chevron-down]:rotate-180'>
42
+ <div className='flex h-9 cursor-pointer items-center justify-between gap-2 whitespace-nowrap bg-transparent p-0 font-semibold text-primary-blue-600 text-sm uppercase hover:text-primary-blue-400 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground dark:text-primary-white dark:hover:text-primary-white rtl:[direction:rtl] [&>span]:line-clamp-1 [&[data-state=open]>.chevron-down]:rotate-180'>
43
43
  <LanguageSwitcherIcon />
44
44
  {LANGUAGES.find(d => d.id === locale)?.label}
45
45
  <ChevronDown />
@@ -21,12 +21,12 @@ export function TanStackQueryDemo() {
21
21
  const { data, isLoading, isError } = useTodoData();
22
22
  const { t } = useTranslation();
23
23
 
24
- if (isLoading) return <Spinner size='lg' className='my-20 m-auto' />;
24
+ if (isLoading) return <Spinner size='lg' className='mx-auto my-20' />;
25
25
 
26
26
  if (isError) return <>Error</>;
27
27
  return (
28
28
  <>
29
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
29
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
30
30
  <img
31
31
  src='/imgs/Vitejs-logo.svg'
32
32
  alt='vite logo'
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
@@ -33,7 +33,8 @@ 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 lint`: Executes `biome check . --write` and resolve all the linting and prettier errors.
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
 
@@ -45,6 +45,9 @@
45
45
  "correctness": {
46
46
  "noUnusedVariables": "error",
47
47
  "noUndeclaredVariables": "error"
48
+ },
49
+ "nursery": {
50
+ "useSortedClasses": "error"
48
51
  }
49
52
  }
50
53
  },
@@ -9,7 +9,7 @@ export function App() {
9
9
  const { increment, decrement } = useCounterActions();
10
10
  return (
11
11
  <>
12
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
12
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
13
13
  <img
14
14
  src='/imgs/Vitejs-logo.svg'
15
15
  alt='vite logo'
@@ -49,7 +49,7 @@ export function App() {
49
49
  {t('started', { fileName: 'app.tsx' })}{' '}
50
50
  <span className='font-bold'>{t('count', { count: count })}</span>
51
51
  </P>
52
- <div className='flex gap-4 justify-center mb-8'>
52
+ <div className='mb-8 flex justify-center gap-4'>
53
53
  <Button
54
54
  variant='tertiary'
55
55
  onClick={() => {
@@ -39,7 +39,7 @@ export default function HeaderEl() {
39
39
  <HeaderActions>
40
40
  <DropdownMenu>
41
41
  <DropdownMenuTrigger asChild>
42
- <div className='cursor-pointer flex h-9 flex gap-2 rtl:[direction:rtl] items-center text-primary-blue-600 hover:text-primary-blue-400 dark:text-primary-white dark:hover:text-primary-white uppercase font-semibold text-sm justify-between whitespace-nowrap bg-transparent p-0 data-[placeholder]:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 [&[data-state=open]>.chevron-down]:rotate-180'>
42
+ <div className='flex h-9 cursor-pointer items-center justify-between gap-2 whitespace-nowrap bg-transparent p-0 font-semibold text-primary-blue-600 text-sm uppercase hover:text-primary-blue-400 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground dark:text-primary-white dark:hover:text-primary-white rtl:[direction:rtl] [&>span]:line-clamp-1 [&[data-state=open]>.chevron-down]:rotate-180'>
43
43
  <LanguageSwitcherIcon />
44
44
  {LANGUAGES.find(d => d.id === locale)?.label}
45
45
  <ChevronDown />
@@ -7,7 +7,7 @@ export function About() {
7
7
  const { t } = useTranslation();
8
8
  return (
9
9
  <>
10
- <div className='flex gap-4 items-center justify-center my-8 mx-auto'>
10
+ <div className='mx-auto my-8 flex items-center justify-center gap-4'>
11
11
  <img
12
12
  src='/imgs/Vitejs-logo.svg'
13
13
  alt='vite logo'
@@ -24,6 +24,6 @@
24
24
  }
25
25
  },
26
26
  "files": [],
27
- "include": ["eslint.config.mjs", "src", "tailwind.config.js"],
27
+ "include": ["src", "tailwind.config.js"],
28
28
  "references": [{ "path": "./tsconfig.node.json" }]
29
29
  }
@@ -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: '' }],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undp/create-app",
3
- "version": "0.2.23",
3
+ "version": "0.3.0",
4
4
  "description": "UNDP's project scaffolding tool",
5
5
  "bin": {
6
6
  "create-undp-app": "./bin/index.js"