@tamagui/core 1.0.1-beta.138 → 1.0.1-beta.141

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 (519) hide show
  1. package/dist/cjs/Tamagui.js +0 -0
  2. package/dist/cjs/Tamagui.js.map +0 -0
  3. package/dist/cjs/addTheme.js +0 -0
  4. package/dist/cjs/addTheme.js.map +0 -0
  5. package/dist/cjs/conf.js +0 -0
  6. package/dist/cjs/conf.js.map +0 -0
  7. package/dist/cjs/constants/constants.js +0 -0
  8. package/dist/cjs/constants/constants.js.map +0 -0
  9. package/dist/cjs/constants/platform.js +0 -0
  10. package/dist/cjs/constants/platform.js.map +0 -0
  11. package/dist/cjs/contexts/ButtonInsideButtonContext.js +0 -0
  12. package/dist/cjs/contexts/ButtonInsideButtonContext.js.map +0 -0
  13. package/dist/cjs/contexts/FontLanguageContext.js +0 -0
  14. package/dist/cjs/contexts/FontLanguageContext.js.map +0 -0
  15. package/dist/cjs/contexts/TextAncestorContext.js +0 -0
  16. package/dist/cjs/contexts/TextAncestorContext.js.map +0 -0
  17. package/dist/cjs/contexts/ThemeContext.js +0 -0
  18. package/dist/cjs/contexts/ThemeContext.js.map +0 -0
  19. package/dist/cjs/createComponent.js +14 -28
  20. package/dist/cjs/createComponent.js.map +2 -2
  21. package/dist/cjs/createFont.js +0 -0
  22. package/dist/cjs/createFont.js.map +0 -0
  23. package/dist/cjs/createShorthands.js +0 -0
  24. package/dist/cjs/createShorthands.js.map +0 -0
  25. package/dist/cjs/createTamagui.js +24 -27
  26. package/dist/cjs/createTamagui.js.map +2 -2
  27. package/dist/cjs/createTheme.js +0 -0
  28. package/dist/cjs/createTheme.js.map +0 -0
  29. package/dist/cjs/createTokens.js +0 -0
  30. package/dist/cjs/createTokens.js.map +0 -0
  31. package/dist/cjs/createVariable.js +18 -26
  32. package/dist/cjs/createVariable.js.map +2 -2
  33. package/dist/cjs/createVariables.js +0 -0
  34. package/dist/cjs/createVariables.js.map +0 -0
  35. package/dist/cjs/helpers/RNComponents.js +0 -0
  36. package/dist/cjs/helpers/RNComponents.js.map +0 -0
  37. package/dist/cjs/helpers/ThemeManager.js +0 -0
  38. package/dist/cjs/helpers/ThemeManager.js.map +0 -0
  39. package/dist/cjs/helpers/areEqualSets.js +0 -0
  40. package/dist/cjs/helpers/areEqualSets.js.map +0 -0
  41. package/dist/cjs/helpers/assignNativePropsToWeb.js +1 -0
  42. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +2 -2
  43. package/dist/cjs/helpers/assignNativePropsToWeb.native.js +0 -0
  44. package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +0 -0
  45. package/dist/cjs/helpers/calc.js +0 -0
  46. package/dist/cjs/helpers/calc.js.map +0 -0
  47. package/dist/cjs/helpers/createMediaStyle.js +0 -0
  48. package/dist/cjs/helpers/createMediaStyle.js.map +0 -0
  49. package/dist/cjs/helpers/createPropMapper.js +2 -3
  50. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  51. package/dist/cjs/helpers/createShallowUpdate.js +0 -0
  52. package/dist/cjs/helpers/createShallowUpdate.js.map +0 -0
  53. package/dist/cjs/helpers/cssHash.js +0 -0
  54. package/dist/cjs/helpers/cssHash.js.map +0 -0
  55. package/dist/cjs/helpers/expandStyle.js +0 -0
  56. package/dist/cjs/helpers/expandStyle.js.map +0 -0
  57. package/dist/cjs/helpers/expandStyles.js +0 -0
  58. package/dist/cjs/helpers/expandStyles.js.map +0 -0
  59. package/dist/cjs/helpers/extendStaticConfig.js +0 -0
  60. package/dist/cjs/helpers/extendStaticConfig.js.map +0 -0
  61. package/dist/cjs/helpers/fixNativeShadow.js +0 -0
  62. package/dist/cjs/helpers/fixNativeShadow.js.map +0 -0
  63. package/dist/cjs/helpers/getExpandedShorthands.js +0 -0
  64. package/dist/cjs/helpers/getExpandedShorthands.js.map +0 -0
  65. package/dist/cjs/helpers/getFont.js +0 -0
  66. package/dist/cjs/helpers/getFont.js.map +0 -0
  67. package/dist/cjs/helpers/getFontLanguage.js +0 -0
  68. package/dist/cjs/helpers/getFontLanguage.js.map +0 -0
  69. package/dist/cjs/helpers/getSize.js +0 -0
  70. package/dist/cjs/helpers/getSize.js.map +0 -0
  71. package/dist/cjs/helpers/getSplitStyles.js +11 -2
  72. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  73. package/dist/cjs/helpers/getStackSize.js +0 -0
  74. package/dist/cjs/helpers/getStackSize.js.map +0 -0
  75. package/dist/cjs/helpers/getStylesAtomic.js +0 -0
  76. package/dist/cjs/helpers/getStylesAtomic.js.map +0 -0
  77. package/dist/cjs/helpers/getStylesAtomic.native.js +0 -0
  78. package/dist/cjs/helpers/getStylesAtomic.native.js.map +0 -0
  79. package/dist/cjs/helpers/getThemeCSSRules.js +0 -0
  80. package/dist/cjs/helpers/getThemeCSSRules.js.map +0 -0
  81. package/dist/cjs/helpers/getThemeCSSRules.native.js +0 -0
  82. package/dist/cjs/helpers/getThemeCSSRules.native.js.map +0 -0
  83. package/dist/cjs/helpers/getVariantExtras.js +6 -6
  84. package/dist/cjs/helpers/getVariantExtras.js.map +2 -2
  85. package/dist/cjs/helpers/insertStyleRule.js +6 -1
  86. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  87. package/dist/cjs/helpers/isObj.js +0 -0
  88. package/dist/cjs/helpers/isObj.js.map +0 -0
  89. package/dist/cjs/helpers/isTamaguiComponent.js +0 -0
  90. package/dist/cjs/helpers/isTamaguiComponent.js.map +0 -0
  91. package/dist/cjs/helpers/isTamaguiElement.js +0 -0
  92. package/dist/cjs/helpers/isTamaguiElement.js.map +0 -0
  93. package/dist/cjs/helpers/matchMedia.js +0 -0
  94. package/dist/cjs/helpers/matchMedia.js.map +0 -0
  95. package/dist/cjs/helpers/matchMedia.native.js +0 -0
  96. package/dist/cjs/helpers/matchMedia.native.js.map +0 -0
  97. package/dist/cjs/helpers/mergeProps.js +18 -14
  98. package/dist/cjs/helpers/mergeProps.js.map +2 -2
  99. package/dist/cjs/helpers/mergeTransform.js +0 -0
  100. package/dist/cjs/helpers/mergeTransform.js.map +0 -0
  101. package/dist/cjs/helpers/normalizeColor.js +0 -0
  102. package/dist/cjs/helpers/normalizeColor.js.map +0 -0
  103. package/dist/cjs/helpers/normalizeValueWithProperty.js +0 -0
  104. package/dist/cjs/helpers/normalizeValueWithProperty.js.map +0 -0
  105. package/dist/cjs/helpers/proxyThemeVariables.js +0 -0
  106. package/dist/cjs/helpers/proxyThemeVariables.js.map +0 -0
  107. package/dist/cjs/helpers/pseudoDescriptors.js +0 -0
  108. package/dist/cjs/helpers/pseudoDescriptors.js.map +0 -0
  109. package/dist/cjs/helpers/registerCSSVariable.js +0 -0
  110. package/dist/cjs/helpers/registerCSSVariable.js.map +2 -2
  111. package/dist/cjs/helpers/startTransition.js +0 -0
  112. package/dist/cjs/helpers/startTransition.js.map +0 -0
  113. package/dist/cjs/helpers/themeable.js +0 -0
  114. package/dist/cjs/helpers/themeable.js.map +0 -0
  115. package/dist/cjs/helpers/themes.js +0 -0
  116. package/dist/cjs/helpers/themes.js.map +0 -0
  117. package/dist/cjs/helpers/validate.js +0 -0
  118. package/dist/cjs/helpers/validate.js.map +0 -0
  119. package/dist/cjs/helpers/withStaticProperties.js +0 -0
  120. package/dist/cjs/helpers/withStaticProperties.js.map +0 -0
  121. package/dist/cjs/hooks/getThemeUnwrapped.js +0 -0
  122. package/dist/cjs/hooks/getThemeUnwrapped.js.map +0 -0
  123. package/dist/cjs/hooks/useConstant.js +3 -0
  124. package/dist/cjs/hooks/useConstant.js.map +2 -2
  125. package/dist/cjs/hooks/useFeatures.js +8 -0
  126. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  127. package/dist/cjs/hooks/useId.js +2 -32
  128. package/dist/cjs/hooks/useId.js.map +2 -2
  129. package/dist/cjs/hooks/useIsMounted.js +0 -0
  130. package/dist/cjs/hooks/useIsMounted.js.map +0 -0
  131. package/dist/cjs/hooks/useIsSSR.js +2 -2
  132. package/dist/cjs/hooks/useIsSSR.js.map +2 -2
  133. package/dist/cjs/hooks/useIsTouchDevice.js +0 -0
  134. package/dist/cjs/hooks/useIsTouchDevice.js.map +0 -0
  135. package/dist/cjs/hooks/useMedia.js +75 -92
  136. package/dist/cjs/hooks/useMedia.js.map +2 -2
  137. package/dist/cjs/hooks/usePressable.js +0 -0
  138. package/dist/cjs/hooks/usePressable.js.map +0 -0
  139. package/dist/cjs/hooks/useSafeRef.js +60 -0
  140. package/dist/cjs/hooks/useSafeRef.js.map +7 -0
  141. package/dist/cjs/hooks/useTheme.js +3 -5
  142. package/dist/cjs/hooks/useTheme.js.map +2 -2
  143. package/dist/cjs/hooks/useUnmountEffect.js +0 -0
  144. package/dist/cjs/hooks/useUnmountEffect.js.map +0 -0
  145. package/dist/cjs/index.js +21 -3
  146. package/dist/cjs/index.js.map +2 -2
  147. package/dist/cjs/insertFont.js +0 -0
  148. package/dist/cjs/insertFont.js.map +1 -1
  149. package/dist/cjs/static.js +0 -0
  150. package/dist/cjs/static.js.map +0 -0
  151. package/dist/cjs/styled.js +0 -0
  152. package/dist/cjs/styled.js.map +0 -0
  153. package/dist/cjs/types-rnw.js +0 -0
  154. package/dist/cjs/types-rnw.js.map +0 -0
  155. package/dist/cjs/types.js +0 -0
  156. package/dist/cjs/types.js.map +1 -1
  157. package/dist/cjs/updateTheme.js +0 -0
  158. package/dist/cjs/updateTheme.js.map +0 -0
  159. package/dist/cjs/vendor/Pressability.js +0 -0
  160. package/dist/cjs/vendor/Pressability.js.map +0 -0
  161. package/dist/cjs/vendor/Pressability.native.js +0 -0
  162. package/dist/cjs/vendor/Pressability.native.js.map +0 -0
  163. package/dist/cjs/views/FontLanguage.js +0 -0
  164. package/dist/cjs/views/FontLanguage.js.map +0 -0
  165. package/dist/cjs/views/FontLanguage.native.js +0 -0
  166. package/dist/cjs/views/FontLanguage.native.js.map +0 -0
  167. package/dist/cjs/views/FontLanguage.types.js +0 -0
  168. package/dist/cjs/views/FontLanguage.types.js.map +0 -0
  169. package/dist/cjs/views/Slot.js +2 -2
  170. package/dist/cjs/views/Slot.js.map +2 -2
  171. package/dist/cjs/views/Stack.js +0 -0
  172. package/dist/cjs/views/Stack.js.map +0 -0
  173. package/dist/cjs/{helpers/createTamaguiProvider.js → views/TamaguiProvider.js} +37 -34
  174. package/dist/cjs/views/TamaguiProvider.js.map +7 -0
  175. package/dist/cjs/views/Text.js +0 -0
  176. package/dist/cjs/views/Text.js.map +0 -0
  177. package/dist/cjs/views/Theme.js +4 -3
  178. package/dist/cjs/views/Theme.js.map +2 -2
  179. package/dist/cjs/views/ThemeInverse.js +0 -0
  180. package/dist/cjs/views/ThemeInverse.js.map +0 -0
  181. package/dist/cjs/views/ThemeProvider.js +2 -2
  182. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  183. package/dist/cjs/views/ThemeReset.js +0 -0
  184. package/dist/cjs/views/ThemeReset.js.map +0 -0
  185. package/dist/esm/Tamagui.js +0 -0
  186. package/dist/esm/Tamagui.js.map +0 -0
  187. package/dist/esm/addTheme.js +0 -0
  188. package/dist/esm/addTheme.js.map +0 -0
  189. package/dist/esm/conf.js +0 -0
  190. package/dist/esm/conf.js.map +0 -0
  191. package/dist/esm/constants/constants.js +0 -0
  192. package/dist/esm/constants/constants.js.map +0 -0
  193. package/dist/esm/constants/platform.js +0 -0
  194. package/dist/esm/constants/platform.js.map +0 -0
  195. package/dist/esm/contexts/ButtonInsideButtonContext.js +0 -0
  196. package/dist/esm/contexts/ButtonInsideButtonContext.js.map +0 -0
  197. package/dist/esm/contexts/FontLanguageContext.js +0 -0
  198. package/dist/esm/contexts/FontLanguageContext.js.map +0 -0
  199. package/dist/esm/contexts/TextAncestorContext.js +0 -0
  200. package/dist/esm/contexts/TextAncestorContext.js.map +0 -0
  201. package/dist/esm/contexts/ThemeContext.js +0 -0
  202. package/dist/esm/contexts/ThemeContext.js.map +0 -0
  203. package/dist/esm/createComponent.js +15 -29
  204. package/dist/esm/createComponent.js.map +2 -2
  205. package/dist/esm/createFont.js +0 -0
  206. package/dist/esm/createFont.js.map +0 -0
  207. package/dist/esm/createShorthands.js +0 -0
  208. package/dist/esm/createShorthands.js.map +0 -0
  209. package/dist/esm/createTamagui.js +24 -27
  210. package/dist/esm/createTamagui.js.map +2 -2
  211. package/dist/esm/createTheme.js +0 -0
  212. package/dist/esm/createTheme.js.map +0 -0
  213. package/dist/esm/createTokens.js +0 -0
  214. package/dist/esm/createTokens.js.map +0 -0
  215. package/dist/esm/createVariable.js +16 -24
  216. package/dist/esm/createVariable.js.map +2 -2
  217. package/dist/esm/createVariables.js +0 -0
  218. package/dist/esm/createVariables.js.map +0 -0
  219. package/dist/esm/helpers/RNComponents.js +0 -0
  220. package/dist/esm/helpers/RNComponents.js.map +0 -0
  221. package/dist/esm/helpers/ThemeManager.js +0 -0
  222. package/dist/esm/helpers/ThemeManager.js.map +0 -0
  223. package/dist/esm/helpers/areEqualSets.js +0 -0
  224. package/dist/esm/helpers/areEqualSets.js.map +0 -0
  225. package/dist/esm/helpers/assignNativePropsToWeb.js +1 -0
  226. package/dist/esm/helpers/assignNativePropsToWeb.js.map +2 -2
  227. package/dist/esm/helpers/assignNativePropsToWeb.native.js +0 -0
  228. package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +0 -0
  229. package/dist/esm/helpers/calc.js +0 -0
  230. package/dist/esm/helpers/calc.js.map +0 -0
  231. package/dist/esm/helpers/createMediaStyle.js +0 -0
  232. package/dist/esm/helpers/createMediaStyle.js.map +0 -0
  233. package/dist/esm/helpers/createPropMapper.js +2 -3
  234. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  235. package/dist/esm/helpers/createShallowUpdate.js +0 -0
  236. package/dist/esm/helpers/createShallowUpdate.js.map +0 -0
  237. package/dist/esm/helpers/cssHash.js +0 -0
  238. package/dist/esm/helpers/cssHash.js.map +0 -0
  239. package/dist/esm/helpers/expandStyle.js +0 -0
  240. package/dist/esm/helpers/expandStyle.js.map +0 -0
  241. package/dist/esm/helpers/expandStyles.js +0 -0
  242. package/dist/esm/helpers/expandStyles.js.map +0 -0
  243. package/dist/esm/helpers/extendStaticConfig.js +0 -0
  244. package/dist/esm/helpers/extendStaticConfig.js.map +0 -0
  245. package/dist/esm/helpers/fixNativeShadow.js +0 -0
  246. package/dist/esm/helpers/fixNativeShadow.js.map +0 -0
  247. package/dist/esm/helpers/getExpandedShorthands.js +0 -0
  248. package/dist/esm/helpers/getExpandedShorthands.js.map +0 -0
  249. package/dist/esm/helpers/getFont.js +0 -0
  250. package/dist/esm/helpers/getFont.js.map +0 -0
  251. package/dist/esm/helpers/getFontLanguage.js +0 -0
  252. package/dist/esm/helpers/getFontLanguage.js.map +0 -0
  253. package/dist/esm/helpers/getSize.js +0 -0
  254. package/dist/esm/helpers/getSize.js.map +0 -0
  255. package/dist/esm/helpers/getSplitStyles.js +11 -2
  256. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  257. package/dist/esm/helpers/getStackSize.js +0 -0
  258. package/dist/esm/helpers/getStackSize.js.map +0 -0
  259. package/dist/esm/helpers/getStylesAtomic.js +0 -0
  260. package/dist/esm/helpers/getStylesAtomic.js.map +0 -0
  261. package/dist/esm/helpers/getStylesAtomic.native.js +0 -0
  262. package/dist/esm/helpers/getStylesAtomic.native.js.map +0 -0
  263. package/dist/esm/helpers/getThemeCSSRules.js +0 -0
  264. package/dist/esm/helpers/getThemeCSSRules.js.map +0 -0
  265. package/dist/esm/helpers/getThemeCSSRules.native.js +0 -0
  266. package/dist/esm/helpers/getThemeCSSRules.native.js.map +0 -0
  267. package/dist/esm/helpers/getVariantExtras.js +6 -6
  268. package/dist/esm/helpers/getVariantExtras.js.map +2 -2
  269. package/dist/esm/helpers/insertStyleRule.js +6 -1
  270. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  271. package/dist/esm/helpers/isObj.js +0 -0
  272. package/dist/esm/helpers/isObj.js.map +0 -0
  273. package/dist/esm/helpers/isTamaguiComponent.js +0 -0
  274. package/dist/esm/helpers/isTamaguiComponent.js.map +0 -0
  275. package/dist/esm/helpers/isTamaguiElement.js +0 -0
  276. package/dist/esm/helpers/isTamaguiElement.js.map +0 -0
  277. package/dist/esm/helpers/matchMedia.js +0 -0
  278. package/dist/esm/helpers/matchMedia.js.map +0 -0
  279. package/dist/esm/helpers/matchMedia.native.js +0 -0
  280. package/dist/esm/helpers/matchMedia.native.js.map +0 -0
  281. package/dist/esm/helpers/mergeProps.js +18 -14
  282. package/dist/esm/helpers/mergeProps.js.map +2 -2
  283. package/dist/esm/helpers/mergeTransform.js +0 -0
  284. package/dist/esm/helpers/mergeTransform.js.map +0 -0
  285. package/dist/esm/helpers/normalizeColor.js +0 -0
  286. package/dist/esm/helpers/normalizeColor.js.map +0 -0
  287. package/dist/esm/helpers/normalizeValueWithProperty.js +0 -0
  288. package/dist/esm/helpers/normalizeValueWithProperty.js.map +0 -0
  289. package/dist/esm/helpers/proxyThemeVariables.js +0 -0
  290. package/dist/esm/helpers/proxyThemeVariables.js.map +0 -0
  291. package/dist/esm/helpers/pseudoDescriptors.js +0 -0
  292. package/dist/esm/helpers/pseudoDescriptors.js.map +0 -0
  293. package/dist/esm/helpers/registerCSSVariable.js +0 -0
  294. package/dist/esm/helpers/registerCSSVariable.js.map +2 -2
  295. package/dist/esm/helpers/startTransition.js +0 -0
  296. package/dist/esm/helpers/startTransition.js.map +0 -0
  297. package/dist/esm/helpers/themeable.js +0 -0
  298. package/dist/esm/helpers/themeable.js.map +0 -0
  299. package/dist/esm/helpers/themes.js +0 -0
  300. package/dist/esm/helpers/themes.js.map +0 -0
  301. package/dist/esm/helpers/validate.js +0 -0
  302. package/dist/esm/helpers/validate.js.map +0 -0
  303. package/dist/esm/helpers/withStaticProperties.js +0 -0
  304. package/dist/esm/helpers/withStaticProperties.js.map +0 -0
  305. package/dist/esm/hooks/getThemeUnwrapped.js +0 -0
  306. package/dist/esm/hooks/getThemeUnwrapped.js.map +0 -0
  307. package/dist/esm/hooks/useConstant.js +4 -1
  308. package/dist/esm/hooks/useConstant.js.map +2 -2
  309. package/dist/esm/hooks/useFeatures.js +8 -0
  310. package/dist/esm/hooks/useFeatures.js.map +2 -2
  311. package/dist/esm/hooks/useId.js +1 -28
  312. package/dist/esm/hooks/useId.js.map +2 -2
  313. package/dist/esm/hooks/useIsMounted.js +0 -0
  314. package/dist/esm/hooks/useIsMounted.js.map +0 -0
  315. package/dist/esm/hooks/useIsSSR.js +4 -4
  316. package/dist/esm/hooks/useIsSSR.js.map +2 -2
  317. package/dist/esm/hooks/useIsTouchDevice.js +0 -0
  318. package/dist/esm/hooks/useIsTouchDevice.js.map +0 -0
  319. package/dist/esm/hooks/useMedia.js +74 -92
  320. package/dist/esm/hooks/useMedia.js.map +2 -2
  321. package/dist/esm/hooks/usePressable.js +0 -0
  322. package/dist/esm/hooks/usePressable.js.map +0 -0
  323. package/dist/esm/hooks/useSafeRef.js +36 -0
  324. package/dist/esm/hooks/useSafeRef.js.map +7 -0
  325. package/dist/esm/hooks/useTheme.js +4 -6
  326. package/dist/esm/hooks/useTheme.js.map +2 -2
  327. package/dist/esm/hooks/useUnmountEffect.js +0 -0
  328. package/dist/esm/hooks/useUnmountEffect.js.map +0 -0
  329. package/dist/esm/index.js +21 -2
  330. package/dist/esm/index.js.map +2 -2
  331. package/dist/esm/insertFont.js +0 -0
  332. package/dist/esm/insertFont.js.map +1 -1
  333. package/dist/esm/static.js +0 -0
  334. package/dist/esm/static.js.map +0 -0
  335. package/dist/esm/styled.js +0 -0
  336. package/dist/esm/styled.js.map +0 -0
  337. package/dist/esm/types-rnw.js +0 -0
  338. package/dist/esm/types-rnw.js.map +0 -0
  339. package/dist/esm/types.js +0 -0
  340. package/dist/esm/types.js.map +0 -0
  341. package/dist/esm/updateTheme.js +0 -0
  342. package/dist/esm/updateTheme.js.map +0 -0
  343. package/dist/esm/vendor/Pressability.js +0 -0
  344. package/dist/esm/vendor/Pressability.js.map +0 -0
  345. package/dist/esm/vendor/Pressability.native.js +0 -0
  346. package/dist/esm/vendor/Pressability.native.js.map +0 -0
  347. package/dist/esm/views/FontLanguage.js +0 -0
  348. package/dist/esm/views/FontLanguage.js.map +0 -0
  349. package/dist/esm/views/FontLanguage.native.js +0 -0
  350. package/dist/esm/views/FontLanguage.native.js.map +0 -0
  351. package/dist/esm/views/FontLanguage.types.js +0 -0
  352. package/dist/esm/views/FontLanguage.types.js.map +0 -0
  353. package/dist/esm/views/Slot.js +2 -2
  354. package/dist/esm/views/Slot.js.map +2 -2
  355. package/dist/esm/views/Stack.js +0 -0
  356. package/dist/esm/views/Stack.js.map +0 -0
  357. package/dist/esm/views/TamaguiProvider.js +41 -0
  358. package/dist/esm/views/TamaguiProvider.js.map +7 -0
  359. package/dist/esm/views/Text.js +0 -0
  360. package/dist/esm/views/Text.js.map +0 -0
  361. package/dist/esm/views/Theme.js +4 -3
  362. package/dist/esm/views/Theme.js.map +2 -2
  363. package/dist/esm/views/ThemeInverse.js +0 -0
  364. package/dist/esm/views/ThemeInverse.js.map +0 -0
  365. package/dist/esm/views/ThemeProvider.js +2 -2
  366. package/dist/esm/views/ThemeProvider.js.map +2 -2
  367. package/dist/esm/views/ThemeReset.js +0 -0
  368. package/dist/esm/views/ThemeReset.js.map +0 -0
  369. package/package.json +9 -8
  370. package/src/Tamagui.ts +44 -0
  371. package/src/addTheme.ts +54 -0
  372. package/src/conf.ts +34 -0
  373. package/src/constants/constants.ts +15 -0
  374. package/src/constants/platform.ts +13 -0
  375. package/src/contexts/ButtonInsideButtonContext.tsx +3 -0
  376. package/src/contexts/FontLanguageContext.tsx +5 -0
  377. package/src/contexts/TextAncestorContext.tsx +10 -0
  378. package/src/contexts/ThemeContext.tsx +5 -0
  379. package/src/createComponent.tsx +1322 -0
  380. package/src/createFont.ts +26 -0
  381. package/src/createShorthands.ts +5 -0
  382. package/src/createTamagui.ts +226 -0
  383. package/src/createTheme.ts +13 -0
  384. package/src/createTokens.ts +35 -0
  385. package/src/createVariable.ts +94 -0
  386. package/src/createVariables.ts +39 -0
  387. package/src/helpers/RNComponents.tsx +14 -0
  388. package/src/helpers/ThemeManager.tsx +226 -0
  389. package/src/helpers/areEqualSets.tsx +9 -0
  390. package/src/helpers/assignNativePropsToWeb.native.tsx +1 -0
  391. package/src/helpers/assignNativePropsToWeb.tsx +179 -0
  392. package/src/helpers/calc.ts +65 -0
  393. package/src/helpers/createMediaStyle.ts +48 -0
  394. package/src/helpers/createPropMapper.ts +457 -0
  395. package/src/helpers/createShallowUpdate.tsx +20 -0
  396. package/src/helpers/cssHash.ts +28 -0
  397. package/src/helpers/expandStyle.ts +81 -0
  398. package/src/helpers/expandStyles.ts +104 -0
  399. package/src/helpers/extendStaticConfig.ts +76 -0
  400. package/src/helpers/fixNativeShadow.tsx +2 -0
  401. package/src/helpers/getExpandedShorthands.ts +15 -0
  402. package/src/helpers/getFont.tsx +40 -0
  403. package/src/helpers/getFontLanguage.ts +2 -0
  404. package/src/helpers/getSize.ts +22 -0
  405. package/src/helpers/getSplitStyles.tsx +686 -0
  406. package/src/helpers/getStackSize.ts +22 -0
  407. package/src/helpers/getStylesAtomic.native.ts +3 -0
  408. package/src/helpers/getStylesAtomic.ts +289 -0
  409. package/src/helpers/getThemeCSSRules.native.ts +3 -0
  410. package/src/helpers/getThemeCSSRules.ts +105 -0
  411. package/src/helpers/getVariantExtras.tsx +83 -0
  412. package/src/helpers/insertStyleRule.tsx +150 -0
  413. package/src/helpers/isObj.ts +1 -0
  414. package/src/helpers/isTamaguiComponent.tsx +15 -0
  415. package/src/helpers/isTamaguiElement.tsx +14 -0
  416. package/src/helpers/matchMedia.native.ts +6 -0
  417. package/src/helpers/matchMedia.ts +16 -0
  418. package/src/helpers/mergeProps.ts +56 -0
  419. package/src/helpers/mergeTransform.ts +14 -0
  420. package/src/helpers/normalizeColor.ts +53 -0
  421. package/src/helpers/normalizeValueWithProperty.ts +76 -0
  422. package/src/helpers/proxyThemeVariables.tsx +13 -0
  423. package/src/helpers/pseudoDescriptors.ts +18 -0
  424. package/src/helpers/registerCSSVariable.ts +11 -0
  425. package/src/helpers/startTransition.ts +4 -0
  426. package/src/helpers/themeable.tsx +45 -0
  427. package/src/helpers/themes.ts +69 -0
  428. package/src/helpers/validate.ts +80 -0
  429. package/src/helpers/withStaticProperties.tsx +7 -0
  430. package/src/hooks/getThemeUnwrapped.tsx +7 -0
  431. package/src/hooks/useConstant.tsx +19 -0
  432. package/src/hooks/useFeatures.tsx +288 -0
  433. package/src/hooks/useId.tsx +1 -0
  434. package/src/hooks/useIsMounted.ts +17 -0
  435. package/src/hooks/useIsSSR.tsx +20 -0
  436. package/src/hooks/useIsTouchDevice.tsx +21 -0
  437. package/src/hooks/useMedia.tsx +167 -0
  438. package/src/hooks/usePressable.tsx +9 -0
  439. package/src/hooks/useSafeRef.ts +50 -0
  440. package/src/hooks/useTheme.tsx +218 -0
  441. package/src/hooks/useUnmountEffect.ts +5 -0
  442. package/src/index.ts +79 -0
  443. package/src/insertFont.ts +69 -0
  444. package/src/static.ts +15 -0
  445. package/src/styled.tsx +135 -0
  446. package/src/types-rnw.tsx +162 -0
  447. package/src/types.tsx +1234 -0
  448. package/src/updateTheme.ts +23 -0
  449. package/src/vendor/Pressability.native.tsx +3 -0
  450. package/src/vendor/Pressability.tsx +2 -0
  451. package/src/views/FontLanguage.native.tsx +9 -0
  452. package/src/views/FontLanguage.tsx +18 -0
  453. package/src/views/FontLanguage.types.ts +13 -0
  454. package/src/views/Slot.tsx +152 -0
  455. package/src/views/Stack.tsx +24 -0
  456. package/src/views/TamaguiProvider.tsx +50 -0
  457. package/src/views/Text.tsx +79 -0
  458. package/src/views/Theme.tsx +72 -0
  459. package/src/views/ThemeInverse.tsx +33 -0
  460. package/src/views/ThemeProvider.tsx +59 -0
  461. package/src/views/ThemeReset.tsx +43 -0
  462. package/types/conf.d.ts +1 -1
  463. package/types/createTamagui.d.ts +1 -1
  464. package/types/createTheme.d.ts +1 -1
  465. package/types/createVariable.d.ts +16 -12
  466. package/types/helpers/getSplitStyles.d.ts +1 -0
  467. package/types/helpers/mergeProps.d.ts +3 -1
  468. package/types/helpers/registerCSSVariable.d.ts +2 -2
  469. package/types/hooks/useId.d.ts +1 -8
  470. package/types/hooks/useMedia.d.ts +2 -1
  471. package/types/hooks/useSafeRef.d.ts +4 -0
  472. package/types/index.d.ts +3 -1
  473. package/types/types.d.ts +3 -3
  474. package/types/views/TamaguiProvider.d.ts +4 -0
  475. package/dist/cjs/Pressability.js +0 -32
  476. package/dist/cjs/Pressability.js.map +0 -7
  477. package/dist/cjs/Pressability.native.js +0 -32
  478. package/dist/cjs/Pressability.native.js.map +0 -7
  479. package/dist/cjs/ThemeContext.js +0 -30
  480. package/dist/cjs/ThemeContext.js.map +0 -7
  481. package/dist/cjs/ThemeManager.js +0 -211
  482. package/dist/cjs/ThemeManager.js.map +0 -7
  483. package/dist/cjs/defaultComponentState.js +0 -2
  484. package/dist/cjs/defaultComponentState.js.map +0 -7
  485. package/dist/cjs/ensureThemeVariable.js +0 -152
  486. package/dist/cjs/ensureThemeVariable.js.map +0 -7
  487. package/dist/cjs/helpers/createTamaguiProvider.js.map +0 -7
  488. package/dist/cjs/helpers/ensureThemeVariable.js +0 -152
  489. package/dist/cjs/helpers/ensureThemeVariable.js.map +0 -7
  490. package/dist/cjs/helpers/nativeGestureHandler.native.js +0 -19
  491. package/dist/cjs/helpers/nativeGestureHandler.native.js.map +0 -7
  492. package/dist/cjs/loadTheme.js +0 -64
  493. package/dist/cjs/loadTheme.js.map +0 -7
  494. package/dist/cjs/views/TextAncestorContext.js +0 -44
  495. package/dist/cjs/views/TextAncestorContext.js.map +0 -7
  496. package/dist/esm/Pressability.js +0 -7
  497. package/dist/esm/Pressability.js.map +0 -7
  498. package/dist/esm/Pressability.native.js +0 -7
  499. package/dist/esm/Pressability.native.js.map +0 -7
  500. package/dist/esm/ThemeContext.js +0 -6
  501. package/dist/esm/ThemeContext.js.map +0 -7
  502. package/dist/esm/ThemeManager.js +0 -185
  503. package/dist/esm/ThemeManager.js.map +0 -7
  504. package/dist/esm/defaultComponentState.js +0 -1
  505. package/dist/esm/defaultComponentState.js.map +0 -7
  506. package/dist/esm/ensureThemeVariable.js +0 -125
  507. package/dist/esm/ensureThemeVariable.js.map +0 -7
  508. package/dist/esm/helpers/createTamaguiProvider.js +0 -38
  509. package/dist/esm/helpers/createTamaguiProvider.js.map +0 -7
  510. package/dist/esm/helpers/ensureThemeVariable.js +0 -125
  511. package/dist/esm/helpers/ensureThemeVariable.js.map +0 -7
  512. package/dist/esm/helpers/nativeGestureHandler.native.js +0 -2
  513. package/dist/esm/helpers/nativeGestureHandler.native.js.map +0 -7
  514. package/dist/esm/loadTheme.js +0 -40
  515. package/dist/esm/loadTheme.js.map +0 -7
  516. package/dist/esm/views/TextAncestorContext.js +0 -15
  517. package/dist/esm/views/TextAncestorContext.js.map +0 -7
  518. package/types/helpers/createTamaguiProvider.d.ts +0 -4
  519. package/types/helpers/nativeGestureHandler.native.d.ts +0 -2
