@multiplatform.one/theme 7.83.1 → 7.83.2

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 (810) 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 +82 -0
  23. package/dist/cjs/expo.native.js +87 -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 +69 -0
  33. package/dist/cjs/fonts/createFontLoader.native.js.map +1 -0
  34. package/dist/cjs/fonts/index.cjs +21 -0
  35. package/dist/cjs/fonts/index.native.js +24 -0
  36. package/dist/cjs/fonts/index.native.js.map +1 -0
  37. package/dist/cjs/fonts/types.cjs +18 -0
  38. package/dist/cjs/fonts/types.native.js +21 -0
  39. package/dist/cjs/fonts/types.native.js.map +1 -0
  40. package/dist/cjs/index.cjs +39 -0
  41. package/dist/cjs/index.native.js +42 -0
  42. package/dist/cjs/index.native.js.map +1 -0
  43. package/dist/cjs/keyboardFocusRing.cjs +111 -0
  44. package/dist/cjs/keyboardFocusRing.native.js +116 -0
  45. package/dist/cjs/keyboardFocusRing.native.js.map +1 -0
  46. package/dist/cjs/menuRow.cjs +80 -0
  47. package/dist/cjs/menuRow.native.js +86 -0
  48. package/dist/cjs/menuRow.native.js.map +1 -0
  49. package/dist/cjs/numbers.cjs +161 -0
  50. package/dist/cjs/numbers.native.js +173 -0
  51. package/dist/cjs/numbers.native.js.map +1 -0
  52. package/dist/cjs/theme/FontKnobStyles.cjs +161 -0
  53. package/dist/cjs/theme/FontKnobStyles.native.js +41 -0
  54. package/dist/cjs/theme/FontKnobStyles.native.js.map +1 -0
  55. package/dist/cjs/theme/Heading.cjs +174 -0
  56. package/dist/cjs/theme/Heading.native.js +186 -0
  57. package/dist/cjs/theme/Heading.native.js.map +1 -0
  58. package/dist/cjs/theme/IconSlot.cjs +67 -0
  59. package/dist/cjs/theme/IconSlot.native.js +78 -0
  60. package/dist/cjs/theme/IconSlot.native.js.map +1 -0
  61. package/dist/cjs/theme/Intent.cjs +44 -0
  62. package/dist/cjs/theme/Intent.native.js +48 -0
  63. package/dist/cjs/theme/Intent.native.js.map +1 -0
  64. package/dist/cjs/theme/Preset.cjs +150 -0
  65. package/dist/cjs/theme/Preset.native.js +156 -0
  66. package/dist/cjs/theme/Preset.native.js.map +1 -0
  67. package/dist/cjs/theme/PresetContext.cjs +38 -0
  68. package/dist/cjs/theme/PresetContext.native.js +42 -0
  69. package/dist/cjs/theme/PresetContext.native.js.map +1 -0
  70. package/dist/cjs/theme/Surface.cjs +115 -0
  71. package/dist/cjs/theme/Surface.native.js +126 -0
  72. package/dist/cjs/theme/Surface.native.js.map +1 -0
  73. package/dist/cjs/theme/Text.cjs +147 -0
  74. package/dist/cjs/theme/Text.native.js +155 -0
  75. package/dist/cjs/theme/Text.native.js.map +1 -0
  76. package/dist/cjs/theme/Tint.cjs +55 -0
  77. package/dist/cjs/theme/Tint.native.js +59 -0
  78. package/dist/cjs/theme/Tint.native.js.map +1 -0
  79. package/dist/cjs/theme/activateThemeConfig.cjs +42 -0
  80. package/dist/cjs/theme/activateThemeConfig.native.js +45 -0
  81. package/dist/cjs/theme/activateThemeConfig.native.js.map +1 -0
  82. package/dist/cjs/theme/animations/css.cjs +36 -0
  83. package/dist/cjs/theme/animations/css.native.js +39 -0
  84. package/dist/cjs/theme/animations/css.native.js.map +1 -0
  85. package/dist/cjs/theme/animations/index.cjs +20 -0
  86. package/dist/cjs/theme/animations/index.native.js +23 -0
  87. package/dist/cjs/theme/animations/index.native.js.map +1 -0
  88. package/dist/cjs/theme/animations/reactNative.cjs +158 -0
  89. package/dist/cjs/theme/animations/reactNative.native.js +161 -0
  90. package/dist/cjs/theme/animations/reactNative.native.js.map +1 -0
  91. package/dist/cjs/theme/chartPalette.cjs +229 -0
  92. package/dist/cjs/theme/chartPalette.native.js +297 -0
  93. package/dist/cjs/theme/chartPalette.native.js.map +1 -0
  94. package/dist/cjs/theme/colorRules.cjs +300 -0
  95. package/dist/cjs/theme/colorRules.native.js +330 -0
  96. package/dist/cjs/theme/colorRules.native.js.map +1 -0
  97. package/dist/cjs/theme/controlTiers.cjs +67 -0
  98. package/dist/cjs/theme/controlTiers.native.js +72 -0
  99. package/dist/cjs/theme/controlTiers.native.js.map +1 -0
  100. package/dist/cjs/theme/cookies.cjs +183 -0
  101. package/dist/cjs/theme/cookies.native.js +309 -0
  102. package/dist/cjs/theme/cookies.native.js.map +1 -0
  103. package/dist/cjs/theme/cornerSmoothing.cjs +111 -0
  104. package/dist/cjs/theme/cornerSmoothing.native.js +71 -0
  105. package/dist/cjs/theme/cornerSmoothing.native.js.map +1 -0
  106. package/dist/cjs/theme/createDefaultThemeConfig.cjs +130 -0
  107. package/dist/cjs/theme/createDefaultThemeConfig.native.js +176 -0
  108. package/dist/cjs/theme/createDefaultThemeConfig.native.js.map +1 -0
  109. package/dist/cjs/theme/createThemes.cjs +737 -0
  110. package/dist/cjs/theme/createThemes.native.js +1183 -0
  111. package/dist/cjs/theme/createThemes.native.js.map +1 -0
  112. package/dist/cjs/theme/dedupeInherited.cjs +83 -0
  113. package/dist/cjs/theme/dedupeInherited.native.js +194 -0
  114. package/dist/cjs/theme/dedupeInherited.native.js.map +1 -0
  115. package/dist/cjs/theme/defaults/accent.cjs +32 -0
  116. package/dist/cjs/theme/defaults/accent.native.js +35 -0
  117. package/dist/cjs/theme/defaults/accent.native.js.map +1 -0
  118. package/dist/cjs/theme/defaults/base.cjs +48 -0
  119. package/dist/cjs/theme/defaults/base.native.js +51 -0
  120. package/dist/cjs/theme/defaults/base.native.js.map +1 -0
  121. package/dist/cjs/theme/defaults/builderOptions.cjs +192 -0
  122. package/dist/cjs/theme/defaults/builderOptions.native.js +263 -0
  123. package/dist/cjs/theme/defaults/builderOptions.native.js.map +1 -0
  124. package/dist/cjs/theme/defaults/categoryFonts.cjs +50 -0
  125. package/dist/cjs/theme/defaults/categoryFonts.native.js +53 -0
  126. package/dist/cjs/theme/defaults/categoryFonts.native.js.map +1 -0
  127. package/dist/cjs/theme/defaults/fonts.cjs +301 -0
  128. package/dist/cjs/theme/defaults/fonts.native.js +390 -0
  129. package/dist/cjs/theme/defaults/fonts.native.js.map +1 -0
  130. package/dist/cjs/theme/defaults/house.cjs +39 -0
  131. package/dist/cjs/theme/defaults/house.native.js +46 -0
  132. package/dist/cjs/theme/defaults/house.native.js.map +1 -0
  133. package/dist/cjs/theme/defaults/index.cjs +25 -0
  134. package/dist/cjs/theme/defaults/index.native.js +28 -0
  135. package/dist/cjs/theme/defaults/index.native.js.map +1 -0
  136. package/dist/cjs/theme/devtools/ColorLineVisualizer.cjs +243 -0
  137. package/dist/cjs/theme/devtools/ColorLineVisualizer.native.js +269 -0
  138. package/dist/cjs/theme/devtools/ColorLineVisualizer.native.js.map +1 -0
  139. package/dist/cjs/theme/devtools/ThemeDevtoolsPanel.cjs +1350 -0
  140. package/dist/cjs/theme/devtools/ThemeDevtoolsPanel.native.js +1814 -0
  141. package/dist/cjs/theme/devtools/ThemeDevtoolsPanel.native.js.map +1 -0
  142. package/dist/cjs/theme/devtools/animationOptions.cjs +36 -0
  143. package/dist/cjs/theme/devtools/animationOptions.native.js +46 -0
  144. package/dist/cjs/theme/devtools/animationOptions.native.js.map +1 -0
  145. package/dist/cjs/theme/devtools/buildSnapshot.cjs +92 -0
  146. package/dist/cjs/theme/devtools/buildSnapshot.native.js +174 -0
  147. package/dist/cjs/theme/devtools/buildSnapshot.native.js.map +1 -0
  148. package/dist/cjs/theme/devtools/knobIcons.cjs +498 -0
  149. package/dist/cjs/theme/devtools/knobIcons.native.js +520 -0
  150. package/dist/cjs/theme/devtools/knobIcons.native.js.map +1 -0
  151. package/dist/cjs/theme/devtools/vizConstants.cjs +54 -0
  152. package/dist/cjs/theme/devtools/vizConstants.native.js +57 -0
  153. package/dist/cjs/theme/devtools/vizConstants.native.js.map +1 -0
  154. package/dist/cjs/theme/dynamicType.cjs +52 -0
  155. package/dist/cjs/theme/dynamicType.native.js +55 -0
  156. package/dist/cjs/theme/dynamicType.native.js.map +1 -0
  157. package/dist/cjs/theme/fieldFocus.cjs +56 -0
  158. package/dist/cjs/theme/fieldFocus.native.js +62 -0
  159. package/dist/cjs/theme/fieldFocus.native.js.map +1 -0
  160. package/dist/cjs/theme/fillContrast.cjs +130 -0
  161. package/dist/cjs/theme/fillContrast.native.js +163 -0
  162. package/dist/cjs/theme/fillContrast.native.js.map +1 -0
  163. package/dist/cjs/theme/focusState.cjs +120 -0
  164. package/dist/cjs/theme/focusState.native.js +123 -0
  165. package/dist/cjs/theme/focusState.native.js.map +1 -0
  166. package/dist/cjs/theme/fontCategoryMetrics.cjs +91 -0
  167. package/dist/cjs/theme/fontCategoryMetrics.native.js +94 -0
  168. package/dist/cjs/theme/fontCategoryMetrics.native.js.map +1 -0
  169. package/dist/cjs/theme/fontCategoryStacks.cjs +40 -0
  170. package/dist/cjs/theme/fontCategoryStacks.native.js +43 -0
  171. package/dist/cjs/theme/fontCategoryStacks.native.js.map +1 -0
  172. package/dist/cjs/theme/glyphPaint.cjs +55 -0
  173. package/dist/cjs/theme/glyphPaint.native.js +81 -0
  174. package/dist/cjs/theme/glyphPaint.native.js.map +1 -0
  175. package/dist/cjs/theme/glyphTint.cjs +113 -0
  176. package/dist/cjs/theme/glyphTint.native.js +125 -0
  177. package/dist/cjs/theme/glyphTint.native.js.map +1 -0
  178. package/dist/cjs/theme/groupGeometry.cjs +67 -0
  179. package/dist/cjs/theme/groupGeometry.native.js +72 -0
  180. package/dist/cjs/theme/groupGeometry.native.js.map +1 -0
  181. package/dist/cjs/theme/hairline.cjs +102 -0
  182. package/dist/cjs/theme/hairline.native.js +73 -0
  183. package/dist/cjs/theme/hairline.native.js.map +1 -0
  184. package/dist/cjs/theme/index.cjs +95 -0
  185. package/dist/cjs/theme/index.native.js +98 -0
  186. package/dist/cjs/theme/index.native.js.map +1 -0
  187. package/dist/cjs/theme/intents.cjs +62 -0
  188. package/dist/cjs/theme/intents.native.js +65 -0
  189. package/dist/cjs/theme/intents.native.js.map +1 -0
  190. package/dist/cjs/theme/knobs.cjs +172 -0
  191. package/dist/cjs/theme/knobs.native.js +175 -0
  192. package/dist/cjs/theme/knobs.native.js.map +1 -0
  193. package/dist/cjs/theme/layoutTokens.cjs +172 -0
  194. package/dist/cjs/theme/layoutTokens.native.js +222 -0
  195. package/dist/cjs/theme/layoutTokens.native.js.map +1 -0
  196. package/dist/cjs/theme/listRows.cjs +44 -0
  197. package/dist/cjs/theme/listRows.native.js +49 -0
  198. package/dist/cjs/theme/listRows.native.js.map +1 -0
  199. package/dist/cjs/theme/mergedTokens.cjs +39 -0
  200. package/dist/cjs/theme/mergedTokens.native.js +61 -0
  201. package/dist/cjs/theme/mergedTokens.native.js.map +1 -0
  202. package/dist/cjs/theme/motion.cjs +72 -0
  203. package/dist/cjs/theme/motion.native.js +82 -0
  204. package/dist/cjs/theme/motion.native.js.map +1 -0
  205. package/dist/cjs/theme/motionStops.cjs +28 -0
  206. package/dist/cjs/theme/motionStops.native.js +31 -0
  207. package/dist/cjs/theme/motionStops.native.js.map +1 -0
  208. package/dist/cjs/theme/motionTiming.cjs +79 -0
  209. package/dist/cjs/theme/motionTiming.native.js +85 -0
  210. package/dist/cjs/theme/motionTiming.native.js.map +1 -0
  211. package/dist/cjs/theme/nativeFontFamily.cjs +30 -0
  212. package/dist/cjs/theme/nativeFontFamily.native.js +37 -0
  213. package/dist/cjs/theme/nativeFontFamily.native.js.map +1 -0
  214. package/dist/cjs/theme/nativeMonoFamily.cjs +44 -0
  215. package/dist/cjs/theme/nativeMonoFamily.native.js +47 -0
  216. package/dist/cjs/theme/nativeMonoFamily.native.js.map +1 -0
  217. package/dist/cjs/theme/overlaySurfaces.cjs +327 -0
  218. package/dist/cjs/theme/overlaySurfaces.native.js +351 -0
  219. package/dist/cjs/theme/overlaySurfaces.native.js.map +1 -0
  220. package/dist/cjs/theme/pageGutter.cjs +85 -0
  221. package/dist/cjs/theme/pageGutter.native.js +92 -0
  222. package/dist/cjs/theme/pageGutter.native.js.map +1 -0
  223. package/dist/cjs/theme/preset.types.cjs +18 -0
  224. package/dist/cjs/theme/preset.types.native.js +21 -0
  225. package/dist/cjs/theme/preset.types.native.js.map +1 -0
  226. package/dist/cjs/theme/presetPreview.cjs +42 -0
  227. package/dist/cjs/theme/presetPreview.native.js +46 -0
  228. package/dist/cjs/theme/presetPreview.native.js.map +1 -0
  229. package/dist/cjs/theme/presetStore.cjs +288 -0
  230. package/dist/cjs/theme/presetStore.native.js +344 -0
  231. package/dist/cjs/theme/presetStore.native.js.map +1 -0
  232. package/dist/cjs/theme/presetUserSync.cjs +70 -0
  233. package/dist/cjs/theme/presetUserSync.native.js +75 -0
  234. package/dist/cjs/theme/presetUserSync.native.js.map +1 -0
  235. package/dist/cjs/theme/presets.cjs +128 -0
  236. package/dist/cjs/theme/presets.native.js +131 -0
  237. package/dist/cjs/theme/presets.native.js.map +1 -0
  238. package/dist/cjs/theme/radiusClass.cjs +128 -0
  239. package/dist/cjs/theme/radiusClass.native.js +137 -0
  240. package/dist/cjs/theme/radiusClass.native.js.map +1 -0
  241. package/dist/cjs/theme/radiusClassTable.generated.cjs +164 -0
  242. package/dist/cjs/theme/radiusClassTable.generated.native.js +167 -0
  243. package/dist/cjs/theme/radiusClassTable.generated.native.js.map +1 -0
  244. package/dist/cjs/theme/ramps.cjs +75 -0
  245. package/dist/cjs/theme/ramps.native.js +79 -0
  246. package/dist/cjs/theme/ramps.native.js.map +1 -0
  247. package/dist/cjs/theme/readableColor.cjs +248 -0
  248. package/dist/cjs/theme/readableColor.native.js +354 -0
  249. package/dist/cjs/theme/readableColor.native.js.map +1 -0
  250. package/dist/cjs/theme/recipeInputs.cjs +352 -0
  251. package/dist/cjs/theme/recipeInputs.native.js +470 -0
  252. package/dist/cjs/theme/recipeInputs.native.js.map +1 -0
  253. package/dist/cjs/theme/recipes.cjs +18 -0
  254. package/dist/cjs/theme/recipes.native.js +21 -0
  255. package/dist/cjs/theme/recipes.native.js.map +1 -0
  256. package/dist/cjs/theme/resolveKnobs.cjs +778 -0
  257. package/dist/cjs/theme/resolveKnobs.native.js +795 -0
  258. package/dist/cjs/theme/resolveKnobs.native.js.map +1 -0
  259. package/dist/cjs/theme/scale/ScaleStyles.cjs +57 -0
  260. package/dist/cjs/theme/scale/ScaleStyles.native.js +41 -0
  261. package/dist/cjs/theme/scale/ScaleStyles.native.js.map +1 -0
  262. package/dist/cjs/theme/scale/activeScale.cjs +56 -0
  263. package/dist/cjs/theme/scale/activeScale.native.js +84 -0
  264. package/dist/cjs/theme/scale/activeScale.native.js.map +1 -0
  265. package/dist/cjs/theme/scale/deriveRecipeInputs.cjs +111 -0
  266. package/dist/cjs/theme/scale/deriveRecipeInputs.native.js +154 -0
  267. package/dist/cjs/theme/scale/deriveRecipeInputs.native.js.map +1 -0
  268. package/dist/cjs/theme/scale/generateScale.cjs +114 -0
  269. package/dist/cjs/theme/scale/generateScale.native.js +200 -0
  270. package/dist/cjs/theme/scale/generateScale.native.js.map +1 -0
  271. package/dist/cjs/theme/scale/index.cjs +78 -0
  272. package/dist/cjs/theme/scale/index.native.js +81 -0
  273. package/dist/cjs/theme/scale/index.native.js.map +1 -0
  274. package/dist/cjs/theme/scale/installScaleConfig.cjs +31 -0
  275. package/dist/cjs/theme/scale/installScaleConfig.native.js +65 -0
  276. package/dist/cjs/theme/scale/installScaleConfig.native.js.map +1 -0
  277. package/dist/cjs/theme/scale/scaleAttribute.cjs +39 -0
  278. package/dist/cjs/theme/scale/scaleAttribute.native.js +42 -0
  279. package/dist/cjs/theme/scale/scaleAttribute.native.js.map +1 -0
  280. package/dist/cjs/theme/scale/scaleCss.cjs +89 -0
  281. package/dist/cjs/theme/scale/scaleCss.native.js +201 -0
  282. package/dist/cjs/theme/scale/scaleCss.native.js.map +1 -0
  283. package/dist/cjs/theme/scale/scaleFonts.cjs +86 -0
  284. package/dist/cjs/theme/scale/scaleFonts.native.js +155 -0
  285. package/dist/cjs/theme/scale/scaleFonts.native.js.map +1 -0
  286. package/dist/cjs/theme/scale/scaleInputs.cjs +232 -0
  287. package/dist/cjs/theme/scale/scaleInputs.native.js +237 -0
  288. package/dist/cjs/theme/scale/scaleInputs.native.js.map +1 -0
  289. package/dist/cjs/theme/scale/themeScales.cjs +136 -0
  290. package/dist/cjs/theme/scale/themeScales.native.js +185 -0
  291. package/dist/cjs/theme/scale/themeScales.native.js.map +1 -0
  292. package/dist/cjs/theme/scale/useActiveScale.cjs +78 -0
  293. package/dist/cjs/theme/scale/useActiveScale.native.js +87 -0
  294. package/dist/cjs/theme/scale/useActiveScale.native.js.map +1 -0
  295. package/dist/cjs/theme/schemeStore.cjs +87 -0
  296. package/dist/cjs/theme/schemeStore.native.js +104 -0
  297. package/dist/cjs/theme/schemeStore.native.js.map +1 -0
  298. package/dist/cjs/theme/shared.cjs +125 -0
  299. package/dist/cjs/theme/shared.native.js +168 -0
  300. package/dist/cjs/theme/shared.native.js.map +1 -0
  301. package/dist/cjs/theme/sizeRecipes.cjs +176 -0
  302. package/dist/cjs/theme/sizeRecipes.native.js +251 -0
  303. package/dist/cjs/theme/sizeRecipes.native.js.map +1 -0
  304. package/dist/cjs/theme/subsetThemes.cjs +46 -0
  305. package/dist/cjs/theme/subsetThemes.native.js +76 -0
  306. package/dist/cjs/theme/subsetThemes.native.js.map +1 -0
  307. package/dist/cjs/theme/theme.cjs +189 -0
  308. package/dist/cjs/theme/theme.native.js +115 -0
  309. package/dist/cjs/theme/theme.native.js.map +1 -0
  310. package/dist/cjs/theme/themeValue.cjs +51 -0
  311. package/dist/cjs/theme/themeValue.native.js +73 -0
  312. package/dist/cjs/theme/themeValue.native.js.map +1 -0
  313. package/dist/cjs/theme/tileSizes.cjs +202 -0
  314. package/dist/cjs/theme/tileSizes.native.js +230 -0
  315. package/dist/cjs/theme/tileSizes.native.js.map +1 -0
  316. package/dist/cjs/theme/touchManipulation.cjs +33 -0
  317. package/dist/cjs/theme/touchManipulation.native.js +36 -0
  318. package/dist/cjs/theme/touchManipulation.native.js.map +1 -0
  319. package/dist/cjs/theme/transitionProps.cjs +50 -0
  320. package/dist/cjs/theme/transitionProps.native.js +81 -0
  321. package/dist/cjs/theme/transitionProps.native.js.map +1 -0
  322. package/dist/cjs/theme/useColorScale.cjs +47 -0
  323. package/dist/cjs/theme/useColorScale.native.js +33 -0
  324. package/dist/cjs/theme/useColorScale.native.js.map +1 -0
  325. package/dist/cjs/theme/usePresetSwitch.cjs +70 -0
  326. package/dist/cjs/theme/usePresetSwitch.native.js +50 -0
  327. package/dist/cjs/theme/usePresetSwitch.native.js.map +1 -0
  328. package/dist/cjs/theme/useResolvedKnobs.cjs +140 -0
  329. package/dist/cjs/theme/useResolvedKnobs.native.js +177 -0
  330. package/dist/cjs/theme/useResolvedKnobs.native.js.map +1 -0
  331. package/dist/cjs/theme/useSchemePreference.cjs +49 -0
  332. package/dist/cjs/theme/useSchemePreference.native.js +80 -0
  333. package/dist/cjs/theme/useSchemePreference.native.js.map +1 -0
  334. package/dist/cjs/theme/useTheme.cjs +152 -0
  335. package/dist/cjs/theme/useTheme.native.js +94 -0
  336. package/dist/cjs/theme/useTheme.native.js.map +1 -0
  337. package/dist/cjs/theme/useTouchSurface.cjs +33 -0
  338. package/dist/cjs/theme/useTouchSurface.native.js +36 -0
  339. package/dist/cjs/theme/useTouchSurface.native.js.map +1 -0
  340. package/dist/cjs/theme/v3TokenRoles.cjs +64 -0
  341. package/dist/cjs/theme/v3TokenRoles.native.js +67 -0
  342. package/dist/cjs/theme/v3TokenRoles.native.js.map +1 -0
  343. package/dist/esm/audit/constraintAudit.mjs +540 -0
  344. package/dist/esm/audit/constraintAudit.mjs.map +1 -0
  345. package/dist/esm/audit/constraintAudit.native.js +918 -0
  346. package/dist/esm/audit/constraintAudit.native.js.map +1 -0
  347. package/dist/esm/audit/designTokens.mjs +28 -0
  348. package/dist/esm/audit/designTokens.mjs.map +1 -0
  349. package/dist/esm/audit/designTokens.native.js +52 -0
  350. package/dist/esm/audit/designTokens.native.js.map +1 -0
  351. package/dist/esm/audit/diffReport.mjs +229 -0
  352. package/dist/esm/audit/diffReport.mjs.map +1 -0
  353. package/dist/esm/audit/diffReport.native.js +490 -0
  354. package/dist/esm/audit/diffReport.native.js.map +1 -0
  355. package/dist/esm/audit/index.mjs +5 -0
  356. package/dist/esm/audit/index.mjs.map +1 -0
  357. package/dist/esm/audit/index.native.js +5 -0
  358. package/dist/esm/audit/index.native.js.map +1 -0
  359. package/dist/esm/audit/themeMatrix.mjs +890 -0
  360. package/dist/esm/audit/themeMatrix.mjs.map +1 -0
  361. package/dist/esm/audit/themeMatrix.native.js +1515 -0
  362. package/dist/esm/audit/themeMatrix.native.js.map +1 -0
  363. package/dist/esm/dates.mjs +224 -0
  364. package/dist/esm/dates.mjs.map +1 -0
  365. package/dist/esm/dates.native.js +249 -0
  366. package/dist/esm/dates.native.js.map +1 -0
  367. package/dist/esm/devWarn.mjs +123 -0
  368. package/dist/esm/devWarn.mjs.map +1 -0
  369. package/dist/esm/devWarn.native.js +148 -0
  370. package/dist/esm/devWarn.native.js.map +1 -0
  371. package/dist/esm/expo.mjs +53 -0
  372. package/dist/esm/expo.mjs.map +1 -0
  373. package/dist/esm/expo.native.js +55 -0
  374. package/dist/esm/expo.native.js.map +1 -0
  375. package/dist/esm/figma/figmaTokens.mjs +322 -0
  376. package/dist/esm/figma/figmaTokens.mjs.map +1 -0
  377. package/dist/esm/figma/figmaTokens.native.js +606 -0
  378. package/dist/esm/figma/figmaTokens.native.js.map +1 -0
  379. package/dist/esm/font.mjs +40 -0
  380. package/dist/esm/font.mjs.map +1 -0
  381. package/dist/esm/font.native.js +46 -0
  382. package/dist/esm/font.native.js.map +1 -0
  383. package/dist/esm/fonts/createFontLoader.mjs +7 -0
  384. package/dist/esm/fonts/createFontLoader.mjs.map +1 -0
  385. package/dist/esm/fonts/createFontLoader.native.js +41 -0
  386. package/dist/esm/fonts/createFontLoader.native.js.map +1 -0
  387. package/dist/esm/fonts/index.mjs +3 -0
  388. package/dist/esm/fonts/index.mjs.map +1 -0
  389. package/dist/esm/fonts/index.native.js +3 -0
  390. package/dist/esm/fonts/index.native.js.map +1 -0
  391. package/dist/esm/fonts/types.mjs +2 -0
  392. package/dist/esm/fonts/types.mjs.map +1 -0
  393. package/dist/esm/fonts/types.native.js +2 -0
  394. package/dist/esm/fonts/types.native.js.map +1 -0
  395. package/dist/esm/index.mjs +11 -0
  396. package/dist/esm/index.mjs.map +1 -0
  397. package/dist/esm/index.native.js +11 -0
  398. package/dist/esm/index.native.js.map +1 -0
  399. package/dist/esm/keyboardFocusRing.mjs +81 -0
  400. package/dist/esm/keyboardFocusRing.mjs.map +1 -0
  401. package/dist/esm/keyboardFocusRing.native.js +83 -0
  402. package/dist/esm/keyboardFocusRing.native.js.map +1 -0
  403. package/dist/esm/menuRow.mjs +49 -0
  404. package/dist/esm/menuRow.mjs.map +1 -0
  405. package/dist/esm/menuRow.native.js +52 -0
  406. package/dist/esm/menuRow.native.js.map +1 -0
  407. package/dist/esm/numbers.mjs +132 -0
  408. package/dist/esm/numbers.mjs.map +1 -0
  409. package/dist/esm/numbers.native.js +141 -0
  410. package/dist/esm/numbers.native.js.map +1 -0
  411. package/dist/esm/theme/FontKnobStyles.mjs +131 -0
  412. package/dist/esm/theme/FontKnobStyles.mjs.map +1 -0
  413. package/dist/esm/theme/FontKnobStyles.native.js +11 -0
  414. package/dist/esm/theme/FontKnobStyles.native.js.map +1 -0
  415. package/dist/esm/theme/Heading.mjs +143 -0
  416. package/dist/esm/theme/Heading.mjs.map +1 -0
  417. package/dist/esm/theme/Heading.native.js +152 -0
  418. package/dist/esm/theme/Heading.native.js.map +1 -0
  419. package/dist/esm/theme/IconSlot.mjs +42 -0
  420. package/dist/esm/theme/IconSlot.mjs.map +1 -0
  421. package/dist/esm/theme/IconSlot.native.js +50 -0
  422. package/dist/esm/theme/IconSlot.native.js.map +1 -0
  423. package/dist/esm/theme/Intent.mjs +19 -0
  424. package/dist/esm/theme/Intent.mjs.map +1 -0
  425. package/dist/esm/theme/Intent.native.js +20 -0
  426. package/dist/esm/theme/Intent.native.js.map +1 -0
  427. package/dist/esm/theme/Preset.mjs +124 -0
  428. package/dist/esm/theme/Preset.mjs.map +1 -0
  429. package/dist/esm/theme/Preset.native.js +127 -0
  430. package/dist/esm/theme/Preset.native.js.map +1 -0
  431. package/dist/esm/theme/PresetContext.mjs +11 -0
  432. package/dist/esm/theme/PresetContext.mjs.map +1 -0
  433. package/dist/esm/theme/PresetContext.native.js +12 -0
  434. package/dist/esm/theme/PresetContext.native.js.map +1 -0
  435. package/dist/esm/theme/Surface.mjs +80 -0
  436. package/dist/esm/theme/Surface.mjs.map +1 -0
  437. package/dist/esm/theme/Surface.native.js +88 -0
  438. package/dist/esm/theme/Surface.native.js.map +1 -0
  439. package/dist/esm/theme/Text.mjs +119 -0
  440. package/dist/esm/theme/Text.mjs.map +1 -0
  441. package/dist/esm/theme/Text.native.js +124 -0
  442. package/dist/esm/theme/Text.native.js.map +1 -0
  443. package/dist/esm/theme/Tint.mjs +29 -0
  444. package/dist/esm/theme/Tint.mjs.map +1 -0
  445. package/dist/esm/theme/Tint.native.js +30 -0
  446. package/dist/esm/theme/Tint.native.js.map +1 -0
  447. package/dist/esm/theme/activateThemeConfig.mjs +17 -0
  448. package/dist/esm/theme/activateThemeConfig.mjs.map +1 -0
  449. package/dist/esm/theme/activateThemeConfig.native.js +17 -0
  450. package/dist/esm/theme/activateThemeConfig.native.js.map +1 -0
  451. package/dist/esm/theme/animations/css.mjs +7 -0
  452. package/dist/esm/theme/animations/css.mjs.map +1 -0
  453. package/dist/esm/theme/animations/css.native.js +7 -0
  454. package/dist/esm/theme/animations/css.native.js.map +1 -0
  455. package/dist/esm/theme/animations/index.mjs +2 -0
  456. package/dist/esm/theme/animations/index.mjs.map +1 -0
  457. package/dist/esm/theme/animations/index.native.js +2 -0
  458. package/dist/esm/theme/animations/index.native.js.map +1 -0
  459. package/dist/esm/theme/animations/reactNative.mjs +131 -0
  460. package/dist/esm/theme/animations/reactNative.mjs.map +1 -0
  461. package/dist/esm/theme/animations/reactNative.native.js +131 -0
  462. package/dist/esm/theme/animations/reactNative.native.js.map +1 -0
  463. package/dist/esm/theme/chartPalette.mjs +191 -0
  464. package/dist/esm/theme/chartPalette.mjs.map +1 -0
  465. package/dist/esm/theme/chartPalette.native.js +256 -0
  466. package/dist/esm/theme/chartPalette.native.js.map +1 -0
  467. package/dist/esm/theme/colorRules.mjs +251 -0
  468. package/dist/esm/theme/colorRules.mjs.map +1 -0
  469. package/dist/esm/theme/colorRules.native.js +278 -0
  470. package/dist/esm/theme/colorRules.native.js.map +1 -0
  471. package/dist/esm/theme/controlTiers.mjs +39 -0
  472. package/dist/esm/theme/controlTiers.mjs.map +1 -0
  473. package/dist/esm/theme/controlTiers.native.js +41 -0
  474. package/dist/esm/theme/controlTiers.native.js.map +1 -0
  475. package/dist/esm/theme/cookies.mjs +145 -0
  476. package/dist/esm/theme/cookies.mjs.map +1 -0
  477. package/dist/esm/theme/cookies.native.js +268 -0
  478. package/dist/esm/theme/cookies.native.js.map +1 -0
  479. package/dist/esm/theme/cornerSmoothing.mjs +71 -0
  480. package/dist/esm/theme/cornerSmoothing.mjs.map +1 -0
  481. package/dist/esm/theme/cornerSmoothing.native.js +28 -0
  482. package/dist/esm/theme/cornerSmoothing.native.js.map +1 -0
  483. package/dist/esm/theme/createDefaultThemeConfig.mjs +102 -0
  484. package/dist/esm/theme/createDefaultThemeConfig.mjs.map +1 -0
  485. package/dist/esm/theme/createDefaultThemeConfig.native.js +145 -0
  486. package/dist/esm/theme/createDefaultThemeConfig.native.js.map +1 -0
  487. package/dist/esm/theme/createThemes.mjs +697 -0
  488. package/dist/esm/theme/createThemes.mjs.map +1 -0
  489. package/dist/esm/theme/createThemes.native.js +1140 -0
  490. package/dist/esm/theme/createThemes.native.js.map +1 -0
  491. package/dist/esm/theme/dedupeInherited.mjs +55 -0
  492. package/dist/esm/theme/dedupeInherited.mjs.map +1 -0
  493. package/dist/esm/theme/dedupeInherited.native.js +163 -0
  494. package/dist/esm/theme/dedupeInherited.native.js.map +1 -0
  495. package/dist/esm/theme/defaults/accent.mjs +7 -0
  496. package/dist/esm/theme/defaults/accent.mjs.map +1 -0
  497. package/dist/esm/theme/defaults/accent.native.js +7 -0
  498. package/dist/esm/theme/defaults/accent.native.js.map +1 -0
  499. package/dist/esm/theme/defaults/base.mjs +23 -0
  500. package/dist/esm/theme/defaults/base.mjs.map +1 -0
  501. package/dist/esm/theme/defaults/base.native.js +23 -0
  502. package/dist/esm/theme/defaults/base.native.js.map +1 -0
  503. package/dist/esm/theme/defaults/builderOptions.mjs +165 -0
  504. package/dist/esm/theme/defaults/builderOptions.mjs.map +1 -0
  505. package/dist/esm/theme/defaults/builderOptions.native.js +233 -0
  506. package/dist/esm/theme/defaults/builderOptions.native.js.map +1 -0
  507. package/dist/esm/theme/defaults/categoryFonts.mjs +25 -0
  508. package/dist/esm/theme/defaults/categoryFonts.mjs.map +1 -0
  509. package/dist/esm/theme/defaults/categoryFonts.native.js +25 -0
  510. package/dist/esm/theme/defaults/categoryFonts.native.js.map +1 -0
  511. package/dist/esm/theme/defaults/fonts.mjs +240 -0
  512. package/dist/esm/theme/defaults/fonts.mjs.map +1 -0
  513. package/dist/esm/theme/defaults/fonts.native.js +326 -0
  514. package/dist/esm/theme/defaults/fonts.native.js.map +1 -0
  515. package/dist/esm/theme/defaults/house.mjs +13 -0
  516. package/dist/esm/theme/defaults/house.mjs.map +1 -0
  517. package/dist/esm/theme/defaults/house.native.js +17 -0
  518. package/dist/esm/theme/defaults/house.native.js.map +1 -0
  519. package/dist/esm/theme/defaults/index.mjs +7 -0
  520. package/dist/esm/theme/defaults/index.mjs.map +1 -0
  521. package/dist/esm/theme/defaults/index.native.js +7 -0
  522. package/dist/esm/theme/defaults/index.native.js.map +1 -0
  523. package/dist/esm/theme/devtools/ColorLineVisualizer.mjs +218 -0
  524. package/dist/esm/theme/devtools/ColorLineVisualizer.mjs.map +1 -0
  525. package/dist/esm/theme/devtools/ColorLineVisualizer.native.js +230 -0
  526. package/dist/esm/theme/devtools/ColorLineVisualizer.native.js.map +1 -0
  527. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.mjs +1325 -0
  528. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.mjs.map +1 -0
  529. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.native.js +1786 -0
  530. package/dist/esm/theme/devtools/ThemeDevtoolsPanel.native.js.map +1 -0
  531. package/dist/esm/theme/devtools/animationOptions.mjs +11 -0
  532. package/dist/esm/theme/devtools/animationOptions.mjs.map +1 -0
  533. package/dist/esm/theme/devtools/animationOptions.native.js +18 -0
  534. package/dist/esm/theme/devtools/animationOptions.native.js.map +1 -0
  535. package/dist/esm/theme/devtools/buildSnapshot.mjs +67 -0
  536. package/dist/esm/theme/devtools/buildSnapshot.mjs.map +1 -0
  537. package/dist/esm/theme/devtools/buildSnapshot.native.js +146 -0
  538. package/dist/esm/theme/devtools/buildSnapshot.native.js.map +1 -0
  539. package/dist/esm/theme/devtools/knobIcons.mjs +456 -0
  540. package/dist/esm/theme/devtools/knobIcons.mjs.map +1 -0
  541. package/dist/esm/theme/devtools/knobIcons.native.js +464 -0
  542. package/dist/esm/theme/devtools/knobIcons.native.js.map +1 -0
  543. package/dist/esm/theme/devtools/vizConstants.mjs +26 -0
  544. package/dist/esm/theme/devtools/vizConstants.mjs.map +1 -0
  545. package/dist/esm/theme/devtools/vizConstants.native.js +26 -0
  546. package/dist/esm/theme/devtools/vizConstants.native.js.map +1 -0
  547. package/dist/esm/theme/dynamicType.mjs +24 -0
  548. package/dist/esm/theme/dynamicType.mjs.map +1 -0
  549. package/dist/esm/theme/dynamicType.native.js +24 -0
  550. package/dist/esm/theme/dynamicType.native.js.map +1 -0
  551. package/dist/esm/theme/fieldFocus.mjs +27 -0
  552. package/dist/esm/theme/fieldFocus.mjs.map +1 -0
  553. package/dist/esm/theme/fieldFocus.native.js +30 -0
  554. package/dist/esm/theme/fieldFocus.native.js.map +1 -0
  555. package/dist/esm/theme/fillContrast.mjs +98 -0
  556. package/dist/esm/theme/fillContrast.mjs.map +1 -0
  557. package/dist/esm/theme/fillContrast.native.js +128 -0
  558. package/dist/esm/theme/fillContrast.native.js.map +1 -0
  559. package/dist/esm/theme/focusState.mjs +81 -0
  560. package/dist/esm/theme/focusState.mjs.map +1 -0
  561. package/dist/esm/theme/focusState.native.js +81 -0
  562. package/dist/esm/theme/focusState.native.js.map +1 -0
  563. package/dist/esm/theme/fontCategoryMetrics.mjs +65 -0
  564. package/dist/esm/theme/fontCategoryMetrics.mjs.map +1 -0
  565. package/dist/esm/theme/fontCategoryMetrics.native.js +65 -0
  566. package/dist/esm/theme/fontCategoryMetrics.native.js.map +1 -0
  567. package/dist/esm/theme/fontCategoryStacks.mjs +15 -0
  568. package/dist/esm/theme/fontCategoryStacks.mjs.map +1 -0
  569. package/dist/esm/theme/fontCategoryStacks.native.js +15 -0
  570. package/dist/esm/theme/fontCategoryStacks.native.js.map +1 -0
  571. package/dist/esm/theme/glyphPaint.mjs +29 -0
  572. package/dist/esm/theme/glyphPaint.mjs.map +1 -0
  573. package/dist/esm/theme/glyphPaint.native.js +52 -0
  574. package/dist/esm/theme/glyphPaint.native.js.map +1 -0
  575. package/dist/esm/theme/glyphTint.mjs +82 -0
  576. package/dist/esm/theme/glyphTint.mjs.map +1 -0
  577. package/dist/esm/theme/glyphTint.native.js +91 -0
  578. package/dist/esm/theme/glyphTint.native.js.map +1 -0
  579. package/dist/esm/theme/groupGeometry.mjs +38 -0
  580. package/dist/esm/theme/groupGeometry.mjs.map +1 -0
  581. package/dist/esm/theme/groupGeometry.native.js +40 -0
  582. package/dist/esm/theme/groupGeometry.native.js.map +1 -0
  583. package/dist/esm/theme/hairline.mjs +73 -0
  584. package/dist/esm/theme/hairline.mjs.map +1 -0
  585. package/dist/esm/theme/hairline.native.js +41 -0
  586. package/dist/esm/theme/hairline.native.js.map +1 -0
  587. package/dist/esm/theme/index.mjs +66 -0
  588. package/dist/esm/theme/index.mjs.map +1 -0
  589. package/dist/esm/theme/index.native.js +66 -0
  590. package/dist/esm/theme/index.native.js.map +1 -0
  591. package/dist/esm/theme/intents.mjs +37 -0
  592. package/dist/esm/theme/intents.mjs.map +1 -0
  593. package/dist/esm/theme/intents.native.js +37 -0
  594. package/dist/esm/theme/intents.native.js.map +1 -0
  595. package/dist/esm/theme/knobs.mjs +125 -0
  596. package/dist/esm/theme/knobs.mjs.map +1 -0
  597. package/dist/esm/theme/knobs.native.js +125 -0
  598. package/dist/esm/theme/knobs.native.js.map +1 -0
  599. package/dist/esm/theme/layoutTokens.mjs +124 -0
  600. package/dist/esm/theme/layoutTokens.mjs.map +1 -0
  601. package/dist/esm/theme/layoutTokens.native.js +171 -0
  602. package/dist/esm/theme/layoutTokens.native.js.map +1 -0
  603. package/dist/esm/theme/listRows.mjs +17 -0
  604. package/dist/esm/theme/listRows.mjs.map +1 -0
  605. package/dist/esm/theme/listRows.native.js +19 -0
  606. package/dist/esm/theme/listRows.native.js.map +1 -0
  607. package/dist/esm/theme/mergedTokens.mjs +14 -0
  608. package/dist/esm/theme/mergedTokens.mjs.map +1 -0
  609. package/dist/esm/theme/mergedTokens.native.js +33 -0
  610. package/dist/esm/theme/mergedTokens.native.js.map +1 -0
  611. package/dist/esm/theme/motion.mjs +41 -0
  612. package/dist/esm/theme/motion.mjs.map +1 -0
  613. package/dist/esm/theme/motion.native.js +48 -0
  614. package/dist/esm/theme/motion.native.js.map +1 -0
  615. package/dist/esm/theme/motionStops.mjs +3 -0
  616. package/dist/esm/theme/motionStops.mjs.map +1 -0
  617. package/dist/esm/theme/motionStops.native.js +3 -0
  618. package/dist/esm/theme/motionStops.native.js.map +1 -0
  619. package/dist/esm/theme/motionTiming.mjs +48 -0
  620. package/dist/esm/theme/motionTiming.mjs.map +1 -0
  621. package/dist/esm/theme/motionTiming.native.js +51 -0
  622. package/dist/esm/theme/motionTiming.native.js.map +1 -0
  623. package/dist/esm/theme/nativeFontFamily.mjs +5 -0
  624. package/dist/esm/theme/nativeFontFamily.mjs.map +1 -0
  625. package/dist/esm/theme/nativeFontFamily.native.js +9 -0
  626. package/dist/esm/theme/nativeFontFamily.native.js.map +1 -0
  627. package/dist/esm/theme/nativeMonoFamily.mjs +18 -0
  628. package/dist/esm/theme/nativeMonoFamily.mjs.map +1 -0
  629. package/dist/esm/theme/nativeMonoFamily.native.js +18 -0
  630. package/dist/esm/theme/nativeMonoFamily.native.js.map +1 -0
  631. package/dist/esm/theme/overlaySurfaces.mjs +290 -0
  632. package/dist/esm/theme/overlaySurfaces.mjs.map +1 -0
  633. package/dist/esm/theme/overlaySurfaces.native.js +311 -0
  634. package/dist/esm/theme/overlaySurfaces.native.js.map +1 -0
  635. package/dist/esm/theme/pageGutter.mjs +55 -0
  636. package/dist/esm/theme/pageGutter.mjs.map +1 -0
  637. package/dist/esm/theme/pageGutter.native.js +59 -0
  638. package/dist/esm/theme/pageGutter.native.js.map +1 -0
  639. package/dist/esm/theme/preset.types.mjs +2 -0
  640. package/dist/esm/theme/preset.types.mjs.map +1 -0
  641. package/dist/esm/theme/preset.types.native.js +2 -0
  642. package/dist/esm/theme/preset.types.native.js.map +1 -0
  643. package/dist/esm/theme/presetPreview.mjs +17 -0
  644. package/dist/esm/theme/presetPreview.mjs.map +1 -0
  645. package/dist/esm/theme/presetPreview.native.js +18 -0
  646. package/dist/esm/theme/presetPreview.native.js.map +1 -0
  647. package/dist/esm/theme/presetStore.mjs +251 -0
  648. package/dist/esm/theme/presetStore.mjs.map +1 -0
  649. package/dist/esm/theme/presetStore.native.js +304 -0
  650. package/dist/esm/theme/presetStore.native.js.map +1 -0
  651. package/dist/esm/theme/presetUserSync.mjs +44 -0
  652. package/dist/esm/theme/presetUserSync.mjs.map +1 -0
  653. package/dist/esm/theme/presetUserSync.native.js +46 -0
  654. package/dist/esm/theme/presetUserSync.native.js.map +1 -0
  655. package/dist/esm/theme/presets.mjs +97 -0
  656. package/dist/esm/theme/presets.mjs.map +1 -0
  657. package/dist/esm/theme/presets.native.js +97 -0
  658. package/dist/esm/theme/presets.native.js.map +1 -0
  659. package/dist/esm/theme/radiusClass.mjs +99 -0
  660. package/dist/esm/theme/radiusClass.mjs.map +1 -0
  661. package/dist/esm/theme/radiusClass.native.js +105 -0
  662. package/dist/esm/theme/radiusClass.native.js.map +1 -0
  663. package/dist/esm/theme/radiusClassTable.generated.mjs +135 -0
  664. package/dist/esm/theme/radiusClassTable.generated.mjs.map +1 -0
  665. package/dist/esm/theme/radiusClassTable.generated.native.js +135 -0
  666. package/dist/esm/theme/radiusClassTable.generated.native.js.map +1 -0
  667. package/dist/esm/theme/ramps.mjs +48 -0
  668. package/dist/esm/theme/ramps.mjs.map +1 -0
  669. package/dist/esm/theme/ramps.native.js +49 -0
  670. package/dist/esm/theme/ramps.native.js.map +1 -0
  671. package/dist/esm/theme/readableColor.mjs +214 -0
  672. package/dist/esm/theme/readableColor.mjs.map +1 -0
  673. package/dist/esm/theme/readableColor.native.js +317 -0
  674. package/dist/esm/theme/readableColor.native.js.map +1 -0
  675. package/dist/esm/theme/recipeInputs.mjs +309 -0
  676. package/dist/esm/theme/recipeInputs.mjs.map +1 -0
  677. package/dist/esm/theme/recipeInputs.native.js +424 -0
  678. package/dist/esm/theme/recipeInputs.native.js.map +1 -0
  679. package/dist/esm/theme/recipes.mjs +2 -0
  680. package/dist/esm/theme/recipes.mjs.map +1 -0
  681. package/dist/esm/theme/recipes.native.js +2 -0
  682. package/dist/esm/theme/recipes.native.js.map +1 -0
  683. package/dist/esm/theme/resolveKnobs.mjs +730 -0
  684. package/dist/esm/theme/resolveKnobs.mjs.map +1 -0
  685. package/dist/esm/theme/resolveKnobs.native.js +744 -0
  686. package/dist/esm/theme/resolveKnobs.native.js.map +1 -0
  687. package/dist/esm/theme/scale/ScaleStyles.mjs +30 -0
  688. package/dist/esm/theme/scale/ScaleStyles.mjs.map +1 -0
  689. package/dist/esm/theme/scale/ScaleStyles.native.js +11 -0
  690. package/dist/esm/theme/scale/ScaleStyles.native.js.map +1 -0
  691. package/dist/esm/theme/scale/activeScale.mjs +28 -0
  692. package/dist/esm/theme/scale/activeScale.mjs.map +1 -0
  693. package/dist/esm/theme/scale/activeScale.native.js +53 -0
  694. package/dist/esm/theme/scale/activeScale.native.js.map +1 -0
  695. package/dist/esm/theme/scale/deriveRecipeInputs.mjs +86 -0
  696. package/dist/esm/theme/scale/deriveRecipeInputs.mjs.map +1 -0
  697. package/dist/esm/theme/scale/deriveRecipeInputs.native.js +126 -0
  698. package/dist/esm/theme/scale/deriveRecipeInputs.native.js.map +1 -0
  699. package/dist/esm/theme/scale/generateScale.mjs +85 -0
  700. package/dist/esm/theme/scale/generateScale.mjs.map +1 -0
  701. package/dist/esm/theme/scale/generateScale.native.js +168 -0
  702. package/dist/esm/theme/scale/generateScale.native.js.map +1 -0
  703. package/dist/esm/theme/scale/index.mjs +12 -0
  704. package/dist/esm/theme/scale/index.mjs.map +1 -0
  705. package/dist/esm/theme/scale/index.native.js +12 -0
  706. package/dist/esm/theme/scale/index.native.js.map +1 -0
  707. package/dist/esm/theme/scale/installScaleConfig.mjs +6 -0
  708. package/dist/esm/theme/scale/installScaleConfig.mjs.map +1 -0
  709. package/dist/esm/theme/scale/installScaleConfig.native.js +36 -0
  710. package/dist/esm/theme/scale/installScaleConfig.native.js.map +1 -0
  711. package/dist/esm/theme/scale/scaleAttribute.mjs +11 -0
  712. package/dist/esm/theme/scale/scaleAttribute.mjs.map +1 -0
  713. package/dist/esm/theme/scale/scaleAttribute.native.js +11 -0
  714. package/dist/esm/theme/scale/scaleAttribute.native.js.map +1 -0
  715. package/dist/esm/theme/scale/scaleCss.mjs +62 -0
  716. package/dist/esm/theme/scale/scaleCss.mjs.map +1 -0
  717. package/dist/esm/theme/scale/scaleCss.native.js +171 -0
  718. package/dist/esm/theme/scale/scaleCss.native.js.map +1 -0
  719. package/dist/esm/theme/scale/scaleFonts.mjs +60 -0
  720. package/dist/esm/theme/scale/scaleFonts.mjs.map +1 -0
  721. package/dist/esm/theme/scale/scaleFonts.native.js +126 -0
  722. package/dist/esm/theme/scale/scaleFonts.native.js.map +1 -0
  723. package/dist/esm/theme/scale/scaleInputs.mjs +189 -0
  724. package/dist/esm/theme/scale/scaleInputs.mjs.map +1 -0
  725. package/dist/esm/theme/scale/scaleInputs.native.js +191 -0
  726. package/dist/esm/theme/scale/scaleInputs.native.js.map +1 -0
  727. package/dist/esm/theme/scale/themeScales.mjs +109 -0
  728. package/dist/esm/theme/scale/themeScales.mjs.map +1 -0
  729. package/dist/esm/theme/scale/themeScales.native.js +155 -0
  730. package/dist/esm/theme/scale/themeScales.native.js.map +1 -0
  731. package/dist/esm/theme/scale/useActiveScale.mjs +51 -0
  732. package/dist/esm/theme/scale/useActiveScale.mjs.map +1 -0
  733. package/dist/esm/theme/scale/useActiveScale.native.js +57 -0
  734. package/dist/esm/theme/scale/useActiveScale.native.js.map +1 -0
  735. package/dist/esm/theme/schemeStore.mjs +59 -0
  736. package/dist/esm/theme/schemeStore.mjs.map +1 -0
  737. package/dist/esm/theme/schemeStore.native.js +73 -0
  738. package/dist/esm/theme/schemeStore.native.js.map +1 -0
  739. package/dist/esm/theme/shared.mjs +95 -0
  740. package/dist/esm/theme/shared.mjs.map +1 -0
  741. package/dist/esm/theme/shared.native.js +135 -0
  742. package/dist/esm/theme/shared.native.js.map +1 -0
  743. package/dist/esm/theme/sizeRecipes.mjs +112 -0
  744. package/dist/esm/theme/sizeRecipes.mjs.map +1 -0
  745. package/dist/esm/theme/sizeRecipes.native.js +184 -0
  746. package/dist/esm/theme/sizeRecipes.native.js.map +1 -0
  747. package/dist/esm/theme/subsetThemes.mjs +21 -0
  748. package/dist/esm/theme/subsetThemes.mjs.map +1 -0
  749. package/dist/esm/theme/subsetThemes.native.js +48 -0
  750. package/dist/esm/theme/subsetThemes.native.js.map +1 -0
  751. package/dist/esm/theme/theme.mjs +163 -0
  752. package/dist/esm/theme/theme.mjs.map +1 -0
  753. package/dist/esm/theme/theme.native.js +87 -0
  754. package/dist/esm/theme/theme.native.js.map +1 -0
  755. package/dist/esm/theme/themeValue.mjs +25 -0
  756. package/dist/esm/theme/themeValue.mjs.map +1 -0
  757. package/dist/esm/theme/themeValue.native.js +44 -0
  758. package/dist/esm/theme/themeValue.native.js.map +1 -0
  759. package/dist/esm/theme/tileSizes.mjs +167 -0
  760. package/dist/esm/theme/tileSizes.mjs.map +1 -0
  761. package/dist/esm/theme/tileSizes.native.js +192 -0
  762. package/dist/esm/theme/tileSizes.native.js.map +1 -0
  763. package/dist/esm/theme/touchManipulation.mjs +7 -0
  764. package/dist/esm/theme/touchManipulation.mjs.map +1 -0
  765. package/dist/esm/theme/touchManipulation.native.js +7 -0
  766. package/dist/esm/theme/touchManipulation.native.js.map +1 -0
  767. package/dist/esm/theme/transitionProps.mjs +25 -0
  768. package/dist/esm/theme/transitionProps.mjs.map +1 -0
  769. package/dist/esm/theme/transitionProps.native.js +53 -0
  770. package/dist/esm/theme/transitionProps.native.js.map +1 -0
  771. package/dist/esm/theme/useColorScale.mjs +22 -0
  772. package/dist/esm/theme/useColorScale.mjs.map +1 -0
  773. package/dist/esm/theme/useColorScale.native.js +5 -0
  774. package/dist/esm/theme/useColorScale.native.js.map +1 -0
  775. package/dist/esm/theme/usePresetSwitch.mjs +45 -0
  776. package/dist/esm/theme/usePresetSwitch.mjs.map +1 -0
  777. package/dist/esm/theme/usePresetSwitch.native.js +22 -0
  778. package/dist/esm/theme/usePresetSwitch.native.js.map +1 -0
  779. package/dist/esm/theme/useResolvedKnobs.mjs +111 -0
  780. package/dist/esm/theme/useResolvedKnobs.mjs.map +1 -0
  781. package/dist/esm/theme/useResolvedKnobs.native.js +145 -0
  782. package/dist/esm/theme/useResolvedKnobs.native.js.map +1 -0
  783. package/dist/esm/theme/useSchemePreference.mjs +24 -0
  784. package/dist/esm/theme/useSchemePreference.mjs.map +1 -0
  785. package/dist/esm/theme/useSchemePreference.native.js +52 -0
  786. package/dist/esm/theme/useSchemePreference.native.js.map +1 -0
  787. package/dist/esm/theme/useTheme.mjs +127 -0
  788. package/dist/esm/theme/useTheme.mjs.map +1 -0
  789. package/dist/esm/theme/useTheme.native.js +66 -0
  790. package/dist/esm/theme/useTheme.native.js.map +1 -0
  791. package/dist/esm/theme/useTouchSurface.mjs +8 -0
  792. package/dist/esm/theme/useTouchSurface.mjs.map +1 -0
  793. package/dist/esm/theme/useTouchSurface.native.js +8 -0
  794. package/dist/esm/theme/useTouchSurface.native.js.map +1 -0
  795. package/dist/esm/theme/v3TokenRoles.mjs +39 -0
  796. package/dist/esm/theme/v3TokenRoles.mjs.map +1 -0
  797. package/dist/esm/theme/v3TokenRoles.native.js +39 -0
  798. package/dist/esm/theme/v3TokenRoles.native.js.map +1 -0
  799. package/package.json +56 -12
  800. package/src/theme/scale/activeScale.spec.ts +33 -0
  801. package/src/theme/scale/activeScale.ts +19 -0
  802. package/src/theme/scale/index.ts +6 -1
  803. package/src/theme/subsetThemes.spec.ts +81 -0
  804. package/src/theme/subsetThemes.ts +13 -1
  805. package/types/theme/scale/activeScale.d.ts +8 -0
  806. package/types/theme/scale/activeScale.d.ts.map +1 -1
  807. package/types/theme/scale/index.d.ts +1 -1
  808. package/types/theme/scale/index.d.ts.map +1 -1
  809. package/types/theme/subsetThemes.d.ts +10 -1
  810. package/types/theme/subsetThemes.d.ts.map +1 -1
