@tamagui/core 1.0.1-rc.15 → 1.0.1-rc.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/createComponent.js +23 -26
- package/dist/cjs/createComponent.js.map +2 -2
- package/dist/cjs/helpers/ThemeManager.js +2 -0
- package/dist/cjs/helpers/ThemeManager.js.map +2 -2
- package/dist/cjs/helpers/Unwrap.js +29 -0
- package/dist/cjs/helpers/Unwrap.js.map +7 -0
- package/dist/cjs/helpers/getSplitStyles.js +4 -1
- package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
- package/dist/cjs/hooks/useTheme.js +10 -22
- package/dist/cjs/hooks/useTheme.js.map +2 -2
- package/dist/cjs/views/Theme.js +10 -11
- package/dist/cjs/views/Theme.js.map +2 -2
- package/dist/esm/createComponent.js +24 -27
- package/dist/esm/createComponent.js.map +2 -2
- package/dist/esm/helpers/ThemeManager.js +2 -0
- package/dist/esm/helpers/ThemeManager.js.map +2 -2
- package/dist/esm/helpers/Unwrap.js +5 -0
- package/dist/esm/helpers/Unwrap.js.map +7 -0
- package/dist/esm/helpers/getSplitStyles.js +4 -1
- package/dist/esm/helpers/getSplitStyles.js.map +2 -2
- package/dist/esm/hooks/useTheme.js +10 -22
- package/dist/esm/hooks/useTheme.js.map +2 -2
- package/dist/esm/views/Theme.js +10 -11
- package/dist/esm/views/Theme.js.map +2 -2
- package/package.json +10 -10
- package/src/createComponent.tsx +41 -41
- package/src/helpers/ThemeManager.tsx +5 -0
- package/src/helpers/getSplitStyles.tsx +18 -1
- package/src/hooks/useTheme.tsx +23 -19
- package/src/views/Theme.tsx +11 -15
- package/types/createComponent.d.ts +1 -1
- package/types/views/Theme.d.ts +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/helpers/getSplitStyles.tsx"],
|
|
4
|
-
"sourcesContent": ["import {\n isClient,\n isRSC,\n isServer,\n isWeb,\n useIsomorphicLayoutEffect,\n} from '@tamagui/constants'\nimport {\n stylePropsText,\n stylePropsTransform,\n validPseudoKeys,\n validStyles,\n validStylesOnBaseProps,\n} from '@tamagui/helpers'\nimport { useInsertionEffect } from 'react'\nimport type { ViewStyle } from 'react-native'\n\nimport { getConfig } from '../config'\nimport { isDevTools } from '../constants/isDevTools'\nimport {\n getMediaImportanceIfMoreImportant,\n mediaState as globalMediaState,\n mediaKeysWithAndWithout$,\n mediaQueryConfig,\n mergeMediaByImportance,\n} from '../hooks/useMedia'\nimport type {\n DebugProp,\n MediaQueryKey,\n PseudoPropKeys,\n PseudoStyles,\n SpaceTokens,\n SplitStyleState,\n StackProps,\n StaticConfigParsed,\n TamaguiInternalConfig,\n ThemeParsed,\n} from '../types'\nimport { FontLanguageProps, LanguageContextType } from '../views/FontLanguage.types'\nimport { createMediaStyle } from './createMediaStyle'\nimport { getPropMappedFontFamily } from './createPropMapper'\nimport { fixStyles } from './expandStyles'\nimport { getAtomicStyle, getStylesAtomic, styleToCSS } from './getStylesAtomic'\nimport {\n PartialStyleObject,\n RulesToInsert,\n insertStyleRules,\n insertedTransforms,\n scanAllSheets,\n shouldInsertStyleRules,\n updateRules,\n} from './insertStyleRule'\nimport { FlatTransforms, mergeTransform, mergeTransforms } from './mergeTransform'\nimport {\n normalizeValueWithProperty,\n reverseMapClassNameToValue,\n} from './normalizeValueWithProperty.js'\nimport { pseudoDescriptors } from './pseudoDescriptors'\n\ntype GetStyleResult = {\n pseudos: PseudoStyles\n medias: Record<MediaQueryKey, ViewStyle>\n style: ViewStyle\n classNames: ClassNamesObject\n rulesToInsert: RulesToInsert\n viewProps: StackProps & Record<string, any>\n fontFamily: string | undefined\n space?: any // SpaceTokens?\n hasMedia: boolean | 'space'\n}\n\ntype GetStyleState = {\n style: ViewStyle\n usedKeys: Record<string, number>\n classNames: ClassNamesObject\n flatTransforms: FlatTransforms\n staticConfig: StaticConfigParsed\n theme: ThemeParsed\n props: Record<string, any>\n viewProps: Record<string, any>\n state: SplitStyleState\n conf: TamaguiInternalConfig\n languageContext?: FontLanguageProps\n avoidDefaultProps?: boolean\n avoidMergeTransform?: boolean\n}\n\nexport type SplitStyles = ReturnType<typeof getSplitStyles>\nexport type ClassNamesObject = Record<string, string>\nexport type SplitStyleResult = ReturnType<typeof getSplitStyles>\n\nconst skipProps = {\n animation: true,\n space: true,\n animateOnly: true,\n debug: true,\n componentName: true,\n role: true,\n tag: true,\n}\nif (process.env.NODE_ENV === 'test') {\n skipProps['data-test-renders'] = true\n}\n\nconst IS_STATIC = process.env.IS_STATIC === 'is_static'\n\n// native only skips\nif (process.env.TAMAGUI_TARGET === 'native') {\n Object.assign(skipProps, {\n whiteSpace: true,\n wordWrap: true,\n textOverflow: true,\n textDecorationDistance: true,\n userSelect: true,\n selectable: true,\n cursor: true,\n contain: true,\n boxSizing: true,\n boxShadow: true,\n })\n}\n\n// web only maps accessibility to aria props\nconst accessibilityDirectMap: Record<string, string> = {}\nif (process.env.TAMAGUI_TARGET === 'web') {\n // bundle size shave\n const items = {\n Hidden: true,\n ActiveDescendant: true,\n Atomic: true,\n AutoComplete: true,\n Busy: true,\n Checked: true,\n ColumnCount: 'colcount',\n ColumnIndex: 'colindex',\n ColumnSpan: 'colspan',\n Current: true,\n Details: true,\n ErrorMessage: true,\n Expanded: true,\n HasPopup: true,\n Invalid: true,\n Label: true,\n Level: true,\n Modal: true,\n Multiline: true,\n MultiSelectable: true,\n Orientation: true,\n Owns: true,\n Placeholder: true,\n PosInSet: true,\n Pressed: true,\n RoleDescription: true,\n RowCount: true,\n RowIndex: true,\n RowSpan: true,\n Selected: true,\n SetSize: true,\n Sort: true,\n ValueMax: true,\n ValueMin: true,\n ValueNow: true,\n ValueText: true,\n }\n for (const key in items) {\n let val = items[key]\n if (val === true) {\n val = key.toLowerCase()\n }\n accessibilityDirectMap[`accessibility${key}`] = `aria-${val}`\n }\n}\n\ntype TransformNamespaceKey = 'transform' | PseudoPropKeys | MediaQueryKey\n\nlet conf: TamaguiInternalConfig\n\ntype StyleSplitter = (\n props: { [key: string]: any },\n staticConfig: StaticConfigParsed,\n theme: ThemeParsed,\n state: SplitStyleState,\n parentSplitStyles?: GetStyleResult | null,\n languageContext?: LanguageContextType,\n // web-only\n elementType?: string,\n debug?: DebugProp\n) => GetStyleResult\n\nexport const PROP_SPLIT = '-'\n\nconst accessibilityRoleToWebRole = {\n adjustable: 'slider',\n header: 'heading',\n image: 'img',\n link: 'link',\n none: 'presentation',\n summary: 'region',\n}\n\n// loop props backwards\n// track used keys:\n// const keys = new Set<string>()\n// keep classnames and styles separate:\n// const styles = {}\n// const classNames = {}\n\nconst isMediaKey = (key: string) =>\n Boolean(key[0] === '$' && mediaKeysWithAndWithout$.has(key))\n\nexport const getSplitStyles: StyleSplitter = (\n props,\n staticConfig,\n theme,\n state,\n parentSplitStyles,\n languageContext,\n elementType,\n debug\n) => {\n if (cache.has(props)) {\n return cache.get(props)\n }\n\n conf = conf || getConfig()\n const { shorthands } = conf\n const {\n defaultVariants,\n variants,\n propMapper,\n isReactNative,\n deoptProps,\n inlineProps,\n inlineWhenUnflattened,\n } = staticConfig\n const validStyleProps = staticConfig.isText ? stylePropsText : validStyles\n const viewProps: GetStyleResult['viewProps'] = {}\n const pseudos: PseudoStyles = {}\n let psuedosUsed: Record<string, number> | null = null\n const medias: Record<MediaQueryKey, ViewStyle> = {}\n const mediaState = state.mediaState || globalMediaState\n const usedKeys: Record<string, number> = {}\n const propKeys = Object.keys(props)\n let space: SpaceTokens | null = props.space\n let hasMedia: boolean | 'space' = space ? 'space' : false\n\n const shouldDoClasses =\n staticConfig.acceptsClassName && (isWeb || IS_STATIC) && !state.noClassNames\n\n let style: ViewStyle = {}\n const flatTransforms: FlatTransforms = {}\n\n const len = propKeys.length\n const rulesToInsert: RulesToInsert = []\n const classNames: ClassNamesObject = {}\n let className = '' // existing classNames\n // we need to gather these specific to each media query / pseudo\n // value is [hash, val], so [\"-jnjad-asdnjk\", \"scaleX(1) rotate(10deg)\"]\n const transforms: Record<TransformNamespaceKey, [string, string]> = {}\n // fontFamily is our special baby, ensure we grab the latest set one always\n let fontFamily: string | undefined\n\n const styleState: GetStyleState = {\n classNames,\n conf,\n flatTransforms,\n props,\n state,\n staticConfig,\n style,\n theme,\n usedKeys,\n viewProps,\n languageContext,\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.groupCollapsed('getSplitStyles')\n // eslint-disable-next-line no-console\n console.log(staticConfig, { shouldDoClasses, state, IS_STATIC })\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n\n if (props.className) {\n for (const cn of props.className.split(' ')) {\n if (cn[0] === '_') {\n // tamagui, merge it expanded on key, eventually this will go away with better compiler\n const [shorthand, mediaOrPseudo] = cn.slice(1).split('-')\n const isMedia = mediaOrPseudo[0] === '_'\n const isPseudo = mediaOrPseudo[0] === '0'\n const isMediaOrPseudo = isMedia || isPseudo\n let fullKey = shorthands[shorthand]\n if (isMedia) {\n // is media\n let mediaShortKey = mediaOrPseudo.slice(1)\n mediaShortKey = mediaShortKey.slice(0, mediaShortKey.indexOf('_'))\n fullKey += `${PROP_SPLIT}${mediaShortKey}`\n } else if (isPseudo) {\n // is pseudo\n const pseudoShortKey = mediaOrPseudo.slice(1)\n fullKey += `${PROP_SPLIT}${pseudoShortKey}`\n }\n if (process.env.NODE_ENV === 'development') {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log('tamagui classname', fullKey, cn)\n }\n }\n usedKeys[fullKey] = 1\n mergeClassName(transforms, classNames, fullKey, cn, isMediaOrPseudo)\n } else {\n if (cn) {\n className += ` ${cn}`\n }\n }\n }\n }\n\n // loop backwards so we can skip already-used props\n for (let i = len - 1; i >= 0; i--) {\n let keyInit = propKeys[i]\n if (keyInit === 'className') continue // handled above\n const valInit = props[keyInit]\n\n // normalize shorthands up front\n if (keyInit in shorthands) {\n keyInit = shorthands[keyInit]\n }\n\n if (keyInit in usedKeys) continue\n if (keyInit in skipProps) continue\n if (!isWeb && keyInit.startsWith('data-')) continue\n\n if (typeof valInit === 'string' && valInit[0] === '_') {\n if (keyInit in validStyleProps || keyInit.includes('-')) {\n if (shouldDoClasses) {\n classNames[keyInit] = valInit\n } else {\n style[keyInit] = reverseMapClassNameToValue(keyInit, valInit)\n }\n usedKeys[keyInit] = 1\n continue\n }\n }\n\n if (keyInit === 'style' || keyInit.startsWith('_style')) {\n if (!valInit) continue\n const styles = Array.isArray(valInit) ? valInit : [valInit]\n const styleLen = styles.length\n for (let j = styleLen; j >= 0; j--) {\n const cur = styles[j]\n if (!cur) continue\n for (const key in cur) {\n if (usedKeys[key]) continue\n usedKeys[key] = 1\n style[key] = cur[key]\n }\n }\n continue\n }\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n /**\n * Copying in the accessibility/prop handling from react-native-web here\n * Keeps it in a single loop, avoids dup de-structuring to avoid bundle size\n */\n if (keyInit === 'disabled' && valInit === true) {\n usedKeys[keyInit] = 1\n viewProps['aria-disabled'] = true\n // Enhance with native semantics\n if (\n elementType === 'button' ||\n elementType === 'form' ||\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n viewProps.disabled = true\n }\n if (!variants?.disabled) {\n continue\n }\n }\n\n if (keyInit === 'testID') {\n usedKeys[keyInit] = 1\n if (isReactNative) {\n viewProps.testId = valInit\n } else {\n viewProps['data-testid'] = valInit\n }\n continue\n }\n\n if (keyInit === 'id' || keyInit === 'nativeID') {\n usedKeys[keyInit] = 1\n if (isReactNative) {\n viewProps.nativeID = valInit\n } else {\n viewProps.id = valInit\n }\n continue\n }\n\n let didUseKeyInit = true\n\n if (isReactNative) {\n didUseKeyInit = false\n // pass along to react-native-web\n if (accessibilityDirectMap[keyInit] || keyInit.startsWith('accessibility')) {\n viewProps[keyInit] = valInit\n usedKeys[keyInit] = 1\n continue\n }\n } else {\n if (accessibilityDirectMap[keyInit]) {\n viewProps[accessibilityDirectMap[keyInit]] = valInit\n usedKeys[keyInit] = 1\n continue\n }\n switch (keyInit) {\n case 'accessibilityRole': {\n if (valInit === 'none') {\n viewProps.role = 'presentation'\n } else {\n viewProps.role = accessibilityRoleToWebRole[valInit] || valInit\n }\n break\n }\n case 'accessibilityLabelledBy':\n case 'accessibilityFlowTo':\n case 'accessibilityControls':\n case 'accessibilityDescribedBy': {\n viewProps[`aria-${keyInit.replace('accessibility', '').toLowerCase()}`] =\n processIDRefList(valInit)\n break\n }\n case 'accessibilityKeyShortcuts': {\n if (Array.isArray(valInit)) {\n viewProps['aria-keyshortcuts'] = valInit.join(' ')\n }\n break\n }\n case 'accessibilityLiveRegion': {\n viewProps['aria-live'] = valInit === 'none' ? 'off' : valInit\n break\n }\n case 'accessibilityReadOnly': {\n viewProps['aria-readonly'] = valInit\n // Enhance with native semantics\n if (\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n viewProps.readOnly = true\n }\n break\n }\n case 'accessibilityRequired': {\n viewProps['aria-required'] = valInit\n // Enhance with native semantics\n if (\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n viewProps.required = true\n }\n break\n }\n default: {\n didUseKeyInit = false\n }\n }\n }\n\n if (didUseKeyInit) {\n usedKeys[keyInit] = 1\n continue\n }\n\n if (valInit && valInit[0] === '_') {\n // if valid style key (or pseudo like color-hover):\n // this conditional and esp the pseudo check rarely runs so not a perf issue\n const isValidClassName = validStyles[keyInit]\n const isMediaOrPseudo =\n !isValidClassName &&\n keyInit.includes(PROP_SPLIT) &&\n validStyles[keyInit.split(PROP_SPLIT)[0]]\n\n if (isValidClassName || isMediaOrPseudo) {\n usedKeys[keyInit] = 1\n if (process.env.NODE_ENV === 'development') {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log('tamagui classname props', keyInit, valInit)\n }\n }\n mergeClassName(transforms, classNames, keyInit, valInit, isMediaOrPseudo)\n continue\n }\n }\n }\n\n if (\n (defaultVariants && keyInit in defaultVariants) ||\n // may want to just: not compile styled() into classnames, always do this, and always pass in all values in extras.props\n // but we'd want to add styled({ extracted: true }) or something at compile time to save on parsing a bit...\n (state.keepVariantsAsProps && variants && keyInit in variants)\n ) {\n viewProps[keyInit] = valInit\n }\n\n /**\n * There's (some) reason to this madness: we want to allow returning media/pseudo from variants\n * Say you have a variant hoverable: { true: { hoverStyle: {} } }\n * We run propMapper first to expand variant, then we run the inner loop and look again\n * for if there's a pseudo/media returned from it.\n */\n\n let isMedia = isMediaKey(keyInit)\n let isPseudo = validPseudoKeys[keyInit]\n\n if (\n !(\n isMedia ||\n isPseudo ||\n variants?.[keyInit] ||\n validStyleProps[keyInit] ||\n shorthands[keyInit]\n )\n ) {\n // web-only, exclude all other accessibility props not handled above\n if (isWeb && keyInit.indexOf('ccessibility') > 0) {\n continue\n }\n usedKeys[keyInit] = 1\n viewProps[keyInit] = valInit\n continue\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 styles', keyInit, valInit)\n }\n\n const expanded =\n isMedia || isPseudo\n ? [[keyInit, valInit]]\n : propMapper(\n keyInit,\n valInit,\n theme,\n props,\n state,\n languageContext,\n undefined,\n debug\n )\n\n if (!fontFamily) {\n fontFamily = getPropMappedFontFamily(expanded)\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n if (!isServer && isWeb) {\n // eslint-disable-next-line no-console\n console.log('expanded', expanded, '\\nusedKeys', usedKeys, '\\ncurrent', {\n ...style,\n })\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n\n if (!expanded) continue\n\n for (const [key, val] of expanded) {\n if (val === undefined) continue\n\n isMedia = isMediaKey(key)\n isPseudo = validPseudoKeys[key]\n const isMediaOrPseudo = isMedia || isPseudo\n\n if (!isMediaOrPseudo && usedKeys[key]) {\n continue\n }\n\n if (inlineProps?.has(key) || inlineWhenUnflattened?.has(key)) {\n usedKeys[key] = 1\n viewProps[key] = props[key] ?? val\n }\n\n // pseudo\n if (isPseudo) {\n if (!val) continue\n\n // TODO can avoid processing this if !shouldDoClasses + state is off\n const pseudoStyleObject = getSubStyle(\n styleState,\n key,\n val,\n true,\n state.noClassNames\n )\n\n const descriptor = pseudoDescriptors[key as keyof typeof pseudoDescriptors]\n const isEnter = descriptor.name === 'enter'\n const isExit = descriptor.name === 'exit'\n\n // don't continue here on isEnter && !state.unmounted because we need to merge defaults\n if (!descriptor || (isExit && !state.isExiting)) {\n continue\n }\n\n if (!shouldDoClasses || IS_STATIC) {\n pseudos[key] ||= {}\n Object.assign(pseudos[key], pseudoStyleObject)\n }\n\n if (shouldDoClasses && !isEnter && !isExit) {\n const pseudoStyles = getAtomicStyle(pseudoStyleObject, descriptor)\n for (const psuedoStyle of pseudoStyles) {\n const fullKey = `${psuedoStyle.property}${PROP_SPLIT}${descriptor.name}`\n if (!usedKeys[fullKey]) {\n usedKeys[fullKey] = 1\n addStyleToInsertRules(rulesToInsert, psuedoStyle)\n mergeClassName(\n transforms,\n classNames,\n fullKey,\n psuedoStyle.identifier,\n isMediaOrPseudo\n )\n }\n }\n } else {\n const isDisabled = !state[descriptor.stateKey || descriptor.name]\n if (!isDisabled) {\n usedKeys[key] ||= 1\n }\n psuedosUsed ||= {}\n\n const importance = descriptor.priority\n for (const pkey in pseudoStyleObject) {\n const val = pseudoStyleObject[pkey]\n // when disabled ensure the default value is set for future animations to align\n if (isDisabled) {\n if (!(pkey in usedKeys) && pkey in animatableDefaults) {\n const defaultVal = animatableDefaults[pkey]\n mergeStyle(styleState, pkey, defaultVal, true)\n }\n continue\n }\n const curImportance = psuedosUsed[importance] || 0\n if (importance >= curImportance) {\n psuedosUsed[pkey] = importance\n pseudos[key] ||= {}\n pseudos[key][pkey] = val\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && debug === 'verbose')\n console.log('merging', pkey, val)\n mergeStyle(styleState, pkey, val)\n }\n }\n }\n continue\n }\n\n // media\n if (isMedia) {\n if (!val) continue\n\n hasMedia ||= true\n\n // THIS USED TO PROXY BACK TO REGULAR PROPS BUT THAT IS THE WRONG BEHAVIOR\n // we avoid passing in default props for media queries because that would confuse things like SizableText.size:\n\n const mediaStyle = getSubStyle(\n styleState,\n key,\n val,\n // TODO try true like pseudo\n false\n )\n\n const mediaKeyShort = key.slice(1)\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(` \uD83D\uDCFA ${key}`, mediaState[mediaKeyShort], {\n key,\n mediaStyle,\n props,\n shouldDoClasses,\n mediaState: { ...mediaState },\n })\n }\n\n if ('space' in mediaStyle) {\n hasMedia = 'space'\n }\n\n if (shouldDoClasses) {\n if ('space' in mediaStyle) {\n const val = valInit.space\n delete mediaStyle['space']\n if (\n mediaState[mediaKeyShort] &&\n getMediaImportanceIfMoreImportant(mediaKeyShort, 'space', usedKeys)\n ) {\n space = val\n }\n }\n const mediaStyles = getStylesAtomic(mediaStyle)\n for (const style of mediaStyles) {\n const out = createMediaStyle(style, mediaKeyShort, mediaQueryConfig)\n const fullKey = `${style.property}${PROP_SPLIT}${mediaKeyShort}`\n if (!usedKeys[fullKey]) {\n usedKeys[fullKey] = 1\n addStyleToInsertRules(rulesToInsert, out)\n mergeClassName(transforms, classNames, fullKey, out.identifier, true)\n }\n }\n } else if (mediaState[mediaKeyShort]) {\n for (const subKey in mediaStyle) {\n const importance = getMediaImportanceIfMoreImportant(\n mediaKeyShort,\n subKey,\n usedKeys\n )\n if (importance === null) continue\n if (subKey === 'space') {\n space = valInit.space\n continue\n }\n mergeMediaByImportance(\n style,\n mediaKeyShort,\n subKey,\n mediaStyle[subKey],\n usedKeys\n )\n if (key === 'fontFamily') {\n fontFamily = mediaStyle[key]\n }\n }\n }\n continue\n }\n\n if (!isWeb && key === 'pointerEvents') {\n usedKeys[key] = 1\n viewProps[key] = val\n continue\n }\n\n if (key === 'fontFamily' && !fontFamily && valInit && val) {\n fontFamily = valInit[0] === '$' ? valInit : val\n }\n\n if (key in validStyleProps) {\n mergeStyle(styleState, key, val)\n continue\n }\n\n // pass to view props\n if (!(variants && key in variants)) {\n if (!skipProps[key]) {\n viewProps[key] = val\n usedKeys[key] = 1\n }\n }\n }\n }\n\n fixStyles(style)\n if (isWeb) {\n styleToCSS(style)\n }\n\n // always do this at the very end to preserve the order strictly (animations, origin)\n // and allow proper merging of all pseudos before applying\n if (flatTransforms) {\n if (process.env.NODE_ENV === 'development' && debug) {\n // eslint-disable-next-line no-console\n console.log(\n 'Merging flat transforms, transform before',\n [...(style.transform || [])],\n flatTransforms\n )\n }\n mergeTransforms(style, flatTransforms, true)\n }\n\n // add in defaults if not set:\n if (parentSplitStyles) {\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (shouldDoClasses) {\n for (const key in parentSplitStyles.classNames) {\n const val = parentSplitStyles.classNames[key]\n if (key in style || key in classNames) continue\n classNames[key] = val\n }\n }\n }\n if (!shouldDoClasses) {\n for (const key in parentSplitStyles.style) {\n if (key in classNames || key in style) continue\n style[key] = parentSplitStyles.style[key]\n }\n }\n }\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (shouldDoClasses) {\n if (style['$$css']) {\n // avoid re-processing for rnw\n } else {\n const atomic = getStylesAtomic(style)\n for (const atomicStyle of atomic) {\n const key = atomicStyle.property\n addStyleToInsertRules(rulesToInsert, atomicStyle)\n mergeClassName(transforms, classNames, key, atomicStyle.identifier)\n }\n if (!IS_STATIC) {\n style = {}\n }\n }\n }\n\n if (transforms) {\n for (const namespace in transforms) {\n if (!transforms[namespace]) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('Error no transform', transforms, namespace)\n }\n continue\n }\n const [hash, val] = transforms[namespace]\n const identifier = `_transform${hash}`\n if (isClient && !insertedTransforms[identifier]) {\n const rule = `.${identifier} { transform: ${val}; }`\n addStyleToInsertRules(rulesToInsert, {\n identifier,\n rules: [rule],\n property: namespace,\n })\n }\n classNames[namespace] = identifier\n }\n }\n }\n\n const result = {\n space,\n hasMedia,\n fontFamily,\n viewProps,\n style,\n medias,\n pseudos,\n classNames,\n rulesToInsert,\n }\n\n if (className) {\n classNames.className = className\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n if (isDevTools) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 styles =>')\n const logs = {\n transforms,\n viewProps,\n state,\n rulesToInsert,\n parentSplitStyles,\n flatTransforms,\n result,\n }\n for (const key in { ...result, ...logs }) {\n // eslint-disable-next-line no-console\n console.log(key, logs[key])\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n\n cache.set(props, result)\n\n return result\n}\n\nfunction mergeClassName(\n transforms: Record<string, any[]>,\n classNames: Record<string, string>,\n key: string,\n val: string,\n isMediaOrPseudo = false\n) {\n if (process.env.TAMAGUI_TARGET === 'web') {\n // empty classnames passed by compiler sometimes\n if (!val) return\n if (val.startsWith('_transform-')) {\n const namespace: TransformNamespaceKey = isMediaOrPseudo ? key : 'transform'\n let transform = insertedTransforms[val]\n if (isClient) {\n if (!transform) {\n // HMR or loaded a new chunk\n console.warn(`got a new ting`)\n scanAllSheets()\n transform = insertedTransforms[val]\n if (process.env.NODE_ENV === 'development') {\n if (!transform) {\n // eslint-disable-next-line no-console\n console.warn('no transform found', { insertedTransforms, val })\n }\n }\n }\n if (!transform) {\n if (isWeb && val[0] !== '_') {\n // runtime insert\n transform = val\n }\n }\n }\n transforms[namespace] = transforms[namespace] || ['', '']\n const identifier = val.replace('_transform', '')\n transforms[namespace][0] += identifier\n // ssr doesn't need to do anything just make the right classname\n if (transform) {\n transforms[namespace][1] += transform\n }\n } else {\n classNames[key] = val\n }\n }\n}\n\n/**\n * getSubStyle calls propMapper with props\n * those should be specific to the substyle, but fallback to the base props\n * so given props:\n *\n * { fontSize: 12, color: 'red', $sm: { color: 'blue' } }\n *\n * getSubStyle props should be a proxy that ends up like:\n *\n * { fontSize: 12, color: 'blue' }\n *\n * and to avoid re-creating it over and over, use a WeakMap\n */\nconst cache = new WeakMap()\nfunction getSubStyleProps(\n defaultProps: Object,\n baseProps: Object,\n specificProps: Object\n) {\n const key = specificProps || baseProps\n // can cache based only on specific it's always referentially consistent with base\n if (!cache.has(key)) {\n cache.set(key, {\n ...defaultProps,\n ...baseProps,\n ...specificProps,\n })\n }\n return cache.get(key)!\n}\n\nfunction mergeStyle(\n { usedKeys, classNames, flatTransforms, viewProps, style }: GetStyleState,\n key: string,\n val: any,\n dontSetUsed = false\n) {\n if (!dontSetUsed) {\n usedKeys[key] = usedKeys[key] || 1\n }\n if (val && val[0] === '_') {\n classNames[key] = val\n } else if (key in stylePropsTransform) {\n flatTransforms ||= {}\n flatTransforms[key] = val\n } else {\n const out = normalizeValueWithProperty(val, key)\n if (key in validStylesOnBaseProps) {\n viewProps[key] = out\n } else {\n style[key] = out\n }\n }\n}\n\nexport const getSubStyle = (\n styleState: GetStyleState,\n subKey: string,\n styleIn: Object,\n avoidDefaultProps?: boolean,\n avoidMergeTransform?: boolean\n): ViewStyle => {\n const { staticConfig, theme, props, state, conf, languageContext } = styleState\n const styleOut: ViewStyle = {}\n\n for (let key in styleIn) {\n const val = styleIn[key]\n key = conf.shorthands[key] || key\n const expanded = staticConfig.propMapper(\n key,\n val,\n theme,\n getSubStyleProps(staticConfig.defaultProps, props, props[subKey]),\n state,\n languageContext,\n avoidDefaultProps\n )\n if (!expanded) continue\n for (const [skey, sval] of expanded) {\n if (!avoidMergeTransform && skey in stylePropsTransform) {\n mergeTransform(styleOut, skey, sval)\n } else {\n styleOut[skey] = normalizeValueWithProperty(sval, key)\n }\n }\n }\n\n fixStyles(styleOut)\n\n return styleOut\n}\n\nexport const insertSplitStyles: StyleSplitter = (...args) => {\n const res = getSplitStyles(...args)\n insertStyleRules(res.rulesToInsert)\n return res\n}\n\n// on native no need to insert any css\nconst useInsertEffectCompat = isWeb\n ? useInsertionEffect || useIsomorphicLayoutEffect\n : () => {}\n\nexport const useSplitStyles: StyleSplitter = (...args) => {\n const res = getSplitStyles(...args)\n\n if (!isRSC) {\n useInsertEffectCompat(() => {\n insertStyleRules(res.rulesToInsert)\n }, [res.rulesToInsert])\n }\n\n return res\n}\n\nfunction addStyleToInsertRules(\n rulesToInsert: RulesToInsert,\n styleObject: PartialStyleObject\n) {\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (!shouldInsertStyleRules(styleObject)) {\n return\n }\n updateRules(styleObject.identifier, styleObject.rules)\n rulesToInsert.push(styleObject)\n }\n}\n\nfunction processIDRefList(idRefList: string | Array<string>): string {\n return Array.isArray(idRefList) ? idRefList.join(' ') : idRefList\n}\n\nconst animatableDefaults = {\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 {\n isClient,\n isRSC,\n isServer,\n isWeb,\n useIsomorphicLayoutEffect,\n} from '@tamagui/constants'\nimport {\n stylePropsText,\n stylePropsTransform,\n validPseudoKeys,\n validStyles,\n validStylesOnBaseProps,\n} from '@tamagui/helpers'\nimport { useInsertionEffect } from 'react'\nimport type { ViewStyle } from 'react-native'\n\nimport { getConfig } from '../config'\nimport { isDevTools } from '../constants/isDevTools'\nimport {\n getMediaImportanceIfMoreImportant,\n mediaState as globalMediaState,\n mediaKeysWithAndWithout$,\n mediaQueryConfig,\n mergeMediaByImportance,\n} from '../hooks/useMedia'\nimport type {\n DebugProp,\n MediaQueryKey,\n PseudoPropKeys,\n PseudoStyles,\n SpaceTokens,\n SplitStyleState,\n StackProps,\n StaticConfigParsed,\n TamaguiInternalConfig,\n ThemeParsed,\n} from '../types'\nimport { FontLanguageProps, LanguageContextType } from '../views/FontLanguage.types'\nimport { createMediaStyle } from './createMediaStyle'\nimport { getPropMappedFontFamily } from './createPropMapper'\nimport { fixStyles } from './expandStyles'\nimport { getAtomicStyle, getStylesAtomic, styleToCSS } from './getStylesAtomic'\nimport {\n PartialStyleObject,\n RulesToInsert,\n insertStyleRules,\n insertedTransforms,\n scanAllSheets,\n shouldInsertStyleRules,\n updateRules,\n} from './insertStyleRule'\nimport { FlatTransforms, mergeTransform, mergeTransforms } from './mergeTransform'\nimport {\n normalizeValueWithProperty,\n reverseMapClassNameToValue,\n} from './normalizeValueWithProperty.js'\nimport { pseudoDescriptors } from './pseudoDescriptors'\n\ntype GetStyleResult = {\n pseudos: PseudoStyles\n medias: Record<MediaQueryKey, ViewStyle>\n style: ViewStyle\n classNames: ClassNamesObject\n rulesToInsert: RulesToInsert\n viewProps: StackProps & Record<string, any>\n fontFamily: string | undefined\n space?: any // SpaceTokens?\n hasMedia: boolean | 'space'\n}\n\ntype GetStyleState = {\n style: ViewStyle\n usedKeys: Record<string, number>\n classNames: ClassNamesObject\n flatTransforms: FlatTransforms\n staticConfig: StaticConfigParsed\n theme: ThemeParsed\n props: Record<string, any>\n viewProps: Record<string, any>\n state: SplitStyleState\n conf: TamaguiInternalConfig\n languageContext?: FontLanguageProps\n avoidDefaultProps?: boolean\n avoidMergeTransform?: boolean\n}\n\nexport type SplitStyles = ReturnType<typeof getSplitStyles>\nexport type ClassNamesObject = Record<string, string>\nexport type SplitStyleResult = ReturnType<typeof getSplitStyles>\n\nconst skipProps = {\n animation: true,\n space: true,\n animateOnly: true,\n debug: true,\n componentName: true,\n role: true,\n tag: true,\n}\nif (process.env.NODE_ENV === 'test') {\n skipProps['data-test-renders'] = true\n}\n\nconst IS_STATIC = process.env.IS_STATIC === 'is_static'\n\n// native only skips\nif (process.env.TAMAGUI_TARGET === 'native') {\n Object.assign(skipProps, {\n whiteSpace: true,\n wordWrap: true,\n textOverflow: true,\n textDecorationDistance: true,\n userSelect: true,\n selectable: true,\n cursor: true,\n contain: true,\n boxSizing: true,\n boxShadow: true,\n })\n}\n\n// web only maps accessibility to aria props\nconst accessibilityDirectMap: Record<string, string> = {}\nif (process.env.TAMAGUI_TARGET === 'web') {\n // bundle size shave\n const items = {\n Hidden: true,\n ActiveDescendant: true,\n Atomic: true,\n AutoComplete: true,\n Busy: true,\n Checked: true,\n ColumnCount: 'colcount',\n ColumnIndex: 'colindex',\n ColumnSpan: 'colspan',\n Current: true,\n Details: true,\n ErrorMessage: true,\n Expanded: true,\n HasPopup: true,\n Invalid: true,\n Label: true,\n Level: true,\n Modal: true,\n Multiline: true,\n MultiSelectable: true,\n Orientation: true,\n Owns: true,\n Placeholder: true,\n PosInSet: true,\n Pressed: true,\n RoleDescription: true,\n RowCount: true,\n RowIndex: true,\n RowSpan: true,\n Selected: true,\n SetSize: true,\n Sort: true,\n ValueMax: true,\n ValueMin: true,\n ValueNow: true,\n ValueText: true,\n }\n for (const key in items) {\n let val = items[key]\n if (val === true) {\n val = key.toLowerCase()\n }\n accessibilityDirectMap[`accessibility${key}`] = `aria-${val}`\n }\n}\n\ntype TransformNamespaceKey = 'transform' | PseudoPropKeys | MediaQueryKey\n\nlet conf: TamaguiInternalConfig\n\ntype StyleSplitter = (\n props: { [key: string]: any },\n staticConfig: StaticConfigParsed,\n theme: ThemeParsed,\n state: SplitStyleState,\n parentSplitStyles?: GetStyleResult | null,\n languageContext?: LanguageContextType,\n // web-only\n elementType?: string,\n debug?: DebugProp\n) => GetStyleResult\n\nexport const PROP_SPLIT = '-'\n\nconst accessibilityRoleToWebRole = {\n adjustable: 'slider',\n header: 'heading',\n image: 'img',\n link: 'link',\n none: 'presentation',\n summary: 'region',\n}\n\n// loop props backwards\n// track used keys:\n// const keys = new Set<string>()\n// keep classnames and styles separate:\n// const styles = {}\n// const classNames = {}\n\nconst isMediaKey = (key: string) =>\n Boolean(key[0] === '$' && mediaKeysWithAndWithout$.has(key))\n\nexport const getSplitStyles: StyleSplitter = (\n props,\n staticConfig,\n theme,\n state,\n parentSplitStyles,\n languageContext,\n elementType,\n debug\n) => {\n if (cache.has(props)) {\n return cache.get(props)\n }\n\n conf = conf || getConfig()\n const { shorthands } = conf\n const {\n defaultVariants,\n variants,\n propMapper,\n isReactNative,\n deoptProps,\n inlineProps,\n inlineWhenUnflattened,\n } = staticConfig\n const validStyleProps = staticConfig.isText ? stylePropsText : validStyles\n const viewProps: GetStyleResult['viewProps'] = {}\n const pseudos: PseudoStyles = {}\n let psuedosUsed: Record<string, number> | null = null\n const medias: Record<MediaQueryKey, ViewStyle> = {}\n const mediaState = state.mediaState || globalMediaState\n const usedKeys: Record<string, number> = {}\n const propKeys = Object.keys(props)\n let space: SpaceTokens | null = props.space\n let hasMedia: boolean | 'space' = space ? 'space' : false\n\n const shouldDoClasses =\n staticConfig.acceptsClassName && (isWeb || IS_STATIC) && !state.noClassNames\n\n let style: ViewStyle = {}\n const flatTransforms: FlatTransforms = {}\n\n const len = propKeys.length\n const rulesToInsert: RulesToInsert = []\n const classNames: ClassNamesObject = {}\n let className = '' // existing classNames\n // we need to gather these specific to each media query / pseudo\n // value is [hash, val], so [\"-jnjad-asdnjk\", \"scaleX(1) rotate(10deg)\"]\n const transforms: Record<TransformNamespaceKey, [string, string]> = {}\n // fontFamily is our special baby, ensure we grab the latest set one always\n let fontFamily: string | undefined\n\n const styleState: GetStyleState = {\n classNames,\n conf,\n flatTransforms,\n props,\n state,\n staticConfig,\n style,\n theme,\n usedKeys,\n viewProps,\n languageContext,\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.groupCollapsed('getSplitStyles')\n // eslint-disable-next-line no-console\n console.log(staticConfig, { shouldDoClasses, state, IS_STATIC })\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n\n if (props.className) {\n for (const cn of props.className.split(' ')) {\n if (cn[0] === '_') {\n // tamagui, merge it expanded on key, eventually this will go away with better compiler\n const [shorthand, mediaOrPseudo] = cn.slice(1).split('-')\n const isMedia = mediaOrPseudo[0] === '_'\n const isPseudo = mediaOrPseudo[0] === '0'\n const isMediaOrPseudo = isMedia || isPseudo\n let fullKey = shorthands[shorthand]\n if (isMedia) {\n // is media\n let mediaShortKey = mediaOrPseudo.slice(1)\n mediaShortKey = mediaShortKey.slice(0, mediaShortKey.indexOf('_'))\n fullKey += `${PROP_SPLIT}${mediaShortKey}`\n } else if (isPseudo) {\n // is pseudo\n const pseudoShortKey = mediaOrPseudo.slice(1)\n fullKey += `${PROP_SPLIT}${pseudoShortKey}`\n }\n if (process.env.NODE_ENV === 'development') {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log('tamagui classname', fullKey, cn)\n }\n }\n usedKeys[fullKey] = 1\n mergeClassName(transforms, classNames, fullKey, cn, isMediaOrPseudo)\n } else {\n if (cn) {\n className += ` ${cn}`\n }\n }\n }\n }\n\n // loop backwards so we can skip already-used props\n for (let i = len - 1; i >= 0; i--) {\n let keyInit = propKeys[i]\n if (keyInit === 'className') continue // handled above\n const valInit = props[keyInit]\n\n // normalize shorthands up front\n if (keyInit in shorthands) {\n keyInit = shorthands[keyInit]\n }\n\n if (keyInit in usedKeys) continue\n if (keyInit in skipProps) continue\n if (!isWeb && keyInit.startsWith('data-')) continue\n\n if (typeof valInit === 'string' && valInit[0] === '_') {\n if (keyInit in validStyleProps || keyInit.includes('-')) {\n if (shouldDoClasses) {\n classNames[keyInit] = valInit\n } else {\n style[keyInit] = reverseMapClassNameToValue(keyInit, valInit)\n }\n usedKeys[keyInit] = 1\n continue\n }\n }\n\n if (keyInit === 'style' || keyInit.startsWith('_style')) {\n if (!valInit) continue\n const styles = Array.isArray(valInit) ? valInit : [valInit]\n const styleLen = styles.length\n for (let j = styleLen; j >= 0; j--) {\n const cur = styles[j]\n if (!cur) continue\n for (const key in cur) {\n if (usedKeys[key]) continue\n usedKeys[key] = 1\n style[key] = cur[key]\n }\n }\n continue\n }\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n /**\n * Copying in the accessibility/prop handling from react-native-web here\n * Keeps it in a single loop, avoids dup de-structuring to avoid bundle size\n */\n if (keyInit === 'disabled' && valInit === true) {\n usedKeys[keyInit] = 1\n viewProps['aria-disabled'] = true\n // Enhance with native semantics\n if (\n elementType === 'button' ||\n elementType === 'form' ||\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n viewProps.disabled = true\n }\n if (!variants?.disabled) {\n continue\n }\n }\n\n if (keyInit === 'testID') {\n usedKeys[keyInit] = 1\n if (isReactNative) {\n viewProps.testId = valInit\n } else {\n viewProps['data-testid'] = valInit\n }\n continue\n }\n\n if (keyInit === 'id' || keyInit === 'nativeID') {\n usedKeys[keyInit] = 1\n if (isReactNative) {\n viewProps.nativeID = valInit\n } else {\n viewProps.id = valInit\n }\n continue\n }\n\n let didUseKeyInit = true\n\n if (isReactNative) {\n didUseKeyInit = false\n // pass along to react-native-web\n if (accessibilityDirectMap[keyInit] || keyInit.startsWith('accessibility')) {\n viewProps[keyInit] = valInit\n usedKeys[keyInit] = 1\n continue\n }\n } else {\n if (accessibilityDirectMap[keyInit]) {\n viewProps[accessibilityDirectMap[keyInit]] = valInit\n usedKeys[keyInit] = 1\n continue\n }\n switch (keyInit) {\n case 'accessibilityRole': {\n if (valInit === 'none') {\n viewProps.role = 'presentation'\n } else {\n viewProps.role = accessibilityRoleToWebRole[valInit] || valInit\n }\n break\n }\n case 'accessibilityLabelledBy':\n case 'accessibilityFlowTo':\n case 'accessibilityControls':\n case 'accessibilityDescribedBy': {\n viewProps[`aria-${keyInit.replace('accessibility', '').toLowerCase()}`] =\n processIDRefList(valInit)\n break\n }\n case 'accessibilityKeyShortcuts': {\n if (Array.isArray(valInit)) {\n viewProps['aria-keyshortcuts'] = valInit.join(' ')\n }\n break\n }\n case 'accessibilityLiveRegion': {\n viewProps['aria-live'] = valInit === 'none' ? 'off' : valInit\n break\n }\n case 'accessibilityReadOnly': {\n viewProps['aria-readonly'] = valInit\n // Enhance with native semantics\n if (\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n viewProps.readOnly = true\n }\n break\n }\n case 'accessibilityRequired': {\n viewProps['aria-required'] = valInit\n // Enhance with native semantics\n if (\n elementType === 'input' ||\n elementType === 'select' ||\n elementType === 'textarea'\n ) {\n viewProps.required = true\n }\n break\n }\n default: {\n didUseKeyInit = false\n }\n }\n }\n\n if (didUseKeyInit) {\n usedKeys[keyInit] = 1\n continue\n }\n\n if (valInit && valInit[0] === '_') {\n // if valid style key (or pseudo like color-hover):\n // this conditional and esp the pseudo check rarely runs so not a perf issue\n const isValidClassName = validStyles[keyInit]\n const isMediaOrPseudo =\n !isValidClassName &&\n keyInit.includes(PROP_SPLIT) &&\n validStyles[keyInit.split(PROP_SPLIT)[0]]\n\n if (isValidClassName || isMediaOrPseudo) {\n usedKeys[keyInit] = 1\n if (process.env.NODE_ENV === 'development') {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log('tamagui classname props', keyInit, valInit)\n }\n }\n mergeClassName(transforms, classNames, keyInit, valInit, isMediaOrPseudo)\n continue\n }\n }\n }\n\n if (\n (defaultVariants && keyInit in defaultVariants) ||\n // may want to just: not compile styled() into classnames, always do this, and always pass in all values in extras.props\n // but we'd want to add styled({ extracted: true }) or something at compile time to save on parsing a bit...\n (state.keepVariantsAsProps && variants && keyInit in variants)\n ) {\n viewProps[keyInit] = valInit\n }\n\n /**\n * There's (some) reason to this madness: we want to allow returning media/pseudo from variants\n * Say you have a variant hoverable: { true: { hoverStyle: {} } }\n * We run propMapper first to expand variant, then we run the inner loop and look again\n * for if there's a pseudo/media returned from it.\n */\n\n let isMedia = isMediaKey(keyInit)\n let isPseudo = validPseudoKeys[keyInit]\n\n if (\n !(\n isMedia ||\n isPseudo ||\n variants?.[keyInit] ||\n validStyleProps[keyInit] ||\n shorthands[keyInit]\n )\n ) {\n // web-only, exclude all other accessibility props not handled above\n if (isWeb && keyInit.indexOf('ccessibility') > 0) {\n continue\n }\n usedKeys[keyInit] = 1\n viewProps[keyInit] = valInit\n continue\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 styles', keyInit, valInit)\n }\n\n const expanded =\n isMedia || isPseudo\n ? [[keyInit, valInit]]\n : propMapper(\n keyInit,\n valInit,\n theme,\n props,\n state,\n languageContext,\n undefined,\n debug\n )\n\n if (!fontFamily) {\n fontFamily = getPropMappedFontFamily(expanded)\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n if (!isServer && isWeb) {\n // eslint-disable-next-line no-console\n console.log('expanded', expanded, '\\nusedKeys', usedKeys, '\\ncurrent', {\n ...style,\n })\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n\n if (!expanded) continue\n\n for (const [key, val] of expanded) {\n if (val === undefined) continue\n\n isMedia = isMediaKey(key)\n isPseudo = validPseudoKeys[key]\n const isMediaOrPseudo = isMedia || isPseudo\n\n if (!isMediaOrPseudo && usedKeys[key]) {\n continue\n }\n\n if (inlineProps?.has(key) || inlineWhenUnflattened?.has(key)) {\n usedKeys[key] = 1\n viewProps[key] = props[key] ?? val\n }\n\n // pseudo\n if (isPseudo) {\n if (!val) continue\n\n // TODO can avoid processing this if !shouldDoClasses + state is off\n const pseudoStyleObject = getSubStyle(\n styleState,\n key,\n val,\n true,\n state.noClassNames\n )\n\n const descriptor = pseudoDescriptors[key as keyof typeof pseudoDescriptors]\n const isEnter = descriptor.name === 'enter'\n const isExit = descriptor.name === 'exit'\n\n // don't continue here on isEnter && !state.unmounted because we need to merge defaults\n if (!descriptor || (isExit && !state.isExiting)) {\n continue\n }\n\n if (!shouldDoClasses || IS_STATIC) {\n pseudos[key] ||= {}\n Object.assign(pseudos[key], pseudoStyleObject)\n }\n\n if (shouldDoClasses && !isEnter && !isExit) {\n const pseudoStyles = getAtomicStyle(pseudoStyleObject, descriptor)\n for (const psuedoStyle of pseudoStyles) {\n const fullKey = `${psuedoStyle.property}${PROP_SPLIT}${descriptor.name}`\n if (!usedKeys[fullKey]) {\n usedKeys[fullKey] = 1\n addStyleToInsertRules(rulesToInsert, psuedoStyle)\n mergeClassName(\n transforms,\n classNames,\n fullKey,\n psuedoStyle.identifier,\n isMediaOrPseudo\n )\n }\n }\n } else {\n let isDisabled = !state[descriptor.stateKey || descriptor.name]\n\n // we never animate in on server side just show the full thing\n // on client side we use CSS to hide the fully in SSR items, then\n // un-hide and replay with original animation.\n if (!isClient && isEnter) {\n isDisabled = false\n }\n\n // console.log(\n // 'isDisabled',\n // state,\n // descriptor.stateKey,\n // state[descriptor.stateKey || descriptor.name],\n // isDisabled,\n // descriptor\n // )\n\n if (!isDisabled) {\n usedKeys[key] ||= 1\n }\n psuedosUsed ||= {}\n\n const importance = descriptor.priority\n for (const pkey in pseudoStyleObject) {\n const val = pseudoStyleObject[pkey]\n // when disabled ensure the default value is set for future animations to align\n if (isDisabled) {\n if (!(pkey in usedKeys) && pkey in animatableDefaults) {\n const defaultVal = animatableDefaults[pkey]\n mergeStyle(styleState, pkey, defaultVal, true)\n }\n continue\n }\n const curImportance = psuedosUsed[importance] || 0\n if (importance >= curImportance) {\n psuedosUsed[pkey] = importance\n pseudos[key] ||= {}\n pseudos[key][pkey] = val\n // eslint-disable-next-line no-console\n if (process.env.NODE_ENV === 'development' && debug === 'verbose')\n console.log('merging', pkey, val)\n mergeStyle(styleState, pkey, val)\n }\n }\n }\n continue\n }\n\n // media\n if (isMedia) {\n if (!val) continue\n\n hasMedia ||= true\n\n // THIS USED TO PROXY BACK TO REGULAR PROPS BUT THAT IS THE WRONG BEHAVIOR\n // we avoid passing in default props for media queries because that would confuse things like SizableText.size:\n\n const mediaStyle = getSubStyle(\n styleState,\n key,\n val,\n // TODO try true like pseudo\n false\n )\n\n const mediaKeyShort = key.slice(1)\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n // eslint-disable-next-line no-console\n console.log(` \uD83D\uDCFA ${key}`, mediaState[mediaKeyShort], {\n key,\n mediaStyle,\n props,\n shouldDoClasses,\n mediaState: { ...mediaState },\n })\n }\n\n if ('space' in mediaStyle) {\n hasMedia = 'space'\n }\n\n if (shouldDoClasses) {\n if ('space' in mediaStyle) {\n const val = valInit.space\n delete mediaStyle['space']\n if (\n mediaState[mediaKeyShort] &&\n getMediaImportanceIfMoreImportant(mediaKeyShort, 'space', usedKeys)\n ) {\n space = val\n }\n }\n const mediaStyles = getStylesAtomic(mediaStyle)\n for (const style of mediaStyles) {\n const out = createMediaStyle(style, mediaKeyShort, mediaQueryConfig)\n const fullKey = `${style.property}${PROP_SPLIT}${mediaKeyShort}`\n if (!usedKeys[fullKey]) {\n usedKeys[fullKey] = 1\n addStyleToInsertRules(rulesToInsert, out)\n mergeClassName(transforms, classNames, fullKey, out.identifier, true)\n }\n }\n } else if (mediaState[mediaKeyShort]) {\n for (const subKey in mediaStyle) {\n const importance = getMediaImportanceIfMoreImportant(\n mediaKeyShort,\n subKey,\n usedKeys\n )\n if (importance === null) continue\n if (subKey === 'space') {\n space = valInit.space\n continue\n }\n mergeMediaByImportance(\n style,\n mediaKeyShort,\n subKey,\n mediaStyle[subKey],\n usedKeys\n )\n if (key === 'fontFamily') {\n fontFamily = mediaStyle[key]\n }\n }\n }\n continue\n }\n\n if (!isWeb && key === 'pointerEvents') {\n usedKeys[key] = 1\n viewProps[key] = val\n continue\n }\n\n if (key === 'fontFamily' && !fontFamily && valInit && val) {\n fontFamily = valInit[0] === '$' ? valInit : val\n }\n\n if (key in validStyleProps) {\n mergeStyle(styleState, key, val)\n continue\n }\n\n // pass to view props\n if (!(variants && key in variants)) {\n if (!skipProps[key]) {\n viewProps[key] = val\n usedKeys[key] = 1\n }\n }\n }\n }\n\n fixStyles(style)\n if (isWeb) {\n styleToCSS(style)\n }\n\n // always do this at the very end to preserve the order strictly (animations, origin)\n // and allow proper merging of all pseudos before applying\n if (flatTransforms) {\n if (process.env.NODE_ENV === 'development' && debug) {\n // eslint-disable-next-line no-console\n console.log(\n 'Merging flat transforms, transform before',\n [...(style.transform || [])],\n flatTransforms\n )\n }\n mergeTransforms(style, flatTransforms, true)\n }\n\n // add in defaults if not set:\n if (parentSplitStyles) {\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (shouldDoClasses) {\n for (const key in parentSplitStyles.classNames) {\n const val = parentSplitStyles.classNames[key]\n if (key in style || key in classNames) continue\n classNames[key] = val\n }\n }\n }\n if (!shouldDoClasses) {\n for (const key in parentSplitStyles.style) {\n if (key in classNames || key in style) continue\n style[key] = parentSplitStyles.style[key]\n }\n }\n }\n\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (shouldDoClasses) {\n if (style['$$css']) {\n // avoid re-processing for rnw\n } else {\n const atomic = getStylesAtomic(style)\n for (const atomicStyle of atomic) {\n const key = atomicStyle.property\n addStyleToInsertRules(rulesToInsert, atomicStyle)\n mergeClassName(transforms, classNames, key, atomicStyle.identifier)\n }\n if (!IS_STATIC) {\n style = {}\n }\n }\n }\n\n if (transforms) {\n for (const namespace in transforms) {\n if (!transforms[namespace]) {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('Error no transform', transforms, namespace)\n }\n continue\n }\n const [hash, val] = transforms[namespace]\n const identifier = `_transform${hash}`\n if (isClient && !insertedTransforms[identifier]) {\n const rule = `.${identifier} { transform: ${val}; }`\n addStyleToInsertRules(rulesToInsert, {\n identifier,\n rules: [rule],\n property: namespace,\n })\n }\n classNames[namespace] = identifier\n }\n }\n }\n\n const result = {\n space,\n hasMedia,\n fontFamily,\n viewProps,\n style,\n medias,\n pseudos,\n classNames,\n rulesToInsert,\n }\n\n if (className) {\n classNames.className = className\n }\n\n if (process.env.NODE_ENV === 'development' && debug === 'verbose') {\n if (isDevTools) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(' \uD83D\uDD39 styles =>')\n const logs = {\n transforms,\n viewProps,\n state,\n rulesToInsert,\n parentSplitStyles,\n flatTransforms,\n result,\n }\n for (const key in { ...result, ...logs }) {\n // eslint-disable-next-line no-console\n console.log(key, logs[key])\n }\n // eslint-disable-next-line no-console\n console.groupEnd()\n }\n }\n\n cache.set(props, result)\n\n return result\n}\n\nfunction mergeClassName(\n transforms: Record<string, any[]>,\n classNames: Record<string, string>,\n key: string,\n val: string,\n isMediaOrPseudo = false\n) {\n if (process.env.TAMAGUI_TARGET === 'web') {\n // empty classnames passed by compiler sometimes\n if (!val) return\n if (val.startsWith('_transform-')) {\n const namespace: TransformNamespaceKey = isMediaOrPseudo ? key : 'transform'\n let transform = insertedTransforms[val]\n if (isClient) {\n if (!transform) {\n // HMR or loaded a new chunk\n console.warn(`got a new ting`)\n scanAllSheets()\n transform = insertedTransforms[val]\n if (process.env.NODE_ENV === 'development') {\n if (!transform) {\n // eslint-disable-next-line no-console\n console.warn('no transform found', { insertedTransforms, val })\n }\n }\n }\n if (!transform) {\n if (isWeb && val[0] !== '_') {\n // runtime insert\n transform = val\n }\n }\n }\n transforms[namespace] = transforms[namespace] || ['', '']\n const identifier = val.replace('_transform', '')\n transforms[namespace][0] += identifier\n // ssr doesn't need to do anything just make the right classname\n if (transform) {\n transforms[namespace][1] += transform\n }\n } else {\n classNames[key] = val\n }\n }\n}\n\n/**\n * getSubStyle calls propMapper with props\n * those should be specific to the substyle, but fallback to the base props\n * so given props:\n *\n * { fontSize: 12, color: 'red', $sm: { color: 'blue' } }\n *\n * getSubStyle props should be a proxy that ends up like:\n *\n * { fontSize: 12, color: 'blue' }\n *\n * and to avoid re-creating it over and over, use a WeakMap\n */\nconst cache = new WeakMap()\nfunction getSubStyleProps(\n defaultProps: Object,\n baseProps: Object,\n specificProps: Object\n) {\n const key = specificProps || baseProps\n // can cache based only on specific it's always referentially consistent with base\n if (!cache.has(key)) {\n cache.set(key, {\n ...defaultProps,\n ...baseProps,\n ...specificProps,\n })\n }\n return cache.get(key)!\n}\n\nfunction mergeStyle(\n { usedKeys, classNames, flatTransforms, viewProps, style }: GetStyleState,\n key: string,\n val: any,\n dontSetUsed = false\n) {\n if (!dontSetUsed) {\n usedKeys[key] = usedKeys[key] || 1\n }\n if (val && val[0] === '_') {\n classNames[key] = val\n } else if (key in stylePropsTransform) {\n flatTransforms ||= {}\n flatTransforms[key] = val\n } else {\n const out = normalizeValueWithProperty(val, key)\n if (key in validStylesOnBaseProps) {\n viewProps[key] = out\n } else {\n style[key] = out\n }\n }\n}\n\nexport const getSubStyle = (\n styleState: GetStyleState,\n subKey: string,\n styleIn: Object,\n avoidDefaultProps?: boolean,\n avoidMergeTransform?: boolean\n): ViewStyle => {\n const { staticConfig, theme, props, state, conf, languageContext } = styleState\n const styleOut: ViewStyle = {}\n\n for (let key in styleIn) {\n const val = styleIn[key]\n key = conf.shorthands[key] || key\n const expanded = staticConfig.propMapper(\n key,\n val,\n theme,\n getSubStyleProps(staticConfig.defaultProps, props, props[subKey]),\n state,\n languageContext,\n avoidDefaultProps\n )\n if (!expanded) continue\n for (const [skey, sval] of expanded) {\n if (!avoidMergeTransform && skey in stylePropsTransform) {\n mergeTransform(styleOut, skey, sval)\n } else {\n styleOut[skey] = normalizeValueWithProperty(sval, key)\n }\n }\n }\n\n fixStyles(styleOut)\n\n return styleOut\n}\n\nexport const insertSplitStyles: StyleSplitter = (...args) => {\n const res = getSplitStyles(...args)\n insertStyleRules(res.rulesToInsert)\n return res\n}\n\n// on native no need to insert any css\nconst useInsertEffectCompat = isWeb\n ? useInsertionEffect || useIsomorphicLayoutEffect\n : () => {}\n\nexport const useSplitStyles: StyleSplitter = (...args) => {\n const res = getSplitStyles(...args)\n\n if (!isRSC) {\n useInsertEffectCompat(() => {\n insertStyleRules(res.rulesToInsert)\n }, [res.rulesToInsert])\n }\n\n return res\n}\n\nfunction addStyleToInsertRules(\n rulesToInsert: RulesToInsert,\n styleObject: PartialStyleObject\n) {\n if (process.env.TAMAGUI_TARGET === 'web') {\n if (!shouldInsertStyleRules(styleObject)) {\n return\n }\n updateRules(styleObject.identifier, styleObject.rules)\n rulesToInsert.push(styleObject)\n }\n}\n\nfunction processIDRefList(idRefList: string | Array<string>): string {\n return Array.isArray(idRefList) ? idRefList.join(' ') : idRefList\n}\n\nconst animatableDefaults = {\n opacity: 1,\n scale: 1,\n rotate: '0deg',\n rotateY: '0deg',\n rotateX: '0deg',\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["globalMediaState", "val", "style", "conf"]
|
|
7
7
|
}
|
|
@@ -44,7 +44,7 @@ function getDefaultThemeProxied() {
|
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
const useTheme = (props = emptyProps) => {
|
|
47
|
-
var _a;
|
|
47
|
+
var _a, _b;
|
|
48
48
|
if (import_constants.isRSC) {
|
|
49
49
|
return getDefaultThemeProxied();
|
|
50
50
|
}
|
|
@@ -54,13 +54,14 @@ const useTheme = (props = emptyProps) => {
|
|
|
54
54
|
keys: /* @__PURE__ */ new Set()
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
|
+
(_a = state.current) == null ? void 0 : _a.keys.clear();
|
|
57
58
|
const { name, theme, themeManager, className, isNewTheme } = useChangeThemeEffect(
|
|
58
59
|
props,
|
|
59
60
|
false,
|
|
60
61
|
import_constants.isClient ? () => state.current.keys.size === 0 : void 0
|
|
61
62
|
);
|
|
62
63
|
if (process.env.NODE_ENV === "development") {
|
|
63
|
-
if (import_constants.isWeb && isNewTheme && className === ((
|
|
64
|
+
if (import_constants.isWeb && isNewTheme && className === ((_b = themeManager == null ? void 0 : themeManager.parentManager) == null ? void 0 : _b.state.className)) {
|
|
64
65
|
console.error("Should always change, duplicating ThemeMananger bug", themeManager);
|
|
65
66
|
}
|
|
66
67
|
if (props.debug === "verbose") {
|
|
@@ -179,20 +180,8 @@ const useChangeThemeEffect = (props, root = false, disableUpdate) => {
|
|
|
179
180
|
return;
|
|
180
181
|
}
|
|
181
182
|
activeThemeManagers.add(themeManager);
|
|
182
|
-
const disposeChangeListener = parentManager == null ? void 0 : parentManager.onChangeTheme(() => {
|
|
183
|
-
if (!(isNewTheme || import_constants.isWeb)) {
|
|
184
|
-
setThemeState({
|
|
185
|
-
...themeState,
|
|
186
|
-
state: { ...themeManager.state },
|
|
187
|
-
isNewTheme: false
|
|
188
|
-
});
|
|
189
|
-
} else {
|
|
190
|
-
updateState();
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
183
|
return () => {
|
|
194
184
|
activeThemeManagers.delete(themeManager);
|
|
195
|
-
disposeChangeListener == null ? void 0 : disposeChangeListener();
|
|
196
185
|
};
|
|
197
186
|
}, [disable, state, isNewTheme, debug]);
|
|
198
187
|
}
|
|
@@ -217,10 +206,11 @@ const useChangeThemeEffect = (props, root = false, disableUpdate) => {
|
|
|
217
206
|
themeManager
|
|
218
207
|
};
|
|
219
208
|
function createState(prev) {
|
|
209
|
+
if (prev && (disableUpdate == null ? void 0 : disableUpdate())) {
|
|
210
|
+
return prev;
|
|
211
|
+
}
|
|
220
212
|
const _ = new import_ThemeManager.ThemeManager(props, root ? "root" : parentManager);
|
|
221
213
|
const isNewTheme2 = _ !== parentManager;
|
|
222
|
-
if (process.env.NODE_ENV === "development" && debug)
|
|
223
|
-
[console.groupCollapsed("useTheme create() isNewTheme", isNewTheme2), console.log("parent.state.name", parentManager == null ? void 0 : parentManager.state.name, "\n", "props", props, "\n", import_constants.isClient ? parentManager : "", "getState", isNewTheme2 && import_constants.isClient ? _.getState(props) : "", "\n", "state", import_constants.isClient ? { ..._.state } : ""), console.groupEnd()];
|
|
224
214
|
const mounted2 = !props.inverse ? true : root || (prev == null ? void 0 : prev.mounted);
|
|
225
215
|
return {
|
|
226
216
|
isNewTheme: isNewTheme2,
|
|
@@ -229,15 +219,13 @@ const useChangeThemeEffect = (props, root = false, disableUpdate) => {
|
|
|
229
219
|
mounted: mounted2
|
|
230
220
|
};
|
|
231
221
|
}
|
|
232
|
-
function updateState() {
|
|
222
|
+
function updateState(updatingManager) {
|
|
233
223
|
if (disableUpdate == null ? void 0 : disableUpdate()) {
|
|
234
224
|
return;
|
|
235
225
|
}
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
isNewTheme ? state : null
|
|
240
|
-
);
|
|
226
|
+
const manager = updatingManager ?? themeManager;
|
|
227
|
+
const next = manager.getState(props, parentManager);
|
|
228
|
+
const shouldChange = manager.getStateShouldChange(next, isNewTheme ? state : null);
|
|
241
229
|
if (shouldChange) {
|
|
242
230
|
setThemeState(createState);
|
|
243
231
|
} else {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useTheme.tsx"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-console */\nimport { isClient, isRSC, isServer, isWeb } from '@tamagui/constants'\nimport { useContext, useEffect, useMemo, useState } from 'react'\n\nimport { getConfig } from '../config'\nimport { isDevTools } from '../constants/isDevTools'\nimport { createProxy } from '../helpers/createProxy'\nimport {\n ThemeManager,\n ThemeManagerState,\n hasNoThemeUpdatingProps,\n} from '../helpers/ThemeManager'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { ThemeParsed, ThemeProps } from '../types'\nimport { GetThemeUnwrapped } from './getThemeUnwrapped'\nimport { useServerRef } from './useServerHooks'\n\nexport type ChangedThemeResponse = {\n themeManager: ThemeManager | null\n name: string\n isNewTheme?: boolean\n theme?: ThemeParsed | null\n className?: string\n}\n\nconst emptyProps = { name: null }\n\nfunction getDefaultThemeProxied() {\n const config = getConfig()\n const name = Object.keys(config.themes)[0]\n return getThemeProxied({\n theme: config.themes[name],\n name,\n })\n}\n\ninterface UseThemeState {\n keys: Set<string>\n}\n\nexport const useTheme = (props: ThemeProps = emptyProps): ThemeParsed => {\n if (isRSC) {\n return getDefaultThemeProxied()\n }\n\n const state = useServerRef() as React.MutableRefObject<UseThemeState>\n if (isClient && !state.current) {\n state.current = {\n keys: new Set(),\n }\n }\n\n const { name, theme, themeManager, className, isNewTheme } = useChangeThemeEffect(\n props,\n false,\n isClient ? () => state.current.keys.size === 0 : undefined\n )\n\n if (process.env.NODE_ENV === 'development') {\n // ensure we aren't creating too many ThemeManagers\n if (\n isWeb &&\n isNewTheme &&\n className === themeManager?.parentManager?.state.className\n ) {\n console.error('Should always change, duplicating ThemeMananger bug', themeManager)\n }\n if (props.debug === 'verbose') {\n console.groupCollapsed(' \uD83D\uDD39 useTheme =>', name)\n const logs = { ...props, name, className, ...(isDevTools && { theme }) }\n for (const key in logs) {\n console.log(' ', key, logs[key])\n }\n console.groupEnd()\n }\n }\n\n if (!theme) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('No theme found', name, props, themeManager)\n }\n return getDefaultThemeProxied()\n }\n\n return useMemo(() => {\n return getThemeProxied({\n isNewTheme,\n theme,\n name,\n className,\n themeManager,\n state,\n })\n }, [theme, isNewTheme, name, className, themeManager])\n}\n\nfunction getThemeProxied({\n theme,\n name,\n className,\n themeManager,\n isNewTheme,\n state,\n}: {\n theme: any\n name: string\n className?: string\n themeManager?: ThemeManager | null\n isNewTheme?: boolean\n state?: React.RefObject<UseThemeState>\n}) {\n return createProxy(theme, {\n has(_, key) {\n if (typeof key === 'string') {\n if (key[0] === '$') key = key.slice(1)\n return themeManager?.allKeys.has(key)\n }\n return Reflect.has(theme, key)\n },\n get(_, key) {\n if (key === GetThemeUnwrapped) {\n return theme\n } else if (key === GetThemeManager) {\n return themeManager\n } else if (key === GetIsNewTheme) {\n return isNewTheme\n } else if (key === 'name') {\n return name\n } else if (key === 'className') {\n return className\n } else if (\n !name ||\n key === '__proto__' ||\n typeof key === 'symbol' ||\n key === '$typeof'\n ) {\n return Reflect.get(_, key)\n }\n // auto convert variables to plain\n if (key[0] === '$') key = key.slice(1)\n if (!themeManager) {\n return theme[key]\n }\n const val = themeManager.getValue(key)\n if (val && state) {\n if (isClient) {\n return new Proxy(val as any, {\n get(_, subkey) {\n if (subkey === 'val') {\n state.current!.keys.add(key as any)\n }\n return Reflect.get(val, subkey)\n },\n })\n }\n }\n return val\n },\n })\n}\n\nconst GetThemeManager = Symbol()\nconst GetIsNewTheme = Symbol()\n\nexport const getThemeManager = (theme: any): ThemeManager | undefined =>\n theme?.[GetThemeManager]\nexport const getThemeIsNewTheme = (theme: any): ThemeManager | undefined =>\n theme?.[GetIsNewTheme]\n\nexport const activeThemeManagers = new Set<ThemeManager>()\n\nexport const useChangeThemeEffect = (\n props: ThemeProps,\n root = false,\n disableUpdate?: () => boolean\n): ChangedThemeResponse => {\n if (isRSC) {\n // we need context working for this to work well\n return {\n ...createState().state,\n themeManager: null,\n }\n }\n const parentManager = useContext(ThemeManagerContext)\n\n const {\n debug,\n // @ts-expect-error internal use only\n disable,\n } = props\n\n if (disable) {\n if (!parentManager) throw new Error('Disable topmost')\n return {\n ...parentManager.state,\n isNewTheme: false,\n themeManager: parentManager,\n }\n }\n\n type State = {\n isNewTheme: boolean\n state: ThemeManagerState\n themeManager: ThemeManager\n mounted?: boolean\n }\n\n const [themeState, setThemeState] = useState<State>(createState)\n const { isNewTheme, state, themeManager, mounted } = themeState\n\n if (!isServer) {\n useEffect(() => {\n if (disable) return\n // SSR safe inverse (because server can't know prefers scheme)\n // could be done through fancy selectors like how we do prefers-media\n // but may be a bit of explosion of selectors\n if (props.inverse && !mounted) {\n setThemeState({ ...themeState, mounted: true })\n return\n }\n activeThemeManagers.add(themeManager)\n const disposeChangeListener = parentManager?.onChangeTheme(() => {\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAiD;AACjD,mBAAyD;AAEzD,oBAA0B;AAC1B,wBAA2B;AAC3B,yBAA4B;AAC5B,0BAIO;AACP,iCAAoC;AAEpC,+BAAkC;AAClC,4BAA6B;AAU7B,MAAM,aAAa,EAAE,MAAM,KAAK;AAEhC,SAAS,yBAAyB;AAChC,QAAM,aAAS,yBAAU;AACzB,QAAM,OAAO,OAAO,KAAK,OAAO,MAAM,EAAE;AACxC,SAAO,gBAAgB;AAAA,IACrB,OAAO,OAAO,OAAO;AAAA,IACrB;AAAA,EACF,CAAC;AACH;AAMO,MAAM,WAAW,CAAC,QAAoB,eAA4B;AAxCzE;AAyCE,MAAI,wBAAO;AACT,WAAO,uBAAuB;AAAA,EAChC;AAEA,QAAM,YAAQ,oCAAa;AAC3B,MAAI,6BAAY,CAAC,MAAM,SAAS;AAC9B,UAAM,UAAU;AAAA,MACd,MAAM,oBAAI,IAAI;AAAA,IAChB;AAAA,EACF;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-console */\nimport { isClient, isRSC, isServer, isWeb } from '@tamagui/constants'\nimport { useContext, useEffect, useMemo, useState } from 'react'\n\nimport { getConfig } from '../config'\nimport { isDevTools } from '../constants/isDevTools'\nimport { createProxy } from '../helpers/createProxy'\nimport {\n ThemeManager,\n ThemeManagerState,\n hasNoThemeUpdatingProps,\n} from '../helpers/ThemeManager'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { ThemeParsed, ThemeProps } from '../types'\nimport { GetThemeUnwrapped } from './getThemeUnwrapped'\nimport { useServerRef } from './useServerHooks'\n\nexport type ChangedThemeResponse = {\n themeManager: ThemeManager | null\n name: string\n isNewTheme?: boolean\n theme?: ThemeParsed | null\n className?: string\n}\n\nconst emptyProps = { name: null }\n\nfunction getDefaultThemeProxied() {\n const config = getConfig()\n const name = Object.keys(config.themes)[0]\n return getThemeProxied({\n theme: config.themes[name],\n name,\n })\n}\n\ninterface UseThemeState {\n keys: Set<string>\n}\n\nexport const useTheme = (props: ThemeProps = emptyProps): ThemeParsed => {\n if (isRSC) {\n return getDefaultThemeProxied()\n }\n\n const state = useServerRef() as React.MutableRefObject<UseThemeState>\n if (isClient && !state.current) {\n state.current = {\n keys: new Set(),\n }\n }\n state.current?.keys.clear()\n\n const { name, theme, themeManager, className, isNewTheme } = useChangeThemeEffect(\n props,\n false,\n isClient ? () => state.current.keys.size === 0 : undefined\n )\n\n if (process.env.NODE_ENV === 'development') {\n // ensure we aren't creating too many ThemeManagers\n if (\n isWeb &&\n isNewTheme &&\n className === themeManager?.parentManager?.state.className\n ) {\n console.error('Should always change, duplicating ThemeMananger bug', themeManager)\n }\n if (props.debug === 'verbose') {\n console.groupCollapsed(' \uD83D\uDD39 useTheme =>', name)\n const logs = { ...props, name, className, ...(isDevTools && { theme }) }\n for (const key in logs) {\n console.log(' ', key, logs[key])\n }\n console.groupEnd()\n }\n }\n\n if (!theme) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('No theme found', name, props, themeManager)\n }\n return getDefaultThemeProxied()\n }\n\n return useMemo(() => {\n return getThemeProxied({\n isNewTheme,\n theme,\n name,\n className,\n themeManager,\n state,\n })\n }, [theme, isNewTheme, name, className, themeManager])\n}\n\nfunction getThemeProxied({\n theme,\n name,\n className,\n themeManager,\n isNewTheme,\n state,\n}: {\n theme: any\n name: string\n className?: string\n themeManager?: ThemeManager | null\n isNewTheme?: boolean\n state?: React.RefObject<UseThemeState>\n}) {\n return createProxy(theme, {\n has(_, key) {\n if (typeof key === 'string') {\n if (key[0] === '$') key = key.slice(1)\n return themeManager?.allKeys.has(key)\n }\n return Reflect.has(theme, key)\n },\n get(_, key) {\n if (key === GetThemeUnwrapped) {\n return theme\n } else if (key === GetThemeManager) {\n return themeManager\n } else if (key === GetIsNewTheme) {\n return isNewTheme\n } else if (key === 'name') {\n return name\n } else if (key === 'className') {\n return className\n } else if (\n !name ||\n key === '__proto__' ||\n typeof key === 'symbol' ||\n key === '$typeof'\n ) {\n return Reflect.get(_, key)\n }\n // auto convert variables to plain\n if (key[0] === '$') key = key.slice(1)\n if (!themeManager) {\n return theme[key]\n }\n const val = themeManager.getValue(key)\n if (val && state) {\n if (isClient) {\n return new Proxy(val as any, {\n get(_, subkey) {\n if (subkey === 'val') {\n state.current!.keys.add(key as any)\n }\n return Reflect.get(val, subkey)\n },\n })\n }\n }\n return val\n },\n })\n}\n\nconst GetThemeManager = Symbol()\nconst GetIsNewTheme = Symbol()\n\nexport const getThemeManager = (theme: any): ThemeManager | undefined =>\n theme?.[GetThemeManager]\nexport const getThemeIsNewTheme = (theme: any): ThemeManager | undefined =>\n theme?.[GetIsNewTheme]\n\nexport const activeThemeManagers = new Set<ThemeManager>()\n\nexport const useChangeThemeEffect = (\n props: ThemeProps,\n root = false,\n disableUpdate?: () => boolean\n): ChangedThemeResponse => {\n if (isRSC) {\n // we need context working for this to work well\n return {\n ...createState().state,\n themeManager: null,\n }\n }\n const parentManager = useContext(ThemeManagerContext)\n\n const {\n debug,\n // @ts-expect-error internal use only\n disable,\n } = props\n\n if (disable) {\n if (!parentManager) throw new Error('Disable topmost')\n return {\n ...parentManager.state,\n isNewTheme: false,\n themeManager: parentManager,\n }\n }\n\n type State = {\n isNewTheme: boolean\n state: ThemeManagerState\n themeManager: ThemeManager\n mounted?: boolean\n }\n\n const [themeState, setThemeState] = useState<State>(createState)\n const { isNewTheme, state, themeManager, mounted } = themeState\n\n if (!isServer) {\n useEffect(() => {\n if (disable) return\n // SSR safe inverse (because server can't know prefers scheme)\n // could be done through fancy selectors like how we do prefers-media\n // but may be a bit of explosion of selectors\n if (props.inverse && !mounted) {\n setThemeState({ ...themeState, mounted: true })\n return\n }\n activeThemeManagers.add(themeManager)\n // const disposeChangeListener = parentManager?.onChangeTheme((name, manager) => {\n // // console.log('hi', props, state, name, manager)\n // if (state.theme !== manager.state.theme) {\n // console.warn('now update to', manager.state.name)\n // updateState(manager)\n // }\n // })\n return () => {\n activeThemeManagers.delete(themeManager)\n // disposeChangeListener?.()\n }\n }, [disable, state, isNewTheme, debug])\n }\n\n const isInversingOnMount = Boolean(!themeState.mounted && props.inverse)\n const shouldReturnParentState = hasNoThemeUpdatingProps(props) || isInversingOnMount\n\n if (shouldReturnParentState) {\n if (!parentManager) throw 'impossible'\n // prettier-ignore\n if (process.env.NODE_ENV === 'development' && props.debug === 'verbose') console.log('useTheme hasNoThemeUpdatingProps', parentManager.state.name, 'isInversingOnMount', isInversingOnMount)\n return {\n ...parentManager.state,\n className: isInversingOnMount ? '' : parentManager.state.className,\n themeManager: parentManager,\n isNewTheme: false,\n }\n }\n\n // run inline in render\n updateState()\n\n return {\n ...state,\n isNewTheme,\n themeManager,\n }\n\n function createState(prev?: State) {\n if (prev && disableUpdate?.()) {\n return prev\n }\n // returns previous theme manager if no change\n const _ = new ThemeManager(props, root ? 'root' : parentManager)\n const isNewTheme = _ !== parentManager\n // prettier-ignore\n\n // if (prev?.isNewTheme && _.state.theme !== parentManager?.state.theme) {\n // console.warn('notify')\n // _.notify()\n // }\n\n // only inverse relies on this for ssr\n const mounted = !props.inverse ? true : root || prev?.mounted\n return {\n // ThemeManager returns parentManager if no change\n isNewTheme,\n state: { ..._.state },\n themeManager: _,\n mounted,\n }\n }\n\n function updateState(updatingManager?: ThemeManager) {\n if (disableUpdate?.()) {\n return\n }\n const manager = updatingManager ?? themeManager\n const next = manager.getState(props, parentManager)\n const shouldChange = manager.getStateShouldChange(next, isNewTheme ? state : null)\n // console.log(`got it`, next, isNewTheme, shouldChange, { ...updatingManager?.state })\n if (shouldChange) {\n setThemeState(createState)\n } else {\n if (!next && parentManager?.state.name !== state.name) {\n // were changing back to parent state\n setThemeState(createState)\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_", "isNewTheme", "mounted"]
|
|
7
7
|
}
|
package/dist/cjs/views/Theme.js
CHANGED
|
@@ -25,7 +25,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
25
25
|
var Theme_exports = {};
|
|
26
26
|
__export(Theme_exports, {
|
|
27
27
|
Theme: () => Theme,
|
|
28
|
-
|
|
28
|
+
useThemeManagerContext: () => useThemeManagerContext
|
|
29
29
|
});
|
|
30
30
|
module.exports = __toCommonJS(Theme_exports);
|
|
31
31
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -42,12 +42,10 @@ function Theme(props) {
|
|
|
42
42
|
const { name, theme, themeManager, className } = (0, import_useTheme.useChangeThemeEffect)(props, isRoot);
|
|
43
43
|
const disableThemeClass = props.disableThemeClass;
|
|
44
44
|
const missingTheme = !(name && theme);
|
|
45
|
-
let contents = (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
);
|
|
50
|
-
}, [missingTheme, props.children, themeManager]);
|
|
45
|
+
let contents = useThemeManagerContext(
|
|
46
|
+
props["data-themeable"] ? import_react.default.cloneElement(props.children, { ["data-themeable"]: true }) : props.children,
|
|
47
|
+
themeManager
|
|
48
|
+
);
|
|
51
49
|
if (process.env.NODE_ENV === "development" && missingTheme) {
|
|
52
50
|
name && !theme && console.warn(`No theme found by name ${name}`);
|
|
53
51
|
return props.children;
|
|
@@ -67,8 +65,9 @@ function Theme(props) {
|
|
|
67
65
|
}
|
|
68
66
|
return contents;
|
|
69
67
|
}
|
|
70
|
-
function
|
|
71
|
-
|
|
68
|
+
function useThemeManagerContext(children, themeManager, shouldReset) {
|
|
69
|
+
const value = themeManager;
|
|
70
|
+
if (!value)
|
|
72
71
|
return children;
|
|
73
72
|
let next = children;
|
|
74
73
|
if (shouldReset && themeManager) {
|
|
@@ -78,13 +77,13 @@ function wrapThemeManagerContext(children, themeManager, shouldReset) {
|
|
|
78
77
|
});
|
|
79
78
|
}
|
|
80
79
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ThemeManagerContext.ThemeManagerContext.Provider, {
|
|
81
|
-
value
|
|
80
|
+
value,
|
|
82
81
|
children: next
|
|
83
82
|
});
|
|
84
83
|
}
|
|
85
84
|
// Annotate the CommonJS export names for ESM import in node:
|
|
86
85
|
0 && (module.exports = {
|
|
87
86
|
Theme,
|
|
88
|
-
|
|
87
|
+
useThemeManagerContext
|
|
89
88
|
});
|
|
90
89
|
//# sourceMappingURL=Theme.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/views/Theme.tsx"],
|
|
4
|
-
"sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport React, { useMemo } from 'react'\n\nimport { variableToString } from '../createVariable'\nimport { ThemeManager } from '../helpers/ThemeManager'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { useChangeThemeEffect } from '../hooks/useTheme'\nimport { ThemeProps } from '../types'\n\nexport function Theme(props: ThemeProps) {\n // @ts-expect-error only for internal views\n if (props.disable) {\n return props.children\n }\n\n const isRoot = !!props['_isRoot']\n const { name, theme, themeManager, className } = useChangeThemeEffect(props, isRoot)\n const disableThemeClass = props.disableThemeClass\n const missingTheme = !(name && theme)\n\n // memo here, changing theme without re-rendering all children is a critical optimization\n // may require some effort of end user to memoize but without this memo they'd have no option\n let contents =
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { isWeb } from '@tamagui/constants'\nimport React, { useMemo } from 'react'\n\nimport { variableToString } from '../createVariable'\nimport { ThemeManager } from '../helpers/ThemeManager'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { useChangeThemeEffect } from '../hooks/useTheme'\nimport { ThemeProps } from '../types'\n\nexport function Theme(props: ThemeProps) {\n // @ts-expect-error only for internal views\n if (props.disable) {\n return props.children\n }\n\n const isRoot = !!props['_isRoot']\n const { name, theme, themeManager, className } = useChangeThemeEffect(props, isRoot)\n const disableThemeClass = props.disableThemeClass\n const missingTheme = !(name && theme)\n\n // memo here, changing theme without re-rendering all children is a critical optimization\n // may require some effort of end user to memoize but without this memo they'd have no option\n let contents = useThemeManagerContext(\n props['data-themeable']\n ? React.cloneElement(props.children, { ['data-themeable']: true })\n : props.children,\n themeManager\n )\n\n if (process.env.NODE_ENV === 'development' && missingTheme) {\n // eslint-disable-next-line no-console\n name && !theme && console.warn(`No theme found by name ${name}`)\n return props.children\n }\n\n if (disableThemeClass || missingTheme) {\n return contents\n }\n\n if (isWeb) {\n const cn = [props.className, className, '_dsp_contents'].filter(Boolean).join(' ')\n contents = (\n <span\n className={cn}\n style={{\n // in order to provide currentColor, set color by default\n color: variableToString(theme?.color),\n }}\n >\n {contents}\n </span>\n )\n }\n\n return contents\n}\n\nexport function useThemeManagerContext(\n children: any,\n themeManager?: ThemeManager | null,\n shouldReset?: boolean\n) {\n // disabled super memoize it - listener first strategy\n const value = themeManager // useMemo(() => themeManager, [!!themeManager])\n // be sure to memoize themeManager to avoid reparenting\n if (!value) return children\n // be sure to memoize shouldReset to avoid reparenting\n let next = children\n // TODO likely not necessary if we do reset logic now in useTheme?\n // reset to parent theme\n if (shouldReset && themeManager) {\n next = <Theme name={themeManager.state.parentName}>{next}</Theme>\n }\n return <ThemeManagerContext.Provider value={value}>{next}</ThemeManagerContext.Provider>\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CM;AA1CN,uBAAsB;AACtB,mBAA+B;AAE/B,4BAAiC;AAEjC,iCAAoC;AACpC,sBAAqC;AAG9B,SAAS,MAAM,OAAmB;AAEvC,MAAI,MAAM,SAAS;AACjB,WAAO,MAAM;AAAA,EACf;AAEA,QAAM,SAAS,CAAC,CAAC,MAAM;AACvB,QAAM,EAAE,MAAM,OAAO,cAAc,UAAU,QAAI,sCAAqB,OAAO,MAAM;AACnF,QAAM,oBAAoB,MAAM;AAChC,QAAM,eAAe,EAAE,QAAQ;AAI/B,MAAI,WAAW;AAAA,IACb,MAAM,oBACF,aAAAA,QAAM,aAAa,MAAM,UAAU,EAAE,CAAC,mBAAmB,KAAK,CAAC,IAC/D,MAAM;AAAA,IACV;AAAA,EACF;AAEA,MAAI,QAAQ,IAAI,aAAa,iBAAiB,cAAc;AAE1D,YAAQ,CAAC,SAAS,QAAQ,KAAK,0BAA0B,MAAM;AAC/D,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,qBAAqB,cAAc;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,wBAAO;AACT,UAAM,KAAK,CAAC,MAAM,WAAW,WAAW,eAAe,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACjF,eACE,4CAAC;AAAA,MACC,WAAW;AAAA,MACX,OAAO;AAAA,QAEL,WAAO,wCAAiB,+BAAO,KAAK;AAAA,MACtC;AAAA,MAEC;AAAA,KACH;AAAA,EAEJ;AAEA,SAAO;AACT;AAEO,SAAS,uBACd,UACA,cACA,aACA;AAEA,QAAM,QAAQ;AAEd,MAAI,CAAC;AAAO,WAAO;AAEnB,MAAI,OAAO;AAGX,MAAI,eAAe,cAAc;AAC/B,WAAO,4CAAC;AAAA,MAAM,MAAM,aAAa,MAAM;AAAA,MAAa;AAAA,KAAK;AAAA,EAC3D;AACA,SAAO,4CAAC,+CAAoB,UAApB;AAAA,IAA6B;AAAA,IAAe;AAAA,GAAK;AAC3D;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -43,7 +43,7 @@ import { useServerRef, useServerState } from "./hooks/useServerHooks";
|
|
|
43
43
|
import { getThemeIsNewTheme, getThemeManager, useTheme } from "./hooks/useTheme";
|
|
44
44
|
import { usePressability } from "./vendor/Pressability";
|
|
45
45
|
import { Slot, mergeEvent } from "./views/Slot";
|
|
46
|
-
import {
|
|
46
|
+
import { useThemeManagerContext } from "./views/Theme";
|
|
47
47
|
process.env.TAMAGUI_TARGET;
|
|
48
48
|
let defaultComponentState = null;
|
|
49
49
|
let defaultComponentStateMounted = null;
|
|
@@ -392,10 +392,16 @@ function createComponent(configIn, ParentComponent) {
|
|
|
392
392
|
useEffect(() => {
|
|
393
393
|
if (!shouldSetMounted)
|
|
394
394
|
return;
|
|
395
|
+
if (state.unmounted === true && needsMount) {
|
|
396
|
+
setStateShallow({
|
|
397
|
+
unmounted: false
|
|
398
|
+
});
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
395
401
|
setStateShallow({
|
|
396
402
|
unmounted: false
|
|
397
403
|
});
|
|
398
|
-
}, [shouldSetMounted]);
|
|
404
|
+
}, [shouldSetMounted, state.unmounted]);
|
|
399
405
|
let styles;
|
|
400
406
|
if (isStringElement && shouldAvoidClasses && !shouldForcePseudo) {
|
|
401
407
|
styles = {
|
|
@@ -557,7 +563,7 @@ function createComponent(configIn, ParentComponent) {
|
|
|
557
563
|
if (themeShouldReset) {
|
|
558
564
|
stateRef.current.themeShouldReset = true;
|
|
559
565
|
}
|
|
560
|
-
const
|
|
566
|
+
const innerContent = useThemeManagerContext(
|
|
561
567
|
spacedChildren({
|
|
562
568
|
separator,
|
|
563
569
|
children,
|
|
@@ -568,7 +574,7 @@ function createComponent(configIn, ParentComponent) {
|
|
|
568
574
|
stateRef.current.hasProvidedThemeManager ? themeManager : void 0,
|
|
569
575
|
stateRef.current.themeShouldReset
|
|
570
576
|
);
|
|
571
|
-
let content;
|
|
577
|
+
let content = !children || asChild ? children : innerContent;
|
|
572
578
|
if (asChild) {
|
|
573
579
|
elementType = Slot;
|
|
574
580
|
viewProps = {
|
|
@@ -597,7 +603,7 @@ function createComponent(configIn, ParentComponent) {
|
|
|
597
603
|
}
|
|
598
604
|
}
|
|
599
605
|
}
|
|
600
|
-
content = createElement(elementType, viewProps,
|
|
606
|
+
content = createElement(elementType, viewProps, content);
|
|
601
607
|
if (process.env.TAMAGUI_TARGET === "web") {
|
|
602
608
|
if (events || isAnimatedReactNativeWeb) {
|
|
603
609
|
content = /* @__PURE__ */ jsx("span", {
|
|
@@ -643,7 +649,6 @@ function createComponent(configIn, ParentComponent) {
|
|
|
643
649
|
styles,
|
|
644
650
|
pseudos,
|
|
645
651
|
content,
|
|
646
|
-
childEls,
|
|
647
652
|
shouldAvoidClasses,
|
|
648
653
|
avoidClasses: avoidClassesWhileAnimating,
|
|
649
654
|
animation: props.animation,
|
|
@@ -823,15 +828,9 @@ const Spacer = createComponent({
|
|
|
823
828
|
}
|
|
824
829
|
}
|
|
825
830
|
});
|
|
826
|
-
function spacedChildren({
|
|
827
|
-
|
|
828
|
-
children,
|
|
829
|
-
space,
|
|
830
|
-
direction,
|
|
831
|
-
spaceFlex,
|
|
832
|
-
separator
|
|
833
|
-
}) {
|
|
834
|
-
var _a;
|
|
831
|
+
function spacedChildren(props) {
|
|
832
|
+
var _a, _b, _c;
|
|
833
|
+
const { isZStack, children, space, direction, spaceFlex, separator } = props;
|
|
835
834
|
const hasSpace = !!(space || spaceFlex);
|
|
836
835
|
const hasSeparator = !(separator === void 0 || separator === null);
|
|
837
836
|
if (!(hasSpace || hasSeparator || isZStack)) {
|
|
@@ -839,22 +838,20 @@ function spacedChildren({
|
|
|
839
838
|
}
|
|
840
839
|
const childrenList = Children.toArray(children);
|
|
841
840
|
const len = childrenList.length;
|
|
842
|
-
if (len <= 1 && !isZStack) {
|
|
843
|
-
if (len === 1) {
|
|
844
|
-
const [onlyChild] = childrenList;
|
|
845
|
-
if (React.isValidElement(onlyChild) && ((_a = onlyChild.type) == null ? void 0 : _a["shouldForwardSpace"])) {
|
|
846
|
-
return React.cloneElement(onlyChild, {
|
|
847
|
-
space,
|
|
848
|
-
spaceFlex,
|
|
849
|
-
separator
|
|
850
|
-
});
|
|
851
|
-
}
|
|
852
|
-
}
|
|
841
|
+
if (len <= 1 && !isZStack && !((_b = (_a = childrenList[0]) == null ? void 0 : _a["type"]) == null ? void 0 : _b["shouldForwardSpace"])) {
|
|
853
842
|
return childrenList;
|
|
854
843
|
}
|
|
855
844
|
const final = [];
|
|
856
|
-
for (
|
|
845
|
+
for (let [index, child] of childrenList.entries()) {
|
|
857
846
|
const isEmpty = child === null || child === void 0 || Array.isArray(child) && child.length === 0;
|
|
847
|
+
if (!isEmpty && React.isValidElement(child) && ((_c = child.type) == null ? void 0 : _c["shouldForwardSpace"])) {
|
|
848
|
+
child = React.cloneElement(child, {
|
|
849
|
+
space,
|
|
850
|
+
spaceFlex,
|
|
851
|
+
separator,
|
|
852
|
+
key: child.key
|
|
853
|
+
});
|
|
854
|
+
}
|
|
858
855
|
if (isEmpty || !child || child["key"] && !isZStack) {
|
|
859
856
|
final.push(child);
|
|
860
857
|
} else {
|