@ankhorage/surface 8.0.0 → 9.0.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 (478) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{surfaceColor.d.ts → constants/surfaceColor.d.ts} +0 -4
  3. package/dist/constants/surfaceColor.d.ts.map +1 -0
  4. package/dist/constants/surfaceColor.js.map +1 -0
  5. package/dist/features/app-bar/adapters/inbound/AppBar.d.ts.map +1 -1
  6. package/dist/features/app-bar/adapters/inbound/AppBar.js +1 -1
  7. package/dist/features/app-bar/adapters/inbound/AppBar.js.map +1 -1
  8. package/dist/features/badge/adapters/inbound/Badge.d.ts.map +1 -1
  9. package/dist/features/badge/adapters/inbound/Badge.js +1 -1
  10. package/dist/features/badge/adapters/inbound/Badge.js.map +1 -1
  11. package/dist/features/button/adapters/inbound/Button.d.ts.map +1 -1
  12. package/dist/features/button/adapters/inbound/Button.js +1 -1
  13. package/dist/features/button/adapters/inbound/Button.js.map +1 -1
  14. package/dist/features/button/adapters/inbound/IconButton.d.ts.map +1 -1
  15. package/dist/features/button/adapters/inbound/IconButton.js +1 -1
  16. package/dist/features/button/adapters/inbound/IconButton.js.map +1 -1
  17. package/dist/features/card/adapters/inbound/Card.d.ts.map +1 -1
  18. package/dist/features/card/adapters/inbound/Card.js +1 -1
  19. package/dist/features/card/adapters/inbound/Card.js.map +1 -1
  20. package/dist/features/font/adapters/inbound/FontProvider.d.ts +4 -0
  21. package/dist/features/font/adapters/inbound/FontProvider.d.ts.map +1 -0
  22. package/dist/features/font/adapters/inbound/FontProvider.js +16 -0
  23. package/dist/features/font/adapters/inbound/FontProvider.js.map +1 -0
  24. package/dist/features/font/adapters/inbound/FontRuntimeContext.d.ts +4 -0
  25. package/dist/features/font/adapters/inbound/FontRuntimeContext.d.ts.map +1 -0
  26. package/dist/features/font/adapters/inbound/FontRuntimeContext.js +9 -0
  27. package/dist/features/font/adapters/inbound/FontRuntimeContext.js.map +1 -0
  28. package/dist/features/font/adapters/inbound/useFontRuntime.d.ts +4 -0
  29. package/dist/features/font/adapters/inbound/useFontRuntime.d.ts.map +1 -0
  30. package/dist/features/font/adapters/inbound/useFontRuntime.js +7 -0
  31. package/dist/features/font/adapters/inbound/useFontRuntime.js.map +1 -0
  32. package/dist/features/font/public.d.ts +3 -0
  33. package/dist/features/font/public.d.ts.map +1 -0
  34. package/dist/features/font/public.js +2 -0
  35. package/dist/features/font/public.js.map +1 -0
  36. package/dist/features/form/checkbox/adapters/inbound/Checkbox.d.ts.map +1 -1
  37. package/dist/features/form/checkbox/adapters/inbound/Checkbox.js +1 -1
  38. package/dist/features/form/checkbox/adapters/inbound/Checkbox.js.map +1 -1
  39. package/dist/features/form/radio/adapters/inbound/Radio.d.ts.map +1 -1
  40. package/dist/features/form/radio/adapters/inbound/Radio.js +1 -1
  41. package/dist/features/form/radio/adapters/inbound/Radio.js.map +1 -1
  42. package/dist/features/form/switch/adapters/inbound/Switch.d.ts.map +1 -1
  43. package/dist/features/form/switch/adapters/inbound/Switch.js +1 -1
  44. package/dist/features/form/switch/adapters/inbound/Switch.js.map +1 -1
  45. package/dist/features/form/text-input/adapters/inbound/TextInput.d.ts.map +1 -1
  46. package/dist/features/form/text-input/adapters/inbound/TextInput.js +1 -1
  47. package/dist/features/form/text-input/adapters/inbound/TextInput.js.map +1 -1
  48. package/dist/features/form/text-input/utils/resolveTextInputPresentation.d.ts +1 -1
  49. package/dist/features/form/text-input/utils/resolveTextInputPresentation.d.ts.map +1 -1
  50. package/dist/features/form/text-input/utils/resolveTextInputPresentation.js.map +1 -1
  51. package/dist/features/icon/adapters/inbound/Icon.d.ts.map +1 -1
  52. package/dist/features/icon/adapters/inbound/Icon.js +2 -2
  53. package/dist/features/icon/adapters/inbound/Icon.js.map +1 -1
  54. package/dist/features/image/adapters/inbound/Image.d.ts.map +1 -1
  55. package/dist/features/image/adapters/inbound/Image.js +1 -1
  56. package/dist/features/image/adapters/inbound/Image.js.map +1 -1
  57. package/dist/features/image/utils/resolveImageStyle.d.ts +1 -1
  58. package/dist/features/image/utils/resolveImageStyle.d.ts.map +1 -1
  59. package/dist/features/image/utils/resolveImageStyle.js +1 -1
  60. package/dist/features/image/utils/resolveImageStyle.js.map +1 -1
  61. package/dist/features/layout/adapters/inbound/Grid.d.ts.map +1 -1
  62. package/dist/features/layout/adapters/inbound/Grid.js +1 -1
  63. package/dist/features/layout/adapters/inbound/Grid.js.map +1 -1
  64. package/dist/features/layout/adapters/inbound/ScrollView.d.ts.map +1 -1
  65. package/dist/features/layout/adapters/inbound/ScrollView.js +1 -1
  66. package/dist/features/layout/adapters/inbound/ScrollView.js.map +1 -1
  67. package/dist/features/layout/adapters/inbound/View.d.ts.map +1 -1
  68. package/dist/features/layout/adapters/inbound/View.js +1 -1
  69. package/dist/features/layout/adapters/inbound/View.js.map +1 -1
  70. package/dist/features/list/adapters/inbound/ListItem.d.ts.map +1 -1
  71. package/dist/features/list/adapters/inbound/ListItem.js +1 -1
  72. package/dist/features/list/adapters/inbound/ListItem.js.map +1 -1
  73. package/dist/features/modal/adapters/inbound/Modal.d.ts.map +1 -1
  74. package/dist/features/modal/adapters/inbound/Modal.js +1 -1
  75. package/dist/features/modal/adapters/inbound/Modal.js.map +1 -1
  76. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.d.ts.map +1 -1
  77. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js +1 -1
  78. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js.map +1 -1
  79. package/dist/features/pressable/adapters/inbound/Pressable.d.ts.map +1 -1
  80. package/dist/features/pressable/adapters/inbound/Pressable.js +1 -1
  81. package/dist/features/pressable/adapters/inbound/Pressable.js.map +1 -1
  82. package/dist/features/surface/adapters/inbound/Surface.d.ts.map +1 -1
  83. package/dist/features/surface/adapters/inbound/Surface.js +1 -1
  84. package/dist/features/surface/adapters/inbound/Surface.js.map +1 -1
  85. package/dist/features/tabs/adapters/inbound/Tab.d.ts.map +1 -1
  86. package/dist/features/tabs/adapters/inbound/Tab.js +1 -1
  87. package/dist/features/tabs/adapters/inbound/Tab.js.map +1 -1
  88. package/dist/features/theme/adapters/inbound/ThemeProvider.d.ts +4 -0
  89. package/dist/features/theme/adapters/inbound/ThemeProvider.d.ts.map +1 -0
  90. package/dist/features/theme/adapters/inbound/ThemeProvider.js +27 -0
  91. package/dist/features/theme/adapters/inbound/ThemeProvider.js.map +1 -0
  92. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.d.ts +4 -0
  93. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.d.ts.map +1 -0
  94. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.js +11 -0
  95. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.js.map +1 -0
  96. package/dist/features/theme/adapters/inbound/ThemeScope.d.ts +4 -0
  97. package/dist/features/theme/adapters/inbound/ThemeScope.d.ts.map +1 -0
  98. package/dist/features/theme/adapters/inbound/ThemeScope.js +17 -0
  99. package/dist/features/theme/adapters/inbound/ThemeScope.js.map +1 -0
  100. package/dist/features/theme/adapters/inbound/useTheme.d.ts +4 -0
  101. package/dist/features/theme/adapters/inbound/useTheme.d.ts.map +1 -0
  102. package/dist/features/theme/adapters/inbound/useTheme.js +7 -0
  103. package/dist/features/theme/adapters/inbound/useTheme.js.map +1 -0
  104. package/dist/features/theme/application/use-cases/createTheme.d.ts +5 -0
  105. package/dist/features/theme/application/use-cases/createTheme.d.ts.map +1 -0
  106. package/dist/features/theme/application/use-cases/createTheme.js +56 -0
  107. package/dist/features/theme/application/use-cases/createTheme.js.map +1 -0
  108. package/dist/features/theme/constants.d.ts +10 -0
  109. package/dist/features/theme/constants.d.ts.map +1 -0
  110. package/dist/{theme/defaultTokens.js → features/theme/constants.js} +9 -2
  111. package/dist/features/theme/constants.js.map +1 -0
  112. package/dist/{theme → features/theme/domain}/createSurfaceColorDiagnosticCollector.d.ts +1 -1
  113. package/dist/features/theme/domain/createSurfaceColorDiagnosticCollector.d.ts.map +1 -0
  114. package/dist/features/theme/domain/createSurfaceColorDiagnosticCollector.js.map +1 -0
  115. package/dist/{theme → features/theme/domain}/createSurfaceSemanticPolicy.d.ts +1 -1
  116. package/dist/features/theme/domain/createSurfaceSemanticPolicy.d.ts.map +1 -0
  117. package/dist/{theme → features/theme/domain}/createSurfaceSemanticPolicy.js +1 -1
  118. package/dist/features/theme/domain/createSurfaceSemanticPolicy.js.map +1 -0
  119. package/dist/features/theme/domain/generatePalette.d.ts +10 -0
  120. package/dist/features/theme/domain/generatePalette.d.ts.map +1 -0
  121. package/dist/{theme/colorEngine.js → features/theme/domain/generatePalette.js} +2 -10
  122. package/dist/features/theme/domain/generatePalette.js.map +1 -0
  123. package/dist/{theme → features/theme/domain}/resolveRoleSemantics.d.ts +1 -1
  124. package/dist/features/theme/domain/resolveRoleSemantics.d.ts.map +1 -0
  125. package/dist/{theme → features/theme/domain}/resolveRoleSemantics.js +1 -1
  126. package/dist/features/theme/domain/resolveRoleSemantics.js.map +1 -0
  127. package/dist/features/theme/domain/resolveSemanticColors.d.ts +4 -0
  128. package/dist/features/theme/domain/resolveSemanticColors.d.ts.map +1 -0
  129. package/dist/features/theme/domain/resolveSemanticColors.js +10 -0
  130. package/dist/features/theme/domain/resolveSemanticColors.js.map +1 -0
  131. package/dist/{theme → features/theme/domain}/resolveSurfaceSemanticModel.d.ts +1 -1
  132. package/dist/features/theme/domain/resolveSurfaceSemanticModel.d.ts.map +1 -0
  133. package/dist/features/theme/domain/resolveSurfaceSemanticModel.js.map +1 -0
  134. package/dist/features/theme/public.d.ts +3 -0
  135. package/dist/features/theme/public.d.ts.map +1 -0
  136. package/dist/features/theme/public.js +2 -0
  137. package/dist/features/theme/public.js.map +1 -0
  138. package/dist/features/theme/runtime.d.ts +5 -0
  139. package/dist/features/theme/runtime.d.ts.map +1 -0
  140. package/dist/features/theme/runtime.js +4 -0
  141. package/dist/features/theme/runtime.js.map +1 -0
  142. package/dist/{theme → features/theme/utils}/resolveGlobalTokens.d.ts +1 -1
  143. package/dist/features/theme/utils/resolveGlobalTokens.d.ts.map +1 -0
  144. package/dist/{theme → features/theme/utils}/resolveGlobalTokens.js +1 -1
  145. package/dist/features/theme/utils/resolveGlobalTokens.js.map +1 -0
  146. package/dist/{theme → features/theme/utils}/resolveHeadingTokenOverrides.d.ts +1 -1
  147. package/dist/features/theme/utils/resolveHeadingTokenOverrides.d.ts.map +1 -0
  148. package/dist/features/theme/utils/resolveHeadingTokenOverrides.js.map +1 -0
  149. package/dist/features/theme/utils/resolveNumericTokenOverrides.d.ts.map +1 -0
  150. package/dist/features/theme/utils/resolveNumericTokenOverrides.js.map +1 -0
  151. package/dist/{theme → features/theme/utils}/resolveToken.d.ts +2 -8
  152. package/dist/features/theme/utils/resolveToken.d.ts.map +1 -0
  153. package/dist/features/theme/utils/resolveToken.js +10 -0
  154. package/dist/features/theme/utils/resolveToken.js.map +1 -0
  155. package/dist/{theme → features/theme/utils}/resolveWeightTokenOverrides.d.ts +1 -1
  156. package/dist/features/theme/utils/resolveWeightTokenOverrides.d.ts.map +1 -0
  157. package/dist/{theme → features/theme/utils}/resolveWeightTokenOverrides.js +3 -5
  158. package/dist/features/theme/utils/resolveWeightTokenOverrides.js.map +1 -0
  159. package/dist/features/toast/adapters/inbound/Toast.d.ts.map +1 -1
  160. package/dist/features/toast/adapters/inbound/Toast.js +1 -1
  161. package/dist/features/toast/adapters/inbound/Toast.js.map +1 -1
  162. package/dist/features/tooltip/adapters/inbound/Tooltip.d.ts.map +1 -1
  163. package/dist/features/tooltip/adapters/inbound/Tooltip.js +1 -1
  164. package/dist/features/tooltip/adapters/inbound/Tooltip.js.map +1 -1
  165. package/dist/features/typography/adapters/inbound/Heading.d.ts +2 -2
  166. package/dist/features/typography/adapters/inbound/Heading.d.ts.map +1 -1
  167. package/dist/features/typography/adapters/inbound/Heading.js +4 -20
  168. package/dist/features/typography/adapters/inbound/Heading.js.map +1 -1
  169. package/dist/features/typography/adapters/inbound/Text.d.ts +1 -1
  170. package/dist/features/typography/adapters/inbound/Text.d.ts.map +1 -1
  171. package/dist/features/typography/adapters/inbound/Text.js +3 -20
  172. package/dist/features/typography/adapters/inbound/Text.js.map +1 -1
  173. package/dist/features/typography/utils/resolveHeadingTextStyle.d.ts +2 -2
  174. package/dist/features/typography/utils/resolveHeadingTextStyle.d.ts.map +1 -1
  175. package/dist/features/typography/utils/resolveHeadingTextStyle.js.map +1 -1
  176. package/dist/index.d.ts +9 -10
  177. package/dist/index.d.ts.map +1 -1
  178. package/dist/index.js +4 -6
  179. package/dist/index.js.map +1 -1
  180. package/dist/internal/resolvers/resolveControlSize.d.ts +1 -1
  181. package/dist/internal/resolvers/resolveControlSize.js.map +1 -1
  182. package/dist/internal/resolvers/resolveFieldPresentation.d.ts +1 -1
  183. package/dist/internal/resolvers/resolveFieldPresentation.d.ts.map +1 -1
  184. package/dist/internal/resolvers/resolveFieldPresentation.js.map +1 -1
  185. package/dist/internal/resolvers/resolveIconSize.d.ts +1 -1
  186. package/dist/internal/resolvers/resolveIconSize.js.map +1 -1
  187. package/dist/internal/resolvers/resolveInteractiveColors.d.ts +2 -2
  188. package/dist/internal/resolvers/resolveInteractiveColors.d.ts.map +1 -1
  189. package/dist/internal/resolvers/resolveInteractiveColors.js.map +1 -1
  190. package/dist/internal/resolvers/resolveSelectionControlColors.d.ts +2 -2
  191. package/dist/internal/resolvers/resolveSelectionControlColors.d.ts.map +1 -1
  192. package/dist/internal/resolvers/resolveSelectionControlColors.js.map +1 -1
  193. package/dist/internal/resolvers/resolveSurfaceColor.d.ts +2 -2
  194. package/dist/internal/resolvers/resolveSurfaceColor.d.ts.map +1 -1
  195. package/dist/internal/resolvers/resolveSurfaceColor.js.map +1 -1
  196. package/dist/internal/resolvers/resolveTextColor.d.ts +2 -2
  197. package/dist/internal/resolvers/resolveTextColor.d.ts.map +1 -1
  198. package/dist/internal/resolvers/resolveTextColor.js.map +1 -1
  199. package/dist/internal/resolvers/resolveTextStyles.d.ts +1 -1
  200. package/dist/internal/resolvers/resolveTextStyles.js.map +1 -1
  201. package/dist/types/accordion.d.ts +1 -1
  202. package/dist/types/accordion.d.ts.map +1 -1
  203. package/dist/types/accordion.js.map +1 -1
  204. package/dist/types/badge.d.ts +1 -1
  205. package/dist/types/badge.d.ts.map +1 -1
  206. package/dist/types/badge.js.map +1 -1
  207. package/dist/types/button.d.ts +1 -1
  208. package/dist/types/button.d.ts.map +1 -1
  209. package/dist/types/button.js.map +1 -1
  210. package/dist/types/checkbox.d.ts +1 -1
  211. package/dist/types/checkbox.d.ts.map +1 -1
  212. package/dist/types/checkbox.js.map +1 -1
  213. package/dist/types/font.d.ts +13 -0
  214. package/dist/types/font.d.ts.map +1 -0
  215. package/dist/types/font.js +2 -0
  216. package/dist/types/font.js.map +1 -0
  217. package/dist/types/icon.d.ts +1 -1
  218. package/dist/types/icon.d.ts.map +1 -1
  219. package/dist/types/icon.js.map +1 -1
  220. package/dist/types/image.d.ts +1 -1
  221. package/dist/types/image.d.ts.map +1 -1
  222. package/dist/types/image.js.map +1 -1
  223. package/dist/types/interactionPolicy.d.ts.map +1 -0
  224. package/dist/types/interactionPolicy.js.map +1 -0
  225. package/dist/types/layout.d.ts +1 -1
  226. package/dist/types/layout.d.ts.map +1 -1
  227. package/dist/types/layout.js.map +1 -1
  228. package/dist/types/list.d.ts +1 -1
  229. package/dist/types/list.d.ts.map +1 -1
  230. package/dist/types/list.js.map +1 -1
  231. package/dist/types/modal.d.ts +1 -1
  232. package/dist/types/modal.d.ts.map +1 -1
  233. package/dist/types/modal.js.map +1 -1
  234. package/dist/types/popover.d.ts +1 -1
  235. package/dist/types/popover.d.ts.map +1 -1
  236. package/dist/types/popover.js.map +1 -1
  237. package/dist/types/popoverMenu.d.ts +1 -1
  238. package/dist/types/popoverMenu.d.ts.map +1 -1
  239. package/dist/types/popoverMenu.js.map +1 -1
  240. package/dist/types/pressable.d.ts +1 -1
  241. package/dist/types/pressable.d.ts.map +1 -1
  242. package/dist/types/pressable.js.map +1 -1
  243. package/dist/types/radio.d.ts +1 -1
  244. package/dist/types/radio.d.ts.map +1 -1
  245. package/dist/types/radio.js.map +1 -1
  246. package/dist/types/surfaceColor.d.ts +6 -0
  247. package/dist/types/surfaceColor.d.ts.map +1 -0
  248. package/dist/types/surfaceColor.js +2 -0
  249. package/dist/types/surfaceColor.js.map +1 -0
  250. package/dist/types/switch.d.ts +1 -1
  251. package/dist/types/switch.d.ts.map +1 -1
  252. package/dist/types/switch.js.map +1 -1
  253. package/dist/types/tabs.d.ts +1 -1
  254. package/dist/types/tabs.d.ts.map +1 -1
  255. package/dist/types/tabs.js.map +1 -1
  256. package/dist/types/text-input.d.ts +1 -1
  257. package/dist/types/text-input.d.ts.map +1 -1
  258. package/dist/types/text-input.js.map +1 -1
  259. package/dist/{theme/types.d.ts → types/theme.d.ts} +19 -3
  260. package/dist/types/theme.d.ts.map +1 -0
  261. package/dist/types/theme.js +2 -0
  262. package/dist/types/theme.js.map +1 -0
  263. package/dist/types/toast.d.ts +2 -2
  264. package/dist/types/toast.d.ts.map +1 -1
  265. package/dist/types/toast.js.map +1 -1
  266. package/dist/types/tooltip.d.ts +1 -1
  267. package/dist/types/tooltip.d.ts.map +1 -1
  268. package/dist/types/tooltip.js.map +1 -1
  269. package/dist/types/typography.d.ts +1 -1
  270. package/dist/types/typography.d.ts.map +1 -1
  271. package/dist/types/typography.js.map +1 -1
  272. package/dist/utils/resolveSpacing.d.ts +1 -1
  273. package/dist/utils/resolveSpacing.d.ts.map +1 -1
  274. package/dist/utils/resolveSpacing.js +1 -1
  275. package/dist/utils/resolveSpacing.js.map +1 -1
  276. package/dist/utils/resolveViewStyles.d.ts +1 -1
  277. package/dist/utils/resolveViewStyles.d.ts.map +1 -1
  278. package/dist/utils/resolveViewStyles.js +1 -1
  279. package/dist/utils/resolveViewStyles.js.map +1 -1
  280. package/package.json +8 -7
  281. package/src/constants/surfaceColor.test.ts +18 -0
  282. package/src/{surfaceColor.ts → constants/surfaceColor.ts} +0 -5
  283. package/src/features/app-bar/adapters/inbound/AppBar.tsx +1 -1
  284. package/src/features/badge/adapters/inbound/Badge.tsx +1 -1
  285. package/src/features/button/adapters/inbound/Button.tsx +2 -2
  286. package/src/features/button/adapters/inbound/IconButton.tsx +1 -1
  287. package/src/features/card/adapters/inbound/Card.tsx +1 -1
  288. package/src/features/font/adapters/inbound/FontProvider.tsx +27 -0
  289. package/src/features/font/adapters/inbound/FontRuntimeContext.tsx +12 -0
  290. package/src/features/font/adapters/inbound/useFontRuntime.ts +9 -0
  291. package/src/features/font/public.ts +2 -0
  292. package/src/features/form/checkbox/adapters/inbound/Checkbox.tsx +2 -2
  293. package/src/features/form/radio/adapters/inbound/Radio.tsx +2 -2
  294. package/src/features/form/switch/adapters/inbound/Switch.tsx +1 -1
  295. package/src/features/form/text-input/adapters/inbound/TextInput.tsx +1 -1
  296. package/src/features/form/text-input/utils/resolveTextInputPresentation.ts +1 -1
  297. package/src/features/icon/adapters/inbound/Icon.tsx +2 -2
  298. package/src/features/image/adapters/inbound/Image.tsx +1 -1
  299. package/src/features/image/utils/resolveImageProps.test.ts +1 -1
  300. package/src/features/image/utils/resolveImageStyle.ts +2 -2
  301. package/src/features/layout/adapters/inbound/Grid.tsx +1 -1
  302. package/src/features/layout/adapters/inbound/ScrollView.tsx +1 -1
  303. package/src/features/layout/adapters/inbound/View.tsx +1 -1
  304. package/src/features/list/adapters/inbound/ListItem.tsx +2 -2
  305. package/src/features/modal/adapters/inbound/Modal.tsx +1 -1
  306. package/src/features/popover-menu/adapters/inbound/PopoverMenu.tsx +1 -1
  307. package/src/features/pressable/adapters/inbound/Pressable.tsx +1 -1
  308. package/src/features/surface/adapters/inbound/Surface.tsx +1 -1
  309. package/src/features/tabs/adapters/inbound/Tab.tsx +1 -1
  310. package/src/features/theme/adapters/inbound/ThemeProvider.tsx +46 -0
  311. package/src/features/theme/adapters/inbound/ThemeRuntimeContext.tsx +14 -0
  312. package/src/features/theme/adapters/inbound/ThemeScope.test.tsx +52 -0
  313. package/src/features/theme/adapters/inbound/ThemeScope.tsx +29 -0
  314. package/src/features/theme/adapters/inbound/useTheme.ts +9 -0
  315. package/src/features/theme/application/use-cases/createTheme.ts +71 -0
  316. package/src/{theme → features/theme/application/use-cases}/createThemeOverrides.test.ts +8 -9
  317. package/src/{theme → features/theme/application/use-cases}/createThemeValidation.test.ts +4 -2
  318. package/src/features/theme/constants.ts +68 -0
  319. package/src/{theme → features/theme/domain}/createSurfaceColorDiagnosticCollector.ts +4 -1
  320. package/src/{theme → features/theme/domain}/createSurfaceSemanticPolicy.ts +2 -2
  321. package/src/features/theme/domain/generatePalette.test.ts +294 -0
  322. package/src/{theme/colorEngine.ts → features/theme/domain/generatePalette.ts} +3 -30
  323. package/src/{theme → features/theme/domain}/inverseSemantics.test.ts +1 -1
  324. package/src/{theme → features/theme/domain}/resolveRoleSemantics.ts +2 -2
  325. package/src/features/theme/domain/resolveSemanticColors.ts +23 -0
  326. package/src/{theme → features/theme/domain}/resolveSurfaceSemanticModel.ts +4 -4
  327. package/src/{theme → features/theme}/public.test.ts +1 -1
  328. package/src/features/theme/public.ts +18 -0
  329. package/src/features/theme/runtime.test.ts +13 -0
  330. package/src/features/theme/runtime.ts +4 -0
  331. package/src/{theme → features/theme/utils}/resolveGlobalTokens.ts +2 -2
  332. package/src/{theme → features/theme/utils}/resolveHeadingTokenOverrides.ts +1 -1
  333. package/src/features/theme/utils/resolveToken.ts +16 -0
  334. package/src/{theme → features/theme/utils}/resolveWeightTokenOverrides.ts +12 -12
  335. package/src/features/toast/adapters/inbound/Toast.tsx +3 -3
  336. package/src/features/tooltip/adapters/inbound/Tooltip.tsx +1 -1
  337. package/src/features/typography/adapters/inbound/Heading.tsx +3 -30
  338. package/src/features/typography/adapters/inbound/Text.tsx +3 -23
  339. package/src/features/typography/utils/resolveHeadingTextStyle.test.ts +1 -1
  340. package/src/features/typography/utils/resolveHeadingTextStyle.ts +2 -2
  341. package/src/index.test.ts +11 -9
  342. package/src/index.ts +30 -15
  343. package/src/internal/resolvers/resolveControlSize.test.ts +1 -1
  344. package/src/internal/resolvers/resolveControlSize.ts +1 -1
  345. package/src/internal/resolvers/resolveFieldPresentation.ts +1 -1
  346. package/src/internal/resolvers/resolveIconSize.ts +1 -1
  347. package/src/internal/resolvers/resolveInteractiveColors.test.ts +1 -1
  348. package/src/internal/resolvers/resolveInteractiveColors.ts +2 -2
  349. package/src/internal/resolvers/resolveSelectionControlColors.test.ts +1 -1
  350. package/src/internal/resolvers/resolveSelectionControlColors.ts +2 -2
  351. package/src/internal/resolvers/resolveSurfaceColor.test.ts +1 -1
  352. package/src/internal/resolvers/resolveSurfaceColor.ts +2 -2
  353. package/src/internal/resolvers/resolveTextColor.test.ts +1 -1
  354. package/src/internal/resolvers/resolveTextColor.ts +2 -2
  355. package/src/internal/resolvers/resolveTextStyles.test.ts +1 -1
  356. package/src/internal/resolvers/resolveTextStyles.ts +1 -1
  357. package/src/structureOwnership.test.ts +16 -0
  358. package/src/types/accordion.ts +1 -1
  359. package/src/types/badge.ts +1 -1
  360. package/src/types/button.ts +1 -1
  361. package/src/types/checkbox.ts +1 -1
  362. package/src/types/font.ts +14 -0
  363. package/src/types/icon.ts +1 -1
  364. package/src/types/image.ts +1 -1
  365. package/src/types/interactionPolicy.test.ts +30 -0
  366. package/src/types/layout.ts +1 -1
  367. package/src/types/list.ts +1 -1
  368. package/src/types/modal.ts +1 -1
  369. package/src/types/popover.ts +1 -1
  370. package/src/types/popoverMenu.ts +1 -1
  371. package/src/types/pressable.ts +1 -1
  372. package/src/types/radio.ts +1 -1
  373. package/src/types/surfaceColor.test.ts +18 -0
  374. package/src/types/surfaceColor.ts +11 -0
  375. package/src/types/switch.ts +1 -1
  376. package/src/types/tabs.ts +1 -1
  377. package/src/types/text-input.ts +1 -1
  378. package/src/{theme/types.ts → types/theme.ts} +22 -13
  379. package/src/types/toast.ts +2 -2
  380. package/src/types/tooltip.ts +1 -1
  381. package/src/types/typography.ts +1 -1
  382. package/src/utils/resolveSpacing.ts +2 -2
  383. package/src/utils/resolveViewStyles.test.ts +1 -1
  384. package/src/utils/resolveViewStyles.ts +2 -2
  385. package/src/webAcceptance.test.tsx +1 -1
  386. package/dist/context/FontContext.d.ts +0 -20
  387. package/dist/context/FontContext.d.ts.map +0 -1
  388. package/dist/context/FontContext.js +0 -27
  389. package/dist/context/FontContext.js.map +0 -1
  390. package/dist/context/TranslationContext.d.ts +0 -22
  391. package/dist/context/TranslationContext.d.ts.map +0 -1
  392. package/dist/context/TranslationContext.js +0 -25
  393. package/dist/context/TranslationContext.js.map +0 -1
  394. package/dist/interactionPolicy.d.ts.map +0 -1
  395. package/dist/interactionPolicy.js.map +0 -1
  396. package/dist/surfaceColor.d.ts.map +0 -1
  397. package/dist/surfaceColor.js.map +0 -1
  398. package/dist/theme/ThemeContext.d.ts +0 -27
  399. package/dist/theme/ThemeContext.d.ts.map +0 -1
  400. package/dist/theme/ThemeContext.js +0 -59
  401. package/dist/theme/ThemeContext.js.map +0 -1
  402. package/dist/theme/colorEngine.d.ts +0 -16
  403. package/dist/theme/colorEngine.d.ts.map +0 -1
  404. package/dist/theme/colorEngine.js.map +0 -1
  405. package/dist/theme/createSurfaceColorDiagnosticCollector.d.ts.map +0 -1
  406. package/dist/theme/createSurfaceColorDiagnosticCollector.js.map +0 -1
  407. package/dist/theme/createSurfaceSemanticPolicy.d.ts.map +0 -1
  408. package/dist/theme/createSurfaceSemanticPolicy.js.map +0 -1
  409. package/dist/theme/createTheme.d.ts +0 -5
  410. package/dist/theme/createTheme.d.ts.map +0 -1
  411. package/dist/theme/createTheme.js +0 -49
  412. package/dist/theme/createTheme.js.map +0 -1
  413. package/dist/theme/defaultTokens.d.ts +0 -3
  414. package/dist/theme/defaultTokens.d.ts.map +0 -1
  415. package/dist/theme/defaultTokens.js.map +0 -1
  416. package/dist/theme/index.d.ts +0 -3
  417. package/dist/theme/index.d.ts.map +0 -1
  418. package/dist/theme/index.js +0 -3
  419. package/dist/theme/index.js.map +0 -1
  420. package/dist/theme/public.d.ts +0 -5
  421. package/dist/theme/public.d.ts.map +0 -1
  422. package/dist/theme/public.js +0 -5
  423. package/dist/theme/public.js.map +0 -1
  424. package/dist/theme/resolveGlobalTokens.d.ts.map +0 -1
  425. package/dist/theme/resolveGlobalTokens.js.map +0 -1
  426. package/dist/theme/resolveHeadingTokenOverrides.d.ts.map +0 -1
  427. package/dist/theme/resolveHeadingTokenOverrides.js.map +0 -1
  428. package/dist/theme/resolveNumericTokenOverrides.d.ts.map +0 -1
  429. package/dist/theme/resolveNumericTokenOverrides.js.map +0 -1
  430. package/dist/theme/resolveRoleSemantics.d.ts.map +0 -1
  431. package/dist/theme/resolveRoleSemantics.js.map +0 -1
  432. package/dist/theme/resolveSurfaceSemanticModel.d.ts.map +0 -1
  433. package/dist/theme/resolveSurfaceSemanticModel.js.map +0 -1
  434. package/dist/theme/resolveToken.d.ts.map +0 -1
  435. package/dist/theme/resolveToken.js +0 -19
  436. package/dist/theme/resolveToken.js.map +0 -1
  437. package/dist/theme/resolveWeightTokenOverrides.d.ts.map +0 -1
  438. package/dist/theme/resolveWeightTokenOverrides.js.map +0 -1
  439. package/dist/theme/surfaceColorPolicy.d.ts +0 -8
  440. package/dist/theme/surfaceColorPolicy.d.ts.map +0 -1
  441. package/dist/theme/surfaceColorPolicy.js +0 -8
  442. package/dist/theme/surfaceColorPolicy.js.map +0 -1
  443. package/dist/theme/types.d.ts.map +0 -1
  444. package/dist/theme/types.js +0 -2
  445. package/dist/theme/types.js.map +0 -1
  446. package/dist/utils/deepEqual.d.ts +0 -6
  447. package/dist/utils/deepEqual.d.ts.map +0 -1
  448. package/dist/utils/deepEqual.js +0 -36
  449. package/dist/utils/deepEqual.js.map +0 -1
  450. package/dist/utils/deepMerge.d.ts +0 -6
  451. package/dist/utils/deepMerge.d.ts.map +0 -1
  452. package/dist/utils/deepMerge.js +0 -26
  453. package/dist/utils/deepMerge.js.map +0 -1
  454. package/src/context/FontContext.tsx +0 -59
  455. package/src/context/TranslationContext.tsx +0 -50
  456. package/src/interactionPolicy.test.ts +0 -86
  457. package/src/surfaceColor.test.ts +0 -44
  458. package/src/theme/ThemeContext.tsx +0 -94
  459. package/src/theme/colorEngine.test.ts +0 -302
  460. package/src/theme/createTheme.ts +0 -60
  461. package/src/theme/defaultTokens.ts +0 -61
  462. package/src/theme/index.ts +0 -2
  463. package/src/theme/public.ts +0 -4
  464. package/src/theme/resolveToken.ts +0 -32
  465. package/src/theme/surfaceColorPolicy.ts +0 -7
  466. package/src/utils/deepEqual.ts +0 -34
  467. package/src/utils/deepMerge.test.ts +0 -113
  468. package/src/utils/deepMerge.ts +0 -29
  469. /package/dist/{surfaceColor.js → constants/surfaceColor.js} +0 -0
  470. /package/dist/{theme → features/theme/domain}/createSurfaceColorDiagnosticCollector.js +0 -0
  471. /package/dist/{theme → features/theme/domain}/resolveSurfaceSemanticModel.js +0 -0
  472. /package/dist/{theme → features/theme/utils}/resolveHeadingTokenOverrides.js +0 -0
  473. /package/dist/{theme → features/theme/utils}/resolveNumericTokenOverrides.d.ts +0 -0
  474. /package/dist/{theme → features/theme/utils}/resolveNumericTokenOverrides.js +0 -0
  475. /package/dist/{interactionPolicy.d.ts → types/interactionPolicy.d.ts} +0 -0
  476. /package/dist/{interactionPolicy.js → types/interactionPolicy.js} +0 -0
  477. /package/src/{theme → features/theme/utils}/resolveNumericTokenOverrides.ts +0 -0
  478. /package/src/{interactionPolicy.ts → types/interactionPolicy.ts} +0 -0
