@tamagui/core 1.0.1-beta.149 → 1.0.1-beta.152

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 (234) hide show
  1. package/dist/cjs/Tamagui.js +4 -1
  2. package/dist/cjs/Tamagui.js.map +1 -1
  3. package/dist/cjs/addTheme.js.map +1 -1
  4. package/dist/cjs/constants/platform.js.map +2 -2
  5. package/dist/cjs/constants/platform.native.js.map +1 -1
  6. package/dist/cjs/contexts/ButtonInsideButtonContext.js.map +1 -1
  7. package/dist/cjs/contexts/FontLanguageContext.js.map +1 -1
  8. package/dist/cjs/contexts/TextAncestorContext.js +6 -7
  9. package/dist/cjs/contexts/TextAncestorContext.js.map +2 -2
  10. package/dist/cjs/contexts/ThemeContext.js.map +1 -1
  11. package/dist/cjs/createComponent.js +315 -123
  12. package/dist/cjs/createComponent.js.map +3 -3
  13. package/dist/cjs/createFont.js +2 -1
  14. package/dist/cjs/createFont.js.map +2 -2
  15. package/dist/cjs/createShorthands.js.map +1 -1
  16. package/dist/cjs/createTamagui.js +5 -3
  17. package/dist/cjs/createTamagui.js.map +2 -2
  18. package/dist/cjs/createTokens.js.map +1 -1
  19. package/dist/cjs/createVariable.js +3 -1
  20. package/dist/cjs/createVariable.js.map +2 -2
  21. package/dist/cjs/createVariables.js.map +1 -1
  22. package/dist/cjs/helpers/ThemeManager.js.map +2 -2
  23. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +1 -1
  24. package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +1 -1
  25. package/dist/cjs/helpers/calc.js.map +2 -2
  26. package/dist/cjs/helpers/createMediaStyle.js +10 -4
  27. package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
  28. package/dist/cjs/helpers/createPropMapper.js +89 -9
  29. package/dist/cjs/helpers/createPropMapper.js.map +1 -1
  30. package/dist/cjs/helpers/createShallowUpdate.js +12 -9
  31. package/dist/cjs/helpers/createShallowUpdate.js.map +1 -1
  32. package/dist/cjs/helpers/cssHash.js.map +1 -1
  33. package/dist/cjs/helpers/expandStyle.js.map +2 -2
  34. package/dist/cjs/helpers/expandStyles.js.map +1 -1
  35. package/dist/cjs/helpers/extendStaticConfig.js +10 -7
  36. package/dist/cjs/helpers/extendStaticConfig.js.map +1 -1
  37. package/dist/cjs/helpers/getAnimationDriver.js.map +1 -1
  38. package/dist/cjs/helpers/getExpandedShorthands.js.map +1 -1
  39. package/dist/cjs/helpers/getFont.js.map +1 -1
  40. package/dist/cjs/helpers/getSize.js.map +1 -1
  41. package/dist/cjs/helpers/getSplitStyles.js +99 -53
  42. package/dist/cjs/helpers/getSplitStyles.js.map +3 -3
  43. package/dist/cjs/helpers/getStackSize.js.map +1 -1
  44. package/dist/cjs/helpers/getStylesAtomic.js +8 -2
  45. package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
  46. package/dist/cjs/helpers/getStylesAtomic.native.js.map +1 -1
  47. package/dist/cjs/helpers/getThemeCSSRules.js +7 -3
  48. package/dist/cjs/helpers/getThemeCSSRules.js.map +1 -1
  49. package/dist/cjs/helpers/getThemeCSSRules.native.js.map +1 -1
  50. package/dist/cjs/helpers/getVariantExtras.js +9 -7
  51. package/dist/cjs/helpers/getVariantExtras.js.map +1 -1
  52. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  53. package/dist/cjs/helpers/isTamaguiComponent.js.map +1 -1
  54. package/dist/cjs/helpers/isTamaguiElement.js.map +1 -1
  55. package/dist/cjs/helpers/matchMedia.js.map +1 -1
  56. package/dist/cjs/helpers/matchMedia.native.js +4 -1
  57. package/dist/cjs/helpers/matchMedia.native.js.map +2 -2
  58. package/dist/cjs/helpers/mergeProps.js.map +1 -1
  59. package/dist/cjs/helpers/mergeTransform.js.map +2 -2
  60. package/dist/cjs/helpers/normalizeColor.js +4 -1
  61. package/dist/cjs/helpers/normalizeColor.js.map +2 -2
  62. package/dist/cjs/helpers/normalizeValueWithProperty.js.map +1 -1
  63. package/dist/cjs/helpers/proxyThemeVariables.js.map +1 -1
  64. package/dist/cjs/helpers/registerCSSVariable.js.map +1 -1
  65. package/dist/cjs/helpers/startTransition.js +4 -1
  66. package/dist/cjs/helpers/startTransition.js.map +2 -2
  67. package/dist/cjs/helpers/themeable.js +12 -5
  68. package/dist/cjs/helpers/themeable.js.map +2 -2
  69. package/dist/cjs/helpers/themes.js.map +1 -1
  70. package/dist/cjs/hooks/useConstant.js.map +1 -1
  71. package/dist/cjs/hooks/useFeatures.js +0 -120
  72. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  73. package/dist/cjs/hooks/useIsMounted.js.map +1 -1
  74. package/dist/cjs/hooks/useIsSSR.js.map +1 -1
  75. package/dist/cjs/hooks/useIsTouchDevice.js.map +1 -1
  76. package/dist/cjs/hooks/useMedia.js +10 -7
  77. package/dist/cjs/hooks/useMedia.js.map +2 -2
  78. package/dist/cjs/hooks/usePressable.js.map +1 -1
  79. package/dist/cjs/hooks/useSafeRef.js.map +1 -1
  80. package/dist/cjs/hooks/useServerHooks.js.map +1 -1
  81. package/dist/cjs/hooks/useTheme.js +6 -1
  82. package/dist/cjs/hooks/useTheme.js.map +2 -2
  83. package/dist/cjs/hooks/useUnmountEffect.js.map +1 -1
  84. package/dist/cjs/injectStyles.js.map +1 -1
  85. package/dist/cjs/insertFont.js +3 -1
  86. package/dist/cjs/insertFont.js.map +2 -2
  87. package/dist/cjs/styled.js +3 -1
  88. package/dist/cjs/styled.js.map +1 -1
  89. package/dist/cjs/types.js.map +1 -1
  90. package/dist/cjs/updateTheme.js +7 -4
  91. package/dist/cjs/updateTheme.js.map +1 -1
  92. package/dist/cjs/views/FontLanguage.js +5 -7
  93. package/dist/cjs/views/FontLanguage.js.map +1 -1
  94. package/dist/cjs/views/FontLanguage.native.js +6 -7
  95. package/dist/cjs/views/FontLanguage.native.js.map +1 -1
  96. package/dist/cjs/views/Slot.js +16 -8
  97. package/dist/cjs/views/Slot.js.map +1 -1
  98. package/dist/cjs/views/Stack.js.map +1 -1
  99. package/dist/cjs/views/TamaguiProvider.js +21 -12
  100. package/dist/cjs/views/TamaguiProvider.js.map +1 -1
  101. package/dist/cjs/views/Text.js.map +1 -1
  102. package/dist/cjs/views/Theme.js +25 -11
  103. package/dist/cjs/views/Theme.js.map +2 -2
  104. package/dist/cjs/views/ThemeInverse.js +6 -7
  105. package/dist/cjs/views/ThemeInverse.js.map +1 -1
  106. package/dist/cjs/views/ThemeProvider.js +14 -8
  107. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  108. package/dist/cjs/views/ThemeReset.js +9 -4
  109. package/dist/cjs/views/ThemeReset.js.map +2 -2
  110. package/dist/esm/Tamagui.js.map +1 -1
  111. package/dist/esm/addTheme.js.map +1 -1
  112. package/dist/esm/constants/constants.js.map +1 -1
  113. package/dist/esm/constants/platform.js.map +2 -2
  114. package/dist/esm/constants/platform.native.js.map +1 -1
  115. package/dist/esm/contexts/ButtonInsideButtonContext.js.map +1 -1
  116. package/dist/esm/contexts/FontLanguageContext.js.map +1 -1
  117. package/dist/esm/contexts/TextAncestorContext.js +6 -4
  118. package/dist/esm/contexts/TextAncestorContext.js.map +1 -1
  119. package/dist/esm/contexts/ThemeContext.js.map +1 -1
  120. package/dist/esm/createComponent.js +319 -125
  121. package/dist/esm/createComponent.js.map +3 -3
  122. package/dist/esm/createFont.js +2 -1
  123. package/dist/esm/createFont.js.map +2 -2
  124. package/dist/esm/createShorthands.js.map +1 -1
  125. package/dist/esm/createTamagui.js +5 -3
  126. package/dist/esm/createTamagui.js.map +2 -2
  127. package/dist/esm/createTokens.js.map +1 -1
  128. package/dist/esm/createVariable.js +3 -1
  129. package/dist/esm/createVariable.js.map +2 -2
  130. package/dist/esm/createVariables.js.map +1 -1
  131. package/dist/esm/helpers/RNComponents.js.map +1 -1
  132. package/dist/esm/helpers/ThemeManager.js.map +2 -2
  133. package/dist/esm/helpers/assignNativePropsToWeb.js.map +1 -1
  134. package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +1 -1
  135. package/dist/esm/helpers/calc.js.map +2 -2
  136. package/dist/esm/helpers/createMediaStyle.js +10 -4
  137. package/dist/esm/helpers/createMediaStyle.js.map +2 -2
  138. package/dist/esm/helpers/createPropMapper.js +89 -9
  139. package/dist/esm/helpers/createPropMapper.js.map +1 -1
  140. package/dist/esm/helpers/createShallowUpdate.js +12 -9
  141. package/dist/esm/helpers/createShallowUpdate.js.map +1 -1
  142. package/dist/esm/helpers/cssHash.js.map +1 -1
  143. package/dist/esm/helpers/expandStyle.js.map +2 -2
  144. package/dist/esm/helpers/expandStyles.js.map +1 -1
  145. package/dist/esm/helpers/extendStaticConfig.js +10 -7
  146. package/dist/esm/helpers/extendStaticConfig.js.map +1 -1
  147. package/dist/esm/helpers/getAnimationDriver.js.map +1 -1
  148. package/dist/esm/helpers/getExpandedShorthands.js.map +1 -1
  149. package/dist/esm/helpers/getFont.js.map +1 -1
  150. package/dist/esm/helpers/getSize.js.map +1 -1
  151. package/dist/esm/helpers/getSplitStyles.js +99 -53
  152. package/dist/esm/helpers/getSplitStyles.js.map +3 -3
  153. package/dist/esm/helpers/getStackSize.js.map +1 -1
  154. package/dist/esm/helpers/getStylesAtomic.js +4 -1
  155. package/dist/esm/helpers/getStylesAtomic.js.map +1 -1
  156. package/dist/esm/helpers/getStylesAtomic.native.js.map +1 -1
  157. package/dist/esm/helpers/getThemeCSSRules.js +7 -3
  158. package/dist/esm/helpers/getThemeCSSRules.js.map +1 -1
  159. package/dist/esm/helpers/getThemeCSSRules.native.js.map +1 -1
  160. package/dist/esm/helpers/getVariantExtras.js +9 -7
  161. package/dist/esm/helpers/getVariantExtras.js.map +1 -1
  162. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  163. package/dist/esm/helpers/isTamaguiComponent.js.map +1 -1
  164. package/dist/esm/helpers/isTamaguiElement.js.map +1 -1
  165. package/dist/esm/helpers/matchMedia.js.map +1 -1
  166. package/dist/esm/helpers/matchMedia.native.js.map +1 -1
  167. package/dist/esm/helpers/mergeProps.js.map +1 -1
  168. package/dist/esm/helpers/mergeTransform.js.map +2 -2
  169. package/dist/esm/helpers/normalizeColor.js.map +1 -1
  170. package/dist/esm/helpers/normalizeValueWithProperty.js.map +1 -1
  171. package/dist/esm/helpers/proxyThemeVariables.js.map +1 -1
  172. package/dist/esm/helpers/registerCSSVariable.js.map +1 -1
  173. package/dist/esm/helpers/startTransition.js.map +1 -1
  174. package/dist/esm/helpers/themeable.js +8 -4
  175. package/dist/esm/helpers/themeable.js.map +1 -1
  176. package/dist/esm/helpers/themes.js.map +1 -1
  177. package/dist/esm/hooks/useConstant.js.map +1 -1
  178. package/dist/esm/hooks/useFeatures.js +0 -120
  179. package/dist/esm/hooks/useFeatures.js.map +2 -2
  180. package/dist/esm/hooks/useId.js.map +1 -1
  181. package/dist/esm/hooks/useIsMounted.js.map +1 -1
  182. package/dist/esm/hooks/useIsSSR.js.map +1 -1
  183. package/dist/esm/hooks/useIsTouchDevice.js.map +1 -1
  184. package/dist/esm/hooks/useMedia.js +10 -7
  185. package/dist/esm/hooks/useMedia.js.map +2 -2
  186. package/dist/esm/hooks/usePressable.js.map +1 -1
  187. package/dist/esm/hooks/useSafeRef.js.map +1 -1
  188. package/dist/esm/hooks/useServerHooks.js.map +1 -1
  189. package/dist/esm/hooks/useTheme.js +6 -1
  190. package/dist/esm/hooks/useTheme.js.map +2 -2
  191. package/dist/esm/hooks/useUnmountEffect.js.map +1 -1
  192. package/dist/esm/index.js.map +1 -1
  193. package/dist/esm/injectStyles.js.map +1 -1
  194. package/dist/esm/insertFont.js +3 -1
  195. package/dist/esm/insertFont.js.map +2 -2
  196. package/dist/esm/static.js.map +1 -1
  197. package/dist/esm/styled.js +3 -1
  198. package/dist/esm/styled.js.map +1 -1
  199. package/dist/esm/updateTheme.js +7 -4
  200. package/dist/esm/updateTheme.js.map +1 -1
  201. package/dist/esm/views/FontLanguage.js +5 -4
  202. package/dist/esm/views/FontLanguage.js.map +1 -1
  203. package/dist/esm/views/FontLanguage.native.js +6 -4
  204. package/dist/esm/views/FontLanguage.native.js.map +1 -1
  205. package/dist/esm/views/Slot.js +12 -7
  206. package/dist/esm/views/Slot.js.map +1 -1
  207. package/dist/esm/views/Stack.js.map +1 -1
  208. package/dist/esm/views/TamaguiProvider.js +17 -11
  209. package/dist/esm/views/TamaguiProvider.js.map +1 -1
  210. package/dist/esm/views/Text.js.map +1 -1
  211. package/dist/esm/views/Theme.js +21 -10
  212. package/dist/esm/views/Theme.js.map +2 -2
  213. package/dist/esm/views/ThemeInverse.js +6 -4
  214. package/dist/esm/views/ThemeInverse.js.map +1 -1
  215. package/dist/esm/views/ThemeProvider.js +10 -7
  216. package/dist/esm/views/ThemeProvider.js.map +1 -1
  217. package/dist/esm/views/ThemeReset.js +5 -3
  218. package/dist/esm/views/ThemeReset.js.map +1 -1
  219. package/package.json +10 -10
  220. package/src/constants/platform.ts +1 -0
  221. package/src/createComponent.tsx +246 -57
  222. package/src/createFont.ts +4 -1
  223. package/src/createVariable.ts +2 -1
  224. package/src/helpers/createMediaStyle.ts +2 -2
  225. package/src/helpers/getSplitStyles.tsx +73 -65
  226. package/src/helpers/mergeTransform.ts +2 -0
  227. package/src/insertFont.ts +2 -1
  228. package/src/types.tsx +7 -5
  229. package/types/createVariable.d.ts +1 -1
  230. package/types/helpers/getSplitStyles.d.ts +1 -0
  231. package/types/hooks/useFeatures.d.ts +0 -1
  232. package/types/types.d.ts +11 -3
  233. package/src/helpers/cssHash.ts +0 -28
  234. package/src/hooks/useFeatures.tsx +0 -289
