@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.
- package/dist/cjs/Tamagui.js +4 -1
- package/dist/cjs/Tamagui.js.map +1 -1
- package/dist/cjs/addTheme.js.map +1 -1
- package/dist/cjs/constants/platform.js.map +2 -2
- package/dist/cjs/constants/platform.native.js.map +1 -1
- package/dist/cjs/contexts/ButtonInsideButtonContext.js.map +1 -1
- package/dist/cjs/contexts/FontLanguageContext.js.map +1 -1
- package/dist/cjs/contexts/TextAncestorContext.js +6 -7
- package/dist/cjs/contexts/TextAncestorContext.js.map +2 -2
- package/dist/cjs/contexts/ThemeContext.js.map +1 -1
- package/dist/cjs/createComponent.js +315 -123
- package/dist/cjs/createComponent.js.map +3 -3
- package/dist/cjs/createFont.js +2 -1
- package/dist/cjs/createFont.js.map +2 -2
- package/dist/cjs/createShorthands.js.map +1 -1
- package/dist/cjs/createTamagui.js +5 -3
- package/dist/cjs/createTamagui.js.map +2 -2
- package/dist/cjs/createTokens.js.map +1 -1
- package/dist/cjs/createVariable.js +3 -1
- package/dist/cjs/createVariable.js.map +2 -2
- package/dist/cjs/createVariables.js.map +1 -1
- package/dist/cjs/helpers/ThemeManager.js.map +2 -2
- package/dist/cjs/helpers/assignNativePropsToWeb.js.map +1 -1
- package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +1 -1
- package/dist/cjs/helpers/calc.js.map +2 -2
- package/dist/cjs/helpers/createMediaStyle.js +10 -4
- package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
- package/dist/cjs/helpers/createPropMapper.js +89 -9
- package/dist/cjs/helpers/createPropMapper.js.map +1 -1
- package/dist/cjs/helpers/createShallowUpdate.js +12 -9
- package/dist/cjs/helpers/createShallowUpdate.js.map +1 -1
- package/dist/cjs/helpers/cssHash.js.map +1 -1
- package/dist/cjs/helpers/expandStyle.js.map +2 -2
- package/dist/cjs/helpers/expandStyles.js.map +1 -1
- package/dist/cjs/helpers/extendStaticConfig.js +10 -7
- package/dist/cjs/helpers/extendStaticConfig.js.map +1 -1
- package/dist/cjs/helpers/getAnimationDriver.js.map +1 -1
- package/dist/cjs/helpers/getExpandedShorthands.js.map +1 -1
- package/dist/cjs/helpers/getFont.js.map +1 -1
- package/dist/cjs/helpers/getSize.js.map +1 -1
- package/dist/cjs/helpers/getSplitStyles.js +99 -53
- package/dist/cjs/helpers/getSplitStyles.js.map +3 -3
- package/dist/cjs/helpers/getStackSize.js.map +1 -1
- package/dist/cjs/helpers/getStylesAtomic.js +8 -2
- package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
- package/dist/cjs/helpers/getStylesAtomic.native.js.map +1 -1
- package/dist/cjs/helpers/getThemeCSSRules.js +7 -3
- package/dist/cjs/helpers/getThemeCSSRules.js.map +1 -1
- package/dist/cjs/helpers/getThemeCSSRules.native.js.map +1 -1
- package/dist/cjs/helpers/getVariantExtras.js +9 -7
- package/dist/cjs/helpers/getVariantExtras.js.map +1 -1
- package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
- package/dist/cjs/helpers/isTamaguiComponent.js.map +1 -1
- package/dist/cjs/helpers/isTamaguiElement.js.map +1 -1
- package/dist/cjs/helpers/matchMedia.js.map +1 -1
- package/dist/cjs/helpers/matchMedia.native.js +4 -1
- package/dist/cjs/helpers/matchMedia.native.js.map +2 -2
- package/dist/cjs/helpers/mergeProps.js.map +1 -1
- package/dist/cjs/helpers/mergeTransform.js.map +2 -2
- package/dist/cjs/helpers/normalizeColor.js +4 -1
- package/dist/cjs/helpers/normalizeColor.js.map +2 -2
- package/dist/cjs/helpers/normalizeValueWithProperty.js.map +1 -1
- package/dist/cjs/helpers/proxyThemeVariables.js.map +1 -1
- package/dist/cjs/helpers/registerCSSVariable.js.map +1 -1
- package/dist/cjs/helpers/startTransition.js +4 -1
- package/dist/cjs/helpers/startTransition.js.map +2 -2
- package/dist/cjs/helpers/themeable.js +12 -5
- package/dist/cjs/helpers/themeable.js.map +2 -2
- package/dist/cjs/helpers/themes.js.map +1 -1
- package/dist/cjs/hooks/useConstant.js.map +1 -1
- package/dist/cjs/hooks/useFeatures.js +0 -120
- package/dist/cjs/hooks/useFeatures.js.map +2 -2
- package/dist/cjs/hooks/useIsMounted.js.map +1 -1
- package/dist/cjs/hooks/useIsSSR.js.map +1 -1
- package/dist/cjs/hooks/useIsTouchDevice.js.map +1 -1
- package/dist/cjs/hooks/useMedia.js +10 -7
- package/dist/cjs/hooks/useMedia.js.map +2 -2
- package/dist/cjs/hooks/usePressable.js.map +1 -1
- package/dist/cjs/hooks/useSafeRef.js.map +1 -1
- package/dist/cjs/hooks/useServerHooks.js.map +1 -1
- package/dist/cjs/hooks/useTheme.js +6 -1
- package/dist/cjs/hooks/useTheme.js.map +2 -2
- package/dist/cjs/hooks/useUnmountEffect.js.map +1 -1
- package/dist/cjs/injectStyles.js.map +1 -1
- package/dist/cjs/insertFont.js +3 -1
- package/dist/cjs/insertFont.js.map +2 -2
- package/dist/cjs/styled.js +3 -1
- package/dist/cjs/styled.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/updateTheme.js +7 -4
- package/dist/cjs/updateTheme.js.map +1 -1
- package/dist/cjs/views/FontLanguage.js +5 -7
- package/dist/cjs/views/FontLanguage.js.map +1 -1
- package/dist/cjs/views/FontLanguage.native.js +6 -7
- package/dist/cjs/views/FontLanguage.native.js.map +1 -1
- package/dist/cjs/views/Slot.js +16 -8
- package/dist/cjs/views/Slot.js.map +1 -1
- package/dist/cjs/views/Stack.js.map +1 -1
- package/dist/cjs/views/TamaguiProvider.js +21 -12
- package/dist/cjs/views/TamaguiProvider.js.map +1 -1
- package/dist/cjs/views/Text.js.map +1 -1
- package/dist/cjs/views/Theme.js +25 -11
- package/dist/cjs/views/Theme.js.map +2 -2
- package/dist/cjs/views/ThemeInverse.js +6 -7
- package/dist/cjs/views/ThemeInverse.js.map +1 -1
- package/dist/cjs/views/ThemeProvider.js +14 -8
- package/dist/cjs/views/ThemeProvider.js.map +2 -2
- package/dist/cjs/views/ThemeReset.js +9 -4
- package/dist/cjs/views/ThemeReset.js.map +2 -2
- package/dist/esm/Tamagui.js.map +1 -1
- package/dist/esm/addTheme.js.map +1 -1
- package/dist/esm/constants/constants.js.map +1 -1
- package/dist/esm/constants/platform.js.map +2 -2
- package/dist/esm/constants/platform.native.js.map +1 -1
- package/dist/esm/contexts/ButtonInsideButtonContext.js.map +1 -1
- package/dist/esm/contexts/FontLanguageContext.js.map +1 -1
- package/dist/esm/contexts/TextAncestorContext.js +6 -4
- package/dist/esm/contexts/TextAncestorContext.js.map +1 -1
- package/dist/esm/contexts/ThemeContext.js.map +1 -1
- package/dist/esm/createComponent.js +319 -125
- package/dist/esm/createComponent.js.map +3 -3
- package/dist/esm/createFont.js +2 -1
- package/dist/esm/createFont.js.map +2 -2
- package/dist/esm/createShorthands.js.map +1 -1
- package/dist/esm/createTamagui.js +5 -3
- package/dist/esm/createTamagui.js.map +2 -2
- package/dist/esm/createTokens.js.map +1 -1
- package/dist/esm/createVariable.js +3 -1
- package/dist/esm/createVariable.js.map +2 -2
- package/dist/esm/createVariables.js.map +1 -1
- package/dist/esm/helpers/RNComponents.js.map +1 -1
- package/dist/esm/helpers/ThemeManager.js.map +2 -2
- package/dist/esm/helpers/assignNativePropsToWeb.js.map +1 -1
- package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +1 -1
- package/dist/esm/helpers/calc.js.map +2 -2
- package/dist/esm/helpers/createMediaStyle.js +10 -4
- package/dist/esm/helpers/createMediaStyle.js.map +2 -2
- package/dist/esm/helpers/createPropMapper.js +89 -9
- package/dist/esm/helpers/createPropMapper.js.map +1 -1
- package/dist/esm/helpers/createShallowUpdate.js +12 -9
- package/dist/esm/helpers/createShallowUpdate.js.map +1 -1
- package/dist/esm/helpers/cssHash.js.map +1 -1
- package/dist/esm/helpers/expandStyle.js.map +2 -2
- package/dist/esm/helpers/expandStyles.js.map +1 -1
- package/dist/esm/helpers/extendStaticConfig.js +10 -7
- package/dist/esm/helpers/extendStaticConfig.js.map +1 -1
- package/dist/esm/helpers/getAnimationDriver.js.map +1 -1
- package/dist/esm/helpers/getExpandedShorthands.js.map +1 -1
- package/dist/esm/helpers/getFont.js.map +1 -1
- package/dist/esm/helpers/getSize.js.map +1 -1
- package/dist/esm/helpers/getSplitStyles.js +99 -53
- package/dist/esm/helpers/getSplitStyles.js.map +3 -3
- package/dist/esm/helpers/getStackSize.js.map +1 -1
- package/dist/esm/helpers/getStylesAtomic.js +4 -1
- package/dist/esm/helpers/getStylesAtomic.js.map +1 -1
- package/dist/esm/helpers/getStylesAtomic.native.js.map +1 -1
- package/dist/esm/helpers/getThemeCSSRules.js +7 -3
- package/dist/esm/helpers/getThemeCSSRules.js.map +1 -1
- package/dist/esm/helpers/getThemeCSSRules.native.js.map +1 -1
- package/dist/esm/helpers/getVariantExtras.js +9 -7
- package/dist/esm/helpers/getVariantExtras.js.map +1 -1
- package/dist/esm/helpers/insertStyleRule.js.map +2 -2
- package/dist/esm/helpers/isTamaguiComponent.js.map +1 -1
- package/dist/esm/helpers/isTamaguiElement.js.map +1 -1
- package/dist/esm/helpers/matchMedia.js.map +1 -1
- package/dist/esm/helpers/matchMedia.native.js.map +1 -1
- package/dist/esm/helpers/mergeProps.js.map +1 -1
- package/dist/esm/helpers/mergeTransform.js.map +2 -2
- package/dist/esm/helpers/normalizeColor.js.map +1 -1
- package/dist/esm/helpers/normalizeValueWithProperty.js.map +1 -1
- package/dist/esm/helpers/proxyThemeVariables.js.map +1 -1
- package/dist/esm/helpers/registerCSSVariable.js.map +1 -1
- package/dist/esm/helpers/startTransition.js.map +1 -1
- package/dist/esm/helpers/themeable.js +8 -4
- package/dist/esm/helpers/themeable.js.map +1 -1
- package/dist/esm/helpers/themes.js.map +1 -1
- package/dist/esm/hooks/useConstant.js.map +1 -1
- package/dist/esm/hooks/useFeatures.js +0 -120
- package/dist/esm/hooks/useFeatures.js.map +2 -2
- package/dist/esm/hooks/useId.js.map +1 -1
- package/dist/esm/hooks/useIsMounted.js.map +1 -1
- package/dist/esm/hooks/useIsSSR.js.map +1 -1
- package/dist/esm/hooks/useIsTouchDevice.js.map +1 -1
- package/dist/esm/hooks/useMedia.js +10 -7
- package/dist/esm/hooks/useMedia.js.map +2 -2
- package/dist/esm/hooks/usePressable.js.map +1 -1
- package/dist/esm/hooks/useSafeRef.js.map +1 -1
- package/dist/esm/hooks/useServerHooks.js.map +1 -1
- package/dist/esm/hooks/useTheme.js +6 -1
- package/dist/esm/hooks/useTheme.js.map +2 -2
- package/dist/esm/hooks/useUnmountEffect.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/injectStyles.js.map +1 -1
- package/dist/esm/insertFont.js +3 -1
- package/dist/esm/insertFont.js.map +2 -2
- package/dist/esm/static.js.map +1 -1
- package/dist/esm/styled.js +3 -1
- package/dist/esm/styled.js.map +1 -1
- package/dist/esm/updateTheme.js +7 -4
- package/dist/esm/updateTheme.js.map +1 -1
- package/dist/esm/views/FontLanguage.js +5 -4
- package/dist/esm/views/FontLanguage.js.map +1 -1
- package/dist/esm/views/FontLanguage.native.js +6 -4
- package/dist/esm/views/FontLanguage.native.js.map +1 -1
- package/dist/esm/views/Slot.js +12 -7
- package/dist/esm/views/Slot.js.map +1 -1
- package/dist/esm/views/Stack.js.map +1 -1
- package/dist/esm/views/TamaguiProvider.js +17 -11
- package/dist/esm/views/TamaguiProvider.js.map +1 -1
- package/dist/esm/views/Text.js.map +1 -1
- package/dist/esm/views/Theme.js +21 -10
- package/dist/esm/views/Theme.js.map +2 -2
- package/dist/esm/views/ThemeInverse.js +6 -4
- package/dist/esm/views/ThemeInverse.js.map +1 -1
- package/dist/esm/views/ThemeProvider.js +10 -7
- package/dist/esm/views/ThemeProvider.js.map +1 -1
- package/dist/esm/views/ThemeReset.js +5 -3
- package/dist/esm/views/ThemeReset.js.map +1 -1
- package/package.json +10 -10
- package/src/constants/platform.ts +1 -0
- package/src/createComponent.tsx +246 -57
- package/src/createFont.ts +4 -1
- package/src/createVariable.ts +2 -1
- package/src/helpers/createMediaStyle.ts +2 -2
- package/src/helpers/getSplitStyles.tsx +73 -65
- package/src/helpers/mergeTransform.ts +2 -0
- package/src/insertFont.ts +2 -1
- package/src/types.tsx +7 -5
- package/types/createVariable.d.ts +1 -1
- package/types/helpers/getSplitStyles.d.ts +1 -0
- package/types/hooks/useFeatures.d.ts +0 -1
- package/types/types.d.ts +11 -3
- package/src/helpers/cssHash.ts +0 -28
- 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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
365
|
-
|
|
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
|
-
|
|
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
|
|
433
|
-
|
|
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;
|
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
|
|
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 {};
|
package/src/helpers/cssHash.ts
DELETED
|
@@ -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
|
-
}
|