qpp-style 0.0.9 → 1.0.0-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 (474) hide show
  1. package/.editorconfig +1 -1
  2. package/.eslintrc.js +29 -28
  3. package/.husky/pre-commit +5 -0
  4. package/.prettierrc +1 -0
  5. package/README.md +60 -0
  6. package/components/Accordion/index.jsx +43 -47
  7. package/components/Alert/index.js +53 -0
  8. package/components/Breadcrumb/index.js +8 -8
  9. package/components/Button/index.js +28 -17
  10. package/components/Details/DetailsIcons.js +50 -0
  11. package/components/Details/index.js +53 -0
  12. package/components/Dropdown/index.js +85 -0
  13. package/components/DropdownButton/Menu.js +25 -0
  14. package/components/DropdownButton/MenuButton.js +41 -0
  15. package/components/DropdownButton/MenuItem.js +25 -0
  16. package/components/DropdownButton/MenuItemLink.js +27 -0
  17. package/components/Error/Collapsible.jsx +5 -5
  18. package/components/Error/ErrorUI.jsx +4 -4
  19. package/components/Error/error.js +4 -4
  20. package/components/FlashNotification/FlashNotificationUI.jsx +11 -11
  21. package/components/FlashNotification/index.js +5 -5
  22. package/components/Footer/FooterUI.jsx +180 -182
  23. package/components/Footer/SocialLinks.jsx +1 -1
  24. package/components/Footer/Subscribe.jsx +1 -1
  25. package/components/Footer/footer.js +6 -16
  26. package/components/GovBanner/index.js +117 -0
  27. package/components/Header/HeaderAccountMenu.jsx +51 -77
  28. package/components/Header/HeaderCancel.jsx +2 -2
  29. package/components/Header/HeaderContainer.jsx +48 -34
  30. package/components/Header/HeaderLogo.jsx +58 -17
  31. package/components/Header/HeaderMenuButton.js +41 -15
  32. package/components/Header/HeaderMenuItem.jsx +204 -64
  33. package/components/Header/HeaderMenuLink.js +48 -12
  34. package/components/Header/HeaderMenuSignOutButton.js +48 -12
  35. package/components/Header/HeaderMobileButton.js +18 -9
  36. package/components/Header/HeaderUI.jsx +124 -122
  37. package/components/Header/HelpIcon.jsx +7 -5
  38. package/components/Header/ImpersonatorBanner.jsx +81 -0
  39. package/components/Header/NavigationButtonIcon.jsx +1 -1
  40. package/components/Header/header.js +6 -4
  41. package/components/Header/hooks.js +55 -3
  42. package/components/Header/utag-helpers.js +9 -0
  43. package/components/Infotip/Infotip.jsx +15 -19
  44. package/components/Infotip/InfotipContent.jsx +46 -0
  45. package/components/Infotip/InfotipIcon.jsx +5 -5
  46. package/components/Infotip/index.js +1 -1
  47. package/components/Link/index.js +61 -0
  48. package/components/Modal/LegacyModal.jsx +8 -8
  49. package/components/Modal/Modal.jsx +56 -43
  50. package/components/Modal/index.jsx +11 -11
  51. package/components/NotificationBanner/CollapsedView.js +39 -0
  52. package/components/NotificationBanner/ExpandedView.js +45 -0
  53. package/components/NotificationBanner/index.js +219 -30
  54. package/components/SanitizedContent/index.jsx +189 -166
  55. package/components/Search/index.js +98 -0
  56. package/components/Session/Session.jsx +99 -0
  57. package/components/Session/SessionDialogWrapped.jsx +12 -0
  58. package/components/Session/index.jsx +3 -0
  59. package/components/SideNav/AnimationGroup/AnimationGroup.jsx +11 -4
  60. package/components/SideNav/Content/LevelOneContent.jsx +30 -290
  61. package/components/SideNav/Content/SelectRole/index.js +78 -0
  62. package/components/SideNav/Content/SelectRole/utils.js +149 -0
  63. package/components/SideNav/Content/index.js +2 -3
  64. package/components/SideNav/Details/IndividualDetails.jsx +2 -2
  65. package/components/SideNav/Details/PracticeDetails.jsx +13 -3
  66. package/components/SideNav/Details/index.js +2 -2
  67. package/components/SideNav/Links/CmsSwitchLink.jsx +5 -5
  68. package/components/SideNav/Links/NavItemInline.jsx +7 -7
  69. package/components/SideNav/Links/NavLinkContainer.jsx +30 -35
  70. package/components/SideNav/Links/NavLinkDrawer.jsx +158 -55
  71. package/components/SideNav/Links/NavLinkInline.jsx +23 -20
  72. package/components/SideNav/Links/NavLinkToggle.jsx +7 -7
  73. package/components/SideNav/Links/index.js +5 -5
  74. package/components/SideNav/SideNav.md +28 -27
  75. package/components/SideNav/UI/SideNavUI.jsx +178 -196
  76. package/components/SideNav/UI/default-markup.js +4 -0
  77. package/components/SideNav/UI/index.js +1 -1
  78. package/components/SideNav/UI/utils.js +0 -0
  79. package/components/SideNav/helpers.js +367 -7
  80. package/components/SideNav/index.js +11 -35
  81. package/components/Tabs/TabPanel.js +5 -0
  82. package/components/Tabs/Tabs.js +73 -0
  83. package/components/TextInput/index.js +137 -0
  84. package/components/hooks/useGetConfig.js +75 -0
  85. package/components/index.js +108 -18
  86. package/dist/browser.js +1 -1
  87. package/dist/browser.js.LICENSE.txt +1 -7
  88. package/dist/browser.js.map +1 -1
  89. package/dist/index.js +1 -1
  90. package/dist/index.js.LICENSE.txt +1 -7
  91. package/dist/index.js.map +1 -1
  92. package/dist/react/index.js +1 -1
  93. package/dist/react/index.js.LICENSE.txt +16 -16
  94. package/dist/react/index.js.map +1 -1
  95. package/fonts/PublicSans-Black.ttf +0 -0
  96. package/fonts/PublicSans-BlackItalic.ttf +0 -0
  97. package/fonts/PublicSans-Bold.ttf +0 -0
  98. package/fonts/PublicSans-BoldItalic.ttf +0 -0
  99. package/fonts/PublicSans-ExtraBold.ttf +0 -0
  100. package/fonts/PublicSans-ExtraBoldItalic.ttf +0 -0
  101. package/fonts/PublicSans-ExtraLight.ttf +0 -0
  102. package/fonts/PublicSans-ExtraLightItalic.ttf +0 -0
  103. package/fonts/PublicSans-Italic.ttf +0 -0
  104. package/fonts/PublicSans-Light.ttf +0 -0
  105. package/fonts/PublicSans-LightItalic.ttf +0 -0
  106. package/fonts/PublicSans-Medium.ttf +0 -0
  107. package/fonts/PublicSans-MediumItalic.ttf +0 -0
  108. package/fonts/PublicSans-Regular.ttf +0 -0
  109. package/fonts/PublicSans-SemiBold.ttf +0 -0
  110. package/fonts/PublicSans-SemiBoldItalic.ttf +0 -0
  111. package/fonts/PublicSans-Thin.ttf +0 -0
  112. package/fonts/PublicSans-ThinItalic.ttf +0 -0
  113. package/images/icon-dot-gov.svg +1 -0
  114. package/images/icon-https.svg +1 -0
  115. package/images/icons/close-x.svg +6 -0
  116. package/images/icons/svg/arrow-down.svg +3 -0
  117. package/images/icons/svg/arrow-download.svg +1 -0
  118. package/images/icons/svg/arrow-right.svg +1 -0
  119. package/images/icons/svg/arrow-up.svg +3 -0
  120. package/images/icons/svg/block.svg +5 -0
  121. package/images/icons/svg/calendar.svg +1 -0
  122. package/images/icons/svg/check-circle.svg +5 -0
  123. package/images/icons/svg/checkmark.svg +7 -0
  124. package/images/icons/svg/chevron-down.svg +11 -0
  125. package/images/icons/svg/chevron-left.svg +12 -0
  126. package/images/icons/svg/chevron-right.svg +12 -0
  127. package/images/icons/svg/chevron-up.svg +12 -0
  128. package/images/icons/svg/clipboard.svg +1 -0
  129. package/images/icons/svg/close.svg +1 -0
  130. package/images/icons/svg/divide.svg +13 -0
  131. package/images/icons/svg/doctors-and-clinicians-preview.svg +10 -0
  132. package/images/icons/svg/download.svg +1 -0
  133. package/images/icons/svg/dropdown-arrow.svg +1 -0
  134. package/images/icons/svg/equals.svg +13 -0
  135. package/images/icons/svg/exclamation.svg +10 -0
  136. package/images/icons/svg/external.svg +1 -0
  137. package/images/icons/svg/file-download.svg +1 -0
  138. package/images/icons/svg/file-upload.svg +1 -0
  139. package/images/icons/svg/info.svg +17 -0
  140. package/images/icons/svg/manage-user-access.svg +8 -0
  141. package/images/icons/svg/multiply.svg +12 -0
  142. package/images/icons/svg/performance-feedback.svg +1 -0
  143. package/images/icons/svg/plus.svg +12 -0
  144. package/images/icons/svg/preview.svg +15 -0
  145. package/images/icons/svg/print.svg +1 -0
  146. package/images/icons/svg/registration.svg +8 -0
  147. package/images/icons/svg/reporting.svg +15 -0
  148. package/images/icons/svg/save-disk.svg +5 -0
  149. package/images/icons/svg/search.svg +1 -0
  150. package/images/icons/svg/subtract.svg +15 -0
  151. package/images/icons/svg/targeted-review.svg +15 -0
  152. package/images/icons/svg/tooltip-question.svg +1 -0
  153. package/images/icons/svg/trash.svg +1 -0
  154. package/images/icons/svg/upload.svg +1 -0
  155. package/images/us_flag_small.png +0 -0
  156. package/index.js +5 -0
  157. package/jest.config.js +132 -132
  158. package/lib/Chevron.jsx +32 -0
  159. package/lib/SvgComponents.jsx +197 -49
  160. package/package.json +52 -78
  161. package/session/isAuthV2.js +22 -0
  162. package/session/logout.js +38 -2
  163. package/session/refresh.js +36 -33
  164. package/session/ttl.js +21 -33
  165. package/styles/_global.scss +63 -62
  166. package/styles/_main.scss +6 -0
  167. package/styles/_qpp-style.scss +0 -3
  168. package/styles/components/_accordion.scss +256 -246
  169. package/styles/components/_autocomplete.scss +0 -3
  170. package/styles/components/_notification-banner.scss +151 -150
  171. package/styles/components/_spinner.scss +0 -2
  172. package/styles/components/_tables.scss +77 -67
  173. package/styles/components/_text.scss +102 -102
  174. package/styles/components/_variables.scss +12 -12
  175. package/styles/qppds/base/_backgrounds.scss +4 -9
  176. package/styles/qppds/base/_fonts.scss +29 -5
  177. package/styles/qppds/base/_icon.scss +31 -0
  178. package/styles/qppds/base/_layout.scss +5 -0
  179. package/styles/qppds/base/_typography.scss +81 -47
  180. package/styles/qppds/base/index.scss +5 -8
  181. package/styles/qppds/components/_alert.scss +101 -0
  182. package/styles/qppds/components/_breadcrumbs.scss +55 -21
  183. package/styles/qppds/components/_button.scss +118 -92
  184. package/styles/qppds/components/_card.scss +176 -0
  185. package/styles/qppds/components/_checkbox.scss +201 -0
  186. package/styles/qppds/components/_circular-loader.scss +47 -0
  187. package/styles/qppds/components/_details.scss +91 -0
  188. package/styles/qppds/components/_dropdown-menu.scss +126 -0
  189. package/styles/qppds/components/_dropdown.scss +22 -17
  190. package/styles/qppds/components/_footer.scss +606 -0
  191. package/styles/qppds/components/_gov-banner.scss +342 -0
  192. package/styles/{components → qppds/components}/_header.scss +460 -24
  193. package/styles/qppds/components/_link.scss +37 -12
  194. package/styles/qppds/components/_modal.scss +107 -32
  195. package/styles/qppds/components/_page-header.scss +78 -14
  196. package/styles/qppds/components/_pagination.scss +230 -0
  197. package/styles/qppds/components/_process-list.scss +106 -0
  198. package/styles/qppds/components/_radio-button.scss +185 -0
  199. package/styles/qppds/components/_search.scss +163 -0
  200. package/styles/{components → qppds/components}/_sidebar.scss +2 -0
  201. package/styles/qppds/components/_step-indicator.scss +193 -0
  202. package/styles/qppds/components/_table.scss +159 -0
  203. package/styles/qppds/components/_tabs.scss +199 -0
  204. package/styles/qppds/components/_text-input.scss +60 -0
  205. package/styles/qppds/components/index.scss +25 -6
  206. package/styles/{components → qppds/components}/sidebar/_details.scss +3 -0
  207. package/styles/{components → qppds/components}/sidebar/_links.scss +48 -1
  208. package/styles/qppds/components/sidebar/_select-role-dropdown.scss +21 -0
  209. package/styles/qppds/components/sidebar/_sidebar-animation.scss +91 -0
  210. package/styles/qppds/components/sidebar/_sidebar.scss +145 -0
  211. package/styles/qppds/settings/_functions.scss +3 -1
  212. package/styles/qppds/settings/_index.scss +3 -3
  213. package/styles/qppds/settings/mixins/_borders.scss +6 -0
  214. package/styles/qppds/settings/mixins/_focus.scss +14 -6
  215. package/styles/qppds/settings/mixins/_icons.scss +39 -4
  216. package/styles/qppds/settings/mixins/_index.scss +8 -5
  217. package/styles/qppds/settings/mixins/_layout.scss +47 -8
  218. package/styles/qppds/settings/mixins/_table.scss +92 -0
  219. package/styles/qppds/settings/mixins/_type.scss +90 -0
  220. package/styles/qppds/settings/variables/_color.scss +47 -1
  221. package/styles/qppds/settings/variables/_index.scss +4 -3
  222. package/styles/qppds/settings/variables/_layout.scss +45 -20
  223. package/styles/qppds/settings/variables/_type.scss +51 -10
  224. package/styles/qppds/settings/variables/_z-index.scss +8 -0
  225. package/styles/qppds/utilities/_background-color.scss +37 -33
  226. package/styles/qppds/utilities/_color.scss +28 -4
  227. package/styles/qppds/utilities/{_display-visability.scss → _display-visibility.scss} +13 -4
  228. package/styles/qppds/utilities/_flexbox.scss +126 -13
  229. package/styles/qppds/utilities/_font-family.scss +6 -1
  230. package/styles/qppds/utilities/_font-size.scss +2 -2
  231. package/styles/qppds/utilities/_font-weight.scss +4 -2
  232. package/styles/qppds/utilities/_gap.scss +38 -0
  233. package/styles/qppds/utilities/_height.scss +81 -0
  234. package/styles/qppds/utilities/_list-style.scss +17 -0
  235. package/styles/qppds/utilities/_margin.scss +6 -6
  236. package/styles/qppds/utilities/_padding.scss +6 -6
  237. package/styles/qppds/utilities/_position.scss +24 -0
  238. package/styles/qppds/utilities/_text-align.scss +40 -0
  239. package/styles/qppds/utilities/_text-transform.scss +7 -0
  240. package/styles/qppds/utilities/_vertical-align.scss +72 -0
  241. package/styles/qppds/utilities/_width.scss +46 -8
  242. package/styles/qppds/utilities/index.scss +17 -11
  243. package/svgo.config.js +14 -0
  244. package/test/components/Accordion.test.js +4 -13
  245. package/test/components/ErrorUI.test.js +10 -46
  246. package/test/components/FooterUI.test.js +18 -49
  247. package/test/components/HeaderUI.test.js +27 -45
  248. package/test/components/Infotip.test.js +41 -37
  249. package/test/session/session.test.js +67 -68
  250. package/test-setup.js +0 -8
  251. package/webpack.config.js +29 -39
  252. package/webpack.config.react.js +7 -18
  253. package/.storybook/.babelrc +0 -4
  254. package/.storybook/main.js +0 -88
  255. package/.storybook/preview-head.html +0 -9
  256. package/.storybook/preview.js +0 -5
  257. package/Session.vim +0 -83
  258. package/components/Accordion/Accordion.stories.js +0 -20
  259. package/components/Breadcrumb/Breadcrumb.stories.js +0 -58
  260. package/components/Button/Button.stories.js +0 -125
  261. package/components/Footer/Footer.stories.js +0 -20
  262. package/components/Footer/LegacyFooterUI.jsx +0 -194
  263. package/components/Header/Header.stories.js +0 -32
  264. package/components/InfoModal/InfoModal.stories.js +0 -98
  265. package/components/InfoModal/index.jsx +0 -104
  266. package/components/Infotip/Infotip.stories.js +0 -50
  267. package/components/Modal/Modal.stories.js +0 -159
  268. package/components/NotificationBanner/NotificationBanner.stories.js +0 -22
  269. package/components/NotificationBanner/NotificationBannerUI.jsx +0 -282
  270. package/components/SessionDialogUI.jsx +0 -253
  271. package/components/SideNav/Chart/ScoreChart.jsx +0 -268
  272. package/components/SideNav/Chart/__tests__/ScoreChart.test.js +0 -31
  273. package/components/SideNav/Chart/__tests__/__snapshots__/ScoreChart.test.js.snap +0 -64
  274. package/components/SideNav/Chart/index.js +0 -3
  275. package/components/SideNav/Content/LevelTwoContent.jsx +0 -214
  276. package/components/SideNav/SideNav.stories.js +0 -397
  277. package/components/Spinner/index.js +0 -9
  278. package/components/Tabs/TabsUI.jsx +0 -118
  279. package/components/Tabs/tabs.js +0 -36
  280. package/components/Tooltip/Tooltip.jsx +0 -88
  281. package/components/Tooltip/Tooltip.stories.js +0 -80
  282. package/components/Tooltip/index.js +0 -3
  283. package/components/Tooltip/position.js +0 -68
  284. package/components/UnwrappedSpinner/index.js +0 -8
  285. package/components/UnwrappedTabs/TabPanelUI.jsx +0 -16
  286. package/components/UnwrappedTabs/TabsUI.jsx +0 -82
  287. package/coverage/clover.xml +0 -44
  288. package/coverage/coverage-final.json +0 -2
  289. package/coverage/lcov-report/Accordion/index.html +0 -111
  290. package/coverage/lcov-report/Accordion/index.jsx.html +0 -389
  291. package/coverage/lcov-report/Error/Collapsible.jsx.html +0 -344
  292. package/coverage/lcov-report/Error/ErrorUI.jsx.html +0 -179
  293. package/coverage/lcov-report/Error/index.html +0 -126
  294. package/coverage/lcov-report/HeaderUI.jsx.html +0 -593
  295. package/coverage/lcov-report/ScoreChart.jsx.html +0 -1025
  296. package/coverage/lcov-report/SideNav/Chart/ScoreChart.jsx.html +0 -1025
  297. package/coverage/lcov-report/SideNav/Chart/index.html +0 -111
  298. package/coverage/lcov-report/base.css +0 -224
  299. package/coverage/lcov-report/block-navigation.js +0 -79
  300. package/coverage/lcov-report/components/Accordion/index.html +0 -111
  301. package/coverage/lcov-report/components/Accordion/index.jsx.html +0 -389
  302. package/coverage/lcov-report/components/Error/Collapsible.jsx.html +0 -344
  303. package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +0 -179
  304. package/coverage/lcov-report/components/Error/index.html +0 -126
  305. package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +0 -710
  306. package/coverage/lcov-report/components/Footer/LegacyFooterUI.jsx.html +0 -668
  307. package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +0 -302
  308. package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +0 -182
  309. package/coverage/lcov-report/components/Footer/index.html +0 -156
  310. package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +0 -794
  311. package/coverage/lcov-report/components/Header/HeaderCancel.jsx.html +0 -137
  312. package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +0 -1142
  313. package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +0 -161
  314. package/coverage/lcov-report/components/Header/index.html +0 -156
  315. package/coverage/lcov-report/components/InfoModal/index.html +0 -111
  316. package/coverage/lcov-report/components/InfoModal/index.jsx.html +0 -401
  317. package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +0 -305
  318. package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +0 -203
  319. package/coverage/lcov-report/components/Infotip/index.html +0 -141
  320. package/coverage/lcov-report/components/Infotip/index.js.html +0 -89
  321. package/coverage/lcov-report/components/NotificationBanner/NotificationBannerUI.jsx.html +0 -1010
  322. package/coverage/lcov-report/components/NotificationBanner/index.html +0 -111
  323. package/coverage/lcov-report/components/SanitizedContent/index.html +0 -111
  324. package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +0 -260
  325. package/coverage/lcov-report/components/SessionDialogUI.jsx.html +0 -875
  326. package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +0 -131
  327. package/coverage/lcov-report/components/SideNav/AnimationGroup/index.html +0 -111
  328. package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +0 -1025
  329. package/coverage/lcov-report/components/SideNav/Chart/index.html +0 -126
  330. package/coverage/lcov-report/components/SideNav/Chart/index.js.html +0 -89
  331. package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +0 -1007
  332. package/coverage/lcov-report/components/SideNav/Content/LevelTwoContent.jsx.html +0 -728
  333. package/coverage/lcov-report/components/SideNav/Content/index.html +0 -141
  334. package/coverage/lcov-report/components/SideNav/Content/index.js.html +0 -92
  335. package/coverage/lcov-report/components/SideNav/Details/IndividualDetails.jsx.html +0 -143
  336. package/coverage/lcov-report/components/SideNav/Details/PracticeDetails.jsx.html +0 -203
  337. package/coverage/lcov-report/components/SideNav/Details/index.html +0 -141
  338. package/coverage/lcov-report/components/SideNav/Details/index.js.html +0 -92
  339. package/coverage/lcov-report/components/SideNav/Links/CmsSwitchLink.jsx.html +0 -200
  340. package/coverage/lcov-report/components/SideNav/Links/NavItemInline.jsx.html +0 -242
  341. package/coverage/lcov-report/components/SideNav/Links/NavLinkContainer.jsx.html +0 -200
  342. package/coverage/lcov-report/components/SideNav/Links/NavLinkDrawer.jsx.html +0 -779
  343. package/coverage/lcov-report/components/SideNav/Links/NavLinkInline.jsx.html +0 -356
  344. package/coverage/lcov-report/components/SideNav/Links/NavLinkToggle.jsx.html +0 -179
  345. package/coverage/lcov-report/components/SideNav/Links/index.html +0 -201
  346. package/coverage/lcov-report/components/SideNav/Links/index.js.html +0 -119
  347. package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +0 -1298
  348. package/coverage/lcov-report/components/SideNav/UI/index.html +0 -126
  349. package/coverage/lcov-report/components/SideNav/UI/index.js.html +0 -89
  350. package/coverage/lcov-report/components/SideNav/helpers.js.html +0 -197
  351. package/coverage/lcov-report/components/SideNav/index.html +0 -111
  352. package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +0 -344
  353. package/coverage/lcov-report/components/Tooltip/index.html +0 -141
  354. package/coverage/lcov-report/components/Tooltip/index.js.html +0 -89
  355. package/coverage/lcov-report/components/Tooltip/position.js.html +0 -296
  356. package/coverage/lcov-report/components/index.html +0 -111
  357. package/coverage/lcov-report/favicon.png +0 -0
  358. package/coverage/lcov-report/index.html +0 -111
  359. package/coverage/lcov-report/lib/index.html +0 -111
  360. package/coverage/lcov-report/lib/svg-definitions.svg.html +0 -1319
  361. package/coverage/lcov-report/prettify.css +0 -1
  362. package/coverage/lcov-report/prettify.js +0 -2
  363. package/coverage/lcov-report/react/components/Accordion/index.html +0 -111
  364. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +0 -383
  365. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +0 -344
  366. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +0 -173
  367. package/coverage/lcov-report/react/components/Error/error.js.html +0 -158
  368. package/coverage/lcov-report/react/components/Error/index.html +0 -141
  369. package/coverage/lcov-report/react/components/FlashNotification/FlashNotificationUI.jsx.html +0 -296
  370. package/coverage/lcov-report/react/components/FlashNotification/index.html +0 -126
  371. package/coverage/lcov-report/react/components/FlashNotification/index.js.html +0 -170
  372. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +0 -719
  373. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +0 -662
  374. package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +0 -260
  375. package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +0 -182
  376. package/coverage/lcov-report/react/components/Footer/footer.js.html +0 -170
  377. package/coverage/lcov-report/react/components/Footer/index.html +0 -171
  378. package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +0 -440
  379. package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +0 -128
  380. package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +0 -266
  381. package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +0 -137
  382. package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +0 -152
  383. package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +0 -377
  384. package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +0 -140
  385. package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +0 -158
  386. package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +0 -164
  387. package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +0 -593
  388. package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +0 -170
  389. package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +0 -161
  390. package/coverage/lcov-report/react/components/Header/header.js.html +0 -194
  391. package/coverage/lcov-report/react/components/Header/hooks.js.html +0 -122
  392. package/coverage/lcov-report/react/components/Header/index.html +0 -306
  393. package/coverage/lcov-report/react/components/InfoModal/index.html +0 -111
  394. package/coverage/lcov-report/react/components/InfoModal/index.jsx.html +0 -392
  395. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +0 -305
  396. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +0 -203
  397. package/coverage/lcov-report/react/components/Infotip/index.html +0 -141
  398. package/coverage/lcov-report/react/components/Infotip/index.js.html +0 -89
  399. package/coverage/lcov-report/react/components/Modal/index.html +0 -111
  400. package/coverage/lcov-report/react/components/Modal/index.jsx.html +0 -314
  401. package/coverage/lcov-report/react/components/NotificationBanner/NotificationBannerUI.jsx.html +0 -926
  402. package/coverage/lcov-report/react/components/NotificationBanner/index.html +0 -111
  403. package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +0 -176
  404. package/coverage/lcov-report/react/components/SanitizedContent/index.html +0 -111
  405. package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +0 -680
  406. package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +0 -839
  407. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +0 -140
  408. package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +0 -111
  409. package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +0 -884
  410. package/coverage/lcov-report/react/components/SideNav/Chart/index.html +0 -126
  411. package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +0 -89
  412. package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +0 -1007
  413. package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +0 -722
  414. package/coverage/lcov-report/react/components/SideNav/Content/index.html +0 -141
  415. package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +0 -92
  416. package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +0 -134
  417. package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +0 -203
  418. package/coverage/lcov-report/react/components/SideNav/Details/index.html +0 -141
  419. package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +0 -92
  420. package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +0 -203
  421. package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +0 -242
  422. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +0 -209
  423. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +0 -659
  424. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +0 -401
  425. package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +0 -182
  426. package/coverage/lcov-report/react/components/SideNav/Links/index.html +0 -201
  427. package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +0 -119
  428. package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +0 -1103
  429. package/coverage/lcov-report/react/components/SideNav/UI/index.html +0 -126
  430. package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +0 -89
  431. package/coverage/lcov-report/react/components/SideNav/helpers.js.html +0 -197
  432. package/coverage/lcov-report/react/components/SideNav/index.html +0 -126
  433. package/coverage/lcov-report/react/components/SideNav/index.js.html +0 -239
  434. package/coverage/lcov-report/react/components/Spinner/index.html +0 -111
  435. package/coverage/lcov-report/react/components/Spinner/index.js.html +0 -107
  436. package/coverage/lcov-report/react/components/Tabs/TabsUI.jsx.html +0 -443
  437. package/coverage/lcov-report/react/components/Tabs/index.html +0 -126
  438. package/coverage/lcov-report/react/components/Tabs/tabs.js.html +0 -188
  439. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +0 -344
  440. package/coverage/lcov-report/react/components/Tooltip/index.html +0 -141
  441. package/coverage/lcov-report/react/components/Tooltip/index.js.html +0 -89
  442. package/coverage/lcov-report/react/components/Tooltip/position.js.html +0 -284
  443. package/coverage/lcov-report/react/components/index.html +0 -111
  444. package/coverage/lcov-report/react/index.html +0 -111
  445. package/coverage/lcov-report/react/index.js.html +0 -158
  446. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +0 -1751
  447. package/coverage/lcov-report/react/lib/index.html +0 -126
  448. package/coverage/lcov-report/react/lib/svg-definitions.svg.html +0 -455
  449. package/coverage/lcov-report/react/session/index.html +0 -156
  450. package/coverage/lcov-report/react/session/index.js.html +0 -95
  451. package/coverage/lcov-report/react/session/logout.js.html +0 -203
  452. package/coverage/lcov-report/react/session/refresh.js.html +0 -227
  453. package/coverage/lcov-report/react/session/ttl.js.html +0 -191
  454. package/coverage/lcov-report/session/index.html +0 -156
  455. package/coverage/lcov-report/session/index.js.html +0 -95
  456. package/coverage/lcov-report/session/logout.js.html +0 -212
  457. package/coverage/lcov-report/session/refresh.js.html +0 -227
  458. package/coverage/lcov-report/session/ttl.js.html +0 -191
  459. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  460. package/coverage/lcov-report/sorter.js +0 -170
  461. package/coverage/lcov.info +0 -83
  462. package/styles/components/_footer.scss +0 -593
  463. package/styles/components/_header_backup.scss +0 -574
  464. package/styles/components/sidebar/_sidebar-animation.scss +0 -121
  465. package/styles/components/sidebar/_sidebar.scss +0 -141
  466. package/styles/qppds/utilities/_truncate.scss +0 -8
  467. package/test/components/SessionDialogUI.test.js +0 -354
  468. package/test/components/Tooltip.test.js +0 -147
  469. package/test/components/__snapshots__/Accordion.test.js.snap +0 -11439
  470. package/test/components/__snapshots__/HeaderUI.test.js.snap +0 -3
  471. /package/styles/{components → qppds/components}/sidebar/_animations.scss +0 -0
  472. /package/styles/{components → qppds/components}/sidebar/_cms.scss +0 -0
  473. /package/styles/{components → qppds/components}/sidebar/_sidebar-tooltip.scss +0 -0
  474. /package/styles/{components → qppds/components}/sidebar/project-specific/_wi.scss +0 -0
