qpp-style 1.2.1 → 1.2.2-bv.0

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 (379) hide show
  1. package/.babelrc +10 -0
  2. package/.editorconfig +1 -1
  3. package/.eslintignore +5 -0
  4. package/.eslintrc.js +32 -0
  5. package/.husky/pre-commit +5 -0
  6. package/.prettierrc +1 -0
  7. package/README.md +53 -50
  8. package/components/Accordion/index.jsx +97 -0
  9. package/components/Alert/index.js +53 -0
  10. package/components/Breadcrumb/Breadcrumb.md +28 -0
  11. package/components/Breadcrumb/index.js +83 -0
  12. package/components/Button/index.js +90 -0
  13. package/components/Details/DetailsIcons.js +50 -0
  14. package/components/Details/index.js +53 -0
  15. package/components/Dropdown/index.js +85 -0
  16. package/components/DropdownButton/Menu.js +25 -0
  17. package/components/DropdownButton/MenuButton.js +41 -0
  18. package/components/DropdownButton/MenuItem.js +25 -0
  19. package/components/DropdownButton/MenuItemLink.js +27 -0
  20. package/components/Error/Collapsible.jsx +88 -0
  21. package/components/Error/ErrorUI.jsx +31 -0
  22. package/components/Error/error.js +26 -0
  23. package/components/FlashNotification/FlashNotificationUI.jsx +91 -0
  24. package/components/FlashNotification/index.js +30 -0
  25. package/components/Footer/FooterUI.jsx +211 -0
  26. package/components/Footer/SocialLinks.jsx +60 -0
  27. package/components/Footer/Subscribe.jsx +34 -0
  28. package/components/Footer/footer.js +20 -0
  29. package/components/GovBanner/index.js +117 -0
  30. package/components/Header/Header.md +111 -0
  31. package/components/Header/HeaderAccountMenu.jsx +94 -0
  32. package/components/Header/HeaderCancel.jsx +16 -0
  33. package/components/Header/HeaderContainer.jsx +87 -0
  34. package/components/Header/HeaderLogo.jsx +62 -0
  35. package/components/Header/HeaderMenuButton.js +50 -0
  36. package/components/Header/HeaderMenuItem.jsx +239 -0
  37. package/components/Header/HeaderMenuLink.js +56 -0
  38. package/components/Header/HeaderMenuSignOutButton.js +62 -0
  39. package/components/Header/HeaderMobileButton.js +37 -0
  40. package/components/Header/HeaderUI.jsx +171 -0
  41. package/components/Header/HelpIcon.jsx +32 -0
  42. package/components/Header/ImpersonatorBanner.jsx +87 -0
  43. package/components/Header/NavigationButtonIcon.jsx +27 -0
  44. package/components/Header/default-content.json +280 -0
  45. package/components/Header/header.js +40 -0
  46. package/components/Header/hooks.js +66 -0
  47. package/components/Header/utag-helpers.js +9 -0
  48. package/components/HeaderSearchBar/index.jsx +80 -0
  49. package/components/Infotip/Infotip.jsx +71 -0
  50. package/components/Infotip/InfotipContent.jsx +48 -0
  51. package/components/Infotip/InfotipIcon.jsx +41 -0
  52. package/components/Infotip/index.js +3 -0
  53. package/components/Link/index.js +61 -0
  54. package/components/Modal/LegacyModal.jsx +72 -0
  55. package/components/Modal/Modal.jsx +140 -0
  56. package/components/Modal/index.jsx +22 -0
  57. package/components/NotificationBanner/CollapsedView.js +39 -0
  58. package/components/NotificationBanner/ExpandedView.js +45 -0
  59. package/components/NotificationBanner/index.js +221 -0
  60. package/components/SanitizedContent/index.jsx +223 -0
  61. package/components/Search/index.js +98 -0
  62. package/components/Session/Session.jsx +89 -0
  63. package/components/Session/SessionDialogWrapped.jsx +12 -0
  64. package/components/Session/index.jsx +3 -0
  65. package/components/SideNav/AnimationGroup/AnimationGroup.jsx +27 -0
  66. package/components/SideNav/Content/LevelOneContent.jsx +59 -0
  67. package/components/SideNav/Content/SelectRole/index.js +70 -0
  68. package/components/SideNav/Content/SelectRole/utils.js +142 -0
  69. package/components/SideNav/Content/index.js +3 -0
  70. package/components/SideNav/Details/IndividualDetails.jsx +18 -0
  71. package/components/SideNav/Details/PracticeDetails.jsx +51 -0
  72. package/components/SideNav/Details/index.js +4 -0
  73. package/components/SideNav/Links/CmsSwitchLink.jsx +41 -0
  74. package/components/SideNav/Links/NavItemInline.jsx +54 -0
  75. package/components/SideNav/Links/NavLinkContainer.jsx +38 -0
  76. package/components/SideNav/Links/NavLinkDrawer.jsx +296 -0
  77. package/components/SideNav/Links/NavLinkInline.jsx +111 -0
  78. package/components/SideNav/Links/NavLinkToggle.jsx +34 -0
  79. package/components/SideNav/Links/index.js +13 -0
  80. package/components/SideNav/SideNav.md +50 -0
  81. package/components/SideNav/UI/SideNavUI.jsx +323 -0
  82. package/components/SideNav/UI/default-markup.js +4 -0
  83. package/components/SideNav/UI/index.js +3 -0
  84. package/{js/main.js → components/SideNav/UI/utils.js} +0 -0
  85. package/components/SideNav/helpers.js +48 -0
  86. package/components/SideNav/index.js +29 -0
  87. package/components/Tabs/TabPanel.js +5 -0
  88. package/components/Tabs/Tabs.js +73 -0
  89. package/components/TextInput/index.js +137 -0
  90. package/components/hooks/useGetConfig.js +74 -0
  91. package/components/index.js +122 -0
  92. package/dist/browser.js +3 -0
  93. package/dist/browser.js.LICENSE.txt +31 -0
  94. package/dist/browser.js.map +1 -0
  95. package/dist/index.js +3 -0
  96. package/dist/index.js.LICENSE.txt +31 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/react/index.js +3 -0
  99. package/dist/react/index.js.LICENSE.txt +54 -0
  100. package/dist/react/index.js.map +1 -0
  101. package/fonts/FontAwesome.otf +0 -0
  102. package/fonts/OFL.txt +0 -0
  103. package/fonts/PublicSans-Black.ttf +0 -0
  104. package/fonts/PublicSans-BlackItalic.ttf +0 -0
  105. package/fonts/PublicSans-Bold.ttf +0 -0
  106. package/fonts/PublicSans-BoldItalic.ttf +0 -0
  107. package/fonts/PublicSans-ExtraBold.ttf +0 -0
  108. package/fonts/PublicSans-ExtraBoldItalic.ttf +0 -0
  109. package/fonts/PublicSans-ExtraLight.ttf +0 -0
  110. package/fonts/PublicSans-ExtraLightItalic.ttf +0 -0
  111. package/fonts/PublicSans-Italic.ttf +0 -0
  112. package/fonts/PublicSans-Light.ttf +0 -0
  113. package/fonts/PublicSans-LightItalic.ttf +0 -0
  114. package/fonts/PublicSans-Medium.ttf +0 -0
  115. package/fonts/PublicSans-MediumItalic.ttf +0 -0
  116. package/fonts/PublicSans-Regular.ttf +0 -0
  117. package/fonts/PublicSans-SemiBold.ttf +0 -0
  118. package/fonts/PublicSans-SemiBoldItalic.ttf +0 -0
  119. package/fonts/PublicSans-Thin.ttf +0 -0
  120. package/fonts/PublicSans-ThinItalic.ttf +0 -0
  121. package/fonts/Rubik-Black.ttf +0 -0
  122. package/fonts/Rubik-BlackItalic.ttf +0 -0
  123. package/fonts/Rubik-Bold.ttf +0 -0
  124. package/fonts/Rubik-BoldItalic.ttf +0 -0
  125. package/fonts/Rubik-Italic.ttf +0 -0
  126. package/fonts/Rubik-Light.ttf +0 -0
  127. package/fonts/Rubik-LightItalic.ttf +0 -0
  128. package/fonts/Rubik-Medium.ttf +0 -0
  129. package/fonts/Rubik-MediumItalic.ttf +0 -0
  130. package/fonts/Rubik-Regular.ttf +0 -0
  131. package/fonts/fontawesome-webfont.eot +0 -0
  132. package/fonts/fontawesome-webfont.svg +0 -0
  133. package/fonts/fontawesome-webfont.ttf +0 -0
  134. package/fonts/fontawesome-webfont.woff +0 -0
  135. package/fonts/fontawesome-webfont.woff2 +0 -0
  136. package/images/favicon/android-chrome-192x192.png +0 -0
  137. package/images/favicon/android-chrome-256x256.png +0 -0
  138. package/images/favicon/apple-touch-icon.png +0 -0
  139. package/{img → images}/favicon/browserconfig.xml +2 -2
  140. package/images/favicon/favicon-16x16.png +0 -0
  141. package/images/favicon/favicon-32x32.png +0 -0
  142. package/images/favicon/favicon.ico +0 -0
  143. package/{img → images}/favicon/manifest.json +4 -4
  144. package/images/favicon/mstile-150x150.png +0 -0
  145. package/images/favicon/safari-pinned-tab.svg +32 -0
  146. package/images/hhs-logo-black.svg +10 -0
  147. package/images/hhs-logo-white.svg +10 -0
  148. package/images/icon-dot-gov.svg +1 -0
  149. package/images/icon-https.svg +1 -0
  150. package/images/icons/close-x.svg +6 -0
  151. package/images/icons/help-headset.svg +21 -0
  152. package/images/icons/svg/arrow-down.svg +3 -0
  153. package/images/icons/svg/arrow-download.svg +1 -0
  154. package/images/icons/svg/arrow-right.svg +1 -0
  155. package/images/icons/svg/arrow-up.svg +3 -0
  156. package/images/icons/svg/block.svg +5 -0
  157. package/images/icons/svg/calendar.svg +1 -0
  158. package/images/icons/svg/check-circle.svg +5 -0
  159. package/images/icons/svg/checkmark.svg +7 -0
  160. package/images/icons/svg/chevron-down.svg +11 -0
  161. package/images/icons/svg/chevron-left.svg +12 -0
  162. package/images/icons/svg/chevron-right.svg +12 -0
  163. package/images/icons/svg/chevron-up.svg +12 -0
  164. package/images/icons/svg/clipboard.svg +1 -0
  165. package/images/icons/svg/close.svg +1 -0
  166. package/images/icons/svg/divide.svg +13 -0
  167. package/images/icons/svg/doctors-and-clinicians-preview.svg +10 -0
  168. package/images/icons/svg/download.svg +1 -0
  169. package/images/icons/svg/dropdown-arrow.svg +1 -0
  170. package/images/icons/svg/equals.svg +13 -0
  171. package/images/icons/svg/exclamation.svg +10 -0
  172. package/images/icons/svg/external.svg +1 -0
  173. package/images/icons/svg/file-download.svg +1 -0
  174. package/images/icons/svg/file-upload.svg +1 -0
  175. package/images/icons/svg/info.svg +17 -0
  176. package/images/icons/svg/manage-user-access.svg +8 -0
  177. package/images/icons/svg/multiply.svg +12 -0
  178. package/images/icons/svg/performance-feedback.svg +1 -0
  179. package/images/icons/svg/plus.svg +12 -0
  180. package/images/icons/svg/preview.svg +15 -0
  181. package/images/icons/svg/print.svg +1 -0
  182. package/images/icons/svg/registration.svg +8 -0
  183. package/images/icons/svg/reporting.svg +15 -0
  184. package/images/icons/svg/save-disk.svg +5 -0
  185. package/images/icons/svg/search.svg +1 -0
  186. package/images/icons/svg/subtract.svg +15 -0
  187. package/images/icons/svg/targeted-review.svg +15 -0
  188. package/images/icons/svg/tooltip-question.svg +1 -0
  189. package/images/icons/svg/trash.svg +1 -0
  190. package/images/icons/svg/upload.svg +1 -0
  191. package/images/qpp_logo_reversed.png +0 -0
  192. package/{img/logo.png → images/qpp_logo_rgb_color.png} +0 -0
  193. package/images/us_flag_small.png +0 -0
  194. package/index.js +31 -0
  195. package/jest/mediaFileTransformer.js +9 -0
  196. package/jest.config.js +188 -0
  197. package/lib/Chevron.jsx +32 -0
  198. package/lib/SvgComponents.jsx +705 -0
  199. package/lib/svg-definitions.svg +125 -0
  200. package/package.json +70 -18
  201. package/session/index.js +5 -0
  202. package/session/logout.js +79 -0
  203. package/session/refresh.js +49 -0
  204. package/session/ttl.js +21 -0
  205. package/styles/_global.scss +84 -53
  206. package/styles/_main.scss +11 -3
  207. package/styles/_paths.scss +1 -1
  208. package/styles/_qpp-style.scss +10 -6
  209. package/styles/components/_accordion.scss +273 -149
  210. package/styles/components/_alerts.scss +9 -6
  211. package/styles/components/_autocomplete.scss +47 -0
  212. package/styles/components/_breadcrumbs.scss +52 -9
  213. package/styles/components/_buttons.scss +545 -277
  214. package/styles/components/_error-page.scss +56 -0
  215. package/styles/components/_flash-notification.scss +98 -0
  216. package/styles/components/_fonts.scss +12 -13
  217. package/styles/components/_forms.scss +145 -67
  218. package/styles/components/_grid.scss +35 -3
  219. package/styles/components/_info-modal.scss +139 -0
  220. package/styles/components/_links.scss +4 -3
  221. package/styles/components/_modals.scss +10 -9
  222. package/styles/components/_notification-banner.scss +166 -0
  223. package/styles/components/_panels.scss +23 -21
  224. package/styles/components/_pie-chart.scss +3 -3
  225. package/styles/components/_score-chart.scss +164 -0
  226. package/styles/components/_spinner.scss +7 -0
  227. package/styles/components/_tables.scss +96 -72
  228. package/styles/components/_tabs.scss +69 -0
  229. package/styles/components/_text.scss +114 -58
  230. package/styles/components/_toggles.scss +0 -0
  231. package/styles/components/_tooltip.scss +23 -0
  232. package/styles/components/_variables.scss +91 -41
  233. package/styles/components/_wells.scss +39 -29
  234. package/styles/qppds/README.md +0 -0
  235. package/styles/qppds/base/_backgrounds.scss +7 -0
  236. package/styles/qppds/base/_fonts.scss +50 -0
  237. package/styles/qppds/base/_icon.scss +31 -0
  238. package/styles/qppds/base/_layout.scss +5 -0
  239. package/styles/qppds/base/_typography.scss +97 -0
  240. package/styles/qppds/base/index.scss +8 -0
  241. package/styles/qppds/components/_alert.scss +101 -0
  242. package/styles/qppds/components/_breadcrumbs.scss +93 -0
  243. package/styles/qppds/components/_button.scss +306 -0
  244. package/styles/qppds/components/_card.scss +176 -0
  245. package/styles/qppds/components/_checkbox.scss +201 -0
  246. package/styles/qppds/components/_circular-loader.scss +47 -0
  247. package/styles/qppds/components/_details.scss +91 -0
  248. package/styles/qppds/components/_dropdown-menu.scss +126 -0
  249. package/styles/qppds/components/_dropdown.scss +56 -0
  250. package/styles/qppds/components/_footer.scss +606 -0
  251. package/styles/qppds/components/_gov-banner.scss +342 -0
  252. package/styles/qppds/components/_header.scss +935 -0
  253. package/styles/qppds/components/_link.scss +54 -0
  254. package/styles/qppds/components/_modal.scss +153 -0
  255. package/styles/qppds/components/_page-header.scss +105 -0
  256. package/styles/qppds/components/_pagination.scss +230 -0
  257. package/styles/qppds/components/_process-list.scss +106 -0
  258. package/styles/qppds/components/_radio-button.scss +185 -0
  259. package/styles/qppds/components/_search.scss +222 -0
  260. package/styles/qppds/components/_sidebar.scss +10 -0
  261. package/styles/qppds/components/_step-indicator.scss +193 -0
  262. package/styles/qppds/components/_table.scss +159 -0
  263. package/styles/qppds/components/_tabs.scss +199 -0
  264. package/styles/qppds/components/_text-input.scss +60 -0
  265. package/styles/qppds/components/index.scss +25 -0
  266. package/styles/qppds/components/sidebar/_animations.scss +38 -0
  267. package/styles/qppds/components/sidebar/_cms.scss +61 -0
  268. package/styles/qppds/components/sidebar/_details.scss +61 -0
  269. package/styles/qppds/components/sidebar/_links.scss +462 -0
  270. package/styles/qppds/components/sidebar/_select-role-dropdown.scss +21 -0
  271. package/styles/qppds/components/sidebar/_sidebar-animation.scss +91 -0
  272. package/styles/qppds/components/sidebar/_sidebar-tooltip.scss +33 -0
  273. package/styles/qppds/components/sidebar/_sidebar.scss +145 -0
  274. package/styles/qppds/components/sidebar/project-specific/_wi.scss +42 -0
  275. package/styles/qppds/index.scss +4 -0
  276. package/styles/qppds/settings/_functions.scss +6 -0
  277. package/styles/qppds/settings/_index.scss +3 -0
  278. package/styles/qppds/settings/mixins/_borders.scss +6 -0
  279. package/styles/qppds/settings/mixins/_focus.scss +30 -0
  280. package/styles/qppds/settings/mixins/_icons.scss +43 -0
  281. package/styles/qppds/settings/mixins/_index.scss +8 -0
  282. package/styles/qppds/settings/mixins/_layout.scss +74 -0
  283. package/styles/qppds/settings/mixins/_lists.scss +12 -0
  284. package/styles/qppds/settings/mixins/_table.scss +92 -0
  285. package/styles/qppds/settings/mixins/_type.scss +90 -0
  286. package/styles/qppds/settings/mixins/_visually-hidden.scss +30 -0
  287. package/styles/qppds/settings/variables/_color.scss +86 -0
  288. package/styles/qppds/settings/variables/_index.scss +4 -0
  289. package/styles/qppds/settings/variables/_layout.scss +69 -0
  290. package/styles/qppds/settings/variables/_type.scss +135 -0
  291. package/styles/qppds/settings/variables/_z-index.scss +8 -0
  292. package/styles/qppds/utilities/_background-color.scss +134 -0
  293. package/styles/qppds/utilities/_color.scss +40 -0
  294. package/styles/qppds/utilities/_display-visibility.scss +84 -0
  295. package/styles/qppds/utilities/_flexbox.scss +240 -0
  296. package/styles/qppds/utilities/_font-family.scss +10 -0
  297. package/styles/qppds/utilities/_font-size.scss +8 -0
  298. package/styles/qppds/utilities/_font-weight.scss +10 -0
  299. package/styles/qppds/utilities/_gap.scss +38 -0
  300. package/styles/qppds/utilities/_height.scss +81 -0
  301. package/styles/qppds/utilities/_list-style.scss +17 -0
  302. package/styles/qppds/utilities/_margin.scss +136 -0
  303. package/styles/qppds/utilities/_padding.scss +76 -0
  304. package/styles/qppds/utilities/_position.scss +24 -0
  305. package/styles/qppds/utilities/_text-align.scss +40 -0
  306. package/styles/qppds/utilities/_text-transform.scss +7 -0
  307. package/styles/qppds/utilities/_vertical-align.scss +72 -0
  308. package/styles/qppds/utilities/_width.scss +82 -0
  309. package/styles/qppds/utilities/index.scss +17 -0
  310. package/styles/qppds.scss +2 -0
  311. package/styles/third-party/_legacy-bootstrap.scss +19 -0
  312. package/styles/third-party/legacy-bootstrap/_buttons.scss +126 -0
  313. package/styles/third-party/legacy-bootstrap/_dropdowns.scss +211 -0
  314. package/styles/third-party/legacy-bootstrap/_forms.scss +510 -0
  315. package/styles/third-party/legacy-bootstrap/_grid.scss +73 -0
  316. package/styles/third-party/legacy-bootstrap/_mixins.scss +27 -0
  317. package/styles/third-party/legacy-bootstrap/_navbar.scss +644 -0
  318. package/styles/third-party/legacy-bootstrap/_navs.scss +193 -0
  319. package/styles/third-party/legacy-bootstrap/_normalize.scss +385 -0
  320. package/styles/third-party/legacy-bootstrap/_scaffolding.scss +116 -0
  321. package/styles/third-party/legacy-bootstrap/_variables.scss +858 -0
  322. package/styles/third-party/legacy-bootstrap/mixins/_buttons.scss +70 -0
  323. package/styles/third-party/legacy-bootstrap/mixins/_clearfix.scss +22 -0
  324. package/styles/third-party/legacy-bootstrap/mixins/_forms.scss +108 -0
  325. package/styles/third-party/legacy-bootstrap/mixins/_grid-framework.scss +86 -0
  326. package/styles/third-party/legacy-bootstrap/mixins/_grid.scss +112 -0
  327. package/styles/third-party/legacy-bootstrap/mixins/_labels.scss +12 -0
  328. package/styles/third-party/legacy-bootstrap/mixins/_nav-divider.scss +10 -0
  329. package/styles/third-party/legacy-bootstrap/mixins/_nav-vertical-align.scss +9 -0
  330. package/styles/third-party/legacy-bootstrap/mixins/_opacity.scss +7 -0
  331. package/styles/third-party/legacy-bootstrap/mixins/_panels.scss +30 -0
  332. package/styles/third-party/legacy-bootstrap/mixins/_reset-filter.scss +7 -0
  333. package/styles/third-party/legacy-bootstrap/mixins/_reset-text.scss +18 -0
  334. package/styles/third-party/legacy-bootstrap/mixins/_resize.scss +6 -0
  335. package/styles/third-party/legacy-bootstrap/mixins/_responsive-visibility.scss +25 -0
  336. package/styles/third-party/legacy-bootstrap/mixins/_size.scss +10 -0
  337. package/styles/third-party/legacy-bootstrap/mixins/_tab-focus.scss +9 -0
  338. package/styles/third-party/legacy-bootstrap/mixins/_table-row.scss +28 -0
  339. package/styles/third-party/legacy-bootstrap/mixins/_text-emphasis.scss +12 -0
  340. package/styles/third-party/legacy-bootstrap/mixins/_text-overflow.scss +8 -0
  341. package/styles/third-party/legacy-bootstrap/mixins/_vendor-prefixes.scss +182 -0
  342. package/styles/utility/_mixins.scss +28 -20
  343. package/styles/utility/_utilities.scss +12 -1
  344. package/svgo.config.js +14 -0
  345. package/test/components/Accordion.test.js +12 -0
  346. package/test/components/ErrorUI.test.js +33 -0
  347. package/test/components/FooterUI.test.js +59 -0
  348. package/test/components/HeaderUI.test.js +35 -0
  349. package/test/components/Infotip.test.js +77 -0
  350. package/test/components/SideNavUI.test.js +23 -0
  351. package/test/index.test.js +8 -0
  352. package/test/session/session.test.js +220 -0
  353. package/test-setup.js +1 -0
  354. package/webpack.config.js +137 -0
  355. package/webpack.config.react.js +75 -0
  356. package/.npmignore +0 -26
  357. package/Gemfile +0 -25
  358. package/_config.yml +0 -17
  359. package/_data/nav.yml +0 -11
  360. package/_includes/footer.html +0 -3
  361. package/_includes/header.html +0 -10
  362. package/_layouts/base.html +0 -44
  363. package/css/main.scss +0 -5
  364. package/img/favicon/android-chrome-192x192.png +0 -0
  365. package/img/favicon/android-chrome-512x512.png +0 -0
  366. package/img/favicon/apple-touch-icon.png +0 -0
  367. package/img/favicon/favicon-16x16.png +0 -0
  368. package/img/favicon/favicon-32x32.png +0 -0
  369. package/img/favicon/favicon.ico +0 -0
  370. package/img/favicon/mstile-150x150.png +0 -0
  371. package/img/favicon/safari-pinned-tab.svg +0 -41
  372. package/index.md +0 -285
  373. package/interface.md +0 -153
  374. package/npm-shrinkwrap.json +0 -1573
  375. package/styles/components/_tool-tips.scss +0 -6
  376. package/styles/guide/_layout.scss +0 -119
  377. package/styles/layout/_footer.scss +0 -93
  378. package/styles/layout/_header.scss +0 -336
  379. package/typography.md +0 -146
