@undp/create-app 0.2.14 → 0.2.16
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/bin/generateFiles/generatePackageJson.js +12 -30
- package/bin/generateFiles/generateViteConfig.js +2 -4
- package/bin/index.js +1 -1
- package/bin/promptUser.js +21 -2
- package/bin/templates/next/auth/biome.json +67 -0
- package/bin/templates/next/basic/biome.json +67 -0
- package/bin/templates/vite/basic/biome.json +67 -0
- package/bin/templates/vite/query/biome.json +67 -0
- package/bin/templates/vite/query/src/App.tsx +1 -1
- package/bin/templates/vite/query+router/biome.json +67 -0
- package/bin/templates/vite/query+router/src/App.tsx +1 -1
- package/bin/templates/vite/query+router/src/components/Header.tsx +1 -1
- package/bin/templates/vite/query+router/src/routes/queryDemo.tsx +5 -5
- package/bin/templates/vite/router/biome.json +67 -0
- package/bin/templates/vite/router/src/App.tsx +1 -1
- package/bin/templates/vite/router/src/routes/about.tsx +5 -5
- package/bin/templates/viteWithLanguage/basic/README.md +75 -0
- package/bin/templates/viteWithLanguage/basic/biome.json +67 -0
- package/bin/templates/viteWithLanguage/basic/index.html +13 -0
- package/bin/templates/viteWithLanguage/basic/public/favicon.ico +0 -0
- package/bin/templates/viteWithLanguage/basic/public/imgs/Tailwind_CSS_Logo.svg +1 -0
- package/bin/templates/viteWithLanguage/basic/public/imgs/Vitejs-logo.svg +15 -0
- package/bin/templates/viteWithLanguage/basic/public/imgs/Zustand-logo.svg +266 -0
- package/bin/templates/viteWithLanguage/basic/public/imgs/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/basic/src/App.tsx +95 -0
- package/bin/templates/viteWithLanguage/basic/src/assets/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/basic/src/i18n.ts +31 -0
- package/bin/templates/viteWithLanguage/basic/src/locales/en/common.json +6 -0
- package/bin/templates/viteWithLanguage/basic/src/locales/es/common.json +6 -0
- package/bin/templates/viteWithLanguage/basic/src/locales/fr/common.json +6 -0
- package/bin/templates/viteWithLanguage/basic/src/main.tsx +15 -0
- package/bin/templates/viteWithLanguage/basic/src/stores/counter.ts +23 -0
- package/bin/templates/viteWithLanguage/basic/src/styles/fonts.css +213 -0
- package/bin/templates/viteWithLanguage/basic/src/styles/style.css +3 -0
- package/bin/templates/viteWithLanguage/basic/src/vite-env.d.ts +1 -0
- package/bin/templates/viteWithLanguage/basic/tailwind.config.js +7 -0
- package/bin/templates/viteWithLanguage/basic/tsconfig.json +29 -0
- package/bin/templates/viteWithLanguage/basic/tsconfig.node.json +9 -0
- package/bin/templates/viteWithLanguage/basic/vite.config.ts +58 -0
- package/bin/templates/viteWithLanguage/query/README.md +80 -0
- package/bin/templates/viteWithLanguage/query/biome.json +67 -0
- package/bin/templates/viteWithLanguage/query/index.html +13 -0
- package/bin/templates/viteWithLanguage/query/public/favicon.ico +0 -0
- package/bin/templates/viteWithLanguage/query/public/imgs/Tailwind_CSS_Logo.svg +1 -0
- package/bin/templates/viteWithLanguage/query/public/imgs/Tanstack-logo.png +0 -0
- package/bin/templates/viteWithLanguage/query/public/imgs/Vitejs-logo.svg +15 -0
- package/bin/templates/viteWithLanguage/query/public/imgs/Zustand-logo.svg +266 -0
- package/bin/templates/viteWithLanguage/query/public/imgs/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/query/src/App.tsx +125 -0
- package/bin/templates/viteWithLanguage/query/src/assets/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/query/src/constants.ts +16 -0
- package/bin/templates/viteWithLanguage/query/src/i18n.ts +31 -0
- package/bin/templates/viteWithLanguage/query/src/integration/tanstack-query.tsx +28 -0
- package/bin/templates/viteWithLanguage/query/src/locales/en/common.json +8 -0
- package/bin/templates/viteWithLanguage/query/src/locales/es/common.json +8 -0
- package/bin/templates/viteWithLanguage/query/src/locales/fr/common.json +8 -0
- package/bin/templates/viteWithLanguage/query/src/main.tsx +24 -0
- package/bin/templates/viteWithLanguage/query/src/stores/counter.ts +23 -0
- package/bin/templates/viteWithLanguage/query/src/styles/fonts.css +213 -0
- package/bin/templates/viteWithLanguage/query/src/styles/style.css +3 -0
- package/bin/templates/viteWithLanguage/query/src/vite-env.d.ts +1 -0
- package/bin/templates/viteWithLanguage/query/tailwind.config.js +7 -0
- package/bin/templates/viteWithLanguage/query/tsconfig.json +29 -0
- package/bin/templates/viteWithLanguage/query/tsconfig.node.json +9 -0
- package/bin/templates/viteWithLanguage/query/vite.config.ts +58 -0
- package/bin/templates/viteWithLanguage/query+router/README.md +111 -0
- package/bin/templates/viteWithLanguage/query+router/biome.json +67 -0
- package/bin/templates/viteWithLanguage/query+router/index.html +13 -0
- package/bin/templates/viteWithLanguage/query+router/public/favicon.ico +0 -0
- package/bin/templates/viteWithLanguage/query+router/public/imgs/Tailwind_CSS_Logo.svg +1 -0
- package/bin/templates/viteWithLanguage/query+router/public/imgs/Tanstack-logo.png +0 -0
- package/bin/templates/viteWithLanguage/query+router/public/imgs/Vitejs-logo.svg +15 -0
- package/bin/templates/viteWithLanguage/query+router/public/imgs/Zustand-logo.svg +266 -0
- package/bin/templates/viteWithLanguage/query+router/public/imgs/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/query+router/src/App.tsx +75 -0
- package/bin/templates/viteWithLanguage/query+router/src/Icons.tsx +74 -0
- package/bin/templates/viteWithLanguage/query+router/src/assets/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/query+router/src/components/Footer.tsx +16 -0
- package/bin/templates/viteWithLanguage/query+router/src/components/Header.tsx +70 -0
- package/bin/templates/viteWithLanguage/query+router/src/constants.ts +16 -0
- package/bin/templates/viteWithLanguage/query+router/src/i18n.ts +31 -0
- package/bin/templates/viteWithLanguage/query+router/src/integration/tanstack-query.tsx +28 -0
- package/bin/templates/viteWithLanguage/query+router/src/locales/en/common.json +13 -0
- package/bin/templates/viteWithLanguage/query+router/src/locales/es/common.json +13 -0
- package/bin/templates/viteWithLanguage/query+router/src/locales/fr/common.json +14 -0
- package/bin/templates/viteWithLanguage/query+router/src/main.tsx +95 -0
- package/bin/templates/viteWithLanguage/query+router/src/routes/queryDemo.tsx +78 -0
- package/bin/templates/viteWithLanguage/query+router/src/stores/counter.ts +23 -0
- package/bin/templates/viteWithLanguage/query+router/src/styles/fonts.css +213 -0
- package/bin/templates/viteWithLanguage/query+router/src/styles/style.css +3 -0
- package/bin/templates/viteWithLanguage/query+router/src/vite-env.d.ts +1 -0
- package/bin/templates/viteWithLanguage/query+router/tailwind.config.js +7 -0
- package/bin/templates/viteWithLanguage/query+router/tsconfig.json +29 -0
- package/bin/templates/viteWithLanguage/query+router/tsconfig.node.json +9 -0
- package/bin/templates/viteWithLanguage/query+router/vite.config.ts +58 -0
- package/bin/templates/viteWithLanguage/router/README.md +106 -0
- package/bin/templates/viteWithLanguage/router/biome.json +67 -0
- package/bin/templates/viteWithLanguage/router/index.html +13 -0
- package/bin/templates/viteWithLanguage/router/public/favicon.ico +0 -0
- package/bin/templates/viteWithLanguage/router/public/imgs/Tailwind_CSS_Logo.svg +1 -0
- package/bin/templates/viteWithLanguage/router/public/imgs/Tanstack-logo.png +0 -0
- package/bin/templates/viteWithLanguage/router/public/imgs/Vitejs-logo.svg +15 -0
- package/bin/templates/viteWithLanguage/router/public/imgs/Zustand-logo.svg +266 -0
- package/bin/templates/viteWithLanguage/router/public/imgs/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/router/src/App.tsx +74 -0
- package/bin/templates/viteWithLanguage/router/src/Icons.tsx +74 -0
- package/bin/templates/viteWithLanguage/router/src/assets/undp-logo-blue.svg +1 -0
- package/bin/templates/viteWithLanguage/router/src/components/Footer.tsx +16 -0
- package/bin/templates/viteWithLanguage/router/src/components/Header.tsx +70 -0
- package/bin/templates/viteWithLanguage/router/src/constants.ts +16 -0
- package/bin/templates/viteWithLanguage/router/src/i18n.ts +31 -0
- package/bin/templates/viteWithLanguage/router/src/locales/en/common.json +11 -0
- package/bin/templates/viteWithLanguage/router/src/locales/es/common.json +11 -0
- package/bin/templates/viteWithLanguage/router/src/locales/fr/common.json +11 -0
- package/bin/templates/viteWithLanguage/router/src/main.tsx +89 -0
- package/bin/templates/viteWithLanguage/router/src/routes/about.tsx +58 -0
- package/bin/templates/viteWithLanguage/router/src/stores/counter.ts +23 -0
- package/bin/templates/viteWithLanguage/router/src/styles/fonts.css +213 -0
- package/bin/templates/viteWithLanguage/router/src/styles/style.css +3 -0
- package/bin/templates/viteWithLanguage/router/src/vite-env.d.ts +1 -0
- package/bin/templates/viteWithLanguage/router/tailwind.config.js +7 -0
- package/bin/templates/viteWithLanguage/router/tsconfig.json +29 -0
- package/bin/templates/viteWithLanguage/router/tsconfig.node.json +9 -0
- package/bin/templates/viteWithLanguage/router/vite.config.ts +58 -0
- package/package.json +1 -1
- package/bin/templates/next/auth/.prettierrc +0 -10
- package/bin/templates/next/auth/eslint.config.mjs +0 -103
- package/bin/templates/next/basic/.prettierrc +0 -10
- package/bin/templates/next/basic/eslint.config.mjs +0 -103
- package/bin/templates/vite/basic/.prettierrc +0 -10
- package/bin/templates/vite/basic/eslint.config.mjs +0 -97
- package/bin/templates/vite/query/.prettierrc +0 -10
- package/bin/templates/vite/query/eslint.config.mjs +0 -97
- package/bin/templates/vite/query+router/.prettierrc +0 -10
- package/bin/templates/vite/query+router/eslint.config.mjs +0 -97
- package/bin/templates/vite/router/.prettierrc +0 -10
- package/bin/templates/vite/router/eslint.config.mjs +0 -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,75 @@
|
|
|
1
|
+
import { P } from '@undp/design-system-react/Typography';
|
|
2
|
+
import { Button } from '@undp/design-system-react/Button';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
|
|
5
|
+
import { useCounterActions, useCounter } from './stores/counter';
|
|
6
|
+
|
|
7
|
+
function App() {
|
|
8
|
+
const count = useCounter();
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
const { increment, decrement } = useCounterActions();
|
|
11
|
+
return (
|
|
12
|
+
<>
|
|
13
|
+
<div className='flex gap-4 items-center justify-center my-8 mx-auto'>
|
|
14
|
+
<img
|
|
15
|
+
src='/imgs/Vitejs-logo.svg'
|
|
16
|
+
alt='vite logo'
|
|
17
|
+
width='72px'
|
|
18
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
19
|
+
/>
|
|
20
|
+
<P marginBottom='none'>&</P>
|
|
21
|
+
<img
|
|
22
|
+
src='/imgs/Tailwind_CSS_Logo.svg'
|
|
23
|
+
alt='tailwind logo'
|
|
24
|
+
width='72px'
|
|
25
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
26
|
+
/>
|
|
27
|
+
<P marginBottom='none'>&</P>
|
|
28
|
+
<img
|
|
29
|
+
src='/imgs/Tanstack-logo.png'
|
|
30
|
+
alt='tanstack logo'
|
|
31
|
+
width='72px'
|
|
32
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
33
|
+
/>
|
|
34
|
+
<P marginBottom='none'>&</P>
|
|
35
|
+
<img
|
|
36
|
+
src='/imgs/Zustand-logo.svg'
|
|
37
|
+
alt='Zustand logo'
|
|
38
|
+
width='72px'
|
|
39
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
40
|
+
/>
|
|
41
|
+
<P marginBottom='none'>&</P>
|
|
42
|
+
<img
|
|
43
|
+
src='/imgs/undp-logo-blue.svg'
|
|
44
|
+
alt='UNDP logo'
|
|
45
|
+
width='72px'
|
|
46
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
<P marginBottom='xl' className='text-center'>
|
|
50
|
+
{t('started', { fileName: 'app.tsx' })}{' '}
|
|
51
|
+
<span className='font-bold'>{t('count', { count: count })}</span>
|
|
52
|
+
</P>
|
|
53
|
+
<div className='flex gap-4 justify-center mb-8'>
|
|
54
|
+
<Button
|
|
55
|
+
variant='tertiary'
|
|
56
|
+
onClick={() => {
|
|
57
|
+
increment();
|
|
58
|
+
}}
|
|
59
|
+
>
|
|
60
|
+
{t('increaseCount')}
|
|
61
|
+
</Button>
|
|
62
|
+
<Button
|
|
63
|
+
variant='tertiary'
|
|
64
|
+
onClick={() => {
|
|
65
|
+
decrement();
|
|
66
|
+
}}
|
|
67
|
+
>
|
|
68
|
+
{t('decreaseCount')}
|
|
69
|
+
</Button>
|
|
70
|
+
</div>
|
|
71
|
+
</>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export default App;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export function LanguageSwitcherIcon() {
|
|
2
|
+
return (
|
|
3
|
+
<svg
|
|
4
|
+
width='25'
|
|
5
|
+
height='26'
|
|
6
|
+
viewBox='0 0 25 26'
|
|
7
|
+
fill='none'
|
|
8
|
+
xmlns='http://www.w3.org/2000/svg'
|
|
9
|
+
>
|
|
10
|
+
<g>
|
|
11
|
+
<path
|
|
12
|
+
d='M16.599 23.688C17.7895 22.3987 18.4193 20.6895 18.35 18.936H0.75V0.75H23.88V15.468L23.875 15.474C23.875 15.521 23.875 15.568 23.875 15.616C23.905 20.278 17.206 24.488 16.175 24.488C15.921 24.488 16.004 24.24 16.599 23.688Z'
|
|
13
|
+
stroke='currentColor'
|
|
14
|
+
strokeWidth='1.5'
|
|
15
|
+
/>
|
|
16
|
+
<path
|
|
17
|
+
d='M13.5854 13.542L16.9429 5.45215L20.2144 13.542'
|
|
18
|
+
stroke='currentColor'
|
|
19
|
+
strokeWidth='1.5'
|
|
20
|
+
strokeLinecap='round'
|
|
21
|
+
strokeLinejoin='round'
|
|
22
|
+
/>
|
|
23
|
+
<path
|
|
24
|
+
d='M15.0576 10.6704H18.9863'
|
|
25
|
+
stroke='currentColor'
|
|
26
|
+
strokeWidth='1.5'
|
|
27
|
+
/>
|
|
28
|
+
<path
|
|
29
|
+
d='M4.13086 6.76706H10.6748'
|
|
30
|
+
stroke='currentColor'
|
|
31
|
+
strokeWidth='1.5'
|
|
32
|
+
strokeLinecap='round'
|
|
33
|
+
/>
|
|
34
|
+
<path
|
|
35
|
+
d='M4.13086 13.1656C4.13086 13.1656 9.59778 13.6368 9.92578 6.90781'
|
|
36
|
+
stroke='currentColor'
|
|
37
|
+
strokeWidth='1.5'
|
|
38
|
+
strokeLinecap='round'
|
|
39
|
+
/>
|
|
40
|
+
<path
|
|
41
|
+
d='M10.8271 13.5417C10.8271 13.5417 6.38075 13.065 5.21875 9.11597'
|
|
42
|
+
stroke='currentColor'
|
|
43
|
+
strokeWidth='1.5'
|
|
44
|
+
strokeLinecap='round'
|
|
45
|
+
/>
|
|
46
|
+
<path
|
|
47
|
+
d='M7.40723 4.08563V6.56317'
|
|
48
|
+
stroke='currentColor'
|
|
49
|
+
strokeWidth='1.5'
|
|
50
|
+
strokeLinecap='round'
|
|
51
|
+
/>
|
|
52
|
+
</g>
|
|
53
|
+
</svg>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function ChevronDown() {
|
|
58
|
+
return (
|
|
59
|
+
<svg
|
|
60
|
+
xmlns='http://www.w3.org/2000/svg'
|
|
61
|
+
width='24'
|
|
62
|
+
height='24'
|
|
63
|
+
viewBox='0 0 24 24'
|
|
64
|
+
fill='none'
|
|
65
|
+
stroke='currentColor'
|
|
66
|
+
stroke-width='2'
|
|
67
|
+
stroke-linecap='round'
|
|
68
|
+
stroke-linejoin='round'
|
|
69
|
+
className='transition-transform duration-200 chevron-down-icon chevron-down'
|
|
70
|
+
>
|
|
71
|
+
<path d='m6 9 6 6 6-6' />
|
|
72
|
+
</svg>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
@@ -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,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Footer,
|
|
3
|
+
FooterLogoUnit,
|
|
4
|
+
FooterCopyrightUnit,
|
|
5
|
+
} from '@undp/design-system-react/Footer';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
|
|
8
|
+
export default function FooterEl() {
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
return (
|
|
11
|
+
<Footer>
|
|
12
|
+
<FooterLogoUnit>{t('subscribe')}</FooterLogoUnit>
|
|
13
|
+
<FooterCopyrightUnit>{t('footnote')}</FooterCopyrightUnit>
|
|
14
|
+
</Footer>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Header,
|
|
3
|
+
HeaderActions,
|
|
4
|
+
HeaderLogoUnit,
|
|
5
|
+
HeaderMainNavUnit,
|
|
6
|
+
HeaderMenuUnit,
|
|
7
|
+
} from '@undp/design-system-react/Header';
|
|
8
|
+
import {
|
|
9
|
+
DropdownMenu,
|
|
10
|
+
DropdownMenuContent,
|
|
11
|
+
DropdownMenuItem,
|
|
12
|
+
DropdownMenuTrigger,
|
|
13
|
+
} from '@undp/design-system-react/DropdownMenu';
|
|
14
|
+
import { Link, useParams } from '@tanstack/react-router';
|
|
15
|
+
import { useTranslation } from 'react-i18next';
|
|
16
|
+
|
|
17
|
+
import { LanguageSwitcherIcon, ChevronDown } from '@/Icons';
|
|
18
|
+
import { DEFAULT_LANGUAGE, LANGUAGES } from '@/constants';
|
|
19
|
+
|
|
20
|
+
export default function HeaderEl() {
|
|
21
|
+
const params = useParams({ strict: false });
|
|
22
|
+
const locale =
|
|
23
|
+
params.locale && LANGUAGES.map(d => d.id).includes(params.locale)
|
|
24
|
+
? params.locale
|
|
25
|
+
: DEFAULT_LANGUAGE;
|
|
26
|
+
const { t } = useTranslation();
|
|
27
|
+
return (
|
|
28
|
+
<Header>
|
|
29
|
+
<HeaderLogoUnit
|
|
30
|
+
hyperlink={locale === DEFAULT_LANGUAGE ? '/' : `/${locale}`}
|
|
31
|
+
siteName='Site name'
|
|
32
|
+
siteSubName='Sub-site name'
|
|
33
|
+
/>
|
|
34
|
+
<HeaderMainNavUnit>
|
|
35
|
+
<HeaderMenuUnit>
|
|
36
|
+
<Link to='/{-$locale}'>{t('home')}</Link>
|
|
37
|
+
<Link to='/{-$locale}/query-demo'>{t('query')}</Link>
|
|
38
|
+
</HeaderMenuUnit>
|
|
39
|
+
<HeaderActions>
|
|
40
|
+
<DropdownMenu>
|
|
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'>
|
|
43
|
+
<LanguageSwitcherIcon />
|
|
44
|
+
{LANGUAGES.find(d => d.id === locale)?.label}
|
|
45
|
+
<ChevronDown />
|
|
46
|
+
</div>
|
|
47
|
+
</DropdownMenuTrigger>
|
|
48
|
+
<DropdownMenuContent>
|
|
49
|
+
{LANGUAGES.map(d => (
|
|
50
|
+
<DropdownMenuItem key={d.id} asChild>
|
|
51
|
+
<Link
|
|
52
|
+
to='.'
|
|
53
|
+
params={{
|
|
54
|
+
...params,
|
|
55
|
+
locale: d.id,
|
|
56
|
+
}}
|
|
57
|
+
preload={false}
|
|
58
|
+
className='w-full'
|
|
59
|
+
>
|
|
60
|
+
{d.label}
|
|
61
|
+
</Link>
|
|
62
|
+
</DropdownMenuItem>
|
|
63
|
+
))}
|
|
64
|
+
</DropdownMenuContent>
|
|
65
|
+
</DropdownMenu>
|
|
66
|
+
</HeaderActions>
|
|
67
|
+
</HeaderMainNavUnit>
|
|
68
|
+
</Header>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import i18n from 'i18next';
|
|
2
|
+
import { initReactI18next } from 'react-i18next';
|
|
3
|
+
import enCommon from './locales/en/common.json';
|
|
4
|
+
import esCommon from './locales/es/common.json';
|
|
5
|
+
import frCommon from './locales/fr/common.json';
|
|
6
|
+
|
|
7
|
+
i18n.use(initReactI18next).init({
|
|
8
|
+
resources: {
|
|
9
|
+
en: {
|
|
10
|
+
common: enCommon,
|
|
11
|
+
},
|
|
12
|
+
es: {
|
|
13
|
+
common: esCommon,
|
|
14
|
+
},
|
|
15
|
+
fr: {
|
|
16
|
+
common: frCommon,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
ns: ['common'],
|
|
20
|
+
defaultNS: 'common',
|
|
21
|
+
fallbackLng: 'en',
|
|
22
|
+
initAsync: false,
|
|
23
|
+
interpolation: {
|
|
24
|
+
escapeValue: false,
|
|
25
|
+
},
|
|
26
|
+
react: {
|
|
27
|
+
useSuspense: true,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export default i18n;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
export function getContext() {
|
|
5
|
+
const queryClient = new QueryClient({
|
|
6
|
+
defaultOptions: {
|
|
7
|
+
queries: {
|
|
8
|
+
staleTime: 1000 * 60 * 60 * 24, // how long fetched data is considered “fresh” before it becomes “stale” 🡢 24 hrs
|
|
9
|
+
gcTime: 1000 * 60 * 60 * 24, // how long inactive (unused) query data stays in memory before being deleted 🡢 24 hrs
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
queryClient,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function Provider({
|
|
19
|
+
children,
|
|
20
|
+
queryClient,
|
|
21
|
+
}: {
|
|
22
|
+
children: ReactNode;
|
|
23
|
+
queryClient: QueryClient;
|
|
24
|
+
}) {
|
|
25
|
+
return (
|
|
26
|
+
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"aboutPage": "To edit this page, edit the {{fileName}} file in the routes folder.",
|
|
3
|
+
"started":"To get started, edit the {{fileName}} file.",
|
|
4
|
+
"count":"Count: {{count}}",
|
|
5
|
+
"increaseCount":"Increase counter",
|
|
6
|
+
"decreaseCount":"Decrease counter",
|
|
7
|
+
"subscribe":"Subscribe to email",
|
|
8
|
+
"footnote":"Footnote can be added here",
|
|
9
|
+
"home":"Home",
|
|
10
|
+
"query":"Query demo",
|
|
11
|
+
"dataLoading_one": "Data loaded successfully. {{length}} element in the query.",
|
|
12
|
+
"dataLoading_other": "Data loaded successfully. {{length}} elements in the query."
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"aboutPage": "Para editar esta página, edita el archivo {{fileName}} en la carpeta routes.",
|
|
3
|
+
"started": "Para comenzar, edita el archivo {{fileName}}.",
|
|
4
|
+
"count": "Contador: {{count}}",
|
|
5
|
+
"increaseCount": "Incrementar contador",
|
|
6
|
+
"decreaseCount": "Disminuir contador",
|
|
7
|
+
"subscribe": "Suscribirse al correo electrónico",
|
|
8
|
+
"footnote": "La nota al pie se puede agregar aquí",
|
|
9
|
+
"home": "Inicio",
|
|
10
|
+
"query": "Demostración de consulta",
|
|
11
|
+
"dataLoading_one": "Datos cargados correctamente. {{count}} elemento en la consulta.",
|
|
12
|
+
"dataLoading_other": "Datos cargados correctamente. {{count}} elementos en la consulta."
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"aboutPage": "Pour modifier cette page, modifiez le fichier {{fileName}} dans le dossier routes.",
|
|
3
|
+
"started": "Pour commencer, modifiez le fichier {{fileName}}.",
|
|
4
|
+
"count": "Compteur : {{count}}",
|
|
5
|
+
"increaseCount": "Augmenter le compteur",
|
|
6
|
+
"decreaseCount": "Diminuer le compteur",
|
|
7
|
+
"subscribe": "S’abonner par e-mail",
|
|
8
|
+
"footnote": "Une note de bas de page peut être ajoutée ici",
|
|
9
|
+
"home": "Accueil",
|
|
10
|
+
"query": "Démo de requête",
|
|
11
|
+
"dataLoading_one": "Données chargées avec succès. {{count}} élément dans la requête.",
|
|
12
|
+
"dataLoading_other": "Données chargées avec succès. {{count}} éléments dans la requête."
|
|
13
|
+
|
|
14
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { StrictMode } from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom/client';
|
|
3
|
+
import { I18nextProvider } from 'react-i18next';
|
|
4
|
+
import {
|
|
5
|
+
Outlet,
|
|
6
|
+
RouterProvider,
|
|
7
|
+
createRootRoute,
|
|
8
|
+
createRoute,
|
|
9
|
+
createRouter,
|
|
10
|
+
} from '@tanstack/react-router';
|
|
11
|
+
|
|
12
|
+
import * as TanStackQueryProvider from './integration/tanstack-query';
|
|
13
|
+
import HeaderEl from './components/Header';
|
|
14
|
+
import FooterEl from './components/Footer';
|
|
15
|
+
import App from './App';
|
|
16
|
+
import createTanStackQueryDemoRoute from './routes/queryDemo';
|
|
17
|
+
import i18n from './i18n';
|
|
18
|
+
import { DEFAULT_LANGUAGE, LANGUAGES } from './constants';
|
|
19
|
+
|
|
20
|
+
import './styles/fonts.css';
|
|
21
|
+
import './styles/style.css';
|
|
22
|
+
|
|
23
|
+
const rootRoute = createRootRoute({
|
|
24
|
+
component: () => <Outlet />,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const localeRoute = createRoute({
|
|
28
|
+
getParentRoute: () => rootRoute,
|
|
29
|
+
path: '/{-$locale}',
|
|
30
|
+
beforeLoad: async ({ params }) => {
|
|
31
|
+
const locale =
|
|
32
|
+
params.locale && LANGUAGES.map(d => d.id).includes(params.locale)
|
|
33
|
+
? params.locale
|
|
34
|
+
: DEFAULT_LANGUAGE;
|
|
35
|
+
|
|
36
|
+
await i18n.changeLanguage(locale);
|
|
37
|
+
|
|
38
|
+
return { locale };
|
|
39
|
+
},
|
|
40
|
+
component: () => (
|
|
41
|
+
<div className='flex flex-col gap-0 min-h-screen'>
|
|
42
|
+
<HeaderEl />
|
|
43
|
+
<main className='grow-1 flex flex-col justify-center'>
|
|
44
|
+
<div className='flex flex-col justify-center'>
|
|
45
|
+
<Outlet />
|
|
46
|
+
</div>
|
|
47
|
+
</main>
|
|
48
|
+
<FooterEl />
|
|
49
|
+
</div>
|
|
50
|
+
),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const indexRoute = createRoute({
|
|
54
|
+
getParentRoute: () => localeRoute,
|
|
55
|
+
path: '/',
|
|
56
|
+
component: App,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const routeTree = rootRoute.addChildren([
|
|
60
|
+
localeRoute.addChildren([
|
|
61
|
+
indexRoute,
|
|
62
|
+
createTanStackQueryDemoRoute(localeRoute),
|
|
63
|
+
]),
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
const TanStackQueryProviderContext = TanStackQueryProvider.getContext();
|
|
67
|
+
const router = createRouter({
|
|
68
|
+
routeTree,
|
|
69
|
+
context: {
|
|
70
|
+
...TanStackQueryProviderContext,
|
|
71
|
+
},
|
|
72
|
+
defaultPreload: 'intent',
|
|
73
|
+
scrollRestoration: true,
|
|
74
|
+
defaultStructuralSharing: true,
|
|
75
|
+
defaultPreloadStaleTime: 0,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
declare module '@tanstack/react-router' {
|
|
79
|
+
interface Register {
|
|
80
|
+
router: typeof router;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const rootElement = document.getElementById('root');
|
|
85
|
+
if (rootElement && !rootElement.innerHTML) {
|
|
86
|
+
ReactDOM.createRoot(rootElement).render(
|
|
87
|
+
<StrictMode>
|
|
88
|
+
<I18nextProvider i18n={i18n}>
|
|
89
|
+
<TanStackQueryProvider.Provider {...TanStackQueryProviderContext}>
|
|
90
|
+
<RouterProvider router={router} />
|
|
91
|
+
</TanStackQueryProvider.Provider>
|
|
92
|
+
</I18nextProvider>
|
|
93
|
+
</StrictMode>,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createRoute } from '@tanstack/react-router';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import type { AnyRoute } from '@tanstack/react-router';
|
|
4
|
+
import { Spinner } from '@undp/design-system-react/Spinner';
|
|
5
|
+
import { P } from '@undp/design-system-react/Typography';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
|
|
8
|
+
function useTodoData() {
|
|
9
|
+
return useQuery({
|
|
10
|
+
queryKey: ['todos'],
|
|
11
|
+
queryFn: () =>
|
|
12
|
+
Promise.resolve([
|
|
13
|
+
{ id: 1, name: 'Alice' },
|
|
14
|
+
{ id: 2, name: 'Bob' },
|
|
15
|
+
{ id: 3, name: 'Charlie' },
|
|
16
|
+
]),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function TanStackQueryDemo() {
|
|
21
|
+
const { data, isLoading, isError } = useTodoData();
|
|
22
|
+
const { t } = useTranslation();
|
|
23
|
+
|
|
24
|
+
if (isLoading) return <Spinner size='lg' className='my-20 m-auto' />;
|
|
25
|
+
|
|
26
|
+
if (isError) return <>Error</>;
|
|
27
|
+
return (
|
|
28
|
+
<>
|
|
29
|
+
<div className='flex gap-4 items-center justify-center my-8 mx-auto'>
|
|
30
|
+
<img
|
|
31
|
+
src='/imgs/Vitejs-logo.svg'
|
|
32
|
+
alt='vite logo'
|
|
33
|
+
width='72px'
|
|
34
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
35
|
+
/>
|
|
36
|
+
<P marginBottom='none'>&</P>
|
|
37
|
+
<img
|
|
38
|
+
src='/imgs/Tailwind_CSS_Logo.svg'
|
|
39
|
+
alt='tailwind logo'
|
|
40
|
+
width='72px'
|
|
41
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
42
|
+
/>
|
|
43
|
+
<P marginBottom='none'>&</P>
|
|
44
|
+
<img
|
|
45
|
+
src='/imgs/Tanstack-logo.png'
|
|
46
|
+
alt='tanstack logo'
|
|
47
|
+
width='72px'
|
|
48
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
49
|
+
/>
|
|
50
|
+
<P marginBottom='none'>&</P>
|
|
51
|
+
<img
|
|
52
|
+
src='/imgs/Zustand-logo.svg'
|
|
53
|
+
alt='Zustand logo'
|
|
54
|
+
width='72px'
|
|
55
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
56
|
+
/>
|
|
57
|
+
<P marginBottom='none'>&</P>
|
|
58
|
+
<img
|
|
59
|
+
src='/imgs/undp-logo-blue.svg'
|
|
60
|
+
alt='UNDP logo'
|
|
61
|
+
width='72px'
|
|
62
|
+
style={{ marginLeft: 'auto', marginRight: 'auto' }}
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
<P marginBottom='xl' className='text-center'>
|
|
66
|
+
{t('dataLoading', { count: data?.length })}
|
|
67
|
+
</P>
|
|
68
|
+
</>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default function createTanStackQueryDemoRoute(parentRoute: AnyRoute) {
|
|
73
|
+
return createRoute({
|
|
74
|
+
path: '/query-demo',
|
|
75
|
+
component: TanStackQueryDemo,
|
|
76
|
+
getParentRoute: () => parentRoute,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
|
|
3
|
+
type Actions = {
|
|
4
|
+
increment: (d?: number) => void;
|
|
5
|
+
decrement: (d?: number) => void;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
type Store = {
|
|
9
|
+
count: number;
|
|
10
|
+
actions: Actions;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const useCounterStore = create<Store>(set => ({
|
|
14
|
+
count: 0,
|
|
15
|
+
actions: {
|
|
16
|
+
increment: (d = 1) => set(state => ({ count: state.count + d })),
|
|
17
|
+
decrement: (d = 1) => set(state => ({ count: state.count - d })),
|
|
18
|
+
},
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
export const useCounter = () => useCounterStore(s => s.count);
|
|
22
|
+
|
|
23
|
+
export const useCounterActions = () => useCounterStore(s => s.actions);
|