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