qpp-style 0.0.8 → 0.0.10

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 (462) hide show
  1. package/.eslintrc.js +28 -28
  2. package/.husky/pre-commit +5 -0
  3. package/README.md +45 -0
  4. package/components/Accordion/index.jsx +35 -43
  5. package/components/Alert/index.js +53 -0
  6. package/components/Breadcrumb/Breadcrumb.md +28 -0
  7. package/components/Breadcrumb/index.js +69 -11
  8. package/components/Button/index.js +90 -0
  9. package/components/CalloutBox/index.js +109 -0
  10. package/components/Card/index.js +137 -0
  11. package/components/Details/DetailsIcons.js +50 -0
  12. package/components/Details/index.js +53 -0
  13. package/components/Dropdown/index.js +85 -0
  14. package/components/DropdownButton/Menu.js +25 -0
  15. package/components/DropdownButton/MenuButton.js +41 -0
  16. package/components/DropdownButton/MenuItem.js +25 -0
  17. package/components/DropdownButton/MenuItemLink.js +27 -0
  18. package/components/Error/Collapsible.jsx +2 -2
  19. package/components/Footer/FooterUI.jsx +175 -177
  20. package/components/Footer/footer.js +2 -12
  21. package/components/GovBanner/index.js +117 -0
  22. package/components/Header/HeaderAccountMenu.jsx +63 -234
  23. package/components/Header/HeaderCancel.jsx +5 -10
  24. package/components/Header/HeaderContainer.jsx +74 -0
  25. package/components/Header/HeaderLogo.jsx +42 -0
  26. package/components/Header/HeaderMenuButton.js +50 -0
  27. package/components/Header/HeaderMenuItem.jsx +239 -0
  28. package/components/Header/HeaderMenuLink.js +56 -0
  29. package/components/Header/HeaderMenuSignOutButton.js +62 -0
  30. package/components/Header/HeaderMobileButton.js +37 -0
  31. package/components/Header/HeaderUI.jsx +130 -361
  32. package/components/Header/HelpIcon.jsx +32 -0
  33. package/components/Header/ImpersonatorBanner.jsx +81 -0
  34. package/components/Header/default-content.json +158 -87
  35. package/components/Header/header.js +2 -0
  36. package/components/Header/hooks.js +66 -0
  37. package/components/Header/utag-helpers.js +9 -0
  38. package/components/Infotip/Infotip.jsx +6 -10
  39. package/components/Infotip/InfotipContent.jsx +46 -0
  40. package/components/Infotip/InfotipIcon.jsx +3 -3
  41. package/components/Link/index.js +61 -0
  42. package/components/Modal/LegacyModal.jsx +72 -0
  43. package/components/Modal/Modal.jsx +140 -0
  44. package/components/Modal/index.jsx +13 -63
  45. package/components/NotificationBanner/CollapsedView.js +39 -0
  46. package/components/NotificationBanner/ExpandedView.js +45 -0
  47. package/components/NotificationBanner/index.js +219 -30
  48. package/components/Search/index.js +98 -0
  49. package/components/SessionDialog/sessionDialog.js +26 -0
  50. package/components/SessionDialogUI.jsx +34 -26
  51. package/components/SideNav/AnimationGroup/AnimationGroup.jsx +10 -4
  52. package/components/SideNav/Chart/ScoreChart.jsx +81 -109
  53. package/components/SideNav/Chart/__tests__/ScoreChart.test.js +3 -12
  54. package/components/SideNav/Chart/__tests__/__snapshots__/ScoreChart.test.js.snap +144 -35
  55. package/components/SideNav/Chart/index.js +1 -1
  56. package/components/SideNav/Content/LevelOneContent.jsx +146 -258
  57. package/components/SideNav/Content/LevelTwoContent.jsx +6 -4
  58. package/components/SideNav/Content/SelectRole/index.js +77 -0
  59. package/components/SideNav/Content/SelectRole/utils.js +140 -0
  60. package/components/SideNav/Details/PracticeDetails.jsx +4 -0
  61. package/components/SideNav/Links/CmsSwitchLink.jsx +1 -1
  62. package/components/SideNav/Links/NavLinkContainer.jsx +29 -34
  63. package/components/SideNav/Links/NavLinkDrawer.jsx +192 -124
  64. package/components/SideNav/Links/NavLinkInline.jsx +7 -2
  65. package/components/SideNav/Links/NavLinkToggle.jsx +1 -1
  66. package/components/SideNav/SideNav.md +28 -27
  67. package/components/SideNav/UI/SideNavUI.jsx +198 -268
  68. package/components/SideNav/UI/default-content.json +117 -0
  69. package/components/SideNav/helpers.js +316 -4
  70. package/components/Tabs/TabPanel.js +5 -0
  71. package/components/Tabs/Tabs.js +73 -0
  72. package/components/TextInput/index.js +137 -0
  73. package/components/hooks/useGetConfig.js +75 -0
  74. package/components/index.js +106 -9
  75. package/coverage/clover.xml +1194 -748
  76. package/coverage/coverage-final.json +72 -50
  77. package/coverage/lcov-report/block-navigation.js +8 -0
  78. package/coverage/lcov-report/components/Accordion/index.html +26 -21
  79. package/coverage/lcov-report/components/Accordion/index.jsx.html +106 -131
  80. package/coverage/lcov-report/{SideNav/Chart → components/Button}/index.html +29 -24
  81. package/coverage/lcov-report/{Error/Collapsible.jsx.html → components/Button/index.js.html} +125 -114
  82. package/coverage/lcov-report/components/Error/Collapsible.jsx.html +92 -87
  83. package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +32 -33
  84. package/coverage/lcov-report/components/Error/index.html +11 -6
  85. package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +200 -189
  86. package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +24 -61
  87. package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +18 -13
  88. package/coverage/lcov-report/components/Footer/index.html +35 -45
  89. package/coverage/lcov-report/components/{InfoModal → GovBanner}/index.html +27 -22
  90. package/coverage/lcov-report/components/{InfoModal/index.jsx.html → GovBanner/index.js.html} +157 -122
  91. package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +93 -520
  92. package/coverage/lcov-report/components/Header/HeaderCancel.jsx.html +19 -23
  93. package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +280 -0
  94. package/coverage/lcov-report/components/Header/HeaderLogo.jsx.html +211 -0
  95. package/coverage/lcov-report/components/Header/HeaderMenuButton.js.html +235 -0
  96. package/coverage/lcov-report/components/{Footer/LegacyFooterUI.jsx.html → Header/HeaderMenuItem.jsx.html} +334 -200
  97. package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +253 -0
  98. package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +271 -0
  99. package/coverage/lcov-report/components/Header/HeaderMobileButton.js.html +196 -0
  100. package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +176 -756
  101. package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +181 -0
  102. package/coverage/lcov-report/{Accordion/index.jsx.html → components/Header/ImpersonatorBanner.jsx.html} +109 -167
  103. package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +24 -19
  104. package/coverage/lcov-report/components/Header/hooks.js.html +283 -0
  105. package/coverage/lcov-report/components/Header/index.html +203 -33
  106. package/coverage/lcov-report/components/{SideNav/Links/index.js.html → Header/utag-helpers.js.html} +35 -42
  107. package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +53 -48
  108. package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +37 -32
  109. package/coverage/lcov-report/components/Infotip/index.html +8 -3
  110. package/coverage/lcov-report/components/Infotip/index.js.html +8 -3
  111. package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +301 -0
  112. package/coverage/lcov-report/components/Modal/Modal.jsx.html +505 -0
  113. package/coverage/lcov-report/components/Modal/index.html +146 -0
  114. package/coverage/lcov-report/components/{SideNav/Details/IndividualDetails.jsx.html → Modal/index.jsx.html} +50 -42
  115. package/coverage/lcov-report/components/NotificationBanner/CollapsedView.js.html +202 -0
  116. package/coverage/lcov-report/components/NotificationBanner/ExpandedView.js.html +220 -0
  117. package/coverage/lcov-report/components/NotificationBanner/index.html +58 -23
  118. package/coverage/lcov-report/components/{SideNav/Content/LevelTwoContent.jsx.html → NotificationBanner/index.js.html} +292 -272
  119. package/coverage/lcov-report/components/SanitizedContent/index.html +8 -3
  120. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +475 -50
  121. package/coverage/lcov-report/components/SessionDialogUI.jsx.html +248 -255
  122. package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +272 -408
  123. package/coverage/lcov-report/components/SideNav/Chart/index.html +28 -38
  124. package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.html +116 -0
  125. package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +505 -0
  126. package/coverage/lcov-report/components/SideNav/helpers.js.html +987 -46
  127. package/coverage/lcov-report/components/SideNav/index.html +24 -19
  128. package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +70 -65
  129. package/coverage/lcov-report/components/Tooltip/index.html +8 -3
  130. package/coverage/lcov-report/components/Tooltip/index.js.html +8 -3
  131. package/coverage/lcov-report/components/Tooltip/position.js.html +57 -64
  132. package/coverage/lcov-report/components/hooks/index.html +116 -0
  133. package/coverage/lcov-report/components/hooks/useGetConfig.js.html +310 -0
  134. package/coverage/lcov-report/components/index.html +10 -5
  135. package/coverage/lcov-report/index.html +249 -154
  136. package/coverage/lcov-report/{Error/ErrorUI.jsx.html → lib/Chevron.jsx.html} +44 -42
  137. package/coverage/lcov-report/lib/SvgComponents.jsx.html +1840 -0
  138. package/coverage/lcov-report/lib/index.html +34 -14
  139. package/coverage/lcov-report/react/components/Accordion/index.html +26 -21
  140. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +106 -131
  141. package/coverage/lcov-report/react/components/{FlashNotification → Button}/index.html +23 -33
  142. package/coverage/lcov-report/{components/SideNav/Links/NavLinkInline.jsx.html → react/components/Button/index.js.html} +119 -120
  143. package/coverage/lcov-report/react/components/{Tabs → Dropdown}/index.html +23 -33
  144. package/coverage/lcov-report/react/components/{InfoModal/index.jsx.html → Dropdown/index.js.html} +103 -155
  145. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +92 -87
  146. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +32 -33
  147. package/coverage/lcov-report/react/components/Error/error.js.html +25 -20
  148. package/coverage/lcov-report/react/components/Error/index.html +11 -6
  149. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +200 -189
  150. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +14 -15
  151. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +18 -13
  152. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +18 -13
  153. package/coverage/lcov-report/react/components/Footer/footer.js.html +12 -34
  154. package/coverage/lcov-report/react/components/Footer/index.html +35 -45
  155. package/coverage/lcov-report/react/components/{InfoModal → GovBanner}/index.html +27 -22
  156. package/coverage/lcov-report/react/components/{Tabs/TabsUI.jsx.html → GovBanner/index.js.html} +146 -153
  157. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +93 -520
  158. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +19 -23
  159. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +307 -0
  160. package/coverage/lcov-report/{components/SideNav/Links/CmsSwitchLink.jsx.html → react/components/Header/HeaderLogo.jsx.html} +64 -53
  161. package/coverage/lcov-report/{components/SideNav/Links/NavItemInline.jsx.html → react/components/Header/HeaderMenuButton.js.html} +64 -71
  162. package/coverage/lcov-report/{components/SideNav/Links/NavLinkDrawer.jsx.html → react/components/Header/HeaderMenuItem.jsx.html} +284 -261
  163. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +253 -0
  164. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +271 -0
  165. package/coverage/lcov-report/{components/SideNav/Links/NavLinkToggle.jsx.html → react/components/Header/HeaderMobileButton.js.html} +58 -41
  166. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +189 -745
  167. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +181 -0
  168. package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +331 -0
  169. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +18 -13
  170. package/coverage/lcov-report/react/components/Header/header.js.html +18 -4
  171. package/coverage/lcov-report/react/components/Header/hooks.js.html +283 -0
  172. package/coverage/lcov-report/react/components/Header/index.html +205 -35
  173. package/coverage/lcov-report/react/components/{Spinner/index.js.html → Header/utag-helpers.js.html} +26 -21
  174. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +53 -48
  175. package/coverage/lcov-report/{components/SideNav/Links/NavLinkContainer.jsx.html → react/components/Infotip/InfotipContent.jsx.html} +83 -60
  176. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +37 -32
  177. package/coverage/lcov-report/react/components/Infotip/index.html +8 -3
  178. package/coverage/lcov-report/react/components/Infotip/index.js.html +8 -3
  179. package/coverage/lcov-report/react/components/{FlashNotification/FlashNotificationUI.jsx.html → Modal/LegacyModal.jsx.html} +89 -84
  180. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +505 -0
  181. package/coverage/lcov-report/react/components/Modal/index.html +52 -17
  182. package/coverage/lcov-report/react/components/Modal/index.jsx.html +38 -201
  183. package/coverage/lcov-report/react/components/{Tabs/tabs.js.html → NotificationBanner/CollapsedView.js.html} +61 -47
  184. package/coverage/lcov-report/{components/SideNav/Details/PracticeDetails.jsx.html → react/components/NotificationBanner/ExpandedView.js.html} +74 -57
  185. package/coverage/lcov-report/react/components/NotificationBanner/index.html +58 -23
  186. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +615 -43
  187. package/coverage/lcov-report/react/components/SanitizedContent/index.html +8 -3
  188. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +478 -53
  189. package/coverage/lcov-report/react/components/{Spinner → SessionDialog}/index.html +11 -6
  190. package/coverage/lcov-report/react/components/{FlashNotification/index.js.html → SessionDialog/sessionDialog.js.html} +35 -42
  191. package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +248 -255
  192. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +53 -18
  193. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +18 -13
  194. package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +272 -402
  195. package/coverage/lcov-report/react/components/SideNav/Chart/index.html +28 -23
  196. package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +9 -4
  197. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +190 -521
  198. package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +23 -12
  199. package/coverage/lcov-report/{components/SideNav/Details → react/components/SideNav/Content/SelectRole}/index.html +42 -52
  200. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +316 -0
  201. package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +505 -0
  202. package/coverage/lcov-report/react/components/SideNav/Content/index.html +32 -27
  203. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +8 -3
  204. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +20 -24
  205. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +54 -37
  206. package/coverage/lcov-report/react/components/SideNav/Details/index.html +23 -18
  207. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +8 -3
  208. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +9 -4
  209. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +8 -3
  210. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +56 -57
  211. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +351 -142
  212. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +60 -40
  213. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +9 -4
  214. package/coverage/lcov-report/react/components/SideNav/Links/index.html +44 -39
  215. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +8 -3
  216. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +243 -433
  217. package/coverage/lcov-report/react/components/SideNav/UI/index.html +28 -23
  218. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +8 -3
  219. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +958 -17
  220. package/coverage/lcov-report/react/components/SideNav/index.html +27 -22
  221. package/coverage/lcov-report/react/components/SideNav/index.js.html +8 -3
  222. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +70 -65
  223. package/coverage/lcov-report/react/components/Tooltip/index.html +8 -3
  224. package/coverage/lcov-report/react/components/Tooltip/index.js.html +8 -3
  225. package/coverage/lcov-report/react/components/Tooltip/position.js.html +57 -64
  226. package/coverage/lcov-report/{components/SideNav/AnimationGroup → react/components/hooks}/index.html +29 -24
  227. package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +310 -0
  228. package/coverage/lcov-report/react/components/index.html +10 -5
  229. package/coverage/lcov-report/react/index.html +20 -15
  230. package/coverage/lcov-report/react/index.js.html +29 -9
  231. package/coverage/lcov-report/react/lib/Chevron.jsx.html +181 -0
  232. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +195 -106
  233. package/coverage/lcov-report/react/lib/index.html +37 -17
  234. package/coverage/lcov-report/react/lib/svg-definitions.svg.html +57 -916
  235. package/coverage/lcov-report/react/session/index.html +32 -27
  236. package/coverage/lcov-report/react/session/index.js.html +8 -3
  237. package/coverage/lcov-report/react/session/logout.js.html +121 -17
  238. package/coverage/lcov-report/react/session/refresh.js.html +11 -6
  239. package/coverage/lcov-report/react/session/ttl.js.html +8 -3
  240. package/coverage/lcov-report/session/index.html +50 -45
  241. package/coverage/lcov-report/session/index.js.html +8 -3
  242. package/coverage/lcov-report/session/logout.js.html +144 -49
  243. package/coverage/lcov-report/session/refresh.js.html +41 -36
  244. package/coverage/lcov-report/session/ttl.js.html +34 -29
  245. package/coverage/lcov-report/sorter.js +26 -0
  246. package/coverage/lcov.info +2427 -1491
  247. package/dist/browser.js +1 -1
  248. package/dist/browser.js.LICENSE.txt +1 -7
  249. package/dist/browser.js.map +1 -1
  250. package/dist/index.js +1 -1
  251. package/dist/index.js.LICENSE.txt +1 -7
  252. package/dist/index.js.map +1 -1
  253. package/dist/react/index.js +1 -1
  254. package/dist/react/index.js.LICENSE.txt +16 -16
  255. package/dist/react/index.js.map +1 -1
  256. package/fonts/PublicSans-Black.ttf +0 -0
  257. package/fonts/PublicSans-BlackItalic.ttf +0 -0
  258. package/fonts/PublicSans-Bold.ttf +0 -0
  259. package/fonts/PublicSans-BoldItalic.ttf +0 -0
  260. package/fonts/PublicSans-ExtraBold.ttf +0 -0
  261. package/fonts/PublicSans-ExtraBoldItalic.ttf +0 -0
  262. package/fonts/PublicSans-ExtraLight.ttf +0 -0
  263. package/fonts/PublicSans-ExtraLightItalic.ttf +0 -0
  264. package/fonts/PublicSans-Italic.ttf +0 -0
  265. package/fonts/PublicSans-Light.ttf +0 -0
  266. package/fonts/PublicSans-LightItalic.ttf +0 -0
  267. package/fonts/PublicSans-Medium.ttf +0 -0
  268. package/fonts/PublicSans-MediumItalic.ttf +0 -0
  269. package/fonts/PublicSans-Regular.ttf +0 -0
  270. package/fonts/PublicSans-SemiBold.ttf +0 -0
  271. package/fonts/PublicSans-SemiBoldItalic.ttf +0 -0
  272. package/fonts/PublicSans-Thin.ttf +0 -0
  273. package/fonts/PublicSans-ThinItalic.ttf +0 -0
  274. package/images/icon-dot-gov.svg +1 -0
  275. package/images/icon-https.svg +1 -0
  276. package/images/icons/close-x.svg +6 -0
  277. package/images/icons/svg/arrow-down.svg +3 -0
  278. package/images/icons/svg/arrow-download.svg +1 -0
  279. package/images/icons/svg/arrow-right.svg +1 -0
  280. package/images/icons/svg/arrow-up.svg +3 -0
  281. package/images/icons/svg/block.svg +5 -0
  282. package/images/icons/svg/calendar.svg +1 -0
  283. package/images/icons/svg/check-circle.svg +5 -0
  284. package/images/icons/svg/checkmark.svg +7 -0
  285. package/images/icons/svg/chevron-down.svg +11 -0
  286. package/images/icons/svg/chevron-left.svg +12 -0
  287. package/images/icons/svg/chevron-right.svg +12 -0
  288. package/images/icons/svg/chevron-up.svg +12 -0
  289. package/images/icons/svg/clipboard.svg +1 -0
  290. package/images/icons/svg/close.svg +1 -0
  291. package/images/icons/svg/divide.svg +13 -0
  292. package/images/icons/svg/doctors-and-clinicians-preview.svg +10 -0
  293. package/images/icons/svg/download.svg +1 -0
  294. package/images/icons/svg/dropdown-arrow.svg +1 -0
  295. package/images/icons/svg/equals.svg +13 -0
  296. package/images/icons/svg/exclamation.svg +11 -0
  297. package/images/icons/svg/external.svg +1 -0
  298. package/images/icons/svg/file-download.svg +1 -0
  299. package/images/icons/svg/file-upload.svg +1 -0
  300. package/images/icons/svg/info.svg +20 -0
  301. package/images/icons/svg/manage-user-access.svg +8 -0
  302. package/images/icons/svg/multiply.svg +12 -0
  303. package/images/icons/svg/performance-feedback.svg +1 -0
  304. package/images/icons/svg/plus.svg +12 -0
  305. package/images/icons/svg/preview.svg +17 -0
  306. package/images/icons/svg/print.svg +1 -0
  307. package/images/icons/svg/registration.svg +8 -0
  308. package/images/icons/svg/reporting.svg +17 -0
  309. package/images/icons/svg/save-disk.svg +5 -0
  310. package/images/icons/svg/search.svg +1 -0
  311. package/images/icons/svg/subtract.svg +15 -0
  312. package/images/icons/svg/targeted-review.svg +15 -0
  313. package/images/icons/svg/tooltip-question.svg +1 -0
  314. package/images/icons/svg/trash.svg +1 -0
  315. package/images/icons/svg/upload.svg +1 -0
  316. package/images/us_flag_small.png +0 -0
  317. package/index.js +5 -0
  318. package/jest.config.js +138 -134
  319. package/lib/Chevron.jsx +32 -0
  320. package/lib/SvgComponents.jsx +197 -49
  321. package/package.json +62 -77
  322. package/session/logout.js +35 -2
  323. package/styles/_global.scss +63 -62
  324. package/styles/_main.scss +6 -0
  325. package/styles/_qpp-style.scss +0 -3
  326. package/styles/components/_accordion.scss +249 -246
  327. package/styles/components/_autocomplete.scss +0 -3
  328. package/styles/components/_modals.scss +9 -9
  329. package/styles/components/_spinner.scss +0 -2
  330. package/styles/components/_tables.scss +77 -67
  331. package/styles/components/_text.scss +102 -102
  332. package/styles/components/_variables.scss +12 -12
  333. package/styles/qppds/base/_backgrounds.scss +7 -0
  334. package/styles/qppds/base/_fonts.scss +24 -0
  335. package/styles/qppds/base/_icon.scss +31 -0
  336. package/styles/qppds/base/_layout.scss +5 -0
  337. package/styles/qppds/base/_typography.scss +78 -44
  338. package/styles/qppds/base/index.scss +4 -5
  339. package/styles/qppds/components/_alert.scss +101 -0
  340. package/styles/qppds/components/_breadcrumbs.scss +42 -6
  341. package/styles/qppds/components/_button.scss +129 -11
  342. package/styles/qppds/components/_card.scss +175 -0
  343. package/styles/qppds/components/_checkbox.scss +199 -0
  344. package/styles/qppds/components/_circular-loader.scss +47 -0
  345. package/styles/qppds/components/_details.scss +90 -0
  346. package/styles/qppds/components/_dropdown-menu.scss +125 -0
  347. package/styles/qppds/components/_dropdown.scss +7 -1
  348. package/styles/qppds/components/_footer.scss +606 -0
  349. package/styles/qppds/components/_gov-banner.scss +344 -0
  350. package/styles/qppds/components/_header.scss +913 -0
  351. package/styles/qppds/components/_link.scss +52 -0
  352. package/styles/qppds/components/_modal.scss +118 -0
  353. package/styles/qppds/components/_page-header.scss +65 -2
  354. package/styles/qppds/components/_pagination.scss +227 -0
  355. package/styles/qppds/components/_process-list.scss +104 -0
  356. package/styles/qppds/components/_radio-button.scss +184 -0
  357. package/styles/qppds/components/_search.scss +118 -0
  358. package/styles/{components → qppds/components}/_sidebar.scss +2 -0
  359. package/styles/qppds/components/_step-indicator.scss +190 -0
  360. package/styles/qppds/components/_table.scss +157 -0
  361. package/styles/qppds/components/_tabs.scss +197 -0
  362. package/styles/qppds/components/_text-input.scss +60 -0
  363. package/styles/qppds/components/index.scss +20 -0
  364. package/styles/{components → qppds/components}/sidebar/_links.scss +48 -1
  365. package/styles/qppds/components/sidebar/_select-role-dropdown.scss +21 -0
  366. package/styles/qppds/components/sidebar/_sidebar-animation.scss +125 -0
  367. package/styles/qppds/components/sidebar/_sidebar.scss +146 -0
  368. package/styles/{components → qppds/components}/sidebar/project-specific/_wi.scss +1 -37
  369. package/styles/qppds/settings/_functions.scss +3 -1
  370. package/styles/qppds/settings/mixins/_borders.scss +6 -0
  371. package/styles/qppds/settings/mixins/_focus.scss +28 -0
  372. package/styles/qppds/settings/mixins/_icons.scss +39 -4
  373. package/styles/qppds/settings/mixins/_index.scss +4 -0
  374. package/styles/qppds/settings/mixins/_layout.scss +46 -7
  375. package/styles/qppds/settings/mixins/_table.scss +91 -0
  376. package/styles/qppds/settings/mixins/_type.scss +89 -0
  377. package/styles/qppds/settings/variables/_color.scss +47 -1
  378. package/styles/qppds/settings/variables/_index.scss +2 -1
  379. package/styles/qppds/settings/variables/_layout.scss +34 -9
  380. package/styles/qppds/settings/variables/_type.scss +41 -0
  381. package/styles/qppds/settings/variables/_z-index.scss +8 -0
  382. package/styles/qppds/utilities/_background-color.scss +4 -0
  383. package/styles/qppds/utilities/_color.scss +28 -0
  384. package/styles/qppds/utilities/{_display-visability.scss → _display-visibility.scss} +8 -0
  385. package/styles/qppds/utilities/_flexbox.scss +113 -0
  386. package/styles/qppds/utilities/_font-family.scss +4 -0
  387. package/styles/qppds/utilities/_gap.scss +38 -0
  388. package/styles/qppds/utilities/_height.scss +79 -0
  389. package/styles/qppds/utilities/_list-style.scss +18 -0
  390. package/styles/qppds/utilities/_position.scss +24 -0
  391. package/styles/qppds/utilities/_text-align.scss +40 -0
  392. package/styles/qppds/utilities/_text-transform.scss +7 -0
  393. package/styles/qppds/utilities/_truncate.scss +5 -5
  394. package/styles/qppds/utilities/_vertical-align.scss +72 -0
  395. package/styles/qppds/utilities/_width.scss +38 -1
  396. package/styles/qppds/utilities/index.scss +8 -2
  397. package/styles/third-party/legacy-bootstrap/_dropdowns.scss +0 -1
  398. package/svgo.config.js +14 -0
  399. package/test/components/Accordion.test.js +4 -13
  400. package/test/components/ErrorUI.test.js +10 -46
  401. package/test/components/FooterUI.test.js +0 -30
  402. package/test/components/HeaderUI.test.js +33 -15
  403. package/test/components/Infotip.test.js +18 -12
  404. package/test/components/SessionDialogUI.test.js +55 -70
  405. package/test/components/SideNavUI.test.js +6 -13
  406. package/test-setup.js +1 -3
  407. package/webpack.config.js +29 -39
  408. package/webpack.config.react.js +7 -18
  409. package/.storybook/.babelrc +0 -4
  410. package/.storybook/main.js +0 -89
  411. package/.storybook/preview-head.html +0 -9
  412. package/.storybook/preview.js +0 -16
  413. package/components/Accordion/Accordion.stories.js +0 -20
  414. package/components/Breadcrumb/Breadcrumb.js +0 -58
  415. package/components/Breadcrumb/Breadcrumb.stories.js +0 -62
  416. package/components/Breadcrumb/LegacyBreadcrumb.js +0 -46
  417. package/components/Footer/Footer.stories.js +0 -22
  418. package/components/Footer/LegacyFooterUI.jsx +0 -194
  419. package/components/Header/Header.stories.js +0 -32
  420. package/components/InfoModal/InfoModal.stories.js +0 -98
  421. package/components/InfoModal/index.jsx +0 -104
  422. package/components/Infotip/Infotip.stories.js +0 -58
  423. package/components/NotificationBanner/NotificationBanner.stories.js +0 -24
  424. package/components/NotificationBanner/NotificationBannerUI.jsx +0 -282
  425. package/components/SideNav/SideNav.stories.js +0 -320
  426. package/components/Spinner/index.js +0 -9
  427. package/components/Tabs/TabsUI.jsx +0 -118
  428. package/components/Tabs/tabs.js +0 -36
  429. package/components/Tooltip/Tooltip.jsx +0 -88
  430. package/components/Tooltip/Tooltip.stories.js +0 -90
  431. package/components/Tooltip/index.js +0 -3
  432. package/components/Tooltip/position.js +0 -68
  433. package/components/UnwrappedSpinner/index.js +0 -8
  434. package/components/UnwrappedTabs/TabPanelUI.jsx +0 -16
  435. package/components/UnwrappedTabs/TabsUI.jsx +0 -82
  436. package/coverage/lcov-report/Accordion/index.html +0 -111
  437. package/coverage/lcov-report/Error/index.html +0 -126
  438. package/coverage/lcov-report/ScoreChart.jsx.html +0 -1025
  439. package/coverage/lcov-report/SideNav/Chart/ScoreChart.jsx.html +0 -1025
  440. package/coverage/lcov-report/components/NotificationBanner/NotificationBannerUI.jsx.html +0 -1010
  441. package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +0 -131
  442. package/coverage/lcov-report/components/SideNav/Chart/index.js.html +0 -89
  443. package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +0 -1007
  444. package/coverage/lcov-report/components/SideNav/Content/index.html +0 -141
  445. package/coverage/lcov-report/components/SideNav/Content/index.js.html +0 -92
  446. package/coverage/lcov-report/components/SideNav/Details/index.js.html +0 -92
  447. package/coverage/lcov-report/components/SideNav/Links/index.html +0 -201
  448. package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +0 -1298
  449. package/coverage/lcov-report/components/SideNav/UI/index.html +0 -126
  450. package/coverage/lcov-report/components/SideNav/UI/index.js.html +0 -89
  451. package/coverage/lcov-report/lib/svg-definitions.svg.html +0 -1319
  452. package/coverage/lcov-report/react/components/NotificationBanner/NotificationBannerUI.jsx.html +0 -926
  453. package/styles/components/_footer.scss +0 -593
  454. package/styles/components/_header.scss +0 -526
  455. package/styles/components/sidebar/_sidebar-animation.scss +0 -85
  456. package/styles/components/sidebar/_sidebar.scss +0 -141
  457. package/test/components/Tooltip.test.js +0 -147
  458. package/test/components/__snapshots__/Accordion.test.js.snap +0 -11439
  459. /package/styles/{components → qppds/components}/sidebar/_animations.scss +0 -0
  460. /package/styles/{components → qppds/components}/sidebar/_cms.scss +0 -0
  461. /package/styles/{components → qppds/components}/sidebar/_details.scss +0 -0
  462. /package/styles/{components → qppds/components}/sidebar/_sidebar-tooltip.scss +0 -0
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">67.86% </span>
33
+ <span class="strong">67.85% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>19/28</span>
36
36
  </div>
