@tamagui/core 1.0.1-beta.220 → 1.0.1-beta.221
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/addTheme.js +7 -10
- package/dist/cjs/addTheme.js.map +3 -3
- package/dist/cjs/config.js +8 -4
- package/dist/cjs/config.js.map +2 -2
- package/dist/cjs/{hooks/useUnmountEffect.js → contexts/ButtonNestingContext.js} +7 -9
- package/dist/cjs/contexts/ButtonNestingContext.js.map +7 -0
- package/dist/cjs/createComponent.js +63 -67
- package/dist/cjs/createComponent.js.map +3 -3
- package/dist/cjs/createTamagui.js +13 -12
- package/dist/cjs/createTamagui.js.map +2 -2
- package/dist/cjs/createTokens.js.map +2 -2
- package/dist/cjs/createTokens.test.js +27 -0
- package/dist/cjs/createTokens.test.js.map +7 -0
- package/dist/cjs/createVariable.js +4 -9
- package/dist/cjs/createVariable.js.map +2 -2
- package/dist/cjs/createVariable.test.js +7 -0
- package/dist/cjs/createVariable.test.js.map +7 -0
- package/dist/cjs/createVariables.js +6 -7
- package/dist/cjs/createVariables.js.map +2 -2
- package/dist/cjs/helpers/ThemeManager.js +161 -147
- package/dist/cjs/helpers/ThemeManager.js.map +3 -3
- package/dist/cjs/helpers/ThemeManager.test.js +421 -34
- package/dist/cjs/helpers/ThemeManager.test.js.map +2 -2
- package/dist/cjs/helpers/{getTokens.js → ThemeManagerContext.js} +8 -8
- package/dist/cjs/helpers/ThemeManagerContext.js.map +7 -0
- package/dist/cjs/helpers/createPropMapper.js +4 -4
- package/dist/cjs/helpers/createPropMapper.js.map +2 -2
- package/dist/cjs/helpers/extendStaticConfig.js +2 -4
- package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
- package/dist/cjs/helpers/{assignNativePropsToWeb.native.js → getBoundingClientRect.js} +15 -8
- package/dist/cjs/helpers/getBoundingClientRect.js.map +7 -0
- package/dist/cjs/{hooks/useConstant.js → helpers/getRect.js} +14 -17
- package/dist/cjs/helpers/getRect.js.map +7 -0
- package/dist/cjs/helpers/getSplitStyles.js +82 -85
- package/dist/cjs/helpers/getSplitStyles.js.map +3 -3
- package/dist/cjs/helpers/getThemeCSSRules.js +6 -2
- package/dist/cjs/helpers/getThemeCSSRules.js.map +2 -2
- package/dist/cjs/helpers/insertStyleRule.js +1 -1
- package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
- package/dist/cjs/helpers/mergeTransform.js +11 -8
- package/dist/cjs/helpers/mergeTransform.js.map +2 -2
- package/dist/cjs/helpers/pseudoDescriptors.js +1 -0
- package/dist/cjs/helpers/pseudoDescriptors.js.map +2 -2
- package/dist/cjs/helpers/themeable.js +9 -9
- package/dist/cjs/helpers/themeable.js.map +2 -2
- package/dist/cjs/hooks/useElementLayout.js +4 -12
- package/dist/cjs/hooks/useElementLayout.js.map +2 -2
- package/dist/cjs/hooks/useMedia.js +2 -1
- package/dist/cjs/hooks/useMedia.js.map +2 -2
- package/dist/cjs/hooks/useTheme.js +114 -156
- package/dist/cjs/hooks/useTheme.js.map +3 -3
- package/dist/cjs/hooks/{useIsMounted.js → useThemeName.js} +23 -14
- package/dist/cjs/hooks/useThemeName.js.map +7 -0
- package/dist/cjs/index.js +2 -5
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/setupReactNative.js +20 -7
- package/dist/cjs/setupReactNative.js.map +2 -2
- package/dist/cjs/styled.js +2 -19
- package/dist/cjs/styled.js.map +2 -2
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/updateTheme.js +9 -9
- package/dist/cjs/updateTheme.js.map +2 -2
- package/dist/cjs/views/TamaguiProvider.js +3 -3
- package/dist/cjs/views/TamaguiProvider.js.map +2 -2
- package/dist/cjs/views/Theme.js +39 -28
- package/dist/cjs/views/Theme.js.map +3 -3
- package/dist/cjs/views/ThemeProvider.js +8 -33
- package/dist/cjs/views/ThemeProvider.js.map +3 -3
- package/dist/esm/addTheme.js +7 -10
- package/dist/esm/addTheme.js.map +3 -3
- package/dist/esm/config.js +8 -3
- package/dist/esm/config.js.map +2 -2
- package/dist/esm/contexts/ButtonNestingContext.js +6 -0
- package/dist/esm/contexts/ButtonNestingContext.js.map +7 -0
- package/dist/esm/createComponent.js +65 -70
- package/dist/esm/createComponent.js.map +3 -3
- package/dist/esm/createTamagui.js +13 -12
- package/dist/esm/createTamagui.js.map +2 -2
- package/dist/esm/createTokens.js.map +2 -2
- package/dist/esm/createTokens.test.js +26 -0
- package/dist/esm/createTokens.test.js.map +7 -0
- package/dist/esm/createVariable.js +4 -9
- package/dist/esm/createVariable.js.map +2 -2
- package/dist/esm/createVariable.test.js +6 -0
- package/dist/esm/createVariable.test.js.map +7 -0
- package/dist/esm/createVariables.js +6 -7
- package/dist/esm/createVariables.js.map +2 -2
- package/dist/esm/helpers/ThemeManager.js +140 -144
- package/dist/esm/helpers/ThemeManager.js.map +3 -3
- package/dist/esm/helpers/ThemeManager.test.js +421 -34
- package/dist/esm/helpers/ThemeManager.test.js.map +2 -2
- package/dist/esm/helpers/ThemeManagerContext.js +6 -0
- package/dist/esm/helpers/ThemeManagerContext.js.map +7 -0
- package/dist/esm/helpers/createPropMapper.js +4 -4
- package/dist/esm/helpers/createPropMapper.js.map +2 -2
- package/dist/esm/helpers/extendStaticConfig.js +2 -4
- package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
- package/dist/esm/helpers/getBoundingClientRect.js +13 -0
- package/dist/esm/helpers/getBoundingClientRect.js.map +7 -0
- package/dist/esm/helpers/getRect.js +12 -0
- package/dist/esm/helpers/getRect.js.map +7 -0
- package/dist/esm/helpers/getSplitStyles.js +90 -87
- package/dist/esm/helpers/getSplitStyles.js.map +3 -3
- package/dist/esm/helpers/getThemeCSSRules.js +6 -2
- package/dist/esm/helpers/getThemeCSSRules.js.map +2 -2
- package/dist/esm/helpers/insertStyleRule.js +1 -1
- package/dist/esm/helpers/insertStyleRule.js.map +2 -2
- package/dist/esm/helpers/mergeTransform.js +8 -6
- package/dist/esm/helpers/mergeTransform.js.map +2 -2
- package/dist/esm/helpers/pseudoDescriptors.js +1 -0
- package/dist/esm/helpers/pseudoDescriptors.js.map +2 -2
- package/dist/esm/helpers/themeable.js +9 -9
- package/dist/esm/helpers/themeable.js.map +2 -2
- package/dist/esm/hooks/useElementLayout.js +2 -9
- package/dist/esm/hooks/useElementLayout.js.map +2 -2
- package/dist/esm/hooks/useMedia.js +3 -2
- package/dist/esm/hooks/useMedia.js.map +2 -2
- package/dist/esm/hooks/useTheme.js +114 -159
- package/dist/esm/hooks/useTheme.js.map +3 -3
- package/dist/esm/hooks/useThemeName.js +25 -0
- package/dist/esm/hooks/useThemeName.js.map +7 -0
- package/dist/esm/index.js +3 -5
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/setupReactNative.js +18 -6
- package/dist/esm/setupReactNative.js.map +2 -2
- package/dist/esm/styled.js +3 -20
- package/dist/esm/styled.js.map +2 -2
- package/dist/esm/updateTheme.js +9 -9
- package/dist/esm/updateTheme.js.map +2 -2
- package/dist/esm/views/TamaguiProvider.js +4 -4
- package/dist/esm/views/TamaguiProvider.js.map +2 -2
- package/dist/esm/views/Theme.js +40 -29
- package/dist/esm/views/Theme.js.map +3 -3
- package/dist/esm/views/ThemeProvider.js +8 -27
- package/dist/esm/views/ThemeProvider.js.map +2 -2
- package/package.json +12 -12
- package/src/__snapshots__/createTokens.test.ts.snap +877 -0
- package/src/addTheme.ts +9 -12
- package/src/config.ts +10 -2
- package/src/contexts/ButtonNestingContext.tsx +3 -0
- package/src/createComponent.tsx +117 -108
- package/src/createTamagui.ts +16 -14
- package/src/createTokens.test.ts +29 -0
- package/src/createTokens.ts +1 -1
- package/src/createVariable.test.ts +7 -0
- package/src/createVariable.ts +4 -10
- package/src/createVariables.ts +7 -7
- package/src/helpers/ThemeManager.test.tsx +480 -0
- package/src/helpers/ThemeManager.tsx +171 -166
- package/src/helpers/ThemeManagerContext.tsx +5 -0
- package/src/helpers/createPropMapper.ts +4 -4
- package/src/helpers/extendStaticConfig.ts +4 -4
- package/src/helpers/getBoundingClientRect.tsx +7 -0
- package/src/helpers/getRect.tsx +8 -0
- package/src/helpers/getSplitStyles.tsx +98 -93
- package/src/helpers/getThemeCSSRules.ts +9 -2
- package/src/helpers/insertStyleRule.tsx +2 -2
- package/src/helpers/mergeTransform.ts +13 -6
- package/src/helpers/pseudoDescriptors.ts +1 -0
- package/src/helpers/themeable.tsx +17 -9
- package/src/hooks/useElementLayout.tsx +3 -8
- package/src/hooks/useMedia.tsx +3 -3
- package/src/hooks/useTheme.tsx +138 -211
- package/src/hooks/useThemeName.tsx +25 -0
- package/src/index.ts +3 -4
- package/src/setupReactNative.ts +16 -5
- package/src/styled.tsx +4 -23
- package/src/types.tsx +42 -17
- package/src/updateTheme.ts +12 -9
- package/src/views/TamaguiProvider.tsx +5 -5
- package/src/views/Theme.tsx +48 -39
- package/src/views/ThemeProvider.tsx +11 -33
- package/types/Tamagui.d.ts +1 -1
- package/types/addTheme.d.ts +23 -2
- package/types/config.d.ts +0 -1
- package/types/contexts/ButtonNestingContext.d.ts +3 -0
- package/types/createTokens.test.d.ts +2 -0
- package/types/createVariable.d.ts +2 -2
- package/types/createVariable.test.d.ts +2 -0
- package/types/helpers/ThemeManager.d.ts +20 -30
- package/types/helpers/ThemeManager.test.d.ts +2 -0
- package/types/helpers/ThemeManagerContext.d.ts +4 -0
- package/types/helpers/getBoundingClientRect.d.ts +2 -0
- package/types/helpers/getRect.d.ts +9 -0
- package/types/helpers/insertStyleRule.d.ts +1 -1
- package/types/helpers/mergeTransform.d.ts +5 -3
- package/types/helpers/themeable.d.ts +3 -0
- package/types/hooks/useElementLayout.d.ts +0 -8
- package/types/hooks/useTheme.d.ts +10 -20
- package/types/hooks/useThemeName.d.ts +5 -0
- package/types/index.d.ts +3 -4
- package/types/setupReactNative.d.ts +4 -2
- package/types/types.d.ts +35 -10
- package/types/updateTheme.d.ts +23 -2
- package/types/views/Theme.d.ts +3 -4
- package/dist/cjs/constants/platform.js +0 -74
- package/dist/cjs/constants/platform.js.map +0 -7
- package/dist/cjs/constants/platform.native.js +0 -62
- package/dist/cjs/constants/platform.native.js.map +0 -7
- package/dist/cjs/helpers/assignNativePropsToWeb.js +0 -188
- package/dist/cjs/helpers/assignNativePropsToWeb.js.map +0 -7
- package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +0 -7
- package/dist/cjs/helpers/calc.js +0 -71
- package/dist/cjs/helpers/calc.js.map +0 -7
- package/dist/cjs/helpers/getFont.js +0 -66
- package/dist/cjs/helpers/getFont.js.map +0 -7
- package/dist/cjs/helpers/getStackSize.js +0 -46
- package/dist/cjs/helpers/getStackSize.js.map +0 -7
- package/dist/cjs/helpers/getTokens.js.map +0 -7
- package/dist/cjs/helpers/startTransition.js +0 -36
- package/dist/cjs/helpers/startTransition.js.map +0 -7
- package/dist/cjs/helpers/validate.js +0 -2
- package/dist/cjs/helpers/validate.js.map +0 -7
- package/dist/cjs/hooks/useConstant.js.map +0 -7
- package/dist/cjs/hooks/useIsMounted.js.map +0 -7
- package/dist/cjs/hooks/usePressable.js +0 -36
- package/dist/cjs/hooks/usePressable.js.map +0 -7
- package/dist/cjs/hooks/useUnmountEffect.js.map +0 -7
- package/dist/cjs/injectStyles.js +0 -40
- package/dist/cjs/injectStyles.js.map +0 -7
- package/dist/cjs/react-native.js +0 -22
- package/dist/cjs/react-native.js.map +0 -7
- package/dist/esm/constants/platform.js +0 -39
- package/dist/esm/constants/platform.js.map +0 -7
- package/dist/esm/constants/platform.native.js +0 -28
- package/dist/esm/constants/platform.native.js.map +0 -7
- package/dist/esm/helpers/assignNativePropsToWeb.js +0 -164
- package/dist/esm/helpers/assignNativePropsToWeb.js.map +0 -7
- package/dist/esm/helpers/assignNativePropsToWeb.native.js +0 -6
- package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +0 -7
- package/dist/esm/helpers/calc.js +0 -47
- package/dist/esm/helpers/calc.js.map +0 -7
- package/dist/esm/helpers/getFont.js +0 -42
- package/dist/esm/helpers/getFont.js.map +0 -7
- package/dist/esm/helpers/getStackSize.js +0 -22
- package/dist/esm/helpers/getStackSize.js.map +0 -7
- package/dist/esm/helpers/getTokens.js +0 -6
- package/dist/esm/helpers/getTokens.js.map +0 -7
- package/dist/esm/helpers/startTransition.js +0 -6
- package/dist/esm/helpers/startTransition.js.map +0 -7
- package/dist/esm/helpers/validate.js +0 -1
- package/dist/esm/helpers/validate.js.map +0 -7
- package/dist/esm/hooks/useConstant.js +0 -15
- package/dist/esm/hooks/useConstant.js.map +0 -7
- package/dist/esm/hooks/useIsMounted.js +0 -16
- package/dist/esm/hooks/useIsMounted.js.map +0 -7
- package/dist/esm/hooks/usePressable.js +0 -12
- package/dist/esm/hooks/usePressable.js.map +0 -7
- package/dist/esm/hooks/useUnmountEffect.js +0 -8
- package/dist/esm/hooks/useUnmountEffect.js.map +0 -7
- package/dist/esm/injectStyles.js +0 -16
- package/dist/esm/injectStyles.js.map +0 -7
- package/dist/esm/react-native.js +0 -3
- package/dist/esm/react-native.js.map +0 -7
- package/src/contexts/ButtonInsideButtonContext.tsx +0 -3
- package/src/contexts/ThemeContext.tsx +0 -5
- package/src/helpers/areEqualSets.tsx +0 -9
- package/src/views/ThemeInverse.tsx +0 -43
- package/src/views/ThemeReset.tsx +0 -43
- package/types/constants/platform.d.ts +0 -13
- package/types/constants/platform.native.d.ts +0 -13
- package/types/contexts/ButtonInsideButtonContext.d.ts +0 -3
- package/types/contexts/ThemeContext.d.ts +0 -7
- package/types/helpers/areEqualSets.d.ts +0 -2
- package/types/helpers/assignNativePropsToWeb.d.ts +0 -2
- package/types/helpers/assignNativePropsToWeb.native.d.ts +0 -2
- package/types/helpers/calc.d.ts +0 -1
- package/types/helpers/getFont.d.ts +0 -3
- package/types/helpers/getStackSize.d.ts +0 -8
- package/types/helpers/getTokens.d.ts +0 -2
- package/types/helpers/startTransition.d.ts +0 -3
- package/types/helpers/validate.d.ts +0 -1
- package/types/hooks/useConstant.d.ts +0 -2
- package/types/hooks/useIsMounted.d.ts +0 -3
- package/types/hooks/useMedia.test.d.ts +0 -1
- package/types/hooks/usePressable.d.ts +0 -3
- package/types/hooks/usePressablePressResponder.d.ts +0 -84
- package/types/hooks/useUnmountEffect.d.ts +0 -2
- package/types/injectStyles.d.ts +0 -7
- package/types/react-native.d.ts +0 -8
- package/types/views/AbsoluteFill.d.ts +0 -5
- package/types/views/AbsoluteFill.native.d.ts +0 -3
- package/types/views/ThemeInverse.d.ts +0 -9
- package/types/views/ThemeReset.d.ts +0 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useMedia.tsx"],
|
|
4
|
-
"sourcesContent": ["import { useEffect, useMemo, useSyncExternalStore } from 'react'\n\nimport { getConfig } from '../config'\nimport { createProxy } from '../helpers/createProxy'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n TamaguiInternalConfig,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport const mediaState: MediaQueryState =\n // development time safeguard\n process.env.NODE_ENV === 'development'\n ? createProxy(\n {},\n {\n get(target, key) {\n if (\n typeof key === 'string' &&\n key[0] === '$' &&\n // dont error on $$typeof\n key[1] !== '$'\n ) {\n throw new Error(`Access mediaState should not use \"$\": ${key}`)\n }\n return Reflect.get(target, key)\n },\n }\n )\n : ({} as any)\n\ntype MediaListener = (next: boolean) => void\n\nconst listeners: { [key: string]: Set<MediaListener> } = {}\n\nexport function addMediaQueryListener(key: MediaQueryKey, cb: MediaListener) {\n if (process.env.NODE_ENV === 'development' && key[0] === '$') {\n // eslint-disable-next-line no-console\n console.warn(`Warning, listening to media queries shouldn't use the \"$\" prefix`)\n }\n listeners[key] = listeners[key] || new Set()\n listeners[key].add(cb)\n return () => removeMediaQueryListener(key, cb)\n}\n\nexport function removeMediaQueryListener(key: MediaQueryKey, cb: MediaListener) {\n listeners[key]?.delete(cb)\n}\n\nexport const mediaQueryConfig: MediaQueries = {}\n\nexport const getMedia = () => mediaState\n\n// for SSR capture it at time of startup\nlet initState: MediaQueryState\nexport const getInitialMediaState = () => {\n return (getConfig().disableSSR ? mediaState : initState) || {}\n}\n\nlet mediaKeysOrdered: string[]\nexport const getMediaKeyImportance = (key: string) =>\n // + 2 because we set base usedKeys=1 in getSplitStyles and all media go above 1\n mediaKeysOrdered.indexOf(key[0] === '$' ? key.slice(1) : key) + 2\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = (config: TamaguiInternalConfig) => {\n const { media, mediaQueryDefaultActive } = config\n if (!media) return\n for (const key in media) {\n mediaState[key] = mediaQueryDefaultActive?.[key] || false\n }\n Object.assign(mediaQueryConfig, media)\n initState = { ...mediaState }\n updateCurrentState()\n mediaKeysOrdered = Object.keys(media)\n if (config.disableSSR) {\n setupMediaListeners()\n }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\n/**\n * Note: This should *not* set the state on the first render!\n * Because to avoid hydration issues SSR must match the server\n * *and then* re-render with the actual media query state.\n */\nlet configuredKey = ''\nfunction setupMediaListeners() {\n // avoid setting up more than once per config\n const nextKey = JSON.stringify(mediaQueryConfig)\n if (nextKey === configuredKey) {\n return\n }\n configuredKey = nextKey\n\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => match.removeListener(update))\n\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState[key] = next\n updateCurrentState()\n const cur = listeners[key]\n if (cur?.size) {\n cur.forEach((cb) => cb(next))\n }\n }\n }\n}\n\nexport function useMediaListeners(config: TamaguiInternalConfig) {\n if (config.disableSSR) return\n useEffect(() => {\n setupMediaListeners()\n return unlisten\n }, [])\n}\n\nconst currentStateListeners = new Set<any>()\nfunction updateCurrentState() {\n currentStateListeners.forEach((cb) => cb(mediaState))\n}\nfunction subscribe(subscriber: any) {\n currentStateListeners.add(subscriber)\n return () => currentStateListeners.delete(subscriber)\n}\n\ntype MediaKeysState = {\n [key: string]: any\n}\n\nexport function useMedia(): {\n [key in MediaQueryKey]: boolean\n} {\n const keys = useSafeRef<MediaKeysState>({ prev: initState })\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { useDeferredValue, useEffect, useMemo, useSyncExternalStore } from 'react'\n\nimport { getConfig } from '../config'\nimport { createProxy } from '../helpers/createProxy'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n MediaQueries,\n MediaQueryKey,\n MediaQueryObject,\n MediaQueryState,\n TamaguiInternalConfig,\n} from '../types'\nimport { useSafeRef } from './useSafeRef'\n\nexport const mediaState: MediaQueryState =\n // development time safeguard\n process.env.NODE_ENV === 'development'\n ? createProxy(\n {},\n {\n get(target, key) {\n if (\n typeof key === 'string' &&\n key[0] === '$' &&\n // dont error on $$typeof\n key[1] !== '$'\n ) {\n throw new Error(`Access mediaState should not use \"$\": ${key}`)\n }\n return Reflect.get(target, key)\n },\n }\n )\n : ({} as any)\n\ntype MediaListener = (next: boolean) => void\n\nconst listeners: { [key: string]: Set<MediaListener> } = {}\n\nexport function addMediaQueryListener(key: MediaQueryKey, cb: MediaListener) {\n if (process.env.NODE_ENV === 'development' && key[0] === '$') {\n // eslint-disable-next-line no-console\n console.warn(`Warning, listening to media queries shouldn't use the \"$\" prefix`)\n }\n listeners[key] = listeners[key] || new Set()\n listeners[key].add(cb)\n return () => removeMediaQueryListener(key, cb)\n}\n\nexport function removeMediaQueryListener(key: MediaQueryKey, cb: MediaListener) {\n listeners[key]?.delete(cb)\n}\n\nexport const mediaQueryConfig: MediaQueries = {}\n\nexport const getMedia = () => mediaState\n\n// for SSR capture it at time of startup\nlet initState: MediaQueryState\nexport const getInitialMediaState = () => {\n return (getConfig().disableSSR ? mediaState : initState) || {}\n}\n\nlet mediaKeysOrdered: string[]\nexport const getMediaKeyImportance = (key: string) =>\n // + 2 because we set base usedKeys=1 in getSplitStyles and all media go above 1\n mediaKeysOrdered.indexOf(key[0] === '$' ? key.slice(1) : key) + 2\n\nconst dispose = new Set<Function>()\n\nexport const configureMedia = (config: TamaguiInternalConfig) => {\n const { media, mediaQueryDefaultActive } = config\n if (!media) return\n for (const key in media) {\n mediaState[key] = mediaQueryDefaultActive?.[key] || false\n }\n Object.assign(mediaQueryConfig, media)\n initState = { ...mediaState }\n updateCurrentState()\n mediaKeysOrdered = Object.keys(media)\n if (config.disableSSR) {\n setupMediaListeners()\n }\n}\n\nfunction unlisten() {\n dispose.forEach((cb) => cb())\n dispose.clear()\n}\n\n/**\n * Note: This should *not* set the state on the first render!\n * Because to avoid hydration issues SSR must match the server\n * *and then* re-render with the actual media query state.\n */\nlet configuredKey = ''\nfunction setupMediaListeners() {\n // avoid setting up more than once per config\n const nextKey = JSON.stringify(mediaQueryConfig)\n if (nextKey === configuredKey) {\n return\n }\n configuredKey = nextKey\n\n // hmr, undo existing before re-binding\n unlisten()\n\n for (const key in mediaQueryConfig) {\n const str = mediaObjectToString(mediaQueryConfig[key])\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match) {\n throw new Error('\u26A0\uFE0F No match')\n }\n // react native needs these deprecated apis for now\n match.addListener(update)\n dispose.add(() => match.removeListener(update))\n\n update()\n\n function update() {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState[key] = next\n updateCurrentState()\n const cur = listeners[key]\n if (cur?.size) {\n cur.forEach((cb) => cb(next))\n }\n }\n }\n}\n\nexport function useMediaListeners(config: TamaguiInternalConfig) {\n if (config.disableSSR) return\n useEffect(() => {\n setupMediaListeners()\n return unlisten\n }, [])\n}\n\nconst currentStateListeners = new Set<any>()\nfunction updateCurrentState() {\n currentStateListeners.forEach((cb) => cb(mediaState))\n}\nfunction subscribe(subscriber: any) {\n currentStateListeners.add(subscriber)\n return () => currentStateListeners.delete(subscriber)\n}\n\ntype MediaKeysState = {\n [key: string]: any\n}\n\nexport function useMedia(): {\n [key in MediaQueryKey]: boolean\n} {\n const keys = useSafeRef<MediaKeysState>({ prev: initState })\n const stateSync = useSyncExternalStore<MediaQueryState>(\n subscribe,\n () => {\n const { prev, ...curKeys } = keys.current\n const shouldUpdate = !prev || Object.keys(curKeys).some((k) => mediaState[k] !== prev[k])\n if (shouldUpdate) {\n const next = { ...mediaState }\n keys.current.prev = next\n return next\n }\n return prev\n },\n () => initState\n )\n const state = useDeferredValue(stateSync)\n\n return useMemo(() => {\n return new Proxy(state, {\n get(_, key: string) {\n if (!keys.current[key]) {\n keys.current[key] = true\n }\n return Reflect.get(state, key)\n },\n })\n }, [state])\n}\n\n/**\n * Useful for more complex components that need access to the currently active props,\n * accounting for the currently active media queries.\n *\n * Use sparingly, is will loop props and trigger re-render on all media queries.\n *\n * */\nexport function useMediaPropsActive<A extends Object>(\n props: A\n): {\n // remove all media\n [Key in keyof A extends `$${string}` ? never : keyof A]?: A[Key]\n} {\n const media = useMedia()\n\n return useMemo(() => {\n const next = {} as A\n const importancesUsed = {}\n const propNames = Object.keys(props)\n\n for (let i = propNames.length - 1; i >= 0; i--) {\n const key = propNames[i]\n const val = props[key]\n if (key[0] === '$') {\n if (!media[key.slice(1)]) {\n continue\n }\n if (val && typeof val === 'object') {\n const subKeys = Object.keys(val)\n for (let j = subKeys.length; j--; j >= 0) {\n const subKey = subKeys[j]\n mergeMediaByImportance(next, subKey, val[subKey], importancesUsed)\n }\n }\n } else {\n mergeMediaByImportance(next, key, val, importancesUsed)\n }\n }\n\n return next\n }, [media, props])\n}\n\nexport function mergeMediaByImportance(\n onto: Record<string, any>,\n key: string,\n value: any,\n importancesUsed: Record<string, number>\n) {\n const importance = getMediaKeyImportance(key)\n if (importancesUsed[key] > importance) {\n return false\n }\n importancesUsed[key] = importance\n onto[key] = value\n return true\n}\n\nfunction camelToHyphen(str: string) {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase()\n}\n\nexport function mediaObjectToString(query: string | MediaQueryObject) {\n if (typeof query === 'string') {\n return query\n }\n return Object.entries(query)\n .map(([feature, value]) => {\n feature = camelToHyphen(feature)\n if (typeof value === 'string') {\n return `(${feature}: ${value})`\n }\n if (typeof value === 'number' && /[height|width]$/.test(feature)) {\n value = `${value}px`\n }\n return `(${feature}: ${value})`\n })\n .join(' and ')\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["update"]
|
|
7
7
|
}
|
|
@@ -19,251 +19,209 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var useTheme_exports = {};
|
|
20
20
|
__export(useTheme_exports, {
|
|
21
21
|
activeThemeManagers: () => activeThemeManagers,
|
|
22
|
+
getThemeIsNewTheme: () => getThemeIsNewTheme,
|
|
22
23
|
getThemeManager: () => getThemeManager,
|
|
23
24
|
useChangeThemeEffect: () => useChangeThemeEffect,
|
|
24
|
-
|
|
25
|
-
useTheme: () => useTheme,
|
|
26
|
-
useThemeName: () => useThemeName
|
|
25
|
+
useTheme: () => useTheme
|
|
27
26
|
});
|
|
28
27
|
module.exports = __toCommonJS(useTheme_exports);
|
|
29
28
|
var import_constants = require("@tamagui/constants");
|
|
30
|
-
var import_use_force_update = require("@tamagui/use-force-update");
|
|
31
29
|
var import_react = require("react");
|
|
32
30
|
var import_config = require("../config");
|
|
33
31
|
var import_isDevTools = require("../constants/isDevTools");
|
|
34
|
-
var import_ThemeContext = require("../contexts/ThemeContext");
|
|
35
|
-
var import_areEqualSets = require("../helpers/areEqualSets");
|
|
36
32
|
var import_createProxy = require("../helpers/createProxy");
|
|
37
33
|
var import_ThemeManager = require("../helpers/ThemeManager");
|
|
34
|
+
var import_ThemeManagerContext = require("../helpers/ThemeManagerContext");
|
|
38
35
|
var import_getThemeUnwrapped = require("./getThemeUnwrapped");
|
|
39
|
-
|
|
40
|
-
const useTheme = (
|
|
36
|
+
const emptyProps = { name: null };
|
|
37
|
+
const useTheme = (props = emptyProps) => {
|
|
38
|
+
var _a;
|
|
41
39
|
if (import_constants.isRSC) {
|
|
42
40
|
const config = (0, import_config.getConfig)();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
uuid: {},
|
|
49
|
-
keys: /* @__PURE__ */ new Set(),
|
|
50
|
-
isRendering: true
|
|
51
|
-
};
|
|
41
|
+
const name2 = Object.keys(config.themes)[0];
|
|
42
|
+
return getThemeProxied({
|
|
43
|
+
theme: config.themes[name2],
|
|
44
|
+
name: name2
|
|
45
|
+
});
|
|
52
46
|
}
|
|
53
|
-
const { name, theme, themes, themeManager, className } = useChangeThemeEffect(
|
|
54
|
-
themeName,
|
|
55
|
-
componentName,
|
|
56
|
-
props,
|
|
57
|
-
forceUpdate,
|
|
58
|
-
state.current.uuid
|
|
59
|
-
);
|
|
47
|
+
const { name, theme, themes, themeManager, className, isNewTheme } = useChangeThemeEffect(props);
|
|
60
48
|
if (process.env.NODE_ENV === "development") {
|
|
61
|
-
if ((
|
|
49
|
+
if (import_constants.isWeb && isNewTheme && className === ((_a = themeManager == null ? void 0 : themeManager.parentManager) == null ? void 0 : _a.state.className)) {
|
|
50
|
+
console.error(`Should always change, duplicating ThemeMananger bug`, themeManager);
|
|
51
|
+
debugger;
|
|
52
|
+
}
|
|
53
|
+
if (props.debug === "verbose") {
|
|
62
54
|
console.groupCollapsed(" \u{1F539} useTheme =>", name);
|
|
63
|
-
const logs = {
|
|
55
|
+
const logs = { ...props, name, className, ...import_isDevTools.isDevTools && { theme } };
|
|
64
56
|
for (const key in logs) {
|
|
65
57
|
console.log(" ", key, logs[key]);
|
|
66
58
|
}
|
|
67
59
|
console.groupEnd();
|
|
68
60
|
}
|
|
69
61
|
}
|
|
70
|
-
state.current.isRendering = true;
|
|
71
|
-
(0, import_constants.useIsomorphicLayoutEffect)(() => {
|
|
72
|
-
const st = state.current;
|
|
73
|
-
st.isRendering = false;
|
|
74
|
-
const cur = themeManager == null ? void 0 : themeManager.keys.get(st.uuid);
|
|
75
|
-
if (!cur || !(0, import_areEqualSets.areEqualSets)(st.keys, cur)) {
|
|
76
|
-
themeManager == null ? void 0 : themeManager.track(st.uuid, st.keys);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
const debugProp = props && props["debug"];
|
|
80
62
|
if (!theme) {
|
|
81
63
|
if (process.env.NODE_ENV === "development") {
|
|
82
|
-
console.warn("No theme
|
|
64
|
+
console.warn("No theme found", name, props, themeManager);
|
|
83
65
|
}
|
|
84
66
|
return themes[Object.keys(themes)[0]];
|
|
85
67
|
}
|
|
86
68
|
return (0, import_react.useMemo)(() => {
|
|
87
69
|
return getThemeProxied({
|
|
70
|
+
isNewTheme,
|
|
88
71
|
theme,
|
|
89
72
|
name,
|
|
90
73
|
className,
|
|
91
|
-
themeManager
|
|
92
|
-
onStringKeyAccess(key) {
|
|
93
|
-
if (disableTracking)
|
|
94
|
-
return;
|
|
95
|
-
if (state) {
|
|
96
|
-
if (state.current.isRendering && !state.current.keys.has(key)) {
|
|
97
|
-
state.current.keys.add(key);
|
|
98
|
-
if (process.env.NODE_ENV === "development" && debugProp === "verbose") {
|
|
99
|
-
console.log(" \u{1F538} tracking theme", key);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
74
|
+
themeManager
|
|
104
75
|
});
|
|
105
|
-
}, [theme, name, className, themeManager
|
|
76
|
+
}, [theme, isNewTheme, name, className, themeManager]);
|
|
106
77
|
};
|
|
107
78
|
function getThemeProxied({
|
|
108
79
|
theme,
|
|
109
80
|
name,
|
|
110
81
|
className,
|
|
111
82
|
themeManager,
|
|
112
|
-
|
|
83
|
+
isNewTheme
|
|
113
84
|
}) {
|
|
114
85
|
return (0, import_createProxy.createProxy)(theme, {
|
|
115
86
|
has(_, key) {
|
|
116
|
-
if (typeof key === "string"
|
|
117
|
-
key
|
|
87
|
+
if (typeof key === "string") {
|
|
88
|
+
if (key[0] === "$")
|
|
89
|
+
key = key.slice(1);
|
|
90
|
+
return themeManager == null ? void 0 : themeManager.allKeys.has(key);
|
|
118
91
|
}
|
|
119
92
|
return Reflect.has(theme, key);
|
|
120
93
|
},
|
|
121
94
|
get(_, key) {
|
|
122
95
|
if (key === import_getThemeUnwrapped.GetThemeUnwrapped) {
|
|
123
96
|
return theme;
|
|
124
|
-
}
|
|
125
|
-
if (key === GetThemeManager) {
|
|
97
|
+
} else if (key === GetThemeManager) {
|
|
126
98
|
return themeManager;
|
|
127
|
-
}
|
|
128
|
-
|
|
99
|
+
} else if (key === GetIsNewTheme) {
|
|
100
|
+
return isNewTheme;
|
|
101
|
+
} else if (key === "name") {
|
|
129
102
|
return name;
|
|
130
|
-
}
|
|
131
|
-
if (key === "className") {
|
|
103
|
+
} else if (key === "className") {
|
|
132
104
|
return className;
|
|
133
|
-
}
|
|
134
|
-
if (!name || key === "__proto__" || typeof key === "symbol" || key === "$typeof") {
|
|
105
|
+
} else if (!name || key === "__proto__" || typeof key === "symbol" || key === "$typeof") {
|
|
135
106
|
return Reflect.get(_, key);
|
|
136
107
|
}
|
|
137
|
-
if (key[0] === "$")
|
|
108
|
+
if (key[0] === "$")
|
|
138
109
|
key = key.slice(1);
|
|
139
|
-
}
|
|
140
110
|
if (!themeManager) {
|
|
141
111
|
return theme[key];
|
|
142
112
|
}
|
|
143
|
-
onStringKeyAccess == null ? void 0 : onStringKeyAccess(key);
|
|
144
113
|
return themeManager.getValue(key);
|
|
145
114
|
}
|
|
146
115
|
});
|
|
147
116
|
}
|
|
148
117
|
const GetThemeManager = Symbol();
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return theme[GetThemeManager];
|
|
153
|
-
};
|
|
154
|
-
function useThemeName(opts) {
|
|
155
|
-
if (import_constants.isRSC) {
|
|
156
|
-
const config = (0, import_config.getConfig)();
|
|
157
|
-
return config.themes[Object.keys(config.themes)[0]];
|
|
158
|
-
}
|
|
159
|
-
const parent = (0, import_react.useContext)(import_ThemeManager.ThemeManagerContext);
|
|
160
|
-
const [name, setName] = (0, import_react.useState)((parent == null ? void 0 : parent.name) || "");
|
|
161
|
-
(0, import_constants.useIsomorphicLayoutEffect)(() => {
|
|
162
|
-
if (!parent)
|
|
163
|
-
return;
|
|
164
|
-
return parent.onChangeTheme((next, manager) => {
|
|
165
|
-
const name2 = (opts == null ? void 0 : opts.parent) ? manager.parentName || next : next;
|
|
166
|
-
if (!name2)
|
|
167
|
-
return;
|
|
168
|
-
setName(name2);
|
|
169
|
-
});
|
|
170
|
-
}, [parent]);
|
|
171
|
-
return name;
|
|
172
|
-
}
|
|
173
|
-
const useDefaultThemeName = () => {
|
|
174
|
-
var _a;
|
|
175
|
-
return (_a = (0, import_react.useContext)(import_ThemeContext.ThemeContext)) == null ? void 0 : _a.defaultTheme;
|
|
176
|
-
};
|
|
118
|
+
const GetIsNewTheme = Symbol();
|
|
119
|
+
const getThemeManager = (theme) => theme == null ? void 0 : theme[GetThemeManager];
|
|
120
|
+
const getThemeIsNewTheme = (theme) => theme == null ? void 0 : theme[GetIsNewTheme];
|
|
177
121
|
const activeThemeManagers = /* @__PURE__ */ new Set();
|
|
178
|
-
const useChangeThemeEffect = (
|
|
122
|
+
const useChangeThemeEffect = (props, root = false) => {
|
|
123
|
+
const parentManager = (0, import_react.useContext)(import_ThemeManagerContext.ThemeManagerContext);
|
|
179
124
|
const config = (0, import_config.getConfig)();
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
throw new Error(
|
|
183
|
-
`Missing tamagui config, you either have a duplicate config, or haven't set it up. Be sure createTamagui is called before rendering.`
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
125
|
+
const { debug } = props;
|
|
126
|
+
const disable = props.disable;
|
|
187
127
|
const { themes } = config;
|
|
188
128
|
if (import_constants.isRSC) {
|
|
189
|
-
const parentManager2 = new import_ThemeManager.ThemeManager("light", "light", themes.light);
|
|
190
|
-
const next2 = parentManager2.getNextTheme({
|
|
191
|
-
name,
|
|
192
|
-
componentName,
|
|
193
|
-
themes,
|
|
194
|
-
reset: props == null ? void 0 : props.reset
|
|
195
|
-
});
|
|
196
129
|
return {
|
|
197
|
-
...
|
|
130
|
+
...createState().state,
|
|
198
131
|
themes,
|
|
199
132
|
themeManager: null
|
|
200
133
|
};
|
|
201
134
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const next = parentManager.getNextTheme(getThemeProps, debug);
|
|
212
|
-
const forceUpdate = forceUpdateProp || (0, import_use_force_update.useForceUpdate)();
|
|
213
|
-
const themeManager = (0, import_react.useMemo)(() => {
|
|
214
|
-
return new import_ThemeManager.ThemeManager(next.name, next.className, next.theme, parentManager, reset);
|
|
215
|
-
}, []);
|
|
216
|
-
let didChange = false;
|
|
217
|
-
if (process.env.TAMAGUI_TARGET === "native") {
|
|
218
|
-
didChange = Boolean(
|
|
219
|
-
(next == null ? void 0 : next.name) !== themeManager.name || (next == null ? void 0 : next.className) !== themeManager.className
|
|
220
|
-
);
|
|
221
|
-
if (didChange) {
|
|
222
|
-
themeManager.update(next, false, false);
|
|
223
|
-
}
|
|
135
|
+
if (disable) {
|
|
136
|
+
if (!parentManager)
|
|
137
|
+
throw new Error(`Disable topmost`);
|
|
138
|
+
return {
|
|
139
|
+
...parentManager.state,
|
|
140
|
+
isNewTheme: false,
|
|
141
|
+
themes,
|
|
142
|
+
themeManager: parentManager
|
|
143
|
+
};
|
|
224
144
|
}
|
|
145
|
+
const [themeState, setThemeState] = (0, import_react.useState)(createState);
|
|
146
|
+
const { isNewTheme, state, themeManager, mounted } = themeState;
|
|
225
147
|
if (!import_constants.isServer) {
|
|
226
148
|
(0, import_react.useLayoutEffect)(() => {
|
|
227
|
-
|
|
149
|
+
if (disable)
|
|
150
|
+
return;
|
|
151
|
+
if (props.inverse && !mounted) {
|
|
152
|
+
setThemeState({ ...themeState, mounted: true });
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
228
155
|
activeThemeManagers.add(themeManager);
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
console.log("Changed theme", componentName, next2, { props });
|
|
239
|
-
}
|
|
240
|
-
forceUpdate();
|
|
156
|
+
const disposeChangeListener = parentManager == null ? void 0 : parentManager.onChangeTheme(() => {
|
|
157
|
+
if (!isNewTheme && !import_constants.isWeb) {
|
|
158
|
+
setThemeState({
|
|
159
|
+
...themeState,
|
|
160
|
+
state: { ...themeManager.state },
|
|
161
|
+
isNewTheme: false
|
|
162
|
+
});
|
|
163
|
+
} else {
|
|
164
|
+
updateState();
|
|
241
165
|
}
|
|
242
166
|
});
|
|
243
167
|
return () => {
|
|
244
168
|
activeThemeManagers.delete(themeManager);
|
|
245
|
-
|
|
169
|
+
disposeChangeListener == null ? void 0 : disposeChangeListener();
|
|
246
170
|
};
|
|
247
|
-
}, [
|
|
171
|
+
}, [disable, state, isNewTheme, debug]);
|
|
172
|
+
}
|
|
173
|
+
if (process.env.NODE_ENV === "development" && debug)
|
|
174
|
+
console.log("useTheme.render isNewTheme", isNewTheme, props, themeManager.state.name, parentManager == null ? void 0 : parentManager.state.name);
|
|
175
|
+
if ((0, import_ThemeManager.hasNoThemeUpdatingProps)(props)) {
|
|
176
|
+
if (!parentManager)
|
|
177
|
+
throw new Error(`Nada`);
|
|
178
|
+
return {
|
|
179
|
+
...parentManager.state,
|
|
180
|
+
themes,
|
|
181
|
+
themeManager: parentManager,
|
|
182
|
+
isNewTheme: false
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
updateState();
|
|
186
|
+
if (!mounted && !parentManager) {
|
|
187
|
+
throw new Error(`Impossible`);
|
|
248
188
|
}
|
|
249
189
|
return {
|
|
250
|
-
...
|
|
251
|
-
|
|
252
|
-
theme: parentManager.theme
|
|
253
|
-
},
|
|
254
|
-
...next,
|
|
255
|
-
className: next.className === parentManager.className ? void 0 : next.className,
|
|
190
|
+
...state,
|
|
191
|
+
isNewTheme,
|
|
256
192
|
themes,
|
|
257
|
-
themeManager
|
|
193
|
+
themeManager,
|
|
194
|
+
...!mounted && parentManager && {
|
|
195
|
+
...parentManager.state,
|
|
196
|
+
isNewTheme: false,
|
|
197
|
+
themeManager: parentManager
|
|
198
|
+
}
|
|
258
199
|
};
|
|
200
|
+
function createState(prev) {
|
|
201
|
+
const _ = new import_ThemeManager.ThemeManager(props, root ? "root" : parentManager);
|
|
202
|
+
const isNewTheme2 = _ !== parentManager;
|
|
203
|
+
if (process.env.NODE_ENV === "development" && debug)
|
|
204
|
+
[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()];
|
|
205
|
+
const mounted2 = !props.inverse ? true : root || (prev == null ? void 0 : prev.mounted) || false;
|
|
206
|
+
return {
|
|
207
|
+
isNewTheme: isNewTheme2,
|
|
208
|
+
state: { ..._.state },
|
|
209
|
+
themeManager: _,
|
|
210
|
+
mounted: mounted2
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function updateState() {
|
|
214
|
+
if (themeManager.getStateIfChanged(props, state, parentManager)) {
|
|
215
|
+
setThemeState(createState);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
259
218
|
};
|
|
260
219
|
// Annotate the CommonJS export names for ESM import in node:
|
|
261
220
|
0 && (module.exports = {
|
|
262
221
|
activeThemeManagers,
|
|
222
|
+
getThemeIsNewTheme,
|
|
263
223
|
getThemeManager,
|
|
264
224
|
useChangeThemeEffect,
|
|
265
|
-
|
|
266
|
-
useTheme,
|
|
267
|
-
useThemeName
|
|
225
|
+
useTheme
|
|
268
226
|
});
|
|
269
227
|
//# sourceMappingURL=useTheme.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useTheme.tsx"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
6
|
-
"names": ["name", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable no-console */\nimport { isClient, isRSC, isServer, isWeb } from '@tamagui/constants'\nimport { useContext, useLayoutEffect, useMemo, useState } from 'react'\n\nimport { getConfig } from '../config'\nimport { isDevTools } from '../constants/isDevTools'\nimport { createProxy } from '../helpers/createProxy'\nimport { ThemeManager, ThemeManagerState, hasNoThemeUpdatingProps } from '../helpers/ThemeManager'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { ThemeParsed, ThemeProps } from '../types'\nimport { GetThemeUnwrapped } from './getThemeUnwrapped'\n\nexport type ChangedThemeResponse = {\n themes: Record<string, ThemeParsed>\n themeManager: ThemeManager | null\n name: string\n isNewTheme?: boolean\n theme?: ThemeParsed | null\n className?: string\n}\n\nconst emptyProps = { name: null }\nexport const useTheme = (props: ThemeProps = emptyProps): ThemeParsed => {\n if (isRSC) {\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\n const { name, theme, themes, themeManager, className, isNewTheme } = useChangeThemeEffect(props)\n\n if (process.env.NODE_ENV === 'development') {\n // ensure we aren't creating too many ThemeManagers\n if (isWeb && isNewTheme && className === themeManager?.parentManager?.state.className) {\n console.error(`Should always change, duplicating ThemeMananger bug`, themeManager)\n // eslint-disable-next-line no-debugger\n debugger\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 themes[Object.keys(themes)[0]]\n }\n\n return useMemo(() => {\n return getThemeProxied({\n isNewTheme,\n theme,\n name,\n className,\n themeManager,\n })\n }, [theme, isNewTheme, name, className, themeManager])\n}\n\nfunction getThemeProxied({\n theme,\n name,\n className,\n themeManager,\n isNewTheme,\n}: {\n theme: any\n name: string\n className?: string\n themeManager?: ThemeManager | null\n isNewTheme?: boolean\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 (!name || key === '__proto__' || typeof key === 'symbol' || key === '$typeof') {\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 return themeManager.getValue(key)\n },\n })\n}\n\nconst GetThemeManager = Symbol()\nconst GetIsNewTheme = Symbol()\n\nexport const getThemeManager = (theme: any): ThemeManager | undefined => theme?.[GetThemeManager]\nexport const getThemeIsNewTheme = (theme: any): ThemeManager | undefined => theme?.[GetIsNewTheme]\n\nexport const activeThemeManagers = new Set<ThemeManager>()\n\nexport const useChangeThemeEffect = (props: ThemeProps, root = false): ChangedThemeResponse => {\n const parentManager = useContext(ThemeManagerContext)\n const config = getConfig()\n const { debug } = props\n // @ts-expect-error internal use only\n const disable = props.disable\n const { themes } = config\n if (isRSC) {\n // we need context working for this to work well\n return {\n ...createState().state,\n themes,\n themeManager: null,\n }\n }\n if (disable) {\n if (!parentManager) throw new Error(`Disable topmost`)\n return {\n ...parentManager.state,\n isNewTheme: false,\n themes,\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 useLayoutEffect(() => {\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 if (!isNewTheme && !isWeb) {\n setThemeState({\n ...themeState,\n state: { ...themeManager.state },\n isNewTheme: false,\n })\n } else {\n updateState()\n }\n })\n return () => {\n activeThemeManagers.delete(themeManager)\n disposeChangeListener?.()\n }\n }, [disable, state, isNewTheme, debug])\n }\n\n // prettier-ignore\n if (process.env.NODE_ENV === 'development' && debug) console.log('useTheme.render isNewTheme', isNewTheme, props, themeManager.state.name, parentManager?.state.name)\n\n // this seems unnecessary\n if (hasNoThemeUpdatingProps(props)) {\n if (!parentManager) throw new Error(`Nada`)\n return {\n ...parentManager.state,\n themes,\n themeManager: parentManager,\n isNewTheme: false,\n }\n }\n\n // run inline in render\n updateState()\n\n if (!mounted && !parentManager) {\n throw new Error(`Impossible`)\n }\n\n return {\n ...state,\n isNewTheme,\n themes,\n themeManager,\n ...(!mounted &&\n parentManager && {\n ...parentManager.state,\n isNewTheme: false,\n themeManager: parentManager,\n }),\n }\n\n function createState(prev?: State) {\n const _ = new ThemeManager(props, root ? 'root' : parentManager)\n const isNewTheme = _ !== parentManager\n // prettier-ignore\n if (process.env.NODE_ENV === 'development' && debug) [console.groupCollapsed('useTheme create() isNewTheme', isNewTheme), console.log('parent.state.name', parentManager?.state.name, '\\n', 'props', props, '\\n', isClient ? parentManager : '', 'getState', isNewTheme && isClient ? _.getState(props) : '', '\\n', 'state', isClient ? { ..._.state } : ''), console.groupEnd()]\n // only inverse relies on this for ssr\n const mounted = !props.inverse ? true : root || prev?.mounted || false\n return {\n // ThemeManager returns parentManager if no change\n isNewTheme,\n state: { ..._.state },\n themeManager: _,\n mounted,\n }\n }\n\n function updateState() {\n if (themeManager.getStateIfChanged(props, state, parentManager)) {\n setThemeState(createState)\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAiD;AACjD,mBAA+D;AAE/D,oBAA0B;AAC1B,wBAA2B;AAC3B,yBAA4B;AAC5B,0BAAyE;AACzE,iCAAoC;AAEpC,+BAAkC;AAWlC,MAAM,aAAa,EAAE,MAAM,KAAK;AACzB,MAAM,WAAW,CAAC,QAAoB,eAA4B;AAtBzE;AAuBE,MAAI,wBAAO;AACT,UAAM,aAAS,yBAAU;AACzB,UAAMA,QAAO,OAAO,KAAK,OAAO,MAAM,EAAE;AACxC,WAAO,gBAAgB;AAAA,MACrB,OAAO,OAAO,OAAOA;AAAA,MACrB,MAAAA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,EAAE,MAAM,OAAO,QAAQ,cAAc,WAAW,WAAW,IAAI,qBAAqB,KAAK;AAE/F,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,QAAI,0BAAS,cAAc,gBAAc,kDAAc,kBAAd,mBAA6B,MAAM,YAAW;AACrF,cAAQ,MAAM,uDAAuD,YAAY;AAEjF;AAAA,IACF;AACA,QAAI,MAAM,UAAU,WAAW;AAC7B,cAAQ,eAAe,2BAAoB,IAAI;AAC/C,YAAM,OAAO,EAAE,GAAG,OAAO,MAAM,WAAW,GAAI,gCAAc,EAAE,MAAM,EAAG;AACvE,iBAAW,OAAO,MAAM;AACtB,gBAAQ,IAAI,MAAM,KAAK,KAAK,IAAI;AAAA,MAClC;AACA,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AAEA,MAAI,CAAC,OAAO;AACV,QAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAQ,KAAK,kBAAkB,MAAM,OAAO,YAAY;AAAA,IAC1D;AACA,WAAO,OAAO,OAAO,KAAK,MAAM,EAAE;AAAA,EACpC;AAEA,aAAO,sBAAQ,MAAM;AACnB,WAAO,gBAAgB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,YAAY,MAAM,WAAW,YAAY,CAAC;AACvD;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,aAAO,gCAAY,OAAO;AAAA,IACxB,IAAI,GAAG,KAAK;AACV,UAAI,OAAO,QAAQ,UAAU;AAC3B,YAAI,IAAI,OAAO;AAAK,gBAAM,IAAI,MAAM,CAAC;AACrC,eAAO,6CAAc,QAAQ,IAAI;AAAA,MACnC;AACA,aAAO,QAAQ,IAAI,OAAO,GAAG;AAAA,IAC/B;AAAA,IACA,IAAI,GAAG,KAAK;AACV,UAAI,QAAQ,4CAAmB;AAC7B,eAAO;AAAA,MACT,WAAW,QAAQ,iBAAiB;AAClC,eAAO;AAAA,MACT,WAAW,QAAQ,eAAe;AAChC,eAAO;AAAA,MACT,WAAW,QAAQ,QAAQ;AACzB,eAAO;AAAA,MACT,WAAW,QAAQ,aAAa;AAC9B,eAAO;AAAA,MACT,WAAW,CAAC,QAAQ,QAAQ,eAAe,OAAO,QAAQ,YAAY,QAAQ,WAAW;AACvF,eAAO,QAAQ,IAAI,GAAG,GAAG;AAAA,MAC3B;AAEA,UAAI,IAAI,OAAO;AAAK,cAAM,IAAI,MAAM,CAAC;AACrC,UAAI,CAAC,cAAc;AACjB,eAAO,MAAM;AAAA,MACf;AACA,aAAO,aAAa,SAAS,GAAG;AAAA,IAClC;AAAA,EACF,CAAC;AACH;AAEA,MAAM,kBAAkB,OAAO;AAC/B,MAAM,gBAAgB,OAAO;AAEtB,MAAM,kBAAkB,CAAC,UAAyC,+BAAQ;AAC1E,MAAM,qBAAqB,CAAC,UAAyC,+BAAQ;AAE7E,MAAM,sBAAsB,oBAAI,IAAkB;AAElD,MAAM,uBAAuB,CAAC,OAAmB,OAAO,UAAgC;AAC7F,QAAM,oBAAgB,yBAAW,8CAAmB;AACpD,QAAM,aAAS,yBAAU;AACzB,QAAM,EAAE,MAAM,IAAI;AAElB,QAAM,UAAU,MAAM;AACtB,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,wBAAO;AAET,WAAO;AAAA,MACL,GAAG,YAAY,EAAE;AAAA,MACjB;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,EACF;AACA,MAAI,SAAS;AACX,QAAI,CAAC;AAAe,YAAM,IAAI,MAAM,iBAAiB;AACrD,WAAO;AAAA,MACL,GAAG,cAAc;AAAA,MACjB,YAAY;AAAA,MACZ;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,EACF;AASA,QAAM,CAAC,YAAY,aAAa,QAAI,uBAAgB,WAAW;AAC/D,QAAM,EAAE,YAAY,OAAO,cAAc,QAAQ,IAAI;AAErD,MAAI,CAAC,2BAAU;AACb,sCAAgB,MAAM;AACpB,UAAI;AAAS;AAIb,UAAI,MAAM,WAAW,CAAC,SAAS;AAC7B,sBAAc,EAAE,GAAG,YAAY,SAAS,KAAK,CAAC;AAC9C;AAAA,MACF;AACA,0BAAoB,IAAI,YAAY;AACpC,YAAM,wBAAwB,+CAAe,cAAc,MAAM;AAC/D,YAAI,CAAC,cAAc,CAAC,wBAAO;AACzB,wBAAc;AAAA,YACZ,GAAG;AAAA,YACH,OAAO,EAAE,GAAG,aAAa,MAAM;AAAA,YAC/B,YAAY;AAAA,UACd,CAAC;AAAA,QACH,OAAO;AACL,sBAAY;AAAA,QACd;AAAA,MACF;AACA,aAAO,MAAM;AACX,4BAAoB,OAAO,YAAY;AACvC;AAAA,MACF;AAAA,IACF,GAAG,CAAC,SAAS,OAAO,YAAY,KAAK,CAAC;AAAA,EACxC;AAGA,MAAI,QAAQ,IAAI,aAAa,iBAAiB;AAAO,YAAQ,IAAI,8BAA8B,YAAY,OAAO,aAAa,MAAM,MAAM,+CAAe,MAAM,IAAI;AAGpK,UAAI,6CAAwB,KAAK,GAAG;AAClC,QAAI,CAAC;AAAe,YAAM,IAAI,MAAM,MAAM;AAC1C,WAAO;AAAA,MACL,GAAG,cAAc;AAAA,MACjB;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA,EACF;AAGA,cAAY;AAEZ,MAAI,CAAC,WAAW,CAAC,eAAe;AAC9B,UAAM,IAAI,MAAM,YAAY;AAAA,EAC9B;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,CAAC,WACH,iBAAiB;AAAA,MACf,GAAG,cAAc;AAAA,MACjB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,EACJ;AAEA,WAAS,YAAY,MAAc;AACjC,UAAM,IAAI,IAAI,iCAAa,OAAO,OAAO,SAAS,aAAa;AAC/D,UAAMC,cAAa,MAAM;AAEzB,QAAI,QAAQ,IAAI,aAAa,iBAAiB;AAAO,OAAC,QAAQ,eAAe,gCAAgCA,WAAU,GAAG,QAAQ,IAAI,qBAAqB,+CAAe,MAAM,MAAM,MAAM,SAAS,OAAO,MAAM,4BAAW,gBAAgB,IAAI,YAAYA,eAAc,4BAAW,EAAE,SAAS,KAAK,IAAI,IAAI,MAAM,SAAS,4BAAW,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE,GAAG,QAAQ,SAAS,CAAC;AAEhX,UAAMC,WAAU,CAAC,MAAM,UAAU,OAAO,SAAQ,6BAAM,YAAW;AACjE,WAAO;AAAA,MAEL,YAAAD;AAAA,MACA,OAAO,EAAE,GAAG,EAAE,MAAM;AAAA,MACpB,cAAc;AAAA,MACd,SAAAC;AAAA,IACF;AAAA,EACF;AAEA,WAAS,cAAc;AACrB,QAAI,aAAa,kBAAkB,OAAO,OAAO,aAAa,GAAG;AAC/D,oBAAc,WAAW;AAAA,IAC3B;AAAA,EACF;AACF;",
|
|
6
|
+
"names": ["name", "isNewTheme", "mounted"]
|
|
7
7
|
}
|
|
@@ -16,25 +16,34 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var useThemeName_exports = {};
|
|
20
|
+
__export(useThemeName_exports, {
|
|
21
|
+
useThemeName: () => useThemeName
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
23
|
+
module.exports = __toCommonJS(useThemeName_exports);
|
|
24
24
|
var import_constants = require("@tamagui/constants");
|
|
25
25
|
var import_react = require("react");
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
var import_config = require("../config");
|
|
27
|
+
var import_ThemeManagerContext = require("../helpers/ThemeManagerContext");
|
|
28
|
+
function useThemeName(opts) {
|
|
29
|
+
if (import_constants.isRSC) {
|
|
30
|
+
const config = (0, import_config.getConfig)();
|
|
31
|
+
return config.themes[Object.keys(config.themes)[0]];
|
|
32
|
+
}
|
|
33
|
+
const manager = (0, import_react.useContext)(import_ThemeManagerContext.ThemeManagerContext);
|
|
34
|
+
const [name, setName] = (0, import_react.useState)((manager == null ? void 0 : manager.state.name) || "");
|
|
28
35
|
(0, import_constants.useIsomorphicLayoutEffect)(() => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
return manager == null ? void 0 : manager.onChangeTheme((next, manager2) => {
|
|
37
|
+
const name2 = (opts == null ? void 0 : opts.parent) ? manager2.state.parentName || next : next;
|
|
38
|
+
if (!name2)
|
|
39
|
+
return;
|
|
40
|
+
setName(name2);
|
|
41
|
+
});
|
|
42
|
+
}, [manager]);
|
|
43
|
+
return name;
|
|
35
44
|
}
|
|
36
45
|
// Annotate the CommonJS export names for ESM import in node:
|
|
37
46
|
0 && (module.exports = {
|
|
38
|
-
|
|
47
|
+
useThemeName
|
|
39
48
|
});
|
|
40
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=useThemeName.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useThemeName.tsx"],
|
|
4
|
+
"sourcesContent": ["import { isRSC, useIsomorphicLayoutEffect } from '@tamagui/constants'\nimport { useContext, useState } from 'react'\n\nimport { getConfig } from '../config'\nimport { ThemeManagerContext } from '../helpers/ThemeManagerContext'\nimport { ThemeName } from '../types'\n\nexport function useThemeName(opts?: { parent?: true }): ThemeName {\n if (isRSC) {\n const config = getConfig()\n return config.themes[Object.keys(config.themes)[0]] as any\n }\n const manager = useContext(ThemeManagerContext)\n const [name, setName] = useState(manager?.state.name || '')\n\n useIsomorphicLayoutEffect(() => {\n return manager?.onChangeTheme((next, manager) => {\n const name = opts?.parent ? manager.state.parentName || next : next\n if (!name) return\n setName(name)\n })\n }, [manager])\n\n return name\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAiD;AACjD,mBAAqC;AAErC,oBAA0B;AAC1B,iCAAoC;AAG7B,SAAS,aAAa,MAAqC;AAChE,MAAI,wBAAO;AACT,UAAM,aAAS,yBAAU;AACzB,WAAO,OAAO,OAAO,OAAO,KAAK,OAAO,MAAM,EAAE;AAAA,EAClD;AACA,QAAM,cAAU,yBAAW,8CAAmB;AAC9C,QAAM,CAAC,MAAM,OAAO,QAAI,wBAAS,mCAAS,MAAM,SAAQ,EAAE;AAE1D,kDAA0B,MAAM;AAC9B,WAAO,mCAAS,cAAc,CAAC,MAAMA,aAAY;AAC/C,YAAMC,SAAO,6BAAM,UAASD,SAAQ,MAAM,cAAc,OAAO;AAC/D,UAAI,CAACC;AAAM;AACX,cAAQA,KAAI;AAAA,IACd;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;",
|
|
6
|
+
"names": ["manager", "name"]
|
|
7
|
+
}
|
package/dist/cjs/index.js
CHANGED
|
@@ -22,7 +22,6 @@ __export(src_exports, {
|
|
|
22
22
|
addMediaQueryListener: () => import_useMedia.addMediaQueryListener,
|
|
23
23
|
configureMedia: () => import_useMedia.configureMedia,
|
|
24
24
|
getConfig: () => import_config.getConfig,
|
|
25
|
-
getHasConfigured: () => import_config.getHasConfigured,
|
|
26
25
|
getMedia: () => import_useMedia.getMedia,
|
|
27
26
|
getThemes: () => import_config.getThemes,
|
|
28
27
|
getTokens: () => import_config.getTokens,
|
|
@@ -67,20 +66,19 @@ __reExport(src_exports, require("./helpers/isTamaguiComponent"), module.exports)
|
|
|
67
66
|
__reExport(src_exports, require("./helpers/matchMedia"), module.exports);
|
|
68
67
|
__reExport(src_exports, require("./helpers/themeable"), module.exports);
|
|
69
68
|
__reExport(src_exports, require("./helpers/withStaticProperties"), module.exports);
|
|
70
|
-
__reExport(src_exports, require("./contexts/
|
|
69
|
+
__reExport(src_exports, require("./contexts/ButtonNestingContext"), module.exports);
|
|
71
70
|
__reExport(src_exports, require("./hooks/useId"), module.exports);
|
|
72
71
|
__reExport(src_exports, require("./hooks/useIsTouchDevice"), module.exports);
|
|
73
72
|
var import_useMedia = require("./hooks/useMedia");
|
|
74
73
|
__reExport(src_exports, require("./hooks/useTheme"), module.exports);
|
|
74
|
+
__reExport(src_exports, require("./hooks/useThemeName"), module.exports);
|
|
75
75
|
__reExport(src_exports, require("./hooks/useSafeRef"), module.exports);
|
|
76
76
|
__reExport(src_exports, require("./views/Slot"), module.exports);
|
|
77
77
|
__reExport(src_exports, require("./views/Stack"), module.exports);
|
|
78
78
|
__reExport(src_exports, require("./views/Text"), module.exports);
|
|
79
79
|
__reExport(src_exports, require("./contexts/TextAncestorContext"), module.exports);
|
|
80
80
|
__reExport(src_exports, require("./views/Theme"), module.exports);
|
|
81
|
-
__reExport(src_exports, require("./views/ThemeInverse"), module.exports);
|
|
82
81
|
__reExport(src_exports, require("./views/ThemeProvider"), module.exports);
|
|
83
|
-
__reExport(src_exports, require("./views/ThemeReset"), module.exports);
|
|
84
82
|
__reExport(src_exports, require("./views/FontLanguage"), module.exports);
|
|
85
83
|
__reExport(src_exports, require("./views/TamaguiProvider"), module.exports);
|
|
86
84
|
__reExport(src_exports, require("@tamagui/use-force-update"), module.exports);
|
|
@@ -94,7 +92,6 @@ __reExport(src_exports, require("@tamagui/constants"), module.exports);
|
|
|
94
92
|
addMediaQueryListener,
|
|
95
93
|
configureMedia,
|
|
96
94
|
getConfig,
|
|
97
|
-
getHasConfigured,
|
|
98
95
|
getMedia,
|
|
99
96
|
getThemes,
|
|
100
97
|
getTokens,
|