@tamagui/core 1.0.0-alpha.0
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/.ultra.cache.json +1 -0
- package/_/constants/constants.js +14 -0
- package/_/constants/constants.js.map +7 -0
- package/_/constants/platform.js +20 -0
- package/_/constants/platform.js.map +7 -0
- package/_/constants/pseudos.js +18 -0
- package/_/constants/pseudos.js.map +7 -0
- package/_/constants/rnw.js +22 -0
- package/_/constants/rnw.js.map +7 -0
- package/_/createComponent.js +427 -0
- package/_/createComponent.js.map +7 -0
- package/_/createShorthands.js +10 -0
- package/_/createShorthands.js.map +7 -0
- package/_/createTamagui.js +122 -0
- package/_/createTamagui.js.map +7 -0
- package/_/createTheme.js +20 -0
- package/_/createTheme.js.map +7 -0
- package/_/createTokens.js +29 -0
- package/_/createTokens.js.map +7 -0
- package/_/createVariable.js +22 -0
- package/_/createVariable.js.map +7 -0
- package/_/helpers/addStylesUsingClassname.js +32 -0
- package/_/helpers/addStylesUsingClassname.js.map +7 -0
- package/_/helpers/createMediaStyle.js +34 -0
- package/_/helpers/createMediaStyle.js.map +7 -0
- package/_/helpers/createTamaguiProvider.js +42 -0
- package/_/helpers/createTamaguiProvider.js.map +7 -0
- package/_/helpers/extendStaticConfig.js +176 -0
- package/_/helpers/extendStaticConfig.js.map +7 -0
- package/_/helpers/fixNativeShadow.js +8 -0
- package/_/helpers/fixNativeShadow.js.map +7 -0
- package/_/helpers/fixNativeShadow.native.js +30 -0
- package/_/helpers/fixNativeShadow.native.js.map +7 -0
- package/_/helpers/getSplitStyles.js +160 -0
- package/_/helpers/getSplitStyles.js.map +7 -0
- package/_/helpers/getStylesAtomic.js +84 -0
- package/_/helpers/getStylesAtomic.js.map +7 -0
- package/_/helpers/getStylesAtomic.native.js +10 -0
- package/_/helpers/getStylesAtomic.native.js.map +7 -0
- package/_/helpers/insertStyleRule.js +24 -0
- package/_/helpers/insertStyleRule.js.map +7 -0
- package/_/helpers/matchMedia.js +15 -0
- package/_/helpers/matchMedia.js.map +7 -0
- package/_/helpers/matchMedia.native.js +8 -0
- package/_/helpers/matchMedia.native.js.map +7 -0
- package/_/helpers/themeable.js +26 -0
- package/_/helpers/themeable.js.map +7 -0
- package/_/hooks/useConstant.js +15 -0
- package/_/hooks/useConstant.js.map +7 -0
- package/_/hooks/useFeatures.js +75 -0
- package/_/hooks/useFeatures.js.map +7 -0
- package/_/hooks/useForceUpdate.js +28 -0
- package/_/hooks/useForceUpdate.js.map +7 -0
- package/_/hooks/useMedia.js +173 -0
- package/_/hooks/useMedia.js.map +7 -0
- package/_/hooks/usePressable.js +14 -0
- package/_/hooks/usePressable.js.map +7 -0
- package/_/hooks/useTheme.js +94 -0
- package/_/hooks/useTheme.js.map +7 -0
- package/_/index.js +30 -0
- package/_/index.js.map +7 -0
- package/_/static/postProcessStyles.js +18 -0
- package/_/static/postProcessStyles.js.map +7 -0
- package/_/static.js +12 -0
- package/_/static.js.map +7 -0
- package/_/styled.js +21 -0
- package/_/styled.js.map +7 -0
- package/_/types.js +1 -0
- package/_/types.js.map +7 -0
- package/_/views/Animated.js +79 -0
- package/_/views/Animated.js.map +7 -0
- package/_/views/Stack.js +12 -0
- package/_/views/Stack.js.map +7 -0
- package/_/views/Text.js +60 -0
- package/_/views/Text.js.map +7 -0
- package/_/views/TextAncestorContext.js +19 -0
- package/_/views/TextAncestorContext.js.map +7 -0
- package/_/views/Theme.js +57 -0
- package/_/views/Theme.js.map +7 -0
- package/_/views/ThemeContext.js +6 -0
- package/_/views/ThemeContext.js.map +7 -0
- package/_/views/ThemeInverse.js +27 -0
- package/_/views/ThemeInverse.js.map +7 -0
- package/_/views/ThemeManagerContext.js +56 -0
- package/_/views/ThemeManagerContext.js.map +7 -0
- package/_/views/ThemeProvider.js +45 -0
- package/_/views/ThemeProvider.js.map +7 -0
- package/dist/constants/constants.js +14 -0
- package/dist/constants/constants.js.map +7 -0
- package/dist/constants/platform.js +19 -0
- package/dist/constants/platform.js.map +7 -0
- package/dist/constants/pseudos.js +18 -0
- package/dist/constants/pseudos.js.map +7 -0
- package/dist/constants/rnw.js +22 -0
- package/dist/constants/rnw.js.map +7 -0
- package/dist/constants/styleConstants.js +46 -0
- package/dist/constants/styleConstants.js.map +7 -0
- package/dist/createComponent.js +445 -0
- package/dist/createComponent.js.map +7 -0
- package/dist/createFont.js +24 -0
- package/dist/createFont.js.map +7 -0
- package/dist/createShorthands.js +10 -0
- package/dist/createShorthands.js.map +7 -0
- package/dist/createTamagui.js +159 -0
- package/dist/createTamagui.js.map +7 -0
- package/dist/createTheme.js +20 -0
- package/dist/createTheme.js.map +7 -0
- package/dist/createTokens.js +29 -0
- package/dist/createTokens.js.map +7 -0
- package/dist/createVariable.js +22 -0
- package/dist/createVariable.js.map +7 -0
- package/dist/helpers/addStylesUsingClassname.js +57 -0
- package/dist/helpers/addStylesUsingClassname.js.map +7 -0
- package/dist/helpers/createMediaStyle.js +34 -0
- package/dist/helpers/createMediaStyle.js.map +7 -0
- package/dist/helpers/createPropMapper.js +153 -0
- package/dist/helpers/createPropMapper.js.map +7 -0
- package/dist/helpers/createTamaguiProvider.js +25 -0
- package/dist/helpers/createTamaguiProvider.js.map +7 -0
- package/dist/helpers/extendStaticConfig.js +59 -0
- package/dist/helpers/extendStaticConfig.js.map +7 -0
- package/dist/helpers/fixNativeShadow.js +8 -0
- package/dist/helpers/fixNativeShadow.js.map +7 -0
- package/dist/helpers/fixNativeShadow.native.js +30 -0
- package/dist/helpers/fixNativeShadow.native.js.map +7 -0
- package/dist/helpers/getSplitStyles.js +160 -0
- package/dist/helpers/getSplitStyles.js.map +7 -0
- package/dist/helpers/getStylesAtomic.js +83 -0
- package/dist/helpers/getStylesAtomic.js.map +7 -0
- package/dist/helpers/getStylesAtomic.native.js +10 -0
- package/dist/helpers/getStylesAtomic.native.js.map +7 -0
- package/dist/helpers/insertStyleRule.js +24 -0
- package/dist/helpers/insertStyleRule.js.map +7 -0
- package/dist/helpers/isObj.js +7 -0
- package/dist/helpers/isObj.js.map +7 -0
- package/dist/helpers/matchMedia.js +15 -0
- package/dist/helpers/matchMedia.js.map +7 -0
- package/dist/helpers/matchMedia.native.js +8 -0
- package/dist/helpers/matchMedia.native.js.map +7 -0
- package/dist/helpers/pseudos.js +1 -0
- package/dist/helpers/pseudos.js.map +7 -0
- package/dist/helpers/themeable.js +26 -0
- package/dist/helpers/themeable.js.map +7 -0
- package/dist/hooks/useConstant.js +15 -0
- package/dist/hooks/useConstant.js.map +7 -0
- package/dist/hooks/useFeatures.js +75 -0
- package/dist/hooks/useFeatures.js.map +7 -0
- package/dist/hooks/useForceUpdate.js +28 -0
- package/dist/hooks/useForceUpdate.js.map +7 -0
- package/dist/hooks/useMedia.js +171 -0
- package/dist/hooks/useMedia.js.map +7 -0
- package/dist/hooks/usePressable.js +13 -0
- package/dist/hooks/usePressable.js.map +7 -0
- package/dist/hooks/useTheme.js +93 -0
- package/dist/hooks/useTheme.js.map +7 -0
- package/dist/index.cjs +2125 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +7 -0
- package/dist/packages/core/src/constants/constants.d.ts +8 -0
- package/dist/packages/core/src/constants/constants.d.ts.map +1 -0
- package/dist/packages/core/src/constants/platform.d.ts +9 -0
- package/dist/packages/core/src/constants/platform.d.ts.map +1 -0
- package/dist/packages/core/src/constants/pseudos.d.ts +15 -0
- package/dist/packages/core/src/constants/pseudos.d.ts.map +1 -0
- package/dist/packages/core/src/constants/rnw.d.ts +2 -0
- package/dist/packages/core/src/constants/rnw.d.ts.map +1 -0
- package/dist/packages/core/src/createComponent.d.ts +16 -0
- package/dist/packages/core/src/createComponent.d.ts.map +1 -0
- package/dist/packages/core/src/createShorthands.d.ts +2 -0
- package/dist/packages/core/src/createShorthands.d.ts.map +1 -0
- package/dist/packages/core/src/createTamagui.d.ts +37 -0
- package/dist/packages/core/src/createTamagui.d.ts.map +1 -0
- package/dist/packages/core/src/createTheme.d.ts +5 -0
- package/dist/packages/core/src/createTheme.d.ts.map +1 -0
- package/dist/packages/core/src/createTokens.d.ts +45 -0
- package/dist/packages/core/src/createTokens.d.ts.map +1 -0
- package/dist/packages/core/src/createVariable.d.ts +14 -0
- package/dist/packages/core/src/createVariable.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts +2 -0
- package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/createMediaStyle.d.ts +8 -0
- package/dist/packages/core/src/helpers/createMediaStyle.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts +5 -0
- package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/extendStaticConfig.d.ts +5 -0
- package/dist/packages/core/src/helpers/extendStaticConfig.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.d.ts +2 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts +2 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/getSplitStyles.d.ts +15 -0
- package/dist/packages/core/src/helpers/getSplitStyles.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.d.ts +3 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts +2 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/insertStyleRule.d.ts +2 -0
- package/dist/packages/core/src/helpers/insertStyleRule.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/matchMedia.d.ts +2 -0
- package/dist/packages/core/src/helpers/matchMedia.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/matchMedia.native.d.ts +3 -0
- package/dist/packages/core/src/helpers/matchMedia.native.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/themeable.d.ts +10 -0
- package/dist/packages/core/src/helpers/themeable.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useConstant.d.ts +2 -0
- package/dist/packages/core/src/hooks/useConstant.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useFeatures.d.ts +5 -0
- package/dist/packages/core/src/hooks/useFeatures.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useForceUpdate.d.ts +2 -0
- package/dist/packages/core/src/hooks/useForceUpdate.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useMedia.d.ts +16 -0
- package/dist/packages/core/src/hooks/useMedia.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/usePressable.d.ts +3 -0
- package/dist/packages/core/src/hooks/usePressable.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useTheme.d.ts +18 -0
- package/dist/packages/core/src/hooks/useTheme.d.ts.map +1 -0
- package/dist/packages/core/src/index.d.ts +27 -0
- package/dist/packages/core/src/index.d.ts.map +1 -0
- package/dist/packages/core/src/static/postProcessStyles.d.ts +7 -0
- package/dist/packages/core/src/static/postProcessStyles.d.ts.map +1 -0
- package/dist/packages/core/src/static.d.ts +12 -0
- package/dist/packages/core/src/static.d.ts.map +1 -0
- package/dist/packages/core/src/styled.d.ts +16 -0
- package/dist/packages/core/src/styled.d.ts.map +1 -0
- package/dist/packages/core/src/types.d.ts +305 -0
- package/dist/packages/core/src/types.d.ts.map +1 -0
- package/dist/packages/core/src/views/Animated.d.ts +15 -0
- package/dist/packages/core/src/views/Animated.d.ts.map +1 -0
- package/dist/packages/core/src/views/Stack.d.ts +3 -0
- package/dist/packages/core/src/views/Stack.d.ts.map +1 -0
- package/dist/packages/core/src/views/Text.d.ts +3 -0
- package/dist/packages/core/src/views/Text.d.ts.map +1 -0
- package/dist/packages/core/src/views/TextAncestorContext.d.ts +3 -0
- package/dist/packages/core/src/views/TextAncestorContext.d.ts.map +1 -0
- package/dist/packages/core/src/views/Theme.d.ts +8 -0
- package/dist/packages/core/src/views/Theme.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeContext.d.ts +18 -0
- package/dist/packages/core/src/views/ThemeContext.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeInverse.d.ts +10 -0
- package/dist/packages/core/src/views/ThemeInverse.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeManagerContext.d.ts +15 -0
- package/dist/packages/core/src/views/ThemeManagerContext.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeProvider.d.ts +10 -0
- package/dist/packages/core/src/views/ThemeProvider.d.ts.map +1 -0
- package/dist/packages/helpers/src/AllRules.d.ts +3 -0
- package/dist/packages/helpers/src/AllRules.d.ts.map +1 -0
- package/dist/packages/helpers/src/concatClassName.d.ts +2 -0
- package/dist/packages/helpers/src/concatClassName.d.ts.map +1 -0
- package/dist/packages/helpers/src/index.d.ts +5 -0
- package/dist/packages/helpers/src/index.d.ts.map +1 -0
- package/dist/packages/helpers/src/types.d.ts +8 -0
- package/dist/packages/helpers/src/types.d.ts.map +1 -0
- package/dist/packages/helpers/src/validStyleProps.d.ts +475 -0
- package/dist/packages/helpers/src/validStyleProps.d.ts.map +1 -0
- package/dist/static/postProcessStyles.js +18 -0
- package/dist/static/postProcessStyles.js.map +7 -0
- package/dist/static.js +15 -0
- package/dist/static.js.map +7 -0
- package/dist/styled.js +21 -0
- package/dist/styled.js.map +7 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +7 -0
- package/dist/views/Animated.js +79 -0
- package/dist/views/Animated.js.map +7 -0
- package/dist/views/SafeAreaProvider.js +30 -0
- package/dist/views/SafeAreaProvider.js.map +7 -0
- package/dist/views/Stack.js +12 -0
- package/dist/views/Stack.js.map +7 -0
- package/dist/views/Text.js +60 -0
- package/dist/views/Text.js.map +7 -0
- package/dist/views/TextAncestorContext.js +18 -0
- package/dist/views/TextAncestorContext.js.map +7 -0
- package/dist/views/Theme.js +56 -0
- package/dist/views/Theme.js.map +7 -0
- package/dist/views/ThemeContext.js +6 -0
- package/dist/views/ThemeContext.js.map +7 -0
- package/dist/views/ThemeInverse.js +27 -0
- package/dist/views/ThemeInverse.js.map +7 -0
- package/dist/views/ThemeManagerContext.js +55 -0
- package/dist/views/ThemeManagerContext.js.map +7 -0
- package/dist/views/ThemeProvider.js +45 -0
- package/dist/views/ThemeProvider.js.map +7 -0
- package/package.json +33 -0
- package/src/constants/constants.ts +12 -0
- package/src/constants/platform.ts +15 -0
- package/src/constants/pseudos.ts +14 -0
- package/src/constants/rnw.tsx +20 -0
- package/src/createComponent.tsx +596 -0
- package/src/createFont.ts +26 -0
- package/src/createShorthands.ts +5 -0
- package/src/createTamagui.ts +207 -0
- package/src/createTheme.ts +19 -0
- package/src/createTokens.ts +83 -0
- package/src/createVariable.ts +22 -0
- package/src/helpers/addStylesUsingClassname.tsx +60 -0
- package/src/helpers/createMediaStyle.ts +46 -0
- package/src/helpers/createPropMapper.ts +184 -0
- package/src/helpers/createTamaguiProvider.tsx +22 -0
- package/src/helpers/extendStaticConfig.ts +68 -0
- package/src/helpers/fixNativeShadow.native.tsx +27 -0
- package/src/helpers/fixNativeShadow.tsx +2 -0
- package/src/helpers/getSplitStyles.tsx +210 -0
- package/src/helpers/getStylesAtomic.native.ts +3 -0
- package/src/helpers/getStylesAtomic.ts +103 -0
- package/src/helpers/insertStyleRule.tsx +18 -0
- package/src/helpers/isObj.ts +1 -0
- package/src/helpers/matchMedia.native.ts +3 -0
- package/src/helpers/matchMedia.ts +9 -0
- package/src/helpers/themeable.tsx +42 -0
- package/src/hooks/useConstant.tsx +10 -0
- package/src/hooks/useFeatures.tsx +78 -0
- package/src/hooks/useForceUpdate.tsx +26 -0
- package/src/hooks/useMedia.tsx +194 -0
- package/src/hooks/usePressable.tsx +9 -0
- package/src/hooks/useTheme.tsx +107 -0
- package/src/index.ts +33 -0
- package/src/static/postProcessStyles.tsx +20 -0
- package/src/static.ts +22 -0
- package/src/styled.ts +82 -0
- package/src/types.tsx +561 -0
- package/src/views/Animated.tsx +121 -0
- package/src/views/SafeAreaProvider.tsx +33 -0
- package/src/views/Stack.tsx +21 -0
- package/src/views/Text.tsx +66 -0
- package/src/views/TextAncestorContext.tsx +12 -0
- package/src/views/Theme.tsx +73 -0
- package/src/views/ThemeContext.tsx +5 -0
- package/src/views/ThemeInverse.tsx +23 -0
- package/src/views/ThemeManagerContext.tsx +50 -0
- package/src/views/ThemeProvider.tsx +52 -0
- package/tsconfig.json +8 -0
- package/types.d.ts +558 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { isWeb, useIsomorphicLayoutEffect } from "../constants/platform";
|
|
5
|
+
import { addMediaQueryListener, removeMediaQueryListener } from "./useMedia";
|
|
6
|
+
const createDefinition = /* @__PURE__ */ __name(({ Component, propNames }) => ({
|
|
7
|
+
isEnabled: (props) => propNames.some((name) => !!props[name]),
|
|
8
|
+
Component
|
|
9
|
+
}), "createDefinition");
|
|
10
|
+
const mediaQueryPropNames = [
|
|
11
|
+
"$xs",
|
|
12
|
+
"$sm",
|
|
13
|
+
"$md",
|
|
14
|
+
"$lg",
|
|
15
|
+
"$xl",
|
|
16
|
+
"$xxl",
|
|
17
|
+
"$pointerCoarse",
|
|
18
|
+
"$hoverNone",
|
|
19
|
+
"$tall",
|
|
20
|
+
"$short",
|
|
21
|
+
"$gtSm",
|
|
22
|
+
"$notXs",
|
|
23
|
+
"$gtMd",
|
|
24
|
+
"$gtLg"
|
|
25
|
+
];
|
|
26
|
+
const featureDefinitions = {
|
|
27
|
+
measureLayout: createDefinition({
|
|
28
|
+
Component: (props) => {
|
|
29
|
+
console.log("measure", props);
|
|
30
|
+
return null;
|
|
31
|
+
},
|
|
32
|
+
propNames: ["onLayout"]
|
|
33
|
+
}),
|
|
34
|
+
mediaQuery: createDefinition({
|
|
35
|
+
Component: (props) => {
|
|
36
|
+
if (isWeb) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const keys = mediaQueryPropNames.flatMap((x) => x in props ? x.slice(1) : []);
|
|
40
|
+
useIsomorphicLayoutEffect(() => {
|
|
41
|
+
for (const key of keys) {
|
|
42
|
+
addMediaQueryListener(key, props._utils.forceUpdate);
|
|
43
|
+
}
|
|
44
|
+
return () => {
|
|
45
|
+
for (const key of keys) {
|
|
46
|
+
removeMediaQueryListener(key, props._utils.forceUpdate);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}, [keys.join(",")]);
|
|
50
|
+
return null;
|
|
51
|
+
},
|
|
52
|
+
propNames: mediaQueryPropNames
|
|
53
|
+
})
|
|
54
|
+
};
|
|
55
|
+
const featureNames = Object.keys(featureDefinitions);
|
|
56
|
+
const numFeatures = featureNames.length;
|
|
57
|
+
const useFeatures = /* @__PURE__ */ __name((props, utils) => {
|
|
58
|
+
const features = [];
|
|
59
|
+
for (let i = 0; i < numFeatures; i++) {
|
|
60
|
+
const name = featureNames[i];
|
|
61
|
+
const { isEnabled, Component } = featureDefinitions[name];
|
|
62
|
+
if (isEnabled(props) && Component) {
|
|
63
|
+
features.push(/* @__PURE__ */ React.createElement(Component, {
|
|
64
|
+
key: name,
|
|
65
|
+
...props,
|
|
66
|
+
_utils: utils
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return features;
|
|
71
|
+
}, "useFeatures");
|
|
72
|
+
export {
|
|
73
|
+
useFeatures
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=useFeatures.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/useFeatures.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react'\n\nimport { isWeb, useIsomorphicLayoutEffect } from '../constants/platform'\nimport { addMediaQueryListener, removeMediaQueryListener } from './useMedia'\n\n// only needed on native\n// dynamic loading of features to avoid heavy views\n\nconst createDefinition = ({ Component, propNames }: { Component; propNames: string[] }) => ({\n isEnabled: (props: any) => propNames.some((name) => !!props[name]),\n Component,\n})\n\nconst mediaQueryPropNames = [\n '$xs',\n '$sm',\n '$md',\n '$lg',\n '$xl',\n '$xxl',\n '$pointerCoarse',\n '$hoverNone',\n '$tall',\n '$short',\n '$gtSm',\n '$notXs',\n '$gtMd',\n '$gtLg',\n]\n\nconst featureDefinitions = {\n measureLayout: createDefinition({\n Component: (props) => {\n console.log('measure', props)\n return null\n },\n propNames: ['onLayout'],\n }),\n\n // will update the parent whenever media query changes\n mediaQuery: createDefinition({\n Component: (props) => {\n if (isWeb) {\n // no need for media queries are inserted and run in css\n return\n }\n\n const keys = mediaQueryPropNames.flatMap((x) => (x in props ? x.slice(1) : []))\n useIsomorphicLayoutEffect(() => {\n for (const key of keys) {\n addMediaQueryListener(key, props._utils.forceUpdate)\n }\n return () => {\n for (const key of keys) {\n removeMediaQueryListener(key, props._utils.forceUpdate)\n }\n }\n }, [keys.join(',')])\n return null\n },\n propNames: mediaQueryPropNames,\n }),\n}\n\nconst featureNames = Object.keys(featureDefinitions)\nconst numFeatures = featureNames.length\n\nexport const useFeatures = (props: any, utils?: { forceUpdate?: Function }) => {\n const features: JSX.Element[] = []\n for (let i = 0; i < numFeatures; i++) {\n const name = featureNames[i]\n const { isEnabled, Component } = featureDefinitions[name] as any //FeatureDefinition\n if (isEnabled(props) && Component) {\n features.push(<Component key={name} {...props} _utils={utils} />)\n }\n }\n return features\n}\n"],
|
|
5
|
+
"mappings": ";;AAAA;AAEA;AACA;AAKA,MAAM,mBAAmB,wBAAC,EAAE,WAAW,gBAAqD;AAAA,EAC1F,WAAW,CAAC,UAAe,UAAU,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM;AAAA,EAC5D;AAAA,IAFuB;AAKzB,MAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAGF,MAAM,qBAAqB;AAAA,EACzB,eAAe,iBAAiB;AAAA,IAC9B,WAAW,CAAC,UAAU;AACpB,cAAQ,IAAI,WAAW;AACvB,aAAO;AAAA;AAAA,IAET,WAAW,CAAC;AAAA;AAAA,EAId,YAAY,iBAAiB;AAAA,IAC3B,WAAW,CAAC,UAAU;AACpB,UAAI,OAAO;AAET;AAAA;AAGF,YAAM,OAAO,oBAAoB,QAAQ,CAAC,MAAO,KAAK,QAAQ,EAAE,MAAM,KAAK;AAC3E,gCAA0B,MAAM;AAC9B,mBAAW,OAAO,MAAM;AACtB,gCAAsB,KAAK,MAAM,OAAO;AAAA;AAE1C,eAAO,MAAM;AACX,qBAAW,OAAO,MAAM;AACtB,qCAAyB,KAAK,MAAM,OAAO;AAAA;AAAA;AAAA,SAG9C,CAAC,KAAK,KAAK;AACd,aAAO;AAAA;AAAA,IAET,WAAW;AAAA;AAAA;AAIf,MAAM,eAAe,OAAO,KAAK;AACjC,MAAM,cAAc,aAAa;AAE1B,MAAM,cAAc,wBAAC,OAAY,UAAuC;AAC7E,QAAM,WAA0B;AAChC,WAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,UAAM,OAAO,aAAa;AAC1B,UAAM,EAAE,WAAW,cAAc,mBAAmB;AACpD,QAAI,UAAU,UAAU,WAAW;AACjC,eAAS,KAAK,oCAAC,WAAD;AAAA,QAAW,KAAK;AAAA,WAAU;AAAA,QAAO,QAAQ;AAAA;AAAA;AAAA;AAG3D,SAAO;AAAA,GATkB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
function useForceUpdate() {
|
|
5
|
+
const setState = useState(0)[1];
|
|
6
|
+
const internal = useRef();
|
|
7
|
+
if (!internal.current) {
|
|
8
|
+
internal.current = {
|
|
9
|
+
isMounted: true,
|
|
10
|
+
update: () => {
|
|
11
|
+
if (internal.current.isMounted) {
|
|
12
|
+
setState(Math.random());
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
return () => {
|
|
19
|
+
internal.current.isMounted = false;
|
|
20
|
+
};
|
|
21
|
+
}, []);
|
|
22
|
+
return internal.current.update;
|
|
23
|
+
}
|
|
24
|
+
__name(useForceUpdate, "useForceUpdate");
|
|
25
|
+
export {
|
|
26
|
+
useForceUpdate
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=useForceUpdate.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/useForceUpdate.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useEffect, useRef, useState } from 'react'\n\n// ensures no updates after unmount\n\nexport function useForceUpdate() {\n const setState = useState(0)[1]\n const internal = useRef<{ update: Function; isMounted: boolean }>()\n if (!internal.current) {\n internal.current = {\n isMounted: true,\n update: () => {\n if (internal.current!.isMounted) {\n setState(Math.random())\n }\n },\n }\n }\n\n useEffect(() => {\n return () => {\n internal.current!.isMounted = false\n }\n }, [])\n\n return internal.current.update\n}\n"],
|
|
5
|
+
"mappings": ";;AAAA;AAIO,0BAA0B;AAC/B,QAAM,WAAW,SAAS,GAAG;AAC7B,QAAM,WAAW;AACjB,MAAI,CAAC,SAAS,SAAS;AACrB,aAAS,UAAU;AAAA,MACjB,WAAW;AAAA,MACX,QAAQ,MAAM;AACZ,YAAI,SAAS,QAAS,WAAW;AAC/B,mBAAS,KAAK;AAAA;AAAA;AAAA;AAAA;AAMtB,YAAU,MAAM;AACd,WAAO,MAAM;AACX,eAAS,QAAS,YAAY;AAAA;AAAA,KAE/B;AAEH,SAAO,SAAS,QAAQ;AAAA;AApBV;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import { useIsomorphicLayoutEffect } from "../constants/platform";
|
|
5
|
+
import { matchMedia } from "../helpers/matchMedia";
|
|
6
|
+
import { useConstant } from "./useConstant";
|
|
7
|
+
import { useForceUpdate } from "./useForceUpdate";
|
|
8
|
+
const mediaState = {};
|
|
9
|
+
const mediaQueryListeners = {};
|
|
10
|
+
const addMediaQueryListener = /* @__PURE__ */ __name((key, cb) => {
|
|
11
|
+
mediaQueryListeners[key] = mediaQueryListeners[key] || new Set();
|
|
12
|
+
mediaQueryListeners[key].add(cb);
|
|
13
|
+
}, "addMediaQueryListener");
|
|
14
|
+
const removeMediaQueryListener = /* @__PURE__ */ __name((key, cb) => {
|
|
15
|
+
mediaQueryListeners[key].delete(cb);
|
|
16
|
+
}, "removeMediaQueryListener");
|
|
17
|
+
let conf = null;
|
|
18
|
+
const mediaQueryConfig = new Proxy({}, {
|
|
19
|
+
get(target, key) {
|
|
20
|
+
if (!conf) {
|
|
21
|
+
throw new Error(`Be sure to run configureMedia before accessing mediaQueryConfig`);
|
|
22
|
+
}
|
|
23
|
+
return Reflect.get(conf, key);
|
|
24
|
+
},
|
|
25
|
+
ownKeys() {
|
|
26
|
+
if (!conf) {
|
|
27
|
+
throw new Error(`Be sure to run configureMedia before accessing mediaQueryConfig`);
|
|
28
|
+
}
|
|
29
|
+
return Object.keys(conf);
|
|
30
|
+
},
|
|
31
|
+
getOwnPropertyDescriptor() {
|
|
32
|
+
return {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
const getMedia = /* @__PURE__ */ __name(() => {
|
|
39
|
+
if (!conf) {
|
|
40
|
+
throw new Error(`not configured yet`);
|
|
41
|
+
}
|
|
42
|
+
return mediaState;
|
|
43
|
+
}, "getMedia");
|
|
44
|
+
const configureMedia = /* @__PURE__ */ __name(({
|
|
45
|
+
queries,
|
|
46
|
+
defaultActive = ["sm", "xs"]
|
|
47
|
+
} = {}) => {
|
|
48
|
+
if (conf) {
|
|
49
|
+
console.warn(`Already configured mediaQueries once (you may have called getMedia() before configureMedia())`);
|
|
50
|
+
}
|
|
51
|
+
if (queries) {
|
|
52
|
+
conf = queries;
|
|
53
|
+
}
|
|
54
|
+
for (const key in queries) {
|
|
55
|
+
const str = mediaObjectToString(queries[key]);
|
|
56
|
+
try {
|
|
57
|
+
const getMatch = /* @__PURE__ */ __name(() => matchMedia(str), "getMatch");
|
|
58
|
+
const match = getMatch();
|
|
59
|
+
if (!match || typeof match.addListener !== "function") {
|
|
60
|
+
throw new Error("\u26A0\uFE0F No match (seeing this in RN sometimes)");
|
|
61
|
+
}
|
|
62
|
+
mediaState[key] = !!match.matches;
|
|
63
|
+
match.addListener(() => {
|
|
64
|
+
const next = !!getMatch().matches;
|
|
65
|
+
if (next === mediaState[key])
|
|
66
|
+
return;
|
|
67
|
+
mediaState[key] = next;
|
|
68
|
+
const listeners = mediaQueryListeners[key];
|
|
69
|
+
if (listeners?.size) {
|
|
70
|
+
for (const cb of [...listeners]) {
|
|
71
|
+
cb();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
} catch (err) {
|
|
76
|
+
console.error("Error running media query", str, err.message, err.stack);
|
|
77
|
+
const isDefaultActive = defaultActive?.includes(key) ?? true;
|
|
78
|
+
mediaState[key] = isDefaultActive;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}, "configureMedia");
|
|
82
|
+
const useMedia = /* @__PURE__ */ __name(() => {
|
|
83
|
+
const forceUpdate = useForceUpdate();
|
|
84
|
+
const state = useRef();
|
|
85
|
+
if (!state.current) {
|
|
86
|
+
state.current = {
|
|
87
|
+
selections: {},
|
|
88
|
+
nextSelections: {},
|
|
89
|
+
isUnmounted: false,
|
|
90
|
+
isRendering: true
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
state.current.isRendering = true;
|
|
94
|
+
useIsomorphicLayoutEffect(() => {
|
|
95
|
+
const st = state.current;
|
|
96
|
+
st.isRendering = false;
|
|
97
|
+
for (const key in st.selections) {
|
|
98
|
+
if (!(key in st.nextSelections)) {
|
|
99
|
+
removeMediaQueryListener(key, forceUpdate);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
for (const key in st.nextSelections) {
|
|
103
|
+
if (!(key in st.selections)) {
|
|
104
|
+
addMediaQueryListener(key, forceUpdate);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
useIsomorphicLayoutEffect(() => {
|
|
109
|
+
return () => {
|
|
110
|
+
const st = state.current;
|
|
111
|
+
st.isUnmounted = true;
|
|
112
|
+
const allKeys = {
|
|
113
|
+
...st.selections,
|
|
114
|
+
...st.nextSelections
|
|
115
|
+
};
|
|
116
|
+
for (const key in allKeys) {
|
|
117
|
+
removeMediaQueryListener(key, forceUpdate);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}, []);
|
|
121
|
+
return useConstant(() => {
|
|
122
|
+
const st = state.current;
|
|
123
|
+
return new Proxy(mediaState, {
|
|
124
|
+
get(target, key) {
|
|
125
|
+
if (!(key in mediaState)) {
|
|
126
|
+
return Reflect.get(target, key);
|
|
127
|
+
}
|
|
128
|
+
if (!st.isUnmounted) {
|
|
129
|
+
if (st.isRendering) {
|
|
130
|
+
st.nextSelections[key] = true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (key in mediaState) {
|
|
134
|
+
return mediaState[key];
|
|
135
|
+
}
|
|
136
|
+
return Reflect.get(mediaState, key);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}, "useMedia");
|
|
141
|
+
function camelToHyphen(str) {
|
|
142
|
+
return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).toLowerCase();
|
|
143
|
+
}
|
|
144
|
+
__name(camelToHyphen, "camelToHyphen");
|
|
145
|
+
function mediaObjectToString(query) {
|
|
146
|
+
if (typeof query === "string") {
|
|
147
|
+
return query;
|
|
148
|
+
}
|
|
149
|
+
return Object.entries(query).map(([feature, value]) => {
|
|
150
|
+
feature = camelToHyphen(feature);
|
|
151
|
+
if (typeof value === "string") {
|
|
152
|
+
return `(${feature}: ${value})`;
|
|
153
|
+
}
|
|
154
|
+
if (typeof value === "number" && /[height|width]$/.test(feature)) {
|
|
155
|
+
value = `${value}px`;
|
|
156
|
+
}
|
|
157
|
+
return `(${feature}: ${value})`;
|
|
158
|
+
}).join(" and ");
|
|
159
|
+
}
|
|
160
|
+
__name(mediaObjectToString, "mediaObjectToString");
|
|
161
|
+
export {
|
|
162
|
+
addMediaQueryListener,
|
|
163
|
+
configureMedia,
|
|
164
|
+
getMedia,
|
|
165
|
+
mediaObjectToString,
|
|
166
|
+
mediaQueryConfig,
|
|
167
|
+
mediaState,
|
|
168
|
+
removeMediaQueryListener,
|
|
169
|
+
useMedia
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=useMedia.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/useMedia.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useRef } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../constants/platform'\nimport { matchMedia } from '../helpers/matchMedia'\nimport {\n ConfigureMediaQueryOptions,\n MediaQueries,\n MediaQueryObject,\n MediaQueryState,\n} from '../types'\nimport { useConstant } from './useConstant'\nimport { useForceUpdate } from './useForceUpdate'\n\nexport const mediaState: { [key in keyof MediaQueryState]: boolean } = {} as any\nconst mediaQueryListeners: { [key: string]: Set<Function> } = {}\n\nexport const addMediaQueryListener = (key: string, cb: any) => {\n mediaQueryListeners[key] = mediaQueryListeners[key] || new Set()\n mediaQueryListeners[key].add(cb)\n}\n\nexport const removeMediaQueryListener = (key: string, cb: any) => {\n mediaQueryListeners[key].delete(cb)\n}\n\nlet conf: MediaQueries | null = null\n\nexport const mediaQueryConfig = new Proxy<MediaQueries>({} as any, {\n get(target, key) {\n if (!conf) {\n throw new Error(`Be sure to run configureMedia before accessing mediaQueryConfig`)\n }\n return Reflect.get(conf, key)\n },\n ownKeys() {\n if (!conf) {\n throw new Error(`Be sure to run configureMedia before accessing mediaQueryConfig`)\n }\n return Object.keys(conf)\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true,\n }\n },\n})\n\nexport const getMedia = () => {\n if (!conf) {\n throw new Error(`not configured yet`)\n }\n return mediaState\n}\n\nexport const configureMedia = ({\n queries,\n defaultActive = ['sm', 'xs'],\n}: ConfigureMediaQueryOptions = {}) => {\n if (conf) {\n console.warn(\n `Already configured mediaQueries once (you may have called getMedia() before configureMedia())`\n )\n }\n\n if (queries) {\n conf = queries\n }\n\n // setup\n for (const key in queries) {\n const str = mediaObjectToString(queries[key])\n try {\n const getMatch = () => matchMedia(str)\n const match = getMatch()\n if (!match || typeof match.addListener !== 'function') {\n // caught below\n throw new Error('\u26A0\uFE0F No match (seeing this in RN sometimes)')\n }\n mediaState[key] = !!match.matches\n match.addListener(() => {\n const next = !!getMatch().matches\n if (next === mediaState[key]) return\n mediaState[key] = next\n const listeners = mediaQueryListeners[key]\n if (listeners?.size) {\n for (const cb of [...listeners]) {\n cb()\n }\n }\n })\n } catch (err: any) {\n console.error('Error running media query', str, err.message, err.stack)\n const isDefaultActive = defaultActive?.includes(key as any) ?? true\n mediaState[key] = isDefaultActive\n }\n }\n}\n\ntype UseMediaState = {\n selections: { [key: string]: boolean }\n nextSelections: { [key: string]: boolean }\n isRendering: boolean\n isUnmounted: boolean\n}\n\nexport const useMedia = () => {\n const forceUpdate = useForceUpdate()\n const state = useRef() as React.MutableRefObject<UseMediaState>\n if (!state.current) {\n state.current = {\n selections: {},\n nextSelections: {},\n isUnmounted: false,\n isRendering: true,\n }\n }\n state.current.isRendering = true\n\n // track usage\n useIsomorphicLayoutEffect(() => {\n const st = state.current\n st.isRendering = false\n // delete old\n for (const key in st.selections) {\n if (!(key in st.nextSelections)) {\n removeMediaQueryListener(key, forceUpdate)\n }\n }\n // add new\n for (const key in st.nextSelections) {\n if (!(key in st.selections)) {\n addMediaQueryListener(key, forceUpdate)\n }\n }\n })\n\n // unmount\n useIsomorphicLayoutEffect(() => {\n return () => {\n const st = state.current\n st.isUnmounted = true\n const allKeys = {\n ...st.selections,\n ...st.nextSelections,\n }\n for (const key in allKeys) {\n removeMediaQueryListener(key, forceUpdate)\n }\n }\n }, [])\n\n return useConstant(() => {\n const st = state.current\n return new Proxy(mediaState, {\n get(target, key: string) {\n if (!(key in mediaState)) {\n return Reflect.get(target, key)\n }\n if (!st.isUnmounted) {\n if (st.isRendering) {\n st.nextSelections[key] = true\n }\n }\n if (key in mediaState) {\n return mediaState[key]\n }\n return Reflect.get(mediaState, key)\n },\n })\n })\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
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { Pressable } from "react-native";
|
|
4
|
+
const getPressable = Pressable?.["type"]?.["render"];
|
|
5
|
+
const usePressable = /* @__PURE__ */ __name((props) => {
|
|
6
|
+
const out = getPressable(props);
|
|
7
|
+
const { children, style, ...pressableProps } = out.props;
|
|
8
|
+
return [pressableProps, style];
|
|
9
|
+
}, "usePressable");
|
|
10
|
+
export {
|
|
11
|
+
usePressable
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=usePressable.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/usePressable.tsx"],
|
|
4
|
+
"sourcesContent": ["import { Pressable, PressableProps } from 'react-native'\n\nconst getPressable = Pressable?.['type']?.['render']\n\nexport const usePressable = (props: PressableProps) => {\n const out = getPressable(props)\n const { children, style, ...pressableProps } = out.props\n return [pressableProps, style] as const\n}\n"],
|
|
5
|
+
"mappings": ";;AAAA;AAEA,MAAM,eAAe,YAAY,UAAU;AAEpC,MAAM,eAAe,wBAAC,UAA0B;AACrD,QAAM,MAAM,aAAa;AACzB,QAAM,EAAE,UAAU,UAAU,mBAAmB,IAAI;AACnD,SAAO,CAAC,gBAAgB;AAAA,GAHE;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
import { useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { useIsomorphicLayoutEffect } from "../constants/platform";
|
|
5
|
+
import { Variable } from "../createVariable";
|
|
6
|
+
import { ThemeContext } from "../views/ThemeContext";
|
|
7
|
+
import { ThemeManagerContext } from "../views/ThemeManagerContext";
|
|
8
|
+
import { GET_DEFAULT_THEME } from "../views/ThemeProvider";
|
|
9
|
+
import { useForceUpdate } from "./useForceUpdate";
|
|
10
|
+
const areEqualSets = /* @__PURE__ */ __name((a, b) => {
|
|
11
|
+
if (a.size !== b.size)
|
|
12
|
+
return false;
|
|
13
|
+
for (const val in a) {
|
|
14
|
+
if (!b.has(val)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}, "areEqualSets");
|
|
20
|
+
const useThemeName = /* @__PURE__ */ __name(() => {
|
|
21
|
+
const parent = useContext(ThemeManagerContext);
|
|
22
|
+
const [name, setName] = useState(parent.name);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
return parent.onChangeTheme((next) => {
|
|
25
|
+
setName((prev) => {
|
|
26
|
+
if (prev === next)
|
|
27
|
+
return prev;
|
|
28
|
+
return next;
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}, [parent]);
|
|
32
|
+
return name || "light";
|
|
33
|
+
}, "useThemeName");
|
|
34
|
+
const useDefaultThemeName = /* @__PURE__ */ __name(() => {
|
|
35
|
+
return useContext(ThemeContext)[GET_DEFAULT_THEME];
|
|
36
|
+
}, "useDefaultThemeName");
|
|
37
|
+
const useTheme = /* @__PURE__ */ __name(() => {
|
|
38
|
+
const forceUpdate = useForceUpdate();
|
|
39
|
+
const manager = useContext(ThemeManagerContext);
|
|
40
|
+
const themes = useContext(ThemeContext);
|
|
41
|
+
const state = useRef();
|
|
42
|
+
if (!state.current) {
|
|
43
|
+
state.current = {
|
|
44
|
+
uuid: {},
|
|
45
|
+
keys: new Set(),
|
|
46
|
+
isRendering: true
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
state.current.isRendering = true;
|
|
50
|
+
useIsomorphicLayoutEffect(() => {
|
|
51
|
+
const st = state.current;
|
|
52
|
+
st.isRendering = false;
|
|
53
|
+
const cur = manager.keys.get(st.uuid);
|
|
54
|
+
if (!cur || !areEqualSets(st.keys, cur)) {
|
|
55
|
+
manager.track(st.uuid, st.keys);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
return manager.onUpdate(state.current.uuid, forceUpdate);
|
|
60
|
+
}, []);
|
|
61
|
+
const theme = (manager.name ? themes[manager.name] : themes.light) ?? themes.light;
|
|
62
|
+
return useMemo(() => {
|
|
63
|
+
return new Proxy(theme, {
|
|
64
|
+
get(_, key) {
|
|
65
|
+
const name = manager.name;
|
|
66
|
+
if (!name) {
|
|
67
|
+
return Reflect.get(_, key);
|
|
68
|
+
}
|
|
69
|
+
let activeTheme = themes[name];
|
|
70
|
+
if (!activeTheme) {
|
|
71
|
+
console.error("No theme by name", name, "only:", themes, "keeping current theme");
|
|
72
|
+
activeTheme = theme;
|
|
73
|
+
}
|
|
74
|
+
const val = activeTheme[key];
|
|
75
|
+
if (process.env.NODE_ENV === "development") {
|
|
76
|
+
if (typeof val === "undefined") {
|
|
77
|
+
throw new Error(`No theme value "${String(key)}" in: ${Object.keys(activeTheme)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (state.current.isRendering) {
|
|
81
|
+
state.current.keys.add(key);
|
|
82
|
+
}
|
|
83
|
+
return new Variable({ val: val.val, name: key });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}, []);
|
|
87
|
+
}, "useTheme");
|
|
88
|
+
export {
|
|
89
|
+
useDefaultThemeName,
|
|
90
|
+
useTheme,
|
|
91
|
+
useThemeName
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=useTheme.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/hooks/useTheme.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../constants/platform'\nimport { Variable } from '../createVariable'\nimport { ThemeName } from '../types'\nimport { ThemeContext } from '../views/ThemeContext'\nimport { ThemeManagerContext } from '../views/ThemeManagerContext'\nimport { GET_DEFAULT_THEME } from '../views/ThemeProvider'\nimport { useForceUpdate } from './useForceUpdate'\n\ntype UseThemeState = {\n uuid: Object\n keys: Set<string>\n isRendering: boolean\n}\n\nconst areEqualSets = (a: Set<string>, b: Set<string>) => {\n if (a.size !== b.size) return false\n for (const val in a) {\n if (!b.has(val)) {\n return false\n }\n }\n return true\n}\n\nexport const useThemeName = () => {\n const parent = useContext(ThemeManagerContext)\n const [name, setName] = useState(parent.name)\n useEffect(() => {\n return parent.onChangeTheme((next) => {\n setName((prev) => {\n if (prev === next) return prev\n return next\n })\n })\n }, [parent])\n return name || 'light'\n}\n\nexport const useDefaultThemeName = () => {\n return useContext(ThemeContext)[GET_DEFAULT_THEME] as any as ThemeName\n}\n\nexport const useTheme = () => {\n const forceUpdate = useForceUpdate()\n const manager = useContext(ThemeManagerContext)\n const themes = useContext(ThemeContext)\n const state = useRef() as React.MutableRefObject<UseThemeState>\n if (!state.current) {\n state.current = {\n uuid: {},\n keys: new Set(),\n isRendering: true,\n }\n }\n state.current.isRendering = true\n\n // track usage\n useIsomorphicLayoutEffect(() => {\n const st = state.current\n st.isRendering = false\n const cur = manager.keys.get(st.uuid)\n if (!cur || !areEqualSets(st.keys, cur)) {\n manager.track(st.uuid, st.keys)\n }\n })\n\n useEffect(() => {\n return manager.onUpdate(state.current.uuid, forceUpdate)\n }, [])\n\n const theme = (manager.name ? themes[manager.name] : themes.light) ?? themes.light\n\n return useMemo(\n () => {\n return new Proxy(theme, {\n get(_, key: string) {\n const name = manager.name\n if (!name) {\n return Reflect.get(_, key)\n }\n let activeTheme = themes[name]\n if (!activeTheme) {\n console.error('No theme by name', name, 'only:', themes, 'keeping current theme')\n activeTheme = theme\n }\n const val = activeTheme[key]\n if (process.env.NODE_ENV === 'development') {\n if (typeof val === 'undefined') {\n throw new Error(`No theme value \"${String(key)}\" in: ${Object.keys(activeTheme)}`)\n }\n }\n if (state.current.isRendering) {\n state.current.keys.add(key)\n }\n // TODO costly, can make faster (we need name mapping to og name, but val pointing to new val)\n // console.log('returning new variable', val, key)\n return new Variable({ val: val.val, name: key })\n },\n })\n },\n [\n /* if concurrent mode wanted put manager.name here */\n ]\n )\n}\n"],
|
|
5
|
+
"mappings": ";;AAAA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAQA,MAAM,eAAe,wBAAC,GAAgB,MAAmB;AACvD,MAAI,EAAE,SAAS,EAAE;AAAM,WAAO;AAC9B,aAAW,OAAO,GAAG;AACnB,QAAI,CAAC,EAAE,IAAI,MAAM;AACf,aAAO;AAAA;AAAA;AAGX,SAAO;AAAA,GAPY;AAUd,MAAM,eAAe,6BAAM;AAChC,QAAM,SAAS,WAAW;AAC1B,QAAM,CAAC,MAAM,WAAW,SAAS,OAAO;AACxC,YAAU,MAAM;AACd,WAAO,OAAO,cAAc,CAAC,SAAS;AACpC,cAAQ,CAAC,SAAS;AAChB,YAAI,SAAS;AAAM,iBAAO;AAC1B,eAAO;AAAA;AAAA;AAAA,KAGV,CAAC;AACJ,SAAO,QAAQ;AAAA,GAXW;AAcrB,MAAM,sBAAsB,6BAAM;AACvC,SAAO,WAAW,cAAc;AAAA,GADC;AAI5B,MAAM,WAAW,6BAAM;AAC5B,QAAM,cAAc;AACpB,QAAM,UAAU,WAAW;AAC3B,QAAM,SAAS,WAAW;AAC1B,QAAM,QAAQ;AACd,MAAI,CAAC,MAAM,SAAS;AAClB,UAAM,UAAU;AAAA,MACd,MAAM;AAAA,MACN,MAAM,IAAI;AAAA,MACV,aAAa;AAAA;AAAA;AAGjB,QAAM,QAAQ,cAAc;AAG5B,4BAA0B,MAAM;AAC9B,UAAM,KAAK,MAAM;AACjB,OAAG,cAAc;AACjB,UAAM,MAAM,QAAQ,KAAK,IAAI,GAAG;AAChC,QAAI,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,MAAM;AACvC,cAAQ,MAAM,GAAG,MAAM,GAAG;AAAA;AAAA;AAI9B,YAAU,MAAM;AACd,WAAO,QAAQ,SAAS,MAAM,QAAQ,MAAM;AAAA,KAC3C;AAEH,QAAM,QAAS,SAAQ,OAAO,OAAO,QAAQ,QAAQ,OAAO,UAAU,OAAO;AAE7E,SAAO,QACL,MAAM;AACJ,WAAO,IAAI,MAAM,OAAO;AAAA,MACtB,IAAI,GAAG,KAAa;AAClB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,MAAM;AACT,iBAAO,QAAQ,IAAI,GAAG;AAAA;AAExB,YAAI,cAAc,OAAO;AACzB,YAAI,CAAC,aAAa;AAChB,kBAAQ,MAAM,oBAAoB,MAAM,SAAS,QAAQ;AACzD,wBAAc;AAAA;AAEhB,cAAM,MAAM,YAAY;AACxB,YAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAI,OAAO,QAAQ,aAAa;AAC9B,kBAAM,IAAI,MAAM,mBAAmB,OAAO,aAAa,OAAO,KAAK;AAAA;AAAA;AAGvE,YAAI,MAAM,QAAQ,aAAa;AAC7B,gBAAM,QAAQ,KAAK,IAAI;AAAA;AAIzB,eAAO,IAAI,SAAS,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA;AAAA;AAAA,KAIhD;AAAA,GA1DoB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|