@chipmobilesdk/rn-theme 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/CHANGELOG.md +124 -1
  2. package/README.md +17 -12
  3. package/lib/commonjs/color/categorical.js +35 -0
  4. package/lib/commonjs/color/categorical.js.map +1 -0
  5. package/lib/commonjs/color/contrast.js +199 -0
  6. package/lib/commonjs/color/contrast.js.map +1 -0
  7. package/lib/commonjs/color/parse.js +110 -0
  8. package/lib/commonjs/color/parse.js.map +1 -0
  9. package/lib/commonjs/color/roles.js +235 -0
  10. package/lib/commonjs/color/roles.js.map +1 -0
  11. package/lib/commonjs/index.js +94 -0
  12. package/lib/commonjs/index.js.map +1 -0
  13. package/lib/commonjs/integration/navigationTheme.js +43 -0
  14. package/lib/commonjs/integration/navigationTheme.js.map +1 -0
  15. package/lib/commonjs/package.json +1 -0
  16. package/lib/commonjs/presets/byTone.js +28 -0
  17. package/lib/commonjs/presets/byTone.js.map +1 -0
  18. package/lib/commonjs/presets/layout.js +67 -0
  19. package/lib/commonjs/presets/layout.js.map +1 -0
  20. package/lib/commonjs/presets/themePresets.js +115 -0
  21. package/lib/commonjs/presets/themePresets.js.map +1 -0
  22. package/lib/commonjs/theme/buildThemes.js +211 -0
  23. package/lib/commonjs/theme/buildThemes.js.map +1 -0
  24. package/lib/commonjs/theme/errors.js +49 -0
  25. package/lib/commonjs/theme/errors.js.map +1 -0
  26. package/lib/commonjs/theme/overrides.js +125 -0
  27. package/lib/commonjs/theme/overrides.js.map +1 -0
  28. package/lib/commonjs/theme/validateThemeConfig.js +157 -0
  29. package/lib/commonjs/theme/validateThemeConfig.js.map +1 -0
  30. package/lib/commonjs/tokens/defaults.js +132 -0
  31. package/lib/commonjs/tokens/defaults.js.map +1 -0
  32. package/lib/commonjs/tokens/typography.js +136 -0
  33. package/lib/commonjs/tokens/typography.js.map +1 -0
  34. package/lib/commonjs/types/brand.js +2 -0
  35. package/lib/commonjs/types/brand.js.map +1 -0
  36. package/lib/commonjs/types/colors.js +2 -0
  37. package/lib/commonjs/types/colors.js.map +1 -0
  38. package/lib/commonjs/types/index.js +2 -0
  39. package/lib/commonjs/types/index.js.map +1 -0
  40. package/lib/commonjs/types/theme.js +6 -0
  41. package/lib/commonjs/types/theme.js.map +1 -0
  42. package/lib/commonjs/types/tokens.js +2 -0
  43. package/lib/commonjs/types/tokens.js.map +1 -0
  44. package/lib/commonjs/types/typography.js +2 -0
  45. package/lib/commonjs/types/typography.js.map +1 -0
  46. package/lib/commonjs/unistyles/createUnistylesConfig.js +113 -0
  47. package/lib/commonjs/unistyles/createUnistylesConfig.js.map +1 -0
  48. package/lib/commonjs/unistyles/themeMode.js +39 -0
  49. package/lib/commonjs/unistyles/themeMode.js.map +1 -0
  50. package/lib/commonjs/vendor/mcu/LICENSE +191 -0
  51. package/lib/commonjs/vendor/mcu/hct/cam16.js +362 -0
  52. package/lib/commonjs/vendor/mcu/hct/cam16.js.map +1 -0
  53. package/lib/commonjs/vendor/mcu/hct/hct.js +183 -0
  54. package/lib/commonjs/vendor/mcu/hct/hct.js.map +1 -0
  55. package/lib/commonjs/vendor/mcu/hct/hct_solver.js +401 -0
  56. package/lib/commonjs/vendor/mcu/hct/hct_solver.js.map +1 -0
  57. package/lib/commonjs/vendor/mcu/hct/viewing_conditions.js +116 -0
  58. package/lib/commonjs/vendor/mcu/hct/viewing_conditions.js.map +1 -0
  59. package/lib/commonjs/vendor/mcu/index.js +27 -0
  60. package/lib/commonjs/vendor/mcu/index.js.map +1 -0
  61. package/lib/commonjs/vendor/mcu/palettes/tonal_palette.js +177 -0
  62. package/lib/commonjs/vendor/mcu/palettes/tonal_palette.js.map +1 -0
  63. package/lib/commonjs/vendor/mcu/utils/color_utils.js +298 -0
  64. package/lib/commonjs/vendor/mcu/utils/color_utils.js.map +1 -0
  65. package/lib/commonjs/vendor/mcu/utils/math_utils.js +158 -0
  66. package/lib/commonjs/vendor/mcu/utils/math_utils.js.map +1 -0
  67. package/lib/module/color/categorical.js +31 -0
  68. package/lib/module/color/categorical.js.map +1 -0
  69. package/lib/module/color/contrast.js +194 -0
  70. package/lib/module/color/contrast.js.map +1 -0
  71. package/lib/module/color/parse.js +101 -0
  72. package/lib/module/color/parse.js.map +1 -0
  73. package/lib/module/color/roles.js +229 -0
  74. package/lib/module/color/roles.js.map +1 -0
  75. package/lib/module/index.js +23 -0
  76. package/lib/module/index.js.map +1 -0
  77. package/lib/module/integration/navigationTheme.js +39 -0
  78. package/lib/module/integration/navigationTheme.js.map +1 -0
  79. package/lib/module/package.json +1 -0
  80. package/lib/module/presets/byTone.js +24 -0
  81. package/lib/module/presets/byTone.js.map +1 -0
  82. package/lib/module/presets/layout.js +63 -0
  83. package/lib/module/presets/layout.js.map +1 -0
  84. package/lib/module/presets/themePresets.js +110 -0
  85. package/lib/module/presets/themePresets.js.map +1 -0
  86. package/lib/module/theme/buildThemes.js +208 -0
  87. package/lib/module/theme/buildThemes.js.map +1 -0
  88. package/lib/module/theme/errors.js +43 -0
  89. package/lib/module/theme/errors.js.map +1 -0
  90. package/lib/module/theme/overrides.js +119 -0
  91. package/lib/module/theme/overrides.js.map +1 -0
  92. package/lib/module/theme/validateThemeConfig.js +152 -0
  93. package/lib/module/theme/validateThemeConfig.js.map +1 -0
  94. package/lib/module/tokens/defaults.js +120 -0
  95. package/lib/module/tokens/defaults.js.map +1 -0
  96. package/lib/module/tokens/typography.js +129 -0
  97. package/lib/module/tokens/typography.js.map +1 -0
  98. package/lib/module/types/brand.js +2 -0
  99. package/lib/module/types/brand.js.map +1 -0
  100. package/lib/module/types/colors.js +2 -0
  101. package/lib/module/types/colors.js.map +1 -0
  102. package/lib/module/types/index.js +2 -0
  103. package/lib/module/types/index.js.map +1 -0
  104. package/lib/module/types/theme.js +4 -0
  105. package/lib/module/types/theme.js.map +1 -0
  106. package/lib/module/types/tokens.js +2 -0
  107. package/lib/module/types/tokens.js.map +1 -0
  108. package/lib/module/types/typography.js +2 -0
  109. package/lib/module/types/typography.js.map +1 -0
  110. package/lib/module/unistyles/createUnistylesConfig.js +109 -0
  111. package/lib/module/unistyles/createUnistylesConfig.js.map +1 -0
  112. package/lib/module/unistyles/themeMode.js +36 -0
  113. package/lib/module/unistyles/themeMode.js.map +1 -0
  114. package/lib/module/vendor/mcu/LICENSE +191 -0
  115. package/lib/module/vendor/mcu/hct/cam16.js +356 -0
  116. package/lib/module/vendor/mcu/hct/cam16.js.map +1 -0
  117. package/lib/module/vendor/mcu/hct/hct.js +178 -0
  118. package/lib/module/vendor/mcu/hct/hct.js.map +1 -0
  119. package/lib/module/vendor/mcu/hct/hct_solver.js +396 -0
  120. package/lib/module/vendor/mcu/hct/hct_solver.js.map +1 -0
  121. package/lib/module/vendor/mcu/hct/viewing_conditions.js +110 -0
  122. package/lib/module/vendor/mcu/hct/viewing_conditions.js.map +1 -0
  123. package/lib/module/vendor/mcu/index.js +8 -0
  124. package/lib/module/vendor/mcu/index.js.map +1 -0
  125. package/lib/module/vendor/mcu/palettes/tonal_palette.js +172 -0
  126. package/lib/module/vendor/mcu/palettes/tonal_palette.js.map +1 -0
  127. package/lib/module/vendor/mcu/utils/color_utils.js +277 -0
  128. package/lib/module/vendor/mcu/utils/color_utils.js.map +1 -0
  129. package/lib/module/vendor/mcu/utils/math_utils.js +146 -0
  130. package/lib/module/vendor/mcu/utils/math_utils.js.map +1 -0
  131. package/lib/typescript/commonjs/color/categorical.d.ts +7 -0
  132. package/lib/typescript/commonjs/color/categorical.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/color/contrast.d.ts +26 -0
  134. package/lib/typescript/commonjs/color/contrast.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/color/parse.d.ts +25 -0
  136. package/lib/typescript/commonjs/color/parse.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/color/roles.d.ts +26 -0
  138. package/lib/typescript/commonjs/color/roles.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/index.d.ts +18 -0
  140. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/integration/navigationTheme.d.ts +30 -0
  142. package/lib/typescript/commonjs/integration/navigationTheme.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/package.json +1 -0
  144. package/lib/typescript/commonjs/presets/byTone.d.ts +19 -0
  145. package/lib/typescript/commonjs/presets/byTone.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/presets/layout.d.ts +63 -0
  147. package/lib/typescript/commonjs/presets/layout.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/presets/themePresets.d.ts +11 -0
  149. package/lib/typescript/commonjs/presets/themePresets.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/theme/buildThemes.d.ts +18 -0
  151. package/lib/typescript/commonjs/theme/buildThemes.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/theme/errors.d.ts +23 -0
  153. package/lib/typescript/commonjs/theme/errors.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/theme/overrides.d.ts +11 -0
  155. package/lib/typescript/commonjs/theme/overrides.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/theme/validateThemeConfig.d.ts +6 -0
  157. package/lib/typescript/commonjs/theme/validateThemeConfig.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/tokens/defaults.d.ts +23 -0
  159. package/lib/typescript/commonjs/tokens/defaults.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/tokens/typography.d.ts +14 -0
  161. package/lib/typescript/commonjs/tokens/typography.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/types/brand.d.ts +21 -0
  163. package/lib/typescript/commonjs/types/brand.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/types/colors.d.ts +76 -0
  165. package/lib/typescript/commonjs/types/colors.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/types/index.d.ts +6 -0
  167. package/lib/typescript/commonjs/types/index.d.ts.map +1 -0
  168. package/lib/typescript/commonjs/types/theme.d.ts +140 -0
  169. package/lib/typescript/commonjs/types/theme.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/types/tokens.d.ts +79 -0
  171. package/lib/typescript/commonjs/types/tokens.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/types/typography.d.ts +53 -0
  173. package/lib/typescript/commonjs/types/typography.d.ts.map +1 -0
  174. package/lib/typescript/commonjs/unistyles/createUnistylesConfig.d.ts +52 -0
  175. package/lib/typescript/commonjs/unistyles/createUnistylesConfig.d.ts.map +1 -0
  176. package/lib/typescript/commonjs/unistyles/themeMode.d.ts +13 -0
  177. package/lib/typescript/commonjs/unistyles/themeMode.d.ts.map +1 -0
  178. package/lib/typescript/commonjs/vendor/mcu/hct/cam16.d.ts +132 -0
  179. package/lib/typescript/commonjs/vendor/mcu/hct/cam16.d.ts.map +1 -0
  180. package/lib/typescript/commonjs/vendor/mcu/hct/hct.d.ts +93 -0
  181. package/lib/typescript/commonjs/vendor/mcu/hct/hct.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/vendor/mcu/hct/hct_solver.d.ts +147 -0
  183. package/lib/typescript/commonjs/vendor/mcu/hct/hct_solver.d.ts.map +1 -0
  184. package/lib/typescript/commonjs/vendor/mcu/hct/viewing_conditions.d.ts +75 -0
  185. package/lib/typescript/commonjs/vendor/mcu/hct/viewing_conditions.d.ts.map +1 -0
  186. package/lib/typescript/commonjs/vendor/mcu/index.d.ts +4 -0
  187. package/lib/typescript/commonjs/vendor/mcu/index.d.ts.map +1 -0
  188. package/lib/typescript/commonjs/vendor/mcu/palettes/tonal_palette.d.ts +56 -0
  189. package/lib/typescript/commonjs/vendor/mcu/palettes/tonal_palette.d.ts.map +1 -0
  190. package/lib/typescript/commonjs/vendor/mcu/utils/color_utils.d.ts +129 -0
  191. package/lib/typescript/commonjs/vendor/mcu/utils/color_utils.d.ts.map +1 -0
  192. package/lib/typescript/commonjs/vendor/mcu/utils/math_utils.d.ts +83 -0
  193. package/lib/typescript/commonjs/vendor/mcu/utils/math_utils.d.ts.map +1 -0
  194. package/lib/typescript/module/color/categorical.d.ts +7 -0
  195. package/lib/typescript/module/color/categorical.d.ts.map +1 -0
  196. package/lib/typescript/module/color/contrast.d.ts +26 -0
  197. package/lib/typescript/module/color/contrast.d.ts.map +1 -0
  198. package/lib/typescript/module/color/parse.d.ts +25 -0
  199. package/lib/typescript/module/color/parse.d.ts.map +1 -0
  200. package/lib/typescript/module/color/roles.d.ts +26 -0
  201. package/lib/typescript/module/color/roles.d.ts.map +1 -0
  202. package/lib/typescript/module/index.d.ts +18 -0
  203. package/lib/typescript/module/index.d.ts.map +1 -0
  204. package/lib/typescript/module/integration/navigationTheme.d.ts +30 -0
  205. package/lib/typescript/module/integration/navigationTheme.d.ts.map +1 -0
  206. package/lib/typescript/module/package.json +1 -0
  207. package/lib/typescript/module/presets/byTone.d.ts +19 -0
  208. package/lib/typescript/module/presets/byTone.d.ts.map +1 -0
  209. package/lib/typescript/module/presets/layout.d.ts +63 -0
  210. package/lib/typescript/module/presets/layout.d.ts.map +1 -0
  211. package/lib/typescript/module/presets/themePresets.d.ts +11 -0
  212. package/lib/typescript/module/presets/themePresets.d.ts.map +1 -0
  213. package/lib/typescript/module/theme/buildThemes.d.ts +18 -0
  214. package/lib/typescript/module/theme/buildThemes.d.ts.map +1 -0
  215. package/lib/typescript/module/theme/errors.d.ts +23 -0
  216. package/lib/typescript/module/theme/errors.d.ts.map +1 -0
  217. package/lib/typescript/module/theme/overrides.d.ts +11 -0
  218. package/lib/typescript/module/theme/overrides.d.ts.map +1 -0
  219. package/lib/typescript/module/theme/validateThemeConfig.d.ts +6 -0
  220. package/lib/typescript/module/theme/validateThemeConfig.d.ts.map +1 -0
  221. package/lib/typescript/module/tokens/defaults.d.ts +23 -0
  222. package/lib/typescript/module/tokens/defaults.d.ts.map +1 -0
  223. package/lib/typescript/module/tokens/typography.d.ts +14 -0
  224. package/lib/typescript/module/tokens/typography.d.ts.map +1 -0
  225. package/lib/typescript/module/types/brand.d.ts +21 -0
  226. package/lib/typescript/module/types/brand.d.ts.map +1 -0
  227. package/lib/typescript/module/types/colors.d.ts +76 -0
  228. package/lib/typescript/module/types/colors.d.ts.map +1 -0
  229. package/lib/typescript/module/types/index.d.ts +6 -0
  230. package/lib/typescript/module/types/index.d.ts.map +1 -0
  231. package/lib/typescript/module/types/theme.d.ts +140 -0
  232. package/lib/typescript/module/types/theme.d.ts.map +1 -0
  233. package/lib/typescript/module/types/tokens.d.ts +79 -0
  234. package/lib/typescript/module/types/tokens.d.ts.map +1 -0
  235. package/lib/typescript/module/types/typography.d.ts +53 -0
  236. package/lib/typescript/module/types/typography.d.ts.map +1 -0
  237. package/lib/typescript/module/unistyles/createUnistylesConfig.d.ts +52 -0
  238. package/lib/typescript/module/unistyles/createUnistylesConfig.d.ts.map +1 -0
  239. package/lib/typescript/module/unistyles/themeMode.d.ts +13 -0
  240. package/lib/typescript/module/unistyles/themeMode.d.ts.map +1 -0
  241. package/lib/typescript/module/vendor/mcu/hct/cam16.d.ts +132 -0
  242. package/lib/typescript/module/vendor/mcu/hct/cam16.d.ts.map +1 -0
  243. package/lib/typescript/module/vendor/mcu/hct/hct.d.ts +93 -0
  244. package/lib/typescript/module/vendor/mcu/hct/hct.d.ts.map +1 -0
  245. package/lib/typescript/module/vendor/mcu/hct/hct_solver.d.ts +147 -0
  246. package/lib/typescript/module/vendor/mcu/hct/hct_solver.d.ts.map +1 -0
  247. package/lib/typescript/module/vendor/mcu/hct/viewing_conditions.d.ts +75 -0
  248. package/lib/typescript/module/vendor/mcu/hct/viewing_conditions.d.ts.map +1 -0
  249. package/lib/typescript/module/vendor/mcu/index.d.ts +4 -0
  250. package/lib/typescript/module/vendor/mcu/index.d.ts.map +1 -0
  251. package/lib/typescript/module/vendor/mcu/palettes/tonal_palette.d.ts +56 -0
  252. package/lib/typescript/module/vendor/mcu/palettes/tonal_palette.d.ts.map +1 -0
  253. package/lib/typescript/module/vendor/mcu/utils/color_utils.d.ts +129 -0
  254. package/lib/typescript/module/vendor/mcu/utils/color_utils.d.ts.map +1 -0
  255. package/lib/typescript/module/vendor/mcu/utils/math_utils.d.ts +83 -0
  256. package/lib/typescript/module/vendor/mcu/utils/math_utils.d.ts.map +1 -0
  257. package/package.json +40 -16
  258. package/src/color/roles.ts +3 -1
  259. package/src/theme/buildThemes.ts +84 -26
  260. package/src/theme/validateThemeConfig.ts +28 -2
  261. package/src/tokens/defaults.ts +14 -8
  262. package/src/unistyles/createUnistylesConfig.ts +4 -1
  263. package/src/vendor/mcu/index.ts +1 -1
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildThemes = buildThemes;
7
+ var _rnCore = require("@chipmobilesdk/rn-core");
8
+ var _categorical = require("../color/categorical.js");
9
+ var _contrast = require("../color/contrast.js");
10
+ var _roles = require("../color/roles.js");
11
+ var _themePresets = require("../presets/themePresets.js");
12
+ var _defaults = require("../tokens/defaults.js");
13
+ var _typography = require("../tokens/typography.js");
14
+ var _errors = require("./errors.js");
15
+ var _overrides = require("./overrides.js");
16
+ var _validateThemeConfig = require("./validateThemeConfig.js");
17
+ /** Read only when no `hairlineWidth` is given, so building themes needs no React Native. */
18
+ const reactNative = (0, _rnCore.lazyPeer)('react-native', () => {
19
+ // Inside `try`, so Metro bundles an app that leaves this optional peer out.
20
+ try {
21
+ return require('react-native');
22
+ } catch (cause) {
23
+ throw cause;
24
+ }
25
+ });
26
+ function deviceHairlineWidth() {
27
+ const result = reactNative.get();
28
+ return (result.ok ? result.module.StyleSheet?.hairlineWidth : undefined) ?? 1;
29
+ }
30
+
31
+ /** The standard tone names an app's own tone may not take over (THM-03). */
32
+ const STANDARD_TONES = new Set(['neutral', 'primary', 'info', 'success', 'warning', 'error']);
33
+ function cloneFonts(font) {
34
+ const copy = {};
35
+ for (const [weight, token] of Object.entries(font)) {
36
+ copy[weight] = {
37
+ ...token
38
+ };
39
+ }
40
+ return copy;
41
+ }
42
+
43
+ /**
44
+ * Every top-level group an override may name, and nothing else.
45
+ *
46
+ * An override naming a group that does not exist — `radii` for `radius`,
47
+ * `colors` for `color` — used to be dropped without a word, so the override
48
+ * simply had no effect (THM-01). The list is derived from what was generated
49
+ * rather than written out by hand, so a new token group cannot be forgotten
50
+ * (THM-06).
51
+ */
52
+ function assertKnownOverrideGroups(overrides, known, path) {
53
+ if (!(0, _overrides.isPlainObject)(overrides)) {
54
+ return;
55
+ }
56
+ const allowed = new Set(known);
57
+ for (const key of Object.keys(overrides)) {
58
+ if (overrides[key] === undefined || allowed.has(key)) {
59
+ continue;
60
+ }
61
+ throw new _errors.ThemeConfigError(`${path}.${key}`, 'does not exist on the theme. Add new tokens through `extend`.');
62
+ }
63
+ }
64
+ function buildOne(source, fonts, overrides, hairlineWidth) {
65
+ const {
66
+ name,
67
+ scheme,
68
+ config,
69
+ palettes
70
+ } = source;
71
+ const path = `overrides.${name}`;
72
+ const generatedColor = (0, _roles.buildColorRoles)(palettes, scheme);
73
+
74
+ // Colour is merged first, because what follows is derived from it: an
75
+ // override of `color.shadow` or `color.onSurface` used to leave `shadow` and
76
+ // `tone.neutral` built from the generated value, so a theme that pinned a
77
+ // colour disagreed with itself (THM-02).
78
+ const color = (0, _overrides.mergeOverrides)(generatedColor, (0, _overrides.pick)(overrides, ['color'])?.color, `${path}.color`);
79
+ const tokenGroups = {
80
+ color,
81
+ typography: (0, _typography.buildTypography)(config.typography, fonts.font, fonts.family),
82
+ font: cloneFonts(fonts.font),
83
+ fontWeight: (0, _typography.buildFontWeight)(),
84
+ spacing: (0, _defaults.buildSpacing)(),
85
+ radius: (0, _defaults.buildRadius)(),
86
+ borderWidth: (0, _defaults.buildBorderWidth)(hairlineWidth),
87
+ size: (0, _defaults.buildSize)(),
88
+ opacity: (0, _defaults.buildOpacity)(),
89
+ motion: (0, _defaults.buildMotion)(),
90
+ shadow: (0, _defaults.buildShadows)(color.shadow),
91
+ zIndex: (0, _defaults.buildZIndex)(),
92
+ maxFontScale: config.typography?.maxFontScale ?? _defaults.DEFAULT_MAX_FONT_SCALE,
93
+ categorical: (0, _categorical.buildCategorical)(config.brandColors.primary, scheme)
94
+ };
95
+ const tokenKeys = Object.keys(tokenGroups);
96
+ const tokens = (0, _overrides.mergeOverrides)(tokenGroups, (0, _overrides.pick)(overrides, tokenKeys), path);
97
+ const tone = (0, _overrides.mergeOverrides)(
98
+ // From the merged colour, so `tone.neutral` follows an override of
99
+ // `color.onSurface` as the text presets already did.
100
+ (0, _roles.buildTones)(palettes, tokens.color, scheme), (0, _overrides.pick)(overrides, ['tone'])?.tone, `${path}.tone`);
101
+ const presets = (0, _overrides.mergeOverrides)((0, _themePresets.buildPresets)(tokens), (0, _overrides.pick)(overrides, _themePresets.PRESET_KEYS), path);
102
+ const base = {
103
+ ...tokens,
104
+ tone,
105
+ ...presets
106
+ };
107
+ if (!config.extend) {
108
+ assertKnownOverrideGroups(overrides, [...tokenKeys, 'tone', ..._themePresets.PRESET_KEYS], path);
109
+ return base;
110
+ }
111
+ const extension = config.extend({
112
+ name,
113
+ scheme,
114
+ theme: base
115
+ });
116
+ for (const key of Object.keys(extension)) {
117
+ if (key in base) {
118
+ // `extend` returning `{ spacing: … }` replaced the whole spacing scale
119
+ // with whatever it held, unvalidated (THM-03).
120
+ throw new _errors.ThemeConfigError(`extend.${key}`, 'is already a theme group. Give the extension token a name of its own.');
121
+ }
122
+ }
123
+ assertKnownOverrideGroups(overrides, [...tokenKeys, 'tone', ..._themePresets.PRESET_KEYS, ...Object.keys(extension)], path);
124
+ const extensionOverrides = (0, _overrides.pick)(overrides, Object.keys(extension));
125
+ return {
126
+ ...base,
127
+ ...(0, _overrides.mergeOverrides)(extension, extensionOverrides, path)
128
+ };
129
+ }
130
+ function checkContrast(name, theme, strict) {
131
+ if (!__DEV__ && !strict) {
132
+ return;
133
+ }
134
+ const failures = (0, _contrast.auditTheme)(theme);
135
+ if (failures.length === 0) {
136
+ return;
137
+ }
138
+ if (strict) {
139
+ throw new _errors.ThemeContrastError(name, failures);
140
+ }
141
+ channel.emit('contrast', 'warn', {
142
+ theme: name,
143
+ failures: failures.length
144
+ });
145
+ console.warn(`[rn-theme] Theme "${name}" breaks contrast guarantees after overrides:\n${(0, _errors.describeFailures)(failures)}`);
146
+ }
147
+
148
+ /** Contrast warnings also reach the app's SDK sinks (`installSdkSink`, CORE-08). */
149
+ const channel = (0, _rnCore.createDiagnosticChannel)('rn-theme');
150
+
151
+ /**
152
+ * Builds every theme from brand config — pure, with no Unistyles dependency
153
+ * (spec AC-9.4). `createUnistylesConfig` wraps this; call it directly to feed
154
+ * tokens to other libraries or tests.
155
+ */
156
+ function buildThemes(config, options) {
157
+ (0, _validateThemeConfig.validateThemeConfig)(config);
158
+ const loose = config;
159
+ // rn-core's one platform source (CORE-09); off-device, fonts resolve as on Android.
160
+ const platform = options?.platform ?? ((0, _rnCore.currentPlatform)() === 'ios' ? 'ios' : 'android');
161
+ const hairlineWidth = options?.hairlineWidth ?? deviceHairlineWidth();
162
+ const fonts = (0, _typography.buildFonts)(loose.typography, platform);
163
+ const basePalettes = (0, _roles.buildPalettes)(loose);
164
+ const sources = [{
165
+ name: 'light',
166
+ scheme: 'light',
167
+ config: loose,
168
+ palettes: basePalettes
169
+ }, {
170
+ name: 'dark',
171
+ scheme: 'dark',
172
+ config: loose,
173
+ palettes: basePalettes
174
+ }, ...Object.entries(loose.themes ?? {}).map(([name, named]) => {
175
+ const tones = {
176
+ ...loose.tones,
177
+ ...named.tones
178
+ };
179
+ for (const tone of Object.keys(tones)) {
180
+ if (STANDARD_TONES.has(tone)) {
181
+ // A custom tone named `primary` silently replaced the standard
182
+ // one, contrast guarantees and all (THM-03).
183
+ throw new _errors.ThemeConfigError(`themes.${name}.tones.${tone}`, 'is a standard tone. Override it through `overrides` instead.');
184
+ }
185
+ }
186
+ const namedConfig = {
187
+ ...loose,
188
+ brandColors: named.brandColors ?? loose.brandColors,
189
+ seeds: {
190
+ ...loose.seeds,
191
+ ...named.seeds
192
+ },
193
+ tones
194
+ };
195
+ return {
196
+ name,
197
+ scheme: named.scheme,
198
+ config: namedConfig,
199
+ palettes: (0, _roles.buildPalettes)(namedConfig)
200
+ };
201
+ })];
202
+ const themes = {};
203
+ for (const source of sources) {
204
+ const overrides = loose.overrides?.[source.name];
205
+ const theme = buildOne(source, fonts, overrides, hairlineWidth);
206
+ checkContrast(source.name, theme, loose.strict === true);
207
+ themes[source.name] = theme;
208
+ }
209
+ return themes;
210
+ }
211
+ //# sourceMappingURL=buildThemes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_rnCore","require","_categorical","_contrast","_roles","_themePresets","_defaults","_typography","_errors","_overrides","_validateThemeConfig","reactNative","lazyPeer","cause","deviceHairlineWidth","result","get","ok","module","StyleSheet","hairlineWidth","undefined","STANDARD_TONES","Set","cloneFonts","font","copy","weight","token","Object","entries","assertKnownOverrideGroups","overrides","known","path","isPlainObject","allowed","key","keys","has","ThemeConfigError","buildOne","source","fonts","name","scheme","config","palettes","generatedColor","buildColorRoles","color","mergeOverrides","pick","tokenGroups","typography","buildTypography","family","fontWeight","buildFontWeight","spacing","buildSpacing","radius","buildRadius","borderWidth","buildBorderWidth","size","buildSize","opacity","buildOpacity","motion","buildMotion","shadow","buildShadows","zIndex","buildZIndex","maxFontScale","DEFAULT_MAX_FONT_SCALE","categorical","buildCategorical","brandColors","primary","tokenKeys","tokens","tone","buildTones","presets","buildPresets","PRESET_KEYS","base","extend","extension","theme","extensionOverrides","checkContrast","strict","__DEV__","failures","auditTheme","length","ThemeContrastError","channel","emit","console","warn","describeFailures","createDiagnosticChannel","buildThemes","options","validateThemeConfig","loose","platform","currentPlatform","buildFonts","basePalettes","buildPalettes","sources","themes","map","named","tones","namedConfig","seeds"],"sourceRoot":"../../../src","sources":["theme/buildThemes.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ThemeContrastError = exports.ThemeConfigError = void 0;
7
+ exports.describeFailures = describeFailures;
8
+ var _rnCore = require("@chipmobilesdk/rn-core");
9
+ /**
10
+ * The package's error codes (THM-09): `invalid_config` for a config or override
11
+ * the package rejects, `contrast` for a theme that breaks a contrast guarantee.
12
+ */
13
+
14
+ /**
15
+ * Invalid configuration or override; `path` names the offending field. An
16
+ * `SdkError` (`@chipmobilesdk/rn-core`) with `pkg: 'rn-theme'`.
17
+ */
18
+ class ThemeConfigError extends _rnCore.SdkError {
19
+ constructor(path, message) {
20
+ super('rn-theme', 'invalid_config', {
21
+ message: `${path}: ${message}`
22
+ });
23
+ this.name = 'ThemeConfigError';
24
+ this.path = path;
25
+ }
26
+ }
27
+
28
+ /** Thrown in `strict` mode when a theme breaks a contrast guarantee. */
29
+ exports.ThemeConfigError = ThemeConfigError;
30
+ class ThemeContrastError extends _rnCore.SdkError {
31
+ constructor(themeName, failures) {
32
+ super('rn-theme', 'contrast', {
33
+ message: `Theme "${themeName}" breaks contrast guarantees:\n${describeFailures(failures)}`
34
+ });
35
+ this.name = 'ThemeContrastError';
36
+ this.themeName = themeName;
37
+ this.failures = failures;
38
+ }
39
+ }
40
+ exports.ThemeContrastError = ThemeContrastError;
41
+ function describeFailures(failures) {
42
+ return failures.map(({
43
+ foreground,
44
+ background,
45
+ ratio,
46
+ target
47
+ }) => ` ${foreground} on ${background}: ${ratio}:1 (needs ${target}:1)`).join('\n');
48
+ }
49
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_rnCore","require","ThemeConfigError","SdkError","constructor","path","message","name","exports","ThemeContrastError","themeName","failures","describeFailures","map","foreground","background","ratio","target","join"],"sourceRoot":"../../../src","sources":["theme/errors.ts"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAIA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACO,MAAMC,gBAAgB,SAASC,gBAAQ,CAAiB;EAG9DC,WAAWA,CAACC,IAAY,EAAEC,OAAe,EAAE;IAC1C,KAAK,CAAC,UAAU,EAAE,gBAAgB,EAAE;MAAEA,OAAO,EAAE,GAAGD,IAAI,KAAKC,OAAO;IAAG,CAAC,CAAC;IACvE,IAAI,CAACC,IAAI,GAAG,kBAAkB;IAC9B,IAAI,CAACF,IAAI,GAAGA,IAAI;EACjB;AACD;;AAEA;AAAAG,OAAA,CAAAN,gBAAA,GAAAA,gBAAA;AACO,MAAMO,kBAAkB,SAASN,gBAAQ,CAAiB;EAIhEC,WAAWA,CAACM,SAAiB,EAAEC,QAA2B,EAAE;IAC3D,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE;MAC7BL,OAAO,EAAE,UAAUI,SAAS,kCAAkCE,gBAAgB,CAACD,QAAQ,CAAC;IACzF,CAAC,CAAC;IACF,IAAI,CAACJ,IAAI,GAAG,oBAAoB;IAChC,IAAI,CAACG,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,QAAQ,GAAGA,QAAQ;EACzB;AACD;AAACH,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAEM,SAASG,gBAAgBA,CAACD,QAA2B,EAAU;EACrE,OAAOA,QAAQ,CACbE,GAAG,CACH,CAAC;IAAEC,UAAU;IAAEC,UAAU;IAAEC,KAAK;IAAEC;EAAO,CAAC,KACzC,KAAKH,UAAU,OAAOC,UAAU,KAAKC,KAAK,aAAaC,MAAM,KAC/D,CAAC,CACAC,IAAI,CAAC,IAAI,CAAC;AACb","ignoreList":[]}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isPlainObject = isPlainObject;
7
+ exports.mergeOverrides = mergeOverrides;
8
+ exports.pick = pick;
9
+ var _parse = require("../color/parse.js");
10
+ var _errors = require("./errors.js");
11
+ function isPlainObject(value) {
12
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
13
+ }
14
+
15
+ /** Optional style keys an override may add although the generated token omits them. */
16
+ const OPTIONAL_NUMBER_KEYS = new Set(['letterSpacing']);
17
+
18
+ /** Groups whose every leaf is a colour. */
19
+ const COLOR_GROUPS = new Set(['color', 'tone', 'categorical']);
20
+ function isColorPath(segments) {
21
+ const leaf = segments.at(-1) ?? '';
22
+ return COLOR_GROUPS.has(segments[0]) || leaf === 'color' || leaf.endsWith('Color');
23
+ }
24
+ function assertFiniteNumber(value, path) {
25
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
26
+ throw new _errors.ThemeConfigError(path, 'must be a finite number.');
27
+ }
28
+ }
29
+ function validateLeaf(value, base, segments, path) {
30
+ if (typeof base === 'number') {
31
+ assertFiniteNumber(value, path);
32
+ return;
33
+ }
34
+ if (typeof base !== 'string') {
35
+ return;
36
+ }
37
+ if (typeof value !== 'string') {
38
+ throw new _errors.ThemeConfigError(path, 'must be a string.');
39
+ }
40
+
41
+ // A string that is a colour today (e.g. an `extend` token) must stay one.
42
+ if ((isColorPath(segments) || (0, _parse.isValidColor)(base)) && !(0, _parse.isValidColor)(value)) {
43
+ throw new _errors.ThemeConfigError(path, `"${value}" is not a supported colour.`);
44
+ }
45
+ }
46
+ function mergeArray({
47
+ value,
48
+ baseValue,
49
+ path,
50
+ segments
51
+ }) {
52
+ if (!Array.isArray(value)) {
53
+ throw new _errors.ThemeConfigError(path, 'must be an array.');
54
+ }
55
+ const sample = Array.isArray(baseValue) ? baseValue[0] : undefined;
56
+ value.forEach((item, index) => validateLeaf(item, sample, segments, `${path}.${index}`));
57
+ return [...value];
58
+ }
59
+ function mergeEntry(entry) {
60
+ const {
61
+ value,
62
+ baseValue,
63
+ path,
64
+ segments
65
+ } = entry;
66
+ if (Array.isArray(baseValue)) {
67
+ return mergeArray(entry);
68
+ }
69
+ if (isPlainObject(baseValue)) {
70
+ return mergeOverrides(baseValue, value, path, segments);
71
+ }
72
+ validateLeaf(value, baseValue, segments, path);
73
+ return value;
74
+ }
75
+
76
+ /**
77
+ * Merges `overrides` into a fresh copy of `base`, validating as it goes:
78
+ * keys must exist in `base`, colours must parse, numbers must be finite.
79
+ * Arrays are replaced whole. `base` itself is never mutated.
80
+ */
81
+ function mergeOverrides(base, overrides, path, segments = []) {
82
+ if (overrides == null) {
83
+ return base;
84
+ }
85
+ if (!isPlainObject(overrides) || !isPlainObject(base)) {
86
+ throw new _errors.ThemeConfigError(path, 'must be an object.');
87
+ }
88
+ const result = {
89
+ ...base
90
+ };
91
+ for (const [key, value] of Object.entries(overrides)) {
92
+ const entry = {
93
+ key,
94
+ value,
95
+ baseValue: base[key],
96
+ path: `${path}.${key}`,
97
+ segments: [...segments, key]
98
+ };
99
+ if (value === undefined) {
100
+ continue;
101
+ }
102
+ if (key in base) {
103
+ result[key] = mergeEntry(entry);
104
+ } else if (OPTIONAL_NUMBER_KEYS.has(key)) {
105
+ assertFiniteNumber(value, entry.path);
106
+ result[key] = value;
107
+ } else {
108
+ throw new _errors.ThemeConfigError(entry.path, 'does not exist on the theme. Add new tokens through `extend`.');
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ function pick(source, keys) {
114
+ if (!isPlainObject(source)) {
115
+ return undefined;
116
+ }
117
+ const picked = {};
118
+ for (const key of keys) {
119
+ if (key in source) {
120
+ picked[key] = source[key];
121
+ }
122
+ }
123
+ return picked;
124
+ }
125
+ //# sourceMappingURL=overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_parse","require","_errors","isPlainObject","value","Array","isArray","OPTIONAL_NUMBER_KEYS","Set","COLOR_GROUPS","isColorPath","segments","leaf","at","has","endsWith","assertFiniteNumber","path","Number","isFinite","ThemeConfigError","validateLeaf","base","isValidColor","mergeArray","baseValue","sample","undefined","forEach","item","index","mergeEntry","entry","mergeOverrides","overrides","result","key","Object","entries","pick","source","keys","picked"],"sourceRoot":"../../../src","sources":["theme/overrides.ts"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAIO,SAASE,aAAaA,CAACC,KAAc,EAAwB;EACnE,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC;AAC5E;;AAEA;AACA,MAAMG,oBAAoB,GAAG,IAAIC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC;;AAEvD;AACA,MAAMC,YAAY,GAAG,IAAID,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAE9D,SAASE,WAAWA,CAACC,QAAkB,EAAW;EACjD,MAAMC,IAAI,GAAGD,QAAQ,CAACE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;EAElC,OAAOJ,YAAY,CAACK,GAAG,CAACH,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAIC,IAAI,KAAK,OAAO,IAAIA,IAAI,CAACG,QAAQ,CAAC,OAAO,CAAC;AACnF;AAEA,SAASC,kBAAkBA,CAACZ,KAAc,EAAEa,IAAY,EAAQ;EAC/D,IAAI,OAAOb,KAAK,KAAK,QAAQ,IAAI,CAACc,MAAM,CAACC,QAAQ,CAACf,KAAK,CAAC,EAAE;IACzD,MAAM,IAAIgB,wBAAgB,CAACH,IAAI,EAAE,0BAA0B,CAAC;EAC7D;AACD;AAEA,SAASI,YAAYA,CAACjB,KAAc,EAAEkB,IAAa,EAAEX,QAAkB,EAAEM,IAAY,EAAQ;EAC5F,IAAI,OAAOK,IAAI,KAAK,QAAQ,EAAE;IAC7BN,kBAAkB,CAACZ,KAAK,EAAEa,IAAI,CAAC;IAC/B;EACD;EAEA,IAAI,OAAOK,IAAI,KAAK,QAAQ,EAAE;IAC7B;EACD;EAEA,IAAI,OAAOlB,KAAK,KAAK,QAAQ,EAAE;IAC9B,MAAM,IAAIgB,wBAAgB,CAACH,IAAI,EAAE,mBAAmB,CAAC;EACtD;;EAEA;EACA,IAAI,CAACP,WAAW,CAACC,QAAQ,CAAC,IAAI,IAAAY,mBAAY,EAACD,IAAI,CAAC,KAAK,CAAC,IAAAC,mBAAY,EAACnB,KAAK,CAAC,EAAE;IAC1E,MAAM,IAAIgB,wBAAgB,CAACH,IAAI,EAAE,IAAIb,KAAK,8BAA8B,CAAC;EAC1E;AACD;AAUA,SAASoB,UAAUA,CAAC;EAAEpB,KAAK;EAAEqB,SAAS;EAAER,IAAI;EAAEN;AAAgB,CAAC,EAAa;EAC3E,IAAI,CAACN,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;IAC1B,MAAM,IAAIgB,wBAAgB,CAACH,IAAI,EAAE,mBAAmB,CAAC;EACtD;EAEA,MAAMS,MAAe,GAAGrB,KAAK,CAACC,OAAO,CAACmB,SAAS,CAAC,GAAGA,SAAS,CAAC,CAAC,CAAC,GAAGE,SAAS;EAC3EvB,KAAK,CAACwB,OAAO,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAKT,YAAY,CAACQ,IAAI,EAAEH,MAAM,EAAEf,QAAQ,EAAE,GAAGM,IAAI,IAAIa,KAAK,EAAE,CAAC,CAAC;EAExF,OAAO,CAAC,GAAG1B,KAAK,CAAC;AAClB;AAEA,SAAS2B,UAAUA,CAACC,KAAY,EAAW;EAC1C,MAAM;IAAE5B,KAAK;IAAEqB,SAAS;IAAER,IAAI;IAAEN;EAAS,CAAC,GAAGqB,KAAK;EAElD,IAAI3B,KAAK,CAACC,OAAO,CAACmB,SAAS,CAAC,EAAE;IAC7B,OAAOD,UAAU,CAACQ,KAAK,CAAC;EACzB;EAEA,IAAI7B,aAAa,CAACsB,SAAS,CAAC,EAAE;IAC7B,OAAOQ,cAAc,CAACR,SAAS,EAAErB,KAAK,EAAEa,IAAI,EAAEN,QAAQ,CAAC;EACxD;EAEAU,YAAY,CAACjB,KAAK,EAAEqB,SAAS,EAAEd,QAAQ,EAAEM,IAAI,CAAC;EAE9C,OAAOb,KAAK;AACb;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS6B,cAAcA,CAC7BX,IAAO,EACPY,SAAkB,EAClBjB,IAAY,EACZN,QAAkB,GAAG,EAAE,EACnB;EACJ,IAAIuB,SAAS,IAAI,IAAI,EAAE;IACtB,OAAOZ,IAAI;EACZ;EAEA,IAAI,CAACnB,aAAa,CAAC+B,SAAS,CAAC,IAAI,CAAC/B,aAAa,CAACmB,IAAI,CAAC,EAAE;IACtD,MAAM,IAAIF,wBAAgB,CAACH,IAAI,EAAE,oBAAoB,CAAC;EACvD;EAEA,MAAMkB,MAAmB,GAAG;IAAE,GAAGb;EAAK,CAAC;EAEvC,KAAK,MAAM,CAACc,GAAG,EAAEhC,KAAK,CAAC,IAAIiC,MAAM,CAACC,OAAO,CAACJ,SAAS,CAAC,EAAE;IACrD,MAAMF,KAAY,GAAG;MACpBI,GAAG;MACHhC,KAAK;MACLqB,SAAS,EAAEH,IAAI,CAACc,GAAG,CAAC;MACpBnB,IAAI,EAAE,GAAGA,IAAI,IAAImB,GAAG,EAAE;MACtBzB,QAAQ,EAAE,CAAC,GAAGA,QAAQ,EAAEyB,GAAG;IAC5B,CAAC;IAED,IAAIhC,KAAK,KAAKuB,SAAS,EAAE;MACxB;IACD;IAEA,IAAIS,GAAG,IAAId,IAAI,EAAE;MAChBa,MAAM,CAACC,GAAG,CAAC,GAAGL,UAAU,CAACC,KAAK,CAAC;IAChC,CAAC,MAAM,IAAIzB,oBAAoB,CAACO,GAAG,CAACsB,GAAG,CAAC,EAAE;MACzCpB,kBAAkB,CAACZ,KAAK,EAAE4B,KAAK,CAACf,IAAI,CAAC;MACrCkB,MAAM,CAACC,GAAG,CAAC,GAAGhC,KAAK;IACpB,CAAC,MAAM;MACN,MAAM,IAAIgB,wBAAgB,CACzBY,KAAK,CAACf,IAAI,EACV,+DACD,CAAC;IACF;EACD;EAEA,OAAOkB,MAAM;AACd;AAEO,SAASI,IAAIA,CAACC,MAAe,EAAEC,IAAuB,EAA2B;EACvF,IAAI,CAACtC,aAAa,CAACqC,MAAM,CAAC,EAAE;IAC3B,OAAOb,SAAS;EACjB;EAEA,MAAMe,MAAmB,GAAG,CAAC,CAAC;EAE9B,KAAK,MAAMN,GAAG,IAAIK,IAAI,EAAE;IACvB,IAAIL,GAAG,IAAII,MAAM,EAAE;MAClBE,MAAM,CAACN,GAAG,CAAC,GAAGI,MAAM,CAACJ,GAAG,CAAC;IAC1B;EACD;EAEA,OAAOM,MAAM;AACd","ignoreList":[]}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.themeNamesOf = themeNamesOf;
7
+ exports.validateThemeConfig = validateThemeConfig;
8
+ var _parse = require("../color/parse.js");
9
+ var _errors = require("./errors.js");
10
+ var _overrides = require("./overrides.js");
11
+ const BRAND_KEYS = ['primary', 'secondary', 'tertiary'];
12
+ const SEED_KEYS = ['neutral', 'error', 'success', 'warning', 'info'];
13
+ const FONT_WEIGHT_NAMES = ['regular', 'medium', 'semibold', 'bold', 'heavy'];
14
+ const SCHEMES = new Set(['light', 'dark']);
15
+ const RESERVED_THEME_NAMES = new Set(['light', 'dark']);
16
+ function assertObject(value, path) {
17
+ if (!(0, _overrides.isPlainObject)(value)) {
18
+ throw new _errors.ThemeConfigError(path, 'must be an object.');
19
+ }
20
+ }
21
+ function assertOpaqueColor(value, path) {
22
+ if (!(0, _parse.isOpaqueColor)(value)) {
23
+ throw new _errors.ThemeConfigError(path, `must be an opaque colour (#RGB, #RRGGBB or rgb()), received ${JSON.stringify(value)}.`);
24
+ }
25
+ }
26
+ function assertNonEmptyString(value, path) {
27
+ if (typeof value !== 'string' || value.trim().length === 0) {
28
+ throw new _errors.ThemeConfigError(path, 'must be a non-empty string.');
29
+ }
30
+ }
31
+ function assertPositiveNumber(value, path) {
32
+ if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
33
+ throw new _errors.ThemeConfigError(path, 'must be a positive finite number.');
34
+ }
35
+ }
36
+
37
+ /** The tones this package builds, which an app's own tone may not take over. */
38
+ const STANDARD_TONE_NAMES = new Set(['neutral', 'primary', 'info', 'success', 'warning', 'error']);
39
+ function validateCustomTones(value, path) {
40
+ if (value == null) {
41
+ return;
42
+ }
43
+ assertObject(value, path);
44
+ for (const name of Object.keys(value)) {
45
+ if (STANDARD_TONE_NAMES.has(name)) {
46
+ throw new _errors.ThemeConfigError(`${path}.${name}`, 'is a standard tone; customise it through `overrides.<theme>.tone` instead.');
47
+ }
48
+ }
49
+ validateColorRecord(value, path);
50
+ }
51
+ function validateColorRecord(value, path, keys) {
52
+ if (value == null) {
53
+ return;
54
+ }
55
+ assertObject(value, path);
56
+ for (const [key, color] of Object.entries(value)) {
57
+ if (keys && !keys.includes(key)) {
58
+ throw new _errors.ThemeConfigError(`${path}.${key}`, `is not one of ${keys.join(', ')}.`);
59
+ }
60
+ if (color !== undefined) {
61
+ assertOpaqueColor(color, `${path}.${key}`);
62
+ }
63
+ }
64
+ }
65
+ function validateBrandColors(value, path) {
66
+ assertObject(value, path);
67
+ for (const key of BRAND_KEYS) {
68
+ assertOpaqueColor(value[key], `${path}.${key}`);
69
+ }
70
+ }
71
+ function validateFontMap(value, path) {
72
+ if (value == null) {
73
+ return;
74
+ }
75
+ assertObject(value, path);
76
+ for (const [weight, family] of Object.entries(value)) {
77
+ if (!FONT_WEIGHT_NAMES.includes(weight)) {
78
+ throw new _errors.ThemeConfigError(`${path}.${weight}`, `is not one of ${FONT_WEIGHT_NAMES.join(', ')}.`);
79
+ }
80
+ assertNonEmptyString(family, `${path}.${weight}`);
81
+ }
82
+ }
83
+ function validateTypography(value) {
84
+ if (value == null) {
85
+ return;
86
+ }
87
+ assertObject(value, 'typography');
88
+ if (value.fontFamily != null) {
89
+ assertNonEmptyString(value.fontFamily, 'typography.fontFamily');
90
+ }
91
+ for (const key of ['baseFontSize', 'fontScale', 'maxFontScale']) {
92
+ if (value[key] != null) {
93
+ assertPositiveNumber(value[key], `typography.${key}`);
94
+ }
95
+ }
96
+ if (value.fonts != null) {
97
+ assertObject(value.fonts, 'typography.fonts');
98
+ if (value.fonts.family != null) {
99
+ assertNonEmptyString(value.fonts.family, 'typography.fonts.family');
100
+ }
101
+ validateFontMap(value.fonts.ios, 'typography.fonts.ios');
102
+ validateFontMap(value.fonts.android, 'typography.fonts.android');
103
+ }
104
+ }
105
+ function validateNamedThemes(value) {
106
+ if (value == null) {
107
+ return;
108
+ }
109
+ assertObject(value, 'themes');
110
+ for (const [name, theme] of Object.entries(value)) {
111
+ const path = `themes.${name}`;
112
+ if (RESERVED_THEME_NAMES.has(name)) {
113
+ throw new _errors.ThemeConfigError(path, 'light and dark are built in; customise them with overrides.');
114
+ }
115
+ assertObject(theme, path);
116
+ if (!SCHEMES.has(theme.scheme)) {
117
+ throw new _errors.ThemeConfigError(`${path}.scheme`, "must be 'light' or 'dark'.");
118
+ }
119
+ if (theme.brandColors != null) {
120
+ validateBrandColors(theme.brandColors, `${path}.brandColors`);
121
+ }
122
+ validateColorRecord(theme.seeds, `${path}.seeds`, SEED_KEYS);
123
+ validateCustomTones(theme.tones, `${path}.tones`);
124
+ }
125
+ }
126
+ function validateOverrideThemes(value, themeNames) {
127
+ if (value == null) {
128
+ return;
129
+ }
130
+ assertObject(value, 'overrides');
131
+ for (const name of Object.keys(value)) {
132
+ if (!themeNames.includes(name)) {
133
+ throw new _errors.ThemeConfigError(`overrides.${name}`, `is not a theme (${themeNames.join(', ')}).`);
134
+ }
135
+ }
136
+ }
137
+
138
+ /** Validates the config shape; override values are validated while merging. */
139
+ function validateThemeConfig(config) {
140
+ assertObject(config, 'config');
141
+ validateBrandColors(config.brandColors, 'brandColors');
142
+ validateColorRecord(config.seeds, 'seeds', SEED_KEYS);
143
+ validateCustomTones(config.tones, 'tones');
144
+ validateTypography(config.typography);
145
+ validateNamedThemes(config.themes);
146
+ if (config.extend != null && typeof config.extend !== 'function') {
147
+ throw new _errors.ThemeConfigError('extend', 'must be a function.');
148
+ }
149
+ if (config.strict != null && typeof config.strict !== 'boolean') {
150
+ throw new _errors.ThemeConfigError('strict', 'must be a boolean.');
151
+ }
152
+ validateOverrideThemes(config.overrides, themeNamesOf(config));
153
+ }
154
+ function themeNamesOf(config) {
155
+ return ['light', 'dark', ...Object.keys(config.themes ?? {})];
156
+ }
157
+ //# sourceMappingURL=validateThemeConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_parse","require","_errors","_overrides","BRAND_KEYS","SEED_KEYS","FONT_WEIGHT_NAMES","SCHEMES","Set","RESERVED_THEME_NAMES","assertObject","value","path","isPlainObject","ThemeConfigError","assertOpaqueColor","isOpaqueColor","JSON","stringify","assertNonEmptyString","trim","length","assertPositiveNumber","Number","isFinite","STANDARD_TONE_NAMES","validateCustomTones","name","Object","keys","has","validateColorRecord","key","color","entries","includes","join","undefined","validateBrandColors","validateFontMap","weight","family","validateTypography","fontFamily","fonts","ios","android","validateNamedThemes","theme","scheme","brandColors","seeds","tones","validateOverrideThemes","themeNames","validateThemeConfig","config","typography","themes","extend","strict","overrides","themeNamesOf"],"sourceRoot":"../../../src","sources":["theme/validateThemeConfig.ts"],"mappings":"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","ignoreList":[]}