@@ -78,6 +78,7 @@ type StyleSplitter = (
78
78
  rulesToInsert: RulesToInsert
79
79
  viewProps: StackProps
80
80
  fontFamily: string | undefined
81
+ mediaKeys: string[]
81
82
  }
82
83
 
83
84
  export const PROP_SPLIT = '-'
@@ -108,12 +109,14 @@ export const getSplitStyles: StyleSplitter = (
108
109
  ) => {
109
110
  conf = conf || getConfig()
110
111
  const validStyleProps = staticConfig.isText ? stylePropsText : validStyles
112
+ const mediaKeys: string[] = []
111
113
  const viewProps: StackProps = {}
112
114
  const pseudos: PseudoStyles = {}
113
115
  const medias: Record<MediaQueryKey, ViewStyle> = {}
114
116
  const usedKeys = new Set<string>()
115
117
  const propKeys = Object.keys(props)
116
- const shouldDoClasses = (isWeb || process.env.IS_STATIC === 'is_static') && !state.noClassNames
118
+ const shouldDoClasses =
119
+ (isWeb || process.env.IS_STATIC === 'is_static') && !state.noClassNames && !props.animation
117
120
  const len = propKeys.length
118
121
  const rulesToInsert: RulesToInsert = []
119
122
  const style: ViewStyle = {}
@@ -125,54 +128,7 @@ export const getSplitStyles: StyleSplitter = (
125
128
  let classNames: ClassNamesObject = {}
126
129
  // we need to gather these specific to each media query / pseudo
127
130
  // value is [hash, val], so ["-jnjad-asdnjk", "scaleX(1) rotate(10deg)"]
128
- let transforms = null as Record<TransformNamespaceKey, [string, string]> | null
129
-
130
- function mergeClassName(key: string, val: string, isMediaOrPseudo = false) {
131
- if (process.env.TAMAGUI_TARGET === 'web') {
132
- // empty classnames passed by compiler sometimes
133
- if (!val) return
134
- if (val.startsWith('_transform-')) {
135
- const namespace: TransformNamespaceKey = isMediaOrPseudo ? key : 'transform'
136
-
137
- let transform = insertedTransforms[val]
138
- if (isClient) {
139
- if (!transform) {
140
- // HMR or loaded a new chunk
141
- updateInserted()
142
- transform = insertedTransforms[val]
143
- if (process.env.NODE_ENV === 'development') {
144
- if (!transform) {
145
- // eslint-disable-next-line no-console
146
- console.warn('no transform found', { insertedTransforms, val })
147
- }
148
- }
149
- }
150
- if (!transform) {
151
- if (isWeb && val[0] !== '_') {
152
- // runtime insert
153
- transform = val
154
- }
155
- }
156
- if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
157
- // prettier-ignore
158
- // eslint-disable-next-line no-console
159
- console.log(' 🔹 getSplitStyles mergeClassName transform', { key, val, namespace, transform, insertedTransforms })
160
- }
161
- }
162
- transforms = transforms || {}
163
- transforms[namespace] = transforms[namespace] || ['', '']
164
- const identifier = val.replace('_transform', '')
165
- transforms[namespace][0] += identifier
166
- // ssr doesn't need to do anything just make the right classname
167
- if (transform) {
168
- transforms[namespace][1] += transform
169
- }
170
- } else {
171
- classNames[key] = val
172
- }
173
- }
174
- }
175
-
131
+ const transforms: Record<TransformNamespaceKey, [string, string]> = {}
176
132
  // fontFamily is our special baby, ensure we grab the latest set one always
177
133
  let fontFamily: string | undefined
178
134
 
@@ -237,14 +193,14 @@ export const getSplitStyles: StyleSplitter = (
237
193
  fullKey += `${PROP_SPLIT}${pseudoShortKey}`
238
194
  }
239
195
  usedKeys.add(fullKey)
240
- mergeClassName(fullKey, cn, isMediaOrPseudo)
196
+ mergeClassName(transforms, classNames, fullKey, cn, isMediaOrPseudo)
241
197
  } else {
242
198
  nonTamaguis += ' ' + cn
243
199
  }
