@tamagui/web 1.84.2 → 1.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/cjs/createComponent.js +1 -1
  2. package/dist/cjs/createComponent.js.map +1 -1
  3. package/dist/cjs/createComponent.native.js +1 -1
  4. package/dist/cjs/createComponent.native.js.map +1 -1
  5. package/dist/cjs/createTamagui.js +1 -1
  6. package/dist/cjs/createTamagui.js.map +1 -1
  7. package/dist/cjs/createTamagui.native.js +1 -1
  8. package/dist/cjs/createTamagui.native.js.map +1 -1
  9. package/dist/cjs/helpers/ThemeManager.js.map +1 -1
  10. package/dist/cjs/helpers/ThemeManager.native.js.map +1 -1
  11. package/dist/cjs/helpers/ThemeManagerContext.js.map +1 -1
  12. package/dist/cjs/helpers/ThemeManagerContext.native.js.map +1 -1
  13. package/dist/cjs/helpers/createMediaStyle.js.map +1 -1
  14. package/dist/cjs/helpers/createMediaStyle.native.js.map +1 -1
  15. package/dist/cjs/helpers/getSplitStyles.js +9 -9
  16. package/dist/cjs/helpers/getSplitStyles.js.map +1 -1
  17. package/dist/cjs/helpers/getSplitStyles.native.js +18 -21
  18. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
  19. package/dist/cjs/helpers/getThemeCSSRules.js +2 -4
  20. package/dist/cjs/helpers/getThemeCSSRules.js.map +1 -1
  21. package/dist/cjs/helpers/insertStyleRule.js.map +1 -1
  22. package/dist/cjs/helpers/insertStyleRule.native.js.map +1 -1
  23. package/dist/cjs/helpers/normalizeValueWithProperty.js +1 -1
  24. package/dist/cjs/helpers/normalizeValueWithProperty.js.map +1 -1
  25. package/dist/cjs/helpers/normalizeValueWithProperty.native.js +1 -1
  26. package/dist/cjs/helpers/normalizeValueWithProperty.native.js.map +1 -1
  27. package/dist/cjs/helpers/propMapper.js +3 -3
  28. package/dist/cjs/helpers/propMapper.js.map +1 -1
  29. package/dist/cjs/helpers/propMapper.native.js +3 -3
  30. package/dist/cjs/helpers/propMapper.native.js.map +1 -1
  31. package/dist/cjs/hooks/useTheme.js +8 -1
  32. package/dist/cjs/hooks/useTheme.js.map +1 -1
  33. package/dist/cjs/hooks/useTheme.native.js +8 -1
  34. package/dist/cjs/hooks/useTheme.native.js.map +1 -1
  35. package/dist/cjs/setupReactNative.js.map +1 -1
  36. package/dist/cjs/setupReactNative.native.js +1 -1
  37. package/dist/cjs/setupReactNative.native.js.map +1 -1
  38. package/dist/cjs/views/Theme.js +3 -1
  39. package/dist/cjs/views/Theme.js.map +1 -1
  40. package/dist/cjs/views/Theme.native.js +3 -1
  41. package/dist/cjs/views/Theme.native.js.map +1 -1
  42. package/dist/esm/createComponent.js +1 -1
  43. package/dist/esm/createComponent.js.map +1 -1
  44. package/dist/esm/createComponent.native.js +1 -1
  45. package/dist/esm/createComponent.native.js.map +1 -1
  46. package/dist/esm/createTamagui.js +1 -1
  47. package/dist/esm/createTamagui.js.map +1 -1
  48. package/dist/esm/createTamagui.native.js +1 -1
  49. package/dist/esm/createTamagui.native.js.map +1 -1
  50. package/dist/esm/helpers/ThemeManager.js.map +1 -1
  51. package/dist/esm/helpers/ThemeManager.native.js.map +1 -1
  52. package/dist/esm/helpers/ThemeManagerContext.js.map +1 -1
  53. package/dist/esm/helpers/ThemeManagerContext.native.js.map +1 -1
  54. package/dist/esm/helpers/createMediaStyle.js.map +1 -1
  55. package/dist/esm/helpers/createMediaStyle.native.js.map +1 -1
  56. package/dist/esm/helpers/getSplitStyles.js +9 -9
  57. package/dist/esm/helpers/getSplitStyles.js.map +1 -1
  58. package/dist/esm/helpers/getSplitStyles.native.js +18 -21
  59. package/dist/esm/helpers/getSplitStyles.native.js.map +1 -1
  60. package/dist/esm/helpers/getThemeCSSRules.js +2 -4
  61. package/dist/esm/helpers/getThemeCSSRules.js.map +1 -1
  62. package/dist/esm/helpers/insertStyleRule.js.map +1 -1
  63. package/dist/esm/helpers/insertStyleRule.native.js.map +1 -1
  64. package/dist/esm/helpers/normalizeValueWithProperty.js +1 -1
  65. package/dist/esm/helpers/normalizeValueWithProperty.js.map +1 -1
  66. package/dist/esm/helpers/normalizeValueWithProperty.native.js +1 -1
  67. package/dist/esm/helpers/normalizeValueWithProperty.native.js.map +1 -1
  68. package/dist/esm/helpers/propMapper.js +3 -3
  69. package/dist/esm/helpers/propMapper.js.map +1 -1
  70. package/dist/esm/helpers/propMapper.native.js +3 -3
  71. package/dist/esm/helpers/propMapper.native.js.map +1 -1
  72. package/dist/esm/hooks/useTheme.js +8 -1
  73. package/dist/esm/hooks/useTheme.js.map +1 -1
  74. package/dist/esm/hooks/useTheme.native.js +8 -1
  75. package/dist/esm/hooks/useTheme.native.js.map +1 -1
  76. package/dist/esm/setupReactNative.js.map +1 -1
  77. package/dist/esm/setupReactNative.native.js.map +1 -1
  78. package/dist/esm/views/Theme.js +3 -1
  79. package/dist/esm/views/Theme.js.map +1 -1
  80. package/dist/esm/views/Theme.native.js +3 -1
  81. package/dist/esm/views/Theme.native.js.map +1 -1
  82. package/package.json +10 -10
  83. package/src/createComponent.tsx +10 -6
  84. package/src/createTamagui.ts +5 -3
  85. package/src/createVariables.ts +2 -2
  86. package/src/helpers/ThemeManager.tsx +3 -2
  87. package/src/helpers/ThemeManagerContext.tsx +0 -1
  88. package/src/helpers/createMediaStyle.ts +6 -4
  89. package/src/helpers/getSplitStyles.tsx +56 -71
  90. package/src/helpers/getThemeCSSRules.ts +6 -5
  91. package/src/helpers/insertStyleRule.tsx +2 -2
  92. package/src/helpers/normalizeValueWithProperty.ts +1 -1
  93. package/src/helpers/propMapper.ts +6 -6
  94. package/src/hooks/useTheme.tsx +29 -22
  95. package/src/interfaces/GetRef.tsx +19 -15
  96. package/src/setupReactNative.ts +15 -16
  97. package/src/styled.tsx +9 -9
  98. package/src/types.tsx +112 -109
  99. package/src/views/Theme.tsx +15 -11
  100. package/types/createComponent.d.ts.map +1 -1
  101. package/types/createVariables.d.ts.map +1 -1
  102. package/types/helpers/ThemeManager.d.ts.map +1 -1
  103. package/types/helpers/ThemeManagerContext.d.ts.map +1 -1
  104. package/types/helpers/createMediaStyle.d.ts.map +1 -1
  105. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  106. package/types/helpers/getThemeCSSRules.d.ts.map +1 -1
  107. package/types/hooks/useTheme.d.ts.map +1 -1
  108. package/types/interfaces/GetRef.d.ts.map +1 -1
  109. package/types/setupReactNative.d.ts.map +1 -1
  110. package/types/styled.d.ts.map +1 -1
  111. package/types/types.d.ts +2 -2
  112. package/types/types.d.ts.map +1 -1
  113. package/types/views/Theme.d.ts.map +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/web",
3
- "version": "1.84.2",
3
+ "version": "1.85.0",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -27,21 +27,21 @@
27
27
  "reset.css"
28
28
  ],
29
29
  "dependencies": {
30
- "@tamagui/compose-refs": "1.84.2",
31
- "@tamagui/constants": "1.84.2",
32
- "@tamagui/helpers": "1.84.2",
33
- "@tamagui/normalize-css-color": "1.84.2",
34
- "@tamagui/timer": "1.84.2",
35
- "@tamagui/use-did-finish-ssr": "1.84.2",
36
- "@tamagui/use-event": "1.84.2",
37
- "@tamagui/use-force-update": "1.84.2"
30
+ "@tamagui/compose-refs": "1.85.0",
31
+ "@tamagui/constants": "1.85.0",
32
+ "@tamagui/helpers": "1.85.0",
33
+ "@tamagui/normalize-css-color": "1.85.0",
34
+ "@tamagui/timer": "1.85.0",
35
+ "@tamagui/use-did-finish-ssr": "1.85.0",
36
+ "@tamagui/use-event": "1.85.0",
37
+ "@tamagui/use-force-update": "1.85.0"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "react": "*",
41
41
  "react-dom": "*"
42
42
  },
43
43
  "devDependencies": {
44
- "@tamagui/build": "1.84.2",
44
+ "@tamagui/build": "1.85.0",
45
45
  "@testing-library/react": "^14.0.0",
46
46
  "csstype": "^3.0.10",
47
47
  "react": "^18.2.0",
@@ -145,7 +145,7 @@ let hasSetupBaseViews = false
145
145
  export function createComponent<
146
146
  ComponentPropTypes extends StackProps | TextProps = {},
147
147
  Ref = TamaguiElement,
148
- BaseProps = never
148
+ BaseProps = never,
149
149
  >(staticConfig: StaticConfig) {
150
150
  let config: TamaguiInternalConfig | null = null
151
151
  let defaultProps = staticConfig.defaultProps
@@ -361,6 +361,7 @@ export function createComponent<
361
361
 
362
362
  if (process.env.NODE_ENV === 'development' && time) time`stateref`
363
363
 
364
+ // TODO can remove and fold into stateRef
364
365
  const hostRef = useRef<TamaguiElement>(null)
365
366
 
366
367
  /**
@@ -371,7 +372,7 @@ export function createComponent<
371
372
 
372
373
  // after we get states mount we need to turn off isAnimated for server side
373
374
  const hasAnimationProp = Boolean(
374
- props.animation || (props.style && hasAnimatedStyleValue(props.style))
375
+ 'animation' in props || (props.style && hasAnimatedStyleValue(props.style))
375
376
  )
376
377
 
377
378
  // disable for now still ssr issues
@@ -464,8 +465,8 @@ export function createComponent<
464
465
  const componentClassName = props.asChild
465
466
  ? ''
466
467
  : props.componentName
467
- ? `is_${props.componentName}`
468
- : defaultComponentClassName
468
+ ? `is_${props.componentName}`
469
+ : defaultComponentClassName
469
470
 
470
471
  const hasTextAncestor = !!(isWeb && isText ? componentContext.inText : false)
471
472
  const isDisabled = props.disabled ?? props.accessibilityState?.disabled
@@ -554,8 +555,11 @@ export function createComponent<
554
555
  if (debugProp && debugProp !== 'profile') {
555
556
  // prettier-ignore
556
557
  const name = `${
557
- componentName || Component?.displayName || Component?.name || "[Unnamed Component]"
558
- }`;
558
+ componentName ||
559
+ Component?.displayName ||
560
+ Component?.name ||
561
+ '[Unnamed Component]'
562
+ }`
559
563
  const type = isAnimatedReactNative ? '(animated)' : isReactNative ? '(rnw)' : ''
560
564
  const dataIs = propsIn['data-is'] || ''
561
565
  const banner = `${name}${dataIs ? ` ${dataIs}` : ''} ${type} id ${internalID}`
@@ -322,14 +322,16 @@ function getThemesDeduped(themes: ThemesLikeObject): DedupedThemes {
322
322
  const darkOrLightSpecificPrefix = themeName.startsWith('dark')
323
323
  ? 'dark'
324
324
  : themeName.startsWith('light')
325
- ? 'light'
326
- : ''
325
+ ? 'light'
326
+ : ''
327
327
 
328
328
  const rawTheme = themes[themeName]
329
329
 
330
330
  // dont force referential equality but may need something more consistent than JSON.stringify
331
331
  // separate between dark/light
332
- const key = darkOrLightSpecificPrefix + JSON.stringify(rawTheme)
332
+ const key =
333
+ darkOrLightSpecificPrefix +
334
+ JSON.stringify(Object.entries(rawTheme).sort((a, b) => (a[0] > b[0] ? -1 : 1)))
333
335
 
334
336
  // if existing, avoid
335
337
  if (existing.has(key)) {
@@ -10,8 +10,8 @@ export type DeepVariableObject<A extends DeepTokenObject> = {
10
10
  [Key in keyof A]: A[Key] extends string | number
11
11
  ? Variable<A[Key]>
12
12
  : A[Key] extends DeepTokenObject
13
- ? DeepVariableObject<A[Key]>
14
- : never
13
+ ? DeepVariableObject<A[Key]>
14
+ : never
15
15
  }
16
16
 
17
17
  const cache = new WeakMap()
@@ -308,8 +308,9 @@ function getState(
308
308
  const pre = THEME_CLASSNAME_PREFIX
309
309
  const className = !isWeb
310
310
  ? ''
311
- : `${pre}sub_theme ${pre}${!scheme || !restNames.length ? firstName : restNames.join('_')
312
- }`
311
+ : `${pre}sub_theme ${pre}${
312
+ !scheme || !restNames.length ? firstName : restNames.join('_')
313
+ }`
313
314
 
314
315
  // because its a new theme the baseManager is now the parent
315
316
  const parentState = (baseManager || parentManager)?.state
@@ -1,4 +1,3 @@
1
1
  import { createContext } from 'react'
2
2
 
3
-
4
3
  export const ThemeManagerIDContext = createContext<number>(1)
@@ -98,10 +98,12 @@ export const createMediaStyle = (
98
98
  const precedenceImportancePrefix = groupMediaKey
99
99
  ? ''
100
100
  : enableMediaPropOrder
101
- ? // this new array should be cached
102
- new Array(priority).fill(':root').join('')
103
- : // @ts-ignore
104
- prefixes[mediaKey]
101
+ ? // this new array should be cached
102
+ new Array(priority)
103
+ .fill(':root')
104
+ .join('')
105
+ : // @ts-ignore
106
+ prefixes[mediaKey]
105
107
  const prefix = groupMediaKey ? `@container ${containerName}` : '@media'
106
108
 
107
109
  if (groupMediaKey) {
@@ -352,7 +352,8 @@ export const getSplitStyles: StyleSplitter = (
352
352
  }
353
353
  viewProps[nativeA11yProp] = valInit
354
354
  continue
355
- } else if (nativeAccessibilityValue[keyInit]) {
355
+ }
356
+ if (nativeAccessibilityValue[keyInit]) {
356
357
  let field = nativeAccessibilityValue[keyInit]
357
358
  if (viewProps['accessibilityValue']) {
358
359
  viewProps['accessibilityValue'][field] = valInit
@@ -441,61 +442,60 @@ export const getSplitStyles: StyleSplitter = (
441
442
  if (keyInit in accessibilityDirectMap) {
442
443
  viewProps[accessibilityDirectMap[keyInit]] = valInit
443
444
  continue
444
- } else {
445
- switch (keyInit) {
446
- case 'accessibilityRole': {
447
- if (valInit === 'none') {
448
- viewProps.role = 'presentation'
449
- } else {
450
- viewProps.role = accessibilityRoleToWebRole[valInit] || valInit
451
- }
452
- continue
453
- }
454
- case 'accessibilityLabelledBy':
455
- case 'accessibilityFlowTo':
456
- case 'accessibilityControls':
457
- case 'accessibilityDescribedBy': {
458
- viewProps[`aria-${keyInit.replace('accessibility', '').toLowerCase()}`] =
459
- processIDRefList(valInit)
460
- continue
461
- }
462
- case 'accessibilityKeyShortcuts': {
463
- if (Array.isArray(valInit)) {
464
- viewProps['aria-keyshortcuts'] = valInit.join(' ')
465
- }
466
- continue
467
- }
468
- case 'accessibilityLiveRegion': {
469
- viewProps['aria-live'] = valInit === 'none' ? 'off' : valInit
470
- continue
445
+ }
446
+ switch (keyInit) {
447
+ case 'accessibilityRole': {
448
+ if (valInit === 'none') {
449
+ viewProps.role = 'presentation'
450
+ } else {
451
+ viewProps.role = accessibilityRoleToWebRole[valInit] || valInit
471
452
  }
472
- case 'accessibilityReadOnly': {
473
- viewProps['aria-readonly'] = valInit
474
- // Enhance with native semantics
475
- if (
476
- elementType === 'input' ||
477
- elementType === 'select' ||
478
- elementType === 'textarea'
479
- ) {
480
- viewProps.readOnly = true
481
- }
482
- continue
453
+ continue
454
+ }
455
+ case 'accessibilityLabelledBy':
456
+ case 'accessibilityFlowTo':
457
+ case 'accessibilityControls':
458
+ case 'accessibilityDescribedBy': {
459
+ viewProps[`aria-${keyInit.replace('accessibility', '').toLowerCase()}`] =
460
+ processIDRefList(valInit)
461
+ continue
462
+ }
463
+ case 'accessibilityKeyShortcuts': {
464
+ if (Array.isArray(valInit)) {
465
+ viewProps['aria-keyshortcuts'] = valInit.join(' ')
483
466
  }
484
- case 'accessibilityRequired': {
485
- viewProps['aria-required'] = valInit
486
- // Enhance with native semantics
487
- if (
488
- elementType === 'input' ||
489
- elementType === 'select' ||
490
- elementType === 'textarea'
491
- ) {
492
- viewProps.required = valInit
493
- }
494
- continue
467
+ continue
468
+ }
469
+ case 'accessibilityLiveRegion': {
470
+ viewProps['aria-live'] = valInit === 'none' ? 'off' : valInit
471
+ continue
472
+ }
473
+ case 'accessibilityReadOnly': {
474
+ viewProps['aria-readonly'] = valInit
475
+ // Enhance with native semantics
476
+ if (
477
+ elementType === 'input' ||
478
+ elementType === 'select' ||
479
+ elementType === 'textarea'
480
+ ) {
481
+ viewProps.readOnly = true
495
482
  }
496
- default: {
497
- didUseKeyInit = false
483
+ continue
484
+ }
485
+ case 'accessibilityRequired': {
486
+ viewProps['aria-required'] = valInit
487
+ // Enhance with native semantics
488
+ if (
489
+ elementType === 'input' ||
490
+ elementType === 'select' ||
491
+ elementType === 'textarea'
492
+ ) {
493
+ viewProps.required = valInit
498
494
  }
495
+ continue
496
+ }
497
+ default: {
498
+ didUseKeyInit = false
499
499
  }
500
500
  }
501
501
  }
@@ -741,21 +741,6 @@ export const getSplitStyles: StyleSplitter = (
741
741
  const isEnter = key === 'enterStyle'
742
742
  const isExit = key === 'exitStyle'
743
743
 
744
- // dev-time warning that helps clear confusion around need for animation when using enter/exit style
745
- if (
746
- process.env.NODE_ENV === 'development' &&
747
- !styleProps.isAnimated &&
748
- !componentState.unmounted &&
749
- (isEnter || isExit)
750
- ) {
751
- console.warn(
752
- `No animation prop given to component ${staticConfig.componentName || ''} ${
753
- props['data-at'] || ''
754
- } with enterStyle / exitStyle, these styles will be ignored`,
755
- { props }
756
- )
757
- }
758
-
759
744
  // don't continue here on isEnter && !state.unmounted because we need to merge defaults
760
745
  if (!descriptor || (isExit && !styleProps.isExiting)) {
761
746
  continue
@@ -776,7 +761,7 @@ export const getSplitStyles: StyleSplitter = (
776
761
 
777
762
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
778
763
  // prettier-ignore
779
- console.groupCollapsed("pseudo (classes)", key);
764
+ console.groupCollapsed('pseudo (classes)', key)
780
765
 
781
766
  log({ pseudoStyleObject, pseudoStyles })
782
767
  console.groupEnd()
@@ -815,7 +800,7 @@ export const getSplitStyles: StyleSplitter = (
815
800
 
816
801
  if (process.env.NODE_ENV === 'development' && debug === 'verbose') {
817
802
  // prettier-ignore
818
- console.groupCollapsed("pseudo", key, { isDisabled });
803
+ console.groupCollapsed('pseudo', key, { isDisabled })
819
804
 
820
805
  log(pseudoStyleObject, {
821
806
  isDisabled,
@@ -874,7 +859,7 @@ export const getSplitStyles: StyleSplitter = (
874
859
  continue
875
860
  }
876
861
  // media
877
- else if (isMedia) {
862
+ if (isMedia) {
878
863
  if (!val) continue
879
864
 
880
865
  if (isMedia === 'platform') {
@@ -1338,7 +1323,7 @@ export const getSplitStyles: StyleSplitter = (
1338
1323
  viewPropsOrder: Object.keys(viewProps),
1339
1324
  rulesToInsert,
1340
1325
  parentSplitStyles,
1341
- };
1326
+ }
1342
1327
  for (const key in logs) {
1343
1328
  log(key, logs[key])
1344
1329
  }
@@ -15,7 +15,8 @@ export function getThemeCSSRules(props: {
15
15
 
16
16
  if (process.env.TAMAGUI_TARGET === 'native') {
17
17
  return cssRuleSets
18
- } else if (
18
+ }
19
+ if (
19
20
  !process.env.TAMAGUI_DOES_SSR_CSS ||
20
21
  process.env.TAMAGUI_DOES_SSR_CSS === 'mutates-themes' ||
21
22
  process.env.TAMAGUI_DOES_SSR_CSS === 'false'
@@ -46,7 +47,7 @@ export function getThemeCSSRules(props: {
46
47
  const isDarkBase = themeName === 'dark'
47
48
  const isLightBase = themeName === 'light'
48
49
  const baseSelectors = names.map((name) => `${CNP}${name}`)
49
- const selectorsSet = new Set(baseSelectors)
50
+ const selectorsSet = new Set(isDarkBase || isLightBase ? baseSelectors : [])
50
51
 
51
52
  // since we dont specify dark/light in classnames we have to do an awkward specificity war
52
53
  // use config.maxDarkLightNesting to determine how deep you can nest until it breaks
@@ -94,9 +95,9 @@ export function getThemeCSSRules(props: {
94
95
 
95
96
  // for light/dark/light:
96
97
  selectorsSet.add(`${parentSelectors.join(' ')} ${nextChildSelector}`.trim())
97
- selectorsSet.add(
98
- `${parentSelectors.join(' ')} ${nextChildSelector}.is_inversed`.trim()
99
- )
98
+ // selectorsSet.add(
99
+ // `${parentSelectors.join(' ')} ${nextChildSelector}.is_inversed`.trim()
100
+ // )
100
101
  }
101
102
  }
102
103
  }
@@ -265,8 +265,8 @@ function addThemesFromCSS(cssStyleRule: CSSStyleRule, tokens?: TokensParsed) {
265
265
  let scheme = selector.includes('t_dark')
266
266
  ? 'dark'
267
267
  : selector.includes('t_light')
268
- ? 'light'
269
- : ''
268
+ ? 'light'
269
+ : ''
270
270
  let name = selector.slice(selector.lastIndexOf('.t_') + 3)
271
271
 
272
272
  if (name.startsWith(scheme)) {
@@ -68,7 +68,7 @@ export function reverseMapClassNameToValue(key: string, className: string) {
68
68
  rcache[cssRule] = res
69
69
  if (process.env.NODE_ENV === 'development') {
70
70
  // ensure we are parsing properly
71
- if (typeof res === 'number' && isNaN(res)) {
71
+ if (typeof res === 'number' && Number.isNaN(res)) {
72
72
  console.info('Tamagui invalid parsed value, NaN:', {
73
73
  res,
74
74
  cssVal,
@@ -54,17 +54,17 @@ export const propMapper: PropMapper = (key, value, styleStateIn, subPropsIn) =>
54
54
 
55
55
  // prettier-ignore
56
56
  if (
57
- process.env.NODE_ENV === "development" &&
57
+ process.env.NODE_ENV === 'development' &&
58
58
  fontFamily &&
59
- fontFamily[0] === "$" &&
59
+ fontFamily[0] === '$' &&
60
60
  !(fontFamily in conf.fontsParsed)
61
61
  ) {
62
62
  // prettier-ignore
63
63
  console.warn(
64
- `Warning: no fontFamily "${fontFamily}" found in config: ${Object.keys(conf.fontsParsed).join(
65
- ", ",
66
- )}`,
67
- );
64
+ `Warning: no fontFamily "${fontFamily}" found in config: ${Object.keys(
65
+ conf.fontsParsed
66
+ ).join(', ')}`
67
+ )
68
68
  }
69
69
 
70
70
  if (!styleProps.noExpand) {
@@ -57,12 +57,12 @@ export type ThemeGettable<Val> = Val & {
57
57
  ) =>
58
58
  | string
59
59
  | (Val extends Variable<infer X>
60
- ? X extends VariableValGeneric
61
- ? any
62
- : Exclude<X, Variable>
63
- : Val extends VariableVal
64
- ? string | number
65
- : unknown)
60
+ ? X extends VariableValGeneric
61
+ ? any
62
+ : Exclude<X, Variable>
63
+ : Val extends VariableVal
64
+ ? string | number
65
+ : unknown)
66
66
  }
67
67
 
68
68
  export type UseThemeResult = {
@@ -86,21 +86,21 @@ export const useThemeWithState = (
86
86
  keys.current,
87
87
  !isServer
88
88
  ? () => {
89
- const next =
90
- props.shouldUpdate?.() ?? (keys.current.length > 0 ? true : undefined)
91
-
92
- if (
93
- process.env.NODE_ENV === 'development' &&
94
- props.debug &&
95
- props.debug !== 'profile'
96
- ) {
97
- console.info(` 🎨 useTheme() shouldUpdate?`, next, {
98
- shouldUpdateProp: props.shouldUpdate?.(),
99
- keys: [...keys.current],
100
- })
89
+ const next =
90
+ props.shouldUpdate?.() ?? (keys.current.length > 0 ? true : undefined)
91
+
92
+ if (
93
+ process.env.NODE_ENV === 'development' &&
94
+ props.debug &&
95
+ props.debug !== 'profile'
96
+ ) {
97
+ console.info(` 🎨 useTheme() shouldUpdate?`, next, {
98
+ shouldUpdateProp: props.shouldUpdate?.(),
99
+ keys: [...keys.current],
100
+ })
101
+ }
102
+ return next
101
103
  }
102
- return next
103
- }
104
104
  : undefined
105
105
  )
106
106
 
@@ -273,7 +273,7 @@ export const getThemeManager = (id: number) => {
273
273
 
274
274
  const registerThemeManager = (t: ThemeManager) => {
275
275
  if (!_idToUID[t.id]) {
276
- const id = _idToUID[t.id] = {}
276
+ const id = (_idToUID[t.id] = {})
277
277
  _uidToManager.set(id, t)
278
278
  }
279
279
  }
@@ -377,7 +377,14 @@ export const useChangeThemeEffect = (
377
377
 
378
378
  if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') {
379
379
  // prettier-ignore
380
- console.info(` 🔸 onChange`, themeManager.id, { force, shouldTryUpdate, props, name, manager, keys, })
380
+ console.info(` 🔸 onChange`, themeManager.id, {
381
+ force,
382
+ shouldTryUpdate,
383
+ props,
384
+ name,
385
+ manager,
386
+ keys,
387
+ })
381
388
  }
382
389
 
383
390
  if (shouldTryUpdate) {
@@ -6,18 +6,22 @@ import { TamaguiComponent } from '../types'
6
6
 
7
7
  export type GetRef<C> = C extends TamaguiComponent<any, infer Ref>
8
8
  ? Ref
9
- : C extends new (props: any) => Component
10
- ? InstanceType<C>
11
- : C extends abstract new (...args: any) => any
12
- ? InstanceType<C>
13
- : C extends Component
14
- ? C
15
- : (
16
- C extends JSXElementConstructor<{ ref?: infer R }>
17
- ? R
18
- : C extends keyof JSX.IntrinsicElements
19
- ? JSX.IntrinsicElements[C]['ref']
20
- : unknown
21
- ) extends Ref<infer T> | string | undefined
22
- ? T
23
- : unknown
9
+ : C extends new (
10
+ props: any
11
+ ) => Component
12
+ ? InstanceType<C>
13
+ : C extends abstract new (
14
+ ...args: any
15
+ ) => any
16
+ ? InstanceType<C>
17
+ : C extends Component
18
+ ? C
19
+ : (
20
+ C extends JSXElementConstructor<{ ref?: infer R }>
21
+ ? R
22
+ : C extends keyof JSX.IntrinsicElements
23
+ ? JSX.IntrinsicElements[C]['ref']
24
+ : unknown
25
+ ) extends Ref<infer T> | string | undefined
26
+ ? T
27
+ : unknown
@@ -20,22 +20,21 @@ export function getReactNativeConfig(Component: any) {
20
20
 
21
21
  // can assume everything else is react native on native
22
22
  return RNConfigs.default
23
- } else {
24
- if (Component.getSize && Component.prefetch) {
25
- return RNConfigs.Image
26
- }
27
- if (Component.displayName === 'Text' && Component.render) {
28
- return RNConfigs.Text
29
- }
30
- if (
31
- Component.render &&
32
- (Component.displayName === 'ScrollView' || Component.displayName === 'View')
33
- ) {
34
- return RNConfigs.default
35
- }
36
- if (Component.State?.blurTextInput) {
37
- return RNConfigs.TextInput
38
- }
23
+ }
24
+ if (Component.getSize && Component.prefetch) {
25
+ return RNConfigs.Image
26
+ }
27
+ if (Component.displayName === 'Text' && Component.render) {
28
+ return RNConfigs.Text
29
+ }
30
+ if (
31
+ Component.render &&
32
+ (Component.displayName === 'ScrollView' || Component.displayName === 'View')
33
+ ) {
34
+ return RNConfigs.default
35
+ }
36
+ if (Component.State?.blurTextInput) {
37
+ return RNConfigs.TextInput
39
38
  }
40
39
 
41
40
  return ReactNativeStaticConfigs.get(Component)
package/src/styled.tsx CHANGED
@@ -48,13 +48,13 @@ type ValueOf<T> = T[keyof T]
48
48
  type AreVariantsUndefined<V> = V extends undefined
49
49
  ? true
50
50
  : ValueOf<V> extends undefined
51
- ? true
52
- : false
51
+ ? true
52
+ : false
53
53
 
54
54
  export function styled<
55
55
  ParentComponent extends StylableComponent,
56
56
  Variants extends VariantDefinitions<ParentComponent> | void,
57
- StyledStaticConfig extends Partial<StaticConfig>
57
+ StyledStaticConfig extends Partial<StaticConfig>,
58
58
  >(
59
59
  ComponentIn: ParentComponent,
60
60
  // this should be Partial<GetProps<ParentComponent>> but causes excessively deep type issues
@@ -81,12 +81,12 @@ export function styled<
81
81
  type MergedVariants = AreVariantsUndefined<OurVariantProps> extends true
82
82
  ? ParentVariants
83
83
  : AreVariantsUndefined<ParentVariants> extends true
84
- ? OurVariantProps
85
- : {
86
- [Key in keyof ParentVariants | keyof OurVariantProps]?:
87
- | (Key extends keyof ParentVariants ? ParentVariants[Key] : undefined)
88
- | (Key extends keyof OurVariantProps ? OurVariantProps[Key] : undefined)
89
- }
84
+ ? OurVariantProps
85
+ : {
86
+ [Key in keyof ParentVariants | keyof OurVariantProps]?:
87
+ | (Key extends keyof ParentVariants ? ParentVariants[Key] : undefined)
88
+ | (Key extends keyof OurVariantProps ? OurVariantProps[Key] : undefined)
89
+ }
90
90
 
91
91
  type AcceptedTokens = StyledStaticConfig['acceptTokens']
92
92
  type CustomTokenProps = AcceptedTokens extends Object