@openedx/paragon 22.4.0 → 23.0.0-alpha.1

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 (530) hide show
  1. package/README.md +36 -5
  2. package/bin/paragon-scripts.js +128 -9
  3. package/dist/ActionRow/_index.scss +2 -4
  4. package/dist/Alert/index.scss +41 -32
  5. package/dist/Annotation/_mixins.scss +104 -0
  6. package/dist/Annotation/index.scss +130 -103
  7. package/dist/Avatar/index.scss +18 -20
  8. package/dist/AvatarButton/index.scss +3 -5
  9. package/dist/Badge/index.scss +112 -2
  10. package/dist/Breadcrumb/index.scss +14 -16
  11. package/dist/Bubble/index.scss +25 -12
  12. package/dist/Button/_mixins.scss +14 -0
  13. package/dist/Button/button-group.scss +126 -0
  14. package/dist/Button/index.js +0 -2
  15. package/dist/Button/index.js.map +1 -1
  16. package/dist/Button/index.scss +855 -370
  17. package/dist/Card/card-bootstrap.scss +168 -0
  18. package/dist/Card/index.scss +78 -79
  19. package/dist/Carousel/index.scss +168 -2
  20. package/dist/Chip/index.scss +46 -37
  21. package/dist/Chip/mixins.scss +8 -3
  22. package/dist/ChipCarousel/index.scss +4 -4
  23. package/dist/CloseButton/index.scss +31 -2
  24. package/dist/Code/index.scss +47 -2
  25. package/dist/Collapsible/index.scss +15 -15
  26. package/dist/ColorPicker/index.scss +9 -11
  27. package/dist/DataTable/CollapsibleButtonGroup.js +2 -2
  28. package/dist/DataTable/CollapsibleButtonGroup.js.map +1 -1
  29. package/dist/DataTable/index.scss +48 -50
  30. package/dist/Dropdown/dropdown-bootstrap.scss +181 -0
  31. package/dist/Dropdown/index.js +0 -2
  32. package/dist/Dropdown/index.js.map +1 -1
  33. package/dist/Dropdown/index.scss +11 -12
  34. package/dist/Dropzone/index.scss +12 -14
  35. package/dist/Form/_FormText.scss +8 -8
  36. package/dist/Form/_bootstrap-custom-forms.scss +551 -0
  37. package/dist/Form/_bootstrap-forms.scss +381 -0
  38. package/dist/Form/_index.scss +168 -146
  39. package/dist/Form/_input-group.scss +188 -0
  40. package/dist/Form/_mixins.scss +216 -3
  41. package/dist/Hyperlink/index.scss +1 -1
  42. package/dist/Icon/index.scss +10 -12
  43. package/dist/IconButton/_mixins.scss +4 -0
  44. package/dist/IconButton/index.js +5 -11
  45. package/dist/IconButton/index.js.map +1 -1
  46. package/dist/IconButton/index.scss +387 -74
  47. package/dist/IconButtonToggle/index.scss +1 -1
  48. package/dist/Image/index.scss +53 -2
  49. package/dist/Menu/index.scss +25 -27
  50. package/dist/Modal/_ModalDialog.scss +52 -50
  51. package/dist/Modal/index.scss +6 -73
  52. package/dist/Nav/_mixins.scss +4 -4
  53. package/dist/Nav/index.scss +70 -66
  54. package/dist/Navbar/index.scss +276 -2
  55. package/dist/OverflowScroll/data/useOverflowScrollElementAttributes.js +3 -3
  56. package/dist/Overlay/index.js +2 -3
  57. package/dist/Overlay/index.js.map +1 -1
  58. package/dist/PageBanner/index.scss +17 -21
  59. package/dist/Pagination/index.scss +32 -34
  60. package/dist/Pagination/pagination-bootstrap.scss +83 -0
  61. package/dist/Popover/index.scss +9 -10
  62. package/dist/Popover/popover-bootstrap.scss +198 -0
  63. package/dist/ProductTour/Checkpoint.scss +71 -43
  64. package/dist/ProgressBar/_mixins.scss +22 -0
  65. package/dist/ProgressBar/bootstrap-progress.scss +49 -0
  66. package/dist/ProgressBar/index.scss +28 -36
  67. package/dist/Scrollable/index.scss +2 -2
  68. package/dist/SearchField/SearchFieldInput.js +2 -2
  69. package/dist/SearchField/SearchFieldInput.js.map +1 -1
  70. package/dist/SearchField/index.scss +15 -17
  71. package/dist/SelectableBox/index.scss +11 -13
  72. package/dist/Sheet/index.scss +10 -10
  73. package/dist/Spinner/index.scss +57 -2
  74. package/dist/Stack/index.scss +1 -3
  75. package/dist/Stepper/index.scss +19 -20
  76. package/dist/Sticky/index.scss +4 -6
  77. package/dist/Tabs/index.js +0 -2
  78. package/dist/Tabs/index.js.map +1 -1
  79. package/dist/Tabs/index.scss +26 -25
  80. package/dist/Toast/ToastContainer.scss +9 -11
  81. package/dist/Toast/bootstrap-toast.scss +46 -0
  82. package/dist/Toast/index.scss +9 -10
  83. package/dist/Tooltip/index.scss +136 -10
  84. package/dist/ValidationMessage/index.scss +1 -1
  85. package/dist/core.css +16788 -0
  86. package/dist/core.css.map +1 -0
  87. package/dist/core.min.css +2 -0
  88. package/dist/index.js +0 -14
  89. package/dist/index.scss +0 -4
  90. package/dist/light.css +4098 -0
  91. package/dist/light.css.map +1 -0
  92. package/dist/light.min.css +2 -0
  93. package/dist/theme-urls.json +21 -0
  94. package/dist/utils/breakpoints.js +1 -1
  95. package/lib/build-scss.js +188 -0
  96. package/lib/build-tokens.js +119 -0
  97. package/lib/help.js +36 -23
  98. package/lib/replace-variables.js +38 -0
  99. package/lib/utils.js +30 -0
  100. package/package.json +25 -10
  101. package/src/ActionRow/_index.scss +2 -4
  102. package/src/Alert/index.scss +41 -32
  103. package/src/Annotation/_mixins.scss +104 -0
  104. package/src/Annotation/index.scss +130 -103
  105. package/src/Avatar/index.scss +18 -20
  106. package/src/AvatarButton/index.scss +3 -5
  107. package/src/Badge/index.scss +112 -2
  108. package/src/Breadcrumb/index.scss +14 -16
  109. package/src/Bubble/index.scss +25 -12
  110. package/src/Button/README.md +0 -84
  111. package/src/Button/_mixins.scss +14 -0
  112. package/src/Button/button-group.scss +126 -0
  113. package/src/Button/index.jsx +0 -3
  114. package/src/Button/index.scss +855 -370
  115. package/src/Card/card-bootstrap.scss +168 -0
  116. package/src/Card/index.scss +78 -79
  117. package/src/Carousel/index.scss +168 -2
  118. package/src/Chip/index.scss +46 -37
  119. package/src/Chip/mixins.scss +8 -3
  120. package/src/ChipCarousel/index.scss +4 -4
  121. package/src/CloseButton/index.scss +31 -2
  122. package/src/Code/index.scss +47 -2
  123. package/src/Collapsible/index.scss +15 -15
  124. package/src/ColorPicker/index.scss +9 -11
  125. package/src/DataTable/CollapsibleButtonGroup.jsx +2 -2
  126. package/src/DataTable/index.scss +48 -50
  127. package/src/Dropdown/README.md +0 -93
  128. package/src/Dropdown/dropdown-bootstrap.scss +181 -0
  129. package/src/Dropdown/index.jsx +0 -2
  130. package/src/Dropdown/index.scss +11 -12
  131. package/src/Dropzone/index.scss +12 -14
  132. package/src/Form/_FormText.scss +8 -8
  133. package/src/Form/_bootstrap-custom-forms.scss +551 -0
  134. package/src/Form/_bootstrap-forms.scss +381 -0
  135. package/src/Form/_index.scss +168 -146
  136. package/src/Form/_input-group.scss +188 -0
  137. package/src/Form/_mixins.scss +216 -3
  138. package/src/Hyperlink/index.scss +1 -1
  139. package/src/Icon/index.scss +10 -12
  140. package/src/IconButton/README.md +1 -15
  141. package/src/IconButton/__snapshots__/IconButton.test.jsx.snap +5 -28
  142. package/src/IconButton/_mixins.scss +4 -0
  143. package/src/IconButton/index.jsx +6 -13
  144. package/src/IconButton/index.scss +387 -74
  145. package/src/IconButtonToggle/index.scss +1 -1
  146. package/src/Image/index.scss +53 -2
  147. package/src/Menu/index.scss +25 -27
  148. package/src/Modal/_ModalDialog.scss +52 -50
  149. package/src/Modal/index.scss +6 -73
  150. package/src/Nav/_mixins.scss +4 -4
  151. package/src/Nav/index.scss +70 -66
  152. package/src/Navbar/index.scss +276 -2
  153. package/src/OverflowScroll/data/useOverflowScrollElementAttributes.js +3 -3
  154. package/src/Overlay/index.jsx +2 -3
  155. package/src/PageBanner/index.scss +17 -21
  156. package/src/Pagination/index.scss +32 -34
  157. package/src/Pagination/pagination-bootstrap.scss +83 -0
  158. package/src/Popover/index.scss +9 -10
  159. package/src/Popover/popover-bootstrap.scss +198 -0
  160. package/src/ProductTour/Checkpoint.scss +71 -43
  161. package/src/ProgressBar/_mixins.scss +22 -0
  162. package/src/ProgressBar/bootstrap-progress.scss +49 -0
  163. package/src/ProgressBar/index.scss +28 -36
  164. package/src/Scrollable/index.scss +2 -2
  165. package/src/SearchField/SearchFieldInput.jsx +2 -2
  166. package/src/SearchField/__snapshots__/SearchField.test.jsx.snap +12 -8
  167. package/src/SearchField/index.scss +15 -17
  168. package/src/SelectableBox/index.scss +11 -13
  169. package/src/Sheet/index.scss +10 -10
  170. package/src/Spinner/index.scss +57 -2
  171. package/src/Stack/index.scss +1 -3
  172. package/src/Stepper/index.scss +19 -20
  173. package/src/Sticky/index.scss +4 -6
  174. package/src/Tabs/README.md +1 -23
  175. package/src/Tabs/index.jsx +0 -3
  176. package/src/Tabs/index.scss +26 -25
  177. package/src/Toast/ToastContainer.scss +9 -11
  178. package/src/Toast/bootstrap-toast.scss +46 -0
  179. package/src/Toast/index.scss +9 -10
  180. package/src/Tooltip/index.scss +136 -10
  181. package/src/TransitionReplace/README.md +4 -4
  182. package/src/ValidationMessage/index.scss +1 -1
  183. package/src/index.js +0 -14
  184. package/src/index.scss +0 -4
  185. package/src/setupTest.js +0 -6
  186. package/src/utils/breakpoints.js +1 -1
  187. package/styles/css/core/custom-media-breakpoints.css +17 -0
  188. package/styles/css/core/index.css +2 -0
  189. package/styles/css/core/variables.css +614 -0
  190. package/styles/css/themes/light/index.css +2 -0
  191. package/styles/css/themes/light/utility-classes.css +2454 -0
  192. package/styles/css/themes/light/variables.css +1644 -0
  193. package/{scss → styles/scss}/core/_functions.scss +1 -1
  194. package/styles/scss/core/_grid.scss +21 -0
  195. package/{scss → styles/scss}/core/_utilities.scss +17 -11
  196. package/styles/scss/core/_variables.scss +869 -0
  197. package/styles/scss/core/bootstrap-override/_functions.scss +104 -0
  198. package/styles/scss/core/bootstrap-override/_mixins.scss +4 -0
  199. package/styles/scss/core/bootstrap-override/_utilities.scss +4 -0
  200. package/styles/scss/core/bootstrap-override/bootstrap.scss +2 -0
  201. package/styles/scss/core/bootstrap-override/mixins/_grid-framework.scss +80 -0
  202. package/styles/scss/core/bootstrap-override/mixins/_grid.scss +69 -0
  203. package/styles/scss/core/bootstrap-override/mixins/_list-group.scss +22 -0
  204. package/styles/scss/core/bootstrap-override/utilities/_background.scss +7 -0
  205. package/styles/scss/core/bootstrap-override/utilities/_borders.scss +67 -0
  206. package/styles/scss/core/bootstrap-override/utilities/_spacing.scss +70 -0
  207. package/styles/scss/core/bootstrap-override/utilities/_text.scss +68 -0
  208. package/styles/scss/core/core.scss +21 -0
  209. package/{scss → styles/scss}/core/utilities-only.scss +1 -0
  210. package/tokens/README.md +158 -0
  211. package/tokens/css-utilities.js +56 -0
  212. package/tokens/map-scss-to-css.js +24 -0
  213. package/tokens/replace-variables.js +32 -0
  214. package/tokens/sass-helpers.js +98 -0
  215. package/tokens/src/core/alias/size.json +15 -0
  216. package/tokens/src/core/components/ActionRow.json +10 -0
  217. package/tokens/src/core/components/Alert.json +30 -0
  218. package/tokens/src/core/components/Annotation.json +25 -0
  219. package/tokens/src/core/components/Avatar.json +17 -0
  220. package/tokens/src/core/components/AvatarButton.json +11 -0
  221. package/tokens/src/core/components/Badge.json +33 -0
  222. package/tokens/src/core/components/Breadcrumb.json +37 -0
  223. package/tokens/src/core/components/Bubble.json +10 -0
  224. package/tokens/src/core/components/Button/core.json +105 -0
  225. package/tokens/src/core/components/Card.json +91 -0
  226. package/tokens/src/core/components/Carousel.json +37 -0
  227. package/tokens/src/core/components/Chip.json +43 -0
  228. package/tokens/src/core/components/ChipCarousel.json +15 -0
  229. package/tokens/src/core/components/CloseButton.json +14 -0
  230. package/tokens/src/core/components/Code.json +34 -0
  231. package/tokens/src/core/components/Collapsible.json +29 -0
  232. package/tokens/src/core/components/ColorPicker.json +8 -0
  233. package/tokens/src/core/components/Container.json +13 -0
  234. package/tokens/src/core/components/DataTable.json +27 -0
  235. package/tokens/src/core/components/Dropdown.json +67 -0
  236. package/tokens/src/core/components/Dropzone.json +21 -0
  237. package/tokens/src/core/components/Form/other.json +14 -0
  238. package/tokens/src/core/components/Form/size.json +233 -0
  239. package/tokens/src/core/components/Form/spacing.json +155 -0
  240. package/tokens/src/core/components/Form/transition.json +16 -0
  241. package/tokens/src/core/components/Form/typography.json +122 -0
  242. package/tokens/src/core/components/Icon.json +11 -0
  243. package/tokens/src/core/components/IconButton.json +15 -0
  244. package/tokens/src/core/components/Image.json +28 -0
  245. package/tokens/src/core/components/Menu.json +48 -0
  246. package/tokens/src/core/components/Modal.json +47 -0
  247. package/tokens/src/core/components/Nav.json +55 -0
  248. package/tokens/src/core/components/Navbar.json +70 -0
  249. package/tokens/src/core/components/Pagination.json +70 -0
  250. package/tokens/src/core/components/Popover.json +48 -0
  251. package/tokens/src/core/components/ProductTour.json +37 -0
  252. package/tokens/src/core/components/ProgressBar.json +39 -0
  253. package/tokens/src/core/components/SearchField.json +23 -0
  254. package/tokens/src/core/components/SelectableBox.json +9 -0
  255. package/tokens/src/core/components/Sheet.json +10 -0
  256. package/tokens/src/core/components/Spinner.json +19 -0
  257. package/tokens/src/core/components/Stack.json +7 -0
  258. package/tokens/src/core/components/Stepper.json +42 -0
  259. package/tokens/src/core/components/Sticky.json +7 -0
  260. package/tokens/src/core/components/Tab.json +19 -0
  261. package/tokens/src/core/components/Tabs.json +19 -0
  262. package/tokens/src/core/components/Toast.json +30 -0
  263. package/tokens/src/core/components/Tooltip.json +33 -0
  264. package/tokens/src/core/components/general/caret.json +13 -0
  265. package/tokens/src/core/components/general/headings.json +16 -0
  266. package/tokens/src/core/components/general/hr.json +10 -0
  267. package/tokens/src/core/components/general/input.json +51 -0
  268. package/tokens/src/core/components/general/link.json +30 -0
  269. package/tokens/src/core/components/general/list.json +26 -0
  270. package/tokens/src/core/components/general/text.json +24 -0
  271. package/tokens/src/core/global/breakpoints.json +12 -0
  272. package/tokens/src/core/global/display.json +21 -0
  273. package/tokens/src/core/global/elevation.json +19 -0
  274. package/tokens/src/core/global/other.json +4 -0
  275. package/tokens/src/core/global/spacing.json +35 -0
  276. package/tokens/src/core/global/transition.json +14 -0
  277. package/tokens/src/core/global/typography.json +91 -0
  278. package/tokens/src/core/utilities/color.json +12 -0
  279. package/tokens/src/themes/light/alias/color.json +114 -0
  280. package/tokens/src/themes/light/components/Alert.json +47 -0
  281. package/tokens/src/themes/light/components/Annotation.json +29 -0
  282. package/tokens/src/themes/light/components/Avatar.json +7 -0
  283. package/tokens/src/themes/light/components/Badge.json +186 -0
  284. package/tokens/src/themes/light/components/Breadcrumb.json +14 -0
  285. package/tokens/src/themes/light/components/Bubble.json +18 -0
  286. package/tokens/src/themes/light/components/Button/brand.json +260 -0
  287. package/tokens/src/themes/light/components/Button/core.json +24 -0
  288. package/tokens/src/themes/light/components/Button/danger.json +247 -0
  289. package/tokens/src/themes/light/components/Button/dark.json +230 -0
  290. package/tokens/src/themes/light/components/Button/info.json +238 -0
  291. package/tokens/src/themes/light/components/Button/light.json +236 -0
  292. package/tokens/src/themes/light/components/Button/primary.json +250 -0
  293. package/tokens/src/themes/light/components/Button/secondary.json +278 -0
  294. package/tokens/src/themes/light/components/Button/success.json +253 -0
  295. package/tokens/src/themes/light/components/Button/tertiary.json +109 -0
  296. package/tokens/src/themes/light/components/Button/warning.json +276 -0
  297. package/tokens/src/themes/light/components/Card.json +40 -0
  298. package/tokens/src/themes/light/components/Carousel.json +45 -0
  299. package/tokens/src/themes/light/components/Chip.json +50 -0
  300. package/tokens/src/themes/light/components/CloseButton.json +10 -0
  301. package/tokens/src/themes/light/components/Code.json +23 -0
  302. package/tokens/src/themes/light/components/DataTable.json +26 -0
  303. package/tokens/src/themes/light/components/Dropdown.json +41 -0
  304. package/tokens/src/themes/light/components/Dropzone.json +23 -0
  305. package/tokens/src/themes/light/components/Form/color.json +270 -0
  306. package/tokens/src/themes/light/components/Form/elevation.json +76 -0
  307. package/tokens/src/themes/light/components/Form/other.json +131 -0
  308. package/tokens/src/themes/light/components/IconButton.json +451 -0
  309. package/tokens/src/themes/light/components/Image.json +18 -0
  310. package/tokens/src/themes/light/components/Menu.json +30 -0
  311. package/tokens/src/themes/light/components/Modal.json +37 -0
  312. package/tokens/src/themes/light/components/Nav.json +166 -0
  313. package/tokens/src/themes/light/components/Navbar.json +136 -0
  314. package/tokens/src/themes/light/components/OverflowScroll.json +9 -0
  315. package/tokens/src/themes/light/components/PageBanner.json +24 -0
  316. package/tokens/src/themes/light/components/Pagination.json +45 -0
  317. package/tokens/src/themes/light/components/Popover.json +55 -0
  318. package/tokens/src/themes/light/components/ProductTour.json +35 -0
  319. package/tokens/src/themes/light/components/ProgressBar.json +20 -0
  320. package/tokens/src/themes/light/components/Scrollable.json +14 -0
  321. package/tokens/src/themes/light/components/SearchField.json +25 -0
  322. package/tokens/src/themes/light/components/Sheet.json +22 -0
  323. package/tokens/src/themes/light/components/Stepper.json +34 -0
  324. package/tokens/src/themes/light/components/Sticky.json +18 -0
  325. package/tokens/src/themes/light/components/Tab.json +62 -0
  326. package/tokens/src/themes/light/components/Toast.json +33 -0
  327. package/tokens/src/themes/light/components/Tooltip.json +30 -0
  328. package/tokens/src/themes/light/components/general/body.json +8 -0
  329. package/tokens/src/themes/light/components/general/headings.json +7 -0
  330. package/tokens/src/themes/light/components/general/hr.json +15 -0
  331. package/tokens/src/themes/light/components/general/input.json +18 -0
  332. package/tokens/src/themes/light/components/general/link.json +109 -0
  333. package/tokens/src/themes/light/components/general/list.json +38 -0
  334. package/tokens/src/themes/light/components/general/text.json +6 -0
  335. package/tokens/src/themes/light/global/color.json +1661 -0
  336. package/tokens/src/themes/light/global/elevation.json +201 -0
  337. package/tokens/src/themes/light/global/other.json +4 -0
  338. package/tokens/style-dictionary.js +223 -0
  339. package/tokens/utils.js +210 -0
  340. package/dist/ActionRow/_variables.scss +0 -2
  341. package/dist/Alert/_variables.scss +0 -24
  342. package/dist/Annotation/_variables.scss +0 -18
  343. package/dist/Avatar/_variables.scss +0 -10
  344. package/dist/AvatarButton/_variables.scss +0 -3
  345. package/dist/Badge/_variables.scss +0 -16
  346. package/dist/Breadcrumb/_variables.scss +0 -27
  347. package/dist/Bubble/_variables.scss +0 -8
  348. package/dist/Button/_variables.scss +0 -52
  349. package/dist/Button/deprecated/index.js +0 -149
  350. package/dist/Button/deprecated/index.js.map +0 -1
  351. package/dist/Card/_variables.scss +0 -55
  352. package/dist/Carousel/_variables.scss +0 -27
  353. package/dist/CheckBox/index.js +0 -102
  354. package/dist/CheckBox/index.js.map +0 -1
  355. package/dist/CheckBoxGroup/index.js +0 -15
  356. package/dist/CheckBoxGroup/index.js.map +0 -1
  357. package/dist/Chip/_variables.scss +0 -28
  358. package/dist/ChipCarousel/_variables.scss +0 -3
  359. package/dist/CloseButton/_variables.scss +0 -6
  360. package/dist/Code/_variables.scss +0 -17
  361. package/dist/Collapsible/_variables.scss +0 -12
  362. package/dist/ColorPicker/_variables.scss +0 -2
  363. package/dist/Container/_variables.scss +0 -5
  364. package/dist/DataTable/_variables.scss +0 -11
  365. package/dist/Dropdown/_variables.scss +0 -33
  366. package/dist/Dropdown/deprecated/DropdownButton.js +0 -44
  367. package/dist/Dropdown/deprecated/DropdownButton.js.map +0 -1
  368. package/dist/Dropdown/deprecated/DropdownItem.js +0 -33
  369. package/dist/Dropdown/deprecated/DropdownItem.js.map +0 -1
  370. package/dist/Dropdown/deprecated/DropdownMenu.js +0 -46
  371. package/dist/Dropdown/deprecated/DropdownMenu.js.map +0 -1
  372. package/dist/Dropdown/deprecated/index.js +0 -241
  373. package/dist/Dropdown/deprecated/index.js.map +0 -1
  374. package/dist/Dropzone/_variables.scss +0 -9
  375. package/dist/Fieldset/index.js +0 -117
  376. package/dist/Fieldset/index.js.map +0 -1
  377. package/dist/Fieldset/index.scss +0 -12
  378. package/dist/Form/_variables.scss +0 -267
  379. package/dist/Icon/_variables.scss +0 -7
  380. package/dist/Image/_variables.scss +0 -13
  381. package/dist/Input/index.js +0 -166
  382. package/dist/Input/index.js.map +0 -1
  383. package/dist/InputSelect/index.js +0 -105
  384. package/dist/InputSelect/index.js.map +0 -1
  385. package/dist/InputText/index.js +0 -45
  386. package/dist/InputText/index.js.map +0 -1
  387. package/dist/ListBox/index.js +0 -148
  388. package/dist/ListBox/index.js.map +0 -1
  389. package/dist/ListBoxOption/index.js +0 -94
  390. package/dist/ListBoxOption/index.js.map +0 -1
  391. package/dist/Menu/_variables.scss +0 -24
  392. package/dist/Modal/_variables.scss +0 -50
  393. package/dist/Modal/index.js +0 -292
  394. package/dist/Modal/index.js.map +0 -1
  395. package/dist/Nav/_variables.scss +0 -58
  396. package/dist/Navbar/_variables.scss +0 -40
  397. package/dist/OverflowScroll/_variables.scss +0 -5
  398. package/dist/OverflowScroll/index.scss +0 -1
  399. package/dist/Pagination/_variables.scss +0 -19
  400. package/dist/Popover/_variables.scss +0 -36
  401. package/dist/ProductTour/_variables.scss +0 -15
  402. package/dist/ProgressBar/_variables.scss +0 -23
  403. package/dist/RadioButtonGroup/index.js +0 -188
  404. package/dist/RadioButtonGroup/index.js.map +0 -1
  405. package/dist/SearchField/_variables.scss +0 -14
  406. package/dist/SelectableBox/_variables.scss +0 -5
  407. package/dist/Spinner/_variables.scss +0 -9
  408. package/dist/Stack/_variables.scss +0 -1
  409. package/dist/StatusAlert/index.js +0 -168
  410. package/dist/StatusAlert/index.js.map +0 -1
  411. package/dist/Stepper/_variables.scss +0 -18
  412. package/dist/Sticky/_variables.scss +0 -3
  413. package/dist/Table/_variables.scss +0 -34
  414. package/dist/Table/index.js +0 -267
  415. package/dist/Table/index.js.map +0 -1
  416. package/dist/Table/index.scss +0 -12
  417. package/dist/Tabs/_variables.scss +0 -24
  418. package/dist/Tabs/deprecated/Tabs.scss +0 -3
  419. package/dist/Tabs/deprecated/index.js +0 -123
  420. package/dist/Tabs/deprecated/index.js.map +0 -1
  421. package/dist/TextArea/index.js +0 -44
  422. package/dist/TextArea/index.js.map +0 -1
  423. package/dist/Toast/_variables.scss +0 -19
  424. package/dist/Tooltip/_variables.scss +0 -21
  425. package/dist/ValidationFormGroup/index.js +0 -106
  426. package/dist/ValidationFormGroup/index.js.map +0 -1
  427. package/dist/paragon.css +0 -45
  428. package/scss/core/_grid.scss +0 -21
  429. package/scss/core/_variables.scss +0 -875
  430. package/scss/core/core.scss +0 -21
  431. package/src/ActionRow/_variables.scss +0 -2
  432. package/src/Alert/_variables.scss +0 -24
  433. package/src/Annotation/_variables.scss +0 -18
  434. package/src/Avatar/_variables.scss +0 -10
  435. package/src/AvatarButton/_variables.scss +0 -3
  436. package/src/Badge/_variables.scss +0 -16
  437. package/src/Breadcrumb/_variables.scss +0 -27
  438. package/src/Bubble/_variables.scss +0 -8
  439. package/src/Button/_variables.scss +0 -52
  440. package/src/Button/deprecated/Button.test.jsx +0 -34
  441. package/src/Button/deprecated/index.jsx +0 -145
  442. package/src/Card/_variables.scss +0 -55
  443. package/src/Carousel/_variables.scss +0 -27
  444. package/src/CheckBox/CheckBox.test.jsx +0 -65
  445. package/src/CheckBox/README.md +0 -93
  446. package/src/CheckBox/index.jsx +0 -80
  447. package/src/CheckBoxGroup/CheckBoxGroup.test.jsx +0 -33
  448. package/src/CheckBoxGroup/README.md +0 -35
  449. package/src/CheckBoxGroup/index.jsx +0 -19
  450. package/src/Chip/_variables.scss +0 -28
  451. package/src/ChipCarousel/_variables.scss +0 -3
  452. package/src/CloseButton/_variables.scss +0 -6
  453. package/src/Code/_variables.scss +0 -17
  454. package/src/Collapsible/_variables.scss +0 -12
  455. package/src/ColorPicker/_variables.scss +0 -2
  456. package/src/Container/_variables.scss +0 -5
  457. package/src/DataTable/_variables.scss +0 -11
  458. package/src/Dropdown/_variables.scss +0 -33
  459. package/src/Dropdown/deprecated/Dropdown.test.jsx +0 -238
  460. package/src/Dropdown/deprecated/DropdownButton.jsx +0 -52
  461. package/src/Dropdown/deprecated/DropdownItem.jsx +0 -34
  462. package/src/Dropdown/deprecated/DropdownMenu.jsx +0 -50
  463. package/src/Dropdown/deprecated/__snapshots__/Dropdown.test.jsx.snap +0 -229
  464. package/src/Dropdown/deprecated/index.jsx +0 -222
  465. package/src/Dropzone/_variables.scss +0 -9
  466. package/src/Fieldset/Fieldset.test.jsx +0 -101
  467. package/src/Fieldset/README.md +0 -146
  468. package/src/Fieldset/index.jsx +0 -107
  469. package/src/Fieldset/index.scss +0 -12
  470. package/src/Form/_variables.scss +0 -267
  471. package/src/Icon/_variables.scss +0 -7
  472. package/src/Image/_variables.scss +0 -13
  473. package/src/Input/README.md +0 -74
  474. package/src/Input/__snapshots__/input.test.jsx.snap +0 -53
  475. package/src/Input/index.jsx +0 -151
  476. package/src/Input/input.test.jsx +0 -85
  477. package/src/InputSelect/README.md +0 -136
  478. package/src/InputSelect/index.jsx +0 -92
  479. package/src/InputText/InputText.test.jsx +0 -74
  480. package/src/InputText/README.md +0 -293
  481. package/src/InputText/index.jsx +0 -49
  482. package/src/ListBox/ListBox.test.jsx +0 -161
  483. package/src/ListBox/README.md +0 -185
  484. package/src/ListBox/index.jsx +0 -115
  485. package/src/ListBoxOption/ListBoxOption.test.jsx +0 -154
  486. package/src/ListBoxOption/index.jsx +0 -78
  487. package/src/Menu/_variables.scss +0 -24
  488. package/src/Modal/README.md +0 -148
  489. package/src/Modal/_variables.scss +0 -50
  490. package/src/Modal/index.jsx +0 -319
  491. package/src/Modal/tests/Modal.test.jsx +0 -261
  492. package/src/Nav/_variables.scss +0 -58
  493. package/src/Navbar/_variables.scss +0 -40
  494. package/src/OverflowScroll/_variables.scss +0 -5
  495. package/src/OverflowScroll/index.scss +0 -1
  496. package/src/Pagination/_variables.scss +0 -19
  497. package/src/Popover/_variables.scss +0 -36
  498. package/src/ProductTour/_variables.scss +0 -15
  499. package/src/ProgressBar/_variables.scss +0 -23
  500. package/src/RadioButtonGroup/README.md +0 -50
  501. package/src/RadioButtonGroup/RadioButtonGroup.test.jsx +0 -127
  502. package/src/RadioButtonGroup/index.jsx +0 -185
  503. package/src/SearchField/_variables.scss +0 -14
  504. package/src/SelectableBox/_variables.scss +0 -5
  505. package/src/Spinner/_variables.scss +0 -9
  506. package/src/Stack/_variables.scss +0 -1
  507. package/src/StatusAlert/README.md +0 -149
  508. package/src/StatusAlert/StatusAlert.test.jsx +0 -150
  509. package/src/StatusAlert/index.jsx +0 -144
  510. package/src/Stepper/_variables.scss +0 -18
  511. package/src/Sticky/_variables.scss +0 -3
  512. package/src/Table/README.md +0 -506
  513. package/src/Table/Table.test.jsx +0 -367
  514. package/src/Table/_variables.scss +0 -34
  515. package/src/Table/index.jsx +0 -264
  516. package/src/Table/index.scss +0 -12
  517. package/src/Tabs/_variables.scss +0 -24
  518. package/src/Tabs/deprecated/Tabs.scss +0 -3
  519. package/src/Tabs/deprecated/Tabs.test.jsx +0 -50
  520. package/src/Tabs/deprecated/index.jsx +0 -117
  521. package/src/TextArea/README.md +0 -63
  522. package/src/TextArea/index.jsx +0 -48
  523. package/src/Toast/_variables.scss +0 -19
  524. package/src/Tooltip/_variables.scss +0 -21
  525. package/src/ValidationFormGroup/README.md +0 -116
  526. package/src/ValidationFormGroup/ValidationFormGroup.test.jsx +0 -146
  527. package/src/ValidationFormGroup/__snapshots__/ValidationFormGroup.test.jsx.snap +0 -161
  528. package/src/ValidationFormGroup/index.jsx +0 -114
  529. /package/{scss → styles/scss}/core/_exports.module.scss +0 -0
  530. /package/{scss → styles/scss}/core/_typography.scss +0 -0