package/.editorconfig CHANGED
@@ -6,7 +6,7 @@ root = true
6
6
 
7
7
  [*]
8
8
  indent_style = space
9
- indent_size = 4
9
+ indent_size = 2
10
10
  end_of_line = lf
11
11
  charset = utf-8
12
12
  trim_trailing_whitespace = true
package/.eslintrc.js CHANGED
@@ -1,31 +1,32 @@
1
1
  module.exports = {
2
- extends: ['eslint:recommended', 'plugin:react/recommended'],
3
- parser: 'babel-eslint',
4
- parserOptions: {
5
- sourceType: 'module',
6
- ecmaFeatures: {
7
- jsx: true
8
- }
2
+ extends: ["eslint:recommended", "plugin:react/recommended"],
3
+ parser: "@babel/eslint-parser",
4
+ parserOptions: {
5
+ sourceType: "module",
6
+ ecmaFeatures: {
7
+ jsx: true,
9
8
  },
10
- env: {
11
- es6: true,
12
- node: true,
13
- browser: true,
14
- jquery: true,
15
- mocha: true
16
- },
17
- rules: {
18
- 'no-unused-vars': [
19
- 'error',
20
- {
21
- args: 'none'
22
- }
23
- ],
24
- 'linebreak-style': ['error', 'unix'],
25
- 'no-console': 0,
26
- 'no-prototype-builtins': [0]
27
- },
28
- settings: {
29
- react: { version: 'detect' }
30
- }
9
+ },
10
+ env: {
11
+ es6: true,
12
+ node: true,
13
+ browser: true,
14
+ jquery: true,
15
+ mocha: true,
16
+ },
17
+ rules: {
18
+ "no-unused-vars": [
19
+ "error",
20
+ {
21
+ args: "none",
22
+ },
23
+ ],
24
+ "linebreak-style": ["error", "unix"],
25
+ "no-console": 0,
26
+ "no-prototype-builtins": [0],
27
+ "react/no-deprecated": [0],
28
+ },
29
+ settings: {
30
+ react: { version: "detect" },
31
+ },
31
32
  };
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env sh
2
+ . "$(dirname -- "$0")/_/husky.sh"
3
+
4
+ cd react
5
+ npm run precommit
package/.prettierrc ADDED
@@ -0,0 +1 @@
1
+ {}
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # QPP-Style React
2
+
3
+ This directory contains react implementations of the components for QPP.
4
+
5
+ ## Github Branch and Pull Request process
6
+
7
+ 1. Create branch off main and create a Pull Request into main for the feature.
8
+ > Example Branch Name: feature/QPPXX-XXXX_make_icon_better
9
+ 2. Once merged into main, create release branch from main.
10
+ 3. Name the new branch release/x.xx.x
11
+ 4. Run the version bump:
12
+
13
+ ```bash
14
+ cd qpp-style/react
15
+ npm version --no-git-tag-version patch
16
+ ```
17
+
18
+ Example Commit Message:
19
+
20
+ > x.xx.x release
21
+
22
+ 5. Create a pull request against main with the PR Title: x.xx.x release [Example PR](https://github.com/CMSgov/qpp-style/pull/1065)
23
+ 6. Enter the change in the description of the pull request i.e.:
24
+ > Added new svg for Icon Name
25
+
26
+ ## Generate an NPM token with Publish permissions
27
+
28
+ 1. If you do not already have an access token, sign in to npmjs.com and navigate to access tokens.
29
+ 2. Click generate new token.
30
+ 3. Select publish under type.
31
+ 4. Copy the npm token and set its value as the environment variable: NPM_TOKEN
32
+
33
+ ```bash
34
+ export NPM_TOKEN={npm_token}
35
+ ```
36
+
37
+ ## Publish the react qpp-style npm package (used by both react and angular)
38
+
39
+ ```bash
40
+ cd qpp-style/react
41
+ npm i
42
+ npm publish
43
+ ```
44
+
45
+ 7. Once published successfully, merge into main.
46
+
47
+ The Side Nav contains multiple item array types: divider, container, linkBack, linkHome, practiceDetails, individualDetails, linkDrawer, custom, chart, and switchLink.
48
+
49
+ | Item Array Type | Description |
50
+ |-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
51
+ | divider | <hr> element that is located above and below the practice container. |
52
+ | container | gets Dynamic Content of multiple items and contains the linkDrawer item. Level One and Level Two content are located in this container. |
53
+ | linkBack | <button> that links the user back to a URL. This uses a chevron Left icon. |
54
+ | linkHome | <a> tag element which sends the user back to the “Account Home” page /user/submissions. This uses the home icon SVG and is located at the top of the side nav. |
55
+ | practiceDetails | <div> element with the class name practice-container. Inside this container is the <h2> element which includes the Practice Name and the <p> element which is the Practice Tin. The Practice Tin shows either the CPC+ ID, PCF ID, APM Entity ID, VG ID, or Practice Tin. |
56
+ | individualDetails | <div> element with the class name “individual-container”. This parent element contains two other elements which are the <h3> Individual Name and the <p> Individual NPI. |
57
+ | linkDrawer | This is the most complex item type. This item displays the Level One and Level Two <button> elements which contain navigation links depending on each page as well as specific SVG icons. Depending on the page there can be multiple links to the user can access quickly using the side nav. |
58
+ | custom | This option is for sanitized HTML content. This custom HTML will be cleaned of any potentially harmful elements that could compromise the security of the web app. |
59
+ | chart | This option uses the ScoreChart component to display Chart Data on the Side Nav. This data includes categories from Quality Measures, Advancing Care Info, Promoting Interoperability, Improvement Activities, and Cost. |
60
+ | switchLink | This is an implementation of the “Switch Practice” button for the Side Nav. Clicking 'Switch Practice' will take the user back to the TIN list for the part of the application they are viewing. |
@@ -1,57 +1,49 @@
1
- import React, { useState, useRef } from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- const Chevron = (props) => {
5
- return (
6
- <svg
7
- className={props.className}
8
- height="14"
9
- width="14"
10
- viewBox="0 0 200 450"
11
- xmlns="http://www.w3.org/2000/svg"
12
- >
13
- <path
14
- d="m258.476 235.971-194.344 194.343c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901l154.021-154.746-154.021-154.745c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0l194.343 194.343c9.373 9.372 9.373 24.568.001 33.941z"
15
- fill="#242424"
16
- />
17
- </svg>
18
- );
19
- };
20
-
21
- Chevron.propTypes = {
22
- className: PropTypes.string,
23
- };
24
-
25
- Chevron.defaultProps = {
26
- className: 'accordion-icon',
27
- };
1
+ import React, { useState, useRef, useEffect } from "react";
2
+ import PropTypes from "prop-types";
3
+ import { Chevron } from "../../lib/Chevron.jsx";
28
4
 
29
5
  const Accordion = (props) => {
30
- const [setActive, setActiveState] = useState('');
31
- const [setAriaPressed, setAriaPressedState] = useState(false);
32
- const [setHeight, setHeightState] = useState('0px');
33
- const [setRotate, setRotateState] = useState('accordion-icon');
34
-
35
6
  const content = useRef(null);
7
+ const [setActive, setActiveState] = useState(props.isOpen ? "active" : "");
8
+ const ariaPressed = setActive ? "true" : "false";
9
+ const getHeight = (node) => {
10
+ if (node) {
11
+ return `${node.scrollHeight}px`;
12
+ }
13
+ return "auto";
14
+ };
15
+ const height = setActive ? getHeight(content.current) : "0px";
16
+ const rotate = setActive ? "accordion-icon rotate" : "accordion-icon";
36
17
 
37
18
  function toggleAccordion() {
38
- setActiveState(setActive === '' ? 'active' : '');
39
- setAriaPressedState(setActive === '' ? 'true' : 'false');
40
- setHeightState(
41
- setActive === 'active' ? '0px' : `${content.current.scrollHeight}px`
42
- );
43
- setRotateState(
44
- setActive === 'active' ? 'accordion-icon' : 'accordion-icon rotate'
45
- );
19
+ setActiveState(setActive === "" ? "active" : "");
20
+ }
21
+
22
+ function openAccordion() {
23
+ setActiveState("active");
46
24
  }
47
25
 
26
+ function closeAccordion() {
27
+ setActiveState("");
28
+ }
29
+
30
+ useEffect(() => {
31
+ if (props.isOpen) {
32
+ openAccordion();
33
+ } else {
34
+ closeAccordion();
35
+ }
36
+ }, [props.isOpen]);
37
+
48
38
  return (
49
- <div className="accordion-section">
39
+ <div className="accordion-section" data-testid="accordion">
50
40
  <button
51
- className={`accordion ${setActive}`}
41
+ className={`accordion ${setActive} ${
42
+ setActive && props.isSticky ? "sticky" : ""
43
+ }`}
52
44
  aria-label={props.title}
53
- aria-pressed={setAriaPressed}
54
- aria-expanded={setAriaPressed}
45
+ aria-pressed={ariaPressed}
46
+ aria-expanded={ariaPressed}
55
47
  tabIndex="0"
56
48
  onClick={toggleAccordion}
57
49
  >
@@ -72,12 +64,12 @@ const Accordion = (props) => {
72
64
  </div>
73
65
  )}
74
66
  <div className="chevron-container">
75
- <Chevron className={`${setRotate}`} />
67
+ <Chevron className={rotate} />
76
68
  </div>
77
69
  </button>
78
70
  <div
79
71
  ref={content}
80
- style={{ maxHeight: `${setHeight}` }}
72
+ style={{ maxHeight: height }}
81
73
  className="accordion-content"
82
74
  >
83
75
  <div className="accordion-text dashed-border">{props.children}</div>
@@ -92,10 +84,14 @@ Accordion.propTypes = {
92
84
  children: PropTypes.any.isRequired,
93
85
  centerItem: PropTypes.string,
94
86
  rightItem: PropTypes.string,
87
+ isOpen: PropTypes.bool,
88
+ isSticky: PropTypes.bool,
95
89
  };
96
90
 
97
91
  Accordion.defaultProps = {
98
- title: '',
92
+ title: "",
93
+ isOpen: false,
94
+ isSticky: false,
99
95
  };
100
96
 
101
97
  export default Accordion;
@@ -0,0 +1,53 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+
4
+ const Alert = ({
5
+ title,
6
+ children,
7
+ description,
8
+ variant,
9
+ className,
10
+ ...rest
11
+ }) => {
12
+ const HeadingComponent = title?.headingLevel || "h2";
13
+ return (
14
+ <div
15
+ className={`qpp-c-alert qpp-c-alert--${variant} ${className}`}
16
+ role="alert"
17
+ {...rest}
18
+ >
19
+ <div className="qpp-c-alert__body">
20
+ {title && (
21
+ <HeadingComponent className="h4 qpp-c-alert__heading">
22
+ {typeof title === "object" ? title.text : title}
23
+ </HeadingComponent>
24
+ )}
25
+ {description && <p className="qpp-c-alert__text">{description}</p>}
26
+ {children}
27
+ </div>
28
+ </div>
29
+ );
30
+ };
31
+
32
+ Alert.propTypes = {
33
+ children: PropTypes.node,
34
+ className: PropTypes.string,
35
+ description: PropTypes.string,
36
+ title: PropTypes.oneOfType([
37
+ PropTypes.string,
38
+ PropTypes.shape({
39
+ text: PropTypes.string,
40
+ headingLevel: PropTypes.string,
41
+ }),
42
+ ]),
43
+ variant: PropTypes.oneOf(["info", "warning", "success", "error"]),
44
+ };
45
+ Alert.defaultProps = {
46
+ children: null,
47
+ className: "",
48
+ description: null,
49
+ title: null,
50
+ variant: "info",
51
+ };
52
+
53
+ export default Alert;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
3
 
4
4
  const Breadcrumb = ({
5
5
  breadcrumbClass,
@@ -11,7 +11,7 @@ const Breadcrumb = ({
11
11
  return (
12
12
  <nav
13
13
  className={`qpp-c-breadcrumbs ${
14
- !dark ? 'qpp-c-breadcrumbs--light' : ''
14
+ !dark ? "qpp-c-breadcrumbs--light" : ""
15
15
  } ${breadcrumbClass}`}
16
16
  aria-label="Breadcrumbs"
17
17
  >
@@ -50,12 +50,12 @@ const Breadcrumb = ({
50
50
  return (
51
51
  <li
52
52
  key={crumb}
53
- className="qpp-c-breadcrumbs__list-item qpp-c-breadcrumbs__list-item--current"
53
+ className={`${
54
+ i === crumbs.length - 1 ? "sr-only" : ""
55
+ } qpp-c-breadcrumbs__list-itemqpp-c-breadcrumbs__list-item--current`}
54
56
  aria-current="page"
55
57
  >
56
- <span className={i === crumbs.length - 1 ? 'sr-only' : ''}>
57
- {crumb}
58
- </span>
58
+ <span>{crumb}</span>
59
59
  </li>
60
60
  );
61
61
  }
@@ -74,7 +74,7 @@ Breadcrumb.propTypes = {
74
74
  };
75
75
 
76
76
  Breadcrumb.defaultProps = {
77
- breadcrumbClass: '',
77
+ breadcrumbClass: "",
78
78
  dark: false,
79
79
  RouterLink: null,
80
80
  routerExcludedLinks: [],
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
3
 
4
- const VARIANTS = ['secondary', 'outline', 'danger', 'white']
5
- const SIZES = ['big']
4
+ const VARIANTS = ["secondary", "outline", "danger", "white"];
5
+ const SIZES = ["big"];
6
6
 
7
7
  const Button = ({
8
8
  children,
@@ -12,22 +12,29 @@ const Button = ({
12
12
  onClick,
13
13
  size,
14
14
  variant,
15
+ type,
16
+ ...rest
15
17
  }) => {
16
- let btnClass = 'qpp-c-button';
18
+ let btnClass = "qpp-c-button";
17
19
 
18
20
  if (VARIANTS.includes(variant)) {
19
- btnClass = btnClass.concat(' ', `qpp-c-button--${variant}`);
21
+ btnClass = btnClass.concat(" ", `qpp-c-button--${variant}`);
20
22
  }
21
23
  if (SIZES.includes(size)) {
22
- btnClass = btnClass.concat(' ', `qpp-c-button--${size}`);
24
+ btnClass = btnClass.concat(" ", `qpp-c-button--${size}`);
23
25
  }
24
26
  if (className) {
25
- btnClass = btnClass.concat(' ', className);
27
+ btnClass = btnClass.concat(" ", className);
26
28
  }
27
29
 
28
30
  if (href) {
29
31
  return (
30
- <a href={href} data-testid="ds-btn" className={btnClass || ''}>
32
+ <a
33
+ href={href}
34
+ data-testid="ds-btn"
35
+ className={btnClass || ""}
36
+ onClick={onClick}
37
+ >
31
38
  {children}
32
39
  </a>
33
40
  );
@@ -35,9 +42,11 @@ const Button = ({
35
42
  return (
36
43
  <button
37
44
  data-testid="ds-btn"
38
- className={btnClass || ''}
45
+ className={btnClass || ""}
39
46
  onClick={onClick}
40
47
  disabled={loading}
48
+ type={type}
49
+ {...rest}
41
50
  >
42
51
  {children}
43
52
  </button>
@@ -51,29 +60,31 @@ Button.propTypes = {
51
60
  loading: PropTypes.bool,
52
61
  onClick: PropTypes.func,
53
62
  size: PropTypes.oneOf(SIZES),
63
+ type: PropTypes.string,
54
64
  variant: PropTypes.oneOf(VARIANTS),
55
65
  };
56
66
 
57
67
  Button.defaultProps = {
58
68
  children: false,
59
- className: '',
60
- href: '',
69
+ className: "",
70
+ href: "",
61
71
  loading: false,
62
72
  onClick: () => null,
63
73
  size: null,
74
+ type: "button",
64
75
  variant: null,
65
76
  };
66
77
 
67
- export const TextButton = ({ className = '', ...props }) => (
78
+ export const TextButton = ({ className = "", ...props }) => (
68
79
  <Button className={`qpp-c-button--text ${className}`} {...props} />
69
- )
80
+ );
70
81
 
71
82
  TextButton.propTypes = {
72
83
  className: PropTypes.string,
73
- }
84
+ };
74
85
 
75
86
  TextButton.defaultProps = {
76
- className: '',
77
- }
87
+ className: "",
88
+ };
78
89
 
79
90
  export default Button;
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+
4
+ export const Add = ({ iconText }) => (
5
+ <>
6
+ <svg
7
+ className="qpp-c-details--icon-closed qpp-icon-mat qpp-icon-inline--md"
8
+ aria-hidden="true"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ viewBox="0 0 24 24"
11
+ role="img"
12
+ focusable="false"
13
+ >
14
+ <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" />
15
+ </svg>{" "}
16
+ {iconText}
17
+ </>
18
+ );
19
+
20
+ Add.propTypes = {
21
+ iconText: PropTypes.string,
22
+ };
23
+
24
+ Add.defaultProps = {
25
+ iconText: null,
26
+ };
27
+
28
+ export const Remove = ({ iconText }) => (
29
+ <>
30
+ <svg
31
+ className="qpp-c-details--icon-open qpp-icon-mat qpp-icon-inline--md"
32
+ aria-hidden="true"
33
+ xmlns="http://www.w3.org/2000/svg"
34
+ viewBox="0 0 24 24"
35
+ role="img"
36
+ focusable="false"
37
+ >
38
+ <path d="M19 13H5v-2h14v2z" />
39
+ </svg>
40
+ {iconText}
41
+ </>
42
+ );
43
+
44
+ Remove.propTypes = {
45
+ iconText: PropTypes.string,
46
+ };
47
+
48
+ Remove.defaultProps = {
49
+ iconText: null,
50
+ };
@@ -0,0 +1,53 @@
1
+ import React from "react";
2
+ import PropTypes from "prop-types";
3
+ import { Add, Remove } from "./DetailsIcons";
4
+
5
+ const Details = ({ children, title, variant, className, ...rest }) => {
6
+ if (variant === "header") {
7
+ return (
8
+ <details className="qpp-c-details qpp-c-details--header">
9
+ <summary>
10
+ {title}
11
+ <span className="qpp-c-details--icon-closed" aria-hidden="true">
12
+ <Add iconText="View" />
13
+ </span>
14
+ <span className="qpp-c-details--icon-open" aria-hidden="true">
15
+ <Remove iconText="Hide" />
16
+ </span>
17
+ </summary>
18
+ {children}
19
+ </details>
20
+ );
21
+ }
22
+
23
+ return (
24
+ <details className={`qpp-c-details ${className}`} {...rest}>
25
+ <summary
26
+ className={
27
+ variant === "text-button" ? "qpp-c-button qpp-c-button--text" : ""
28
+ }
29
+ >
30
+ <Add />
31
+ <Remove />
32
+ {title}
33
+ </summary>
34
+ {children}
35
+ </details>
36
+ );
37
+ };
38
+
39
+ Details.propTypes = {
40
+ children: PropTypes.node,
41
+ title: PropTypes.node,
42
+ variant: PropTypes.oneOf(["header", "text-button"]),
43
+ className: PropTypes.string,
44
+ };
45
+
46
+ Details.defaultProps = {
47
+ children: false,
48
+ title: null,
49
+ variant: null,
50
+ className: "",
51
+ };
52
+
53
+ export default Details;
@@ -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;