@@ -54,6 +54,12 @@
54
54
  <p class="quiet">
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
57
63
  </div>
58
64
  <div class='status-line medium'></div>
59
65
  <pre><table class="coverage">
@@ -318,11 +324,8 @@
318
324
  <a name='L259'></a><a href='#L259'>259</a>
319
325
  <a name='L260'></a><a href='#L260'>260</a>
320
326
  <a name='L261'></a><a href='#L261'>261</a>
321
- <a name='L262'></a><a href='#L262'>262</a>
322
- <a name='L263'></a><a href='#L263'>263</a>
323
- <a name='L264'></a><a href='#L264'>264</a>
324
- <a name='L265'></a><a href='#L265'>265</a>
325
- <a name='L266'></a><a href='#L266'>266</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
327
+ <a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
329
  <span class="cline-any cline-neutral">&nbsp;</span>
327
330
  <span class="cline-any cline-neutral">&nbsp;</span>
328
331
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -340,31 +343,31 @@
340
343
  <span class="cline-any cline-neutral">&nbsp;</span>
341
344
  <span class="cline-any cline-neutral">&nbsp;</span>
342
345
  <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-yes">20x</span>
346
+ <span class="cline-any cline-yes">19x</span>
344
347
  <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">20x</span>
346
- <span class="cline-any cline-yes">20x</span>
347
- <span class="cline-any cline-yes">20x</span>
348
- <span class="cline-any cline-yes">20x</span>
349
- <span class="cline-any cline-yes">20x</span>
350
- <span class="cline-any cline-yes">20x</span>
351
- <span class="cline-any cline-yes">20x</span>
352
- <span class="cline-any cline-yes">20x</span>
353
- <span class="cline-any cline-yes">20x</span>
354
- <span class="cline-any cline-yes">20x</span>
348
+ <span class="cline-any cline-yes">19x</span>
349
+ <span class="cline-any cline-yes">19x</span>
350
+ <span class="cline-any cline-yes">19x</span>
351
+ <span class="cline-any cline-yes">19x</span>
352
+ <span class="cline-any cline-yes">19x</span>
353
+ <span class="cline-any cline-yes">19x</span>
354
+ <span class="cline-any cline-yes">19x</span>
355
+ <span class="cline-any cline-yes">19x</span>
356
+ <span class="cline-any cline-yes">19x</span>
357
+ <span class="cline-any cline-yes">19x</span>
355
358
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">20x</span>
359
+ <span class="cline-any cline-yes">19x</span>
357
360
  <span class="cline-any cline-yes">8x</span>