@@ -1,293 +0,0 @@
1
- ---
2
- title: 'InputText'
3
- type: 'component'
4
- components:
5
- - InputText
6
- categories:
7
- - Forms (deprecated)
8
- status: 'Deprecate Soon'
9
- designStatus: 'TBD'
10
- devStatus: 'To Do'
11
- notes: |
12
- Replaced by Form.Control
13
- ---
14
-
15
- ## Minimal usage
16
-
17
- ```jsx live
18
- <InputText name="name" label="First Name" value="Foo Bar" />
19
- ```
20
-
21
- ## Read only
22
-
23
- ```jsx live
24
- <InputText name="inputState" label="Input State" value="Read Only" readOnly />
25
- ```
26
-
27
- ## Validation
28
-
29
- ```jsx live
30
- <InputText
31
- id="username"
32
- name="username"
33
- label="Username"
34
- description="The unique name that identifies you throughout the site."
35
- validator={value => {
36
- let feedback = { isValid: true };
37
- if (value.length < 3) {
38
- feedback = {
39
- isValid: false,
40
- validationMessage: 'Username must be at least 3 characters in length.',
41
- };
42
- }
43
- return feedback;
44
- }}
45
- />
46
- ```
47
-
48
- ### Validation with danger theme
49
-
50
- ```jsx live
51
- <InputText
52
- name="username"
53
- label="Username"
54
- description="The unique name that identifies you throughout the site."
55
- validator={value => {
56
- let feedback = { isValid: true };
57
- if (value.length < 3) {
58
- feedback = {
59
- isValid: false,
60
- validationMessage: 'Username must be at least 3 characters in length.',
61
- dangerIconDescription: 'Error',
62
- };
63
- }
64
- return feedback;
65
- }}
66
- themes={['danger']}
67
- />
68
- ```
69
-
70
- ### Label as element
71
-
72
- ```jsx live
73
- <InputText
74
- name="username"
75
- label={<span lang="en">Element</span>}
76
- value="Label is wrapped in language span"
77
- />
78
- ```
79
-
80
- ### Focus test
81
-
82
- ```jsx live
83
- class FocusInputWrapper extends React.Component {
84
- constructor(props) {
85
- super(props);
86
- this.state = { open: true };
87
-
88
- this.resetStatusAlertWrapperState = this.resetStatusAlertWrapperState.bind(
89
- this,
90
- );
91
- }
92
-
93
- resetStatusAlertWrapperState() {
94
- this.setState({ open: false });
95
- this.inputForm.focus();
96
- }
97
-
98
- render() {
99
- return (
100
- <div>
101
- <StatusAlert
102
- alertType="info"
103
- open={this.state.open}
104
- dialog="Close me to input data!"
105
- onClose={this.resetStatusAlertWrapperState}
106
- />
107
- <InputText
108
- id="data"
109
- name="data"
110
- label="Data Input"
111
- inputRef={input => {
112
- this.inputForm = input;
113
- }}
114
- />
115
- </div>
116
- );
117
- }
118
- }
119
- ```
120
-
121
- ### Different textual input types
122
-
123
- ```jsx live
124
- <form>
125
- <InputText
126
- name="search"
127
- label="Search"
128
- value="what is paragon"
129
- type="search"
130
- id="input-search"
131
- />
132
- <InputText
133
- name="email"
134
- label="Email"
135
- value="paragon@edx.org"
136
- type="email"
137
- id="input-email"
138
- />
139
- <InputText
140
- name="url"
141
- label="Url"
142
- value="https://edx.github.io/paragon"
143
- type="url"
144
- id="input-url"
145
- />
146
- <InputText
147
- name="telephone"
148
- label="Telephone"
149
- value="1-(555)-555-5555"
150
- type="tel"
151
- id="input-tel"
152
- />
153
- <InputText
154
- name="password"
155
- label="Password"
156
- value="hunter2"
157
- type="password"
158
- id="input-password"
159
- />
160
- <InputText
161
- name="number"
162
- label="Number"
163
- value={42}
164
- type="number"
165
- id="input-number"
166
- />
167
- <InputText
168
- name="datetime-local"
169
- label="Date and time"
170
- value="2017-04-27T13:45:00"
171
- type="datetime-local"
172
- id="input-datetime-local"
173
- />
174
- <InputText
175
- name="date"
176
- label="Date"
177
- value="2017-04-27"
178
- type="date"
179
- id="input-date"
180
- />
181
- <InputText
182
- name="month"
183
- label="Month"
184
- value="2017-04"
185
- type="month"
186
- id="input-month"
187
- />
188
- <InputText
189
- name="week"
190
- label="Week"
191
- value="2017-W33"
192
- type="week"
193
- id="input-week"
194
- />
195
- <InputText
196
- name="time"
197
- label="Time"
198
- value="13:45:00"
199
- type="time"
200
- id="input-time"
201
- />
202
- <InputText
203
- name="color"
204
- label="Color"
205
- value="#BF472C"
206
- type="color"
207
- id="input-color"
208
- />
209
- </form>
210
- ```
211
-
212
- ### Price with step
213
-
214
- ```jsx live
215
- <InputText
216
- name="price"
217
- label="Price"
218
- type="number"
219
- value={3.5}
220
- min={0}
221
- step={0.01}
222
- />
223
- ```
224
-
225
- ### Displayed inline
226
-
227
- ```jsx live
228
- <InputText name="username" label="Username" value="foobar" inline />
229
- ```
230
-
231
- ### With input group addons
232
-
233
- ```jsx live
234
- <form>
235
- <InputText
236
- name="username"
237
- label="Username"
238
- value="foobar"
239
- inputGroupPrepend={<div className="input-group-text">{'@'}</div>}
240
- />
241
- <InputText
242
- name="username"
243
- label="Username"
244
- value="foobar"
245
- inputGroupAppend={<div className="input-group-text">{'@example.com'}</div>}
246
- />
247
- <InputText
248
- name="money"
249
- label="Money"
250
- type="number"
251
- value={1000}
252
- inputGroupPrepend={<div className="input-group-text">{'$'}</div>}
253
- inputGroupAppend={<div className="input-group-text">{'.00'}</div>}
254
- />
255
- <InputText
256
- name="search"
257
- label="Search"
258
- value="what is paragon"
259
- inputGroupAppend={(
260
- <Button variant="outline-secondary">Go</Button>
261
- )}
262
- />
263
- <InputText
264
- name="username"
265
- label="Username"
266
- value="foobar"
267
- inputGroupAppend={[
268
- <div className="input-group-text">
269
- <Icon
270
- id="checkmark"
271
- className="fa fa-check"
272
- screenReaderText="Checkmark"
273
- />
274
- </div>,
275
- <Button variant="outline-secondary">Go</Button>,
276
- ]}
277
- />
278
- <InputText
279
- name="password"
280
- label="Password"
281
- value="secret"
282
- inputGroupAppend={
283
- <div className="input-group-text">
284
- <Icon
285
- id="checkmark"
286
- className="fa fa-check"
287
- screenReaderText="Checkmark"
288
- />
289
- </div>
290
- }
291
- />
292
- </form>
293
- ```
@@ -1,49 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- import asInput from '../asInput';
5
- import withDeprecatedProps, { DeprTypes } from '../withDeprecatedProps';
6
-
7
- function Text(props) {
8
- const {
9
- className,
10
- inputRef,
11
- type,
12
- ...others
13
- } = props;
14
-
15
- return (
16
- <input
17
- {...others}
18
- className={className}
19
- type={type || 'text'}
20
- ref={inputRef}
21
- />
22
- );
23
- }
24
-
25
- Text.propTypes = {
26
- className: PropTypes.string,
27
- inputRef: PropTypes.oneOfType([
28
- PropTypes.func,
29
- PropTypes.shape({ current: PropTypes.instanceOf(PropTypes.element) }),
30
- ]),
31
- type: PropTypes.string,
32
- };
33
-
34
- Text.defaultProps = {
35
- className: undefined,
36
- inputRef: undefined,
37
- type: 'text',
38
- };
39
-
40
- const InputText = asInput(withDeprecatedProps(Text, 'InputText', {
41
- className: {
42
- deprType: DeprTypes.FORMAT,
43
- expect: value => typeof value === 'string',
44
- transform: value => (Array.isArray(value) ? value.join(' ') : value),
45
- message: 'It should be a string.',
46
- },
47
- }));
48
-
49
- export default InputText;
@@ -1,161 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import userEvent from '@testing-library/user-event';
4
-
5
- import ListBox from '.';
6
- import ListBoxOption from '../ListBoxOption';
7
-
8
- describe('ListBox', () => {
9
- beforeEach(() => {
10
- render(
11
- <ListBox>
12
- <ListBoxOption>test1</ListBoxOption>
13
- <ListBoxOption>test2</ListBoxOption>
14
- <ListBoxOption>test3</ListBoxOption>
15
- </ListBox>,
16
- );
17
- });
18
-
19
- it('should have null aria-activedescendant attribute by default', () => {
20
- const listBoxElement = screen.getByRole('listbox');
21
- expect(listBoxElement.getAttribute('aria-activedescendant')).toBeNull();
22
- });
23
-
24
- it(
25
- 'should have correct aria-activedescendant attribute when selectedOptionIndex state is non-null',
26
- async () => {
27
- const listBoxElement = screen.getByRole('listbox');
28
- const selectedOptionIndex = 1;
29
-
30
- listBoxElement.focus();
31
-
32
- await userEvent.keyboard('{arrowdown}');
33
-
34
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual(`list-box-option-${selectedOptionIndex}`);
35
- },
36
- );
37
-
38
- it('selectedOptionIndex prop should override selectedOptionIndex state', async () => {
39
- const listBoxElement = screen.getByRole('listbox');
40
- const selectedOptionIndex = 2;
41
-
42
- listBoxElement.focus();
43
-
44
- await userEvent.keyboard('{arrowdown}');
45
- await userEvent.keyboard('{arrowdown}');
46
-
47
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual(`list-box-option-${selectedOptionIndex}`);
48
- });
49
-
50
- it('should render a div by default', () => {
51
- const listBoxElement = screen.getByRole('listbox');
52
- expect(listBoxElement.tagName.toLowerCase()).toBe('div');
53
- });
54
-
55
- it('should render an HTML element when passed tag prop is an HTML element', () => {
56
- const { container } = render(
57
- <ListBox tag="li">
58
- <ListBoxOption>test1</ListBoxOption>
59
- </ListBox>,
60
- );
61
- const listBoxElement = container.querySelector('li');
62
- expect(listBoxElement).toBeInTheDocument();
63
- });
64
-
65
- it('should have correct default classNames', () => {
66
- const listBoxElement = screen.getByRole('listbox');
67
- expect(listBoxElement).toHaveClass('list-group');
68
- });
69
-
70
- it('should have listbox role', () => {
71
- const listBoxElement = screen.getByRole('listbox');
72
- expect(listBoxElement).toHaveAttribute('role', 'listbox');
73
- });
74
-
75
- it('should have 0 tabIndex', () => {
76
- const listBoxElement = screen.getByRole('listbox');
77
- expect(listBoxElement).toHaveAttribute('tabIndex', '0');
78
- });
79
-
80
- it('should select first ListBoxOption on focus if not ListBoxOption selected', async () => {
81
- const listBoxElement = screen.getByRole('listbox');
82
-
83
- listBoxElement.focus();
84
-
85
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-0');
86
- });
87
-
88
- it('should not select first ListBoxOption on focus if ListBoxOption selected', async () => {
89
- const listBoxElement = screen.getByRole('listbox');
90
-
91
- listBoxElement.focus();
92
-
93
- await userEvent.keyboard('{arrowdown}');
94
-
95
- listBoxElement.focus();
96
-
97
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-1');
98
- });
99
-
100
- it('should select next ListBoxOption on down arrow key', async () => {
101
- const listBoxElement = screen.getByRole('listbox');
102
-
103
- listBoxElement.focus();
104
-
105
- await userEvent.keyboard('{arrowdown}');
106
-
107
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-1');
108
- });
109
-
110
- it('should not select next ListBoxOption on down arrow key if at end of list', async () => {
111
- const listBoxElement = screen.getByRole('listbox');
112
-
113
- listBoxElement.focus();
114
-
115
- await userEvent.keyboard('{arrowdown}');
116
- await userEvent.keyboard('{arrowdown}');
117
- await userEvent.keyboard('{arrowdown}');
118
-
119
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-2');
120
- });
121
-
122
- it('should select previous ListBoxOption on up arrow key', async () => {
123
- const listBoxElement = screen.getByRole('listbox');
124
-
125
- listBoxElement.focus();
126
-
127
- await userEvent.keyboard('{arrowdown}');
128
- await userEvent.keyboard('{arrowup}');
129
-
130
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-0');
131
- });
132
-
133
- it('should not select previous ListBoxOption on up arrow key if at start of list', async () => {
134
- const listBoxElement = screen.getByRole('listbox');
135
-
136
- listBoxElement.focus();
137
-
138
- await userEvent.keyboard('{arrowup}');
139
-
140
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-0');
141
- });
142
-
143
- it('should not change ListBoxOption selection on non-supported key', async () => {
144
- const listBoxElement = screen.getByRole('listbox');
145
-
146
- listBoxElement.focus();
147
-
148
- await userEvent.keyboard('{leftarrow}');
149
-
150
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-0');
151
- });
152
-
153
- it('should update state when child\'s onSelect is called', async () => {
154
- const listBoxElement = screen.getByRole('listbox');
155
- const listBoxOption2 = screen.getAllByRole('option')[1];
156
-
157
- await userEvent.click(listBoxOption2);
158
-
159
- expect(listBoxElement.getAttribute('aria-activedescendant')).toEqual('list-box-option-1');
160
- });
161
- });
@@ -1,185 +0,0 @@
1
- ---
2
- title: 'ListBox'
3
- type: 'component'
4
- components:
5
- - ListBox
6
- - ListBoxOption
7
- categories:
8
- - Forms (deprecated)
9
- status: 'Deprecate Soon'
10
- designStatus: 'TBD'
11
- devStatus: 'To Do'
12
- notes: 'Not used anywhere in code on Github. Consult design.'
13
- ---
14
-
15
- ## basic usage
16
-
17
- ```jsx live
18
- <ListBox>
19
- <ListBoxOption>
20
- Apple
21
- </ListBoxOption>
22
- <ListBoxOption>
23
- Orange
24
- </ListBoxOption>
25
- <ListBoxOption>
26
- Strawberry
27
- </ListBoxOption>
28
- <ListBoxOption>
29
- Banana
30
- </ListBoxOption>
31
- </ListBox>
32
- ```
33
-
34
- ## using tag prop
35
-
36
- ```jsx live
37
- <React.Fragment>
38
- <div>This is an ordered list!</div>
39
- <ListBox tag="ol">
40
- <ListBoxOption tag="li">
41
- Apple
42
- </ListBoxOption>
43
- <ListBoxOption tag="li">
44
- <div>Orange</div>
45
- </ListBoxOption>
46
- <ListBoxOption tag="li">
47
- Strawberry
48
- </ListBoxOption>
49
- <ListBoxOption tag="li">
50
- Banana
51
- </ListBoxOption>
52
- </ListBox>
53
- </React.Fragment>
54
- ```
55
-
56
- ## using onSelect prop
57
-
58
- ```jsx live
59
- class ListBoxWrapperForOnSelect extends React.Component {
60
- constructor(props) {
61
- super(props);
62
-
63
- this.onSelect = this.onSelect.bind(this);
64
-
65
- this.state = {
66
- selectedOption: null,
67
- selectedOptionIndex: null,
68
- };
69
-
70
- this.fruits = {
71
- Apple: '🍎',
72
- Orange: '🍊',
73
- Strawberry: '🍓',
74
- Banana: '🍌',
75
- };
76
- }
77
-
78
- onSelect(option, index) {
79
- this.setState({
80
- selectedOption: option,
81
- selectedOptionIndex: index,
82
- });
83
- }
84
-
85
- getSelectedFruitEmoji(fruit) {
86
- return fruit ? this.fruits[fruit] : '';
87
- }
88
-
89
- render() {
90
- const children = Object.keys(this.fruits).map((fruit, index) => (
91
- <ListBoxOption
92
- key={fruit}
93
- onSelect={() => this.onSelect(fruit, index)}
94
- style={{ textAlign: 'center' }}
95
- >
96
- {fruit}
97
- </ListBoxOption>
98
- ));
99
-
100
- return (
101
- <React.Fragment>
102
- <span aria-live="polite">
103
- Selected Fruit:
104
- {this.state.selectedOptionIndex === undefined ? (
105
- <span className="sr-only">none</span>
106
- ) : (
107
- <span
108
- arialabelledby={`list-box-option-${
109
- this.state.selectedOptionIndex
110
- }`}
111
- >
112
- {this.getSelectedFruitEmoji(this.state.selectedOption)}
113
- </span>
114
- )}
115
- </span>
116
- <ListBox style={{ width: '200px' }}>
117
- {children}
118
- </ListBox>
119
- </React.Fragment>
120
- );
121
- }
122
- }
123
- ```
124
-
125
- ## using selectedOptionIndex prop
126
-
127
- ```jsx live
128
- class ListBoxWrapperForSelectedOptionIndex extends React.Component {
129
- constructor(props) {
130
- super(props);
131
-
132
- this.onSelect = this.onSelect.bind(this);
133
- this.onButtonClick = this.onButtonClick.bind(this);
134
-
135
- this.state = {
136
- reset: true,
137
- };
138
-
139
- this.fruits = Object.keys({
140
- Apple: '🍎',
141
- Orange: '🍊',
142
- Strawberry: '🍓',
143
- Banana: '🍌',
144
- });
145
- }
146
-
147
- onButtonClick() {
148
- this.setState({
149
- reset: true,
150
- });
151
- }
152
-
153
- onSelect() {
154
- this.setState({
155
- reset: false,
156
- });
157
- }
158
-
159
- render() {
160
- const children = this.fruits.map(fruit => (
161
- <ListBoxOption
162
- key={fruit}
163
- onSelect={this.onSelect}
164
- style={{ textAlign: 'center' }}
165
- >
166
- {fruit}
167
- </ListBoxOption>
168
- ));
169
-
170
- return (
171
- <React.Fragment>
172
- <Button variant="primary" onClick={this.onButtonClick}>
173
- Click me to reset your selected fruit!
174
- </Button>
175
- <ListBox
176
- selectedOptionIndex={this.state.reset ? null : undefined}
177
- style={{ margin: '10px' }}
178
- >
179
- {children}
180
- </ListBox>
181
- </React.Fragment>
182
- );
183
- }
184
- }
185
- ```