@tamagui/core 1.0.1-beta.226 → 1.0.1-beta.228

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 (135) hide show
  1. package/dist/cjs/constants/platform.js +65 -0
  2. package/dist/cjs/constants/platform.js.map +7 -0
  3. package/dist/cjs/constants/platform.native.js +62 -0
  4. package/dist/cjs/constants/platform.native.js.map +7 -0
  5. package/dist/cjs/createComponent.js +22 -38
  6. package/dist/cjs/createComponent.js.map +2 -2
  7. package/dist/cjs/createVariable.js +1 -1
  8. package/dist/cjs/createVariable.js.map +2 -2
  9. package/dist/cjs/helpers/ThemeManager.js +19 -12
  10. package/dist/cjs/helpers/ThemeManager.js.map +3 -3
  11. package/dist/cjs/helpers/ThemeManager.test.js +16 -0
  12. package/dist/cjs/helpers/ThemeManager.test.js.map +2 -2
  13. package/dist/cjs/helpers/assignNativePropsToWeb.js +188 -0
  14. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +7 -0
  15. package/dist/cjs/helpers/assignNativePropsToWeb.native.js +30 -0
  16. package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +7 -0
  17. package/dist/cjs/helpers/calc.js +71 -0
  18. package/dist/cjs/helpers/calc.js.map +7 -0
  19. package/dist/cjs/helpers/createPropMapper.js +3 -5
  20. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  21. package/dist/cjs/helpers/createShallowUpdate.js +44 -0
  22. package/dist/cjs/helpers/createShallowUpdate.js.map +7 -0
  23. package/dist/cjs/helpers/getFont.js +66 -0
  24. package/dist/cjs/helpers/getFont.js.map +7 -0
  25. package/dist/cjs/helpers/getSplitStyles.js +85 -67
  26. package/dist/cjs/helpers/getSplitStyles.js.map +3 -3
  27. package/dist/cjs/helpers/getStackSize.js +46 -0
  28. package/dist/cjs/helpers/getStackSize.js.map +7 -0
  29. package/dist/cjs/helpers/normalizeColor.js +2 -2
  30. package/dist/cjs/helpers/normalizeColor.js.map +2 -2
  31. package/dist/cjs/helpers/startTransition.js +36 -0
  32. package/dist/cjs/helpers/startTransition.js.map +7 -0
  33. package/dist/cjs/helpers/timer.js +35 -0
  34. package/dist/cjs/helpers/timer.js.map +7 -0
  35. package/dist/cjs/helpers/validate.js +2 -0
  36. package/dist/cjs/helpers/validate.js.map +7 -0
  37. package/dist/cjs/hooks/useConstant.js +39 -0
  38. package/dist/cjs/hooks/useConstant.js.map +7 -0
  39. package/dist/cjs/hooks/useIsMounted.js +40 -0
  40. package/dist/cjs/hooks/useIsMounted.js.map +7 -0
  41. package/dist/cjs/hooks/useIsSSR.js +46 -0
  42. package/dist/cjs/hooks/useIsSSR.js.map +7 -0
  43. package/dist/cjs/hooks/usePressable.js +36 -0
  44. package/dist/cjs/hooks/usePressable.js.map +7 -0
  45. package/dist/cjs/hooks/useTheme.js +24 -20
  46. package/dist/cjs/hooks/useTheme.js.map +3 -3
  47. package/dist/cjs/hooks/useUnmountEffect.js +32 -0
  48. package/dist/cjs/hooks/useUnmountEffect.js.map +7 -0
  49. package/dist/cjs/injectStyles.js +40 -0
  50. package/dist/cjs/injectStyles.js.map +7 -0
  51. package/dist/cjs/styled.js +0 -10
  52. package/dist/cjs/styled.js.map +2 -2
  53. package/dist/cjs/types.js.map +1 -1
  54. package/dist/cjs/views/Theme.js +5 -9
  55. package/dist/cjs/views/Theme.js.map +2 -2
  56. package/dist/cjs/views/ThemeInverse.js +18 -25
  57. package/dist/cjs/views/ThemeInverse.js.map +2 -2
  58. package/dist/cjs/views/ThemeReset.js +12 -12
  59. package/dist/cjs/views/ThemeReset.js.map +2 -2
  60. package/dist/esm/constants/platform.js +30 -0
  61. package/dist/esm/constants/platform.js.map +7 -0
  62. package/dist/esm/constants/platform.native.js +28 -0
  63. package/dist/esm/constants/platform.native.js.map +7 -0
  64. package/dist/esm/createComponent.js +22 -38
  65. package/dist/esm/createComponent.js.map +2 -2
  66. package/dist/esm/createVariable.js +1 -1
  67. package/dist/esm/createVariable.js.map +2 -2
  68. package/dist/esm/helpers/ThemeManager.js +14 -7
  69. package/dist/esm/helpers/ThemeManager.js.map +2 -2
  70. package/dist/esm/helpers/ThemeManager.test.js +16 -0
  71. package/dist/esm/helpers/ThemeManager.test.js.map +2 -2
  72. package/dist/esm/helpers/assignNativePropsToWeb.js +164 -0
  73. package/dist/esm/helpers/assignNativePropsToWeb.js.map +7 -0
  74. package/dist/esm/helpers/assignNativePropsToWeb.native.js +6 -0
  75. package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +7 -0
  76. package/dist/esm/helpers/calc.js +47 -0
  77. package/dist/esm/helpers/calc.js.map +7 -0
  78. package/dist/esm/helpers/createPropMapper.js +3 -5
  79. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  80. package/dist/esm/helpers/createShallowUpdate.js +20 -0
  81. package/dist/esm/helpers/createShallowUpdate.js.map +7 -0
  82. package/dist/esm/helpers/getFont.js +42 -0
  83. package/dist/esm/helpers/getFont.js.map +7 -0
  84. package/dist/esm/helpers/getSplitStyles.js +85 -67
  85. package/dist/esm/helpers/getSplitStyles.js.map +3 -3
  86. package/dist/esm/helpers/getStackSize.js +22 -0
  87. package/dist/esm/helpers/getStackSize.js.map +7 -0
  88. package/dist/esm/helpers/normalizeColor.js +1 -1
  89. package/dist/esm/helpers/normalizeColor.js.map +1 -1
  90. package/dist/esm/helpers/startTransition.js +6 -0
  91. package/dist/esm/helpers/startTransition.js.map +7 -0
  92. package/dist/esm/helpers/timer.js +11 -0
  93. package/dist/esm/helpers/timer.js.map +7 -0
  94. package/dist/esm/helpers/validate.js +1 -0
  95. package/dist/esm/helpers/validate.js.map +7 -0
  96. package/dist/esm/hooks/useConstant.js +15 -0
  97. package/dist/esm/hooks/useConstant.js.map +7 -0
  98. package/dist/esm/hooks/useIsMounted.js +16 -0
  99. package/dist/esm/hooks/useIsMounted.js.map +7 -0
  100. package/dist/esm/hooks/useIsSSR.js +22 -0
  101. package/dist/esm/hooks/useIsSSR.js.map +7 -0
  102. package/dist/esm/hooks/usePressable.js +12 -0
  103. package/dist/esm/hooks/usePressable.js.map +7 -0
  104. package/dist/esm/hooks/useTheme.js +24 -20
  105. package/dist/esm/hooks/useTheme.js.map +3 -3
  106. package/dist/esm/hooks/useUnmountEffect.js +8 -0
  107. package/dist/esm/hooks/useUnmountEffect.js.map +7 -0
  108. package/dist/esm/injectStyles.js +16 -0
  109. package/dist/esm/injectStyles.js.map +7 -0
  110. package/dist/esm/styled.js +0 -10
  111. package/dist/esm/styled.js.map +2 -2
  112. package/dist/esm/views/Theme.js +5 -9
  113. package/dist/esm/views/Theme.js.map +2 -2
  114. package/dist/esm/views/ThemeInverse.js +17 -23
  115. package/dist/esm/views/ThemeInverse.js.map +2 -2
  116. package/dist/esm/views/ThemeReset.js +12 -12
  117. package/dist/esm/views/ThemeReset.js.map +2 -2
  118. package/package.json +13 -13
  119. package/src/createComponent.tsx +22 -81
  120. package/src/createVariable.ts +1 -1
  121. package/src/helpers/ThemeManager.test.tsx +17 -0
  122. package/src/helpers/ThemeManager.tsx +29 -14
  123. package/src/helpers/createPropMapper.ts +4 -5
  124. package/src/helpers/getSplitStyles.tsx +130 -91
  125. package/src/helpers/normalizeColor.ts +1 -1
  126. package/src/helpers/timer.ts +9 -0
  127. package/src/hooks/useTheme.tsx +29 -22
  128. package/src/styled.tsx +0 -12
  129. package/src/types.tsx +2 -5
  130. package/src/views/Theme.tsx +5 -9
  131. package/types/helpers/ThemeManager.d.ts +2 -2
  132. package/types/helpers/getSplitStyles.d.ts +22 -6
  133. package/types/helpers/timer.d.ts +2 -0
  134. package/types/hooks/useTheme.d.ts +0 -1
  135. package/types/types.d.ts +1 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createComponent.tsx"],
