@openedx/paragon 23.0.0-alpha.3 → 23.0.0-alpha.5

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 (258) hide show
  1. package/bin/paragon-scripts.js +10 -0
  2. package/dist/Annotation/index.scss +16 -0
  3. package/dist/Card/CardDeck.js +0 -2
  4. package/dist/Card/CardDeck.js.map +1 -1
  5. package/dist/Card/index.scss +8 -6
  6. package/dist/Carousel/index.scss +24 -1
  7. package/dist/Chip/ChipIcon.d.ts +1 -1
  8. package/dist/CloseButton/index.scss +8 -0
  9. package/dist/ColorPicker/index.scss +1 -1
  10. package/dist/Container/index.d.ts +16 -0
  11. package/dist/Container/index.js +15 -13
  12. package/dist/Container/index.js.map +1 -1
  13. package/dist/DataTable/index.scss +12 -0
  14. package/dist/Dropdown/dropdown-bootstrap.scss +6 -0
  15. package/dist/Dropzone/index.scss +34 -0
  16. package/dist/Form/_FormText.scss +1 -1
  17. package/dist/Form/_bootstrap-custom-forms.scss +40 -0
  18. package/dist/Form/_index.scss +9 -0
  19. package/dist/Form/_mixins.scss +22 -0
  20. package/dist/IconButton/index.d.ts +1 -1
  21. package/dist/IconButton/index.js +1 -1
  22. package/dist/IconButton/index.js.map +1 -1
  23. package/dist/IconButton/index.scss +146 -0
  24. package/dist/Menu/SelectMenu.js +9 -4
  25. package/dist/Menu/SelectMenu.js.map +1 -1
  26. package/dist/Menu/index.scss +8 -0
  27. package/dist/Modal/ModalContext.d.ts +15 -0
  28. package/dist/Modal/ModalContext.js +7 -14
  29. package/dist/Modal/ModalContext.js.map +1 -1
  30. package/dist/Modal/ModalDialog.d.ts +110 -0
  31. package/dist/Modal/ModalDialog.js +30 -24
  32. package/dist/Modal/ModalDialog.js.map +1 -1
  33. package/dist/Modal/ModalDialogHeader.d.ts +10 -0
  34. package/dist/Modal/ModalDialogHeader.js +6 -7
  35. package/dist/Modal/ModalDialogHeader.js.map +1 -1
  36. package/dist/Modal/ModalLayer.d.ts +53 -0
  37. package/dist/Modal/ModalLayer.js +5 -14
  38. package/dist/Modal/ModalLayer.js.map +1 -1
  39. package/dist/Modal/Portal.d.ts +11 -0
  40. package/dist/Modal/Portal.js +5 -6
  41. package/dist/Modal/Portal.js.map +1 -1
  42. package/dist/Modal/_ModalDialog.scss +22 -2
  43. package/dist/Nav/index.scss +8 -0
  44. package/dist/Overlay/index.d.ts +2 -2
  45. package/dist/PageBanner/index.scss +2 -2
  46. package/dist/Pagination/pagination-bootstrap.scss +9 -0
  47. package/dist/Popover/index.scss +1 -1
  48. package/dist/ProductTour/Checkpoint.scss +1 -1
  49. package/dist/ProgressBar/bootstrap-progress.scss +20 -5
  50. package/dist/ProgressBar/index.scss +3 -3
  51. package/dist/Stepper/index.scss +1 -1
  52. package/dist/Sticky/index.scss +12 -0
  53. package/dist/Toast/index.scss +13 -1
  54. package/dist/Tooltip/index.scss +16 -0
  55. package/dist/core.css +913 -470
  56. package/dist/core.css.map +1 -1
  57. package/dist/core.min.css +1 -1
  58. package/dist/hooks/useArrowKeyNavigation.js +2 -3
  59. package/dist/hooks/useArrowKeyNavigation.js.map +1 -1
  60. package/dist/index.d.ts +19 -5
  61. package/dist/index.js +5 -5
  62. package/dist/light.css +2035 -1315
  63. package/dist/light.css.map +1 -1
  64. package/dist/light.min.css +1 -1
  65. package/icons/es5/Newsstand.js +15 -0
  66. package/icons/es5/index.js +1 -0
  67. package/icons/es5/index.ts +1 -0
  68. package/icons/jsx/Newsstand.jsx +17 -0
  69. package/icons/jsx/index.jsx +1 -0
  70. package/icons/svg/newsstand.svg +1 -0
  71. package/lib/build-tokens.js +67 -31
  72. package/package.json +8 -5
  73. package/src/Annotation/index.scss +16 -0
  74. package/src/Card/CardDeck.jsx +0 -3
  75. package/src/Card/README.md +0 -31
  76. package/src/Card/index.scss +8 -6
  77. package/src/Carousel/index.scss +24 -1
  78. package/src/CloseButton/index.scss +8 -0
  79. package/src/ColorPicker/index.scss +1 -1
  80. package/src/Container/{Container.test.jsx → Container.test.tsx} +14 -8
  81. package/src/Container/README.md +4 -0
  82. package/src/Container/index.tsx +64 -0
  83. package/src/DataTable/index.scss +12 -0
  84. package/src/DataTable/selection/tests/ControlledSelectHeader.test.jsx +7 -7
  85. package/src/Dropdown/dropdown-bootstrap.scss +6 -0
  86. package/src/Dropzone/index.scss +34 -0
  87. package/src/Form/_FormText.scss +1 -1
  88. package/src/Form/_bootstrap-custom-forms.scss +40 -0
  89. package/src/Form/_index.scss +9 -0
  90. package/src/Form/_mixins.scss +22 -0
  91. package/src/IconButton/index.scss +146 -0
  92. package/src/IconButton/index.tsx +1 -1
  93. package/src/Menu/SelectMenu.jsx +5 -0
  94. package/src/Menu/SelectMenu.test.jsx +6 -0
  95. package/src/Menu/index.scss +8 -0
  96. package/src/Menu/select-menu.md +8 -0
  97. package/src/Modal/{ModalContext.jsx → ModalContext.tsx} +19 -16
  98. package/src/Modal/{ModalDialog.jsx → ModalDialog.tsx} +57 -26
  99. package/src/Modal/{ModalDialogHeader.jsx → ModalDialogHeader.tsx} +17 -11
  100. package/src/Modal/{ModalLayer.jsx → ModalLayer.tsx} +17 -17
  101. package/src/Modal/{Portal.jsx → Portal.tsx} +10 -7
  102. package/src/Modal/_ModalDialog.scss +22 -2
  103. package/src/Modal/modal-dialog.mdx +95 -6
  104. package/src/Modal/tests/{ModalDialog.test.jsx → ModalDialog.test.tsx} +18 -10
  105. package/src/Modal/tests/{ModalLayer.test.jsx → ModalLayer.test.tsx} +5 -5
  106. package/src/Modal/tests/{Portal.test.jsx → Portal.test.tsx} +3 -3
  107. package/src/Nav/index.scss +8 -0
  108. package/src/PageBanner/index.scss +2 -2
  109. package/src/Pagination/pagination-bootstrap.scss +9 -0
  110. package/src/Popover/index.scss +1 -1
  111. package/src/ProductTour/Checkpoint.scss +1 -1
  112. package/src/ProgressBar/bootstrap-progress.scss +20 -5
  113. package/src/ProgressBar/index.scss +3 -3
  114. package/src/Stepper/index.scss +1 -1
  115. package/src/Sticky/index.scss +12 -0
  116. package/src/Toast/index.scss +13 -1
  117. package/src/Tooltip/index.scss +16 -0
  118. package/src/hooks/useArrowKeyNavigation.jsx +1 -2
  119. package/src/index.d.ts +19 -5
  120. package/src/index.js +5 -5
  121. package/styles/css/core/abstraction-variables.css +44 -0
  122. package/styles/css/core/custom-media-breakpoints.css +3 -4
  123. package/styles/css/core/index.css +2 -1
  124. package/styles/css/core/variables.css +494 -430
  125. package/styles/css/themes/light/abstraction-variables.css +304 -0
  126. package/styles/css/themes/light/index.css +1 -0
  127. package/styles/css/themes/light/utility-classes.css +2 -3
  128. package/styles/css/themes/light/variables.css +1753 -1334
  129. package/styles/scss/core/_typography.scss +16 -4
  130. package/styles/scss/core/_utilities.scss +7 -3
  131. package/styles/scss/core/_variables.scss +43 -30
  132. package/styles/scss/core/core.scss +1 -0
  133. package/tokens/src/core/alias/size.json +6 -5
  134. package/tokens/src/core/components/ActionRow.json +3 -2
  135. package/tokens/src/core/components/Alert.json +12 -10
  136. package/tokens/src/core/components/Annotation.json +9 -7
  137. package/tokens/src/core/components/Avatar.json +9 -9
  138. package/tokens/src/core/components/AvatarButton.json +4 -3
  139. package/tokens/src/core/components/Badge.json +12 -9
  140. package/tokens/src/core/components/Breadcrumb.json +7 -5
  141. package/tokens/src/core/components/Bubble.json +4 -3
  142. package/tokens/src/core/components/Button/core.json +35 -59
  143. package/tokens/src/core/components/Card.json +33 -44
  144. package/tokens/src/core/components/Carousel.json +39 -13
  145. package/tokens/src/core/components/Chip.json +13 -21
  146. package/tokens/src/core/components/ChipCarousel.json +4 -5
  147. package/tokens/src/core/components/CloseButton.json +2 -6
  148. package/tokens/src/core/components/Code.json +9 -8
  149. package/tokens/src/core/components/Collapsible.json +10 -13
  150. package/tokens/src/core/components/ColorPicker.json +3 -2
  151. package/tokens/src/core/components/Container.json +6 -5
  152. package/tokens/src/core/components/DataTable.json +17 -9
  153. package/tokens/src/core/components/Dropdown.json +24 -29
  154. package/tokens/src/core/components/Dropzone.json +5 -7
  155. package/tokens/src/core/components/Form/other.json +5 -4
  156. package/tokens/src/core/components/Form/size.json +72 -119
  157. package/tokens/src/core/components/Form/spacing.json +39 -83
  158. package/tokens/src/core/components/Form/transition.json +43 -7
  159. package/tokens/src/core/components/Form/typography.json +24 -88
  160. package/tokens/src/core/components/Icon.json +6 -5
  161. package/tokens/src/core/components/IconButton.json +4 -7
  162. package/tokens/src/core/components/Image.json +7 -6
  163. package/tokens/src/core/components/Menu.json +14 -12
  164. package/tokens/src/core/components/Modal.json +26 -21
  165. package/tokens/src/core/components/Nav.json +14 -16
  166. package/tokens/src/core/components/Navbar.json +15 -30
  167. package/tokens/src/core/components/Pagination.json +23 -24
  168. package/tokens/src/core/components/Popover.json +18 -14
  169. package/tokens/src/core/components/ProductTour.json +8 -14
  170. package/tokens/src/core/components/ProgressBar.json +29 -14
  171. package/tokens/src/core/components/SearchField.json +7 -9
  172. package/tokens/src/core/components/SelectableBox.json +4 -3
  173. package/tokens/src/core/components/Sheet.json +3 -2
  174. package/tokens/src/core/components/Spinner.json +9 -7
  175. package/tokens/src/core/components/Stack.json +2 -1
  176. package/tokens/src/core/components/Stepper.json +12 -14
  177. package/tokens/src/core/components/Sticky.json +2 -1
  178. package/tokens/src/core/components/Tab.json +8 -7
  179. package/tokens/src/core/components/Tabs.json +5 -5
  180. package/tokens/src/core/components/Toast.json +11 -8
  181. package/tokens/src/core/components/Tooltip.json +13 -11
  182. package/tokens/src/core/components/general/caret.json +5 -3
  183. package/tokens/src/core/components/general/headings.json +5 -4
  184. package/tokens/src/core/components/general/hr.json +3 -2
  185. package/tokens/src/core/components/general/input.json +19 -19
  186. package/tokens/src/core/components/general/link.json +13 -12
  187. package/tokens/src/core/components/general/list.json +9 -6
  188. package/tokens/src/core/components/general/text.json +6 -12
  189. package/tokens/src/core/global/breakpoints.json +25 -6
  190. package/tokens/src/core/global/elevation.json +55 -13
  191. package/tokens/src/core/global/other.json +5 -1
  192. package/tokens/src/core/global/spacing.json +70 -17
  193. package/tokens/src/core/global/transition.json +41 -4
  194. package/tokens/src/core/global/typography.json +248 -53
  195. package/tokens/src/core/utilities/color.json +35 -4
  196. package/tokens/src/themes/light/alias/color.json +276 -75
  197. package/tokens/src/themes/light/components/Alert.json +15 -26
  198. package/tokens/src/themes/light/components/Annotation.json +27 -13
  199. package/tokens/src/themes/light/components/Avatar.json +2 -1
  200. package/tokens/src/themes/light/components/Badge.json +57 -122
  201. package/tokens/src/themes/light/components/Breadcrumb.json +6 -5
  202. package/tokens/src/themes/light/components/Bubble.json +9 -8
  203. package/tokens/src/themes/light/components/Button/brand.json +171 -119
  204. package/tokens/src/themes/light/components/Button/core.json +8 -9
  205. package/tokens/src/themes/light/components/Button/danger.json +171 -112
  206. package/tokens/src/themes/light/components/Button/dark.json +188 -106
  207. package/tokens/src/themes/light/components/Button/info.json +186 -112
  208. package/tokens/src/themes/light/components/Button/light.json +186 -110
  209. package/tokens/src/themes/light/components/Button/primary.json +178 -116
  210. package/tokens/src/themes/light/components/Button/secondary.json +166 -132
  211. package/tokens/src/themes/light/components/Button/success.json +176 -117
  212. package/tokens/src/themes/light/components/Button/tertiary.json +34 -60
  213. package/tokens/src/themes/light/components/Button/warning.json +164 -128
  214. package/tokens/src/themes/light/components/Card.json +10 -21
  215. package/tokens/src/themes/light/components/Carousel.json +12 -11
  216. package/tokens/src/themes/light/components/Chip.json +14 -26
  217. package/tokens/src/themes/light/components/CloseButton.json +12 -2
  218. package/tokens/src/themes/light/components/Code.json +7 -9
  219. package/tokens/src/themes/light/components/DataTable.json +7 -11
  220. package/tokens/src/themes/light/components/Dropdown.json +17 -20
  221. package/tokens/src/themes/light/components/Dropzone.json +49 -11
  222. package/tokens/src/themes/light/components/Form/color.json +101 -155
  223. package/tokens/src/themes/light/components/Form/elevation.json +38 -42
  224. package/tokens/src/themes/light/components/Form/other.json +44 -41
  225. package/tokens/src/themes/light/components/IconButton.json +408 -256
  226. package/tokens/src/themes/light/components/Image.json +7 -4
  227. package/tokens/src/themes/light/components/Menu.json +12 -10
  228. package/tokens/src/themes/light/components/Modal.json +22 -12
  229. package/tokens/src/themes/light/components/Nav.json +82 -94
  230. package/tokens/src/themes/light/components/Navbar.json +32 -76
  231. package/tokens/src/themes/light/components/OverflowScroll.json +3 -1
  232. package/tokens/src/themes/light/components/PageBanner.json +11 -10
  233. package/tokens/src/themes/light/components/Pagination.json +19 -23
  234. package/tokens/src/themes/light/components/Popover.json +22 -27
  235. package/tokens/src/themes/light/components/ProductTour.json +9 -20
  236. package/tokens/src/themes/light/components/ProgressBar.json +12 -10
  237. package/tokens/src/themes/light/components/Scrollable.json +3 -3
  238. package/tokens/src/themes/light/components/SearchField.json +9 -9
  239. package/tokens/src/themes/light/components/Sheet.json +6 -7
  240. package/tokens/src/themes/light/components/Stepper.json +12 -17
  241. package/tokens/src/themes/light/components/Sticky.json +31 -6
  242. package/tokens/src/themes/light/components/Tab.json +47 -24
  243. package/tokens/src/themes/light/components/Toast.json +26 -14
  244. package/tokens/src/themes/light/components/Tooltip.json +25 -10
  245. package/tokens/src/themes/light/components/general/body.json +3 -2
  246. package/tokens/src/themes/light/components/general/headings.json +2 -1
  247. package/tokens/src/themes/light/components/general/hr.json +3 -6
  248. package/tokens/src/themes/light/components/general/input.json +11 -4
  249. package/tokens/src/themes/light/components/general/link.json +34 -43
  250. package/tokens/src/themes/light/components/general/list.json +15 -19
  251. package/tokens/src/themes/light/components/general/text.json +5 -6
  252. package/tokens/src/themes/light/global/color.json +1592 -867
  253. package/tokens/src/themes/light/global/elevation.json +481 -93
  254. package/tokens/style-dictionary.js +342 -144
  255. package/tokens/utils.js +176 -6
  256. package/src/Container/index.jsx +0 -49
  257. package/tokens/src/core/global/display.json +0 -22
  258. /package/src/Truncate/{Truncate.test.js → utils.test.js} +0 -0
package/tokens/utils.js CHANGED
@@ -2,6 +2,142 @@ const fs = require('fs');
2
2
  const readline = require('readline');
3
3
  const path = require('path');
4
4
 
5
+ const visitedTokens = {};
6
+
7
+ const commonCssFiles = ['variables.css', 'abstraction-variables.css'];
8
+
9
+ /**
10
+ * Finds a token by its path in the token tree.
11
+ * @param {string} path - The path to the token in the token tree.
12
+ * @returns {DesignToken} - The token object found at the specified path.
13
+ */
14
+ function findTokenByPath(tokenPath, allTokens) {
15
+ const keys = tokenPath.split('.');
16
+ return keys.reduce((acc, key) => acc && acc[key], allTokens);
17
+ }
18
+
19
+ /**
20
+ * @typedef {object} ExtensionProperty
21
+ * @property {string} name - The name of the extension property.
22
+ * @property {(token: DesignToken) => boolean} filter - The filter function to determine
23
+ * if the token should be annotated.
24
+ * @property {(token: DesignToken) => boolean} referenceTokenFilter - The filter function to determine if
25
+ * the referenced token should be annotated.
26
+ */
27
+
28
+ /**
29
+ * @typedef {object} AnnotateReferencedTokenExtensionsArgs
30
+ * @property {DesignToken} token - The token object to annotate.
31
+ * @property {ExtensionProperty[]} extensionProperties - The properties to annotate the referenced token with.
32
+ * @property {object} sdUtils - The Style Dictionary utility functions.
33
+ */
34
+
35
+ /**
36
+ * Annotates referenced token $extensions with the specified properties.
37
+ * @param {AnnotateReferencedTokenExtensionsArgs} args - The arguments object.
38
+ */
39
+ function annotateReferencedTokenExtensions({
40
+ token,
41
+ extensionProperties,
42
+ sdUtils,
43
+ dictionary,
44
+ }) {
45
+ const stack = [token]; // Stack to process tokens iteratively
46
+
47
+ while (stack.length > 0) {
48
+ const currentToken = stack.pop();
49
+
50
+ // Get all references for the current token
51
+ const references = sdUtils.getReferences(currentToken, dictionary);
52
+ extensionProperties.forEach(({ name: propertyName, filter: propertyFilter, referenceTokenFilter }) => {
53
+ if (!propertyFilter(token)) {
54
+ // Skip processing if the token does not match the filter for the property
55
+ return;
56
+ }
57
+
58
+ // Iterate over each reference and mark the referenced token
59
+ references.forEach((foundReference) => {
60
+ const foundReferenceTokenPath = foundReference.ref.join('.');
61
+ if (visitedTokens[propertyName]?.has(foundReferenceTokenPath)) {
62
+ // Skip processing if the referenced token has already been marked
63
+ return;
64
+ }
65
+
66
+ if (!referenceTokenFilter?.(foundReference)) {
67
+ // Filter the reference tokens to only include the ones that match the filter
68
+ return;
69
+ }
70
+
71
+ // Directly access the referenced token from the returned reference object
72
+ const referencedToken = findTokenByPath(foundReferenceTokenPath, dictionary);
73
+ if (!referencedToken) {
74
+ return;
75
+ }
76
+
77
+ // Mark the referenced token
78
+ referencedToken.$extensions = {
79
+ ...referencedToken.$extensions,
80
+ 'org.openedx.paragon': {
81
+ ...referencedToken.$extensions?.['org.openedx.paragon'],
82
+ [propertyName]: true,
83
+ },
84
+ };
85
+
86
+ visitedTokens[propertyName].add(foundReferenceTokenPath);
87
+
88
+ if (sdUtils.usesReferences(referencedToken)) {
89
+ // Push the referenced token to the stack to process its references
90
+ stack.push(referencedToken);
91
+ }
92
+ });
93
+ });
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Processes and updates tokens in place by annotating referenced tokens with extension properties.
99
+ * @typedef {object} ProcessAndUpdateTokensArgs
100
+ * @property {object} tokens - The tokens object to process.
101
+ * @property {ExtensionProperty[]} extensionProperties - The properties to annotate the referenced token with.
102
+ * @property {object} sdUtils - The Style Dictionary utility functions.
103
+ */
104
+ function processAndUpdateTokens(tokens, extensionProperties, sdUtils, dictionary) {
105
+ Object.keys(tokens).forEach(async (key) => {
106
+ const token = tokens[key];
107
+ if (typeof token !== 'object') {
108
+ // Skip non-object tokens
109
+ return;
110
+ }
111
+
112
+ // If this is a group (nested tokens), recurse into it
113
+ if (!Object.prototype.hasOwnProperty.call(token, '$value')) {
114
+ processAndUpdateTokens(token, extensionProperties, sdUtils, dictionary);
115
+ } else if (sdUtils.usesReferences(token)) {
116
+ // Initialize the visited tokens for each extension property
117
+ extensionProperties.forEach((property) => {
118
+ visitedTokens[property.name] = new Set();
119
+ });
120
+
121
+ // If the token uses reference(s), update the referenced token(s) $extensions metadata.
122
+ annotateReferencedTokenExtensions({
123
+ token,
124
+ extensionProperties,
125
+ sdUtils,
126
+ dictionary,
127
+ });
128
+ }
129
+ });
130
+ }
131
+
132
+ /**
133
+ * Recursively retrieves files with a specific extension from a given directory.
134
+ *
135
+ * @param {string} location - The path to the directory or file to start the search.
136
+ * @param {string} extension - The file extension to search for (e.g., '.js', '.css').
137
+ * @param {string[]} [files=[]] - An array to accumulate the file paths that match the extension.
138
+ * @param {string[]} [excludeDirectories=[]] - An array of directory names to exclude from the search.
139
+ * @returns {string[]} - An array of file paths that have the specified extension.
140
+ */
5
141
  function getFilesWithExtension(location, extension, files = [], excludeDirectories = []) {
6
142
  const content = fs.statSync(location);
7
143
  if (content.isDirectory()) {
@@ -17,6 +153,14 @@ function getFilesWithExtension(location, extension, files = [], excludeDirectori
17
153
  return files;
18
154
  }
19
155
 
156
+ /**
157
+ * Generates a mapping of SCSS variables to corresponding CSS variables.
158
+ *
159
+ * @param {string} prefix - The prefix used to build the CSS variable names (e.g., '--my-prefix').
160
+ * @param {Object} tokensObject - The object representing the design tokens, which may be nested.
161
+ * @param {Object} result - The object where the mapping of SCSS to CSS variables will be stored.
162
+ * @returns {Object} - The `result` object containing the SCSS-to-CSS variable mappings.
163
+ */
20
164
  function getSCSStoCSSMap(prefix, tokensObject, result) {
21
165
  Object.entries(tokensObject).forEach(([node, value]) => {
22
166
  if (value?.constructor.name === 'Object') {
@@ -30,6 +174,16 @@ function getSCSStoCSSMap(prefix, tokensObject, result) {
30
174
  return result;
31
175
  }
32
176
 
177
+ /**
178
+ * Replaces variable usage in a file based on a provided mapping and direction.
179
+ *
180
+ * @param {string} filePath - The path to the file where variables should be replaced.
181
+ * @param {Object} variablesMap - A map of variables to their replacement values.
182
+ * @param {string} [direction='scss-to-css'] - The direction of the replacement, either `scss-to-css` or `css-to-scss`.
183
+ * - `scss-to-css`: Replaces SCSS variables (e.g., `$some-variable`) with CSS variables.
184
+ * - `css-to-scss`: Replaces CSS variables (e.g., `var(--some-variable)`) with SCSS variables.
185
+ * @returns {Promise<void>} - A promise that resolves when the file has been successfully processed and written.
186
+ */
33
187
  async function replaceVariablesUsage(filePath, variablesMap, direction = 'scss-to-css') {
34
188
  let variableRegex;
35
189
  let result = '';
@@ -162,8 +316,17 @@ async function transformInPath(location, variablesMap, transformType = 'definiti
162
316
  }
163
317
  }
164
318
 
165
- function createIndexCssFile({ buildDir = path.resolve(__dirname, '../styles/css'), isTheme, themeVariant }) {
166
- const directoryPath = isTheme ? `${buildDir}/themes/${themeVariant}` : `${buildDir}/core`;
319
+ /**
320
+ * Creates an `index.css` file that imports all other CSS files in a directory.
321
+ *
322
+ * @param {Object} options - The options for creating the `index.css` file.
323
+ * @param {string} [options.buildDir=path.resolve(__dirname, '../styles/css')]
324
+ * - The base directory where the CSS files are located.
325
+ * @param {boolean} options.isThemeVariant - A flag indicating whether the directory is for theme files.
326
+ * @param {string} options.themeVariant - The specific theme variant to be used (e.g., 'dark', 'light').
327
+ */
328
+ function createIndexCssFile({ buildDir = path.resolve(__dirname, '../styles/css'), isThemeVariant, themeVariant }) {
329
+ const directoryPath = isThemeVariant ? `${buildDir}/themes/${themeVariant}` : `${buildDir}/core`;
167
330
 
168
331
  fs.readdir(directoryPath, (errDir, files) => {
169
332
  if (errDir) {
@@ -173,11 +336,17 @@ function createIndexCssFile({ buildDir = path.resolve(__dirname, '../styles/css'
173
336
  }
174
337
 
175
338
  const outputCssFiles = files.filter(file => file !== 'index.css');
176
- // When creating themes, there are typically two files: one for utility classes and one for variables.
177
- // It's organized them to allow variables be reading first.
178
- if (isTheme) { outputCssFiles.reverse(); }
179
339
 
180
- const exportStatements = outputCssFiles.map((file) => `@import "${file}";`);
340
+ // For theme variants, files are ordered with variables first, abstraction variables second,
341
+ // and utility classes last. This ensures that variables are available before other files use them.
342
+ // For the core styles, custom media breakpoints replace utility classes in the order.
343
+ const sortOrder = isThemeVariant
344
+ ? [...commonCssFiles, 'utility-classes.css']
345
+ : [...commonCssFiles, 'custom-media-breakpoints.css'];
346
+
347
+ const sortedCssFiles = outputCssFiles.sort((a, b) => sortOrder.indexOf(a) - sortOrder.indexOf(b));
348
+
349
+ const exportStatements = sortedCssFiles.map((file) => `@import "${file}";`);
181
350
 
182
351
  const indexContent = `${exportStatements.join('\n')}\n`;
183
352
 
@@ -207,4 +376,5 @@ module.exports = {
207
376
  getSCSStoCSSMap,
208
377
  transformInPath,
209
378
  composeBreakpointName,
379
+ processAndUpdateTokens,
210
380
  };
@@ -1,49 +0,0 @@
1
- import React, { forwardRef } from 'react';
2
- import classNames from 'classnames';
3
- import RBContainer from 'react-bootstrap/Container';
4
- import PropTypes from 'prop-types';
5
-
6
- const SIZE_CLASS_NAMES = {
7
- xs: 'container-mw-xs',
8
- sm: 'container-mw-sm',
9
- md: 'container-mw-md',
10
- lg: 'container-mw-lg',
11
- xl: 'container-mw-xl',
12
- };
13
-
14
- const Container = forwardRef(({ size, children, ...props }, ref) => (
15
- <RBContainer
16
- {...props}
17
- ref={ref}
18
- className={classNames(
19
- props.className,
20
- SIZE_CLASS_NAMES[size],
21
- )}
22
- >
23
- {children}
24
- </RBContainer>
25
- ));
26
-
27
- Container.propTypes = {
28
- ...RBContainer.propTypes,
29
- /** Override the base element */
30
- as: PropTypes.elementType,
31
- /** Specifies the contents of the container */
32
- children: PropTypes.node,
33
- /** Fill all available space at any breakpoint */
34
- fluid: PropTypes.bool,
35
- /** Set the maximum width for the container */
36
- size: PropTypes.oneOf(Object.keys(SIZE_CLASS_NAMES)),
37
- /** Overrides underlying component base CSS class name */
38
- bsPrefix: PropTypes.string,
39
- };
40
-
41
- Container.defaultProps = {
42
- as: 'div',
43
- children: undefined,
44
- fluid: true,
45
- size: undefined,
46
- bsPrefix: 'container',
47
- };
48
-
49
- export default Container;
@@ -1,22 +0,0 @@
1
- {
2
- "typography": {
3
- "display": {
4
- "line-height": {
5
- "base": { "value": "1", "type": "dimension", "source": "$display-line-height", "description": "Standard line height." },
6
- "mobile": { "value": "3.5rem", "type": "dimension", "source": "$display-mobile-line-height", "description": "Mobile line height." }
7
- },
8
- "1": { "value": "3.75rem", "type": "dimension", "source": "$display1-size", "description": "Font size for heading of level 1." },
9
- "2": { "value": "4.875rem", "type": "dimension", "source": "$display2-size", "description": "Font size for heading of level 2." },
10
- "3": { "value": "5.625rem", "type": "dimension", "source": "$display3-size", "description": "Font size for heading of level 3." },
11
- "4": { "value": "7.5rem", "type": "dimension", "source": "$display4-size", "description": "Font size for heading of level 4." },
12
- "mobile": { "value": "3.25rem", "type": "dimension", "source": "$display-mobile-size", "description": "Font size for mobile devices." },
13
- "weight": {
14
- "1": { "value": "{typography.font.weight.bold}", "type": "fontWeight", "source": "$display1-weight", "description": "Font weight of level 1." },
15
- "2": { "value": "{typography.font.weight.bold}", "type": "fontWeight", "source": "$display2-weight", "description": "Font weight of level 2." },
16
- "3": { "value": "{typography.font.weight.bold}", "type": "fontWeight", "source": "$display3-weight", "description": "Font weight of level 3." },
17
- "4": { "value": "{typography.font.weight.bold}", "type": "fontWeight", "source": "$display4-weight", "description": "Font weight of level 4." }
18
- }
19
- },
20
- "print-page-size": { "value": "a3", "type": "dimension", "source": "$print-page-size" }
21
- }
22
- }