@@ -0,0 +1,85 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+
4
+ const Dropdown = ({
5
+ className,
6
+ id,
7
+ ariaLabelledBy,
8
+ ariaLabel,
9
+ onChange,
10
+ dataTestId,
11
+ name,
12
+ dataType,
13
+ disabled,
14
+ size,
15
+ options,
16
+ children,
17
+ parentElement,
18
+ ...rest
19
+ }) => {
20
+ const dropdownClass = [
21
+ "qpp-c-dropdown",
22
+ size === "big" && "qpp-c-dropdown--big",
23
+ className,
24
+ ]
25
+ .filter(Boolean)
26
+ .join(" ");
27
+
28
+ return (
29
+ <select
30
+ id={id}
31
+ aria-labelledby={ariaLabelledBy}
32
+ aria-label={ariaLabel}
33
+ className={dropdownClass || ""}
34
+ onChange={onChange}
35
+ data-testid={dataTestId}
36
+ name={name}
37
+ disabled={disabled}
38
+ data-type={dataType}
39
+ {...rest}
40
+ >
41
+ {children}
42
+ {options.map(({ disabled, name, value }) => (
43
+ <option disabled={disabled} key={value} value={value}>
44
+ {name}
45
+ </option>
46
+ ))}
47
+ </select>
48
+ );
49
+ };
50
+
51
+ Dropdown.propTypes = {
52
+ children: PropTypes.node,
53
+ className: PropTypes.string,
54
+ id: PropTypes.string,
55
+ ariaLabelledBy: PropTypes.string,
56
+ ariaLabel: PropTypes.string,
57
+ onChange: PropTypes.func,
58
+ value: PropTypes.string,
59
+ defaultValue: PropTypes.string,
60
+ dataTestId: PropTypes.string,
61
+ name: PropTypes.string,
62
+ dataType: PropTypes.string,
63
+ disabled: PropTypes.bool,
64
+ size: PropTypes.oneOf(["big"]),
65
+ options: PropTypes.array,
66
+ parentElement: PropTypes.string,
67
+ };
68
+
69
+ Dropdown.defaultProps = {
70
+ children: false,
71
+ className: "qpp-u-width--100",
72
+ id: null,
73
+ ariaLabelledBy: null,
74
+ ariaLabel: null,
75
+ onChange: () => null,
76
+ dataTestId: null,
77
+ name: null,
78
+ dataType: null,
79
+ disabled: false,
80
+ size: null,
81
+ options: [],
82
+ parentElement: "span",
83
+ };
84
+
85
+ export default Dropdown;
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { Menu as AriaKitMenu } from "ariakit/menu";
4
+
5
+ function Menu({ state, className, children, ...props }) {
6
+ return (
7
+ <AriaKitMenu as="ul" state={state} className={className} {...props}>
8
+ {children}
9
+ </AriaKitMenu>
10
+ );
11
+ }
12
+
13
+ Menu.propTypes = {
14
+ state: PropTypes.object.isRequired,
15
+ className: PropTypes.string,
16
+ children: PropTypes.node,
17
+ };
18
+
19
+ Menu.defaultProps = {
20
+ className:
21
+ "qpp-c-dropdown-menu qpp-c-dropdown-menu__box qpp-c-dropdown-menu__list",
22
+ children: null,
23
+ };
24
+
25
+ export default Menu;
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { MenuButton as AriaKitButton } from "ariakit/menu";
4
+
5
+ function MenuButton({ state, className, iconExist, children, ...props }) {
6
+ const dropDownIsOpen = state.open;
7
+
8
+ const CheveronUpIcon = "M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z";
9
+ const CheveronDownIcon = "M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z";
10
+
11
+ return (
12
+ <AriaKitButton state={state} className={className} {...props}>
13
+ {children}{" "}
14
+ {iconExist && (
15
+ <svg
16
+ className="qpp-icon-mat qpp-icon-inline--lg"
17
+ focusable="false"
18
+ viewBox="0 0 24 24"
19
+ aria-hidden="true"
20
+ >
21
+ <path d={dropDownIsOpen ? CheveronUpIcon : CheveronDownIcon} />
22
+ </svg>
23
+ )}
24
+ </AriaKitButton>
25
+ );
26
+ }
27
+
28
+ MenuButton.propTypes = {
29
+ state: PropTypes.object.isRequired,
30
+ className: PropTypes.string,
31
+ iconExist: PropTypes.bool,
32
+ children: PropTypes.node,
33
+ };
34
+
35
+ MenuButton.defaultProps = {
36
+ className: "qpp-c-button",
37
+ iconExist: true,
38
+ children: null,
39
+ };
40
+
41
+ export default MenuButton;
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { MenuItem as AriaKitMenuItem } from "ariakit/menu";
4
+
5
+ function MenuItem({ as, className, children, ...props }) {
6
+ return (
7
+ <AriaKitMenuItem as={as} className={className} {...props}>
8
+ {children}
9
+ </AriaKitMenuItem>
10
+ );
11
+ }
12
+
13
+ MenuItem.propTypes = {
14
+ as: PropTypes.string,
15
+ className: PropTypes.string,
16
+ children: PropTypes.node,
17
+ };
18
+
19
+ MenuItem.defaultProps = {
20
+ as: "li",
21
+ className: "qpp-c-dropdown-menu__item",
22
+ children: null,
23
+ };
24
+
25
+ export default MenuItem;
@@ -0,0 +1,27 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { MenuItem as AriaKitMenuItem } from "ariakit/menu";
4
+
5
+ function MenuItemLink({ as, className, children, ...props }) {
6
+ return (
7
+ <li role="none">
8
+ <AriaKitMenuItem as={as} className={className} {...props}>
9
+ {children}
10
+ </AriaKitMenuItem>
11
+ </li>
12
+ );
13
+ }
14
+
15
+ MenuItemLink.propTypes = {
16
+ as: PropTypes.string,
17
+ className: PropTypes.string,
18
+ children: PropTypes.node,
19
+ };
20
+
21
+ MenuItemLink.defaultProps = {
22
+ as: "a",
23
+ className: "qpp-c-dropdown-menu__item",
24
+ children: null,
25
+ };
26
+
27
+ export default MenuItemLink;
@@ -0,0 +1,88 @@
1
+ import React, { Component } from "react";
2
+ import PropTypes from "prop-types";
3
+
4
+ class Collapsible extends Component {
5
+ constructor(props) {
6
+ super(props);
7
+
8
+ this.state = {
9
+ isExpanded: false,
10
+ };
11
+
12
+ this._toggleExpanded = this.toggleExpanded.bind(this);
13
+ this._renderShowButton = this.renderShowButton.bind(this);
14
+ this._renderHideButton = this.renderHideButton.bind(this);
15
+ }
16
+
17
+ toggleExpanded() {
18
+ this.setState({
19
+ isExpanded: !this.state.isExpanded,
20
+ });
21
+ }
22
+
23
+ renderShowButton() {
24
+ return (
25
+ <span className="collapsible-show-label">{this.props.showLabel}</span>
26
+ );
27
+ }
28
+
29
+ renderHideButton() {
30
+ if (this.props.hideLabel) {
31
+ return (
32
+ <span className="collapsible-hide-label">{this.props.hideLabel}</span>
33
+ );
34
+ } else {
35
+ return "";
36
+ }
37
+ }
38
+
39
+ render() {
40
+ const isArray = Array.isArray(this.props.content);
41
+ const isHidden = this.state.isExpanded ? undefined : true;
42
+
43
+ return (
44
+ <div className="collapsible-container">
45
+ <button
46
+ onClick={this._toggleExpanded}
47
+ className="collapsible-summary"
48
+ type="button"
49
+ aria-expanded={this.state.isExpanded ? true : false}
50
+ >
51
+ {this._renderShowButton()}
52
+ {this._renderHideButton()}
53
+ </button>
54
+
55
+ <div className="collapsible-details" hidden={isHidden}>
56
+ {isArray ? (
57
+ <ul className="items">
58
+ {this.props.content.map((c) => (
59
+ <li key={c.contentTitle}>
60
+ <p>
61
+ <b>{c.contentTitle}</b>
62
+ </p>
63
+ <p>{c.content}</p>
64
+ </li>
65
+ ))}
66
+ </ul>
67
+ ) : (
68
+ <div>
69
+ <p>
70
+ <b>{this.props.contentTitle}</b>
71
+ </p>
72
+ <p>{this.props.content}</p>
73
+ </div>
74
+ )}
75
+ </div>
76
+ </div>
77
+ );
78
+ }
79
+ }
80
+
81
+ Collapsible.propTypes = {
82
+ showLabel: PropTypes.string.isRequired,
83
+ hideLabel: PropTypes.string.isRequired,
84
+ content: PropTypes.oneOfType([PropTypes.array, PropTypes.string]).isRequired,
85
+ contentTitle: PropTypes.string,
86
+ };
87
+
88
+ export default Collapsible;
@@ -0,0 +1,31 @@
1
+ import React from "react";
2
+ import Collapsible from "./Collapsible";
3
+ import PropTypes from "prop-types";
4
+
5
+ const ErrorUI = (props) => {
6
+ let errorTitle = `${props.type || "Error"} ${props.code || ""}`;
7
+ let errorDetails = props.message;
8
+
9
+ return (
10
+ <section className="page-error">
11
+ <div className="responsive-container">
12
+ <h1>We’re sorry.</h1>
13
+ <p className="h2">We cannot access this page.</p>
14
+ <Collapsible
15
+ showLabel="Open technical details about the error"
16
+ hideLabel="Close technical details about the error"
17
+ contentTitle={errorTitle}
18
+ content={errorDetails}
19
+ />
20
+ </div>
21
+ </section>
22
+ );
23
+ };
24
+
25
+ ErrorUI.propTypes = {
26
+ code: PropTypes.string,
27
+ message: PropTypes.oneOfType([PropTypes.array, PropTypes.string]),
28
+ type: PropTypes.string,
29
+ };
30
+
31
+ export default ErrorUI;
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { render } from "react-dom";
3
+ import ErrorUI from "./ErrorUI";
4
+
5
+ /**
6
+ * Renders the QPP Error Page content.
7
+ */
8
+ export default class ErrorPage {
9
+ /**
10
+ * @param {Object} options - An object containing content and config data
11
+ * @param {String} options.type - The error type
12
+ * @param {String} options.code - The error code
13
+ * @param {String} options.message - The error message
14
+ * @param {HTMLElement} options.rootElement - Elem inside which to render
15
+ */
16
+ constructor(options) {
17
+ render(
18
+ <ErrorUI
19
+ type={options.type}
20
+ code={options.code}
21
+ message={options.message}
22
+ />,
23
+ options.rootElement,
24
+ );
25
+ }
26
+ }
@@ -0,0 +1,91 @@
1
+ import React, { Component } from "react";
2
+ import PropTypes from "prop-types";
3
+ import reactDOM from "react-dom";
4
+ import { CloseXIcon } from "../../lib/SvgComponents.jsx";
5
+
6
+ class FlashNotification extends Component {
7
+ constructor(props) {
8
+ super(props);
9
+ this.state = { isClosed: true };
10
+ this._closeFlashNotification = this.closeFlashNotification.bind(this);
11
+ this._fadeOutNotification = this.fadeOutNotification.bind(this);
12
+ }
13
+
14
+ render() {
15
+ return (
16
+ <div
17
+ className={
18
+ this.state.isClosed
19
+ ? "flash-notification notification-closed"
20
+ : "flash-notification"
21
+ }
22
+ ref={(elem) => {
23
+ this.element = elem;
24
+ }}
25
+ >
26
+ <div className={this.props.success ? "success" : "error"}>
27
+ <div className="icon"></div>
28
+ <div className="text-content">
29
+ <p className="title-text">{this.props.titleText}</p>
30
+ <p className="body-text">{this.props.bodyText}</p>
31
+ </div>
32
+ <div className="close-notification-container">
33
+ <button
34
+ className="closeNotification"
35
+ aria-label="Close notification"
36
+ onClick={this._closeFlashNotification}
37
+ >
38
+ <svg className="close-icon" aria-hidden="true">
39
+ {/* <use xlinkHref="#closex" /> */}
40
+ <CloseXIcon />
41
+ </svg>
42
+ </button>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ );
47
+ }
48
+
49
+ componentDidMount() {
50
+ setTimeout(
51
+ function () {
52
+ this.setState({ isClosed: false });
53
+ }.bind(this),
54
+ 250,
55
+ );
56
+
57
+ this.timer = setTimeout(
58
+ function () {
59
+ this._fadeOutNotification();
60
+ }.bind(this),
61
+ 10000,
62
+ );
63
+ }
64
+
65
+ fadeOutNotification() {
66
+ this.setState({ isClosed: true });
67
+ setTimeout(
68
+ function () {
69
+ reactDOM.unmountComponentAtNode(this.element.parentElement);
70
+ if (typeof this.props.onClose === "function") {
71
+ this.props.onClose();
72
+ }
73
+ }.bind(this),
74
+ 500,
75
+ );
76
+ }
77
+
78
+ closeFlashNotification() {
79
+ clearTimeout(this.timer);
80
+ this._fadeOutNotification();
81
+ }
82
+ }
83
+
84
+ FlashNotification.propTypes = {
85
+ bodyText: PropTypes.string,
86
+ success: PropTypes.bool.isRequired,
87
+ titleText: PropTypes.string,
88
+ onClose: PropTypes.func,
89
+ };
90
+
91
+ export default FlashNotification;
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+ import { render } from "react-dom";
3
+ import FlashNotificationUI from "./FlashNotificationUI";
4
+
5
+ /**
6
+ * Renders the Confirmation/Error Flash Component
7
+ */
8
+ export default class FlashNotification {
9
+ /**
10
+ * @param {Object} options - An object containing content and config data
11
+ * @param {Boolean} options.success - Whether to render a confirmation or error notification
12
+ * @param {String} options.titleText - The title text displayed on the notification
13
+ * @param {String} options.bodyText - The body text displayed on the notification
14
+ * @param {HTMLElement} options.rootElement - Elem inside which to render
15
+ */
16
+ constructor(options) {
17
+ if (options.hasOwnProperty("rootElement")) {
18
+ render(
19
+ <FlashNotificationUI
20
+ success={options.success}
21
+ titleText={options.titleText}
22
+ bodyText={options.bodyText}
23
+ />,
24
+ options.rootElement,
25
+ );
26
+ } else {
27
+ render(<FlashNotificationUI />, options);
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,211 @@
1
+ import React from "react";
2
+ import InfoTip from "../Infotip/Infotip";
3
+ import Subscribe from "./Subscribe";
4
+ import SocialLinks from "./SocialLinks";
5
+ import pjson from "../../package.json";
6
+ import { OpenInNewIcon } from "../../lib/SvgComponents";
7
+
8
+ const infoTipLabel =
9
+ "When dialing 711, you will automatically be connected to a TRS Communications Assistant who will relay your conversation to the help desk agent with strict confidentiality.";
10
+ const { version: buildVersion } = pjson;
11
+ const FooterUI = () => (
12
+ <>
13
+ <div className="feedback-session-sign-up">
14
+ <div className="responsive-container">
15
+ <hr />
16
+ <p>
17
+ <strong>Help shape the future of QPP.</strong> Participate in a user
18
+ feedback session.{" "}
19
+ <a className="email-note-link" href="/about/hcd-research">
20
+ Sign up now
21
+ </a>
22
+ </p>
23
+ </div>
24
+ </div>
25
+ <footer className="global-footer">
26
+ <div className="build-version" id="build-version">
27
+ {buildVersion}
28
+ </div>
29
+ <div className="responsive-container">
30
+ <>
31
+ <div className="global-footer-container">
32
+ <div className="footer-resources">
33
+ <h3 className="sub-title">Resources</h3>
34
+ <ul>
35
+ <li>
36
+ <a
37
+ href="/about/resource-library"
38
+ aria-label="Resource Library"
39
+ data-track-category="FooterNav"
40
+ data-track-action="OpenEducationAndTools"
41
+ data-track-label="Education and Tools"
42
+ >
43
+ Resource Library
44
+ </a>
45
+ </li>
46
+ <li>
47
+ <a
48
+ href="/resources/help-and-support"
49
+ aria-label="Help and Support"
50
+ data-track-category="FooterNav"
51
+ data-track-action="OpenHelpAndSupport"
52
+ data-track-label="Help and Support"
53
+ >
54
+ Help and Support
55
+ </a>
56
+ </li>
57
+ <li>
58
+ <a
59
+ href="/about/small-underserved-rural-practices"
60
+ aria-label="Support for Small Practices"
61
+ data-track-category="FooterNav"
62
+ data-track-action="OpenSupportSmallPractices"
63
+ data-track-label="Support for Small Practices"
64
+ >
65
+ Support for Small Practices
66
+ </a>
67
+ </li>
68
+ <li>
69
+ <a
70
+ href="/developers"
71
+ aria-label="Developer Tools"
72
+ data-track-category="FooterNav"
73
+ data-track-action="OpenDeveloperTools"
74
+ data-track-label="Quality Payment Program"
75
+ >
76
+ Developer Tools
77
+ </a>
78
+ </li>
79
+ <li>
80
+ <a
81
+ href="/glossary"
82
+ aria-label="Glossary"
83
+ data-track-category="FooterNav"
84
+ data-track-action="OpenGlossary"
85
+ data-track-label="Glossary"
86
+ >
87
+ Glossary
88
+ </a>
89
+ </li>
90
+ </ul>
91
+ </div>
92
+ <div className="footer-contact-cms">
93
+ <h3 className="sub-title">Contact CMS</h3>
94
+ <p className="contact-title">Phone:</p>
95
+ <p>Monday - Friday 8 a.m - 8 p.m ET</p>
96
+ <p>
97
+ 1-866-288-8292 (TRS: 711)
98
+ <span className="footer-trs-infotip">
99
+ <InfoTip
100
+ aria-labelledby="footer-trs-infotip"
101
+ ariaLabel="TRS Communications Assistant Information"
102
+ label={infoTipLabel}
103
+ />
104
+ </span>
105
+ </p>
106
+
107
+ <p className="contact-title">Email:</p>
108
+ <p>
109
+ <a
110
+ aria-label="QPP@cms.hhs.gov"
111
+ href="mailto:QPP@cms.hhs.gov"
112
+ className="email-link"
113
+ >
114
+ QPP@cms.hhs.gov
115
+ </a>
116
+ </p>
117
+
118
+ <p className="contact-title">QPP Service Center:</p>
119
+ <h3 className="sub-title qpp-u-margin-y--0">
120
+ <a
121
+ href="https://cmsqualitysupport.servicenowservices.com/ccsq_support_central"
122
+ aria-label="CCSQ Support Central"
123
+ className="email-link"
124
+ target="__blank"
125
+ rel="noopener noreferrer"
126
+ >
127
+ <strong>Create or Track a QPP Service Center Ticket</strong>
128
+ <OpenInNewIcon className="ccsq-link-icon" />
129
+ </a>
130
+ </h3>
131
+ </div>
132
+ <div className="footer-social-newsletter">
133
+ <h3 className="sub-title">Stay Connected</h3>
134
+ <SocialLinks />
135
+ <h3 className="sub-title">Sign Up for the QPP Listserv</h3>
136
+ <Subscribe />
137
+ </div>
138
+ </div>
139
+ <hr />
140
+ </>
141
+
142
+ <div className="other-links">
143
+ <ul className="small">
144
+ <li>
145
+ <a
146
+ href="/privacy"
147
+ aria-label="Notice of Privacy and Disclaimer"
148
+ data-track-category="FooterNav"
149
+ data-track-action="OpenPrivacyDisclaimer"
150
+ data-track-label="Notice of Privacy and Disclaimer"
151
+ >
152
+ CMS Privacy Notice
153
+ </a>
154
+ </li>
155
+ <li className="divider"></li>{" "}
156
+ <li>
157
+ <a
158
+ href="/accessibility"
159
+ aria-label="Accessibility"
160
+ data-track-category="FooterNav"
161
+ data-track-action="OpenAccessibility"
162
+ data-track-label="Accessibility"
163
+ >
164
+ Accessibility
165
+ </a>
166
+ </li>
167
+ <li className="divider"></li>{" "}
168
+ <li>
169
+ <a
170
+ aria-label="Download Adobe Reader"
171
+ className="adobe-link"
172
+ rel="noopener noreferrer"
173
+ target="_blank"
174
+ href="https://get.adobe.com/reader"
175
+ data-track-category="FooterNav"
176
+ data-track-action="DownloadAdobeReader"
177
+ data-track-label="AdobeReader"
178
+ >
179
+ Download Adobe Reader
180
+ </a>
181
+ </li>
182
+ </ul>
183
+ <hr />
184
+ </div>
185
+ <div className="qpp-hhs-logo-container">
186
+ <div className="qpp-logo-container">
187
+ <img
188
+ className="qpp-logo"
189
+ src="/images/qpp_logo_rgb_color.png"
190
+ alt="qpp logo"
191
+ />
192
+ </div>
193
+ <div className="hhs-logo-container">
194
+ <img
195
+ className="hhs-logo"
196
+ alt="Department of Health &amp; Human Services USA"
197
+ src="/images/hhs-logo-black.svg"
198
+ />
199
+ <p>
200
+ A federal government website managed and paid for by the U.S
201
+ Centers for Medicare &amp; Medicaid Services. 7500 Security
202
+ Boulevard, Baltimore MD 21244
203
+ </p>
204
+ </div>
205
+ </div>
206
+ </div>
207
+ </footer>
208
+ </>
209
+ );
210
+
211
+ export default FooterUI;