@undp/create-app 0.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 (41) hide show
  1. package/bin/generateFiles.js +65 -0
  2. package/bin/generateTemplates/copyTemplate.js +18 -0
  3. package/bin/generateTemplates/generateIndexHtml.js +15 -0
  4. package/bin/generateTemplates/generatePackageJson.js +105 -0
  5. package/bin/generateTemplates/generateReadme.js +143 -0
  6. package/bin/generateTemplates/generateStyleCss.js +6 -0
  7. package/bin/generateTemplates/index.js +6 -0
  8. package/bin/generateTemplates/templates/basic/App.txt +32 -0
  9. package/bin/generateTemplates/templates/basic/AppWithContainer.txt +32 -0
  10. package/bin/generateTemplates/templates/basic/main.txt +10 -0
  11. package/bin/generateTemplates/templates/configFiles/.prettierrc +10 -0
  12. package/bin/generateTemplates/templates/configFiles/eslint.config.js +97 -0
  13. package/bin/generateTemplates/templates/configFiles/icon.txt +1 -0
  14. package/bin/generateTemplates/templates/configFiles/staticwebapp.config.json +44 -0
  15. package/bin/generateTemplates/templates/configFiles/tailwind.config.js +7 -0
  16. package/bin/generateTemplates/templates/configFiles/tsconfig.json +29 -0
  17. package/bin/generateTemplates/templates/configFiles/tsconfig.node.json +9 -0
  18. package/bin/generateTemplates/templates/configFiles/vite-env.txt +1 -0
  19. package/bin/generateTemplates/templates/configFiles/vite.config.ts.txt +109 -0
  20. package/bin/generateTemplates/templates/configFiles/viteWithoutPostCss.config.ts.txt +58 -0
  21. package/bin/generateTemplates/templates/css/fonts.css +213 -0
  22. package/bin/generateTemplates/templates/query/App.txt +57 -0
  23. package/bin/generateTemplates/templates/query/AppWithContainer.txt +67 -0
  24. package/bin/generateTemplates/templates/query/main.txt +29 -0
  25. package/bin/generateTemplates/templates/router/App.txt +30 -0
  26. package/bin/generateTemplates/templates/router/components/Footer.txt +20 -0
  27. package/bin/generateTemplates/templates/router/components/Header.txt +29 -0
  28. package/bin/generateTemplates/templates/router/main.txt +60 -0
  29. package/bin/generateTemplates/templates/router/routes/About.txt +28 -0
  30. package/bin/generateTemplates/templates/router+query/App.txt +30 -0
  31. package/bin/generateTemplates/templates/router+query/components/Footer.txt +20 -0
  32. package/bin/generateTemplates/templates/router+query/components/Header.txt +29 -0
  33. package/bin/generateTemplates/templates/router+query/integration/tanstack-query.txt +27 -0
  34. package/bin/generateTemplates/templates/router+query/main.txt +69 -0
  35. package/bin/generateTemplates/templates/router+query/routes/queryDemo.txt +56 -0
  36. package/bin/index.js +57 -0
  37. package/bin/promptUser.js +96 -0
  38. package/bin/utils/createFolders.js +11 -0
  39. package/bin/utils/index.js +2 -0
  40. package/bin/utils/printSuccess.js +23 -0
  41. package/package.json +32 -0