244
200
  }
245
201
  if (nonTamaguis) {
246
202
  usedKeys.add(keyInit)
247
- mergeClassName(keyInit, nonTamaguis)
203
+ mergeClassName(transforms, classNames, keyInit, nonTamaguis)
248
204
  }
249
205
  continue
250
206
  }
@@ -259,7 +215,7 @@ export const getSplitStyles: StyleSplitter = (
259
215
  validStyles[keyInit.split(PROP_SPLIT)[0]]
260
216
  if (isValidClassName || isMediaOrPseudo) {
261
217
  usedKeys.add(keyInit)
262
- mergeClassName(keyInit, valInit, isMediaOrPseudo)
218
+ mergeClassName(transforms, classNames, keyInit, valInit, isMediaOrPseudo)
263
219
  continue
264
220
  }
265
221
  }
@@ -350,7 +306,7 @@ export const getSplitStyles: StyleSplitter = (
350
306
  continue
351
307
  }
352
308
  pseudos[key] = pseudos[key] || {}
353
- pseudos[key] = getSubStyle(
309
+ const pseudoStyleObject = getSubStyle(
354
310
  key,
355
311
  val,
356
312
  staticConfig,
@@ -361,15 +317,16 @@ export const getSplitStyles: StyleSplitter = (
361
317
  languageContext,
362
318
  true
363
319
  )
364
- if (shouldDoClasses) {
365
- const pseudoStyles = getAtomicStyle(pseudos[key], pseudoDescriptors[key])
320
+ pseudos[key] = pseudoStyleObject
321
+ if (shouldDoClasses && key !== 'enterStyle' && key !== 'exitStyle') {
322
+ const pseudoStyles = getAtomicStyle(pseudoStyleObject, pseudoDescriptors[key])
366
323
  for (const style of pseudoStyles) {
367
324
  const postfix = pseudoDescriptors[key]?.name || key // exitStyle/enterStyle dont have pseudoDescriptors
368
325
  const fullKey = `${style.property}${PROP_SPLIT}${postfix}`
369
326
  if (!usedKeys.has(fullKey)) {
370
327
  usedKeys.add(fullKey)
371
328
  addStyleToInsertRules(rulesToInsert, style)
372
- mergeClassName(fullKey, style.identifier, isMediaOrPseudo)
329
+ mergeClassName(transforms, classNames, fullKey, style.identifier, isMediaOrPseudo)
373
330
  }
374
331
  }
375
332
  }
@@ -379,6 +336,7 @@ export const getSplitStyles: StyleSplitter = (
379
336
  // media
380
337
  if (isMedia) {
381
338
  const mediaKey = key
339
+ mediaKeys.push(key)
382
340
  const mediaKeyShort = mediaKey.slice(1)
383
341
 
384
342
  if (!mediaQueryConfig[mediaKeyShort]) {
@@ -419,7 +377,7 @@ export const getSplitStyles: StyleSplitter = (
419
377
  if (!usedKeys.has(fullKey)) {
420
378
  usedKeys.add(fullKey)
421
379
  addStyleToInsertRules(rulesToInsert, out)
422
- mergeClassName(fullKey, out.identifier, true)
380
+ mergeClassName(transforms, classNames, fullKey, out.identifier, true)
423
381
  }
424
382
  }
425
383
  } else {
@@ -428,7 +386,17 @@ export const getSplitStyles: StyleSplitter = (
428
386
  // eslint-disable-next-line no-console
429
387
  console.log('apply media style', mediaKey, mediaState)
430
388
  }
431
- Object.assign(shouldDoClasses ? medias : style, mediaStyle)
389
+ if (shouldDoClasses) {
390
+ Object.assign(medias, mediaStyle)
391
+ } else {
392
+ for (const key in mediaStyle) {
393
+ usedKeys.add(key)
394
+ style[key] = mediaStyle[key]
395
+ if (key === 'fontFamily') {
396
+ fontFamily = mediaStyle[key]
397
+ }
398
+ }
399
+ }
432
400
  }
433
401
  }
434
402
  continue
@@ -447,13 +415,7 @@ export const getSplitStyles: StyleSplitter = (
447
415
  } else if (key in stylePropsTransform) {
448
416
  mergeTransform(style, key, val, true)
449
417
  } else {
450
- // if (key === 'pointerEvents') {
451
- // // pointer events can be box-none which requires css
452
- // addStyleToInsertRules(out.identifier, out.styleRule)
453
- // mergeClassName(fullKey, out.identifier, true)
454
- // } else {
455
418
  style[key] = normalizeValueWithProperty(val, key)
456
- // }
457
419
  }
458
420
  continue
459
421
  }
@@ -489,7 +451,7 @@ export const getSplitStyles: StyleSplitter = (
489
451
  // should probably have a few more exceptions here!
490
452
  if (key === 'pointerEvents' || !state.dynamicStylesInline) {
491
453
  addStyleToInsertRules(rulesToInsert, atomicStyle)
492
- mergeClassName(key, atomicStyle.identifier)
454
+ mergeClassName(transforms, classNames, key, atomicStyle.identifier)
493
455
  } else {
494
456
  style[key] = atomicStyle.value
495
457
  }
@@ -568,12 +530,58 @@ export const getSplitStyles: StyleSplitter = (
568
530
  viewProps,
569
531
  style,
570
532
  medias,
533
+ mediaKeys,
571
534
  pseudos,
572
535
  classNames,
573
536
  rulesToInsert,
574
537
  }
575
538
  }
576
539
 
540
+ function mergeClassName(
541
+ transforms: Record<string, any[]>,
542
+ classNames: Record<string, string>,
543
+ key: string,
544
+ val: string,
545
+ isMediaOrPseudo = false
546
+ ) {
547
+ if (process.env.TAMAGUI_TARGET === 'web') {
548
+ // empty classnames passed by compiler sometimes
549
+ if (!val) return
550
+ if (val.startsWith('_transform-')) {
551
+ const namespace: TransformNamespaceKey = isMediaOrPseudo ? key : 'transform'
552
+ let transform = insertedTransforms[val]
553
+ if (isClient) {
554
+ if (!transform) {
555
+ // HMR or loaded a new chunk
556
+ updateInserted()
557
+ transform = insertedTransforms[val]
558
+ if (process.env.NODE_ENV === 'development') {
559
+ if (!transform) {
560
+ // eslint-disable-next-line no-console
561
+ console.warn('no transform found', { insertedTransforms, val })
562
+ }
563
+ }
564
+ }
565
+ if (!transform) {
566
+ if (isWeb && val[0] !== '_') {
567
+ // runtime insert
568
+ transform = val
569
+ }
570
+ }
571
+ }
572
+ transforms[namespace] = transforms[namespace] || ['', '']
573
+ const identifier = val.replace('_transform', '')
574
+ transforms[namespace][0] += identifier
575
+ // ssr doesn't need to do anything just make the right classname
576
+ if (transform) {
577
+ transforms[namespace][1] += transform
578
+ }
579
+ } else {
580
+ classNames[key] = val
581
+ }
582
+ }
583
+ }
584
+
577
585
  /**
578
586
  * getSubStyle calls propMapper with props
579
587
  * those should be specific to the substyle, but fallback to the base props
@@ -4,10 +4,12 @@ export const mergeTransform = (obj: ViewStyle, key: string, val: any, backwards
4
4
  obj.transform ||= []
5
5
  obj.transform[backwards ? 'unshift' : 'push']({ [mapTransformKeys[key] || key]: val } as any)
6
6
  }
7
+
7
8
  const mapTransformKeys = {
8
9
  x: 'translateX',
9
10
  y: 'translateY',
10
11
  }
12
+
11
13
  export const invertMapTransformKeys = {
12
14
  translateX: 'x',
13
15
  translateY: 'y',
package/src/insertFont.ts CHANGED
@@ -27,7 +27,7 @@ export function parseFont<A extends GenericFont>(definition: A): DeepVariableObj
27
27
  const parsed: any = {}
28
28
  for (const attrKey in definition) {
29
29
  const attr = definition[attrKey]
30
- if (attrKey === 'family') {
30
+ if (attrKey === 'family' || attrKey === 'face') {
31
31
  parsed[attrKey] = attr
32
32
  continue
33
33
  }
@@ -48,6 +48,7 @@ export function registerFontVariables(parsedFont: any) {
48
48
  const response: string[] = []
49
49
 
50
50
  for (const fkey in parsedFont) {
51
+ if (fkey === 'face') continue
51
52
  if (fkey === 'family') {
52
53
  const val = parsedFont[fkey] as Variable
53
54
  registerCSSVariable(val)
package/src/types.tsx CHANGED
@@ -1,7 +1,7 @@
1
1
  // TODO split this into own package @tamagui/types to share with animations packages
2
2
 
3
3
  import { Properties } from 'csstype'
4
- import React from 'react'
4
+ import React, { RefObject } from 'react'
5
5
  import {
6
6
  GestureResponderEvent,
7
7
  Image,
@@ -336,6 +336,8 @@ export type GenericFont<Key extends number | string = number | string> = {
336
336
  style?: Partial<{ [key in Key]: TextStyle['fontStyle'] | Variable }>
337
337
  transform?: Partial<{ [key in Key]: TextStyle['textTransform'] | Variable }>
338
338
  color?: Partial<{ [key in Key]: string | Variable }>
339
+ // for native use only, lets you map to alternative fonts
340
+ face?: { [key in FontWeightSteps]: { normal?: string; italic?: string } }
339
341
  }
340
342
 
341
343
  // media
@@ -429,9 +431,8 @@ export type RadiusTokens = GetTokenString<keyof Tokens['radius']> | number
429
431
  export type FontTokens = GetTokenString<keyof TamaguiConfig['fonts']>
430
432
  export type FontSizeTokens = GetTokenString<GetTokenFontKeysFor<'size'>> | number
431
433
  export type FontLineHeightTokens = `$${GetTokenFontKeysFor<'lineHeight'>}` | number
432
- export type FontWeightTokens =
433
- | `$${GetTokenFontKeysFor<'weight'>}`
434
- | `${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}00`
434
+ export type FontWeightSteps = `${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}00`
435
+ export type FontWeightTokens = `$${GetTokenFontKeysFor<'weight'>}` | FontWeightSteps
435
436
  export type FontColorTokens = `$${GetTokenFontKeysFor<'color'>}` | number
436
437
  export type FontLetterSpacingTokens = `$${GetTokenFontKeysFor<'letterSpacing'>}` | number
437
438
  export type FontStyleTokens = `$${GetTokenFontKeysFor<'style'>}` | TextStyle['fontStyle']
@@ -1242,6 +1243,7 @@ export type AnimationDriver<A extends AnimationConfig = AnimationConfig> = {
1242
1243
  export type UseAnimationProps = TamaguiComponentPropsBase & Record<string, any>
1243
1244
 
1244
1245
  export type UseAnimationHelpers = {
1246
+ hostRef: RefObject<HTMLElement | View>
1245
1247
  staticConfig: StaticConfigParsed
1246
1248
  getStyle: (props?: {
1247
1249
  isEntering?: boolean
@@ -1262,6 +1264,6 @@ export type UseAnimationHelpers = {
1262
1264
  export type UseAnimationHook = (
1263
1265
  props: UseAnimationProps,
1264
1266
  helpers: UseAnimationHelpers
1265
- ) => {
1267
+ ) => null | {
1266
1268
  style?: StackStylePropsBase | StackStylePropsBase[]
1267
1269
  }
@@ -18,7 +18,7 @@ export declare const createVariable: <A extends string | number = any>(props: Va
18
18
  isFloating?: boolean | undefined;
19
19
  __isVar__: boolean;
20
20
  };
21
- export declare function variableToString(vrble?: any): string;
21
+ export declare function variableToString(vrble?: any, getValue?: boolean): string;
22
22
  export declare function isVariable(v: Variable | any): v is Variable;
23
23
  export declare function getVariableValue(v: Variable | any): any;
24
24
  export declare function getVariableName(v: Variable | any): any;
@@ -15,6 +15,7 @@ declare type StyleSplitter = (props: {
15
15
  rulesToInsert: RulesToInsert;
16
16
  viewProps: StackProps;
17
17
  fontFamily: string | undefined;
18
+ mediaKeys: string[];
18
19
  };
19
20
  export declare const PROP_SPLIT = "-";
20
21
  export declare const pseudoCNInverse: {
@@ -16,7 +16,6 @@ declare type FeatureUtils = {
16
16
  export declare const useFeatures: (props: any, utils?: FeatureUtils) => {
17
17
  elements: JSX.Element[];
18
18
  enabled: {
19
- animation?: boolean | undefined;
20
19
  mediaQuery?: boolean | undefined;
21
20
  };
22
21
  };
package/types/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Properties } from 'csstype';
2
- import React from 'react';
2
+ import React, { RefObject } from 'react';
3
3
  import { GestureResponderEvent, Image, PressableProps, TextProps as ReactTextProps, Text, TextInput, TextStyle, View, ViewProps, ViewStyle } from 'react-native';
4
4
  import { Variable } from './createVariable';
5
5
  import { ResolveVariableTypes } from './helpers/createPropMapper';
@@ -205,6 +205,12 @@ export declare type GenericFont<Key extends number | string = number | string> =
205
205
  color?: Partial<{
206
206
  [key in Key]: string | Variable;
207
207
  }>;
208
+ face?: {
209
+ [key in FontWeightSteps]: {
210
+ normal?: string;
211
+ italic?: string;
212
+ };
213
+ };
208
214
  };
209
215
  export declare type MediaQueryObject = {
210
216
  [key: string]: string | number | string;
@@ -264,7 +270,8 @@ export declare type RadiusTokens = GetTokenString<keyof Tokens['radius']> | numb
264
270
  export declare type FontTokens = GetTokenString<keyof TamaguiConfig['fonts']>;
265
271
  export declare type FontSizeTokens = GetTokenString<GetTokenFontKeysFor<'size'>> | number;
266
272
  export declare type FontLineHeightTokens = `$${GetTokenFontKeysFor<'lineHeight'>}` | number;
267
- export declare type FontWeightTokens = `$${GetTokenFontKeysFor<'weight'>}` | `${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}00`;
273
+ export declare type FontWeightSteps = `${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}00`;
274
+ export declare type FontWeightTokens = `$${GetTokenFontKeysFor<'weight'>}` | FontWeightSteps;
268
275
  export declare type FontColorTokens = `$${GetTokenFontKeysFor<'color'>}` | number;
269
276
  export declare type FontLetterSpacingTokens = `$${GetTokenFontKeysFor<'letterSpacing'>}` | number;
270
277
  export declare type FontStyleTokens = `$${GetTokenFontKeysFor<'style'>}` | TextStyle['fontStyle'];
@@ -492,6 +499,7 @@ export declare type AnimationDriver<A extends AnimationConfig = AnimationConfig>
492
499
  };
493
500
  export declare type UseAnimationProps = TamaguiComponentPropsBase & Record<string, any>;
494
501
  export declare type UseAnimationHelpers = {
502
+ hostRef: RefObject<HTMLElement | View>;
495
503
  staticConfig: StaticConfigParsed;
496
504
  getStyle: (props?: {
497
505
  isEntering?: boolean;
@@ -504,7 +512,7 @@ export declare type UseAnimationHelpers = {
504
512
  onDidAnimate?: any;
505
513
  delay?: number;
506
514
  };
507
- export declare type UseAnimationHook = (props: UseAnimationProps, helpers: UseAnimationHelpers) => {
515
+ export declare type UseAnimationHook = (props: UseAnimationProps, helpers: UseAnimationHelpers) => null | {
508
516
  style?: StackStylePropsBase | StackStylePropsBase[];
509
517
  };
510
518
  export {};
@@ -1,28 +0,0 @@
1
- import { simpleHash } from '@tamagui/helpers'
2
-
3
- // not sure it's worth the extra weight, could be dev time though
4
- // affordances for simple values
5
- export function cssHash(val: string, maxLen = 10) {
6
- if (val.length < maxLen) {
7
- let res = ''
8
- for (let i = 0; i < val.length; i++) {
9
- const char = val[i]
10
- if (specials[char]) {
11
- res += specials[char]
12
- } else {
13
- res += validCSS.test(char) ? char : '_' + char.charCodeAt(0).toString()
14
- }
15
- }
16
- return res
17
- }
18
- return simpleHash(val)
19
- }
20
-
21
- const validCSS = /[a-z0-9]/i
22
-
23
- const specials = {
24
- '.': 'dot',
25
- ',': '_',
26
- '%': 'pct',
27
- '-': 'neg',
28
- }