@tamagui/web 1.2.8 → 1.2.10

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 (165) hide show
  1. package/dist/cjs/createComponent.js +6 -5
  2. package/dist/cjs/createComponent.js.map +2 -2
  3. package/dist/esm/Tamagui.mjs +41 -0
  4. package/dist/esm/Tamagui.mjs.map +7 -0
  5. package/dist/esm/addTheme.mjs +54 -0
  6. package/dist/esm/addTheme.mjs.map +7 -0
  7. package/dist/esm/config.mjs +84 -0
  8. package/dist/esm/config.mjs.map +7 -0
  9. package/dist/esm/constants/constants.mjs +22 -0
  10. package/dist/esm/constants/constants.mjs.map +7 -0
  11. package/dist/esm/constants/isDevTools.mjs +13 -0
  12. package/dist/esm/constants/isDevTools.mjs.map +7 -0
  13. package/dist/esm/contexts/ButtonNestingContext.mjs +6 -0
  14. package/dist/esm/contexts/ButtonNestingContext.mjs.map +7 -0
  15. package/dist/esm/contexts/FontLanguageContext.mjs +6 -0
  16. package/dist/esm/contexts/FontLanguageContext.mjs.map +7 -0
  17. package/dist/esm/contexts/TextAncestorContext.mjs +6 -0
  18. package/dist/esm/contexts/TextAncestorContext.mjs.map +7 -0
  19. package/dist/esm/createComponent.js +6 -5
  20. package/dist/esm/createComponent.js.map +2 -2
  21. package/dist/esm/createComponent.mjs +853 -0
  22. package/dist/esm/createComponent.mjs.map +7 -0
  23. package/dist/esm/createFont.mjs +45 -0
  24. package/dist/esm/createFont.mjs.map +7 -0
  25. package/dist/esm/createShorthands.mjs +7 -0
  26. package/dist/esm/createShorthands.mjs.map +7 -0
  27. package/dist/esm/createTamagui.mjs +190 -0
  28. package/dist/esm/createTamagui.mjs.map +7 -0
  29. package/dist/esm/createTheme.mjs +7 -0
  30. package/dist/esm/createTheme.mjs.map +7 -0
  31. package/dist/esm/createTokens.mjs +15 -0
  32. package/dist/esm/createTokens.mjs.map +7 -0
  33. package/dist/esm/createVariable.mjs +78 -0
  34. package/dist/esm/createVariable.mjs.map +7 -0
  35. package/dist/esm/createVariables.mjs +35 -0
  36. package/dist/esm/createVariables.mjs.map +7 -0
  37. package/dist/esm/helpers/RNComponents.mjs +16 -0
  38. package/dist/esm/helpers/RNComponents.mjs.map +7 -0
  39. package/dist/esm/helpers/ThemeManager.mjs +209 -0
  40. package/dist/esm/helpers/ThemeManager.mjs.map +7 -0
  41. package/dist/esm/helpers/ThemeManagerContext.mjs +6 -0
  42. package/dist/esm/helpers/ThemeManagerContext.mjs.map +7 -0
  43. package/dist/esm/helpers/createMediaStyle.mjs +42 -0
  44. package/dist/esm/helpers/createMediaStyle.mjs.map +7 -0
  45. package/dist/esm/helpers/createPropMapper.mjs +396 -0
  46. package/dist/esm/helpers/createPropMapper.mjs.map +7 -0
  47. package/dist/esm/helpers/createProxy.mjs +19 -0
  48. package/dist/esm/helpers/createProxy.mjs.map +7 -0
  49. package/dist/esm/helpers/expandStyle.mjs +71 -0
  50. package/dist/esm/helpers/expandStyle.mjs.map +7 -0
  51. package/dist/esm/helpers/expandStyles.mjs +90 -0
  52. package/dist/esm/helpers/expandStyles.mjs.map +7 -0
  53. package/dist/esm/helpers/extendStaticConfig.mjs +66 -0
  54. package/dist/esm/helpers/extendStaticConfig.mjs.map +7 -0
  55. package/dist/esm/helpers/getAnimationDriver.mjs +8 -0
  56. package/dist/esm/helpers/getAnimationDriver.mjs.map +7 -0
  57. package/dist/esm/helpers/getExpandedShorthands.mjs +16 -0
  58. package/dist/esm/helpers/getExpandedShorthands.mjs.map +7 -0
  59. package/dist/esm/helpers/getFontLanguage.mjs +5 -0
  60. package/dist/esm/helpers/getFontLanguage.mjs.map +7 -0
  61. package/dist/esm/helpers/getSplitStyles.mjs +849 -0
  62. package/dist/esm/helpers/getSplitStyles.mjs.map +7 -0
  63. package/dist/esm/helpers/getStylesAtomic.mjs +200 -0
  64. package/dist/esm/helpers/getStylesAtomic.mjs.map +7 -0
  65. package/dist/esm/helpers/getStylesAtomic.native.mjs +12 -0
  66. package/dist/esm/helpers/getStylesAtomic.native.mjs.map +7 -0
  67. package/dist/esm/helpers/getThemeCSSRules.mjs +86 -0
  68. package/dist/esm/helpers/getThemeCSSRules.mjs.map +7 -0
  69. package/dist/esm/helpers/getThemeCSSRules.native.mjs +7 -0
  70. package/dist/esm/helpers/getThemeCSSRules.native.mjs.map +7 -0
  71. package/dist/esm/helpers/getVariantExtras.mjs +67 -0
  72. package/dist/esm/helpers/getVariantExtras.mjs.map +7 -0
  73. package/dist/esm/helpers/insertStyleRule.mjs +186 -0
  74. package/dist/esm/helpers/insertStyleRule.mjs.map +7 -0
  75. package/dist/esm/helpers/isObj.mjs +5 -0
  76. package/dist/esm/helpers/isObj.mjs.map +7 -0
  77. package/dist/esm/helpers/isTamaguiComponent.mjs +8 -0
  78. package/dist/esm/helpers/isTamaguiComponent.mjs.map +7 -0
  79. package/dist/esm/helpers/isTamaguiElement.mjs +9 -0
  80. package/dist/esm/helpers/isTamaguiElement.mjs.map +7 -0
  81. package/dist/esm/helpers/matchMedia.mjs +17 -0
  82. package/dist/esm/helpers/matchMedia.mjs.map +7 -0
  83. package/dist/esm/helpers/matchMedia.native.mjs +23 -0
  84. package/dist/esm/helpers/matchMedia.native.mjs.map +7 -0
  85. package/dist/esm/helpers/mergeProps.mjs +30 -0
  86. package/dist/esm/helpers/mergeProps.mjs.map +7 -0
  87. package/dist/esm/helpers/mergeTransform.mjs +21 -0
  88. package/dist/esm/helpers/mergeTransform.mjs.map +7 -0
  89. package/dist/esm/helpers/normalizeColor.mjs +36 -0
  90. package/dist/esm/helpers/normalizeColor.mjs.map +7 -0
  91. package/dist/esm/helpers/normalizeValueWithProperty.mjs +113 -0
  92. package/dist/esm/helpers/normalizeValueWithProperty.mjs.map +7 -0
  93. package/dist/esm/helpers/proxyThemeVariables.mjs +16 -0
  94. package/dist/esm/helpers/proxyThemeVariables.mjs.map +7 -0
  95. package/dist/esm/helpers/pseudoDescriptors.mjs +29 -0
  96. package/dist/esm/helpers/pseudoDescriptors.mjs.map +7 -0
  97. package/dist/esm/helpers/registerCSSVariable.mjs +14 -0
  98. package/dist/esm/helpers/registerCSSVariable.mjs.map +7 -0
  99. package/dist/esm/helpers/themeable.mjs +28 -0
  100. package/dist/esm/helpers/themeable.mjs.map +7 -0
  101. package/dist/esm/helpers/themes.mjs +53 -0
  102. package/dist/esm/helpers/themes.mjs.map +7 -0
  103. package/dist/esm/helpers/timer.mjs +11 -0
  104. package/dist/esm/helpers/timer.mjs.map +7 -0
  105. package/dist/esm/helpers/useShallowSetState.mjs +35 -0
  106. package/dist/esm/helpers/useShallowSetState.mjs.map +7 -0
  107. package/dist/esm/helpers/warnOnce.mjs +14 -0
  108. package/dist/esm/helpers/warnOnce.mjs.map +7 -0
  109. package/dist/esm/helpers/withStaticProperties.mjs +8 -0
  110. package/dist/esm/helpers/withStaticProperties.mjs.map +7 -0
  111. package/dist/esm/hooks/getThemeUnwrapped.mjs +9 -0
  112. package/dist/esm/hooks/getThemeUnwrapped.mjs.map +7 -0
  113. package/dist/esm/hooks/useId.mjs +5 -0
  114. package/dist/esm/hooks/useId.mjs.map +7 -0
  115. package/dist/esm/hooks/useIsTouchDevice.mjs +9 -0
  116. package/dist/esm/hooks/useIsTouchDevice.mjs.map +7 -0
  117. package/dist/esm/hooks/useMedia.mjs +225 -0
  118. package/dist/esm/hooks/useMedia.mjs.map +7 -0
  119. package/dist/esm/hooks/useSafeRef.mjs +35 -0
  120. package/dist/esm/hooks/useSafeRef.mjs.map +7 -0
  121. package/dist/esm/hooks/useServerHooks.mjs +11 -0
  122. package/dist/esm/hooks/useServerHooks.mjs.map +7 -0
  123. package/dist/esm/hooks/useStyle.mjs +37 -0
  124. package/dist/esm/hooks/useStyle.mjs.map +7 -0
  125. package/dist/esm/hooks/useTheme.mjs +205 -0
  126. package/dist/esm/hooks/useTheme.mjs.map +7 -0
  127. package/dist/esm/hooks/useThemeName.mjs +28 -0
  128. package/dist/esm/hooks/useThemeName.mjs.map +7 -0
  129. package/dist/esm/index.mjs +77 -0
  130. package/dist/esm/index.mjs.map +7 -0
  131. package/dist/esm/inject-styles.mjs +16 -0
  132. package/dist/esm/inject-styles.mjs.map +7 -0
  133. package/dist/esm/insertFont.mjs +67 -0
  134. package/dist/esm/insertFont.mjs.map +7 -0
  135. package/dist/esm/setupHooks.mjs +9 -0
  136. package/dist/esm/setupHooks.mjs.map +7 -0
  137. package/dist/esm/setupReactNative.mjs +25 -0
  138. package/dist/esm/setupReactNative.mjs.map +7 -0
  139. package/dist/esm/styled.mjs +71 -0
  140. package/dist/esm/styled.mjs.map +7 -0
  141. package/dist/esm/types.mjs +1 -0
  142. package/dist/esm/types.mjs.map +7 -0
  143. package/dist/esm/updateTheme.mjs +23 -0
  144. package/dist/esm/updateTheme.mjs.map +7 -0
  145. package/dist/esm/views/FontLanguage.mjs +17 -0
  146. package/dist/esm/views/FontLanguage.mjs.map +7 -0
  147. package/dist/esm/views/FontLanguage.native.mjs +11 -0
  148. package/dist/esm/views/FontLanguage.native.mjs.map +7 -0
  149. package/dist/esm/views/FontLanguage.types.mjs +1 -0
  150. package/dist/esm/views/FontLanguage.types.mjs.map +7 -0
  151. package/dist/esm/views/Slot.mjs +66 -0
  152. package/dist/esm/views/Slot.mjs.map +7 -0
  153. package/dist/esm/views/Stack.mjs +14 -0
  154. package/dist/esm/views/Stack.mjs.map +7 -0
  155. package/dist/esm/views/TamaguiProvider.mjs +56 -0
  156. package/dist/esm/views/TamaguiProvider.mjs.map +7 -0
  157. package/dist/esm/views/Text.mjs +70 -0
  158. package/dist/esm/views/Text.mjs.map +7 -0
  159. package/dist/esm/views/Theme.mjs +63 -0
  160. package/dist/esm/views/Theme.mjs.map +7 -0
  161. package/dist/esm/views/ThemeProvider.mjs +45 -0
  162. package/dist/esm/views/ThemeProvider.mjs.map +7 -0
  163. package/package.json +11 -11
  164. package/src/createComponent.tsx +7 -6
  165. package/types/createComponent.d.ts.map +1 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/styled.tsx"],