@@ -0,0 +1,65 @@
1
+ import fs from 'fs';
2
+ import chalk from 'chalk';
3
+ import {
4
+ generatePackageJson,
5
+ generateReadme,
6
+ generateStyleCss,
7
+ copyTemplate,
8
+ } from './generateTemplates/index.js';
9
+
10
+ export function generateFiles(config) {
11
+ // Main files
12
+ let projectType = 'basic';
13
+
14
+ if (config.installRouter && config.installQuery) {
15
+ projectType = 'router+query';
16
+ } else if (config.installRouter) {
17
+ projectType = 'router';
18
+ } else if (config.installQuery) {
19
+ projectType = 'query';
20
+ } else {
21
+ projectType = 'basic';
22
+ }
23
+ copyTemplate('src/main.tsx', 'main.txt', ['templates', projectType]);
24
+ copyTemplate(
25
+ 'src/App.tsx',
26
+ config.addPostCSSScripts && !config.installRouter ? 'AppWithContainer.txt' : 'App.txt',
27
+ ['templates', projectType]
28
+ );
29
+ if (config.installRouter) {
30
+ copyTemplate('src/components/Header.tsx', 'Header.txt', ['templates', projectType, 'components']);
31
+ copyTemplate('src/components/Footer.tsx', 'Footer.txt', ['templates', projectType, 'components']);
32
+ if (config.installQuery) {
33
+ copyTemplate('src/integration/tanstack-query.tsx', 'tanstack-query.txt', ['templates', projectType, 'integration']);
34
+ copyTemplate('src/routes/queryDemo.tsx', 'queryDemo.txt', ['templates', projectType, 'routes']);
35
+ } else {
36
+ copyTemplate('src/routes/About.tsx', 'About.txt', ['templates', projectType, 'routes']);
37
+ }
38
+ }
39
+ fs.writeFileSync('src/styles/style.css', generateStyleCss(config.installDataViz));
40
+ copyTemplate('src/styles/fonts.css', 'fonts.css', ['templates', 'css']);
41
+ copyTemplate('src/assets/undp-logo-blue.svg', 'icon.txt', ['templates', 'configFiles']);
42
+ copyTemplate('public/undp-logo-blue.svg', 'icon.txt', ['templates', 'configFiles']);
43
+ console.log(chalk.green(' āœ“ Created core files and base styles.'));
44
+
45
+ // Config files
46
+ console.log(chalk.bold.yellow('\nāš™ļø Creating configuration and tooling files...'));
47
+ copyTemplate('eslint.config.js', 'eslint.config.js', ['templates', 'configFiles']);
48
+ copyTemplate('.prettierrc', '.prettierrc', ['templates', 'configFiles']);
49
+ copyTemplate('vite.config.ts', config.addPostCSSScripts ? 'vite.config.ts.txt' : 'viteWithoutPostCss.config.ts.txt', ['templates', 'configFiles']);
50
+ fs.writeFileSync('src/vite-env.d.ts', `/// <reference types="vite/client" />`);
51
+ copyTemplate('tsconfig.json', 'tsconfig.json', ['templates', 'configFiles']);
52
+ copyTemplate('tsconfig.node.json', 'tsconfig.node.json', ['templates', 'configFiles']);
53
+ copyTemplate('tailwind.config.js', 'tailwind.config.js', ['templates', 'configFiles']);
54
+ if (config.addStaticWebAppConfig) {
55
+ copyTemplate('staticwebapp.config.json', 'staticwebapp.config.json', ['templates', 'configFiles']);
56
+ }
57
+ copyTemplate('.gitignore', '.gitignore', ['templates', 'configFiles']);
58
+ fs.writeFileSync('README.md', generateReadme(config));
59
+ console.log(chalk.green(' āœ“ Created ESLint, Prettier, Vite, TypeScript, Tailwind, and other configs.'));
60
+
61
+ // Package.json
62
+ console.log(chalk.bold.yellow('\nšŸ“œ Creating package.json and scripts...'));
63
+ fs.writeFileSync('package.json', JSON.stringify(generatePackageJson(config), null, 2));
64
+ console.log(chalk.green(' āœ“ Created package.json.'));
65
+ }
@@ -0,0 +1,18 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ function getTemplatePath(filename, folders) {
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ return path.join(
9
+ __dirname,
10
+ ...folders,
11
+ filename
12
+ );
13
+ }
14
+
15
+ export function copyTemplate(destination, filename, folders) {
16
+ const content = fs.readFileSync(getTemplatePath(filename, folders), 'utf-8');
17
+ fs.writeFileSync(destination, content);
18
+ }
@@ -0,0 +1,15 @@
1
+ export function generateIndexHtml(projectName){
2
+ return `<!doctype html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <link rel="icon" type="image/svg+xml" href="/undp-logo-blue.svg" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>${projectName}</title>
9
+ </head>
10
+ <body>
11
+ <div id="root"></div>
12
+ <script type="module" src="/src/main.tsx"></script>
13
+ </body>
14
+ </html>`
15
+ }
@@ -0,0 +1,105 @@
1
+ import { execSync } from 'child_process';
2
+ import chalk from 'chalk';
3
+
4
+ function getLatestVersion(pkg) {
5
+ console.log(chalk.gray(` Fetching latest version for ${pkg}`));
6
+ try {
7
+ return execSync(`npm show ${pkg} version`).toString().trim();
8
+ } catch {
9
+ return 'latest';
10
+ }
11
+ }
12
+
13
+ export function generatePackageJson(config) {
14
+ const DEPENDENCIES = ['@undp/design-system-react', 'react', 'react-dom']
15
+ if(config.installLucide) DEPENDENCIES.push('lucide-react');
16
+ if(config.installDataViz) DEPENDENCIES.push('@undp/data-viz');
17
+ if(config.installQuery) DEPENDENCIES.push('@tanstack/react-query');
18
+ if(config.installRouter) DEPENDENCIES.push('@tanstack/react-router');
19
+ const dependencies = {};
20
+ DEPENDENCIES.forEach((d) => {
21
+ const version = getLatestVersion(d)
22
+ dependencies[d] = version === 'latest' ? 'latest' : `^${version}`;
23
+ })
24
+ const PEER_DEPENDENCIES = config.installDataVizPeerDeps ? [
25
+ '@dnd-kit/core',
26
+ '@dnd-kit/modifiers',
27
+ 'ajv',
28
+ 'dom-to-svg',
29
+ 'file-saver',
30
+ 'handlebars',
31
+ 'maplibre-gl',
32
+ 'marked',
33
+ 'math-expression-evaluator',
34
+ 'pmtiles',
35
+ 'react-globe.gl',
36
+ 'three',
37
+ ] : [];
38
+ PEER_DEPENDENCIES.forEach((d) => {
39
+ const version = getLatestVersion(d)
40
+ dependencies[d] = version === 'latest' ? 'latest' : `^${version}`;
41
+ })
42
+ const DEV_DEPENDENCIES = [
43
+ '@eslint/config-array',
44
+ '@eslint/js',
45
+ '@nabla/vite-plugin-eslint',
46
+ '@tailwindcss/postcss',
47
+ '@tailwindcss/vite',
48
+ '@types/node',
49
+ '@types/react',
50
+ '@types/react-dom',
51
+ '@vitejs/plugin-react',
52
+ 'autoprefixer',
53
+ 'babel-plugin-react-compiler',
54
+ 'eslint',
55
+ 'eslint-config-love',
56
+ 'eslint-config-prettier',
57
+ 'eslint-plugin-import',
58
+ 'eslint-plugin-jsx-a11y',
59
+ 'eslint-plugin-n',
60
+ 'eslint-plugin-prettier',
61
+ 'eslint-plugin-promise',
62
+ 'eslint-plugin-react',
63
+ 'eslint-plugin-react-hooks',
64
+ 'postcss',
65
+ 'postcss-nested',
66
+ 'prettier',
67
+ 'rimraf',
68
+ 'rollup-plugin-visualizer',
69
+ 'tailwind-animate',
70
+ 'tailwind-merge',
71
+ 'tailwindcss',
72
+ 'tailwindcss-animate',
73
+ 'typescript',
74
+ 'typescript-eslint',
75
+ 'vite',
76
+ 'vite-plugin-static-copy',
77
+ ]
78
+ const devDependencies = {}
79
+ DEV_DEPENDENCIES.forEach((d) => {
80
+ const version = getLatestVersion(d)
81
+ devDependencies[d] = version === 'latest' ? 'latest' : `^${version}`;
82
+ })
83
+ const packageJson = {
84
+ name: config.projectName,
85
+ private: true,
86
+ version: '0.0.0',
87
+ type: 'module',
88
+ keywords: [],
89
+ author: '',
90
+ sideEffects: [
91
+ '*.css'
92
+ ],
93
+ scripts: {
94
+ dev: 'vite',
95
+ build: 'tsc && vite build',
96
+ preview: 'vite preview',
97
+ clean: 'rimraf node_modules && rimraf dist && rimraf package-lock.json',
98
+ 'install:build': 'npm install && tsc && vite build',
99
+ lint: 'npx eslint --fix && npx prettier . --write'
100
+ },
101
+ dependencies: dependencies,
102
+ devDependencies: devDependencies
103
+ }
104
+ return packageJson
105
+ }
@@ -0,0 +1,143 @@
1
+ export function generateReadme(config){
2
+ return `# ${config.projectName}
3
+
4
+ React + TypeScript + Vite project with Tailwind CSS ${config.installDataViz ? ', UNDP Design System and data viz library' : 'and UNDP Design System'}.
5
+
6
+ This is a template to initiate project with tooling for linting and prettier and uses React Compiler.
7
+
8
+ ## Installed Libraries
9
+
10
+ - React 19.2
11
+ - @undp/design-system-react${config.installLucide ? '\n- lucide-react' : ''}${config.installDataViz ? '\n- @undp/data-viz' : ''}${config.installQuery ? '\n- @tanstack/react-query' : ''}${config.installRouter ? '\n- @tanstack/react-router' : ''}
12
+
13
+ ## Installation
14
+
15
+ This project uses \`npm\`. For installation you will need to install \`node\` and \`npm\`, if you don't already have it. \`node\` and \`npm\` can be installed from [here](https://nodejs.org/en/download/).
16
+
17
+ To install the project, simply clone the the repo and them run \`npm install\` in the project folder. You can use terminal on Mac and Command Prompt on Windows.
18
+
19
+ This project is bootstrapped with [\`Vite\`](https://vitejs.dev/) and was created using \`npm create vite@latest\` command.
20
+
21
+ Run the terminal or command prompt and then run the following
22
+
23
+ \`\`\`
24
+ git clone https://github.com/UNDP-Data/${config.projectName}.git
25
+ cd ${config.projectName}
26
+ npm install
27
+ \`\`\`
28
+
29
+ ## Local Development
30
+
31
+ To start the project locally, you can run \`npm run dev\` in the project folder in terminal or command prompt.
32
+
33
+ This is run the app in development mode. Open [http://localhost:5173/](http://localhost:5173/) to view it in the browser.
34
+
35
+ The page will reload if you make edits. You will also see any lint errors in the console.
36
+
37
+ ## Available Scripts
38
+
39
+ - \`npm run dev\`: Executes \`vite\` and start the local server for local deployment.
40
+ - \`npm run build\`: Executes \`tsc && vite build\` and builds the app for production and deployment.
41
+ - \`npm run clean\`: Executes \`rimraf node_modules && rimraf dist && rimraf package-lock.json\` and remove node_modules folder, dist folder and package-lock.json.
42
+ - \`npm run lint\`: Executes \`npx eslint --fix && npx prettier . --write\` and resolve all the linting and prettier errors.
43
+
44
+ ## Tooling Setup
45
+
46
+ This project uses ESLint integrated with prettier, which verifies and formats your code so you don't have to do it manually. You should have your editor set up to display lint errors and automatically fix those which it is possible to fix. See [http://eslint.org/docs/user-guide/integrations](http://eslint.org/docs/user-guide/integrations).
47
+
48
+ This project is build in Visual Studio Code, therefore the project is already set up to work with. Install it from [here](https://code.visualstudio.com/) and then install this [eslint plugin](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and you should be good to go.
49
+
50
+ ## Styling
51
+
52
+ This project uses [Tailwind CSS](https://tailwindcss.com/) for styling.
53
+
54
+ ${
55
+ config.installRouter ? `## Routing
56
+
57
+ This project uses [TanStack Router](https://tanstack.com/router). The initial setup is a code based router. Which means that the routes are defined in code (in the \`./src/main.tsx\` file).
58
+
59
+ ### Adding A Route
60
+
61
+ To add a new route to your application just add another \`createRoute\` call to the \`./src/main.tsx\` file. The example below adds a new \`/about\`route to the root route.
62
+
63
+ \`\`\`tsx
64
+ const aboutRoute = createRoute({
65
+ getParentRoute: () => rootRoute,
66
+ path: "/about",
67
+ component: () => <h1>About</h1>,
68
+ });
69
+ \`\`\`
70
+
71
+ You will also need to add the route to the \`routeTree\` in the \`./src/main.tsx\` file.
72
+
73
+ \`\`\`tsx
74
+ const routeTree = rootRoute.addChildren([indexRoute, aboutRoute]);
75
+ \`\`\`
76
+
77
+ With this set up you should be able to navigate to \`/about\` and see the about page.
78
+
79
+ Of course you don't need to implement the About page in the \`main.tsx\` file. You can create that component in another file and import it into the \`main.tsx\` file, then use it in the \`component\` property of the \`createRoute\` call, like so:
80
+
81
+ \`\`\`tsx
82
+ import About from "./components/About.tsx";
83
+
84
+ const aboutRoute = createRoute({
85
+ getParentRoute: () => rootRoute,
86
+ path: "/about",
87
+ component: About,
88
+ });
89
+ \`\`\`
90
+
91
+ That is how we have the \`App\` component set up with the home page.
92
+
93
+ For more information on the options you have when you are creating code based routes check out the [Code Based Routing](https://tanstack.com/router/latest/docs/framework/react/guide/code-based-routing) documentation.
94
+
95
+ Now that you have two routes you can use a \`Link\` component to navigate between them.
96
+
97
+ ### Adding Links
98
+
99
+ To use SPA (Single Page Application) navigation you will need to import the \`Link\` component from \`@tanstack/react-router\`.
100
+
101
+ \`\`\`tsx
102
+ import { Link } from "@tanstack/react-router";
103
+ \`\`\`
104
+
105
+ Then anywhere in your JSX you can use it like so:
106
+
107
+ \`\`\`tsx
108
+ <Link to="/about">About</Link>
109
+ \`\`\`
110
+
111
+ This will create a link that will navigate to the \`/about\` route.
112
+
113
+ More information on the \`Link\` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent).
114
+ ` :''
115
+ }
116
+ ${
117
+ config.installQuery ? `## Query
118
+
119
+ This project uses [TanStack Query](https://tanstack.com/query).
120
+ ` :''
121
+ }
122
+ ## Steps to Embed
123
+
124
+ Add the following div in the page
125
+
126
+ \`\`\`
127
+ <div id="root"></div>
128
+ \`\`\`
129
+
130
+ Apart from the mentioned \`div\` above the following \`script\` and \`link\` needs to be added to the \`head\` or in the embed code
131
+
132
+ \`\`\`
133
+ <link rel="dns-prefetch" href="{{Link to the Visualization}}">
134
+ <script defer="defer" type="module" src="{{Link to the Visualization}}/index.js"></script>
135
+ <link rel="modulepreload" crossorigin href="{{Link to the Visualization}}/react-{{hash}}.js">
136
+ <link rel="modulepreload" crossorigin href="{{Link to the Visualization}}/undp-{{hash}}.js">
137
+ <link rel="stylesheet" href="{{Link to the Visualization}}/style.css"></link>
138
+ \`\`\`
139
+
140
+ # Contact us
141
+ Contact us at [data@undp.org](mailto:data@undp.org) if you have any feedback or questions.
142
+ `;
143
+ }
@@ -0,0 +1,6 @@
1
+ export function generateStyleCss(installDataViz){
2
+ return `@import '@undp/design-system-react/style.css';
3
+ ${installDataViz ? `@import '@undp/data-viz/style.css';` : ''}
4
+ @import 'tailwindcss';
5
+ @config '../../tailwind.config.js';`;
6
+ }
@@ -0,0 +1,6 @@
1
+
2
+ export { copyTemplate } from './copyTemplate.js';
3
+ export { generateIndexHtml } from './generateIndexHtml.js';
4
+ export { generatePackageJson } from './generatePackageJson.js';
5
+ export { generateReadme } from './generateReadme.js';
6
+ export { generateStyleCss } from './generateStyleCss.js';
@@ -0,0 +1,32 @@
1
+ import { H3 } from '@undp/design-system-react';
2
+
3
+ import '@/styles/fonts.css';
4
+ import '@/styles/style.css';
5
+ import undpLogo from './assets/undp-logo-blue.svg';
6
+
7
+ function App() {
8
+ return (
9
+ <div>
10
+ <div className='m-5'>
11
+ <div>
12
+ <img
13
+ src={undpLogo}
14
+ className='logo react mb-8'
15
+ alt='React logo'
16
+ width='72px'
17
+ style={{ marginLeft: 'auto', marginRight: 'auto' }}
18
+ />
19
+ </div>
20
+ <H3 className='text-center'>
21
+ This is template for building visualization and frontend project
22
+ maintained by UNDP&apos;s DAI Hub.
23
+ <br />
24
+ <br />
25
+ Contact us at data@undp.org if you have any feedback or questions.
26
+ </H3>
27
+ </div>
28
+ </div>
29
+ );
30
+ }
31
+
32
+ export default App;
@@ -0,0 +1,32 @@
1
+ import { H3 } from '@undp/design-system-react';
2
+
3
+ import '@/styles/fonts.css';
4
+ import '@/styles/style.css';
5
+ import undpLogo from './assets/undp-logo-blue.svg';
6
+
7
+ function App() {
8
+ return (
9
+ <div className='undp-container'>
10
+ <div className='m-5'>
11
+ <div>
12
+ <img
13
+ src={undpLogo}
14
+ className='logo react mb-8'
15
+ alt='React logo'
16
+ width='72px'
17
+ style={{ marginLeft: 'auto', marginRight: 'auto' }}
18
+ />
19
+ </div>
20
+ <H3 className='text-center'>
21
+ This is template for building visualization and frontend project
22
+ maintained by UNDP&apos;s DAI Hub.
23
+ <br />
24
+ <br />
25
+ Contact us at data@undp.org if you have any feedback or questions.
26
+ </H3>
27
+ </div>
28
+ </div>
29
+ );
30
+ }
31
+
32
+ export default App;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+
4
+ import App from './App';
5
+
6
+ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>,
10
+ );
@@ -0,0 +1,10 @@
1
+ {
2
+ "semi": true,
3
+ "singleQuote": true,
4
+ "trailingComma": "all",
5
+ "arrowParens": "avoid",
6
+ "tabWidth": 2,
7
+ "jsxSingleQuote": true,
8
+ "endOfLine": "auto",
9
+ "bracketSpacing": true
10
+ }
@@ -0,0 +1,97 @@
1
+ import js from '@eslint/js';
2
+ import tseslint from 'typescript-eslint';
3
+ import pluginReact from 'eslint-plugin-react';
4
+ import reactHooks from 'eslint-plugin-react-hooks';
5
+ import importPlugin from 'eslint-plugin-import';
6
+ import jsxA11y from 'eslint-plugin-jsx-a11y';
7
+ import { defineConfig } from 'eslint/config';
8
+ import prettierConfig from 'eslint-config-prettier';
9
+ import prettierPlugin from 'eslint-plugin-prettier';
10
+
11
+ export default defineConfig([
12
+ {
13
+ ignores: [
14
+ 'node_modules/**',
15
+ 'build/**',
16
+ 'public/**',
17
+ 'dist/**',
18
+ 'storybook-static/**',
19
+ 'dist-ssr/**',
20
+ 'coverage/**',
21
+ '**/*.test.js',
22
+ '**/__snapshots__/**',
23
+ ],
24
+ },
25
+ js.configs.recommended,
26
+ reactHooks.configs.flat.recommended,
27
+ ...tseslint.configs.recommended,
28
+ {
29
+ files: ['**/*.{js,mjs,cjs,ts,jsx,tsx,ts}'],
30
+ plugins: {
31
+ react: pluginReact,
32
+ 'react-hooks': reactHooks,
33
+ import: importPlugin,
34
+ 'jsx-a11y': jsxA11y,
35
+ prettier: prettierPlugin,
36
+ },
37
+ settings: {
38
+ react: {
39
+ version: 'detect',
40
+ },
41
+ },
42
+ rules: {
43
+ // React rules
44
+ 'react/self-closing-comp': ['error', { component: true, html: true }],
45
+ 'react/react-in-jsx-scope': 'off',
46
+ 'react/jsx-uses-react': 'off',
47
+ 'react/jsx-uses-vars': 'warn',
48
+ 'react/jsx-no-undef': 'error',
49
+ 'react/jsx-curly-brace-presence': 'error',
50
+ 'react/prop-types': 'off',
51
+ 'react/require-default-props': 0,
52
+ 'react/jsx-filename-extension': 0,
53
+ 'react/no-array-index-key': 0,
54
+ 'react/jsx-props-no-spreading': 0,
55
+
56
+ // TypeScript rules
57
+ 'no-unused-vars': 'off',
58
+ '@typescript-eslint/no-unused-vars': [
59
+ 'error',
60
+ { argsIgnorePattern: '^_' },
61
+ ],
62
+ '@typescript-eslint/no-explicit-any': 'warn',
63
+
64
+ // Import rules
65
+ 'import/order': [
66
+ 'warn',
67
+ {
68
+ groups: [
69
+ 'builtin',
70
+ 'external',
71
+ 'internal',
72
+ 'parent',
73
+ 'sibling',
74
+ 'index',
75
+ ],
76
+ 'newlines-between': 'always',
77
+ },
78
+ ],
79
+ 'import/no-unresolved': 0,
80
+ 'import/no-extraneous-dependencies': ['warn', { devDependencies: true }],
81
+ 'import/extensions': 0,
82
+ 'import/prefer-default-export': 0,
83
+
84
+ // A11y rules
85
+ 'jsx-a11y/alt-text': 'warn',
86
+ 'jsx-a11y/anchor-is-valid': 'warn',
87
+
88
+ // General rules
89
+ 'prefer-const': 'error',
90
+ 'no-console': ['warn', { allow: ['warn', 'error'] }],
91
+ 'no-debugger': 'warn',
92
+ 'no-nested-ternary': 0,
93
+ 'prettier/prettier': 'error',
94
+ },
95
+ },
96
+ prettierConfig,
97
+ ]);
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 60.8"><style>.st0{fill:#0468b1}.st1{fill:#fff}</style><path class="st0" d="M0 30.9h14.5v14.5H0z"/><path class="st1" d="M3.7 33.2v5.7c0 3 1.5 4.1 3.5 4.1 2.1 0 3.6-1.2 3.6-4.2v-5.7H9.6v5.8c0 2.1-1 3.1-2.4 3.1-1.3 0-2.3-.9-2.3-3.1v-5.7H3.7z"/><path class="st0" d="M15.4 30.9h14.5v14.5H15.4z"/><path class="st1" d="M20.2 43v-4.1c0-1.6 0-2.8-.1-4 .5 1.1 1.1 2.2 1.8 3.2L25 43h1.3v-9.6h-1.1v4.1c0 1.5 0 2.7.2 4-.4-1-1-2-1.7-3.2l-3.1-4.9h-1.4v9.7l1-.1z"/><path class="st0" d="M15.4 46.3h14.5v14.5H15.4z"/><path class="st1" d="M25.1 49.4c-.6-.5-1.5-.8-2.8-.8-1 0-1.8.1-2.4.2v9.6h1.2v-3.9c.3.1.6.1 1 .1 1.2 0 2.3-.4 2.9-1.1.5-.5.8-1.2.8-2.1.2-.8-.1-1.5-.7-2"/><path class="st0" d="M22.3 53.6c-.4 0-.8 0-1.1-.1v-3.7c.2 0 .6-.1 1.2-.1 1.4 0 2.3.6 2.3 1.9 0 1.3-.9 2-2.4 2M0 46.3h14.5v14.5H0z"/><path class="st1" d="M10.2 49.8c-.8-.8-2.1-1.2-3.9-1.2-1 0-1.9.1-2.7.2v9.6c.6.1 1.4.1 2.3.1 1.9 0 3.4-.5 4.3-1.4.9-.9 1.4-2.2 1.4-3.7 0-1.7-.5-2.8-1.4-3.6"/><path class="st0" d="M6.2 57.4c-.5 0-1 0-1.3-.1v-7.6c.3-.1.8-.2 1.5-.2 2.7 0 3.9 1.4 3.9 3.7 0 2.7-1.5 4.3-4.1 4.2M0 0h30v30H0z"/><path class="st1" d="M25.7 15.6c-.4.6-1 1.1-1.3 1.8 0-.5.1-1.1-.1-1.5-.3-1-.6-1.9-.7-3.1v-.4c.2 1.1 1.3 1.9 1.2 3.1 0 .3-.1.6-.2.8v-.1c.2-.6.2-1.2.5-1.8.4-.8.8-1.6.6-2.6.8 1.2.6 2.7 0 3.8"/><path class="st1" d="M25.1 9.4c.7 1 .9 2.5.3 3.6-.2.5-.3 1-.4 1.5 0-.1 0-.2-.1-.3-.2-1.1-1.3-1.9-1.7-2.8-.2-.3-.2-.6-.3-1.1.4.8 1.5 1.2 1.9 2.2.2.2.1.5.2.8-.2-1-.1-1.9 0-2.8 0-.5-.1-1-.3-1.4.1-.1.2.1.4.3"/><path class="st1" d="M24.6 9.2c.2.8-.1 1.6.1 2.5-.5-.9-1.4-1.3-2.1-2-.4-.4-.6-1-.6-1.5.4.9 1.4 1.1 2 1.9.2.2.2.4.4.6-.3-.7-.5-1.5-.6-2.4l-.6-.9c.6.2 1.2 1 1.4 1.8"/><path class="st1" d="M22.5 7.3c.6.6.8 1.2 1 1.9l.1.2c-.8-.6-1.6-1.5-2.2-2.3l-.6-.7c.5.2 1.2.4 1.7.9m-11.1-.7c1.1-.6 2.4-.8 3.6-.9 3 0 5.9 1.8 7.2 4.5.8 1.6 1.1 3.8.6 5.6-.6 2.2-2.4 4.3-4.5 5.2-2.4 1.1-5.7.9-7.8-.6-2.9-1.9-4.1-5.4-3.2-8.8.5-2 2.1-4.1 4.1-5m-2.3 0c-.6.5-1 1.2-1.5 1.8-.4.4-.9.8-1.4 1.2.3-.6.3-1.2.7-1.6.5-.9 1.4-1.1 2.2-1.4"/><path class="st1" d="M5.8 8.4c.2-.4.6-.6 1.1-.7-.8.6-.7 1.5-1 2.4-.1.2-.2.6-.3.8.2-.3.4-.6.6-1 .6-.6 1.4-.9 1.7-1.7 0 1.1-.9 1.9-1.8 2.5-.4.3-.7.6-.9 1.1V11c.1-.9 0-2 .6-2.6"/><path class="st1" d="M4.3 11.5c0-1 .4-1.7.9-2.4-.6.9-.1 2.1-.2 3.1l-.1 1.1c0-.2 0-.2.1-.4.2-.9.9-1.5 1.5-2.1.2-.2.2-.3.3-.5-.1.4-.2.9-.4 1.3-.5 1-1.5 1.8-1.6 2.9.1-1-.7-1.9-.5-3"/><path class="st1" d="M3.8 12.9l.3-.9c-.2 1.2.6 2.2.9 3.2l.3 1.2c-.4-1.1.2-2.2.8-3.2.2-.2.2-.5.3-.8.1.5-.1 1.1-.2 1.6-.2.6-.4 1.4-.6 2-.2.4-.1.9 0 1.3-.4-.8-1.3-1.5-1.5-2.4-.3-.5-.5-1.3-.3-2"/><path class="st1" d="M3.7 15.3c.1 1.3 1.5 2 2.2 3.2.2.2.3.4.6.6 0-.2-.2-.2-.2-.4-.2-.5-.3-1-.2-1.5.1-.6.3-1.3.2-2 .6 1.2.4 2.8.7 4.1.1.3.2.6.4.8-1.2-.8-2.8-1.5-3.3-3.1-.4-.5-.4-1.1-.4-1.7"/><path class="st1" d="M4.5 18.3c.6 1.5 2.4 1.6 3.4 2.5.1.2.4.4.6.4-.2-.2-.6-.5-.7-.8-.6-.9-.4-2.2-.9-3.2.4.6.8 1.1 1.1 1.8.4 1 .6 2.1 1.5 2.8-1-.3-2.2-.2-3.1-.8-.9-.6-1.8-1.5-1.9-2.7"/><path class="st1" d="M6.2 21.2c1.1 1.2 2.8.8 4.2 1.1.2 0 .4.1.6.1-.2-.1-.4-.1-.6-.2-1.1-.4-1.3-1.5-1.9-2.4.8.5 1.4 1.2 2.1 1.9.5.4 1.1.6 1.8.8-.2.1-.4 0-.6.1-1.2.3-2.4.7-3.7.3-.7-.4-1.5-1-1.9-1.7"/><path class="st1" d="M20.6 23.9c-1.2.4-2.4 0-3.4-.7-.4-.2-.7-.6-1.2-.6h-.5c.9.4 1.8 1 2.5 1.8-.2.2-.3.3-.5.4-.7-.8-1.5-1.5-2.5-2-.2 0-.3.2-.5.2-.7.5-1.5 1.1-2 1.9l-.5-.5c.8-.8 1.6-1.4 2.5-1.8-.9-.3-1.5.5-2.2.9-.8.6-1.9.8-2.9.4-.6-.2-1.1-.5-1.4-1 .8.6 1.9.6 2.8.2 1.2-.5 2.4-1.1 3.8-.8.2 0 .4.2.6 0 1.1-.2 2.2-.1 3.2.4l1 .4c.9.3 1.9.2 2.8-.3-.6.6-1 1-1.6 1.1"/><path class="st1" d="M21.9 22.7c-1.4.5-2.7-.1-4-.3h-.2c.6-.2 1.2-.3 1.7-.8.7-.7 1.4-1.4 2.2-1.9-.6.8-.6 1.9-1.6 2.4-.2.2-.6.2-.8.3.4 0 .6-.2 1.1-.2 1.3-.2 2.8 0 3.7-1.1-.5.7-1.4 1.4-2.1 1.6"/><path class="st1" d="M22.6 21.3c-.6.2-1.4.2-2.1.5 1.1-1 1.1-2.5 1.8-3.6.2-.3.4-.6.7-1-.5.9-.2 2.1-.8 3-.2.4-.5.7-.8 1 .1 0 .2-.1.3-.2.9-.8 1.9-1.1 2.9-1.8.4-.3.7-.6.9-1.1-.1 1.5-1.6 2.8-2.9 3.2"/><path class="st1" d="M24.3 18.9c-.6.3-1.1.6-1.5 1.1.8-1.3.4-3.1.9-4.5l.2-.5c-.1.9.3 1.6.2 2.5 0 .6-.2 1-.5 1.5.4-.5.6-1.1 1.1-1.5.7-.6 1.4-1.4 1.5-2.3.3 1.5-.6 2.9-1.9 3.7"/><path class="st0" d="M18.3 18.8c.3-.2.6-.4.8-.6h-.2c-.2 0-.2-.2-.2-.2l-.5-.5v-.1c0 .1-.1.2-.2.2 0 .1 0 .2.1.2.2.1.4.2.4.3-.1.2-.4.3-.2.6.1 0-.1 0 0 .1m-2.8-6.5c.1.1.2 0 .2-.1.1 0 .2.1.2.2h.2c0-.3.5-.2.6-.6h-.1s-.1 0-.1-.1l.2-.2c-.4-.2-.7-.4-1.1-.5-.2 0-.3 0-.5-.1.1.2 0 .6.1.8l.2.1c.1-.2.2-.2.3-.3h.2v.3c0 .4-.3.4-.4.5m4.2 2.7c-.2.6-.4 1.1-.7 1.5-.2.2-.2.4-.4.5l.4.3v-.1s0-.1.1-.1c.2 0 .2.2.2.2 0 .2.1.2.1.4 1-1.1 1.5-2.4 1.6-3.8l.1-.1h-1.2c0 .2 0 .5-.1.7l.2.2v.2c-.2.2-.2.2-.3.1m-1-3.5c-.2-.2-.3-.5-.6-.7-.4.4-.8.8-1.1 1.2l.1.1c0-.1.1-.2.1-.2.1-.2.2 0 .4 0h.6c.2.1.2.2.3.3v.2c0 .3.2-.1.3 0 .1 0 .2 0 .2.1 0 .2.2.1.2.2s-.1.1-.1.1c0 .2-.2.2-.1.3.2 0 .2-.2.3-.3-.1-.2-.1-.4-.2-.6-.2 0-.2-.2-.3-.2-.3-.2 0-.3-.1-.5m-3.5 8.3c.3-.1.6-.1 1-.2-.1 0-.2 0-.2-.1-.2 0-.2-.2-.3-.4 0-.1 0-.2.1-.3-.1-.2-.3 0-.5-.1 0 0-.1-.1-.2-.1l.1.1v1.1m.3-3.1c.1 0 0 .2.1.2.2-.1.3.2.4 0 0-.2.2-.2.3-.2.2-.1.4-.2.4-.5-.2 0-.2.1-.2.2-.1.1-.2-.2-.2-.1v.1c-.2.2-.2-.1-.3 0v.1c-.1-.2-.2-.1-.3-.2h-.2c0 .1-.2 0-.2.1-.1 0-.1.2-.2.2-.2 0-.2.2-.3.1v.1h.2c.1-.2.3 0 .5-.1m1.1-1.5c0 .1 0 .2.1.2.2 0 .1.2.2.2s0-.1 0-.2c0-.2-.1-.2-.3-.2.1 0 .1 0 0 0 .1-.1.1-.1 0 0m-.1-5.6c-.4-.2-.8-.2-1.3-.2v1.2h.1c.6.1 1.3.3 1.8.7v.1c.2-.2.4-.5.6-.7l.2-.1h-.1c-.4-.5-.9-.8-1.3-1M9 14.1l.1.7c0 .2.2.6.2.8 0-.1 0-.2.2-.2 0-.1.1-.2 0-.2 0-.2.1-.4.2-.6.2 0 .2-.2.4-.3.1 0 .2.2.2.2-.2-.2-.2-.4-.1-.6H8.9l.1.2zm7.2 1.9c.1-.1.3-.1.3-.2-.1-.1-.1 0-.3.2-.1-.1-.1 0 0 0m2.5-2.1l.2.2c.2.1 0 .2.2.3s.2.2.2.4v-.1c.1-.2 0-.5.1-.6-.2-.1-.5-.1-.7-.2m-1.6 2.9c.2 0 .2.2.4.2.2-.1.4 0 .5-.1 0-.2.1-.2.2-.4.1.1.1.2.1.3.1-.2.2-.2.3-.4.2-.4.5-.8.6-1.2-.1 0-.2 0-.3.1-.1 0-.2.1-.4 0h-.1c0 .1-.1.2-.2.1-.1 0-.1-.1-.1-.2v.2c-.1.1-.1.2-.2.2-.1.1-.2.1-.3.2 0 .2-.2.2-.3.2h.2c.2 0 .2-.2.2-.2.1 0 .2-.1.2 0 .1.1.1.2.1.4-.1.1 0 .2-.1.4 0 .2-.2.2-.2.3-.1.1-.2.1-.2.1-.3-.2-.6-.2-1-.2 0 0-.1 0 0 .1.3-.2.4-.2.6-.1m-2.4 3.5c-1.6-.1-3-.6-4.1-1.8l-.8.8c1.2 1.1 2.7 1.8 4.3 1.9.2 0 .6 0 .8.1l-.1-.1-.1-.9zM13.1 16c.4.3.9.6 1.5.6v-.3c0-.1.2-.1.2-.1s.1-.1 0-.1-.1-.2-.1-.2.1 0 .1-.1c-.1-.1 0-.2 0-.2l.1-.1c-.2.1-.5 0-.7-.2l-.2-.2-.9.9m-.4-1.3c-.1 0-.1 0 0 0h-.2c0-.2-.2-.1-.3-.2l.3.6c.1.2.2.3.3.5.1-.2.2-.2.3-.4V15c0-.1 0-.2-.1-.2s0 .2 0 .2h-.1c-.1 0-.2-.1-.2-.2.1 0 0 0 0-.1m.8.1c0 .1-.1.2-.2.2.1-.1.2-.2.3-.2h-.1zm1.2 3.9c-1 0-1.8-.4-2.6-1 0 .1.2.2.1.2-.1.1-.2.1-.3.1-.2 0-.4.2-.6.2-.2.1-.2-.2-.4-.2 1.1 1 2.4 1.5 3.9 1.6l.1.1v-1.2l-.2.2z"/><path class="st0" d="M10.3 18.2c-.2-.1-.2-.2-.4-.4-.2 0-.2-.2-.3-.2v-.2.1c-.2.1-.2-.1-.3-.2-.2-.1-.1-.4-.3-.3-.1 0-.1-.1-.2-.1-.2 0-.2-.2-.2-.2v.1c-.2 0-.2-.2-.3-.2h-.1c-.1-.1-.2-.2-.2-.4-.2-.2-.1-.4 0-.6 0 0 .1-.1.1-.2s.2-.1.2-.1.1 0 .1.1c.1 0 .2 0 .2-.1.1-.1.2-.1.2-.1.1.1.1.2.2.2l-.1-.1c-.1-.4-.2-.8-.2-1.2V13.8H7.3c.1 1.3.4 2.4 1 3.5.2.6.7 1 1.1 1.5l.8-.8.1.2zm1.3-9.4c-.2.2-.5.4-.7.6.3.2.6.5.8.7v.1c.6-.6 1.5-1 2.3-1.2.2 0 .4-.1.6 0V7.9c-1.1 0-2 .4-3 .9m-1 4.3c0 .2 0 .4-.1.6.2-.1.3 0 .5 0-.1 0 0-.2-.1-.2 0-.1 0-.2.1-.3 0-.2.2-.2.2-.4s.2-.1.3-.2c.1 0 0-.1 0-.2.1-.1.2-.1.3-.2l.2-.2c.2 0 .2-.3.5-.3-.3-.2-.6-.6-.9-.8-.4.6-.8 1.3-1 2.2m.2 1.6c0-.1-.1-.1-.1-.2.1-.2 0-.4.2-.4-.2 0-.2.1-.4 0l.1.1c0 .2.1.5.1.8 0-.2 0-.3.1-.3m1.1 2.8z"/><path class="st0" d="M10.6 9.7l-.4.6c-.7 1-1.1 2.1-1.1 3.3h1.2v-.1c.1-1.1.5-2.2 1.3-3-.4-.3-.7-.5-1-.8zm3.3 7.5c.1-.1.2-.2.3-.2-.4.1-.6-.2-1-.3-.2-.1-.4-.2-.5-.4-.2.3-.5.6-.8.8.2 0 .2.2.3.2.6.5 1.4.7 2 .9l-.2-.1c-.2-.2-.3-.4-.4-.6.3-.1.3-.2.3-.3M11.2 14v.2c0 .2-.2 0-.2.1v.2c-.1.2.2.3.2.6.1.2 0 .3.2.5 0 .2 0 .6.2.8v.2c0 .2-.2.2-.2.2s.1 0 .1.1c.3-.4.6-.7 1.1-1.1l-.2-.2c-.2-.4-.5-.9-.6-1.4l-.1-.1c0 .2-.1.2-.1.4-.1 0-.2-.1-.2-.1s-.1-.1 0-.2h.1V14c0-.1-.1-.2 0-.2s.2.1.2.2c.1 0 .2 0 .2-.1s.1-.2 0-.2c.1-.2 0-.3 0-.5-.1-.1-.2 0-.3 0-.3.1.1.3 0 .6-.2.3-.3.1-.4.2m10.2 0c-.1 1.4-.6 2.5-1.3 3.6-.2.2-.2.4-.5.5.3.2.6.6.9.9 1.2-1.4 1.9-3 1.9-4.9V14h-1zM10.6 9.2c1.2-1.1 2.5-1.7 4.1-1.8V6.2c-1.6.1-3 .6-4.3 1.5-.2.2-.4.4-.7.6.4.2.7.5.9.9m4.1.2c-1 .1-1.9.5-2.7 1.1.3.2.6.6.8.8 0 0 0-.1.1-.1.4-.2.8-.5 1.2-.6.2 0 .4-.1.6-.1V9.4zm0 1.5c-.7.1-1.2.4-1.7.9h.1c.1.1.2.1.3.2 0 .1-.1.1-.1.2h.1c.1 0 .1 0 .1-.1.1-.1.1.1.2.1h.2c.1-.1.2 0 .2-.1.2-.2.1-.3.2-.4.1 0 0 .1 0 .2.2.1.2-.1.4 0v-1m.1 1.8c-.2.2-.3.2-.5.3-.1.1 0 .2-.2.2 0 .1-.2.2-.2.2-.1.2 0 .3-.1.5-.2.2-.2-.2-.3-.2H13.2c-.1.1-.2.2-.1.2 0 .1-.2 0-.2.2.2 0 .2 0 .4-.1h.2s.1 0 .1.1c.1 0 .1-.2.1-.2 0-.1.1-.1.2-.1s0 .1 0 .1c.2.1 0 .2-.1.3 0 .1 0 .2-.2.2v-.1c0 .1 0 .2.1.2.1-.1.1-.2.2-.2.1-.1 0-.2.1-.3.2 0 .4-.1.6.1v.2c0 .1-.1.2-.2.2v.2c-.1.2-.3.2-.5.2.2.2.6.2.9.2.2 0 .1-.2.2-.3.1-.2.3-.1.5-.2.1-.2.2-.2.2-.4-.2-.1-.2-.2-.2-.3-.1-.1-.1-.2-.2-.2v-.1c0-.1.1-.1.1-.2-.1-.1-.1-.2-.1-.2-.2 0-.2-.2-.3-.2 0-.1-.2-.1-.2-.2-.2.1-.2-.2-.4-.2v-.2c.1-.1.2 0 .2 0h-.1c-.1-.1-.2 0-.3 0 .6.2.5.2.6.3"/><path class="st0" d="M8.6 13.6v-.2c.1-1.3.5-2.4 1.2-3.4.2-.2.3-.5.6-.6l-.8-.8c-1.1 1.3-1.9 2.8-2 4.4 0 .2 0 .5-.1.7.3-.2.8-.2 1.1-.1m10.9 4.8c-.1.2-.4.4-.6.6-.2.2-.6.3-.8.7-.2.2-.2.3-.4.4-.1.2-.2.2-.4.3-.3.3-.6-.2-.8-.2l-.6.1c-.2 0-.4.1-.6 0v1.2h.1c1.9-.1 3.6-.8 5-2.1l-.9-.8v-.2zM15.2 7.3c.1-.1.1-.1.2 0v.2h.1c.9.1 1.8.3 2.5.8.2-.1.4-.2.5 0 .2-.1.2.2.4.2.1 0 .3.3.3.5 0 .1.2.2.2.2.2-.2.4-.5.6-.7l.2-.1c-1.2-1.1-2.7-1.8-4.2-2-.2 0-.6 0-.8-.1v1"/><path class="st0" d="M15.2 9c.2-.1.3 0 .5 0 .8.2 1.5.4 2.2.9-.1-.1-.2-.2-.2-.3 0-.2-.2-.2-.2-.3h.1c.2.2.2.2.3.4.1 0 .2 0 .2.1s0 .2.2.3c0 .2.3.4.3.6 0 .1.1 0 .1 0l.2.3v.2c.1 0 .2-.1.2-.1.2.1 0 .2 0 .3h.2c0 .1-.1.2-.1.2 0 .1.1.1.2.1s.1.1.1.2c.2.2-.1.4 0 .6.1.2 0 .2-.1.4 0 .2-.2.2-.2.4H19c-.1.1.1.2 0 .3h.4c-.1-.2 0-.4.1-.6s.1-.3.2-.4c0 0 .1-.1.1 0 0 .2 0 .3-.1.4.2.2.1.4.2.6h1.2v-.1c-.1-.7-.2-1.5-.5-2.1-.1 0-.2.1-.2 0 0 0-.1 0 0-.1-.2-.2-.2-.3-.4-.5-.2 0-.3-.2-.5-.2s-.1-.3-.3-.2c-.1 0-.2-.2-.2-.2 0-.2 0-.4-.2-.6-.2-.1-.2.2-.3.1-.1 0 0-.2-.1-.2 0-.1-.1-.1-.1-.2.2-.2-.2-.2-.2-.5 0-.2-.2-.2-.3-.4-.6-.2-1.2-.5-1.9-.6-.2 0-.3 0-.5-.1v.1c-.2.5-.2.8-.2 1.2"/><path class="st0" d="M19.5 9.4c.1 0 .1.2.2.2.3.2.4.5.6.6.2.3.5.6.5.9.3.8.6 1.5.6 2.5h1.2c-.1-.1 0-.2-.1-.4-.2-1.8-.9-3.3-2.1-4.6-.2.3-.5.6-.9.8z"/><path class="st1" d="M15.3 7.1c0-.1.2 0 .2 0l.6-.2c.2 0 .5 0 .6.2-.2.2-.3.2-.5.2-.3 0-.6.1-.9-.2m3.4.7c.1 0 .2.1.2.2s.1.2 0 .2c-.2.1-.2-.2-.4-.2v-.1c.1-.2.1 0 .2-.1"/></svg>
@@ -0,0 +1,44 @@
1
+ {
2
+ "globalHeaders": {
3
+ "Access-Control-Allow-Origin": "*",
4
+ "Access-Control-Allow-Methods": "GET, OPTIONS"
5
+ },
6
+ "routes": [
7
+ {
8
+ "route": "/react-*.js",
9
+ "headers": {
10
+ "Access-Control-Allow-Origin": "*",
11
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
12
+ "Cache-Control": "public, max-age=31536000, immutable"
13
+ }
14
+ },
15
+ {
16
+ "route": "/undp-*.js",
17
+ "headers": {
18
+ "Access-Control-Allow-Origin": "*",
19
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
20
+ "Cache-Control": "public, max-age=31536000, immutable"
21
+ }
22
+ },
23
+ {
24
+ "route": "/index.js",
25
+ "headers": {
26
+ "Access-Control-Allow-Origin": "*",
27
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
28
+ "Cache-Control": "no-cache"
29
+ }
30
+ },
31
+ {
32
+ "route": "/*",
33
+ "headers": {
34
+ "Access-Control-Allow-Origin": "*",
35
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
36
+ "Cache-Control": "no-cache"
37
+ }
38
+ }
39
+ ],
40
+ "navigationFallback": {
41
+ "rewrite": "/index.html",
42
+ "exclude": ["/assets/*", "/*.js", "/*.css", "/*.png", "/*.jpg", "/*.svg"]
43
+ }
44
+ }
@@ -0,0 +1,7 @@
1
+ import * as Preset from '@undp/design-system-react/tailwind.config';
2
+
3
+ /** @type {import('tailwindcss').Config} */
4
+
5
+ export default {
6
+ presets: [Preset],
7
+ };
@@ -0,0 +1,29 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "allowImportingTsExtensions": true,
5
+ "declaration": true,
6
+ "declarationMap": true,
7
+ "useDefineForClassFields": true,
8
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
9
+ "allowJs": false,
10
+ "skipLibCheck": true,
11
+ "esModuleInterop": false,
12
+ "allowSyntheticDefaultImports": true,
13
+ "strict": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "module": "ESNext",
16
+ "moduleResolution": "bundler",
17
+ "resolveJsonModule": true,
18
+ "isolatedModules": true,
19
+ "noEmit": true,
20
+ "jsx": "react-jsx",
21
+ "baseUrl": ".",
22
+ "paths": {
23
+ "@/*": ["./src/*"]
24
+ }
25
+ },
26
+ "files": [],
27
+ "include": ["eslint.config.js", "src", "tailwind.config.js"],
28
+ "references": [{ "path": "./tsconfig.node.json" }]
29
+ }