@hanzogui/web 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1122) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/cjs/Gui.cjs +72 -0
  4. package/dist/cjs/Gui.native.js +112 -0
  5. package/dist/cjs/Gui.native.js.map +1 -0
  6. package/dist/cjs/_withStableStyle.cjs +65 -0
  7. package/dist/cjs/_withStableStyle.native.js +77 -0
  8. package/dist/cjs/_withStableStyle.native.js.map +1 -0
  9. package/dist/cjs/animationDriverTypes.test-d.cjs +60 -0
  10. package/dist/cjs/animationDriverTypes.test-d.native.js +63 -0
  11. package/dist/cjs/animationDriverTypes.test-d.native.js.map +1 -0
  12. package/dist/cjs/config.cjs +126 -0
  13. package/dist/cjs/config.native.js +157 -0
  14. package/dist/cjs/config.native.js.map +1 -0
  15. package/dist/cjs/constants/accessibilityDirectMap.cjs +34 -0
  16. package/dist/cjs/constants/accessibilityDirectMap.native.js +37 -0
  17. package/dist/cjs/constants/accessibilityDirectMap.native.js.map +1 -0
  18. package/dist/cjs/constants/constants.cjs +38 -0
  19. package/dist/cjs/constants/constants.native.js +41 -0
  20. package/dist/cjs/constants/constants.native.js.map +1 -0
  21. package/dist/cjs/constants/isDevTools.cjs +31 -0
  22. package/dist/cjs/constants/isDevTools.native.js +34 -0
  23. package/dist/cjs/constants/isDevTools.native.js.map +1 -0
  24. package/dist/cjs/contexts/ComponentContext.cjs +37 -0
  25. package/dist/cjs/contexts/ComponentContext.native.js +42 -0
  26. package/dist/cjs/contexts/ComponentContext.native.js.map +1 -0
  27. package/dist/cjs/contexts/GroupContext.cjs +27 -0
  28. package/dist/cjs/contexts/GroupContext.native.js +30 -0
  29. package/dist/cjs/contexts/GroupContext.native.js.map +1 -0
  30. package/dist/cjs/createComponent.cjs +782 -0
  31. package/dist/cjs/createComponent.native.js +829 -0
  32. package/dist/cjs/createComponent.native.js.map +1 -0
  33. package/dist/cjs/createFont.cjs +42 -0
  34. package/dist/cjs/createFont.native.js +50 -0
  35. package/dist/cjs/createFont.native.js.map +1 -0
  36. package/dist/cjs/createGui.cjs +235 -0
  37. package/dist/cjs/createGui.native.js +297 -0
  38. package/dist/cjs/createGui.native.js.map +1 -0
  39. package/dist/cjs/createShorthands.cjs +28 -0
  40. package/dist/cjs/createShorthands.native.js +31 -0
  41. package/dist/cjs/createShorthands.native.js.map +1 -0
  42. package/dist/cjs/createTokens.cjs +29 -0
  43. package/dist/cjs/createTokens.native.js +33 -0
  44. package/dist/cjs/createTokens.native.js.map +1 -0
  45. package/dist/cjs/createVariable.cjs +96 -0
  46. package/dist/cjs/createVariable.native.js +116 -0
  47. package/dist/cjs/createVariable.native.js.map +1 -0
  48. package/dist/cjs/createVariables.cjs +68 -0
  49. package/dist/cjs/createVariables.native.js +77 -0
  50. package/dist/cjs/createVariables.native.js.map +1 -0
  51. package/dist/cjs/defaultComponentState.cjs +45 -0
  52. package/dist/cjs/defaultComponentState.native.js +48 -0
  53. package/dist/cjs/defaultComponentState.native.js.map +1 -0
  54. package/dist/cjs/eventHandling.cjs +46 -0
  55. package/dist/cjs/eventHandling.native.js +153 -0
  56. package/dist/cjs/eventHandling.native.js.map +1 -0
  57. package/dist/cjs/helpers/consoleLog.native.js +31 -0
  58. package/dist/cjs/helpers/consoleLog.native.js.map +1 -0
  59. package/dist/cjs/helpers/createDesignSystem.cjs +184 -0
  60. package/dist/cjs/helpers/createDesignSystem.native.js +235 -0
  61. package/dist/cjs/helpers/createDesignSystem.native.js.map +1 -0
  62. package/dist/cjs/helpers/createMediaStyle.cjs +100 -0
  63. package/dist/cjs/helpers/createMediaStyle.native.js +114 -0
  64. package/dist/cjs/helpers/createMediaStyle.native.js.map +1 -0
  65. package/dist/cjs/helpers/createStyledContext.cjs +82 -0
  66. package/dist/cjs/helpers/createStyledContext.native.js +93 -0
  67. package/dist/cjs/helpers/createStyledContext.native.js.map +1 -0
  68. package/dist/cjs/helpers/defaultAnimationDriver.cjs +42 -0
  69. package/dist/cjs/helpers/defaultAnimationDriver.native.js +59 -0
  70. package/dist/cjs/helpers/defaultAnimationDriver.native.js.map +1 -0
  71. package/dist/cjs/helpers/defaultOffset.cjs +29 -0
  72. package/dist/cjs/helpers/defaultOffset.native.js +32 -0
  73. package/dist/cjs/helpers/defaultOffset.native.js.map +1 -0
  74. package/dist/cjs/helpers/expandStyle.cjs +67 -0
  75. package/dist/cjs/helpers/expandStyle.native.js +162 -0
  76. package/dist/cjs/helpers/expandStyle.native.js.map +1 -0
  77. package/dist/cjs/helpers/expandStyles.cjs +40 -0
  78. package/dist/cjs/helpers/expandStyles.native.js +45 -0
  79. package/dist/cjs/helpers/expandStyles.native.js.map +1 -0
  80. package/dist/cjs/helpers/getCSSStylesAtomic.cjs +179 -0
  81. package/dist/cjs/helpers/getCSSStylesAtomic.native.js +36 -0
  82. package/dist/cjs/helpers/getCSSStylesAtomic.native.js.map +1 -0
  83. package/dist/cjs/helpers/getDefaultProps.cjs +38 -0
  84. package/dist/cjs/helpers/getDefaultProps.native.js +42 -0
  85. package/dist/cjs/helpers/getDefaultProps.native.js.map +1 -0
  86. package/dist/cjs/helpers/getDynamicVal.cjs +67 -0
  87. package/dist/cjs/helpers/getDynamicVal.native.js +71 -0
  88. package/dist/cjs/helpers/getDynamicVal.native.js.map +1 -0
  89. package/dist/cjs/helpers/getExpandedShorthands.cjs +38 -0
  90. package/dist/cjs/helpers/getExpandedShorthands.native.js +42 -0
  91. package/dist/cjs/helpers/getExpandedShorthands.native.js.map +1 -0
  92. package/dist/cjs/helpers/getFontLanguage.cjs +26 -0
  93. package/dist/cjs/helpers/getFontLanguage.native.js +31 -0
  94. package/dist/cjs/helpers/getFontLanguage.native.js.map +1 -0
  95. package/dist/cjs/helpers/getGroupPropParts.cjs +45 -0
  96. package/dist/cjs/helpers/getGroupPropParts.native.js +50 -0
  97. package/dist/cjs/helpers/getGroupPropParts.native.js.map +1 -0
  98. package/dist/cjs/helpers/getShorthandValue.cjs +28 -0
  99. package/dist/cjs/helpers/getShorthandValue.native.js +35 -0
  100. package/dist/cjs/helpers/getShorthandValue.native.js.map +1 -0
  101. package/dist/cjs/helpers/getSplitStyles.cjs +697 -0
  102. package/dist/cjs/helpers/getSplitStyles.native.js +810 -0
  103. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -0
  104. package/dist/cjs/helpers/getThemeCSSRules.cjs +128 -0
  105. package/dist/cjs/helpers/getThemeCSSRules.native.js +31 -0
  106. package/dist/cjs/helpers/getThemeCSSRules.native.js.map +1 -0
  107. package/dist/cjs/helpers/getTokenForKey.cjs +127 -0
  108. package/dist/cjs/helpers/getTokenForKey.native.js +145 -0
  109. package/dist/cjs/helpers/getTokenForKey.native.js.map +1 -0
  110. package/dist/cjs/helpers/getVariantExtras.cjs +69 -0
  111. package/dist/cjs/helpers/getVariantExtras.native.js +73 -0
  112. package/dist/cjs/helpers/getVariantExtras.native.js.map +1 -0
  113. package/dist/cjs/helpers/insertStyleRule.cjs +199 -0
  114. package/dist/cjs/helpers/insertStyleRule.native.js +315 -0
  115. package/dist/cjs/helpers/insertStyleRule.native.js.map +1 -0
  116. package/dist/cjs/helpers/isActivePlatform.cjs +36 -0
  117. package/dist/cjs/helpers/isActivePlatform.native.js +39 -0
  118. package/dist/cjs/helpers/isActivePlatform.native.js.map +1 -0
  119. package/dist/cjs/helpers/isActiveTheme.cjs +28 -0
  120. package/dist/cjs/helpers/isActiveTheme.native.js +31 -0
  121. package/dist/cjs/helpers/isActiveTheme.native.js.map +1 -0
  122. package/dist/cjs/helpers/isGuiComponent.cjs +29 -0
  123. package/dist/cjs/helpers/isGuiComponent.native.js +32 -0
  124. package/dist/cjs/helpers/isGuiComponent.native.js.map +1 -0
  125. package/dist/cjs/helpers/isGuiElement.cjs +39 -0
  126. package/dist/cjs/helpers/isGuiElement.native.js +44 -0
  127. package/dist/cjs/helpers/isGuiElement.native.js.map +1 -0
  128. package/dist/cjs/helpers/isObj.cjs +26 -0
  129. package/dist/cjs/helpers/isObj.native.js +36 -0
  130. package/dist/cjs/helpers/isObj.native.js.map +1 -0
  131. package/dist/cjs/helpers/log.cjs +38 -0
  132. package/dist/cjs/helpers/log.native.js +42 -0
  133. package/dist/cjs/helpers/log.native.js.map +1 -0
  134. package/dist/cjs/helpers/mainThreadPressEvents.cjs +26 -0
  135. package/dist/cjs/helpers/mainThreadPressEvents.native.js +48 -0
  136. package/dist/cjs/helpers/mainThreadPressEvents.native.js.map +1 -0
  137. package/dist/cjs/helpers/matchMedia.cjs +36 -0
  138. package/dist/cjs/helpers/matchMedia.native.js +47 -0
  139. package/dist/cjs/helpers/matchMedia.native.js.map +1 -0
  140. package/dist/cjs/helpers/mediaObjectToString.cjs +35 -0
  141. package/dist/cjs/helpers/mediaObjectToString.native.js +43 -0
  142. package/dist/cjs/helpers/mediaObjectToString.native.js.map +1 -0
  143. package/dist/cjs/helpers/mediaState.cjs +45 -0
  144. package/dist/cjs/helpers/mediaState.native.js +50 -0
  145. package/dist/cjs/helpers/mediaState.native.js.map +1 -0
  146. package/dist/cjs/helpers/mergeProps.cjs +55 -0
  147. package/dist/cjs/helpers/mergeProps.native.js +62 -0
  148. package/dist/cjs/helpers/mergeProps.native.js.map +1 -0
  149. package/dist/cjs/helpers/mergeRenderElementProps.cjs +32 -0
  150. package/dist/cjs/helpers/mergeRenderElementProps.native.js +35 -0
  151. package/dist/cjs/helpers/mergeRenderElementProps.native.js.map +1 -0
  152. package/dist/cjs/helpers/mergeSlotStyleProps.cjs +39 -0
  153. package/dist/cjs/helpers/mergeSlotStyleProps.native.js +42 -0
  154. package/dist/cjs/helpers/mergeSlotStyleProps.native.js.map +1 -0
  155. package/dist/cjs/helpers/mergeVariants.cjs +40 -0
  156. package/dist/cjs/helpers/mergeVariants.native.js +44 -0
  157. package/dist/cjs/helpers/mergeVariants.native.js.map +1 -0
  158. package/dist/cjs/helpers/nativeOnlyProps.cjs +60 -0
  159. package/dist/cjs/helpers/nativeOnlyProps.native.js +63 -0
  160. package/dist/cjs/helpers/nativeOnlyProps.native.js.map +1 -0
  161. package/dist/cjs/helpers/normalizeColor.cjs +35 -0
  162. package/dist/cjs/helpers/normalizeColor.native.js +50 -0
  163. package/dist/cjs/helpers/normalizeColor.native.js.map +1 -0
  164. package/dist/cjs/helpers/normalizeShadow.cjs +48 -0
  165. package/dist/cjs/helpers/normalizeShadow.native.js +52 -0
  166. package/dist/cjs/helpers/normalizeShadow.native.js.map +1 -0
  167. package/dist/cjs/helpers/normalizeStyle.cjs +47 -0
  168. package/dist/cjs/helpers/normalizeStyle.native.js +52 -0
  169. package/dist/cjs/helpers/normalizeStyle.native.js.map +1 -0
  170. package/dist/cjs/helpers/normalizeStylePropKeys.cjs +26 -0
  171. package/dist/cjs/helpers/normalizeStylePropKeys.native.js +40 -0
  172. package/dist/cjs/helpers/normalizeStylePropKeys.native.js.map +1 -0
  173. package/dist/cjs/helpers/normalizeValueWithProperty.cjs +38 -0
  174. package/dist/cjs/helpers/normalizeValueWithProperty.native.js +47 -0
  175. package/dist/cjs/helpers/normalizeValueWithProperty.native.js.map +1 -0
  176. package/dist/cjs/helpers/objectIdentityKey.cjs +39 -0
  177. package/dist/cjs/helpers/objectIdentityKey.native.js +47 -0
  178. package/dist/cjs/helpers/objectIdentityKey.native.js.map +1 -0
  179. package/dist/cjs/helpers/parseBorderShorthand.cjs +26 -0
  180. package/dist/cjs/helpers/parseBorderShorthand.native.js +58 -0
  181. package/dist/cjs/helpers/parseBorderShorthand.native.js.map +1 -0
  182. package/dist/cjs/helpers/parseNativeStyle.cjs +133 -0
  183. package/dist/cjs/helpers/parseNativeStyle.native.js +151 -0
  184. package/dist/cjs/helpers/parseNativeStyle.native.js.map +1 -0
  185. package/dist/cjs/helpers/parseOutlineShorthand.cjs +26 -0
  186. package/dist/cjs/helpers/parseOutlineShorthand.native.js +58 -0
  187. package/dist/cjs/helpers/parseOutlineShorthand.native.js.map +1 -0
  188. package/dist/cjs/helpers/platformResolveValue.cjs +33 -0
  189. package/dist/cjs/helpers/platformResolveValue.native.js +62 -0
  190. package/dist/cjs/helpers/platformResolveValue.native.js.map +1 -0
  191. package/dist/cjs/helpers/pointerEvents.cjs +26 -0
  192. package/dist/cjs/helpers/pointerEvents.native.js +120 -0
  193. package/dist/cjs/helpers/pointerEvents.native.js.map +1 -0
  194. package/dist/cjs/helpers/propMapper.cjs +203 -0
  195. package/dist/cjs/helpers/propMapper.native.js +295 -0
  196. package/dist/cjs/helpers/propMapper.native.js.map +1 -0
  197. package/dist/cjs/helpers/proxyThemeToParents.cjs +49 -0
  198. package/dist/cjs/helpers/proxyThemeToParents.native.js +132 -0
  199. package/dist/cjs/helpers/proxyThemeToParents.native.js.map +1 -0
  200. package/dist/cjs/helpers/proxyThemeVariables.cjs +36 -0
  201. package/dist/cjs/helpers/proxyThemeVariables.native.js +41 -0
  202. package/dist/cjs/helpers/proxyThemeVariables.native.js.map +1 -0
  203. package/dist/cjs/helpers/pseudoDescriptors.cjs +80 -0
  204. package/dist/cjs/helpers/pseudoDescriptors.native.js +83 -0
  205. package/dist/cjs/helpers/pseudoDescriptors.native.js.map +1 -0
  206. package/dist/cjs/helpers/pseudoTransitions.cjs +65 -0
  207. package/dist/cjs/helpers/pseudoTransitions.native.js +72 -0
  208. package/dist/cjs/helpers/pseudoTransitions.native.js.map +1 -0
  209. package/dist/cjs/helpers/registerCSSVariable.cjs +64 -0
  210. package/dist/cjs/helpers/registerCSSVariable.native.js +70 -0
  211. package/dist/cjs/helpers/registerCSSVariable.native.js.map +1 -0
  212. package/dist/cjs/helpers/resolveAnimationDriver.cjs +28 -0
  213. package/dist/cjs/helpers/resolveAnimationDriver.native.js +32 -0
  214. package/dist/cjs/helpers/resolveAnimationDriver.native.js.map +1 -0
  215. package/dist/cjs/helpers/resolveCompoundTokens.cjs +37 -0
  216. package/dist/cjs/helpers/resolveCompoundTokens.native.js +40 -0
  217. package/dist/cjs/helpers/resolveCompoundTokens.native.js.map +1 -0
  218. package/dist/cjs/helpers/resolveRem.cjs +32 -0
  219. package/dist/cjs/helpers/resolveRem.native.js +50 -0
  220. package/dist/cjs/helpers/resolveRem.native.js.map +1 -0
  221. package/dist/cjs/helpers/resolveSafeArea.cjs +34 -0
  222. package/dist/cjs/helpers/resolveSafeArea.native.js +42 -0
  223. package/dist/cjs/helpers/resolveSafeArea.native.js.map +1 -0
  224. package/dist/cjs/helpers/setElementProps.cjs +29 -0
  225. package/dist/cjs/helpers/setElementProps.native.js +33 -0
  226. package/dist/cjs/helpers/setElementProps.native.js.map +1 -0
  227. package/dist/cjs/helpers/skipProps.cjs +45 -0
  228. package/dist/cjs/helpers/skipProps.native.js +48 -0
  229. package/dist/cjs/helpers/skipProps.native.js.map +1 -0
  230. package/dist/cjs/helpers/sortString.cjs +26 -0
  231. package/dist/cjs/helpers/sortString.native.js +31 -0
  232. package/dist/cjs/helpers/sortString.native.js.map +1 -0
  233. package/dist/cjs/helpers/subscribeToContextGroup.cjs +81 -0
  234. package/dist/cjs/helpers/subscribeToContextGroup.native.js +131 -0
  235. package/dist/cjs/helpers/subscribeToContextGroup.native.js.map +1 -0
  236. package/dist/cjs/helpers/themeable.cjs +87 -0
  237. package/dist/cjs/helpers/themeable.native.js +93 -0
  238. package/dist/cjs/helpers/themeable.native.js.map +1 -0
  239. package/dist/cjs/helpers/themes.cjs +38 -0
  240. package/dist/cjs/helpers/themes.native.js +41 -0
  241. package/dist/cjs/helpers/themes.native.js.map +1 -0
  242. package/dist/cjs/helpers/timer.cjs +32 -0
  243. package/dist/cjs/helpers/timer.native.js +35 -0
  244. package/dist/cjs/helpers/timer.native.js.map +1 -0
  245. package/dist/cjs/helpers/transformsToString.cjs +38 -0
  246. package/dist/cjs/helpers/transformsToString.native.js +41 -0
  247. package/dist/cjs/helpers/transformsToString.native.js.map +1 -0
  248. package/dist/cjs/helpers/useRenderElement.cjs +48 -0
  249. package/dist/cjs/helpers/useRenderElement.native.js +52 -0
  250. package/dist/cjs/helpers/useRenderElement.native.js.map +1 -0
  251. package/dist/cjs/helpers/webPropsToSkip.cjs +26 -0
  252. package/dist/cjs/helpers/webPropsToSkip.native.js +76 -0
  253. package/dist/cjs/helpers/webPropsToSkip.native.js.map +1 -0
  254. package/dist/cjs/helpers/wrapStyleTags.cjs +41 -0
  255. package/dist/cjs/helpers/wrapStyleTags.native.js +31 -0
  256. package/dist/cjs/helpers/wrapStyleTags.native.js.map +1 -0
  257. package/dist/cjs/hooks/doesRootSchemeMatchSystem.cjs +28 -0
  258. package/dist/cjs/hooks/doesRootSchemeMatchSystem.native.js +34 -0
  259. package/dist/cjs/hooks/doesRootSchemeMatchSystem.native.js.map +1 -0
  260. package/dist/cjs/hooks/getThemeProxied.cjs +60 -0
  261. package/dist/cjs/hooks/getThemeProxied.native.js +93 -0
  262. package/dist/cjs/hooks/getThemeProxied.native.js.map +1 -0
  263. package/dist/cjs/hooks/useComponentState.cjs +144 -0
  264. package/dist/cjs/hooks/useComponentState.native.js +165 -0
  265. package/dist/cjs/hooks/useComponentState.native.js.map +1 -0
  266. package/dist/cjs/hooks/useDisableSSR.cjs +29 -0
  267. package/dist/cjs/hooks/useDisableSSR.native.js +33 -0
  268. package/dist/cjs/hooks/useDisableSSR.native.js.map +1 -0
  269. package/dist/cjs/hooks/useIsTouchDevice.cjs +28 -0
  270. package/dist/cjs/hooks/useIsTouchDevice.native.js +33 -0
  271. package/dist/cjs/hooks/useIsTouchDevice.native.js.map +1 -0
  272. package/dist/cjs/hooks/useMedia.cjs +180 -0
  273. package/dist/cjs/hooks/useMedia.native.js +215 -0
  274. package/dist/cjs/hooks/useMedia.native.js.map +1 -0
  275. package/dist/cjs/hooks/useProps.cjs +114 -0
  276. package/dist/cjs/hooks/useProps.native.js +119 -0
  277. package/dist/cjs/hooks/useProps.native.js.map +1 -0
  278. package/dist/cjs/hooks/useTheme.cjs +46 -0
  279. package/dist/cjs/hooks/useTheme.native.js +53 -0
  280. package/dist/cjs/hooks/useTheme.native.js.map +1 -0
  281. package/dist/cjs/hooks/useThemeName.cjs +37 -0
  282. package/dist/cjs/hooks/useThemeName.native.js +43 -0
  283. package/dist/cjs/hooks/useThemeName.native.js.map +1 -0
  284. package/dist/cjs/hooks/useThemeState.cjs +274 -0
  285. package/dist/cjs/hooks/useThemeState.native.js +387 -0
  286. package/dist/cjs/hooks/useThemeState.native.js.map +1 -0
  287. package/dist/cjs/index.cjs +120 -0
  288. package/dist/cjs/index.native.js +123 -0
  289. package/dist/cjs/index.native.js.map +1 -0
  290. package/dist/cjs/inject-styles.cjs +37 -0
  291. package/dist/cjs/inject-styles.native.js +41 -0
  292. package/dist/cjs/inject-styles.native.js.map +1 -0
  293. package/dist/cjs/insertFont.cjs +75 -0
  294. package/dist/cjs/insertFont.native.js +76 -0
  295. package/dist/cjs/insertFont.native.js.map +1 -0
  296. package/dist/cjs/interfaces/CSSColorNames.cjs +16 -0
  297. package/dist/cjs/interfaces/CSSColorNames.native.js +19 -0
  298. package/dist/cjs/interfaces/CSSColorNames.native.js.map +1 -0
  299. package/dist/cjs/interfaces/GetRef.cjs +16 -0
  300. package/dist/cjs/interfaces/GetRef.native.js +19 -0
  301. package/dist/cjs/interfaces/GetRef.native.js.map +1 -0
  302. package/dist/cjs/interfaces/GuiComponentEvents.cjs +16 -0
  303. package/dist/cjs/interfaces/GuiComponentEvents.native.js +19 -0
  304. package/dist/cjs/interfaces/GuiComponentEvents.native.js.map +1 -0
  305. package/dist/cjs/interfaces/GuiComponentPropsBaseBase.cjs +16 -0
  306. package/dist/cjs/interfaces/GuiComponentPropsBaseBase.native.js +19 -0
  307. package/dist/cjs/interfaces/GuiComponentPropsBaseBase.native.js.map +1 -0
  308. package/dist/cjs/interfaces/RNExclusiveTypes.cjs +16 -0
  309. package/dist/cjs/interfaces/RNExclusiveTypes.native.js +19 -0
  310. package/dist/cjs/interfaces/RNExclusiveTypes.native.js.map +1 -0
  311. package/dist/cjs/setupHooks.cjs +30 -0
  312. package/dist/cjs/setupHooks.native.js +33 -0
  313. package/dist/cjs/setupHooks.native.js.map +1 -0
  314. package/dist/cjs/setupReactNative.cjs +47 -0
  315. package/dist/cjs/setupReactNative.native.js +54 -0
  316. package/dist/cjs/setupReactNative.native.js.map +1 -0
  317. package/dist/cjs/styled.cjs +115 -0
  318. package/dist/cjs/styled.native.js +127 -0
  319. package/dist/cjs/styled.native.js.map +1 -0
  320. package/dist/cjs/styledHtml.test-d.cjs +156 -0
  321. package/dist/cjs/styledHtml.test-d.native.js +159 -0
  322. package/dist/cjs/styledHtml.test-d.native.js.map +1 -0
  323. package/dist/cjs/type-utils.cjs +16 -0
  324. package/dist/cjs/type-utils.native.js +19 -0
  325. package/dist/cjs/type-utils.native.js.map +1 -0
  326. package/dist/cjs/types.cjs +16 -0
  327. package/dist/cjs/types.native.js +19 -0
  328. package/dist/cjs/types.native.js.map +1 -0
  329. package/dist/cjs/views/Configuration.cjs +50 -0
  330. package/dist/cjs/views/Configuration.native.js +54 -0
  331. package/dist/cjs/views/Configuration.native.js.map +1 -0
  332. package/dist/cjs/views/FontLanguage.cjs +37 -0
  333. package/dist/cjs/views/FontLanguage.native.js +57 -0
  334. package/dist/cjs/views/FontLanguage.native.js.map +1 -0
  335. package/dist/cjs/views/GuiProvider.cjs +94 -0
  336. package/dist/cjs/views/GuiProvider.native.js +100 -0
  337. package/dist/cjs/views/GuiProvider.native.js.map +1 -0
  338. package/dist/cjs/views/GuiRoot.cjs +68 -0
  339. package/dist/cjs/views/GuiRoot.native.js +31 -0
  340. package/dist/cjs/views/GuiRoot.native.js.map +1 -0
  341. package/dist/cjs/views/Slot.cjs +64 -0
  342. package/dist/cjs/views/Slot.native.js +70 -0
  343. package/dist/cjs/views/Slot.native.js.map +1 -0
  344. package/dist/cjs/views/Text.cjs +58 -0
  345. package/dist/cjs/views/Text.native.js +52 -0
  346. package/dist/cjs/views/Text.native.js.map +1 -0
  347. package/dist/cjs/views/Theme.cjs +162 -0
  348. package/dist/cjs/views/Theme.native.js +174 -0
  349. package/dist/cjs/views/Theme.native.js.map +1 -0
  350. package/dist/cjs/views/ThemeDebug.cjs +77 -0
  351. package/dist/cjs/views/ThemeDebug.native.js +37 -0
  352. package/dist/cjs/views/ThemeDebug.native.js.map +1 -0
  353. package/dist/cjs/views/ThemeProvider.cjs +52 -0
  354. package/dist/cjs/views/ThemeProvider.native.js +48 -0
  355. package/dist/cjs/views/ThemeProvider.native.js.map +1 -0
  356. package/dist/cjs/views/View.cjs +31 -0
  357. package/dist/cjs/views/View.native.js +34 -0
  358. package/dist/cjs/views/View.native.js.map +1 -0
  359. package/dist/esm/Gui.mjs +36 -0
  360. package/dist/esm/Gui.mjs.map +1 -0
  361. package/dist/esm/Gui.native.js +73 -0
  362. package/dist/esm/Gui.native.js.map +1 -0
  363. package/dist/esm/_withStableStyle.mjs +31 -0
  364. package/dist/esm/_withStableStyle.mjs.map +1 -0
  365. package/dist/esm/_withStableStyle.native.js +40 -0
  366. package/dist/esm/_withStableStyle.native.js.map +1 -0
  367. package/dist/esm/animationDriverTypes.test-d.mjs +61 -0
  368. package/dist/esm/animationDriverTypes.test-d.mjs.map +1 -0
  369. package/dist/esm/animationDriverTypes.test-d.native.js +61 -0
  370. package/dist/esm/animationDriverTypes.test-d.native.js.map +1 -0
  371. package/dist/esm/config.mjs +87 -0
  372. package/dist/esm/config.mjs.map +1 -0
  373. package/dist/esm/config.native.js +115 -0
  374. package/dist/esm/config.native.js.map +1 -0
  375. package/dist/esm/constants/accessibilityDirectMap.mjs +7 -0
  376. package/dist/esm/constants/accessibilityDirectMap.mjs.map +1 -0
  377. package/dist/esm/constants/accessibilityDirectMap.native.js +7 -0
  378. package/dist/esm/constants/accessibilityDirectMap.native.js.map +1 -0
  379. package/dist/esm/constants/constants.mjs +12 -0
  380. package/dist/esm/constants/constants.mjs.map +1 -0
  381. package/dist/esm/constants/constants.native.js +12 -0
  382. package/dist/esm/constants/constants.native.js.map +1 -0
  383. package/dist/esm/constants/isDevTools.mjs +8 -0
  384. package/dist/esm/constants/isDevTools.mjs.map +1 -0
  385. package/dist/esm/constants/isDevTools.native.js +8 -0
  386. package/dist/esm/constants/isDevTools.native.js.map +1 -0
  387. package/dist/esm/contexts/ComponentContext.mjs +13 -0
  388. package/dist/esm/contexts/ComponentContext.mjs.map +1 -0
  389. package/dist/esm/contexts/ComponentContext.native.js +15 -0
  390. package/dist/esm/contexts/ComponentContext.native.js.map +1 -0
  391. package/dist/esm/contexts/GroupContext.mjs +4 -0
  392. package/dist/esm/contexts/GroupContext.mjs.map +1 -0
  393. package/dist/esm/contexts/GroupContext.native.js +4 -0
  394. package/dist/esm/contexts/GroupContext.native.js.map +1 -0
  395. package/dist/esm/createComponent.mjs +746 -0
  396. package/dist/esm/createComponent.mjs.map +1 -0
  397. package/dist/esm/createComponent.native.js +790 -0
  398. package/dist/esm/createComponent.native.js.map +1 -0
  399. package/dist/esm/createFont.mjs +19 -0
  400. package/dist/esm/createFont.mjs.map +1 -0
  401. package/dist/esm/createFont.native.js +24 -0
  402. package/dist/esm/createFont.native.js.map +1 -0
  403. package/dist/esm/createGui.mjs +212 -0
  404. package/dist/esm/createGui.mjs.map +1 -0
  405. package/dist/esm/createGui.native.js +271 -0
  406. package/dist/esm/createGui.native.js.map +1 -0
  407. package/dist/esm/createShorthands.mjs +5 -0
  408. package/dist/esm/createShorthands.mjs.map +1 -0
  409. package/dist/esm/createShorthands.native.js +5 -0
  410. package/dist/esm/createShorthands.native.js.map +1 -0
  411. package/dist/esm/createTokens.mjs +6 -0
  412. package/dist/esm/createTokens.mjs.map +1 -0
  413. package/dist/esm/createTokens.native.js +7 -0
  414. package/dist/esm/createTokens.native.js.map +1 -0
  415. package/dist/esm/createVariable.mjs +63 -0
  416. package/dist/esm/createVariable.mjs.map +1 -0
  417. package/dist/esm/createVariable.native.js +80 -0
  418. package/dist/esm/createVariable.native.js.map +1 -0
  419. package/dist/esm/createVariables.mjs +45 -0
  420. package/dist/esm/createVariables.mjs.map +1 -0
  421. package/dist/esm/createVariables.native.js +51 -0
  422. package/dist/esm/createVariables.native.js.map +1 -0
  423. package/dist/esm/defaultComponentState.mjs +20 -0
  424. package/dist/esm/defaultComponentState.mjs.map +1 -0
  425. package/dist/esm/defaultComponentState.native.js +20 -0
  426. package/dist/esm/defaultComponentState.native.js.map +1 -0
  427. package/dist/esm/eventHandling.mjs +21 -0
  428. package/dist/esm/eventHandling.mjs.map +1 -0
  429. package/dist/esm/eventHandling.native.js +114 -0
  430. package/dist/esm/eventHandling.native.js.map +1 -0
  431. package/dist/esm/helpers/consoleLog.native.js +4 -0
  432. package/dist/esm/helpers/consoleLog.native.js.map +1 -0
  433. package/dist/esm/helpers/createDesignSystem.mjs +156 -0
  434. package/dist/esm/helpers/createDesignSystem.mjs.map +1 -0
  435. package/dist/esm/helpers/createDesignSystem.native.js +203 -0
  436. package/dist/esm/helpers/createDesignSystem.native.js.map +1 -0
  437. package/dist/esm/helpers/createMediaStyle.mjs +75 -0
  438. package/dist/esm/helpers/createMediaStyle.mjs.map +1 -0
  439. package/dist/esm/helpers/createMediaStyle.native.js +86 -0
  440. package/dist/esm/helpers/createMediaStyle.native.js.map +1 -0
  441. package/dist/esm/helpers/createStyledContext.mjs +48 -0
  442. package/dist/esm/helpers/createStyledContext.mjs.map +1 -0
  443. package/dist/esm/helpers/createStyledContext.native.js +56 -0
  444. package/dist/esm/helpers/createStyledContext.native.js.map +1 -0
  445. package/dist/esm/helpers/defaultAnimationDriver.mjs +19 -0
  446. package/dist/esm/helpers/defaultAnimationDriver.mjs.map +1 -0
  447. package/dist/esm/helpers/defaultAnimationDriver.native.js +33 -0
  448. package/dist/esm/helpers/defaultAnimationDriver.native.js.map +1 -0
  449. package/dist/esm/helpers/defaultOffset.mjs +6 -0
  450. package/dist/esm/helpers/defaultOffset.mjs.map +1 -0
  451. package/dist/esm/helpers/defaultOffset.native.js +6 -0
  452. package/dist/esm/helpers/defaultOffset.native.js.map +1 -0
  453. package/dist/esm/helpers/expandStyle.mjs +42 -0
  454. package/dist/esm/helpers/expandStyle.mjs.map +1 -0
  455. package/dist/esm/helpers/expandStyle.native.js +135 -0
  456. package/dist/esm/helpers/expandStyle.native.js.map +1 -0
  457. package/dist/esm/helpers/expandStyles.mjs +17 -0
  458. package/dist/esm/helpers/expandStyles.mjs.map +1 -0
  459. package/dist/esm/helpers/expandStyles.native.js +19 -0
  460. package/dist/esm/helpers/expandStyles.native.js.map +1 -0
  461. package/dist/esm/helpers/getCSSStylesAtomic.mjs +154 -0
  462. package/dist/esm/helpers/getCSSStylesAtomic.mjs.map +1 -0
  463. package/dist/esm/helpers/getCSSStylesAtomic.native.js +8 -0
  464. package/dist/esm/helpers/getCSSStylesAtomic.native.js.map +1 -0
  465. package/dist/esm/helpers/getDefaultProps.mjs +15 -0
  466. package/dist/esm/helpers/getDefaultProps.mjs.map +1 -0
  467. package/dist/esm/helpers/getDefaultProps.native.js +16 -0
  468. package/dist/esm/helpers/getDefaultProps.native.js.map +1 -0
  469. package/dist/esm/helpers/getDynamicVal.mjs +41 -0
  470. package/dist/esm/helpers/getDynamicVal.mjs.map +1 -0
  471. package/dist/esm/helpers/getDynamicVal.native.js +42 -0
  472. package/dist/esm/helpers/getDynamicVal.native.js.map +1 -0
  473. package/dist/esm/helpers/getExpandedShorthands.mjs +14 -0
  474. package/dist/esm/helpers/getExpandedShorthands.mjs.map +1 -0
  475. package/dist/esm/helpers/getExpandedShorthands.native.js +15 -0
  476. package/dist/esm/helpers/getExpandedShorthands.native.js.map +1 -0
  477. package/dist/esm/helpers/getFontLanguage.mjs +3 -0
  478. package/dist/esm/helpers/getFontLanguage.mjs.map +1 -0
  479. package/dist/esm/helpers/getFontLanguage.native.js +5 -0
  480. package/dist/esm/helpers/getFontLanguage.native.js.map +1 -0
  481. package/dist/esm/helpers/getGroupPropParts.mjs +22 -0
  482. package/dist/esm/helpers/getGroupPropParts.mjs.map +1 -0
  483. package/dist/esm/helpers/getGroupPropParts.native.js +24 -0
  484. package/dist/esm/helpers/getGroupPropParts.native.js.map +1 -0
  485. package/dist/esm/helpers/getShorthandValue.mjs +5 -0
  486. package/dist/esm/helpers/getShorthandValue.mjs.map +1 -0
  487. package/dist/esm/helpers/getShorthandValue.native.js +9 -0
  488. package/dist/esm/helpers/getShorthandValue.native.js.map +1 -0
  489. package/dist/esm/helpers/getSplitStyles.mjs +658 -0
  490. package/dist/esm/helpers/getSplitStyles.mjs.map +1 -0
  491. package/dist/esm/helpers/getSplitStyles.native.js +768 -0
  492. package/dist/esm/helpers/getSplitStyles.native.js.map +1 -0
  493. package/dist/esm/helpers/getThemeCSSRules.mjs +105 -0
  494. package/dist/esm/helpers/getThemeCSSRules.mjs.map +1 -0
  495. package/dist/esm/helpers/getThemeCSSRules.native.js +5 -0
  496. package/dist/esm/helpers/getThemeCSSRules.native.js.map +1 -0
  497. package/dist/esm/helpers/getTokenForKey.mjs +101 -0
  498. package/dist/esm/helpers/getTokenForKey.mjs.map +1 -0
  499. package/dist/esm/helpers/getTokenForKey.native.js +116 -0
  500. package/dist/esm/helpers/getTokenForKey.native.js.map +1 -0
  501. package/dist/esm/helpers/getVariantExtras.mjs +45 -0
  502. package/dist/esm/helpers/getVariantExtras.mjs.map +1 -0
  503. package/dist/esm/helpers/getVariantExtras.native.js +46 -0
  504. package/dist/esm/helpers/getVariantExtras.native.js.map +1 -0
  505. package/dist/esm/helpers/insertStyleRule.mjs +169 -0
  506. package/dist/esm/helpers/insertStyleRule.mjs.map +1 -0
  507. package/dist/esm/helpers/insertStyleRule.native.js +282 -0
  508. package/dist/esm/helpers/insertStyleRule.native.js.map +1 -0
  509. package/dist/esm/helpers/isActivePlatform.mjs +13 -0
  510. package/dist/esm/helpers/isActivePlatform.mjs.map +1 -0
  511. package/dist/esm/helpers/isActivePlatform.native.js +13 -0
  512. package/dist/esm/helpers/isActivePlatform.native.js.map +1 -0
  513. package/dist/esm/helpers/isActiveTheme.mjs +5 -0
  514. package/dist/esm/helpers/isActiveTheme.mjs.map +1 -0
  515. package/dist/esm/helpers/isActiveTheme.native.js +5 -0
  516. package/dist/esm/helpers/isActiveTheme.native.js.map +1 -0
  517. package/dist/esm/helpers/isGuiComponent.mjs +6 -0
  518. package/dist/esm/helpers/isGuiComponent.mjs.map +1 -0
  519. package/dist/esm/helpers/isGuiComponent.native.js +6 -0
  520. package/dist/esm/helpers/isGuiComponent.native.js.map +1 -0
  521. package/dist/esm/helpers/isGuiElement.mjs +5 -0
  522. package/dist/esm/helpers/isGuiElement.mjs.map +1 -0
  523. package/dist/esm/helpers/isGuiElement.native.js +7 -0
  524. package/dist/esm/helpers/isGuiElement.native.js.map +1 -0
  525. package/dist/esm/helpers/isObj.mjs +3 -0
  526. package/dist/esm/helpers/isObj.mjs.map +1 -0
  527. package/dist/esm/helpers/isObj.native.js +10 -0
  528. package/dist/esm/helpers/isObj.native.js.map +1 -0
  529. package/dist/esm/helpers/log.mjs +15 -0
  530. package/dist/esm/helpers/log.mjs.map +1 -0
  531. package/dist/esm/helpers/log.native.js +16 -0
  532. package/dist/esm/helpers/log.native.js.map +1 -0
  533. package/dist/esm/helpers/mainThreadPressEvents.mjs +3 -0
  534. package/dist/esm/helpers/mainThreadPressEvents.mjs.map +1 -0
  535. package/dist/esm/helpers/mainThreadPressEvents.native.js +22 -0
  536. package/dist/esm/helpers/mainThreadPressEvents.native.js.map +1 -0
  537. package/dist/esm/helpers/matchMedia.mjs +12 -0
  538. package/dist/esm/helpers/matchMedia.mjs.map +1 -0
  539. package/dist/esm/helpers/matchMedia.native.js +20 -0
  540. package/dist/esm/helpers/matchMedia.native.js.map +1 -0
  541. package/dist/esm/helpers/mediaObjectToString.mjs +12 -0
  542. package/dist/esm/helpers/mediaObjectToString.mjs.map +1 -0
  543. package/dist/esm/helpers/mediaObjectToString.native.js +17 -0
  544. package/dist/esm/helpers/mediaObjectToString.native.js.map +1 -0
  545. package/dist/esm/helpers/mediaState.mjs +18 -0
  546. package/dist/esm/helpers/mediaState.mjs.map +1 -0
  547. package/dist/esm/helpers/mediaState.native.js +20 -0
  548. package/dist/esm/helpers/mediaState.native.js.map +1 -0
  549. package/dist/esm/helpers/mergeProps.mjs +31 -0
  550. package/dist/esm/helpers/mergeProps.mjs.map +1 -0
  551. package/dist/esm/helpers/mergeProps.native.js +35 -0
  552. package/dist/esm/helpers/mergeProps.native.js.map +1 -0
  553. package/dist/esm/helpers/mergeRenderElementProps.mjs +9 -0
  554. package/dist/esm/helpers/mergeRenderElementProps.mjs.map +1 -0
  555. package/dist/esm/helpers/mergeRenderElementProps.native.js +9 -0
  556. package/dist/esm/helpers/mergeRenderElementProps.native.js.map +1 -0
  557. package/dist/esm/helpers/mergeSlotStyleProps.mjs +16 -0
  558. package/dist/esm/helpers/mergeSlotStyleProps.mjs.map +1 -0
  559. package/dist/esm/helpers/mergeSlotStyleProps.native.js +16 -0
  560. package/dist/esm/helpers/mergeSlotStyleProps.native.js.map +1 -0
  561. package/dist/esm/helpers/mergeVariants.mjs +17 -0
  562. package/dist/esm/helpers/mergeVariants.mjs.map +1 -0
  563. package/dist/esm/helpers/mergeVariants.native.js +18 -0
  564. package/dist/esm/helpers/mergeVariants.native.js.map +1 -0
  565. package/dist/esm/helpers/nativeOnlyProps.mjs +37 -0
  566. package/dist/esm/helpers/nativeOnlyProps.mjs.map +1 -0
  567. package/dist/esm/helpers/nativeOnlyProps.native.js +37 -0
  568. package/dist/esm/helpers/nativeOnlyProps.native.js.map +1 -0
  569. package/dist/esm/helpers/normalizeColor.mjs +11 -0
  570. package/dist/esm/helpers/normalizeColor.mjs.map +1 -0
  571. package/dist/esm/helpers/normalizeColor.native.js +22 -0
  572. package/dist/esm/helpers/normalizeColor.native.js.map +1 -0
  573. package/dist/esm/helpers/normalizeShadow.mjs +25 -0
  574. package/dist/esm/helpers/normalizeShadow.mjs.map +1 -0
  575. package/dist/esm/helpers/normalizeShadow.native.js +26 -0
  576. package/dist/esm/helpers/normalizeShadow.native.js.map +1 -0
  577. package/dist/esm/helpers/normalizeStyle.mjs +24 -0
  578. package/dist/esm/helpers/normalizeStyle.mjs.map +1 -0
  579. package/dist/esm/helpers/normalizeStyle.native.js +26 -0
  580. package/dist/esm/helpers/normalizeStyle.native.js.map +1 -0
  581. package/dist/esm/helpers/normalizeStylePropKeys.mjs +3 -0
  582. package/dist/esm/helpers/normalizeStylePropKeys.mjs.map +1 -0
  583. package/dist/esm/helpers/normalizeStylePropKeys.native.js +14 -0
  584. package/dist/esm/helpers/normalizeStylePropKeys.native.js.map +1 -0
  585. package/dist/esm/helpers/normalizeValueWithProperty.mjs +15 -0
  586. package/dist/esm/helpers/normalizeValueWithProperty.mjs.map +1 -0
  587. package/dist/esm/helpers/normalizeValueWithProperty.native.js +21 -0
  588. package/dist/esm/helpers/normalizeValueWithProperty.native.js.map +1 -0
  589. package/dist/esm/helpers/objectIdentityKey.mjs +16 -0
  590. package/dist/esm/helpers/objectIdentityKey.mjs.map +1 -0
  591. package/dist/esm/helpers/objectIdentityKey.native.js +21 -0
  592. package/dist/esm/helpers/objectIdentityKey.native.js.map +1 -0
  593. package/dist/esm/helpers/parseBorderShorthand.mjs +3 -0
  594. package/dist/esm/helpers/parseBorderShorthand.mjs.map +1 -0
  595. package/dist/esm/helpers/parseBorderShorthand.native.js +32 -0
  596. package/dist/esm/helpers/parseBorderShorthand.native.js.map +1 -0
  597. package/dist/esm/helpers/parseNativeStyle.mjs +110 -0
  598. package/dist/esm/helpers/parseNativeStyle.mjs.map +1 -0
  599. package/dist/esm/helpers/parseNativeStyle.native.js +125 -0
  600. package/dist/esm/helpers/parseNativeStyle.native.js.map +1 -0
  601. package/dist/esm/helpers/parseOutlineShorthand.mjs +3 -0
  602. package/dist/esm/helpers/parseOutlineShorthand.mjs.map +1 -0
  603. package/dist/esm/helpers/parseOutlineShorthand.native.js +32 -0
  604. package/dist/esm/helpers/parseOutlineShorthand.native.js.map +1 -0
  605. package/dist/esm/helpers/platformResolveValue.mjs +10 -0
  606. package/dist/esm/helpers/platformResolveValue.mjs.map +1 -0
  607. package/dist/esm/helpers/platformResolveValue.native.js +36 -0
  608. package/dist/esm/helpers/platformResolveValue.native.js.map +1 -0
  609. package/dist/esm/helpers/pointerEvents.mjs +3 -0
  610. package/dist/esm/helpers/pointerEvents.mjs.map +1 -0
  611. package/dist/esm/helpers/pointerEvents.native.js +94 -0
  612. package/dist/esm/helpers/pointerEvents.native.js.map +1 -0
  613. package/dist/esm/helpers/propMapper.mjs +176 -0
  614. package/dist/esm/helpers/propMapper.mjs.map +1 -0
  615. package/dist/esm/helpers/propMapper.native.js +267 -0
  616. package/dist/esm/helpers/propMapper.native.js.map +1 -0
  617. package/dist/esm/helpers/proxyThemeToParents.mjs +25 -0
  618. package/dist/esm/helpers/proxyThemeToParents.mjs.map +1 -0
  619. package/dist/esm/helpers/proxyThemeToParents.native.js +105 -0
  620. package/dist/esm/helpers/proxyThemeToParents.native.js.map +1 -0
  621. package/dist/esm/helpers/proxyThemeVariables.mjs +13 -0
  622. package/dist/esm/helpers/proxyThemeVariables.mjs.map +1 -0
  623. package/dist/esm/helpers/proxyThemeVariables.native.js +15 -0
  624. package/dist/esm/helpers/proxyThemeVariables.native.js.map +1 -0
  625. package/dist/esm/helpers/pseudoDescriptors.mjs +54 -0
  626. package/dist/esm/helpers/pseudoDescriptors.mjs.map +1 -0
  627. package/dist/esm/helpers/pseudoDescriptors.native.js +54 -0
  628. package/dist/esm/helpers/pseudoDescriptors.native.js.map +1 -0
  629. package/dist/esm/helpers/pseudoTransitions.mjs +41 -0
  630. package/dist/esm/helpers/pseudoTransitions.mjs.map +1 -0
  631. package/dist/esm/helpers/pseudoTransitions.native.js +45 -0
  632. package/dist/esm/helpers/pseudoTransitions.native.js.map +1 -0
  633. package/dist/esm/helpers/registerCSSVariable.mjs +35 -0
  634. package/dist/esm/helpers/registerCSSVariable.mjs.map +1 -0
  635. package/dist/esm/helpers/registerCSSVariable.native.js +38 -0
  636. package/dist/esm/helpers/registerCSSVariable.native.js.map +1 -0
  637. package/dist/esm/helpers/resolveAnimationDriver.mjs +5 -0
  638. package/dist/esm/helpers/resolveAnimationDriver.mjs.map +1 -0
  639. package/dist/esm/helpers/resolveAnimationDriver.native.js +6 -0
  640. package/dist/esm/helpers/resolveAnimationDriver.native.js.map +1 -0
  641. package/dist/esm/helpers/resolveCompoundTokens.mjs +14 -0
  642. package/dist/esm/helpers/resolveCompoundTokens.mjs.map +1 -0
  643. package/dist/esm/helpers/resolveCompoundTokens.native.js +14 -0
  644. package/dist/esm/helpers/resolveCompoundTokens.native.js.map +1 -0
  645. package/dist/esm/helpers/resolveRem.mjs +8 -0
  646. package/dist/esm/helpers/resolveRem.mjs.map +1 -0
  647. package/dist/esm/helpers/resolveRem.native.js +23 -0
  648. package/dist/esm/helpers/resolveRem.native.js.map +1 -0
  649. package/dist/esm/helpers/resolveSafeArea.mjs +11 -0
  650. package/dist/esm/helpers/resolveSafeArea.mjs.map +1 -0
  651. package/dist/esm/helpers/resolveSafeArea.native.js +16 -0
  652. package/dist/esm/helpers/resolveSafeArea.native.js.map +1 -0
  653. package/dist/esm/helpers/setElementProps.mjs +6 -0
  654. package/dist/esm/helpers/setElementProps.mjs.map +1 -0
  655. package/dist/esm/helpers/setElementProps.native.js +7 -0
  656. package/dist/esm/helpers/setElementProps.native.js.map +1 -0
  657. package/dist/esm/helpers/skipProps.mjs +21 -0
  658. package/dist/esm/helpers/skipProps.mjs.map +1 -0
  659. package/dist/esm/helpers/skipProps.native.js +21 -0
  660. package/dist/esm/helpers/skipProps.native.js.map +1 -0
  661. package/dist/esm/helpers/sortString.mjs +3 -0
  662. package/dist/esm/helpers/sortString.mjs.map +1 -0
  663. package/dist/esm/helpers/sortString.native.js +5 -0
  664. package/dist/esm/helpers/sortString.native.js.map +1 -0
  665. package/dist/esm/helpers/subscribeToContextGroup.mjs +58 -0
  666. package/dist/esm/helpers/subscribeToContextGroup.mjs.map +1 -0
  667. package/dist/esm/helpers/subscribeToContextGroup.native.js +105 -0
  668. package/dist/esm/helpers/subscribeToContextGroup.native.js.map +1 -0
  669. package/dist/esm/helpers/themeable.mjs +54 -0
  670. package/dist/esm/helpers/themeable.mjs.map +1 -0
  671. package/dist/esm/helpers/themeable.native.js +56 -0
  672. package/dist/esm/helpers/themeable.native.js.map +1 -0
  673. package/dist/esm/helpers/themes.mjs +15 -0
  674. package/dist/esm/helpers/themes.mjs.map +1 -0
  675. package/dist/esm/helpers/themes.native.js +15 -0
  676. package/dist/esm/helpers/themes.native.js.map +1 -0
  677. package/dist/esm/helpers/timer.mjs +9 -0
  678. package/dist/esm/helpers/timer.mjs.map +1 -0
  679. package/dist/esm/helpers/timer.native.js +9 -0
  680. package/dist/esm/helpers/timer.native.js.map +1 -0
  681. package/dist/esm/helpers/transformsToString.mjs +15 -0
  682. package/dist/esm/helpers/transformsToString.mjs.map +1 -0
  683. package/dist/esm/helpers/transformsToString.native.js +15 -0
  684. package/dist/esm/helpers/transformsToString.native.js.map +1 -0
  685. package/dist/esm/helpers/useRenderElement.mjs +25 -0
  686. package/dist/esm/helpers/useRenderElement.mjs.map +1 -0
  687. package/dist/esm/helpers/useRenderElement.native.js +26 -0
  688. package/dist/esm/helpers/useRenderElement.native.js.map +1 -0
  689. package/dist/esm/helpers/webPropsToSkip.mjs +3 -0
  690. package/dist/esm/helpers/webPropsToSkip.mjs.map +1 -0
  691. package/dist/esm/helpers/webPropsToSkip.native.js +50 -0
  692. package/dist/esm/helpers/webPropsToSkip.native.js.map +1 -0
  693. package/dist/esm/helpers/wrapStyleTags.mjs +18 -0
  694. package/dist/esm/helpers/wrapStyleTags.mjs.map +1 -0
  695. package/dist/esm/helpers/wrapStyleTags.native.js +3 -0
  696. package/dist/esm/helpers/wrapStyleTags.native.js.map +1 -0
  697. package/dist/esm/hooks/doesRootSchemeMatchSystem.mjs +5 -0
  698. package/dist/esm/hooks/doesRootSchemeMatchSystem.mjs.map +1 -0
  699. package/dist/esm/hooks/doesRootSchemeMatchSystem.native.js +8 -0
  700. package/dist/esm/hooks/doesRootSchemeMatchSystem.native.js.map +1 -0
  701. package/dist/esm/hooks/getThemeProxied.mjs +34 -0
  702. package/dist/esm/hooks/getThemeProxied.mjs.map +1 -0
  703. package/dist/esm/hooks/getThemeProxied.native.js +67 -0
  704. package/dist/esm/hooks/getThemeProxied.native.js.map +1 -0
  705. package/dist/esm/hooks/useComponentState.mjs +121 -0
  706. package/dist/esm/hooks/useComponentState.mjs.map +1 -0
  707. package/dist/esm/hooks/useComponentState.native.js +139 -0
  708. package/dist/esm/hooks/useComponentState.native.js.map +1 -0
  709. package/dist/esm/hooks/useDisableSSR.mjs +6 -0
  710. package/dist/esm/hooks/useDisableSSR.mjs.map +1 -0
  711. package/dist/esm/hooks/useDisableSSR.native.js +7 -0
  712. package/dist/esm/hooks/useDisableSSR.native.js.map +1 -0
  713. package/dist/esm/hooks/useIsTouchDevice.mjs +5 -0
  714. package/dist/esm/hooks/useIsTouchDevice.mjs.map +1 -0
  715. package/dist/esm/hooks/useIsTouchDevice.native.js +7 -0
  716. package/dist/esm/hooks/useIsTouchDevice.native.js.map +1 -0
  717. package/dist/esm/hooks/useMedia.mjs +145 -0
  718. package/dist/esm/hooks/useMedia.mjs.map +1 -0
  719. package/dist/esm/hooks/useMedia.native.js +177 -0
  720. package/dist/esm/hooks/useMedia.native.js.map +1 -0
  721. package/dist/esm/hooks/useProps.mjs +78 -0
  722. package/dist/esm/hooks/useProps.mjs.map +1 -0
  723. package/dist/esm/hooks/useProps.native.js +80 -0
  724. package/dist/esm/hooks/useProps.native.js.map +1 -0
  725. package/dist/esm/hooks/useTheme.mjs +22 -0
  726. package/dist/esm/hooks/useTheme.mjs.map +1 -0
  727. package/dist/esm/hooks/useTheme.native.js +26 -0
  728. package/dist/esm/hooks/useTheme.native.js.map +1 -0
  729. package/dist/esm/hooks/useThemeName.mjs +14 -0
  730. package/dist/esm/hooks/useThemeName.mjs.map +1 -0
  731. package/dist/esm/hooks/useThemeName.native.js +17 -0
  732. package/dist/esm/hooks/useThemeName.native.js.map +1 -0
  733. package/dist/esm/hooks/useThemeState.mjs +245 -0
  734. package/dist/esm/hooks/useThemeState.mjs.map +1 -0
  735. package/dist/esm/hooks/useThemeState.native.js +356 -0
  736. package/dist/esm/hooks/useThemeState.native.js.map +1 -0
  737. package/dist/esm/index.js +74 -0
  738. package/dist/esm/index.js.map +1 -0
  739. package/dist/esm/index.mjs +74 -0
  740. package/dist/esm/index.mjs.map +1 -0
  741. package/dist/esm/index.native.js +74 -0
  742. package/dist/esm/index.native.js.map +1 -0
  743. package/dist/esm/inject-styles.mjs +14 -0
  744. package/dist/esm/inject-styles.mjs.map +1 -0
  745. package/dist/esm/inject-styles.native.js +15 -0
  746. package/dist/esm/inject-styles.native.js.map +1 -0
  747. package/dist/esm/insertFont.mjs +49 -0
  748. package/dist/esm/insertFont.mjs.map +1 -0
  749. package/dist/esm/insertFont.native.js +46 -0
  750. package/dist/esm/insertFont.native.js.map +1 -0
  751. package/dist/esm/interfaces/CSSColorNames.mjs +2 -0
  752. package/dist/esm/interfaces/CSSColorNames.mjs.map +1 -0
  753. package/dist/esm/interfaces/CSSColorNames.native.js +2 -0
  754. package/dist/esm/interfaces/CSSColorNames.native.js.map +1 -0
  755. package/dist/esm/interfaces/GetRef.mjs +2 -0
  756. package/dist/esm/interfaces/GetRef.mjs.map +1 -0
  757. package/dist/esm/interfaces/GetRef.native.js +2 -0
  758. package/dist/esm/interfaces/GetRef.native.js.map +1 -0
  759. package/dist/esm/interfaces/GuiComponentEvents.mjs +2 -0
  760. package/dist/esm/interfaces/GuiComponentEvents.mjs.map +1 -0
  761. package/dist/esm/interfaces/GuiComponentEvents.native.js +2 -0
  762. package/dist/esm/interfaces/GuiComponentEvents.native.js.map +1 -0
  763. package/dist/esm/interfaces/GuiComponentPropsBaseBase.mjs +2 -0
  764. package/dist/esm/interfaces/GuiComponentPropsBaseBase.mjs.map +1 -0
  765. package/dist/esm/interfaces/GuiComponentPropsBaseBase.native.js +2 -0
  766. package/dist/esm/interfaces/GuiComponentPropsBaseBase.native.js.map +1 -0
  767. package/dist/esm/interfaces/RNExclusiveTypes.mjs +2 -0
  768. package/dist/esm/interfaces/RNExclusiveTypes.mjs.map +1 -0
  769. package/dist/esm/interfaces/RNExclusiveTypes.native.js +2 -0
  770. package/dist/esm/interfaces/RNExclusiveTypes.native.js.map +1 -0
  771. package/dist/esm/setupHooks.mjs +6 -0
  772. package/dist/esm/setupHooks.mjs.map +1 -0
  773. package/dist/esm/setupHooks.native.js +6 -0
  774. package/dist/esm/setupHooks.native.js.map +1 -0
  775. package/dist/esm/setupReactNative.mjs +24 -0
  776. package/dist/esm/setupReactNative.mjs.map +1 -0
  777. package/dist/esm/setupReactNative.native.js +28 -0
  778. package/dist/esm/setupReactNative.native.js.map +1 -0
  779. package/dist/esm/styled.mjs +91 -0
  780. package/dist/esm/styled.mjs.map +1 -0
  781. package/dist/esm/styled.native.js +100 -0
  782. package/dist/esm/styled.native.js.map +1 -0
  783. package/dist/esm/styledHtml.test-d.mjs +157 -0
  784. package/dist/esm/styledHtml.test-d.mjs.map +1 -0
  785. package/dist/esm/styledHtml.test-d.native.js +157 -0
  786. package/dist/esm/styledHtml.test-d.native.js.map +1 -0
  787. package/dist/esm/type-utils.mjs +2 -0
  788. package/dist/esm/type-utils.mjs.map +1 -0
  789. package/dist/esm/type-utils.native.js +2 -0
  790. package/dist/esm/type-utils.native.js.map +1 -0
  791. package/dist/esm/types.mjs +2 -0
  792. package/dist/esm/types.mjs.map +1 -0
  793. package/dist/esm/types.native.js +2 -0
  794. package/dist/esm/types.native.js.map +1 -0
  795. package/dist/esm/views/Configuration.mjs +16 -0
  796. package/dist/esm/views/Configuration.mjs.map +1 -0
  797. package/dist/esm/views/Configuration.native.js +17 -0
  798. package/dist/esm/views/Configuration.native.js.map +1 -0
  799. package/dist/esm/views/FontLanguage.mjs +14 -0
  800. package/dist/esm/views/FontLanguage.mjs.map +1 -0
  801. package/dist/esm/views/FontLanguage.native.js +20 -0
  802. package/dist/esm/views/FontLanguage.native.js.map +1 -0
  803. package/dist/esm/views/GuiProvider.mjs +60 -0
  804. package/dist/esm/views/GuiProvider.mjs.map +1 -0
  805. package/dist/esm/views/GuiProvider.native.js +62 -0
  806. package/dist/esm/views/GuiProvider.native.js.map +1 -0
  807. package/dist/esm/views/GuiRoot.mjs +34 -0
  808. package/dist/esm/views/GuiRoot.mjs.map +1 -0
  809. package/dist/esm/views/GuiRoot.native.js +5 -0
  810. package/dist/esm/views/GuiRoot.native.js.map +1 -0
  811. package/dist/esm/views/Slot.mjs +40 -0
  812. package/dist/esm/views/Slot.mjs.map +1 -0
  813. package/dist/esm/views/Slot.native.js +43 -0
  814. package/dist/esm/views/Slot.native.js.map +1 -0
  815. package/dist/esm/views/Text.mjs +35 -0
  816. package/dist/esm/views/Text.mjs.map +1 -0
  817. package/dist/esm/views/Text.native.js +26 -0
  818. package/dist/esm/views/Text.native.js.map +1 -0
  819. package/dist/esm/views/Theme.mjs +127 -0
  820. package/dist/esm/views/Theme.mjs.map +1 -0
  821. package/dist/esm/views/Theme.native.js +136 -0
  822. package/dist/esm/views/Theme.native.js.map +1 -0
  823. package/dist/esm/views/ThemeDebug.mjs +54 -0
  824. package/dist/esm/views/ThemeDebug.mjs.map +1 -0
  825. package/dist/esm/views/ThemeDebug.native.js +11 -0
  826. package/dist/esm/views/ThemeDebug.native.js.map +1 -0
  827. package/dist/esm/views/ThemeProvider.mjs +29 -0
  828. package/dist/esm/views/ThemeProvider.mjs.map +1 -0
  829. package/dist/esm/views/ThemeProvider.native.js +20 -0
  830. package/dist/esm/views/ThemeProvider.native.js.map +1 -0
  831. package/dist/esm/views/View.mjs +8 -0
  832. package/dist/esm/views/View.mjs.map +1 -0
  833. package/dist/esm/views/View.native.js +8 -0
  834. package/dist/esm/views/View.native.js.map +1 -0
  835. package/inject-styles/index.cjs +2 -0
  836. package/inject-styles/index.js +2 -0
  837. package/inject-styles.cjs +1 -0
  838. package/package.json +81 -0
  839. package/reset.css +59 -0
  840. package/src/Gui.ts +47 -0
  841. package/src/_withStableStyle.tsx +55 -0
  842. package/src/animationDriverTypes.test-d.ts +332 -0
  843. package/src/config.ts +232 -0
  844. package/src/constants/accessibilityDirectMap.native.tsx +10 -0
  845. package/src/constants/accessibilityDirectMap.tsx +11 -0
  846. package/src/constants/constants.ts +16 -0
  847. package/src/constants/isDevTools.ts +12 -0
  848. package/src/contexts/ComponentContext.tsx +16 -0
  849. package/src/contexts/GroupContext.tsx +4 -0
  850. package/src/createComponent.tsx +1806 -0
  851. package/src/createFont.ts +50 -0
  852. package/src/createGui.ts +363 -0
  853. package/src/createShorthands.ts +7 -0
  854. package/src/createTokens.ts +31 -0
  855. package/src/createVariable.ts +121 -0
  856. package/src/createVariables.ts +78 -0
  857. package/src/defaultComponentState.tsx +22 -0
  858. package/src/eventHandling.native.ts +184 -0
  859. package/src/eventHandling.ts +44 -0
  860. package/src/helpers/consoleLog.native.ts +2 -0
  861. package/src/helpers/createDesignSystem.ts +264 -0
  862. package/src/helpers/createMediaStyle.ts +167 -0
  863. package/src/helpers/createStyledContext.tsx +98 -0
  864. package/src/helpers/defaultAnimationDriver.tsx +23 -0
  865. package/src/helpers/defaultOffset.ts +1 -0
  866. package/src/helpers/expandStyle.ts +204 -0
  867. package/src/helpers/expandStyles.ts +42 -0
  868. package/src/helpers/getCSSStylesAtomic.native.ts +7 -0
  869. package/src/helpers/getCSSStylesAtomic.ts +263 -0
  870. package/src/helpers/getDefaultProps.ts +28 -0
  871. package/src/helpers/getDynamicVal.ts +63 -0
  872. package/src/helpers/getExpandedShorthands.ts +23 -0
  873. package/src/helpers/getFontLanguage.ts +2 -0
  874. package/src/helpers/getGroupPropParts.ts +46 -0
  875. package/src/helpers/getShorthandValue.ts +9 -0
  876. package/src/helpers/getSplitStyles.tsx +1768 -0
  877. package/src/helpers/getThemeCSSRules.native.ts +3 -0
  878. package/src/helpers/getThemeCSSRules.ts +192 -0
  879. package/src/helpers/getTokenForKey.ts +223 -0
  880. package/src/helpers/getVariantExtras.tsx +67 -0
  881. package/src/helpers/insertStyleRule.tsx +365 -0
  882. package/src/helpers/isActivePlatform.ts +14 -0
  883. package/src/helpers/isActiveTheme.ts +4 -0
  884. package/src/helpers/isGuiComponent.tsx +11 -0
  885. package/src/helpers/isGuiElement.tsx +11 -0
  886. package/src/helpers/isObj.ts +1 -0
  887. package/src/helpers/log.ts +17 -0
  888. package/src/helpers/mainThreadPressEvents.native.ts +41 -0
  889. package/src/helpers/mainThreadPressEvents.ts +6 -0
  890. package/src/helpers/matchMedia.native.ts +34 -0
  891. package/src/helpers/matchMedia.ts +17 -0
  892. package/src/helpers/mediaObjectToString.ts +30 -0
  893. package/src/helpers/mediaState.ts +32 -0
  894. package/src/helpers/mergeProps.ts +121 -0
  895. package/src/helpers/mergeRenderElementProps.ts +17 -0
  896. package/src/helpers/mergeSlotStyleProps.ts +46 -0
  897. package/src/helpers/mergeVariants.ts +40 -0
  898. package/src/helpers/nativeOnlyProps.ts +38 -0
  899. package/src/helpers/normalizeColor.native.ts +29 -0
  900. package/src/helpers/normalizeColor.ts +29 -0
  901. package/src/helpers/normalizeShadow.native.ts +20 -0
  902. package/src/helpers/normalizeShadow.ts +21 -0
  903. package/src/helpers/normalizeStyle.ts +42 -0
  904. package/src/helpers/normalizeStylePropKeys.native.ts +12 -0
  905. package/src/helpers/normalizeStylePropKeys.ts +3 -0
  906. package/src/helpers/normalizeValueWithProperty.ts +41 -0
  907. package/src/helpers/objectIdentityKey.tsx +20 -0
  908. package/src/helpers/parseBorderShorthand.native.ts +74 -0
  909. package/src/helpers/parseBorderShorthand.ts +6 -0
  910. package/src/helpers/parseNativeStyle.ts +193 -0
  911. package/src/helpers/parseOutlineShorthand.native.ts +62 -0
  912. package/src/helpers/parseOutlineShorthand.ts +6 -0
  913. package/src/helpers/platformResolveValue.native.ts +72 -0
  914. package/src/helpers/platformResolveValue.ts +22 -0
  915. package/src/helpers/pointerEvents.native.ts +143 -0
  916. package/src/helpers/pointerEvents.ts +9 -0
  917. package/src/helpers/propMapper.ts +404 -0
  918. package/src/helpers/proxyThemeToParents.ts +52 -0
  919. package/src/helpers/proxyThemeVariables.tsx +13 -0
  920. package/src/helpers/pseudoDescriptors.ts +74 -0
  921. package/src/helpers/pseudoTransitions.ts +97 -0
  922. package/src/helpers/registerCSSVariable.ts +54 -0
  923. package/src/helpers/resolveAnimationDriver.ts +23 -0
  924. package/src/helpers/resolveCompoundTokens.ts +28 -0
  925. package/src/helpers/resolveRem.native.ts +44 -0
  926. package/src/helpers/resolveRem.ts +17 -0
  927. package/src/helpers/resolveSafeArea.native.ts +18 -0
  928. package/src/helpers/resolveSafeArea.ts +10 -0
  929. package/src/helpers/setElementProps.native.tsx +9 -0
  930. package/src/helpers/setElementProps.tsx +5 -0
  931. package/src/helpers/skipProps.ts +35 -0
  932. package/src/helpers/sortString.ts +1 -0
  933. package/src/helpers/subscribeToContextGroup.tsx +99 -0
  934. package/src/helpers/themeable.tsx +104 -0
  935. package/src/helpers/themes.ts +23 -0
  936. package/src/helpers/timer.ts +9 -0
  937. package/src/helpers/transformsToString.ts +20 -0
  938. package/src/helpers/useRenderElement.tsx +73 -0
  939. package/src/helpers/webPropsToSkip.native.ts +56 -0
  940. package/src/helpers/webPropsToSkip.ts +1 -0
  941. package/src/helpers/wrapStyleTags.tsx +31 -0
  942. package/src/hooks/doesRootSchemeMatchSystem.native.ts +7 -0
  943. package/src/hooks/doesRootSchemeMatchSystem.ts +4 -0
  944. package/src/hooks/getThemeProxied.ts +202 -0
  945. package/src/hooks/useComponentState.ts +269 -0
  946. package/src/hooks/useDisableSSR.tsx +6 -0
  947. package/src/hooks/useIsTouchDevice.tsx +6 -0
  948. package/src/hooks/useMedia.tsx +298 -0
  949. package/src/hooks/useProps.tsx +158 -0
  950. package/src/hooks/useTheme.tsx +48 -0
  951. package/src/hooks/useThemeName.tsx +10 -0
  952. package/src/hooks/useThemeState.ts +558 -0
  953. package/src/index.ts +103 -0
  954. package/src/inject-styles.ts +20 -0
  955. package/src/insertFont.ts +81 -0
  956. package/src/interfaces/CSSColorNames.tsx +149 -0
  957. package/src/interfaces/GetRef.tsx +24 -0
  958. package/src/interfaces/GuiComponentEvents.tsx +18 -0
  959. package/src/interfaces/GuiComponentPropsBaseBase.tsx +124 -0
  960. package/src/interfaces/RNExclusiveTypes.ts +59 -0
  961. package/src/setupHooks.ts +27 -0
  962. package/src/setupReactNative.ts +60 -0
  963. package/src/styled.tsx +602 -0
  964. package/src/styledHtml.test-d.ts +286 -0
  965. package/src/type-utils.ts +30 -0
  966. package/src/types.tsx +3364 -0
  967. package/src/views/Configuration.tsx +20 -0
  968. package/src/views/FontLanguage.native.tsx +13 -0
  969. package/src/views/FontLanguage.tsx +18 -0
  970. package/src/views/GuiProvider.tsx +95 -0
  971. package/src/views/GuiRoot.native.tsx +9 -0
  972. package/src/views/GuiRoot.tsx +64 -0
  973. package/src/views/Slot.tsx +86 -0
  974. package/src/views/Text.tsx +71 -0
  975. package/src/views/Theme.tsx +246 -0
  976. package/src/views/ThemeDebug.native.tsx +17 -0
  977. package/src/views/ThemeDebug.tsx +95 -0
  978. package/src/views/ThemeProvider.tsx +45 -0
  979. package/src/views/View.tsx +25 -0
  980. package/tsconfig.json +44 -0
  981. package/tsconfig.test.json +9 -0
  982. package/types/Gui.d.ts +15 -0
  983. package/types/_withStableStyle.d.ts +4 -0
  984. package/types/config.d.ts +72 -0
  985. package/types/constants/accessibilityDirectMap.d.ts +6 -0
  986. package/types/constants/accessibilityDirectMap.native.d.ts +6 -0
  987. package/types/constants/constants.d.ts +5 -0
  988. package/types/constants/isDevTools.d.ts +2 -0
  989. package/types/contexts/ComponentContext.d.ts +4 -0
  990. package/types/contexts/GroupContext.d.ts +3 -0
  991. package/types/createComponent.d.ts +7 -0
  992. package/types/createFont.d.ts +3 -0
  993. package/types/createGui.d.ts +3 -0
  994. package/types/createShorthands.d.ts +3 -0
  995. package/types/createTokens.d.ts +22 -0
  996. package/types/createVariable.d.ts +22 -0
  997. package/types/createVariables.d.ts +10 -0
  998. package/types/defaultComponentState.d.ts +5 -0
  999. package/types/eventHandling.d.ts +27 -0
  1000. package/types/eventHandling.native.d.ts +12 -0
  1001. package/types/helpers/consoleLog.native.d.ts +7 -0
  1002. package/types/helpers/createDesignSystem.d.ts +47 -0
  1003. package/types/helpers/createMediaStyle.d.ts +5 -0
  1004. package/types/helpers/createStyledContext.d.ts +3 -0
  1005. package/types/helpers/defaultAnimationDriver.d.ts +3 -0
  1006. package/types/helpers/defaultOffset.d.ts +5 -0
  1007. package/types/helpers/expandStyle.d.ts +7 -0
  1008. package/types/helpers/expandStyles.d.ts +2 -0
  1009. package/types/helpers/getCSSStylesAtomic.d.ts +11 -0
  1010. package/types/helpers/getCSSStylesAtomic.native.d.ts +4 -0
  1011. package/types/helpers/getDefaultProps.d.ts +3 -0
  1012. package/types/helpers/getDynamicVal.d.ts +16 -0
  1013. package/types/helpers/getExpandedShorthands.d.ts +7 -0
  1014. package/types/helpers/getFontLanguage.d.ts +2 -0
  1015. package/types/helpers/getGroupPropParts.d.ts +7 -0
  1016. package/types/helpers/getShorthandValue.d.ts +2 -0
  1017. package/types/helpers/getSplitStyles.d.ts +13 -0
  1018. package/types/helpers/getThemeCSSRules.d.ts +10 -0
  1019. package/types/helpers/getThemeCSSRules.native.d.ts +2 -0
  1020. package/types/helpers/getTokenForKey.d.ts +6 -0
  1021. package/types/helpers/getVariantExtras.d.ts +4 -0
  1022. package/types/helpers/insertStyleRule.d.ts +10 -0
  1023. package/types/helpers/isActivePlatform.d.ts +2 -0
  1024. package/types/helpers/isActiveTheme.d.ts +2 -0
  1025. package/types/helpers/isGuiComponent.d.ts +5 -0
  1026. package/types/helpers/isGuiElement.d.ts +8 -0
  1027. package/types/helpers/isObj.d.ts +2 -0
  1028. package/types/helpers/log.d.ts +2 -0
  1029. package/types/helpers/mainThreadPressEvents.d.ts +2 -0
  1030. package/types/helpers/mainThreadPressEvents.native.d.ts +10 -0
  1031. package/types/helpers/matchMedia.d.ts +6 -0
  1032. package/types/helpers/matchMedia.native.d.ts +4 -0
  1033. package/types/helpers/mediaObjectToString.d.ts +3 -0
  1034. package/types/helpers/mediaState.d.ts +7 -0
  1035. package/types/helpers/mergeProps.d.ts +20 -0
  1036. package/types/helpers/mergeRenderElementProps.d.ts +7 -0
  1037. package/types/helpers/mergeSlotStyleProps.d.ts +10 -0
  1038. package/types/helpers/mergeVariants.d.ts +3 -0
  1039. package/types/helpers/nativeOnlyProps.d.ts +39 -0
  1040. package/types/helpers/normalizeColor.d.ts +8 -0
  1041. package/types/helpers/normalizeColor.native.d.ts +9 -0
  1042. package/types/helpers/normalizeShadow.d.ts +10 -0
  1043. package/types/helpers/normalizeShadow.native.d.ts +10 -0
  1044. package/types/helpers/normalizeStyle.d.ts +9 -0
  1045. package/types/helpers/normalizeStylePropKeys.d.ts +2 -0
  1046. package/types/helpers/normalizeStylePropKeys.native.d.ts +13 -0
  1047. package/types/helpers/normalizeValueWithProperty.d.ts +6 -0
  1048. package/types/helpers/objectIdentityKey.d.ts +2 -0
  1049. package/types/helpers/parseBorderShorthand.d.ts +3 -0
  1050. package/types/helpers/parseBorderShorthand.native.d.ts +3 -0
  1051. package/types/helpers/parseNativeStyle.d.ts +14 -0
  1052. package/types/helpers/parseOutlineShorthand.d.ts +3 -0
  1053. package/types/helpers/parseOutlineShorthand.native.d.ts +3 -0
  1054. package/types/helpers/platformResolveValue.d.ts +6 -0
  1055. package/types/helpers/platformResolveValue.native.d.ts +7 -0
  1056. package/types/helpers/pointerEvents.d.ts +8 -0
  1057. package/types/helpers/pointerEvents.native.d.ts +2 -0
  1058. package/types/helpers/propMapper.d.ts +5 -0
  1059. package/types/helpers/proxyThemeToParents.d.ts +4 -0
  1060. package/types/helpers/proxyThemeVariables.d.ts +2 -0
  1061. package/types/helpers/pseudoDescriptors.d.ts +51 -0
  1062. package/types/helpers/pseudoTransitions.d.ts +29 -0
  1063. package/types/helpers/registerCSSVariable.d.ts +9 -0
  1064. package/types/helpers/resolveAnimationDriver.d.ts +7 -0
  1065. package/types/helpers/resolveCompoundTokens.d.ts +9 -0
  1066. package/types/helpers/resolveRem.d.ts +13 -0
  1067. package/types/helpers/resolveRem.native.d.ts +13 -0
  1068. package/types/helpers/resolveSafeArea.d.ts +2 -0
  1069. package/types/helpers/resolveSafeArea.native.d.ts +2 -0
  1070. package/types/helpers/setElementProps.d.ts +2 -0
  1071. package/types/helpers/setElementProps.native.d.ts +2 -0
  1072. package/types/helpers/skipProps.d.ts +19 -0
  1073. package/types/helpers/sortString.d.ts +2 -0
  1074. package/types/helpers/subscribeToContextGroup.d.ts +10 -0
  1075. package/types/helpers/themeable.d.ts +3 -0
  1076. package/types/helpers/themes.d.ts +2 -0
  1077. package/types/helpers/timer.d.ts +2 -0
  1078. package/types/helpers/transformsToString.d.ts +2 -0
  1079. package/types/helpers/useRenderElement.d.ts +13 -0
  1080. package/types/helpers/webPropsToSkip.d.ts +2 -0
  1081. package/types/helpers/webPropsToSkip.native.d.ts +104 -0
  1082. package/types/helpers/wrapStyleTags.d.ts +3 -0
  1083. package/types/hooks/doesRootSchemeMatchSystem.d.ts +2 -0
  1084. package/types/hooks/doesRootSchemeMatchSystem.native.d.ts +2 -0
  1085. package/types/hooks/getThemeProxied.d.ts +23 -0
  1086. package/types/hooks/useComponentState.d.ts +25 -0
  1087. package/types/hooks/useDisableSSR.d.ts +3 -0
  1088. package/types/hooks/useIsTouchDevice.d.ts +2 -0
  1089. package/types/hooks/useMedia.d.ts +23 -0
  1090. package/types/hooks/useProps.d.ts +41 -0
  1091. package/types/hooks/useTheme.d.ts +9 -0
  1092. package/types/hooks/useThemeName.d.ts +3 -0
  1093. package/types/hooks/useThemeState.d.ts +11 -0
  1094. package/types/index.d.ts +77 -0
  1095. package/types/inject-styles.d.ts +7 -0
  1096. package/types/insertFont.d.ts +10 -0
  1097. package/types/interfaces/CSSColorNames.d.ts +2 -0
  1098. package/types/interfaces/GetRef.d.ts +6 -0
  1099. package/types/interfaces/GuiComponentEvents.d.ts +19 -0
  1100. package/types/interfaces/GuiComponentPropsBaseBase.d.ts +95 -0
  1101. package/types/interfaces/RNExclusiveTypes.d.ts +22 -0
  1102. package/types/setupHooks.d.ts +17 -0
  1103. package/types/setupReactNative.d.ts +5 -0
  1104. package/types/styled.d.ts +53 -0
  1105. package/types/type-utils.d.ts +13 -0
  1106. package/types/types.d.ts +1929 -0
  1107. package/types/views/Configuration.d.ts +10 -0
  1108. package/types/views/FontLanguage.d.ts +6 -0
  1109. package/types/views/FontLanguage.native.d.ts +3 -0
  1110. package/types/views/GuiProvider.d.ts +3 -0
  1111. package/types/views/GuiRoot.d.ts +15 -0
  1112. package/types/views/GuiRoot.native.d.ts +7 -0
  1113. package/types/views/Slot.d.ts +13 -0
  1114. package/types/views/Text.d.ts +4 -0
  1115. package/types/views/Theme.d.ts +16 -0
  1116. package/types/views/ThemeDebug.d.ts +10 -0
  1117. package/types/views/ThemeDebug.native.d.ts +10 -0
  1118. package/types/views/ThemeProvider.d.ts +3 -0
  1119. package/types/views/View.d.ts +8 -0
  1120. package/vitest.config.d.ts +3 -0
  1121. package/vitest.config.d.ts.map +1 -0
  1122. package/vitest.config.ts +14 -0
