@digigov/ui 0.11.0 → 0.12.2

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 (661) hide show
  1. package/.eslintrc.js +4 -0
  2. package/.prettierrc.js +3 -0
  3. package/.rush/temp/package-deps_build.json +176 -0
  4. package/.rush/temp/shrinkwrap-deps.json +278 -0
  5. package/CHANGELOG.json +796 -0
  6. package/CHANGELOG.md +22 -1
  7. package/docs/components.mdx +1 -0
  8. package/docs/create-a-new-service.mdx +93 -0
  9. package/docs/create-common-page-layout.mdx +205 -0
  10. package/docs/create-static-page.mdx +179 -0
  11. package/docs/edit-start-page.mdx +143 -0
  12. package/docs/index.mdx +66 -0
  13. package/docs/introduction.mdx +34 -0
  14. package/package.json +31 -8
  15. package/src/api/APIErrors.tsx +44 -0
  16. package/src/api/APIProvider.tsx +27 -0
  17. package/src/api/fetchAPI.ts +45 -0
  18. package/src/api/index.spec.tsx +419 -0
  19. package/{esm/api/index.js → src/api/index.tsx} +6 -3
  20. package/{api → src/api}/introduction.md +0 -0
  21. package/src/api/useResource.tsx +96 -0
  22. package/src/api/useResourceAction.tsx +80 -0
  23. package/src/api/useResourceQuery.tsx +177 -0
  24. package/src/api/utils.tsx +156 -0
  25. package/src/app/App.tsx +33 -0
  26. package/{app/Confirmation/index.d.ts → src/app/Confirmation/index.tsx} +0 -0
  27. package/{app/Footer/index.d.ts → src/app/Footer/index.tsx} +0 -0
  28. package/{es/app/Header/HeaderLogo.js → src/app/Header/HeaderLogo.tsx} +9 -7
  29. package/src/app/Header/HeaderSection.tsx +13 -0
  30. package/src/app/Header/HeaderTitle.tsx +24 -0
  31. package/{app → src/app}/Header/__snapshots__/index.spec.tsx.snap +0 -0
  32. package/{app → src/app}/Header/index.mdx +0 -0
  33. package/src/app/Header/index.spec.tsx +32 -0
  34. package/{esm/app/Header/index.js → src/app/Header/index.tsx} +10 -4
  35. package/src/app/NotFound/index.tsx +21 -0
  36. package/src/app/OutdatedBrowserBanner.tsx +37 -0
  37. package/src/app/PageTitle.tsx +70 -0
  38. package/{app → src/app}/QrCodeScanner/__snapshots__/index.spec.tsx.snap +0 -0
  39. package/{app → src/app}/QrCodeScanner/index.mdx +0 -0
  40. package/src/app/QrCodeScanner/index.spec.tsx +19 -0
  41. package/src/app/QrCodeScanner/index.tsx +90 -0
  42. package/src/app/i18n.tsx +44 -0
  43. package/{app/index.d.ts → src/app/index.ts} +0 -0
  44. package/{core → src/core}/Accordion/__snapshots__/index.spec.tsx.snap +0 -0
  45. package/{core → src/core}/Accordion/index.mdx +0 -0
  46. package/src/core/Accordion/index.spec.tsx +30 -0
  47. package/src/core/Accordion/index.tsx +86 -0
  48. package/{core → src/core}/Blockquote/__snapshots__/index.spec.tsx.snap +0 -0
  49. package/{core → src/core}/Blockquote/index.mdx +0 -0
  50. package/src/core/Blockquote/index.spec.tsx +10 -0
  51. package/{esm/core/Blockquote/index.js → src/core/Blockquote/index.tsx} +9 -7
  52. package/{core/Breadcrumbs/index.d.ts → src/core/Breadcrumbs/index.tsx} +0 -0
  53. package/{esm/core/Button/BackButton.js → src/core/Button/BackButton.tsx} +10 -8
  54. package/src/core/Button/ButtonLink.tsx +20 -0
  55. package/src/core/Button/CallToAction.tsx +31 -0
  56. package/src/core/Button/Icon.tsx +9 -0
  57. package/{core → src/core}/Button/__snapshots__/index.spec.tsx.snap +0 -0
  58. package/{core → src/core}/Button/index.mdx +0 -0
  59. package/src/core/Button/index.spec.tsx +8 -0
  60. package/src/core/Button/index.tsx +46 -0
  61. package/{core/Card/index.d.ts → src/core/Card/index.tsx} +0 -0
  62. package/{core → src/core}/Details/__snapshots__/index.spec.tsx.snap +0 -0
  63. package/{core → src/core}/Details/index.mdx +0 -0
  64. package/src/core/Details/index.spec.tsx +38 -0
  65. package/{core/Details/index.d.ts → src/core/Details/index.tsx} +2 -0
  66. package/src/core/Divider/index.tsx +13 -0
  67. package/{core → src/core}/ErrorSummary/__snapshots__/index.spec.tsx.snap +0 -0
  68. package/{core → src/core}/ErrorSummary/index.mdx +0 -0
  69. package/src/core/ErrorSummary/index.spec.tsx +10 -0
  70. package/{core/ErrorSummary/index.d.ts → src/core/ErrorSummary/index.tsx} +1 -0
  71. package/{core/Hidden/index.d.ts → src/core/Hidden/index.tsx} +0 -0
  72. package/{core → src/core}/Link/__snapshots__/index.spec.tsx.snap +0 -0
  73. package/src/core/Link/index.spec.tsx +22 -0
  74. package/src/core/Link/index.tsx +41 -0
  75. package/{core/List/List.d.ts → src/core/List/List.tsx} +2 -0
  76. package/{core/List/ListItem.d.ts → src/core/List/ListItem.tsx} +2 -0
  77. package/src/core/List/ListItemContent.tsx +32 -0
  78. package/src/core/List/ListItemIcon.tsx +31 -0
  79. package/src/core/List/ListItemText.tsx +23 -0
  80. package/src/core/List/ListItemTitle.tsx +37 -0
  81. package/{core → src/core}/List/__snapshots__/index.spec.tsx.snap +0 -0
  82. package/{core → src/core}/List/index.mdx +0 -0
  83. package/src/core/List/index.spec.tsx +10 -0
  84. package/{core/List/index.d.ts → src/core/List/index.tsx} +0 -0
  85. package/src/core/NavList/NavList.tsx +103 -0
  86. package/src/core/NavList/NavListContext.tsx +85 -0
  87. package/src/core/NavList/NavListItem.tsx +143 -0
  88. package/src/core/NavList/NavListItemBase.tsx +146 -0
  89. package/src/core/NavList/NavListSubMenu.tsx +33 -0
  90. package/{core → src/core}/NavList/__snapshots__/index.spec.tsx.snap +0 -0
  91. package/{core → src/core}/NavList/index.mdx +0 -0
  92. package/src/core/NavList/index.spec.tsx +10 -0
  93. package/{core/NavList/index.d.ts → src/core/NavList/index.tsx} +0 -0
  94. package/{core → src/core}/NotificationBanner/__snapshots__/index.spec.tsx.snap +0 -0
  95. package/{core → src/core}/NotificationBanner/index.mdx +0 -0
  96. package/src/core/NotificationBanner/index.spec.tsx +27 -0
  97. package/src/core/NotificationBanner/index.tsx +52 -0
  98. package/{core → src/core}/ServiceBadge/ServiceBadge.mdx +0 -0
  99. package/{core → src/core}/ServiceBadge/index.mdx +0 -0
  100. package/src/core/ServiceBadge/index.tsx +35 -0
  101. package/{core → src/core}/SummaryList/__snapshots__/index.spec.tsx.snap +0 -0
  102. package/{core → src/core}/SummaryList/index.mdx +0 -0
  103. package/src/core/SummaryList/index.spec.tsx +28 -0
  104. package/{core/SummaryList/index.d.ts → src/core/SummaryList/index.tsx} +2 -0
  105. package/{core/Table/index.d.ts → src/core/Table/index.tsx} +0 -0
  106. package/{core → src/core}/Tabs/index.mdx +0 -0
  107. package/src/core/Tabs/index.tsx +36 -0
  108. package/{core/VisuallyHidden/index.d.ts → src/core/VisuallyHidden/index.tsx} +0 -0
  109. package/{core → src/core}/WarningText/__snapshots__/index.spec.tsx.snap +0 -0
  110. package/{core → src/core}/WarningText/index.mdx +0 -0
  111. package/src/core/WarningText/index.spec.tsx +10 -0
  112. package/{core/WarningText/index.d.ts → src/core/WarningText/index.tsx} +1 -0
  113. package/{core/index.d.ts → src/core/index.ts} +3 -0
  114. package/src/custom.d.ts +8 -0
  115. package/{es → src}/form/inputs/Input/index.mdx +0 -0
  116. package/src/govgr/Footer/Copyright.tsx +64 -0
  117. package/{govgr/Footer/HellenicRepublicLogo.d.ts → src/govgr/Footer/HellenicRepublicLogo.tsx} +1 -0
  118. package/src/govgr/Footer/LicenseCCSA.tsx +24 -0
  119. package/{es → src}/govgr/Footer/index.mdx +0 -0
  120. package/src/govgr/Footer/index.tsx +49 -0
  121. package/{esm/govgr/Footer/logo.js → src/govgr/Footer/logo.ts} +1 -1
  122. package/{esm/govgr/Footer/logos/logo-el.js → src/govgr/Footer/logos/logo-el.ts} +1 -1
  123. package/{esm/govgr/Footer/logos/logo-en.js → src/govgr/Footer/logos/logo-en.ts} +1 -1
  124. package/{es → src}/govgr/Logo/govgr-logo.svg +0 -0
  125. package/{govgr/Logo/index.d.ts → src/govgr/Logo/index.tsx} +2 -0
  126. package/{es/govgr/Logo/logo.js → src/govgr/Logo/logo.ts} +1 -1
  127. package/{govgr/index.d.ts → src/govgr/index.ts} +0 -0
  128. package/src/hooks/useDebounce.ts +50 -0
  129. package/src/hooks/useLatest.ts +12 -0
  130. package/{esm/hooks/useOutdatedBrowserCheck.js → src/hooks/useOutdatedBrowserCheck.ts} +16 -15
  131. package/src/hooks/useSearch.ts +47 -0
  132. package/src/hooks/useTogglableSections.tsx +102 -0
  133. package/{index.d.ts → src/index.ts} +0 -0
  134. package/{es → src}/layouts/Basic/Bottom/index.mdx +0 -0
  135. package/{layouts/Basic/Bottom/index.d.ts → src/layouts/Basic/Bottom/index.tsx} +1 -0
  136. package/{es → src}/layouts/Basic/Content/index.mdx +0 -0
  137. package/src/layouts/Basic/Content/index.tsx +24 -0
  138. package/{es → src}/layouts/Basic/Main/index.mdx +0 -0
  139. package/{layouts/Basic/Main/index.d.ts → src/layouts/Basic/Main/index.tsx} +1 -0
  140. package/{es → src}/layouts/Basic/Masthead/index.mdx +0 -0
  141. package/{layouts/Basic/Masthead/index.d.ts → src/layouts/Basic/Masthead/index.tsx} +2 -0
  142. package/{es → src}/layouts/Basic/Side/index.mdx +0 -0
  143. package/{esm/layouts/Basic/Side/index.js → src/layouts/Basic/Side/index.tsx} +5 -3
  144. package/{es → src}/layouts/Basic/Top/index.mdx +0 -0
  145. package/{es/layouts/Basic/Top/index.js → src/layouts/Basic/Top/index.tsx} +7 -5
  146. package/{es → src}/layouts/Basic/__snapshots__/index.spec.tsx.snap +0 -0
  147. package/{es → src}/layouts/Basic/index.mdx +0 -0
  148. package/src/layouts/Basic/index.spec.tsx +24 -0
  149. package/{layouts/Basic/index.d.ts → src/layouts/Basic/index.tsx} +2 -0
  150. package/{layouts/Grid/index.d.ts → src/layouts/Grid/index.tsx} +0 -0
  151. package/{layouts/index.d.ts → src/layouts/index.ts} +0 -0
  152. package/src/locales/el.ts +60 -0
  153. package/{esm/locales/en.js → src/locales/en.ts} +25 -11
  154. package/{es → src}/router/index.mdx +0 -0
  155. package/src/router/index.tsx +28 -0
  156. package/src/test-utils/delay.ts +9 -0
  157. package/src/test-utils/mountWithTheme.tsx +33 -0
  158. package/{es → src}/themes/govgr.js +33 -29
  159. package/src/themes/grnet.js +109 -0
  160. package/src/themes/index.tsx +38 -0
  161. package/src/typography/Caption.tsx +15 -0
  162. package/src/typography/NormalText.tsx +7 -0
  163. package/src/typography/Paragraph.tsx +9 -0
  164. package/src/typography/Title.tsx +51 -0
  165. package/{es → src}/typography/index.mdx +0 -0
  166. package/{typography/index.d.ts → src/typography/index.ts} +0 -0
  167. package/src/utils/evaluateBrowserVersion.ts +346 -0
  168. package/src/utils/withDeprecation.tsx +97 -0
  169. package/tsconfig.json +18 -0
  170. package/tsconfig.production.json +27 -0
  171. package/ui.build.log +17 -0
  172. package/LICENSE +0 -0
  173. package/api/APIErrors.d.ts +0 -22
  174. package/api/APIErrors.js +0 -117
  175. package/api/APIProvider.d.ts +0 -15
  176. package/api/APIProvider.js +0 -43
  177. package/api/fetchAPI.d.ts +0 -18
  178. package/api/fetchAPI.js +0 -64
  179. package/api/index.d.ts +0 -9
  180. package/api/index.js +0 -104
  181. package/api/index.spec.d.ts +0 -1
  182. package/api/index.spec.js +0 -584
  183. package/api/useResource.d.ts +0 -11
  184. package/api/useResource.js +0 -144
  185. package/api/useResourceAction.d.ts +0 -2
  186. package/api/useResourceAction.js +0 -157
  187. package/api/useResourceQuery.d.ts +0 -18
  188. package/api/useResourceQuery.js +0 -229
  189. package/api/utils.d.ts +0 -6
  190. package/api/utils.js +0 -250
  191. package/app/App.d.ts +0 -14
  192. package/app/App.js +0 -49
  193. package/app/Confirmation/index.js +0 -44
  194. package/app/Footer/index.js +0 -200
  195. package/app/Header/HeaderLogo.d.ts +0 -3
  196. package/app/Header/HeaderLogo.js +0 -30
  197. package/app/Header/HeaderSection.d.ts +0 -5
  198. package/app/Header/HeaderSection.js +0 -20
  199. package/app/Header/HeaderTitle.d.ts +0 -5
  200. package/app/Header/HeaderTitle.js +0 -30
  201. package/app/Header/index.d.ts +0 -11
  202. package/app/Header/index.js +0 -106
  203. package/app/Header/index.spec.d.ts +0 -1
  204. package/app/Header/index.spec.js +0 -45
  205. package/app/NotFound/index.d.ts +0 -3
  206. package/app/NotFound/index.js +0 -29
  207. package/app/OutdatedBrowserBanner.d.ts +0 -2
  208. package/app/OutdatedBrowserBanner.js +0 -41
  209. package/app/PageTitle.d.ts +0 -10
  210. package/app/PageTitle.js +0 -76
  211. package/app/QrCodeScanner/index.d.ts +0 -29
  212. package/app/QrCodeScanner/index.js +0 -85
  213. package/app/QrCodeScanner/index.spec.d.ts +0 -1
  214. package/app/QrCodeScanner/index.spec.js +0 -26
  215. package/app/i18n.d.ts +0 -10
  216. package/app/i18n.js +0 -57
  217. package/app/index.js +0 -70
  218. package/core/Accordion/index.d.ts +0 -21
  219. package/core/Accordion/index.js +0 -127
  220. package/core/Accordion/index.spec.d.ts +0 -1
  221. package/core/Accordion/index.spec.js +0 -19
  222. package/core/Blockquote/index.d.ts +0 -3
  223. package/core/Blockquote/index.js +0 -29
  224. package/core/Blockquote/index.spec.d.ts +0 -1
  225. package/core/Blockquote/index.spec.js +0 -21
  226. package/core/Breadcrumbs/index.js +0 -44
  227. package/core/Button/BackButton.d.ts +0 -3
  228. package/core/Button/BackButton.js +0 -34
  229. package/core/Button/ButtonLink.d.ts +0 -4
  230. package/core/Button/ButtonLink.js +0 -28
  231. package/core/Button/CallToAction.d.ts +0 -7
  232. package/core/Button/CallToAction.js +0 -41
  233. package/core/Button/Icon.d.ts +0 -2
  234. package/core/Button/Icon.js +0 -19
  235. package/core/Button/index.d.ts +0 -15
  236. package/core/Button/index.js +0 -121
  237. package/core/Button/index.spec.d.ts +0 -1
  238. package/core/Button/index.spec.js +0 -21
  239. package/core/Card/index.js +0 -57
  240. package/core/Details/index.js +0 -35
  241. package/core/Details/index.spec.d.ts +0 -1
  242. package/core/Details/index.spec.js +0 -27
  243. package/core/Divider/index.d.ts +0 -5
  244. package/core/Divider/index.js +0 -20
  245. package/core/ErrorSummary/index.js +0 -19
  246. package/core/ErrorSummary/index.spec.d.ts +0 -1
  247. package/core/ErrorSummary/index.spec.js +0 -21
  248. package/core/Hidden/index.js +0 -18
  249. package/core/Link/index.d.ts +0 -12
  250. package/core/Link/index.js +0 -50
  251. package/core/Link/index.spec.d.ts +0 -1
  252. package/core/Link/index.spec.js +0 -31
  253. package/core/List/List.js +0 -19
  254. package/core/List/ListItem.js +0 -19
  255. package/core/List/ListItemContent.d.ts +0 -7
  256. package/core/List/ListItemContent.js +0 -45
  257. package/core/List/ListItemIcon.d.ts +0 -7
  258. package/core/List/ListItemIcon.js +0 -48
  259. package/core/List/ListItemText.d.ts +0 -8
  260. package/core/List/ListItemText.js +0 -36
  261. package/core/List/ListItemTitle.d.ts +0 -10
  262. package/core/List/ListItemTitle.js +0 -44
  263. package/core/List/index.js +0 -96
  264. package/core/List/index.spec.d.ts +0 -1
  265. package/core/List/index.spec.js +0 -21
  266. package/core/NavList/NavList.d.ts +0 -17
  267. package/core/NavList/NavList.js +0 -99
  268. package/core/NavList/NavListContext.d.ts +0 -20
  269. package/core/NavList/NavListContext.js +0 -102
  270. package/core/NavList/NavListItem.d.ts +0 -13
  271. package/core/NavList/NavListItem.js +0 -171
  272. package/core/NavList/NavListItemBase.d.ts +0 -16
  273. package/core/NavList/NavListItemBase.js +0 -161
  274. package/core/NavList/NavListSubMenu.d.ts +0 -8
  275. package/core/NavList/NavListSubMenu.js +0 -52
  276. package/core/NavList/index.js +0 -68
  277. package/core/NavList/index.spec.d.ts +0 -1
  278. package/core/NavList/index.spec.js +0 -21
  279. package/core/NotificationBanner/index.d.ts +0 -18
  280. package/core/NotificationBanner/index.js +0 -78
  281. package/core/NotificationBanner/index.spec.d.ts +0 -1
  282. package/core/NotificationBanner/index.spec.js +0 -32
  283. package/core/ServiceBadge/index.d.ts +0 -9
  284. package/core/ServiceBadge/index.js +0 -36
  285. package/core/SummaryList/index.js +0 -79
  286. package/core/SummaryList/index.spec.d.ts +0 -1
  287. package/core/SummaryList/index.spec.js +0 -19
  288. package/core/Table/index.js +0 -96
  289. package/core/Tabs/index.d.ts +0 -16
  290. package/core/Tabs/index.js +0 -88
  291. package/core/VisuallyHidden/index.js +0 -18
  292. package/core/WarningText/index.js +0 -19
  293. package/core/WarningText/index.spec.d.ts +0 -1
  294. package/core/WarningText/index.spec.js +0 -21
  295. package/core/index.js +0 -199
  296. package/custom.d.js +0 -1
  297. package/es/api/APIErrors.js +0 -96
  298. package/es/api/APIProvider.js +0 -25
  299. package/es/api/fetchAPI.js +0 -49
  300. package/es/api/index.js +0 -13
  301. package/es/api/index.spec.js +0 -546
  302. package/es/api/introduction.md +0 -6
  303. package/es/api/useResource.js +0 -128
  304. package/es/api/useResourceAction.js +0 -141
  305. package/es/api/useResourceQuery.js +0 -208
  306. package/es/api/utils.js +0 -233
  307. package/es/app/App.js +0 -27
  308. package/es/app/Confirmation/index.js +0 -3
  309. package/es/app/Footer/index.js +0 -15
  310. package/es/app/Header/HeaderSection.js +0 -7
  311. package/es/app/Header/HeaderTitle.js +0 -17
  312. package/es/app/Header/__snapshots__/index.spec.tsx.snap +0 -393
  313. package/es/app/Header/index.js +0 -13
  314. package/es/app/Header/index.mdx +0 -50
  315. package/es/app/Header/index.spec.js +0 -32
  316. package/es/app/NotFound/index.js +0 -12
  317. package/es/app/OutdatedBrowserBanner.js +0 -24
  318. package/es/app/PageTitle.js +0 -57
  319. package/es/app/QrCodeScanner/__snapshots__/index.spec.tsx.snap +0 -22
  320. package/es/app/QrCodeScanner/index.js +0 -64
  321. package/es/app/QrCodeScanner/index.mdx +0 -22
  322. package/es/app/QrCodeScanner/index.spec.js +0 -13
  323. package/es/app/i18n.js +0 -36
  324. package/es/app/index.js +0 -5
  325. package/es/core/Accordion/__snapshots__/index.spec.tsx.snap +0 -78
  326. package/es/core/Accordion/index.js +0 -67
  327. package/es/core/Accordion/index.mdx +0 -104
  328. package/es/core/Accordion/index.spec.js +0 -9
  329. package/es/core/Blockquote/__snapshots__/index.spec.tsx.snap +0 -13
  330. package/es/core/Blockquote/index.js +0 -16
  331. package/es/core/Blockquote/index.mdx +0 -61
  332. package/es/core/Blockquote/index.spec.js +0 -9
  333. package/es/core/Breadcrumbs/index.js +0 -3
  334. package/es/core/Button/BackButton.js +0 -21
  335. package/es/core/Button/ButtonLink.js +0 -16
  336. package/es/core/Button/CallToAction.js +0 -27
  337. package/es/core/Button/Icon.js +0 -7
  338. package/es/core/Button/__snapshots__/index.spec.tsx.snap +0 -13
  339. package/es/core/Button/index.js +0 -36
  340. package/es/core/Button/index.mdx +0 -65
  341. package/es/core/Button/index.spec.js +0 -9
  342. package/es/core/Card/index.js +0 -4
  343. package/es/core/Details/__snapshots__/index.spec.tsx.snap +0 -50
  344. package/es/core/Details/index.js +0 -5
  345. package/es/core/Details/index.mdx +0 -34
  346. package/es/core/Details/index.spec.js +0 -17
  347. package/es/core/Divider/index.js +0 -7
  348. package/es/core/ErrorSummary/__snapshots__/index.spec.tsx.snap +0 -322
  349. package/es/core/ErrorSummary/index.js +0 -3
  350. package/es/core/ErrorSummary/index.mdx +0 -61
  351. package/es/core/ErrorSummary/index.spec.js +0 -9
  352. package/es/core/Hidden/index.js +0 -1
  353. package/es/core/Link/__snapshots__/index.spec.tsx.snap +0 -31
  354. package/es/core/Link/index.js +0 -26
  355. package/es/core/Link/index.spec.js +0 -21
  356. package/es/core/List/List.js +0 -3
  357. package/es/core/List/ListItem.js +0 -3
  358. package/es/core/List/ListItemContent.js +0 -27
  359. package/es/core/List/ListItemIcon.js +0 -29
  360. package/es/core/List/ListItemText.js +0 -19
  361. package/es/core/List/ListItemTitle.js +0 -25
  362. package/es/core/List/__snapshots__/index.spec.tsx.snap +0 -322
  363. package/es/core/List/index.js +0 -7
  364. package/es/core/List/index.mdx +0 -40
  365. package/es/core/List/index.spec.js +0 -9
  366. package/es/core/NavList/NavList.js +0 -78
  367. package/es/core/NavList/NavListContext.js +0 -80
  368. package/es/core/NavList/NavListItem.js +0 -141
  369. package/es/core/NavList/NavListItemBase.js +0 -133
  370. package/es/core/NavList/NavListSubMenu.js +0 -27
  371. package/es/core/NavList/__snapshots__/index.spec.tsx.snap +0 -334
  372. package/es/core/NavList/index.js +0 -5
  373. package/es/core/NavList/index.mdx +0 -185
  374. package/es/core/NavList/index.spec.js +0 -9
  375. package/es/core/NotificationBanner/__snapshots__/index.spec.tsx.snap +0 -737
  376. package/es/core/NotificationBanner/index.js +0 -35
  377. package/es/core/NotificationBanner/index.mdx +0 -77
  378. package/es/core/NotificationBanner/index.spec.js +0 -20
  379. package/es/core/ServiceBadge/ServiceBadge.mdx +0 -0
  380. package/es/core/ServiceBadge/index.js +0 -20
  381. package/es/core/ServiceBadge/index.mdx +0 -42
  382. package/es/core/SummaryList/__snapshots__/index.spec.tsx.snap +0 -57
  383. package/es/core/SummaryList/index.js +0 -7
  384. package/es/core/SummaryList/index.mdx +0 -82
  385. package/es/core/SummaryList/index.spec.js +0 -9
  386. package/es/core/Table/index.js +0 -7
  387. package/es/core/Tabs/index.js +0 -37
  388. package/es/core/Tabs/index.mdx +0 -54
  389. package/es/core/VisuallyHidden/index.js +0 -1
  390. package/es/core/WarningText/__snapshots__/index.spec.tsx.snap +0 -336
  391. package/es/core/WarningText/index.js +0 -3
  392. package/es/core/WarningText/index.mdx +0 -46
  393. package/es/core/WarningText/index.spec.js +0 -9
  394. package/es/core/index.js +0 -14
  395. package/es/custom.d.js +0 -0
  396. package/es/govgr/Footer/Copyright.js +0 -37
  397. package/es/govgr/Footer/HellenicRepublicLogo.js +0 -3
  398. package/es/govgr/Footer/LicenseCCSA.js +0 -18
  399. package/es/govgr/Footer/index.js +0 -21
  400. package/es/govgr/Footer/logo.js +0 -1
  401. package/es/govgr/Footer/logos/logo-el.js +0 -1
  402. package/es/govgr/Footer/logos/logo-en.js +0 -1
  403. package/es/govgr/Logo/index.js +0 -3
  404. package/es/govgr/index.js +0 -4
  405. package/es/hooks/useDebounce.js +0 -41
  406. package/es/hooks/useLatest.js +0 -12
  407. package/es/hooks/useOutdatedBrowserCheck.js +0 -46
  408. package/es/hooks/useSearch.js +0 -25
  409. package/es/hooks/useTogglableSections.js +0 -96
  410. package/es/index.js +0 -5
  411. package/es/layouts/Basic/Bottom/index.js +0 -3
  412. package/es/layouts/Basic/Content/index.js +0 -18
  413. package/es/layouts/Basic/Main/index.js +0 -3
  414. package/es/layouts/Basic/Masthead/index.js +0 -4
  415. package/es/layouts/Basic/Side/index.js +0 -7
  416. package/es/layouts/Basic/index.js +0 -8
  417. package/es/layouts/Basic/index.spec.js +0 -10
  418. package/es/layouts/Grid/index.js +0 -1
  419. package/es/layouts/index.js +0 -2
  420. package/es/locales/el.js +0 -45
  421. package/es/locales/en.js +0 -45
  422. package/es/router/index.js +0 -15
  423. package/es/test-utils/delay.js +0 -31
  424. package/es/test-utils/mountWithTheme.js +0 -30
  425. package/es/themes/grnet.js +0 -110
  426. package/es/themes/index.js +0 -2
  427. package/es/typography/Caption.js +0 -7
  428. package/es/typography/NormalText.js +0 -3
  429. package/es/typography/Paragraph.js +0 -2
  430. package/es/typography/Title.js +0 -48
  431. package/es/typography/index.js +0 -8
  432. package/es/utils/evaluateBrowserVersion.js +0 -201
  433. package/es/utils/withDeprecation.js +0 -103
  434. package/esm/api/APIErrors.js +0 -96
  435. package/esm/api/APIProvider.js +0 -25
  436. package/esm/api/fetchAPI.js +0 -49
  437. package/esm/api/index.spec.js +0 -546
  438. package/esm/api/introduction.md +0 -6
  439. package/esm/api/useResource.js +0 -128
  440. package/esm/api/useResourceAction.js +0 -141
  441. package/esm/api/useResourceQuery.js +0 -208
  442. package/esm/api/utils.js +0 -233
  443. package/esm/app/App.js +0 -27
  444. package/esm/app/Confirmation/index.js +0 -3
  445. package/esm/app/Footer/index.js +0 -15
  446. package/esm/app/Header/HeaderLogo.js +0 -17
  447. package/esm/app/Header/HeaderSection.js +0 -7
  448. package/esm/app/Header/HeaderTitle.js +0 -17
  449. package/esm/app/Header/__snapshots__/index.spec.tsx.snap +0 -393
  450. package/esm/app/Header/index.mdx +0 -50
  451. package/esm/app/Header/index.spec.js +0 -32
  452. package/esm/app/NotFound/index.js +0 -12
  453. package/esm/app/OutdatedBrowserBanner.js +0 -24
  454. package/esm/app/PageTitle.js +0 -57
  455. package/esm/app/QrCodeScanner/__snapshots__/index.spec.tsx.snap +0 -22
  456. package/esm/app/QrCodeScanner/index.js +0 -64
  457. package/esm/app/QrCodeScanner/index.mdx +0 -22
  458. package/esm/app/QrCodeScanner/index.spec.js +0 -13
  459. package/esm/app/i18n.js +0 -36
  460. package/esm/app/index.js +0 -5
  461. package/esm/core/Accordion/__snapshots__/index.spec.tsx.snap +0 -78
  462. package/esm/core/Accordion/index.js +0 -67
  463. package/esm/core/Accordion/index.mdx +0 -104
  464. package/esm/core/Accordion/index.spec.js +0 -9
  465. package/esm/core/Blockquote/__snapshots__/index.spec.tsx.snap +0 -13
  466. package/esm/core/Blockquote/index.mdx +0 -61
  467. package/esm/core/Blockquote/index.spec.js +0 -9
  468. package/esm/core/Breadcrumbs/index.js +0 -3
  469. package/esm/core/Button/ButtonLink.js +0 -16
  470. package/esm/core/Button/CallToAction.js +0 -27
  471. package/esm/core/Button/Icon.js +0 -7
  472. package/esm/core/Button/__snapshots__/index.spec.tsx.snap +0 -13
  473. package/esm/core/Button/index.js +0 -36
  474. package/esm/core/Button/index.mdx +0 -65
  475. package/esm/core/Button/index.spec.js +0 -9
  476. package/esm/core/Card/index.js +0 -4
  477. package/esm/core/Details/__snapshots__/index.spec.tsx.snap +0 -50
  478. package/esm/core/Details/index.js +0 -5
  479. package/esm/core/Details/index.mdx +0 -34
  480. package/esm/core/Details/index.spec.js +0 -17
  481. package/esm/core/Divider/index.js +0 -7
  482. package/esm/core/ErrorSummary/__snapshots__/index.spec.tsx.snap +0 -322
  483. package/esm/core/ErrorSummary/index.js +0 -3
  484. package/esm/core/ErrorSummary/index.mdx +0 -61
  485. package/esm/core/ErrorSummary/index.spec.js +0 -9
  486. package/esm/core/Hidden/index.js +0 -1
  487. package/esm/core/Link/__snapshots__/index.spec.tsx.snap +0 -31
  488. package/esm/core/Link/index.js +0 -26
  489. package/esm/core/Link/index.spec.js +0 -21
  490. package/esm/core/List/List.js +0 -3
  491. package/esm/core/List/ListItem.js +0 -3
  492. package/esm/core/List/ListItemContent.js +0 -27
  493. package/esm/core/List/ListItemIcon.js +0 -29
  494. package/esm/core/List/ListItemText.js +0 -19
  495. package/esm/core/List/ListItemTitle.js +0 -25
  496. package/esm/core/List/__snapshots__/index.spec.tsx.snap +0 -322
  497. package/esm/core/List/index.js +0 -7
  498. package/esm/core/List/index.mdx +0 -40
  499. package/esm/core/List/index.spec.js +0 -9
  500. package/esm/core/NavList/NavList.js +0 -78
  501. package/esm/core/NavList/NavListContext.js +0 -80
  502. package/esm/core/NavList/NavListItem.js +0 -141
  503. package/esm/core/NavList/NavListItemBase.js +0 -133
  504. package/esm/core/NavList/NavListSubMenu.js +0 -27
  505. package/esm/core/NavList/__snapshots__/index.spec.tsx.snap +0 -334
  506. package/esm/core/NavList/index.js +0 -5
  507. package/esm/core/NavList/index.mdx +0 -185
  508. package/esm/core/NavList/index.spec.js +0 -9
  509. package/esm/core/NotificationBanner/__snapshots__/index.spec.tsx.snap +0 -737
  510. package/esm/core/NotificationBanner/index.js +0 -35
  511. package/esm/core/NotificationBanner/index.mdx +0 -77
  512. package/esm/core/NotificationBanner/index.spec.js +0 -20
  513. package/esm/core/ServiceBadge/ServiceBadge.mdx +0 -0
  514. package/esm/core/ServiceBadge/index.js +0 -20
  515. package/esm/core/ServiceBadge/index.mdx +0 -42
  516. package/esm/core/SummaryList/__snapshots__/index.spec.tsx.snap +0 -57
  517. package/esm/core/SummaryList/index.js +0 -7
  518. package/esm/core/SummaryList/index.mdx +0 -82
  519. package/esm/core/SummaryList/index.spec.js +0 -9
  520. package/esm/core/Table/index.js +0 -7
  521. package/esm/core/Tabs/index.js +0 -37
  522. package/esm/core/Tabs/index.mdx +0 -54
  523. package/esm/core/VisuallyHidden/index.js +0 -1
  524. package/esm/core/WarningText/__snapshots__/index.spec.tsx.snap +0 -336
  525. package/esm/core/WarningText/index.js +0 -3
  526. package/esm/core/WarningText/index.mdx +0 -46
  527. package/esm/core/WarningText/index.spec.js +0 -9
  528. package/esm/core/index.js +0 -14
  529. package/esm/custom.d.js +0 -0
  530. package/esm/form/inputs/Input/index.mdx +0 -10
  531. package/esm/govgr/Footer/Copyright.js +0 -37
  532. package/esm/govgr/Footer/HellenicRepublicLogo.js +0 -3
  533. package/esm/govgr/Footer/LicenseCCSA.js +0 -18
  534. package/esm/govgr/Footer/index.js +0 -21
  535. package/esm/govgr/Footer/index.mdx +0 -97
  536. package/esm/govgr/Logo/govgr-logo.svg +0 -1
  537. package/esm/govgr/Logo/index.js +0 -3
  538. package/esm/govgr/Logo/logo.js +0 -1
  539. package/esm/govgr/index.js +0 -4
  540. package/esm/hooks/useDebounce.js +0 -41
  541. package/esm/hooks/useLatest.js +0 -12
  542. package/esm/hooks/useSearch.js +0 -25
  543. package/esm/hooks/useTogglableSections.js +0 -96
  544. package/esm/index.js +0 -10
  545. package/esm/layouts/Basic/Bottom/index.js +0 -3
  546. package/esm/layouts/Basic/Bottom/index.mdx +0 -37
  547. package/esm/layouts/Basic/Content/index.js +0 -18
  548. package/esm/layouts/Basic/Content/index.mdx +0 -64
  549. package/esm/layouts/Basic/Main/index.js +0 -3
  550. package/esm/layouts/Basic/Main/index.mdx +0 -64
  551. package/esm/layouts/Basic/Masthead/index.js +0 -4
  552. package/esm/layouts/Basic/Masthead/index.mdx +0 -74
  553. package/esm/layouts/Basic/Side/index.mdx +0 -71
  554. package/esm/layouts/Basic/Top/index.js +0 -11
  555. package/esm/layouts/Basic/Top/index.mdx +0 -74
  556. package/esm/layouts/Basic/__snapshots__/index.spec.tsx.snap +0 -54
  557. package/esm/layouts/Basic/index.js +0 -8
  558. package/esm/layouts/Basic/index.mdx +0 -62
  559. package/esm/layouts/Basic/index.spec.js +0 -10
  560. package/esm/layouts/Grid/index.js +0 -1
  561. package/esm/layouts/index.js +0 -2
  562. package/esm/locales/el.js +0 -45
  563. package/esm/router/index.js +0 -15
  564. package/esm/router/index.mdx +0 -40
  565. package/esm/test-utils/delay.js +0 -31
  566. package/esm/test-utils/mountWithTheme.js +0 -30
  567. package/esm/themes/govgr.js +0 -79
  568. package/esm/themes/grnet.js +0 -110
  569. package/esm/themes/index.js +0 -2
  570. package/esm/typography/Caption.js +0 -7
  571. package/esm/typography/NormalText.js +0 -3
  572. package/esm/typography/Paragraph.js +0 -2
  573. package/esm/typography/Title.js +0 -48
  574. package/esm/typography/index.js +0 -8
  575. package/esm/typography/index.mdx +0 -32
  576. package/esm/utils/evaluateBrowserVersion.js +0 -201
  577. package/esm/utils/withDeprecation.js +0 -103
  578. package/form/inputs/Input/index.mdx +0 -10
  579. package/govgr/Footer/Copyright.d.ts +0 -8
  580. package/govgr/Footer/Copyright.js +0 -52
  581. package/govgr/Footer/HellenicRepublicLogo.js +0 -19
  582. package/govgr/Footer/LicenseCCSA.d.ts +0 -3
  583. package/govgr/Footer/LicenseCCSA.js +0 -33
  584. package/govgr/Footer/index.d.ts +0 -13
  585. package/govgr/Footer/index.js +0 -39
  586. package/govgr/Footer/index.mdx +0 -97
  587. package/govgr/Footer/logo.d.ts +0 -2
  588. package/govgr/Footer/logo.js +0 -8
  589. package/govgr/Footer/logos/logo-el.d.ts +0 -2
  590. package/govgr/Footer/logos/logo-el.js +0 -8
  591. package/govgr/Footer/logos/logo-en.d.ts +0 -2
  592. package/govgr/Footer/logos/logo-en.js +0 -8
  593. package/govgr/Logo/govgr-logo.svg +0 -1
  594. package/govgr/Logo/index.js +0 -19
  595. package/govgr/Logo/logo.d.ts +0 -2
  596. package/govgr/Logo/logo.js +0 -8
  597. package/govgr/index.js +0 -57
  598. package/hooks/useDebounce.d.ts +0 -3
  599. package/hooks/useDebounce.js +0 -63
  600. package/hooks/useLatest.d.ts +0 -3
  601. package/hooks/useLatest.js +0 -26
  602. package/hooks/useOutdatedBrowserCheck.d.ts +0 -2
  603. package/hooks/useOutdatedBrowserCheck.js +0 -60
  604. package/hooks/useSearch.d.ts +0 -4
  605. package/hooks/useSearch.js +0 -40
  606. package/hooks/useTogglableSections.d.ts +0 -18
  607. package/hooks/useTogglableSections.js +0 -108
  608. package/index.js +0 -70
  609. package/layouts/Basic/Bottom/index.js +0 -19
  610. package/layouts/Basic/Bottom/index.mdx +0 -37
  611. package/layouts/Basic/Content/index.d.ts +0 -5
  612. package/layouts/Basic/Content/index.js +0 -31
  613. package/layouts/Basic/Content/index.mdx +0 -64
  614. package/layouts/Basic/Main/index.js +0 -19
  615. package/layouts/Basic/Main/index.mdx +0 -64
  616. package/layouts/Basic/Masthead/index.js +0 -27
  617. package/layouts/Basic/Masthead/index.mdx +0 -74
  618. package/layouts/Basic/Side/index.d.ts +0 -3
  619. package/layouts/Basic/Side/index.js +0 -20
  620. package/layouts/Basic/Side/index.mdx +0 -71
  621. package/layouts/Basic/Top/index.d.ts +0 -3
  622. package/layouts/Basic/Top/index.js +0 -24
  623. package/layouts/Basic/Top/index.mdx +0 -74
  624. package/layouts/Basic/__snapshots__/index.spec.tsx.snap +0 -54
  625. package/layouts/Basic/index.js +0 -97
  626. package/layouts/Basic/index.mdx +0 -62
  627. package/layouts/Basic/index.spec.d.ts +0 -1
  628. package/layouts/Basic/index.spec.js +0 -20
  629. package/layouts/Grid/index.js +0 -18
  630. package/layouts/index.js +0 -34
  631. package/locales/el.d.ts +0 -46
  632. package/locales/el.js +0 -52
  633. package/locales/en.d.ts +0 -46
  634. package/locales/en.js +0 -52
  635. package/router/index.d.ts +0 -9
  636. package/router/index.js +0 -37
  637. package/router/index.mdx +0 -40
  638. package/test-utils/delay.d.ts +0 -2
  639. package/test-utils/delay.js +0 -45
  640. package/test-utils/mountWithTheme.d.ts +0 -3
  641. package/test-utils/mountWithTheme.js +0 -43
  642. package/themes/govgr.d.ts +0 -3
  643. package/themes/govgr.js +0 -89
  644. package/themes/grnet.d.ts +0 -2
  645. package/themes/grnet.js +0 -128
  646. package/themes/index.d.ts +0 -32
  647. package/themes/index.js +0 -19
  648. package/typography/Caption.d.ts +0 -7
  649. package/typography/Caption.js +0 -20
  650. package/typography/NormalText.d.ts +0 -5
  651. package/typography/NormalText.js +0 -19
  652. package/typography/Paragraph.d.ts +0 -6
  653. package/typography/Paragraph.js +0 -13
  654. package/typography/Title.d.ts +0 -9
  655. package/typography/Title.js +0 -63
  656. package/typography/index.js +0 -97
  657. package/typography/index.mdx +0 -32
  658. package/utils/evaluateBrowserVersion.d.ts +0 -15
  659. package/utils/evaluateBrowserVersion.js +0 -216
  660. package/utils/withDeprecation.d.ts +0 -16
  661. package/utils/withDeprecation.js +0 -116