4
- "sourcesContent": ["import { useComposedRefs } from '@tamagui/compose-refs'\nimport { isClient, isRSC, isServer, isWeb, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport {\n composeEventHandlers,\n stylePropsTransform,\n stylePropsView,\n validPseudoKeys,\n validStyles,\n} from '@tamagui/helpers'\nimport { useResponderEvents } from '@tamagui/react-native-use-responder-events'\nimport type { ViewStyle } from '@tamagui/types-react-native'\nimport React, {\n Children,\n Fragment,\n RefObject,\n createElement,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from 'react'\n\nimport { onConfiguredOnce } from './config'\nimport { stackDefaultStyles } from './constants/constants'\nimport { FontLanguageContext } from './contexts/FontLanguageContext'\nimport { TextAncestorContext } from './contexts/TextAncestorContext'\nimport { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'\nimport { getRect } from './helpers/getRect'\nimport { getSubStyle, useSplitStyles } from './helpers/getSplitStyles'\nimport { getAllSelectors } from './helpers/insertStyleRule'\nimport { mergeProps } from './helpers/mergeProps'\nimport { mergeTransform } from './helpers/mergeTransform'\nimport { proxyThemeVariables } from './helpers/proxyThemeVariables'\nimport { useShallowSetState } from './helpers/useShallowSetState'\nimport { measureLayout, useElementLayout } from './hooks/useElementLayout'\nimport { addMediaQueryListener, getInitialMediaState } from './hooks/useMedia'\nimport { useServerRef, useServerState } from './hooks/useServerHooks'\nimport { getThemeIsNewTheme, getThemeManager, useTheme } from './hooks/useTheme'\nimport {\n DebugProp,\n SpaceDirection,\n SpaceTokens,\n SpacerProps,\n StaticConfig,\n StaticConfigParsed,\n StylableComponent,\n TamaguiComponent,\n TamaguiComponentState,\n TamaguiConfig,\n TamaguiElement,\n TamaguiInternalConfig,\n UseAnimationHook,\n UseAnimationProps,\n} from './types'\nimport { usePressability } from './vendor/Pressability'\nimport { Slot, mergeEvent } from './views/Slot'\nimport { wrapThemeManagerContext } from './views/Theme'\n\n// let t\n// import { timer } from '@tamagui/timer'\n// if (true || process.env.ANALYZE) {\n// t = require().timer()\n// setTimeout(() => {\n// const out = t.print()\n// if (isClient) {\n// alert(out)\n// }\n// }, 2000)\n// }\n\n// this appears to fix expo / babel not picking this up sometimes? really odd\nprocess.env.TAMAGUI_TARGET\n\n/**\n * All things that need one-time setup after createTamagui is called\n */\nlet defaultComponentState: TamaguiComponentState | null = null\nlet defaultComponentStateMounted: TamaguiComponentState | null = null\nlet tamaguiConfig: TamaguiInternalConfig\nlet AnimatedText: any\nlet AnimatedView: any\nlet initialTheme: any\n\nexport const mouseUps = new Set<Function>()\nif (typeof document !== 'undefined') {\n const cancelTouches = () => {\n mouseUps.forEach((x) => x())\n mouseUps.clear()\n }\n addEventListener('mouseup', cancelTouches)\n addEventListener('touchend', cancelTouches)\n addEventListener('touchcancel', cancelTouches)\n}\n\n// mutates\nfunction mergeShorthands({ defaultProps }: StaticConfigParsed, { shorthands }: TamaguiConfig) {\n // they are defined in correct order already { ...parent, ...child }\n for (const key of Object.keys(defaultProps)) {\n defaultProps[shorthands[key] || key] = defaultProps[key]\n }\n}\n\n/**\n * Only on native do we need the actual underlying View/Text\n * On the web we avoid react-native altogether in core.\n */\nlet BaseText: any\nlet BaseView: any\nif (process.env.TAMAGUI_TARGET === 'native') {\n const native = require('react-native')\n BaseText = native.Text || native.default.Text\n BaseView = native.View || native.default.View\n}\n\nexport function createComponent<\n ComponentPropTypes extends Object = {},\n Ref = TamaguiElement,\n BaseProps = never\n>(configIn: Partial<StaticConfig> | StaticConfigParsed, ParentComponent?: StylableComponent) {\n const staticConfig = (() => {\n const next = extendStaticConfig(configIn, ParentComponent)\n if ('parsed' in next) {\n return next\n } else {\n return parseStaticConfig(next)\n }\n })()\n\n const defaultComponentClassName = `is_${staticConfig.componentName}`\n let defaultNativeStyle: any\n let tamaguiDefaultProps: any\n let defaultTag: string | undefined\n\n // see onConfiguredOnce below which attaches a name then to this component\n const component = forwardRef<Ref, ComponentPropTypes>((propsIn: any, forwardedRef) => {\n // const time = t.start({ quiet: true })\n\n // React inserts default props after your props for some reason...\n // order important so we do loops, you can't just spread because JS does weird things\n let props: any\n if (tamaguiDefaultProps && !propsIn.asChild) {\n props = mergeProps(tamaguiDefaultProps, propsIn)[0]\n } else {\n props = propsIn\n }\n\n // time`mergeProps`\n\n const debugProp = props['debug'] as DebugProp\n const { Component, isText, isZStack } = staticConfig\n const componentName = props.componentName || staticConfig.componentName\n const componentClassName = props.asChild\n ? ''\n : props.componentName\n ? `is_${props.componentName}`\n : defaultComponentClassName\n\n /**\n * Component state for tracking animations, pseudos\n */\n const animationsConfig = tamaguiConfig.animations\n const useAnimations = animationsConfig?.useAnimations as UseAnimationHook | undefined\n const avoidClassesWhileAnimating = animationsConfig.isReactNative\n const hasEnterStyle = !!props.enterStyle\n const needsMount = Boolean((isWeb ? isClient : true) && (hasEnterStyle || props.animation))\n const states = useServerState<TamaguiComponentState>(\n needsMount ? defaultComponentState! : defaultComponentStateMounted!\n )\n\n const state = propsIn.forceStyle ? { ...states[0], [propsIn.forceStyle]: true } : states[0]\n const setState = states[1]\n const setStateShallow = useShallowSetState(setState, debugProp, componentName)\n\n // conditional but if ever true stays true\n // [animated, inversed]\n const stateRef = useRef(\n undefined as any as {\n hasAnimated?: boolean\n hasThemeInversed?: boolean\n hasProvidedThemeManager?: boolean\n themeShouldReset?: boolean\n }\n )\n stateRef.current ??= {}\n\n const isAnimated = (() => {\n const next = !!(useAnimations && props.animation)\n if (next && !stateRef.current.hasAnimated) {\n stateRef.current.hasAnimated = true\n }\n return next || stateRef.current.hasAnimated\n })()\n\n const usePresence = tamaguiConfig.animations?.usePresence\n const presence = !isRSC && isAnimated ? usePresence() : null\n\n // set enter/exit variants onto our new props object\n if (isAnimated && presence) {\n const presenceState = presence[2]\n if (presenceState) {\n if (presenceState.enterVariant) props[presenceState.enterVariant] = true\n if (presenceState.exitVariant) props[presenceState.exitVariant] = true\n }\n }\n\n const isReactNative = Boolean(\n staticConfig.isReactNative || (isAnimated && tamaguiConfig.animations.isReactNative)\n )\n\n if (process.env.NODE_ENV === 'development') {\n if (debugProp) {\n const name = `${\n componentName || Component?.displayName || Component?.name || '[Unnamed Component]'\n }`\n const type = isReactNative ? '(rnw)' : ''\n const dataIs = propsIn['data-is'] || ''\n const banner = `${name}${dataIs ? ` ${dataIs}` : ''} ${type}`\n // eslint-disable-next-line no-console\n console.group(`%c ${banner}`, 'background: yellow;')\n if (!isServer) {\n // eslint-disable-next-line no-console\n console.log(`state`, state)\n }\n }\n }\n\n const shouldAvoidClasses =\n !isWeb || !!(props.animation && avoidClassesWhileAnimating) || !staticConfig.acceptsClassName\n const shouldForcePseudo = !!propsIn.forceStyle\n const noClassNames = shouldAvoidClasses || shouldForcePseudo\n\n const theme = useTheme({\n name: props.theme,\n componentName,\n reset: props.reset,\n inverse: props.themeInverse,\n // @ts-expect-error internal use only\n disable: props['data-themeable'],\n debug: props.debug,\n })\n const themeManager = getThemeManager(theme)\n const themeIsNew = getThemeIsNewTheme(theme)\n\n const shouldSetMounted = needsMount && state.unmounted\n const setMounted = shouldSetMounted\n ? () => {\n // for some reason without some small delay it doesn't animate css\n setTimeout(\n () => {\n setStateShallow({\n unmounted: false,\n })\n },\n isWeb ? 10 : 0\n )\n }\n : undefined\n\n const hasTextAncestor = !!(isWeb && isText ? useContext(TextAncestorContext) : false)\n const languageContext = isRSC ? null : useContext(FontLanguageContext)\n const isDisabled = props.disabled ?? props.accessibilityState?.disabled\n\n const isTaggable = !Component || typeof Component === 'string'\n // default to tag, fallback to component (when both strings)\n const element = isWeb\n ? isTaggable\n ? props.tag || defaultTag || Component\n : Component\n : Component\n\n const BaseTextComponent = BaseText || element || 'span'\n const BaseViewComponent = BaseView || element || (hasTextAncestor ? 'span' : 'div')\n let elementType = isText\n ? (isAnimated ? AnimatedText : null) || BaseTextComponent\n : (isAnimated ? AnimatedView : null) || BaseViewComponent\n\n elementType = Component || elementType\n const isStringElement = typeof elementType === 'string'\n\n // time`setupStateConf`\n\n const isExiting = presence?.[0] === false\n const splitStyles = useSplitStyles(\n props,\n staticConfig,\n theme,\n {\n ...state,\n noClassNames,\n dynamicStylesInline: noClassNames,\n hasTextAncestor,\n resolveVariablesAs: 'value',\n isExiting,\n },\n null,\n languageContext || undefined,\n elementType,\n debugProp\n )\n\n // time`splitStyles`\n\n const hostRef = useServerRef<TamaguiElement>(null)\n\n // animation setup\n const isAnimatedReactNativeWeb = isAnimated && avoidClassesWhileAnimating\n\n if (process.env.NODE_ENV === 'development') {\n if (!process.env.TAMAGUI_TARGET) {\n // eslint-disable-next-line no-console\n console.error(`No process.env.TAMAGUI_TARGET set, please set it to \"native\" or \"web\".`)\n }\n\n if (debugProp) {\n // eslint-disable-next-line no-console\n console.groupCollapsed('props')\n // eslint-disable-next-line no-console\n console.log('props in', propsIn, 'mapped to', props, 'in order', Object.keys(props))\n // eslint-disable-next-line no-console\n console.log('splitStyles', splitStyles)\n // eslint-disable-next-line no-console\n console.log('className', Object.values(splitStyles.classNames))\n if (isClient) {\n // eslint-disable-next-line no-console\n console.log('ref', hostRef, '(click to view)')\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n if (debugProp === 'break') {\n // eslint-disable-next-line no-debugger\n debugger\n }\n }\n }\n\n const {\n viewProps: viewPropsIn,\n pseudos,\n medias,\n style: splitStylesStyle,\n classNames,\n mediaKeys,\n } = splitStyles\n\n const propsWithAnimation = props as UseAnimationProps\n\n // once you set animation prop don't remove it, you can set to undefined/false\n // reason is animations are heavy - no way around it, and must be run inline here (\uD83D\uDE45 loading as a sub-component)\n let animationStyles: any\n if (!isRSC && isAnimated && useAnimations) {\n const animations = useAnimations({\n props: propsWithAnimation,\n style: splitStylesStyle,\n presence,\n state,\n pseudos,\n onDidAnimate: props.onDidAnimate,\n hostRef,\n staticConfig,\n })\n if (animations) {\n animationStyles = animations.style\n }\n }\n\n // time`animations`\n\n // media queries\n useIsomorphicLayoutEffect(() => {\n if (!mediaKeys.length) return\n const disposers: any[] = []\n for (const key of mediaKeys) {\n disposers.push(\n addMediaQueryListener(key, (next: boolean) => {\n setState((prev) => {\n if (prev.mediaState![key] !== next) {\n return {\n ...prev,\n mediaState: getMediaStateObject({\n ...prev.mediaState,\n [key]: next,\n }),\n }\n }\n return prev\n })\n })\n )\n }\n return () => {\n for (const disposer of disposers) {\n disposer()\n }\n }\n }, [mediaKeys.join(',')])\n\n const {\n hitSlop,\n asChild,\n children,\n onPress,\n onPressIn,\n onPressOut,\n onHoverIn,\n onHoverOut,\n themeShallow,\n space: spaceProp,\n spaceDirection: _spaceDirection,\n disabled: disabledProp,\n onMouseUp,\n onMouseDown,\n onMouseEnter,\n onMouseLeave,\n hrefAttrs,\n separator,\n // ignore from here on out\n forceStyle: _forceStyle,\n // @ts-ignore for next/link compat etc\n onClick,\n theme: _themeProp,\n // @ts-ignore\n defaultVariants,\n\n ...nonTamaguiProps\n } = viewPropsIn\n\n const disabled =\n (props.accessibilityState != null && props.accessibilityState.disabled === true) ||\n props.accessibilityDisabled\n\n // these can ultimately be for DOM, react-native-web views, or animated views\n // so the type is pretty loose\n let viewProps: Record<string, any>\n\n // if react-native-web view just pass all props down\n if (process.env.TAMAGUI_TARGET === 'web' && !isReactNative) {\n // otherwise replicate react-native-web functionality\n const {\n // event props\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n\n // android\n collapsable,\n focusable,\n\n // deprecated,\n accessible,\n accessibilityDisabled,\n\n onLayout,\n\n ...webProps\n } = nonTamaguiProps\n\n viewProps = webProps\n\n if (!isRSC) {\n usePlatformMethods(hostRef as RefObject<Element>)\n\n useElementLayout(hostRef as RefObject<Element>, onLayout as any)\n\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n } as any)\n }\n\n if (props.href != undefined && hrefAttrs != undefined) {\n const { download, rel, target } = hrefAttrs\n if (download != null) {\n viewProps.download = download\n }\n if (rel != null) {\n viewProps.rel = rel\n }\n if (typeof target === 'string') {\n viewProps.target = target.charAt(0) !== '_' ? '_' + target : target\n }\n }\n\n // FOCUS\n // \"focusable\" indicates that an element may be a keyboard tab-stop.\n const _focusable = focusable != undefined ? focusable : accessible\n const role = viewProps.role\n if (_focusable === false) {\n viewProps.tabIndex = '-1'\n }\n if (\n // These native elements are focusable by default\n elementType === 'a' ||\n elementType === 'button' ||\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n if (_focusable === false || accessibilityDisabled === true) {\n viewProps.tabIndex = '-1'\n }\n } else if (\n // These roles are made focusable by default\n role === 'button' ||\n role === 'checkbox' ||\n role === 'link' ||\n role === 'radio' ||\n role === 'textbox' ||\n role === 'switch'\n ) {\n if (_focusable !== false) {\n viewProps.tabIndex = '0'\n }\n }\n // Everything else must explicitly set the prop\n if (_focusable === true) {\n viewProps.tabIndex = '0'\n }\n } else {\n viewProps = nonTamaguiProps\n }\n\n viewProps.ref = useComposedRefs(hostRef as any, forwardedRef, setMounted)\n\n if (process.env.NODE_ENV === 'development' && !isText && isWeb && !staticConfig.isHOC) {\n Children.toArray(props.children).forEach((item) => {\n if (typeof item === 'string') {\n // eslint-disable-next-line no-console\n console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)\n }\n })\n }\n\n // time`webHooks`\n\n const unPress = useCallback(() => {\n setStateShallow({\n press: false,\n pressIn: false,\n })\n }, [setStateShallow])\n\n if (!isRSC) {\n useEffect(() => {\n return () => {\n mouseUps.delete(unPress)\n }\n }, [unPress])\n }\n\n let styles: Record<string, any>[]\n\n if (isStringElement && shouldAvoidClasses && !shouldForcePseudo) {\n styles = {\n ...defaultNativeStyle,\n ...(animationStyles ?? splitStylesStyle),\n ...medias,\n }\n } else {\n styles = [isWeb ? null : defaultNativeStyle, animationStyles ?? splitStylesStyle, medias]\n\n // ugly but for now...\n if (shouldForcePseudo) {\n const next = {}\n styles.forEach((style) => Object.assign(next, style))\n // @ts-ignore\n Object.assign(splitStyles.style, next)\n }\n }\n\n let fontFamily = isText ? splitStyles.fontFamily || staticConfig.defaultProps.fontFamily : null\n if (fontFamily && fontFamily[0] === '$') {\n fontFamily = fontFamily.slice(1)\n }\n const fontFamilyClassName = fontFamily ? `font_${fontFamily}` : ''\n\n const classList = [\n componentName ? componentClassName : '',\n fontFamilyClassName,\n themeIsNew ? theme.className : '',\n classNames ? Object.values(classNames).join(' ') : '',\n ]\n const className = classList.join(' ')\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n const style = animationStyles ?? splitStyles.style\n\n if (isAnimatedReactNativeWeb) {\n viewProps.style = style\n } else if (isReactNative) {\n const rnwStyle = { $$css: true }\n for (const name of className.split(' ')) {\n rnwStyle[name] = name\n }\n viewProps.style = [rnwStyle, ...(Array.isArray(style) ? style : [style])]\n if (process.env.NODE_ENV === 'development') {\n // turn debug data- props into dataSet in dev mode\n Object.keys(viewProps).forEach((key) => {\n if (key.startsWith('data-')) {\n viewProps.dataSet ??= {}\n viewProps.dataSet[key.replace('data-', '')] = viewProps[key]\n delete viewProps[key]\n }\n })\n }\n } else {\n viewProps.className = className\n viewProps.style = style\n }\n }\n\n if (process.env.TAMAGUI_TARGET === 'native') {\n // swap out the right family based on weight/style\n if (splitStyles.fontFamily) {\n const faceInfo = tamaguiConfig.fontsParsed[splitStyles.fontFamily]?.face\n if (faceInfo) {\n const [weight, style] = (() => {\n let weight: string | undefined\n let style: string | undefined\n for (let i = styles.length; i >= 0; i--) {\n weight ??= styles[i]?.fontWeight\n style ??= styles[i]?.fontStyle\n }\n return [weight || '400', style || 'normal'] as const\n })()\n const overrideFace = faceInfo[weight]?.[style]?.val\n if (overrideFace) {\n for (const style of styles) {\n if (style?.fontFamily) {\n style.fontFamily = overrideFace\n delete style.fontWeight\n delete style.fontStyle\n }\n }\n }\n }\n }\n\n // assign styles\n viewProps.style = styles\n }\n\n const runtimePressStyle = !disabled && noClassNames && pseudos?.pressStyle\n const attachPress = !!(runtimePressStyle || onPress || onPressOut || onPressIn || onClick)\n const runtimeHoverStyle = !disabled && noClassNames && pseudos?.hoverStyle\n const isHoverable =\n isWeb && !!(runtimeHoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave)\n\n const handlesPressEvents = !isWeb && !asChild\n\n // check presence rather than value to prevent reparenting bugs\n // allows for onPress={x ? function : undefined} without re-ordering dom\n const shouldAttach = asChild\n ? false\n : Boolean(\n attachPress ||\n isHoverable ||\n 'pressStyle' in props ||\n 'onPress' in props ||\n 'onPressIn' in props ||\n 'onPressOut' in props ||\n (isWeb &&\n ('hoverStyle' in props ||\n 'onHoverIn' in props ||\n 'onHoverOut' in props ||\n 'onMouseEnter' in props ||\n 'onMouseLeave' in props))\n )\n\n const events =\n shouldAttach && !isRSC && !isDisabled\n ? {\n onPressOut: attachPress\n ? (e) => {\n unPress()\n onPressOut?.(e)\n onMouseUp?.(e)\n }\n : undefined,\n ...(isHoverable && {\n onMouseEnter: isHoverable\n ? (e) => {\n const next: Partial<typeof state> = {}\n if (isHoverable) {\n next.hover = true\n }\n if (state.pressIn) {\n next.press = true\n }\n if (isHoverable || state.pressIn) {\n setStateShallow(next)\n }\n onHoverIn?.(e)\n onMouseEnter?.(e)\n }\n : undefined,\n onMouseLeave: isHoverable\n ? (e) => {\n const next: Partial<typeof state> = {}\n mouseUps.add(unPress)\n if (isHoverable) {\n next.hover = false\n }\n if (state.pressIn) {\n next.press = false\n next.pressIn = false\n }\n if (Object.keys(next).length) {\n setStateShallow(next)\n }\n onHoverOut?.(e)\n onMouseLeave?.(e)\n }\n : undefined,\n }),\n onPressIn: attachPress\n ? (e) => {\n setStateShallow({\n press: true,\n pressIn: true,\n hover: false,\n })\n onPressIn?.(e)\n onMouseDown?.(e)\n if (isWeb) {\n mouseUps.add(unPress)\n }\n }\n : undefined,\n onPress: attachPress\n ? (e) => {\n unPress()\n // @ts-ignore\n onClick?.(e)\n onPress?.(e)\n }\n : undefined,\n\n // replicating TouchableWithoutFeedback\n ...(!isWeb && {\n cancelable: !props.rejectResponderTermination,\n disabled: isDisabled,\n hitSlop: props.hitSlop,\n delayLongPress: props.delayLongPress,\n delayPressIn: props.delayPressIn,\n delayPressOut: props.delayPressOut,\n focusable: viewProps.focusable ?? true,\n minPressDuration: 0,\n }),\n }\n : null\n\n // time`events`\n\n let space = spaceProp\n\n // find space by media query\n if (state.mediaState && mediaKeys.length) {\n for (const key in state.mediaState) {\n if (key in state.mediaState && key in props && props[key].space !== undefined) {\n space = props[key].space\n }\n }\n }\n\n const themeShouldReset = Boolean(themeShallow && themeManager && themeIsNew)\n const shouldProvideThemeManager = themeShouldReset || (themeManager && themeIsNew)\n\n // memoize to avoid re-parenting\n if (shouldProvideThemeManager) {\n stateRef.current.hasProvidedThemeManager = true\n }\n if (themeShouldReset) {\n stateRef.current.themeShouldReset = true\n }\n\n const childEls =\n !children || asChild\n ? children\n : wrapThemeManagerContext(\n spacedChildren({\n separator,\n children,\n space,\n direction: props.spaceDirection || 'both',\n isZStack,\n }),\n // only set context if changed theme\n stateRef.current.hasProvidedThemeManager ? themeManager : undefined,\n stateRef.current.themeShouldReset\n )\n\n let content: any\n\n if (asChild) {\n elementType = Slot\n viewProps = {\n ...viewProps,\n onPress,\n onPressIn,\n onPressOut,\n }\n }\n\n // EVENTS native\n if (process.env.TAMAGUI_TARGET === 'native') {\n // add focus events\n const attachFocus = !!pseudos.focusStyle\n if (attachFocus) {\n viewProps.onFocus = mergeEvent(viewProps.onFocus, () => {\n setStateShallow({ focus: true })\n })\n viewProps.onBlur = mergeEvent(viewProps.onBlur, () => {\n setStateShallow({ focus: false })\n })\n }\n\n // use Pressability to get smooth unPress when you press + hold + move out\n // only ever create once, use .configure() to update later\n const pressability = usePressability(events ? { ...events, hitSlop } : {})\n if (attachPress && events) {\n for (const key in pressability) {\n const og = props[key]\n const val = pressability[key]\n viewProps[key] =\n og && !dontComposePressabilityKeys[key] ? composeEventHandlers(og, val) : val\n }\n }\n }\n\n content = createElement(elementType, viewProps, childEls)\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (events || isAnimatedReactNativeWeb) {\n content = (\n <span\n className={(isAnimatedReactNativeWeb ? className : '') + ` _dsp_contents`}\n {...(events && {\n onMouseEnter: events.onMouseEnter,\n onMouseLeave: events.onMouseLeave,\n onClick: events.onPress,\n onMouseDown: events.onPressIn,\n onMouseUp: events.onPressOut,\n onTouchStart: events.onPressIn,\n onTouchEnd: events.onPressOut,\n })}\n >\n {content}\n </span>\n )\n }\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG !== 'tamagui') {\n if (debugProp) {\n const element = typeof elementType === 'string' ? elementType : 'Component'\n // eslint-disable-next-line no-console\n console.groupCollapsed(`render <${element} /> with props`, viewProps)\n for (const key in viewProps) {\n // eslint-disable-next-line no-console\n console.log(key, viewProps[key])\n }\n // eslint-disable-next-line no-console\n console.log('children', content)\n // eslint-disable-next-line no-console\n console.groupEnd()\n if (typeof window !== 'undefined') {\n // prettier-ignore\n // eslint-disable-next-line no-console\n console.log({ state, shouldProvideThemeManager, isAnimated, isAnimatedReactNativeWeb, tamaguiDefaultProps, viewProps, splitStyles, animationStyles, handlesPressEvents, isStringElement, classNamesIn: props.className?.split(' '), classNamesOut: viewProps.className?.split(' '), events, shouldAttach, styles, pseudos, content, childEls, shouldAvoidClasses, avoidClasses: avoidClassesWhileAnimating, animation: props.animation, style: splitStylesStyle, defaultNativeStyle, ...(typeof window !== 'undefined' ? { theme, themeClassName: theme.className, staticConfig, tamaguiConfig, events, shouldAvoidClasses, shouldForcePseudo, classNames: Object.fromEntries(Object.entries(classNames).map(([k, v]) => [v, getAllSelectors()[v]])) } : null) })\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n\n // time`done`\n\n return content\n })\n\n if (staticConfig.componentName) {\n component.displayName = staticConfig.componentName\n }\n\n onConfiguredOnce((conf) => {\n // one time only setup\n if (!tamaguiConfig) {\n tamaguiConfig = conf\n\n if (!defaultComponentState) {\n defaultComponentState = {\n hover: false,\n press: false,\n pressIn: false,\n focus: false,\n unmounted: true,\n mediaState: getMediaStateObject(getInitialMediaState()),\n }\n defaultComponentStateMounted = {\n ...defaultComponentState,\n unmounted: false,\n }\n }\n\n if (tamaguiConfig.animations) {\n AnimatedText = tamaguiConfig.animations.Text\n AnimatedView = tamaguiConfig.animations.View\n }\n\n if (!initialTheme) {\n const next = conf.themes[Object.keys(conf.themes)[0]]\n initialTheme = proxyThemeVariables(next)\n if (process.env.NODE_ENV === 'development') {\n if (!initialTheme) {\n // eslint-disable-next-line no-console\n console.log(`Warning: Missing theme`)\n }\n }\n }\n }\n\n // per-component setup\n // do this to make sure shorthands don't duplicate with.. longhands\n mergeShorthands(staticConfig, tamaguiConfig)\n\n let defaultPropsIn = staticConfig.defaultProps || {}\n\n // because we run createTamagui after styled() defs, have to do some work here\n // gather defaults props one time and merge downwards\n // find last unprocessed and process\n const parentNames = [...(staticConfig.parentNames || []), staticConfig.componentName]\n\n if (tamaguiConfig.defaultProps && parentNames && staticConfig.componentName) {\n defaultPropsIn = mergeConfigDefaultProps(\n staticConfig.componentName,\n defaultPropsIn,\n tamaguiConfig.defaultProps,\n parentNames,\n tamaguiConfig\n )\n }\n\n const debug = defaultPropsIn['debug']\n\n // remove all classNames\n const [ourProps, ourClassNames] = mergeProps(defaultPropsIn, {})\n\n if (ourProps.tag) {\n defaultTag = ourProps.tag\n }\n\n const noClassNames = !staticConfig.acceptsClassName\n const { name, variants, defaultVariants, ...restProps } = ourProps\n\n // must preserve prop order\n // leave out className because we handle that already with initialSplitStyles.classNames\n // otherwise it confuses variant functions getting className props\n const [defaults, defaultsClassnames] = mergeProps(component.defaultProps as any, {\n ...defaultVariants,\n ...restProps,\n })\n\n defaultNativeStyle = {}\n\n const validStyles = staticConfig.validStyles || stylePropsView\n\n // split - keep variables on props to be processed using theme values at runtime (native)\n if (!isWeb) {\n for (const key in staticConfig.defaultProps) {\n const val = staticConfig.defaultProps[key]\n if (validPseudoKeys[key]) continue\n if ((typeof val === 'string' && val[0] === '$') || !validStyles[key]) {\n defaults[key] = val\n } else {\n defaultNativeStyle[key] = val\n }\n }\n }\n\n // set to global\n tamaguiDefaultProps = defaults\n\n // add debug logs\n if (process.env.NODE_ENV === 'development' && debug) {\n if (process.env.IS_STATIC !== 'is_static') {\n // prettier-ignore\n // eslint-disable-next-line no-console\n console.log(`\uD83D\uDC1B [${staticConfig.componentName || 'Component'}]`, { staticConfig, tamaguiDefaultProps, defaultNativeStyle, defaults, defaultPropsIn, defaultPropsKeyOrder: Object.keys(staticConfig.defaultProps), defaultPropsInKeyOrder: Object.keys(defaultPropsIn).map((k) => [k, defaultPropsIn[k]]), ourProps, ourClassNames, defaultsClassnames, defaultTag, noClassNames, })\n }\n }\n })\n\n let res: TamaguiComponent<ComponentPropTypes, Ref, BaseProps> = component as any\n\n if (configIn.memo) {\n res = memo(res) as any\n }\n\n res.staticConfig = {\n validStyles: staticConfig.validStyles || stylePropsView,\n ...staticConfig,\n }\n\n // res.extractable HoC\n res.extractable = (Component: any, conf?: Partial<StaticConfig>) => {\n Component.staticConfig = extendStaticConfig(\n {\n Component,\n ...conf,\n neverFlatten: true,\n isHOC: true,\n defaultProps: {\n ...Component.defaultProps,\n ...conf?.defaultProps,\n },\n },\n res\n )\n return Component\n }\n\n return res\n}\n\n// for elements to avoid spacing\nexport const Unspaced = (props: { children?: any }) => {\n return props.children\n}\nUnspaced['isUnspaced'] = true\n\n// dont used styled() here to avoid circular deps\n// keep inline to avoid circular deps\n\nexport const Spacer = createComponent<SpacerProps>({\n memo: true,\n componentName: 'Spacer',\n validStyles,\n\n defaultProps: {\n ...stackDefaultStyles,\n // avoid nesting issues\n tag: 'span',\n size: true,\n },\n\n variants: {\n size: {\n '...size': (size, { tokens }) => {\n size = size == true ? '$true' : size\n const sizePx = tokens.space[size] ?? size\n return {\n width: sizePx,\n height: sizePx,\n minWidth: sizePx,\n minHeight: sizePx,\n }\n },\n },\n\n flex: {\n true: {\n flexGrow: 1,\n },\n },\n\n direction: {\n horizontal: {\n height: 0,\n minHeight: 0,\n },\n vertical: {\n width: 0,\n minWidth: 0,\n },\n both: {},\n },\n } as const,\n})\n\nexport type SpacedChildrenProps = {\n isZStack?: boolean\n children?: React.ReactNode\n space?: SpaceTokens | number | null\n spaceFlex?: boolean | number\n direction?: SpaceDirection\n separator?: React.ReactNode\n}\n\nexport function spacedChildren({\n isZStack,\n children,\n space,\n direction,\n spaceFlex,\n separator,\n}: SpacedChildrenProps) {\n const hasSpace = !!(space || spaceFlex)\n const hasSeparator = !(separator === undefined || separator === null)\n if (!hasSpace && !hasSeparator && !isZStack) {\n return children\n }\n const childrenList = Children.toArray(children)\n if (childrenList.length <= 1 && !isZStack) {\n return childrenList\n }\n const final: React.ReactNode[] = []\n for (const [index, child] of childrenList.entries()) {\n const isEmpty =\n child === null || child === undefined || (Array.isArray(child) && child.length === 0)\n // push them all, but wrap some in Fragment\n if (isEmpty || !child || (child['key'] && !isZStack)) {\n final.push(child)\n } else {\n final.push(\n <Fragment key={index}>{isZStack ? <AbsoluteFill>{child}</AbsoluteFill> : child}</Fragment>\n )\n }\n\n // first child unspaced avoid insert space\n if (isUnspaced(child) && index === 0) continue\n // no spacing on ZStack\n if (isZStack) continue\n\n const next = childrenList[index + 1]\n\n if (next && !isUnspaced(next)) {\n if (separator) {\n if (hasSpace) {\n final.push(\n createSpacer({\n key: `_${index}_00tmgui`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n final.push(\n React.isValidElement(separator)\n ? React.cloneElement(separator, { key: `sep_${index}` })\n : separator\n )\n if (hasSpace) {\n final.push(\n createSpacer({\n key: `_${index}01tmgui`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n } else {\n final.push(\n createSpacer({\n key: `_${index}02tmgui`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n }\n }\n\n return final\n}\n\ntype CreateSpacerProps = SpacedChildrenProps & { key: string }\n\nfunction createSpacer({ key, direction, space, spaceFlex }: CreateSpacerProps) {\n return (\n // @ts-ignore this one blew up but the types seem better\n <Spacer\n key={key}\n size={space}\n direction={direction}\n {...(typeof spaceFlex !== 'undefined' && {\n flex: spaceFlex === true ? 1 : spaceFlex === false ? 0 : spaceFlex,\n })}\n />\n )\n}\n\nfunction isUnspaced(child: React.ReactNode) {\n // console.log('unspaced?', child, getMedia())\n return child?.['type']?.['isVisuallyHidden'] || child?.['type']?.['isUnspaced']\n}\n\nconst DefaultProps = new Map()\n\nfunction mergeConfigDefaultProps(\n name: string,\n props: Record<string, any>,\n configDefaults: Record<string, Object>,\n parentNames: (string | undefined)[],\n conf: TamaguiInternalConfig\n) {\n const len = parentNames.length\n let prev\n\n for (let i = 0; i < len; i++) {\n const n = parentNames[i]\n if (!n) continue\n if (DefaultProps.has(n)) {\n prev = DefaultProps.get(n)\n continue\n }\n const props = configDefaults[n]\n if (!props) {\n if (prev) {\n DefaultProps.set(n, prev)\n }\n continue\n }\n prev = mergeProps(prev || {}, props, false, conf.inverseShorthands)[0]\n DefaultProps.set(n, prev)\n }\n\n // overwrite the user defined defaults on top of internal defined defaults\n const ourDefaultsMerged = DefaultProps.get(name)\n if (ourDefaultsMerged) {\n return mergeProps(props, ourDefaultsMerged, false, conf.inverseShorthands)[0]\n }\n return props\n}\n\n// react native compat (web only)\nfunction usePlatformMethods(hostRef: RefObject<Element>) {\n useIsomorphicLayoutEffect(() => {\n const node = hostRef.current\n if (!node) return\n // @ts-ignore\n node.measure = (callback) => measureLayout(node, null, callback)\n // @ts-ignore\n node.measureLayout = (relativeToNode, success) => measureLayout(node, relativeToNode, success)\n // @ts-ignore\n node.measureInWindow = (callback) => {\n if (!node) return\n setTimeout(() => {\n const { height, left, top, width } = getRect(node as HTMLElement)!\n callback(left, top, width, height)\n }, 0)\n }\n }, [hostRef])\n}\n\nconst AbsoluteFill: any = createComponent({\n componentName: 'AbsoluteFill',\n defaultProps: {\n ...stackDefaultStyles,\n flexDirection: 'column',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n pointerEvents: 'box-none',\n },\n})\n\nconst dontComposePressabilityKeys = {\n onClick: true,\n}\n\nfunction getMediaStateObject(obj: Object) {\n return Object.fromEntries(Object.entries(obj).flatMap(([k, v]) => (v ? [[`$${k}`, v]] : [])))\n}\n\n// function ensureBaseHasDefaults(\n// base: ViewStyle,\n// pseudos: Record<string, ViewStyle | null | undefined>\n// ) {\n// const mergeIfNotExists = (key: string) => {\n// if (!base.transform?.some((x) => key in x)) {\n// mergeTransform(base, key, transformDefaults[key] || 0)\n// }\n// }\n\n// for (const name in pseudos) {\n// const pseudo = pseudos[name]\n// for (const key in pseudo) {\n// const val = pseudo[key]\n// if (key in stylePropsTransform) {\n// mergeIfNotExists(key)\n// } else if (key === 'transform') {\n// if (typeof val === 'string') continue\n// for (const t of val) {\n// mergeIfNotExists(Object.keys(t)[0])\n// }\n// } else {\n// if (key in baseDefaults && !(key in base)) {\n// base[key] = baseDefaults[key]\n// }\n// }\n// }\n// }\n// }\n\nconst baseDefaults = {\n opacity: 1,\n}\n\nconst transformDefaults = {\n opacity: 1,\n scale: 1,\n rotate: '0deg',\n rotateY: '0deg',\n rotateX: '0deg',\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useComposedRefs } from '@tamagui/compose-refs'\nimport { isClient, isRSC, isServer, isWeb, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport {\n composeEventHandlers,\n stylePropsTransform,\n stylePropsView,\n validPseudoKeys,\n validStyles,\n} from '@tamagui/helpers'\nimport { useResponderEvents } from '@tamagui/react-native-use-responder-events'\nimport type { ViewStyle } from '@tamagui/types-react-native'\nimport React, {\n Children,\n Fragment,\n RefObject,\n createElement,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from 'react'\n\nimport { onConfiguredOnce } from './config'\nimport { stackDefaultStyles } from './constants/constants'\nimport { FontLanguageContext } from './contexts/FontLanguageContext'\nimport { TextAncestorContext } from './contexts/TextAncestorContext'\nimport { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'\nimport { getRect } from './helpers/getRect'\nimport { getSubStyle, useSplitStyles } from './helpers/getSplitStyles'\nimport { getAllSelectors } from './helpers/insertStyleRule'\nimport { mergeProps } from './helpers/mergeProps'\nimport { mergeTransform } from './helpers/mergeTransform'\nimport { proxyThemeVariables } from './helpers/proxyThemeVariables'\nimport { useShallowSetState } from './helpers/useShallowSetState'\nimport { measureLayout, useElementLayout } from './hooks/useElementLayout'\nimport { addMediaQueryListener, getInitialMediaState } from './hooks/useMedia'\nimport { useServerRef, useServerState } from './hooks/useServerHooks'\nimport { getThemeIsNewTheme, getThemeManager, useTheme } from './hooks/useTheme'\nimport {\n DebugProp,\n SpaceDirection,\n SpaceTokens,\n SpacerProps,\n StaticConfig,\n StaticConfigParsed,\n StylableComponent,\n TamaguiComponent,\n TamaguiComponentState,\n TamaguiConfig,\n TamaguiElement,\n TamaguiInternalConfig,\n UseAnimationHook,\n UseAnimationProps,\n} from './types'\nimport { usePressability } from './vendor/Pressability'\nimport { Slot, mergeEvent } from './views/Slot'\nimport { wrapThemeManagerContext } from './views/Theme'\n\n// let t\n// import { timer } from '@tamagui/timer'\n// if (true || process.env.ANALYZE) {\n// t = require().timer()\n// setTimeout(() => {\n// const out = t.print()\n// if (isClient) {\n// alert(out)\n// }\n// }, 2000)\n// }\n\n// this appears to fix expo / babel not picking this up sometimes? really odd\nprocess.env.TAMAGUI_TARGET\n\n/**\n * All things that need one-time setup after createTamagui is called\n */\nlet defaultComponentState: TamaguiComponentState | null = null\nlet defaultComponentStateMounted: TamaguiComponentState | null = null\nlet tamaguiConfig: TamaguiInternalConfig\nlet AnimatedText: any\nlet AnimatedView: any\nlet initialTheme: any\n\nexport const mouseUps = new Set<Function>()\nif (typeof document !== 'undefined') {\n const cancelTouches = () => {\n mouseUps.forEach((x) => x())\n mouseUps.clear()\n }\n addEventListener('mouseup', cancelTouches)\n addEventListener('touchend', cancelTouches)\n addEventListener('touchcancel', cancelTouches)\n}\n\n// mutates\nfunction mergeShorthands({ defaultProps }: StaticConfigParsed, { shorthands }: TamaguiConfig) {\n // they are defined in correct order already { ...parent, ...child }\n for (const key of Object.keys(defaultProps)) {\n defaultProps[shorthands[key] || key] = defaultProps[key]\n }\n}\n\n/**\n * Only on native do we need the actual underlying View/Text\n * On the web we avoid react-native altogether in core.\n */\nlet BaseText: any\nlet BaseView: any\nif (process.env.TAMAGUI_TARGET === 'native') {\n const native = require('react-native')\n BaseText = native.Text || native.default.Text\n BaseView = native.View || native.default.View\n}\n\nexport function createComponent<\n ComponentPropTypes extends Object = {},\n Ref = TamaguiElement,\n BaseProps = never\n>(configIn: Partial<StaticConfig> | StaticConfigParsed, ParentComponent?: StylableComponent) {\n const staticConfig = (() => {\n const next = extendStaticConfig(configIn, ParentComponent)\n if ('parsed' in next) {\n return next\n } else {\n return parseStaticConfig(next)\n }\n })()\n\n const defaultComponentClassName = `is_${staticConfig.componentName}`\n let defaultNativeStyle: any\n let tamaguiDefaultProps: any\n let defaultTag: string | undefined\n\n // see onConfiguredOnce below which attaches a name then to this component\n const component = forwardRef<Ref, ComponentPropTypes>((propsIn: any, forwardedRef) => {\n // const time = t.start({ quiet: true })\n\n // React inserts default props after your props for some reason...\n // order important so we do loops, you can't just spread because JS does weird things\n let props: any\n if (tamaguiDefaultProps && !propsIn.asChild) {\n props = mergeProps(tamaguiDefaultProps, propsIn)[0]\n } else {\n props = propsIn\n }\n\n const debugProp = props['debug'] as DebugProp\n const { Component, isText, isZStack } = staticConfig\n const componentName = props.componentName || staticConfig.componentName\n const componentClassName = props.asChild\n ? ''\n : props.componentName\n ? `is_${props.componentName}`\n : defaultComponentClassName\n\n /**\n * Component state for tracking animations, pseudos\n */\n const animationsConfig = tamaguiConfig.animations\n const useAnimations = animationsConfig?.useAnimations as UseAnimationHook | undefined\n const avoidClassesWhileAnimating = animationsConfig.isReactNative\n const hasEnterStyle = !!props.enterStyle\n const needsMount = Boolean((isWeb ? isClient : true) && (hasEnterStyle || props.animation))\n const states = useServerState<TamaguiComponentState>(\n needsMount ? defaultComponentState! : defaultComponentStateMounted!\n )\n\n const state = propsIn.forceStyle ? { ...states[0], [propsIn.forceStyle]: true } : states[0]\n const setState = states[1]\n const setStateShallow = useShallowSetState(setState, debugProp, componentName)\n\n // conditional but if ever true stays true\n // [animated, inversed]\n const stateRef = useRef(\n undefined as any as {\n hasAnimated?: boolean\n hasThemeInversed?: boolean\n hasProvidedThemeManager?: boolean\n themeShouldReset?: boolean\n }\n )\n stateRef.current ??= {}\n\n const isAnimated = (() => {\n const next = !!(useAnimations && props.animation)\n if (next && !stateRef.current.hasAnimated) {\n stateRef.current.hasAnimated = true\n }\n return next || stateRef.current.hasAnimated\n })()\n\n const usePresence = tamaguiConfig.animations?.usePresence\n const presence = !isRSC && isAnimated ? usePresence() : null\n\n // set enter/exit variants onto our new props object\n if (isAnimated && presence) {\n const presenceState = presence[2]\n if (presenceState) {\n if (state.unmounted && presenceState.enterVariant) {\n props[presenceState.enterVariant] = true\n }\n if (!presenceState.isPresent && presenceState.exitVariant) {\n props[presenceState.exitVariant] = true\n }\n }\n }\n\n const isReactNative = Boolean(\n staticConfig.isReactNative || (isAnimated && tamaguiConfig.animations.isReactNative)\n )\n\n if (process.env.NODE_ENV === 'development') {\n if (debugProp) {\n const name = `${\n componentName || Component?.displayName || Component?.name || '[Unnamed Component]'\n }`\n const type = isReactNative ? '(rnw)' : ''\n const dataIs = propsIn['data-is'] || ''\n const banner = `${name}${dataIs ? ` ${dataIs}` : ''} ${type}`\n // eslint-disable-next-line no-console\n console.group(`%c ${banner}`, 'background: yellow;')\n if (!isServer) {\n // eslint-disable-next-line no-console\n console.log(`state`, state)\n }\n }\n }\n\n const shouldAvoidClasses =\n !isWeb || !!(props.animation && avoidClassesWhileAnimating) || !staticConfig.acceptsClassName\n const shouldForcePseudo = !!propsIn.forceStyle\n const noClassNames = shouldAvoidClasses || shouldForcePseudo\n\n const theme = useTheme({\n name: props.theme,\n componentName,\n reset: props.reset,\n inverse: props.themeInverse,\n // @ts-expect-error internal use only\n disable: props['data-themeable'],\n debug: props.debug,\n })\n const themeManager = getThemeManager(theme)\n const themeIsNew = getThemeIsNewTheme(theme)\n\n const shouldSetMounted = needsMount && state.unmounted\n const setMounted = shouldSetMounted\n ? () => {\n // for some reason without some small delay it doesn't animate css\n setTimeout(\n () => {\n setStateShallow({\n unmounted: false,\n })\n },\n isWeb ? 10 : 0\n )\n }\n : undefined\n\n const hasTextAncestor = !!(isWeb && isText ? useContext(TextAncestorContext) : false)\n const languageContext = isRSC ? null : useContext(FontLanguageContext)\n const isDisabled = props.disabled ?? props.accessibilityState?.disabled\n\n const isTaggable = !Component || typeof Component === 'string'\n // default to tag, fallback to component (when both strings)\n const element = isWeb\n ? isTaggable\n ? props.tag || defaultTag || Component\n : Component\n : Component\n\n const BaseTextComponent = BaseText || element || 'span'\n const BaseViewComponent = BaseView || element || (hasTextAncestor ? 'span' : 'div')\n let elementType = isText\n ? (isAnimated ? AnimatedText : null) || BaseTextComponent\n : (isAnimated ? AnimatedView : null) || BaseViewComponent\n\n elementType = Component || elementType\n const isStringElement = typeof elementType === 'string'\n\n const isExiting = presence?.[0] === false\n const splitStyles = useSplitStyles(\n props,\n staticConfig,\n theme,\n {\n ...state,\n noClassNames,\n dynamicStylesInline: noClassNames,\n hasTextAncestor,\n resolveVariablesAs: 'value',\n isExiting,\n },\n null,\n languageContext || undefined,\n elementType,\n debugProp\n )\n\n const hostRef = useServerRef<TamaguiElement>(null)\n\n // animation setup\n const isAnimatedReactNativeWeb = isAnimated && avoidClassesWhileAnimating\n\n if (process.env.NODE_ENV === 'development') {\n if (!process.env.TAMAGUI_TARGET) {\n // eslint-disable-next-line no-console\n console.error(`No process.env.TAMAGUI_TARGET set, please set it to \"native\" or \"web\".`)\n }\n\n if (debugProp) {\n // eslint-disable-next-line no-console\n console.groupCollapsed('props')\n // eslint-disable-next-line no-console\n console.log('props in', propsIn, 'mapped to', props, 'in order', Object.keys(props))\n // eslint-disable-next-line no-console\n console.log('splitStyles', splitStyles)\n // eslint-disable-next-line no-console\n console.log('className', Object.values(splitStyles.classNames))\n if (isClient) {\n // eslint-disable-next-line no-console\n console.log('ref', hostRef, '(click to view)')\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n if (debugProp === 'break') {\n // eslint-disable-next-line no-debugger\n debugger\n }\n }\n }\n\n const {\n viewProps: viewPropsIn,\n pseudos,\n medias,\n style: splitStylesStyle,\n classNames,\n mediaKeys,\n } = splitStyles\n\n const propsWithAnimation = props as UseAnimationProps\n\n // once you set animation prop don't remove it, you can set to undefined/false\n // reason is animations are heavy - no way around it, and must be run inline here (\uD83D\uDE45 loading as a sub-component)\n let animationStyles: any\n if (!isRSC && isAnimated && useAnimations) {\n const animations = useAnimations({\n props: propsWithAnimation,\n style: splitStylesStyle,\n presence,\n state,\n pseudos,\n onDidAnimate: props.onDidAnimate,\n hostRef,\n staticConfig,\n })\n if (animations) {\n animationStyles = animations.style\n }\n }\n\n // media queries\n useIsomorphicLayoutEffect(() => {\n const disposers = mediaKeys.map((key) => {\n return addMediaQueryListener(key, (next: boolean) => {\n setState((prev) => {\n if (prev.mediaState![key] !== next) {\n return {\n ...prev,\n mediaState: getMediaStateObject({\n ...prev.mediaState,\n [key]: next,\n }),\n }\n }\n return prev\n })\n })\n })\n return () => {\n disposers.forEach((d) => d())\n }\n }, [mediaKeys.join(',')])\n\n const {\n hitSlop,\n asChild,\n children,\n onPress,\n onPressIn,\n onPressOut,\n onHoverIn,\n onHoverOut,\n themeShallow,\n space: spaceProp,\n spaceDirection: _spaceDirection,\n disabled: disabledProp,\n onMouseUp,\n onMouseDown,\n onMouseEnter,\n onMouseLeave,\n hrefAttrs,\n separator,\n // ignore from here on out\n forceStyle: _forceStyle,\n // @ts-ignore for next/link compat etc\n onClick,\n theme: _themeProp,\n // @ts-ignore\n defaultVariants,\n\n ...nonTamaguiProps\n } = viewPropsIn\n\n const disabled =\n (props.accessibilityState != null && props.accessibilityState.disabled === true) ||\n props.accessibilityDisabled\n\n // these can ultimately be for DOM, react-native-web views, or animated views\n // so the type is pretty loose\n let viewProps: Record<string, any>\n\n // if react-native-web view just pass all props down\n if (process.env.TAMAGUI_TARGET === 'web' && !isReactNative) {\n // otherwise replicate react-native-web functionality\n const {\n // event props\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n\n // android\n collapsable,\n focusable,\n\n // deprecated,\n accessible,\n accessibilityDisabled,\n\n onLayout,\n\n ...webProps\n } = nonTamaguiProps\n\n viewProps = webProps\n\n if (!isRSC) {\n usePlatformMethods(hostRef as RefObject<Element>)\n\n useElementLayout(hostRef as RefObject<Element>, onLayout as any)\n\n useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n } as any)\n }\n\n if (props.href != undefined && hrefAttrs != undefined) {\n const { download, rel, target } = hrefAttrs\n if (download != null) {\n viewProps.download = download\n }\n if (rel != null) {\n viewProps.rel = rel\n }\n if (typeof target === 'string') {\n viewProps.target = target.charAt(0) !== '_' ? '_' + target : target\n }\n }\n\n // FOCUS\n // \"focusable\" indicates that an element may be a keyboard tab-stop.\n const _focusable = focusable != undefined ? focusable : accessible\n const role = viewProps.role\n if (_focusable === false) {\n viewProps.tabIndex = '-1'\n }\n if (\n // These native elements are focusable by default\n elementType === 'a' ||\n elementType === 'button' ||\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n if (_focusable === false || accessibilityDisabled === true) {\n viewProps.tabIndex = '-1'\n }\n } else if (\n // These roles are made focusable by default\n role === 'button' ||\n role === 'checkbox' ||\n role === 'link' ||\n role === 'radio' ||\n role === 'textbox' ||\n role === 'switch'\n ) {\n if (_focusable !== false) {\n viewProps.tabIndex = '0'\n }\n }\n // Everything else must explicitly set the prop\n if (_focusable === true) {\n viewProps.tabIndex = '0'\n }\n } else {\n viewProps = nonTamaguiProps\n }\n\n viewProps.ref = useComposedRefs(hostRef as any, forwardedRef, setMounted)\n\n if (process.env.NODE_ENV === 'development' && !isText && isWeb) {\n Children.toArray(props.children).forEach((item) => {\n if (typeof item === 'string') {\n // eslint-disable-next-line no-console\n console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)\n }\n })\n }\n\n const unPress = useCallback(() => {\n setStateShallow({\n press: false,\n pressIn: false,\n })\n }, [setStateShallow])\n\n if (!isRSC) {\n useEffect(() => {\n return () => {\n mouseUps.delete(unPress)\n }\n }, [unPress])\n }\n\n let styles: Record<string, any>[]\n\n if (isStringElement && shouldAvoidClasses && !shouldForcePseudo) {\n styles = {\n ...defaultNativeStyle,\n ...(animationStyles ?? splitStylesStyle),\n ...medias,\n }\n } else {\n styles = [isWeb ? null : defaultNativeStyle, animationStyles ?? splitStylesStyle, medias]\n\n // ugly but for now...\n if (shouldForcePseudo) {\n const next = {}\n styles.forEach((style) => Object.assign(next, style))\n // @ts-ignore\n Object.assign(splitStyles.style, next)\n }\n }\n\n let fontFamily = isText ? splitStyles.fontFamily || staticConfig.defaultProps.fontFamily : null\n if (fontFamily && fontFamily[0] === '$') {\n fontFamily = fontFamily.slice(1)\n }\n const fontFamilyClassName = fontFamily ? `font_${fontFamily}` : ''\n\n const classList = [\n componentName ? componentClassName : '',\n fontFamilyClassName,\n themeIsNew ? theme.className : '',\n classNames ? Object.values(classNames).join(' ') : '',\n ]\n const className = classList.join(' ')\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n const style = animationStyles ?? splitStyles.style\n\n if (isAnimatedReactNativeWeb) {\n viewProps.style = style\n } else if (isReactNative) {\n const rnwStyle = { $$css: true }\n for (const name of className.split(' ')) {\n rnwStyle[name] = name\n }\n viewProps.style = [rnwStyle, ...(Array.isArray(style) ? style : [style])]\n if (process.env.NODE_ENV === 'development') {\n // turn debug data- props into dataSet in dev mode\n Object.keys(viewProps).forEach((key) => {\n if (key.startsWith('data-')) {\n viewProps.dataSet ??= {}\n viewProps.dataSet[key.replace('data-', '')] = viewProps[key]\n delete viewProps[key]\n }\n })\n }\n } else {\n viewProps.className = className\n viewProps.style = style\n }\n }\n\n if (process.env.TAMAGUI_TARGET === 'native') {\n // swap out the right family based on weight/style\n if (splitStyles.fontFamily) {\n const faceInfo = tamaguiConfig.fontsParsed[splitStyles.fontFamily]?.face\n if (faceInfo) {\n const [weight, style] = (() => {\n let weight: string | undefined\n let style: string | undefined\n for (let i = styles.length; i >= 0; i--) {\n weight ??= styles[i]?.fontWeight\n style ??= styles[i]?.fontStyle\n }\n return [weight || '400', style || 'normal'] as const\n })()\n const overrideFace = faceInfo[weight]?.[style]?.val\n if (overrideFace) {\n for (const style of styles) {\n if (style?.fontFamily) {\n style.fontFamily = overrideFace\n delete style.fontWeight\n delete style.fontStyle\n }\n }\n }\n }\n }\n\n // assign styles\n viewProps.style = styles\n }\n\n const runtimePressStyle = !disabled && noClassNames && pseudos?.pressStyle\n const attachPress = !!(runtimePressStyle || onPress || onPressOut || onPressIn || onClick)\n const runtimeHoverStyle = !disabled && noClassNames && pseudos?.hoverStyle\n const isHoverable =\n isWeb && !!(runtimeHoverStyle || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave)\n\n const handlesPressEvents = !isWeb && !asChild\n\n // check presence rather than value to prevent reparenting bugs\n // allows for onPress={x ? function : undefined} without re-ordering dom\n const shouldAttach = asChild\n ? false\n : Boolean(\n attachPress ||\n isHoverable ||\n 'pressStyle' in props ||\n 'onPress' in props ||\n 'onPressIn' in props ||\n 'onPressOut' in props ||\n (isWeb &&\n ('hoverStyle' in props ||\n 'onHoverIn' in props ||\n 'onHoverOut' in props ||\n 'onMouseEnter' in props ||\n 'onMouseLeave' in props))\n )\n\n const events =\n shouldAttach && !isRSC && !isDisabled\n ? {\n onPressOut: attachPress\n ? (e) => {\n unPress()\n onPressOut?.(e)\n onMouseUp?.(e)\n }\n : undefined,\n ...(isHoverable && {\n onMouseEnter: isHoverable\n ? (e) => {\n const next: Partial<typeof state> = {}\n if (isHoverable) {\n next.hover = true\n }\n if (state.pressIn) {\n next.press = true\n }\n if (isHoverable || state.pressIn) {\n setStateShallow(next)\n }\n onHoverIn?.(e)\n onMouseEnter?.(e)\n }\n : undefined,\n onMouseLeave: isHoverable\n ? (e) => {\n const next: Partial<typeof state> = {}\n mouseUps.add(unPress)\n if (isHoverable) {\n next.hover = false\n }\n if (state.pressIn) {\n next.press = false\n next.pressIn = false\n }\n if (Object.keys(next).length) {\n setStateShallow(next)\n }\n onHoverOut?.(e)\n onMouseLeave?.(e)\n }\n : undefined,\n }),\n onPressIn: attachPress\n ? (e) => {\n setStateShallow({\n press: true,\n pressIn: true,\n hover: false,\n })\n onPressIn?.(e)\n onMouseDown?.(e)\n if (isWeb) {\n mouseUps.add(unPress)\n }\n }\n : undefined,\n onPress: attachPress\n ? (e) => {\n unPress()\n // @ts-ignore\n onClick?.(e)\n onPress?.(e)\n }\n : undefined,\n\n // replicating TouchableWithoutFeedback\n ...(!isWeb && {\n cancelable: !props.rejectResponderTermination,\n disabled: isDisabled,\n hitSlop: props.hitSlop,\n delayLongPress: props.delayLongPress,\n delayPressIn: props.delayPressIn,\n delayPressOut: props.delayPressOut,\n focusable: viewProps.focusable ?? true,\n minPressDuration: 0,\n }),\n }\n : null\n\n let space = spaceProp\n\n // find space by media query\n if (state.mediaState && mediaKeys.length) {\n for (const key in state.mediaState) {\n if (key in state.mediaState && key in props && props[key].space !== undefined) {\n space = props[key].space\n }\n }\n }\n\n const themeShouldReset = Boolean(themeShallow && themeManager && themeIsNew)\n const shouldProvideThemeManager = themeShouldReset || (themeManager && themeIsNew)\n\n // memoize to avoid re-parenting\n if (shouldProvideThemeManager) {\n stateRef.current.hasProvidedThemeManager = true\n }\n if (themeShouldReset) {\n stateRef.current.themeShouldReset = true\n }\n\n const childEls =\n !children || asChild\n ? children\n : wrapThemeManagerContext(\n spacedChildren({\n separator,\n children,\n space,\n direction: props.spaceDirection || 'both',\n isZStack,\n }),\n // only set context if changed theme\n stateRef.current.hasProvidedThemeManager ? themeManager : undefined,\n stateRef.current.themeShouldReset\n )\n\n let content: any\n\n if (asChild) {\n elementType = Slot\n viewProps = {\n ...viewProps,\n onPress,\n onPressIn,\n onPressOut,\n }\n }\n\n // EVENTS native\n if (process.env.TAMAGUI_TARGET === 'native') {\n // add focus events\n const attachFocus = !!pseudos.focusStyle\n if (attachFocus) {\n viewProps.onFocus = mergeEvent(viewProps.onFocus, () => {\n setStateShallow({ focus: true })\n })\n viewProps.onBlur = mergeEvent(viewProps.onBlur, () => {\n setStateShallow({ focus: false })\n })\n }\n\n // use Pressability to get smooth unPress when you press + hold + move out\n // only ever create once, use .configure() to update later\n const pressability = usePressability(events ? { ...events, hitSlop } : {})\n if (attachPress && events) {\n for (const key in pressability) {\n const og = props[key]\n const val = pressability[key]\n viewProps[key] =\n og && !dontComposePressabilityKeys[key] ? composeEventHandlers(og, val) : val\n }\n }\n }\n\n content = createElement(elementType, viewProps, childEls)\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (events || isAnimatedReactNativeWeb) {\n content = (\n <span\n className={(isAnimatedReactNativeWeb ? className : '') + ` _dsp_contents`}\n {...(events && {\n onMouseEnter: events.onMouseEnter,\n onMouseLeave: events.onMouseLeave,\n onClick: events.onPress,\n onMouseDown: events.onPressIn,\n onMouseUp: events.onPressOut,\n onTouchStart: events.onPressIn,\n onTouchEnd: events.onPressOut,\n })}\n >\n {content}\n </span>\n )\n }\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.DEBUG !== 'tamagui') {\n if (debugProp) {\n const element = typeof elementType === 'string' ? elementType : 'Component'\n // eslint-disable-next-line no-console\n console.groupCollapsed(`render <${element} /> with props`, viewProps)\n for (const key in viewProps) {\n // eslint-disable-next-line no-console\n console.log(key, viewProps[key])\n }\n // eslint-disable-next-line no-console\n console.log('children', content)\n // eslint-disable-next-line no-console\n console.groupEnd()\n if (typeof window !== 'undefined') {\n // prettier-ignore\n // eslint-disable-next-line no-console\n console.log({ state, shouldProvideThemeManager, isAnimated, isAnimatedReactNativeWeb, tamaguiDefaultProps, viewProps, splitStyles, animationStyles, handlesPressEvents, isStringElement, classNamesIn: props.className?.split(' '), classNamesOut: viewProps.className?.split(' '), events, shouldAttach, styles, pseudos, content, childEls, shouldAvoidClasses, avoidClasses: avoidClassesWhileAnimating, animation: props.animation, style: splitStylesStyle, defaultNativeStyle, ...(typeof window !== 'undefined' ? { theme, themeClassName: theme.className, staticConfig, tamaguiConfig, events, shouldAvoidClasses, shouldForcePseudo, classNames: Object.fromEntries(Object.entries(classNames).map(([k, v]) => [v, getAllSelectors()[v]])) } : null) })\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n\n return content\n })\n\n if (staticConfig.componentName) {\n component.displayName = staticConfig.componentName\n }\n\n onConfiguredOnce((conf) => {\n // one time only setup\n if (!tamaguiConfig) {\n tamaguiConfig = conf\n\n if (!defaultComponentState) {\n defaultComponentState = {\n hover: false,\n press: false,\n pressIn: false,\n focus: false,\n unmounted: true,\n mediaState: getMediaStateObject(getInitialMediaState()),\n }\n defaultComponentStateMounted = {\n ...defaultComponentState,\n unmounted: false,\n }\n }\n\n if (tamaguiConfig.animations) {\n AnimatedText = tamaguiConfig.animations.Text\n AnimatedView = tamaguiConfig.animations.View\n }\n\n if (!initialTheme) {\n const next = conf.themes[Object.keys(conf.themes)[0]]\n initialTheme = proxyThemeVariables(next)\n if (process.env.NODE_ENV === 'development') {\n if (!initialTheme) {\n // eslint-disable-next-line no-console\n console.log(`Warning: Missing theme`)\n }\n }\n }\n }\n\n // per-component setup\n // do this to make sure shorthands don't duplicate with.. longhands\n mergeShorthands(staticConfig, tamaguiConfig)\n\n let defaultPropsIn = staticConfig.defaultProps || {}\n\n // because we run createTamagui after styled() defs, have to do some work here\n // gather defaults props one time and merge downwards\n // find last unprocessed and process\n const parentNames = [...(staticConfig.parentNames || []), staticConfig.componentName]\n\n if (tamaguiConfig.defaultProps && parentNames && staticConfig.componentName) {\n defaultPropsIn = mergeConfigDefaultProps(\n staticConfig.componentName,\n defaultPropsIn,\n tamaguiConfig.defaultProps,\n parentNames,\n tamaguiConfig\n )\n }\n\n const debug = defaultPropsIn['debug']\n\n // remove all classNames\n const [ourProps, ourClassNames] = mergeProps(defaultPropsIn, {})\n\n if (ourProps.tag) {\n defaultTag = ourProps.tag\n }\n\n const noClassNames = !staticConfig.acceptsClassName\n const { name, variants, defaultVariants, ...restProps } = ourProps\n\n // must preserve prop order\n // leave out className because we handle that already with initialSplitStyles.classNames\n // otherwise it confuses variant functions getting className props\n const [defaults, defaultsClassnames] = mergeProps(component.defaultProps as any, {\n ...defaultVariants,\n ...restProps,\n })\n\n defaultNativeStyle = {}\n\n const validStyles = staticConfig.validStyles || stylePropsView\n\n // split - keep variables on props to be processed using theme values at runtime (native)\n if (!isWeb) {\n for (const key in staticConfig.defaultProps) {\n const val = staticConfig.defaultProps[key]\n if (validPseudoKeys[key]) continue\n if ((typeof val === 'string' && val[0] === '$') || !validStyles[key]) {\n defaults[key] = val\n } else {\n defaultNativeStyle[key] = val\n }\n }\n }\n\n // set to global\n tamaguiDefaultProps = defaults\n\n // add debug logs\n if (process.env.NODE_ENV === 'development' && debug) {\n if (process.env.IS_STATIC !== 'is_static') {\n // prettier-ignore\n // eslint-disable-next-line no-console\n console.log(`\uD83D\uDC1B [${staticConfig.componentName || 'Component'}]`, { staticConfig, tamaguiDefaultProps, defaultNativeStyle, defaults, defaultPropsIn, defaultPropsKeyOrder: Object.keys(staticConfig.defaultProps), defaultPropsInKeyOrder: Object.keys(defaultPropsIn).map((k) => [k, defaultPropsIn[k]]), ourProps, ourClassNames, defaultsClassnames, defaultTag, noClassNames, })\n }\n }\n })\n\n let res: TamaguiComponent<ComponentPropTypes, Ref, BaseProps> = component as any\n\n if (configIn.memo) {\n res = memo(res) as any\n }\n\n res.staticConfig = {\n validStyles: staticConfig.validStyles || stylePropsView,\n ...staticConfig,\n }\n\n // res.extractable HoC\n res.extractable = (Component: any, conf?: Partial<StaticConfig>) => {\n Component.staticConfig = extendStaticConfig(\n {\n Component,\n ...conf,\n neverFlatten: true,\n defaultProps: {\n ...Component.defaultProps,\n ...conf?.defaultProps,\n },\n },\n res\n )\n return Component\n }\n\n return res\n}\n\n// for elements to avoid spacing\nexport const Unspaced = (props: { children?: any }) => {\n return props.children\n}\nUnspaced['isUnspaced'] = true\n\n// dont used styled() here to avoid circular deps\n// keep inline to avoid circular deps\n\nexport const Spacer = createComponent<SpacerProps>({\n memo: true,\n componentName: 'Spacer',\n validStyles,\n\n defaultProps: {\n ...stackDefaultStyles,\n // avoid nesting issues\n tag: 'span',\n size: true,\n },\n\n variants: {\n size: {\n '...size': (size, { tokens }) => {\n size = size == true ? '$true' : size\n const sizePx = tokens.space[size] ?? size\n return {\n width: sizePx,\n height: sizePx,\n minWidth: sizePx,\n minHeight: sizePx,\n }\n },\n },\n\n flex: {\n true: {\n flexGrow: 1,\n },\n },\n\n direction: {\n horizontal: {\n height: 0,\n minHeight: 0,\n },\n vertical: {\n width: 0,\n minWidth: 0,\n },\n both: {},\n },\n } as const,\n})\n\nexport type SpacedChildrenProps = {\n isZStack?: boolean\n children?: React.ReactNode\n space?: SpaceTokens | number | null\n spaceFlex?: boolean | number\n direction?: SpaceDirection\n separator?: React.ReactNode\n}\n\nexport function spacedChildren({\n isZStack,\n children,\n space,\n direction,\n spaceFlex,\n separator,\n}: SpacedChildrenProps) {\n const hasSpace = !!(space || spaceFlex)\n const hasSeparator = !(separator === undefined || separator === null)\n if (!hasSpace && !hasSeparator && !isZStack) {\n return children\n }\n const childrenList = Children.toArray(children)\n if (childrenList.length <= 1 && !isZStack) {\n return childrenList\n }\n const final: React.ReactNode[] = []\n for (const [index, child] of childrenList.entries()) {\n const isEmpty =\n child === null || child === undefined || (Array.isArray(child) && child.length === 0)\n // push them all, but wrap some in Fragment\n if (isEmpty || !child || (child['key'] && !isZStack)) {\n final.push(child)\n } else {\n final.push(\n <Fragment key={index}>{isZStack ? <AbsoluteFill>{child}</AbsoluteFill> : child}</Fragment>\n )\n }\n\n // first child unspaced avoid insert space\n if (isUnspaced(child) && index === 0) continue\n // no spacing on ZStack\n if (isZStack) continue\n\n const next = childrenList[index + 1]\n\n if (next && !isUnspaced(next)) {\n if (separator) {\n if (hasSpace) {\n final.push(\n createSpacer({\n key: `_${index}_00tmgui`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n final.push(\n React.isValidElement(separator)\n ? React.cloneElement(separator, { key: `sep_${index}` })\n : separator\n )\n if (hasSpace) {\n final.push(\n createSpacer({\n key: `_${index}01tmgui`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n } else {\n final.push(\n createSpacer({\n key: `_${index}02tmgui`,\n direction,\n space,\n spaceFlex,\n })\n )\n }\n }\n }\n\n return final\n}\n\ntype CreateSpacerProps = SpacedChildrenProps & { key: string }\n\nfunction createSpacer({ key, direction, space, spaceFlex }: CreateSpacerProps) {\n return (\n // @ts-ignore this one blew up but the types seem better\n <Spacer\n key={key}\n size={space}\n direction={direction}\n {...(typeof spaceFlex !== 'undefined' && {\n flex: spaceFlex === true ? 1 : spaceFlex === false ? 0 : spaceFlex,\n })}\n />\n )\n}\n\nfunction isUnspaced(child: React.ReactNode) {\n // console.log('unspaced?', child, getMedia())\n return child?.['type']?.['isVisuallyHidden'] || child?.['type']?.['isUnspaced']\n}\n\nconst DefaultProps = new Map()\n\nfunction mergeConfigDefaultProps(\n name: string,\n props: Record<string, any>,\n configDefaults: Record<string, Object>,\n parentNames: (string | undefined)[],\n conf: TamaguiInternalConfig\n) {\n const len = parentNames.length\n let prev\n\n for (let i = 0; i < len; i++) {\n const n = parentNames[i]\n if (!n) continue\n if (DefaultProps.has(n)) {\n prev = DefaultProps.get(n)\n continue\n }\n const props = configDefaults[n]\n if (!props) {\n if (prev) {\n DefaultProps.set(n, prev)\n }\n continue\n }\n prev = mergeProps(prev || {}, props, false, conf.inverseShorthands)[0]\n DefaultProps.set(n, prev)\n }\n\n // overwrite the user defined defaults on top of internal defined defaults\n const ourDefaultsMerged = DefaultProps.get(name)\n if (ourDefaultsMerged) {\n return mergeProps(props, ourDefaultsMerged, false, conf.inverseShorthands)[0]\n }\n return props\n}\n\n// react native compat (web only)\nfunction usePlatformMethods(hostRef: RefObject<Element>) {\n useIsomorphicLayoutEffect(() => {\n const node = hostRef.current\n if (!node) return\n // @ts-ignore\n node.measure = (callback) => measureLayout(node, null, callback)\n // @ts-ignore\n node.measureLayout = (relativeToNode, success) => measureLayout(node, relativeToNode, success)\n // @ts-ignore\n node.measureInWindow = (callback) => {\n if (!node) return\n setTimeout(() => {\n const { height, left, top, width } = getRect(node as HTMLElement)!\n callback(left, top, width, height)\n }, 0)\n }\n }, [hostRef])\n}\n\nconst AbsoluteFill: any = createComponent({\n componentName: 'AbsoluteFill',\n defaultProps: {\n ...stackDefaultStyles,\n flexDirection: 'column',\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n pointerEvents: 'box-none',\n },\n})\n\nconst dontComposePressabilityKeys = {\n onClick: true,\n}\n\nfunction getMediaStateObject(obj: Object) {\n return Object.fromEntries(Object.entries(obj).flatMap(([k, v]) => (v ? [[`$${k}`, v]] : [])))\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a", "_b", "weight", "style", "element", "validStyles", "props"]
7
7
  }
