@openedx/paragon 23.0.0-alpha.2 → 23.0.0-alpha.4

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 (274) hide show
  1. package/bin/paragon-scripts.js +10 -0
  2. package/dist/Annotation/index.scss +16 -0
  3. package/dist/Button/index.d.ts +35 -0
  4. package/dist/Button/index.js +37 -15
  5. package/dist/Button/index.js.map +1 -1
  6. package/dist/Card/CardDeck.js +0 -2
  7. package/dist/Card/CardDeck.js.map +1 -1
  8. package/dist/Card/index.scss +6 -6
  9. package/dist/Carousel/index.scss +24 -1
  10. package/dist/Chip/ChipIcon.d.ts +13 -8
  11. package/dist/Chip/ChipIcon.js +0 -2
  12. package/dist/Chip/ChipIcon.js.map +1 -1
  13. package/dist/Chip/constants.d.ts +4 -0
  14. package/dist/Chip/constants.js +3 -2
  15. package/dist/Chip/constants.js.map +1 -0
  16. package/dist/Chip/index.d.ts +4 -3
  17. package/dist/Chip/index.js +2 -4
  18. package/dist/Chip/index.js.map +1 -1
  19. package/dist/ChipCarousel/index.js +0 -2
  20. package/dist/ChipCarousel/index.js.map +1 -1
  21. package/dist/CloseButton/index.scss +8 -0
  22. package/dist/ColorPicker/index.scss +1 -1
  23. package/dist/DataTable/index.scss +12 -0
  24. package/dist/Dropdown/dropdown-bootstrap.scss +6 -0
  25. package/dist/Dropzone/index.scss +34 -0
  26. package/dist/Form/_FormText.scss +1 -1
  27. package/dist/Form/_bootstrap-custom-forms.scss +40 -0
  28. package/dist/Form/_index.scss +9 -0
  29. package/dist/Form/_mixins.scss +22 -0
  30. package/dist/Hyperlink/index.d.ts +24 -0
  31. package/dist/Hyperlink/index.js +20 -32
  32. package/dist/Hyperlink/index.js.map +1 -1
  33. package/dist/Icon/index.d.ts +4 -2
  34. package/dist/Icon/index.js +1 -1
  35. package/dist/Icon/index.js.map +1 -1
  36. package/dist/IconButton/index.d.ts +342 -0
  37. package/dist/IconButton/index.js +18 -26
  38. package/dist/IconButton/index.js.map +1 -1
  39. package/dist/IconButton/index.scss +146 -0
  40. package/dist/Menu/index.scss +8 -0
  41. package/dist/Modal/ModalDialog.js +8 -4
  42. package/dist/Modal/ModalDialog.js.map +1 -1
  43. package/dist/Modal/ModalPopup.js +7 -1
  44. package/dist/Modal/ModalPopup.js.map +1 -1
  45. package/dist/Modal/_ModalDialog.scss +26 -2
  46. package/dist/Nav/index.scss +8 -0
  47. package/dist/Overlay/index.d.ts +128 -0
  48. package/dist/Overlay/index.js +8 -2
  49. package/dist/Overlay/index.js.map +1 -1
  50. package/dist/PageBanner/index.scss +2 -2
  51. package/dist/Pagination/pagination-bootstrap.scss +9 -0
  52. package/dist/Popover/index.scss +1 -1
  53. package/dist/ProductTour/Checkpoint.scss +1 -1
  54. package/dist/ProgressBar/bootstrap-progress.scss +20 -5
  55. package/dist/ProgressBar/index.scss +3 -3
  56. package/dist/Stepper/index.scss +1 -1
  57. package/dist/Sticky/index.scss +12 -0
  58. package/dist/Toast/index.scss +13 -1
  59. package/dist/Tooltip/index.d.ts +7 -0
  60. package/dist/Tooltip/index.js.map +1 -1
  61. package/dist/Tooltip/index.scss +16 -0
  62. package/dist/core.css +914 -470
  63. package/dist/core.css.map +1 -1
  64. package/dist/core.min.css +1 -1
  65. package/dist/index.d.ts +5 -5
  66. package/dist/index.js +7 -7
  67. package/dist/light.css +2035 -1315
  68. package/dist/light.css.map +1 -1
  69. package/dist/light.min.css +1 -1
  70. package/dist/setupTest.d.ts +2 -0
  71. package/dist/setupTest.js.map +1 -0
  72. package/dist/utils/types/bootstrap.d.ts +39 -0
  73. package/dist/utils/types/bootstrap.js +2 -0
  74. package/dist/utils/types/bootstrap.js.map +1 -0
  75. package/lib/build-tokens.js +67 -31
  76. package/package.json +11 -8
  77. package/src/Annotation/index.scss +16 -0
  78. package/src/Button/{Button.test.jsx → Button.test.tsx} +14 -2
  79. package/src/Button/__snapshots__/{Button.test.jsx.snap → Button.test.tsx.snap} +19 -2
  80. package/src/Button/{index.jsx → index.tsx} +58 -16
  81. package/src/Card/CardDeck.jsx +0 -3
  82. package/src/Card/README.md +0 -31
  83. package/src/Card/index.scss +6 -6
  84. package/src/Carousel/index.scss +24 -1
  85. package/src/Chip/{Chip.test.jsx → Chip.test.tsx} +5 -7
  86. package/src/Chip/ChipIcon.tsx +8 -8
  87. package/src/Chip/{constants.js → constants.ts} +1 -1
  88. package/src/Chip/index.tsx +6 -8
  89. package/src/ChipCarousel/index.tsx +0 -2
  90. package/src/CloseButton/index.scss +8 -0
  91. package/src/ColorPicker/index.scss +1 -1
  92. package/src/DataTable/index.scss +12 -0
  93. package/src/Dropdown/dropdown-bootstrap.scss +6 -0
  94. package/src/Dropzone/index.scss +34 -0
  95. package/src/Form/_FormText.scss +1 -1
  96. package/src/Form/_bootstrap-custom-forms.scss +40 -0
  97. package/src/Form/_index.scss +9 -0
  98. package/src/Form/_mixins.scss +22 -0
  99. package/src/Hyperlink/{Hyperlink.test.jsx → Hyperlink.test.tsx} +21 -10
  100. package/src/Hyperlink/{index.jsx → index.tsx} +41 -37
  101. package/src/Icon/index.d.ts +4 -2
  102. package/src/Icon/index.jsx +1 -1
  103. package/src/IconButton/{IconButton.test.jsx → IconButton.test.tsx} +24 -3
  104. package/src/IconButton/__snapshots__/IconButton.test.tsx.snap +90 -0
  105. package/src/IconButton/index.scss +146 -0
  106. package/src/IconButton/{index.jsx → index.tsx} +66 -26
  107. package/src/Menu/index.scss +8 -0
  108. package/src/Modal/ModalDialog.jsx +7 -3
  109. package/src/Modal/ModalPopup.jsx +9 -1
  110. package/src/Modal/_ModalDialog.scss +26 -2
  111. package/src/Modal/modal-dialog.mdx +95 -6
  112. package/src/Modal/tests/ModalDialog.test.jsx +2 -0
  113. package/src/Modal/tests/ModalPopupNoMock.test.jsx +29 -0
  114. package/src/Nav/index.scss +8 -0
  115. package/src/Overlay/{index.jsx → index.tsx} +13 -8
  116. package/src/PageBanner/index.scss +2 -2
  117. package/src/Pagination/pagination-bootstrap.scss +9 -0
  118. package/src/Popover/index.scss +1 -1
  119. package/src/ProductTour/Checkpoint.scss +1 -1
  120. package/src/ProgressBar/bootstrap-progress.scss +20 -5
  121. package/src/ProgressBar/index.scss +3 -3
  122. package/src/Stepper/index.scss +1 -1
  123. package/src/Sticky/index.scss +12 -0
  124. package/src/Toast/index.scss +13 -1
  125. package/src/Tooltip/index.scss +16 -0
  126. package/src/Tooltip/{index.jsx → index.tsx} +9 -3
  127. package/src/index.d.ts +5 -5
  128. package/src/index.js +7 -7
  129. package/src/{setupTest.js → setupTest.ts} +1 -0
  130. package/src/utils/types/bootstrap.test.tsx +86 -0
  131. package/src/utils/types/bootstrap.ts +43 -0
  132. package/styles/css/core/abstraction-variables.css +44 -0
  133. package/styles/css/core/custom-media-breakpoints.css +3 -4
  134. package/styles/css/core/index.css +2 -1
  135. package/styles/css/core/variables.css +494 -430
  136. package/styles/css/themes/light/abstraction-variables.css +304 -0
  137. package/styles/css/themes/light/index.css +1 -0
  138. package/styles/css/themes/light/utility-classes.css +2 -3
  139. package/styles/css/themes/light/variables.css +1753 -1334
  140. package/styles/scss/core/_typography.scss +16 -4
  141. package/styles/scss/core/_utilities.scss +7 -3
  142. package/styles/scss/core/_variables.scss +43 -30
  143. package/styles/scss/core/core.scss +1 -0
  144. package/tokens/src/core/alias/size.json +6 -5
  145. package/tokens/src/core/components/ActionRow.json +3 -2
  146. package/tokens/src/core/components/Alert.json +12 -10
  147. package/tokens/src/core/components/Annotation.json +9 -7
  148. package/tokens/src/core/components/Avatar.json +9 -9
  149. package/tokens/src/core/components/AvatarButton.json +4 -3
  150. package/tokens/src/core/components/Badge.json +12 -9
  151. package/tokens/src/core/components/Breadcrumb.json +7 -5
  152. package/tokens/src/core/components/Bubble.json +4 -3
  153. package/tokens/src/core/components/Button/core.json +35 -59
  154. package/tokens/src/core/components/Card.json +33 -44
  155. package/tokens/src/core/components/Carousel.json +39 -13
  156. package/tokens/src/core/components/Chip.json +13 -21
  157. package/tokens/src/core/components/ChipCarousel.json +4 -5
  158. package/tokens/src/core/components/CloseButton.json +2 -6
  159. package/tokens/src/core/components/Code.json +9 -8
  160. package/tokens/src/core/components/Collapsible.json +10 -13
  161. package/tokens/src/core/components/ColorPicker.json +3 -2
  162. package/tokens/src/core/components/Container.json +6 -5
  163. package/tokens/src/core/components/DataTable.json +17 -9
  164. package/tokens/src/core/components/Dropdown.json +24 -29
  165. package/tokens/src/core/components/Dropzone.json +5 -7
  166. package/tokens/src/core/components/Form/other.json +5 -4
  167. package/tokens/src/core/components/Form/size.json +72 -119
  168. package/tokens/src/core/components/Form/spacing.json +39 -83
  169. package/tokens/src/core/components/Form/transition.json +43 -7
  170. package/tokens/src/core/components/Form/typography.json +24 -88
  171. package/tokens/src/core/components/Icon.json +6 -5
  172. package/tokens/src/core/components/IconButton.json +4 -7
  173. package/tokens/src/core/components/Image.json +7 -6
  174. package/tokens/src/core/components/Menu.json +14 -12
  175. package/tokens/src/core/components/Modal.json +26 -21
  176. package/tokens/src/core/components/Nav.json +14 -16
  177. package/tokens/src/core/components/Navbar.json +15 -30
  178. package/tokens/src/core/components/Pagination.json +23 -24
  179. package/tokens/src/core/components/Popover.json +18 -14
  180. package/tokens/src/core/components/ProductTour.json +8 -14
  181. package/tokens/src/core/components/ProgressBar.json +29 -14
  182. package/tokens/src/core/components/SearchField.json +7 -9
  183. package/tokens/src/core/components/SelectableBox.json +4 -3
  184. package/tokens/src/core/components/Sheet.json +3 -2
  185. package/tokens/src/core/components/Spinner.json +9 -7
  186. package/tokens/src/core/components/Stack.json +2 -1
  187. package/tokens/src/core/components/Stepper.json +12 -14
  188. package/tokens/src/core/components/Sticky.json +2 -1
  189. package/tokens/src/core/components/Tab.json +8 -7
  190. package/tokens/src/core/components/Tabs.json +5 -5
  191. package/tokens/src/core/components/Toast.json +11 -8
  192. package/tokens/src/core/components/Tooltip.json +13 -11
  193. package/tokens/src/core/components/general/caret.json +5 -3
  194. package/tokens/src/core/components/general/headings.json +5 -4
  195. package/tokens/src/core/components/general/hr.json +3 -2
  196. package/tokens/src/core/components/general/input.json +19 -19
  197. package/tokens/src/core/components/general/link.json +13 -12
  198. package/tokens/src/core/components/general/list.json +9 -6
  199. package/tokens/src/core/components/general/text.json +6 -12
  200. package/tokens/src/core/global/breakpoints.json +25 -6
  201. package/tokens/src/core/global/elevation.json +55 -13
  202. package/tokens/src/core/global/other.json +5 -1
  203. package/tokens/src/core/global/spacing.json +70 -17
  204. package/tokens/src/core/global/transition.json +41 -4
  205. package/tokens/src/core/global/typography.json +248 -53
  206. package/tokens/src/core/utilities/color.json +35 -4
  207. package/tokens/src/themes/light/alias/color.json +276 -75
  208. package/tokens/src/themes/light/components/Alert.json +15 -26
  209. package/tokens/src/themes/light/components/Annotation.json +27 -13
  210. package/tokens/src/themes/light/components/Avatar.json +2 -1
  211. package/tokens/src/themes/light/components/Badge.json +57 -122
  212. package/tokens/src/themes/light/components/Breadcrumb.json +6 -5
  213. package/tokens/src/themes/light/components/Bubble.json +9 -8
  214. package/tokens/src/themes/light/components/Button/brand.json +171 -119
  215. package/tokens/src/themes/light/components/Button/core.json +8 -9
  216. package/tokens/src/themes/light/components/Button/danger.json +171 -112
  217. package/tokens/src/themes/light/components/Button/dark.json +188 -106
  218. package/tokens/src/themes/light/components/Button/info.json +186 -112
  219. package/tokens/src/themes/light/components/Button/light.json +186 -110
  220. package/tokens/src/themes/light/components/Button/primary.json +178 -116
  221. package/tokens/src/themes/light/components/Button/secondary.json +166 -132
  222. package/tokens/src/themes/light/components/Button/success.json +176 -117
  223. package/tokens/src/themes/light/components/Button/tertiary.json +34 -60
  224. package/tokens/src/themes/light/components/Button/warning.json +164 -128
  225. package/tokens/src/themes/light/components/Card.json +10 -21
  226. package/tokens/src/themes/light/components/Carousel.json +12 -11
  227. package/tokens/src/themes/light/components/Chip.json +14 -26
  228. package/tokens/src/themes/light/components/CloseButton.json +12 -2
  229. package/tokens/src/themes/light/components/Code.json +7 -9
  230. package/tokens/src/themes/light/components/DataTable.json +7 -11
  231. package/tokens/src/themes/light/components/Dropdown.json +17 -20
  232. package/tokens/src/themes/light/components/Dropzone.json +49 -11
  233. package/tokens/src/themes/light/components/Form/color.json +101 -155
  234. package/tokens/src/themes/light/components/Form/elevation.json +38 -42
  235. package/tokens/src/themes/light/components/Form/other.json +44 -41
  236. package/tokens/src/themes/light/components/IconButton.json +408 -256
  237. package/tokens/src/themes/light/components/Image.json +7 -4
  238. package/tokens/src/themes/light/components/Menu.json +12 -10
  239. package/tokens/src/themes/light/components/Modal.json +22 -12
  240. package/tokens/src/themes/light/components/Nav.json +82 -94
  241. package/tokens/src/themes/light/components/Navbar.json +32 -76
  242. package/tokens/src/themes/light/components/OverflowScroll.json +3 -1
  243. package/tokens/src/themes/light/components/PageBanner.json +11 -10
  244. package/tokens/src/themes/light/components/Pagination.json +19 -23
  245. package/tokens/src/themes/light/components/Popover.json +22 -27
  246. package/tokens/src/themes/light/components/ProductTour.json +9 -20
  247. package/tokens/src/themes/light/components/ProgressBar.json +12 -10
  248. package/tokens/src/themes/light/components/Scrollable.json +3 -3
  249. package/tokens/src/themes/light/components/SearchField.json +9 -9
  250. package/tokens/src/themes/light/components/Sheet.json +6 -7
  251. package/tokens/src/themes/light/components/Stepper.json +12 -17
  252. package/tokens/src/themes/light/components/Sticky.json +31 -6
  253. package/tokens/src/themes/light/components/Tab.json +47 -24
  254. package/tokens/src/themes/light/components/Toast.json +26 -14
  255. package/tokens/src/themes/light/components/Tooltip.json +25 -10
  256. package/tokens/src/themes/light/components/general/body.json +3 -2
  257. package/tokens/src/themes/light/components/general/headings.json +2 -1
  258. package/tokens/src/themes/light/components/general/hr.json +3 -6
  259. package/tokens/src/themes/light/components/general/input.json +11 -4
  260. package/tokens/src/themes/light/components/general/link.json +34 -43
  261. package/tokens/src/themes/light/components/general/list.json +15 -19
  262. package/tokens/src/themes/light/components/general/text.json +5 -6
  263. package/tokens/src/themes/light/global/color.json +1592 -867
  264. package/tokens/src/themes/light/global/elevation.json +481 -93
  265. package/tokens/style-dictionary.js +342 -144
  266. package/tokens/utils.js +176 -6
  267. package/src/IconButton/__snapshots__/IconButton.test.jsx.snap +0 -20
  268. package/tokens/src/core/global/display.json +0 -22
  269. /package/src/Button/{ButtonGroup.test.jsx → ButtonGroup.test.tsx} +0 -0
  270. /package/src/Button/{ButtonToolbar.test.jsx → ButtonToolbar.test.tsx} +0 -0
  271. /package/src/Button/__snapshots__/{ButtonGroup.test.jsx.snap → ButtonGroup.test.tsx.snap} +0 -0
  272. /package/src/Button/__snapshots__/{ButtonToolbar.test.jsx.snap → ButtonToolbar.test.tsx.snap} +0 -0
  273. /package/src/Chip/__snapshots__/{Chip.test.jsx.snap → Chip.test.tsx.snap} +0 -0
  274. /package/src/Tooltip/{Tooltip.test.jsx → Tooltip.test.tsx} +0 -0