@@ -0,0 +1,890 @@
1
+ import { aaTextContrastRatio, measureContrast, minContrastRatio } from "../theme/colorRules.mjs";
2
+ function captureMatrixSnapshot() {
3
+ if (typeof document === "undefined") throw new Error("captureMatrixSnapshot needs a DOM");
4
+ const SKIP_TAGS = /* @__PURE__ */new Set(["script", "style", "link", "meta", "head", "title", "noscript", "br", "wbr", "template"]);
5
+ const round = n => Math.round(n * 4) / 4;
6
+ const toRect = r => ({
7
+ x: round(r.x),
8
+ y: round(r.y),
9
+ w: round(r.width),
10
+ h: round(r.height)
11
+ });
12
+ function parseCssColor(raw) {
13
+ const s = raw.trim().toLowerCase();
14
+ if (s === "transparent") return [0, 0, 0, 0];
15
+ const m = s.match(/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:[\s,/]+([\d.%]+))?\s*\)$/);
16
+ if (!m) return null;
17
+ let a = 1;
18
+ if (m[4] !== void 0) {
19
+ a = m[4].endsWith("%") ? Number.parseFloat(m[4]) / 100 : Number.parseFloat(m[4]);
20
+ }
21
+ return [Number.parseFloat(m[1]), Number.parseFloat(m[2]), Number.parseFloat(m[3]), a];
22
+ }
23
+ function toHex(rgb) {
24
+ const h = v => Math.max(0, Math.min(255, Math.round(v))).toString(16).padStart(2, "0");
25
+ return `#${h(rgb[0])}${h(rgb[1])}${h(rgb[2])}`;
26
+ }
27
+ function blend(top, bottom) {
28
+ const a = top[3];
29
+ return [top[0] * a + bottom[0] * (1 - a), top[1] * a + bottom[1] * (1 - a), top[2] * a + bottom[2] * (1 - a)];
30
+ }
31
+ function effectiveBackground(el) {
32
+ const layers = [];
33
+ let overImage = false;
34
+ let node = el;
35
+ let opaqueBase = null;
36
+ while (node) {
37
+ const cs = getComputedStyle(node);
38
+ if (cs.backgroundImage && cs.backgroundImage !== "none") overImage = true;
39
+ if (node.getAttribute("data-mpo-chart-backdrop") === "patterned") overImage = true;
40
+ const parsed = parseCssColor(cs.backgroundColor);
41
+ if (parsed && parsed[3] > 0) {
42
+ if (parsed[3] >= 0.999) {
43
+ opaqueBase = [parsed[0], parsed[1], parsed[2]];
44
+ break;
45
+ }
46
+ layers.push(parsed);
47
+ }
48
+ node = node.parentElement;
49
+ }
50
+ if (!opaqueBase) {
51
+ return {
52
+ hex: "#ffffff",
53
+ resolved: false,
54
+ overImage
55
+ };
56
+ }
57
+ let acc = opaqueBase;
58
+ for (let i = layers.length - 1; i >= 0; i--) {
59
+ acc = blend(layers[i], acc);
60
+ }
61
+ return {
62
+ hex: toHex(acc),
63
+ resolved: !overImage,
64
+ overImage
65
+ };
66
+ }
67
+ function effectiveOpacity(el) {
68
+ let o = 1;
69
+ let node = el;
70
+ while (node) {
71
+ const v = Number.parseFloat(getComputedStyle(node).opacity);
72
+ if (!Number.isNaN(v)) o *= v;
73
+ node = node.parentElement;
74
+ }
75
+ return o;
76
+ }
77
+ const GEOMETRY_PROPS = ["borderTopLeftRadius", "borderTopRightRadius", "borderBottomLeftRadius", "borderBottomRightRadius", "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "rowGap", "columnGap", "fontSize", "fontWeight", "fontFamily", "lineHeight", "letterSpacing"];
78
+ const root = document.querySelector("#mpo-matrix-root") ?? document.querySelector("[data-mpo-matrix-root]") ?? document.querySelector("#storybook-root") ?? document.querySelector("#root") ?? document.body;
79
+ const storyRendered = !!root && root.children.length > 0;
80
+ const geometry = [];
81
+ const textSamples = [];
82
+ const iconSamples = [];
83
+ const chartSamples = [];
84
+ let svgRootCount = 0;
85
+ const capturedSvgRoots = /* @__PURE__ */new Set();
86
+ function accessibleName(el) {
87
+ const labelledBy = el.getAttribute("aria-labelledby");
88
+ if (labelledBy) {
89
+ const name = labelledBy.split(/\s+/).map(id => document.getElementById(id)?.textContent ?? "").join(" ").trim();
90
+ if (name) return name.slice(0, 100);
91
+ }
92
+ const labels = "labels" in el ? el.labels : null;
93
+ const labelText = labels ? Array.from(labels).map(label => label.textContent ?? "").join(" ") : "";
94
+ return (el.getAttribute("aria-label") || labelText || el.getAttribute("title") || el.textContent || "").trim().slice(0, 100);
95
+ }
96
+ function controlName(el) {
97
+ if (el.matches("[data-mp-input-box]")) {
98
+ const input = el.querySelector("input, textarea, select");
99
+ if (input) return accessibleName(input) || input.getAttribute("placeholder") || "input";
100
+ }
101
+ return accessibleName(el);
102
+ }
103
+ function unsupportedCompositing(el) {
104
+ let backgroundInGroup = false;
105
+ for (let node = el; node; node = node.parentElement) {
106
+ const cs = getComputedStyle(node);
107
+ const background = parseCssColor(cs.backgroundColor);
108
+ if (background && background[3] > 0) backgroundInGroup = true;
109
+ if (Number.parseFloat(cs.opacity) < 1 && backgroundInGroup) return true;
110
+ if (cs.mixBlendMode && cs.mixBlendMode !== "normal") return true;
111
+ }
112
+ return false;
113
+ }
114
+ function collectIcon(el, key, cs) {
115
+ if (el.tagName.toLowerCase() !== "svg" || el.parentElement?.closest("svg")) return;
116
+ const backdrop = effectiveBackground(el);
117
+ const rect = el.getBoundingClientRect();
118
+ const sample = {
119
+ key,
120
+ context: accessibleName(el),
121
+ status: "conveying",
122
+ background: backdrop.hex,
123
+ backgroundResolved: backdrop.resolved,
124
+ overImage: backdrop.overImage,
125
+ shapeCount: 0,
126
+ distinctPaints: 0,
127
+ rect: toRect(rect)
128
+ };
129
+ iconSamples.push(sample);
130
+ if (cs.visibility === "hidden" || cs.visibility === "collapse" || effectiveOpacity(el) === 0 || rect.width === 0 || rect.height === 0) {
131
+ sample.status = "hidden";
132
+ return;
133
+ }
134
+ if (el.closest('[disabled], [aria-disabled="true"], [data-disabled="true"]')) {
135
+ sample.status = "disabled-control";
136
+ return;
137
+ }
138
+ const controls = 'button, a[href], label, summary, [data-mp-input-box], [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="checkbox"], [role="radio"], [role="switch"], [role="option"], [role="combobox"]';
139
+ let namedControl = el.closest(controls);
140
+ while (namedControl && !controlName(namedControl)) namedControl = namedControl.parentElement?.closest(controls) ?? null;
141
+ if (namedControl) sample.context = controlName(namedControl);else if (el.closest('[aria-hidden="true"], [role="presentation"], [role="none"]')) {
142
+ sample.status = "decorative-standalone";
143
+ return;
144
+ }
145
+ if (!backdrop.resolved) {
146
+ sample.unmeasurable = "unresolved-backdrop";
147
+ return;
148
+ }
149
+ if (el.querySelector("use")) {
150
+ sample.unmeasurable = "use-indirection";
151
+ return;
152
+ }
153
+ const paintNodes = [el, ...Array.from(el.querySelectorAll("*"))];
154
+ for (let ancestor = el.parentElement; ancestor; ancestor = ancestor.parentElement) paintNodes.push(ancestor);
155
+ if (paintNodes.some(node => {
156
+ const style = getComputedStyle(node);
157
+ return style.filter && style.filter !== "none" || style.maskImage && style.maskImage !== "none";
158
+ })) {
159
+ sample.unmeasurable = "masked-or-filtered";
160
+ return;
161
+ }
162
+ const background = [Number.parseInt(backdrop.hex.slice(1, 3), 16), Number.parseInt(backdrop.hex.slice(3, 5), 16), Number.parseInt(backdrop.hex.slice(5, 7), 16)];
163
+ const paints = /* @__PURE__ */new Set();
164
+ const kinds = /* @__PURE__ */new Set();
165
+ const alphaValue = raw => raw.endsWith("%") ? Number.parseFloat(raw) / 100 : Number.parseFloat(raw);
166
+ for (const shape of Array.from(el.querySelectorAll("path, rect, circle, ellipse, line, polyline, polygon, text, tspan"))) {
167
+ if (shape.closest("defs, clipPath, mask, pattern, marker, symbol")) continue;
168
+ const style = getComputedStyle(shape);
169
+ let hiddenGroup = false;
170
+ for (let node = shape; node && node !== el; node = node.parentElement) {
171
+ if (getComputedStyle(node).display === "none") hiddenGroup = true;
172
+ }
173
+ if (hiddenGroup || style.display === "none" || style.visibility === "hidden" || style.visibility === "collapse" || effectiveOpacity(shape) === 0) continue;
174
+ const bounds = shape.getBBox();
175
+ if (typeof SVGGeometryElement !== "undefined" && shape instanceof SVGGeometryElement && shape.getTotalLength() === 0) continue;
176
+ sample.shapeCount++;
177
+ if (unsupportedCompositing(shape)) {
178
+ sample.unmeasurable = "unsupported-compositing";
179
+ return;
180
+ }
181
+ if ([style.markerStart, style.markerMid, style.markerEnd].some(value => value && value !== "none")) {
182
+ sample.unmeasurable = "unsupported-paint";
183
+ return;
184
+ }
185
+ for (const kind of ["fill", "stroke"]) {
186
+ if (kind === "fill" && (shape.tagName.toLowerCase() === "line" || bounds.width === 0 || bounds.height === 0)) continue;
187
+ if (kind === "stroke" && !(Number.parseFloat(style.strokeWidth) > 0)) continue;
188
+ const raw = style[kind].trim().toLowerCase();
189
+ if (raw === "none") continue;
190
+ const ink = parseCssColor(raw === "currentcolor" ? style.color : raw);
191
+ if (!ink) {
192
+ sample.unmeasurable = "unsupported-paint";
193
+ return;
194
+ }
195
+ const paintOpacity = alphaValue(kind === "fill" ? style.fillOpacity : style.strokeOpacity);
196
+ ink[3] *= (Number.isFinite(paintOpacity) ? paintOpacity : 1) * effectiveOpacity(shape);
197
+ if (ink[3] === 0) continue;
198
+ paints.add(toHex(blend(ink, background)));
199
+ kinds.add(kind);
200
+ }
201
+ }
202
+ sample.distinctPaints = paints.size;
203
+ if (paints.size === 0) sample.unmeasurable = "no-paint";else if (paints.size > 1) sample.unmeasurable = "multicolor";else {
204
+ sample.paint = Array.from(paints)[0];
205
+ sample.paintKinds = Array.from(kinds);
206
+ }
207
+ }
208
+ function collectChart(el, key) {
209
+ const backdrop = effectiveBackground(el);
210
+ const rawCount = el.getAttribute("data-mpo-chart-datum-count");
211
+ const expected = rawCount !== null && /^\d+$/.test(rawCount) ? Number(rawCount) : -1;
212
+ const owner = el.closest("[data-mpo-chart-owner]");
213
+ const rows = owner ? Array.from(owner.querySelectorAll("[data-mpo-chart-datum-text]")).filter(row => row.tagName.toLowerCase() !== "svg" && row.closest("[data-mpo-chart-owner]") === owner) : [];
214
+ const visible = node => {
215
+ const style = getComputedStyle(node);
216
+ const rect = node.getBoundingClientRect();
217
+ return style.visibility !== "hidden" && style.visibility !== "collapse" && effectiveOpacity(node) > 0 && (rect.width > 0 || rect.height > 0);
218
+ };
219
+ const completeRows = rows.filter((row, index) => {
220
+ const name = row.querySelector("[data-mpo-chart-datum-label]");
221
+ const value = row.querySelector("[data-mpo-chart-datum-value]");
222
+ return row.getAttribute("data-mpo-chart-datum-text") === String(index) && name && value && visible(name) && visible(value) && !!name.textContent?.trim() && !!value.textContent?.trim();
223
+ });
224
+ const sample = {
225
+ key,
226
+ kind: el.getAttribute("data-mpo-chart") ?? "",
227
+ context: accessibleName(el),
228
+ label: (el.getAttribute("aria-label") ?? "").trim(),
229
+ background: backdrop.hex,
230
+ backgroundResolved: backdrop.resolved,
231
+ marks: [],
232
+ labels: [],
233
+ chrome: [],
234
+ unaccountedPaint: [],
235
+ separation: {
236
+ declared: el.getAttribute("data-mpo-chart-separated") === "true"
237
+ },
238
+ datumText: {
239
+ viewId: el.getAttribute("data-mpo-chart-data-view") ?? void 0,
240
+ expectedValues: el.getAttribute("data-mpo-chart-data-expected") ?? void 0,
241
+ declared: el.getAttribute("data-mpo-chart-datum-text") === "true",
242
+ expected,
243
+ observed: completeRows.length,
244
+ complete: expected > 0 && rows.length === expected && completeRows.length === expected
245
+ }
246
+ };
247
+ chartSamples.push(sample);
248
+ if (!visible(el)) sample.unmeasurable = "hidden-chart";else if (!backdrop.resolved) sample.unmeasurable = "unresolved-backdrop";else if (el.querySelector("use")) sample.unmeasurable = "use-indirection";
249
+ const marks = Array.from(el.querySelectorAll("[data-mpo-chart-mark]"));
250
+ const certifiedMasks = /* @__PURE__ */new Set();
251
+ if ((sample.kind === "pie" || sample.kind === "donut") && marks.length > 1) {
252
+ const round2 = value => Math.round(value * 1e3) / 1e3;
253
+ const pathTokens = path => JSON.stringify((path.replace(/^path\(["']?|["']?\)$/g, "").match(/[a-zA-Z]|[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g) ?? []).map(token => Number.isNaN(Number(token)) ? token : Number(token)));
254
+ const point = (radius, angle) => `${round2(radius * Math.cos(angle - Math.PI / 2))},${round2(radius * Math.sin(angle - Math.PI / 2))}`;
255
+ const proofs = marks.map(mark => {
256
+ if (mark.tagName.toLowerCase() !== "path" || mark.getAttribute("data-mpo-chart-mask") !== "eroded-arc-v1") return;
257
+ const values = (mark.getAttribute("data-mpo-chart-slice") ?? "").split(",").map(Number);
258
+ if (values.length !== 4 || !values.every(Number.isFinite)) return;
259
+ const [start, end, inner, outer] = values;
260
+ const span = end - start;
261
+ if (start < 0 || end > Math.PI * 2 + 1e-9 || span <= 0 || span >= Math.PI * 2 || inner < 0 || outer <= inner) return;
262
+ const radius = (inner + outer) / 2;
263
+ const projection = Math.min(outer, Math.max(inner, radius * Math.cos(span / 2)));
264
+ const radialDistance = Math.sqrt(Math.max(0, radius ** 2 + projection ** 2 - 2 * radius * projection * Math.cos(span / 2)));
265
+ if (outer - radius <= 1.002 || radius - inner <= 1.002 || radialDistance <= 1.002) return;
266
+ const large = Number(span >= Math.PI);
267
+ const d = `M${point(outer, start)}A${round2(outer)},${round2(outer)},0,${large},1,${point(outer, end)}` + (inner ? `L${point(inner, end)}A${round2(inner)},${round2(inner)},0,${large},0,${point(inner, start)}Z` : "L0,0Z");
268
+ if (mark.getAttribute("d") !== d) return;
269
+ const markStyle = getComputedStyle(mark);
270
+ const paintedD = markStyle.getPropertyValue("d");
271
+ if (paintedD && pathTokens(paintedD) !== pathTokens(d)) return;
272
+ if (markStyle.stroke !== "none") return;
273
+ const reference = /^url\(["']?#([^"')]+)["']?\)$/.exec(mark.getAttribute("mask") ?? "");
274
+ if (!reference) return;
275
+ const matches = Array.from(document.querySelectorAll("[id]")).filter(node => node.id === reference[1]);
276
+ const mask = matches[0];
277
+ if (matches.length !== 1 || mask.tagName.toLowerCase() !== "mask" || !el.contains(mask)) return;
278
+ const definitions = mask.parentElement;
279
+ if (definitions?.tagName.toLowerCase() !== "defs" || definitions.parentElement !== mark.parentElement) return;
280
+ const computedReference = /^url\(["']?([^"')]+)["']?\)$/.exec(markStyle.maskImage);
281
+ if (!computedReference || !["match-source", "luminance"].includes(markStyle.maskMode)) return;
282
+ try {
283
+ if (new URL(computedReference[1], document.baseURI).href !== new URL(`#${reference[1]}`, document.URL).href) return;
284
+ } catch {
285
+ return;
286
+ }
287
+ if (mask.getAttribute("maskUnits") !== "userSpaceOnUse" || mask.getAttribute("maskContentUnits") !== "userSpaceOnUse" || getComputedStyle(mask).getPropertyValue("mask-type") !== "luminance") return;
288
+ const bounds = {
289
+ x: -outer - 2,
290
+ y: -outer - 2,
291
+ width: (outer + 2) * 2,
292
+ height: (outer + 2) * 2
293
+ };
294
+ if (Object.entries(bounds).some(([name, value]) => Number(mask.getAttribute(name)) !== value)) return;
295
+ if (mask.children.length !== 1) return;
296
+ const boundary = mask.children[0];
297
+ if (boundary.tagName.toLowerCase() !== "path" || boundary.getAttribute("d") !== d) return;
298
+ for (const node of [definitions, mask, boundary]) {
299
+ const style = getComputedStyle(node);
300
+ if (style.transform !== "none" || style.filter !== "none" || style.maskImage !== "none" || style.clipPath !== "none" || style.opacity !== "1" || style.visibility !== "visible" || style.display === "none") return;
301
+ if ([style.markerStart, style.markerMid, style.markerEnd].some(value => value && value !== "none")) return;
302
+ }
303
+ if (unsupportedCompositing(boundary)) return;
304
+ const boundaryStyle = getComputedStyle(boundary);
305
+ if (boundaryStyle.fill !== "rgb(255, 255, 255)" || boundaryStyle.stroke !== "rgb(0, 0, 0)" || boundaryStyle.fillOpacity !== "1" || boundaryStyle.strokeOpacity !== "1" || Number.parseFloat(boundaryStyle.strokeWidth) !== 2 || boundaryStyle.strokeLinejoin !== "round" || boundaryStyle.strokeLinecap !== "round" || boundaryStyle.paintOrder !== "normal" || boundaryStyle.vectorEffect !== "none" || boundaryStyle.strokeDasharray !== "none") return;
306
+ const boundaryD = boundaryStyle.getPropertyValue("d");
307
+ if (boundaryD && pathTokens(boundaryD) !== pathTokens(d)) return;
308
+ for (let node = mark; node; node = node.parentElement) {
309
+ const style = getComputedStyle(node);
310
+ if (style.transform.startsWith("matrix3d") || style.perspective && style.perspective !== "none") return;
311
+ }
312
+ const ctm = mark.getScreenCTM();
313
+ if (!ctm) return;
314
+ const matrix = [ctm.a, ctm.b, ctm.c, ctm.d, ctm.e, ctm.f];
315
+ const firstScale = Math.hypot(ctm.a + ctm.d, ctm.b - ctm.c);
316
+ const secondScale = Math.hypot(ctm.a - ctm.d, ctm.b + ctm.c);
317
+ const smallest = Math.abs(firstScale - secondScale) / 2;
318
+ if (!matrix.every(Number.isFinite) || !Number.isFinite(smallest) || smallest <= 0) return;
319
+ const measuredGap = 2 * smallest * window.devicePixelRatio;
320
+ const gap = Math.abs(measuredGap - 2) <= 8 * Number.EPSILON ? 2 : measuredGap;
321
+ return {
322
+ mark,
323
+ start,
324
+ end,
325
+ inner,
326
+ outer,
327
+ matrix,
328
+ gap
329
+ };
330
+ });
331
+ const first = proofs[0];
332
+ if (first && Math.abs(first.start) < 1e-9 && proofs.every((proof, index) => proof && proof.inner === first.inner && proof.outer === first.outer && proof.matrix.every((value, axis) => value === first.matrix[axis]) && Math.abs(proof.start - (index ? proofs[index - 1].end : 0)) < 1e-9) && Math.abs(proofs[proofs.length - 1].end - Math.PI * 2) < 1e-9) {
333
+ for (const proof of proofs) certifiedMasks.add(proof.mark);
334
+ sample.separation.method = "eroded-arc";
335
+ sample.separation.minimumGapPx = first.gap;
336
+ }
337
+ }
338
+ function paintSample(shape, paintKey, label) {
339
+ const item = {
340
+ key: paintKey,
341
+ label,
342
+ background: backdrop.hex
343
+ };
344
+ if (shape.closest("defs, clipPath, mask, pattern, marker, symbol")) return {
345
+ ...item,
346
+ unmeasurable: "no-paint"
347
+ };
348
+ if (!visible(shape)) return {
349
+ ...item,
350
+ unmeasurable: "no-paint"
351
+ };
352
+ if (!backdrop.resolved) return {
353
+ ...item,
354
+ unmeasurable: "unresolved-backdrop"
355
+ };
356
+ for (let node = shape; node; node = node.parentElement) {
357
+ const style2 = getComputedStyle(node);
358
+ if (style2.filter && style2.filter !== "none" || style2.maskImage && style2.maskImage !== "none" && !(node === shape && certifiedMasks.has(shape))) return {
359
+ ...item,
360
+ unmeasurable: "masked-or-filtered"
361
+ };
362
+ if (style2.clipPath && style2.clipPath !== "none") return {
363
+ ...item,
364
+ unmeasurable: "unsupported-paint"
365
+ };
366
+ }
367
+ if (unsupportedCompositing(shape)) return {
368
+ ...item,
369
+ unmeasurable: "unsupported-compositing"
370
+ };
371
+ const style = getComputedStyle(shape);
372
+ if ([style.markerStart, style.markerMid, style.markerEnd].some(value => value && value !== "none")) return {
373
+ ...item,
374
+ unmeasurable: "unsupported-paint"
375
+ };
376
+ let bounds;
377
+ try {
378
+ bounds = shape.getBBox();
379
+ } catch {
380
+ return {
381
+ ...item,
382
+ unmeasurable: "unsupported-paint"
383
+ };
384
+ }
385
+ const background = [Number.parseInt(backdrop.hex.slice(1, 3), 16), Number.parseInt(backdrop.hex.slice(3, 5), 16), Number.parseInt(backdrop.hex.slice(5, 7), 16)];
386
+ const paints = /* @__PURE__ */new Set();
387
+ for (const kind of ["fill", "stroke"]) {
388
+ if (kind === "fill" && (shape.tagName.toLowerCase() === "line" || bounds.width === 0 || bounds.height === 0)) continue;
389
+ if (kind === "stroke" && !(Number.parseFloat(style.strokeWidth) > 0)) continue;
390
+ const raw = style[kind].trim().toLowerCase();
391
+ if (raw === "none") continue;
392
+ const ink = parseCssColor(raw === "currentcolor" ? style.color : raw);
393
+ if (!ink) return {
394
+ ...item,
395
+ unmeasurable: "unsupported-paint"
396
+ };
397
+ const alphaRaw = kind === "fill" ? style.fillOpacity : style.strokeOpacity;
398
+ const alpha = Number.parseFloat(alphaRaw) / (alphaRaw.endsWith("%") ? 100 : 1);
399
+ ink[3] *= (Number.isFinite(alpha) ? alpha : 1) * effectiveOpacity(shape);
400
+ if (ink[3] > 0) paints.add(toHex(blend(ink, background)));
401
+ }
402
+ if (paints.size !== 1) return {
403
+ ...item,
404
+ unmeasurable: paints.size ? "multicolor" : "no-paint"
405
+ };
406
+ return {
407
+ ...item,
408
+ paint: Array.from(paints)[0]
409
+ };
410
+ }
411
+ for (const [index, mark] of marks.entries()) {
412
+ const tag = mark.tagName.toLowerCase();
413
+ const item = !["path", "rect", "circle", "ellipse", "line", "polyline", "polygon"].includes(tag) ? {
414
+ key: `${key}/mark:${index}`,
415
+ label: mark.getAttribute("data-mpo-chart-mark") ?? "",
416
+ background: backdrop.hex,
417
+ unmeasurable: "unsupported-paint"
418
+ } : paintSample(mark, `${key}/mark:${index}`, mark.getAttribute("data-mpo-chart-mark") || `mark ${index + 1}`);
419
+ sample.marks.push(item);
420
+ }
421
+ for (const [index, node] of Array.from(el.querySelectorAll("text, tspan")).entries()) {
422
+ const text = Array.from(node.childNodes).filter(child => child.nodeType === 3).map(child => child.textContent ?? "").join("").trim();
423
+ if (text) sample.labels.push(paintSample(node, `${key}/label:${index}`, text));
424
+ }
425
+ for (const [index, drawable] of Array.from(el.querySelectorAll("path, rect, circle, ellipse, line, polyline, polygon, image, foreignObject, use")).entries()) {
426
+ if (drawable.hasAttribute("data-mpo-chart-mark")) continue;
427
+ const tag = drawable.tagName.toLowerCase();
428
+ const item = paintSample(drawable, `${key}/drawable:${index}`, `unaccounted ${tag}`);
429
+ if (item.unmeasurable === "no-paint") continue;
430
+ const chrome = drawable.getAttribute("data-mpo-chart-chrome");
431
+ const style = getComputedStyle(drawable);
432
+ const rect = drawable.getBoundingClientRect();
433
+ const ctm = drawable.getScreenCTM?.();
434
+ const squareSum = ctm ? ctm.a ** 2 + ctm.b ** 2 + ctm.c ** 2 + ctm.d ** 2 : NaN;
435
+ const determinant = ctm ? ctm.a * ctm.d - ctm.b * ctm.c : NaN;
436
+ const largestScale = Math.sqrt((squareSum + Math.sqrt(Math.max(0, squareSum ** 2 - 4 * determinant ** 2))) / 2);
437
+ const screenStrokeWidth = Number.parseFloat(style.strokeWidth) * largestScale;
438
+ const thinAxisLine = (chrome === "axis" || chrome === "grid") && tag === "line" && (rect.width === 0 || rect.height === 0) && Number.isFinite(screenStrokeWidth) && screenStrokeWidth <= 1 && screenStrokeWidth > 0 && !item.unmeasurable;
439
+ if (thinAxisLine) sample.chrome.push({
440
+ ...item,
441
+ label: `${chrome} line`
442
+ });else sample.unaccountedPaint.push({
443
+ ...item,
444
+ unmeasurable: "unsupported-paint"
445
+ });
446
+ }
447
+ if (sample.kind === "bar" && marks.length > 0 && marks.every((mark, index) =>
448
+ // A bar path that declares its box (value-end rounding, MPO-56)
449
+ // paints inside that box just as a rect does.
450
+ (mark.tagName.toLowerCase() === "rect" || mark.tagName.toLowerCase() === "path" && mark.hasAttribute("data-mpo-chart-bar")) && getComputedStyle(mark).stroke === "none" && !sample.marks[index].unmeasurable)) {
451
+ let minimumGapPx = Infinity;
452
+ const bounds = marks.map(mark => mark.getBoundingClientRect());
453
+ for (let i = 0; i < bounds.length; i++) for (let j = i + 1; j < bounds.length; j++) {
454
+ const a = bounds[i];
455
+ const b = bounds[j];
456
+ const dx = Math.max(0, a.left - b.right, b.left - a.right);
457
+ const dy = Math.max(0, a.top - b.bottom, b.top - a.bottom);
458
+ minimumGapPx = Math.min(minimumGapPx, Math.hypot(dx, dy) * window.devicePixelRatio);
459
+ }
460
+ sample.separation.method = "rect-bounds";
461
+ sample.separation.minimumGapPx = Number.isFinite(minimumGapPx) ? minimumGapPx : 2;
462
+ }
463
+ if (sample.kind === "area") sample.unmeasurable ??= "unsupported-overlap";
464
+ }
465
+ function collectText(el, key, cs) {
466
+ const directText = [];
467
+ for (const child of Array.from(el.childNodes)) {
468
+ if (child.nodeType === 3 && (child.textContent ?? "").trim().length > 0) {
469
+ directText.push(child);
470
+ }
471
+ }
472
+ if (directText.length === 0) return void 0;
473
+ const range = document.createRange();
474
+ range.setStartBefore(directText[0]);
475
+ range.setEndAfter(directText[directText.length - 1]);
476
+ const textRect = range.getBoundingClientRect();
477
+ if (!(textRect.width > 0 && textRect.height > 0)) return void 0;
478
+ const opacity = effectiveOpacity(el);
479
+ if (opacity > 0.05 && cs.visibility !== "hidden") {
480
+ const ink = parseCssColor(cs.color);
481
+ const backdrop = effectiveBackground(el);
482
+ if (ink) {
483
+ const baseParsed = parseCssColor(backdrop.hex) ?? [255, 255, 255, 1];
484
+ const inkOpaque = toHex(ink[3] >= 0.999 ? [ink[0], ink[1], ink[2]] : blend(ink, [baseParsed[0], baseParsed[1], baseParsed[2]]));
485
+ textSamples.push({
486
+ key,
487
+ text: (directText[0].textContent ?? "").trim().slice(0, 60),
488
+ color: inkOpaque,
489
+ background: backdrop.hex,
490
+ backgroundResolved: backdrop.resolved,
491
+ overImage: backdrop.overImage,
492
+ fontSizePx: Number.parseFloat(cs.fontSize) || 0,
493
+ fontWeightNum: Number.parseFloat(cs.fontWeight) || 400,
494
+ rect: toRect(textRect)
495
+ });
496
+ }
497
+ }
498
+ return toRect(textRect);
499
+ }
500
+ function boxedChildren(el, path) {
501
+ const out = [];
502
+ const counts = {};
503
+ for (const child of Array.from(el.children)) {
504
+ const tag = child.tagName.toLowerCase();
505
+ if (SKIP_TAGS.has(tag)) continue;
506
+ if (child.namespaceURI === "http://www.w3.org/2000/svg" && tag !== "svg") continue;
507
+ const cs = getComputedStyle(child);
508
+ if (cs.display === "none") continue;
509
+ if (cs.display === "contents") {
510
+ const index = counts[tag] ?? 0;
511
+ counts[tag] = index + 1;
512
+ collectText(child, `${path}/${tag}:${index}~contents`, cs);
513
+ for (const grandchild of boxedChildren(child, path)) out.push(grandchild);
514
+ continue;
515
+ }
516
+ out.push(child);
517
+ }
518
+ return out;
519
+ }
520
+ function visit(el, path) {
521
+ const tag = el.tagName.toLowerCase();
522
+ const cs = getComputedStyle(el);
523
+ const rect = el.getBoundingClientRect();
524
+ const props = {};
525
+ for (const prop of GEOMETRY_PROPS) {
526
+ props[prop] = cs[prop];
527
+ }
528
+ const entry = {
529
+ key: path,
530
+ tag,
531
+ rect: toRect(rect),
532
+ props
533
+ };
534
+ const textRect = collectText(el, path, cs);
535
+ if (textRect) entry.textRect = textRect;
536
+ if (tag === "svg" && !el.parentElement?.closest("svg")) {
537
+ capturedSvgRoots.add(el);
538
+ if (el.hasAttribute("data-mpo-chart")) collectChart(el, path);else collectIcon(el, path, cs);
539
+ }
540
+ geometry.push(entry);
541
+ const counts = {};
542
+ for (const child of boxedChildren(el, path)) {
543
+ const childTag = child.tagName.toLowerCase();
544
+ const index = counts[childTag] ?? 0;
545
+ counts[childTag] = index + 1;
546
+ visit(child, `${path}/${childTag}:${index}`);
547
+ }
548
+ }
549
+ if (root) {
550
+ const counts = {};
551
+ for (const child of boxedChildren(root, "")) {
552
+ const childTag = child.tagName.toLowerCase();
553
+ const index = counts[childTag] ?? 0;
554
+ counts[childTag] = index + 1;
555
+ visit(child, `${childTag}:${index}`);
556
+ }
557
+ const svgRoots = Array.from(root.querySelectorAll("svg")).filter(svg => !svg.parentElement?.closest("svg"));
558
+ svgRootCount = svgRoots.length;
559
+ for (const [index, svg] of svgRoots.entries()) {
560
+ if (capturedSvgRoots.has(svg)) continue;
561
+ const key = `unpainted-svg:${index}`;
562
+ if (svg.hasAttribute("data-mpo-chart")) collectChart(svg, key);else collectIcon(svg, key, getComputedStyle(svg));
563
+ }
564
+ }
565
+ return {
566
+ storyRendered,
567
+ geometry,
568
+ textSamples,
569
+ iconSamples,
570
+ chartSamples,
571
+ svgRootCount
572
+ };
573
+ }
574
+ function diffGeometry(before, after, options = {}) {
575
+ const epsilon = options.epsilonPx ?? 0;
576
+ const byKey = new Map(before.geometry.map(g => [g.key, g]));
577
+ const seen = /* @__PURE__ */new Set();
578
+ const moves = [];
579
+ const addedKeys = [];
580
+ const rectDiffers = (a, b) => Math.abs(a.x - b.x) > epsilon || Math.abs(a.y - b.y) > epsilon || Math.abs(a.w - b.w) > epsilon || Math.abs(a.h - b.h) > epsilon;
581
+ const formatRect = r => `${r.x},${r.y} ${r.w}x${r.h}`;
582
+ for (const curr of after.geometry) {
583
+ const prev = byKey.get(curr.key);
584
+ if (!prev) {
585
+ addedKeys.push(curr.key);
586
+ continue;
587
+ }
588
+ seen.add(curr.key);
589
+ if (rectDiffers(prev.rect, curr.rect)) {
590
+ moves.push({
591
+ key: curr.key,
592
+ property: "rect",
593
+ before: formatRect(prev.rect),
594
+ after: formatRect(curr.rect)
595
+ });
596
+ }
597
+ if (prev.textRect && curr.textRect && rectDiffers(prev.textRect, curr.textRect)) {
598
+ moves.push({
599
+ key: curr.key,
600
+ property: "textRect",
601
+ before: formatRect(prev.textRect),
602
+ after: formatRect(curr.textRect)
603
+ });
604
+ } else if (!!prev.textRect !== !!curr.textRect) {
605
+ moves.push({
606
+ key: curr.key,
607
+ property: "textRect",
608
+ before: prev.textRect ? formatRect(prev.textRect) : "(none)",
609
+ after: curr.textRect ? formatRect(curr.textRect) : "(none)"
610
+ });
611
+ }
612
+ for (const prop of Object.keys(prev.props)) {
613
+ if (prev.props[prop] !== curr.props[prop]) {
614
+ moves.push({
615
+ key: curr.key,
616
+ property: prop,
617
+ before: prev.props[prop],
618
+ after: curr.props[prop] ?? "(missing)"
619
+ });
620
+ }
621
+ }
622
+ }
623
+ const removedKeys = before.geometry.filter(g => !seen.has(g.key)).map(g => g.key);
624
+ return {
625
+ identical: moves.length === 0 && addedKeys.length === 0 && removedKeys.length === 0,
626
+ removedKeys,
627
+ addedKeys,
628
+ moves
629
+ };
630
+ }
631
+ function evaluateTextContrast(samples) {
632
+ let measured = 0;
633
+ let unmeasurable = 0;
634
+ const violations = [];
635
+ for (const sample of samples) {
636
+ if (!sample.backgroundResolved) {
637
+ unmeasurable++;
638
+ continue;
639
+ }
640
+ const large = sample.fontSizePx >= 24 || sample.fontSizePx >= 18.66 && sample.fontWeightNum >= 700;
641
+ const required = large ? minContrastRatio : aaTextContrastRatio;
642
+ try {
643
+ const report = measureContrast({
644
+ foreground: sample.color,
645
+ background: sample.background,
646
+ floor: required,
647
+ label: sample.key
648
+ });
649
+ measured++;
650
+ if (!report.pass) {
651
+ violations.push({
652
+ key: sample.key,
653
+ text: sample.text,
654
+ color: report.foreground,
655
+ background: report.background,
656
+ ratio: report.ratio,
657
+ required: report.floor
658
+ });
659
+ }
660
+ } catch {
661
+ unmeasurable++;
662
+ }
663
+ }
664
+ return {
665
+ measured,
666
+ unmeasurable,
667
+ violations
668
+ };
669
+ }
670
+ function evaluateIconContrast(samples) {
671
+ const result = {
672
+ ok: true,
673
+ candidates: 0,
674
+ measured: 0,
675
+ violations: [],
676
+ unverified: [],
677
+ excludedDisabled: 0,
678
+ excludedDecorative: 0,
679
+ excludedHidden: 0
680
+ };
681
+ for (const sample of samples) {
682
+ if (sample.status === "disabled-control") {
683
+ result.excludedDisabled++;
684
+ continue;
685
+ }
686
+ if (sample.status === "decorative-standalone") {
687
+ result.excludedDecorative++;
688
+ continue;
689
+ }
690
+ if (sample.status === "hidden") {
691
+ result.excludedHidden++;
692
+ continue;
693
+ }
694
+ result.candidates++;
695
+ const reason = sample.unmeasurable ?? (!sample.backgroundResolved ? "unresolved-backdrop" : !sample.paint ? "no-paint" : void 0);
696
+ if (reason) {
697
+ result.unverified.push({
698
+ key: sample.key,
699
+ context: sample.context,
700
+ reason
701
+ });
702
+ continue;
703
+ }
704
+ try {
705
+ const contrast = measureContrast({
706
+ foreground: sample.paint,
707
+ background: sample.background,
708
+ floor: minContrastRatio,
709
+ label: sample.key
710
+ });
711
+ result.measured++;
712
+ if (!contrast.pass) result.violations.push({
713
+ key: sample.key,
714
+ context: sample.context,
715
+ paint: contrast.foreground,
716
+ background: contrast.background,
717
+ ratio: contrast.ratio,
718
+ required: contrast.floor
719
+ });
720
+ } catch {
721
+ result.unverified.push({
722
+ key: sample.key,
723
+ context: sample.context,
724
+ reason: "unsupported-paint"
725
+ });
726
+ }
727
+ }
728
+ result.ok = result.violations.length === 0 && result.unverified.length === 0;
729
+ return result;
730
+ }
731
+ function iconContrastSignatures(result) {
732
+ return [...result.violations.map(item => `${item.key} (${item.context}) icon ${item.paint} on ${item.background} = ${item.ratio}:1 (floor ${item.required})`), ...result.unverified.map(item => `${item.key} (${item.context}) icon UNVERIFIED: ${item.reason}`)];
733
+ }
734
+ function evaluateChartProof(samples) {
735
+ const result = {
736
+ ok: true,
737
+ candidates: samples.length,
738
+ measured: 0,
739
+ marksMeasured: 0,
740
+ labelsMeasured: 0,
741
+ byKind: /* @__PURE__ */Object.create(null),
742
+ violations: [],
743
+ unverified: []
744
+ };
745
+ for (const sample of samples) {
746
+ result.byKind[sample.kind] = (result.byKind[sample.kind] ?? 0) + 1;
747
+ const unverified = (reason, key = sample.key, context = sample.context) => result.unverified.push({
748
+ key,
749
+ context,
750
+ reason
751
+ });
752
+ if (!["bar", "pie", "donut", "line", "area"].includes(sample.kind)) {
753
+ unverified("unknown-kind");
754
+ continue;
755
+ }
756
+ if (!sample.label.trim()) result.violations.push({
757
+ key: sample.key,
758
+ context: sample.context,
759
+ rule: "missing-label"
760
+ });
761
+ if (sample.unmeasurable) unverified(sample.unmeasurable);else if (!sample.backgroundResolved) unverified("unresolved-backdrop");
762
+ if (!sample.marks.length) unverified("no-marks");
763
+ for (const item of sample.unaccountedPaint ?? []) unverified("unsupported-paint", item.key, `${sample.context}: ${item.label}`);
764
+ if (!sample.datumText.declared || !sample.datumText.complete || sample.datumText.expected <= 0 || sample.datumText.observed !== sample.datumText.expected) unverified("incomplete-datum-text", sample.key, sample.datumText.failure ? `${sample.context}: ${sample.datumText.failure}` : sample.context);
765
+ const compare = (paint, background, key, context, rule, floor) => {
766
+ try {
767
+ const measured = measureContrast({
768
+ foreground: paint,
769
+ background,
770
+ floor,
771
+ label: key
772
+ });
773
+ if (!measured.pass) result.violations.push({
774
+ key,
775
+ context,
776
+ rule,
777
+ paint: measured.foreground,
778
+ background: measured.background,
779
+ ratio: measured.ratio,
780
+ required: measured.floor
781
+ });
782
+ return true;
783
+ } catch {
784
+ unverified("unsupported-paint", key, context);
785
+ return false;
786
+ }
787
+ };
788
+ for (const mark of sample.marks) {
789
+ const context = `${sample.context}: ${mark.label}`;
790
+ if (mark.unmeasurable || !mark.paint) unverified(mark.unmeasurable ?? "no-paint", mark.key, context);else if (compare(mark.paint, mark.background, mark.key, context, "mark-backdrop", minContrastRatio)) result.marksMeasured++;
791
+ }
792
+ for (const label of sample.labels) {
793
+ const context = `${sample.context}: ${label.label}`;
794
+ if (label.unmeasurable || !label.paint) unverified(label.unmeasurable ?? "no-paint", label.key, context);else if (compare(label.paint, label.background, label.key, context, "axis-text", aaTextContrastRatio)) result.labelsMeasured++;
795
+ }
796
+ const separated = (sample.kind === "bar" && sample.separation.method === "rect-bounds" || (sample.kind === "pie" || sample.kind === "donut") && sample.separation.method === "eroded-arc") && Number.isFinite(sample.separation.minimumGapPx) && sample.separation.minimumGapPx >= 2;
797
+ if (sample.kind === "bar" && !separated) unverified("unverified-separation");
798
+ if (sample.kind === "pie" || sample.kind === "donut") {
799
+ if (sample.separation.declared && !separated) unverified("unverified-separation");
800
+ if (sample.marks.length > 1 && !separated) {
801
+ for (let i = 0; i < sample.marks.length; i++) {
802
+ const first = sample.marks[i];
803
+ const second = sample.marks[(i + 1) % sample.marks.length];
804
+ if (sample.marks.length === 2 && i === 1) continue;
805
+ if (first.paint && second.paint && !first.unmeasurable && !second.unmeasurable) compare(first.paint, second.paint, `${first.key}~${second.key}`, `${sample.context}: ${first.label} / ${second.label}`, "adjacent-pair", minContrastRatio);
806
+ }
807
+ }
808
+ }
809
+ if (!sample.unmeasurable && sample.backgroundResolved && sample.marks.length > 0 && sample.marks.every(mark => mark.paint && !mark.unmeasurable)) result.measured++;
810
+ }
811
+ result.ok = result.violations.length === 0 && result.unverified.length === 0;
812
+ return result;
813
+ }
814
+ function chartProofSignatures(result) {
815
+ return [...result.violations.map(item => `${item.key} (${item.context}) chart ${item.rule}${item.ratio === void 0 ? "" : ` ${item.paint} on ${item.background} = ${item.ratio}:1 (floor ${item.required})`}`), ...result.unverified.map(item => `${item.key} (${item.context}) chart UNVERIFIED: ${item.reason}`)];
816
+ }
817
+ function auditSignatures(violations) {
818
+ const out = [];
819
+ for (const element of violations) {
820
+ for (const violation of element.violations) out.push(`${element.key ? `[${element.key}] ` : ""}${element.label} :: ${violation}`);
821
+ }
822
+ return out;
823
+ }
824
+ function newEntries(before, after) {
825
+ const remaining = /* @__PURE__ */new Map();
826
+ for (const entry of before) remaining.set(entry, (remaining.get(entry) ?? 0) + 1);
827
+ const added = [];
828
+ for (const entry of after) {
829
+ const count = remaining.get(entry) ?? 0;
830
+ if (count > 0) remaining.set(entry, count - 1);else added.push(entry);
831
+ }
832
+ return added;
833
+ }
834
+ function offScaleIdentity(signature) {
835
+ return signature.replace(/-?\d+(?:\.\d+)?px/g, "#px").replace(/(inlineColor: \w+=)"[^"]*"/g, '$1"#colour"').replace(/\.font_[\w-]+/g, ".font_#family");
836
+ }
837
+ function newOffScaleEntries(before, after) {
838
+ const added = newEntries(before.map(offScaleIdentity), after.map(offScaleIdentity));
839
+ const pending = /* @__PURE__ */new Map();
840
+ for (const identity of added) pending.set(identity, (pending.get(identity) ?? 0) + 1);
841
+ const named = [];
842
+ for (const signature of after) {
843
+ const identity = offScaleIdentity(signature);
844
+ const count = pending.get(identity) ?? 0;
845
+ if (count === 0) continue;
846
+ pending.set(identity, count - 1);
847
+ named.push(signature);
848
+ }
849
+ return named;
850
+ }
851
+ const namedList = (entries, limit = 6) => {
852
+ if (entries.length === 0) return "";
853
+ const shown = entries.slice(0, limit).join("; ");
854
+ return entries.length > limit ? ` \u2014 new: ${shown}; \u2026 ${entries.length - limit} more` : ` \u2014 new: ${shown}`;
855
+ };
856
+ function evaluateNoBreakage(input) {
857
+ const failures = [];
858
+ if (!input.storyRendered) {
859
+ failures.push("story did not render (empty story root)");
860
+ }
861
+ const structuralAdded = input.offScaleSignatures && input.baselineOffScaleSignatures ? newOffScaleEntries(input.baselineOffScaleSignatures, input.offScaleSignatures) : [];
862
+ if (structuralAdded.length || input.offScaleViolations > input.baselineOffScaleViolations) {
863
+ failures.push(`constraint audit: ${input.offScaleViolations} off-scale violations (default cell has ${input.baselineOffScaleViolations})${namedList(structuralAdded)}`);
864
+ }
865
+ const signature = violation => `${violation.key} "${violation.text}" ${violation.color} on ${violation.background} = ${violation.ratio}:1 (floor ${violation.required})`;
866
+ const contrastAdded = input.baselineContrast ? newEntries(input.baselineContrast.violations.map(signature), input.contrast.violations.map(signature)) : [];
867
+ if (contrastAdded.length || input.contrast.violations.length > input.baselineContrastViolations) {
868
+ failures.push(`text contrast: ${input.contrast.violations.length} below-floor text nodes (default cell has ${input.baselineContrastViolations})${namedList(contrastAdded)}`);
869
+ }
870
+ if (input.icons === void 0 !== (input.baselineIcons === void 0)) {
871
+ failures.push("icon contrast: icons and baselineIcons must be supplied together");
872
+ } else if (input.icons && input.baselineIcons) {
873
+ const newIconFindings = newEntries(iconContrastSignatures(input.baselineIcons), iconContrastSignatures(input.icons));
874
+ if (newIconFindings.length > 0) {
875
+ failures.push(`icon contrast: ${newIconFindings.length} new findings${namedList(newIconFindings)}`);
876
+ }
877
+ }
878
+ if (input.charts === void 0 !== (input.baselineCharts === void 0)) {
879
+ failures.push("chart proof: charts and baselineCharts must be supplied together");
880
+ } else if (input.charts && input.baselineCharts) {
881
+ const added = newEntries(chartProofSignatures(input.baselineCharts), chartProofSignatures(input.charts));
882
+ if (added.length) failures.push(`chart proof: ${added.length} new findings${namedList(added)}`);
883
+ }
884
+ return {
885
+ ok: failures.length === 0,
886
+ failures
887
+ };
888
+ }
889
+ export { auditSignatures, captureMatrixSnapshot, chartProofSignatures, diffGeometry, evaluateChartProof, evaluateIconContrast, evaluateNoBreakage, evaluateTextContrast, iconContrastSignatures, offScaleIdentity };
890
+ //# sourceMappingURL=themeMatrix.mjs.map