4
+ "sourcesContent": ["import { stylePropsAll } from '@tamagui/helpers'\n\nimport { createComponent } from './createComponent'\nimport { ReactNativeStaticConfigs } from './setupReactNative'\nimport {\n GetProps,\n GetVariantValues,\n MediaProps,\n PseudoProps,\n StaticConfig,\n StylableComponent,\n TamaguiComponent,\n TamaguiElement,\n VariantDefinitions,\n VariantSpreadFunction,\n} from './types'\n\n// TODO may be able to use this in the options?: arg below directly\nexport type StyledOptions<ParentComponent extends StylableComponent> =\n GetProps<ParentComponent> & {\n name?: string\n variants?: VariantDefinitions<ParentComponent> | undefined\n defaultVariants?: { [key: string]: any }\n }\n\ntype GetBaseProps<A extends StylableComponent> = A extends TamaguiComponent<\n any,\n any,\n infer P\n>\n ? P\n : GetProps<A>\n\ntype GetVariantProps<A extends StylableComponent> = A extends TamaguiComponent<\n any,\n any,\n any,\n infer V\n>\n ? V\n : {}\n\nexport function styled<\n ParentComponent extends StylableComponent,\n Variants extends VariantDefinitions<ParentComponent> | void = VariantDefinitions<ParentComponent> | void\n>(\n Component: ParentComponent,\n // this should be Partial<GetProps<ParentComponent>> but causes excessively deep type issues\n options?: GetProps<ParentComponent> & {\n name?: string\n variants?: Variants | undefined\n // thought i had this typed, but can't get it linked\n defaultVariants?: { [key: string]: any }\n acceptsClassName?: boolean\n },\n staticExtractionOptions?: Partial<StaticConfig>\n) {\n // validate not using a variant over an existing valid style\n if (process.env.NODE_ENV !== 'production') {\n if (!Component) {\n throw new Error(`No component given to styled()`)\n }\n if (options?.variants) {\n for (const key in options.variants) {\n if (key in stylePropsAll) {\n console.error(\n `Invalid variant key overlaps with style key: ${key}. Tamagui prevents defining variants that use valid style keys to reduce implementation complexity.`\n )\n }\n }\n }\n }\n\n const staticConfigProps = (() => {\n const parentStaticConfig =\n 'staticConfig' in Component ? (Component.staticConfig as StaticConfig) : null\n\n if (options) {\n const {\n variants,\n name,\n defaultVariants,\n acceptsClassName: acceptsClassNameProp,\n ...defaultProps\n } = options\n if (defaultVariants) {\n Object.assign(defaultProps, defaultVariants)\n }\n const isReactNative = Boolean(\n ReactNativeStaticConfigs.has(Component) ||\n ReactNativeStaticConfigs.has(parentStaticConfig?.Component) ||\n parentStaticConfig?.isReactNative ||\n staticExtractionOptions?.isReactNative\n )\n const isTamagui = !isReactNative && !!parentStaticConfig\n\n const Comp = isReactNative\n ? parentStaticConfig?.Component || Component\n : (Component as any)\n const nativeConf = (isReactNative && ReactNativeStaticConfigs.get(Comp)) || null\n\n const isText = Boolean(\n staticExtractionOptions?.isText || parentStaticConfig?.isText\n )\n const acceptsClassName = acceptsClassNameProp ?? (isTamagui || isReactNative)\n\n const conf: Partial<StaticConfig> = {\n ...staticExtractionOptions,\n ...(!isTamagui && {\n Component: Comp,\n }),\n // this type gets messed up by options?: Partial<GetProps<ParentComponent>> above\n // take away the Partial<> and it's fine\n variants,\n defaultProps,\n defaultVariants,\n componentName: name,\n isReactNative,\n isText,\n acceptsClassName,\n ...nativeConf,\n }\n\n // bail on non className views as well\n if (defaultProps.children || !acceptsClassName) {\n conf.neverFlatten = true\n }\n\n return conf\n }\n return {}\n })()\n\n const component = createComponent(staticConfigProps, Component)\n\n // get parent props without pseudos and medias so we can rebuild both with new variants\n // get parent props without pseudos and medias so we can rebuild both with new variants\n type ParentPropsBase = GetBaseProps<ParentComponent>\n type ParentVariants = GetVariantProps<ParentComponent>\n\n type OurVariants = Variants extends void\n ? {}\n : {\n [Key in keyof Variants]?: Variants[Key] extends VariantSpreadFunction<\n any,\n infer Val\n >\n ? Val\n : GetVariantValues<keyof Variants[Key]>\n }\n\n type VariantProps = Omit<ParentVariants, keyof OurVariants> & OurVariants\n type OurPropsBase = ParentPropsBase & VariantProps\n\n type Props = Variants extends void\n ? GetProps<ParentComponent>\n : // start with base props\n OurPropsBase &\n // add in media (+ pseudos nested)\n MediaProps<Partial<OurPropsBase>> &\n // add in pseudos\n PseudoProps<Partial<OurPropsBase>>\n\n type StyledComponent = TamaguiComponent<\n Props,\n TamaguiElement,\n ParentPropsBase,\n ParentVariants & OurVariants\n >\n\n return component as StyledComponent\n}\n\n// sanity check types\n// import { Stack } from './views/Stack'\n// const X = styled(Stack, {\n// variants: {\n// size: {\n// '...size': (val) => {\n// return {\n// pointerEvents: 'auto'\n// }\n// }\n// },\n// disabled: {\n// true: {\n// alignContent: 'center',\n// opacity: 0.5,\n// pointerEvents: 'none',\n// },\n// },\n// } as const\n// })\n// // type variants = GetStyledVariants<typeof X>\n// const y = <X disabled size=\"$10\" />\n"],
5
+ "mappings": "AAAA,SAAS,qBAAqB;AAE9B,SAAS,uBAAuB;AAChC,SAAS,gCAAgC;AAuClC,SAAS,OAId,WAEA,SAOA,yBACA;AAEA,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,QAAI,mCAAS,UAAU;AACrB,iBAAW,OAAO,QAAQ,UAAU;AAClC,YAAI,OAAO,eAAe;AACxB,kBAAQ;AAAA,YACN,gDAAgD;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,qBAAqB,MAAM;AAC/B,UAAM,qBACJ,kBAAkB,YAAa,UAAU,eAAgC;AAE3E,QAAI,SAAS;AACX,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,QAClB,GAAG;AAAA,MACL,IAAI;AACJ,UAAI,iBAAiB;AACnB,eAAO,OAAO,cAAc,eAAe;AAAA,MAC7C;AACA,YAAM,gBAAgB;AAAA,QACpB,yBAAyB,IAAI,SAAS,KACpC,yBAAyB,IAAI,yDAAoB,SAAS,MAC1D,yDAAoB,mBACpB,mEAAyB;AAAA,MAC7B;AACA,YAAM,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAEtC,YAAM,OAAO,iBACT,yDAAoB,cAAa,YAChC;AACL,YAAM,aAAc,iBAAiB,yBAAyB,IAAI,IAAI,KAAM;AAE5E,YAAM,SAAS;AAAA,SACb,mEAAyB,YAAU,yDAAoB;AAAA,MACzD;AACA,YAAM,mBAAmB,yBAAyB,aAAa;AAE/D,YAAM,OAA8B;AAAA,QAClC,GAAG;AAAA,QACH,GAAI,CAAC,aAAa;AAAA,UAChB,WAAW;AAAA,QACb;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL;AAGA,UAAI,aAAa,YAAY,CAAC,kBAAkB;AAC9C,aAAK,eAAe;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AACA,WAAO,CAAC;AAAA,EACV,GAAG;AAEH,QAAM,YAAY,gBAAgB,mBAAmB,SAAS;AAqC9D,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,23 @@
1
+ import { addTheme } from "./addTheme";
2
+ import { activeThemeManagers } from "./hooks/useTheme";
3
+ function updateTheme({
4
+ name,
5
+ theme
6
+ }) {
7
+ const next = addTheme({ name, theme, insertCSS: true, update: true });
8
+ if (process.env.TAMAGUI_TARGET === "native") {
9
+ activeThemeManagers.forEach((manager) => {
10
+ if (manager.state.name === name) {
11
+ manager.updateState({
12
+ name,
13
+ forceTheme: next.theme
14
+ });
15
+ }
16
+ });
17
+ }
18
+ return next;
19
+ }
20
+ export {
21
+ updateTheme
22
+ };
23
+ //# sourceMappingURL=updateTheme.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/updateTheme.ts"],
4
+ "sourcesContent": ["import { addTheme } from './addTheme'\nimport { activeThemeManagers } from './hooks/useTheme'\nimport { ThemeDefinition } from './types'\n\nexport function updateTheme({\n name,\n theme,\n}: {\n name: string\n theme: Partial<Record<keyof ThemeDefinition, any>>\n}) {\n const next = addTheme({ name, theme, insertCSS: true, update: true })\n\n if (process.env.TAMAGUI_TARGET === 'native') {\n activeThemeManagers.forEach((manager) => {\n if (manager.state.name === name) {\n manager.updateState({\n name,\n forceTheme: next.theme,\n })\n }\n })\n }\n\n return next\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AAG7B,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGG;AACD,QAAM,OAAO,SAAS,EAAE,MAAM,OAAO,WAAW,MAAM,QAAQ,KAAK,CAAC;AAEpE,MAAI,QAAQ,IAAI,mBAAmB,UAAU;AAC3C,wBAAoB,QAAQ,CAAC,YAAY;AACvC,UAAI,QAAQ,MAAM,SAAS,MAAM;AAC/B,gBAAQ,YAAY;AAAA,UAClB;AAAA,UACA,YAAY,KAAK;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ const FontLanguage = ({ children, ...props }) => {
3
+ return /* @__PURE__ */ jsx(
4
+ "div",
5
+ {
6
+ style: {
7
+ display: "contents"
8
+ },
9
+ className: Object.entries(props).map(([name, language]) => `t_lang-${name}-${language}`).join(" "),
10
+ children
11
+ }
12
+ );
13
+ };
14
+ export {
15
+ FontLanguage
16
+ };
17
+ //# sourceMappingURL=FontLanguage.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/FontLanguage.tsx"],
4
+ "sourcesContent": ["import { FontLanguageProps } from './FontLanguage.types'\n\nexport const FontLanguage = ({ children, ...props }: FontLanguageProps) => {\n return (\n <div\n style={{\n display: 'contents',\n }}\n className={Object.entries(props)\n .map(([name, language]) => `t_lang-${name}-${language}`)\n .join(' ')}\n >\n {children}\n </div>\n )\n}\n"],
5
+ "mappings": "AAII;AAFG,MAAM,eAAe,CAAC,EAAE,UAAU,GAAG,MAAM,MAAyB;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,WAAW,OAAO,QAAQ,KAAK,EAC5B,IAAI,CAAC,CAAC,MAAM,QAAQ,MAAM,UAAU,QAAQ,UAAU,EACtD,KAAK,GAAG;AAAA,MAEV;AAAA;AAAA,EACH;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { FontLanguageContext } from "../contexts/FontLanguageContext";
4
+ const FontLanguage = ({ children, ...props }) => {
5
+ const value = useMemo(() => props, [JSON.stringify(props)]);
6
+ return /* @__PURE__ */ jsx(FontLanguageContext.Provider, { value, children });
7
+ };
8
+ export {
9
+ FontLanguage
10
+ };
11
+ //# sourceMappingURL=FontLanguage.native.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/FontLanguage.native.tsx"],
4
+ "sourcesContent": ["import React, { useMemo } from 'react'\n\nimport { FontLanguageContext } from '../contexts/FontLanguageContext'\nimport { FontLanguageProps } from './FontLanguage.types'\n\nexport const FontLanguage = ({ children, ...props }: FontLanguageProps) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = useMemo(() => props, [JSON.stringify(props)])\n return (\n <FontLanguageContext.Provider value={value}>{children}</FontLanguageContext.Provider>\n )\n}\n"],
5
+ "mappings": "AASI;AATJ,SAAgB,eAAe;AAE/B,SAAS,2BAA2B;AAG7B,MAAM,eAAe,CAAC,EAAE,UAAU,GAAG,MAAM,MAAyB;AAEzE,QAAM,QAAQ,QAAQ,MAAM,OAAO,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAC1D,SACE,oBAAC,oBAAoB,UAApB,EAA6B,OAAe,UAAS;AAE1D;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=FontLanguage.types.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,66 @@
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import { composeRefs } from "@tamagui/compose-refs";
3
+ import { isWeb } from "@tamagui/constants";
4
+ import { Children, cloneElement, forwardRef, isValidElement } from "react";
5
+ const Slot = forwardRef(function Slot2(props, forwardedRef) {
6
+ const { children, ...slotProps } = props;
7
+ if (isValidElement(children)) {
8
+ const childProps = {
9
+ ...mergeSlotProps(children, slotProps),
10
+ ref: composeRefs(forwardedRef, children.ref)
11
+ };
12
+ return cloneElement(children, childProps);
13
+ }
14
+ return Children.count(children) > 1 ? Children.only(null) : null;
15
+ });
16
+ const Slottable = ({ children }) => {
17
+ return /* @__PURE__ */ jsx(Fragment, { children });
18
+ };
19
+ const pressMap = isWeb ? {
20
+ onPress: "onClick",
21
+ onPressOut: "onMouseUp",
22
+ onPressIn: "onMouseDown"
23
+ } : {};
24
+ function mergeSlotProps(child, slotProps) {
25
+ const childProps = child.props;
26
+ const overrideProps = { ...childProps };
27
+ const isHTMLChild = typeof child.type === "string";
28
+ if (isHTMLChild) {
29
+ for (const key in pressMap) {
30
+ if (key in slotProps) {
31
+ slotProps[pressMap[key]] = slotProps[key];
32
+ delete slotProps[key];
33
+ }
34
+ }
35
+ }
36
+ for (let propName in childProps) {
37
+ const slotPropValue = slotProps[propName];
38
+ const childPropValue = childProps[propName];
39
+ if (isHTMLChild && pressMap[propName]) {
40
+ propName = pressMap[propName];
41
+ delete overrideProps[propName];
42
+ }
43
+ const isHandler = handleRegex.test(propName);
44
+ if (isHandler) {
45
+ overrideProps[propName] = mergeEvent(childPropValue, slotPropValue);
46
+ } else if (propName === "style") {
47
+ overrideProps[propName] = { ...slotPropValue, ...childPropValue };
48
+ } else if (propName === "className") {
49
+ overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
50
+ }
51
+ }
52
+ return { ...slotProps, ...overrideProps };
53
+ }
54
+ const handleRegex = /^on[A-Z]/;
55
+ function mergeEvent(a, b) {
56
+ return (...args) => {
57
+ a == null ? void 0 : a(...args);
58
+ b == null ? void 0 : b(...args);
59
+ };
60
+ }
61
+ export {
62
+ Slot,
63
+ Slottable,
64
+ mergeEvent
65
+ };
66
+ //# sourceMappingURL=Slot.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/Slot.tsx"],
4
+ "sourcesContent": ["// via radix\n\nimport { composeRefs } from '@tamagui/compose-refs'\nimport { isWeb } from '@tamagui/constants'\nimport { Children, ReactNode, cloneElement, forwardRef, isValidElement } from 'react'\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps {\n children: ReactNode\n}\n\nexport const Slot = forwardRef<any, SlotProps>(function Slot(props, forwardedRef) {\n const { children, ...slotProps } = props\n\n if (isValidElement(children)) {\n const childProps = {\n ...mergeSlotProps(children, slotProps),\n ref: composeRefs(forwardedRef, (children as any).ref),\n }\n return cloneElement(children, childProps)\n }\n\n return Children.count(children) > 1 ? Children.only(null) : null\n})\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Slottable = ({ children }: { children: ReactNode }) => {\n return <>{children}</>\n}\n\n/* ---------------------------------------------------------------------------------------------- */\n\nconst pressMap = isWeb\n ? {\n onPress: 'onClick',\n onPressOut: 'onMouseUp',\n onPressIn: 'onMouseDown',\n }\n : {}\n\nfunction mergeSlotProps(child: any, slotProps: Record<string, any>) {\n const childProps = child.props\n\n // all child props should override\n const overrideProps = { ...childProps }\n const isHTMLChild = typeof child.type === 'string'\n\n if (isHTMLChild) {\n for (const key in pressMap) {\n if (key in slotProps) {\n slotProps[pressMap[key]] = slotProps[key]\n delete slotProps[key]\n }\n }\n }\n\n for (let propName in childProps) {\n const slotPropValue = slotProps[propName]\n const childPropValue = childProps[propName]\n\n if (isHTMLChild && pressMap[propName]) {\n propName = pressMap[propName]\n delete overrideProps[propName]\n }\n\n const isHandler = handleRegex.test(propName)\n // if it's a handler, modify the override by composing the base handler\n if (isHandler) {\n overrideProps[propName] = mergeEvent(childPropValue, slotPropValue)\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue }\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ')\n }\n }\n\n return { ...slotProps, ...overrideProps }\n}\n\nconst handleRegex = /^on[A-Z]/\n\nexport function mergeEvent(a?: Function, b?: Function) {\n return (...args: unknown[]) => {\n a?.(...args)\n b?.(...args)\n }\n}\n"],
5
+ "mappings": "AAiCS;AA/BT,SAAS,mBAAmB;AAC5B,SAAS,aAAa;AACtB,SAAS,UAAqB,cAAc,YAAY,sBAAsB;AAUvE,MAAM,OAAO,WAA2B,SAASA,MAAK,OAAO,cAAc;AAChF,QAAM,EAAE,UAAU,GAAG,UAAU,IAAI;AAEnC,MAAI,eAAe,QAAQ,GAAG;AAC5B,UAAM,aAAa;AAAA,MACjB,GAAG,eAAe,UAAU,SAAS;AAAA,MACrC,KAAK,YAAY,cAAe,SAAiB,GAAG;AAAA,IACtD;AACA,WAAO,aAAa,UAAU,UAAU;AAAA,EAC1C;AAEA,SAAO,SAAS,MAAM,QAAQ,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI;AAC9D,CAAC;AAMM,MAAM,YAAY,CAAC,EAAE,SAAS,MAA+B;AAClE,SAAO,gCAAG,UAAS;AACrB;AAIA,MAAM,WAAW,QACb;AAAA,EACE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AACb,IACA,CAAC;AAEL,SAAS,eAAe,OAAY,WAAgC;AAClE,QAAM,aAAa,MAAM;AAGzB,QAAM,gBAAgB,EAAE,GAAG,WAAW;AACtC,QAAM,cAAc,OAAO,MAAM,SAAS;AAE1C,MAAI,aAAa;AACf,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,WAAW;AACpB,kBAAU,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG;AACxC,eAAO,UAAU,GAAG;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YAAY,YAAY;AAC/B,UAAM,gBAAgB,UAAU,QAAQ;AACxC,UAAM,iBAAiB,WAAW,QAAQ;AAE1C,QAAI,eAAe,SAAS,QAAQ,GAAG;AACrC,iBAAW,SAAS,QAAQ;AAC5B,aAAO,cAAc,QAAQ;AAAA,IAC/B;AAEA,UAAM,YAAY,YAAY,KAAK,QAAQ;AAE3C,QAAI,WAAW;AACb,oBAAc,QAAQ,IAAI,WAAW,gBAAgB,aAAa;AAAA,IACpE,WAES,aAAa,SAAS;AAC7B,oBAAc,QAAQ,IAAI,EAAE,GAAG,eAAe,GAAG,eAAe;AAAA,IAClE,WAAW,aAAa,aAAa;AACnC,oBAAc,QAAQ,IAAI,CAAC,eAAe,cAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACpF;AAAA,EACF;AAEA,SAAO,EAAE,GAAG,WAAW,GAAG,cAAc;AAC1C;AAEA,MAAM,cAAc;AAEb,SAAS,WAAW,GAAc,GAAc;AACrD,SAAO,IAAI,SAAoB;AAC7B,2BAAI,GAAG;AACP,2BAAI,GAAG;AAAA,EACT;AACF;",
6
+ "names": ["Slot"]
7
+ }
@@ -0,0 +1,14 @@
1
+ import { stackDefaultStyles } from "../constants/constants";
2
+ import { createComponent } from "../createComponent";
3
+ const Stack = createComponent({
4
+ componentName: "Stack",
5
+ acceptsClassName: true,
6
+ defaultProps: {
7
+ ...stackDefaultStyles,
8
+ flexDirection: "column"
9
+ }
10
+ });
11
+ export {
12
+ Stack
13
+ };
14
+ //# sourceMappingURL=Stack.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/Stack.tsx"],
4
+ "sourcesContent": ["import type { View } from 'react-native'\n\nimport { stackDefaultStyles } from '../constants/constants'\nimport { createComponent } from '../createComponent'\nimport { StackProps, StackPropsBase } from '../types'\n\nexport const Stack = createComponent<StackProps, View, StackPropsBase>({\n componentName: 'Stack',\n acceptsClassName: true,\n defaultProps: {\n ...stackDefaultStyles,\n flexDirection: 'column',\n },\n})\n\n// test types\n// export const YStack = styled(Stack, {\n// flexDirection: 'column',\n// })\n// // test types\n// const x00 = <Stack missing={0} /> // should err\n// const x0 = <YStack missing={0} /> // should err\n// const x1 = (props: StackProps) => <YStack {...props} />\n// type ys = typeof YStack\n// type ysv = ys extends StaticComponent<any, infer V> ? V : unknown\n"],
5
+ "mappings": "AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAGzB,MAAM,QAAQ,gBAAkD;AAAA,EACrE,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,cAAc;AAAA,IACZ,GAAG;AAAA,IACH,eAAe;AAAA,EACjB;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,56 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { isClient, isRSC, isServer, isWeb } from "@tamagui/constants";
3
+ import * as React from "react";
4
+ import { ButtonNestingContext } from "../contexts/ButtonNestingContext";
5
+ import { TextAncestorContext } from "../contexts/TextAncestorContext";
6
+ import { useMediaListeners } from "../hooks/useMedia";
7
+ import { ThemeProvider } from "./ThemeProvider";
8
+ function TamaguiProvider({
9
+ children,
10
+ disableInjectCSS,
11
+ config,
12
+ ...themePropsProvider
13
+ }) {
14
+ if (isRSC) {
15
+ return /* @__PURE__ */ jsx(
16
+ "span",
17
+ {
18
+ style: { display: "contents" },
19
+ className: `t_${Object.keys(config.themes)[0] || "light"}`,
20
+ children
21
+ }
22
+ );
23
+ }
24
+ if (!(isWeb && isServer)) {
25
+ useMediaListeners(config);
26
+ }
27
+ if (isClient) {
28
+ React.useLayoutEffect(() => {
29
+ if (document.documentElement.classList.contains("t_unmounted")) {
30
+ document.documentElement.classList.remove("t_unmounted");
31
+ }
32
+ if (disableInjectCSS)
33
+ return;
34
+ const style = document.createElement("style");
35
+ style.appendChild(document.createTextNode(config.getCSS()));
36
+ document.head.appendChild(style);
37
+ return () => {
38
+ document.head.removeChild(style);
39
+ };
40
+ }, [config, disableInjectCSS]);
41
+ }
42
+ return /* @__PURE__ */ jsx(ButtonNestingContext.Provider, { value: false, children: /* @__PURE__ */ jsx(TextAncestorContext.Provider, { value: false, children: /* @__PURE__ */ jsx(
43
+ ThemeProvider,
44
+ {
45
+ themeClassNameOnRoot: config.themeClassNameOnRoot,
46
+ disableRootThemeClass: config.disableRootThemeClass,
47
+ ...themePropsProvider,
48
+ defaultTheme: themePropsProvider.defaultTheme ?? Object.keys(config.themes)[0],
49
+ children
50
+ }
51
+ ) }) });
52
+ }
53
+ export {
54
+ TamaguiProvider
55
+ };
56
+ //# sourceMappingURL=TamaguiProvider.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/TamaguiProvider.tsx"],
4
+ "sourcesContent": ["import { isClient, isRSC, isServer, isWeb } from '@tamagui/constants'\nimport * as React from 'react'\n\nimport { ButtonNestingContext } from '../contexts/ButtonNestingContext'\nimport { TextAncestorContext } from '../contexts/TextAncestorContext'\nimport { useMediaListeners } from '../hooks/useMedia'\nimport type { TamaguiProviderProps } from '../types'\nimport { ThemeProvider } from './ThemeProvider'\n\nexport function TamaguiProvider({\n children,\n disableInjectCSS,\n config,\n ...themePropsProvider\n}: TamaguiProviderProps) {\n if (isRSC) {\n return (\n <span\n style={{ display: 'contents' }}\n className={`t_${Object.keys(config.themes)[0] || 'light'}`}\n >\n {children}\n </span>\n )\n }\n\n if (!(isWeb && isServer)) {\n useMediaListeners(config)\n }\n\n if (isClient) {\n // inject CSS if asked to (not SSR compliant)\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n // for easier support of hidden-until-js mount animations\n // user must set t_unmounted on documentElement from SSR\n if (document.documentElement.classList.contains('t_unmounted')) {\n document.documentElement.classList.remove('t_unmounted')\n }\n\n if (disableInjectCSS) return\n const style = document.createElement('style')\n style.appendChild(document.createTextNode(config.getCSS()))\n document.head.appendChild(style)\n return () => {\n document.head.removeChild(style)\n }\n }, [config, disableInjectCSS])\n }\n\n return (\n <ButtonNestingContext.Provider value={false}>\n <TextAncestorContext.Provider value={false}>\n <ThemeProvider\n themeClassNameOnRoot={config.themeClassNameOnRoot}\n disableRootThemeClass={config.disableRootThemeClass}\n {...themePropsProvider}\n defaultTheme={themePropsProvider.defaultTheme ?? Object.keys(config.themes)[0]}\n >\n {children}\n </ThemeProvider>\n </TextAncestorContext.Provider>\n </ButtonNestingContext.Provider>\n )\n}\n"],
5
+ "mappings": "AAiBM;AAjBN,SAAS,UAAU,OAAO,UAAU,aAAa;AACjD,YAAY,WAAW;AAEvB,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAElC,SAAS,qBAAqB;AAEvB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAyB;AACvB,MAAI,OAAO;AACT,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,SAAS,WAAW;AAAA,QAC7B,WAAW,KAAK,OAAO,KAAK,OAAO,MAAM,EAAE,CAAC,KAAK;AAAA,QAEhD;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,MAAI,EAAE,SAAS,WAAW;AACxB,sBAAkB,MAAM;AAAA,EAC1B;AAEA,MAAI,UAAU;AAGZ,UAAM,gBAAgB,MAAM;AAG1B,UAAI,SAAS,gBAAgB,UAAU,SAAS,aAAa,GAAG;AAC9D,iBAAS,gBAAgB,UAAU,OAAO,aAAa;AAAA,MACzD;AAEA,UAAI;AAAkB;AACtB,YAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,YAAM,YAAY,SAAS,eAAe,OAAO,OAAO,CAAC,CAAC;AAC1D,eAAS,KAAK,YAAY,KAAK;AAC/B,aAAO,MAAM;AACX,iBAAS,KAAK,YAAY,KAAK;AAAA,MACjC;AAAA,IACF,GAAG,CAAC,QAAQ,gBAAgB,CAAC;AAAA,EAC/B;AAEA,SACE,oBAAC,qBAAqB,UAArB,EAA8B,OAAO,OACpC,8BAAC,oBAAoB,UAApB,EAA6B,OAAO,OACnC;AAAA,IAAC;AAAA;AAAA,MACC,sBAAsB,OAAO;AAAA,MAC7B,uBAAuB,OAAO;AAAA,MAC7B,GAAG;AAAA,MACJ,cAAc,mBAAmB,gBAAgB,OAAO,KAAK,OAAO,MAAM,EAAE,CAAC;AAAA,MAE5E;AAAA;AAAA,EACH,GACF,GACF;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,70 @@
1
+ import { isWeb } from "@tamagui/constants";
2
+ import { stylePropsTextOnly, validStyles } from "@tamagui/helpers";
3
+ import { createComponent } from "../createComponent";
4
+ const ellipseStyle = {
5
+ maxWidth: "100%",
6
+ overflow: "hidden",
7
+ textOverflow: "ellipsis",
8
+ whiteSpace: "nowrap"
9
+ };
10
+ const Text = createComponent({
11
+ componentName: "Text",
12
+ acceptsClassName: true,
13
+ isText: true,
14
+ defaultProps: {
15
+ // @ts-ignore
16
+ display: "flex",
17
+ fontFamily: "System",
18
+ ...isWeb ? {
19
+ display: "inline",
20
+ boxSizing: "border-box",
21
+ wordWrap: "break-word",
22
+ margin: 0
23
+ } : {
24
+ suppressHighlighting: true
25
+ }
26
+ },
27
+ inlineWhenUnflattened: /* @__PURE__ */ new Set(["fontFamily"]),
28
+ variants: {
29
+ ...isWeb && {
30
+ numberOfLines: {
31
+ 1: ellipseStyle,
32
+ ":number": (numberOfLines) => numberOfLines >= 1 ? {
33
+ WebkitLineClamp: numberOfLines,
34
+ WebkitBoxOrient: "vertical",
35
+ display: "-webkit-box",
36
+ overflow: "hidden"
37
+ } : null
38
+ }
39
+ },
40
+ // ??
41
+ ellipsizeMode: {
42
+ "...": () => null
43
+ },
44
+ selectable: {
45
+ true: {
46
+ userSelect: "text",
47
+ cursor: "text"
48
+ },
49
+ false: {
50
+ userSelect: "none",
51
+ cursor: "default"
52
+ }
53
+ },
54
+ ellipse: {
55
+ true: isWeb ? ellipseStyle : {
56
+ numberOfLines: 1,
57
+ lineBreakMode: "clip"
58
+ }
59
+ }
60
+ },
61
+ deoptProps: new Set(isWeb ? [] : ["ellipse"]),
62
+ validStyles: {
63
+ ...validStyles,
64
+ ...stylePropsTextOnly
65
+ }
66
+ });
67
+ export {
68
+ Text
69
+ };
70
+ //# sourceMappingURL=Text.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/Text.tsx"],
4
+ "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport { stylePropsTextOnly, validStyles } from '@tamagui/helpers'\nimport type { Text as TextView } from 'react-native'\n\nimport { createComponent } from '../createComponent'\nimport { TextProps, TextPropsBase } from '../types'\n\nconst ellipseStyle = {\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n}\n\nexport const Text = createComponent<TextProps, TextView, TextPropsBase>({\n componentName: 'Text',\n acceptsClassName: true,\n isText: true,\n\n defaultProps: {\n // @ts-ignore\n display: 'flex',\n fontFamily: 'System',\n ...(isWeb\n ? {\n display: 'inline',\n boxSizing: 'border-box',\n wordWrap: 'break-word',\n margin: 0,\n }\n : {\n suppressHighlighting: true,\n }),\n },\n\n inlineWhenUnflattened: new Set(['fontFamily']),\n\n variants: {\n ...(isWeb && {\n numberOfLines: {\n 1: ellipseStyle,\n\n ':number': (numberOfLines) =>\n numberOfLines >= 1\n ? {\n WebkitLineClamp: numberOfLines,\n WebkitBoxOrient: 'vertical',\n display: '-webkit-box',\n overflow: 'hidden',\n }\n : null,\n },\n }),\n\n // ??\n ellipsizeMode: {\n '...': () => null,\n },\n\n selectable: {\n true: {\n userSelect: 'text',\n cursor: 'text',\n },\n false: {\n userSelect: 'none',\n cursor: 'default',\n },\n },\n\n ellipse: {\n true: isWeb\n ? ellipseStyle\n : {\n numberOfLines: 1,\n lineBreakMode: 'clip',\n },\n },\n },\n\n deoptProps: new Set(isWeb ? [] : ['ellipse']),\n\n validStyles: {\n ...validStyles,\n ...stylePropsTextOnly,\n },\n})\n"],
5
+ "mappings": "AAAA,SAAS,aAAa;AACtB,SAAS,oBAAoB,mBAAmB;AAGhD,SAAS,uBAAuB;AAGhC,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd;AAEO,MAAM,OAAO,gBAAoD;AAAA,EACtE,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EAER,cAAc;AAAA;AAAA,IAEZ,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,GAAI,QACA;AAAA,MACE,SAAS;AAAA,MACT,WAAW;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,IACV,IACA;AAAA,MACE,sBAAsB;AAAA,IACxB;AAAA,EACN;AAAA,EAEA,uBAAuB,oBAAI,IAAI,CAAC,YAAY,CAAC;AAAA,EAE7C,UAAU;AAAA,IACR,GAAI,SAAS;AAAA,MACX,eAAe;AAAA,QACb,GAAG;AAAA,QAEH,WAAW,CAAC,kBACV,iBAAiB,IACb;AAAA,UACE,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,SAAS;AAAA,UACT,UAAU;AAAA,QACZ,IACA;AAAA,MACR;AAAA,IACF;AAAA;AAAA,IAGA,eAAe;AAAA,MACb,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,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,IAEA,SAAS;AAAA,MACP,MAAM,QACF,eACA;AAAA,QACE,eAAe;AAAA,QACf,eAAe;AAAA,MACjB;AAAA,IACN;AAAA,EACF;AAAA,EAEA,YAAY,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAAA,EAE5C,aAAa;AAAA,IACX,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,63 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { isWeb } from "@tamagui/constants";
3
+ import { Children, cloneElement } from "react";
4
+ import { variableToString } from "../createVariable";
5
+ import { ThemeManagerContext } from "../helpers/ThemeManagerContext";
6
+ import { useServerRef } from "../hooks/useServerHooks";
7
+ import { useChangeThemeEffect } from "../hooks/useTheme";
8
+ function Theme(props) {
9
+ if (props.disable)
10
+ return props.children;
11
+ const isRoot = !!props["_isRoot"];
12
+ const themeState = useChangeThemeEffect(props, isRoot);
13
+ const children = props["data-themeable"] ? Children.map(
14
+ props.children,
15
+ (child) => cloneElement(child, { ["data-themeable"]: true })
16
+ ) : props.children;
17
+ return useThemedChildren(themeState, children, props);
18
+ }
19
+ function useThemedChildren(themeState, children, options) {
20
+ const { themeManager, isNewTheme, className, theme } = themeState;
21
+ const { shallow, forceClassName } = options;
22
+ const hasEverThemed = useServerRef(false);
23
+ if (isNewTheme) {
24
+ hasEverThemed.current = true;
25
+ }
26
+ if (!isNewTheme && !hasEverThemed.current && !forceClassName && !shallow) {
27
+ return children;
28
+ }
29
+ let next = children;
30
+ if (shallow && themeManager) {
31
+ next = Children.map(next, (child) => {
32
+ return cloneElement(
33
+ child,
34
+ void 0,
35
+ /* @__PURE__ */ jsx(Theme, { name: themeManager.state.parentName, children: child.props.children })
36
+ );
37
+ });
38
+ }
39
+ next = /* @__PURE__ */ jsx(ThemeManagerContext.Provider, { value: themeManager, children: next });
40
+ if (isWeb) {
41
+ const enableClassName = forceClassName === true || forceClassName !== false && isNewTheme;
42
+ return /* @__PURE__ */ jsx(
43
+ "span",
44
+ {
45
+ className: "_dsp_contents",
46
+ ...theme && enableClassName && {
47
+ className: `${className} ${forceClassName ? "forced1" : ""} _dsp_contents`,
48
+ style: {
49
+ // in order to provide currentColor, set color by default
50
+ color: variableToString(theme.color)
51
+ }
52
+ },
53
+ children: next
54
+ }
55
+ );
56
+ }
57
+ return next;
58
+ }
59
+ export {
60
+ Theme,
61
+ useThemedChildren
62
+ };
63
+ //# sourceMappingURL=Theme.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/Theme.tsx"],
4
+ "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport { Children, cloneElement } from 'react'\n\nimport { variableToString } from '../createVariable'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { useServerRef } from '../hooks/useServerHooks'\nimport { ChangedThemeResponse, useChangeThemeEffect } from '../hooks/useTheme'\nimport { ThemeProps } from '../types'\n\nexport function Theme(props: ThemeProps) {\n // @ts-expect-error only for internal views\n if (props.disable) return props.children\n const isRoot = !!props['_isRoot']\n const themeState = useChangeThemeEffect(props, isRoot)\n const children = props['data-themeable']\n ? Children.map(props.children, (child) =>\n cloneElement(child, { ['data-themeable']: true })\n )\n : props.children\n\n return useThemedChildren(themeState, children, props)\n}\n\nexport function useThemedChildren(\n themeState: ChangedThemeResponse,\n children: any,\n options: { forceClassName?: boolean; shallow?: boolean }\n) {\n const { themeManager, isNewTheme, className, theme } = themeState\n const { shallow, forceClassName } = options\n\n const hasEverThemed = useServerRef(false)\n if (isNewTheme) {\n hasEverThemed.current = true\n }\n\n // once a theme is set it always passes the context to avoid reparenting\n // until then no context to avoid lots of context\n if (!isNewTheme && !hasEverThemed.current && !forceClassName && !shallow) {\n return children\n }\n\n // be sure to memoize shouldReset to avoid reparenting\n let next = children\n\n if (shallow && themeManager) {\n next = Children.map(next, (child) => {\n return cloneElement(\n child,\n undefined,\n <Theme name={themeManager.state.parentName}>{child.props.children}</Theme>\n )\n })\n }\n\n next = (\n <ThemeManagerContext.Provider value={themeManager}>\n {next}\n </ThemeManagerContext.Provider>\n )\n\n if (isWeb) {\n const enableClassName =\n forceClassName === true || (forceClassName !== false && isNewTheme)\n return (\n <span\n className=\"_dsp_contents\"\n {...(theme &&\n enableClassName && {\n className: `${className} ${forceClassName ? 'forced1' : ''} _dsp_contents`,\n style: {\n // in order to provide currentColor, set color by default\n color: variableToString(theme.color),\n },\n })}\n >\n {next}\n </span>\n )\n }\n\n return next\n}\n"],
5
+ "mappings": "AAkDQ;AAlDR,SAAS,aAAa;AACtB,SAAS,UAAU,oBAAoB;AAEvC,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAC7B,SAA+B,4BAA4B;AAGpD,SAAS,MAAM,OAAmB;AAEvC,MAAI,MAAM;AAAS,WAAO,MAAM;AAChC,QAAM,SAAS,CAAC,CAAC,MAAM,SAAS;AAChC,QAAM,aAAa,qBAAqB,OAAO,MAAM;AACrD,QAAM,WAAW,MAAM,gBAAgB,IACnC,SAAS;AAAA,IAAI,MAAM;AAAA,IAAU,CAAC,UAC5B,aAAa,OAAO,EAAE,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAAA,EAClD,IACA,MAAM;AAEV,SAAO,kBAAkB,YAAY,UAAU,KAAK;AACtD;AAEO,SAAS,kBACd,YACA,UACA,SACA;AACA,QAAM,EAAE,cAAc,YAAY,WAAW,MAAM,IAAI;AACvD,QAAM,EAAE,SAAS,eAAe,IAAI;AAEpC,QAAM,gBAAgB,aAAa,KAAK;AACxC,MAAI,YAAY;AACd,kBAAc,UAAU;AAAA,EAC1B;AAIA,MAAI,CAAC,cAAc,CAAC,cAAc,WAAW,CAAC,kBAAkB,CAAC,SAAS;AACxE,WAAO;AAAA,EACT;AAGA,MAAI,OAAO;AAEX,MAAI,WAAW,cAAc;AAC3B,WAAO,SAAS,IAAI,MAAM,CAAC,UAAU;AACnC,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,oBAAC,SAAM,MAAM,aAAa,MAAM,YAAa,gBAAM,MAAM,UAAS;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SACE,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,cAClC,gBACH;AAGF,MAAI,OAAO;AACT,UAAM,kBACJ,mBAAmB,QAAS,mBAAmB,SAAS;AAC1D,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACT,GAAI,SACH,mBAAmB;AAAA,UACjB,WAAW,GAAG,aAAa,iBAAiB,YAAY;AAAA,UACxD,OAAO;AAAA;AAAA,YAEL,OAAO,iBAAiB,MAAM,KAAK;AAAA,UACrC;AAAA,QACF;AAAA,QAED;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,45 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { isClient } from "@tamagui/constants";
3
+ import { createContext, useLayoutEffect, useMemo } from "react";
4
+ import { THEME_CLASSNAME_PREFIX } from "../constants/constants";
5
+ import { Theme } from "./Theme";
6
+ const ThemeProviderRootContext = createContext(null);
7
+ const ThemeProvider = (props) => {
8
+ if (isClient) {
9
+ useLayoutEffect(() => {
10
+ if (props.disableRootThemeClass)
11
+ return;
12
+ const cn = `${THEME_CLASSNAME_PREFIX}${props.defaultTheme}`;
13
+ const target = props.themeClassNameOnRoot ? document.documentElement : document.body;
14
+ target.classList.add(cn);
15
+ return () => {
16
+ target.classList.remove(cn);
17
+ };
18
+ }, [props.defaultTheme, props.disableRootThemeClass, props.themeClassNameOnRoot]);
19
+ }
20
+ return /* @__PURE__ */ jsx(
21
+ ThemeProviderRootContext.Provider,
22
+ {
23
+ value: useMemo(() => {
24
+ return {
25
+ defaultTheme: props.defaultTheme
26
+ };
27
+ }, []),
28
+ children: /* @__PURE__ */ jsx(
29
+ Theme,
30
+ {
31
+ className: props.className,
32
+ name: props.defaultTheme,
33
+ forceClassName: props.disableRootThemeClass ? false : void 0,
34
+ _isRoot: true,
35
+ children: props.children
36
+ }
37
+ )
38
+ }
39
+ );
40
+ };
41
+ export {
42
+ ThemeProvider,
43
+ ThemeProviderRootContext
44
+ };
45
+ //# sourceMappingURL=ThemeProvider.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/views/ThemeProvider.tsx"],
4
+ "sourcesContent": ["import { isClient } from '@tamagui/constants'\nimport { createContext, useLayoutEffect, useMemo } from 'react'\n\nimport { THEME_CLASSNAME_PREFIX } from '../constants/constants'\nimport { Theme } from './Theme'\n\nexport type ThemeProviderProps = {\n className?: string\n defaultTheme: string\n disableRootThemeClass?: boolean\n themeClassNameOnRoot?: boolean\n children?: any\n reset?: boolean\n}\n\nexport const ThemeProviderRootContext = createContext<Pick<\n ThemeProviderProps,\n 'defaultTheme'\n> | null>(null)\n\nexport const ThemeProvider = (props: ThemeProviderProps) => {\n // ensure theme is attached to root body node as well to work with modals by default\n if (isClient) {\n useLayoutEffect(() => {\n if (props.disableRootThemeClass) return\n const cn = `${THEME_CLASSNAME_PREFIX}${props.defaultTheme}`\n const target = props.themeClassNameOnRoot ? document.documentElement : document.body\n target.classList.add(cn)\n return () => {\n target.classList.remove(cn)\n }\n }, [props.defaultTheme, props.disableRootThemeClass, props.themeClassNameOnRoot])\n }\n\n return (\n <ThemeProviderRootContext.Provider\n value={useMemo(() => {\n return {\n defaultTheme: props.defaultTheme,\n }\n // NOTE DON'T CHANGE THIS ITS ONLY USED BY useThemeName for SSR safety for now...\n }, [])}\n >\n <Theme\n className={props.className}\n name={props.defaultTheme}\n forceClassName={props.disableRootThemeClass ? false : undefined}\n // @ts-expect-error\n _isRoot\n >\n {props.children}\n </Theme>\n </ThemeProviderRootContext.Provider>\n )\n}\n"],
5
+ "mappings": "AA2CM;AA3CN,SAAS,gBAAgB;AACzB,SAAS,eAAe,iBAAiB,eAAe;AAExD,SAAS,8BAA8B;AACvC,SAAS,aAAa;AAWf,MAAM,2BAA2B,cAG9B,IAAI;AAEP,MAAM,gBAAgB,CAAC,UAA8B;AAE1D,MAAI,UAAU;AACZ,oBAAgB,MAAM;AACpB,UAAI,MAAM;AAAuB;AACjC,YAAM,KAAK,GAAG,yBAAyB,MAAM;AAC7C,YAAM,SAAS,MAAM,uBAAuB,SAAS,kBAAkB,SAAS;AAChF,aAAO,UAAU,IAAI,EAAE;AACvB,aAAO,MAAM;AACX,eAAO,UAAU,OAAO,EAAE;AAAA,MAC5B;AAAA,IACF,GAAG,CAAC,MAAM,cAAc,MAAM,uBAAuB,MAAM,oBAAoB,CAAC;AAAA,EAClF;AAEA,SACE;AAAA,IAAC,yBAAyB;AAAA,IAAzB;AAAA,MACC,OAAO,QAAQ,MAAM;AACnB,eAAO;AAAA,UACL,cAAc,MAAM;AAAA,QACtB;AAAA,MAEF,GAAG,CAAC,CAAC;AAAA,MAEL;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,MAAM;AAAA,UACjB,MAAM,MAAM;AAAA,UACZ,gBAAgB,MAAM,wBAAwB,QAAQ;AAAA,UAEtD,SAAO;AAAA,UAEN,gBAAM;AAAA;AAAA,MACT;AAAA;AAAA,EACF;AAEJ;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/web",
3
- "version": "1.2.8",
3
+ "version": "1.2.10",
4
4
  "source": "src/index.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -27,20 +27,20 @@