@@ -18,7 +18,7 @@ function variableToString(vrble, getValue = false) {
18
18
  return `${vrble || ""}`;
19
19
  }
20
20
  function isVariable(v) {
21
- return !!(v && v[IS_VAR]);
21
+ return v && typeof v === "object" && IS_VAR in v;
22
22
  }
23
23
  function getVariable(nameOrVariable) {
24
24
  if (isVariable(nameOrVariable)) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createVariable.ts"],
4
- "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport { simpleHash } from '@tamagui/helpers'\n\nimport { getConfig } from './config'\n\n/**\n * Should rename this to Token\n * Moving to objects for React Server Components support\n */\n\nconst IS_VAR = 'isVar'\n\ntype VariableIn<A = any> = {\n val: A\n name: string\n key: string\n isFloating?: boolean\n}\n\nexport type Variable<A = any> = VariableIn<A> & {\n [IS_VAR]?: true\n variable?: string\n}\n\nexport const createVariable = <A extends string | number = any>(props: VariableIn<A>) => {\n if (isVariable(props)) return props\n return {\n [IS_VAR]: true,\n ...props,\n variable: isWeb ? createCSSVariable(props.name) : '',\n }\n}\n\nexport function variableToString(vrble?: any, getValue = false) {\n if (isVariable(vrble)) {\n return getValue ? `${vrble.val}` : `${isWeb ? vrble.variable : vrble.val}`\n }\n return `${vrble || ''}`\n}\n\nexport function isVariable(v: Variable | any): v is Variable {\n return !!(v && v[IS_VAR])\n}\n\nexport function getVariable(nameOrVariable: Variable | string) {\n if (isVariable(nameOrVariable)) {\n return variableToString(nameOrVariable)\n }\n const tokens = getConfig().tokensParsed\n return variableToString(tokens[nameOrVariable] ?? nameOrVariable)\n}\n\nexport function getVariableValue(v: Variable | any) {\n if (isVariable(v)) return v.val\n return v\n}\n\nexport function getVariableName(v: Variable | any) {\n if (isVariable(v)) return v.name\n return v\n}\n\nexport function getVariableVariable(v: Variable | any) {\n if (isVariable(v)) return v.variable\n return v\n}\n\n// bugfix { space: { 0.5: 10 } } was generating var(--space-0.5) (invalid CSS):\nexport const createCSSVariable = (nameProp: string, includeVar = true) => {\n if (process.env.NODE_ENV === 'development') {\n if (!nameProp || typeof nameProp !== 'string') {\n throw new Error(`createCSSVariable expected string: ${nameProp}`)\n }\n }\n const name = simpleHash(nameProp, 60)\n return includeVar ? `var(--${name})` : name\n}\n"],
5
- "mappings": "AAAA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAE3B,SAAS,iBAAiB;AAO1B,MAAM,SAAS;AAcR,MAAM,iBAAiB,CAAkC,UAAyB;AACvF,MAAI,WAAW,KAAK;AAAG,WAAO;AAC9B,SAAO;AAAA,IACL,CAAC,SAAS;AAAA,IACV,GAAG;AAAA,IACH,UAAU,QAAQ,kBAAkB,MAAM,IAAI,IAAI;AAAA,EACpD;AACF;AAEO,SAAS,iBAAiB,OAAa,WAAW,OAAO;AAC9D,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO,WAAW,GAAG,MAAM,QAAQ,GAAG,QAAQ,MAAM,WAAW,MAAM;AAAA,EACvE;AACA,SAAO,GAAG,SAAS;AACrB;AAEO,SAAS,WAAW,GAAkC;AAC3D,SAAO,CAAC,EAAE,KAAK,EAAE;AACnB;AAEO,SAAS,YAAY,gBAAmC;AAC7D,MAAI,WAAW,cAAc,GAAG;AAC9B,WAAO,iBAAiB,cAAc;AAAA,EACxC;AACA,QAAM,SAAS,UAAU,EAAE;AAC3B,SAAO,iBAAiB,OAAO,mBAAmB,cAAc;AAClE;AAEO,SAAS,iBAAiB,GAAmB;AAClD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,SAAS,gBAAgB,GAAmB;AACjD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,SAAS,oBAAoB,GAAmB;AACrD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAGO,MAAM,oBAAoB,CAAC,UAAkB,aAAa,SAAS;AACxE,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,YAAM,IAAI,MAAM,sCAAsC,UAAU;AAAA,IAClE;AAAA,EACF;AACA,QAAM,OAAO,WAAW,UAAU,EAAE;AACpC,SAAO,aAAa,SAAS,UAAU;AACzC;",
4
+ "sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport { simpleHash } from '@tamagui/helpers'\n\nimport { getConfig } from './config'\n\n/**\n * Should rename this to Token\n * Moving to objects for React Server Components support\n */\n\nconst IS_VAR = 'isVar'\n\ntype VariableIn<A = any> = {\n val: A\n name: string\n key: string\n isFloating?: boolean\n}\n\nexport type Variable<A = any> = VariableIn<A> & {\n [IS_VAR]?: true\n variable?: string\n}\n\nexport const createVariable = <A extends string | number = any>(props: VariableIn<A>) => {\n if (isVariable(props)) return props\n return {\n [IS_VAR]: true,\n ...props,\n variable: isWeb ? createCSSVariable(props.name) : '',\n }\n}\n\nexport function variableToString(vrble?: any, getValue = false) {\n if (isVariable(vrble)) {\n return getValue ? `${vrble.val}` : `${isWeb ? vrble.variable : vrble.val}`\n }\n return `${vrble || ''}`\n}\n\nexport function isVariable(v: Variable | any): v is Variable {\n return v && typeof v === 'object' && IS_VAR in v\n}\n\nexport function getVariable(nameOrVariable: Variable | string) {\n if (isVariable(nameOrVariable)) {\n return variableToString(nameOrVariable)\n }\n const tokens = getConfig().tokensParsed\n return variableToString(tokens[nameOrVariable] ?? nameOrVariable)\n}\n\nexport function getVariableValue(v: Variable | any) {\n if (isVariable(v)) return v.val\n return v\n}\n\nexport function getVariableName(v: Variable | any) {\n if (isVariable(v)) return v.name\n return v\n}\n\nexport function getVariableVariable(v: Variable | any) {\n if (isVariable(v)) return v.variable\n return v\n}\n\n// bugfix { space: { 0.5: 10 } } was generating var(--space-0.5) (invalid CSS):\nexport const createCSSVariable = (nameProp: string, includeVar = true) => {\n if (process.env.NODE_ENV === 'development') {\n if (!nameProp || typeof nameProp !== 'string') {\n throw new Error(`createCSSVariable expected string: ${nameProp}`)\n }\n }\n const name = simpleHash(nameProp, 60)\n return includeVar ? `var(--${name})` : name\n}\n"],
5
+ "mappings": "AAAA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAE3B,SAAS,iBAAiB;AAO1B,MAAM,SAAS;AAcR,MAAM,iBAAiB,CAAkC,UAAyB;AACvF,MAAI,WAAW,KAAK;AAAG,WAAO;AAC9B,SAAO;AAAA,IACL,CAAC,SAAS;AAAA,IACV,GAAG;AAAA,IACH,UAAU,QAAQ,kBAAkB,MAAM,IAAI,IAAI;AAAA,EACpD;AACF;AAEO,SAAS,iBAAiB,OAAa,WAAW,OAAO;AAC9D,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO,WAAW,GAAG,MAAM,QAAQ,GAAG,QAAQ,MAAM,WAAW,MAAM;AAAA,EACvE;AACA,SAAO,GAAG,SAAS;AACrB;AAEO,SAAS,WAAW,GAAkC;AAC3D,SAAO,KAAK,OAAO,MAAM,YAAY,UAAU;AACjD;AAEO,SAAS,YAAY,gBAAmC;AAC7D,MAAI,WAAW,cAAc,GAAG;AAC9B,WAAO,iBAAiB,cAAc;AAAA,EACxC;AACA,QAAM,SAAS,UAAU,EAAE;AAC3B,SAAO,iBAAiB,OAAO,mBAAmB,cAAc;AAClE;AAEO,SAAS,iBAAiB,GAAmB;AAClD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,SAAS,gBAAgB,GAAmB;AACjD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAEO,SAAS,oBAAoB,GAAmB;AACrD,MAAI,WAAW,CAAC;AAAG,WAAO,EAAE;AAC5B,SAAO;AACT;AAGO,MAAM,oBAAoB,CAAC,UAAkB,aAAa,SAAS;AACxE,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,YAAM,IAAI,MAAM,sCAAsC,UAAU;AAAA,IAClE;AAAA,EACF;AACA,QAAM,OAAO,WAAW,UAAU,EAAE;AACpC,SAAO,aAAa,SAAS,UAAU;AACzC;",
6
6
  "names": []