@@ -0,0 +1,1806 @@
1
+ import { composeRefs } from '@hanzogui/compose-refs'
2
+ import { isClient, isServer, isWeb, useIsomorphicLayoutEffect } from '@hanzogui/constants'
3
+ import { NativeMenuContext } from '@hanzogui/native'
4
+ import { composeEventHandlers } from '@hanzogui/helpers'
5
+ import { isEqualShallow } from '@hanzogui/is-equal-shallow'
6
+ import React, { ReactElement, ReactNode, useMemo } from 'react'
7
+ import { devConfig, getConfig } from './config'
8
+ import { isDevTools } from './constants/isDevTools'
9
+ import { ComponentContext } from './contexts/ComponentContext'
10
+ import { GroupContext } from './contexts/GroupContext'
11
+ import { didGetVariableValue, setDidGetVariableValue } from './createVariable'
12
+ import { defaultComponentStateMounted } from './defaultComponentState'
13
+ import { getWebEvents, useEvents, wrapWithGestureDetector } from './eventHandling'
14
+ import { getDefaultProps } from './helpers/getDefaultProps'
15
+ import { resolveAnimationDriver } from './helpers/resolveAnimationDriver'
16
+ import { getSplitStyles, useSplitStyles } from './helpers/getSplitStyles'
17
+ import { log } from './helpers/log'
18
+ import { type GenericProps, mergeComponentProps } from './helpers/mergeProps'
19
+ import { mergeRenderElementProps } from './helpers/mergeRenderElementProps'
20
+ import { objectIdentityKey } from './helpers/objectIdentityKey'
21
+ import { usePointerEvents } from './helpers/pointerEvents'
22
+ import {
23
+ extractPseudoState,
24
+ resolveEffectivePseudoTransition,
25
+ } from './helpers/pseudoTransitions'
26
+ import { setElementProps } from './helpers/setElementProps'
27
+ import { subscribeToContextGroup } from './helpers/subscribeToContextGroup'
28
+ import { themeable } from './helpers/themeable'
29
+ import { getStyleTags } from './helpers/wrapStyleTags'
30
+ import { useComponentState } from './hooks/useComponentState'
31
+ import { setMediaShouldUpdate, useMedia } from './hooks/useMedia'
32
+ import { useThemeWithState } from './hooks/useTheme'
33
+ import type { GuiComponentEvents } from './interfaces/GuiComponentEvents'
34
+ import { hooks } from './setupHooks'
35
+ import type {
36
+ AllGroupContexts,
37
+ ComponentGroupEmitter,
38
+ DebugProp,
39
+ GroupStateListener,
40
+ LayoutEvent,
41
+ PseudoGroupState,
42
+ SingleGroupContext,
43
+ StaticConfig,
44
+ StyleableOptions,
45
+ GuiComponent,
46
+ GuiComponentState,
47
+ GuiElement,
48
+ GuiInternalConfig,
49
+ TextProps,
50
+ UseAnimationHook,
51
+ UseAnimationProps,
52
+ UseStyleEmitter,
53
+ UseThemeWithStateProps,
54
+ } from './types'
55
+ import { Slot } from './views/Slot'
56
+ import { getThemedChildren } from './views/Theme'
57
+ import type { ViewProps } from './views/View'
58
+
59
+ /**
60
+ * All things that need one-time setup after createGui is called
61
+ */
62
+ let time: any
63
+
64
+ let debugKeyListeners: Set<Function> | undefined
65
+ let startVisualizer: Function | undefined
66
+
67
+ type ComponentSetState = React.Dispatch<React.SetStateAction<GuiComponentState>>
68
+
69
+ export const componentSetStates = new Set<ComponentSetState>()
70
+ const avoidReRenderKeys = new Set([
71
+ 'hover',
72
+ 'press',
73
+ 'pressIn',
74
+ 'group',
75
+ 'focus',
76
+ 'focusWithin',
77
+ 'media',
78
+ 'group',
79
+ ])
80
+
81
+ if (process.env.HANZO_GUI_TARGET !== 'native' && typeof window !== 'undefined') {
82
+ const cancelPresses = () => {
83
+ // clear all press downs
84
+ componentSetStates.forEach((setState) =>
85
+ setState((prev) => {
86
+ if (prev.press || prev.pressIn) {
87
+ return {
88
+ ...prev,
89
+ press: false,
90
+ pressIn: false,
91
+ }
92
+ }
93
+ return prev
94
+ })
95
+ )
96
+ componentSetStates.clear()
97
+ }
98
+ const cancelTouches = () => {
99
+ // clear press and hover on touch end - hover may have been set
100
+ // via synthetic mouseenter event triggered by touch
101
+ componentSetStates.forEach((setState) =>
102
+ setState((prev) => {
103
+ if (prev.press || prev.pressIn || prev.hover) {
104
+ return {
105
+ ...prev,
106
+ press: false,
107
+ pressIn: false,
108
+ hover: false,
109
+ }
110
+ }
111
+ return prev
112
+ })
113
+ )
114
+ componentSetStates.clear()
115
+ }
116
+ addEventListener('mouseup', cancelPresses)
117
+ addEventListener('touchend', cancelTouches)
118
+ addEventListener('touchcancel', cancelTouches)
119
+
120
+ // hold option to see debug visualization
121
+ if (process.env.NODE_ENV === 'development') {
122
+ startVisualizer = () => {
123
+ const devVisualizerConfig = devConfig?.visualizer
124
+
125
+ if (devVisualizerConfig && !globalThis.__guiDevVisualizer) {
126
+ globalThis.__guiDevVisualizer = true
127
+
128
+ debugKeyListeners = new Set()
129
+ let tm
130
+ let isShowing = false
131
+ let resizeListener: (() => void) | null = null
132
+ const options = {
133
+ key: 'Alt',
134
+ delay: 800,
135
+ ...(typeof devVisualizerConfig === 'object' ? devVisualizerConfig : {}),
136
+ }
137
+
138
+ function show(val: boolean) {
139
+ clearTimeout(tm)
140
+ isShowing = val
141
+ debugKeyListeners?.forEach((l) => l(val))
142
+
143
+ // Remove resize listener when hiding
144
+ if (!val && resizeListener) {
145
+ window.removeEventListener('resize', resizeListener)
146
+ resizeListener = null
147
+ }
148
+ }
149
+
150
+ function cancelShow() {
151
+ clearTimeout(tm)
152
+ if (resizeListener) {
153
+ window.removeEventListener('resize', resizeListener)
154
+ resizeListener = null
155
+ }
156
+ }
157
+
158
+ window.addEventListener('blur', () => {
159
+ show(false)
160
+ })
161
+
162
+ window.addEventListener('keydown', ({ key, metaKey, defaultPrevented }) => {
163
+ clearTimeout(tm) // always clear so we dont trigger on chords
164
+ if (defaultPrevented) return
165
+ if (metaKey) return
166
+ if (key === options.key) {
167
+ // Add resize listener immediately when Alt is pressed
168
+ if (!resizeListener) {
169
+ resizeListener = () => cancelShow()
170
+ window.addEventListener('resize', resizeListener)
171
+ }
172
+ tm = setTimeout(() => {
173
+ show(true)
174
+ }, options.delay)
175
+ }
176
+ })
177
+
178
+ window.addEventListener('keyup', ({ defaultPrevented }) => {
179
+ if (defaultPrevented) return
180
+ cancelShow()
181
+ // any key can clear it
182
+ if (isShowing) {
183
+ show(false)
184
+ }
185
+ })
186
+ }
187
+ }
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Only on native do we need the actual underlying View/Text
193
+ * On the web we avoid react-native dep altogether.
194
+ */
195
+ let BaseText: any
196
+ let BaseView: any
197
+ let hasSetupBaseViews = false
198
+
199
+ const lastInteractionWasKeyboard = { value: false }
200
+ const lastInteractionWasTouch = { value: false }
201
+ if (isWeb && typeof document !== 'undefined') {
202
+ document.addEventListener('keydown', () => {
203
+ if (!lastInteractionWasKeyboard.value) {
204
+ lastInteractionWasKeyboard.value = true
205
+ }
206
+ })
207
+ document.addEventListener('mousedown', () => {
208
+ if (lastInteractionWasKeyboard.value) {
209
+ lastInteractionWasKeyboard.value = false
210
+ }
211
+ })
212
+ document.addEventListener('mousemove', () => {
213
+ if (lastInteractionWasKeyboard.value) {
214
+ lastInteractionWasKeyboard.value = false
215
+ }
216
+ // Real mouse movement clears touch flag
217
+ lastInteractionWasTouch.value = false
218
+ })
219
+ document.addEventListener('touchstart', () => {
220
+ lastInteractionWasTouch.value = true
221
+ })
222
+ // Don't reset on touchend - mouseenter fires after touchend
223
+ // and we need to still detect it as a touch interaction.
224
+ // Mouse move will reset it when there's real mouse activity.
225
+ }
226
+
227
+ export function createComponent<
228
+ ComponentPropTypes extends Record<string, any> = {},
229
+ Ref extends GuiElement = GuiElement,
230
+ BaseProps = never,
231
+ BaseStyles extends object = never,
232
+ >(staticConfig: StaticConfig) {
233
+ let config: GuiInternalConfig | null = null
234
+
235
+ const { Component, isText, isHOC } = staticConfig
236
+
237
+ const component = React.forwardRef<Ref, ComponentPropTypes>((propsIn, forwardedRef) => {
238
+ 'use no memo'
239
+
240
+ config = config || getConfig()
241
+
242
+ const internalID = process.env.NODE_ENV === 'development' ? React.useId() : ''
243
+
244
+ if (process.env.NODE_ENV === 'development') {
245
+ if (startVisualizer) {
246
+ startVisualizer()
247
+ startVisualizer = undefined
248
+ }
249
+ }
250
+
251
+ if (process.env.HANZO_GUI_TARGET === 'native') {
252
+ // todo this could be moved to a cleaner location
253
+ if (!hasSetupBaseViews) {
254
+ hasSetupBaseViews = true
255
+ const baseViews = hooks.getBaseViews?.()
256
+ if (baseViews) {
257
+ BaseText = baseViews.Text
258
+ BaseView = baseViews.View
259
+ }
260
+ }
261
+ }
262
+
263
+ // test only
264
+ if (process.env.NODE_ENV === 'test') {
265
+ if (propsIn['data-test-renders']) {
266
+ propsIn['data-test-renders']['current'] =
267
+ propsIn['data-test-renders']['current'] ?? 0
268
+ propsIn['data-test-renders']['current'] += 1
269
+ }
270
+ }
271
+
272
+ // set variants through context
273
+ // order is after default props but before props
274
+ const { context, isReactNative } = staticConfig
275
+ const debugProp = propsIn['debug'] as DebugProp
276
+
277
+ const styledContextValue: GenericProps | undefined = context
278
+ ? React.useContext(context)
279
+ : undefined
280
+ let overriddenContextProps: GenericProps | null = null
281
+
282
+ const componentContext = React.useContext(ComponentContext)
283
+ const hasTextAncestor = !!(isWeb && isText ? componentContext.inText : false)
284
+
285
+ // On Android, skip RNGH GestureDetector inside native menus (zeego) and use
286
+ // direct press events instead — GestureDetector consumes touches before they
287
+ // reach MenuView's native handler, preventing the menu from opening
288
+ const isInsideNativeMenu =
289
+ process.env.HANZO_GUI_TARGET === 'native'
290
+ ? React.useContext(NativeMenuContext)
291
+ : false
292
+
293
+ if (
294
+ !process.env.HANZO_GUI_IS_CORE_NODE &&
295
+ process.env.NODE_ENV === 'development' &&
296
+ debugProp === 'profile' &&
297
+ !time
298
+ ) {
299
+ const timer = require('@hanzogui/timer').timer()
300
+ time = timer.start()
301
+ globalThis['time'] = time
302
+ }
303
+ // pick up globalThis.time if set externally (e.g. by a profiling harness)
304
+ if (process.env.NODE_ENV === 'development' && !time && (globalThis as any).time) {
305
+ time = (globalThis as any).time
306
+ }
307
+ if (process.env.NODE_ENV === 'development' && time) time`non-gui time (ignore)`
308
+
309
+ // React inserts default props after your props for some reason...
310
+ // order important so we do loops, you can't just spread because JS does weird things
311
+ let props: ViewProps | TextProps = propsIn
312
+
313
+ const componentName = props.componentName || staticConfig.componentName
314
+
315
+ // merge both default props and styled context props - ensure order is preserved
316
+ const defaultProps = getDefaultProps(staticConfig, props.componentName)
317
+
318
+ // merge styled context props over defaults, ensure order is preserved
319
+ const [nextProps, overrides] = mergeComponentProps(
320
+ defaultProps,
321
+ styledContextValue,
322
+ propsIn
323
+ )
324
+
325
+ props = nextProps as ViewProps | TextProps
326
+ overriddenContextProps = overrides
327
+
328
+ if (process.env.NODE_ENV === 'development' && isClient) {
329
+ React.useEffect(() => {
330
+ let node: HTMLElement | undefined
331
+ let overlay: HTMLSpanElement | null = null
332
+
333
+ const remove = () => {
334
+ if (overlay) {
335
+ try {
336
+ overlay.parentNode?.removeChild(overlay)
337
+ overlay = null
338
+ } catch {
339
+ // may have unmounted
340
+ }
341
+ }
342
+ }
343
+
344
+ const debugVisualizerHandler = (show = false) => {
345
+ node = stateRef.current.host as HTMLElement | undefined
346
+ if (!node) return
347
+
348
+ if (show) {
349
+ if (!overlay) {
350
+ overlay = document.createElement('span')
351
+ overlay.style.inset = '0px'
352
+ overlay.style.zIndex = '1000000'
353
+ overlay.style.position = 'absolute'
354
+ overlay.style.borderColor = 'red'
355
+ overlay.style.borderWidth = '1px'
356
+ overlay.style.borderStyle = 'dotted'
357
+ }
358
+
359
+ const dataAt = node.getAttribute('data-at') || ''
360
+ const dataIn = node.getAttribute('data-in') || ''
361
+
362
+ const tooltip = document.createElement('span')
363
+ tooltip.style.position = 'absolute'
364
+ tooltip.style.top = '0px'
365
+ tooltip.style.left = '0px'
366
+ tooltip.style.padding = '3px'
367
+ tooltip.style.background = 'rgba(0,0,0,0.75)'
368
+ tooltip.style.color = 'rgba(255,255,255,1)'
369
+ tooltip.style.fontSize = '12px'
370
+ tooltip.style.lineHeight = '12px'
371
+ tooltip.style.fontFamily = 'monospace'
372
+ tooltip.innerText = `${componentName || ''} ${dataAt} ${dataIn}`.trim()
373
+
374
+ overlay.appendChild(tooltip)
375
+ node.appendChild(overlay)
376
+ } else {
377
+ remove()
378
+ }
379
+ }
380
+
381
+ debugKeyListeners = debugKeyListeners || new Set()
382
+ debugKeyListeners.add(debugVisualizerHandler)
383
+
384
+ return () => {
385
+ remove()
386
+ debugKeyListeners?.delete(debugVisualizerHandler)
387
+ }
388
+ }, [componentName])
389
+ }
390
+
391
+ const groupContextParent = React.useContext(GroupContext)
392
+
393
+ // Get animation driver - either from animatedBy prop lookup or context/config fallback
394
+ const animationDriver = (() => {
395
+ if (props.animatedBy && config) {
396
+ // check animationDrivers for multi-driver config
397
+ if (config.animationDrivers) {
398
+ return (
399
+ (config.animationDrivers as Record<string, any>)[props.animatedBy] ??
400
+ config.animations
401
+ )
402
+ }
403
+ // single driver config - only 'default' makes sense
404
+ return props.animatedBy === 'default' ? config.animations : null
405
+ }
406
+ // fall back to context driver, then config.animations
407
+ // resolveAnimationDriver validates it's a real driver (not a raw multi-driver object)
408
+ return (
409
+ resolveAnimationDriver(componentContext.animationDriver) ??
410
+ resolveAnimationDriver(config?.animations) ??
411
+ null
412
+ )
413
+ })()
414
+
415
+ const useAnimations = animationDriver?.useAnimations as UseAnimationHook | undefined
416
+
417
+ const componentState = useComponentState(
418
+ props,
419
+ animationDriver?.isStub ? null : animationDriver,
420
+ staticConfig,
421
+ config!
422
+ )
423
+
424
+ const {
425
+ disabled,
426
+ groupName,
427
+ hasAnimationProp,
428
+ hasEnterStyle,
429
+ isAnimated,
430
+ isExiting,
431
+ isHydrated,
432
+ presence,
433
+ presenceState,
434
+ setState,
435
+ noClass,
436
+ state,
437
+ stateRef,
438
+ inputStyle,
439
+ outputStyle,
440
+ willBeAnimated,
441
+ willBeAnimatedClient,
442
+ startedUnhydrated,
443
+ } = componentState
444
+
445
+ if (hasAnimationProp && animationDriver?.avoidReRenders) {
446
+ useIsomorphicLayoutEffect(() => {
447
+ const pendingState = stateRef.current.nextState
448
+ if (pendingState) {
449
+ stateRef.current.nextState = undefined
450
+ componentState.setStateShallow(pendingState)
451
+ }
452
+ })
453
+ }
454
+
455
+ // create new context with groups, or else sublings will grab the same one
456
+ const allGroupContexts = useMemo((): AllGroupContexts | null => {
457
+ if (!groupName || props.passThrough) {
458
+ return groupContextParent
459
+ }
460
+
461
+ const listeners = new Set<GroupStateListener>()
462
+ stateRef.current.group?.listeners?.clear()
463
+ stateRef.current.group = {
464
+ listeners,
465
+ emit(state) {
466
+ listeners.forEach((l) => l(state))
467
+ },
468
+ subscribe(cb) {
469
+ listeners.add(cb)
470
+ if (listeners.size === 1) {
471
+ setStateShallow({ hasDynGroupChildren: true })
472
+ }
473
+ return () => {
474
+ listeners.delete(cb)
475
+ if (listeners.size === 0) {
476
+ setStateShallow({ hasDynGroupChildren: false })
477
+ }
478
+ }
479
+ },
480
+ }
481
+
482
+ return {
483
+ ...groupContextParent,
484
+ [groupName]: {
485
+ state: {
486
+ pseudo: defaultComponentStateMounted,
487
+ },
488
+ subscribe: (listener) => {
489
+ const dispose = stateRef.current.group?.subscribe(listener)
490
+ return () => {
491
+ dispose?.()
492
+ }
493
+ },
494
+ },
495
+ }
496
+ }, [stateRef, groupName, groupContextParent])
497
+
498
+ // if our animation driver supports avoidReRenders, we'll replace this below with
499
+ // a version that essentially uses an internall emitter rather than setting state
500
+ // but still stores the current state and applies if it it needs to during render
501
+ let setStateShallow = componentState.setStateShallow
502
+
503
+ if (process.env.NODE_ENV === 'development' && time) time`use-state`
504
+
505
+ // web-only - string-style not valid for native
506
+ const renderProp = props.render
507
+ const isRenderString = !Component || typeof Component === 'string'
508
+
509
+ // default to render prop, fallback to component (when both strings)
510
+ const element = isWeb
511
+ ? isRenderString
512
+ ? renderProp || Component
513
+ : Component
514
+ : Component
515
+
516
+ const BaseTextComponent = BaseText || element || 'span'
517
+ const BaseViewComponent = BaseView || element || (hasTextAncestor ? 'span' : 'div')
518
+ const BaseComponent = isText ? BaseTextComponent : BaseViewComponent
519
+
520
+ let elementType = BaseComponent
521
+
522
+ const isAnimatedCustomComponent =
523
+ animationDriver && isAnimated && animationDriver.needsCustomComponent
524
+
525
+ if (isAnimatedCustomComponent) {
526
+ elementType = animationDriver[isText ? 'Text' : 'View'] || elementType
527
+ }
528
+
529
+ // internal use only
530
+ const disableThemeProp =
531
+ process.env.HANZO_GUI_TARGET === 'native' ? false : props['data-disable-theme']
532
+
533
+ const disableTheme = disableThemeProp || isHOC
534
+
535
+ if (process.env.NODE_ENV === 'development' && time) time`theme-props`
536
+
537
+ const themeStateProps: UseThemeWithStateProps = {
538
+ componentName,
539
+ disable: disableTheme,
540
+ shallow: props.themeShallow,
541
+ debug: debugProp,
542
+ unstyled: props.unstyled,
543
+ }
544
+
545
+ // this is set conditionally if existing in props because we wrap children with
546
+ // a span if they ever set one of these, so avoid wrapping all children with span
547
+ if ('theme' in props) {
548
+ themeStateProps.name = props.theme
549
+ }
550
+ // Always set needsUpdate callback so it can check the ref's latest value
551
+ // This ensures components with $theme-dark/$theme-light re-render on theme change
552
+ // even when using raw colors (not tokens) since isListeningToTheme is set after useSplitStyles
553
+ themeStateProps.needsUpdate = () => !!stateRef.current.isListeningToTheme
554
+ // on native we optimize theme changes if fastSchemeChange is enabled, otherwise deopt
555
+ if (process.env.HANZO_GUI_TARGET === 'native') {
556
+ themeStateProps.deopt = willBeAnimated
557
+ }
558
+
559
+ if (process.env.NODE_ENV === 'development') {
560
+ if (debugProp && debugProp !== 'profile') {
561
+ const name = `${
562
+ componentName ||
563
+ Component?.displayName ||
564
+ Component?.name ||
565
+ '[Unnamed Component]'
566
+ }`
567
+
568
+ const type =
569
+ (hasEnterStyle ? '(hasEnter)' : ' ') +
570
+ (isAnimated ? '(animated)' : ' ') +
571
+ (isReactNative ? '(rnw)' : ' ') +
572
+ (noClass ? '(noClass)' : ' ') +
573
+ (state.press || state.pressIn ? '(PRESSED)' : ' ') +
574
+ (state.hover ? '(HOVERED)' : ' ') +
575
+ (state.focus ? '(FOCUSED)' : ' ') +
576
+ (state.focusWithin ? '(WITHIN FOCUSED)' : ' ') +
577
+ (presenceState?.isPresent === false ? '(EXIT)' : '')
578
+
579
+ const dataIs = propsIn['data-is'] || ''
580
+ const banner = `<${name} /> ${internalID} ${dataIs ? ` ${dataIs}` : ''} ${type.trim()} (hydrated: ${isHydrated}) (unmounted: ${state.unmounted})`
581
+
582
+ const ch = propsIn.children
583
+ let childLog =
584
+ typeof ch === 'string' ? (ch.length > 4 ? ch.slice(0, 4) + '...' : ch) : ''
585
+ if (childLog.length) {
586
+ childLog = `(children: ${childLog})`
587
+ }
588
+
589
+ if (isWeb) {
590
+ console.info(`%c ${banner}`, 'background: green; color: white;')
591
+ if (isServer) {
592
+ log({ noClass, isAnimated, isWeb, inputStyle })
593
+ } else {
594
+ // if strict mode or something messes with our nesting this fixes:
595
+ console.groupEnd()
596
+
597
+ console.groupCollapsed(`${childLog} [inspect props, state, context 👇]`)
598
+ log('props in:', propsIn)
599
+ log('final props:', props, Object.keys(props))
600
+ log({ state, staticConfig, elementType, themeStateProps })
601
+ log({
602
+ context,
603
+ overriddenContextProps,
604
+ componentContext,
605
+ })
606
+ log({ presence, isAnimated, isHOC, hasAnimationProp, useAnimations })
607
+ console.groupEnd()
608
+ }
609
+ } else {
610
+ console.info(
611
+ `\n\n------------------------------\n${banner}\n------------------------------\n`
612
+ )
613
+ log(`children:`, props.children)
614
+ log({ overriddenContextProps, styledContextValue })
615
+ log({ noClass, isAnimated, isWeb, inputStyle })
616
+ }
617
+ }
618
+ }
619
+
620
+ if (process.env.NODE_ENV === 'development' && time) time`pre-theme-media`
621
+
622
+ const [theme, themeState] = useThemeWithState(themeStateProps)
623
+
624
+ if (process.env.NODE_ENV === 'development' && time) time`theme`
625
+
626
+ elementType = element || elementType
627
+ const isStringElement = typeof elementType === 'string'
628
+
629
+ const mediaState = useMedia(componentContext, debugProp)
630
+
631
+ setDidGetVariableValue(false)
632
+
633
+ if (process.env.NODE_ENV === 'development' && time) time`media`
634
+
635
+ const resolveValues =
636
+ // if HOC + mounted + has animation prop, resolve as value so it passes non-variable to child
637
+ (isAnimated && inputStyle !== 'css') ||
638
+ (isHOC && state.unmounted == false && hasAnimationProp)
639
+ ? 'value'
640
+ : 'auto'
641
+
642
+ const styleProps = {
643
+ mediaState,
644
+ noClass,
645
+ resolveValues,
646
+ isExiting,
647
+ isAnimated,
648
+ willBeAnimated,
649
+ styledContext: styledContextValue,
650
+ } as const
651
+
652
+ const themeName = themeState?.name || ''
653
+
654
+ if (process.env.NODE_ENV === 'development' && time) time`split-styles-prepare`
655
+
656
+ const splitStyles = useSplitStyles(
657
+ props,
658
+ staticConfig,
659
+ theme,
660
+ themeName,
661
+ state,
662
+ styleProps,
663
+ null,
664
+ componentContext,
665
+ allGroupContexts,
666
+ elementType,
667
+ startedUnhydrated,
668
+ debugProp,
669
+ animationDriver
670
+ )
671
+
672
+ const isPassthrough = !splitStyles
673
+
674
+ // splitStyles === null === passThrough
675
+
676
+ // Merge style-resolved context overrides (issues #3670, #3676)
677
+ // When styles set values that are also context keys (from variants, pseudos, media, etc),
678
+ // we need to add them to overriddenContextProps so they propagate to children
679
+ // Use either the component's own context or its parent's context (for styled() inheritance)
680
+ let contextForOverride = staticConfig.context
681
+ if (splitStyles?.overriddenContextProps) {
682
+ const contextForProps =
683
+ staticConfig.context || staticConfig.parentStaticConfig?.context
684
+ if (contextForProps) {
685
+ for (const key in splitStyles.overriddenContextProps) {
686
+ overriddenContextProps = overriddenContextProps || {}
687
+ overriddenContextProps[key] = splitStyles.overriddenContextProps[key]
688
+ }
689
+ // Use parent's context if this component doesn't have its own
690
+ if (!staticConfig.context) {
691
+ contextForOverride = contextForProps
692
+ }
693
+ }
694
+ }
695
+
696
+ const groupContext = groupName ? allGroupContexts?.[groupName] || null : null
697
+
698
+ // one tiny mutation 🙏 get width/height optimistically from raw values if possible
699
+ // if set hardcoded it avoids extra renders
700
+ if (
701
+ !isPassthrough &&
702
+ groupContext &&
703
+ // avoids onLayout if we don't need it
704
+ props.containerType !== 'normal'
705
+ ) {
706
+ const groupState = groupContext?.state
707
+ if (groupState && groupState.layout === undefined) {
708
+ if (splitStyles.style?.width || splitStyles.style?.height) {
709
+ groupState.layout = {
710
+ width: fromPx(splitStyles.style.width),
711
+ height: fromPx(splitStyles.style.height),
712
+ }
713
+ }
714
+ }
715
+ }
716
+
717
+ // avoids re-rendering if animation driver supports it
718
+ // TODO believe we need to set some sort of "pendingState" in case it re-renders
719
+ // CRITICAL: Skip avoidReRenders for components with enter/exit transitions
720
+ // The exit state comes from AnimatePresence context, not local state, so
721
+ // updateStyleListener can fire before the component re-renders with the new
722
+ // presence value, causing wrong animation timing (e.g., using enter timing for exit)
723
+ const hasEnterExitTransition =
724
+ props.transition &&
725
+ typeof props.transition === 'object' &&
726
+ !Array.isArray(props.transition) &&
727
+ ('enter' in props.transition || 'exit' in props.transition)
728
+
729
+ if (
730
+ !isPassthrough &&
731
+ (hasAnimationProp || groupName) &&
732
+ animationDriver?.avoidReRenders &&
733
+ !hasEnterExitTransition
734
+ ) {
735
+ const ogSetStateShallow = setStateShallow
736
+
737
+ stateRef.current.updateStyleListener = () => {
738
+ const useStyleListener = stateRef.current.useStyleListener
739
+
740
+ // if no animation driver is listening for style updates, fall back to normal re-render
741
+ // this happens when a component has group prop but no transition/animation prop
742
+ if (!useStyleListener) {
743
+ const pendingState = stateRef.current.nextState
744
+ if (pendingState) {
745
+ stateRef.current.nextState = undefined
746
+ ogSetStateShallow(pendingState)
747
+ }
748
+ return
749
+ }
750
+
751
+ const updatedState = stateRef.current.nextState || state
752
+ const mediaState = stateRef.current.nextMedia
753
+
754
+ const nextStyles = getSplitStyles(
755
+ props,
756
+ staticConfig,
757
+ theme,
758
+ themeName,
759
+ updatedState,
760
+ mediaState ? { ...styleProps, mediaState } : styleProps,
761
+ null,
762
+ componentContext,
763
+ allGroupContexts,
764
+ elementType,
765
+ startedUnhydrated,
766
+ debugProp,
767
+ animationDriver
768
+ )
769
+
770
+ // compute effective transition based on entering/exiting pseudo states
771
+ const effectiveTransition = resolveEffectivePseudoTransition(
772
+ stateRef.current.prevPseudoState,
773
+ updatedState,
774
+ nextStyles?.pseudoTransitions,
775
+ props.transition
776
+ )
777
+
778
+ // update prev state for next comparison (includes group states)
779
+ stateRef.current.prevPseudoState = extractPseudoState(updatedState)
780
+
781
+ useStyleListener((nextStyles?.style || {}) as any, effectiveTransition)
782
+ }
783
+
784
+ function updateGroupListeners() {
785
+ const updatedState = stateRef.current.nextState!
786
+ if (groupContext) {
787
+ const {
788
+ group,
789
+ hasDynGroupChildren,
790
+ unmounted,
791
+ transition,
792
+ ...childrenGroupState
793
+ } = updatedState
794
+ notifyGroupSubscribers(
795
+ groupContext,
796
+ stateRef.current.group || null,
797
+ childrenGroupState
798
+ )
799
+ }
800
+ }
801
+
802
+ // don't change this ever or else you break ComponentContext and cause re-rendering
803
+ // use a Set of listeners so multiple components can register
804
+ componentContext.mediaEmitListeners =
805
+ componentContext.mediaEmitListeners || new Set()
806
+
807
+ // only register once per component instance
808
+ if (!stateRef.current.mediaEmitCleanup) {
809
+ const updateListener = (next: Record<string, boolean>) => {
810
+ stateRef.current.nextMedia = next
811
+ stateRef.current.updateStyleListener?.()
812
+ }
813
+ componentContext.mediaEmitListeners.add(updateListener)
814
+ stateRef.current.mediaEmitCleanup = () => {
815
+ componentContext.mediaEmitListeners?.delete(updateListener)
816
+ }
817
+ }
818
+
819
+ componentContext.mediaEmit =
820
+ componentContext.mediaEmit ||
821
+ ((next) => {
822
+ // notify all registered components
823
+ for (const listener of componentContext.mediaEmitListeners!) {
824
+ listener(next)
825
+ }
826
+ })
827
+
828
+ stateRef.current.setStateShallow = (nextOrGetNext) => {
829
+ const prev = stateRef.current.nextState || state
830
+ const next =
831
+ typeof nextOrGetNext === 'function' ? nextOrGetNext(prev) : nextOrGetNext
832
+
833
+ if (next === prev || isEqualShallow(prev, next)) {
834
+ return
835
+ }
836
+
837
+ // one thing we have to handle here and where it gets a bit more complex is group styles
838
+ const canAvoidReRender = Object.keys(next).every((key) =>
839
+ avoidReRenderKeys.has(key)
840
+ )
841
+
842
+ const updatedState = {
843
+ ...prev,
844
+ ...next,
845
+ }
846
+ stateRef.current.nextState = updatedState
847
+
848
+ if (canAvoidReRender) {
849
+ if (
850
+ process.env.NODE_ENV === 'development' &&
851
+ debugProp &&
852
+ debugProp !== 'profile'
853
+ ) {
854
+ console.groupCollapsed(`[⚡️] avoid setState`, componentName, next, {
855
+ updatedState,
856
+ props,
857
+ })
858
+ console.info(stateRef.current.host)
859
+ console.groupEnd()
860
+ }
861
+
862
+ updateGroupListeners()
863
+ stateRef.current.updateStyleListener?.()
864
+ } else {
865
+ if (
866
+ process.env.NODE_ENV === 'development' &&
867
+ debugProp &&
868
+ debugProp !== 'profile'
869
+ ) {
870
+ console.info(`[🐌] re-render`, { canAvoidReRender, next })
871
+ }
872
+ ogSetStateShallow(next)
873
+ }
874
+ }
875
+
876
+ // needs to capture latest props (it's called from memoized `events`)
877
+ setStateShallow = (state) => {
878
+ stateRef.current.setStateShallow?.(state)
879
+ }
880
+ }
881
+
882
+ if (process.env.NODE_ENV === 'development' && time) time`split-styles`
883
+
884
+ // hide strategy will set this opacity = 0 until measured
885
+ if (splitStyles) {
886
+ if (
887
+ props.group &&
888
+ props.untilMeasured === 'hide' &&
889
+ !stateRef.current.hasMeasured
890
+ ) {
891
+ splitStyles.style = splitStyles.style || {}
892
+ splitStyles.style.opacity = 0
893
+ }
894
+
895
+ if (splitStyles.dynamicThemeAccess != null) {
896
+ stateRef.current.isListeningToTheme = splitStyles.dynamicThemeAccess
897
+ }
898
+ }
899
+
900
+ // only listen for changes if we are using raw theme values or media space, or dynamic media (native)
901
+ // array = space media breakpoints
902
+ const hasRuntimeMediaKeys = splitStyles?.hasMedia && splitStyles.hasMedia !== true
903
+ const shouldListenForMedia =
904
+ didGetVariableValue() ||
905
+ hasRuntimeMediaKeys ||
906
+ (noClass && splitStyles?.hasMedia === true)
907
+
908
+ const mediaListeningKeys = hasRuntimeMediaKeys
909
+ ? (splitStyles.hasMedia as Set<string>)
910
+ : null
911
+ if (process.env.NODE_ENV === 'development' && debugProp === 'verbose') {
912
+ console.info(`useMedia() createComponent`, shouldListenForMedia, mediaListeningKeys)
913
+ }
914
+
915
+ setMediaShouldUpdate(componentContext, shouldListenForMedia, mediaListeningKeys)
916
+
917
+ const {
918
+ viewProps: viewPropsIn,
919
+ pseudos,
920
+ style: splitStylesStyle,
921
+ classNames,
922
+ pseudoGroups,
923
+ mediaGroups,
924
+ } = splitStyles || {}
925
+
926
+ const propsWithAnimation = props as UseAnimationProps
927
+
928
+ const {
929
+ asChild,
930
+ children,
931
+ themeShallow,
932
+ spaceDirection: _spaceDirection,
933
+ onPress,
934
+ onLongPress,
935
+ onPressIn,
936
+ onPressOut,
937
+ onHoverIn,
938
+ onHoverOut,
939
+ onMouseUp,
940
+ onMouseDown,
941
+ onMouseEnter,
942
+ onMouseLeave,
943
+ onFocus,
944
+ onBlur,
945
+ separator,
946
+ // ignore from here on out
947
+ passThrough,
948
+ forceStyle: _forceStyle,
949
+ // @ts-ignore for next/link compat etc
950
+ onClick,
951
+ theme: _themeProp,
952
+ ...nonGuiProps
953
+ } = viewPropsIn || {}
954
+
955
+ // these can ultimately be for DOM, react-native-web views, or animated views
956
+ // so the type is pretty loose
957
+ let viewProps = nonGuiProps
958
+
959
+ if (props.forceStyle) {
960
+ viewProps.forceStyle = props.forceStyle
961
+ }
962
+
963
+ if (isHOC) {
964
+ if (typeof _themeProp !== 'undefined') {
965
+ viewProps.theme = _themeProp
966
+ }
967
+ if (typeof passThrough !== 'undefined') {
968
+ viewProps.passThrough = passThrough
969
+ }
970
+ }
971
+
972
+ // once you set animation prop don't remove it, you can set to undefined/false
973
+ // reason is animations are heavy - no way around it, and must be run inline here (🙅 loading as a sub-component)
974
+ let animationStyles: any
975
+ const shouldUseAnimation =
976
+ // if it supports css vars we run it on server too to get matching initial style
977
+ (inputStyle === 'css' ? willBeAnimatedClient : willBeAnimated) &&
978
+ useAnimations &&
979
+ !isHOC
980
+
981
+ let animatedRef
982
+
983
+ if (shouldUseAnimation) {
984
+ const useStyleEmitter: UseStyleEmitter | undefined = animationDriver?.avoidReRenders
985
+ ? (listener) => {
986
+ stateRef.current.useStyleListener = listener
987
+ }
988
+ : undefined
989
+
990
+ // compute effective transition once here (single source of truth)
991
+ // avoidReRenders path also computes this in updateStyleListener
992
+ const effectiveTransition = resolveEffectivePseudoTransition(
993
+ stateRef.current.prevPseudoState,
994
+ state,
995
+ splitStyles?.pseudoTransitions,
996
+ props.transition
997
+ )
998
+
999
+ // add effectiveTransition to splitStyles for drivers to consume
1000
+ if (splitStyles) {
1001
+ splitStyles.effectiveTransition = effectiveTransition
1002
+ }
1003
+
1004
+ // update prev state for next comparison (needed for non-avoidReRenders drivers like CSS)
1005
+ // avoidReRenders path also updates this in updateStyleListener
1006
+ stateRef.current.prevPseudoState = extractPseudoState(state)
1007
+
1008
+ const animations = useAnimations({
1009
+ props: propsWithAnimation,
1010
+ // clone style to prevent animation driver mutations from leaking to viewProps
1011
+ // during SSR/pre-hydration (CSS driver mutates style.transition in place)
1012
+ style: isHydrated ? splitStylesStyle || {} : { ...splitStylesStyle },
1013
+ // @ts-ignore
1014
+ styleState: splitStyles,
1015
+ useStyleEmitter,
1016
+ presence,
1017
+ componentState: state,
1018
+ styleProps,
1019
+ theme,
1020
+ themeName,
1021
+ pseudos: pseudos || null,
1022
+ staticConfig,
1023
+ stateRef,
1024
+ })
1025
+
1026
+ if (animations) {
1027
+ if (animations.ref) {
1028
+ // @ts-ignore
1029
+ animatedRef = animations.ref
1030
+ }
1031
+
1032
+ if (isHydrated && animations) {
1033
+ animationStyles = animations.style
1034
+ viewProps.style = animationStyles
1035
+ if (animations.className) {
1036
+ viewProps.className = `${state.unmounted === 'should-enter' ? 't_unmounted ' : ''}${viewProps.className || ''} ${animations.className}`
1037
+ }
1038
+ }
1039
+ }
1040
+
1041
+ if (process.env.NODE_ENV === 'development' && time) time`animations`
1042
+ }
1043
+
1044
+ if (process.env.NODE_ENV === 'development' && props.untilMeasured && !props.group) {
1045
+ console.warn(
1046
+ `You set the untilMeasured prop without setting group. This doesn't work, be sure to set untilMeasured on the parent that sets group, not the children that use the $group- prop.\n\nIf you meant to do this, you can disable this warning - either change untilMeasured and group at the same time, or do group={conditional ? 'name' : undefined}`
1047
+ )
1048
+ }
1049
+
1050
+ if (process.env.NODE_ENV === 'development' && time) time`destructure`
1051
+
1052
+ if (
1053
+ !isPassthrough &&
1054
+ groupContext && // avoids onLayout if we don't need it
1055
+ props.containerType !== 'normal'
1056
+ ) {
1057
+ nonGuiProps.onLayout = composeEventHandlers(
1058
+ nonGuiProps.onLayout,
1059
+ (e: LayoutEvent) => {
1060
+ // one off update here
1061
+ const layout = e.nativeEvent.layout
1062
+ groupContext.state.layout = layout
1063
+ stateRef.current.group?.emit({
1064
+ layout,
1065
+ })
1066
+ // force re-render if measure strategy is hide
1067
+ if (!stateRef.current.hasMeasured && props.untilMeasured === 'hide') {
1068
+ setState((prev) => ({ ...prev }))
1069
+ }
1070
+
1071
+ stateRef.current.hasMeasured = true
1072
+ }
1073
+ )
1074
+ }
1075
+
1076
+ viewProps =
1077
+ hooks.usePropsTransform?.(
1078
+ elementType,
1079
+ nonGuiProps,
1080
+ stateRef,
1081
+ stateRef.current.willHydrate
1082
+ ) || nonGuiProps
1083
+
1084
+ if (!stateRef.current.composedRef) {
1085
+ stateRef.current.composedRef = composeRefs<GuiElement>(
1086
+ (x) => (stateRef.current.host = x as GuiElement),
1087
+ forwardedRef,
1088
+ setElementProps,
1089
+ animatedRef
1090
+ )
1091
+ }
1092
+
1093
+ viewProps.ref = stateRef.current.composedRef
1094
+
1095
+ // handle pointer events (native: maps to touch events, web: no-op)
1096
+ usePointerEvents(props, viewProps)
1097
+
1098
+ if (process.env.NODE_ENV === 'development') {
1099
+ if (!isReactNative && !isText && isWeb && !isHOC) {
1100
+ React.Children.toArray(props.children).forEach((item) => {
1101
+ // allow newlines because why not its annoying with mdx
1102
+ if (typeof item === 'string' && item !== '\n') {
1103
+ console.error(
1104
+ `Unexpected text node: ${item}. A text node cannot be a child of a <${staticConfig.componentName || propsIn.tag || 'View'}>.`,
1105
+ props
1106
+ )
1107
+ }
1108
+ })
1109
+ }
1110
+ }
1111
+
1112
+ if (process.env.NODE_ENV === 'development' && time) time`events-hooks`
1113
+
1114
+ const unPress = () => {
1115
+ setStateShallow({ press: false, pressIn: false })
1116
+ }
1117
+
1118
+ if (process.env.NODE_ENV === 'development' && isWeb) {
1119
+ useIsomorphicLayoutEffect(() => {
1120
+ if (debugProp === 'verbose') {
1121
+ function cssStyleDeclarationToObject(style: CSSStyleDeclaration) {
1122
+ const styleObject: Record<string, any> = {}
1123
+ for (let i = 0; i < style.length; i++) {
1124
+ let prop = style[i]
1125
+ styleObject[prop] = style.getPropertyValue(prop)
1126
+ }
1127
+ return styleObject
1128
+ }
1129
+ const computed = stateRef.current.host
1130
+ ? cssStyleDeclarationToObject(
1131
+ getComputedStyle(stateRef.current.host as Element)
1132
+ )
1133
+ : {}
1134
+ console.groupCollapsed(`Rendered > (opacity: ${computed.opacity})`)
1135
+ console.warn(stateRef.current.host)
1136
+ console.warn(computed)
1137
+ console.groupEnd()
1138
+ }
1139
+ })
1140
+ }
1141
+
1142
+ // Animation enter state machine: true -> 'should-enter' -> false
1143
+ // Stage 1: Set 'should-enter' synchronously before paint to apply enterStyle classes
1144
+ // Stage 2: After browser paint, set false to trigger CSS transition
1145
+ //
1146
+ // CRITICAL: useEffect does NOT guarantee post-paint execution!
1147
+ // See: https://thoughtspile.github.io/2021/11/15/unintentional-layout-effect/
1148
+ // When layoutEffect updates state → re-render before paint → useEffect flushes pre-paint
1149
+ // Solution: Double RAF ensures browser has actually painted before we transition
1150
+ useIsomorphicLayoutEffect(() => {
1151
+ if (state.unmounted === true && hasEnterStyle) {
1152
+ setStateShallow({ unmounted: 'should-enter' })
1153
+ return
1154
+ }
1155
+
1156
+ if (state.unmounted) {
1157
+ // For CSS transitions, we need browser to paint enterStyle before removing it.
1158
+ // Double RAF guarantees paint: first RAF schedules after current frame,
1159
+ // second RAF schedules after that frame completes (including paint).
1160
+ if (inputStyle === 'css') {
1161
+ let cancelled = false
1162
+ requestAnimationFrame(() => {
1163
+ if (cancelled) return
1164
+ requestAnimationFrame(() => {
1165
+ if (cancelled) return
1166
+ setStateShallow({ unmounted: false })
1167
+ })
1168
+ })
1169
+ return () => {
1170
+ cancelled = true
1171
+ }
1172
+ }
1173
+ // Non-CSS drivers handle their own animation timing
1174
+ setStateShallow({ unmounted: false })
1175
+ }
1176
+
1177
+ return () => {
1178
+ componentSetStates.delete(setState)
1179
+ stateRef.current.mediaEmitCleanup?.()
1180
+ }
1181
+ }, [state.unmounted, inputStyle])
1182
+
1183
+ useIsomorphicLayoutEffect(() => {
1184
+ if (disabled) return
1185
+
1186
+ if (!pseudoGroups && !mediaGroups) return
1187
+ if (!allGroupContexts) return
1188
+ return subscribeToContextGroup({
1189
+ groupContext: allGroupContexts,
1190
+ setStateShallow,
1191
+ mediaGroups,
1192
+ pseudoGroups,
1193
+ })
1194
+ }, [
1195
+ allGroupContexts,
1196
+ disabled,
1197
+ pseudoGroups ? objectIdentityKey(pseudoGroups) : 0,
1198
+ mediaGroups ? objectIdentityKey(mediaGroups) : 0,
1199
+ ])
1200
+
1201
+ const groupEmitter = stateRef.current.group
1202
+ useIsomorphicLayoutEffect(() => {
1203
+ if (!groupContext || !groupEmitter) return
1204
+
1205
+ notifyGroupSubscribers(groupContext, groupEmitter, state)
1206
+ }, [groupContext, groupEmitter, state])
1207
+
1208
+ // if its a group its gotta listen for pseudos to emit them to children
1209
+
1210
+ const runtimePressStyle = !disabled && noClass && pseudos?.pressStyle
1211
+ const runtimeFocusStyle = !disabled && noClass && pseudos?.focusStyle
1212
+ const runtimeFocusVisibleStyle = !disabled && noClass && pseudos?.focusVisibleStyle
1213
+ const attachFocus = Boolean(
1214
+ runtimePressStyle ||
1215
+ runtimeFocusStyle ||
1216
+ runtimeFocusVisibleStyle ||
1217
+ onFocus ||
1218
+ onBlur ||
1219
+ !!componentContext.setParentFocusState
1220
+ )
1221
+
1222
+ const hasDynamicGroupChildren = Boolean(groupName && state.hasDynGroupChildren)
1223
+
1224
+ const attachPress = Boolean(
1225
+ hasDynamicGroupChildren ||
1226
+ runtimePressStyle ||
1227
+ onPress ||
1228
+ onPressOut ||
1229
+ onPressIn ||
1230
+ onMouseDown ||
1231
+ onMouseUp ||
1232
+ onLongPress ||
1233
+ onClick ||
1234
+ pseudos?.focusVisibleStyle
1235
+ )
1236
+
1237
+ const runtimeHoverStyle = !disabled && noClass && pseudos?.hoverStyle
1238
+ const needsHoverState = Boolean(hasDynamicGroupChildren || runtimeHoverStyle)
1239
+ const attachHover =
1240
+ isWeb &&
1241
+ !!(hasDynamicGroupChildren || needsHoverState || onMouseEnter || onMouseLeave)
1242
+
1243
+ // check presence rather than value to prevent reparenting bugs
1244
+ // allows for onPress={x ? function : undefined} without re-ordering dom
1245
+ const shouldAttach =
1246
+ !disabled &&
1247
+ !props.asChild &&
1248
+ Boolean(
1249
+ attachFocus ||
1250
+ attachPress ||
1251
+ attachHover ||
1252
+ runtimePressStyle ||
1253
+ runtimeHoverStyle ||
1254
+ runtimeFocusStyle
1255
+ )
1256
+
1257
+ const needsPressState = Boolean(hasDynamicGroupChildren || runtimePressStyle)
1258
+
1259
+ if (process.env.NODE_ENV === 'development' && time) time`events-setup`
1260
+
1261
+ if (process.env.NODE_ENV === 'development' && debugProp === 'verbose') {
1262
+ log(`🪩 events()`, {
1263
+ runtimeFocusStyle,
1264
+ runtimePressStyle,
1265
+ runtimeHoverStyle,
1266
+ runtimeFocusVisibleStyle,
1267
+ attachPress,
1268
+ attachFocus,
1269
+ attachHover,
1270
+ shouldAttach,
1271
+ needsHoverState,
1272
+ pseudos,
1273
+ })
1274
+ }
1275
+
1276
+ const events: GuiComponentEvents | null = shouldAttach
1277
+ ? {
1278
+ onPressOut: attachPress
1279
+ ? (e) => {
1280
+ unPress()
1281
+ onPressOut?.(e)
1282
+ onMouseUp?.(e)
1283
+ }
1284
+ : undefined,
1285
+ ...((attachHover || attachPress) && {
1286
+ onMouseEnter: (e) => {
1287
+ const next: Partial<typeof state> = {}
1288
+ // Don't set hover on touch devices - touch triggers mouseenter
1289
+ // but there's no corresponding mouseleave on touch end
1290
+ if (needsHoverState && !lastInteractionWasTouch.value) {
1291
+ next.hover = true
1292
+ }
1293
+ if (needsPressState) {
1294
+ if (state.pressIn) {
1295
+ next.press = true
1296
+ }
1297
+ }
1298
+ setStateShallow(next)
1299
+ onHoverIn?.(e)
1300
+ onMouseEnter?.(e)
1301
+ },
1302
+ onMouseLeave: (e) => {
1303
+ const next: Partial<typeof state> = {}
1304
+ if (needsHoverState) {
1305
+ next.hover = false
1306
+ }
1307
+ if (needsPressState) {
1308
+ next.press = false
1309
+ next.pressIn = false
1310
+ }
1311
+ setStateShallow(next)
1312
+ onHoverOut?.(e)
1313
+ onMouseLeave?.(e)
1314
+ },
1315
+ }),
1316
+ onPressIn: attachPress
1317
+ ? (e) => {
1318
+ if (needsPressState) {
1319
+ setStateShallow({
1320
+ press: true,
1321
+ pressIn: true,
1322
+ })
1323
+ }
1324
+ onPressIn?.(e)
1325
+ onMouseDown?.(e)
1326
+ if (isWeb) {
1327
+ componentSetStates.add(setState)
1328
+ }
1329
+ }
1330
+ : undefined,
1331
+ onPress: attachPress
1332
+ ? (e) => {
1333
+ unPress()
1334
+ // @ts-ignore
1335
+ isWeb && onClick?.(e)
1336
+ onPress?.(e)
1337
+ if (process.env.HANZO_GUI_TARGET === 'web') {
1338
+ onLongPress?.(e)
1339
+ }
1340
+ }
1341
+ : undefined,
1342
+ ...(process.env.HANZO_GUI_TARGET === 'native' &&
1343
+ attachPress &&
1344
+ onLongPress && {
1345
+ onLongPress: (e) => {
1346
+ unPress()
1347
+ onLongPress?.(e)
1348
+ },
1349
+ }),
1350
+ ...(attachFocus && {
1351
+ onFocus: (e) => {
1352
+ const next: Partial<typeof state> = {}
1353
+ if (componentContext.setParentFocusState) {
1354
+ componentContext.setParentFocusState({ focusWithin: true })
1355
+ next.focusWithin = true
1356
+ }
1357
+ if (pseudos?.focusVisibleStyle) {
1358
+ if (lastInteractionWasKeyboard.value) {
1359
+ next.focusVisible = true
1360
+ } else {
1361
+ next.focus = true
1362
+ }
1363
+ } else {
1364
+ next.focus = true
1365
+ }
1366
+ setStateShallow(next)
1367
+ onFocus?.(e)
1368
+ },
1369
+ onBlur: (e) => {
1370
+ if (componentContext.setParentFocusState) {
1371
+ componentContext.setParentFocusState({ focusWithin: false })
1372
+ }
1373
+ setStateShallow({
1374
+ focus: false,
1375
+ focusVisible: false,
1376
+ focusWithin: false,
1377
+ })
1378
+ onBlur?.(e)
1379
+ },
1380
+ }),
1381
+ }
1382
+ : null
1383
+
1384
+ if (process.env.HANZO_GUI_TARGET === 'native' && events && !asChild) {
1385
+ // replicating TouchableWithoutFeedback
1386
+ Object.assign(events, {
1387
+ cancelable: !viewProps.rejectResponderTermination,
1388
+ disabled: disabled,
1389
+ hitSlop: viewProps.hitSlop,
1390
+ delayLongPress: viewProps.delayLongPress,
1391
+ delayPressIn: viewProps.delayPressIn,
1392
+ delayPressOut: viewProps.delayPressOut,
1393
+ focusable: viewProps.focusable ?? true,
1394
+ minPressDuration: 0,
1395
+ })
1396
+ }
1397
+
1398
+ if (process.env.HANZO_GUI_TARGET === 'web' && events && !isReactNative) {
1399
+ Object.assign(viewProps, getWebEvents(events))
1400
+ }
1401
+
1402
+ if (process.env.NODE_ENV === 'development' && time) time`events`
1403
+
1404
+ if (process.env.NODE_ENV === 'development' && debugProp === 'verbose') {
1405
+ log(`events`, { events, attachHover, attachPress })
1406
+ }
1407
+
1408
+ // EVENTS native - handles focus/blur, input special cases, and RNGH press handling
1409
+ // Skip gesture setup for HOC components - they may return null which crashes GestureDetector
1410
+ const pressGesture =
1411
+ process.env.HANZO_GUI_TARGET === 'native'
1412
+ ? useEvents(events, viewProps, stateRef, staticConfig, isHOC, isInsideNativeMenu)
1413
+ : null
1414
+
1415
+ if (process.env.NODE_ENV === 'development' && time) time`hooks`
1416
+
1417
+ if (asChild) {
1418
+ elementType = Slot
1419
+ // on native this is already merged into viewProps in useEvents
1420
+ if (process.env.HANZO_GUI_TARGET === 'web') {
1421
+ const webStyleEvents = asChild === 'web' || asChild === 'except-style-web'
1422
+ const passEvents = getWebEvents(
1423
+ {
1424
+ onPress,
1425
+ onLongPress,
1426
+ onPressIn,
1427
+ onPressOut,
1428
+ onMouseUp,
1429
+ onMouseDown,
1430
+ onMouseEnter,
1431
+ onMouseLeave,
1432
+ },
1433
+ webStyleEvents
1434
+ )
1435
+ Object.assign(viewProps, passEvents)
1436
+ } else {
1437
+ Object.assign(viewProps, { onPress, onLongPress })
1438
+ }
1439
+ }
1440
+
1441
+ if (process.env.NODE_ENV === 'development' && time) time`spaced-as-child`
1442
+
1443
+ let content: ReactNode | undefined
1444
+
1445
+ if (isPassthrough) {
1446
+ // avoid re-parenting but avoid layout changes
1447
+ content = React.createElement(
1448
+ BaseComponent,
1449
+ {
1450
+ style: {
1451
+ display: 'contents',
1452
+ },
1453
+ },
1454
+ propsIn.children
1455
+ )
1456
+ } else {
1457
+ // here elementType is either the custom animated driver view, or base view
1458
+ if (hooks.useChildren) {
1459
+ // ONLY native:
1460
+ content = hooks.useChildren(elementType, content || children, viewProps)
1461
+ }
1462
+
1463
+ const isRenderPropString = typeof renderProp === 'string'
1464
+
1465
+ // this ONLY handles the case where render is NOT a string
1466
+ // either direct JSX, or a function that returns JSX, we always clone
1467
+ if (renderProp && !isRenderPropString) {
1468
+ const out = getCustomRender(
1469
+ renderProp,
1470
+ content || children,
1471
+ viewProps,
1472
+ componentState
1473
+ )
1474
+ if (out) {
1475
+ viewProps = out.viewProps
1476
+ elementType = out.elementType
1477
+ }
1478
+ }
1479
+
1480
+ if (!content) {
1481
+ // web-only, handle render === string passing to custom animated component
1482
+ if (isRenderPropString) {
1483
+ viewProps.render === renderProp
1484
+ }
1485
+
1486
+ content = React.createElement(elementType, viewProps, content || children)
1487
+ }
1488
+
1489
+ if (process.env.NODE_ENV === 'development' && time) time`use-children`
1490
+ }
1491
+
1492
+ // wrap with GestureDetector for RNGH press handling (native only, no-op on web)
1493
+ // Skip for HOC components - they pass press events to inner component instead
1494
+ if (process.env.HANZO_GUI_TARGET === 'native') {
1495
+ content = wrapWithGestureDetector(content, pressGesture, stateRef, isHOC)
1496
+ }
1497
+
1498
+ // needs to reset the presence state for nested children
1499
+ // Use the resolved animationDriver (handles multi-driver config)
1500
+ const ResetPresence = animationDriver?.ResetPresence
1501
+ const needsReset = Boolean(
1502
+ // not when passing down to child
1503
+ !asChild &&
1504
+ // not when passThrough
1505
+ splitStyles &&
1506
+ // not when HOC
1507
+ !isHOC &&
1508
+ ResetPresence &&
1509
+ willBeAnimated &&
1510
+ (hasEnterStyle || presenceState)
1511
+ )
1512
+ // avoid re-parenting
1513
+ const hasEverReset = stateRef.current.hasEverResetPresence
1514
+ if (needsReset && !hasEverReset) {
1515
+ stateRef.current.hasEverResetPresence = true
1516
+ }
1517
+ const renderReset = needsReset || hasEverReset
1518
+ if (renderReset && ResetPresence) {
1519
+ content = <ResetPresence disabled={!needsReset}>{content}</ResetPresence>
1520
+ }
1521
+
1522
+ if (process.env.NODE_ENV === 'development' && time) time`create-element`
1523
+
1524
+ if ('focusWithinStyle' in propsIn || pseudos?.focusWithinStyle) {
1525
+ content = (
1526
+ <ComponentContext.Provider
1527
+ {...componentContext}
1528
+ setParentFocusState={setStateShallow}
1529
+ >
1530
+ {content}
1531
+ </ComponentContext.Provider>
1532
+ )
1533
+ }
1534
+
1535
+ if ('group' in props) {
1536
+ content = (
1537
+ <GroupContext.Provider value={allGroupContexts}>{content}</GroupContext.Provider>
1538
+ )
1539
+ }
1540
+
1541
+ // Text components set inText context for children so nested Text can inherit styles
1542
+ if (process.env.HANZO_GUI_TARGET === 'web' && !asChild && isText && !hasTextAncestor) {
1543
+ content = (
1544
+ <ComponentContext.Provider {...componentContext} inText={true}>
1545
+ {content}
1546
+ </ComponentContext.Provider>
1547
+ )
1548
+ }
1549
+
1550
+ if (process.env.NODE_ENV === 'development' && time) time`group-context`
1551
+
1552
+ content =
1553
+ disableTheme || !splitStyles
1554
+ ? content
1555
+ : getThemedChildren(themeState, content, themeStateProps, false, stateRef)
1556
+
1557
+ if (process.env.NODE_ENV === 'development' && time) time`themed-children`
1558
+
1559
+ if (process.env.HANZO_GUI_TARGET === 'web') {
1560
+ if (isReactNative && !asChild) {
1561
+ content = (
1562
+ <span
1563
+ className="_dsp_contents"
1564
+ {...(!isPassthrough && isHydrated && events && getWebEvents(events))}
1565
+ >
1566
+ {content}
1567
+ </span>
1568
+ )
1569
+ }
1570
+ }
1571
+
1572
+ if (overriddenContextProps && contextForOverride) {
1573
+ const Provider = contextForOverride.Provider!
1574
+
1575
+ // make sure we re-order styled context keys based on how we pass them here:
1576
+ for (const key in styledContextValue) {
1577
+ if (!(key in overriddenContextProps)) {
1578
+ overriddenContextProps[key] = styledContextValue[key]
1579
+ }
1580
+ }
1581
+
1582
+ content = (
1583
+ <Provider __disableMergeDefaultValues {...overriddenContextProps}>
1584
+ {content}
1585
+ </Provider>
1586
+ )
1587
+ }
1588
+
1589
+ if (process.env.NODE_ENV === 'development' && time) time`context-override`
1590
+
1591
+ // SSR style support - for non compiled styles we render them inline until client takes over
1592
+ // on client we then switch over to our global sheet insert, because rendering inline is expensive
1593
+ if (process.env.HANZO_GUI_TARGET === 'web' && startedUnhydrated && splitStyles) {
1594
+ content = (
1595
+ <>
1596
+ {content}
1597
+ {/* we surpress hydration warnings */}
1598
+ {!isHydrated ? getStyleTags(Object.values(splitStyles.rulesToInsert)) : null}
1599
+ </>
1600
+ )
1601
+ }
1602
+
1603
+ if (process.env.NODE_ENV === 'development' && time) time`style-tags`
1604
+
1605
+ if (process.env.NODE_ENV === 'development') {
1606
+ if (debugProp && debugProp !== 'profile') {
1607
+ const element = typeof elementType === 'string' ? elementType : 'Component'
1608
+ const title = `render <${element} /> (${internalID}) with props`
1609
+ if (!isWeb || !isClient) {
1610
+ log(title)
1611
+ log(`state: `, state)
1612
+ if (isDevTools) {
1613
+ log('viewProps', viewProps)
1614
+ }
1615
+ log(`final styles:`)
1616
+ for (const key in splitStylesStyle) {
1617
+ log(key, splitStylesStyle[key])
1618
+ }
1619
+ } else {
1620
+ console.groupCollapsed(title)
1621
+ try {
1622
+ log('viewProps', viewProps)
1623
+ log('children', content)
1624
+ if (typeof window !== 'undefined') {
1625
+ log({
1626
+ propsIn,
1627
+ props,
1628
+ attachPress,
1629
+ animationStyles,
1630
+ classNames,
1631
+ content,
1632
+ elementType,
1633
+ events,
1634
+ isAnimated,
1635
+ hasRuntimeMediaKeys,
1636
+ isStringElement,
1637
+ mediaListeningKeys,
1638
+ pseudos,
1639
+ shouldAttach,
1640
+ noClass,
1641
+ shouldListenForMedia,
1642
+ splitStyles,
1643
+ splitStylesStyle,
1644
+ state,
1645
+ stateRef,
1646
+ staticConfig,
1647
+ styleProps,
1648
+ themeState,
1649
+ viewProps,
1650
+ willBeAnimated,
1651
+ startedUnhydrated,
1652
+ })
1653
+ }
1654
+ } catch {
1655
+ // RN can run into PayloadTooLargeError: request entity too large
1656
+ } finally {
1657
+ console.groupEnd()
1658
+ }
1659
+ }
1660
+ if (debugProp === 'break') {
1661
+ // debugger intentionally here for debugging
1662
+ }
1663
+ }
1664
+ }
1665
+
1666
+ if (process.env.NODE_ENV === 'development' && time) {
1667
+ time`rest`
1668
+ if (!globalThis['willPrint']) {
1669
+ globalThis['willPrint'] = true
1670
+ setTimeout(() => {
1671
+ delete globalThis['willPrint']
1672
+ time.print()
1673
+ time = null
1674
+ }, 50)
1675
+ }
1676
+ }
1677
+
1678
+ return content
1679
+ })
1680
+
1681
+ function notifyGroupSubscribers(
1682
+ groupContext: SingleGroupContext | null,
1683
+ groupEmitter: ComponentGroupEmitter | null,
1684
+ pseudo: PseudoGroupState
1685
+ ) {
1686
+ if (!groupContext || !groupEmitter) {
1687
+ return
1688
+ }
1689
+ const nextState = { ...groupContext.state, pseudo }
1690
+ groupEmitter.emit(nextState)
1691
+ groupContext.state = nextState
1692
+ }
1693
+
1694
+ // let hasLogged = false
1695
+
1696
+ if (staticConfig.componentName) {
1697
+ component.displayName = staticConfig.componentName
1698
+ }
1699
+
1700
+ type ComponentType = GuiComponent<
1701
+ ComponentPropTypes,
1702
+ Ref,
1703
+ BaseProps,
1704
+ BaseStyles,
1705
+ {}
1706
+ >
1707
+
1708
+ let res: ComponentType = component as any
1709
+
1710
+ // we now have avoid re-renders in many more cases so imo this is way more worth it
1711
+ // Text/Button/string taking components
1712
+ // + react compiler can memoize children too
1713
+ res = React.memo(res) as any
1714
+
1715
+ res.staticConfig = staticConfig
1716
+
1717
+ function extendStyledConfig(extended?: Partial<StaticConfig>) {
1718
+ return {
1719
+ ...staticConfig,
1720
+ ...extended,
1721
+ neverFlatten: true,
1722
+ isHOC: true,
1723
+ isStyledHOC: false,
1724
+ }
1725
+ }
1726
+
1727
+ function styleable(Component: any, options?: StyleableOptions) {
1728
+ const skipForwardRef = typeof Component === 'function' && Component.length === 1
1729
+
1730
+ let out = skipForwardRef ? Component : React.forwardRef(Component)
1731
+
1732
+ const extendedConfig = extendStyledConfig(options?.staticConfig)
1733
+
1734
+ out = options?.disableTheme ? out : themeable(out, extendedConfig, true)
1735
+
1736
+ if (extendedConfig.memo || process.env.HANZO_GUI_MEMOIZE_STYLEABLE) {
1737
+ out = React.memo(out)
1738
+ }
1739
+
1740
+ out.staticConfig = extendedConfig
1741
+ out.styleable = styleable
1742
+ return out
1743
+ }
1744
+
1745
+ res.styleable = styleable
1746
+
1747
+ return res
1748
+ }
1749
+
1750
+ const fromPx = (val?: any): number => {
1751
+ if (typeof val === 'number') return val
1752
+ if (typeof val === 'string') return +val.replace('px', '')
1753
+ return 0
1754
+ }
1755
+
1756
+ // handles all render logic - returns a new component
1757
+ const getCustomRender = (
1758
+ renderProp: ViewProps['render'],
1759
+ content: ReactNode,
1760
+ viewProps: Record<string, unknown>,
1761
+ state: any
1762
+ ):
1763
+ | undefined
1764
+ | {
1765
+ viewProps: Record<string, any>
1766
+ elementType: any
1767
+ } => {
1768
+ // Handle render prop variants: function, JSX element, or string
1769
+ if (typeof renderProp === 'function') {
1770
+ // Render function: full control with props and state
1771
+ const out = renderProp(viewProps, state)
1772
+ renderProp = getRenderElementForPlatform(out)
1773
+ }
1774
+
1775
+ if (renderProp) {
1776
+ if (typeof renderProp === 'object' && React.isValidElement(renderProp)) {
1777
+ // JSX element: clone with merged props
1778
+ const renderElement = getRenderElementForPlatform(renderProp)
1779
+ if (renderElement) {
1780
+ const elementProps = renderProp.props as Record<string, any> | undefined
1781
+ const mergedProps = elementProps
1782
+ ? mergeRenderElementProps(elementProps, viewProps, content)
1783
+ : viewProps
1784
+
1785
+ return {
1786
+ elementType: renderProp.type,
1787
+ viewProps: mergedProps,
1788
+ }
1789
+ }
1790
+ }
1791
+ }
1792
+ }
1793
+
1794
+ // avoid passing web-only elements to native
1795
+ function getRenderElementForPlatform(potential: ReactElement) {
1796
+ if (process.env.HANZO_GUI_TARGET === 'native') {
1797
+ if (isHTMLElement(potential)) {
1798
+ return
1799
+ }
1800
+ }
1801
+ return potential
1802
+ }
1803
+
1804
+ function isHTMLElement(el: ReactElement) {
1805
+ return typeof el['type'] === 'string' && el['type'][0] === el['type'][0].toLowerCase()
1806
+ }