27
27
  "reset.css"
28
28
  ],
29
29
  "dependencies": {
30
- "@tamagui/compose-refs": "^1.2.8",
31
- "@tamagui/constants": "^1.2.8",
32
- "@tamagui/helpers": "^1.2.8",
33
- "@tamagui/normalize-css-color": "^1.2.8",
34
- "@tamagui/use-did-finish-ssr": "^1.2.8",
35
- "@tamagui/use-event": "^1.2.8",
36
- "@tamagui/use-force-update": "^1.2.8"
30
+ "@tamagui/compose-refs": "^1.2.10",
31
+ "@tamagui/constants": "^1.2.10",
32
+ "@tamagui/helpers": "^1.2.10",
33
+ "@tamagui/normalize-css-color": "^1.2.10",
34
+ "@tamagui/use-did-finish-ssr": "^1.2.10",
35
+ "@tamagui/use-event": "^1.2.10",
36
+ "@tamagui/use-force-update": "^1.2.10"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "react": "*",
40
40
  "react-dom": "*"
41
41
  },
42
42
  "devDependencies": {
43
- "@tamagui/build": "^1.2.8",
43
+ "@tamagui/build": "^1.2.10",
44
44
  "@testing-library/react": "^13.4.0",
45
45
  "csstype": "^3.0.10",
46
46
  "react": "^18.2.0",
@@ -53,12 +53,12 @@
53
53
  "./reset.css": "./reset.css",
54
54
  ".": {
55
55
  "types": "./types/index.d.ts",
56
- "import": "./dist/esm/index.js",
56
+ "import": "./dist/esm/index.mjs",
57
57
  "require": "./dist/cjs/index.js"
58
58
  },
59
59
  "./inject-styles": {
60
60
  "types": "./types/inject-styles.d.ts",
61
- "import": "./dist/esm/inject-styles.js",
61
+ "import": "./dist/esm/inject-styles.mjs",
62
62
  "require": "./dist/cjs/inject-styles.js"
63
63
  }
64
64
  },
