@multiplatform.one/theme 7.83.1 → 7.84.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 (853) hide show
  1. package/dist/cjs/audit/constraintAudit.cjs +567 -0
  2. package/dist/cjs/audit/constraintAudit.native.js +948 -0
  3. package/dist/cjs/audit/constraintAudit.native.js.map +1 -0
  4. package/dist/cjs/audit/designTokens.cjs +53 -0
  5. package/dist/cjs/audit/designTokens.native.js +80 -0
  6. package/dist/cjs/audit/designTokens.native.js.map +1 -0
  7. package/dist/cjs/audit/diffReport.cjs +255 -0
  8. package/dist/cjs/audit/diffReport.native.js +519 -0
  9. package/dist/cjs/audit/diffReport.native.js.map +1 -0
  10. package/dist/cjs/audit/index.cjs +41 -0
  11. package/dist/cjs/audit/index.native.js +44 -0
  12. package/dist/cjs/audit/index.native.js.map +1 -0
  13. package/dist/cjs/audit/themeMatrix.cjs +924 -0
  14. package/dist/cjs/audit/themeMatrix.native.js +1552 -0
  15. package/dist/cjs/audit/themeMatrix.native.js.map +1 -0
  16. package/dist/cjs/dates.cjs +261 -0
  17. package/dist/cjs/dates.native.js +289 -0
  18. package/dist/cjs/dates.native.js.map +1 -0
  19. package/dist/cjs/devWarn.cjs +163 -0
  20. package/dist/cjs/devWarn.native.js +191 -0
  21. package/dist/cjs/devWarn.native.js.map +1 -0
  22. package/dist/cjs/expo.cjs +89 -0
  23. package/dist/cjs/expo.native.js +97 -0
  24. package/dist/cjs/expo.native.js.map +1 -0
  25. package/dist/cjs/figma/figmaTokens.cjs +350 -0
  26. package/dist/cjs/figma/figmaTokens.native.js +637 -0
  27. package/dist/cjs/figma/figmaTokens.native.js.map +1 -0
  28. package/dist/cjs/font.cjs +65 -0
  29. package/dist/cjs/font.native.js +74 -0
  30. package/dist/cjs/font.native.js.map +1 -0
  31. package/dist/cjs/fonts/createFontLoader.cjs +32 -0
  32. package/dist/cjs/fonts/createFontLoader.native.js +70 -0
  33. package/dist/cjs/fonts/createFontLoader.native.js.map +1 -0
  34. package/dist/cjs/fonts/index.cjs +22 -0
  35. package/dist/cjs/fonts/index.native.js +25 -0
  36. package/dist/cjs/fonts/index.native.js.map +1 -0
  37. package/dist/cjs/fonts/interFaces.cjs +38 -0
  38. package/dist/cjs/fonts/interFaces.native.js +41 -0
  39. package/dist/cjs/fonts/interFaces.native.js.map +1 -0
  40. package/dist/cjs/fonts/types.cjs +18 -0
  41. package/dist/cjs/fonts/types.native.js +21 -0
  42. package/dist/cjs/fonts/types.native.js.map +1 -0
  43. package/dist/cjs/index.cjs +39 -0
  44. package/dist/cjs/index.native.js +42 -0
  45. package/dist/cjs/index.native.js.map +1 -0
  46. package/dist/cjs/keyboardFocusRing.cjs +111 -0
  47. package/dist/cjs/keyboardFocusRing.native.js +116 -0
  48. package/dist/cjs/keyboardFocusRing.native.js.map +1 -0
  49. package/dist/cjs/menuRow.cjs +80 -0
  50. package/dist/cjs/menuRow.native.js +86 -0
  51. package/dist/cjs/menuRow.native.js.map +1 -0
  52. package/dist/cjs/numbers.cjs +161 -0
  53. package/dist/cjs/numbers.native.js +173 -0
  54. package/dist/cjs/numbers.native.js.map +1 -0
  55. package/dist/cjs/theme/FontKnobStyles.cjs +161 -0
  56. package/dist/cjs/theme/FontKnobStyles.native.js +41 -0
  57. package/dist/cjs/theme/FontKnobStyles.native.js.map +1 -0
  58. package/dist/cjs/theme/Heading.cjs +174 -0
  59. package/dist/cjs/theme/Heading.native.js +186 -0
  60. package/dist/cjs/theme/Heading.native.js.map +1 -0
  61. package/dist/cjs/theme/IconSlot.cjs +67 -0
  62. package/dist/cjs/theme/IconSlot.native.js +78 -0
  63. package/dist/cjs/theme/IconSlot.native.js.map +1 -0
  64. package/dist/cjs/theme/Intent.cjs +44 -0
  65. package/dist/cjs/theme/Intent.native.js +48 -0
  66. package/dist/cjs/theme/Intent.native.js.map +1 -0
  67. package/dist/cjs/theme/Preset.cjs +150 -0
  68. package/dist/cjs/theme/Preset.native.js +156 -0
  69. package/dist/cjs/theme/Preset.native.js.map +1 -0
  70. package/dist/cjs/theme/PresetContext.cjs +38 -0
  71. package/dist/cjs/theme/PresetContext.native.js +42 -0
  72. package/dist/cjs/theme/PresetContext.native.js.map +1 -0
  73. package/dist/cjs/theme/Surface.cjs +115 -0
  74. package/dist/cjs/theme/Surface.native.js +126 -0
  75. package/dist/cjs/theme/Surface.native.js.map +1 -0
  76. package/dist/cjs/theme/Text.cjs +147 -0
  77. package/dist/cjs/theme/Text.native.js +155 -0
  78. package/dist/cjs/theme/Text.native.js.map +1 -0
  79. package/dist/cjs/theme/Tint.cjs +55 -0
  80. package/dist/cjs/theme/Tint.native.js +59 -0
  81. package/dist/cjs/theme/Tint.native.js.map +1 -0
  82. package/dist/cjs/theme/activateThemeConfig.cjs +42 -0
  83. package/dist/cjs/theme/activateThemeConfig.native.js +45 -0
  84. package/dist/cjs/theme/activateThemeConfig.native.js.map +1 -0
  85. package/dist/cjs/theme/animations/css.cjs +36 -0
  86. package/dist/cjs/theme/animations/css.native.js +39 -0
  87. package/dist/cjs/theme/animations/css.native.js.map +1 -0
  88. package/dist/cjs/theme/animations/index.cjs +20 -0
  89. package/dist/cjs/theme/animations/index.native.js +23 -0
  90. package/dist/cjs/theme/animations/index.native.js.map +1 -0
  91. package/dist/cjs/theme/animations/reactNative.cjs +158 -0
  92. package/dist/cjs/theme/animations/reactNative.native.js +161 -0
  93. package/dist/cjs/theme/animations/reactNative.native.js.map +1 -0
  94. package/dist/cjs/theme/chartPalette.cjs +229 -0
  95. package/dist/cjs/theme/chartPalette.native.js +297 -0
  96. package/dist/cjs/theme/chartPalette.native.js.map +1 -0
  97. package/dist/cjs/theme/colorRules.cjs +323 -0
  98. package/dist/cjs/theme/colorRules.native.js +359 -0
  99. package/dist/cjs/theme/colorRules.native.js.map +1 -0
  100. package/dist/cjs/theme/controlTiers.cjs +67 -0
  101. package/dist/cjs/theme/controlTiers.native.js +72 -0
  102. package/dist/cjs/theme/controlTiers.native.js.map +1 -0
  103. package/dist/cjs/theme/cookies.cjs +183 -0
  104. package/dist/cjs/theme/cookies.native.js +309 -0
  105. package/dist/cjs/theme/cookies.native.js.map +1 -0
  106. package/dist/cjs/theme/cornerSmoothing.cjs +111 -0
  107. package/dist/cjs/theme/cornerSmoothing.native.js +71 -0
  108. package/dist/cjs/theme/cornerSmoothing.native.js.map +1 -0
  109. package/dist/cjs/theme/createDefaultThemeConfig.cjs +130 -0
  110. package/dist/cjs/theme/createDefaultThemeConfig.native.js +176 -0
  111. package/dist/cjs/theme/createDefaultThemeConfig.native.js.map +1 -0
  112. package/dist/cjs/theme/createThemes.cjs +737 -0
  113. package/dist/cjs/theme/createThemes.native.js +1183 -0
  114. package/dist/cjs/theme/createThemes.native.js.map +1 -0
  115. package/dist/cjs/theme/dedupeInherited.cjs +83 -0
  116. package/dist/cjs/theme/dedupeInherited.native.js +194 -0
  117. package/dist/cjs/theme/dedupeInherited.native.js.map +1 -0
  118. package/dist/cjs/theme/defaults/accent.cjs +32 -0
  119. package/dist/cjs/theme/defaults/accent.native.js +35 -0
  120. package/dist/cjs/theme/defaults/accent.native.js.map +1 -0
  121. package/dist/cjs/theme/defaults/base.cjs +48 -0
  122. package/dist/cjs/theme/defaults/base.native.js +51 -0
  123. package/dist/cjs/theme/defaults/base.native.js.map +1 -0
  124. package/dist/cjs/theme/defaults/builderOptions.cjs +192 -0
  125. package/dist/cjs/theme/defaults/builderOptions.native.js +263 -0
  126. package/dist/cjs/theme/defaults/builderOptions.native.js.map +1 -0
  127. package/dist/cjs/theme/defaults/categoryFonts.cjs +50 -0
  128. package/dist/cjs/theme/defaults/categoryFonts.native.js +53 -0
  129. package/dist/cjs/theme/defaults/categoryFonts.native.js.map +1 -0
  130. package/dist/cjs/theme/defaults/fonts.cjs +288 -0
  131. package/dist/cjs/theme/defaults/fonts.native.js +380 -0
  132. package/dist/cjs/theme/defaults/fonts.native.js.map +1 -0
  133. package/dist/cjs/theme/defaults/house.cjs +39 -0
  134. package/dist/cjs/theme/defaults/house.native.js +46 -0
  135. package/dist/cjs/theme/defaults/house.native.js.map +1 -0
  136. package/dist/cjs/theme/defaults/index.cjs +25 -0
  137. package/dist/cjs/theme/defaults/index.native.js +28 -0
  138. package/dist/cjs/theme/defaults/index.native.js.map +1 -0
  139. package/dist/cjs/theme/devtools/ColorLineVisualizer.cjs +243 -0
  140. package/dist/cjs/theme/devtools/ColorLineVisualizer.native.js +269 -0
  141. package/dist/cjs/theme/devtools/ColorLineVisualizer.native.js.map +1 -0
  142. package/dist/cjs/theme/devtools/ThemeDevtoolsPanel.cjs +1350 -0
  143. package/dist/cjs/theme/devtools/ThemeDevtoolsPanel.native.js +1814 -0
  144. package/dist/cjs/theme/devtools/ThemeDevtoolsPanel.native.js.map +1 -0
  145. package/dist/cjs/theme/devtools/animationOptions.cjs +36 -0
  146. package/dist/cjs/theme/devtools/animationOptions.native.js +46 -0
  147. package/dist/cjs/theme/devtools/animationOptions.native.js.map +1 -0
  148. package/dist/cjs/theme/devtools/buildSnapshot.cjs +92 -0
  149. package/dist/cjs/theme/devtools/buildSnapshot.native.js +174 -0
  150. package/dist/cjs/theme/devtools/buildSnapshot.native.js.map +1 -0
  151. package/dist/cjs/theme/devtools/knobIcons.cjs +498 -0
  152. package/dist/cjs/theme/devtools/knobIcons.native.js +520 -0
  153. package/dist/cjs/theme/devtools/knobIcons.native.js.map +1 -0
  154. package/dist/cjs/theme/devtools/vizConstants.cjs +54 -0
  155. package/dist/cjs/theme/devtools/vizConstants.native.js +57 -0
  156. package/dist/cjs/theme/devtools/vizConstants.native.js.map +1 -0
  157. package/dist/cjs/theme/dynamicType.cjs +52 -0
  158. package/dist/cjs/theme/dynamicType.native.js +55 -0
  159. package/dist/cjs/theme/dynamicType.native.js.map +1 -0
  160. package/dist/cjs/theme/fieldFocus.cjs +56 -0
  161. package/dist/cjs/theme/fieldFocus.native.js +62 -0
  162. package/dist/cjs/theme/fieldFocus.native.js.map +1 -0
  163. package/dist/cjs/theme/fillContrast.cjs +130 -0
  164. package/dist/cjs/theme/fillContrast.native.js +163 -0
  165. package/dist/cjs/theme/fillContrast.native.js.map +1 -0
  166. package/dist/cjs/theme/focusState.cjs +120 -0
  167. package/dist/cjs/theme/focusState.native.js +123 -0
  168. package/dist/cjs/theme/focusState.native.js.map +1 -0
  169. package/dist/cjs/theme/fontCategoryMetrics.cjs +91 -0
  170. package/dist/cjs/theme/fontCategoryMetrics.native.js +94 -0
  171. package/dist/cjs/theme/fontCategoryMetrics.native.js.map +1 -0
  172. package/dist/cjs/theme/fontCategoryStacks.cjs +40 -0
  173. package/dist/cjs/theme/fontCategoryStacks.native.js +43 -0
  174. package/dist/cjs/theme/fontCategoryStacks.native.js.map +1 -0
  175. package/dist/cjs/theme/glyphPaint.cjs +55 -0
  176. package/dist/cjs/theme/glyphPaint.native.js +81 -0
  177. package/dist/cjs/theme/glyphPaint.native.js.map +1 -0
  178. package/dist/cjs/theme/glyphTint.cjs +90 -0
  179. package/dist/cjs/theme/glyphTint.native.js +96 -0
  180. package/dist/cjs/theme/glyphTint.native.js.map +1 -0
  181. package/dist/cjs/theme/groupGeometry.cjs +67 -0
  182. package/dist/cjs/theme/groupGeometry.native.js +72 -0
  183. package/dist/cjs/theme/groupGeometry.native.js.map +1 -0
  184. package/dist/cjs/theme/hairline.cjs +119 -0
  185. package/dist/cjs/theme/hairline.native.js +73 -0
  186. package/dist/cjs/theme/hairline.native.js.map +1 -0
  187. package/dist/cjs/theme/index.cjs +95 -0
  188. package/dist/cjs/theme/index.native.js +98 -0
  189. package/dist/cjs/theme/index.native.js.map +1 -0
  190. package/dist/cjs/theme/intents.cjs +62 -0
  191. package/dist/cjs/theme/intents.native.js +65 -0
  192. package/dist/cjs/theme/intents.native.js.map +1 -0
  193. package/dist/cjs/theme/knobs.cjs +172 -0
  194. package/dist/cjs/theme/knobs.native.js +175 -0
  195. package/dist/cjs/theme/knobs.native.js.map +1 -0
  196. package/dist/cjs/theme/layoutTokens.cjs +172 -0
  197. package/dist/cjs/theme/layoutTokens.native.js +222 -0
  198. package/dist/cjs/theme/layoutTokens.native.js.map +1 -0
  199. package/dist/cjs/theme/listRows.cjs +44 -0
  200. package/dist/cjs/theme/listRows.native.js +49 -0
  201. package/dist/cjs/theme/listRows.native.js.map +1 -0
  202. package/dist/cjs/theme/mergedTokens.cjs +39 -0
  203. package/dist/cjs/theme/mergedTokens.native.js +61 -0
  204. package/dist/cjs/theme/mergedTokens.native.js.map +1 -0
  205. package/dist/cjs/theme/motion.cjs +72 -0
  206. package/dist/cjs/theme/motion.native.js +82 -0
  207. package/dist/cjs/theme/motion.native.js.map +1 -0
  208. package/dist/cjs/theme/motionStops.cjs +28 -0
  209. package/dist/cjs/theme/motionStops.native.js +31 -0
  210. package/dist/cjs/theme/motionStops.native.js.map +1 -0
  211. package/dist/cjs/theme/motionTiming.cjs +79 -0
  212. package/dist/cjs/theme/motionTiming.native.js +85 -0
  213. package/dist/cjs/theme/motionTiming.native.js.map +1 -0
  214. package/dist/cjs/theme/nativeFontFamily.cjs +30 -0
  215. package/dist/cjs/theme/nativeFontFamily.native.js +37 -0
  216. package/dist/cjs/theme/nativeFontFamily.native.js.map +1 -0
  217. package/dist/cjs/theme/nativeMonoFamily.cjs +44 -0
  218. package/dist/cjs/theme/nativeMonoFamily.native.js +47 -0
  219. package/dist/cjs/theme/nativeMonoFamily.native.js.map +1 -0
  220. package/dist/cjs/theme/overlaySurfaces.cjs +327 -0
  221. package/dist/cjs/theme/overlaySurfaces.native.js +351 -0
  222. package/dist/cjs/theme/overlaySurfaces.native.js.map +1 -0
  223. package/dist/cjs/theme/pageGutter.cjs +85 -0
  224. package/dist/cjs/theme/pageGutter.native.js +92 -0
  225. package/dist/cjs/theme/pageGutter.native.js.map +1 -0
  226. package/dist/cjs/theme/preset.types.cjs +18 -0
  227. package/dist/cjs/theme/preset.types.native.js +21 -0
  228. package/dist/cjs/theme/preset.types.native.js.map +1 -0
  229. package/dist/cjs/theme/presetPreview.cjs +42 -0
  230. package/dist/cjs/theme/presetPreview.native.js +46 -0
  231. package/dist/cjs/theme/presetPreview.native.js.map +1 -0
  232. package/dist/cjs/theme/presetStore.cjs +288 -0
  233. package/dist/cjs/theme/presetStore.native.js +344 -0
  234. package/dist/cjs/theme/presetStore.native.js.map +1 -0
  235. package/dist/cjs/theme/presetUserSync.cjs +70 -0
  236. package/dist/cjs/theme/presetUserSync.native.js +75 -0
  237. package/dist/cjs/theme/presetUserSync.native.js.map +1 -0
  238. package/dist/cjs/theme/presets.cjs +128 -0
  239. package/dist/cjs/theme/presets.native.js +131 -0
  240. package/dist/cjs/theme/presets.native.js.map +1 -0
  241. package/dist/cjs/theme/radiusClass.cjs +128 -0
  242. package/dist/cjs/theme/radiusClass.native.js +137 -0
  243. package/dist/cjs/theme/radiusClass.native.js.map +1 -0
  244. package/dist/cjs/theme/radiusClassTable.generated.cjs +164 -0
  245. package/dist/cjs/theme/radiusClassTable.generated.native.js +167 -0
  246. package/dist/cjs/theme/radiusClassTable.generated.native.js.map +1 -0
  247. package/dist/cjs/theme/ramps.cjs +75 -0
  248. package/dist/cjs/theme/ramps.native.js +79 -0
  249. package/dist/cjs/theme/ramps.native.js.map +1 -0
  250. package/dist/cjs/theme/readableColor.cjs +284 -0
  251. package/dist/cjs/theme/readableColor.native.js +393 -0
  252. package/dist/cjs/theme/readableColor.native.js.map +1 -0
  253. package/dist/cjs/theme/recipeInputs.cjs +352 -0
  254. package/dist/cjs/theme/recipeInputs.native.js +470 -0
  255. package/dist/cjs/theme/recipeInputs.native.js.map +1 -0
  256. package/dist/cjs/theme/recipes.cjs +18 -0
  257. package/dist/cjs/theme/recipes.native.js +21 -0
  258. package/dist/cjs/theme/recipes.native.js.map +1 -0
  259. package/dist/cjs/theme/resolveKnobs.cjs +866 -0
  260. package/dist/cjs/theme/resolveKnobs.native.js +884 -0
  261. package/dist/cjs/theme/resolveKnobs.native.js.map +1 -0
  262. package/dist/cjs/theme/scale/ScaleStyles.cjs +57 -0
  263. package/dist/cjs/theme/scale/ScaleStyles.native.js +41 -0
  264. package/dist/cjs/theme/scale/ScaleStyles.native.js.map +1 -0
  265. package/dist/cjs/theme/scale/activeScale.cjs +56 -0
  266. package/dist/cjs/theme/scale/activeScale.native.js +84 -0
  267. package/dist/cjs/theme/scale/activeScale.native.js.map +1 -0
  268. package/dist/cjs/theme/scale/deriveRecipeInputs.cjs +111 -0
  269. package/dist/cjs/theme/scale/deriveRecipeInputs.native.js +154 -0
  270. package/dist/cjs/theme/scale/deriveRecipeInputs.native.js.map +1 -0
  271. package/dist/cjs/theme/scale/generateScale.cjs +114 -0
  272. package/dist/cjs/theme/scale/generateScale.native.js +200 -0
  273. package/dist/cjs/theme/scale/generateScale.native.js.map +1 -0
  274. package/dist/cjs/theme/scale/index.cjs +78 -0
  275. package/dist/cjs/theme/scale/index.native.js +81 -0
  276. package/dist/cjs/theme/scale/index.native.js.map +1 -0
  277. package/dist/cjs/theme/scale/installScaleConfig.cjs +31 -0
  278. package/dist/cjs/theme/scale/installScaleConfig.native.js +65 -0
  279. package/dist/cjs/theme/scale/installScaleConfig.native.js.map +1 -0
  280. package/dist/cjs/theme/scale/scaleAttribute.cjs +39 -0
  281. package/dist/cjs/theme/scale/scaleAttribute.native.js +42 -0
  282. package/dist/cjs/theme/scale/scaleAttribute.native.js.map +1 -0
  283. package/dist/cjs/theme/scale/scaleCss.cjs +89 -0
  284. package/dist/cjs/theme/scale/scaleCss.native.js +201 -0
  285. package/dist/cjs/theme/scale/scaleCss.native.js.map +1 -0
  286. package/dist/cjs/theme/scale/scaleFonts.cjs +86 -0
  287. package/dist/cjs/theme/scale/scaleFonts.native.js +155 -0
  288. package/dist/cjs/theme/scale/scaleFonts.native.js.map +1 -0
  289. package/dist/cjs/theme/scale/scaleInputs.cjs +232 -0
  290. package/dist/cjs/theme/scale/scaleInputs.native.js +237 -0
  291. package/dist/cjs/theme/scale/scaleInputs.native.js.map +1 -0
  292. package/dist/cjs/theme/scale/themeScales.cjs +136 -0
  293. package/dist/cjs/theme/scale/themeScales.native.js +185 -0
  294. package/dist/cjs/theme/scale/themeScales.native.js.map +1 -0
  295. package/dist/cjs/theme/scale/useActiveScale.cjs +78 -0
  296. package/dist/cjs/theme/scale/useActiveScale.native.js +87 -0
  297. package/dist/cjs/theme/scale/useActiveScale.native.js.map +1 -0
  298. package/dist/cjs/theme/schemeStore.cjs +87 -0
  299. package/dist/cjs/theme/schemeStore.native.js +104 -0
  300. package/dist/cjs/theme/schemeStore.native.js.map +1 -0
  301. package/dist/cjs/theme/shared.cjs +125 -0
  302. package/dist/cjs/theme/shared.native.js +168 -0
  303. package/dist/cjs/theme/shared.native.js.map +1 -0
  304. package/dist/cjs/theme/sizeRecipes.cjs +176 -0
  305. package/dist/cjs/theme/sizeRecipes.native.js +251 -0
  306. package/dist/cjs/theme/sizeRecipes.native.js.map +1 -0
  307. package/dist/cjs/theme/subsetThemes.cjs +46 -0
  308. package/dist/cjs/theme/subsetThemes.native.js +76 -0
  309. package/dist/cjs/theme/subsetThemes.native.js.map +1 -0
  310. package/dist/cjs/theme/theme.cjs +189 -0
  311. package/dist/cjs/theme/theme.native.js +115 -0
  312. package/dist/cjs/theme/theme.native.js.map +1 -0
  313. package/dist/cjs/theme/themeValue.cjs +51 -0
  314. package/dist/cjs/theme/themeValue.native.js +73 -0
  315. package/dist/cjs/theme/themeValue.native.js.map +1 -0
  316. package/dist/cjs/theme/tileSizes.cjs +202 -0
  317. package/dist/cjs/theme/tileSizes.native.js +230 -0
  318. package/dist/cjs/theme/tileSizes.native.js.map +1 -0
  319. package/dist/cjs/theme/touchManipulation.cjs +33 -0
  320. package/dist/cjs/theme/touchManipulation.native.js +36 -0
  321. package/dist/cjs/theme/touchManipulation.native.js.map +1 -0
  322. package/dist/cjs/theme/transitionProps.cjs +50 -0
  323. package/dist/cjs/theme/transitionProps.native.js +81 -0
  324. package/dist/cjs/theme/transitionProps.native.js.map +1 -0
  325. package/dist/cjs/theme/useColorScale.cjs +47 -0
  326. package/dist/cjs/theme/useColorScale.native.js +33 -0
  327. package/dist/cjs/theme/useColorScale.native.js.map +1 -0
  328. package/dist/cjs/theme/usePresetSwitch.cjs +70 -0
  329. package/dist/cjs/theme/usePresetSwitch.native.js +50 -0
  330. package/dist/cjs/theme/usePresetSwitch.native.js.map +1 -0
  331. package/dist/cjs/theme/useResolvedKnobs.cjs +140 -0
  332. package/dist/cjs/theme/useResolvedKnobs.native.js +177 -0
  333. package/dist/cjs/theme/useResolvedKnobs.native.js.map +1 -0
  334. package/dist/cjs/theme/useSchemePreference.cjs +49 -0
  335. package/dist/cjs/theme/useSchemePreference.native.js +80 -0
  336. package/dist/cjs/theme/useSchemePreference.native.js.map +1 -0
  337. package/dist/cjs/theme/useTheme.cjs +152 -0
  338. package/dist/cjs/theme/useTheme.native.js +94 -0
  339. package/dist/cjs/theme/useTheme.native.js.map +1 -0
  340. package/dist/cjs/theme/useTouchSurface.cjs +33 -0
  341. package/dist/cjs/theme/useTouchSurface.native.js +36 -0
  342. package/dist/cjs/theme/useTouchSurface.native.js.map +1 -0
  343. package/dist/cjs/theme/v3TokenRoles.cjs +64 -0
  344. package/dist/cjs/theme/v3TokenRoles.native.js +67 -0
  345. package/dist/cjs/theme/v3TokenRoles.native.js.map +1 -0
  346. package/dist/esm/audit/constraintAudit.mjs +540 -0
  347. package/dist/esm/audit/constraintAudit.mjs.map +1 -0
  348. package/dist/esm/audit/constraintAudit.native.js +918 -0
  349. package/dist/esm/audit/constraintAudit.native.js.map +1 -0
  350. package/dist/esm/audit/designTokens.mjs +28 -0
  351. package/dist/esm/audit/designTokens.mjs.map +1 -0
  352. package/dist/esm/audit/designTokens.native.js +52 -0
  353. package/dist/esm/audit/designTokens.native.js.map +1 -0
  354. package/dist/esm/audit/diffReport.mjs +229 -0
  355. package/dist/esm/audit/diffReport.mjs.map +1 -0
  356. package/dist/esm/audit/diffReport.native.js +490 -0
  357. package/dist/esm/audit/diffReport.native.js.map +1 -0
  358. package/dist/esm/audit/index.mjs +5 -0
  359. package/dist/esm/audit/index.mjs.map +1 -0
  360. package/dist/esm/audit/index.native.js +5 -0
  361. package/dist/esm/audit/index.native.js.map +1 -0
  362. package/dist/esm/audit/themeMatrix.mjs +890 -0
  363. package/dist/esm/audit/themeMatrix.mjs.map +1 -0
  364. package/dist/esm/audit/themeMatrix.native.js +1515 -0
  365. package/dist/esm/audit/themeMatrix.native.js.map +1 -0
  366. package/dist/esm/dates.mjs +224 -0
  367. package/dist/esm/dates.mjs.map +1 -0
  368. package/dist/esm/dates.native.js +249 -0
  369. package/dist/esm/dates.native.js.map +1 -0
  370. package/dist/esm/devWarn.mjs +123 -0
  371. package/dist/esm/devWarn.mjs.map +1 -0
  372. package/dist/esm/devWarn.native.js +148 -0
  373. package/dist/esm/devWarn.native.js.map +1 -0
  374. package/dist/esm/expo.mjs +59 -0
  375. package/dist/esm/expo.mjs.map +1 -0
  376. package/dist/esm/expo.native.js +64 -0
  377. package/dist/esm/expo.native.js.map +1 -0
  378. package/dist/esm/figma/figmaTokens.mjs +322 -0
  379. package/dist/esm/figma/figmaTokens.mjs.map +1 -0
  380. package/dist/esm/figma/figmaTokens.native.js +606 -0
  381. package/dist/esm/figma/figmaTokens.native.js.map +1 -0
  382. package/dist/esm/font.mjs +40 -0
  383. package/dist/esm/font.mjs.map +1 -0
  384. package/dist/esm/font.native.js +46 -0
  385. package/dist/esm/font.native.js.map +1 -0
  386. package/dist/esm/fonts/createFontLoader.mjs +7 -0
  387. package/dist/esm/fonts/createFontLoader.mjs.map +1 -0
  388. package/dist/esm/fonts/createFontLoader.native.js +42 -0
  389. package/dist/esm/fonts/createFontLoader.native.js.map +1 -0
  390. package/dist/esm/fonts/index.mjs +4 -0
  391. package/dist/esm/fonts/index.mjs.map +1 -0
  392. package/dist/esm/fonts/index.native.js +4 -0
  393. package/dist/esm/fonts/index.native.js.map +1 -0
  394. package/dist/esm/fonts/interFaces.mjs +12 -0
  395. package/dist/esm/fonts/interFaces.mjs.map +1 -0
  396. package/dist/esm/fonts/interFaces.native.js +12 -0
  397. package/dist/esm/fonts/interFaces.native.js.map +1 -0
  398. package/dist/esm/fonts/types.mjs +2 -0
  399. package/dist/esm/fonts/types.mjs.map +1 -0
  400. package/dist/esm/fonts/types.native.js +2 -0
  401. package/dist/esm/fonts/types.native.js.map +1 -0
  402. package/dist/esm/index.mjs +11 -0
  403. package/dist/esm/index.mjs.map +1 -0
  404. package/dist/esm/index.native.js +11 -0
  405. package/dist/esm/index.native.js.map +1 -0
  406. package/dist/esm/keyboardFocusRing.mjs +81 -0
  407. package/dist/esm/keyboardFocusRing.mjs.map +1 -0
  408. package/dist/esm/keyboardFocusRing.native.js +83 -0
  409. package/dist/esm/keyboardFocusRing.native.js.map +1 -0
  410. package/dist/esm/menuRow.mjs +49 -0
  411. package/dist/esm/menuRow.mjs.map +1 -0
  412. package/dist/esm/menuRow.native.js +52 -0
  413. package/dist/esm/menuRow.native.js.map +1 -0
  414. package/dist/esm/numbers.mjs +132 -0
  415. package/dist/esm/numbers.mjs.map +1 -0
  416. package/dist/esm/numbers.native.js +141 -0
  417. package/dist/esm/numbers.native.js.map +1 -0
  418. package/dist/esm/theme/FontKnobStyles.mjs +131 -0
  419. package/dist/esm/theme/FontKnobStyles.mjs.map +1 -0
  420. package/dist/esm/theme/FontKnobStyles.native.js +11 -0
  421. package/dist/esm/theme/FontKnobStyles.native.js.map +1 -0
  422. package/dist/esm/theme/Heading.mjs +143 -0
  423. package/dist/esm/theme/Heading.mjs.map +1 -0
  424. package/dist/esm/theme/Heading.native.js +152 -0
  425. package/dist/esm/theme/Heading.native.js.map +1 -0
  426. package/dist/esm/theme/IconSlot.mjs +42 -0
  427. package/dist/esm/theme/IconSlot.mjs.map +1 -0
  428. package/dist/esm/theme/IconSlot.native.js +50 -0
  429. package/dist/esm/theme/IconSlot.native.js.map +1 -0
  430. package/dist/esm/theme/Intent.mjs +19 -0
  431. package/dist/esm/theme/Intent.mjs.map +1 -0
  432. package/dist/esm/theme/Intent.native.js +20 -0
  433. package/dist/esm/theme/Intent.native.js.map +1 -0
  434. package/dist/esm/theme/Preset.mjs +124 -0
  435. package/dist/esm/theme/Preset.mjs.map +1 -0
  436. package/dist/esm/theme/Preset.native.js +127 -0
  437. package/dist/esm/theme/Preset.native.js.map +1 -0
  438. package/dist/esm/theme/PresetContext.mjs +11 -0
  439. package/dist/esm/theme/PresetContext.mjs.map +1 -0
  440. package/dist/esm/theme/PresetContext.native.js +12 -0
  441. package/dist/esm/theme/PresetContext.native.js.map +1 -0
  442. package/dist/esm/theme/Surface.mjs +80 -0
  443. package/dist/esm/theme/Surface.mjs.map +1 -0
  444. package/dist/esm/theme/Surface.native.js +88 -0
  445. package/dist/esm/theme/Surface.native.js.map +1 -0
  446. package/dist/esm/theme/Text.mjs +119 -0
  447. package/dist/esm/theme/Text.mjs.map +1 -0
  448. package/dist/esm/theme/Text.native.js +124 -0
  449. package/dist/esm/theme/Text.native.js.map +1 -0
  450. package/dist/esm/theme/Tint.mjs +29 -0
  451. package/dist/esm/theme/Tint.mjs.map +1 -0
  452. package/dist/esm/theme/Tint.native.js +30 -0
  453. package/dist/esm/theme/Tint.native.js.map +1 -0
  454. package/dist/esm/theme/activateThemeConfig.mjs +17 -0
  455. package/dist/esm/theme/activateThemeConfig.mjs.map +1 -0
  456. package/dist/esm/theme/activateThemeConfig.native.js +17 -0
  457. package/dist/esm/theme/activateThemeConfig.native.js.map +1 -0
  458. package/dist/esm/theme/animations/css.mjs +7 -0
  459. package/dist/esm/theme/animations/css.mjs.map +1 -0
  460. package/dist/esm/theme/animations/css.native.js +7 -0
  461. package/dist/esm/theme/animations/css.native.js.map +1 -0
  462. package/dist/esm/theme/animations/index.mjs +2 -0
  463. package/dist/esm/theme/animations/index.mjs.map +1 -0
  464. package/dist/esm/theme/animations/index.native.js +2 -0
  465. package/dist/esm/theme/animations/index.native.js.map +1 -0
  466. package/dist/esm/theme/animations/reactNative.mjs +131 -0
  467. package/dist/esm/theme/animations/reactNative.mjs.map +1 -0
  468. package/dist/esm/theme/animations/reactNative.native.js +131 -0
  469. package/dist/esm/theme/animations/reactNative.native.js.map +1 -0
  470. package/dist/esm/theme/chartPalette.mjs +191 -0
  471. package/dist/esm/theme/chartPalette.mjs.map +1 -0
  472. package/dist/esm/theme/chartPalette.native.js +256 -0
  473. package/dist/esm/theme/chartPalette.native.js.map +1 -0
  474. package/dist/esm/theme/colorRules.mjs +273 -0
  475. package/dist/esm/theme/colorRules.mjs.map +1 -0
  476. package/dist/esm/theme/colorRules.native.js +306 -0
  477. package/dist/esm/theme/colorRules.native.js.map +1 -0
  478. package/dist/esm/theme/controlTiers.mjs +39 -0
  479. package/dist/esm/theme/controlTiers.mjs.map +1 -0
  480. package/dist/esm/theme/controlTiers.native.js +41 -0
  481. package/dist/esm/theme/controlTiers.native.js.map +1 -0
  482. package/dist/esm/theme/cookies.mjs +145 -0
  483. package/dist/esm/theme/cookies.mjs.map +1 -0
  484. package/dist/esm/theme/cookies.native.js +268 -0
  485. package/dist/esm/theme/cookies.native.js.map +1 -0
  486. package/dist/esm/theme/cornerSmoothing.mjs +71 -0
  487. package/dist/esm/theme/cornerSmoothing.mjs.map +1 -0
  488. package/dist/esm/theme/cornerSmoothing.native.js +28 -0
  489. package/dist/esm/theme/cornerSmoothing.native.js.map +1 -0
  490. package/dist/esm/theme/createDefaultThemeConfig.mjs +102 -0
  491. package/dist/esm/theme/createDefaultThemeConfig.mjs.map +1 -0
  492. package/dist/esm/theme/createDefaultThemeConfig.native.js +145 -0
  493. package/dist/esm/theme/createDefaultThemeConfig.native.js.map +1 -0
  494. package/dist/esm/theme/createThemes.mjs +697 -0
  495. package/dist/esm/theme/createThemes.mjs.map +1 -0
  496. package/dist/esm/theme/createThemes.native.js +1140 -0
  497. package/dist/esm/theme/createThemes.native.js.map +1 -0
  498. package/dist/esm/theme/dedupeInherited.mjs +55 -0
  499. package/dist/esm/theme/dedupeInherited.mjs.map +1 -0
  500. package/dist/esm/theme/dedupeInherited.native.js +163 -0
  501. package/dist/esm/theme/dedupeInherited.native.js.map +1 -0
  502. package/dist/esm/theme/defaults/accent.mjs +7 -0
  503. package/dist/esm/theme/defaults/accent.mjs.map +1 -0
  504. package/dist/esm/theme/defaults/accent.native.js +7 -0
  505. package/dist/esm/theme/defaults/accent.native.js.map +1 -0
  506. package/dist/esm/theme/defaults/base.mjs +23 -0
  507. package/dist/esm/theme/defaults/base.mjs.map +1 -0
  508. package/dist/esm/theme/defaults/base.native.js +23 -0
  509. package/dist/esm/theme/defaults/base.native.js.map +1 -0
  510. package/dist/esm/theme/defaults/builderOptions.mjs +165 -0
  511. package/dist/esm/theme/defaults/builderOptions.mjs.map +1 -0
  512. package/dist/esm/theme/defaults/builderOptions.native.js +233 -0
  513. package/dist/esm/theme/defaults/builderOptions.native.js.map +1 -0
  514. package/dist/esm/theme/defaults/categoryFonts.mjs +25 -0
  515. package/dist/esm/theme/defaults/categoryFonts.mjs.map +1 -0
  516. package/dist/esm/theme/defaults/categoryFonts.native.js +25 -0
  517. package/dist/esm/theme/defaults/categoryFonts.native.js.map +1 -0
  518. package/dist/esm/theme/defaults/fonts.mjs +227 -0
  519. package/dist/esm/theme/defaults/fonts.mjs.map +1 -0
  520. package/dist/esm/theme/defaults/fonts.native.js +316 -0
  521. package/dist/esm/theme/defaults/fonts.native.js.map +1 -0
  522. package/dist/esm/theme/defaults/house.mjs +13 -0
  523. package/dist/esm/theme/defaults/house.mjs.map +1 -0
  524. package/dist/esm/theme/defaults/house.native.js +17 -0
  525. package/dist/esm/theme/defaults/house.native.js.map +1 -0
  526. package/dist/esm/theme/defaults/index.mjs +7 -0
  527. package/dist/esm/theme/defaults/index.mjs.map +1 -0
  528. package/dist/esm/theme/defaults/index.native.js +7 -0
  529. package/dist/esm/theme/defaults/index.native.js.map +1 -0
  530. package/dist/esm/theme/devtools/ColorLineVisualizer.mjs +218 -0
  531. package/dist/esm/theme/devtools/ColorLineVisualizer.mjs.map +1 -0
  532. package/dist/esm/theme/devtools/ColorLineVisualizer.native.js +230 -0
  533. package/dist/esm/theme/devtools/ColorLineVisualizer.native.js.map +1 -0
  534. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.mjs +1325 -0
  535. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.mjs.map +1 -0
  536. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.native.js +1786 -0
  537. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.native.js.map +1 -0
  538. package/dist/esm/theme/devtools/animationOptions.mjs +11 -0
  539. package/dist/esm/theme/devtools/animationOptions.mjs.map +1 -0
  540. package/dist/esm/theme/devtools/animationOptions.native.js +18 -0
  541. package/dist/esm/theme/devtools/animationOptions.native.js.map +1 -0
  542. package/dist/esm/theme/devtools/buildSnapshot.mjs +67 -0
  543. package/dist/esm/theme/devtools/buildSnapshot.mjs.map +1 -0
  544. package/dist/esm/theme/devtools/buildSnapshot.native.js +146 -0
  545. package/dist/esm/theme/devtools/buildSnapshot.native.js.map +1 -0
  546. package/dist/esm/theme/devtools/knobIcons.mjs +456 -0
  547. package/dist/esm/theme/devtools/knobIcons.mjs.map +1 -0
  548. package/dist/esm/theme/devtools/knobIcons.native.js +464 -0
  549. package/dist/esm/theme/devtools/knobIcons.native.js.map +1 -0
  550. package/dist/esm/theme/devtools/vizConstants.mjs +26 -0
  551. package/dist/esm/theme/devtools/vizConstants.mjs.map +1 -0
  552. package/dist/esm/theme/devtools/vizConstants.native.js +26 -0
  553. package/dist/esm/theme/devtools/vizConstants.native.js.map +1 -0
  554. package/dist/esm/theme/dynamicType.mjs +24 -0
  555. package/dist/esm/theme/dynamicType.mjs.map +1 -0
  556. package/dist/esm/theme/dynamicType.native.js +24 -0
  557. package/dist/esm/theme/dynamicType.native.js.map +1 -0
  558. package/dist/esm/theme/fieldFocus.mjs +27 -0
  559. package/dist/esm/theme/fieldFocus.mjs.map +1 -0
  560. package/dist/esm/theme/fieldFocus.native.js +30 -0
  561. package/dist/esm/theme/fieldFocus.native.js.map +1 -0
  562. package/dist/esm/theme/fillContrast.mjs +98 -0
  563. package/dist/esm/theme/fillContrast.mjs.map +1 -0
  564. package/dist/esm/theme/fillContrast.native.js +128 -0
  565. package/dist/esm/theme/fillContrast.native.js.map +1 -0
  566. package/dist/esm/theme/focusState.mjs +81 -0
  567. package/dist/esm/theme/focusState.mjs.map +1 -0
  568. package/dist/esm/theme/focusState.native.js +81 -0
  569. package/dist/esm/theme/focusState.native.js.map +1 -0
  570. package/dist/esm/theme/fontCategoryMetrics.mjs +65 -0
  571. package/dist/esm/theme/fontCategoryMetrics.mjs.map +1 -0
  572. package/dist/esm/theme/fontCategoryMetrics.native.js +65 -0
  573. package/dist/esm/theme/fontCategoryMetrics.native.js.map +1 -0
  574. package/dist/esm/theme/fontCategoryStacks.mjs +15 -0
  575. package/dist/esm/theme/fontCategoryStacks.mjs.map +1 -0
  576. package/dist/esm/theme/fontCategoryStacks.native.js +15 -0
  577. package/dist/esm/theme/fontCategoryStacks.native.js.map +1 -0
  578. package/dist/esm/theme/glyphPaint.mjs +29 -0
  579. package/dist/esm/theme/glyphPaint.mjs.map +1 -0
  580. package/dist/esm/theme/glyphPaint.native.js +52 -0
  581. package/dist/esm/theme/glyphPaint.native.js.map +1 -0
  582. package/dist/esm/theme/glyphTint.mjs +60 -0
  583. package/dist/esm/theme/glyphTint.mjs.map +1 -0
  584. package/dist/esm/theme/glyphTint.native.js +63 -0
  585. package/dist/esm/theme/glyphTint.native.js.map +1 -0
  586. package/dist/esm/theme/groupGeometry.mjs +38 -0
  587. package/dist/esm/theme/groupGeometry.mjs.map +1 -0
  588. package/dist/esm/theme/groupGeometry.native.js +40 -0
  589. package/dist/esm/theme/groupGeometry.native.js.map +1 -0
  590. package/dist/esm/theme/hairline.mjs +89 -0
  591. package/dist/esm/theme/hairline.mjs.map +1 -0
  592. package/dist/esm/theme/hairline.native.js +41 -0
  593. package/dist/esm/theme/hairline.native.js.map +1 -0
  594. package/dist/esm/theme/index.mjs +66 -0
  595. package/dist/esm/theme/index.mjs.map +1 -0
  596. package/dist/esm/theme/index.native.js +66 -0
  597. package/dist/esm/theme/index.native.js.map +1 -0
  598. package/dist/esm/theme/intents.mjs +37 -0
  599. package/dist/esm/theme/intents.mjs.map +1 -0
  600. package/dist/esm/theme/intents.native.js +37 -0
  601. package/dist/esm/theme/intents.native.js.map +1 -0
  602. package/dist/esm/theme/knobs.mjs +125 -0
  603. package/dist/esm/theme/knobs.mjs.map +1 -0
  604. package/dist/esm/theme/knobs.native.js +125 -0
  605. package/dist/esm/theme/knobs.native.js.map +1 -0
  606. package/dist/esm/theme/layoutTokens.mjs +124 -0
  607. package/dist/esm/theme/layoutTokens.mjs.map +1 -0
  608. package/dist/esm/theme/layoutTokens.native.js +171 -0
  609. package/dist/esm/theme/layoutTokens.native.js.map +1 -0
  610. package/dist/esm/theme/listRows.mjs +17 -0
  611. package/dist/esm/theme/listRows.mjs.map +1 -0
  612. package/dist/esm/theme/listRows.native.js +19 -0
  613. package/dist/esm/theme/listRows.native.js.map +1 -0
  614. package/dist/esm/theme/mergedTokens.mjs +14 -0
  615. package/dist/esm/theme/mergedTokens.mjs.map +1 -0
  616. package/dist/esm/theme/mergedTokens.native.js +33 -0
  617. package/dist/esm/theme/mergedTokens.native.js.map +1 -0
  618. package/dist/esm/theme/motion.mjs +41 -0
  619. package/dist/esm/theme/motion.mjs.map +1 -0
  620. package/dist/esm/theme/motion.native.js +48 -0
  621. package/dist/esm/theme/motion.native.js.map +1 -0
  622. package/dist/esm/theme/motionStops.mjs +3 -0
  623. package/dist/esm/theme/motionStops.mjs.map +1 -0
  624. package/dist/esm/theme/motionStops.native.js +3 -0
  625. package/dist/esm/theme/motionStops.native.js.map +1 -0
  626. package/dist/esm/theme/motionTiming.mjs +48 -0
  627. package/dist/esm/theme/motionTiming.mjs.map +1 -0
  628. package/dist/esm/theme/motionTiming.native.js +51 -0
  629. package/dist/esm/theme/motionTiming.native.js.map +1 -0
  630. package/dist/esm/theme/nativeFontFamily.mjs +5 -0
  631. package/dist/esm/theme/nativeFontFamily.mjs.map +1 -0
  632. package/dist/esm/theme/nativeFontFamily.native.js +9 -0
  633. package/dist/esm/theme/nativeFontFamily.native.js.map +1 -0
  634. package/dist/esm/theme/nativeMonoFamily.mjs +18 -0
  635. package/dist/esm/theme/nativeMonoFamily.mjs.map +1 -0
  636. package/dist/esm/theme/nativeMonoFamily.native.js +18 -0
  637. package/dist/esm/theme/nativeMonoFamily.native.js.map +1 -0
  638. package/dist/esm/theme/overlaySurfaces.mjs +290 -0
  639. package/dist/esm/theme/overlaySurfaces.mjs.map +1 -0
  640. package/dist/esm/theme/overlaySurfaces.native.js +311 -0
  641. package/dist/esm/theme/overlaySurfaces.native.js.map +1 -0
  642. package/dist/esm/theme/pageGutter.mjs +55 -0
  643. package/dist/esm/theme/pageGutter.mjs.map +1 -0
  644. package/dist/esm/theme/pageGutter.native.js +59 -0
  645. package/dist/esm/theme/pageGutter.native.js.map +1 -0
  646. package/dist/esm/theme/preset.types.mjs +2 -0
  647. package/dist/esm/theme/preset.types.mjs.map +1 -0
  648. package/dist/esm/theme/preset.types.native.js +2 -0
  649. package/dist/esm/theme/preset.types.native.js.map +1 -0
  650. package/dist/esm/theme/presetPreview.mjs +17 -0
  651. package/dist/esm/theme/presetPreview.mjs.map +1 -0
  652. package/dist/esm/theme/presetPreview.native.js +18 -0
  653. package/dist/esm/theme/presetPreview.native.js.map +1 -0
  654. package/dist/esm/theme/presetStore.mjs +251 -0
  655. package/dist/esm/theme/presetStore.mjs.map +1 -0
  656. package/dist/esm/theme/presetStore.native.js +304 -0
  657. package/dist/esm/theme/presetStore.native.js.map +1 -0
  658. package/dist/esm/theme/presetUserSync.mjs +44 -0
  659. package/dist/esm/theme/presetUserSync.mjs.map +1 -0
  660. package/dist/esm/theme/presetUserSync.native.js +46 -0
  661. package/dist/esm/theme/presetUserSync.native.js.map +1 -0
  662. package/dist/esm/theme/presets.mjs +97 -0
  663. package/dist/esm/theme/presets.mjs.map +1 -0
  664. package/dist/esm/theme/presets.native.js +97 -0
  665. package/dist/esm/theme/presets.native.js.map +1 -0
  666. package/dist/esm/theme/radiusClass.mjs +99 -0
  667. package/dist/esm/theme/radiusClass.mjs.map +1 -0
  668. package/dist/esm/theme/radiusClass.native.js +105 -0
  669. package/dist/esm/theme/radiusClass.native.js.map +1 -0
  670. package/dist/esm/theme/radiusClassTable.generated.mjs +135 -0
  671. package/dist/esm/theme/radiusClassTable.generated.mjs.map +1 -0
  672. package/dist/esm/theme/radiusClassTable.generated.native.js +135 -0
  673. package/dist/esm/theme/radiusClassTable.generated.native.js.map +1 -0
  674. package/dist/esm/theme/ramps.mjs +48 -0
  675. package/dist/esm/theme/ramps.mjs.map +1 -0
  676. package/dist/esm/theme/ramps.native.js +49 -0
  677. package/dist/esm/theme/ramps.native.js.map +1 -0
  678. package/dist/esm/theme/readableColor.mjs +248 -0
  679. package/dist/esm/theme/readableColor.mjs.map +1 -0
  680. package/dist/esm/theme/readableColor.native.js +354 -0
  681. package/dist/esm/theme/readableColor.native.js.map +1 -0
  682. package/dist/esm/theme/recipeInputs.mjs +309 -0
  683. package/dist/esm/theme/recipeInputs.mjs.map +1 -0
  684. package/dist/esm/theme/recipeInputs.native.js +424 -0
  685. package/dist/esm/theme/recipeInputs.native.js.map +1 -0
  686. package/dist/esm/theme/recipes.mjs +2 -0
  687. package/dist/esm/theme/recipes.mjs.map +1 -0
  688. package/dist/esm/theme/recipes.native.js +2 -0
  689. package/dist/esm/theme/recipes.native.js.map +1 -0
  690. package/dist/esm/theme/resolveKnobs.mjs +818 -0
  691. package/dist/esm/theme/resolveKnobs.mjs.map +1 -0
  692. package/dist/esm/theme/resolveKnobs.native.js +833 -0
  693. package/dist/esm/theme/resolveKnobs.native.js.map +1 -0
  694. package/dist/esm/theme/scale/ScaleStyles.mjs +30 -0
  695. package/dist/esm/theme/scale/ScaleStyles.mjs.map +1 -0
  696. package/dist/esm/theme/scale/ScaleStyles.native.js +11 -0
  697. package/dist/esm/theme/scale/ScaleStyles.native.js.map +1 -0
  698. package/dist/esm/theme/scale/activeScale.mjs +28 -0
  699. package/dist/esm/theme/scale/activeScale.mjs.map +1 -0
  700. package/dist/esm/theme/scale/activeScale.native.js +53 -0
  701. package/dist/esm/theme/scale/activeScale.native.js.map +1 -0
  702. package/dist/esm/theme/scale/deriveRecipeInputs.mjs +86 -0
  703. package/dist/esm/theme/scale/deriveRecipeInputs.mjs.map +1 -0
  704. package/dist/esm/theme/scale/deriveRecipeInputs.native.js +126 -0
  705. package/dist/esm/theme/scale/deriveRecipeInputs.native.js.map +1 -0
  706. package/dist/esm/theme/scale/generateScale.mjs +85 -0
  707. package/dist/esm/theme/scale/generateScale.mjs.map +1 -0
  708. package/dist/esm/theme/scale/generateScale.native.js +168 -0
  709. package/dist/esm/theme/scale/generateScale.native.js.map +1 -0
  710. package/dist/esm/theme/scale/index.mjs +12 -0
  711. package/dist/esm/theme/scale/index.mjs.map +1 -0
  712. package/dist/esm/theme/scale/index.native.js +12 -0
  713. package/dist/esm/theme/scale/index.native.js.map +1 -0
  714. package/dist/esm/theme/scale/installScaleConfig.mjs +6 -0
  715. package/dist/esm/theme/scale/installScaleConfig.mjs.map +1 -0
  716. package/dist/esm/theme/scale/installScaleConfig.native.js +36 -0
  717. package/dist/esm/theme/scale/installScaleConfig.native.js.map +1 -0
  718. package/dist/esm/theme/scale/scaleAttribute.mjs +11 -0
  719. package/dist/esm/theme/scale/scaleAttribute.mjs.map +1 -0
  720. package/dist/esm/theme/scale/scaleAttribute.native.js +11 -0
  721. package/dist/esm/theme/scale/scaleAttribute.native.js.map +1 -0
  722. package/dist/esm/theme/scale/scaleCss.mjs +62 -0
  723. package/dist/esm/theme/scale/scaleCss.mjs.map +1 -0
  724. package/dist/esm/theme/scale/scaleCss.native.js +171 -0
  725. package/dist/esm/theme/scale/scaleCss.native.js.map +1 -0
  726. package/dist/esm/theme/scale/scaleFonts.mjs +60 -0
  727. package/dist/esm/theme/scale/scaleFonts.mjs.map +1 -0
  728. package/dist/esm/theme/scale/scaleFonts.native.js +126 -0
  729. package/dist/esm/theme/scale/scaleFonts.native.js.map +1 -0
  730. package/dist/esm/theme/scale/scaleInputs.mjs +189 -0
  731. package/dist/esm/theme/scale/scaleInputs.mjs.map +1 -0
  732. package/dist/esm/theme/scale/scaleInputs.native.js +191 -0
  733. package/dist/esm/theme/scale/scaleInputs.native.js.map +1 -0
  734. package/dist/esm/theme/scale/themeScales.mjs +109 -0
  735. package/dist/esm/theme/scale/themeScales.mjs.map +1 -0
  736. package/dist/esm/theme/scale/themeScales.native.js +155 -0
  737. package/dist/esm/theme/scale/themeScales.native.js.map +1 -0
  738. package/dist/esm/theme/scale/useActiveScale.mjs +51 -0
  739. package/dist/esm/theme/scale/useActiveScale.mjs.map +1 -0
  740. package/dist/esm/theme/scale/useActiveScale.native.js +57 -0
  741. package/dist/esm/theme/scale/useActiveScale.native.js.map +1 -0
  742. package/dist/esm/theme/schemeStore.mjs +59 -0
  743. package/dist/esm/theme/schemeStore.mjs.map +1 -0
  744. package/dist/esm/theme/schemeStore.native.js +73 -0
  745. package/dist/esm/theme/schemeStore.native.js.map +1 -0
  746. package/dist/esm/theme/shared.mjs +95 -0
  747. package/dist/esm/theme/shared.mjs.map +1 -0
  748. package/dist/esm/theme/shared.native.js +135 -0
  749. package/dist/esm/theme/shared.native.js.map +1 -0
  750. package/dist/esm/theme/sizeRecipes.mjs +112 -0
  751. package/dist/esm/theme/sizeRecipes.mjs.map +1 -0
  752. package/dist/esm/theme/sizeRecipes.native.js +184 -0
  753. package/dist/esm/theme/sizeRecipes.native.js.map +1 -0
  754. package/dist/esm/theme/subsetThemes.mjs +21 -0
  755. package/dist/esm/theme/subsetThemes.mjs.map +1 -0
  756. package/dist/esm/theme/subsetThemes.native.js +48 -0
  757. package/dist/esm/theme/subsetThemes.native.js.map +1 -0
  758. package/dist/esm/theme/theme.mjs +163 -0
  759. package/dist/esm/theme/theme.mjs.map +1 -0
  760. package/dist/esm/theme/theme.native.js +87 -0
  761. package/dist/esm/theme/theme.native.js.map +1 -0
  762. package/dist/esm/theme/themeValue.mjs +25 -0
  763. package/dist/esm/theme/themeValue.mjs.map +1 -0
  764. package/dist/esm/theme/themeValue.native.js +44 -0
  765. package/dist/esm/theme/themeValue.native.js.map +1 -0
  766. package/dist/esm/theme/tileSizes.mjs +167 -0
  767. package/dist/esm/theme/tileSizes.mjs.map +1 -0
  768. package/dist/esm/theme/tileSizes.native.js +192 -0
  769. package/dist/esm/theme/tileSizes.native.js.map +1 -0
  770. package/dist/esm/theme/touchManipulation.mjs +7 -0
  771. package/dist/esm/theme/touchManipulation.mjs.map +1 -0
  772. package/dist/esm/theme/touchManipulation.native.js +7 -0
  773. package/dist/esm/theme/touchManipulation.native.js.map +1 -0
  774. package/dist/esm/theme/transitionProps.mjs +25 -0
  775. package/dist/esm/theme/transitionProps.mjs.map +1 -0
  776. package/dist/esm/theme/transitionProps.native.js +53 -0
  777. package/dist/esm/theme/transitionProps.native.js.map +1 -0
  778. package/dist/esm/theme/useColorScale.mjs +22 -0
  779. package/dist/esm/theme/useColorScale.mjs.map +1 -0
  780. package/dist/esm/theme/useColorScale.native.js +5 -0
  781. package/dist/esm/theme/useColorScale.native.js.map +1 -0
  782. package/dist/esm/theme/usePresetSwitch.mjs +45 -0
  783. package/dist/esm/theme/usePresetSwitch.mjs.map +1 -0
  784. package/dist/esm/theme/usePresetSwitch.native.js +22 -0
  785. package/dist/esm/theme/usePresetSwitch.native.js.map +1 -0
  786. package/dist/esm/theme/useResolvedKnobs.mjs +111 -0
  787. package/dist/esm/theme/useResolvedKnobs.mjs.map +1 -0
  788. package/dist/esm/theme/useResolvedKnobs.native.js +145 -0
  789. package/dist/esm/theme/useResolvedKnobs.native.js.map +1 -0
  790. package/dist/esm/theme/useSchemePreference.mjs +24 -0
  791. package/dist/esm/theme/useSchemePreference.mjs.map +1 -0
  792. package/dist/esm/theme/useSchemePreference.native.js +52 -0
  793. package/dist/esm/theme/useSchemePreference.native.js.map +1 -0
  794. package/dist/esm/theme/useTheme.mjs +127 -0
  795. package/dist/esm/theme/useTheme.mjs.map +1 -0
  796. package/dist/esm/theme/useTheme.native.js +66 -0
  797. package/dist/esm/theme/useTheme.native.js.map +1 -0
  798. package/dist/esm/theme/useTouchSurface.mjs +8 -0
  799. package/dist/esm/theme/useTouchSurface.mjs.map +1 -0
  800. package/dist/esm/theme/useTouchSurface.native.js +8 -0
  801. package/dist/esm/theme/useTouchSurface.native.js.map +1 -0
  802. package/dist/esm/theme/v3TokenRoles.mjs +39 -0
  803. package/dist/esm/theme/v3TokenRoles.mjs.map +1 -0
  804. package/dist/esm/theme/v3TokenRoles.native.js +39 -0
  805. package/dist/esm/theme/v3TokenRoles.native.js.map +1 -0
  806. package/package.json +56 -12
  807. package/src/expo.ts +20 -0
  808. package/src/fonts/createFontLoader.ts +8 -4
  809. package/src/fonts/index.ts +1 -0
  810. package/src/fonts/interFaces.spec.ts +87 -0
  811. package/src/fonts/interFaces.ts +26 -0
  812. package/src/theme/accentButtonLabel.spec.ts +116 -0
  813. package/src/theme/colorRules.ts +41 -0
  814. package/src/theme/controlTiers.ts +6 -4
  815. package/src/theme/defaults/fonts.spec.ts +9 -2
  816. package/src/theme/defaults/fonts.ts +5 -8
  817. package/src/theme/glyphTint.spec.ts +30 -2
  818. package/src/theme/glyphTint.ts +1 -47
  819. package/src/theme/hairline.spec.ts +60 -3
  820. package/src/theme/hairline.ts +35 -5
  821. package/src/theme/readableColor.ts +49 -0
  822. package/src/theme/resolveKnobs.ts +172 -101
  823. package/src/theme/scale/activeScale.spec.ts +33 -0
  824. package/src/theme/scale/activeScale.ts +19 -0
  825. package/src/theme/scale/index.ts +6 -1
  826. package/src/theme/subsetThemes.spec.ts +81 -0
  827. package/src/theme/subsetThemes.ts +13 -1
  828. package/types/expo.d.ts +10 -0
  829. package/types/expo.d.ts.map +1 -1
  830. package/types/fonts/createFontLoader.d.ts.map +1 -1
  831. package/types/fonts/index.d.ts +1 -0
  832. package/types/fonts/index.d.ts.map +1 -1
  833. package/types/fonts/interFaces.d.ts +23 -0
  834. package/types/fonts/interFaces.d.ts.map +1 -0
  835. package/types/theme/colorRules.d.ts +6 -0
  836. package/types/theme/colorRules.d.ts.map +1 -1
  837. package/types/theme/controlTiers.d.ts +5 -3
  838. package/types/theme/controlTiers.d.ts.map +1 -1
  839. package/types/theme/defaults/fonts.d.ts +30 -30
  840. package/types/theme/defaults/fonts.d.ts.map +1 -1
  841. package/types/theme/glyphTint.d.ts +0 -6
  842. package/types/theme/glyphTint.d.ts.map +1 -1
  843. package/types/theme/hairline.d.ts +14 -3
  844. package/types/theme/hairline.d.ts.map +1 -1
  845. package/types/theme/readableColor.d.ts +19 -0
  846. package/types/theme/readableColor.d.ts.map +1 -1
  847. package/types/theme/resolveKnobs.d.ts.map +1 -1
  848. package/types/theme/scale/activeScale.d.ts +8 -0
  849. package/types/theme/scale/activeScale.d.ts.map +1 -1
  850. package/types/theme/scale/index.d.ts +1 -1
  851. package/types/theme/scale/index.d.ts.map +1 -1
  852. package/types/theme/subsetThemes.d.ts +10 -1
  853. package/types/theme/subsetThemes.d.ts.map +1 -1