@@ -0,0 +1,90 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<IconButton /> <IconButton.IconButtonWithTooltip> renders with required props 1`] = `
4
+ <button
5
+ aria-label="alternative"
6
+ className="btn-icon btn-icon-primary btn-icon-md"
7
+ onBlur={[Function]}
8
+ onClick={[Function]}
9
+ onFocus={[Function]}
10
+ onMouseOut={[Function]}
11
+ onMouseOver={[Function]}
12
+ type="button"
13
+ >
14
+ <span
15
+ className="btn-icon__icon-container"
16
+ >
17
+ <span
18
+ className="pgn__icon btn-icon__icon"
19
+ >
20
+ <svg
21
+ aria-hidden={true}
22
+ fill="none"
23
+ focusable={false}
24
+ height={24}
25
+ role="img"
26
+ viewBox="0 0 24 24"
27
+ width={24}
28
+ xmlns="http://www.w3.org/2000/svg"
29
+ >
30
+ <path
31
+ d="M11 7h2v2h-2V7Zm0 4h2v6h-2v-6Zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2Zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8Z"
32
+ fill="currentColor"
33
+ />
34
+ </svg>
35
+ </span>
36
+ </span>
37
+ </button>
38
+ `;
39
+
40
+ exports[`<IconButton /> renders with deprecated props 1`] = `
41
+ <button
42
+ aria-label="alternative"
43
+ className="btn-icon btn-icon-primary btn-icon-md"
44
+ onClick={[Function]}
45
+ type="button"
46
+ >
47
+ <span
48
+ className="btn-icon__icon-container"
49
+ >
50
+ <span
51
+ aria-hidden={true}
52
+ className="btn-icon__icon"
53
+ id="Icon1"
54
+ />
55
+ </span>
56
+ </button>
57
+ `;
58
+
59
+ exports[`<IconButton /> renders with required props 1`] = `
60
+ <button
61
+ aria-label="alternative"
62
+ className="btn-icon btn-icon-primary btn-icon-md"
63
+ onClick={[Function]}
64
+ type="button"
65
+ >
66
+ <span
67
+ className="btn-icon__icon-container"
68
+ >
69
+ <span
70
+ className="pgn__icon btn-icon__icon"
71
+ >
72
+ <svg
73
+ aria-hidden={true}
74
+ fill="none"
75
+ focusable={false}
76
+ height={24}
77
+ role="img"
78
+ viewBox="0 0 24 24"
79
+ width={24}
80
+ xmlns="http://www.w3.org/2000/svg"
81
+ >
82
+ <path
83
+ d="M11 7h2v2h-2V7Zm0 4h2v6h-2v-6Zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2Zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8Z"
84
+ fill="currentColor"
85
+ />
86
+ </svg>
87
+ </span>
88
+ </span>
89
+ </button>
90
+ `;
@@ -1,5 +1,151 @@
1
1
  @import "mixins";
2
2
 
3
+ :root {
4
+ --pgn-elevation-icon-button-box-shadow-primary-base:
5
+ var(--pgn-elevation-icon-button-box-shadow-primary-base-inset)
6
+ var(--pgn-elevation-icon-button-box-shadow-primary-base-offset-x)
7
+ var(--pgn-elevation-icon-button-box-shadow-primary-base-offset-y)
8
+ var(--pgn-elevation-icon-button-box-shadow-primary-base-blur)
9
+ var(--pgn-elevation-icon-button-box-shadow-primary-base-spread)
10
+ var(--pgn-elevation-icon-button-box-shadow-primary-base-color);
11
+
12
+ --pgn-elevation-icon-button-box-shadow-primary-inverse:
13
+ var(--pgn-elevation-icon-button-box-shadow-primary-inverse-inset)
14
+ var(--pgn-elevation-icon-button-box-shadow-primary-inverse-offset-x)
15
+ var(--pgn-elevation-icon-button-box-shadow-primary-inverse-offset-y)
16
+ var(--pgn-elevation-icon-button-box-shadow-primary-inverse-blur)
17
+ var(--pgn-elevation-icon-button-box-shadow-primary-inverse-spread)
18
+ var(--pgn-elevation-icon-button-box-shadow-primary-inverse-color);
19
+
20
+ --pgn-elevation-icon-button-box-shadow-secondary-base:
21
+ var(--pgn-elevation-icon-button-box-shadow-secondary-base-inset)
22
+ var(--pgn-elevation-icon-button-box-shadow-secondary-base-offset-x)
23
+ var(--pgn-elevation-icon-button-box-shadow-secondary-base-offset-y)
24
+ var(--pgn-elevation-icon-button-box-shadow-secondary-base-blur)
25
+ var(--pgn-elevation-icon-button-box-shadow-secondary-base-spread)
26
+ var(--pgn-elevation-icon-button-box-shadow-secondary-base-color);
27
+
28
+ --pgn-elevation-icon-button-box-shadow-secondary-inverse:
29
+ var(--pgn-elevation-icon-button-box-shadow-secondary-inverse-inset)
30
+ var(--pgn-elevation-icon-button-box-shadow-secondary-inverse-offset-x)
31
+ var(--pgn-elevation-icon-button-box-shadow-secondary-inverse-offset-y)
32
+ var(--pgn-elevation-icon-button-box-shadow-secondary-inverse-blur)
33
+ var(--pgn-elevation-icon-button-box-shadow-secondary-inverse-spread)
34
+ var(--pgn-elevation-icon-button-box-shadow-secondary-inverse-color);
35
+
36
+ --pgn-elevation-icon-button-box-shadow-brand-base:
37
+ var(--pgn-elevation-icon-button-box-shadow-brand-base-inset)
38
+ var(--pgn-elevation-icon-button-box-shadow-brand-base-offset-x)
39
+ var(--pgn-elevation-icon-button-box-shadow-brand-base-offset-y)
40
+ var(--pgn-elevation-icon-button-box-shadow-brand-base-blur)
41
+ var(--pgn-elevation-icon-button-box-shadow-brand-base-spread)
42
+ var(--pgn-elevation-icon-button-box-shadow-brand-base-color);
43
+
44
+ --pgn-elevation-icon-button-box-shadow-brand-inverse:
45
+ var(--pgn-elevation-icon-button-box-shadow-brand-inverse-inset)
46
+ var(--pgn-elevation-icon-button-box-shadow-brand-inverse-offset-x)
47
+ var(--pgn-elevation-icon-button-box-shadow-brand-inverse-offset-y)
48
+ var(--pgn-elevation-icon-button-box-shadow-brand-inverse-blur)
49
+ var(--pgn-elevation-icon-button-box-shadow-brand-inverse-spread)
50
+ var(--pgn-elevation-icon-button-box-shadow-brand-inverse-color);
51
+
52
+ --pgn-elevation-icon-button-box-shadow-success-base:
53
+ var(--pgn-elevation-icon-button-box-shadow-success-base-inset)
54
+ var(--pgn-elevation-icon-button-box-shadow-success-base-offset-x)
55
+ var(--pgn-elevation-icon-button-box-shadow-success-base-offset-y)
56
+ var(--pgn-elevation-icon-button-box-shadow-success-base-blur)
57
+ var(--pgn-elevation-icon-button-box-shadow-success-base-spread)
58
+ var(--pgn-elevation-icon-button-box-shadow-success-base-color);
59
+
60
+ --pgn-elevation-icon-button-box-shadow-success-inverse:
61
+ var(--pgn-elevation-icon-button-box-shadow-success-inverse-inset)
62
+ var(--pgn-elevation-icon-button-box-shadow-success-inverse-offset-x)
63
+ var(--pgn-elevation-icon-button-box-shadow-success-inverse-offset-y)
64
+ var(--pgn-elevation-icon-button-box-shadow-success-inverse-blur)
65
+ var(--pgn-elevation-icon-button-box-shadow-success-inverse-spread)
66
+ var(--pgn-elevation-icon-button-box-shadow-success-inverse-color);
67
+
68
+ --pgn-elevation-icon-button-box-shadow-warning-base:
69
+ var(--pgn-elevation-icon-button-box-shadow-warning-base-inset)
70
+ var(--pgn-elevation-icon-button-box-shadow-warning-base-offset-x)
71
+ var(--pgn-elevation-icon-button-box-shadow-warning-base-offset-y)
72
+ var(--pgn-elevation-icon-button-box-shadow-warning-base-blur)
73
+ var(--pgn-elevation-icon-button-box-shadow-warning-base-spread)
74
+ var(--pgn-elevation-icon-button-box-shadow-warning-base-color);
75
+
76
+ --pgn-elevation-icon-button-box-shadow-warning-inverse:
77
+ var(--pgn-elevation-icon-button-box-shadow-warning-inverse-inset)
78
+ var(--pgn-elevation-icon-button-box-shadow-warning-inverse-offset-x)
79
+ var(--pgn-elevation-icon-button-box-shadow-warning-inverse-offset-y)
80
+ var(--pgn-elevation-icon-button-box-shadow-warning-inverse-blur)
81
+ var(--pgn-elevation-icon-button-box-shadow-warning-inverse-spread)
82
+ var(--pgn-elevation-icon-button-box-shadow-warning-inverse-color);
83
+
84
+ --pgn-elevation-icon-button-box-shadow-danger-base:
85
+ var(--pgn-elevation-icon-button-box-shadow-danger-base-inset)
86
+ var(--pgn-elevation-icon-button-box-shadow-danger-base-offset-x)
87
+ var(--pgn-elevation-icon-button-box-shadow-danger-base-offset-y)
88
+ var(--pgn-elevation-icon-button-box-shadow-danger-base-blur)
89
+ var(--pgn-elevation-icon-button-box-shadow-danger-base-spread)
90
+ var(--pgn-elevation-icon-button-box-shadow-danger-base-color);
91
+
92
+ --pgn-elevation-icon-button-box-shadow-danger-inverse:
93
+ var(--pgn-elevation-icon-button-box-shadow-danger-inverse-inset)
94
+ var(--pgn-elevation-icon-button-box-shadow-danger-inverse-offset-x)
95
+ var(--pgn-elevation-icon-button-box-shadow-danger-inverse-offset-y)
96
+ var(--pgn-elevation-icon-button-box-shadow-danger-inverse-blur)
97
+ var(--pgn-elevation-icon-button-box-shadow-danger-inverse-spread)
98
+ var(--pgn-elevation-icon-button-box-shadow-danger-inverse-color);
99
+
100
+ --pgn-elevation-icon-button-box-shadow-light-base:
101
+ var(--pgn-elevation-icon-button-box-shadow-light-base-inset)
102
+ var(--pgn-elevation-icon-button-box-shadow-light-base-offset-x)
103
+ var(--pgn-elevation-icon-button-box-shadow-light-base-offset-y)
104
+ var(--pgn-elevation-icon-button-box-shadow-light-base-blur)
105
+ var(--pgn-elevation-icon-button-box-shadow-light-base-spread)
106
+ var(--pgn-elevation-icon-button-box-shadow-light-base-color);
107
+
108
+ --pgn-elevation-icon-button-box-shadow-light-inverse:
109
+ var(--pgn-elevation-icon-button-box-shadow-light-inverse-inset)
110
+ var(--pgn-elevation-icon-button-box-shadow-light-inverse-offset-x)
111
+ var(--pgn-elevation-icon-button-box-shadow-light-inverse-offset-y)
112
+ var(--pgn-elevation-icon-button-box-shadow-light-inverse-blur)
113
+ var(--pgn-elevation-icon-button-box-shadow-light-inverse-spread)
114
+ var(--pgn-elevation-icon-button-box-shadow-light-inverse-color);
115
+
116
+ --pgn-elevation-icon-button-box-shadow-dark-base:
117
+ var(--pgn-elevation-icon-button-box-shadow-dark-base-inset)
118
+ var(--pgn-elevation-icon-button-box-shadow-dark-base-offset-x)
119
+ var(--pgn-elevation-icon-button-box-shadow-dark-base-offset-y)
120
+ var(--pgn-elevation-icon-button-box-shadow-dark-base-blur)
121
+ var(--pgn-elevation-icon-button-box-shadow-dark-base-spread)
122
+ var(--pgn-elevation-icon-button-box-shadow-dark-base-color);
123
+
124
+ --pgn-elevation-icon-button-box-shadow-dark-inverse:
125
+ var(--pgn-elevation-icon-button-box-shadow-dark-inverse)
126
+ var(--pgn-elevation-icon-button-box-shadow-dark-inverse-offset-x)
127
+ var(--pgn-elevation-icon-button-box-shadow-dark-inverse-offset-y)
128
+ var(--pgn-elevation-icon-button-box-shadow-dark-inverse-blur)
129
+ var(--pgn-elevation-icon-button-box-shadow-dark-inverse-spread)
130
+ var(--pgn-elevation-icon-button-box-shadow-dark-inverse-color);
131
+
132
+ --pgn-elevation-icon-button-box-shadow-black-base:
133
+ var(--pgn-elevation-icon-button-box-shadow-black-base-inset)
134
+ var(--pgn-elevation-icon-button-box-shadow-black-base-offset-x)
135
+ var(--pgn-elevation-icon-button-box-shadow-black-base-offset-y)
136
+ var(--pgn-elevation-icon-button-box-shadow-black-base-blur)
137
+ var(--pgn-elevation-icon-button-box-shadow-black-base-spread)
138
+ var(--pgn-elevation-icon-button-box-shadow-black-base-color);
139
+
140
+ --pgn-elevation-icon-button-box-shadow-black-inverse:
141
+ var(--pgn-elevation-icon-button-box-shadow-black-inverse-inset)
142
+ var(--pgn-elevation-icon-button-box-shadow-black-inverse-offset-x)
143
+ var(--pgn-elevation-icon-button-box-shadow-black-inverse-offset-y)
144
+ var(--pgn-elevation-icon-button-box-shadow-black-inverse-blur)
145
+ var(--pgn-elevation-icon-button-box-shadow-black-inverse-spread)
146
+ var(--pgn-elevation-icon-button-box-shadow-black-inverse-color);
147
+ }
148
+
3
149
  .btn-icon {
4
150
  @include btn-icon-size(var(--pgn-size-icon-button-diameter-md));
5
151
 
@@ -1,12 +1,44 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import classNames from 'classnames';
4
-
4
+ import { type Placement } from 'react-bootstrap/Overlay';
5
5
  import Icon from '../Icon';
6
6
  import { OverlayTrigger } from '../Overlay';
7
7
  import Tooltip from '../Tooltip';
8
8
 
9
- const IconButton = React.forwardRef(({
9
+ interface Props extends React.HTMLAttributes<HTMLButtonElement> {
10
+ iconAs?: React.ComponentType<any>,
11
+ /** Additional CSS class[es] to apply to this button */
12
+ className?: string;
13
+ /** Alt text for your icon. For best practice, avoid using alt text to describe
14
+ * the image in the `IconButton`. Instead, we recommend describing the function
15
+ * of the button. */
16
+ alt: string;
17
+ /** Changes icon styles for dark background */
18
+ invertColors?: boolean;
19
+ /** An icon component to render. Example import of a Paragon icon component:
20
+ * `import { Check } from '@openedx/paragon/icons';`
21
+ * */
22
+ // Note: React.ComponentType is what we want here. React.ElementType would allow some element type strings like "div",
23
+ // but we only want to allow components like 'Add' (a specific icon component function/class)
24
+ src?: React.ComponentType;
25
+ /** Extra class names that will be added to the icon */
26
+ iconClassNames?: string;
27
+ /** Click handler for the button */
28
+ onClick?: React.MouseEventHandler<HTMLButtonElement>;
29
+ /** whether to show the `IconButton` in an active state, whose styling is distinct from default state */
30
+ isActive?: boolean;
31
+ /** @deprecated Using FontAwesome icons is deprecated. Instead, pass iconAs={Icon} src={...} */
32
+ icon?: { prefix?: string; iconName?: string, icon?: any[] },
33
+ /** Type of button (uses Bootstrap options) */
34
+ variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'light' | 'dark' | 'black' | 'brand';
35
+ /** size of button to render */
36
+ size?: 'sm' | 'md' | 'inline';
37
+ /** no children */
38
+ children?: never;
39
+ }
40
+
41
+ const IconButton = React.forwardRef<HTMLButtonElement, Props>(({
10
42
  className,
11
43
  alt,
12
44
  invertColors,
@@ -18,6 +50,7 @@ const IconButton = React.forwardRef(({
18
50
  variant,
19
51
  iconAs,
20
52
  isActive,
53
+ children, // unused, just here because we don't want it to be part of 'attrs'
21
54
  ...attrs
22
55
  }, ref) => {
23
56
  const invert = invertColors ? 'inverse-' : '';
@@ -42,11 +75,13 @@ const IconButton = React.forwardRef(({
42
75
  {...attrs}
43
76
  >
44
77
  <span className="btn-icon__icon-container">
45
- <IconComponent
46
- className={classNames('btn-icon__icon', iconClassNames)}
47
- icon={icon}
48
- src={src}
49
- />
78
+ {IconComponent && (
79
+ <IconComponent
80
+ className={classNames('btn-icon__icon', iconClassNames)}
81
+ icon={icon as any}
82
+ src={src}
83
+ />
84
+ )}
50
85
  </span>
51
86
  </button>
52
87
  );
@@ -54,7 +89,7 @@ const IconButton = React.forwardRef(({
54
89
 
55
90
  IconButton.defaultProps = {
56
91
  iconAs: Icon,
57
- src: null,
92
+ src: undefined,
58
93
  icon: undefined,
59
94
  iconClassNames: undefined,
60
95
  className: undefined,
@@ -63,17 +98,18 @@ IconButton.defaultProps = {
63
98
  size: 'md',
64
99
  onClick: () => {},
65
100
  isActive: false,
101
+ children: undefined,
66
102
  };
67
103
 
68
104
  IconButton.propTypes = {
69
105
  /** A custom class name. */
70
106
  className: PropTypes.string,
71
107
  /** Component that renders the icon, currently defaults to `Icon` */
72
- iconAs: PropTypes.elementType,
108
+ iconAs: PropTypes.elementType as any,
73
109
  /** An icon component to render. Example import of a Paragon icon component:
74
- * `import { Check } from '@openedx/paragon/dist/icon';`
110
+ * `import { Check } from '@openedx/paragon/icons';`
75
111
  * */
76
- src: PropTypes.oneOfType([PropTypes.element, PropTypes.elementType]),
112
+ src: PropTypes.elementType as any,
77
113
  /** Alt text for your icon. For best practice, avoid using alt text to describe
78
114
  * the image in the `IconButton`. Instead, we recommend describing the function
79
115
  * of the button. */
@@ -86,7 +122,7 @@ IconButton.propTypes = {
86
122
  iconName: PropTypes.string,
87
123
  // eslint-disable-next-line react/forbid-prop-types
88
124
  icon: PropTypes.array,
89
- }),
125
+ }) as any,
90
126
  /** Extra class names that will be added to the icon */
91
127
  iconClassNames: PropTypes.string,
92
128
  /** Click handler for the button */
@@ -99,38 +135,40 @@ IconButton.propTypes = {
99
135
  isActive: PropTypes.bool,
100
136
  };
101
137
 
138
+ interface PropsWithTooltip extends Props {
139
+ /** choose from https://popper.js.org/docs/v2/constructors/#options */
140
+ tooltipPlacement: Placement,
141
+ /** any content to pass to tooltip content area */
142
+ tooltipContent: React.ReactNode,
143
+ }
144
+
102
145
  /**
103
- *
104
- * @param { object } args Arguments
105
- * @param { string } args.tooltipPlacement choose from https://popper.js.org/docs/v2/constructors/#options
106
- * @param { React.Component } args.tooltipContent any content to pass to tooltip content area
107
- * @returns { IconButton } a button wrapped in overlaytrigger
146
+ * An icon button wrapped in overlaytrigger to display a tooltip.
108
147
  */
109
148
  function IconButtonWithTooltip({
110
- tooltipPlacement, tooltipContent, variant, invertColors, ...props
111
- }) {
112
- const invert = invertColors ? 'inverse-' : '';
149
+ tooltipPlacement, tooltipContent, ...props
150
+ }: PropsWithTooltip) {
151
+ const invert = props.invertColors ? 'inverse-' : '';
113
152
  return (
114
153
  <OverlayTrigger
115
154
  placement={tooltipPlacement}
116
155
  overlay={(
117
156
  <Tooltip
118
157
  id={`iconbutton-tooltip-${tooltipPlacement}`}
119
- variant={invert ? 'light' : ''}
158
+ variant={invert ? 'light' : undefined}
120
159
  >
121
160
  {tooltipContent}
122
161
  </Tooltip>
123
162
  )}
124
163
  >
125
- <IconButton variant={variant} invertColors={invertColors} {...props} />
164
+ <IconButton {...props} />
126
165
  </OverlayTrigger>
127
166
  );
128
167
  }
129
168
 
130
169
  IconButtonWithTooltip.defaultProps = {
170
+ ...IconButton.defaultProps,
131
171
  tooltipPlacement: 'top',
132
- variant: 'primary',
133
- invertColors: false,
134
172
  };
135
173
 
136
174
  IconButtonWithTooltip.propTypes = {
@@ -144,7 +182,9 @@ IconButtonWithTooltip.propTypes = {
144
182
  invertColors: PropTypes.bool,
145
183
  };
146
184
 
147
- IconButton.IconButtonWithTooltip = IconButtonWithTooltip;
185
+ (IconButton as any).IconButtonWithTooltip = IconButtonWithTooltip;
148
186
 
149
- export default IconButton;
187
+ export default IconButton as typeof IconButton & {
188
+ IconButtonWithTooltip: typeof IconButtonWithTooltip,
189
+ };
150
190
  export { IconButtonWithTooltip };
@@ -1,3 +1,11 @@
1
+ :root {
2
+ --pgn-elevation-menu-box-shadow:
3
+ var(--pgn-elevation-menu-box-shadow-offset-x)
4
+ var(--pgn-elevation-menu-box-shadow-offset-y)
5
+ var(--pgn-elevation-menu-box-shadow-blur)
6
+ var(--pgn-elevation-menu-box-shadow-color);
7
+ }
8
+
1
9
  .pgn__menu {
2
10
  border-radius: var(--pgn-size-menu-base-border-radius);
3
11
  box-shadow: var(--pgn-elevation-menu-box-shadow);
@@ -122,8 +122,13 @@ ModalDialog.propTypes = {
122
122
  * Specifies the z-index of the modal
123
123
  */
124
124
  zIndex: PropTypes.number,
125
- /** Specifies whether overflow is visible in the modal */
126
- isOverflowVisible: PropTypes.bool,
125
+ /**
126
+ * Specifies whether overflow content inside the modal should be visible.
127
+ * - `true` - content that exceeds the modal boundaries will remain visible outside the modal's main viewport,
128
+ * rather than being clipped or hidden.
129
+ * - `false` - any overflow content will be clipped to fit within the modal's dimensions.
130
+ */
131
+ isOverflowVisible: PropTypes.bool.isRequired,
127
132
  };
128
133
 
129
134
  ModalDialog.defaultProps = {
@@ -137,7 +142,6 @@ ModalDialog.defaultProps = {
137
142
  isFullscreenOnMobile: false,
138
143
  isBlocking: false,
139
144
  zIndex: undefined,
140
- isOverflowVisible: true,
141
145
  };
142
146
 
143
147
  ModalDialog.Header = ModalDialogHeader;
@@ -34,6 +34,14 @@ function ModalPopup({
34
34
  },
35
35
  ];
36
36
 
37
+ const handleOnClickOutside = (e) => {
38
+ if (e.type === 'touchstart') {
39
+ return;
40
+ }
41
+
42
+ onClose();
43
+ };
44
+
37
45
  return (
38
46
  <ModalContextProvider onClose={onClose} isOpen={isOpen} isBlocking={isBlocking}>
39
47
  <RootComponent>
@@ -47,7 +55,7 @@ function ModalPopup({
47
55
  scrollLock={false}
48
56
  enabled={isOpen}
49
57
  onEscapeKey={onClose}
50
- onClickOutside={onClose}
58
+ onClickOutside={handleOnClickOutside}
51
59
  >
52
60
  {isOpen && (
53
61
  <div className="pgn__modal-popup__tooltip">
@@ -1,3 +1,23 @@
1
+ :root {
2
+ --pgn-elevation-modal-content-box-shadow-sm-up:
3
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-1-offset-x)
4
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-1-offset-y)
5
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-1-blur)
6
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-1-color),
7
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-2-offset-x)
8
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-2-offset-y)
9
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-2-blur)
10
+ var(--pgn-elevation-modal-content-box-shadow-sm-up-2-color);
11
+
12
+ --pgn-spacing-modal-footer-padding-base:
13
+ var(--pgn-spacing-modal-footer-padding-base-y)
14
+ var(--pgn-spacing-modal-footer-padding-base-x);
15
+
16
+ --pgn-spacing-modal-header-padding-base:
17
+ var(--pgn-spacing-modal-header-padding-base-y)
18
+ var(--pgn-spacing-modal-header-padding-base-x);
19
+ }
20
+
1
21
  .pgn__modal {
2
22
  background: var(--pgn-color-modal-content-bg);
3
23
  border-radius: calc(var(--pgn-size-modal-content-border-radius) - var(--pgn-size-modal-content-border-width));
@@ -76,6 +96,10 @@
76
96
  border-top: solid 1px var(--pgn-color-light-base);
77
97
  padding-top: var(--pgn-spacing-modal-footer-padding-y);
78
98
  }
99
+
100
+ .pgn__modal-header {
101
+ border-radius: 0;
102
+ }
79
103
  }
80
104
 
81
105
  // Made specific due to a selector in Modal.scss
@@ -118,7 +142,7 @@
118
142
  }
119
143
 
120
144
  .pgn__modal-title {
121
- font-size: var(--pgn-typography-font-size-h3);
145
+ font-size: var(--pgn-typography-font-size-h3-base);
122
146
  margin-inline-end: 3rem; // roughly accomodate the width of the close buttonn
123
147
  text-align: start;
124
148
  }
@@ -306,7 +330,7 @@
306
330
  }
307
331
 
308
332
  .pgn__modal-title {
309
- font-size: var(--pgn-typography-font-size-h4);
333
+ font-size: var(--pgn-typography-font-size-h4-base);
310
334
  display: flex;
311
335
  flex-grow: 1;
312
336
  align-items: center;