@@ -1,13 +1,13 @@
1
- import { useForceUpdate } from "@tamagui/use-force-update";
2
- import { useEffect, useRef } from "react";
1
+ import { useMemo, useState } from "react";
3
2
  import { useIsomorphicLayoutEffect } from "../constants/platform";
4
3
  import { matchMedia } from "../helpers/matchMedia";
5
- import { useConstant } from "./useConstant";
4
+ import { useSafeRef } from "./useSafeRef";
6
5
  const mediaState = {};
7
6
  const mediaQueryListeners = {};
8
7
  function addMediaQueryListener(key, cb) {
9
8
  mediaQueryListeners[key] = mediaQueryListeners[key] || /* @__PURE__ */ new Set();
10
9
  mediaQueryListeners[key].add(cb);
10
+ return () => removeMediaQueryListener(key, cb);
11
11
  }
12
12
  function removeMediaQueryListener(key, cb) {
13
13
  var _a;
@@ -18,114 +18,95 @@ const getMedia = () => {
18
18
  return mediaState;
19
19
  };
20
20
  const dispose = /* @__PURE__ */ new Set();
21
+ let initialMediaState;
21
22
  const configureMedia = ({
22
23
  queries,
23
- defaultActive = ["sm", "xs"]
24
+ defaultActive = {}
24
25
  } = {}) => {
25
26
  if (!queries)
26
27
  return;
27
- if (mediaQueryConfig) {
28
- if (JSON.stringify(queries) === JSON.stringify(mediaQueryConfig)) {
29
- return;
28
+ if (initialMediaState) {
29
+ if (process.env.NODE_ENV === "development") {
30
+ if (JSON.stringify(queries) === JSON.stringify(mediaQueryConfig)) {
31
+ return;
32
+ }
30
33
  }
31
- dispose.forEach((cb) => cb());
32
- dispose.clear();
34
+ setupMediaListeners();
33
35
  }
34
36
  Object.assign(mediaQueryConfig, queries);
35
37
  for (const key in queries) {
36
- const str = mediaObjectToString(queries[key]);
37
- const propKey = `$${key}`;
38
- try {
39
- let update2 = function() {
40
- const next = !!getMatch().matches;
41
- if (next === mediaState[propKey])
42
- return;
43
- mediaState[propKey] = next;
44
- const listeners = mediaQueryListeners[propKey];
45
- if (listeners == null ? void 0 : listeners.size) {
46
- for (const cb of [...listeners]) {
47
- cb();
48
- }
38
+ mediaState[key] = defaultActive[key] || false;
39
+ }
40
+ initialMediaState = { ...mediaState };
41
+ };
42
+ function unlisten() {
43
+ dispose.forEach((cb) => cb());
44
+ dispose.clear();
45
+ }
46
+ function setupMediaListeners() {
47
+ unlisten();
48
+ for (const key in mediaQueryConfig) {
49
+ let update2 = function() {
50
+ const next = !!getMatch().matches;
51
+ if (next === mediaState[key])
52
+ return;
53
+ mediaState[key] = next;
54
+ const listeners = mediaQueryListeners[key];
55
+ if (listeners == null ? void 0 : listeners.size) {
56
+ for (const cb of [...listeners]) {
57
+ cb();
49
58
  }
50
- };
51
- var update = update2;
52
- const getMatch = () => matchMedia(str);
53
- const match = getMatch();
54
- if (!match || typeof match.addListener !== "function") {
55
- throw new Error("\u26A0\uFE0F No match (seeing this in RN sometimes)");
56
59
  }
57
- mediaState[propKey] = !!match.matches;
58
- match.addListener(update2);
59
- dispose.add(() => match.removeListener(update2));
60
- update2();
61
- } catch (err) {
62
- console.error("Error running media query", str, err.message, err.stack);
63
- const isDefaultActive = (defaultActive == null ? void 0 : defaultActive.includes(key)) ?? true;
64
- mediaState[propKey] = isDefaultActive;
60
+ };
61
+ var update = update2;
62
+ const str = mediaObjectToString(mediaQueryConfig[key]);
63
+ const getMatch = () => matchMedia(str);
64
+ const match = getMatch();
65
+ if (!match) {
66
+ throw new Error("\u26A0\uFE0F No match");
65
67
  }
68
+ match.addListener(update2);
69
+ dispose.add(() => match.removeListener(update2));
70
+ update2();
66
71
  }
67
- };
72
+ }
73
+ function useMediaQueryListeners() {
74
+ useIsomorphicLayoutEffect(() => {
75
+ setupMediaListeners();
76
+ return unlisten;
77
+ }, []);
78
+ }
68
79
  function useMedia() {
69
- const forceUpdate = useForceUpdate();
70
- const state = useRef();
71
- if (!state.current) {
72
- state.current = {
73
- selections: {},
74
- nextSelections: {},
75
- isUnmounted: false,
76
- isRendering: true
77
- };
80
+ const [state, setState] = useState(initialMediaState);
81
+ const keys = useSafeRef({});
82
+ function updateState() {
83
+ setState((prev) => {
84
+ for (const key in keys.current) {
85
+ if (prev[key] !== mediaState[key]) {
86
+ return { ...mediaState };
87
+ }
88
+ }
89
+ return prev;
90
+ });
78
91
  }
79
- state.current.isRendering = true;
80
92
  useIsomorphicLayoutEffect(() => {
81
- const st = state.current;
82
- st.isRendering = false;
83
- for (const key in st.selections) {
84
- if (!(key in st.nextSelections)) {
85
- removeMediaQueryListener(key, forceUpdate);
86
- }
87
- }
88
- for (const key in st.nextSelections) {
89
- if (!(key in st.selections)) {
90
- addMediaQueryListener(key, forceUpdate);
91
- }
93
+ const listeners = [];
94
+ for (const key in keys.current) {
95
+ listeners.push(addMediaQueryListener(key, updateState));
92
96
  }
93
- });
94
- useEffect(() => {
97
+ updateState();
95
98
  return () => {
96
- const st = state.current;
97
- st.isUnmounted = true;
98
- const allKeys = {
99
- ...st.selections,
100
- ...st.nextSelections
101
- };
102
- for (const key in allKeys) {
103
- removeMediaQueryListener(key, forceUpdate);
104
- }
99
+ listeners.forEach((cb) => cb());
105
100
  };
106
- }, []);
107
- return useConstant(() => {
108
- const st = state.current;
109
- return new Proxy(mediaState, {
110
- get(target, key) {
111
- if (key[0] !== "$") {
112
- key = `$${key}`;
113
- }
114
- if (!(key in mediaState)) {
115
- return Reflect.get(target, key);
116
- }
117
- if (!st.isUnmounted) {
118
- if (st.isRendering) {
119
- st.nextSelections[key] = true;
120
- }
121
- }
122
- if (key in mediaState) {
123
- return mediaState[key];
124
- }
125
- return Reflect.get(mediaState, key);
126
- }
127
- });
128
101
  });
102
+ return useMemo(() => new Proxy(state, {
103
+ get(_, key) {
104
+ if (!keys.current[key]) {
105
+ keys.current = { ...keys.current, [key]: true };
106
+ }
107
+ return Reflect.get(state, key);
108
+ }
109
+ }), [state, keys]);
129
110
  }
130
111
  function camelToHyphen(str) {
131
112
  return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase();
@@ -153,6 +134,7 @@ export {
153
134
  mediaQueryConfig,
154
135
  mediaState,
155
136
  removeMediaQueryListener,
156
- useMedia
137
+ useMedia,
138
+ useMediaQueryListeners
157
139
  };
158
140
  //# sourceMappingURL=useMedia.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useMedia.tsx"],
4
- "sourcesContent": ["import { useForceUpdate } from '@tamagui/use-force-update'\nimport { useEffect, useRef } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../constants/platform'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n ConfigureMediaQueryOptions,\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n} from '../types'\nimport { useConstant } from './useConstant'\n\nexport const mediaState: MediaQueryState = {} as any\nconst mediaQueryListeners: { [key: string]: Set<Function> } = {}\n\nexport function addMediaQueryListener(key: MediaQueryKey, cb: any) {\n mediaQueryListeners[key] = mediaQueryListeners[key] || new Set()\n mediaQueryListeners[key].add(cb)\n}\n\nexport function removeMediaQueryListener(key: MediaQueryKey, cb: any) {\n mediaQueryListeners[key]?.delete(cb)\n}\n\nexport const mediaQueryConfig: MediaQueries = {}\n\nexport const getMedia = () => {\n return mediaState\n}\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = ({\n queries,\n defaultActive = ['sm', 'xs'],\n}: ConfigureMediaQueryOptions = {}) => {\n if (!queries) return\n // support hot reload\n if (mediaQueryConfig) {\n if (JSON.stringify(queries) === JSON.stringify(mediaQueryConfig)) {\n // hmr avoid update\n return\n }\n dispose.forEach((cb) => cb())\n dispose.clear()\n }\n\n Object.assign(mediaQueryConfig, queries)\n\n // setup\n for (const key in queries) {\n const str = mediaObjectToString(queries[key])\n const propKey = `$${key}`\n try {\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match || typeof match.addListener !== 'function') {\n // caught below\n throw new Error('\u26A0\uFE0F No match (seeing this in RN sometimes)')\n }\n mediaState[propKey] = !!match.matches\n // note this deprecated api works with polyfills we use now\n match.addListener(update)\n dispose.add(() => match.removeListener(update))\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[propKey]) return\n mediaState[propKey] = next\n const listeners = mediaQueryListeners[propKey]\n if (listeners?.size) {\n for (const cb of [...listeners]) {\n cb()\n }\n }\n }\n\n update()\n } catch (err: any) {\n console.error('Error running media query', str, err.message, err.stack)\n const isDefaultActive = defaultActive?.includes(key as any) ?? true\n mediaState[propKey] = isDefaultActive\n }\n }\n}\n\ntype UseMediaState = {\n selections: { [key: string]: boolean }\n nextSelections: { [key: string]: boolean }\n isRendering: boolean\n isUnmounted: boolean\n}\n\nexport function useMedia(): {\n [key in MediaQueryKey]: boolean\n} {\n const forceUpdate = useForceUpdate()\n const state = useRef() as React.MutableRefObject<UseMediaState>\n if (!state.current) {\n state.current = {\n selections: {},\n nextSelections: {},\n isUnmounted: false,\n isRendering: true,\n }\n }\n state.current.isRendering = true\n\n // track usage\n useIsomorphicLayoutEffect(() => {\n const st = state.current\n st.isRendering = false\n // delete old\n for (const key in st.selections) {\n if (!(key in st.nextSelections)) {\n removeMediaQueryListener(key, forceUpdate)\n }\n }\n // add new\n for (const key in st.nextSelections) {\n if (!(key in st.selections)) {\n addMediaQueryListener(key, forceUpdate)\n }\n }\n })\n\n // unmount\n useEffect(() => {\n return () => {\n const st = state.current\n st.isUnmounted = true\n const allKeys = {\n ...st.selections,\n ...st.nextSelections,\n }\n for (const key in allKeys) {\n removeMediaQueryListener(key, forceUpdate)\n }\n }\n }, [])\n\n return useConstant(() => {\n const st = state.current\n return new Proxy(mediaState, {\n get(target, key: string) {\n if (key[0] !== '$') {\n key = `$${key}`\n }\n if (!(key in mediaState)) {\n return Reflect.get(target, key)\n }\n if (!st.isUnmounted) {\n if (st.isRendering) {\n st.nextSelections[key] = true\n }\n }\n if (key in mediaState) {\n return mediaState[key]\n }\n return Reflect.get(mediaState, key)\n },\n })\n })\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useMemo, useState } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../constants/platform'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n ConfigureMediaQueryOptions,\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport const mediaState: MediaQueryState = {} as any\nconst mediaQueryListeners: { [key: string]: Set<Function> } = {}\n\nexport function addMediaQueryListener(key: MediaQueryKey, cb: any) {\n mediaQueryListeners[key] = mediaQueryListeners[key] || new Set()\n mediaQueryListeners[key].add(cb)\n return () => removeMediaQueryListener(key, cb)\n}\n\nexport function removeMediaQueryListener(key: MediaQueryKey, cb: any) {\n mediaQueryListeners[key]?.delete(cb)\n}\n\nexport const mediaQueryConfig: MediaQueries = {}\n\nexport const getMedia = () => {\n return mediaState\n}\n\nconst dispose = new Set<Function>()\n\n// for SSR capture it at time of startup\nlet initialMediaState: MediaQueryState | null\n\nexport const configureMedia = ({\n queries,\n defaultActive = {},\n}: ConfigureMediaQueryOptions = {}) => {\n if (!queries) return\n\n // support hot reload\n if (initialMediaState) {\n if (process.env.NODE_ENV === 'development') {\n if (JSON.stringify(queries) === JSON.stringify(mediaQueryConfig)) {\n // hmr avoid update\n return\n }\n }\n setupMediaListeners()\n }\n\n Object.assign(mediaQueryConfig, queries)\n // start in the initial state\n for (const key in queries) {\n mediaState[key] = defaultActive[key] || false\n }\n initialMediaState = { ...mediaState }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\nfunction setupMediaListeners() {\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => match.removeListener(update))\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState[key] = next\n const listeners = mediaQueryListeners[key]\n if (listeners?.size) {\n for (const cb of [...listeners]) {\n cb()\n }\n }\n }\n }\n}\n\nexport function useMediaQueryListeners() {\n useIsomorphicLayoutEffect(() => {\n setupMediaListeners()\n return unlisten\n }, [])\n}\n\nexport function useMedia(): {\n [key in MediaQueryKey]: boolean\n} {\n const [state, setState] = useState(initialMediaState!)\n const keys = useSafeRef({} as Record<string, boolean>)\n\n function updateState() {\n setState((prev) => {\n for (const key in keys.current) {\n if (prev[key] !== mediaState[key]) {\n return { ...mediaState }\n }\n }\n return prev\n })\n }\n\n useIsomorphicLayoutEffect(() => {\n const listeners: Function[] = []\n for (const key in keys.current) {\n listeners.push(addMediaQueryListener(key, updateState))\n }\n updateState()\n return () => {\n listeners.forEach((cb) => cb())\n }\n })\n\n return useMemo(\n () =>\n new Proxy(state, {\n get(_, key: string) {\n if (!keys.current[key]) {\n keys.current = { ...keys.current, [key]: true }\n }\n return Reflect.get(state, key)\n },\n }),\n [state, keys]\n )\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
File without changes
File without changes
@@ -0,0 +1,36 @@
1
+ import { useRef } from "react";
2
+ import { useIsomorphicLayoutEffect } from "../constants/platform";
3
+ const useSafeRef = (initialValue) => {
4
+ const rawRef = useRef();
5
+ const raw = rawRef.current ?? (rawRef.current = {
6
+ isRendering: true,
7
+ comittedValue: initialValue,
8
+ currentValue: initialValue,
9
+ ref: {
10
+ get current() {
11
+ if (raw.isRendering) {
12
+ return raw.currentValue;
13
+ } else {
14
+ return raw.comittedValue;
15
+ }
16
+ },
17
+ set current(v) {
18
+ if (!raw.isRendering) {
19
+ raw.comittedValue = v;
20
+ }
21
+ raw.currentValue = v;
22
+ }
23
+ }
24
+ });
25
+ raw.isRendering = true;
26
+ Promise.resolve().then(() => raw.isRendering = false);
27
+ raw.currentValue = raw.comittedValue;
28
+ useIsomorphicLayoutEffect(() => {
29
+ raw.comittedValue = raw.currentValue;
30
+ });
31
+ return raw.ref;
32
+ };
33
+ export {
34
+ useSafeRef
35
+ };
36
+ //# sourceMappingURL=useSafeRef.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useSafeRef.ts"],
4
+ "sourcesContent": ["import { useRef } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../constants/platform'\n\n// dai-shi \uD83D\uDE4F\n// https://dev.to/uhyo_/a-concurrent-mode-safe-version-of-useref-1325\n\ntype Raw<T> = {\n isRendering: boolean\n comittedValue: T\n currentValue: T\n ref: { current: T }\n}\n\nexport const useSafeRef = <T>(initialValue: T) => {\n const rawRef = useRef<Raw<T>>()\n\n const raw: Raw<T> =\n rawRef.current ??\n (rawRef.current = {\n isRendering: true,\n comittedValue: initialValue,\n currentValue: initialValue,\n ref: {\n get current() {\n if (raw.isRendering) {\n return raw.currentValue\n } else {\n return raw.comittedValue\n }\n },\n set current(v) {\n if (!raw.isRendering) {\n raw.comittedValue = v\n }\n raw.currentValue = v\n },\n },\n })\n\n raw.isRendering = true\n Promise.resolve().then(() => (raw.isRendering = false))\n raw.currentValue = raw.comittedValue\n\n useIsomorphicLayoutEffect(() => {\n raw.comittedValue = raw.currentValue\n })\n\n return raw.ref\n}\n"],
5
+ "mappings": "AAAA;AAEA;AAYO,MAAM,aAAa,CAAI,iBAAoB;AAChD,QAAM,SAAS,OAAe;AAE9B,QAAM,MACJ,OAAO,WACN,QAAO,UAAU;AAAA,IAChB,aAAa;AAAA,IACb,eAAe;AAAA,IACf,cAAc;AAAA,IACd,KAAK;AAAA,MACH,IAAI,UAAU;AACZ,YAAI,IAAI,aAAa;AACnB,iBAAO,IAAI;AAAA,QACb,OAAO;AACL,iBAAO,IAAI;AAAA,QACb;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,GAAG;AACb,YAAI,CAAC,IAAI,aAAa;AACpB,cAAI,gBAAgB;AAAA,QACtB;AACA,YAAI,eAAe;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEF,MAAI,cAAc;AAClB,UAAQ,QAAQ,EAAE,KAAK,MAAO,IAAI,cAAc,KAAM;AACtD,MAAI,eAAe,IAAI;AAEvB,4BAA0B,MAAM;AAC9B,QAAI,gBAAgB,IAAI;AAAA,EAC1B,CAAC;AAED,SAAO,IAAI;AACb;",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  import { useForceUpdate } from "@tamagui/use-force-update";
2
2
  import { useContext, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import { getConfig } from "../conf";
4
- import { isWeb, useIsomorphicLayoutEffect } from "../constants/platform";
4
+ import { isSSR, useIsomorphicLayoutEffect } from "../constants/platform";
5
5
  import { ThemeContext } from "../contexts/ThemeContext";
6
6
  import { areEqualSets } from "../helpers/areEqualSets";
7
7
  import {
@@ -38,9 +38,9 @@ const useTheme = (themeName, componentName, props, forceUpdate) => {
38
38
  const debugProp = props && props["debug"];
39
39
  if (!theme) {
40
40
  if (process.env.NODE_ENV === "development") {
41
- console.warn("No theme", { themeName, theme, componentName, className });
41
+ console.warn("No theme with name", themeName);
42
42
  }
43
- return themes[getConfig().defaultTheme || Object.keys(themes)[0]];
43
+ return themes[getConfig().defaultTheme || "light"];
44
44
  }
45
45
  return useMemo(() => {
46
46
  return new Proxy(theme, {
@@ -121,11 +121,9 @@ const useChangeThemeEffect = (name, componentName, props, forceUpdateProp) => {
121
121
  const next = parentManager.getNextTheme(getThemeProps, debug);
122
122
  const forceUpdate = forceUpdateProp || useForceUpdate();
123
123
  const themeManager = useConstant(() => {
124
- if (!next)
125
- return null;
126
124
  return new ThemeManager(next.name, next.theme, parentManager, reset);
127
125
  });
128
- if (!isWeb || typeof document !== "undefined") {
126
+ if (!isSSR) {
129
127
  useLayoutEffect(() => {
130
128
  if (!themeManager)
131
129
  return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useTheme.tsx"],
4
- "sourcesContent": ["import { useForceUpdate } from '@tamagui/use-force-update'\nimport React, { useContext, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { getConfig } from '../conf'\nimport { isWeb, useIsomorphicLayoutEffect } from '../constants/platform'\nimport { ThemeContext } from '../contexts/ThemeContext'\nimport { areEqualSets } from '../helpers/areEqualSets'\nimport {\n GetNextThemeProps,\n ThemeManager,\n ThemeManagerContext,\n emptyManager,\n} from '../helpers/ThemeManager'\nimport { ThemeName, ThemeObject } from '../types'\nimport { GetThemeUnwrapped } from './getThemeUnwrapped'\nimport { useConstant } from './useConstant'\n\nexport type ThemeProps = {\n className?: string\n disableThemeClass?: boolean\n name: Exclude<ThemeName, number> | null\n componentName?: string\n children?: any\n reset?: boolean\n debug?: boolean | 'verbose'\n}\n\ntype UseThemeState = {\n uuid: Object\n keys: Set<string>\n isRendering: boolean\n}\n\nexport const useTheme = (\n themeName?: string | null,\n componentName?: string,\n props?: ThemeProps,\n forceUpdate?: any\n): ThemeObject => {\n const { name, theme, themes, themeManager, className } = useChangeThemeEffect(\n themeName,\n componentName,\n props,\n forceUpdate\n )\n\n if (process.env.NODE_ENV === 'development') {\n if (props?.debug === 'verbose') {\n console.log(' \uD83D\uDD39 useTheme', { themeName, componentName, name, className })\n }\n }\n\n const state = useRef() as React.MutableRefObject<UseThemeState>\n if (!state.current) {\n state.current = {\n uuid: {},\n keys: new Set(),\n isRendering: true,\n }\n }\n state.current.isRendering = true\n\n // track usage\n useIsomorphicLayoutEffect(() => {\n const st = state.current\n st.isRendering = false\n const cur = themeManager?.keys.get(st.uuid)\n if (!cur || !areEqualSets(st.keys, cur)) {\n themeManager?.track(st.uuid, st.keys)\n }\n })\n\n const debugProp = props && props['debug']\n\n if (!theme) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('No theme', { themeName, theme, componentName, className })\n }\n return themes[getConfig().defaultTheme || Object.keys(themes)[0]]\n }\n\n return useMemo(() => {\n return new Proxy(theme, {\n has(_, key) {\n if (typeof key === 'string') {\n if (key[0] === '$') {\n key = key.slice(1)\n }\n }\n return Reflect.has(theme, key)\n },\n get(_, key) {\n if (key === GetThemeUnwrapped) {\n return theme\n }\n if (key === GetThemeManager) {\n return themeManager\n }\n if (key === 'name') {\n return name\n }\n if (key === 'className') {\n return className\n }\n if (!name || key === '__proto__' || typeof key === 'symbol' || key === '$typeof') {\n return Reflect.get(_, key)\n }\n if (!themeManager) {\n console.error('No themeManager')\n return\n }\n // auto convert variables to plain\n if (key[0] === '$') {\n key = key.slice(1)\n }\n if (state.current.isRendering && !state.current.keys.has(key)) {\n state.current.keys.add(key)\n if (process.env.NODE_ENV === 'development' && debugProp === 'verbose') {\n console.log(' \uD83D\uDD38 tracking theme', key)\n }\n }\n return themeManager.getValue(key)\n },\n })\n }, [name, theme, componentName, className, debugProp])\n}\n\nconst GetThemeManager = Symbol()\n\nexport const getThemeManager = (theme: any): ThemeManager | undefined => {\n if (!theme) return\n return theme[GetThemeManager]\n}\n\nexport const useThemeName = (opts?: { parent?: true }) => {\n const parent = useContext(ThemeManagerContext)\n const [name, setName] = useState(parent?.name || '')\n\n useIsomorphicLayoutEffect(() => {\n if (!parent) return\n return parent.onChangeTheme((next, manager) => {\n const name = opts?.parent ? manager.parentName || next : next\n if (!name) return\n setName(name)\n })\n }, [parent])\n\n return name\n}\n\nexport const useDefaultThemeName = () => {\n return useContext(ThemeContext)?.defaultTheme\n}\n\nexport const activeThemeManagers = new Set<ThemeManager>()\n\nexport const useChangeThemeEffect = (\n name?: string | null,\n componentName?: string,\n props?: ThemeProps,\n forceUpdateProp?: any\n) => {\n const debug = props && props['debug']\n const parentManager = useContext(ThemeManagerContext) || emptyManager\n const { themes } = useContext(ThemeContext)!\n const reset = props?.reset || false\n const getThemeProps: GetNextThemeProps = { name, componentName, themes, reset }\n const next = parentManager.getNextTheme(getThemeProps, debug)\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const forceUpdate = forceUpdateProp || useForceUpdate()\n\n const themeManager = useConstant<ThemeManager | null>(() => {\n if (!next) return null\n return new ThemeManager(next.name, next.theme, parentManager, reset)\n })\n\n // if not SSR\n if (!isWeb || typeof document !== 'undefined') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n if (!themeManager) return\n\n activeThemeManagers.add(themeManager)\n\n if (next?.name) {\n themeManager.update(next)\n }\n\n const disposeParentOnChange = parentManager.onChangeTheme(() => {\n const next = parentManager.getNextTheme(getThemeProps, debug)\n if (!next) return\n if (themeManager.update(next)) {\n forceUpdate()\n }\n })\n\n return () => {\n activeThemeManagers.delete(themeManager)\n disposeParentOnChange()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [themes, name, componentName, debug, next?.name])\n }\n\n return {\n ...(parentManager && {\n name: parentManager.name,\n theme: parentManager.theme,\n }),\n ...next,\n themes,\n themeManager,\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useForceUpdate } from '@tamagui/use-force-update'\nimport React, { useContext, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { getConfig } from '../conf'\nimport { isSSR, isWeb, useIsomorphicLayoutEffect } from '../constants/platform'\nimport { ThemeContext } from '../contexts/ThemeContext'\nimport { areEqualSets } from '../helpers/areEqualSets'\nimport {\n GetNextThemeProps,\n ThemeManager,\n ThemeManagerContext,\n emptyManager,\n} from '../helpers/ThemeManager'\nimport { ThemeName, ThemeObject } from '../types'\nimport { GetThemeUnwrapped } from './getThemeUnwrapped'\nimport { useConstant } from './useConstant'\n\nexport type ThemeProps = {\n className?: string\n disableThemeClass?: boolean\n name: Exclude<ThemeName, number> | null\n componentName?: string\n children?: any\n reset?: boolean\n debug?: boolean | 'verbose'\n}\n\ntype UseThemeState = {\n uuid: Object\n keys: Set<string>\n isRendering: boolean\n}\n\nexport const useTheme = (\n themeName?: string | null,\n componentName?: string,\n props?: ThemeProps,\n forceUpdate?: any\n): ThemeObject => {\n const { name, theme, themes, themeManager, className } = useChangeThemeEffect(\n themeName,\n componentName,\n props,\n forceUpdate\n )\n\n if (process.env.NODE_ENV === 'development') {\n if (props?.debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(' \uD83D\uDD39 useTheme', { themeName, componentName, name, className })\n }\n }\n\n const state = useRef() as React.MutableRefObject<UseThemeState>\n if (!state.current) {\n state.current = {\n uuid: {},\n keys: new Set(),\n isRendering: true,\n }\n }\n state.current.isRendering = true\n\n // track usage\n useIsomorphicLayoutEffect(() => {\n const st = state.current\n st.isRendering = false\n const cur = themeManager?.keys.get(st.uuid)\n if (!cur || !areEqualSets(st.keys, cur)) {\n themeManager?.track(st.uuid, st.keys)\n }\n })\n\n const debugProp = props && props['debug']\n\n if (!theme) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('No theme with name', themeName)\n }\n return themes[getConfig().defaultTheme || 'light']\n }\n\n return useMemo(() => {\n return new Proxy(theme, {\n has(_, key) {\n if (typeof key === 'string') {\n if (key[0] === '$') {\n key = key.slice(1)\n }\n }\n return Reflect.has(theme, key)\n },\n get(_, key) {\n if (key === GetThemeUnwrapped) {\n return theme\n }\n if (key === GetThemeManager) {\n return themeManager\n }\n if (key === 'name') {\n return name\n }\n if (key === 'className') {\n return className\n }\n if (!name || key === '__proto__' || typeof key === 'symbol' || key === '$typeof') {\n return Reflect.get(_, key)\n }\n if (!themeManager) {\n console.error('No themeManager')\n return\n }\n // auto convert variables to plain\n if (key[0] === '$') {\n key = key.slice(1)\n }\n if (state.current.isRendering && !state.current.keys.has(key)) {\n state.current.keys.add(key)\n if (process.env.NODE_ENV === 'development' && debugProp === 'verbose') {\n console.log(' \uD83D\uDD38 tracking theme', key)\n }\n }\n return themeManager.getValue(key)\n },\n })\n }, [name, theme, componentName, className, debugProp])\n}\n\nconst GetThemeManager = Symbol()\n\nexport const getThemeManager = (theme: any): ThemeManager | undefined => {\n if (!theme) return\n return theme[GetThemeManager]\n}\n\nexport const useThemeName = (opts?: { parent?: true }) => {\n const parent = useContext(ThemeManagerContext)\n const [name, setName] = useState(parent?.name || '')\n\n useIsomorphicLayoutEffect(() => {\n if (!parent) return\n return parent.onChangeTheme((next, manager) => {\n const name = opts?.parent ? manager.parentName || next : next\n if (!name) return\n setName(name)\n })\n }, [parent])\n\n return name\n}\n\nexport const useDefaultThemeName = () => {\n return useContext(ThemeContext)?.defaultTheme\n}\n\nexport const activeThemeManagers = new Set<ThemeManager>()\n\nexport const useChangeThemeEffect = (\n name?: string | null,\n componentName?: string,\n props?: ThemeProps,\n forceUpdateProp?: any\n) => {\n const debug = props && props['debug']\n const parentManager = useContext(ThemeManagerContext) || emptyManager\n const { themes } = useContext(ThemeContext)!\n const reset = props?.reset || false\n const getThemeProps: GetNextThemeProps = { name, componentName, themes, reset }\n const next = parentManager.getNextTheme(getThemeProps, debug)\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const forceUpdate = forceUpdateProp || useForceUpdate()\n\n const themeManager = useConstant<ThemeManager | null>(() => {\n // if (!next) return null\n // RSC test\n // if (typeof document === 'undefined') return null\n return new ThemeManager(next.name, next.theme, parentManager, reset)\n })\n\n // if not SSR\n if (!isSSR) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useLayoutEffect(() => {\n if (!themeManager) return\n\n activeThemeManagers.add(themeManager)\n\n if (next?.name) {\n themeManager.update(next)\n }\n\n const disposeParentOnChange = parentManager.onChangeTheme(() => {\n const next = parentManager.getNextTheme(getThemeProps, debug)\n if (!next) return\n if (themeManager.update(next)) {\n forceUpdate()\n }\n })\n\n return () => {\n activeThemeManagers.delete(themeManager)\n disposeParentOnChange()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [themes, name, componentName, debug, next?.name])\n }\n\n return {\n ...(parentManager && {\n name: parentManager.name,\n theme: parentManager.theme,\n }),\n ...next,\n themes,\n themeManager,\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
File without changes
File without changes
package/dist/esm/index.js CHANGED
@@ -40,11 +40,21 @@ export * from "./hooks/useConstant";
40
40
  export * from "./hooks/useId";
41
41
  export * from "./hooks/useIsMounted";
42
42
  export * from "./hooks/useIsTouchDevice";
43
- export * from "./hooks/useMedia";
43
+ import {
44
+ configureMedia,
45
+ getMedia,
46
+ mediaState,
47
+ useMedia,
48
+ mediaObjectToString,
49
+ addMediaQueryListener,
50
+ removeMediaQueryListener,
51
+ mediaQueryConfig
52
+ } from "./hooks/useMedia";
44
53
  export * from "./hooks/usePressable";
45
54
  export * from "./hooks/useTheme";
46
55
  export * from "./hooks/useIsSSR";
47
56
  export * from "./hooks/useUnmountEffect";
57
+ export * from "./hooks/useSafeRef";
48
58
  export * from "./views/Slot";
49
59
  export * from "./views/Stack";
50
60
  export * from "./views/Text";
@@ -54,17 +64,26 @@ export * from "./views/ThemeInverse";
54
64
  export * from "./views/ThemeProvider";
55
65
  export * from "./views/ThemeReset";
56
66
  export * from "./views/FontLanguage";
67
+ export * from "./views/TamaguiProvider";
57
68
  export * from "@tamagui/use-force-update";
58
69
  export * from "@tamagui/use-event";
59
70
  export * from "@tamagui/helpers";
60
71
  export {
61
72
  TextAncestorContext,
62
73
  TextAncestorProvider,
74
+ addMediaQueryListener,
75
+ configureMedia,
63
76
  createDOMProps,
64
77
  getConfig,
65
78
  getHasConfigured,
79
+ getMedia,
66
80
  getThemes,
67
81
  getTokens,
68
- onConfiguredOnce
82
+ mediaObjectToString,
83
+ mediaQueryConfig,
84
+ mediaState,
85
+ onConfiguredOnce,
86
+ removeMediaQueryListener,
87
+ useMedia
69
88
  };
70
89
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["export * from './Tamagui'\nexport * from './createComponent'\nexport * from './createShorthands'\nexport * from './createTheme'\nexport * from './createTamagui'\nexport * from './createFont'\nexport * from './createTokens'\nexport * from './createVariable'\nexport * from './createVariables'\nexport * from './insertFont'\nexport * from './addTheme'\nexport * from './updateTheme'\nexport * from './styled'\nexport * from './types'\n\n// for type portability\nexport type { RNWTextProps, RNWViewProps } from './types-rnw'\nexport { getHasConfigured, getConfig, getThemes, getTokens, onConfiguredOnce } from './conf'\n\nexport * from './constants/constants'\nexport * from './constants/platform'\nexport { createDOMProps } from '@tamagui/rnw'\n\nexport * from './helpers/calc'\nexport * from './helpers/createShallowUpdate'\nexport * from './helpers/getStackSize'\nexport * from './helpers/getVariantExtras'\nexport * from './helpers/getExpandedShorthands'\nexport * from './helpers/getSize'\nexport * from './helpers/getSplitStyles'\nexport * from './helpers/getStylesAtomic'\nexport * from './helpers/pseudoDescriptors'\nexport * from './helpers/mergeProps'\nexport * from './helpers/expandStyles'\nexport * from './helpers/getFont'\nexport * from './helpers/isObj'\nexport * from './helpers/isTamaguiElement'\nexport * from './helpers/isTamaguiComponent'\nexport * from './helpers/matchMedia'\nexport * from './helpers/startTransition'\nexport * from './helpers/themeable'\nexport * from './helpers/withStaticProperties'\n\nexport * from './contexts/ButtonInsideButtonContext'\n\nexport * from './hooks/useConstant'\nexport * from './hooks/useId'\nexport * from './hooks/useIsMounted'\nexport * from './hooks/useIsTouchDevice'\nexport * from './hooks/useMedia'\nexport * from './hooks/usePressable'\nexport * from './hooks/useTheme'\nexport * from './hooks/useIsSSR'\nexport * from './hooks/useUnmountEffect'\n\nexport * from './views/Slot'\nexport * from './views/Stack'\nexport * from './views/Text'\nexport { TextAncestorProvider, TextAncestorContext } from './contexts/TextAncestorContext'\nexport * from './views/Theme'\nexport * from './views/ThemeInverse'\nexport * from './views/ThemeProvider'\nexport * from './views/ThemeReset'\nexport * from './views/FontLanguage'\n\nexport * from '@tamagui/use-force-update'\nexport * from '@tamagui/use-event'\nexport * from '@tamagui/helpers'\n"],
5
- "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;",
4
+ "sourcesContent": ["export * from './Tamagui'\nexport * from './createComponent'\nexport * from './createShorthands'\nexport * from './createTheme'\nexport * from './createTamagui'\nexport * from './createFont'\nexport * from './createTokens'\nexport * from './createVariable'\nexport * from './createVariables'\nexport * from './insertFont'\nexport * from './addTheme'\nexport * from './updateTheme'\nexport * from './styled'\nexport * from './types'\n\n// for type portability\nexport type { RNWTextProps, RNWViewProps } from './types-rnw'\nexport { getHasConfigured, getConfig, getThemes, getTokens, onConfiguredOnce } from './conf'\n\nexport * from './constants/constants'\nexport * from './constants/platform'\nexport { createDOMProps } from '@tamagui/rnw'\n\nexport * from './helpers/calc'\nexport * from './helpers/createShallowUpdate'\nexport * from './helpers/getStackSize'\nexport * from './helpers/getVariantExtras'\nexport * from './helpers/getExpandedShorthands'\nexport * from './helpers/getSize'\nexport * from './helpers/getSplitStyles'\nexport * from './helpers/getStylesAtomic'\nexport * from './helpers/pseudoDescriptors'\nexport * from './helpers/mergeProps'\nexport * from './helpers/expandStyles'\nexport * from './helpers/getFont'\nexport * from './helpers/isObj'\nexport * from './helpers/isTamaguiElement'\nexport * from './helpers/isTamaguiComponent'\nexport * from './helpers/matchMedia'\nexport * from './helpers/startTransition'\nexport * from './helpers/themeable'\nexport * from './helpers/withStaticProperties'\n\nexport * from './contexts/ButtonInsideButtonContext'\n\nexport * from './hooks/useConstant'\nexport * from './hooks/useId'\nexport * from './hooks/useIsMounted'\nexport * from './hooks/useIsTouchDevice'\nexport {\n configureMedia,\n getMedia,\n mediaState,\n useMedia,\n mediaObjectToString,\n addMediaQueryListener,\n removeMediaQueryListener,\n mediaQueryConfig,\n} from './hooks/useMedia'\nexport * from './hooks/usePressable'\nexport * from './hooks/useTheme'\nexport * from './hooks/useIsSSR'\nexport * from './hooks/useUnmountEffect'\nexport * from './hooks/useSafeRef'\n\nexport * from './views/Slot'\nexport * from './views/Stack'\nexport * from './views/Text'\nexport { TextAncestorProvider, TextAncestorContext } from './contexts/TextAncestorContext'\nexport * from './views/Theme'\nexport * from './views/ThemeInverse'\nexport * from './views/ThemeProvider'\nexport * from './views/ThemeReset'\nexport * from './views/FontLanguage'\nexport * from './views/TamaguiProvider'\n\nexport * from '@tamagui/use-force-update'\nexport * from '@tamagui/use-event'\nexport * from '@tamagui/helpers'\n"],
5
+ "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;",
6
6
  "names": []
7
7
  }
File without changes
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/insertFont.ts"],
4
- "sourcesContent": ["import { setConfigFont } from './conf'\nimport { createFont } from './createFont'\nimport { Variable } from './createVariable'\nimport { DeepVariableObject, createVariables } from './createVariables'\nimport { registerCSSVariable, variableToCSS } from './helpers/registerCSSVariable'\nimport { GenericFont } from './types'\n\n/**\n * Runtime dynamic insert font\n */\nexport function insertFont<A extends GenericFont>(name: string, fontIn: A): DeepVariableObject<A> {\n const font = createFont(fontIn)\n const tokened = createVariables(font, name) as GenericFont\n const parsed = parseFont(tokened) as DeepVariableObject<A>\n if (process.env.TAMAGUI_TARGET === 'web' && typeof document !== 'undefined') {\n const fontVars = registerFontVariables(parsed)\n const style = document.createElement('style')\n style.innerText = `:root .font_${name} {${fontVars.join(';')}}`\n style.setAttribute('data-tamagui-font', name)\n document.head.appendChild(style)\n }\n setConfigFont(name, tokened, parsed)\n return parsed\n}\n\nexport function parseFont<A extends GenericFont>(definition: A): DeepVariableObject<A> {\n const parsed: any = {}\n for (const attrKey in definition) {\n const attr = definition[attrKey]\n if (attrKey === 'family') {\n parsed[attrKey] = attr\n continue\n }\n parsed[attrKey] = {}\n for (const key in attr) {\n let val = attr[key] as any as Variable\n // is a theme reference\n if (val.val?.[0] === '$') {\n val = val.val\n }\n parsed[attrKey][`$${key}`] = val\n }\n }\n return parsed\n}\n\nexport function registerFontVariables(parsedFont: any) {\n const response: string[] = []\n\n for (const fkey in parsedFont) {\n if (fkey === 'family') {\n const val = parsedFont[fkey] as Variable\n registerCSSVariable(val)\n response.push(variableToCSS(val))\n } else {\n for (const fskey in parsedFont[fkey]) {\n const fval = parsedFont[fkey][fskey]\n if (typeof fval === 'string') {\n // no need to add its a theme reference like \"$borderColor\"\n } else {\n const val = parsedFont[fkey][fskey] as Variable\n registerCSSVariable(val)\n response.push(variableToCSS(val))\n }\n }\n }\n }\n return response\n}\n"],
4
+ "sourcesContent": ["import { setConfigFont } from './conf'\nimport { createFont } from './createFont'\nimport { Variable } from './createVariable'\nimport { DeepVariableObject, createVariables } from './createVariables'\nimport { registerCSSVariable, variableToCSS } from './helpers/registerCSSVariable'\nimport { GenericFont } from './types'\n\n/**\n * Runtime dynamic insert font\n */\nexport function insertFont<A extends GenericFont>(name: string, fontIn: A): DeepVariableObject<A> {\n const font = createFont(fontIn)\n const tokened = createVariables(font, name) as GenericFont\n const parsed = parseFont(tokened) as DeepVariableObject<A>\n if (process.env.TAMAGUI_TARGET === 'web' && typeof document !== 'undefined') {\n const fontVars = registerFontVariables(parsed)\n const style = document.createElement('style')\n style.innerText = `:root .font_${name} {${fontVars.join(';')}}`\n style.setAttribute('data-tamagui-font', name)\n document.head.appendChild(style)\n }\n setConfigFont(name, tokened, parsed)\n return parsed\n}\n\nexport function parseFont<A extends GenericFont>(definition: A): DeepVariableObject<A> {\n const parsed: any = {}\n for (const attrKey in definition) {\n const attr = definition[attrKey]\n if (attrKey === 'family') {\n parsed[attrKey] = attr\n continue\n }\n parsed[attrKey] = {}\n for (const key in attr) {\n let val = attr[key] as any\n // is a theme reference\n if (val.val?.[0] === '$') {\n val = val.val\n }\n parsed[attrKey][`$${key}`] = val\n }\n }\n return parsed\n}\n\nexport function registerFontVariables(parsedFont: any) {\n const response: string[] = []\n\n for (const fkey in parsedFont) {\n if (fkey === 'family') {\n const val = parsedFont[fkey] as Variable\n registerCSSVariable(val)\n response.push(variableToCSS(val))\n } else {\n for (const fskey in parsedFont[fkey]) {\n const fval = parsedFont[fkey][fskey]\n if (typeof fval === 'string') {\n // no need to add its a theme reference like \"$borderColor\"\n } else {\n const val = parsedFont[fkey][fskey] as Variable\n registerCSSVariable(val)\n response.push(variableToCSS(val))\n }\n }\n }\n }\n return response\n}\n"],
5
5
  "mappings": "AAAA;AACA;AAEA;AACA;AAMO,oBAA2C,MAAc,QAAkC;AAChG,QAAM,OAAO,WAAW,MAAM;AAC9B,QAAM,UAAU,gBAAgB,MAAM,IAAI;AAC1C,QAAM,SAAS,UAAU,OAAO;AAChC,MAAI,QAAQ,IAAI,mBAAmB,SAAS,OAAO,aAAa,aAAa;AAC3E,UAAM,WAAW,sBAAsB,MAAM;AAC7C,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,YAAY,eAAe,SAAS,SAAS,KAAK,GAAG;AAC3D,UAAM,aAAa,qBAAqB,IAAI;AAC5C,aAAS,KAAK,YAAY,KAAK;AAAA,EACjC;AACA,gBAAc,MAAM,SAAS,MAAM;AACnC,SAAO;AACT;AAEO,mBAA0C,YAAsC;AAzBvF;AA0BE,QAAM,SAAc,CAAC;AACrB,aAAW,WAAW,YAAY;AAChC,UAAM,OAAO,WAAW;AACxB,QAAI,YAAY,UAAU;AACxB,aAAO,WAAW;AAClB;AAAA,IACF;AACA,WAAO,WAAW,CAAC;AACnB,eAAW,OAAO,MAAM;AACtB,UAAI,MAAM,KAAK;AAEf,UAAI,WAAI,QAAJ,mBAAU,QAAO,KAAK;AACxB,cAAM,IAAI;AAAA,MACZ;AACA,aAAO,SAAS,IAAI,SAAS;AAAA,IAC/B;AAAA,EACF;AACA,SAAO;AACT;AAEO,+BAA+B,YAAiB;AACrD,QAAM,WAAqB,CAAC;AAE5B,aAAW,QAAQ,YAAY;AAC7B,QAAI,SAAS,UAAU;AACrB,YAAM,MAAM,WAAW;AACvB,0BAAoB,GAAG;AACvB,eAAS,KAAK,cAAc,GAAG,CAAC;AAAA,IAClC,OAAO;AACL,iBAAW,SAAS,WAAW,OAAO;AACpC,cAAM,OAAO,WAAW,MAAM;AAC9B,YAAI,OAAO,SAAS,UAAU;AAAA,QAE9B,OAAO;AACL,gBAAM,MAAM,WAAW,MAAM;AAC7B,8BAAoB,GAAG;AACvB,mBAAS,KAAK,cAAc,GAAG,CAAC;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/dist/esm/types.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -31,7 +31,7 @@ const SlotClone = React.forwardRef((props, forwardedRef) => {
31
31
  const { children, ...slotProps } = props;
32
32
  if (React.isValidElement(children)) {
33
33
  const childProps = {
34
- ...mergeProps(children, slotProps),
34
+ ...mergeSlotProps(children, slotProps),
35
35
  ref: composeRefs(forwardedRef, children.ref)
36
36
  };
37
37
  return React.cloneElement(children, childProps);
@@ -50,7 +50,7 @@ const pressMap = isWeb ? {
50
50
  onPressOut: "onMouseUp",
51
51
  onPressIn: "onMouseDown"
52
52
  } : {};
53
- function mergeProps(child, slotProps) {
53
+ function mergeSlotProps(child, slotProps) {
54
54
  const childProps = child.props;
55
55
  const overrideProps = { ...childProps };
56
56
  const isHTMLChild = typeof child.type === "string";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/Slot.tsx"],
4
- "sourcesContent": ["// via radix\n\nimport { composeRefs } from '@tamagui/compose-refs'\nimport * as React from 'react'\n\nimport { isWeb } from '../constants/platform'\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type SlotProps = {\n children?: React.ReactNode\n}\n\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props\n const childrenArray = React.Children.toArray(children)\n const slottable = childrenArray.find(isSlottable)\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children as React.ReactNode\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null)\n return React.isValidElement(newElement)\n ? (newElement.props.children as React.ReactNode)\n : null\n } else {\n return child\n }\n })\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n )\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n )\n})\n\nSlot.displayName = 'Slot'\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode\n}\n\nconst SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props\n\n if (React.isValidElement(children)) {\n const childProps = {\n ...mergeProps(children, slotProps),\n ref: composeRefs(forwardedRef, (children as any).ref),\n }\n return React.cloneElement(children, childProps)\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null\n})\n\nSlotClone.displayName = 'SlotClone'\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Slottable = ({ children }: { children: React.ReactNode }) => {\n return <>{children}</>\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n return React.isValidElement(child) && child.type === Slottable\n}\n\nconst pressMap = isWeb\n ? {\n onPress: 'onClick',\n onPressOut: 'onMouseUp',\n onPressIn: 'onMouseDown',\n }\n : {}\n\nfunction mergeProps(child: any, slotProps: AnyProps) {\n const childProps = child.props\n\n // all child props should override\n const overrideProps = { ...childProps }\n const isHTMLChild = typeof child.type === 'string'\n\n if (isHTMLChild) {\n for (const key in pressMap) {\n if (key in slotProps) {\n slotProps[pressMap[key]] = slotProps[key]\n delete slotProps[key]\n }\n }\n }\n\n for (let propName in childProps) {\n const slotPropValue = slotProps[propName]\n const childPropValue = childProps[propName]\n\n if (isHTMLChild && pressMap[propName]) {\n propName = pressMap[propName]\n delete overrideProps[propName]\n }\n\n const isHandler = handleRegex.test(propName)\n // if it's a handler, modify the override by composing the base handler\n if (isHandler) {\n overrideProps[propName] = mergeEvent(childPropValue, slotPropValue)\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue }\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ')\n }\n }\n\n return { ...slotProps, ...overrideProps }\n}\n\nconst handleRegex = /^on[A-Z]/\n\nexport function mergeEvent(a?: Function, b?: Function) {\n return (...args: unknown[]) => {\n a?.(...args)\n b?.(...args)\n }\n}\n"],
5
- "mappings": "AAEA;AACA;AAEA;AAUO,MAAM,OAAO,MAAM,WAAmC,CAAC,OAAO,iBAAiB;AACpF,QAAM,EAAE,aAAa,cAAc;AACnC,QAAM,gBAAgB,MAAM,SAAS,QAAQ,QAAQ;AACrD,QAAM,YAAY,cAAc,KAAK,WAAW;AAEhD,MAAI,WAAW;AAEb,UAAM,aAAa,UAAU,MAAM;AAEnC,UAAM,cAAc,cAAc,IAAI,CAAC,UAAU;AAC/C,UAAI,UAAU,WAAW;AAGvB,YAAI,MAAM,SAAS,MAAM,UAAU,IAAI;AAAG,iBAAO,MAAM,SAAS,KAAK,IAAI;AACzE,eAAO,MAAM,eAAe,UAAU,IACjC,WAAW,MAAM,WAClB;AAAA,MACN,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WACE,oCAAC;AAAA,MAAW,GAAG;AAAA,MAAW,KAAK;AAAA,OAC5B,MAAM,eAAe,UAAU,IAC5B,MAAM,aAAa,YAAY,QAAW,WAAW,IACrD,IACN;AAAA,EAEJ;AAEA,SACE,oCAAC;AAAA,IAAW,GAAG;AAAA,IAAW,KAAK;AAAA,KAC5B,QACH;AAEJ,CAAC;AAED,KAAK,cAAc;AAUnB,MAAM,YAAY,MAAM,WAAgC,CAAC,OAAO,iBAAiB;AAC/E,QAAM,EAAE,aAAa,cAAc;AAEnC,MAAI,MAAM,eAAe,QAAQ,GAAG;AAClC,UAAM,aAAa;AAAA,MACjB,GAAG,WAAW,UAAU,SAAS;AAAA,MACjC,KAAK,YAAY,cAAe,SAAiB,GAAG;AAAA,IACtD;AACA,WAAO,MAAM,aAAa,UAAU,UAAU;AAAA,EAChD;AAEA,SAAO,MAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI;AAC1E,CAAC;AAED,UAAU,cAAc;AAMjB,MAAM,YAAY,CAAC,EAAE,eAA8C;AACxE,SAAO,0DAAG,QAAS;AACrB;AAMA,qBAAqB,OAAqD;AACxE,SAAO,MAAM,eAAe,KAAK,KAAK,MAAM,SAAS;AACvD;AAEA,MAAM,WAAW,QACb;AAAA,EACE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AACb,IACA,CAAC;AAEL,oBAAoB,OAAY,WAAqB;AACnD,QAAM,aAAa,MAAM;AAGzB,QAAM,gBAAgB,EAAE,GAAG,WAAW;AACtC,QAAM,cAAc,OAAO,MAAM,SAAS;AAE1C,MAAI,aAAa;AACf,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,WAAW;AACpB,kBAAU,SAAS,QAAQ,UAAU;AACrC,eAAO,UAAU;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YAAY,YAAY;AAC/B,UAAM,gBAAgB,UAAU;AAChC,UAAM,iBAAiB,WAAW;AAElC,QAAI,eAAe,SAAS,WAAW;AACrC,iBAAW,SAAS;AACpB,aAAO,cAAc;AAAA,IACvB;AAEA,UAAM,YAAY,YAAY,KAAK,QAAQ;AAE3C,QAAI,WAAW;AACb,oBAAc,YAAY,WAAW,gBAAgB,aAAa;AAAA,IACpE,WAES,aAAa,SAAS;AAC7B,oBAAc,YAAY,EAAE,GAAG,eAAe,GAAG,eAAe;AAAA,IAClE,WAAW,aAAa,aAAa;AACnC,oBAAc,YAAY,CAAC,eAAe,cAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACpF;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,WAAW,GAAG,cAAc;AAC1C;AAEA,MAAM,cAAc;AAEb,oBAAoB,GAAc,GAAc;AACrD,SAAO,IAAI,SAAoB;AAC7B,2BAAI,GAAG;AACP,2BAAI,GAAG;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["// via radix\n\nimport { composeRefs } from '@tamagui/compose-refs'\nimport * as React from 'react'\n\nimport { isWeb } from '../constants/platform'\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\nexport type SlotProps = {\n children?: React.ReactNode\n}\n\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props\n const childrenArray = React.Children.toArray(children)\n const slottable = childrenArray.find(isSlottable)\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children as React.ReactNode\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null)\n return React.isValidElement(newElement)\n ? (newElement.props.children as React.ReactNode)\n : null\n } else {\n return child\n }\n })\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n )\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n )\n})\n\nSlot.displayName = 'Slot'\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode\n}\n\nconst SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props\n\n if (React.isValidElement(children)) {\n const childProps = {\n ...mergeSlotProps(children, slotProps),\n ref: composeRefs(forwardedRef, (children as any).ref),\n }\n return React.cloneElement(children, childProps)\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null\n})\n\nSlotClone.displayName = 'SlotClone'\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Slottable = ({ children }: { children: React.ReactNode }) => {\n return <>{children}</>\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>\n\nfunction isSlottable(child: React.ReactNode): child is React.ReactElement {\n return React.isValidElement(child) && child.type === Slottable\n}\n\nconst pressMap = isWeb\n ? {\n onPress: 'onClick',\n onPressOut: 'onMouseUp',\n onPressIn: 'onMouseDown',\n }\n : {}\n\nfunction mergeSlotProps(child: any, slotProps: AnyProps) {\n const childProps = child.props\n\n // all child props should override\n const overrideProps = { ...childProps }\n const isHTMLChild = typeof child.type === 'string'\n\n if (isHTMLChild) {\n for (const key in pressMap) {\n if (key in slotProps) {\n slotProps[pressMap[key]] = slotProps[key]\n delete slotProps[key]\n }\n }\n }\n\n for (let propName in childProps) {\n const slotPropValue = slotProps[propName]\n const childPropValue = childProps[propName]\n\n if (isHTMLChild && pressMap[propName]) {\n propName = pressMap[propName]\n delete overrideProps[propName]\n }\n\n const isHandler = handleRegex.test(propName)\n // if it's a handler, modify the override by composing the base handler\n if (isHandler) {\n overrideProps[propName] = mergeEvent(childPropValue, slotPropValue)\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue }\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ')\n }\n }\n\n return { ...slotProps, ...overrideProps }\n}\n\nconst handleRegex = /^on[A-Z]/\n\nexport function mergeEvent(a?: Function, b?: Function) {\n return (...args: unknown[]) => {\n a?.(...args)\n b?.(...args)\n }\n}\n"],
5
+ "mappings": "AAEA;AACA;AAEA;AAUO,MAAM,OAAO,MAAM,WAAmC,CAAC,OAAO,iBAAiB;AACpF,QAAM,EAAE,aAAa,cAAc;AACnC,QAAM,gBAAgB,MAAM,SAAS,QAAQ,QAAQ;AACrD,QAAM,YAAY,cAAc,KAAK,WAAW;AAEhD,MAAI,WAAW;AAEb,UAAM,aAAa,UAAU,MAAM;AAEnC,UAAM,cAAc,cAAc,IAAI,CAAC,UAAU;AAC/C,UAAI,UAAU,WAAW;AAGvB,YAAI,MAAM,SAAS,MAAM,UAAU,IAAI;AAAG,iBAAO,MAAM,SAAS,KAAK,IAAI;AACzE,eAAO,MAAM,eAAe,UAAU,IACjC,WAAW,MAAM,WAClB;AAAA,MACN,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,WACE,oCAAC;AAAA,MAAW,GAAG;AAAA,MAAW,KAAK;AAAA,OAC5B,MAAM,eAAe,UAAU,IAC5B,MAAM,aAAa,YAAY,QAAW,WAAW,IACrD,IACN;AAAA,EAEJ;AAEA,SACE,oCAAC;AAAA,IAAW,GAAG;AAAA,IAAW,KAAK;AAAA,KAC5B,QACH;AAEJ,CAAC;AAED,KAAK,cAAc;AAUnB,MAAM,YAAY,MAAM,WAAgC,CAAC,OAAO,iBAAiB;AAC/E,QAAM,EAAE,aAAa,cAAc;AAEnC,MAAI,MAAM,eAAe,QAAQ,GAAG;AAClC,UAAM,aAAa;AAAA,MACjB,GAAG,eAAe,UAAU,SAAS;AAAA,MACrC,KAAK,YAAY,cAAe,SAAiB,GAAG;AAAA,IACtD;AACA,WAAO,MAAM,aAAa,UAAU,UAAU;AAAA,EAChD;AAEA,SAAO,MAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI;AAC1E,CAAC;AAED,UAAU,cAAc;AAMjB,MAAM,YAAY,CAAC,EAAE,eAA8C;AACxE,SAAO,0DAAG,QAAS;AACrB;AAMA,qBAAqB,OAAqD;AACxE,SAAO,MAAM,eAAe,KAAK,KAAK,MAAM,SAAS;AACvD;AAEA,MAAM,WAAW,QACb;AAAA,EACE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AACb,IACA,CAAC;AAEL,wBAAwB,OAAY,WAAqB;AACvD,QAAM,aAAa,MAAM;AAGzB,QAAM,gBAAgB,EAAE,GAAG,WAAW;AACtC,QAAM,cAAc,OAAO,MAAM,SAAS;AAE1C,MAAI,aAAa;AACf,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,WAAW;AACpB,kBAAU,SAAS,QAAQ,UAAU;AACrC,eAAO,UAAU;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YAAY,YAAY;AAC/B,UAAM,gBAAgB,UAAU;AAChC,UAAM,iBAAiB,WAAW;AAElC,QAAI,eAAe,SAAS,WAAW;AACrC,iBAAW,SAAS;AACpB,aAAO,cAAc;AAAA,IACvB;AAEA,UAAM,YAAY,YAAY,KAAK,QAAQ;AAE3C,QAAI,WAAW;AACb,oBAAc,YAAY,WAAW,gBAAgB,aAAa;AAAA,IACpE,WAES,aAAa,SAAS;AAC7B,oBAAc,YAAY,EAAE,GAAG,eAAe,GAAG,eAAe;AAAA,IAClE,WAAW,aAAa,aAAa;AACnC,oBAAc,YAAY,CAAC,eAAe,cAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACpF;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,WAAW,GAAG,cAAc;AAC1C;AAEA,MAAM,cAAc;AAEb,oBAAoB,GAAc,GAAc;AACrD,SAAO,IAAI,SAAoB;AAC7B,2BAAI,GAAG;AACP,2BAAI,GAAG;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }