@tamagui/web 1.102.3 → 1.103.1

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 (61) hide show
  1. package/dist/cjs/createComponent.js +4 -4
  2. package/dist/cjs/createComponent.js.map +1 -1
  3. package/dist/cjs/createComponent.native.js +6 -5
  4. package/dist/cjs/createComponent.native.js.map +2 -2
  5. package/dist/cjs/helpers/getSplitStyles.js +1 -0
  6. package/dist/cjs/helpers/getSplitStyles.js.map +1 -1
  7. package/dist/cjs/helpers/getSplitStyles.native.js +1 -0
  8. package/dist/cjs/helpers/getSplitStyles.native.js.map +1 -1
  9. package/dist/cjs/helpers/getStylesAtomic.js +4 -1
  10. package/dist/cjs/helpers/getStylesAtomic.js.map +1 -1
  11. package/dist/cjs/styled.js +15 -8
  12. package/dist/cjs/styled.js.map +1 -1
  13. package/dist/cjs/styled.native.js +11 -4
  14. package/dist/cjs/styled.native.js.map +2 -2
  15. package/dist/cjs/views/TamaguiProvider.js +25 -20
  16. package/dist/cjs/views/TamaguiProvider.js.map +1 -1
  17. package/dist/cjs/views/TamaguiProvider.native.js +65 -73
  18. package/dist/cjs/views/TamaguiProvider.native.js.map +2 -2
  19. package/dist/cjs/views/Text.js +2 -1
  20. package/dist/cjs/views/Text.js.map +1 -1
  21. package/dist/esm/createComponent.js +5 -5
  22. package/dist/esm/createComponent.js.map +1 -1
  23. package/dist/esm/createComponent.mjs +5 -5
  24. package/dist/esm/createComponent.native.js +7 -6
  25. package/dist/esm/createComponent.native.js.map +2 -2
  26. package/dist/esm/helpers/getSplitStyles.js +1 -0
  27. package/dist/esm/helpers/getSplitStyles.js.map +1 -1
  28. package/dist/esm/helpers/getSplitStyles.mjs +1 -0
  29. package/dist/esm/helpers/getSplitStyles.native.js +1 -0
  30. package/dist/esm/helpers/getSplitStyles.native.js.map +1 -1
  31. package/dist/esm/helpers/getStylesAtomic.js +4 -1
  32. package/dist/esm/helpers/getStylesAtomic.js.map +1 -1
  33. package/dist/esm/helpers/getStylesAtomic.mjs +5 -3
  34. package/dist/esm/styled.js +15 -8
  35. package/dist/esm/styled.js.map +1 -1
  36. package/dist/esm/styled.mjs +23 -14
  37. package/dist/esm/styled.native.js +11 -4
  38. package/dist/esm/styled.native.js.map +2 -2
  39. package/dist/esm/views/TamaguiProvider.js +25 -12
  40. package/dist/esm/views/TamaguiProvider.js.map +1 -1
  41. package/dist/esm/views/TamaguiProvider.mjs +29 -11
  42. package/dist/esm/views/TamaguiProvider.native.js +65 -65
  43. package/dist/esm/views/TamaguiProvider.native.js.map +2 -2
  44. package/dist/esm/views/Text.js +2 -1
  45. package/dist/esm/views/Text.js.map +1 -1
  46. package/dist/esm/views/Text.mjs +2 -1
  47. package/package.json +11 -11
  48. package/src/createComponent.tsx +14 -4
  49. package/src/helpers/getSplitStyles.tsx +1 -0
  50. package/src/helpers/getStylesAtomic.ts +15 -5
  51. package/src/styled.tsx +30 -9
  52. package/src/types.tsx +1 -0
  53. package/src/views/TamaguiProvider.tsx +41 -28
  54. package/src/views/Text.tsx +1 -1
  55. package/types/createComponent.d.ts.map +1 -1
  56. package/types/helpers/getSplitStyles.d.ts.map +1 -1
  57. package/types/styled.d.ts.map +1 -1
  58. package/types/types.d.ts +1 -0
  59. package/types/types.d.ts.map +1 -1
  60. package/types/views/TamaguiProvider.d.ts +1 -1
  61. package/types/views/TamaguiProvider.d.ts.map +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/Users/n8/tamagui/code/core/web/src/views/TamaguiProvider.tsx"],
4
- "mappings": ";AAAA,SAASA,gBAAgB;AACzB,YAAYC,WAAW;AAEvB,SAASC,wBAAwB;AACjC,SAASC,2BAA2B;AAEpC,SAASC,qBAAqB;AAC9B,SAASC,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/B,SAASC,gBAAgB,QAAA;MAC9BC,WAD8B,OAC9BA,UACAC,mBAF8B,OAE9BA,kBACAC,SAH8B,OAG9BA,QACGC,qBAAAA,2BAJ2B,QAAA;IAC9BH;IACAC;IACAC;;AAGAN,sBAAAA,GAEIH,aAEFK,sBAAAA,GAEAJ,MAAMU,mBAAmB,WAAA;AACvB,QAAKF,WACAA,OAAOG,cAGNC,SAASC,gBAAgBC,UAAUC,SAAS,aAAA,KAC9CH,SAASC,gBAAgBC,UAAUE,OAAO,aAAA,GAI1C,CAACT,mBAAkB;AACrB,UAAMU,QAAQL,SAASM,cAAc,OAAA;AACrCD,mBAAME,YAAYP,SAASQ,eAAeZ,OAAOa,OAAM,CAAA,CAAA,GACvDT,SAASU,KAAKH,YAAYF,KAAAA,GACnB,WAAA;AACLL,iBAASU,KAAKC,YAAYN,KAAAA;MAC5B;IACF;EACF,GAAG;IAACT;IAAQD;GAAiB;MAUvBE;AAPR,SACE,qBAACR,iBAAiBuB,UAAQ;IAACC,iBAAiBjB,UAAAA,OAAAA,SAAAA,OAAQkB;cAClD,qBAACvB,eAAAA,qBAAAA,eAAAA;MACCwB,sBAAsBnB,UAAAA,OAAAA,SAAAA,OAAQmB;MAC9BC,uBAAuBpB,UAAAA,OAAAA,SAAAA,OAAQoB;OAC3BnB,kBAAAA,GAAAA;MACJoB,eACEpB,mCAAAA,mBAAmBoB,kBAAY,QAA/BpB,qCAAAA,SAAAA,mCAAoCD,SAASsB,OAAOC,KAAKvB,OAAOwB,MAAM,EAAE,CAAA,IAAK;;;;AAOvF;AAEA3B,gBAAgB,cAAiB;",
5
- "names": ["isClient", "React", "ComponentContext", "setupMediaListeners", "ThemeProvider", "useDidHydrateOnceRoot", "TamaguiProvider", "children", "disableInjectCSS", "config", "themePropsProvider", "useInsertionEffect", "disableSSR", "document", "documentElement", "classList", "contains", "remove", "style", "createElement", "appendChild", "createTextNode", "getCSS", "head", "removeChild", "Provider", "animationDriver", "animations", "themeClassNameOnRoot", "disableRootThemeClass", "defaultTheme", "Object", "keys", "themes"]
4
+ "mappings": ";AAAA,SAASA,UAAUC,OAAOC,iCAAiC;AAC3D,SAASC,UAAUC,SAASC,iBAAiB;AAC7C,SAASC,wBAAwB;AACjC,SAASC,6BAA6B;AACtC,SAASC,2BAA2B;AAEpC,SAASC,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvB,SAASC,gBAAgB,OAST;MARrBC,WAD8B,MAC9BA,UACAC,mBAF8B,MAE9BA,kBACAC,SAH8B,MAG9BA,QACAC,YAJ8B,MAI9BA,WACAC,eAL8B,MAK9BA,cACAC,wBAN8B,MAM9BA,uBACAC,QAP8B,MAO9BA,OACAC,uBAR8B,MAQ9BA;AAEAV,sBAAAA,GAEIR,aAEFO,sBAAAA,GAEAL,0BAA0B,WAAA;AACxB,QAAKW,UACD,CAACD,kBAAkB;AACrB,UAAMO,QAAQC,SAASC,cAAc,OAAA;AACrCF,mBAAMG,YAAYF,SAASG,eAAeV,OAAOW,OAAM,CAAA,CAAA,GACvDJ,SAASK,KAAKH,YAAYH,KAAAA,GACnB,WAAA;AACLC,iBAASK,KAAKC,YAAYP,KAAAA;MAC5B;IACF;EACF,GAAG;IAACN;IAAQD;GAAiB;AAG/B,MAAMe,WAAWvB,QAAQ,WAAA;AACvB,WACE,qBAACE,iBAAiBsB,UAAQ;MAACC,iBAAiBhB,UAAAA,OAAAA,SAAAA,OAAQiB;gBAClD,qBAACrB,eAAAA;QACCS,sBAAsBA,yBAAwBL,UAAAA,OAAAA,SAAAA,OAAQK;QACtDF,uBAAuBA,0BAAyBH,UAAAA,OAAAA,SAAAA,OAAQG;QACxDD,cAAcA,iBAAiBF,SAASkB,OAAOC,KAAKnB,OAAOoB,MAAM,EAAE,CAAA,IAAK;QACxEhB;QACAH;;;;EAMR,GAAG,CAAA,CAAE;AAEL,SAAO,qBAACoB,oBAAAA;cAAoBP;;AAC9B;AAGA,SAASO,mBAAmBC,OAAoC;AAC9D,MAA8BhC,YAAAA,iBAAAA,SAAS,EAAA,GAAA,CAAA,GAAhCiC,UAAuBjC,UAAAA,CAAAA,GAAdkC,aAAclC,UAAAA,CAAAA;AAM9B,SAJAE,UAAU,WAAA;AACRgC,eAAW,EAAA;EACb,GAAG,CAAA,CAAE,GAEApC,QAIE,qBAACqC,QAAAA;IAAKxB,WAAWsB,UAAU,KAAK;cAAgBD,MAAMxB;OAHpDwB,MAAMxB;AAIjB;AAEAD,gBAAgB,cAAiB;",
5
+ "names": ["isClient", "isWeb", "useIsomorphicLayoutEffect", "useState", "useMemo", "useEffect", "ComponentContext", "useDidHydrateOnceRoot", "setupMediaListeners", "ThemeProvider", "TamaguiProvider", "children", "disableInjectCSS", "config", "className", "defaultTheme", "disableRootThemeClass", "reset", "themeClassNameOnRoot", "style", "document", "createElement", "appendChild", "createTextNode", "getCSS", "head", "removeChild", "contents", "Provider", "animationDriver", "animations", "Object", "keys", "themes", "UnmountedClassName", "props", "mounted", "setMounted", "span"]
6
6
  }