7
7
  }
@@ -52,14 +52,19 @@ class ThemeManager {
52
52
  }
53
53
  }
54
54
  getStateIfChanged(props = this.props, state = this.state, parentManager = this.parentManager) {
55
- const _ = getState(props, parentManager) || (process.env.TAMAGUI_TARGET === "native" ? parentManager == null ? void 0 : parentManager.state : void 0);
56
- if (!_ || !_.theme || _.theme === state.theme) {
55
+ const _ = this.getState(props, parentManager);
56
+ if (state && state !== emptyState && !_) {
57
+ return parentManager == null ? void 0 : parentManager.state;
58
+ }
59
+ if (!_ || !_.theme || _.theme === (state == null ? void 0 : state.theme)) {
60
+ if (process.env.NODE_ENV === "development" && props.debug === "verbose")
61
+ console.log(`getStateIfChanged not changed`, (_ == null ? void 0 : _.theme) === (state == null ? void 0 : state.theme), _, state);
57
62
  return null;
58
63
  }
59
64
  return _;
60
65
  }
61
- getState(props = this.props) {
62
- return getState(props, this.parentManager);
66
+ getState(props = this.props, parentManager = this.parentManager) {
67
+ return getState(props, parentManager) || (process.env.TAMAGUI_TARGET === "native" ? parentManager == null ? void 0 : parentManager.state : void 0);
63
68
  }
64
69
  #allKeys;
65
70
  get allKeys() {
@@ -118,9 +123,9 @@ function getState(props, parentManager) {
118
123
  }
119
124
  const parentBaseTheme = isParentAComponentTheme ? base.slice(0, base.length).join(THEME_NAME_SEPARATOR) : parentName;
120
125
  const max = base.length;
121
- const min = componentName ? max : 0;
126
+ const min = componentName && !nextName ? max : 0;
122
127
  if (process.env.NODE_ENV === "development" && props.debug === "verbose")
123
- console.log("getState", props, { parentName, parentBaseTheme, base, min, max, isParentAComponentTheme, parentManager });
128
+ [console.groupCollapsed("getState", props, { parentName, parentBaseTheme, base, min, max, isParentAComponentTheme }), console.trace(), console.groupEnd()];
124
129
  for (let i = max; i >= min; i--) {
125
130
  let prefix = base.slice(0, i).join(THEME_NAME_SEPARATOR);
126
131
  if (props.inverse) {
@@ -141,7 +146,9 @@ function getState(props, parentManager) {
141
146
  }
142
147
  if (componentName) {
143
148
  if (nextName) {
144
- potentials.push(`${prefix.replace(/_.*$/, "")}_${nextName}_${componentName}`);
149
+ potentials.push(
150
+ `${prefix.slice(0, prefix.indexOf(THEME_NAME_SEPARATOR))}_${nextName}_${componentName}`
151
+ );
145
152
  }
146
153
  potentials.push(`${prefix}_${componentName}`);
147
154
  if (nextName) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/ThemeManager.tsx"],
4
- "sourcesContent": ["import { isWeb } from '@tamagui/constants'\n\nimport { getThemes } from '../config'\nimport { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from '../constants/constants'\nimport { getThemeUnwrapped } from '../hooks/getThemeUnwrapped'\nimport { ThemeParsed, ThemeProps } from '../types'\n\ntype ThemeListener = (name: string | null, themeManager: ThemeManager) => void\n\nexport type SetActiveThemeProps = {\n className?: string\n parentManager?: ThemeManager | null\n name?: string | null\n theme?: any\n reset?: boolean\n}\n\nexport type ThemeManagerState = {\n name: string\n theme?: ThemeParsed | null\n className?: string\n parentName?: string\n}\n\nconst emptyState: ThemeManagerState = { name: '' }\n\nexport function hasNoThemeUpdatingProps(props: ThemeProps) {\n return !props.name && !props.componentName && !props.inverse && !props.reset\n}\n\nexport class ThemeManager {\n themeListeners = new Set<ThemeListener>()\n parentManager: ThemeManager | null = null\n state: ThemeManagerState = emptyState\n\n constructor(\n public props: ThemeProps = {},\n parentManager?: ThemeManager | 'root' | null | undefined\n ) {\n if (parentManager === 'root') {\n this.updateState(props, false)\n return\n }\n if (!parentManager) {\n throw new Error(`Must set up root first`)\n }\n // no change no props\n if (hasNoThemeUpdatingProps(props)) {\n return parentManager\n }\n if (parentManager) {\n this.parentManager = parentManager\n }\n const updatedState = this.getStateIfChanged(props)\n if (updatedState) {\n this.state = updatedState\n return\n }\n return parentManager || this\n }\n\n updateState(props: ThemeProps & { forceTheme?: ThemeParsed } = this.props || {}, notify = true) {\n const shouldFlush = (() => {\n if (props.forceTheme) {\n this.state.theme = props.forceTheme\n this.state.name = props.name || ''\n return true\n }\n const nextState = this.getStateIfChanged(props)\n if (nextState) {\n this.state = nextState\n return true\n }\n })()\n if (shouldFlush) {\n // reset any derived state\n this.#allKeys = null\n notify && this.notify()\n return this.state\n }\n }\n\n getStateIfChanged(props = this.props, state = this.state, parentManager = this.parentManager) {\n const _ =\n getState(props, parentManager) ||\n (process.env.TAMAGUI_TARGET === 'native' ? parentManager?.state : undefined)\n if (!_ || !_.theme || _.theme === state.theme) {\n return null\n }\n return _\n }\n\n getState(props = this.props) {\n return getState(props, this.parentManager)\n }\n\n #allKeys: Set<string> | null = null\n get allKeys() {\n this.#allKeys ??= new Set([\n ...(this.parentManager?.allKeys || []),\n ...Object.keys(this.state.theme || {}),\n ])\n return this.#allKeys\n }\n\n // gets value going up to parents\n getValue(key: string, state?: ThemeManagerState) {\n let theme = (state || this.state).theme\n let manager = this as ThemeManager | null\n while (theme && manager) {\n if (key in theme) {\n return theme[key]\n }\n manager = manager.parentManager\n theme = manager?.state.theme\n }\n }\n\n notify() {\n this.themeListeners.forEach((cb) => cb(this.state.name, this))\n }\n\n onChangeTheme(cb: ThemeListener) {\n this.themeListeners.add(cb)\n return () => {\n this.themeListeners.delete(cb)\n }\n }\n}\n\nfunction getNextThemeClassName(name: string, isInverting = false) {\n const next = `${THEME_CLASSNAME_PREFIX}${name}`\n if (isInverting) {\n return next\n }\n return next.replace('light_', '').replace('dark_', '')\n}\n\nfunction getState(\n props: ThemeProps,\n parentManager?: ThemeManager | null\n): ThemeManagerState | null {\n const themes = getThemes()\n\n if (props.name && props.reset) {\n throw new Error(`Cannot reset + set new name`)\n }\n if (props.reset && !parentManager?.parentManager) {\n throw new Error(`Cannot reset no grandparent exists`)\n }\n\n const nextName = props.reset ? parentManager?.parentManager?.state?.name || '' : props.name || ''\n const { componentName } = props\n const parentName = parentManager?.state?.name || ''\n\n // components look for most specific, fallback upwards\n const base = parentName.split(THEME_NAME_SEPARATOR)\n const lastSegment = base[base.length - 1]\n const isParentAComponentTheme = parentName && lastSegment[0].toUpperCase() === lastSegment[0]\n if (isParentAComponentTheme) {\n base.pop() // always remove componentName they can't nest\n }\n const parentBaseTheme = isParentAComponentTheme\n ? base.slice(0, base.length).join(THEME_NAME_SEPARATOR)\n : parentName\n const max = base.length\n const min = componentName\n ? max // component themes don't search upwards\n : 0\n\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log('getState', props, { parentName, parentBaseTheme, base, min, max, isParentAComponentTheme, parentManager })\n\n for (let i = max; i >= min; i--) {\n let prefix = base.slice(0, i).join(THEME_NAME_SEPARATOR)\n if (props.inverse) {\n prefix = inverseThemeName(prefix)\n }\n const potentials: string[] = []\n if (prefix && prefix !== parentBaseTheme) {\n potentials.push(prefix)\n }\n if (nextName) {\n potentials.unshift(prefix ? `${prefix}_${nextName}` : nextName)\n }\n if (i === 1) {\n const lastSegment = potentials.findIndex((x) => !x.includes('_'))\n if (lastSegment > 0) {\n potentials.splice(lastSegment, 0, nextName) // last try prefer our new name to parent\n }\n }\n if (componentName) {\n // components only look for component themes\n if (nextName) {\n potentials.push(`${prefix.replace(/_.*$/, '')}_${nextName}_${componentName}`)\n }\n potentials.push(`${prefix}_${componentName}`)\n if (nextName) {\n potentials.unshift(`${prefix}_${nextName}_${componentName}`)\n }\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log('getState potentials', potentials)\n\n const found = potentials.find((t) => t in themes)\n if (found) {\n // optimization return null if not changed\n if (found === parentName) {\n return null\n }\n const theme = themes[found]\n return {\n // need to put concurrent safe things here\n name: found,\n theme: getThemeUnwrapped(theme),\n className: getNextThemeClassName(found, props.inverse),\n parentName,\n }\n }\n }\n\n return null\n}\n\nconst inverseThemeName = (themeName: string) => {\n return themeName.startsWith('light')\n ? themeName.replace(/^light/, 'dark')\n : themeName.replace(/^dark/, 'light')\n}\n"],
5
- "mappings": "AAEA,SAAS,iBAAiB;AAC1B,SAAS,wBAAwB,4BAA4B;AAC7D,SAAS,yBAAyB;AAoBlC,MAAM,aAAgC,EAAE,MAAM,GAAG;AAE1C,SAAS,wBAAwB,OAAmB;AACzD,SAAO,CAAC,MAAM,QAAQ,CAAC,MAAM,iBAAiB,CAAC,MAAM,WAAW,CAAC,MAAM;AACzE;AAEO,MAAM,aAAa;AAAA,EAKxB,YACS,QAAoB,CAAC,GAC5B,eACA;AAFO;AALT,0BAAiB,oBAAI,IAAmB;AACxC,yBAAqC;AACrC,iBAA2B;AA+D3B,oBAA+B;AAzD7B,QAAI,kBAAkB,QAAQ;AAC5B,WAAK,YAAY,OAAO,KAAK;AAC7B;AAAA,IACF;AACA,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAEA,QAAI,wBAAwB,KAAK,GAAG;AAClC,aAAO;AAAA,IACT;AACA,QAAI,eAAe;AACjB,WAAK,gBAAgB;AAAA,IACvB;AACA,UAAM,eAAe,KAAK,kBAAkB,KAAK;AACjD,QAAI,cAAc;AAChB,WAAK,QAAQ;AACb;AAAA,IACF;AACA,WAAO,iBAAiB;AAAA,EAC1B;AAAA,EAEA,YAAY,QAAmD,KAAK,SAAS,CAAC,GAAG,SAAS,MAAM;AAC9F,UAAM,eAAe,MAAM;AACzB,UAAI,MAAM,YAAY;AACpB,aAAK,MAAM,QAAQ,MAAM;AACzB,aAAK,MAAM,OAAO,MAAM,QAAQ;AAChC,eAAO;AAAA,MACT;AACA,YAAM,YAAY,KAAK,kBAAkB,KAAK;AAC9C,UAAI,WAAW;AACb,aAAK,QAAQ;AACb,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AACH,QAAI,aAAa;AAEf,WAAK,WAAW;AAChB,gBAAU,KAAK,OAAO;AACtB,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA,EAEA,kBAAkB,QAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO,gBAAgB,KAAK,eAAe;AAC5F,UAAM,IACJ,SAAS,OAAO,aAAa,MAC5B,QAAQ,IAAI,mBAAmB,WAAW,+CAAe,QAAQ;AACpE,QAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,MAAM,OAAO;AAC7C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,QAAQ,KAAK,OAAO;AAC3B,WAAO,SAAS,OAAO,KAAK,aAAa;AAAA,EAC3C;AAAA,EAEA;AAAA,EACA,IAAI,UAAU;AAjGhB;AAkGI,SAAK,aAAa,oBAAI,IAAI;AAAA,MACxB,KAAI,UAAK,kBAAL,mBAAoB,YAAW,CAAC;AAAA,MACpC,GAAG,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC,CAAC;AAAA,IACvC,CAAC;AACD,WAAO,KAAK;AAAA,EACd;AAAA,EAGA,SAAS,KAAa,OAA2B;AAC/C,QAAI,SAAS,SAAS,KAAK,OAAO;AAClC,QAAI,UAAU;AACd,WAAO,SAAS,SAAS;AACvB,UAAI,OAAO,OAAO;AAChB,eAAO,MAAM;AAAA,MACf;AACA,gBAAU,QAAQ;AAClB,cAAQ,mCAAS,MAAM;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,SAAS;AACP,SAAK,eAAe,QAAQ,CAAC,OAAO,GAAG,KAAK,MAAM,MAAM,IAAI,CAAC;AAAA,EAC/D;AAAA,EAEA,cAAc,IAAmB;AAC/B,SAAK,eAAe,IAAI,EAAE;AAC1B,WAAO,MAAM;AACX,WAAK,eAAe,OAAO,EAAE;AAAA,IAC/B;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB,MAAc,cAAc,OAAO;AAChE,QAAM,OAAO,GAAG,yBAAyB;AACzC,MAAI,aAAa;AACf,WAAO;AAAA,EACT;AACA,SAAO,KAAK,QAAQ,UAAU,EAAE,EAAE,QAAQ,SAAS,EAAE;AACvD;AAEA,SAAS,SACP,OACA,eAC0B;AA7I5B;AA8IE,QAAM,SAAS,UAAU;AAEzB,MAAI,MAAM,QAAQ,MAAM,OAAO;AAC7B,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACA,MAAI,MAAM,SAAS,EAAC,+CAAe,gBAAe;AAChD,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,QAAM,WAAW,MAAM,UAAQ,0DAAe,kBAAf,mBAA8B,UAA9B,mBAAqC,SAAQ,KAAK,MAAM,QAAQ;AAC/F,QAAM,EAAE,cAAc,IAAI;AAC1B,QAAM,eAAa,oDAAe,UAAf,mBAAsB,SAAQ;AAGjD,QAAM,OAAO,WAAW,MAAM,oBAAoB;AAClD,QAAM,cAAc,KAAK,KAAK,SAAS;AACvC,QAAM,0BAA0B,cAAc,YAAY,GAAG,YAAY,MAAM,YAAY;AAC3F,MAAI,yBAAyB;AAC3B,SAAK,IAAI;AAAA,EACX;AACA,QAAM,kBAAkB,0BACpB,KAAK,MAAM,GAAG,KAAK,MAAM,EAAE,KAAK,oBAAoB,IACpD;AACJ,QAAM,MAAM,KAAK;AACjB,QAAM,MAAM,gBACR,MACA;AAIJ,MAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,UAAU;AAAW,YAAQ,IAAI,YAAY,OAAO,EAAE,YAAY,iBAAiB,MAAM,KAAK,KAAK,yBAAyB,cAAc,CAAC;AAE/L,WAAS,IAAI,KAAK,KAAK,KAAK,KAAK;AAC/B,QAAI,SAAS,KAAK,MAAM,GAAG,CAAC,EAAE,KAAK,oBAAoB;AACvD,QAAI,MAAM,SAAS;AACjB,eAAS,iBAAiB,MAAM;AAAA,IAClC;AACA,UAAM,aAAuB,CAAC;AAC9B,QAAI,UAAU,WAAW,iBAAiB;AACxC,iBAAW,KAAK,MAAM;AAAA,IACxB;AACA,QAAI,UAAU;AACZ,iBAAW,QAAQ,SAAS,GAAG,UAAU,aAAa,QAAQ;AAAA,IAChE;AACA,QAAI,MAAM,GAAG;AACX,YAAMA,eAAc,WAAW,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,CAAC;AAChE,UAAIA,eAAc,GAAG;AACnB,mBAAW,OAAOA,cAAa,GAAG,QAAQ;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,eAAe;AAEjB,UAAI,UAAU;AACZ,mBAAW,KAAK,GAAG,OAAO,QAAQ,QAAQ,EAAE,KAAK,YAAY,eAAe;AAAA,MAC9E;AACA,iBAAW,KAAK,GAAG,UAAU,eAAe;AAC5C,UAAI,UAAU;AACZ,mBAAW,QAAQ,GAAG,UAAU,YAAY,eAAe;AAAA,MAC7D;AAAA,IACF;AAIA,QAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,UAAU;AAAW,cAAQ,IAAI,uBAAuB,UAAU;AAEtH,UAAM,QAAQ,WAAW,KAAK,CAAC,MAAM,KAAK,MAAM;AAChD,QAAI,OAAO;AAET,UAAI,UAAU,YAAY;AACxB,eAAO;AAAA,MACT;AACA,YAAM,QAAQ,OAAO;AACrB,aAAO;AAAA,QAEL,MAAM;AAAA,QACN,OAAO,kBAAkB,KAAK;AAAA,QAC9B,WAAW,sBAAsB,OAAO,MAAM,OAAO;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,MAAM,mBAAmB,CAAC,cAAsB;AAC9C,SAAO,UAAU,WAAW,OAAO,IAC/B,UAAU,QAAQ,UAAU,MAAM,IAClC,UAAU,QAAQ,SAAS,OAAO;AACxC;",
4
+ "sourcesContent": ["import { getThemes } from '../config'\nimport { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from '../constants/constants'\nimport { getThemeUnwrapped } from '../hooks/getThemeUnwrapped'\nimport { ThemeParsed, ThemeProps } from '../types'\n\ntype ThemeListener = (name: string | null, themeManager: ThemeManager) => void\n\nexport type SetActiveThemeProps = {\n className?: string\n parentManager?: ThemeManager | null\n name?: string | null\n theme?: any\n reset?: boolean\n}\n\nexport type ThemeManagerState = {\n name: string\n theme?: ThemeParsed | null\n className?: string\n parentName?: string\n}\n\nconst emptyState: ThemeManagerState = { name: '' }\n\nexport function hasNoThemeUpdatingProps(props: ThemeProps) {\n return !props.name && !props.componentName && !props.inverse && !props.reset\n}\n\nexport class ThemeManager {\n themeListeners = new Set<ThemeListener>()\n parentManager: ThemeManager | null = null\n state: ThemeManagerState = emptyState\n\n constructor(\n public props: ThemeProps = {},\n parentManager?: ThemeManager | 'root' | null | undefined\n ) {\n if (parentManager === 'root') {\n this.updateState(props, false)\n return\n }\n if (!parentManager) {\n throw new Error(`Must set up root first`)\n }\n // no change no props\n if (hasNoThemeUpdatingProps(props)) {\n return parentManager\n }\n if (parentManager) {\n this.parentManager = parentManager\n }\n const updatedState = this.getStateIfChanged(props)\n if (updatedState) {\n this.state = updatedState\n return\n }\n return parentManager || this\n }\n\n updateState(props: ThemeProps & { forceTheme?: ThemeParsed } = this.props || {}, notify = true) {\n const shouldFlush = (() => {\n if (props.forceTheme) {\n this.state.theme = props.forceTheme\n this.state.name = props.name || ''\n return true\n }\n const nextState = this.getStateIfChanged(props)\n if (nextState) {\n this.state = nextState\n return true\n }\n })()\n if (shouldFlush) {\n // reset any derived state\n this.#allKeys = null\n notify && this.notify()\n return this.state\n }\n }\n\n getStateIfChanged(\n props = this.props,\n state: ThemeManagerState | null = this.state,\n parentManager = this.parentManager\n ) {\n const _ = this.getState(props, parentManager)\n\n // is removing\n if (state && state !== emptyState && !_) {\n return parentManager?.state\n }\n\n if (!_ || !_.theme || _.theme === state?.theme) {\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log(`getStateIfChanged not changed`, _?.theme === state?.theme, _, state)\n return null\n }\n return _\n }\n\n getState(props = this.props, parentManager = this.parentManager) {\n return (\n getState(props, parentManager) ||\n (process.env.TAMAGUI_TARGET === 'native' ? parentManager?.state : undefined)\n )\n }\n\n #allKeys: Set<string> | null = null\n get allKeys() {\n this.#allKeys ??= new Set([\n ...(this.parentManager?.allKeys || []),\n ...Object.keys(this.state.theme || {}),\n ])\n return this.#allKeys\n }\n\n // gets value going up to parents\n getValue(key: string, state?: ThemeManagerState) {\n let theme = (state || this.state).theme\n let manager = this as ThemeManager | null\n while (theme && manager) {\n if (key in theme) {\n return theme[key]\n }\n manager = manager.parentManager\n theme = manager?.state.theme\n }\n }\n\n notify() {\n this.themeListeners.forEach((cb) => cb(this.state.name, this))\n }\n\n onChangeTheme(cb: ThemeListener) {\n this.themeListeners.add(cb)\n return () => {\n this.themeListeners.delete(cb)\n }\n }\n}\n\nfunction getNextThemeClassName(name: string, isInverting = false) {\n const next = `${THEME_CLASSNAME_PREFIX}${name}`\n if (isInverting) {\n return next\n }\n return next.replace('light_', '').replace('dark_', '')\n}\n\nfunction getState(\n props: ThemeProps,\n parentManager?: ThemeManager | null\n): ThemeManagerState | null {\n const themes = getThemes()\n\n if (props.name && props.reset) {\n throw new Error(`Cannot reset + set new name`)\n }\n if (props.reset && !parentManager?.parentManager) {\n throw new Error(`Cannot reset no grandparent exists`)\n }\n\n const nextName = props.reset ? parentManager?.parentManager?.state?.name || '' : props.name || ''\n const { componentName } = props\n const parentName = parentManager?.state?.name || ''\n\n // components look for most specific, fallback upwards\n const base = parentName.split(THEME_NAME_SEPARATOR)\n const lastSegment = base[base.length - 1]\n const isParentAComponentTheme = parentName && lastSegment[0].toUpperCase() === lastSegment[0]\n if (isParentAComponentTheme) {\n base.pop() // always remove componentName they can't nest\n }\n const parentBaseTheme = isParentAComponentTheme\n ? base.slice(0, base.length).join(THEME_NAME_SEPARATOR)\n : parentName\n const max = base.length\n const min =\n componentName && !nextName\n ? max // component name only don't search upwards\n : 0\n\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') [console.groupCollapsed('getState', props, { parentName, parentBaseTheme, base, min, max, isParentAComponentTheme }), console.trace(), console.groupEnd()]\n\n for (let i = max; i >= min; i--) {\n let prefix = base.slice(0, i).join(THEME_NAME_SEPARATOR)\n if (props.inverse) {\n prefix = inverseThemeName(prefix)\n }\n const potentials: string[] = []\n if (prefix && prefix !== parentBaseTheme) {\n potentials.push(prefix)\n }\n if (nextName) {\n potentials.unshift(prefix ? `${prefix}_${nextName}` : nextName)\n }\n if (i === 1) {\n const lastSegment = potentials.findIndex((x) => !x.includes('_'))\n if (lastSegment > 0) {\n potentials.splice(lastSegment, 0, nextName) // last try prefer our new name to parent\n }\n }\n if (componentName) {\n // components only look for component themes\n if (nextName) {\n potentials.push(\n `${prefix.slice(0, prefix.indexOf(THEME_NAME_SEPARATOR))}_${nextName}_${componentName}`\n )\n }\n potentials.push(`${prefix}_${componentName}`)\n if (nextName) {\n potentials.unshift(`${prefix}_${nextName}_${componentName}`)\n }\n }\n\n // prettier-ignore\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log('getState potentials', potentials)\n\n const found = potentials.find((t) => t in themes)\n if (found) {\n // optimization return null if not changed\n if (found === parentName) {\n return null\n }\n const theme = themes[found]\n return {\n // need to put concurrent safe things here\n name: found,\n theme: getThemeUnwrapped(theme),\n className: getNextThemeClassName(found, props.inverse),\n parentName,\n }\n }\n }\n\n return null\n}\n\nconst inverseThemeName = (themeName: string) => {\n return themeName.startsWith('light')\n ? themeName.replace(/^light/, 'dark')\n : themeName.replace(/^dark/, 'light')\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["lastSegment"]
7
7
  }
@@ -444,5 +444,21 @@ describe("ThemeManager", () => {
444
444
  );
445
445
  expect(child.state.name).toBe("dark_yellow_Button");
446
446
  });
447
+ test(`Component name + name finds one up when component name missing`, () => {
448
+ const parent = new ThemeManager(
449
+ {
450
+ name: "dark_red_alt1"
451
+ },
452
+ "root"
453
+ );
454
+ const child = new ThemeManager(
455
+ {
456
+ name: "alt2",
457
+ componentName: "Missing"
458
+ },
459
+ parent
460
+ );
461
+ expect(child.state.name).toBe("dark_red_alt2");
462
+ });
447
463
  });
448
464
  //# sourceMappingURL=ThemeManager.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/ThemeManager.test.tsx"],
4
- "sourcesContent": ["import { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport { beforeAll, describe, expect, test } from 'vitest'\n\nimport { createTamagui } from '../createTamagui'\nimport { ThemeManager } from './ThemeManager'\n\nconst conf = getDefaultTamaguiConfig()\n\ndescribe('ThemeManager', () => {\n beforeAll(() => {\n createTamagui(conf)\n })\n\n test('Changes theme to dark', () => {\n const manager = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n expect(manager.state.name).toBe('dark')\n })\n\n test('Given parent theme \"dark\" and child theme \"red\" to return theme \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(parent.state.name).toBe('dark')\n expect(child.state.name).toBe('dark_red')\n })\n\n test('Given parent theme \"dark\", child theme \"red_alt2\" and component \"Button\" returns \"dark_red_alt2_Button\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n name: 'alt2',\n componentName: 'Button',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red_alt2_Button')\n })\n\n test('Given parent theme \"dark\", child theme \"red\" and component \"Button\" returns \"dark_red_Button\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n componentName: 'Button',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red_Button')\n })\n\n test('Given parent theme \"dark\", child theme \"red\" and missing component \"Card\" returns \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n componentName: 'Card',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red')\n })\n\n test('Changes \"light\" to \"dark\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n expect(parent.state.name).toBe('light')\n expect(child.state.name).toBe('dark')\n })\n\n test('Inverts \"light\" to \"dark\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n inverse: true,\n },\n parent\n )\n expect(child1.state.name).toBe('dark')\n })\n\n test('Inverts \"light_red\" to \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n inverse: true,\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n })\n\n test('Updates state', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const newState = parent.updateState({\n name: 'dark',\n })\n expect(newState).toMatchInlineSnapshot(`\n {\n \"className\": \"t_dark\",\n \"name\": \"dark\",\n \"parentName\": \"\",\n \"theme\": {\n \"background\": {\n \"isVar\": true,\n \"key\": \"color-2\",\n \"name\": \"background\",\n \"val\": \"#000\",\n \"variable\": \"\",\n },\n \"color\": {\n \"isVar\": true,\n \"key\": \"color-1\",\n \"name\": \"color\",\n \"val\": \"#fff\",\n \"variable\": \"\",\n },\n },\n }\n `)\n expect(parent.state.name).toBe('dark')\n })\n\n test('Returns parent on empty', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: null,\n },\n parent\n )\n expect(child).toBe(parent)\n })\n\n test('Resets theme', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n expect(child.state.name).toBe('dark')\n expect(child.parentManager).toBe(parent)\n const child2 = new ThemeManager(\n {\n reset: true,\n },\n child\n )\n expect(child2.parentManager).toBe(child)\n expect(child2.state.name).toBe('light')\n })\n\n test('Nested invert and reset', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n reset: true,\n },\n child\n )\n const child3 = new ThemeManager(\n {\n inverse: true,\n },\n child2\n )\n expect(child3.state.name).toBe('dark')\n })\n\n test('Updates from null the new theme nested 3 themes', () => {\n const a = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const b = new ThemeManager(\n {\n name: 'red',\n },\n a\n )\n expect(b.state.name).toBe('dark_red')\n const c = new ThemeManager(\n {\n name: 'alt2',\n },\n b\n )\n expect(c.state.name).toBe('dark_red_alt2')\n })\n\n test('Ignored dup themes', () => {\n const a = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const b = new ThemeManager(\n {\n name: 'dark',\n },\n a\n )\n expect(b === a).toBe(true)\n })\n\n test('Nested component themes fallback to grandparents', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Button',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n name: 'blue',\n },\n child\n )\n expect(child2.state.name).toBe('dark_blue')\n const child3 = new ThemeManager(\n {\n componentName: 'Button',\n },\n child2\n )\n expect(child3.state.name).toBe('dark_blue_Button')\n })\n\n test(`Component theme with sub component that doesn't exist keeps same theme`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Button',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n componentName: 'Spacer',\n },\n child\n )\n expect(child2).toBe(child)\n })\n\n test(`Doesn't find invalid parent when only passing component`, () => {\n expect(!!conf.themes['dark_Card']).toBeTruthy()\n\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n\n const child = new ThemeManager(\n {\n componentName: 'Card',\n },\n parent\n )\n\n // dont find dark_Card because dark_red is highest it should climb\n expect(child.state.name).toBe(parent.state.name)\n })\n\n test(`Finds sub-theme when componentName and name are passed but componentName doesn't exist`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Missing',\n },\n parent\n )\n\n // dont find dark_Card because dark_red is highest it should climb\n expect(child.state.name).toBe('dark_red')\n })\n\n test(`Uses the full className without the light/dark prefix`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red_alt2',\n },\n parent\n )\n expect(child.state.className).toBe('t_red_alt2')\n\n const child2 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n const child3 = new ThemeManager(\n {\n name: 'alt2',\n },\n child2\n )\n expect(child3.state.className).toBe('t_red_alt2')\n })\n\n test(`Finds component dark_red + Button`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark_red',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.className).toBe('t_red_Button')\n expect(child.state.name).toBe('dark_red_Button')\n })\n\n test(`Drops componentName if only regular name found at stronger level`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'alt1',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.name).toBe('dark_red_alt1')\n })\n\n test(`Component name + theme change when nested already`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'yellow',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.name).toBe('dark_yellow_Button')\n })\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { getDefaultTamaguiConfig } from '@tamagui/config-default-node'\nimport { beforeAll, describe, expect, test } from 'vitest'\n\nimport { createTamagui } from '../createTamagui'\nimport { ThemeManager } from './ThemeManager'\n\nconst conf = getDefaultTamaguiConfig()\n\ndescribe('ThemeManager', () => {\n beforeAll(() => {\n createTamagui(conf)\n })\n\n test('Changes theme to dark', () => {\n const manager = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n expect(manager.state.name).toBe('dark')\n })\n\n test('Given parent theme \"dark\" and child theme \"red\" to return theme \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(parent.state.name).toBe('dark')\n expect(child.state.name).toBe('dark_red')\n })\n\n test('Given parent theme \"dark\", child theme \"red_alt2\" and component \"Button\" returns \"dark_red_alt2_Button\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n name: 'alt2',\n componentName: 'Button',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red_alt2_Button')\n })\n\n test('Given parent theme \"dark\", child theme \"red\" and component \"Button\" returns \"dark_red_Button\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n componentName: 'Button',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red_Button')\n })\n\n test('Given parent theme \"dark\", child theme \"red\" and missing component \"Card\" returns \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n const child2 = new ThemeManager(\n {\n componentName: 'Card',\n },\n child1\n )\n expect(child2.state.name).toBe('dark_red')\n })\n\n test('Changes \"light\" to \"dark\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n expect(parent.state.name).toBe('light')\n expect(child.state.name).toBe('dark')\n })\n\n test('Inverts \"light\" to \"dark\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n inverse: true,\n },\n parent\n )\n expect(child1.state.name).toBe('dark')\n })\n\n test('Inverts \"light_red\" to \"dark_red\"', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child1 = new ThemeManager(\n {\n name: 'red',\n inverse: true,\n },\n parent\n )\n expect(child1.state.name).toBe('dark_red')\n })\n\n test('Updates state', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const newState = parent.updateState({\n name: 'dark',\n })\n expect(newState).toMatchInlineSnapshot(`\n {\n \"className\": \"t_dark\",\n \"name\": \"dark\",\n \"parentName\": \"\",\n \"theme\": {\n \"background\": {\n \"isVar\": true,\n \"key\": \"color-2\",\n \"name\": \"background\",\n \"val\": \"#000\",\n \"variable\": \"\",\n },\n \"color\": {\n \"isVar\": true,\n \"key\": \"color-1\",\n \"name\": \"color\",\n \"val\": \"#fff\",\n \"variable\": \"\",\n },\n },\n }\n `)\n expect(parent.state.name).toBe('dark')\n })\n\n test('Returns parent on empty', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: null,\n },\n parent\n )\n expect(child).toBe(parent)\n })\n\n test('Resets theme', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n expect(child.state.name).toBe('dark')\n expect(child.parentManager).toBe(parent)\n const child2 = new ThemeManager(\n {\n reset: true,\n },\n child\n )\n expect(child2.parentManager).toBe(child)\n expect(child2.state.name).toBe('light')\n })\n\n test('Nested invert and reset', () => {\n const parent = new ThemeManager(\n {\n name: 'light',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n reset: true,\n },\n child\n )\n const child3 = new ThemeManager(\n {\n inverse: true,\n },\n child2\n )\n expect(child3.state.name).toBe('dark')\n })\n\n test('Updates from null the new theme nested 3 themes', () => {\n const a = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const b = new ThemeManager(\n {\n name: 'red',\n },\n a\n )\n expect(b.state.name).toBe('dark_red')\n const c = new ThemeManager(\n {\n name: 'alt2',\n },\n b\n )\n expect(c.state.name).toBe('dark_red_alt2')\n })\n\n test('Ignored dup themes', () => {\n const a = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const b = new ThemeManager(\n {\n name: 'dark',\n },\n a\n )\n expect(b === a).toBe(true)\n })\n\n test('Nested component themes fallback to grandparents', () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Button',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n name: 'blue',\n },\n child\n )\n expect(child2.state.name).toBe('dark_blue')\n const child3 = new ThemeManager(\n {\n componentName: 'Button',\n },\n child2\n )\n expect(child3.state.name).toBe('dark_blue_Button')\n })\n\n test(`Component theme with sub component that doesn't exist keeps same theme`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Button',\n },\n parent\n )\n const child2 = new ThemeManager(\n {\n componentName: 'Spacer',\n },\n child\n )\n expect(child2).toBe(child)\n })\n\n test(`Doesn't find invalid parent when only passing component`, () => {\n expect(!!conf.themes['dark_Card']).toBeTruthy()\n\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n\n const child = new ThemeManager(\n {\n componentName: 'Card',\n },\n parent\n )\n\n // dont find dark_Card because dark_red is highest it should climb\n expect(child.state.name).toBe(parent.state.name)\n })\n\n test(`Finds sub-theme when componentName and name are passed but componentName doesn't exist`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n\n const child = new ThemeManager(\n {\n name: 'red',\n componentName: 'Missing',\n },\n parent\n )\n\n // dont find dark_Card because dark_red is highest it should climb\n expect(child.state.name).toBe('dark_red')\n })\n\n test(`Uses the full className without the light/dark prefix`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'red_alt2',\n },\n parent\n )\n expect(child.state.className).toBe('t_red_alt2')\n\n const child2 = new ThemeManager(\n {\n name: 'red',\n },\n parent\n )\n const child3 = new ThemeManager(\n {\n name: 'alt2',\n },\n child2\n )\n expect(child3.state.className).toBe('t_red_alt2')\n })\n\n test(`Finds component dark_red + Button`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'dark_red',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.className).toBe('t_red_Button')\n expect(child.state.name).toBe('dark_red_Button')\n })\n\n test(`Drops componentName if only regular name found at stronger level`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'alt1',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.name).toBe('dark_red_alt1')\n })\n\n test(`Component name + theme change when nested already`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'yellow',\n componentName: 'Button',\n },\n parent\n )\n expect(child.state.name).toBe('dark_yellow_Button')\n })\n\n test(`Component name + name finds one up when component name missing`, () => {\n const parent = new ThemeManager(\n {\n name: 'dark_red_alt1',\n },\n 'root'\n )\n const child = new ThemeManager(\n {\n name: 'alt2',\n componentName: 'Missing',\n },\n parent\n )\n expect(child.state.name).toBe('dark_red_alt2')\n })\n})\n"],
5
+ "mappings": "AAAA,SAAS,+BAA+B;AACxC,SAAS,WAAW,UAAU,QAAQ,YAAY;AAElD,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAE7B,MAAM,OAAO,wBAAwB;AAErC,SAAS,gBAAgB,MAAM;AAC7B,YAAU,MAAM;AACd,kBAAc,IAAI;AAAA,EACpB,CAAC;AAED,OAAK,yBAAyB,MAAM;AAClC,UAAM,UAAU,IAAI;AAAA,MAClB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,QAAQ,MAAM,IAAI,EAAE,KAAK,MAAM;AAAA,EACxC,CAAC;AAED,OAAK,8EAA8E,MAAM;AACvF,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,MAAM;AACrC,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,UAAU;AAAA,EAC1C,CAAC;AAED,OAAK,2GAA2G,MAAM;AACpH,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,UAAU;AACzC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,sBAAsB;AAAA,EACvD,CAAC;AAED,OAAK,iGAAiG,MAAM;AAC1G,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,UAAU;AACzC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,iBAAiB;AAAA,EAClD,CAAC;AAED,OAAK,gGAAgG,MAAM;AACzG,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,UAAU;AACzC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,UAAU;AAAA,EAC3C,CAAC;AAED,OAAK,6BAA6B,MAAM;AACtC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,OAAO;AACtC,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,MAAM;AAAA,EACtC,CAAC;AAED,OAAK,6BAA6B,MAAM;AACtC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,SAAS;AAAA,MACX;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,MAAM;AAAA,EACvC,CAAC;AAED,OAAK,qCAAqC,MAAM;AAC9C,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,UAAU;AAAA,EAC3C,CAAC;AAED,OAAK,iBAAiB,MAAM;AAC1B,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,WAAW,OAAO,YAAY;AAAA,MAClC,MAAM;AAAA,IACR,CAAC;AACD,WAAO,QAAQ,EAAE,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAsBtC;AACD,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,MAAM;AAAA,EACvC,CAAC;AAED,OAAK,2BAA2B,MAAM;AACpC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,KAAK,EAAE,KAAK,MAAM;AAAA,EAC3B,CAAC;AAED,OAAK,gBAAgB,MAAM;AACzB,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,MAAM;AACpC,WAAO,MAAM,aAAa,EAAE,KAAK,MAAM;AACvC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,aAAa,EAAE,KAAK,KAAK;AACvC,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,OAAO;AAAA,EACxC,CAAC;AAED,OAAK,2BAA2B,MAAM;AACpC,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,SAAS;AAAA,MACX;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,MAAM;AAAA,EACvC,CAAC;AAED,OAAK,mDAAmD,MAAM;AAC5D,UAAM,IAAI,IAAI;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,IAAI,IAAI;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,EAAE,MAAM,IAAI,EAAE,KAAK,UAAU;AACpC,UAAM,IAAI,IAAI;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,EAAE,MAAM,IAAI,EAAE,KAAK,eAAe;AAAA,EAC3C,CAAC;AAED,OAAK,sBAAsB,MAAM;AAC/B,UAAM,IAAI,IAAI;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,IAAI,IAAI;AAAA,MACZ;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EAC3B,CAAC;AAED,OAAK,oDAAoD,MAAM;AAC7D,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,WAAW;AAC1C,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI,EAAE,KAAK,kBAAkB;AAAA,EACnD,CAAC;AAED,OAAK,0EAA0E,MAAM;AACnF,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,EAAE,KAAK,KAAK;AAAA,EAC3B,CAAC;AAED,OAAK,2DAA2D,MAAM;AACpE,WAAO,CAAC,CAAC,KAAK,OAAO,YAAY,EAAE,WAAW;AAE9C,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAGA,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,OAAO,MAAM,IAAI;AAAA,EACjD,CAAC;AAED,OAAK,0FAA0F,MAAM;AACnG,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAGA,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,UAAU;AAAA,EAC1C,CAAC;AAED,OAAK,yDAAyD,MAAM;AAClE,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,MAAM,SAAS,EAAE,KAAK,YAAY;AAE/C,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,MAAM,SAAS,EAAE,KAAK,YAAY;AAAA,EAClD,CAAC;AAED,OAAK,qCAAqC,MAAM;AAC9C,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,MAAM,SAAS,EAAE,KAAK,cAAc;AACjD,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,iBAAiB;AAAA,EACjD,CAAC;AAED,OAAK,oEAAoE,MAAM;AAC7E,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,eAAe;AAAA,EAC/C,CAAC;AAED,OAAK,qDAAqD,MAAM;AAC9D,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,oBAAoB;AAAA,EACpD,CAAC;AAED,OAAK,kEAAkE,MAAM;AAC3E,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,QACE,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,eAAe;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM,MAAM,IAAI,EAAE,KAAK,eAAe;AAAA,EAC/C,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }