@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.
Files changed (137) hide show
  1. package/bin/generateFiles/generatePackageJson.js +12 -30
  2. package/bin/generateFiles/generateViteConfig.js +2 -4
  3. package/bin/index.js +1 -1
  4. package/bin/promptUser.js +21 -2
  5. package/bin/templates/next/auth/biome.json +67 -0
  6. package/bin/templates/next/basic/biome.json +67 -0
  7. package/bin/templates/vite/basic/biome.json +67 -0
  8. package/bin/templates/vite/query/biome.json +67 -0
  9. package/bin/templates/vite/query/src/App.tsx +1 -1
  10. package/bin/templates/vite/query+router/biome.json +67 -0
  11. package/bin/templates/vite/query+router/src/App.tsx +1 -1
  12. package/bin/templates/vite/query+router/src/components/Header.tsx +1 -1
  13. package/bin/templates/vite/query+router/src/routes/queryDemo.tsx +5 -5
  14. package/bin/templates/vite/router/biome.json +67 -0
  15. package/bin/templates/vite/router/src/App.tsx +1 -1
  16. package/bin/templates/vite/router/src/routes/about.tsx +5 -5
  17. package/bin/templates/viteWithLanguage/basic/README.md +75 -0
  18. package/bin/templates/viteWithLanguage/basic/biome.json +67 -0
  19. package/bin/templates/viteWithLanguage/basic/index.html +13 -0
  20. package/bin/templates/viteWithLanguage/basic/public/favicon.ico +0 -0
  21. package/bin/templates/viteWithLanguage/basic/public/imgs/Tailwind_CSS_Logo.svg +1 -0
  22. package/bin/templates/viteWithLanguage/basic/public/imgs/Vitejs-logo.svg +15 -0
  23. package/bin/templates/viteWithLanguage/basic/public/imgs/Zustand-logo.svg +266 -0
  24. package/bin/templates/viteWithLanguage/basic/public/imgs/undp-logo-blue.svg +1 -0
  25. package/bin/templates/viteWithLanguage/basic/src/App.tsx +95 -0
  26. package/bin/templates/viteWithLanguage/basic/src/assets/undp-logo-blue.svg +1 -0
  27. package/bin/templates/viteWithLanguage/basic/src/i18n.ts +31 -0
  28. package/bin/templates/viteWithLanguage/basic/src/locales/en/common.json +6 -0
  29. package/bin/templates/viteWithLanguage/basic/src/locales/es/common.json +6 -0
  30. package/bin/templates/viteWithLanguage/basic/src/locales/fr/common.json +6 -0
  31. package/bin/templates/viteWithLanguage/basic/src/main.tsx +15 -0
  32. package/bin/templates/viteWithLanguage/basic/src/stores/counter.ts +23 -0
  33. package/bin/templates/viteWithLanguage/basic/src/styles/fonts.css +213 -0
  34. package/bin/templates/viteWithLanguage/basic/src/styles/style.css +3 -0
  35. package/bin/templates/viteWithLanguage/basic/src/vite-env.d.ts +1 -0
  36. package/bin/templates/viteWithLanguage/basic/tailwind.config.js +7 -0
  37. package/bin/templates/viteWithLanguage/basic/tsconfig.json +29 -0
  38. package/bin/templates/viteWithLanguage/basic/tsconfig.node.json +9 -0
  39. package/bin/templates/viteWithLanguage/basic/vite.config.ts +58 -0
  40. package/bin/templates/viteWithLanguage/query/README.md +80 -0
  41. package/bin/templates/viteWithLanguage/query/biome.json +67 -0
  42. package/bin/templates/viteWithLanguage/query/index.html +13 -0
  43. package/bin/templates/viteWithLanguage/query/public/favicon.ico +0 -0
  44. package/bin/templates/viteWithLanguage/query/public/imgs/Tailwind_CSS_Logo.svg +1 -0
  45. package/bin/templates/viteWithLanguage/query/public/imgs/Tanstack-logo.png +0 -0
  46. package/bin/templates/viteWithLanguage/query/public/imgs/Vitejs-logo.svg +15 -0
  47. package/bin/templates/viteWithLanguage/query/public/imgs/Zustand-logo.svg +266 -0
  48. package/bin/templates/viteWithLanguage/query/public/imgs/undp-logo-blue.svg +1 -0
  49. package/bin/templates/viteWithLanguage/query/src/App.tsx +125 -0
  50. package/bin/templates/viteWithLanguage/query/src/assets/undp-logo-blue.svg +1 -0
  51. package/bin/templates/viteWithLanguage/query/src/constants.ts +16 -0
  52. package/bin/templates/viteWithLanguage/query/src/i18n.ts +31 -0
  53. package/bin/templates/viteWithLanguage/query/src/integration/tanstack-query.tsx +28 -0
  54. package/bin/templates/viteWithLanguage/query/src/locales/en/common.json +8 -0
  55. package/bin/templates/viteWithLanguage/query/src/locales/es/common.json +8 -0
  56. package/bin/templates/viteWithLanguage/query/src/locales/fr/common.json +8 -0
  57. package/bin/templates/viteWithLanguage/query/src/main.tsx +24 -0
  58. package/bin/templates/viteWithLanguage/query/src/stores/counter.ts +23 -0
  59. package/bin/templates/viteWithLanguage/query/src/styles/fonts.css +213 -0
  60. package/bin/templates/viteWithLanguage/query/src/styles/style.css +3 -0
  61. package/bin/templates/viteWithLanguage/query/src/vite-env.d.ts +1 -0
  62. package/bin/templates/viteWithLanguage/query/tailwind.config.js +7 -0
  63. package/bin/templates/viteWithLanguage/query/tsconfig.json +29 -0
  64. package/bin/templates/viteWithLanguage/query/tsconfig.node.json +9 -0
  65. package/bin/templates/viteWithLanguage/query/vite.config.ts +58 -0
  66. package/bin/templates/viteWithLanguage/query+router/README.md +111 -0
  67. package/bin/templates/viteWithLanguage/query+router/biome.json +67 -0
  68. package/bin/templates/viteWithLanguage/query+router/index.html +13 -0
  69. package/bin/templates/viteWithLanguage/query+router/public/favicon.ico +0 -0
  70. package/bin/templates/viteWithLanguage/query+router/public/imgs/Tailwind_CSS_Logo.svg +1 -0
  71. package/bin/templates/viteWithLanguage/query+router/public/imgs/Tanstack-logo.png +0 -0
  72. package/bin/templates/viteWithLanguage/query+router/public/imgs/Vitejs-logo.svg +15 -0
  73. package/bin/templates/viteWithLanguage/query+router/public/imgs/Zustand-logo.svg +266 -0
  74. package/bin/templates/viteWithLanguage/query+router/public/imgs/undp-logo-blue.svg +1 -0
  75. package/bin/templates/viteWithLanguage/query+router/src/App.tsx +75 -0
  76. package/bin/templates/viteWithLanguage/query+router/src/Icons.tsx +74 -0
  77. package/bin/templates/viteWithLanguage/query+router/src/assets/undp-logo-blue.svg +1 -0
  78. package/bin/templates/viteWithLanguage/query+router/src/components/Footer.tsx +16 -0
  79. package/bin/templates/viteWithLanguage/query+router/src/components/Header.tsx +70 -0
  80. package/bin/templates/viteWithLanguage/query+router/src/constants.ts +16 -0
  81. package/bin/templates/viteWithLanguage/query+router/src/i18n.ts +31 -0
  82. package/bin/templates/viteWithLanguage/query+router/src/integration/tanstack-query.tsx +28 -0
  83. package/bin/templates/viteWithLanguage/query+router/src/locales/en/common.json +13 -0
  84. package/bin/templates/viteWithLanguage/query+router/src/locales/es/common.json +13 -0
  85. package/bin/templates/viteWithLanguage/query+router/src/locales/fr/common.json +14 -0
  86. package/bin/templates/viteWithLanguage/query+router/src/main.tsx +95 -0
  87. package/bin/templates/viteWithLanguage/query+router/src/routes/queryDemo.tsx +78 -0
  88. package/bin/templates/viteWithLanguage/query+router/src/stores/counter.ts +23 -0
  89. package/bin/templates/viteWithLanguage/query+router/src/styles/fonts.css +213 -0
  90. package/bin/templates/viteWithLanguage/query+router/src/styles/style.css +3 -0
  91. package/bin/templates/viteWithLanguage/query+router/src/vite-env.d.ts +1 -0
  92. package/bin/templates/viteWithLanguage/query+router/tailwind.config.js +7 -0
  93. package/bin/templates/viteWithLanguage/query+router/tsconfig.json +29 -0
  94. package/bin/templates/viteWithLanguage/query+router/tsconfig.node.json +9 -0
  95. package/bin/templates/viteWithLanguage/query+router/vite.config.ts +58 -0
  96. package/bin/templates/viteWithLanguage/router/README.md +106 -0
  97. package/bin/templates/viteWithLanguage/router/biome.json +67 -0
  98. package/bin/templates/viteWithLanguage/router/index.html +13 -0
  99. package/bin/templates/viteWithLanguage/router/public/favicon.ico +0 -0
  100. package/bin/templates/viteWithLanguage/router/public/imgs/Tailwind_CSS_Logo.svg +1 -0
  101. package/bin/templates/viteWithLanguage/router/public/imgs/Tanstack-logo.png +0 -0
  102. package/bin/templates/viteWithLanguage/router/public/imgs/Vitejs-logo.svg +15 -0
  103. package/bin/templates/viteWithLanguage/router/public/imgs/Zustand-logo.svg +266 -0
  104. package/bin/templates/viteWithLanguage/router/public/imgs/undp-logo-blue.svg +1 -0
  105. package/bin/templates/viteWithLanguage/router/src/App.tsx +74 -0
  106. package/bin/templates/viteWithLanguage/router/src/Icons.tsx +74 -0
  107. package/bin/templates/viteWithLanguage/router/src/assets/undp-logo-blue.svg +1 -0
  108. package/bin/templates/viteWithLanguage/router/src/components/Footer.tsx +16 -0
  109. package/bin/templates/viteWithLanguage/router/src/components/Header.tsx +70 -0
  110. package/bin/templates/viteWithLanguage/router/src/constants.ts +16 -0
  111. package/bin/templates/viteWithLanguage/router/src/i18n.ts +31 -0
  112. package/bin/templates/viteWithLanguage/router/src/locales/en/common.json +11 -0
  113. package/bin/templates/viteWithLanguage/router/src/locales/es/common.json +11 -0
  114. package/bin/templates/viteWithLanguage/router/src/locales/fr/common.json +11 -0
  115. package/bin/templates/viteWithLanguage/router/src/main.tsx +89 -0
  116. package/bin/templates/viteWithLanguage/router/src/routes/about.tsx +58 -0
  117. package/bin/templates/viteWithLanguage/router/src/stores/counter.ts +23 -0
  118. package/bin/templates/viteWithLanguage/router/src/styles/fonts.css +213 -0
  119. package/bin/templates/viteWithLanguage/router/src/styles/style.css +3 -0
  120. package/bin/templates/viteWithLanguage/router/src/vite-env.d.ts +1 -0
  121. package/bin/templates/viteWithLanguage/router/tailwind.config.js +7 -0
  122. package/bin/templates/viteWithLanguage/router/tsconfig.json +29 -0
  123. package/bin/templates/viteWithLanguage/router/tsconfig.node.json +9 -0
  124. package/bin/templates/viteWithLanguage/router/vite.config.ts +58 -0
  125. package/package.json +1 -1
  126. package/bin/templates/next/auth/.prettierrc +0 -10
  127. package/bin/templates/next/auth/eslint.config.mjs +0 -103
  128. package/bin/templates/next/basic/.prettierrc +0 -10
  129. package/bin/templates/next/basic/eslint.config.mjs +0 -103
  130. package/bin/templates/vite/basic/.prettierrc +0 -10
  131. package/bin/templates/vite/basic/eslint.config.mjs +0 -97
  132. package/bin/templates/vite/query/.prettierrc +0 -10
  133. package/bin/templates/vite/query/eslint.config.mjs +0 -97
  134. package/bin/templates/vite/query+router/.prettierrc +0 -10
  135. package/bin/templates/vite/query+router/eslint.config.mjs +0 -97
  136. package/bin/templates/vite/router/.prettierrc +0 -10
  137. 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,95 @@