@@ -6,7 +6,8 @@ const ellipseStyle = {
6
6
  textOverflow: "ellipsis",
7
7
  whiteSpace: "nowrap"
8
8
  }, defaultWebStyle = {
9
- display: "inline",
9
+ display: "inline-block",
10
+ // display: inline breaks css transform styles
10
11
  boxSizing: "border-box",
11
12
  wordWrap: "break-word",
12
13
  whiteSpace: "pre-wrap",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/views/Text.tsx"],
4
- "mappings": "AAAA,SAAS,oBAAoB,mBAAmB;AAEhD,SAAS,uBAAuB;AAQhC,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd,GAIM,kBAAkB;AAAA,EACtB,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AACV,GAEM,gBAEA,cAMO,OAAO,gBAKlB;AAAA,EACA,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EAER,cAAc;AAAA,IACZ,YAAY;AAAA,IACZ,GACI;AAAA,EAIN;AAAA,EAEA,uBAAuB,oBAAI,IAAI,CAAC,YAAY,CAAC;AAAA,EAE7C,UAAU;AAAA,IAEN,eAAe;AAAA,MACb,GAAG;AAAA,MAEH,WAAW,CAAC,kBACV,iBAAiB,IACb;AAAA,QACE,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,IACA;AAAA,IACR;AAAA,IAIA,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAMF,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IAEA,UAAU;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF,CAAC;AAED,KAAK,cAAiB;",
4
+ "mappings": "AAAA,SAAS,oBAAoB,mBAAmB;AAEhD,SAAS,uBAAuB;AAQhC,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd,GAIM,kBAAkB;AAAA,EACtB,SAAS;AAAA;AAAA,EACT,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AACV,GAEM,gBAEA,cAMO,OAAO,gBAKlB;AAAA,EACA,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EAER,cAAc;AAAA,IACZ,YAAY;AAAA,IACZ,GACI;AAAA,EAIN;AAAA,EAEA,uBAAuB,oBAAI,IAAI,CAAC,YAAY,CAAC;AAAA,EAE7C,UAAU;AAAA,IAEN,eAAe;AAAA,MACb,GAAG;AAAA,MAEH,WAAW,CAAC,kBACV,iBAAiB,IACb;AAAA,QACE,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,IACA;AAAA,IACR;AAAA,IAIA,YAAY;AAAA,MACV,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAMF,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IAEA,UAAU;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,aAAa;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF,CAAC;AAED,KAAK,cAAiB;",
5
5
  "names": []
6
6
  }
