@ankhorage/surface 7.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 (498) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/{surfaceColor.d.ts → constants/surfaceColor.d.ts} +0 -4
  4. package/dist/constants/surfaceColor.d.ts.map +1 -0
  5. package/dist/constants/surfaceColor.js.map +1 -0
  6. package/dist/features/app-bar/adapters/inbound/AppBar.d.ts.map +1 -1
  7. package/dist/features/app-bar/adapters/inbound/AppBar.js +1 -1
  8. package/dist/features/app-bar/adapters/inbound/AppBar.js.map +1 -1
  9. package/dist/features/badge/adapters/inbound/Badge.d.ts.map +1 -1
  10. package/dist/features/badge/adapters/inbound/Badge.js +1 -1
  11. package/dist/features/badge/adapters/inbound/Badge.js.map +1 -1
  12. package/dist/features/button/adapters/inbound/Button.d.ts.map +1 -1
  13. package/dist/features/button/adapters/inbound/Button.js +6 -6
  14. package/dist/features/button/adapters/inbound/Button.js.map +1 -1
  15. package/dist/features/button/adapters/inbound/IconButton.d.ts.map +1 -1
  16. package/dist/features/button/adapters/inbound/IconButton.js +4 -4
  17. package/dist/features/button/adapters/inbound/IconButton.js.map +1 -1
  18. package/dist/features/card/adapters/inbound/Card.d.ts.map +1 -1
  19. package/dist/features/card/adapters/inbound/Card.js +4 -4
  20. package/dist/features/card/adapters/inbound/Card.js.map +1 -1
  21. package/dist/features/font/adapters/inbound/FontProvider.d.ts +4 -0
  22. package/dist/features/font/adapters/inbound/FontProvider.d.ts.map +1 -0
  23. package/dist/features/font/adapters/inbound/FontProvider.js +16 -0
  24. package/dist/features/font/adapters/inbound/FontProvider.js.map +1 -0
  25. package/dist/features/font/adapters/inbound/FontRuntimeContext.d.ts +4 -0
  26. package/dist/features/font/adapters/inbound/FontRuntimeContext.d.ts.map +1 -0
  27. package/dist/features/font/adapters/inbound/FontRuntimeContext.js +9 -0
  28. package/dist/features/font/adapters/inbound/FontRuntimeContext.js.map +1 -0
  29. package/dist/features/font/adapters/inbound/useFontRuntime.d.ts +4 -0
  30. package/dist/features/font/adapters/inbound/useFontRuntime.d.ts.map +1 -0
  31. package/dist/features/font/adapters/inbound/useFontRuntime.js +7 -0
  32. package/dist/features/font/adapters/inbound/useFontRuntime.js.map +1 -0
  33. package/dist/features/font/public.d.ts +3 -0
  34. package/dist/features/font/public.d.ts.map +1 -0
  35. package/dist/features/font/public.js +2 -0
  36. package/dist/features/font/public.js.map +1 -0
  37. package/dist/features/form/checkbox/adapters/inbound/Checkbox.d.ts.map +1 -1
  38. package/dist/features/form/checkbox/adapters/inbound/Checkbox.js +4 -4
  39. package/dist/features/form/checkbox/adapters/inbound/Checkbox.js.map +1 -1
  40. package/dist/features/form/radio/adapters/inbound/Radio.d.ts.map +1 -1
  41. package/dist/features/form/radio/adapters/inbound/Radio.js +4 -4
  42. package/dist/features/form/radio/adapters/inbound/Radio.js.map +1 -1
  43. package/dist/features/form/switch/adapters/inbound/Switch.d.ts.map +1 -1
  44. package/dist/features/form/switch/adapters/inbound/Switch.js +4 -4
  45. package/dist/features/form/switch/adapters/inbound/Switch.js.map +1 -1
  46. package/dist/features/form/text-input/adapters/inbound/TextInput.d.ts.map +1 -1
  47. package/dist/features/form/text-input/adapters/inbound/TextInput.js +1 -1
  48. package/dist/features/form/text-input/adapters/inbound/TextInput.js.map +1 -1
  49. package/dist/features/form/text-input/utils/resolveTextInputPresentation.d.ts +1 -1
  50. package/dist/features/form/text-input/utils/resolveTextInputPresentation.d.ts.map +1 -1
  51. package/dist/features/form/text-input/utils/resolveTextInputPresentation.js.map +1 -1
  52. package/dist/features/icon/adapters/inbound/Icon.d.ts.map +1 -1
  53. package/dist/features/icon/adapters/inbound/Icon.js +2 -2
  54. package/dist/features/icon/adapters/inbound/Icon.js.map +1 -1
  55. package/dist/features/image/adapters/inbound/Image.d.ts.map +1 -1
  56. package/dist/features/image/adapters/inbound/Image.js +1 -1
  57. package/dist/features/image/adapters/inbound/Image.js.map +1 -1
  58. package/dist/features/image/utils/resolveImageStyle.d.ts +1 -1
  59. package/dist/features/image/utils/resolveImageStyle.d.ts.map +1 -1
  60. package/dist/features/image/utils/resolveImageStyle.js +1 -1
  61. package/dist/features/image/utils/resolveImageStyle.js.map +1 -1
  62. package/dist/features/layout/adapters/inbound/Grid.d.ts.map +1 -1
  63. package/dist/features/layout/adapters/inbound/Grid.js +1 -1
  64. package/dist/features/layout/adapters/inbound/Grid.js.map +1 -1
  65. package/dist/features/layout/adapters/inbound/ScrollView.d.ts.map +1 -1
  66. package/dist/features/layout/adapters/inbound/ScrollView.js +1 -1
  67. package/dist/features/layout/adapters/inbound/ScrollView.js.map +1 -1
  68. package/dist/features/layout/adapters/inbound/View.d.ts.map +1 -1
  69. package/dist/features/layout/adapters/inbound/View.js +1 -1
  70. package/dist/features/layout/adapters/inbound/View.js.map +1 -1
  71. package/dist/features/list/adapters/inbound/ListItem.d.ts.map +1 -1
  72. package/dist/features/list/adapters/inbound/ListItem.js +4 -4
  73. package/dist/features/list/adapters/inbound/ListItem.js.map +1 -1
  74. package/dist/features/modal/adapters/inbound/Modal.d.ts.map +1 -1
  75. package/dist/features/modal/adapters/inbound/Modal.js +1 -1
  76. package/dist/features/modal/adapters/inbound/Modal.js.map +1 -1
  77. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.d.ts.map +1 -1
  78. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js +1 -1
  79. package/dist/features/popover-menu/adapters/inbound/PopoverMenu.js.map +1 -1
  80. package/dist/features/pressable/adapters/inbound/Pressable.d.ts +5 -0
  81. package/dist/features/pressable/adapters/inbound/Pressable.d.ts.map +1 -0
  82. package/dist/features/pressable/adapters/inbound/Pressable.js +48 -0
  83. package/dist/features/pressable/adapters/inbound/Pressable.js.map +1 -0
  84. package/dist/features/pressable/public.d.ts +3 -0
  85. package/dist/features/pressable/public.d.ts.map +1 -0
  86. package/dist/features/pressable/public.js +2 -0
  87. package/dist/features/pressable/public.js.map +1 -0
  88. package/dist/features/surface/adapters/inbound/Surface.d.ts.map +1 -1
  89. package/dist/features/surface/adapters/inbound/Surface.js +1 -1
  90. package/dist/features/surface/adapters/inbound/Surface.js.map +1 -1
  91. package/dist/features/tabs/adapters/inbound/Tab.d.ts.map +1 -1
  92. package/dist/features/tabs/adapters/inbound/Tab.js +1 -1
  93. package/dist/features/tabs/adapters/inbound/Tab.js.map +1 -1
  94. package/dist/features/theme/adapters/inbound/ThemeProvider.d.ts +4 -0
  95. package/dist/features/theme/adapters/inbound/ThemeProvider.d.ts.map +1 -0
  96. package/dist/features/theme/adapters/inbound/ThemeProvider.js +27 -0
  97. package/dist/features/theme/adapters/inbound/ThemeProvider.js.map +1 -0
  98. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.d.ts +4 -0
  99. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.d.ts.map +1 -0
  100. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.js +11 -0
  101. package/dist/features/theme/adapters/inbound/ThemeRuntimeContext.js.map +1 -0
  102. package/dist/features/theme/adapters/inbound/ThemeScope.d.ts +4 -0
  103. package/dist/features/theme/adapters/inbound/ThemeScope.d.ts.map +1 -0
  104. package/dist/features/theme/adapters/inbound/ThemeScope.js +17 -0
  105. package/dist/features/theme/adapters/inbound/ThemeScope.js.map +1 -0
  106. package/dist/features/theme/adapters/inbound/useTheme.d.ts +4 -0
  107. package/dist/features/theme/adapters/inbound/useTheme.d.ts.map +1 -0
  108. package/dist/features/theme/adapters/inbound/useTheme.js +7 -0
  109. package/dist/features/theme/adapters/inbound/useTheme.js.map +1 -0
  110. package/dist/features/theme/application/use-cases/createTheme.d.ts +5 -0
  111. package/dist/features/theme/application/use-cases/createTheme.d.ts.map +1 -0
  112. package/dist/features/theme/application/use-cases/createTheme.js +56 -0
  113. package/dist/features/theme/application/use-cases/createTheme.js.map +1 -0
  114. package/dist/features/theme/constants.d.ts +10 -0
  115. package/dist/features/theme/constants.d.ts.map +1 -0
  116. package/dist/{theme/defaultTokens.js → features/theme/constants.js} +9 -2
  117. package/dist/features/theme/constants.js.map +1 -0
  118. package/dist/{theme → features/theme/domain}/createSurfaceColorDiagnosticCollector.d.ts +1 -1
  119. package/dist/features/theme/domain/createSurfaceColorDiagnosticCollector.d.ts.map +1 -0
  120. package/dist/features/theme/domain/createSurfaceColorDiagnosticCollector.js.map +1 -0
  121. package/dist/{theme → features/theme/domain}/createSurfaceSemanticPolicy.d.ts +1 -1
  122. package/dist/features/theme/domain/createSurfaceSemanticPolicy.d.ts.map +1 -0
  123. package/dist/{theme → features/theme/domain}/createSurfaceSemanticPolicy.js +1 -1
  124. package/dist/features/theme/domain/createSurfaceSemanticPolicy.js.map +1 -0
  125. package/dist/features/theme/domain/generatePalette.d.ts +10 -0
  126. package/dist/features/theme/domain/generatePalette.d.ts.map +1 -0
  127. package/dist/{theme/colorEngine.js → features/theme/domain/generatePalette.js} +2 -10
  128. package/dist/features/theme/domain/generatePalette.js.map +1 -0
  129. package/dist/{theme → features/theme/domain}/resolveRoleSemantics.d.ts +1 -1
  130. package/dist/features/theme/domain/resolveRoleSemantics.d.ts.map +1 -0
  131. package/dist/{theme → features/theme/domain}/resolveRoleSemantics.js +1 -1
  132. package/dist/features/theme/domain/resolveRoleSemantics.js.map +1 -0
  133. package/dist/features/theme/domain/resolveSemanticColors.d.ts +4 -0
  134. package/dist/features/theme/domain/resolveSemanticColors.d.ts.map +1 -0
  135. package/dist/features/theme/domain/resolveSemanticColors.js +10 -0
  136. package/dist/features/theme/domain/resolveSemanticColors.js.map +1 -0
  137. package/dist/{theme → features/theme/domain}/resolveSurfaceSemanticModel.d.ts +1 -1
  138. package/dist/features/theme/domain/resolveSurfaceSemanticModel.d.ts.map +1 -0
  139. package/dist/features/theme/domain/resolveSurfaceSemanticModel.js.map +1 -0
  140. package/dist/features/theme/public.d.ts +3 -0
  141. package/dist/features/theme/public.d.ts.map +1 -0
  142. package/dist/features/theme/public.js +2 -0
  143. package/dist/features/theme/public.js.map +1 -0
  144. package/dist/features/theme/runtime.d.ts +5 -0
  145. package/dist/features/theme/runtime.d.ts.map +1 -0
  146. package/dist/features/theme/runtime.js +4 -0
  147. package/dist/features/theme/runtime.js.map +1 -0
  148. package/dist/{theme → features/theme/utils}/resolveGlobalTokens.d.ts +1 -1
  149. package/dist/features/theme/utils/resolveGlobalTokens.d.ts.map +1 -0
  150. package/dist/{theme → features/theme/utils}/resolveGlobalTokens.js +1 -1
  151. package/dist/features/theme/utils/resolveGlobalTokens.js.map +1 -0
  152. package/dist/{theme → features/theme/utils}/resolveHeadingTokenOverrides.d.ts +1 -1
  153. package/dist/features/theme/utils/resolveHeadingTokenOverrides.d.ts.map +1 -0
  154. package/dist/features/theme/utils/resolveHeadingTokenOverrides.js.map +1 -0
  155. package/dist/features/theme/utils/resolveNumericTokenOverrides.d.ts.map +1 -0
  156. package/dist/features/theme/utils/resolveNumericTokenOverrides.js.map +1 -0
  157. package/dist/{theme → features/theme/utils}/resolveToken.d.ts +2 -8
  158. package/dist/features/theme/utils/resolveToken.d.ts.map +1 -0
  159. package/dist/features/theme/utils/resolveToken.js +10 -0
  160. package/dist/features/theme/utils/resolveToken.js.map +1 -0
  161. package/dist/{theme → features/theme/utils}/resolveWeightTokenOverrides.d.ts +1 -1
  162. package/dist/features/theme/utils/resolveWeightTokenOverrides.d.ts.map +1 -0
  163. package/dist/{theme → features/theme/utils}/resolveWeightTokenOverrides.js +3 -5
  164. package/dist/features/theme/utils/resolveWeightTokenOverrides.js.map +1 -0
  165. package/dist/features/toast/adapters/inbound/Toast.d.ts.map +1 -1
  166. package/dist/features/toast/adapters/inbound/Toast.js +1 -1
  167. package/dist/features/toast/adapters/inbound/Toast.js.map +1 -1
  168. package/dist/features/tooltip/adapters/inbound/Tooltip.d.ts.map +1 -1
  169. package/dist/features/tooltip/adapters/inbound/Tooltip.js +1 -1
  170. package/dist/features/tooltip/adapters/inbound/Tooltip.js.map +1 -1
  171. package/dist/features/typography/adapters/inbound/Heading.d.ts +2 -2
  172. package/dist/features/typography/adapters/inbound/Heading.d.ts.map +1 -1
  173. package/dist/features/typography/adapters/inbound/Heading.js +4 -20
  174. package/dist/features/typography/adapters/inbound/Heading.js.map +1 -1
  175. package/dist/features/typography/adapters/inbound/Text.d.ts +1 -1
  176. package/dist/features/typography/adapters/inbound/Text.d.ts.map +1 -1
  177. package/dist/features/typography/adapters/inbound/Text.js +3 -20
  178. package/dist/features/typography/adapters/inbound/Text.js.map +1 -1
  179. package/dist/features/typography/utils/resolveHeadingTextStyle.d.ts +2 -2
  180. package/dist/features/typography/utils/resolveHeadingTextStyle.d.ts.map +1 -1
  181. package/dist/features/typography/utils/resolveHeadingTextStyle.js.map +1 -1
  182. package/dist/index.d.ts +11 -12
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +5 -7
  185. package/dist/index.js.map +1 -1
  186. package/dist/internal/resolvers/resolveControlSize.d.ts +1 -1
  187. package/dist/internal/resolvers/resolveControlSize.js.map +1 -1
  188. package/dist/internal/resolvers/resolveFieldPresentation.d.ts +1 -1
  189. package/dist/internal/resolvers/resolveFieldPresentation.d.ts.map +1 -1
  190. package/dist/internal/resolvers/resolveFieldPresentation.js.map +1 -1
  191. package/dist/internal/resolvers/resolveIconSize.d.ts +1 -1
  192. package/dist/internal/resolvers/resolveIconSize.js.map +1 -1
  193. package/dist/internal/resolvers/resolveInteractiveColors.d.ts +2 -2
  194. package/dist/internal/resolvers/resolveInteractiveColors.d.ts.map +1 -1
  195. package/dist/internal/resolvers/resolveInteractiveColors.js.map +1 -1
  196. package/dist/internal/resolvers/resolveSelectionControlColors.d.ts +2 -2
  197. package/dist/internal/resolvers/resolveSelectionControlColors.d.ts.map +1 -1
  198. package/dist/internal/resolvers/resolveSelectionControlColors.js.map +1 -1
  199. package/dist/internal/resolvers/resolveSurfaceColor.d.ts +2 -2
  200. package/dist/internal/resolvers/resolveSurfaceColor.d.ts.map +1 -1
  201. package/dist/internal/resolvers/resolveSurfaceColor.js.map +1 -1
  202. package/dist/internal/resolvers/resolveTextColor.d.ts +2 -2
  203. package/dist/internal/resolvers/resolveTextColor.d.ts.map +1 -1
  204. package/dist/internal/resolvers/resolveTextColor.js.map +1 -1
  205. package/dist/internal/resolvers/resolveTextStyles.d.ts +1 -1
  206. package/dist/internal/resolvers/resolveTextStyles.js.map +1 -1
  207. package/dist/types/accordion.d.ts +1 -1
  208. package/dist/types/accordion.d.ts.map +1 -1
  209. package/dist/types/accordion.js.map +1 -1
  210. package/dist/types/badge.d.ts +1 -1
  211. package/dist/types/badge.d.ts.map +1 -1
  212. package/dist/types/badge.js.map +1 -1
  213. package/dist/types/button.d.ts +4 -4
  214. package/dist/types/button.d.ts.map +1 -1
  215. package/dist/types/button.js.map +1 -1
  216. package/dist/types/checkbox.d.ts +3 -3
  217. package/dist/types/checkbox.d.ts.map +1 -1
  218. package/dist/types/checkbox.js.map +1 -1
  219. package/dist/types/font.d.ts +13 -0
  220. package/dist/types/font.d.ts.map +1 -0
  221. package/dist/types/font.js +2 -0
  222. package/dist/types/font.js.map +1 -0
  223. package/dist/types/icon.d.ts +1 -1
  224. package/dist/types/icon.d.ts.map +1 -1
  225. package/dist/types/icon.js.map +1 -1
  226. package/dist/types/image.d.ts +1 -1
  227. package/dist/types/image.d.ts.map +1 -1
  228. package/dist/types/image.js.map +1 -1
  229. package/dist/types/interactionPolicy.d.ts.map +1 -0
  230. package/dist/types/interactionPolicy.js.map +1 -0
  231. package/dist/types/layout.d.ts +1 -1
  232. package/dist/types/layout.d.ts.map +1 -1
  233. package/dist/types/layout.js.map +1 -1
  234. package/dist/types/list.d.ts +1 -1
  235. package/dist/types/list.d.ts.map +1 -1
  236. package/dist/types/list.js.map +1 -1
  237. package/dist/types/modal.d.ts +1 -1
  238. package/dist/types/modal.d.ts.map +1 -1
  239. package/dist/types/modal.js.map +1 -1
  240. package/dist/types/popover.d.ts +1 -1
  241. package/dist/types/popover.d.ts.map +1 -1
  242. package/dist/types/popover.js.map +1 -1
  243. package/dist/types/popoverMenu.d.ts +1 -1
  244. package/dist/types/popoverMenu.d.ts.map +1 -1
  245. package/dist/types/popoverMenu.js.map +1 -1
  246. package/dist/{primitives/button-base/types.d.ts → types/pressable.d.ts} +5 -5
  247. package/dist/types/pressable.d.ts.map +1 -0
  248. package/dist/types/pressable.js +2 -0
  249. package/dist/types/pressable.js.map +1 -0
  250. package/dist/types/radio.d.ts +3 -3
  251. package/dist/types/radio.d.ts.map +1 -1
  252. package/dist/types/radio.js.map +1 -1
  253. package/dist/types/surfaceColor.d.ts +6 -0
  254. package/dist/types/surfaceColor.d.ts.map +1 -0
  255. package/dist/types/surfaceColor.js +2 -0
  256. package/dist/types/surfaceColor.js.map +1 -0
  257. package/dist/types/switch.d.ts +3 -3
  258. package/dist/types/switch.d.ts.map +1 -1
  259. package/dist/types/switch.js.map +1 -1
  260. package/dist/types/tabs.d.ts +1 -1
  261. package/dist/types/tabs.d.ts.map +1 -1
  262. package/dist/types/tabs.js.map +1 -1
  263. package/dist/types/text-input.d.ts +1 -1
  264. package/dist/types/text-input.d.ts.map +1 -1
  265. package/dist/types/text-input.js.map +1 -1
  266. package/dist/{theme/types.d.ts → types/theme.d.ts} +19 -3
  267. package/dist/types/theme.d.ts.map +1 -0
  268. package/dist/types/theme.js +2 -0
  269. package/dist/types/theme.js.map +1 -0
  270. package/dist/types/toast.d.ts +2 -2
  271. package/dist/types/toast.d.ts.map +1 -1
  272. package/dist/types/toast.js.map +1 -1
  273. package/dist/types/tooltip.d.ts +1 -1
  274. package/dist/types/tooltip.d.ts.map +1 -1
  275. package/dist/types/tooltip.js.map +1 -1
  276. package/dist/types/typography.d.ts +1 -1
  277. package/dist/types/typography.d.ts.map +1 -1
  278. package/dist/types/typography.js.map +1 -1
  279. package/dist/utils/resolveSpacing.d.ts +1 -1
  280. package/dist/utils/resolveSpacing.d.ts.map +1 -1
  281. package/dist/utils/resolveSpacing.js +1 -1
  282. package/dist/utils/resolveSpacing.js.map +1 -1
  283. package/dist/utils/resolveViewStyles.d.ts +1 -1
  284. package/dist/utils/resolveViewStyles.d.ts.map +1 -1
  285. package/dist/utils/resolveViewStyles.js +1 -1
  286. package/dist/utils/resolveViewStyles.js.map +1 -1
  287. package/package.json +8 -7
  288. package/src/constants/surfaceColor.test.ts +18 -0
  289. package/src/{surfaceColor.ts → constants/surfaceColor.ts} +0 -5
  290. package/src/features/app-bar/adapters/inbound/AppBar.tsx +1 -1
  291. package/src/features/badge/adapters/inbound/Badge.tsx +1 -1
  292. package/src/features/button/adapters/inbound/Button.tsx +8 -8
  293. package/src/features/button/adapters/inbound/IconButton.tsx +4 -4
  294. package/src/features/card/adapters/inbound/Card.tsx +4 -4
  295. package/src/features/font/adapters/inbound/FontProvider.tsx +27 -0
  296. package/src/features/font/adapters/inbound/FontRuntimeContext.tsx +12 -0
  297. package/src/features/font/adapters/inbound/useFontRuntime.ts +9 -0
  298. package/src/features/font/public.ts +2 -0
  299. package/src/features/form/checkbox/adapters/inbound/Checkbox.tsx +7 -7
  300. package/src/features/form/radio/adapters/inbound/Radio.tsx +7 -7
  301. package/src/features/form/switch/adapters/inbound/Switch.tsx +4 -4
  302. package/src/features/form/text-input/adapters/inbound/TextInput.tsx +1 -1
  303. package/src/features/form/text-input/utils/resolveTextInputPresentation.ts +1 -1
  304. package/src/features/icon/adapters/inbound/Icon.tsx +2 -2
  305. package/src/features/image/adapters/inbound/Image.tsx +1 -1
  306. package/src/features/image/utils/resolveImageProps.test.ts +1 -1
  307. package/src/features/image/utils/resolveImageStyle.ts +2 -2
  308. package/src/features/layout/adapters/inbound/Grid.tsx +1 -1
  309. package/src/features/layout/adapters/inbound/ScrollView.tsx +1 -1
  310. package/src/features/layout/adapters/inbound/View.tsx +1 -1
  311. package/src/features/list/adapters/inbound/ListItem.tsx +5 -5
  312. package/src/features/modal/adapters/inbound/Modal.tsx +1 -1
  313. package/src/features/popover-menu/adapters/inbound/PopoverMenu.tsx +1 -1
  314. package/src/{primitives/button-base/ButtonBase.tsx → features/pressable/adapters/inbound/Pressable.tsx} +45 -31
  315. package/src/features/pressable/public.ts +2 -0
  316. package/src/features/surface/adapters/inbound/Surface.tsx +1 -1
  317. package/src/features/tabs/adapters/inbound/Tab.tsx +1 -1
  318. package/src/features/theme/adapters/inbound/ThemeProvider.tsx +46 -0
  319. package/src/features/theme/adapters/inbound/ThemeRuntimeContext.tsx +14 -0
  320. package/src/features/theme/adapters/inbound/ThemeScope.test.tsx +52 -0
  321. package/src/features/theme/adapters/inbound/ThemeScope.tsx +29 -0
  322. package/src/features/theme/adapters/inbound/useTheme.ts +9 -0
  323. package/src/features/theme/application/use-cases/createTheme.ts +71 -0
  324. package/src/{theme → features/theme/application/use-cases}/createThemeOverrides.test.ts +8 -9
  325. package/src/{theme → features/theme/application/use-cases}/createThemeValidation.test.ts +4 -2
  326. package/src/features/theme/constants.ts +68 -0
  327. package/src/{theme → features/theme/domain}/createSurfaceColorDiagnosticCollector.ts +4 -1
  328. package/src/{theme → features/theme/domain}/createSurfaceSemanticPolicy.ts +2 -2
  329. package/src/features/theme/domain/generatePalette.test.ts +294 -0
  330. package/src/{theme/colorEngine.ts → features/theme/domain/generatePalette.ts} +3 -30
  331. package/src/{theme → features/theme/domain}/inverseSemantics.test.ts +1 -1
  332. package/src/{theme → features/theme/domain}/resolveRoleSemantics.ts +2 -2
  333. package/src/features/theme/domain/resolveSemanticColors.ts +23 -0
  334. package/src/{theme → features/theme/domain}/resolveSurfaceSemanticModel.ts +4 -4
  335. package/src/{theme → features/theme}/public.test.ts +1 -1
  336. package/src/features/theme/public.ts +18 -0
  337. package/src/features/theme/runtime.test.ts +13 -0
  338. package/src/features/theme/runtime.ts +4 -0
  339. package/src/{theme → features/theme/utils}/resolveGlobalTokens.ts +2 -2
  340. package/src/{theme → features/theme/utils}/resolveHeadingTokenOverrides.ts +1 -1
  341. package/src/features/theme/utils/resolveToken.ts +16 -0
  342. package/src/{theme → features/theme/utils}/resolveWeightTokenOverrides.ts +12 -12
  343. package/src/features/toast/adapters/inbound/Toast.tsx +3 -3
  344. package/src/features/tooltip/adapters/inbound/Tooltip.tsx +1 -1
  345. package/src/features/typography/adapters/inbound/Heading.tsx +3 -30
  346. package/src/features/typography/adapters/inbound/Text.tsx +3 -23
  347. package/src/features/typography/utils/resolveHeadingTextStyle.test.ts +1 -1
  348. package/src/features/typography/utils/resolveHeadingTextStyle.ts +2 -2
  349. package/src/index.test.ts +13 -9
  350. package/src/index.ts +32 -17
  351. package/src/internal/resolvers/resolveControlSize.test.ts +1 -1
  352. package/src/internal/resolvers/resolveControlSize.ts +1 -1
  353. package/src/internal/resolvers/resolveFieldPresentation.ts +1 -1
  354. package/src/internal/resolvers/resolveIconSize.ts +1 -1
  355. package/src/internal/resolvers/resolveInteractiveColors.test.ts +1 -1
  356. package/src/internal/resolvers/resolveInteractiveColors.ts +2 -2
  357. package/src/internal/resolvers/resolveSelectionControlColors.test.ts +1 -1
  358. package/src/internal/resolvers/resolveSelectionControlColors.ts +2 -2
  359. package/src/internal/resolvers/resolveSurfaceColor.test.ts +1 -1
  360. package/src/internal/resolvers/resolveSurfaceColor.ts +2 -2
  361. package/src/internal/resolvers/resolveTextColor.test.ts +1 -1
  362. package/src/internal/resolvers/resolveTextColor.ts +2 -2
  363. package/src/internal/resolvers/resolveTextStyles.test.ts +1 -1
  364. package/src/internal/resolvers/resolveTextStyles.ts +1 -1
  365. package/src/structureOwnership.test.ts +16 -0
  366. package/src/types/accordion.ts +1 -1
  367. package/src/types/badge.ts +1 -1
  368. package/src/types/button.ts +4 -4
  369. package/src/types/checkbox.ts +3 -3
  370. package/src/types/font.ts +14 -0
  371. package/src/types/icon.ts +1 -1
  372. package/src/types/image.ts +1 -1
  373. package/src/types/interactionPolicy.test.ts +30 -0
  374. package/src/types/layout.ts +1 -1
  375. package/src/types/list.ts +1 -1
  376. package/src/types/modal.ts +1 -1
  377. package/src/types/popover.ts +1 -1
  378. package/src/types/popoverMenu.ts +1 -1
  379. package/src/{primitives/button-base/types.ts → types/pressable.ts} +4 -4
  380. package/src/types/radio.ts +3 -3
  381. package/src/types/surfaceColor.test.ts +18 -0
  382. package/src/types/surfaceColor.ts +11 -0
  383. package/src/types/switch.ts +3 -3
  384. package/src/types/tabs.ts +1 -1
  385. package/src/types/text-input.ts +1 -1
  386. package/src/{theme/types.ts → types/theme.ts} +22 -13
  387. package/src/types/toast.ts +2 -2
  388. package/src/types/tooltip.ts +1 -1
  389. package/src/types/typography.ts +1 -1
  390. package/src/utils/resolveSpacing.ts +2 -2
  391. package/src/utils/resolveViewStyles.test.ts +1 -1
  392. package/src/utils/resolveViewStyles.ts +2 -2
  393. package/src/webAcceptance.test.tsx +1 -1
  394. package/dist/context/FontContext.d.ts +0 -20
  395. package/dist/context/FontContext.d.ts.map +0 -1
  396. package/dist/context/FontContext.js +0 -27
  397. package/dist/context/FontContext.js.map +0 -1
  398. package/dist/context/TranslationContext.d.ts +0 -22
  399. package/dist/context/TranslationContext.d.ts.map +0 -1
  400. package/dist/context/TranslationContext.js +0 -25
  401. package/dist/context/TranslationContext.js.map +0 -1
  402. package/dist/interactionPolicy.d.ts.map +0 -1
  403. package/dist/interactionPolicy.js.map +0 -1
  404. package/dist/primitives/button-base/ButtonBase.d.ts +0 -5
  405. package/dist/primitives/button-base/ButtonBase.d.ts.map +0 -1
  406. package/dist/primitives/button-base/ButtonBase.js +0 -42
  407. package/dist/primitives/button-base/ButtonBase.js.map +0 -1
  408. package/dist/primitives/button-base/index.d.ts +0 -3
  409. package/dist/primitives/button-base/index.d.ts.map +0 -1
  410. package/dist/primitives/button-base/index.js +0 -2
  411. package/dist/primitives/button-base/index.js.map +0 -1
  412. package/dist/primitives/button-base/types.d.ts.map +0 -1
  413. package/dist/primitives/button-base/types.js +0 -2
  414. package/dist/primitives/button-base/types.js.map +0 -1
  415. package/dist/surfaceColor.d.ts.map +0 -1
  416. package/dist/surfaceColor.js.map +0 -1
  417. package/dist/theme/ThemeContext.d.ts +0 -27
  418. package/dist/theme/ThemeContext.d.ts.map +0 -1
  419. package/dist/theme/ThemeContext.js +0 -59
  420. package/dist/theme/ThemeContext.js.map +0 -1
  421. package/dist/theme/colorEngine.d.ts +0 -16
  422. package/dist/theme/colorEngine.d.ts.map +0 -1
  423. package/dist/theme/colorEngine.js.map +0 -1
  424. package/dist/theme/createSurfaceColorDiagnosticCollector.d.ts.map +0 -1
  425. package/dist/theme/createSurfaceColorDiagnosticCollector.js.map +0 -1
  426. package/dist/theme/createSurfaceSemanticPolicy.d.ts.map +0 -1
  427. package/dist/theme/createSurfaceSemanticPolicy.js.map +0 -1
  428. package/dist/theme/createTheme.d.ts +0 -5
  429. package/dist/theme/createTheme.d.ts.map +0 -1
  430. package/dist/theme/createTheme.js +0 -49
  431. package/dist/theme/createTheme.js.map +0 -1
  432. package/dist/theme/defaultTokens.d.ts +0 -3
  433. package/dist/theme/defaultTokens.d.ts.map +0 -1
  434. package/dist/theme/defaultTokens.js.map +0 -1
  435. package/dist/theme/index.d.ts +0 -3
  436. package/dist/theme/index.d.ts.map +0 -1
  437. package/dist/theme/index.js +0 -3
  438. package/dist/theme/index.js.map +0 -1
  439. package/dist/theme/public.d.ts +0 -5
  440. package/dist/theme/public.d.ts.map +0 -1
  441. package/dist/theme/public.js +0 -5
  442. package/dist/theme/public.js.map +0 -1
  443. package/dist/theme/resolveGlobalTokens.d.ts.map +0 -1
  444. package/dist/theme/resolveGlobalTokens.js.map +0 -1
  445. package/dist/theme/resolveHeadingTokenOverrides.d.ts.map +0 -1
  446. package/dist/theme/resolveHeadingTokenOverrides.js.map +0 -1
  447. package/dist/theme/resolveNumericTokenOverrides.d.ts.map +0 -1
  448. package/dist/theme/resolveNumericTokenOverrides.js.map +0 -1
  449. package/dist/theme/resolveRoleSemantics.d.ts.map +0 -1
  450. package/dist/theme/resolveRoleSemantics.js.map +0 -1
  451. package/dist/theme/resolveSurfaceSemanticModel.d.ts.map +0 -1
  452. package/dist/theme/resolveSurfaceSemanticModel.js.map +0 -1
  453. package/dist/theme/resolveToken.d.ts.map +0 -1
  454. package/dist/theme/resolveToken.js +0 -19
  455. package/dist/theme/resolveToken.js.map +0 -1
  456. package/dist/theme/resolveWeightTokenOverrides.d.ts.map +0 -1
  457. package/dist/theme/resolveWeightTokenOverrides.js.map +0 -1
  458. package/dist/theme/surfaceColorPolicy.d.ts +0 -8
  459. package/dist/theme/surfaceColorPolicy.d.ts.map +0 -1
  460. package/dist/theme/surfaceColorPolicy.js +0 -8
  461. package/dist/theme/surfaceColorPolicy.js.map +0 -1
  462. package/dist/theme/types.d.ts.map +0 -1
  463. package/dist/theme/types.js +0 -2
  464. package/dist/theme/types.js.map +0 -1
  465. package/dist/utils/deepEqual.d.ts +0 -6
  466. package/dist/utils/deepEqual.d.ts.map +0 -1
  467. package/dist/utils/deepEqual.js +0 -36
  468. package/dist/utils/deepEqual.js.map +0 -1
  469. package/dist/utils/deepMerge.d.ts +0 -6
  470. package/dist/utils/deepMerge.d.ts.map +0 -1
  471. package/dist/utils/deepMerge.js +0 -26
  472. package/dist/utils/deepMerge.js.map +0 -1
  473. package/src/context/FontContext.tsx +0 -59
  474. package/src/context/TranslationContext.tsx +0 -50
  475. package/src/interactionPolicy.test.ts +0 -86
  476. package/src/primitives/button-base/index.ts +0 -2
  477. package/src/surfaceColor.test.ts +0 -44
  478. package/src/theme/ThemeContext.tsx +0 -94
  479. package/src/theme/colorEngine.test.ts +0 -302
  480. package/src/theme/createTheme.ts +0 -60
  481. package/src/theme/defaultTokens.ts +0 -61
  482. package/src/theme/index.ts +0 -2
  483. package/src/theme/public.ts +0 -4
  484. package/src/theme/resolveToken.ts +0 -32
  485. package/src/theme/surfaceColorPolicy.ts +0 -7
  486. package/src/utils/deepEqual.ts +0 -34
  487. package/src/utils/deepMerge.test.ts +0 -113
  488. package/src/utils/deepMerge.ts +0 -29
  489. /package/dist/{surfaceColor.js → constants/surfaceColor.js} +0 -0
  490. /package/dist/{theme → features/theme/domain}/createSurfaceColorDiagnosticCollector.js +0 -0
  491. /package/dist/{theme → features/theme/domain}/resolveSurfaceSemanticModel.js +0 -0
  492. /package/dist/{theme → features/theme/utils}/resolveHeadingTokenOverrides.js +0 -0
  493. /package/dist/{theme → features/theme/utils}/resolveNumericTokenOverrides.d.ts +0 -0
  494. /package/dist/{theme → features/theme/utils}/resolveNumericTokenOverrides.js +0 -0
  495. /package/dist/{interactionPolicy.d.ts → types/interactionPolicy.d.ts} +0 -0
  496. /package/dist/{interactionPolicy.js → types/interactionPolicy.js} +0 -0
  497. /package/src/{theme → features/theme/utils}/resolveNumericTokenOverrides.ts +0 -0
  498. /package/src/{interactionPolicy.ts → types/interactionPolicy.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../../../src/features/modal/adapters/inbound/Modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Pressable, StyleSheet, View as ReactNativeView, type ViewStyle } from 'react-native';\n\nimport { FocusScope } from '../../../../internal/focus/FocusScope';\nimport { Portal } from '../../../../internal/overlay/Portal';\nimport { resolvePointerEvents } from '../../../../internal/resolvePointerEvents';\nimport { resolveOverlayAnimation } from '../../../../internal/resolvers';\nimport { useTheme } from '../../../../theme/ThemeContext';\nimport type { ModalProps } from '../../../../types/modal';\nimport { View } from '../../../layout/public';\nimport { Surface } from '../../../surface/public';\n\nconst boxNonePointerEvents = resolvePointerEvents('box-none');\n\n/*** Renders the generic Surface modal overlay and focus boundary. */\nexport function Modal({\n visible,\n onDismiss,\n children,\n closeOnBackdrop = true,\n interactionPolicy = 'enabled',\n testID,\n}: ModalProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('modal');\n const passive = interactionPolicy === 'passive';\n const backdropPress = passive || !closeOnBackdrop ? undefined : onDismiss;\n\n if (!visible) return null;\n\n return (\n <Portal layer=\"modal\" visible={visible}>\n <ReactNativeView\n {...boxNonePointerEvents.props}\n style={[boxNonePointerEvents.style, styles.fill]}\n >\n <Pressable\n onPress={backdropPress}\n style={[\n styles.fill,\n resolveBackdropStyle(theme.semantics.neutral.text, animation.backdropOpacity),\n ]}\n testID={testID ? `${testID}-backdrop` : undefined}\n />\n <FocusScope\n active={visible}\n onEscape={passive ? undefined : onDismiss}\n testID={testID ? `${testID}-focus` : undefined}\n >\n <View align=\"center\" justify=\"center\" p=\"l\" style={styles.center}>\n <ReactNativeView accessible accessibilityViewIsModal style={styles.content}>\n <Surface p=\"l\" style={styles.surface} testID={testID} variant=\"raised\">\n {children}\n </Surface>\n </ReactNativeView>\n </View>\n </FocusScope>\n </ReactNativeView>\n </Portal>\n );\n}\n\n/*** Resolves the runtime backdrop color and opacity without inline JSX styles. */\nfunction resolveBackdropStyle(backgroundColor: string, opacity: number): ViewStyle {\n return { backgroundColor, opacity };\n}\n\nconst styles = StyleSheet.create({\n center: { flex: 1 },\n content: { maxWidth: 560, width: '100%' },\n fill: { bottom: 0, left: 0, position: 'absolute', right: 0, top: 0 },\n surface: {\n shadowOffset: { height: 8, width: 0 },\n shadowOpacity: 0.14,\n shadowRadius: 18,\n },\n});\n"]}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../../../src/features/modal/adapters/inbound/Modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Pressable, StyleSheet, View as ReactNativeView, type ViewStyle } from 'react-native';\n\nimport { FocusScope } from '../../../../internal/focus/FocusScope';\nimport { Portal } from '../../../../internal/overlay/Portal';\nimport { resolvePointerEvents } from '../../../../internal/resolvePointerEvents';\nimport { resolveOverlayAnimation } from '../../../../internal/resolvers';\nimport type { ModalProps } from '../../../../types/modal';\nimport { View } from '../../../layout/public';\nimport { Surface } from '../../../surface/public';\nimport { useTheme } from '../../../theme/runtime';\n\nconst boxNonePointerEvents = resolvePointerEvents('box-none');\n\n/*** Renders the generic Surface modal overlay and focus boundary. */\nexport function Modal({\n visible,\n onDismiss,\n children,\n closeOnBackdrop = true,\n interactionPolicy = 'enabled',\n testID,\n}: ModalProps) {\n const { theme } = useTheme();\n const animation = resolveOverlayAnimation('modal');\n const passive = interactionPolicy === 'passive';\n const backdropPress = passive || !closeOnBackdrop ? undefined : onDismiss;\n\n if (!visible) return null;\n\n return (\n <Portal layer=\"modal\" visible={visible}>\n <ReactNativeView\n {...boxNonePointerEvents.props}\n style={[boxNonePointerEvents.style, styles.fill]}\n >\n <Pressable\n onPress={backdropPress}\n style={[\n styles.fill,\n resolveBackdropStyle(theme.semantics.neutral.text, animation.backdropOpacity),\n ]}\n testID={testID ? `${testID}-backdrop` : undefined}\n />\n <FocusScope\n active={visible}\n onEscape={passive ? undefined : onDismiss}\n testID={testID ? `${testID}-focus` : undefined}\n >\n <View align=\"center\" justify=\"center\" p=\"l\" style={styles.center}>\n <ReactNativeView accessible accessibilityViewIsModal style={styles.content}>\n <Surface p=\"l\" style={styles.surface} testID={testID} variant=\"raised\">\n {children}\n </Surface>\n </ReactNativeView>\n </View>\n </FocusScope>\n </ReactNativeView>\n </Portal>\n );\n}\n\n/*** Resolves the runtime backdrop color and opacity without inline JSX styles. */\nfunction resolveBackdropStyle(backgroundColor: string, opacity: number): ViewStyle {\n return { backgroundColor, opacity };\n}\n\nconst styles = StyleSheet.create({\n center: { flex: 1 },\n content: { maxWidth: 560, width: '100%' },\n fill: { bottom: 0, left: 0, position: 'absolute', right: 0, top: 0 },\n surface: {\n shadowOffset: { height: 8, width: 0 },\n shadowOpacity: 0.14,\n shadowRadius: 18,\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverMenu.d.ts","sourceRoot":"","sources":["../../../../../src/features/popover-menu/adapters/inbound/PopoverMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAQzF,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAoB,EACpB,iBAA6B,EAC7B,MAAM,GACP,EAAE,gBAAgB,qBAyBlB"}
1
+ {"version":3,"file":"PopoverMenu.d.ts","sourceRoot":"","sources":["../../../../../src/features/popover-menu/adapters/inbound/PopoverMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AASzF,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAoB,EACpB,iBAA6B,EAC7B,MAAM,GACP,EAAE,gBAAgB,qBAyBlB"}
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import { Pressable } from 'react-native';
3
3
  import { FocusScope } from '../../../../internal/focus/FocusScope';
4
4
  import { useFocusManager } from '../../../../internal/focus/useFocusManager';
5
- import { useTheme } from '../../../../theme/ThemeContext';
6
5
  import { View } from '../../../layout/public';
7
6
  import { Popover } from '../../../popover/public';
8
7
  import { Surface } from '../../../surface/public';
8
+ import { useTheme } from '../../../theme/runtime';
9
9
  import { Text } from '../../../typography/public';
10
10
  import { usePopoverMenuController } from '../../composition/usePopoverMenuController';
11
11
  import { resolveNextMenuIndex } from '../../utils/resolveNextMenuIndex';
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverMenu.js","sourceRoot":"","sources":["../../../../../src/features/popover-menu/adapters/inbound/PopoverMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAa,GAAG,IAAI,EACpB,iBAAiB,GAAG,SAAS,EAC7B,MAAM,GACW;IACjB,MAAM,OAAO,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAE1F,OAAO,CACL,CAAC,OAAO,CACN,MAAM,CAAC,CAAC,OAAO,CAAC,CAChB,mBAAmB,CACnB,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CACrC,YAAY,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACtB,SAAS,CAAC,cAAc,CACxB,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,kBAAkB,CACjB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,WAAW,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CACpC,cAAc,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAC1C,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACxB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,cAAc,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAC1C,MAAM,CAAC,CAAC,MAAM,CAAC,EAEnB;IAAA,EAAE,OAAO,CAAC,CACX,CAAC;AACJ,CAAC;AAYD,8EAA8E;AAC9E,SAAS,kBAAkB,CAAC,EAC1B,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,EACL,OAAO,EACP,cAAc,EACd,MAAM,GACkB;IACxB,sBAAsB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAEjG,OAAO,CACL,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CACvD;MAAA,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CACvE;QAAA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,CAAC,eAAe,CACd,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,MAAM,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAC9B,cAAc,CAAC,CAAC,cAAc,CAAC,CAC/B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACf,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,MAAM,CAAC,CAAC,MAAM,CAAC,EACf,CACH,CAAC,CACJ;MAAA,EAAE,OAAO,CACX;IAAA,EAAE,UAAU,CAAC,CACd,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,sBAAsB,CAAC,EAC9B,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,EACL,OAAO,EACP,cAAc,GAC0B;IACxC,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C,KAAK,CAAC,SAAS,CACb,GAAG,EAAE,CACH,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC9B,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,MAAM;gBAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC,CAAC,EACJ,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CACpF,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,SAAS,eAAe,CAAC,EACvB,MAAM,EACN,MAAM,EACN,cAAc,EACd,OAAO,EACP,MAAM,GAOP;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAE3C,OAAO,CACL,CAAC,SAAS,CACR,iBAAiB,CAAC,UAAU,CAC5B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC5D,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAC5D,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAE3D;MAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CACrE,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACpC,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,MAAM,CAAC,GAAG,CAEV;QAAA,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACzD;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,sBAAsB,CAAC,EAC9B,MAAM,EACN,MAAM,GAIP;IACC,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAChF;MAAA,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACtD;MAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACZ;QAAA,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CACb;UAAA,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,UAAU,CAAC,CAClB,OAAO,CAAC,WAAW,CACnB,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAEhD;YAAA,CAAC,MAAM,CAAC,KAAK,CACf;UAAA,EAAE,IAAI,CACN;UAAA,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CACtC;cAAA,CAAC,MAAM,CAAC,WAAW,CACrB;YAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable } from 'react-native';\n\nimport { FocusScope } from '../../../../internal/focus/FocusScope';\nimport { useFocusManager } from '../../../../internal/focus/useFocusManager';\nimport { useTheme } from '../../../../theme/ThemeContext';\nimport type { PopoverMenuAction, PopoverMenuProps } from '../../../../types/popoverMenu';\nimport { View } from '../../../layout/public';\nimport { Popover } from '../../../popover/public';\nimport { Surface } from '../../../surface/public';\nimport { Text } from '../../../typography/public';\nimport { usePopoverMenuController } from '../../composition/usePopoverMenuController';\nimport { resolveNextMenuIndex } from '../../utils/resolveNextMenuIndex';\n\n/*** Presents an anchored action menu using the shared Popover capability. */\nexport function PopoverMenu({\n trigger,\n actions,\n dismiss,\n closeOnSelect = true,\n interactionPolicy = 'enabled',\n testID,\n}: PopoverMenuProps) {\n const passive = interactionPolicy === 'passive';\n const controller = usePopoverMenuController({ actions, closeOnSelect, dismiss, passive });\n\n return (\n <Popover\n anchor={trigger}\n closeOnOutsidePress\n interactionPolicy={interactionPolicy}\n onOpenChange={controller.handleOpenChange}\n open={controller.open}\n placement=\"bottom-start\"\n testID={testID}\n >\n <PopoverMenuContent\n actions={actions}\n activeIndex={controller.activeIndex}\n activateAction={controller.activateAction}\n close={controller.close}\n passive={passive}\n setActiveIndex={controller.setActiveIndex}\n testID={testID}\n />\n </Popover>\n );\n}\n\ninterface PopoverMenuContentProps {\n actions: readonly PopoverMenuAction[];\n activeIndex: number;\n activateAction: (action: PopoverMenuAction) => void;\n close: () => void;\n passive: boolean;\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n testID?: string;\n}\n\n/*** Renders menu semantics and keyboard navigation inside an open Popover. */\nfunction PopoverMenuContent({\n actions,\n activeIndex,\n activateAction,\n close,\n passive,\n setActiveIndex,\n testID,\n}: PopoverMenuContentProps) {\n usePopoverMenuKeyboard({ actions, activeIndex, activateAction, close, passive, setActiveIndex });\n\n return (\n <FocusScope active onEscape={passive ? undefined : close}>\n <Surface accessibilityRole=\"menu\" p=\"xs\" testID={testID} variant=\"raised\">\n {actions.map((action, index) => (\n <PopoverMenuItem\n action={action}\n active={index === activeIndex}\n activateAction={activateAction}\n key={action.id}\n passive={passive}\n testID={testID}\n />\n ))}\n </Surface>\n </FocusScope>\n );\n}\n\n/*** Subscribes an open PopoverMenu to standard menu keyboard controls. */\nfunction usePopoverMenuKeyboard({\n actions,\n activeIndex,\n activateAction,\n close,\n passive,\n setActiveIndex,\n}: Omit<PopoverMenuContentProps, 'testID'>) {\n const { bindKeydown } = useFocusManager();\n\n React.useEffect(\n () =>\n bindKeydown((event) => {\n if (passive) return;\n const { key } = event;\n if (key === undefined) return;\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(key)) {\n event.preventDefault();\n setActiveIndex((current) => resolveNextMenuIndex(actions, current, key));\n return;\n }\n if (key === 'Enter') {\n event.preventDefault();\n const action = actions.at(activeIndex);\n if (action) activateAction(action);\n return;\n }\n if (key === 'Escape') {\n event.preventDefault();\n close();\n }\n }),\n [actions, activeIndex, activateAction, bindKeydown, close, passive, setActiveIndex],\n );\n}\n\n/*** Renders one accessible PopoverMenu action row. */\nfunction PopoverMenuItem({\n action,\n active,\n activateAction,\n passive,\n testID,\n}: {\n action: PopoverMenuAction;\n active: boolean;\n activateAction: (action: PopoverMenuAction) => void;\n passive: boolean;\n testID?: string;\n}) {\n const { theme } = useTheme();\n const selected = action.selected ?? active;\n\n return (\n <Pressable\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: action.disabled, selected }}\n disabled={action.disabled}\n onPress={passive ? undefined : () => activateAction(action)}\n testID={testID ? `${testID}-item-${action.id}` : undefined}\n >\n <View\n bg={selected ? theme.semantics.action.neutral.softBg : 'transparent'}\n opacity={action.disabled ? 0.56 : 1}\n px=\"m\"\n py=\"s\"\n radius=\"s\"\n >\n <PopoverMenuItemContent action={action} active={active} />\n </View>\n </Pressable>\n );\n}\n\n/*** Renders the leading, textual, and trailing content of one menu action. */\nfunction PopoverMenuItemContent({\n action,\n active,\n}: {\n action: PopoverMenuAction;\n active: boolean;\n}) {\n const titleColor =\n action.intent === 'danger' ? 'danger' : active || action.selected ? 'neutral' : undefined;\n\n return (\n <View align=\"center\" direction=\"row\" gap=\"s\" justify=\"space-between\" wrap=\"nowrap\">\n {action.leading ? <View>{action.leading}</View> : null}\n <View flex={1}>\n <View gap=\"xxs\">\n <Text\n color={titleColor}\n variant=\"bodySmall\"\n weight={action.selected ? 'semiBold' : 'medium'}\n >\n {action.title}\n </Text>\n {action.description ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n {action.description}\n </Text>\n ) : null}\n </View>\n </View>\n {action.trailing ? <View>{action.trailing}</View> : null}\n </View>\n );\n}\n"]}
1
+ {"version":3,"file":"PopoverMenu.js","sourceRoot":"","sources":["../../../../../src/features/popover-menu/adapters/inbound/PopoverMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAE7E,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAa,GAAG,IAAI,EACpB,iBAAiB,GAAG,SAAS,EAC7B,MAAM,GACW;IACjB,MAAM,OAAO,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,wBAAwB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAE1F,OAAO,CACL,CAAC,OAAO,CACN,MAAM,CAAC,CAAC,OAAO,CAAC,CAChB,mBAAmB,CACnB,iBAAiB,CAAC,CAAC,iBAAiB,CAAC,CACrC,YAAY,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACtB,SAAS,CAAC,cAAc,CACxB,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,kBAAkB,CACjB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,WAAW,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CACpC,cAAc,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAC1C,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CACxB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,cAAc,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAC1C,MAAM,CAAC,CAAC,MAAM,CAAC,EAEnB;IAAA,EAAE,OAAO,CAAC,CACX,CAAC;AACJ,CAAC;AAYD,8EAA8E;AAC9E,SAAS,kBAAkB,CAAC,EAC1B,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,EACL,OAAO,EACP,cAAc,EACd,MAAM,GACkB;IACxB,sBAAsB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAEjG,OAAO,CACL,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CACvD;MAAA,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CACvE;QAAA,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC9B,CAAC,eAAe,CACd,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,MAAM,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAC9B,cAAc,CAAC,CAAC,cAAc,CAAC,CAC/B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CACf,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,MAAM,CAAC,CAAC,MAAM,CAAC,EACf,CACH,CAAC,CACJ;MAAA,EAAE,OAAO,CACX;IAAA,EAAE,UAAU,CAAC,CACd,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,sBAAsB,CAAC,EAC9B,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,EACL,OAAO,EACP,cAAc,GAC0B;IACxC,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C,KAAK,CAAC,SAAS,CACb,GAAG,EAAE,CACH,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QACtB,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC9B,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,MAAM;gBAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC,CAAC,EACJ,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CACpF,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,SAAS,eAAe,CAAC,EACvB,MAAM,EACN,MAAM,EACN,cAAc,EACd,OAAO,EACP,MAAM,GAOP;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAE3C,OAAO,CACL,CAAC,SAAS,CACR,iBAAiB,CAAC,UAAU,CAC5B,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC5D,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAC5D,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAE3D;MAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CACrE,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACpC,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,MAAM,CAAC,GAAG,CAEV;QAAA,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACzD;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAS,sBAAsB,CAAC,EAC9B,MAAM,EACN,MAAM,GAIP;IACC,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAChF;MAAA,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACtD;MAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACZ;QAAA,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CACb;UAAA,CAAC,IAAI,CACH,KAAK,CAAC,CAAC,UAAU,CAAC,CAClB,OAAO,CAAC,WAAW,CACnB,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAEhD;YAAA,CAAC,MAAM,CAAC,KAAK,CACf;UAAA,EAAE,IAAI,CACN;UAAA,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CACtC;cAAA,CAAC,MAAM,CAAC,WAAW,CACrB;YAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACV;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable } from 'react-native';\n\nimport { FocusScope } from '../../../../internal/focus/FocusScope';\nimport { useFocusManager } from '../../../../internal/focus/useFocusManager';\nimport type { PopoverMenuAction, PopoverMenuProps } from '../../../../types/popoverMenu';\nimport { View } from '../../../layout/public';\nimport { Popover } from '../../../popover/public';\nimport { Surface } from '../../../surface/public';\nimport { useTheme } from '../../../theme/runtime';\nimport { Text } from '../../../typography/public';\nimport { usePopoverMenuController } from '../../composition/usePopoverMenuController';\nimport { resolveNextMenuIndex } from '../../utils/resolveNextMenuIndex';\n\n/*** Presents an anchored action menu using the shared Popover capability. */\nexport function PopoverMenu({\n trigger,\n actions,\n dismiss,\n closeOnSelect = true,\n interactionPolicy = 'enabled',\n testID,\n}: PopoverMenuProps) {\n const passive = interactionPolicy === 'passive';\n const controller = usePopoverMenuController({ actions, closeOnSelect, dismiss, passive });\n\n return (\n <Popover\n anchor={trigger}\n closeOnOutsidePress\n interactionPolicy={interactionPolicy}\n onOpenChange={controller.handleOpenChange}\n open={controller.open}\n placement=\"bottom-start\"\n testID={testID}\n >\n <PopoverMenuContent\n actions={actions}\n activeIndex={controller.activeIndex}\n activateAction={controller.activateAction}\n close={controller.close}\n passive={passive}\n setActiveIndex={controller.setActiveIndex}\n testID={testID}\n />\n </Popover>\n );\n}\n\ninterface PopoverMenuContentProps {\n actions: readonly PopoverMenuAction[];\n activeIndex: number;\n activateAction: (action: PopoverMenuAction) => void;\n close: () => void;\n passive: boolean;\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n testID?: string;\n}\n\n/*** Renders menu semantics and keyboard navigation inside an open Popover. */\nfunction PopoverMenuContent({\n actions,\n activeIndex,\n activateAction,\n close,\n passive,\n setActiveIndex,\n testID,\n}: PopoverMenuContentProps) {\n usePopoverMenuKeyboard({ actions, activeIndex, activateAction, close, passive, setActiveIndex });\n\n return (\n <FocusScope active onEscape={passive ? undefined : close}>\n <Surface accessibilityRole=\"menu\" p=\"xs\" testID={testID} variant=\"raised\">\n {actions.map((action, index) => (\n <PopoverMenuItem\n action={action}\n active={index === activeIndex}\n activateAction={activateAction}\n key={action.id}\n passive={passive}\n testID={testID}\n />\n ))}\n </Surface>\n </FocusScope>\n );\n}\n\n/*** Subscribes an open PopoverMenu to standard menu keyboard controls. */\nfunction usePopoverMenuKeyboard({\n actions,\n activeIndex,\n activateAction,\n close,\n passive,\n setActiveIndex,\n}: Omit<PopoverMenuContentProps, 'testID'>) {\n const { bindKeydown } = useFocusManager();\n\n React.useEffect(\n () =>\n bindKeydown((event) => {\n if (passive) return;\n const { key } = event;\n if (key === undefined) return;\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(key)) {\n event.preventDefault();\n setActiveIndex((current) => resolveNextMenuIndex(actions, current, key));\n return;\n }\n if (key === 'Enter') {\n event.preventDefault();\n const action = actions.at(activeIndex);\n if (action) activateAction(action);\n return;\n }\n if (key === 'Escape') {\n event.preventDefault();\n close();\n }\n }),\n [actions, activeIndex, activateAction, bindKeydown, close, passive, setActiveIndex],\n );\n}\n\n/*** Renders one accessible PopoverMenu action row. */\nfunction PopoverMenuItem({\n action,\n active,\n activateAction,\n passive,\n testID,\n}: {\n action: PopoverMenuAction;\n active: boolean;\n activateAction: (action: PopoverMenuAction) => void;\n passive: boolean;\n testID?: string;\n}) {\n const { theme } = useTheme();\n const selected = action.selected ?? active;\n\n return (\n <Pressable\n accessibilityRole=\"menuitem\"\n accessibilityState={{ disabled: action.disabled, selected }}\n disabled={action.disabled}\n onPress={passive ? undefined : () => activateAction(action)}\n testID={testID ? `${testID}-item-${action.id}` : undefined}\n >\n <View\n bg={selected ? theme.semantics.action.neutral.softBg : 'transparent'}\n opacity={action.disabled ? 0.56 : 1}\n px=\"m\"\n py=\"s\"\n radius=\"s\"\n >\n <PopoverMenuItemContent action={action} active={active} />\n </View>\n </Pressable>\n );\n}\n\n/*** Renders the leading, textual, and trailing content of one menu action. */\nfunction PopoverMenuItemContent({\n action,\n active,\n}: {\n action: PopoverMenuAction;\n active: boolean;\n}) {\n const titleColor =\n action.intent === 'danger' ? 'danger' : active || action.selected ? 'neutral' : undefined;\n\n return (\n <View align=\"center\" direction=\"row\" gap=\"s\" justify=\"space-between\" wrap=\"nowrap\">\n {action.leading ? <View>{action.leading}</View> : null}\n <View flex={1}>\n <View gap=\"xxs\">\n <Text\n color={titleColor}\n variant=\"bodySmall\"\n weight={action.selected ? 'semiBold' : 'medium'}\n >\n {action.title}\n </Text>\n {action.description ? (\n <Text emphasis=\"muted\" variant=\"caption\">\n {action.description}\n </Text>\n ) : null}\n </View>\n </View>\n {action.trailing ? <View>{action.trailing}</View> : null}\n </View>\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { PressableProps } from '../../../../types/pressable';
3
+ /*** Renders the token-aware Surface adapter for React Native Pressable. */
4
+ export declare function Pressable({ children, disabled, interactionPolicy, onPress, onLongPress, accessibilityLabel, accessibilityRole, accessibilityState, style, testID, ...props }: PressableProps): React.JSX.Element;
5
+ //# sourceMappingURL=Pressable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pressable.d.ts","sourceRoot":"","sources":["../../../../../src/features/pressable/adapters/inbound/Pressable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIlE,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,QAAgB,EAChB,iBAA6B,EAC7B,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,iBAA4B,EAC5B,kBAAkB,EAClB,KAAK,EACL,MAAM,EACN,GAAG,KAAK,EACT,EAAE,cAAc,qBAsChB"}
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { Platform, Pressable as ReactNativePressable, } from 'react-native';
3
+ import { useResponsiveRuntime } from '../../../../core/responsive';
4
+ import { resolveFocusRingStyles, resolveInteractiveState, } from '../../../../internal/resolvers';
5
+ import { resolveViewStyles } from '../../../../utils/resolveViewStyles';
6
+ import { useTheme } from '../../../theme/runtime';
7
+ /*** Renders the token-aware Surface adapter for React Native Pressable. */
8
+ export function Pressable({ children, disabled = false, interactionPolicy = 'enabled', onPress, onLongPress, accessibilityLabel, accessibilityRole = 'button', accessibilityState, style, testID, ...props }) {
9
+ const { theme } = useTheme();
10
+ const { breakpoint } = useResponsiveRuntime();
11
+ const [hovered, setHovered] = React.useState(false);
12
+ const [focused, setFocused] = React.useState(false);
13
+ const isWeb = Platform.OS === 'web';
14
+ const resolvedViewStyles = resolveViewStyles(theme, breakpoint, props);
15
+ const pressHandlers = resolvePressHandlers(interactionPolicy, onPress, onLongPress);
16
+ return (<ReactNativePressable {...pressHandlers} accessibilityLabel={accessibilityLabel} accessibilityRole={accessibilityRole} accessibilityState={{ ...accessibilityState, disabled }} disabled={disabled} onBlur={() => setFocused(false)} onFocus={() => {
17
+ if (isWeb)
18
+ setFocused(true);
19
+ }} onHoverIn={isWeb ? () => setHovered(true) : undefined} onHoverOut={isWeb ? () => setHovered(false) : undefined} style={(pressableState) => {
20
+ const state = resolveInteractionState(pressableState, hovered, focused, disabled);
21
+ return [
22
+ resolvedViewStyles,
23
+ resolveFocusRingStyles(theme.semantics.border.focus, state.focused, isWeb),
24
+ style,
25
+ ];
26
+ }} testID={testID}>
27
+ {(pressableState) => {
28
+ const state = resolveInteractionState(pressableState, hovered, focused, disabled);
29
+ return typeof children === 'function' ? children(state) : children;
30
+ }}
31
+ </ReactNativePressable>);
32
+ }
33
+ /*** Resolves press handlers according to the shared interaction policy. */
34
+ function resolvePressHandlers(interactionPolicy, onPress, onLongPress) {
35
+ return interactionPolicy === 'passive'
36
+ ? { onLongPress: undefined, onPress: undefined }
37
+ : { onLongPress, onPress };
38
+ }
39
+ /*** Resolves one native Pressable state into the canonical Surface interaction state. */
40
+ function resolveInteractionState(pressableState, hovered, focused, disabled) {
41
+ return resolveInteractiveState({
42
+ pressed: pressableState.pressed,
43
+ hovered,
44
+ focused,
45
+ disabled,
46
+ });
47
+ }
48
+ //# sourceMappingURL=Pressable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pressable.js","sourceRoot":"","sources":["../../../../../src/features/pressable/adapters/inbound/Pressable.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Platform,\n Pressable as ReactNativePressable,\n type PressableStateCallbackType,\n} from 'react-native';\n\nimport { useResponsiveRuntime } from '../../../../core/responsive';\nimport {\n type InteractionState,\n resolveFocusRingStyles,\n resolveInteractiveState,\n} from '../../../../internal/resolvers';\nimport type { PressableProps } from '../../../../types/pressable';\nimport { resolveViewStyles } from '../../../../utils/resolveViewStyles';\nimport { useTheme } from '../../../theme/runtime';\n\n/*** Renders the token-aware Surface adapter for React Native Pressable. */\nexport function Pressable({\n children,\n disabled = false,\n interactionPolicy = 'enabled',\n onPress,\n onLongPress,\n accessibilityLabel,\n accessibilityRole = 'button',\n accessibilityState,\n style,\n testID,\n ...props\n}: PressableProps) {\n const { theme } = useTheme();\n const { breakpoint } = useResponsiveRuntime();\n const [hovered, setHovered] = React.useState(false);\n const [focused, setFocused] = React.useState(false);\n const isWeb = Platform.OS === 'web';\n const resolvedViewStyles = resolveViewStyles(theme, breakpoint, props);\n const pressHandlers = resolvePressHandlers(interactionPolicy, onPress, onLongPress);\n\n return (\n <ReactNativePressable\n {...pressHandlers}\n accessibilityLabel={accessibilityLabel}\n accessibilityRole={accessibilityRole}\n accessibilityState={{ ...accessibilityState, disabled }}\n disabled={disabled}\n onBlur={() => setFocused(false)}\n onFocus={() => {\n if (isWeb) setFocused(true);\n }}\n onHoverIn={isWeb ? () => setHovered(true) : undefined}\n onHoverOut={isWeb ? () => setHovered(false) : undefined}\n style={(pressableState) => {\n const state = resolveInteractionState(pressableState, hovered, focused, disabled);\n return [\n resolvedViewStyles,\n resolveFocusRingStyles(theme.semantics.border.focus, state.focused, isWeb),\n style,\n ];\n }}\n testID={testID}\n >\n {(pressableState) => {\n const state = resolveInteractionState(pressableState, hovered, focused, disabled);\n return typeof children === 'function' ? children(state) : children;\n }}\n </ReactNativePressable>\n );\n}\n\n/*** Resolves press handlers according to the shared interaction policy. */\nfunction resolvePressHandlers(\n interactionPolicy: PressableProps['interactionPolicy'],\n onPress: PressableProps['onPress'],\n onLongPress: PressableProps['onLongPress'],\n) {\n return interactionPolicy === 'passive'\n ? { onLongPress: undefined, onPress: undefined }\n : { onLongPress, onPress };\n}\n\n/*** Resolves one native Pressable state into the canonical Surface interaction state. */\nfunction resolveInteractionState(\n pressableState: PressableStateCallbackType,\n hovered: boolean,\n focused: boolean,\n disabled: boolean,\n): InteractionState {\n return resolveInteractiveState({\n pressed: pressableState.pressed,\n hovered,\n focused,\n disabled,\n });\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export type { PressableProps } from '../../types/pressable';
2
+ export { Pressable } from './adapters/inbound/Pressable';
3
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/features/pressable/public.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Pressable } from './adapters/inbound/Pressable';
2
+ //# sourceMappingURL=public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/features/pressable/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC","sourcesContent":["export type { PressableProps } from '../../types/pressable';\nexport { Pressable } from './adapters/inbound/Pressable';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/features/surface/adapters/inbound/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,2BAA2B,CAAC;AAG9E,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,EAAE,OAAmB,EAAE,MAAY,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,qBAiB3F"}
1
+ {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/features/surface/adapters/inbound/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,2BAA2B,CAAC;AAI9E,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,EAAE,OAAmB,EAAE,MAAY,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,qBAiB3F"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { useTheme } from '../../../../theme/ThemeContext';
3
2
  import { View } from '../../../layout/public';
3
+ import { useTheme } from '../../../theme/runtime';
4
4
  /*** Renders a themed content surface with semantic elevation and border variants. */
5
5
  export function Surface({ variant = 'default', radius = 'm', style, ...props }) {
6
6
  const { theme } = useTheme();
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/features/surface/adapters/inbound/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,qFAAqF;AACrF,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAgB;IAC1F,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,eAAe,GACnB,OAAO,KAAK,QAAQ;QAClB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;QAChC,CAAC,CAAC,OAAO,KAAK,QAAQ;YACpB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;YAChC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;IAEnD,OAAO,CACL,CAAC,IAAI,CACH,IAAI,KAAK,CAAC,CACV,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC,EACnF,CACH,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAS,2BAA2B,CAClC,OAAuB,EACvB,WAAmB,EACnB,eAAuB;IAEvB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACzE,KAAK,QAAQ;YACX,OAAO;gBACL,eAAe;gBACf,WAAW,EAAE,aAAa;gBAC1B,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACrC,YAAY,EAAE,CAAC;aAChB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACzE,KAAK,SAAS;YACZ,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC","sourcesContent":["import React from 'react';\nimport type { ViewStyle } from 'react-native';\n\nimport { useTheme } from '../../../../theme/ThemeContext';\nimport type { SurfaceProps, SurfaceVariant } from '../../../../types/surface';\nimport { View } from '../../../layout/public';\n\n/*** Renders a themed content surface with semantic elevation and border variants. */\nexport function Surface({ variant = 'default', radius = 'm', style, ...props }: SurfaceProps) {\n const { theme } = useTheme();\n const backgroundColor =\n variant === 'subtle'\n ? theme.semantics.surface.subtle\n : variant === 'raised'\n ? theme.semantics.surface.raised\n : theme.semantics.surface.default;\n const borderColor = theme.semantics.border.default;\n\n return (\n <View\n {...props}\n radius={radius}\n style={[resolveSurfaceVariantStyles(variant, borderColor, backgroundColor), style]}\n />\n );\n}\n\n/*** Resolves the semantic visual treatment for one Surface variant. */\nfunction resolveSurfaceVariantStyles(\n variant: SurfaceVariant,\n borderColor: string,\n backgroundColor: string,\n): ViewStyle {\n switch (variant) {\n case 'subtle':\n return { backgroundColor, borderColor: 'transparent', borderWidth: 0 };\n case 'raised':\n return {\n backgroundColor,\n borderColor: 'transparent',\n borderWidth: 0,\n elevation: 2,\n shadowColor: '#000000',\n shadowOpacity: 0.08,\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 8,\n };\n case 'outline':\n return { backgroundColor: 'transparent', borderColor, borderWidth: 1 };\n case 'default':\n return { backgroundColor, borderColor, borderWidth: 1 };\n }\n}\n"]}
1
+ {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/features/surface/adapters/inbound/Surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,qFAAqF;AACrF,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAgB;IAC1F,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,eAAe,GACnB,OAAO,KAAK,QAAQ;QAClB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;QAChC,CAAC,CAAC,OAAO,KAAK,QAAQ;YACpB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;YAChC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;IAEnD,OAAO,CACL,CAAC,IAAI,CACH,IAAI,KAAK,CAAC,CACV,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,OAAO,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC,EACnF,CACH,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,SAAS,2BAA2B,CAClC,OAAuB,EACvB,WAAmB,EACnB,eAAuB;IAEvB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACzE,KAAK,QAAQ;YACX,OAAO;gBACL,eAAe;gBACf,WAAW,EAAE,aAAa;gBAC1B,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,SAAS;gBACtB,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACrC,YAAY,EAAE,CAAC;aAChB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;QACzE,KAAK,SAAS;YACZ,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC","sourcesContent":["import React from 'react';\nimport type { ViewStyle } from 'react-native';\n\nimport type { SurfaceProps, SurfaceVariant } from '../../../../types/surface';\nimport { View } from '../../../layout/public';\nimport { useTheme } from '../../../theme/runtime';\n\n/*** Renders a themed content surface with semantic elevation and border variants. */\nexport function Surface({ variant = 'default', radius = 'm', style, ...props }: SurfaceProps) {\n const { theme } = useTheme();\n const backgroundColor =\n variant === 'subtle'\n ? theme.semantics.surface.subtle\n : variant === 'raised'\n ? theme.semantics.surface.raised\n : theme.semantics.surface.default;\n const borderColor = theme.semantics.border.default;\n\n return (\n <View\n {...props}\n radius={radius}\n style={[resolveSurfaceVariantStyles(variant, borderColor, backgroundColor), style]}\n />\n );\n}\n\n/*** Resolves the semantic visual treatment for one Surface variant. */\nfunction resolveSurfaceVariantStyles(\n variant: SurfaceVariant,\n borderColor: string,\n backgroundColor: string,\n): ViewStyle {\n switch (variant) {\n case 'subtle':\n return { backgroundColor, borderColor: 'transparent', borderWidth: 0 };\n case 'raised':\n return {\n backgroundColor,\n borderColor: 'transparent',\n borderWidth: 0,\n elevation: 2,\n shadowColor: '#000000',\n shadowOpacity: 0.08,\n shadowOffset: { width: 0, height: 2 },\n shadowRadius: 8,\n };\n case 'outline':\n return { backgroundColor: 'transparent', borderColor, borderWidth: 1 };\n case 'default':\n return { backgroundColor, borderColor, borderWidth: 1 };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../../../src/features/tabs/adapters/inbound/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAMvD,oEAAoE;AACpE,wBAAgB,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,iBAA6B,EAC7B,MAAM,GACP,EAAE,QAAQ,qBAsCV"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../../../src/features/tabs/adapters/inbound/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAOvD,oEAAoE;AACpE,wBAAgB,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,iBAA6B,EAC7B,MAAM,GACP,EAAE,QAAQ,qBAsCV"}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Pressable } from 'react-native';
3
- import { useTheme } from '../../../../theme/ThemeContext';
4
3
  import { View } from '../../../layout/public';
4
+ import { useTheme } from '../../../theme/runtime';
5
5
  import { Text } from '../../../typography/public';
6
6
  import { useTabRegistration } from '../../composition/useTabRegistration';
7
7
  import { useTabsContext } from '../../composition/useTabsContext';
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../../../src/features/tabs/adapters/inbound/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAkB,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,oEAAoE;AACpE,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,iBAAiB,GAAG,SAAS,EAC7B,MAAM,GACG;IACT,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,cAAc,EAAE,CAAC;IAChG,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,WAAW,KAAK,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE9E,OAAO,CACL,CAAC,SAAS,CACR,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAC9B,iBAAiB,CAAC,KAAK,CACvB,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC3C,aAAa,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CACjC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CACzC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CACtC,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,GAAG,CAAC,CAAC,YAAY,CAAC,CAClB,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,IAAI,CACH,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,KAAK,CAAC,CAAC,eAAe,CAAC;YACrB,WAAW,EAAE,QAAQ;gBACnB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;gBACrC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;YAClC,QAAQ;SACT,CAAC,CAAC,CAEH;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAC5E;UAAA,CAAC,QAAQ,CACX;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,SAAS,eAAe,CAAC,EACvB,WAAW,EACX,QAAQ,GAIT;IACC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChG,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable, type ViewStyle } from 'react-native';\n\nimport { useTheme } from '../../../../theme/ThemeContext';\nimport type { TabProps } from '../../../../types/tabs';\nimport { View } from '../../../layout/public';\nimport { Text } from '../../../typography/public';\nimport { useTabRegistration } from '../../composition/useTabRegistration';\nimport { useTabsContext } from '../../composition/useTabsContext';\n\n/*** Renders one accessible selectable tab inside a Tabs context. */\nexport function Tab({\n value,\n children,\n disabled = false,\n interactionPolicy = 'enabled',\n testID,\n}: TabProps) {\n const { theme } = useTheme();\n const { activeValue, getPanelId, getTabId, setActiveValue, setFocusedValue } = useTabsContext();\n const pressableRef = useTabRegistration({ disabled, value });\n const selected = activeValue === value;\n const passive = interactionPolicy === 'passive';\n const onPress = passive || disabled ? undefined : () => setActiveValue(value);\n\n return (\n <Pressable\n accessibilityLabel={undefined}\n accessibilityRole=\"tab\"\n accessibilityState={{ disabled, selected }}\n aria-controls={getPanelId(value)}\n disabled={disabled}\n nativeID={getTabId(value)}\n onBlur={() => setFocusedValue(undefined)}\n onFocus={() => setFocusedValue(value)}\n onPress={onPress}\n ref={pressableRef}\n testID={testID}\n >\n <View\n px=\"m\"\n py=\"s\"\n style={resolveTabStyle({\n borderColor: selected\n ? theme.semantics.action.primary.base\n : theme.semantics.border.default,\n disabled,\n })}\n >\n <Text color={selected ? 'primary' : undefined} variant=\"label\" weight=\"medium\">\n {children}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n/*** Resolves active and disabled visual state without inline JSX styles. */\nfunction resolveTabStyle({\n borderColor,\n disabled,\n}: {\n borderColor: string;\n disabled: boolean;\n}): ViewStyle {\n return { borderBottomColor: borderColor, borderBottomWidth: 2, opacity: disabled ? 0.64 : 1 };\n}\n"]}
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../../../src/features/tabs/adapters/inbound/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAkB,MAAM,cAAc,CAAC;AAGzD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,oEAAoE;AACpE,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,iBAAiB,GAAG,SAAS,EAC7B,MAAM,GACG;IACT,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,cAAc,EAAE,CAAC;IAChG,MAAM,YAAY,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,WAAW,KAAK,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,iBAAiB,KAAK,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAE9E,OAAO,CACL,CAAC,SAAS,CACR,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAC9B,iBAAiB,CAAC,KAAK,CACvB,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC3C,aAAa,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CACjC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CACzC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CACtC,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,GAAG,CAAC,CAAC,YAAY,CAAC,CAClB,MAAM,CAAC,CAAC,MAAM,CAAC,CAEf;MAAA,CAAC,IAAI,CACH,EAAE,CAAC,GAAG,CACN,EAAE,CAAC,GAAG,CACN,KAAK,CAAC,CAAC,eAAe,CAAC;YACrB,WAAW,EAAE,QAAQ;gBACnB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;gBACrC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO;YAClC,QAAQ;SACT,CAAC,CAAC,CAEH;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAC5E;UAAA,CAAC,QAAQ,CACX;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,SAAS,eAAe,CAAC,EACvB,WAAW,EACX,QAAQ,GAIT;IACC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChG,CAAC","sourcesContent":["import React from 'react';\nimport { Pressable, type ViewStyle } from 'react-native';\n\nimport type { TabProps } from '../../../../types/tabs';\nimport { View } from '../../../layout/public';\nimport { useTheme } from '../../../theme/runtime';\nimport { Text } from '../../../typography/public';\nimport { useTabRegistration } from '../../composition/useTabRegistration';\nimport { useTabsContext } from '../../composition/useTabsContext';\n\n/*** Renders one accessible selectable tab inside a Tabs context. */\nexport function Tab({\n value,\n children,\n disabled = false,\n interactionPolicy = 'enabled',\n testID,\n}: TabProps) {\n const { theme } = useTheme();\n const { activeValue, getPanelId, getTabId, setActiveValue, setFocusedValue } = useTabsContext();\n const pressableRef = useTabRegistration({ disabled, value });\n const selected = activeValue === value;\n const passive = interactionPolicy === 'passive';\n const onPress = passive || disabled ? undefined : () => setActiveValue(value);\n\n return (\n <Pressable\n accessibilityLabel={undefined}\n accessibilityRole=\"tab\"\n accessibilityState={{ disabled, selected }}\n aria-controls={getPanelId(value)}\n disabled={disabled}\n nativeID={getTabId(value)}\n onBlur={() => setFocusedValue(undefined)}\n onFocus={() => setFocusedValue(value)}\n onPress={onPress}\n ref={pressableRef}\n testID={testID}\n >\n <View\n px=\"m\"\n py=\"s\"\n style={resolveTabStyle({\n borderColor: selected\n ? theme.semantics.action.primary.base\n : theme.semantics.border.default,\n disabled,\n })}\n >\n <Text color={selected ? 'primary' : undefined} variant=\"label\" weight=\"medium\">\n {children}\n </Text>\n </View>\n </Pressable>\n );\n}\n\n/*** Resolves active and disabled visual state without inline JSX styles. */\nfunction resolveTabStyle({\n borderColor,\n disabled,\n}: {\n borderColor: string;\n disabled: boolean;\n}): ViewStyle {\n return { borderBottomColor: borderColor, borderBottomWidth: 2, opacity: disabled ? 0.64 : 1 };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ThemeProviderProps } from '../../../../types/theme';
2
+ /*** Install the app-level Surface theme together with global responsive and overlay runtime. */
3
+ export declare function ThemeProvider({ children, initialConfig, initialMode, }: ThemeProviderProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/ThemeProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAKhF,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,WAAqB,GACtB,EAAE,kBAAkB,+BA6BpB"}
@@ -0,0 +1,27 @@
1
+ import { deepMerge } from '@ankhorage/utility/object';
2
+ import { useMemo, useState } from 'react';
3
+ import { ResponsiveProvider } from '../../../../core/responsive/ResponsiveProvider';
4
+ import { OverlayProvider } from '../../../../internal/overlay/OverlayProvider';
5
+ import { useFontRuntime } from '../../../font/adapters/inbound/useFontRuntime';
6
+ import { createTheme } from '../../application/use-cases/createTheme';
7
+ import { ThemeRuntimeContext } from './ThemeRuntimeContext';
8
+ /*** Install the app-level Surface theme together with global responsive and overlay runtime. */
9
+ export function ThemeProvider({ children, initialConfig, initialMode = 'light', }) {
10
+ const defaultTheme = useMemo(() => createTheme(), []);
11
+ const [config, setConfig] = useState(() => initialConfig ? deepMerge(defaultTheme.config, initialConfig) : defaultTheme.config);
12
+ const [mode, setMode] = useState(initialMode);
13
+ const { activeFontId } = useFontRuntime();
14
+ const theme = useMemo(() => createTheme(config, mode, activeFontId), [activeFontId, config, mode]);
15
+ const value = useMemo(() => ({
16
+ theme,
17
+ mode,
18
+ setThemeConfig: (nextConfig) => setConfig((previous) => deepMerge(previous, nextConfig)),
19
+ setMode,
20
+ }), [mode, theme]);
21
+ return (<ResponsiveProvider>
22
+ <ThemeRuntimeContext value={value}>
23
+ <OverlayProvider>{children}</OverlayProvider>
24
+ </ThemeRuntimeContext>
25
+ </ResponsiveProvider>);
26
+ }
27
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/ThemeProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,gGAAgG;AAChG,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,aAAa,EACb,WAAW,GAAG,OAAO,GACF;IACnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CACrD,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CACpF,CAAC;IACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;IAE1C,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,EAC7C,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAC7B,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,KAAK;QACL,IAAI;QACJ,cAAc,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxF,OAAO;KACR,CAAC,EACF,CAAC,IAAI,EAAE,KAAK,CAAC,CACd,CAAC;IAEF,OAAO,CACL,CAAC,kBAAkB,CACjB;MAAA,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAChC;QAAA,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,CAC9C;MAAA,EAAE,mBAAmB,CACvB;IAAA,EAAE,kBAAkB,CAAC,CACtB,CAAC;AACJ,CAAC","sourcesContent":["import type { ThemeConfig } from '@ankhorage/contracts';\nimport { deepMerge } from '@ankhorage/utility/object';\nimport { useMemo, useState } from 'react';\n\nimport { ResponsiveProvider } from '../../../../core/responsive/ResponsiveProvider';\nimport { OverlayProvider } from '../../../../internal/overlay/OverlayProvider';\nimport type { ThemeProviderProps, ThemeRuntime } from '../../../../types/theme';\nimport { useFontRuntime } from '../../../font/adapters/inbound/useFontRuntime';\nimport { createTheme } from '../../application/use-cases/createTheme';\nimport { ThemeRuntimeContext } from './ThemeRuntimeContext';\n\n/*** Install the app-level Surface theme together with global responsive and overlay runtime. */\nexport function ThemeProvider({\n children,\n initialConfig,\n initialMode = 'light',\n}: ThemeProviderProps) {\n const defaultTheme = useMemo(() => createTheme(), []);\n const [config, setConfig] = useState<ThemeConfig>(() =>\n initialConfig ? deepMerge(defaultTheme.config, initialConfig) : defaultTheme.config,\n );\n const [mode, setMode] = useState(initialMode);\n const { activeFontId } = useFontRuntime();\n\n const theme = useMemo(\n () => createTheme(config, mode, activeFontId),\n [activeFontId, config, mode],\n );\n const value = useMemo<ThemeRuntime>(\n () => ({\n theme,\n mode,\n setThemeConfig: (nextConfig) => setConfig((previous) => deepMerge(previous, nextConfig)),\n setMode,\n }),\n [mode, theme],\n );\n\n return (\n <ResponsiveProvider>\n <ThemeRuntimeContext value={value}>\n <OverlayProvider>{children}</OverlayProvider>\n </ThemeRuntimeContext>\n </ResponsiveProvider>\n );\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ThemeRuntime } from '../../../../types/theme';
2
+ /*** Holds the active Surface theme runtime for component consumption. */
3
+ export declare const ThemeRuntimeContext: import("react").Context<ThemeRuntime>;
4
+ //# sourceMappingURL=ThemeRuntimeContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeRuntimeContext.d.ts","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/ThemeRuntimeContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAK5D,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,uCAK9B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { createContext } from 'react';
2
+ import { createTheme } from '../../application/use-cases/createTheme';
3
+ const defaultTheme = createTheme();
4
+ /*** Holds the active Surface theme runtime for component consumption. */
5
+ export const ThemeRuntimeContext = createContext({
6
+ theme: defaultTheme,
7
+ mode: 'light',
8
+ setThemeConfig: () => undefined,
9
+ setMode: () => undefined,
10
+ });
11
+ //# sourceMappingURL=ThemeRuntimeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeRuntimeContext.js","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/ThemeRuntimeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC;AAEnC,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAe;IAC7D,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,OAAO;IACb,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;IAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;CACzB,CAAC,CAAC","sourcesContent":["import { createContext } from 'react';\n\nimport type { ThemeRuntime } from '../../../../types/theme';\nimport { createTheme } from '../../application/use-cases/createTheme';\n\nconst defaultTheme = createTheme();\n\n/*** Holds the active Surface theme runtime for component consumption. */\nexport const ThemeRuntimeContext = createContext<ThemeRuntime>({\n theme: defaultTheme,\n mode: 'light',\n setThemeConfig: () => undefined,\n setMode: () => undefined,\n});\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ThemeScopeProps } from '../../../../types/theme';
2
+ /*** Apply a nested Surface theme or mode override without remounting app-level providers. */
3
+ export declare function ThemeScope({ children, themeConfig, mode }: ThemeScopeProps): import("react").JSX.Element;
4
+ //# sourceMappingURL=ThemeScope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.d.ts","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/ThemeScope.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM7E,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,eAAe,+BAkB1E"}
@@ -0,0 +1,17 @@
1
+ import { deepMerge } from '@ankhorage/utility/object';
2
+ import { useMemo } from 'react';
3
+ import { useFontRuntime } from '../../../font/adapters/inbound/useFontRuntime';
4
+ import { createTheme } from '../../application/use-cases/createTheme';
5
+ import { ThemeRuntimeContext } from './ThemeRuntimeContext';
6
+ import { useTheme } from './useTheme';
7
+ /*** Apply a nested Surface theme or mode override without remounting app-level providers. */
8
+ export function ThemeScope({ children, themeConfig, mode }) {
9
+ const parent = useTheme();
10
+ const { activeFontId } = useFontRuntime();
11
+ const scopedMode = mode ?? parent.mode;
12
+ const scopedConfig = useMemo(() => (themeConfig ? deepMerge(parent.theme.config, themeConfig) : parent.theme.config), [parent.theme.config, themeConfig]);
13
+ const theme = useMemo(() => createTheme(scopedConfig, scopedMode, activeFontId), [activeFontId, scopedConfig, scopedMode]);
14
+ const value = useMemo(() => ({ ...parent, theme, mode: scopedMode }), [parent, scopedMode, theme]);
15
+ return <ThemeRuntimeContext value={value}>{children}</ThemeRuntimeContext>;
16
+ }
17
+ //# sourceMappingURL=ThemeScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.js","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/ThemeScope.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,6FAA6F;AAC7F,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAmB;IACzE,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC1B,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EACvF,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CACnC,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,EACzD,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CACzC,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAC9C,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAC5B,CAAC;IAEF,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["import { deepMerge } from '@ankhorage/utility/object';\nimport { useMemo } from 'react';\n\nimport type { ThemeRuntime, ThemeScopeProps } from '../../../../types/theme';\nimport { useFontRuntime } from '../../../font/adapters/inbound/useFontRuntime';\nimport { createTheme } from '../../application/use-cases/createTheme';\nimport { ThemeRuntimeContext } from './ThemeRuntimeContext';\nimport { useTheme } from './useTheme';\n\n/*** Apply a nested Surface theme or mode override without remounting app-level providers. */\nexport function ThemeScope({ children, themeConfig, mode }: ThemeScopeProps) {\n const parent = useTheme();\n const { activeFontId } = useFontRuntime();\n const scopedMode = mode ?? parent.mode;\n const scopedConfig = useMemo(\n () => (themeConfig ? deepMerge(parent.theme.config, themeConfig) : parent.theme.config),\n [parent.theme.config, themeConfig],\n );\n const theme = useMemo(\n () => createTheme(scopedConfig, scopedMode, activeFontId),\n [activeFontId, scopedConfig, scopedMode],\n );\n const value = useMemo<ThemeRuntime>(\n () => ({ ...parent, theme, mode: scopedMode }),\n [parent, scopedMode, theme],\n );\n\n return <ThemeRuntimeContext value={value}>{children}</ThemeRuntimeContext>;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ThemeRuntime } from '../../../../types/theme';
2
+ /*** Read the active Surface theme runtime. */
3
+ export declare function useTheme(): ThemeRuntime;
4
+ //# sourceMappingURL=useTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/useTheme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,8CAA8C;AAC9C,wBAAgB,QAAQ,IAAI,YAAY,CAEvC"}
@@ -0,0 +1,7 @@
1
+ import { use } from 'react';
2
+ import { ThemeRuntimeContext } from './ThemeRuntimeContext';
3
+ /*** Read the active Surface theme runtime. */
4
+ export function useTheme() {
5
+ return use(ThemeRuntimeContext);
6
+ }
7
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","sourceRoot":"","sources":["../../../../../src/features/theme/adapters/inbound/useTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,8CAA8C;AAC9C,MAAM,UAAU,QAAQ;IACtB,OAAO,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAClC,CAAC","sourcesContent":["import { use } from 'react';\n\nimport type { ThemeRuntime } from '../../../../types/theme';\nimport { ThemeRuntimeContext } from './ThemeRuntimeContext';\n\n/*** Read the active Surface theme runtime. */\nexport function useTheme(): ThemeRuntime {\n return use(ThemeRuntimeContext);\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { ThemeConfig } from '@ankhorage/contracts';
2
+ import type { SurfaceTheme } from '../../../../types/theme';
3
+ /*** Resolve canonical persisted theme source into the complete Surface runtime theme. */
4
+ export declare function createTheme(config?: ThemeConfig, mode?: 'light' | 'dark', activeFontId?: string | null): SurfaceTheme;
5
+ //# sourceMappingURL=createTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.d.ts","sourceRoot":"","sources":["../../../../../src/features/theme/application/use-cases/createTheme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAWxE,yFAAyF;AACzF,wBAAgB,WAAW,CACzB,MAAM,GAAE,WAA4B,EACpC,IAAI,GAAE,OAAO,GAAG,MAAgB,EAChC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,YAAY,CAWd"}
@@ -0,0 +1,56 @@
1
+ import { generatePalette } from '../../domain/generatePalette';
2
+ import { resolveGlobalTokens } from '../../utils/resolveGlobalTokens';
3
+ const DEFAULT_CONFIG = {
4
+ id: 'default',
5
+ name: 'Default',
6
+ light: { primaryColor: '#3B82F6', harmony: 'monochromatic' },
7
+ dark: { primaryColor: '#3B82F6', harmony: 'monochromatic' },
8
+ };
9
+ /*** Resolve canonical persisted theme source into the complete Surface runtime theme. */
10
+ export function createTheme(config = DEFAULT_CONFIG, mode = 'light', activeFontId) {
11
+ const { colors, swatches, semantics, colorDiagnostics } = generatePalette(config, mode);
12
+ const baseTheme = {
13
+ ...resolveGlobalTokens(config.tokens),
14
+ colors,
15
+ swatches,
16
+ semantics,
17
+ colorDiagnostics,
18
+ config,
19
+ };
20
+ return activeFontId ? withActiveFont(baseTheme, activeFontId) : baseTheme;
21
+ }
22
+ /*** Return a theme with generated module font-family names without mutating the base theme. */
23
+ function withActiveFont(theme, activeFontId) {
24
+ const familyName = toPascalCase(activeFontId);
25
+ return {
26
+ ...theme,
27
+ typography: {
28
+ ...theme.typography,
29
+ fonts: {
30
+ normal: createFontMap(theme.typography.fonts.normal, familyName, 'Regular'),
31
+ italic: createFontMap(theme.typography.fonts.italic, familyName, 'Italic'),
32
+ },
33
+ },
34
+ };
35
+ }
36
+ function createFontMap(fallback, familyName, style) {
37
+ return {
38
+ ...fallback,
39
+ '100': `${familyName}_100${style}`,
40
+ '200': `${familyName}_200${style}`,
41
+ '300': `${familyName}_300${style}`,
42
+ '400': `${familyName}_400${style}`,
43
+ '500': `${familyName}_500${style}`,
44
+ '600': `${familyName}_600${style}`,
45
+ '700': `${familyName}_700${style}`,
46
+ '800': `${familyName}_800${style}`,
47
+ '900': `${familyName}_900${style}`,
48
+ };
49
+ }
50
+ function toPascalCase(value) {
51
+ return value
52
+ .split(/[- ]+/)
53
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
54
+ .join('');
55
+ }
56
+ //# sourceMappingURL=createTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTheme.js","sourceRoot":"","sources":["../../../../../src/features/theme/application/use-cases/createTheme.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,cAAc,GAAgB;IAClC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;IAC5D,IAAI,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;CAC5D,CAAC;AAEF,yFAAyF;AACzF,MAAM,UAAU,WAAW,CACzB,SAAsB,cAAc,EACpC,OAAyB,OAAO,EAChC,YAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxF,MAAM,SAAS,GAAiB;QAC9B,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM;QACN,QAAQ;QACR,SAAS;QACT,gBAAgB;QAChB,MAAM;KACP,CAAC;IACF,OAAO,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED,+FAA+F;AAC/F,SAAS,cAAc,CAAC,KAAmB,EAAE,YAAoB;IAC/D,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC9C,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE;YACV,GAAG,KAAK,CAAC,UAAU;YACnB,KAAK,EAAE;gBACL,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;gBAC3E,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;aAC3E;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,QAAgD,EAChD,UAAkB,EAClB,KAA2B;IAE3B,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;QAClC,KAAK,EAAE,GAAG,UAAU,OAAO,KAAK,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC","sourcesContent":["import type { ThemeConfig } from '@ankhorage/contracts';\n\nimport type { FontWeight, SurfaceTheme } from '../../../../types/theme';\nimport { generatePalette } from '../../domain/generatePalette';\nimport { resolveGlobalTokens } from '../../utils/resolveGlobalTokens';\n\nconst DEFAULT_CONFIG: ThemeConfig = {\n id: 'default',\n name: 'Default',\n light: { primaryColor: '#3B82F6', harmony: 'monochromatic' },\n dark: { primaryColor: '#3B82F6', harmony: 'monochromatic' },\n};\n\n/*** Resolve canonical persisted theme source into the complete Surface runtime theme. */\nexport function createTheme(\n config: ThemeConfig = DEFAULT_CONFIG,\n mode: 'light' | 'dark' = 'light',\n activeFontId?: string | null,\n): SurfaceTheme {\n const { colors, swatches, semantics, colorDiagnostics } = generatePalette(config, mode);\n const baseTheme: SurfaceTheme = {\n ...resolveGlobalTokens(config.tokens),\n colors,\n swatches,\n semantics,\n colorDiagnostics,\n config,\n };\n return activeFontId ? withActiveFont(baseTheme, activeFontId) : baseTheme;\n}\n\n/*** Return a theme with generated module font-family names without mutating the base theme. */\nfunction withActiveFont(theme: SurfaceTheme, activeFontId: string): SurfaceTheme {\n const familyName = toPascalCase(activeFontId);\n return {\n ...theme,\n typography: {\n ...theme.typography,\n fonts: {\n normal: createFontMap(theme.typography.fonts.normal, familyName, 'Regular'),\n italic: createFontMap(theme.typography.fonts.italic, familyName, 'Italic'),\n },\n },\n };\n}\n\nfunction createFontMap(\n fallback: Record<FontWeight, string | undefined>,\n familyName: string,\n style: 'Regular' | 'Italic',\n): Record<FontWeight, string | undefined> {\n return {\n ...fallback,\n '100': `${familyName}_100${style}`,\n '200': `${familyName}_200${style}`,\n '300': `${familyName}_300${style}`,\n '400': `${familyName}_400${style}`,\n '500': `${familyName}_500${style}`,\n '600': `${familyName}_600${style}`,\n '700': `${familyName}_700${style}`,\n '800': `${familyName}_800${style}`,\n '900': `${familyName}_900${style}`,\n };\n}\n\nfunction toPascalCase(value: string): string {\n return value\n .split(/[- ]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { ThemeTokens } from '../../types/theme';
2
+ declare const DEFAULT_TOKENS: Omit<ThemeTokens, 'colors' | 'swatches' | 'semantics' | 'colorDiagnostics'>;
3
+ export declare const SURFACE_COLOR_POLICY: {
4
+ readonly disabledContrast: 3;
5
+ readonly surfaceSeparation: 1.05;
6
+ readonly textContrast: 4.5;
7
+ readonly uiContrast: 3;
8
+ };
9
+ export { DEFAULT_TOKENS };
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/features/theme/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgBjE,QAAA,MAAM,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,kBAAkB,CA0C7F,CAAC;AAEJ,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAEX,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -11,7 +11,7 @@ const EMPTY_FONT_MAP = {
11
11
  bold: undefined,
12
12
  normal: undefined,
13
13
  };
14
- export const DEFAULT_TOKENS = {
14
+ const DEFAULT_TOKENS = {
15
15
  spacing: { none: 0, xs: 4, s: 8, m: 16, l: 24, xl: 32, xxl: 48 },
16
16
  radii: { none: 0, s: 4, m: 8, l: 16, full: 9999 },
17
17
  typography: {
@@ -53,4 +53,11 @@ export const DEFAULT_TOKENS = {
53
53
  },
54
54
  shadows: { soft: 2, medium: 4, hard: 8 },
55
55
  };
56
- //# sourceMappingURL=defaultTokens.js.map
56
+ export const SURFACE_COLOR_POLICY = {
57
+ disabledContrast: 3,
58
+ surfaceSeparation: 1.05,
59
+ textContrast: 4.5,
60
+ uiContrast: 3,
61
+ };
62
+ export { DEFAULT_TOKENS };
63
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/features/theme/constants.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAA2C;IAC7D,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,cAAc,GAClB;IACE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAChE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACjD,UAAU,EAAE;QACV,QAAQ,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YACnD,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YACnD,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SACpD;QACD,KAAK,EAAE;YACL,EAAE,EAAE,EAAE;YACN,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,EAAE,EAAE,EAAE;YACN,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;YACN,EAAE,EAAE,EAAE;SACP;QACD,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,KAAK;SACb;QACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE;KACxE;IACD,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;CACzC,CAAC;AAEJ,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,GAAG;IACjB,UAAU,EAAE,CAAC;CACL,CAAC;AAEX,OAAO,EAAE,cAAc,EAAE,CAAC","sourcesContent":["import type { FontWeight, ThemeTokens } from '../../types/theme';\n\nconst EMPTY_FONT_MAP: Record<FontWeight, string | undefined> = {\n '100': undefined,\n '200': undefined,\n '300': undefined,\n '400': undefined,\n '500': undefined,\n '600': undefined,\n '700': undefined,\n '800': undefined,\n '900': undefined,\n bold: undefined,\n normal: undefined,\n};\n\nconst DEFAULT_TOKENS: Omit<ThemeTokens, 'colors' | 'swatches' | 'semantics' | 'colorDiagnostics'> =\n {\n spacing: { none: 0, xs: 4, s: 8, m: 16, l: 24, xl: 32, xxl: 48 },\n radii: { none: 0, s: 4, m: 8, l: 16, full: 9999 },\n typography: {\n headings: {\n 1: { size: 32, lineHeight: 40, weight: 'bold' },\n 2: { size: 24, lineHeight: 32, weight: 'bold' },\n 3: { size: 20, lineHeight: 28, weight: 'bold' },\n 4: { size: 18, lineHeight: 24, weight: 'semiBold' },\n 5: { size: 16, lineHeight: 22, weight: 'semiBold' },\n 6: { size: 14, lineHeight: 20, weight: 'semiBold' },\n },\n sizes: {\n xs: 12,\n s: 14,\n m: 16,\n l: 18,\n xl: 20,\n xxl: 24,\n '3xl': 30,\n h1: 32,\n h2: 24,\n h3: 20,\n h4: 18,\n h5: 16,\n h6: 14,\n },\n weights: {\n thin: '100',\n extraLight: '200',\n light: '300',\n regular: '400',\n medium: '500',\n semiBold: '600',\n bold: '700',\n extraBold: '800',\n black: '900',\n },\n fonts: { normal: { ...EMPTY_FONT_MAP }, italic: { ...EMPTY_FONT_MAP } },\n },\n shadows: { soft: 2, medium: 4, hard: 8 },\n };\n\nexport const SURFACE_COLOR_POLICY = {\n disabledContrast: 3,\n surfaceSeparation: 1.05,\n textContrast: 4.5,\n uiContrast: 3,\n} as const;\n\nexport { DEFAULT_TOKENS };\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ColorContrastContext, ColorSelectionTarget, ColorSwatch, ColorSwatchTiePolicy, HexColor } from '@ankhorage/color-theory';
2
- import type { SurfaceColorSelectionDiagnostic, SurfaceContrastDiagnostic } from './types';
2
+ import type { SurfaceColorSelectionDiagnostic, SurfaceContrastDiagnostic } from '../../../types/theme';
3
3
  /** Collect deterministic Color Theory evidence while Surface resolves semantic colors. */
4
4
  export declare function createSurfaceColorDiagnosticCollector(): SurfaceColorDiagnosticCollector;
5
5
  declare class SurfaceColorDiagnosticCollector {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSurfaceColorDiagnosticCollector.d.ts","sourceRoot":"","sources":["../../../../src/features/theme/domain/createSurfaceColorDiagnosticCollector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,oBAAoB,EACpB,QAAQ,EACT,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,EACV,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,0FAA0F;AAC1F,wBAAgB,qCAAqC,oCAEpD;AAED,cAAM,+BAA+B;IACnC,QAAQ,CAAC,UAAU,EAAE,+BAA+B,EAAE,CAAM;IAC5D,QAAQ,CAAC,SAAS,EAAE,yBAAyB,EAAE,CAAM;IAErD,QAAQ,CAAC,iBAAiB,GACxB,IAAI,MAAM,EACV,YAAY,QAAQ,EACpB,YAAY,QAAQ,EACpB,iBAAiB,MAAM,KACtB,QAAQ,CAWT;IAEF,QAAQ,CAAC,cAAc,GACrB,IAAI,MAAM,EACV,YAAY,QAAQ,EACpB,YAAY,QAAQ,EACpB,iBAAiB,MAAM,KACtB,yBAAyB,CAU1B;IAEF,QAAQ,CAAC,WAAW,GAClB,IAAI,MAAM,EACV,QAAQ,WAAW,EACnB,QAAQ,oBAAoB,EAC5B,UAAU,SAAS,oBAAoB,EAAE,EACzC,WAAW,oBAAoB,KAC9B,QAAQ,CAOT;IAEF,QAAQ,CAAC,gBAAgB,GACvB,IAAI,MAAM,EACV,YAAY,QAAQ,EACpB,iBAAiB,MAAM,KACtB,QAAQ,CAWT;CACH"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSurfaceColorDiagnosticCollector.js","sourceRoot":"","sources":["../../../../src/features/theme/domain/createSurfaceColorDiagnosticCollector.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAOjC,0FAA0F;AAC1F,MAAM,UAAU,qCAAqC;IACnD,OAAO,IAAI,+BAA+B,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,+BAA+B;IAC1B,UAAU,GAAsC,EAAE,CAAC;IACnD,SAAS,GAAgC,EAAE,CAAC;IAE5C,iBAAiB,GAAG,CAC3B,EAAU,EACV,UAAoB,EACpB,UAAoB,EACpB,eAAuB,EACb,EAAE;QACZ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,EAAE;YACF,UAAU;YACV,UAAU;YACV,QAAQ;YACR,eAAe;YACf,MAAM,EAAE,QAAQ,IAAI,eAAe;SACpC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEO,cAAc,GAAG,CACxB,EAAU,EACV,UAAoB,EACpB,UAAoB,EACpB,eAAuB,EACI,EAAE;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1D,OAAO;YACL,EAAE;YACF,UAAU;YACV,UAAU;YACV,QAAQ;YACR,eAAe;YACf,MAAM,EAAE,QAAQ,IAAI,eAAe;SACpC,CAAC;IACJ,CAAC,CAAC;IAEO,WAAW,GAAG,CACrB,EAAU,EACV,MAAmB,EACnB,MAA4B,EAC5B,QAAyC,EACzC,SAA+B,EACrB,EAAE;QACZ,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,gDAAgD,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC7B,CAAC,CAAC;IAEO,gBAAgB,GAAG,CAC1B,EAAU,EACV,UAAoB,EACpB,eAAuB,EACb,EAAE;QACZ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,EAAE;YACF,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,UAAU;YACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,eAAe;YACf,MAAM,EAAE,QAAQ,CAAC,QAAQ,IAAI,eAAe;SAC7C,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC,CAAC;CACH","sourcesContent":["import type {\n ColorContrastContext,\n ColorSelectionTarget,\n ColorSwatch,\n ColorSwatchTiePolicy,\n HexColor,\n} from '@ankhorage/color-theory';\nimport {\n getContrastRatio,\n getReadableForeground,\n selectColorSwatchStep,\n} from '@ankhorage/color-theory';\n\nimport type {\n SurfaceColorSelectionDiagnostic,\n SurfaceContrastDiagnostic,\n} from '../../../types/theme';\n\n/** Collect deterministic Color Theory evidence while Surface resolves semantic colors. */\nexport function createSurfaceColorDiagnosticCollector() {\n return new SurfaceColorDiagnosticCollector();\n}\n\nclass SurfaceColorDiagnosticCollector {\n readonly selections: SurfaceColorSelectionDiagnostic[] = [];\n readonly contrasts: SurfaceContrastDiagnostic[] = [];\n\n readonly measureForeground = (\n id: string,\n foreground: HexColor,\n background: HexColor,\n minimumContrast: number,\n ): HexColor => {\n const contrast = getContrastRatio(foreground, background);\n this.contrasts.push({\n id,\n foreground,\n background,\n contrast,\n minimumContrast,\n passes: contrast >= minimumContrast,\n });\n return foreground;\n };\n\n readonly measureSurface = (\n id: string,\n foreground: HexColor,\n background: HexColor,\n minimumContrast: number,\n ): SurfaceContrastDiagnostic => {\n const contrast = getContrastRatio(foreground, background);\n return {\n id,\n foreground,\n background,\n contrast,\n minimumContrast,\n passes: contrast >= minimumContrast,\n };\n };\n\n readonly selectColor = (\n id: string,\n swatch: ColorSwatch,\n target: ColorSelectionTarget,\n contexts: readonly ColorContrastContext[],\n tiePolicy: ColorSwatchTiePolicy,\n ): HexColor => {\n const result = selectColorSwatchStep(swatch, target, contexts, tiePolicy);\n this.selections.push({ id, result });\n if (!result.selected) {\n throw new Error(`[surface] No '${id}' swatch step satisfies the required contrast.`);\n }\n return result.selected.hex;\n };\n\n readonly selectForeground = (\n id: string,\n background: HexColor,\n minimumContrast: number,\n ): HexColor => {\n const selected = getReadableForeground(background);\n this.contrasts.push({\n id,\n foreground: selected.foreground,\n background,\n contrast: selected.contrast,\n minimumContrast,\n passes: selected.contrast >= minimumContrast,\n });\n return selected.foreground;\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ColorContrastContext, ColorSelectionTarget, ColorSwatch, ColorSwatchTiePolicy, HexColor, SemanticColorToken } from '@ankhorage/color-theory';
2
- import type { ContentSemantics, NeutralSemantics, SurfaceContrastDiagnostic, SurfaceSemantics } from './types';
2
+ import type { ContentSemantics, NeutralSemantics, SurfaceContrastDiagnostic, SurfaceSemantics } from '../../../types/theme';
3
3
  type ResolvedSemanticColors = Record<SemanticColorToken, HexColor>;
4
4
  interface SurfaceSemanticMeasurements {
5
5
  measureForeground: (id: string, foreground: HexColor, background: HexColor, minimumContrast: number) => HexColor;