358
361
  <span class="cline-any cline-neutral">&nbsp;</span>
359
362
  <span class="cline-any cline-neutral">&nbsp;</span>
360
363
  <span class="cline-any cline-neutral">&nbsp;</span>
361
364
  <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-yes">12x</span>
365
+ <span class="cline-any cline-yes">11x</span>
363
366
  <span class="cline-any cline-neutral">&nbsp;</span>
364
367
  <span class="cline-any cline-neutral">&nbsp;</span>
365
368
  <span class="cline-any cline-neutral">&nbsp;</span>
366
369
  <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-yes">12x</span>
370
+ <span class="cline-any cline-yes">11x</span>
368
371
  <span class="cline-any cline-neutral">&nbsp;</span>
369
372
  <span class="cline-any cline-neutral">&nbsp;</span>
370
373
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -380,9 +383,6 @@
380
383
  <span class="cline-any cline-neutral">&nbsp;</span>
381
384
  <span class="cline-any cline-neutral">&nbsp;</span>
382
385
  <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
386
  <span class="cline-any cline-yes">1x</span>
387
387
  <span class="cline-any cline-yes">1x</span>
388
388
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -407,9 +407,6 @@
407
407
  <span class="cline-any cline-yes">78x</span>
408
408
  <span class="cline-any cline-neutral">&nbsp;</span>
409
409
  <span class="cline-any cline-yes">78x</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
410
  <span class="cline-any cline-yes">76x</span>
414
411
  <span class="cline-any cline-neutral">&nbsp;</span>
415
412
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -428,9 +425,6 @@
428
425
  <span class="cline-any cline-no">&nbsp;</span>
429
426
  <span class="cline-any cline-neutral">&nbsp;</span>
430
427
  <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
428
  <span class="cline-any cline-no">&nbsp;</span>
435
429
  <span class="cline-any cline-neutral">&nbsp;</span>
436
430
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -446,9 +440,9 @@
446
440
  <span class="cline-any cline-neutral">&nbsp;</span>
447
441
  <span class="cline-any cline-neutral">&nbsp;</span>
448
442
  <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">15x</span>
443
+ <span class="cline-any cline-yes">14x</span>
450
444
  <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-yes">15x</span>
445
+ <span class="cline-any cline-yes">14x</span>
452
446
  <span class="cline-any cline-neutral">&nbsp;</span>
453
447
  <span class="cline-any cline-neutral">&nbsp;</span>
454
448
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -462,9 +456,6 @@
462
456
  <span class="cline-any cline-neutral">&nbsp;</span>
463
457
  <span class="cline-any cline-yes">5x</span>
464
458
  <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-neutral">&nbsp;</span>
468
459
  <span class="cline-any cline-yes">5x</span>
469
460
  <span class="cline-any cline-neutral">&nbsp;</span>
470
461
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -540,11 +531,18 @@
540
531
  <span class="cline-any cline-neutral">&nbsp;</span>
541
532
  <span class="cline-any cline-neutral">&nbsp;</span>
542
533
  <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-yes">22x</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
542
  <span class="cline-any cline-neutral">&nbsp;</span>
544
543
  <span class="cline-any cline-neutral">&nbsp;</span>
545
544
  <span class="cline-any cline-neutral">&nbsp;</span>
546
545
  <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-yes">23x</span>
548
546
  <span class="cline-any cline-neutral">&nbsp;</span>
549
547
  <span class="cline-any cline-neutral">&nbsp;</span>
550
548
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -588,11 +586,12 @@
588
586
  <span class="cline-any cline-neutral">&nbsp;</span>
589
587
  <span class="cline-any cline-neutral">&nbsp;</span>
590
588
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { Component } from 'react';
591
- import InfoModal from './InfoModal';
592
589
  import PropTypes from 'prop-types';
593
590
  import cookie from 'cookie';
594
591
  import retry from 'retry';
595
592
  import jwtDecode from 'jwt-decode';
593
+ &nbsp;
594
+ import Modal from './Modal';
596
595
  import RefreshSession from '../session/refresh';
597
596
  import LogoutSession from '../session/logout';
598
597
  import fetchTtl from '../session/ttl';
@@ -600,257 +599,252 @@ import fetchTtl from '../session/ttl';
600
599
  const fetchTtlIntervalMs = 60000;
601
600
  &nbsp;
602
601
  export default class SessionDialogUI extends Component {
603
- /**
604
- * Create a SessionDialogUI component.
605
- * @param {object} props - Configuration options. See SessionDialog for more
606
- */
607
- constructor(props) {
608
- super(props);
602
+ /**
603
+ * Create a SessionDialogUI component.
604
+ * @param {object} props - Configuration options. See SessionDialog for more
605
+ */
606
+ constructor(props) {
607
+ super(props);
609
608
  &nbsp;
610
- this.handleOpenModal = this.handleOpenModal.bind(this);
611
- this.handleCloseModal = this.handleCloseModal.bind(this);
612
- this.refreshSession = this.refreshSession.bind(this);
613
- this.signOut = this.signOut.bind(this);
614
- this.startTimer = this.startTimer.bind(this);
615
- this.shouldShowDialog = this.shouldShowDialog.bind(this);
616
- this.shouldSignOut = this.shouldSignOut.bind(this);
617
- this.minutesUntil = this.minutesUntil.bind(this);
618
- this.checkExpiry = this.checkExpiry.bind(this);
619
- this.onInterval = this.onInterval.bind(this);
609
+ this.handleOpenModal = this.handleOpenModal.bind(this);
610
+ this.handleCloseModal = this.handleCloseModal.bind(this);
611
+ this.refreshSession = this.refreshSession.bind(this);
612
+ this.signOut = this.signOut.bind(this);
613
+ this.startTimer = this.startTimer.bind(this);
614
+ this.shouldShowDialog = this.shouldShowDialog.bind(this);
615
+ this.shouldSignOut = this.shouldSignOut.bind(this);
616
+ this.minutesUntil = this.minutesUntil.bind(this);
617
+ this.checkExpiry = this.checkExpiry.bind(this);
618
+ this.onInterval = this.onInterval.bind(this);
620
619
  &nbsp;
621
- if (props.showImmediate === true) {
622
- this.state = {
623
- showModal: true,
624
- showError: false
625
- };
626
- } else {
627
- this.state = {
628
- showModal: false,
629
- showError: false
630
- };
620
+ if (props.showImmediate === true) {
621
+ this.state = {
622
+ showModal: true,
623
+ showError: false,
624
+ };
625
+ } else {
626
+ this.state = {
627
+ showModal: false,
628
+ showError: false,
629
+ };
631
630
  &nbsp;
632
- this.startTimer();
633
- }
631
+ this.startTimer();
634
632
  }
633
+ }
635
634
  &nbsp;
636
- /**
637
- * Extracts the token exp value as a JavaScript date.
638
- * @param {Object} cookies - An object representation of the cookie store
639
- * @returns {(date|null)} The token expiration date, if found
640
- */
641
- getTokenExpiry(cookies) {
642
- let expiry = null;
643
- &nbsp;
644
- if (
645
- cookies.hasOwnProperty('qpp_auth_token') &amp;&amp;
646
- cookies.qpp_auth_token
647
- ) {
648
- // See https://tools.ietf.org/html/rfc7519
649
- // `exp` is a NumericDate representing "seconds since the epoch"
650
- // and it needs to be milliseconds to get a JavaScript date from it.
651
- const { exp } = jwtDecode(cookies.qpp_auth_token);
652
- expiry = new Date(exp * 1000);
653
- }
635
+ /**
636
+ * Extracts the token exp value as a JavaScript date.
637
+ * @param {Object} cookies - An object representation of the cookie store
638
+ * @returns {(date|null)} The token expiration date, if found
639
+ */
640
+ getTokenExpiry(cookies) {
641
+ let expiry = null;
654
642
  &nbsp;
655
- return expiry;
643
+ if (cookies.hasOwnProperty('qpp_auth_token') &amp;&amp; cookies.qpp_auth_token) {
644
+ // See https://tools.ietf.org/html/rfc7519
645
+ // `exp` is a NumericDate representing "seconds since the epoch"
646
+ // and it needs to be milliseconds to get a JavaScript date from it.
647
+ const { exp } = jwtDecode(cookies.qpp_auth_token);
648
+ expiry = new Date(exp * 1000);
656
649
  }
657
650
  &nbsp;
658
- <span class="fstat-no" title="function not covered" > ch</span>eckExpiry(expiry) {
659
- <span class="cstat-no" title="statement not covered" > if (expiry) {</span>
660
- <span class="cstat-no" title="statement not covered" > if (this.shouldShowDialog(expiry)) {</span>
661
- <span class="cstat-no" title="statement not covered" > this.handleOpenModal();</span>
662
- } else <span class="cstat-no" title="statement not covered" >if (this.shouldSignOut(expiry)) {</span>
663
- <span class="cstat-no" title="statement not covered" > this.signOut();</span>
664
- <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
665
- }
666
- } else {
667
- <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
668
- }
651
+ return expiry;
652
+ }
653
+ &nbsp;
654
+ <span class="fstat-no" title="function not covered" > ch</span>eckExpiry(expiry) {
655
+ <span class="cstat-no" title="statement not covered" > if (expiry) {</span>
656
+ <span class="cstat-no" title="statement not covered" > if (this.shouldShowDialog(expiry)) {</span>
657
+ <span class="cstat-no" title="statement not covered" > this.handleOpenModal();</span>
658
+ } else <span class="cstat-no" title="statement not covered" >if (this.shouldSignOut(expiry)) {</span>
659
+ <span class="cstat-no" title="statement not covered" > this.signOut();</span>
660
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
661
+ }
662
+ } else {
663
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
669
664
  }
665
+ }
670
666
  &nbsp;
671
- onInterval() {
672
- const cookies = cookie.parse(document.cookie);
667
+ onInterval() {
668
+ const cookies = cookie.parse(document.cookie);
673
669
  &nbsp;
674
- if (
675
- cookies.hasOwnProperty('qpp_auth_token') &amp;&amp;
676
- cookies.qpp_auth_token
677
- ) {
678
- const operation = retry.operation({
679
- retries: 5,
680
- factor: 1,
681
- minTimeout: 1000,
682
- maxTimeout: 1000
683
- });
670
+ if (cookies.hasOwnProperty('qpp_auth_token') &amp;&amp; cookies.qpp_auth_token) {
671
+ const operation = retry.operation({
672
+ retries: 5,
673
+ factor: 1,
674
+ minTimeout: 1000,
675
+ maxTimeout: 1000,
676
+ });
684
677
  &nbsp;
685
- operation.attempt(() =&gt; {
686
- fetchTtl(cookies.qpp_auth_token)
687
- .then(this.checkExpiry)
688
- .catch(<span class="fstat-no" title="function not covered" >er</span>ror =&gt; {
689
- <span class="cstat-no" title="statement not covered" > if (operation.retry(error)) {</span>
690
- // try again before giving up
691
- <span class="cstat-no" title="statement not covered" > return;</span>
692
- }
693
- <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
694
- // sign an inactive user out
695
- <span class="cstat-no" title="statement not covered" > this.forceTimeoutHandle = setTimeout(</span>
696
- this.signOut,
697
- 120 * 1000
698
- );
699
- <span class="cstat-no" title="statement not covered" > this.setState({</span>
700
- showModal: false,
701
- showError: true
702
- });
703
- });
678
+ operation.attempt(() =&gt; {
679
+ fetchTtl(cookies.qpp_auth_token)
680
+ .then(this.checkExpiry)
681
+ .catch(<span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; {
682
+ <span class="cstat-no" title="statement not covered" > if (operation.retry(error)) {</span>
683
+ // try again before giving up
684
+ <span class="cstat-no" title="statement not covered" > return;</span>
685
+ }
686
+ <span class="cstat-no" title="statement not covered" > clearInterval(this.warningInterval);</span>
687
+ // sign an inactive user out
688
+ <span class="cstat-no" title="statement not covered" > this.forceTimeoutHandle = setTimeout(this.signOut, 120 * 1000);</span>
689
+ <span class="cstat-no" title="statement not covered" > this.setState({</span>
690
+ showModal: false,
691
+ showError: true,
704
692
  });
705
- }
693
+ });
694
+ });
706
695
  }
696
+ }
707
697
  &nbsp;
708
- /**
709
- * Checks whether the user is within a specified number of minutes before
710
- * their session token expires. If so, show a warning dialog. If the
711
- * expiration has been reached, sign the user out.
712
- */
713
- startTimer() {
714
- clearInterval(this.warningInterval);
698
+ /**
699
+ * Checks whether the user is within a specified number of minutes before
700
+ * their session token expires. If so, show a warning dialog. If the
701
+ * expiration has been reached, sign the user out.
702
+ */
703
+ startTimer() {
704
+ clearInterval(this.warningInterval);
715
705
  &nbsp;
716
- this.warningInterval = setInterval(this.onInterval, fetchTtlIntervalMs);
717
- }
706
+ this.warningInterval = setInterval(this.onInterval, fetchTtlIntervalMs);
707
+ }
718
708
  &nbsp;
719
- /**
720
- * Returns whether the current time is within the timeout range of expiry.
721
- * @param {date|number} expiry - Expiration date to check against
722
- * @returns {boolean}
723
- */
724
- shouldShowDialog(expiry) {
725
- if (typeof expiry === 'number') {
726
- const minutesLeft = expiry / 60;
709
+ /**
710
+ * Returns whether the current time is within the timeout range of expiry.
711
+ * @param {date|number} expiry - Expiration date to check against
712
+ * @returns {boolean}
713
+ */
714
+ shouldShowDialog(expiry) {
715
+ if (typeof expiry === 'number') {
716
+ const minutesLeft = expiry / 60;
727
717
  &nbsp;
728
- return (
729
- !this.state.showModal &amp;&amp;
730
- minutesLeft &lt;= this.props.warningTimeout
731
- );
732
- } else {
733
- return (
734
- !this.state.showModal &amp;&amp;
735
- this.minutesUntil(expiry) &lt;= this.props.warningTimeout
736
- );
737
- }
718
+ return !this.state.showModal &amp;&amp; minutesLeft &lt;= this.props.warningTimeout;
719
+ } else {
720
+ return (
721
+ !this.state.showModal &amp;&amp;
722
+ this.minutesUntil(expiry) &lt;= this.props.warningTimeout
723
+ );
738
724
  }
725
+ }
739
726
  &nbsp;
740
- /**
741
- * Returns whether the current time has reached the expiration date.
742
- * @param {date|number} expiry - Expiration date to check against
743
- * @returns {boolean}
744
- */
745
- shouldSignOut(expiry) {
746
- if (typeof expiry === 'number') {
747
- return expiry &lt;= 1;
748
- } else {
749
- return this.minutesUntil(expiry) &lt;= 0;
750
- }
727
+ /**
728
+ * Returns whether the current time has reached the expiration date.
729
+ * @param {date|number} expiry - Expiration date to check against
730
+ * @returns {boolean}
731
+ */
732
+ shouldSignOut(expiry) {
733
+ if (typeof expiry === 'number') {
734
+ return expiry &lt;= 1;
735
+ } else {
736
+ return this.minutesUntil(expiry) &lt;= 0;
751
737
  }
738
+ }
752
739
  &nbsp;
753
- /**
754
- * Returns number of minutes until the expiration date.
755
- * @param {date} expiry - Expiration date to check against
756
- * @returns {number}
757
- */
758
- minutesUntil(expiry) {
759
- return (expiry - new Date().getTime()) / 60000;
760
- }
740
+ /**
741
+ * Returns number of minutes until the expiration date.
742
+ * @param {date} expiry - Expiration date to check against
743
+ * @returns {number}
744
+ */
745
+ minutesUntil(expiry) {
746
+ return (expiry - new Date().getTime()) / 60000;
747
+ }
761
748
  &nbsp;
762
- /**
763
- * Sets the modal state to visible.
764
- */
765
- handleOpenModal() {
766
- this.setState({
767
- showModal: true,
768
- showError: false
769
- });
770
- }
749
+ /**
750
+ * Sets the modal state to visible.
751
+ */
752
+ handleOpenModal() {
753
+ this.setState({
754
+ showModal: true,
755
+ showError: false,
756
+ });
757
+ }
771
758
  &nbsp;
772
- /**
773
- * Sets the modal state to hidden.
774
- */
775
- handleCloseModal() {
776
- this.setState({
777
- showModal: false,
778
- showError: false
779
- });
780
- }
759
+ /**
760
+ * Sets the modal state to hidden.
761
+ */
762
+ handleCloseModal() {
763
+ this.setState({
764
+ showModal: false,
765
+ showError: false,
766
+ });
767
+ }
781
768
  &nbsp;
782
- /**
783
- * Handles the user requesting their session be extended.
784
- */
785
- refreshSession() {
786
- RefreshSession({
787
- window,
788
- onSuccess: () =&gt; {
789
- this.startTimer();
790
- }
791
- });
769
+ /**
770
+ * Handles the user requesting their session be extended.
771
+ */
772
+ refreshSession() {
773
+ RefreshSession({
774
+ window,
775
+ onSuccess: () =&gt; {
776
+ this.startTimer();
777
+ },
778
+ });
792
779
  &nbsp;
793
- this.handleCloseModal();
794
- }
780
+ this.handleCloseModal();
781
+ }
795
782
  &nbsp;
796
- /**
797
- * Handles the user requesting their session be ended.
798
- */
799
- signOut() {
800
- <span class="missing-if-branch" title="if path not taken" >I</span>if (this.forceTimeoutHandle) {
801
- <span class="cstat-no" title="statement not covered" > clearTimeout(this.forceTimeoutHandle);</span>
802
- }
803
- LogoutSession(window);
804
- this.handleCloseModal();
783
+ /**
784
+ * Handles the user requesting their session be ended.
785
+ */
786
+ signOut() {
787
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.forceTimeoutHandle) {
788
+ <span class="cstat-no" title="statement not covered" > clearTimeout(this.forceTimeoutHandle);</span>
805
789
  }
790
+ LogoutSession(window);
791
+ this.handleCloseModal();
792
+ }
806
793
  &nbsp;
807
- /**
808
- * Renders a ReactModal component.
809
- * See: https://reactcommunity.org/react-modal/
810
- */
811
- render() {
812
- return (
813
- &lt;React.Fragment&gt;
814
- &lt;InfoModal
815
- appElement={this.props.appElement}
816
- isOpen={this.state.showModal}
817
- primaryAction="Keep me signed in"
818
- primaryCallback={this.refreshSession}
819
- secondaryAction="Sign me out now"
820
- secondaryCallback={this.signOut}
821
- onRequestClose={this.handleCloseModal}
822
- closeXAction={this.handleCloseModal}
823
- titleText="You will be signed out within two minutes"
824
- bodyText={`You have been inactive for thirty minutes. For
825
- your security, we will sign you out automatically.`}
826
- /&gt;
827
- &lt;InfoModal
828
- appElement={this.props.appElement}
829
- isOpen={this.state.showError}
830
- primaryAction="Sign out"
831
- primaryCallback={this.signOut}
832
- onRequestClose={this.signOut}
833
- closeXAction={this.signOut}
834
- titleText="Technical Difficulties"
835
- bodyText={`We're experiencing technical difficulties. Please log in again
836
- to continue. For your security, we will sign you out automatically within
837
- two minutes.`}
838
- /&gt;
839
- &lt;/React.Fragment&gt;
840
- );
841
- }
794
+ render() {
795
+ return (
796
+ &lt;React.Fragment&gt;
797
+ &lt;Modal
798
+ useDesignSystem
799
+ title="You will be signed out within two minutes"
800
+ isOpen={this.state.showModal}
801
+ primary={{
802
+ title: 'Keep me signed in',
803
+ onClick: this.refreshSession,
804
+ }}
805
+ secondary={{
806
+ title: 'Sign me out now',
807
+ onClick: this.signOut,
808
+ }}
809
+ onRequestClose={this.handleCloseModal}
810
+ &gt;
811
+ &lt;p&gt;
812
+ You have been inactive for thirty minutes. For your security, we
813
+ will sign you out automatically.
814
+ &lt;/p&gt;
815
+ &lt;/Modal&gt;
816
+ &nbsp;
817
+ &lt;Modal
818
+ useDesignSystem
819
+ title="Technical Difficulties"
820
+ isOpen={this.state.showError}
821
+ primary={{
822
+ title: 'Sign Out',
823
+ onClick: this.signOut,
824
+ }}
825
+ onRequestClose={this.signOut}
826
+ &gt;
827
+ &lt;p&gt;
828
+ We’re experiencing technical difficulties. Please log in again to
829
+ continue. For your security, we will sign you out automatically
830
+ within two minutes.
831
+ &lt;/p&gt;
832
+ &lt;/Modal&gt;
833
+ &lt;/React.Fragment&gt;
834
+ );
835
+ }
842
836
  }
843
837
  &nbsp;
844
838
  SessionDialogUI.propTypes = {
845
- showImmediate: PropTypes.bool,
846
- warningTimeout: PropTypes.number,
847
- appElement: PropTypes.string
839
+ showImmediate: PropTypes.bool,
840
+ warningTimeout: PropTypes.number,
841
+ appElement: PropTypes.string,
848
842
  };
849
843
  &nbsp;
850
844
  SessionDialogUI.defaultProps = {
851
- showImmediate: false,
852
- warningTimeout: 2,
853
- appElement: undefined
845
+ showImmediate: false,
846
+ warningTimeout: 2,
847
+ appElement: undefined,
854
848
  };
855
849
  &nbsp;</pre></td></tr></table></pre>
856
850
 
@@ -858,10 +852,9 @@ SessionDialogUI.defaultProps = {
858
852
  </div><!-- /wrapper -->
859
853
  <div class='footer quiet pad2 space-top1 center small'>
860
854
  Code coverage generated by
861
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
862
- at Tue Aug 04 2020 16:59:07 GMT-0700 (Pacific Daylight Time)
855
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
856
+ at Thu Feb 02 2023 11:23:00 GMT-0800 (Pacific Standard Time)
863
857
  </div>
864
- </div>
865
858
  <script src="../prettify.js"></script>
866
859
  <script>
867
860
  window.onload = function () {