@@ -7,7 +7,8 @@ const ellipseStyle = {
7
7
  whiteSpace: "nowrap"
8
8
  },
9
9
  defaultWebStyle = {
10
- display: "inline",
10
+ display: "inline-block",
11
+ // display: inline breaks css transform styles
11
12
  boxSizing: "border-box",
12
13
  wordWrap: "break-word",
13
14
  whiteSpace: "pre-wrap",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/web",
3
- "version": "1.102.3",
3
+ "version": "1.103.1",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -27,18 +27,18 @@
27
27
  "reset.css"
28
28
  ],
29
29
  "dependencies": {
30
- "@tamagui/compose-refs": "1.102.3",
31
- "@tamagui/constants": "1.102.3",
32
- "@tamagui/helpers": "1.102.3",
33
- "@tamagui/normalize-css-color": "1.102.3",
34
- "@tamagui/timer": "1.102.3",
35
- "@tamagui/types": "1.102.3",
36
- "@tamagui/use-did-finish-ssr": "1.102.3",
37
- "@tamagui/use-event": "1.102.3",
38
- "@tamagui/use-force-update": "1.102.3"
30
+ "@tamagui/compose-refs": "1.103.1",
31
+ "@tamagui/constants": "1.103.1",
32
+ "@tamagui/helpers": "1.103.1",
33
+ "@tamagui/normalize-css-color": "1.103.1",
34
+ "@tamagui/timer": "1.103.1",
35
+ "@tamagui/types": "1.103.1",
36
+ "@tamagui/use-did-finish-ssr": "1.103.1",
37
+ "@tamagui/use-event": "1.103.1",
38
+ "@tamagui/use-force-update": "1.103.1"
39
39
  },