@@ -1,3 +0,0 @@
1
- export * from './public';
2
- export * from './ThemeContext';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC","sourcesContent":["export * from './public';\nexport * from './ThemeContext';\n"]}
@@ -1,5 +0,0 @@
1
- export * from './colorEngine';
2
- export * from './createTheme';
3
- export * from './resolveToken';
4
- export * from './types';
5
- //# sourceMappingURL=public.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/theme/public.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC"}
@@ -1,5 +0,0 @@
1
- export * from './colorEngine';
2
- export * from './createTheme';
3
- export * from './resolveToken';
4
- export * from './types';
5
- //# sourceMappingURL=public.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/theme/public.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC","sourcesContent":["export * from './colorEngine';\nexport * from './createTheme';\nexport * from './resolveToken';\nexport * from './types';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveGlobalTokens.d.ts","sourceRoot":"","sources":["../../src/theme/resolveGlobalTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAMtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,iBAAiB,GAAG,IAAI,CAC3B,WAAW,EACX,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,CACzD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,yBAAyB,GAAG,iBAAiB,CAmC5F"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveGlobalTokens.js","sourceRoot":"","sources":["../../src/theme/resolveGlobalTokens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAQ5E,MAAM,UAAU,mBAAmB,CAAC,SAAqC;IACvE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC;IACzC,OAAO;QACL,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;SAC/D;QACD,KAAK,EAAE;YACL,GAAG,cAAc,CAAC,KAAK;YACvB,GAAG,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;SAC3D;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,4BAA4B,CACpC,cAAc,CAAC,UAAU,CAAC,QAAQ,EAClC,UAAU,EAAE,QAAQ,CACrB;YACD,KAAK,EAAE;gBACL,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK;gBAClC,GAAG,4BAA4B,CAAC,kBAAkB,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC;aAC7E;YACD,OAAO,EAAE;gBACP,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO;gBACpC,GAAG,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC;aACpD;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;gBACrD,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE;aACtD;SACF;QACD,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;SAC/D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAgD;IAC1E,IAAI,SAAS,EAAE,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS,EAAE,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC","sourcesContent":["import type { ThemeGlobalTokenOverrides } from '@ankhorage/contracts';\n\nimport { DEFAULT_TOKENS } from './defaultTokens';\nimport { resolveHeadingTokenOverrides } from './resolveHeadingTokenOverrides';\nimport { resolveNumericTokenOverrides } from './resolveNumericTokenOverrides';\nimport { resolveWeightTokenOverrides } from './resolveWeightTokenOverrides';\nimport type { ThemeTokens } from './types';\n\ntype GlobalThemeTokens = Omit<\n ThemeTokens,\n 'colors' | 'swatches' | 'semantics' | 'colorDiagnostics'\n>;\n\nexport function resolveGlobalTokens(overrides?: ThemeGlobalTokenOverrides): GlobalThemeTokens {\n validateZeroTokens(overrides);\n const typography = overrides?.typography;\n return {\n spacing: {\n ...DEFAULT_TOKENS.spacing,\n ...resolveNumericTokenOverrides('spacing', overrides?.spacing),\n },\n radii: {\n ...DEFAULT_TOKENS.radii,\n ...resolveNumericTokenOverrides('radii', overrides?.radii),\n },\n typography: {\n headings: resolveHeadingTokenOverrides(\n DEFAULT_TOKENS.typography.headings,\n typography?.headings,\n ),\n sizes: {\n ...DEFAULT_TOKENS.typography.sizes,\n ...resolveNumericTokenOverrides('typography.sizes', typography?.sizes, true),\n },\n weights: {\n ...DEFAULT_TOKENS.typography.weights,\n ...resolveWeightTokenOverrides(typography?.weights),\n },\n fonts: {\n normal: { ...DEFAULT_TOKENS.typography.fonts.normal },\n italic: { ...DEFAULT_TOKENS.typography.fonts.italic },\n },\n },\n shadows: {\n ...DEFAULT_TOKENS.shadows,\n ...resolveNumericTokenOverrides('shadows', overrides?.shadows),\n },\n };\n}\n\nfunction validateZeroTokens(overrides: ThemeGlobalTokenOverrides | undefined): void {\n if (overrides?.spacing?.none !== undefined && overrides.spacing.none !== 0) {\n throw new RangeError('Theme token spacing.none must remain 0.');\n }\n if (overrides?.radii?.none !== undefined && overrides.radii.none !== 0) {\n throw new RangeError('Theme token radii.none must remain 0.');\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveHeadingTokenOverrides.d.ts","sourceRoot":"","sources":["../../src/theme/resolveHeadingTokenOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;AAO3D,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC,GAAG,SAAS,GAC/E,aAAa,CAUf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveHeadingTokenOverrides.js","sourceRoot":"","sources":["../../src/theme/resolveHeadingTokenOverrides.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,4BAA4B,CAC1C,QAAuB,EACvB,SAAgF;IAEhF,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO;QACL,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAAgF;IAEhF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,qCAAqC,GAAG,GAAG,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,GAAW,EACX,QAAsB,EACtB,QAAqD;IAErD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC7C,MAAM,UAAU,GAAG,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;IAC/D,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,UAAU,CAClB,mCAAmC,GAAG,yCAAyC,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAClB,mCAAmC,GAAG,+CAA+C,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,kDAAkD,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import type { ThemeTypographyHeadingOverrides } from '@ankhorage/contracts';\n\nimport type { ThemeTokens } from './types';\n\ntype HeadingTokens = ThemeTokens['typography']['headings'];\ntype HeadingToken = HeadingTokens[1];\ntype HeadingWeight = HeadingToken['weight'];\n\nconst HEADING_KEYS = new Set<string>(['1', '2', '3', '4', '5', '6']);\nconst HEADING_WEIGHTS = new Set<string>(['regular', 'medium', 'semiBold', 'bold']);\n\nexport function resolveHeadingTokenOverrides(\n defaults: HeadingTokens,\n overrides: Readonly<Record<string, ThemeTypographyHeadingOverrides>> | undefined,\n): HeadingTokens {\n validateHeadingKeys(overrides);\n return {\n 1: resolveHeading('1', defaults[1], overrides?.['1']),\n 2: resolveHeading('2', defaults[2], overrides?.['2']),\n 3: resolveHeading('3', defaults[3], overrides?.['3']),\n 4: resolveHeading('4', defaults[4], overrides?.['4']),\n 5: resolveHeading('5', defaults[5], overrides?.['5']),\n 6: resolveHeading('6', defaults[6], overrides?.['6']),\n };\n}\n\nfunction validateHeadingKeys(\n overrides: Readonly<Record<string, ThemeTypographyHeadingOverrides>> | undefined,\n): void {\n for (const key of Object.keys(overrides ?? {})) {\n if (!HEADING_KEYS.has(key)) throw new RangeError(`Unknown typography heading token: ${key}.`);\n }\n}\n\nfunction resolveHeading(\n key: string,\n fallback: HeadingToken,\n override: ThemeTypographyHeadingOverrides | undefined,\n): HeadingToken {\n const size = override?.size ?? fallback.size;\n const lineHeight = override?.lineHeight ?? fallback.lineHeight;\n const weight = override?.weight ?? fallback.weight;\n if (!Number.isFinite(size) || size <= 0) {\n throw new RangeError(\n `Theme token typography.headings.${key}.size must be a finite positive number.`,\n );\n }\n if (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n throw new RangeError(\n `Theme token typography.headings.${key}.lineHeight must be a finite positive number.`,\n );\n }\n if (!isHeadingWeight(weight)) {\n throw new RangeError(`Invalid heading weight for typography.headings.${key}: ${weight}.`);\n }\n return { size, lineHeight, weight };\n}\n\nfunction isHeadingWeight(value: string): value is HeadingWeight {\n return HEADING_WEIGHTS.has(value);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveNumericTokenOverrides.d.ts","sourceRoot":"","sources":["../../src/theme/resolveNumericTokenOverrides.ts"],"names":[],"mappings":"AAAA,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,EACvD,eAAe,UAAQ,GACtB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAclC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveNumericTokenOverrides.js","sourceRoot":"","sources":["../../src/theme/resolveNumericTokenOverrides.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,4BAA4B,CAC1C,MAAc,EACd,SAAuD,EACvD,eAAe,GAAG,KAAK;IAEvB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,WAAW,GAAG,eAAe;gBACjC,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,8BAA8B,CAAC;YACnC,MAAM,IAAI,UAAU,CAAC,eAAe,MAAM,IAAI,KAAK,YAAY,WAAW,GAAG,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;AAC1B,CAAC","sourcesContent":["export function resolveNumericTokenOverrides(\n family: string,\n overrides: Readonly<Record<string, number>> | undefined,\n requirePositive = false,\n): Readonly<Record<string, number>> {\n if (overrides === undefined) return {};\n\n for (const [token, value] of Object.entries(overrides)) {\n const invalid = !Number.isFinite(value) || (requirePositive ? value <= 0 : value < 0);\n if (invalid) {\n const expectation = requirePositive\n ? 'a finite positive number'\n : 'a finite non-negative number';\n throw new RangeError(`Theme token ${family}.${token} must be ${expectation}.`);\n }\n }\n\n return { ...overrides };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveRoleSemantics.d.ts","sourceRoot":"","sources":["../../src/theme/resolveRoleSemantics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,UAAU,yBAAyB;IACjC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,UAAU,EAAE,QAAQ,CAAC;IACrB,YAAY,EAAE,QAAQ,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,CACjB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,QAAQ,EACpB,UAAU,EAAE,QAAQ,EACpB,eAAe,EAAE,MAAM,KACpB,QAAQ,CAAC;IACd,aAAa,EAAE,QAAQ,CAAC;IACxB,OAAO,EAAE,QAAQ,CAAC;IAClB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,KAAK,QAAQ,CAAC;IAC1F,MAAM,EAAE,WAAW,CAAC;CACrB;AAWD,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,KAAK,EACL,EAAE,EACF,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,MAAM,GACP,EAAE,yBAAyB,GAAG,aAAa,CAiC3C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveRoleSemantics.js","sourceRoot":"","sources":["../../src/theme/resolveRoleSemantics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AA+B5D,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB,CAAC,EACnC,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,KAAK,EACL,EAAE,EACF,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,MAAM,GACoB;IAC1B,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAEnE,OAAO;QACL,GAAG,MAAM;QACT,OAAO;QACP,aAAa;QACb,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,YAAY,CAAC;QAC3F,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,YAAY,CAAC;QAC7F,YAAY,EAAE,gBAAgB,CAC5B,GAAG,EAAE,SAAS,EACd,MAAM,CAAC,MAAM,EACb,oBAAoB,CAAC,YAAY,CAClC;QACD,UAAU,EAAE,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,YAAY,CAAC;QAC5F,eAAe,EAAE,gBAAgB,CAC/B,GAAG,EAAE,YAAY,EACjB,MAAM,CAAC,SAAS,EAChB,oBAAoB,CAAC,YAAY,CAClC;QACD,gBAAgB,EAAE,gBAAgB,CAChC,GAAG,EAAE,aAAa,EAClB,MAAM,CAAC,UAAU,EACjB,oBAAoB,CAAC,YAAY,CAClC;QACD,UAAU;QACV,cAAc,EAAE,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,YAAY,EACZ,UAAU,EACV,oBAAoB,CAAC,gBAAgB,CACtC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAmB,EACnB,MAAe,EACf,IAAe,EACf,KAAgB;IAEhB,OAAO;QACL,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;QACzB,KAAK,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KAC/C,CAAC;AACJ,CAAC","sourcesContent":["import type { ColorSwatch, HexColor } from '@ankhorage/color-theory';\n\nimport { SURFACE_COLOR_POLICY } from './surfaceColorPolicy';\nimport type { RoleSemantics } from './types';\n\ninterface ResolveRoleSemanticsInput {\n base?: HexColor;\n disabledBg: HexColor;\n disabledText: HexColor;\n hover?: HexColor;\n id: string;\n isDark: boolean;\n measureForeground: (\n id: string,\n foreground: HexColor,\n background: HexColor,\n minimumContrast: number,\n ) => HexColor;\n onSurfaceText: HexColor;\n outline: HexColor;\n selectForeground: (id: string, background: HexColor, minimumContrast: number) => HexColor;\n swatch: ColorSwatch;\n}\n\ninterface RoleStateColors {\n base: HexColor;\n hover: HexColor;\n softActive: HexColor;\n softBg: HexColor;\n softHover: HexColor;\n strong: HexColor;\n}\n\n/** Resolve every filled role state together with its measured foreground. */\nexport function resolveRoleSemantics({\n base,\n disabledBg,\n disabledText,\n hover,\n id,\n isDark,\n measureForeground,\n onSurfaceText,\n outline,\n selectForeground,\n swatch,\n}: ResolveRoleSemanticsInput): RoleSemantics {\n const states = resolveRoleStateColors(swatch, isDark, base, hover);\n\n return {\n ...states,\n outline,\n onSurfaceText,\n onSolidText: selectForeground(`${id}.base`, states.base, SURFACE_COLOR_POLICY.textContrast),\n onHoverText: selectForeground(`${id}.hover`, states.hover, SURFACE_COLOR_POLICY.textContrast),\n onStrongText: selectForeground(\n `${id}.strong`,\n states.strong,\n SURFACE_COLOR_POLICY.textContrast,\n ),\n onSoftText: selectForeground(`${id}.soft`, states.softBg, SURFACE_COLOR_POLICY.textContrast),\n onSoftHoverText: selectForeground(\n `${id}.softHover`,\n states.softHover,\n SURFACE_COLOR_POLICY.textContrast,\n ),\n onSoftActiveText: selectForeground(\n `${id}.softActive`,\n states.softActive,\n SURFACE_COLOR_POLICY.textContrast,\n ),\n disabledBg,\n onDisabledText: measureForeground(\n `${id}.disabled`,\n disabledText,\n disabledBg,\n SURFACE_COLOR_POLICY.disabledContrast,\n ),\n };\n}\n\nfunction resolveRoleStateColors(\n swatch: ColorSwatch,\n isDark: boolean,\n base?: HexColor,\n hover?: HexColor,\n): RoleStateColors {\n return {\n base: base ?? swatch[500],\n hover: hover ?? (isDark ? swatch[400] : swatch[600]),\n strong: isDark ? swatch[300] : swatch[700],\n softBg: isDark ? swatch[900] : swatch[100],\n softHover: isDark ? swatch[800] : swatch[200],\n softActive: isDark ? swatch[700] : swatch[300],\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveSurfaceSemanticModel.d.ts","sourceRoot":"","sources":["../../src/theme/resolveSurfaceSemanticModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,wBAAwB,EAExB,QAAQ,EACR,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAIV,uBAAuB,EACvB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,KAAK,sBAAsB,GAAG,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAkBnE,UAAU,gCAAgC;IACxC,SAAS,EAAE,wBAAwB,CAAC;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,yBAAyB,CAAC;IACtC,QAAQ,EAAE,sBAAsB,CAAC;CAClC;AAED,4FAA4F;AAC5F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,GAAG;IACpF,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C,CA2CA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveSurfaceSemanticModel.js","sourceRoot":"","sources":["../../src/theme/resolveSurfaceSemanticModel.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ColorSelectionTarget,\n ColorSwatch,\n GeneratedThemeModeColors,\n GeneratedThemeSwatches,\n HexColor,\n SemanticColorReferenceMap,\n SemanticColorToken,\n ThemeColorMode,\n} from '@ankhorage/color-theory';\nimport { createDefaultSemanticStatusSwatches } from '@ankhorage/color-theory';\n\nimport { createSurfaceColorDiagnosticCollector } from './createSurfaceColorDiagnosticCollector';\nimport { createSurfaceSemanticPolicy } from './createSurfaceSemanticPolicy';\nimport { resolveRoleSemantics } from './resolveRoleSemantics';\nimport type {\n BorderSemantics,\n ContentSemantics,\n RoleSemantics,\n SurfaceColorDiagnostics,\n ThemeSemantics,\n} from './types';\n\ntype ResolvedSemanticColors = Record<SemanticColorToken, HexColor>;\n\ninterface SemanticResolutionContext {\n collector: ReturnType<typeof createSurfaceColorDiagnosticCollector>;\n generated: GeneratedThemeModeColors;\n isDark: boolean;\n mode: ThemeColorMode;\n neutralSwatch: ColorSwatch;\n policy: ReturnType<typeof createSurfaceSemanticPolicy>;\n quaternarySwatch: ColorSwatch;\n references: SemanticColorReferenceMap;\n resolved: ResolvedSemanticColors;\n secondarySwatch: ColorSwatch;\n statusSwatches: ReturnType<typeof createDefaultSemanticStatusSwatches>;\n swatches: GeneratedThemeSwatches;\n tertiarySwatch: ColorSwatch;\n}\n\ninterface ResolveSurfaceSemanticModelInput {\n generated: GeneratedThemeModeColors;\n mode: ThemeColorMode;\n references: SemanticColorReferenceMap;\n resolved: ResolvedSemanticColors;\n}\n\n/** Resolve the complete Surface-owned semantic model from canonical Color Theory output. */\nexport function resolveSurfaceSemanticModel(input: ResolveSurfaceSemanticModelInput): {\n semantics: ThemeSemantics;\n colorDiagnostics: SurfaceColorDiagnostics;\n} {\n const context = createResolutionContext(input);\n const roles = resolveSemanticRoles(context);\n const inverseSurface = context.isDark ? context.neutralSwatch[50] : context.neutralSwatch[900];\n const inverseContent = context.isDark ? context.neutralSwatch[900] : context.neutralSwatch[50];\n const neutral = context.policy.buildNeutral(context.neutralSwatch);\n const surface = context.policy.buildSurface(inverseSurface);\n const content = resolveContentSemantics(context, neutral.textSubtle, inverseContent);\n const border = resolveBorderSemantics(context, roles.brand.outline);\n context.policy.measureContent(content, surface);\n\n return {\n semantics: {\n neutral,\n brand: roles.brand,\n secondary: roles.secondary,\n accent: roles.accent,\n highlight: roles.highlight,\n danger: roles.danger,\n success: roles.success,\n warning: roles.warning,\n error: roles.danger,\n info: roles.info,\n surface,\n content,\n border,\n selection: {\n background: roles.brand.softBg,\n content: roles.brand.onSoftText,\n border: border.focus,\n },\n action: { primary: roles.brand, neutral: roles.neutralAction, danger: roles.danger },\n },\n colorDiagnostics: {\n mode: context.mode,\n generated: context.generated,\n semanticReferences: context.references,\n statusSwatches: context.statusSwatches.diagnostics,\n selections: context.collector.selections,\n contrasts: context.collector.contrasts,\n surfaceSeparation: context.policy.measureSurfaceSeparation(surface),\n },\n };\n}\n\nfunction createResolutionContext(\n input: ResolveSurfaceSemanticModelInput,\n): SemanticResolutionContext {\n const { generated, mode, references, resolved } = input;\n const { swatches } = generated;\n const collector = createSurfaceColorDiagnosticCollector();\n const isDark = mode === 'dark';\n return {\n collector,\n generated,\n isDark,\n mode,\n neutralSwatch: swatches.neutral,\n policy: createSurfaceSemanticPolicy(resolved, isDark, collector),\n quaternarySwatch: swatches.quaternary ?? swatches.primary,\n references,\n resolved,\n secondarySwatch: swatches.secondary ?? swatches.primary,\n statusSwatches: createDefaultSemanticStatusSwatches(),\n swatches,\n tertiarySwatch: swatches.tertiary ?? swatches.primary,\n };\n}\n\nfunction resolveBorderSemantics(\n context: SemanticResolutionContext,\n focus: string,\n): BorderSemantics {\n const { collector, neutralSwatch, policy, resolved } = context;\n return {\n default: collector.selectColor(\n 'border.default',\n neutralSwatch,\n policy.neutralTarget(),\n policy.adjacentSurfaceContexts,\n policy.tiePolicy,\n ),\n subtle: resolved.border,\n strong: collector.selectColor(\n 'border.strong',\n neutralSwatch,\n policy.strongNeutralTarget(),\n policy.adjacentSurfaceContexts,\n policy.tiePolicy,\n ),\n divider: resolved.divider,\n focus,\n };\n}\n\nfunction resolveContentSemantics(\n context: SemanticResolutionContext,\n subtle: string,\n inverse: string,\n): ContentSemantics {\n const { collector, policy, resolved, secondarySwatch, swatches } = context;\n return {\n default: resolved.text,\n muted: resolved.textMuted,\n subtle,\n disabled: resolved.disabledText,\n icon: resolved.text,\n link: collector.selectColor(\n 'content.link',\n swatches.primary,\n policy.textTarget(),\n policy.textSurfaceContexts,\n policy.tiePolicy,\n ),\n visited: collector.selectColor(\n 'content.visited',\n secondarySwatch,\n policy.textTarget(),\n policy.textSurfaceContexts,\n policy.tiePolicy,\n ),\n inverse,\n };\n}\n\nfunction resolveRole(\n context: SemanticResolutionContext,\n id: string,\n swatch: ColorSwatch,\n options: { base?: HexColor; hover?: HexColor; target?: ColorSelectionTarget } = {},\n): RoleSemantics {\n const { collector, isDark, policy, resolved } = context;\n return resolveRoleSemantics({\n base: options.base,\n disabledBg: resolved.disabledBg,\n disabledText: resolved.disabledText,\n hover: options.hover,\n id,\n isDark,\n measureForeground: collector.measureForeground,\n onSurfaceText: collector.selectColor(\n `${id}.content`,\n swatch,\n policy.textTarget(),\n policy.textSurfaceContexts,\n policy.tiePolicy,\n ),\n outline: collector.selectColor(\n `${id}.outline`,\n swatch,\n options.target ?? policy.roleTarget(),\n policy.adjacentSurfaceContexts,\n policy.tiePolicy,\n ),\n selectForeground: collector.selectForeground,\n swatch,\n });\n}\n\nfunction resolveSemanticRoles(context: SemanticResolutionContext) {\n const { neutralSwatch, resolved, secondarySwatch, statusSwatches, swatches } = context;\n return {\n brand: resolveRole(context, 'brand', swatches.primary, {\n base: resolved.action,\n hover: resolved.actionEmphasis,\n }),\n secondary: resolveRole(context, 'secondary', secondarySwatch),\n accent: resolveRole(context, 'accent', context.tertiarySwatch),\n highlight: resolveRole(context, 'highlight', context.quaternarySwatch),\n danger: resolveRole(context, 'danger', statusSwatches.swatches.danger),\n success: resolveRole(context, 'success', statusSwatches.swatches.success),\n warning: resolveRole(context, 'warning', statusSwatches.swatches.warning),\n info: resolveRole(context, 'info', statusSwatches.swatches.info),\n neutralAction: resolveRole(context, 'neutral', neutralSwatch, {\n target: context.policy.neutralTarget(),\n }),\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveToken.d.ts","sourceRoot":"","sources":["../../src/theme/resolveToken.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,KAAK,aAAa,CAAC,IAAI,EAAE,MAAM,IAAI,MAAM,SAAS,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAErF;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,SAAS,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAC7C,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,EAC1C,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAkBvD"}
@@ -1,19 +0,0 @@
1
- /**
2
- * 2. The Generic Function
3
- */
4
- export function resolveToken(map, value) {
5
- // Undefined check
6
- if (value === undefined) {
7
- return undefined;
8
- }
9
- // Runtime check: Is 'value' a key in 'map'?
10
- if ((typeof value === 'string' || typeof value === 'number') &&
11
- Object.prototype.hasOwnProperty.call(map, value)) {
12
- // Return the mapped token
13
- // We cast to the specific conditional type, strictly safer than 'any'
14
- return map[value];
15
- }
16
- // Fallback: Return raw value
17
- return value;
18
- }
19
- //# sourceMappingURL=resolveToken.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveToken.js","sourceRoot":"","sources":["../../src/theme/resolveToken.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,UAAU,YAAY,CAG1B,GAAS,EAAE,KAAa;IACxB,kBAAkB;IAClB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAwC,CAAC;IAClD,CAAC;IAED,4CAA4C;IAC5C,IACE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAChD,CAAC;QACD,0BAA0B;QAC1B,sEAAsE;QACtE,OAAO,GAAG,CAAC,KAAmB,CAAgC,CAAC;IACjE,CAAC;IAED,6BAA6B;IAC7B,OAAO,KAAoC,CAAC;AAC9C,CAAC","sourcesContent":["/**\n * 1. Define the Conditional Logic\n * If TValue is a key of TMap, return the map's value type.\n * Otherwise, return TValue itself.\n */\ntype ResolvedToken<TMap, TValue> = TValue extends keyof TMap ? TMap[TValue] : TValue;\n\n/**\n * 2. The Generic Function\n */\nexport function resolveToken<\n TMap extends Record<string | number, unknown>,\n TValue extends string | number | undefined,\n>(map: TMap, value: TValue): ResolvedToken<TMap, TValue> {\n // Undefined check\n if (value === undefined) {\n return undefined as ResolvedToken<TMap, TValue>;\n }\n\n // Runtime check: Is 'value' a key in 'map'?\n if (\n (typeof value === 'string' || typeof value === 'number') &&\n Object.prototype.hasOwnProperty.call(map, value)\n ) {\n // Return the mapped token\n // We cast to the specific conditional type, strictly safer than 'any'\n return map[value as keyof TMap] as ResolvedToken<TMap, TValue>;\n }\n\n // Fallback: Return raw value\n return value as ResolvedToken<TMap, TValue>;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveWeightTokenOverrides.d.ts","sourceRoot":"","sources":["../../src/theme/resolveWeightTokenOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA2B1C,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACtD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CActC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolveWeightTokenOverrides.js","sourceRoot":"","sources":["../../src/theme/resolveWeightTokenOverrides.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS;IACxC,MAAM;IACN,YAAY;IACZ,OAAO;IACP,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;IACN,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS;IACzC,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,UAAU,2BAA2B,CACzC,SAAuD;IAEvD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,UAAU,CAAC,oCAAoC,KAAK,GAAG,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,UAAU,CAAC,8CAA8C,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;QACzF,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC","sourcesContent":["import type { FontWeight } from './types';\n\nconst WEIGHT_TOKEN_KEYS = new Set<string>([\n 'thin',\n 'extraLight',\n 'light',\n 'regular',\n 'medium',\n 'semiBold',\n 'bold',\n 'extraBold',\n 'black',\n]);\nconst FONT_WEIGHT_VALUES = new Set<string>([\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n 'bold',\n 'normal',\n]);\n\nexport function resolveWeightTokenOverrides(\n overrides: Readonly<Record<string, string>> | undefined,\n): Readonly<Record<string, FontWeight>> {\n if (overrides === undefined) return {};\n\n const resolved: Record<string, FontWeight> = {};\n for (const [token, value] of Object.entries(overrides)) {\n if (!WEIGHT_TOKEN_KEYS.has(token)) {\n throw new RangeError(`Unknown typography weight token: ${token}.`);\n }\n if (!isFontWeight(value)) {\n throw new RangeError(`Invalid font weight for typography.weights.${token}: ${value}.`);\n }\n resolved[token] = value;\n }\n return resolved;\n}\n\nfunction isFontWeight(value: string): value is FontWeight {\n return FONT_WEIGHT_VALUES.has(value);\n}\n"]}
@@ -1,8 +0,0 @@
1
- /** Canonical measurable thresholds used while Surface resolves runtime color semantics. */
2
- export declare const SURFACE_COLOR_POLICY: {
3
- readonly disabledContrast: 3;
4
- readonly surfaceSeparation: 1.05;
5
- readonly textContrast: 4.5;
6
- readonly uiContrast: 3;
7
- };
8
- //# sourceMappingURL=surfaceColorPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceColorPolicy.d.ts","sourceRoot":"","sources":["../../src/theme/surfaceColorPolicy.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC"}
@@ -1,8 +0,0 @@
1
- /** Canonical measurable thresholds used while Surface resolves runtime color semantics. */
2
- export const SURFACE_COLOR_POLICY = {
3
- disabledContrast: 3,
4
- surfaceSeparation: 1.05,
5
- textContrast: 4.5,
6
- uiContrast: 3,
7
- };
8
- //# sourceMappingURL=surfaceColorPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"surfaceColorPolicy.js","sourceRoot":"","sources":["../../src/theme/surfaceColorPolicy.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,CAAC;CACL,CAAC","sourcesContent":["/** Canonical measurable thresholds used while Surface resolves runtime color semantics. */\nexport const SURFACE_COLOR_POLICY = {\n disabledContrast: 3,\n surfaceSeparation: 1.05,\n textContrast: 4.5,\n uiContrast: 3,\n} as const;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/theme/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ColorSwatchDiagnostics,\n ColorSwatchSelectionResult,\n DefaultSemanticStatusRole,\n GeneratedThemeModeColors,\n GeneratedThemeSwatches,\n HexColor,\n SemanticColorReferenceMap,\n ThemeColorMode,\n} from '@ankhorage/color-theory';\nimport type { ThemeConfig as ContractsThemeConfig } from '@ankhorage/contracts';\n\nexport type {\n ColorHarmony,\n ColorSwatch,\n ColorSwatchStep,\n GeneratedColorRole,\n GeneratedThemeModeColors,\n GeneratedThemeSwatches,\n HexColor,\n SemanticColorReferenceMap,\n SemanticColorToken,\n} from '@ankhorage/color-theory';\nexport type { ThemeConfig, ThemeModeConfig } from '@ankhorage/contracts';\n\nexport interface NeutralSemantics {\n bg: string;\n bgSubtle: string;\n surface: string;\n surfaceHover: string;\n surfaceActive: string;\n border: string;\n borderStrong: string;\n divider: string;\n text: string;\n textMuted: string;\n textSubtle: string;\n disabledBg: string;\n disabledText: string;\n}\n\nexport interface RoleSemantics {\n base: string;\n hover: string;\n strong: string;\n softBg: string;\n softHover: string;\n softActive: string;\n outline: string;\n onSurfaceText: string;\n onSolidText: string;\n onHoverText: string;\n onStrongText: string;\n onSoftText: string;\n onSoftHoverText: string;\n onSoftActiveText: string;\n disabledBg: string;\n onDisabledText: string;\n}\n\nexport interface SurfaceSemantics {\n default: string;\n subtle: string;\n raised: string;\n sunken: string;\n overlay: string;\n scrim: string;\n disabled: string;\n inverse: string;\n}\n\nexport interface ContentSemantics {\n default: string;\n muted: string;\n subtle: string;\n disabled: string;\n icon: string;\n link: string;\n visited: string;\n inverse: string;\n}\n\nexport interface BorderSemantics {\n default: string;\n subtle: string;\n strong: string;\n divider: string;\n focus: string;\n}\n\nexport interface SelectionSemantics {\n background: string;\n content: string;\n border: string;\n}\n\nexport interface ActionSemantics {\n primary: RoleSemantics;\n neutral: RoleSemantics;\n danger: RoleSemantics;\n}\n\nexport interface ThemeSemantics {\n neutral: NeutralSemantics;\n brand: RoleSemantics;\n secondary: RoleSemantics;\n accent: RoleSemantics;\n highlight: RoleSemantics;\n danger: RoleSemantics;\n success: RoleSemantics;\n warning: RoleSemantics;\n error: RoleSemantics;\n info: RoleSemantics;\n surface: SurfaceSemantics;\n content: ContentSemantics;\n border: BorderSemantics;\n selection: SelectionSemantics;\n action: ActionSemantics;\n}\n\nexport interface SurfaceContrastDiagnostic {\n id: string;\n foreground: HexColor;\n background: HexColor;\n contrast: number;\n minimumContrast: number;\n passes: boolean;\n}\n\n/** A Color Theory swatch selection together with its stable Surface purpose. */\nexport interface SurfaceColorSelectionDiagnostic {\n id: string;\n result: ColorSwatchSelectionResult;\n}\n\n/** Owner-produced color evidence used to explain a resolved Surface theme. */\nexport interface SurfaceColorDiagnostics {\n mode: ThemeColorMode;\n generated: GeneratedThemeModeColors;\n semanticReferences: SemanticColorReferenceMap;\n statusSwatches: Record<DefaultSemanticStatusRole, ColorSwatchDiagnostics>;\n selections: readonly SurfaceColorSelectionDiagnostic[];\n contrasts: readonly SurfaceContrastDiagnostic[];\n surfaceSeparation: readonly SurfaceContrastDiagnostic[];\n}\n\nexport type FontWeight =\n '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | 'bold' | 'normal';\n\nexport interface ThemeTokens {\n colors: {\n primary: string;\n secondary: string;\n accent: string;\n highlight: string;\n tertiary: string;\n quaternary: string;\n background: string;\n surface: string;\n text: string;\n textSecondary: string;\n border: string;\n error: string;\n success: string;\n warning: string;\n info: string;\n [key: string]: string;\n };\n swatches: GeneratedThemeSwatches;\n semantics: ThemeSemantics;\n /** Generated owner evidence; this is runtime output and is not persisted in ThemeConfig. */\n colorDiagnostics: SurfaceColorDiagnostics;\n spacing: {\n none: 0;\n xs: number;\n s: number;\n m: number;\n l: number;\n xl: number;\n xxl: number;\n [key: string]: number;\n };\n radii: {\n none: 0;\n s: number;\n m: number;\n l: number;\n full: number;\n [key: string]: number;\n };\n typography: {\n headings: Record<\n 1 | 2 | 3 | 4 | 5 | 6,\n {\n size: number;\n lineHeight: number;\n weight: 'regular' | 'medium' | 'semiBold' | 'bold';\n }\n >;\n sizes: {\n xs: number;\n s: number;\n m: number;\n l: number;\n xl: number;\n xxl: number;\n '3xl': number;\n h1: number;\n h2: number;\n h3: number;\n h4: number;\n h5: number;\n h6: number;\n [key: string]: number;\n };\n weights: {\n thin: FontWeight;\n extraLight: FontWeight;\n light: FontWeight;\n regular: FontWeight;\n medium: FontWeight;\n semiBold: FontWeight;\n bold: FontWeight;\n extraBold: FontWeight;\n black: FontWeight;\n };\n fonts: {\n /** Map of weight -> fontFamily name for normal style */\n normal: Record<FontWeight, string | undefined>;\n /** Map of weight -> fontFamily name for italic style */\n italic: Record<FontWeight, string | undefined>;\n };\n };\n shadows: {\n soft: number;\n medium: number;\n hard: number;\n [key: string]: number;\n };\n}\n\nexport interface SurfaceTheme extends ThemeTokens {\n config: ContractsThemeConfig;\n}\n"]}
@@ -1,6 +0,0 @@
1
- /**
2
- * Simple deep equality check for JSON-serializable objects.
3
- * Efficient enough for UI manifests.
4
- */
5
- export declare const isDeepEqual: (a: unknown, b: unknown) => boolean;
6
- //# sourceMappingURL=deepEqual.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepEqual.d.ts","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,KAAG,OA6BpD,CAAC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Simple deep equality check for JSON-serializable objects.
3
- * Efficient enough for UI manifests.
4
- */
5
- export const isDeepEqual = (a, b) => {
6
- if (a === b)
7
- return true;
8
- if (a && b && typeof a === 'object' && typeof b === 'object') {
9
- if (Array.isArray(a)) {
10
- if (!Array.isArray(b) || a.length !== b.length)
11
- return false;
12
- for (let i = 0; i < a.length; i++) {
13
- if (!isDeepEqual(a[i], b[i]))
14
- return false;
15
- }
16
- return true;
17
- }
18
- if (Array.isArray(b))
19
- return false;
20
- const keysA = Object.keys(a);
21
- const keysB = Object.keys(b);
22
- if (keysA.length !== keysB.length)
23
- return false;
24
- const objA = a;
25
- const objB = b;
26
- for (const key of keysA) {
27
- if (!Object.prototype.hasOwnProperty.call(objB, key))
28
- return false;
29
- if (!isDeepEqual(objA[key], objB[key]))
30
- return false;
31
- }
32
- return true;
33
- }
34
- return Number.isNaN(a) && Number.isNaN(b);
35
- };
36
- //# sourceMappingURL=deepEqual.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepEqual.js","sourceRoot":"","sources":["../../src/utils/deepEqual.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE;IAC7D,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC7C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAEnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEhD,MAAM,IAAI,GAAG,CAA4B,CAAC;QAC1C,MAAM,IAAI,GAAG,CAA4B,CAAC;QAE1C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC","sourcesContent":["/**\n * Simple deep equality check for JSON-serializable objects.\n * Efficient enough for UI manifests.\n */\nexport const isDeepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isDeepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n if (Array.isArray(b)) return false;\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n const objA = a as Record<string, unknown>;\n const objB = b as Record<string, unknown>;\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(objB, key)) return false;\n if (!isDeepEqual(objA[key], objB[key])) return false;\n }\n return true;\n }\n\n return Number.isNaN(a) && Number.isNaN(b);\n};\n"]}
@@ -1,6 +0,0 @@
1
- /**
2
- * Performs a deep merge of `source` into `target`.
3
- * Specifically handles the nested structure of ThemeConfig (light/dark objects).
4
- */
5
- export declare function deepMerge<T extends object>(target: T, source: Partial<T>): T;
6
- //# sourceMappingURL=deepMerge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAwB5E"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Performs a deep merge of `source` into `target`.
3
- * Specifically handles the nested structure of ThemeConfig (light/dark objects).
4
- */
5
- export function deepMerge(target, source) {
6
- const result = { ...target };
7
- Object.keys(source).forEach((key) => {
8
- const sourceValue = source[key];
9
- const targetValue = target[key];
10
- if (sourceValue &&
11
- typeof sourceValue === 'object' &&
12
- !Array.isArray(sourceValue) &&
13
- targetValue &&
14
- typeof targetValue === 'object' &&
15
- !Array.isArray(targetValue)) {
16
- // Recursively merge nested objects
17
- result[key] = deepMerge(targetValue, sourceValue);
18
- }
19
- else if (sourceValue !== undefined) {
20
- // Direct assignment for non-object values or if target doesn't have an object to merge with
21
- result[key] = sourceValue;
22
- }
23
- });
24
- return result;
25
- }
26
- //# sourceMappingURL=deepMerge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAmB,MAAS,EAAE,MAAkB;IACvE,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,IACE,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3B,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,CAAC;YACD,mCAAmC;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,WAAqB,EAAE,WAAqB,CAAe,CAAC;QACtF,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,4FAA4F;YAC5F,MAAM,CAAC,GAAG,CAAC,GAAG,WAAyB,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Performs a deep merge of `source` into `target`.\n * Specifically handles the nested structure of ThemeConfig (light/dark objects).\n */\nexport function deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target };\n\n (Object.keys(source) as (keyof T)[]).forEach((key) => {\n const sourceValue = source[key];\n const targetValue = target[key];\n\n if (\n sourceValue &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge nested objects\n result[key] = deepMerge(targetValue as object, sourceValue as object) as T[keyof T];\n } else if (sourceValue !== undefined) {\n // Direct assignment for non-object values or if target doesn't have an object to merge with\n result[key] = sourceValue as T[keyof T];\n }\n });\n\n return result;\n}\n"]}
@@ -1,59 +0,0 @@
1
- import React, { createContext, use, useMemo, useState } from 'react';
2
-
3
- /**
4
- * Runtime font state consumed by theme and text primitives.
5
- */
6
- export interface FontRuntime {
7
- /** true when the active font assets have finished loading */
8
- fontsLoaded: boolean;
9
-
10
- /** The currently active font family id */
11
- activeFontId: string | null;
12
-
13
- /** Update the active font family id */
14
- setActiveFontId: (id: string) => void;
15
- }
16
-
17
- const fallbackRuntime: FontRuntime = {
18
- fontsLoaded: true,
19
- activeFontId: null,
20
- setActiveFontId: () => {
21
- /* fallback */
22
- },
23
- };
24
-
25
- const FontContext = createContext(fallbackRuntime);
26
-
27
- export function FontProvider(props: {
28
- fontsLoaded: boolean;
29
- activeFontId?: string | null;
30
- children: React.ReactNode;
31
- onActiveFontChange?: (id: string) => void;
32
- }) {
33
- const {
34
- fontsLoaded,
35
- activeFontId: initialActiveFontId = null,
36
- children,
37
- onActiveFontChange,
38
- } = props;
39
-
40
- const [activeFontId, setActiveFontIdState] = useState(initialActiveFontId);
41
-
42
- const value = useMemo<FontRuntime>(
43
- () => ({
44
- fontsLoaded,
45
- activeFontId,
46
- setActiveFontId: (id: string) => {
47
- setActiveFontIdState(id);
48
- if (onActiveFontChange) onActiveFontChange(id);
49
- },
50
- }),
51
- [fontsLoaded, activeFontId, onActiveFontChange],
52
- );
53
-
54
- return <FontContext value={value}>{children}</FontContext>;
55
- }
56
-
57
- export function useFontContext(): FontRuntime {
58
- return use(FontContext);
59
- }
@@ -1,50 +0,0 @@
1
- import React, { createContext, use } from 'react';
2
-
3
- /**
4
- * Minimal translation runtime surface.
5
- * Do not import i18next types here; keep Surface runtime-agnostic.
6
- */
7
- export interface I18nInstance {
8
- changeLanguage: (lng: string) => Promise<unknown>;
9
- language?: string;
10
- t?: Translator;
11
- }
12
-
13
- export type Translator = (key: string, options?: Record<string, unknown>) => string;
14
-
15
- export interface TranslationRuntime {
16
- t: Translator;
17
- i18n: I18nInstance | null;
18
- }
19
-
20
- const fallbackRuntime: TranslationRuntime = {
21
- t: (key) => key,
22
- i18n: null,
23
- };
24
-
25
- const TranslationContext = createContext(fallbackRuntime);
26
-
27
- export function TranslationProvider(props: {
28
- t: Translator;
29
- i18n?: I18nInstance | null;
30
- children: React.ReactNode;
31
- }) {
32
- const { t, i18n, children } = props;
33
-
34
- const value: TranslationRuntime = {
35
- t: (key: string, options?: Record<string, unknown>) => {
36
- if (i18n?.t) {
37
- const result = i18n.t(key, options);
38
- if (result !== key) return result;
39
- }
40
- return t(key, options);
41
- },
42
- i18n: i18n ?? null,
43
- };
44
-
45
- return <TranslationContext value={value}>{children}</TranslationContext>;
46
- }
47
-
48
- export function useTranslationContext(): TranslationRuntime {
49
- return use(TranslationContext);
50
- }
@@ -1,86 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
-
3
- import { describe, expect, it } from 'bun:test';
4
-
5
- const indexSource = readFileSync(new URL('./index.ts', import.meta.url), 'utf8');
6
-
7
- describe('InteractionPolicy public export', () => {
8
- it('exports InteractionPolicy from the public root', () => {
9
- expect(indexSource).toContain(
10
- "export type { InteractionPolicy, InteractionPolicyProps } from './interactionPolicy';",
11
- );
12
- });
13
-
14
- it('exports InteractionPolicyProps from the public root', () => {
15
- expect(indexSource).toContain(
16
- "export type { InteractionPolicy, InteractionPolicyProps } from './interactionPolicy';",
17
- );
18
- });
19
-
20
- it('does not export InteractionPolicy from button-base', () => {
21
- expect(indexSource).not.toContain(
22
- "export type { InteractionPolicy, InteractionPolicyProps } from './features/pressable/public';",
23
- );
24
- });
25
- });
26
-
27
- describe('InteractionPolicy type', () => {
28
- it('only allows enabled', () => {
29
- const policy = 'enabled' as const;
30
- expect(policy).toBe('enabled');
31
- });
32
-
33
- it('only allows passive', () => {
34
- const policy = 'passive' as const;
35
- expect(policy).toBe('passive');
36
- });
37
- });
38
-
39
- describe('InteractionPolicyProps', () => {
40
- it('allows omitted interactionPolicy', () => {
41
- const props: { readonly interactionPolicy?: 'enabled' | 'passive' } = {};
42
- expect(props.interactionPolicy).toBeUndefined();
43
- });
44
-
45
- it('allows explicit enabled', () => {
46
- const props: { readonly interactionPolicy?: 'enabled' | 'passive' } = {
47
- interactionPolicy: 'enabled',
48
- };
49
- expect(props.interactionPolicy).toBe('enabled');
50
- });
51
-
52
- it('allows explicit passive', () => {
53
- const props: { readonly interactionPolicy?: 'enabled' | 'passive' } = {
54
- interactionPolicy: 'passive',
55
- };
56
- expect(props.interactionPolicy).toBe('passive');
57
- });
58
- });
59
-
60
- describe('PressableProps includes interactionPolicy', () => {
61
- it('has interactionPolicy in PressableProps', () => {
62
- expect(indexSource).toContain(
63
- "export type { PressableProps } from './features/pressable/public';",
64
- );
65
- });
66
- });
67
-
68
- describe('Policy does not leak to native hosts', () => {
69
- it('InteractionPolicy is not a native View prop', () => {
70
- const viewProps: Record<string, unknown> = {
71
- accessible: true,
72
- accessibilityLabel: 'test',
73
- };
74
- expect(viewProps.interactionPolicy).toBeUndefined();
75
- });
76
-
77
- it('InteractionPolicy is not a native TextInput prop', () => {
78
- const textInputProps: Record<string, unknown> = {
79
- editable: true,
80
- onChangeText: (_text: string) => {
81
- void _text;
82
- },
83
- };
84
- expect(textInputProps.interactionPolicy).toBeUndefined();
85
- });
86
- });
@@ -1,44 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
-
3
- import { describe, expect, it } from 'bun:test';
4
-
5
- import type {
6
- SurfaceColor,
7
- SurfaceEmphasis,
8
- SurfacePaletteColor,
9
- SurfaceStatusColor,
10
- } from './index';
11
- import {
12
- SURFACE_COLORS,
13
- SURFACE_EMPHASES,
14
- SURFACE_PALETTE_COLORS,
15
- SURFACE_STATUS_COLORS,
16
- } from './surfaceColor';
17
-
18
- describe('surfaceColor public exports', () => {
19
- it('exports canonical runtime color and emphasis lists from the root entrypoint', () => {
20
- const indexSource = readFileSync(new URL('./index.ts', import.meta.url), 'utf8');
21
-
22
- expect(indexSource).toContain("from './surfaceColor';");
23
- expect(SURFACE_PALETTE_COLORS.length).toBeGreaterThan(0);
24
- expect(SURFACE_STATUS_COLORS.length).toBeGreaterThan(0);
25
- expect(SURFACE_EMPHASES.length).toBeGreaterThan(0);
26
- expect(new Set(SURFACE_COLORS).size).toBe(SURFACE_COLORS.length);
27
- expect(new Set(SURFACE_EMPHASES).size).toBe(SURFACE_EMPHASES.length);
28
- for (const color of [...SURFACE_PALETTE_COLORS, ...SURFACE_STATUS_COLORS]) {
29
- expect(SURFACE_COLORS).toContain(color);
30
- }
31
- });
32
-
33
- it('keeps root-imported type contracts aligned with runtime lists', () => {
34
- const paletteColor: SurfacePaletteColor = 'neutral';
35
- const statusColor: SurfaceStatusColor = 'info';
36
- const color: SurfaceColor = 'danger';
37
- const emphasis: SurfaceEmphasis = 'muted';
38
-
39
- expect(SURFACE_PALETTE_COLORS).toContain(paletteColor);
40
- expect(SURFACE_STATUS_COLORS).toContain(statusColor);
41
- expect(SURFACE_COLORS).toContain(color);
42
- expect(SURFACE_EMPHASES).toContain(emphasis);
43
- });
44
- });