@@ -429,13 +429,14 @@ export function createComponent<
429
429
 
430
430
  // these can ultimately be for DOM, react-native-web views, or animated views
431
431
  // so the type is pretty loose
432
- let viewProps: Record<string, any>
432
+ let viewProps = nonTamaguiProps
433
433
 
434
- // if react-native-web view just pass all props down
435
- if (process.env.TAMAGUI_TARGET === 'web' && !isReactNative && !asChild) {
436
- viewProps = hooks.usePropsTransform?.(elementType, viewPropsIn, hostRef)
437
- } else {
438
- viewProps = nonTamaguiProps
434
+ // hook for transforming props
435
+ if (process.env.TAMAGUI_TARGET === 'web' && !isReactNative) {
436
+ const nextProps = hooks.usePropsTransform?.(elementType, nonTamaguiProps, hostRef)
437
+ if (!asChild) {
438
+ viewProps = nextProps
439
+ }
439
440
  }
440
441
 
441
442
  viewProps.ref = useComposedRefs(hostRef as any, forwardedRef)
@@ -1 +1 @@
1
- {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAUN,MAAM,OAAO,CAAA;AAiBd,OAAO,EACL,SAAS,EACT,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAEhB,qBAAqB,EAErB,cAAc,EAIf,MAAM,SAAS,CAAA;AAmBhB,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAA;AAeD,eAAO,MAAM,QAAQ,eAAsB,CAAA;AA8B3C,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,GAAG,EAAE,EACtC,GAAG,GAAG,cAAc,EACpB,SAAS,GAAG,KAAK,EAEjB,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,EACpD,eAAe,CAAC,EAAE,iBAAiB,4DAkwBpC;AAGD,eAAO,MAAM,QAAQ;YAAW;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;;CAEjD,CAAA;AAMD,eAAO,MAAM,MAAM,0DA8CjB,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBAiGxD"}
1
+ {"version":3,"file":"createComponent.d.ts","sourceRoot":"","sources":["../src/createComponent.tsx"],"names":[],"mappings":"AAQA,OAAO,KAUN,MAAM,OAAO,CAAA;AAiBd,OAAO,EACL,SAAS,EACT,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAEhB,qBAAqB,EAErB,cAAc,EAIf,MAAM,SAAS,CAAA;AAmBhB,eAAO,MAAM,qBAAqB,EAAE,qBAMnC,CAAA;AAeD,eAAO,MAAM,QAAQ,eAAsB,CAAA;AA8B3C,wBAAgB,eAAe,CAC7B,kBAAkB,SAAS,MAAM,GAAG,EAAE,EACtC,GAAG,GAAG,cAAc,EACpB,SAAS,GAAG,KAAK,EAEjB,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,kBAAkB,EACpD,eAAe,CAAC,EAAE,iBAAiB,4DAmwBpC;AAGD,eAAO,MAAM,QAAQ;YAAW;QAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE;;CAEjD,CAAA;AAMD,eAAO,MAAM,MAAM,0DA8CjB,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,mBAiGxD"}