@@ -1,5 +1,11 @@
1
1
  import { beforeEach, describe, expect, it } from "vitest";
2
- import { ensureHairlineFallback, hairline, hairlineFallbackCss, hairlineWidth } from "./hairline";
2
+ import {
3
+ ensureHairlineFallback,
4
+ hairline,
5
+ hairlineFallbackCss,
6
+ hairlineThickness,
7
+ hairlineWidth,
8
+ } from "./hairline";
3
9
 
4
10
  describe("hairline (Axiom 15 OPTICS)", () => {
5
11
  it("resolves half a CSS pixel on web", () => {
@@ -43,8 +49,46 @@ describe("hairline (Axiom 15 OPTICS)", () => {
43
49
  expect(hairlineFallbackCss).toContain("border-inline-end-width: 1px !important");
44
50
  // filled-line fallbacks must pin max-height/max-width too (the `line`
45
51
  // treatment sets both, so height alone could not win)
46
- expect(hairlineFallbackCss).toContain("height: 1px !important; max-height: 1px !important");
47
- expect(hairlineFallbackCss).toContain("width: 1px !important; max-width: 1px !important");
52
+ // and never under one device pixel when zoomed out below 1dppx
53
+ expect(hairlineFallbackCss).toContain(
54
+ "height: max(1px, var(--mp-hairline, 1px)) !important; max-height: max(1px, var(--mp-hairline, 1px)) !important",
55
+ );
56
+ expect(hairlineFallbackCss).toContain(
57
+ "width: max(1px, var(--mp-hairline, 1px)) !important; max-width: max(1px, var(--mp-hairline, 1px)) !important",
58
+ );
59
+ });
60
+
61
+ it("keeps a zoomed-out ratio under 1 at one device pixel, past the 1px floor", () => {
62
+ for (const ratio of [0.5, 0.67, 0.8, 0.9]) {
63
+ const thickness = Math.max(1, hairlineThickness(ratio));
64
+ expect(thickness * ratio, `ratio ${ratio}`).toBeGreaterThanOrEqual(1);
65
+ }
66
+ });
67
+
68
+ // FZ-8395: a filled box under one device pixel snaps to 0 on alternate rows.
69
+ it("draws filled lines at least one device pixel at every ratio, never 0", () => {
70
+ for (const ratio of [1, 1.25, 1.5, 1.75, 1.8, 2, 2.25, 2.5, 2.625, 3, 3.5, 4]) {
71
+ const devicePx = hairlineThickness(ratio) * ratio;
72
+ expect(devicePx, `ratio ${ratio}`).toBeGreaterThanOrEqual(1);
73
+ expect(devicePx, `ratio ${ratio}`).toBeLessThan(1.1);
74
+ // On Blink's 1/64 px layout grid, so layout cannot round it under.
75
+ expect(Number.isInteger(hairlineThickness(ratio) * 64), `ratio ${ratio}`).toBe(true);
76
+ }
77
+ expect(hairlineThickness(2)).toBe(0.5);
78
+ expect(hairlineThickness(Number.NaN)).toBe(1);
79
+ });
80
+
81
+ it("sizes the filled treatments from --mp-hairline, above the inline 0.5px", () => {
82
+ expect(hairlineFallbackCss).toContain(
83
+ ".mp-hairline-h { height: var(--mp-hairline, 0.5px) !important",
84
+ );
85
+ expect(hairlineFallbackCss).toContain(
86
+ ".mp-hairline-w { width: var(--mp-hairline, 0.5px) !important",
87
+ );
88
+ // The low-DPI 1px block comes after, so it still wins there.
89
+ expect(hairlineFallbackCss.indexOf("@media")).toBeGreaterThan(
90
+ hairlineFallbackCss.indexOf("var(--mp-hairline"),
91
+ );
48
92
  });
49
93
 
50
94
  describe("fallback stylesheet mount", () => {
@@ -59,5 +103,18 @@ describe("hairline (Axiom 15 OPTICS)", () => {
59
103
  expect(tags).toHaveLength(1);
60
104
  expect(tags[0]?.textContent).toBe(hairlineFallbackCss);
61
105
  });
106
+
107
+ it("points --mp-hairline at one device pixel of the live ratio", () => {
108
+ const original = window.devicePixelRatio;
109
+ Object.defineProperty(window, "devicePixelRatio", { configurable: true, value: 1.75 });
110
+ try {
111
+ ensureHairlineFallback();
112
+ expect(document.documentElement.style.getPropertyValue("--mp-hairline")).toBe(
113
+ `${hairlineThickness(1.75)}px`,
114
+ );
115
+ } finally {
116
+ Object.defineProperty(window, "devicePixelRatio", { configurable: true, value: original });
117
+ }
118
+ });
62
119
  });
63
120
  });
@@ -81,21 +81,50 @@ export const hairline = {
81
81
  const STYLE_TAG_ID = "mp-hairline-styles";
82
82
 
83
83
  /**
84
- * 1px fallback for screens where 0.5px cannot map to a whole device pixel.
84
+ * FZ-8395: the filled lines' thickness, one device pixel rounded UP to
85
+ * Blink's 1/64 px layout unit. A filled box under one device pixel tall snaps
86
+ * to 0 or 1 device pixel depending on where its top lands, so 0.5 CSS px
87
+ * vanished on alternate rows at ratios between 1.5 and 2 (Windows 150-175%
88
+ * scaling, browser zoom). Exactly one device pixel or more never rounds to 0.
89
+ */
90
+ export function hairlineThickness(devicePixelRatio: number): number {
91
+ const ratio = Number.isFinite(devicePixelRatio) && devicePixelRatio > 0 ? devicePixelRatio : 1;
92
+ return Math.ceil(64 / ratio) / 64;
93
+ }
94
+
95
+ /**
96
+ * The filled `line`, `vline` and `height` treatments read their thickness
97
+ * from `--mp-hairline` (set from the live ratio below; 0.5px until it is), and
98
+ * low-DPI screens get a 1px floor for every treatment; a zoomed-out ratio
99
+ * under 1 keeps the filled ones at one device pixel, past that floor.
85
100
  * (`-webkit-max-device-pixel-ratio` covers Safari versions without
86
101
  * `resolution` media-query support.) Exported for unit tests.
87
102
  */
88
- export const hairlineFallbackCss = `@media (max-resolution: 1.49dppx), (-webkit-max-device-pixel-ratio: 1.49) {
103
+ export const hairlineFallbackCss = `.mp-hairline-h { height: var(--mp-hairline, 0.5px) !important; max-height: var(--mp-hairline, 0.5px) !important; flex-basis: var(--mp-hairline, 0.5px) !important; }
104
+ .mp-hairline-w { width: var(--mp-hairline, 0.5px) !important; max-width: var(--mp-hairline, 0.5px) !important; flex-basis: var(--mp-hairline, 0.5px) !important; }
105
+ @media (max-resolution: 1.49dppx), (-webkit-max-device-pixel-ratio: 1.49) {
89
106
  .mp-hairline-b { border-bottom-width: 1px !important; }
90
107
  .mp-hairline-t { border-top-width: 1px !important; }
91
108
  .mp-hairline-r { border-right-width: 1px !important; }
92
109
  .mp-hairline-l { border-left-width: 1px !important; }
93
- .mp-hairline-h { height: 1px !important; max-height: 1px !important; flex-basis: 1px !important; }
94
- .mp-hairline-w { width: 1px !important; max-width: 1px !important; flex-basis: 1px !important; }
110
+ .mp-hairline-h { height: max(1px, var(--mp-hairline, 1px)) !important; max-height: max(1px, var(--mp-hairline, 1px)) !important; flex-basis: max(1px, var(--mp-hairline, 1px)) !important; }
111
+ .mp-hairline-w { width: max(1px, var(--mp-hairline, 1px)) !important; max-width: max(1px, var(--mp-hairline, 1px)) !important; flex-basis: max(1px, var(--mp-hairline, 1px)) !important; }
95
112
  .mp-hairline-ie { border-inline-end-width: 1px !important; }
96
113
  }`;
97
114
 
98
- /** Idempotently mount the low-DPI fallback stylesheet (no-op off-DOM). */
115
+ let watchedRatio: MediaQueryList | undefined;
116
+
117
+ /** Point `--mp-hairline` at one device pixel, and again whenever the ratio changes. */
118
+ function trackDevicePixel(): void {
119
+ if (typeof window === "undefined") return;
120
+ const ratio = window.devicePixelRatio || 1;
121
+ document.documentElement.style.setProperty("--mp-hairline", `${hairlineThickness(ratio)}px`);
122
+ watchedRatio?.removeEventListener?.("change", trackDevicePixel);
123
+ watchedRatio = window.matchMedia?.(`(resolution: ${ratio}dppx)`);
124
+ watchedRatio?.addEventListener?.("change", trackDevicePixel);
125
+ }
126
+
127
+ /** Idempotently mount the hairline stylesheet (no-op off-DOM). */
99
128
  export function ensureHairlineFallback(): void {
100
129
  if (typeof document === "undefined") return;
101
130
  if (document.getElementById(STYLE_TAG_ID)) return;
@@ -103,6 +132,7 @@ export function ensureHairlineFallback(): void {
103
132
  tag.id = STYLE_TAG_ID;
104
133
  tag.textContent = hairlineFallbackCss;
105
134
  document.head.appendChild(tag);
135
+ trackDevicePixel();
106
136
  }
107
137
 
108
138
  // The fallback is static CSS (no knob/theme dependency), so mount it as soon
@@ -3,11 +3,13 @@ import { useTheme as useTamaguiTheme, useThemeName } from "tamagui";
3
3
  import {
4
4
  aaTextContrastRatio,
5
5
  contrastRatio,
6
+ holdHueToFloor,
6
7
  holdInkFloor,
7
8
  normalizeToHex,
8
9
  pickReadableForeground,
9
10
  relativeLuminance,
10
11
  } from "./colorRules";
12
+ import { isDarkThemeName } from "./controlTiers";
11
13
  import { tintHueNames } from "./createThemes";
12
14
 
13
15
  /**
@@ -314,3 +316,50 @@ export function useAccentTintedSurface(): string | undefined {
314
316
  const paper = resolveTokenValue(theme, "color1");
315
317
  return useMemo(() => resolveAccentTintedSurface({ solid, paper }), [solid, paper]);
316
318
  }
319
+
320
+ /** LC-172's floor for a hue: the spread between the strongest and weakest sRGB channel. */
321
+ const ACTIVE_TAB_CHROMA_FLOOR = 0.1;
322
+
323
+ export interface ResolveActiveTabInkInput {
324
+ /** The theme's identity hue on the page, when it has one. */
325
+ hue: string | undefined;
326
+ /** The theme's accent solid (`$accentBackground`). */
327
+ solid: string | undefined;
328
+ dark: boolean;
329
+ surfaces: readonly (string | undefined)[];
330
+ ink: string;
331
+ }
332
+
333
+ /**
334
+ * LC-150: the active tab's ink, one pick for the MPO TabBar and the system
335
+ * tab bar. A hued theme keeps its identity hue. A theme with no identity hue
336
+ * but a hued accent solid takes that solid held to AA text contrast on the
337
+ * page. The house hue-less theme's solid is the neutral inverse, so the tab
338
+ * takes the primary ink, bold mono, never the grey ramp step.
339
+ */
340
+ export function resolveActiveTabInk({
341
+ hue,
342
+ solid,
343
+ dark,
344
+ surfaces,
345
+ ink,
346
+ }: ResolveActiveTabInkInput): string {
347
+ if (hue) return hue;
348
+ const solidHex = solid ? normalizeToHex(solid) : null;
349
+ if (solidHex && chromaOf(solidHex) >= ACTIVE_TAB_CHROMA_FLOOR) {
350
+ return holdHueToFloor(solidHex, surfaces, dark, aaTextContrastRatio);
351
+ }
352
+ return ink;
353
+ }
354
+
355
+ /** LC-150: the live theme's active-tab ink (see {@link resolveActiveTabInk}). */
356
+ export function useActiveTabInk(): string {
357
+ const dark = isDarkThemeName(useThemeName() as string | undefined);
358
+ const { hue, c1, c2, ink } = useIdentityHue();
359
+ const theme = useTamaguiTheme() as unknown as Record<string, { val?: unknown } | undefined>;
360
+ const solid = resolveTokenValue(theme, "accentBackground");
361
+ return useMemo(
362
+ () => resolveActiveTabInk({ hue, solid, dark, surfaces: [c1, c2], ink }),
363
+ [hue, solid, dark, c1, c2, ink],
364
+ );
365
+ }
@@ -656,45 +656,26 @@ export interface ResolveKnobsEnvironment {
656
656
  painted?: boolean;
657
657
  }
658
658
 
659
- export function resolveKnobs(
660
- knobs: Knobs,
661
- override?: KnobPropsOverride,
662
- scheme: ColorScheme = "light",
663
- environment?: ResolveKnobsEnvironment,
664
- ): ResolvedKnobs {
665
- const radiusToken = borderRadiusMap[knobs.borderRadius];
666
- const nestedRadiusToken = nestedRadiusMap[knobs.borderRadius];
667
- const sizeToken = normalizeSizeToken(environment?.sizeToken);
668
- const painted = environment?.painted ?? false;
669
- const nestedPx = nestedControlPx(sizeToken);
670
- const nestedHitSlop = pressTargetHitSlop(nestedPx);
671
- const touch = environment?.touch ?? (isTouchable || isWebTouchable);
672
- const sizeRecipe = sizeRecipeForToken(sizeToken, { touch });
673
- const menuRowRecipe = sizeRecipeForToken(sizeToken, { touch, family: "menuRow" });
674
- const tabRecipe = sizeRecipeForToken(sizeToken, { touch, family: "tab" });
675
- const scaleTokens = getActiveScaleTokens();
676
- const paddingToken = spacingRoles.panelPadding;
677
- const fontWeightValue = fontWeightMap[knobs.fontWeight];
678
- const bodyFontValue = bodyFontMap[knobs.bodyFont] ?? "$body";
679
- const motion = motionFor(knobs.animation);
680
-
681
- const containerRadiusValue = capContainerRadius(knobs.borderRadius);
682
-
683
- // Corner smoothing rides every radius-bearing fragment so consumers need
684
- // zero edits (KNOB-TOTALITY, LC-18). Identity guard (Axiom 3 NULL +
685
- // R-BINARY/R-PILL): `none` has no arc to smooth, and at `full` the
686
- // uncapped token turns control-tier parts into circles/capsules whose
687
- // shape is identity — squircle ends would distort them — so the
688
- // raw-radius fragments only smooth the arc classes (small/medium/large).
689
- // Capped container fragments stay plain arcs at every knob (the Axiom 1
690
- // cap = padding px, which superellipse corners under-fill, so the cap
691
- // remains a safe over-approximation) and smooth whenever a nonzero arc
692
- // exists. featureSurface smooths on the same rule: `none` has no arc.
659
+ // Corner smoothing rides every radius-bearing fragment so consumers need
660
+ // zero edits (KNOB-TOTALITY, LC-18). Identity guard (Axiom 3 NULL +
661
+ // R-BINARY/R-PILL): `none` has no arc to smooth, and at `full` the
662
+ // uncapped token turns control-tier parts into circles/capsules whose
663
+ // shape is identity — squircle ends would distort them — so the
664
+ // raw-radius fragments only smooth the arc classes (small/medium/large).
665
+ // Capped container fragments stay plain arcs at every knob (the Axiom 1
666
+ // cap = padding px, which superellipse corners under-fill, so the cap
667
+ // remains a safe over-approximation) and smooth whenever a nonzero arc
668
+ // exists. featureSurface smooths on the same rule: `none` has no arc.
669
+ function smoothingFor(knobs: Knobs) {
693
670
  const smoothing = cornerSmoothingStyle[knobs.cornerSmoothing ?? "round"];
694
- const scaleSmoothing =
695
- knobs.borderRadius === "none" || knobs.borderRadius === "full" ? undefined : smoothing;
696
- const containerSmoothing = knobs.borderRadius === "none" ? undefined : smoothing;
671
+ const arcless = knobs.borderRadius === "none";
672
+ return {
673
+ scaleSmoothing: arcless || knobs.borderRadius === "full" ? undefined : smoothing,
674
+ containerSmoothing: arcless ? undefined : smoothing,
675
+ };
676
+ }
697
677
 
678
+ function edgeRulesFor(knobs: Knobs) {
698
679
  const outlined = knobs.fillStyle === "outlined";
699
680
  // LC-86 OUTLINED-HAIRLINE: outlined implies a minimum border. none on an
700
681
  // outlined control still draws the enumerated `small` stop. Chromeless
@@ -703,30 +684,22 @@ export function resolveKnobs(
703
684
  const borderWidthValue = smallEdge ? borderWidthMap.small : borderWidthMap[knobs.borderWidth];
704
685
  const edge = (color: string, width: number) =>
705
686
  smallEdge && width >= borderWidthMap.medium ? fainterEdge(color) : color;
706
- const elevationToken = elevationMap[knobs.elevation];
707
- const overlayElevationToken = overlayElevationMap[knobs.elevation];
708
- const overlayPaintProps = elevationPaint(overlayElevationToken);
709
687
  const overlayEdgeWidth = Math.max(borderWidthValue, borderWidthMap.small);
710
688
  // LC-85's floor is the small stop, so the floored edge takes its colour too.
689
+ const flooredSmall = smallEdge || knobs.borderWidth === "none";
711
690
  const overlayEdge = (color: string) =>
712
- (smallEdge || knobs.borderWidth === "none") && overlayEdgeWidth >= borderWidthMap.medium
713
- ? fainterEdge(color)
714
- : color;
715
- const elevationChrome = elevationChromeFor(elevationToken);
716
- const textAccentColor = textAccentColorMap[knobs.textAccent] ?? "$color";
717
- // One input surface (DF-19 / Axiom 5 ONE SOURCE): Timeline's composer,
718
- // RichEditor and form fields agree on what an input surface is.
719
- // MPO-19 X6: `$background` not `$color2` so a surface sub-theme can move it.
720
- const inputBackground = outlined ? "transparent" : "$background";
691
+ flooredSmall && overlayEdgeWidth >= borderWidthMap.medium ? fainterEdge(color) : color;
692
+ return { outlined, smallEdge, borderWidthValue, edge, overlayEdgeWidth, overlayEdge };
693
+ }
721
694
 
695
+ const nonEmpty = <T extends object>(obj: T): T | undefined =>
696
+ Object.keys(obj).length > 0 ? obj : undefined;
697
+
698
+ function stateRecipesFor(knobs: Knobs) {
722
699
  const hover = resolveStateKnobs(knobs.hover);
723
700
  const press = resolveStateKnobs(knobs.press);
724
701
  const focus = resolveStateKnobs(knobs.focus);
725
702
  const focusVisible = resolveStateKnobs(knobs.focusVisible);
726
-
727
- const nonEmpty = <T extends object>(obj: T): T | undefined =>
728
- Object.keys(obj).length > 0 ? obj : undefined;
729
-
730
703
  // DG-STATE-01: hover/press always carry on-color state-layer fills.
731
704
  // DG-A11Y-01: focus-visible ring is always present and non-removable.
732
705
  const control: KnobRecipe<ControlStateProps> = {
@@ -747,6 +720,136 @@ export function resolveKnobs(
747
720
  focusKnobProps: nonEmpty(focus.elevation),
748
721
  focusVisibleKnobProps: nonEmpty(focusVisible.elevation),
749
722
  };
723
+ return { control, text, elevation };
724
+ }
725
+
726
+ function boldWeight(knobs: Knobs): { fontWeight?: "700" } {
727
+ return knobs.fontWeight === "bold" ? { fontWeight: "700" } : {};
728
+ }
729
+
730
+ /** LC-151 card edge width: none draws none, large its stop, else the small hairline. */
731
+ function cardEdgeWidth(borderWidth: Knobs["borderWidth"]): number {
732
+ if (borderWidth === "none") return 0;
733
+ if (borderWidth === "large") return borderWidthMap.large;
734
+ return borderWidthMap.small;
735
+ }
736
+
737
+ interface SurfaceFrame {
738
+ painted: boolean;
739
+ radius: string | number;
740
+ smoothing: { className: string } | undefined;
741
+ }
742
+
743
+ // LC-151: a top-level card is the grouped white step ($background inside
744
+ // the Card template) with a hairline edge and a hair of lift. Under a
745
+ // painted ancestor it is one fill step off its parent, edge and lift off,
746
+ // so a card on a card never stacks a second shadow (WP-c2).
747
+ function cardSurfaceFor(
748
+ knobs: Knobs,
749
+ scheme: ColorScheme,
750
+ frame: SurfaceFrame & { padding: string },
751
+ ) {
752
+ const { painted, radius, padding, smoothing } = frame;
753
+ if (painted) {
754
+ return { backgroundColor: paintedCardFill, borderRadius: radius, padding, ...smoothing };
755
+ }
756
+ return {
757
+ backgroundColor: "$background",
758
+ borderColor:
759
+ knobs.borderWidth === "large" ? "$borderColor" : edgeColorAt("$borderColor", "small"),
760
+ borderWidth: cardEdgeWidth(knobs.borderWidth),
761
+ borderRadius: radius,
762
+ padding,
763
+ ...cardLiftFor(cardElevationMap[knobs.elevation], scheme),
764
+ ...smoothing,
765
+ };
766
+ }
767
+
768
+ function elevatedSurfaceFor(
769
+ scheme: ColorScheme,
770
+ frame: Omit<SurfaceFrame, "radius"> & {
771
+ radius: string;
772
+ edge: string;
773
+ edgeWidth: number;
774
+ elevationToken: SizeKey | undefined;
775
+ },
776
+ ) {
777
+ const { painted, radius, smoothing, edge, edgeWidth, elevationToken } = frame;
778
+ if (painted) {
779
+ return {
780
+ backgroundColor: "$background",
781
+ borderColor: edge,
782
+ borderWidth: edgeWidth,
783
+ borderRadius: radius,
784
+ elevation: undefined,
785
+ ...smoothing,
786
+ };
787
+ }
788
+ if (scheme === "dark") {
789
+ // Dark draws no edge at all: on iOS a transparent border on a sheet
790
+ // mounted under a light OS painted the light $borderColor, and it lifts
791
+ // by its lighter fill, as the card lift does: a black shadow on a
792
+ // near-black page reads as a smudge (FZ-8116).
793
+ return {
794
+ backgroundColor: surface2.fill,
795
+ borderColor: "transparent",
796
+ borderWidth: 0,
797
+ borderRadius: radius,
798
+ elevation: undefined,
799
+ ...smoothing,
800
+ };
801
+ }
802
+ // Light: an overlay fills the page's own white, so it always keeps at
803
+ // least the hairline, even on a chromeless preset (FZ-8116).
804
+ return {
805
+ backgroundColor: "$background",
806
+ borderColor: edge,
807
+ borderWidth: edgeWidth,
808
+ borderRadius: radius,
809
+ elevation: platformElevation(elevationToken),
810
+ ...elevationPaint(elevationToken),
811
+ ...smoothing,
812
+ };
813
+ }
814
+
815
+ export function resolveKnobs(
816
+ knobs: Knobs,
817
+ override?: KnobPropsOverride,
818
+ scheme: ColorScheme = "light",
819
+ environment?: ResolveKnobsEnvironment,
820
+ ): ResolvedKnobs {
821
+ const radiusToken = borderRadiusMap[knobs.borderRadius];
822
+ const nestedRadiusToken = nestedRadiusMap[knobs.borderRadius];
823
+ const sizeToken = normalizeSizeToken(environment?.sizeToken);
824
+ const painted = environment?.painted ?? false;
825
+ const nestedPx = nestedControlPx(sizeToken);
826
+ const nestedHitSlop = pressTargetHitSlop(nestedPx);
827
+ const touch = environment?.touch ?? (isTouchable || isWebTouchable);
828
+ const sizeRecipe = sizeRecipeForToken(sizeToken, { touch });
829
+ const menuRowRecipe = sizeRecipeForToken(sizeToken, { touch, family: "menuRow" });
830
+ const tabRecipe = sizeRecipeForToken(sizeToken, { touch, family: "tab" });
831
+ const scaleTokens = getActiveScaleTokens();
832
+ const paddingToken = spacingRoles.panelPadding;
833
+ const fontWeightValue = fontWeightMap[knobs.fontWeight];
834
+ const bodyFontValue = bodyFontMap[knobs.bodyFont] ?? "$body";
835
+ const motion = motionFor(knobs.animation);
836
+
837
+ const containerRadiusValue = capContainerRadius(knobs.borderRadius);
838
+
839
+ const { scaleSmoothing, containerSmoothing } = smoothingFor(knobs);
840
+ const { outlined, smallEdge, borderWidthValue, edge, overlayEdgeWidth, overlayEdge } =
841
+ edgeRulesFor(knobs);
842
+ const elevationToken = elevationMap[knobs.elevation];
843
+ const overlayElevationToken = overlayElevationMap[knobs.elevation];
844
+ const elevationChrome = elevationChromeFor(elevationToken);
845
+ const textAccentColor = textAccentColorMap[knobs.textAccent] ?? "$color";
846
+ // One input surface (DF-19 / Axiom 5 ONE SOURCE): Timeline's composer,
847
+ // RichEditor and form fields agree on what an input surface is.
848
+ // MPO-19 X6: `$background` not `$color2` so a surface sub-theme can move it.
849
+ const inputBackground = outlined ? "transparent" : "$background";
850
+
851
+ const { control, text, elevation } = stateRecipesFor(knobs);
852
+ const bold = boldWeight(knobs);
750
853
 
751
854
  const nestedRadius = { borderRadius: nestedRadiusToken, ...containerSmoothing };
752
855
 
@@ -786,52 +889,20 @@ export function resolveKnobs(
786
889
  // the Card template) with a hairline edge and a hair of lift. Under a
787
890
  // painted ancestor it is one fill step off its parent, edge and lift off,
788
891
  // so a card on a card never stacks a second shadow (WP-c2).
789
- cardSurface: painted
790
- ? {
791
- backgroundColor: paintedCardFill,
792
- borderRadius: containerRadiusValue,
793
- padding: paddingToken,
794
- ...containerSmoothing,
795
- }
796
- : {
797
- backgroundColor: "$background",
798
- borderColor:
799
- knobs.borderWidth === "large" ? "$borderColor" : edgeColorAt("$borderColor", "small"),
800
- borderWidth:
801
- knobs.borderWidth === "none"
802
- ? 0
803
- : knobs.borderWidth === "large"
804
- ? borderWidthMap.large
805
- : borderWidthMap.small,
806
- borderRadius: containerRadiusValue,
807
- padding: paddingToken,
808
- ...cardLiftFor(cardElevationMap[knobs.elevation], scheme),
809
- ...containerSmoothing,
810
- },
811
- elevatedSurface: painted
812
- ? {
813
- backgroundColor: "$background",
814
- borderColor: overlayEdge("$borderColor"),
815
- borderWidth: overlayEdgeWidth,
816
- borderRadius: radiusToken,
817
- elevation: undefined,
818
- ...scaleSmoothing,
819
- }
820
- : {
821
- backgroundColor: scheme === "dark" ? surface2.fill : "$background",
822
- // Light: an overlay fills the page's own white, so it always keeps at
823
- // least the hairline, even on a chromeless preset (FZ-8116).
824
- borderColor: scheme === "dark" ? "transparent" : overlayEdge("$borderColor"),
825
- // Dark draws no edge at all: on iOS a transparent border on a sheet
826
- // mounted under a light OS painted the light $borderColor (FZ-8116).
827
- borderWidth: scheme === "dark" ? 0 : overlayEdgeWidth,
828
- borderRadius: radiusToken,
829
- elevation: scheme === "dark" ? undefined : platformElevation(overlayElevationToken),
830
- // Dark lifts an overlay by its lighter fill, as the card lift does: a
831
- // black shadow on a near-black page reads as a smudge (FZ-8116).
832
- ...(scheme === "dark" ? undefined : overlayPaintProps),
833
- ...scaleSmoothing,
834
- },
892
+ cardSurface: cardSurfaceFor(knobs, scheme, {
893
+ painted,
894
+ radius: containerRadiusValue,
895
+ padding: paddingToken,
896
+ smoothing: containerSmoothing,
897
+ }),
898
+ elevatedSurface: elevatedSurfaceFor(scheme, {
899
+ painted,
900
+ radius: radiusToken,
901
+ smoothing: scaleSmoothing,
902
+ edge: overlayEdge("$borderColor"),
903
+ edgeWidth: overlayEdgeWidth,
904
+ elevationToken: overlayElevationToken,
905
+ }),
835
906
  featureSurface: {
836
907
  backgroundColor: "$background",
837
908
  borderRadius: featureRadiusMap[knobs.borderRadius],
@@ -854,7 +925,7 @@ export function resolveKnobs(
854
925
  label: {
855
926
  fontSize: labelFontSizeFor(sizeToken),
856
927
  fontFamily: bodyFontValue,
857
- ...(knobs.fontWeight === "bold" ? { fontWeight: "700" } : {}),
928
+ ...bold,
858
929
  },
859
930
  nestedControl: {
860
931
  px: nestedPx,
@@ -896,7 +967,7 @@ export function resolveKnobs(
896
967
  },
897
968
  heading: {
898
969
  fontFamily: headingFontMap[knobs.headingFont],
899
- ...(knobs.fontWeight === "bold" ? { fontWeight: "700" } : {}),
970
+ ...bold,
900
971
  },
901
972
  pageTitle: resolvePageTitleScale(knobs.pageTitleScale ?? "moderate"),
902
973
  textRole: resolveTextRoles(sizeToken, knobs.fontWeight === "bold"),
@@ -0,0 +1,33 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import { getActiveScaleTokens, scaleSpaceFractionPx, setActiveScaleTokens } from "./activeScale";
3
+ import { generateScale } from "./generateScale";
4
+ import { defaultScaleInputs } from "./scaleInputs";
5
+
6
+ const original = getActiveScaleTokens();
7
+ const defaults = generateScale(defaultScaleInputs).tokens;
8
+ const dense = generateScale({ control: 32, type: 13 }).tokens;
9
+
10
+ afterEach(() => setActiveScaleTokens(original));
11
+
12
+ describe("scaleSpaceFractionPx (FZ-8018)", () => {
13
+ it("is plain rounding on the default scale", () => {
14
+ for (const key of ["$1.5", "$2.5", "$3.5", "$4.5"] as const) {
15
+ const px = defaults.space[key];
16
+ expect(scaleSpaceFractionPx(px, 0.25)).toBe(Math.round(px * 0.25));
17
+ }
18
+ });
19
+
20
+ it("paints an installed space token where the default quarter is one", () => {
21
+ const quarter = Math.round(defaults.space["$2.5"] * 0.25);
22
+ expect(new Set(Object.values(defaults.space)).has(quarter)).toBe(true);
23
+ setActiveScaleTokens(dense);
24
+ expect(getActiveScaleTokens()).toBe(dense);
25
+ const inset = scaleSpaceFractionPx(dense.space["$2.5"], 0.25);
26
+ expect(new Set(Object.values(dense.space)).has(inset)).toBe(true);
27
+ });
28
+
29
+ it("keeps plain rounding for a px that is no installed space value", () => {
30
+ setActiveScaleTokens(dense);
31
+ expect(scaleSpaceFractionPx(1001, 0.25)).toBe(250);
32
+ });
33
+ });
@@ -28,3 +28,22 @@ export function scaleRadiusPx(defaultPx: number): number {
28
28
  }
29
29
  return defaultPx;
30
30
  }
31
+
32
+ /**
33
+ * `fraction` of an installed `$space` value, as an inset on that scale. The
34
+ * default scale rounds the product; when that lands on a default `$space`
35
+ * token, every scale paints its own value at the same key, so a preset never
36
+ * draws a px between its tokens. A product that is no default token, or a
37
+ * `px` that is no installed `$space` value, keeps the plain rounding.
38
+ */
39
+ export function scaleSpaceFractionPx(px: number, fraction: number): number {
40
+ const rounded = Math.round(px * fraction);
41
+ const keys = (Object.keys(activeTokens.space) as (keyof ScaleTokens["space"])[]).filter(
42
+ (key) => key !== "$true",
43
+ );
44
+ const key = keys.find((k) => activeTokens.space[k] === px);
45
+ if (key === undefined) return rounded;
46
+ const onDefault = Math.round(defaultTokens.space[key] * fraction);
47
+ const target = keys.find((k) => defaultTokens.space[k] === onDefault);
48
+ return target === undefined ? rounded : activeTokens.space[target];
49
+ }
@@ -51,4 +51,9 @@ export type { PublishedScale, ScaleSource } from "./useActiveScale";
51
51
  export { ScaleStyles, scaleAttributeValue, scaleStyleSheet } from "./ScaleStyles";
52
52
  export type { ScaleStylesProps } from "./ScaleStyles";
53
53
  export { scaleAttributeFromCookie, scaleAttributeScript } from "./scaleAttribute";
54
- export { getActiveScaleTokens, scaleRadiusPx, setActiveScaleTokens } from "./activeScale";
54
+ export {
55
+ getActiveScaleTokens,
56
+ scaleRadiusPx,
57
+ scaleSpaceFractionPx,
58
+ setActiveScaleTokens,
59
+ } from "./activeScale";