40
40
  "devDependencies": {
41
- "@tamagui/build": "1.102.3",
41
+ "@tamagui/build": "1.103.1",
42
42
  "@testing-library/react": "^14.0.0",
43
43
  "csstype": "^3.0.10",
44
44
  "typescript": "^5.5.2",
@@ -1,5 +1,5 @@
1
1
  import { composeRefs } from '@tamagui/compose-refs'
2
- import { isClient, isServer, isWeb } from '@tamagui/constants'
2
+ import { isClient, isServer, isWeb, useIsomorphicLayoutEffect } from '@tamagui/constants'
3
3
  import {
4
4
  StyleObjectIdentifier,
5
5
  StyleObjectRules,
@@ -844,9 +844,6 @@ export function createComponent<
844
844
  // @ts-ignore for next/link compat etc
845
845
  onClick,
846
846
  theme: _themeProp,
847
- // @ts-ignore
848
- defaultVariants,
849
-
850
847
  ...nonTamaguiProps
851
848
  } = viewPropsIn
852
849
 
@@ -890,6 +887,9 @@ export function createComponent<
890
887
  if ((isAnimated || supportsCSSVars) && animations) {
891
888
  animationStyles = animations.style
892
889
  viewProps.style = animationStyles
890
+ if (animations.className) {
891
+ viewProps.className = `${viewProps.className || ''} ${animations.className}`
892
+ }
893
893
  }
894
894
 
895
895
  if (process.env.NODE_ENV === 'development' && time) time`animations`
@@ -964,6 +964,16 @@ export function createComponent<
964
964
 
965
965
  const unPress = () => setStateShallow({ press: false, pressIn: false })
966
966
 
967
+ if (process.env.NODE_ENV === 'development') {
968
+ useIsomorphicLayoutEffect(() => {
969
+ if (debugProp) {
970
+ console.groupCollapsed(`Rendered style >`)
971
+ console.warn(getComputedStyle(stateRef.current.host! as any))
972
+ console.groupEnd()
973
+ }
974
+ })
975
+ }
976
+
967
977
  useEffect(() => {
968
978
  if (disabled) {
969
979
  return
@@ -224,6 +224,7 @@ export const getSplitStyles: StyleSplitter = (
224
224
  staticConfig,
225
225
  shouldDoClasses,
226
226
  styleProps,
227
+ rulesToInsert,
227
228
  componentState,
228
229
  styleState,
229
230
  theme: { ...theme },
@@ -150,16 +150,26 @@ function createAtomicRules(
150
150
  value: any,
151
151
  pseudo?: PseudoDescriptor
152
152
  ): string[] {
153
- const pseudoSelector = pseudo
153
+ const pseudoIdPostfix = pseudo
154
154
  ? pseudo.name === 'disabled'
155
155
  ? `[aria-disabled]`
156
156
  : `:${pseudo.name}`
157
157
  : ''
158
- const selector = pseudo
159
- ? pseudo?.selector
160
- ? `${pseudo?.selector} .${identifier}`
161
- : `${selectorPriority[pseudo.name]} .${identifier}${pseudoSelector}`
158
+ const pseudoSelector = pseudo?.selector
159
+
160
+ let selector = pseudo
161
+ ? pseudoSelector
162
+ ? `${pseudoSelector} .${identifier}`
163
+ : `${selectorPriority[pseudo.name]} .${identifier}${pseudoIdPostfix}`
162
164
  : `:root .${identifier}`
165
+
166
+ // enter style on css driver needs both:
167
+ // .t_unmounted .selector
168
+ // .selector.t_unmounted
169
+ if (pseudoSelector === pseudoDescriptors.enterStyle.selector) {
170
+ selector = `${selector}, .${identifier}${pseudoSelector}`
171
+ }
172
+
163
173
  const important = !!pseudo
164
174
 
165
175
  let rules: string[] = []
package/src/styled.tsx CHANGED
@@ -146,19 +146,30 @@ export function styled<
146
146
  ...defaultProps
147
147
  } = options
148
148
 
149
- if (defaultVariants) {
150
- defaultProps = {
151
- ...defaultVariants,
152
- ...defaultProps,
153
- }
154
- }
149
+ let parentDefaultVariants
150
+ let parentDefaultProps
155
151
 
156
152
  if (parentStaticConfig) {
157
153
  const avoid = parentStaticConfig.isHOC && !parentStaticConfig.isStyledHOC
158
154
  if (!avoid) {
159
- defaultProps = {
160
- ...parentStaticConfig.defaultProps,
161
- ...defaultProps,
155
+ const pdp = parentStaticConfig.defaultProps
156
+
157
+ // apply parent props only if not already defined, they are lesser specificity
158
+ for (const key in pdp) {
159
+ const val = pdp[key]
160
+ if (parentStaticConfig.defaultVariants) {
161
+ if (key in parentStaticConfig.defaultVariants) {
162
+ // ensure we don't add it if its also in our default variants so we keep the order!
163
+ if (!defaultVariants || !(key in defaultVariants)) {
164
+ parentDefaultVariants ||= {}
165
+ parentDefaultVariants[key] = val
166
+ }
167
+ }
168
+ }
169
+ if (!(key in defaultProps)) {
170
+ parentDefaultProps ||= {}
171
+ parentDefaultProps[key] = pdp[key]
172
+ }
162
173
  }
163
174
  if (parentStaticConfig.variants) {
164
175
  // @ts-expect-error
@@ -167,6 +178,16 @@ export function styled<
167
178
  }
168
179
  }
169
180
 
181
+ // applies everything in the right order! order is important
182
+ if (parentDefaultProps || defaultVariants || parentDefaultVariants) {
183
+ defaultProps = {
184
+ ...parentDefaultProps,
185
+ ...parentDefaultVariants,
186
+ ...defaultProps,
187
+ ...defaultVariants,
188
+ }
189
+ }
190
+
170
191
  if (parentStaticConfig?.isHOC) {
171
192
  // if HOC we map name => componentName as we have a difference in how we name prop vs styled() there
172
193
  if (name) {
package/src/types.tsx CHANGED
@@ -2396,6 +2396,7 @@ export type UseAnimationHook = (props: {
2396
2396
  delay?: number
2397
2397
  }) => null | {
2398
2398
  style?: StackStyleBase | StackStyleBase[]
2399
+ className?: string
2399
2400
  }
2400
2401
 
2401
2402
  export type GestureReponderEvent = Exclude<
@@ -1,17 +1,20 @@
1
- import { isClient } from '@tamagui/constants'
2
- import * as React from 'react'
3
-
1
+ import { isClient, isWeb, useIsomorphicLayoutEffect } from '@tamagui/constants'
2
+ import { useState, useMemo, useEffect } from 'react'
4
3
  import { ComponentContext } from '../contexts/ComponentContext'
4
+ import { useDidHydrateOnceRoot } from '../hooks/useDidHydrateOnce'
5
5
  import { setupMediaListeners } from '../hooks/useMedia'
6
6
  import type { TamaguiProviderProps } from '../types'
7
7
  import { ThemeProvider } from './ThemeProvider'
8
- import { useDidHydrateOnceRoot } from '../hooks/useDidHydrateOnce'
9
8
 
10
9
  export function TamaguiProvider({
11
10
  children,
12
11
  disableInjectCSS,
13
12
  config,
14
- ...themePropsProvider
13
+ className,
14
+ defaultTheme,
15
+ disableRootThemeClass,
16
+ reset,
17
+ themeClassNameOnRoot,
15
18
  }: TamaguiProviderProps) {
16
19
  setupMediaListeners()
17
20
 
@@ -19,16 +22,8 @@ export function TamaguiProvider({
19
22
  // inject CSS if asked to (not SSR compliant)
20
23
  useDidHydrateOnceRoot()
21
24
 
22
- React.useInsertionEffect(() => {
25
+ useIsomorphicLayoutEffect(() => {
23
26
  if (!config) return
24
- if (!config.disableSSR) {
25
- // for easier support of hidden-until-js mount animations
26
- // user must set t_unmounted on documentElement from SSR
27
- if (document.documentElement.classList.contains('t_unmounted')) {
28
- document.documentElement.classList.remove('t_unmounted')
29
- }
30
- }
31
-
32
27
  if (!disableInjectCSS) {
33
28
  const style = document.createElement('style')
34
29
  style.appendChild(document.createTextNode(config.getCSS()))
@@ -40,20 +35,38 @@ export function TamaguiProvider({
40
35
  }, [config, disableInjectCSS])
41
36
  }
42
37
 
43
- return (
44
- <ComponentContext.Provider animationDriver={config?.animations}>
45
- <ThemeProvider
46
- themeClassNameOnRoot={config?.themeClassNameOnRoot}
47
- disableRootThemeClass={config?.disableRootThemeClass}
48
- {...themePropsProvider}
49
- defaultTheme={
50
- themePropsProvider.defaultTheme ?? (config ? Object.keys(config.themes)[0] : '')
51
- }
52
- >
53
- {children}
54
- </ThemeProvider>
55
- </ComponentContext.Provider>
56
- )
38
+ const contents = useMemo(() => {
39
+ return (
40
+ <ComponentContext.Provider animationDriver={config?.animations}>
41
+ <ThemeProvider
42
+ themeClassNameOnRoot={themeClassNameOnRoot ?? config?.themeClassNameOnRoot}
43
+ disableRootThemeClass={disableRootThemeClass ?? config?.disableRootThemeClass}
44
+ defaultTheme={defaultTheme ?? (config ? Object.keys(config.themes)[0] : '')}
45
+ reset={reset}
46
+ className={className}
47
+ >
48
+ {children}
49
+ </ThemeProvider>
50
+ </ComponentContext.Provider>
51
+ )
52
+ }, [])
53
+
54
+ return <UnmountedClassName>{contents}</UnmountedClassName>
55
+ }
56
+
57
+ // for CSS animations
58
+ function UnmountedClassName(props: { children: React.ReactNode }) {
59
+ const [mounted, setMounted] = useState(false)
60
+
61
+ useEffect(() => {
62
+ setMounted(true)
63
+ }, [])
64
+
65
+ if (!isWeb) {
66
+ return props.children
67
+ }
68
+
69
+ return <span className={mounted ? '' : 't_unmounted'}>{props.children}</span>
57
70
  }
58
71
 
59
72
  TamaguiProvider['displayName'] = 'TamaguiProvider'
@@ -18,7 +18,7 @@ const ellipseStyle = {
18
18
  export type Text = TamaguiTextElement
19
19
 
20
20
  const defaultWebStyle = {
21
- display: 'inline',
21
+ display: 'inline-block', // display: inline breaks css transform styles
22
22
  boxSizing: 'border-box',
23
23
  wordWrap: 'break-word',
24
24
  whiteSpace: 'pre-wrap',
@@ -1 +1 @@
1
- {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAYN,MAAM,OAAO,CAAA;AA0Bd,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAG/E,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EAKT,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,YAAY,EAEZ,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,SAAS,EAIV,MAAM,SAAS,CAAA;AAchB,KAAK,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAEpF,eAAO,MAAM,kBAAkB,wBAA+B,CAAA;AAkE9D,eAAO,MAAM,iBAAiB,UACrB,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,+BACtB,iBAAiB,gBAChC,YAAY,UAClB,qBAAqB;;;;;;;;;;;;;;;;;;;CA+N9B,CAAA;AAuBD,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EACnD,GAAG,SAAS,cAAc,GAAG,cAAc,EAC3C,SAAS,GAAG,KAAK,EACjB,UAAU,SAAS,MAAM,GAAG,KAAK,EACjC,YAAY,EAAE,YAAY,wEAskC3B;AAsBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,OAEjD;yBAFe,QAAQ;;;AAkBxB,eAAO,MAAM,MAAM,yFA0CjB,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,cAAc,GAAG,OAAO,CAAA;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBA+FxD;AAwDD,eAAO,MAAM,UAAU,UAAW,GAAG,QAQpC,CAAA;AAED,eAAO,MAAM,uBAAuB,uFAOjC;IACD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS,KAAK,IAAI,CAAA;IAC5E,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,KAAK,EAAE,qBAAqB,CAAA;CAC7B,4CAqCA,CAAA"}
1
+ {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAYN,MAAM,OAAO,CAAA;AA0Bd,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAG/E,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EAKT,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,YAAY,EAEZ,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,SAAS,EAIV,MAAM,SAAS,CAAA;AAchB,KAAK,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAEpF,eAAO,MAAM,kBAAkB,wBAA+B,CAAA;AAkE9D,eAAO,MAAM,iBAAiB,UACrB,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,+BACtB,iBAAiB,gBAChC,YAAY,UAClB,qBAAqB;;;;;;;;;;;;;;;;;;;CA+N9B,CAAA;AAuBD,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EACnD,GAAG,SAAS,cAAc,GAAG,cAAc,EAC3C,SAAS,GAAG,KAAK,EACjB,UAAU,SAAS,MAAM,GAAG,KAAK,EACjC,YAAY,EAAE,YAAY,wEAglC3B;AAsBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,OAEjD;yBAFe,QAAQ;;;AAkBxB,eAAO,MAAM,MAAM,yFA0CjB,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,cAAc,GAAG,OAAO,CAAA;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBA+FxD;AAwDD,eAAO,MAAM,UAAU,UAAW,GAAG,QAQpC,CAAA;AAED,eAAO,MAAM,uBAAuB,uFAOjC;IACD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS,KAAK,IAAI,CAAA;IAC5E,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,KAAK,EAAE,qBAAqB,CAAA;CAC7B,4CAqCA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSplitStyles.d.ts","sourceRoot":"","sources":["../../src/helpers/getSplitStyles.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAChF,OAAO,KAAK,EAEV,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,aAAa,EAOb,eAAe,EACf,YAAY,EAGZ,SAAS,EACT,WAAW,EAEZ,MAAM,UAAU,CAAA;AAsBjB,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAMhE,KAAK,aAAa,GAAG,CACnB,KAAK,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC7B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,qBAAqB,EACrC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,CAAC,EAAE,cAAc,GAAG,IAAI,EACzC,OAAO,CAAC,EAAE,iBAAiB,EAE3B,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,wBAAwB,CAAC,EAAE,OAAO,KAC/B,cAAc,CAAA;AAEnB,eAAO,MAAM,UAAU,MAAM,CAAA;AA8B7B,eAAO,MAAM,cAAc,EAAE,aA8uC5B,CAAA;AAgED,eAAO,MAAM,WAAW,eACV,aAAa,UACjB,MAAM,WACL,MAAM,wBACO,OAAO,KAC5B,SA2BF,CAAA;AAQD,eAAO,MAAM,cAAc,EAAE,aAa5B,CAAA"}
1
+ {"version":3,"file":"getSplitStyles.d.ts","sourceRoot":"","sources":["../../src/helpers/getSplitStyles.tsx"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAA;AAChF,OAAO,KAAK,EAEV,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,aAAa,EAOb,eAAe,EACf,YAAY,EAGZ,SAAS,EACT,WAAW,EAEZ,MAAM,UAAU,CAAA;AAsBjB,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAMhE,KAAK,aAAa,GAAG,CACnB,KAAK,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC7B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,qBAAqB,EACrC,UAAU,EAAE,eAAe,EAC3B,iBAAiB,CAAC,EAAE,cAAc,GAAG,IAAI,EACzC,OAAO,CAAC,EAAE,iBAAiB,EAE3B,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,wBAAwB,CAAC,EAAE,OAAO,KAC/B,cAAc,CAAA;AAEnB,eAAO,MAAM,UAAU,MAAM,CAAA;AA8B7B,eAAO,MAAM,cAAc,EAAE,aA+uC5B,CAAA;AAgED,eAAO,MAAM,WAAW,eACV,aAAa,UACjB,MAAM,WACL,MAAM,wBACO,OAAO,KAC5B,SA2BF,CAAA;AAQD,eAAO,MAAM,cAAc,EAAE,aAa5B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"styled.d.ts","sourceRoot":"","sources":["../src/styled.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAEhB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAGhB,KAAK,oBAAoB,CAAC,QAAQ,IAEhC,QAAQ,CAAC,QAAQ,CAAC,SAAS;IAAE,QAAQ,EAAE,CAAC,CAAA;CAAE,GAAG,IAAI,GAAG,KAAK,CAAA;AAE3D,KAAK,wBAAwB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C;KACG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GACnE,GAAG,GACH,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;CACnC,GACD,SAAS,CAAA;AAEb,wBAAgB,MAAM,CACpB,eAAe,SAAS,iBAAiB,EACzC,kBAAkB,SAAS,kBAAkB,EAC7C,QAAQ,SAAS,kBAAkB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EAExE,WAAW,EAAE,eAAe,EAE5B,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,GAAG;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC/B,eAAe,CAAC,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,EACD,uBAAuB,CAAC,EAAE,kBAAkB,2QA2BrC,GAAG,i3CAuJX"}
1
+ {"version":3,"file":"styled.d.ts","sourceRoot":"","sources":["../src/styled.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAEhB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAGhB,KAAK,oBAAoB,CAAC,QAAQ,IAEhC,QAAQ,CAAC,QAAQ,CAAC,SAAS;IAAE,QAAQ,EAAE,CAAC,CAAA;CAAE,GAAG,IAAI,GAAG,KAAK,CAAA;AAE3D,KAAK,wBAAwB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C;KACG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GACnE,GAAG,GACH,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;CACnC,GACD,SAAS,CAAA;AAEb,wBAAgB,MAAM,CACpB,eAAe,SAAS,iBAAiB,EACzC,kBAAkB,SAAS,kBAAkB,EAC7C,QAAQ,SAAS,kBAAkB,CAAC,eAAe,EAAE,kBAAkB,CAAC,EAExE,WAAW,EAAE,eAAe,EAE5B,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,GAAG;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC/B,eAAe,CAAC,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,EACD,uBAAuB,CAAC,EAAE,kBAAkB,2QA2BrC,GAAG,i3CA4KX"}
package/types/types.d.ts CHANGED
@@ -1436,6 +1436,7 @@ export type UseAnimationHook = (props: {
1436
1436
  delay?: number;
1437
1437
  }) => null | {
1438
1438
  style?: StackStyleBase | StackStyleBase[];
1439
+ className?: string;
1439
1440
  };
1440
1441
  export type GestureReponderEvent = Exclude<View['props']['onResponderMove'], void> extends (event: infer Event) => void ? Event : never;
1441
1442
  export type RulesToInsert = Record<string, StyleObject>;