package/docs/index.mdx ADDED
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: DigiGOV UI Toolkit
3
+ order: 0
4
+ ---
5
+
6
+ # DigiGOV UI Toolkit
7
+
8
+ **@digigov UI toolkit** is a set of libraries and tools written in javascript
9
+ which mainly focuses on providing developers with an easy and streamlined way
10
+ to design and develop frontend applications that target the gov.gr ecosystem.
11
+
12
+ The project consists of the following packages,
13
+
14
+ ### @digigov/ui
15
+
16
+ A set of components written in [React](https://reactjs.com) and powered by
17
+ [Material Design](https://material.io) using the exceptional [React Material
18
+ UI toolkit](https://material-ui.com) which implement the [DigiGOV Design
19
+ System](/docs/site/design) guidelines.
20
+
21
+ <hr />
22
+
23
+ ### @digigov/nextjs
24
+
25
+ A small set of utilities to facilitate developing @digigov/ui powered apps
26
+ using [Next.js](https://nextjs.com) framework.
27
+
28
+ <hr />
29
+
30
+ ### @digigov/dev
31
+
32
+ Software package utilities and pre-bundled configurations and scripts for
33
+ day-to-day developer's needs (test, lint, serve).
34
+
35
+ <hr />
36
+
37
+ ## Getting started
38
+
39
+ The simplest way to set up a project using the toolkit, assuming that [node](https://nodejs.org)
40
+ and [yarn](http://yarnpkg.com/) and [npx](https://github.com/npm/npx#install) are already installed and configured on your system, is by using
41
+ the `create-digigov-app` generator,
42
+
43
+ ```bash
44
+ $ npx create-digigov-app my-service
45
+ ```
46
+
47
+ Fill the questions asked and once the dependencies of the project are
48
+ installed (it may take a while) use the following command to start up the
49
+ development server of your new app,
50
+
51
+ ```bash
52
+ $ cd my-server
53
+ $ yarn dev
54
+ ```
55
+
56
+ Your app is now accessible at [http://localhost:3000](http://localhost:3000)
57
+
58
+ ### Next steps
59
+
60
+ - Get familiar with next.js and learn how to set up new pages for your service
61
+ - [Next.js Tutorial](https://nextjs.org/learn/basics/getting-started)
62
+ - [Next.js Docs](https://nextjs.org/docs/getting-started)
63
+ - Learn how to design your service by following the DigiGOV guidelines
64
+ - [DigiGOV Design System](/docs/site/design)
65
+ - Become familiar with the available components
66
+ - [@digigov/ui components](/ui/components)
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: Introduction
3
+ parent: docs/ui
4
+ ---
5
+
6
+ The `@digigov/ui` is a collection of libraries and tools (in short, an SDK -
7
+ Software Development Kit) written in the latest Ecmascript and Typescript
8
+ specifications that are developed by the [GRNET](https://www.grnet.gr) Devs.
9
+ Their purpose is to provide software engineers inside GRNET (or in other
10
+ external teams) an easy, battle-tested and scalable way to design and develop
11
+ high quality [gov.gr](https://www.gov.gr) services and web applications.
12
+
13
+ The technologies used includes a plethora of tools, such as
14
+ [node.js](https://nodejs.org/), [React](https://reactjs.org/) and
15
+ [Next](https://nextjs.org/). GRNET Devs team has built-upon those technologies
16
+ but also developed custom software solutions to meet our unique demands and
17
+ specifications.
18
+
19
+ ## Overview of Digigov SDKs
20
+
21
+ Some of the tools and libraries currently used in development are:
22
+
23
+ - **create-digigov-app** - Create a fresh Digigov app with one command
24
+ - **@digigov/ui** - Ready-to-use UI components for the [DigiGOV Design System](/docs/site/design) implemented in [React](https://reactjs.com) and based on
25
+ [Google Material Design Language](https://material.io) and the
26
+ [React Material UI](https://material-ui.com) library
27
+ - **@digigov/auth** - A library that contains React Providers and functions
28
+ for the authentication system of gov.gr services
29
+ - **@digigov/dev** - Software package utilities and pre-bundled configurations
30
+ and scripts for day-to-day developer's needs (test, lint, serve)
31
+ - **@digigov/nextjs** - A small set of utilities to facilitate developing
32
+ @digigov/ui powered apps using [Next.js](https://nextjs.com) framework
33
+
34
+ [Continue in the next section “Create a new service“](/docs/ui/create-a-new-service)
package/package.json CHANGED
@@ -1,11 +1,17 @@
1
1
  {
2
2
  "name": "@digigov/ui",
3
- "version": "0.11.0",
3
+ "version": "0.12.2",
4
4
  "description": "@digigov reusable components toolkit",
5
- "module": "./esm/index.js",
5
+ "module": "index.js",
6
6
  "publishConfig": {
7
7
  "directory": "dist"
8
8
  },
9
+ "scripts": {
10
+ "lint": "digigov lint",
11
+ "test": "digigov test",
12
+ "build": "digigov build --subpackages",
13
+ "prepublish": "digigov build --subpackages"
14
+ },
9
15
  "dependencies": {
10
16
  "google-libphonenumber": "3.2.8",
11
17
  "react-qr-reader": "2.2.1",
@@ -18,10 +24,27 @@
18
24
  "clsx": "1.1.1",
19
25
  "react": "16.14.0",
20
26
  "react-dom": "16.14.0",
21
- "@digigov/react-core": "0.5.5"
27
+ "@digigov/react-core": "0.6.1"
28
+ },
29
+ "devDependencies": {
30
+ "@digigov/cli": "0.5.27",
31
+ "@digigov/cli-lint": "0.5.28",
32
+ "@digigov/cli-build": "0.7.1",
33
+ "@digigov/cli-test": "0.6.0",
34
+ "@testing-library/react": "11.2.1",
35
+ "@testing-library/react-hooks": "3.4.2",
36
+ "@types/react-qr-reader": "2.1.2",
37
+ "typescript": "4.2.3",
38
+ "@types/node": "14.14.9",
39
+ "@types/react": "16.9.56",
40
+ "@types/react-dom": "16.9.9",
41
+ "@types/enzyme": "3.10.8",
42
+ "@types/enzyme-adapter-react-16": "1.0.5",
43
+ "@types/jest": "26.0.15",
44
+ "enzyme": "3.11.0",
45
+ "fetch-mock": "9.3.1",
46
+ "eslint": "7.24.0",
47
+ "prettier": "2.2.1"
22
48
  },
23
- "gitHead": "c903a46306f77f55ad7fc4d2e274006f39a6c871",
24
- "private": false,
25
- "main": "./index.js",
26
- "typings": "./index.d.ts"
27
- }
49
+ "gitHead": "c903a46306f77f55ad7fc4d2e274006f39a6c871"
50
+ }
@@ -0,0 +1,44 @@
1
+ import React from 'react';
2
+ export class APIErrors extends React.Component<{
3
+ fallback: React.ElementType<any>;
4
+ }> {
5
+ state = { hasError: false, error: null };
6
+ static getDerivedStateFromError(error: Error): object {
7
+ return {
8
+ hasError: true,
9
+ error,
10
+ };
11
+ }
12
+
13
+ render(): React.ReactNode {
14
+ if (this.state.hasError) {
15
+ const Comp = this.props.fallback;
16
+ return <Comp error={this.state.error} />;
17
+ }
18
+ return this.props.children;
19
+ }
20
+ }
21
+
22
+ export default APIErrors;
23
+
24
+ /*
25
+ The type of `error` variable of the `useRequest` hook result.
26
+
27
+ We expect a request to fail for at least one reason (`error` property). In
28
+ case of multiple errors, developers may use `errors` property to construct
29
+ a more verbose error report.
30
+ */
31
+ export class APIError extends Error {
32
+ error: null | { data: { invalid_fields: Record<string, any>[] } } = null;
33
+ errors = null;
34
+ status = 200;
35
+
36
+ constructor(errors, status, ...args) {
37
+ super(...args);
38
+ this.name = 'APIError';
39
+ Error.captureStackTrace(this, APIError);
40
+ this.error = (errors && errors.length && errors[0]) || errors;
41
+ this.errors = errors;
42
+ this.status = status;
43
+ }
44
+ }
@@ -0,0 +1,27 @@
1
+ import React, { createContext, useMemo } from 'react';
2
+ export interface APIConfig {
3
+ baseURL: string;
4
+ }
5
+ export interface APIContextData {
6
+ config: APIConfig;
7
+ token: string | null | undefined;
8
+ }
9
+ export interface APIProviderProps {
10
+ token: string | null | undefined;
11
+ children: React.ReactNode;
12
+ config: APIConfig;
13
+ }
14
+ export const APIContext = createContext<APIContextData>({
15
+ config: {
16
+ baseURL: '',
17
+ },
18
+ token: null,
19
+ });
20
+ export const APIProvider: React.FC<APIProviderProps> = ({
21
+ token = null,
22
+ config = { baseURL: '' },
23
+ children,
24
+ }) => {
25
+ const data = useMemo(() => ({ token, config }), [token, config]);
26
+ return <APIContext.Provider value={data}>{children}</APIContext.Provider>;
27
+ };
@@ -0,0 +1,45 @@
1
+ import { APIContextData } from '@digigov/ui/api/APIProvider';
2
+ import { getArgs, processResponse } from '@digigov/ui/api/utils';
3
+
4
+ export interface ProcessedResponse {
5
+ data?: any;
6
+ status: number;
7
+ error?: any;
8
+ }
9
+
10
+ export interface FetchAPIProps {
11
+ resource: string;
12
+ options?: {
13
+ query?: Record<string, any>;
14
+ path?: string;
15
+ method?: string;
16
+ body?: any;
17
+ };
18
+ getAPI?: (...args) => APIContextData;
19
+ }
20
+
21
+ export async function fetchAPI(
22
+ resource: string,
23
+ { query = {}, path = '', method = 'GET', body = null }: any,
24
+ apiConfig: any
25
+ ): Promise<ProcessedResponse> {
26
+ const {
27
+ config: { baseURL },
28
+ token,
29
+ } = apiConfig;
30
+ const [url, options] = getArgs(
31
+ resource,
32
+ path,
33
+ query,
34
+ body,
35
+ null,
36
+ method,
37
+ baseURL,
38
+ token
39
+ );
40
+ const response = await window.fetch(url, options);
41
+ const { data, error, status } = await processResponse(response);
42
+ return { data, error, status };
43
+ }
44
+
45
+ export default fetchAPI;
@@ -0,0 +1,419 @@
1
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
+ import React, { FunctionComponent, Suspense, useEffect } from 'react';
3
+ import { render, fireEvent } from '@testing-library/react';
4
+ import fetchMock from 'fetch-mock';
5
+ import {
6
+ APIProvider,
7
+ useResource,
8
+ useResourceAction,
9
+ useResourceMany,
10
+ APIContextData,
11
+ APIErrors,
12
+ } from '@digigov/ui/api/index';
13
+ import delay from '@digigov/ui/test-utils/delay';
14
+ import fetchAPI from '@digigov/ui/api/fetchAPI';
15
+ import 'whatwg-fetch';
16
+
17
+ const HandleError = ({ error }) => {
18
+ if (error.name === 'APIError') {
19
+ error = error.error;
20
+ if (error.status === 404) {
21
+ return <>Not found</>;
22
+ }
23
+ }
24
+ // TODO: render the <SomethingWentWrong /> page here
25
+ return <span>something went wrong</span>;
26
+ };
27
+
28
+ const makeWrapper = ({ config, token }: APIContextData): FunctionComponent => ({
29
+ children,
30
+ }: {
31
+ children: React.ReactNode;
32
+ }): any => (
33
+ <Suspense fallback={'Loading'}>
34
+ <APIErrors fallback={HandleError}>
35
+ <APIProvider config={config} token={token}>
36
+ {children}
37
+ </APIProvider>
38
+ </APIErrors>
39
+ </Suspense>
40
+ );
41
+ const BASE_URL = 'http://test/api';
42
+ const TOKEN = 'mytoken';
43
+ const DELAY = 100;
44
+ const buildMockOptions = ({
45
+ resource,
46
+ method = 'GET',
47
+ authenticated = true,
48
+ query = {},
49
+ response,
50
+ delay = DELAY / 2,
51
+ }): [any, any, any] => {
52
+ const headers: any = {
53
+ 'content-type': 'application/json',
54
+ };
55
+ const options = { delay };
56
+ if (authenticated) {
57
+ headers.Authorization = `Token ${TOKEN}`;
58
+ }
59
+ const params = new URLSearchParams(query).toString();
60
+ return [
61
+ `${BASE_URL}/${resource}${params && `?${params}`}`,
62
+ response,
63
+ {
64
+ headers,
65
+ method,
66
+ ...options,
67
+ },
68
+ ];
69
+ };
70
+
71
+ const getAPI = () => {
72
+ return {
73
+ config: {
74
+ baseURL: BASE_URL,
75
+ },
76
+ token: TOKEN,
77
+ };
78
+ };
79
+
80
+ const wrapper = makeWrapper(getAPI());
81
+
82
+ describe('fetchAPI', () => {
83
+ fetchMock.config.overwriteRoutes = true;
84
+ afterAll(() => {
85
+ fetchMock.restore();
86
+ });
87
+ beforeEach(fetchMock.resetBehavior);
88
+ beforeEach(fetchMock.resetHistory);
89
+ it('fetchAPI gets', async () => {
90
+ const resource = 'resource';
91
+ const path = 'some_id';
92
+ fetchMock.mock(
93
+ ...buildMockOptions({
94
+ resource: `${resource}/${path}/`,
95
+ response: { value: 'SWR' },
96
+ })
97
+ );
98
+ const { data } = await fetchAPI(resource, { path }, getAPI());
99
+ expect(data.value).toBe('SWR');
100
+ expect(fetchMock.calls()).toHaveLength(1);
101
+ });
102
+ });
103
+
104
+ describe('useResource', () => {
105
+ fetchMock.config.overwriteRoutes = true;
106
+ afterAll(() => {
107
+ fetchMock.restore();
108
+ });
109
+ beforeEach(fetchMock.resetBehavior);
110
+ beforeEach(fetchMock.resetHistory);
111
+ it('useResource should return data', async () => {
112
+ const resource = 'resource';
113
+ function Page() {
114
+ const { data } = useResource(resource);
115
+ return <div>hello, {data?.value}</div>;
116
+ }
117
+ fetchMock.mock(
118
+ ...buildMockOptions({ resource, response: { value: 'SWR' } })
119
+ );
120
+ const { container } = render(<Page />, {
121
+ wrapper,
122
+ });
123
+
124
+ expect(container.firstChild).not.toBe(null);
125
+
126
+ if (container.firstChild) {
127
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
128
+ `"hello, "`
129
+ );
130
+ await delay(DELAY);
131
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
132
+ `"hello, SWR"`
133
+ );
134
+ }
135
+
136
+ expect(fetchMock.calls()).toHaveLength(1);
137
+ });
138
+
139
+ it('should run duplicate request once', async () => {
140
+ const resource = 'dupliresource';
141
+ function Page() {
142
+ useResource(resource);
143
+ const { data: duplData } = useResource(resource);
144
+ return <div>hello, {duplData?.value}</div>;
145
+ }
146
+
147
+ fetchMock.mock(
148
+ ...buildMockOptions({ resource, response: { value: 'myvalue' } })
149
+ );
150
+ const { container } = render(<Page />, {
151
+ wrapper,
152
+ });
153
+ expect(container.firstChild).not.toBe(null);
154
+
155
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
156
+ `"hello, "`
157
+ );
158
+ await delay(DELAY);
159
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
160
+ `"hello, myvalue"`
161
+ );
162
+
163
+ expect(fetchMock.calls()).toHaveLength(1);
164
+ });
165
+ });
166
+
167
+ describe('useResourceAction', () => {
168
+ fetchMock.config.overwriteRoutes = true;
169
+ afterAll(() => {
170
+ fetchMock.restore();
171
+ });
172
+ beforeEach(fetchMock.resetBehavior);
173
+ beforeEach(fetchMock.resetHistory);
174
+
175
+ it('useResourceAction should return result ', async () => {
176
+ const resource = 'resourceaction';
177
+ function Page() {
178
+ const { data, fetch } = useResourceAction(
179
+ resource,
180
+ undefined,
181
+ 'POST',
182
+ {
183
+ some: 'data',
184
+ },
185
+ undefined
186
+ );
187
+ useEffect(() => {
188
+ fetch();
189
+ }, []);
190
+ return <div>hello, {data && data.value}</div>;
191
+ }
192
+
193
+ fetchMock.mock(
194
+ ...buildMockOptions({
195
+ resource,
196
+ response: { value: 'myvalue' },
197
+ method: 'POST',
198
+ })
199
+ );
200
+
201
+ const { container } = render(<Page />, {
202
+ wrapper,
203
+ });
204
+ expect(container.firstChild).not.toBe(null);
205
+
206
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
207
+ `"hello, "`
208
+ );
209
+ await delay(DELAY * 2);
210
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
211
+ `"hello, myvalue"`
212
+ );
213
+
214
+ expect(fetchMock.calls()).toHaveLength(1);
215
+ });
216
+
217
+ it('useResourceAction should be invalidated and run twice', async () => {
218
+ const resource = 'resourceactiondouble';
219
+ function Page() {
220
+ const { data, fetch, invalidate } = useResourceAction(
221
+ resource,
222
+ undefined,
223
+ 'POST',
224
+ {
225
+ some: 'data',
226
+ },
227
+ undefined
228
+ );
229
+ useEffect(() => {
230
+ fetch();
231
+ }, []);
232
+ useEffect(() => {
233
+ setTimeout(() => {
234
+ invalidate();
235
+ }, DELAY * 2);
236
+ setTimeout(() => {
237
+ fetch();
238
+ }, DELAY * 3);
239
+ }, []);
240
+ return <div>hello, {data && data.value}</div>;
241
+ }
242
+
243
+ fetchMock.mock(
244
+ ...buildMockOptions({
245
+ resource,
246
+ response: { value: 'myvalue' },
247
+ method: 'POST',
248
+ })
249
+ );
250
+ const { container } = render(<Page />, {
251
+ wrapper,
252
+ });
253
+ expect(container.firstChild).not.toBe(null);
254
+
255
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
256
+ `"hello, "`
257
+ );
258
+ await delay(DELAY);
259
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
260
+ `"hello, myvalue"`
261
+ );
262
+ await delay(DELAY);
263
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
264
+ `"hello, "`
265
+ );
266
+ await delay(DELAY * 2);
267
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
268
+ `"hello, myvalue"`
269
+ );
270
+
271
+ expect(fetchMock.calls()).toHaveLength(2);
272
+ });
273
+ });
274
+
275
+ describe('useResourceMany', () => {
276
+ fetchMock.config.overwriteRoutes = true;
277
+ afterAll(() => {
278
+ fetchMock.restore();
279
+ });
280
+ beforeEach(fetchMock.resetBehavior);
281
+ beforeEach(fetchMock.resetHistory);
282
+
283
+ //check this test again (loading/hello)
284
+
285
+ it('useResourceMany should return data', async () => {
286
+ const resource = 'resourceMany';
287
+ function Page() {
288
+ const { data } = useResourceMany(resource);
289
+ return <div>hello, {data && data.join('')}</div>;
290
+ }
291
+ fetchMock.mock(
292
+ ...buildMockOptions({
293
+ resource,
294
+ query: { offset: 0, limit: 30 },
295
+ response: {
296
+ data: ['S', 'W', 'R'],
297
+ meta: {
298
+ total: 1,
299
+ count: 3,
300
+ },
301
+ },
302
+ })
303
+ );
304
+ const { container } = render(<Page />, {
305
+ wrapper,
306
+ });
307
+
308
+ expect(container.firstChild).not.toBe(null);
309
+
310
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
311
+ `"Loading"`
312
+ );
313
+ await delay(DELAY * 2);
314
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
315
+ `"hello, SWR"`
316
+ );
317
+ expect(fetchMock.calls()).toHaveLength(1);
318
+ });
319
+
320
+ it('useResourceMany should handle hasNext, hasPrevious', async () => {
321
+ const resource = 'resourceManyhasNext';
322
+ function Page() {
323
+ const { hasNext, hasPrevious } = useResourceMany(resource);
324
+ return (
325
+ <div>
326
+ {hasNext ? '' : 'no'} next,{hasPrevious ? '' : 'no'} previous
327
+ </div>
328
+ );
329
+ }
330
+ fetchMock.mock(
331
+ ...buildMockOptions({
332
+ resource,
333
+ query: { offset: 0, limit: 30 },
334
+ response: {
335
+ data: ['S', 'W', 'R'],
336
+ meta: {
337
+ total: 1,
338
+ count: 3,
339
+ },
340
+ },
341
+ })
342
+ );
343
+ const { container } = render(<Page />, {
344
+ wrapper,
345
+ });
346
+
347
+ expect(container.firstChild).not.toBe(null);
348
+
349
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
350
+ `"Loading"`
351
+ );
352
+ await delay(DELAY);
353
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
354
+ `"no next,no previous"`
355
+ );
356
+ expect(fetchMock.calls()).toHaveLength(1);
357
+ });
358
+
359
+ it('useResourceMany should handle setPage with custom limit option', async () => {
360
+ const resource = 'resourceManysetpage';
361
+ function Page() {
362
+ const { data, setPage, page } = useResourceMany(resource, { limit: 10 });
363
+ const nextPage = () => {
364
+ setPage(page + 1);
365
+ };
366
+ return (
367
+ <div>
368
+ hello, {data.join('')}
369
+ <button onClick={nextPage}>next</button>
370
+ </div>
371
+ );
372
+ }
373
+ fetchMock.mock(
374
+ ...buildMockOptions({
375
+ resource,
376
+ query: { offset: 0, limit: 10 },
377
+ response: {
378
+ data: ['S', 'W', 'R'],
379
+ meta: {
380
+ total: 3,
381
+ count: 100,
382
+ },
383
+ },
384
+ })
385
+ );
386
+ fetchMock.mock(
387
+ ...buildMockOptions({
388
+ resource,
389
+ query: { offset: 10, limit: 10 },
390
+ response: {
391
+ data: ['R', 'W', 'S'],
392
+ meta: {
393
+ total: 3,
394
+ count: 100,
395
+ },
396
+ },
397
+ })
398
+ );
399
+ const { container, getByText } = render(<Page />, {
400
+ wrapper,
401
+ });
402
+
403
+ expect(container.firstChild).not.toBe(null);
404
+
405
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
406
+ `"Loading"`
407
+ );
408
+ await delay(DELAY);
409
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
410
+ `"hello, SWRnext"`
411
+ );
412
+ fireEvent.click(getByText('next'));
413
+ await delay(DELAY * 2);
414
+ expect(container?.firstChild?.textContent).toMatchInlineSnapshot(
415
+ `"hello, RWSnext"`
416
+ );
417
+ expect(fetchMock.calls()).toHaveLength(2);
418
+ });
419
+ });