1
+ import { P } from '@undp/design-system-react/Typography';
2
+ import { Button } from '@undp/design-system-react/Button';
3
+ import { SegmentedControl } from '@undp/design-system-react/SegmentedControl';
4
+ import { useTranslation } from 'react-i18next';
5
+
6
+ import { useCounterActions, useCounter } from './stores/counter';
7
+
8
+ import '@/styles/fonts.css';
9
+ import '@/styles/style.css';
10
+ import { Spacer } from '@undp/design-system-react/Spacer';
11
+
12
+ function App() {
13
+ const count = useCounter();
14
+ const { increment, decrement } = useCounterActions();
15
+ const { i18n, t } = useTranslation();
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'>
19
+ <img
20
+ src='./imgs/Vitejs-logo.svg'
21
+ alt='vite logo'
22
+ width='72px'
23
+ style={{ marginLeft: 'auto', marginRight: 'auto' }}
24
+ />
25
+ <P marginBottom='none'>&</P>
26
+ <img
27
+ src='./imgs/Tailwind_CSS_Logo.svg'
28
+ alt='tailwind logo'
29
+ width='72px'
30
+ style={{ marginLeft: 'auto', marginRight: 'auto' }}
31
+ />
32
+ <P marginBottom='none'>&</P>
33
+ <img
34
+ src='./imgs/Zustand-logo.svg'
35
+ alt='Zustand logo'
36
+ width='72px'
37
+ style={{ marginLeft: 'auto', marginRight: 'auto' }}
38
+ />
39
+ <P marginBottom='none'>&</P>
40
+ <img
41
+ src='./imgs/undp-logo-blue.svg'
42
+ alt='UNDP logo'
43
+ width='72px'
44
+ style={{ marginLeft: 'auto', marginRight: 'auto' }}
45
+ />
46
+ </div>
47
+ <SegmentedControl
48
+ color="red"
49
+ defaultValue="en"
50
+ onValueChange={d => { i18n.changeLanguage(d) }}
51
+ options={[
52
+ {
53
+ label: 'English',
54
+ value: 'en'
55
+ },
56
+ {
57
+ label: 'Spanish',
58
+ value: 'es'
59
+ },
60
+ {
61
+ label: 'French',
62
+ value: 'fr'
63
+ }
64
+ ]}
65
+ size="sm"
66
+ variant="light"
67
+ />
68
+ <Spacer size='xl' />
69
+ <P marginBottom='xl' className='text-center'>
70
+ {t('started', { fileName: 'app.tsx' })}{' '}
71
+ <span className='font-bold'>{t('count', { count: count })}</span>
72
+ </P>
73
+ <div className='flex gap-4 justify-center'>
74
+ <Button
75
+ variant='tertiary'
76
+ onClick={() => {
77
+ increment();
78
+ }}
79
+ >
80
+ {t('increaseCount')}
81
+ </Button>
82
+ <Button
83
+ variant='tertiary'
84
+ onClick={() => {
85
+ decrement();
86
+ }}
87
+ >
88
+ {t('decreaseCount')}
89
+ </Button>
90
+ </div>
91
+ </div>
92
+ );
93
+ }
94
+
95
+ export default App;
@@ -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,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,6 @@
1
+ {
2
+ "started":"To get started, edit the {{fileName}} file.",
3
+ "count":"Count: {{count}}",
4
+ "increaseCount":"Increase counter",
5
+ "decreaseCount":"Decrease counter"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "started": "Para comenzar, edita el archivo {{fileName}}.",
3
+ "count": "Contador: {{count}}",
4
+ "increaseCount": "Incrementar contador",
5
+ "decreaseCount": "Disminuir contador"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "started": "Pour commencer, modifiez le fichier {{fileName}}.",
3
+ "count": "Compteur : {{count}}",
4
+ "increaseCount": "Augmenter le compteur",
5
+ "decreaseCount": "Diminuer le compteur"
6
+ }
@@ -0,0 +1,15 @@
1
+ import { StrictMode } from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import { I18nextProvider } from 'react-i18next';
4
+
5
+ import App from './App';
6
+ import i18n from './i18n';
7
+
8
+ const rootElement = document.getElementById('root');
9
+ if (rootElement && !rootElement.innerHTML) {
10
+ ReactDOM.createRoot(rootElement).render(
11
+ <StrictMode>
12
+ <App />
13
+ </StrictMode>,
14
+ );
15
+ }
@@ -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);
@@ -0,0 +1,213 @@
1
+ @font-face {
2
+ font-display: swap;
3
+ font-family: 'ProximaNova';
4
+ font-style: normal;
5
+ font-weight: 100;
6
+ src: url('./fonts/proximanova-thin-webfont.woff2') format('woff2');
7
+ }
8
+
9
+ @font-face {
10
+ font-display: swap;
11
+ font-family: 'ProximaNova';
12
+ font-style: italic;
13
+ font-weight: 100;
14
+ src: url('./fonts/proximanova-thinit-webfont.woff2') format('woff2');
15
+ }
16
+
17
+ @font-face {
18
+ font-display: swap;
19
+ font-family: 'ProximaNova';
20
+ font-style: normal;
21
+ font-weight: 200;
22
+ src: url('./fonts/proximanova-light-webfont.woff2') format('woff2');
23
+ }
24
+
25
+ @font-face {
26
+ font-display: swap;
27
+ font-family: 'ProximaNova';
28
+ font-style: italic;
29
+ font-weight: 200 300;
30
+ src: url('./fonts/proximanova-lightit-webfont.woff2') format('woff2');
31
+ }
32
+
33
+ @font-face {
34
+ font-display: swap;
35
+ font-family: 'ProximaNova';
36
+ font-style: normal;
37
+ font-weight: 400;
38
+ src: url('./fonts/proximanova-regular-webfont.woff2') format('woff2');
39
+ }
40
+
41
+ @font-face {
42
+ font-display: swap;
43
+ font-family: 'ProximaNova';
44
+ font-style: italic;
45
+ font-weight: 400;
46
+ src: url('./fonts/proximanova-regularit-webfont.woff2') format('woff2');
47
+ }
48
+
49
+ @font-face {
50
+ font-display: swap;
51
+ font-family: 'ProximaNova';
52
+ font-style: normal;
53
+ font-weight: 500;
54
+ src: url('./fonts/proximanova-medium-webfont.woff2') format('woff2');
55
+ }
56
+
57
+ @font-face {
58
+ font-display: swap;
59
+ font-family: 'ProximaNova';
60
+ font-style: italic;
61
+ font-weight: 500;
62
+ src: url('./fonts/proximanova-mediumit-webfont.woff2') format('woff2');
63
+ }
64
+
65
+ @font-face {
66
+ font-display: swap;
67
+ font-family: 'ProximaNova';
68
+ font-style: normal;
69
+ font-weight: 600;
70
+ src: url('./fonts/proximanova-semibold-webfont-2.woff2') format('woff2');
71
+ }
72
+
73
+ @font-face {
74
+ font-display: swap;
75
+ font-family: 'ProximaNova';
76
+ font-style: italic;
77
+ font-weight: 600;
78
+ src: url('./fonts/proximanova-semiboldit-webfont-2.woff2') format('woff2');
79
+ }
80
+
81
+ @font-face {
82
+ font-display: swap;
83
+ font-family: 'ProximaNova';
84
+ font-style: normal;
85
+ font-weight: 700;
86
+ src: url('./fonts/proximanova-bold-webfont.woff2') format('woff2');
87
+ }
88
+
89
+ @font-face {
90
+ font-display: swap;
91
+ font-family: 'ProximaNova';
92
+ font-style: italic;
93
+ font-weight: 700;
94
+ src: url('./fonts/proximanova-boldit-webfont.woff2') format('woff2');
95
+ }
96
+
97
+ @font-face {
98
+ font-display: swap;
99
+ font-family: 'ProximaNova';
100
+ font-style: normal;
101
+ font-weight: 800;
102
+ src: url('./fonts/proximanova-extrabold-webfont.woff2') format('woff2');
103
+ }
104
+
105
+ @font-face {
106
+ font-display: swap;
107
+ font-family: 'ProximaNova';
108
+ font-style: italic;
109
+ font-weight: 800;
110
+ src: url('./fonts/proximanova-extraboldit-webfont.woff2') format('woff2');
111
+ }
112
+
113
+ @font-face {
114
+ font-display: swap;
115
+ font-family: 'ProximaNova';
116
+ font-style: normal;
117
+ font-weight: 900;
118
+ src: url('./fonts/proximanova-black-webfont.woff2') format('woff2');
119
+ }
120
+
121
+ @font-face {
122
+ font-display: swap;
123
+ font-family: 'ProximaNova';
124
+ font-style: italic;
125
+ font-weight: 900;
126
+ src: url('./fonts/proximanova-blackit-webfont.woff2') format('woff2');
127
+ }
128
+
129
+ /* SohneBreit */
130
+ @font-face {
131
+ font-display: swap;
132
+ font-family: 'SohneBreit';
133
+ font-style: normal;
134
+ font-weight: 100 700;
135
+ src: url('./fonts/soehne-breit-web-dreiviertelfett.woff2') format('woff2');
136
+ unicode-range: U+0000-024F, U+1E00-1EFF, U+2000-206F, U+2070-209F;
137
+ }
138
+
139
+ @font-face {
140
+ font-display: swap;
141
+ font-family: 'SohneBreit';
142
+ font-style: italic;
143
+ font-weight: 100 700;
144
+ src: url('./fonts/soehne-breit-web-dreiviertelfett-kursiv.woff2')
145
+ format('woff2');
146
+ unicode-range: U+0000-024F, U+1E00-1EFF, U+2000-206F, U+2070-209F;
147
+ }
148
+
149
+ @font-face {
150
+ font-display: swap;
151
+ font-family: 'SohneBreit';
152
+ font-style: normal;
153
+ font-weight: 800 900;
154
+ src: url('./fonts/soehne-breit-web-fett.woff2') format('woff2');
155
+ unicode-range: U+0000-024F, U+1E00-1EFF, U+2000-206F, U+2070-209F;
156
+ }
157
+
158
+ @font-face {
159
+ font-display: swap;
160
+ font-family: 'SohneBreit';
161
+ font-style: italic;
162
+ font-weight: 800 900;
163
+ src: url('./fonts/soehne-breit-web-fett-kursiv.woff2') format('woff2');
164
+ unicode-range: U+0000-024F, U+1E00-1EFF, U+2000-20CF;
165
+ }
166
+
167
+ @font-face {
168
+ font-display: swap;
169
+ font-family: 'UNBangla';
170
+ font-style: normal;
171
+ font-weight: 100 300;
172
+ src: url('./fonts/UNBangla-Thin.woff2') format('woff2');
173
+ }
174
+
175
+ @font-face {
176
+ font-display: swap;
177
+ font-family: 'UNBangla';
178
+ font-style: italic;
179
+ font-weight: 100 300;
180
+ src: url('./fonts/UNBangla-ThinItalic.woff2') format('woff2');
181
+ }
182
+
183
+ @font-face {
184
+ font-display: swap;
185
+ font-family: 'UNBangla';
186
+ font-style: normal;
187
+ font-weight: 400;
188
+ src: url('./fonts/UNBangla-Regular.woff2') format('woff2');
189
+ }
190
+
191
+ @font-face {
192
+ font-display: swap;
193
+ font-family: 'UNBangla';
194
+ font-style: italic;
195
+ font-weight: 400;
196
+ src: url('./fonts/UNBangla-Italic.woff2') format('woff2');
197
+ }
198
+
199
+ @font-face {
200
+ font-display: swap;
201
+ font-family: 'UNBangla';
202
+ font-style: normal;
203
+ font-weight: 500 900;
204
+ src: url('./fonts/UNBangla-Bold.woff2') format('woff2');
205
+ }
206
+
207
+ @font-face {
208
+ font-display: swap;
209
+ font-family: 'UNBangla';
210
+ font-style: italic;
211
+ font-weight: 500 900;
212
+ src: url('./fonts/UNBangla-BoldItalic.woff2') format('woff2');
213
+ }
@@ -0,0 +1,3 @@
1
+ @import '@undp/design-system-react/style.css';
2
+ @import 'tailwindcss';
3
+ @config '../../tailwind.config.js';
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -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.mjs", "src", "tailwind.config.js"],
28
+ "references": [{ "path": "./tsconfig.node.json" }]
29
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "allowSyntheticDefaultImports": true
7
+ },
8
+ "include": ["vite.config.ts"]
9
+ }
@@ -0,0 +1,58 @@
1
+ import path from 'path';
2
+
3
+ import { defineConfig } from 'vite';
4
+ import react from '@vitejs/plugin-react';
5
+ import eslint from '@nabla/vite-plugin-eslint';
6
+ import { visualizer } from 'rollup-plugin-visualizer';
7
+ import postcssNested from 'postcss-nested';
8
+ import tailwindcss from '@tailwindcss/postcss';
9
+ import { viteStaticCopy } from 'vite-plugin-static-copy';
10
+
11
+ export default defineConfig({
12
+ plugins: [
13
+ react({
14
+ babel: {
15
+ plugins: ['babel-plugin-react-compiler'],
16
+ },
17
+ }),
18
+ eslint(),
19
+ visualizer({ filename: 'stats.html', open: true }),
20
+ viteStaticCopy({
21
+ targets: [{ src: 'staticwebapp.config.json', dest: '' }],
22
+ }),
23
+ ],
24
+ css: {
25
+ postcss: {
26
+ plugins: [
27
+ postcssNested(),
28
+ tailwindcss(),
29
+ ],
30
+ },
31
+ },
32
+ build: {
33
+ manifest: true,
34
+ cssCodeSplit: false,
35
+ rollupOptions: {
36
+ output: {
37
+ manualChunks(id) {
38
+ if (id.includes('node_modules/react')) return 'react';
39
+ if (id.includes('@undp/design-system-react')) return 'undp';
40
+ if (id.includes('@undp/data-viz')) return 'undp';
41
+ },
42
+ chunkFileNames: '[name]-[hash].js',
43
+ assetFileNames: '[name].[ext]',
44
+ entryFileNames: '[name].js',
45
+ },
46
+ treeshake: true,
47
+ },
48
+ },
49
+ server: {
50
+ cors: {
51
+ origin: '*',
52
+ methods: ['GET'],
53
+ preflightContinue: false,
54
+ optionsSuccessStatus: 204,
55
+ },
56
+ },
57
+ resolve: { alias: { '@': path.resolve(__dirname, './src') } },
58
+ });
@@ -0,0 +1,80 @@
1
+ This is a React + TypeScript + Vite project powered by Tailwind CSS, and the UNDP Design System, bootstrapped with [@undp/create-app](https://www.npmjs.com/package/@undp/create-app).
2
+
3
+ It includes:
4
+ * React 19.x with React compiler
5
+ * UNDP Design System
6
+ * Data fetching with [TanStack Query](https://tanstack.com/query)
7
+ * TailwindCSS
8
+ * Code linting and formatting via ESLint and Prettier
9
+
10
+ ## 🧩 Installation
11
+
12
+ This project uses `npm`.
13
+
14
+ 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/).
15
+
16
+ To install the project, simply run `npm install` in the project folder in the terminal on Mac or Command Prompt on Windows.
17
+
18
+ ## πŸš€ Local Development
19
+
20
+ To start the project locally:
21
+
22
+ ```bash
23
+ npm run dev
24
+ ```
25
+
26
+ This is run the app in development mode. Open [http://localhost:5173/](http://localhost:5173/) to view it in the browser.
27
+
28
+ The page will reload if you make edits. You will also see any lint errors in the console.
29
+
30
+ ## πŸ“œ Available Scripts
31
+
32
+ - `npm run dev`: Executes `vite` and start the local server for local deployment.
33
+ - `npm run build`: Executes `tsc && vite build` and builds the app for production and deployment.
34
+ - `npm run preview`: Executes `vite preview` and serves the static build output (from vite build) locally.
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 `npx eslint --fix && npx prettier . --write` and resolve all the linting and prettier errors.
37
+
38
+ ## 🧰 Tooling Setup
39
+
40
+ This project uses ESLint integrated with Prettier to automatically format and lint your code.
41
+
42
+ If you’re using Visual Studio Code, install:
43
+ * [ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
44
+ * [Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
45
+
46
+ Your editor should now show linting errors and automatically fix issues where possible.
47
+
48
+ More info: [ESLint Integrations](http://eslint.org/docs/user-guide/integrations)
49
+
50
+ ## 🎨 Styling
51
+
52
+ This project uses [Tailwind CSS](https://tailwindcss.com/) for styling and and includes pre-configured design tokens from the UNDP Design System.
53
+
54
+ ## πŸ” Data Fetching
55
+
56
+ Data fetching is powered by [TanStack Query](https://tanstack.com/query) for efficient, declarative data fetching and caching.
57
+
58
+ ## 🌐 Embedding the Visualization
59
+
60
+ To embed the visualization on an external page, include:
61
+
62
+ **HTML Placeholder**
63
+
64
+ ```html
65
+ <div id="root"></div>
66
+ ```
67
+
68
+ **Required `<script>` and `<link>` tags**
69
+
70
+ ```
71
+ <link rel="dns-prefetch" href="{{Visualization URL}}">
72
+ <script defer="defer" type="module" src="{{Visualization URL}}/index.js"></script>
73
+ <link rel="modulepreload" crossorigin href="{{Visualization URL}}/react-{{hash}}.js">
74
+ <link rel="modulepreload" crossorigin href="{{Visualization URL}}/undp-{{hash}}.js">
75
+ <link rel="stylesheet" href="{{Visualization URL}}/style.css"></link>
76
+ ```
77
+
78
+ ## πŸ“¬ Contact us
79
+
80
+ For questions or feedback, contact us at [data@undp.org](mailto:data@undp.org).