@tamagui/stacks 1.2.9 → 1.2.11

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.
@@ -0,0 +1,32 @@
1
+ import { styled } from "@tamagui/core";
2
+ import { getButtonSized } from "@tamagui/get-button-sized";
3
+ import { YStack } from "./Stacks";
4
+ import {
5
+ bordered,
6
+ circular,
7
+ elevate,
8
+ focusTheme,
9
+ hoverTheme,
10
+ pressTheme
11
+ } from "./variants";
12
+ const SizableStack = styled(YStack, {
13
+ name: "SizableStack",
14
+ backgroundColor: "$background",
15
+ flexDirection: "row",
16
+ flexShrink: 1,
17
+ variants: {
18
+ hoverTheme,
19
+ pressTheme,
20
+ focusTheme,
21
+ circular,
22
+ elevate,
23
+ bordered,
24
+ size: {
25
+ "...size": getButtonSized
26
+ }
27
+ }
28
+ });
29
+ export {
30
+ SizableStack
31
+ };
32
+ //# sourceMappingURL=SizableStack.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/SizableStack.tsx"],
4
+ "sourcesContent": ["import { GetProps, styled } from '@tamagui/core'\nimport { getButtonSized } from '@tamagui/get-button-sized'\n\nimport { YStack } from './Stacks'\nimport {\n bordered,\n circular,\n elevate,\n focusTheme,\n hoverTheme,\n pressTheme,\n} from './variants'\n\nexport const SizableStack = styled(YStack, {\n name: 'SizableStack',\n backgroundColor: '$background',\n flexDirection: 'row',\n flexShrink: 1,\n\n variants: {\n hoverTheme,\n pressTheme,\n focusTheme,\n circular,\n elevate,\n bordered,\n\n size: {\n '...size': getButtonSized,\n },\n } as const,\n})\n\nexport type SizableStackProps = GetProps<typeof SizableStack>\n"],
5
+ "mappings": "AAAA,SAAmB,cAAc;AACjC,SAAS,sBAAsB;AAE/B,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,eAAe,OAAO,QAAQ;AAAA,EACzC,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,YAAY;AAAA,EAEZ,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,MAAM;AAAA,MACJ,WAAW;AAAA,IACb;AAAA,EACF;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,83 @@
1
+ import {
2
+ Stack,
3
+ getVariableValue,
4
+ isVariable,
5
+ styled
6
+ } from "@tamagui/core";
7
+ const getElevation = (size, extras) => {
8
+ if (!size)
9
+ return;
10
+ const { tokens } = extras;
11
+ const token = tokens.size[size];
12
+ const sizeNum = isVariable(token) ? +token.val : size;
13
+ return getSizedElevation(sizeNum, extras);
14
+ };
15
+ const fullscreenStyle = {
16
+ position: "absolute",
17
+ top: 0,
18
+ left: 0,
19
+ right: 0,
20
+ bottom: 0
21
+ };
22
+ const variants = {
23
+ fullscreen: {
24
+ true: fullscreenStyle
25
+ },
26
+ elevation: {
27
+ "...size": getElevation
28
+ }
29
+ };
30
+ const YStack = styled(Stack, {
31
+ flexDirection: "column",
32
+ name: "YStack",
33
+ variants
34
+ });
35
+ const XStack = styled(Stack, {
36
+ flexDirection: "row",
37
+ name: "XStack",
38
+ variants
39
+ });
40
+ const ZStack = styled(
41
+ YStack,
42
+ {
43
+ name: "ZStack",
44
+ position: "relative"
45
+ },
46
+ {
47
+ neverFlatten: true,
48
+ isZStack: true
49
+ }
50
+ );
51
+ const getSizedElevation = (val, { theme, tokens }) => {
52
+ let num = 0;
53
+ if (val === true) {
54
+ const val2 = getVariableValue(tokens.size["true"]);
55
+ if (typeof val2 === "number") {
56
+ num = val2;
57
+ } else {
58
+ num = 10;
59
+ }
60
+ } else {
61
+ num = +val;
62
+ }
63
+ if (process.env.NODE_ENV === "development") {
64
+ if (num !== null && isNaN(num)) {
65
+ console.warn("NaN shadow", num, val);
66
+ }
67
+ }
68
+ const [height, shadowRadius] = [Math.round(num / 4 + 1), Math.round(num / 2 + 2)];
69
+ const shadow = {
70
+ shadowColor: theme.shadowColor,
71
+ shadowRadius,
72
+ shadowOffset: { height, width: 0 }
73
+ };
74
+ return shadow;
75
+ };
76
+ export {
77
+ XStack,
78
+ YStack,
79
+ ZStack,
80
+ getElevation,
81
+ getSizedElevation
82
+ };
83
+ //# sourceMappingURL=Stacks.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Stacks.tsx"],
4
+ "sourcesContent": ["import {\n GetProps,\n SizeTokens,\n SizeVariantSpreadFunction,\n Stack,\n StackProps,\n VariantSpreadExtras,\n getVariableValue,\n isVariable,\n styled,\n} from '@tamagui/core'\n\nexport type YStackProps = GetProps<typeof YStack>\nexport type XStackProps = YStackProps\nexport type ZStackProps = YStackProps\n\nexport const getElevation: SizeVariantSpreadFunction<StackProps> = (size, extras) => {\n if (!size) return\n const { tokens } = extras\n const token = tokens.size[size]\n const sizeNum = (isVariable(token) ? +token.val : size) as number\n return getSizedElevation(sizeNum, extras)\n}\n\nconst fullscreenStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n} as const\n\nconst variants = {\n fullscreen: {\n true: fullscreenStyle,\n },\n elevation: {\n '...size': getElevation,\n },\n} as const\n\nexport const YStack = styled(Stack, {\n flexDirection: 'column',\n name: 'YStack',\n variants,\n})\n\nexport const XStack = styled(Stack, {\n flexDirection: 'row',\n name: 'XStack',\n variants,\n})\n\nexport const ZStack = styled(\n YStack,\n {\n name: 'ZStack',\n position: 'relative',\n },\n {\n neverFlatten: true,\n isZStack: true,\n }\n)\n\nexport const getSizedElevation = (\n val: SizeTokens | number | boolean,\n { theme, tokens }: VariantSpreadExtras<any>\n) => {\n let num = 0\n if (val === true) {\n const val = getVariableValue(tokens.size['true'])\n if (typeof val === 'number') {\n num = val\n } else {\n num = 10\n }\n } else {\n num = +val\n }\n if (process.env.NODE_ENV === 'development') {\n if (num !== null && isNaN(num)) {\n // eslint-disable-next-line no-console\n console.warn('NaN shadow', num, val)\n }\n }\n const [height, shadowRadius] = [Math.round(num / 4 + 1), Math.round(num / 2 + 2)]\n const shadow = {\n shadowColor: theme.shadowColor,\n shadowRadius,\n shadowOffset: { height, width: 0 },\n }\n return shadow\n}\n"],
5
+ "mappings": "AAAA;AAAA,EAIE;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,MAAM,eAAsD,CAAC,MAAM,WAAW;AACnF,MAAI,CAAC;AAAM;AACX,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,QAAM,UAAW,WAAW,KAAK,IAAI,CAAC,MAAM,MAAM;AAClD,SAAO,kBAAkB,SAAS,MAAM;AAC1C;AAEA,MAAM,kBAAkB;AAAA,EACtB,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV;AAEA,MAAM,WAAW;AAAA,EACf,YAAY;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,EACb;AACF;AAEO,MAAM,SAAS,OAAO,OAAO;AAAA,EAClC,eAAe;AAAA,EACf,MAAM;AAAA,EACN;AACF,CAAC;AAEM,MAAM,SAAS,OAAO,OAAO;AAAA,EAClC,eAAe;AAAA,EACf,MAAM;AAAA,EACN;AACF,CAAC;AAEM,MAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AACF;AAEO,MAAM,oBAAoB,CAC/B,KACA,EAAE,OAAO,OAAO,MACb;AACH,MAAI,MAAM;AACV,MAAI,QAAQ,MAAM;AAChB,UAAMA,OAAM,iBAAiB,OAAO,KAAK,MAAM,CAAC;AAChD,QAAI,OAAOA,SAAQ,UAAU;AAC3B,YAAMA;AAAA,IACR,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF,OAAO;AACL,UAAM,CAAC;AAAA,EACT;AACA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,QAAQ,QAAQ,MAAM,GAAG,GAAG;AAE9B,cAAQ,KAAK,cAAc,KAAK,GAAG;AAAA,IACrC;AAAA,EACF;AACA,QAAM,CAAC,QAAQ,YAAY,IAAI,CAAC,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC;AAChF,QAAM,SAAS;AAAA,IACb,aAAa,MAAM;AAAA,IACnB;AAAA,IACA,cAAc,EAAE,QAAQ,OAAO,EAAE;AAAA,EACnC;AACA,SAAO;AACT;",
6
+ "names": ["val"]
7
+ }
@@ -0,0 +1,53 @@
1
+ import { styled } from "@tamagui/core";
2
+ import { YStack } from "./Stacks";
3
+ import {
4
+ bordered,
5
+ circular,
6
+ elevate,
7
+ focusTheme,
8
+ hoverTheme,
9
+ padded,
10
+ pressTheme,
11
+ radiused
12
+ } from "./variants";
13
+ const chromelessStyle = {
14
+ backgroundColor: "transparent",
15
+ borderColor: "transparent",
16
+ shadowColor: "transparent"
17
+ };
18
+ const ThemeableStack = styled(YStack, {
19
+ name: "SizableStack",
20
+ variants: {
21
+ backgrounded: {
22
+ true: {
23
+ backgroundColor: "$background"
24
+ }
25
+ },
26
+ radiused,
27
+ hoverTheme,
28
+ pressTheme,
29
+ focusTheme,
30
+ circular,
31
+ padded,
32
+ elevate,
33
+ bordered,
34
+ transparent: {
35
+ true: {
36
+ backgroundColor: "transparent"
37
+ }
38
+ },
39
+ chromeless: {
40
+ true: chromelessStyle,
41
+ all: {
42
+ ...chromelessStyle,
43
+ hoverStyle: chromelessStyle,
44
+ pressStyle: chromelessStyle,
45
+ focusStyle: chromelessStyle
46
+ }
47
+ }
48
+ }
49
+ });
50
+ export {
51
+ ThemeableStack
52
+ };
53
+ //# sourceMappingURL=ThemeableStack.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ThemeableStack.tsx"],
4
+ "sourcesContent": ["import { GetProps, styled } from '@tamagui/core'\n\nimport { YStack } from './Stacks'\nimport {\n bordered,\n circular,\n elevate,\n focusTheme,\n hoverTheme,\n padded,\n pressTheme,\n radiused,\n} from './variants'\n\nconst chromelessStyle = {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n shadowColor: 'transparent',\n}\n\nexport const ThemeableStack = styled(YStack, {\n name: 'SizableStack',\n\n variants: {\n backgrounded: {\n true: {\n backgroundColor: '$background',\n },\n },\n\n radiused,\n hoverTheme,\n pressTheme,\n focusTheme,\n circular,\n padded,\n elevate,\n bordered,\n\n transparent: {\n true: {\n backgroundColor: 'transparent',\n },\n },\n\n chromeless: {\n true: chromelessStyle,\n all: {\n ...chromelessStyle,\n hoverStyle: chromelessStyle,\n pressStyle: chromelessStyle,\n focusStyle: chromelessStyle,\n },\n },\n } as const,\n})\n\nexport type ThemeableStackProps = GetProps<typeof ThemeableStack>\n"],
5
+ "mappings": "AAAA,SAAmB,cAAc;AAEjC,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,kBAAkB;AAAA,EACtB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,aAAa;AACf;AAEO,MAAM,iBAAiB,OAAO,QAAQ;AAAA,EAC3C,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,MAAM;AAAA,QACJ,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,QACJ,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,KAAK;AAAA,QACH,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./Stacks";
2
+ export * from "./SizableStack";
3
+ export * from "./ThemeableStack";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["export * from './Stacks'\nexport * from './SizableStack'\nexport * from './ThemeableStack'\n"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,97 @@
1
+ import { getElevation } from "./Stacks";
2
+ const elevate = {
3
+ true: (_, extras) => {
4
+ return getElevation(extras.props["size"], extras);
5
+ }
6
+ };
7
+ const bordered = (val, { props }) => {
8
+ return {
9
+ // TODO size it with size in '...size'
10
+ borderWidth: typeof val === "number" ? val : 1,
11
+ borderColor: "$borderColor",
12
+ ...props.hoverTheme && {
13
+ hoverStyle: {
14
+ borderColor: "$borderColorHover"
15
+ }
16
+ },
17
+ ...props.pressTheme && {
18
+ pressStyle: {
19
+ borderColor: "$borderColorPress"
20
+ }
21
+ },
22
+ ...props.focusTheme && {
23
+ focusStyle: {
24
+ borderColor: "$borderColorFocus"
25
+ }
26
+ }
27
+ };
28
+ };
29
+ const padded = {
30
+ true: (_, extras) => {
31
+ const { tokens, props } = extras;
32
+ return {
33
+ padding: tokens.space[props.size] || tokens.space["$true"]
34
+ };
35
+ }
36
+ };
37
+ const radiused = {
38
+ true: (_, extras) => {
39
+ const { tokens, props } = extras;
40
+ return {
41
+ borderRadius: tokens.radius[props.size] || tokens.radius["$true"]
42
+ };
43
+ }
44
+ };
45
+ const circular = {
46
+ true: (_, { props, tokens }) => {
47
+ const size = tokens.size[props.size];
48
+ return {
49
+ width: size,
50
+ height: size,
51
+ maxWidth: size,
52
+ maxHeight: size,
53
+ minWidth: size,
54
+ minHeight: size,
55
+ borderRadius: 1e5,
56
+ padding: 0
57
+ };
58
+ }
59
+ };
60
+ const hoverTheme = {
61
+ true: {
62
+ hoverStyle: {
63
+ backgroundColor: "$backgroundHover",
64
+ borderColor: "$borderColorHover"
65
+ }
66
+ },
67
+ false: {}
68
+ };
69
+ const pressTheme = {
70
+ true: {
71
+ pressStyle: {
72
+ backgroundColor: "$backgroundPress",
73
+ borderColor: "$borderColorPress"
74
+ }
75
+ },
76
+ false: {}
77
+ };
78
+ const focusTheme = {
79
+ true: {
80
+ focusStyle: {
81
+ backgroundColor: "$backgroundFocus",
82
+ borderColor: "$borderColorFocus"
83
+ }
84
+ },
85
+ false: {}
86
+ };
87
+ export {
88
+ bordered,
89
+ circular,
90
+ elevate,
91
+ focusTheme,
92
+ hoverTheme,
93
+ padded,
94
+ pressTheme,
95
+ radiused
96
+ };
97
+ //# sourceMappingURL=variants.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/variants.tsx"],
4
+ "sourcesContent": ["import { getElevation } from './Stacks'\n\nexport const elevate = {\n true: (_: boolean, extras: any) => {\n return getElevation(extras.props['size'], extras)\n },\n}\n\nexport const bordered = (val: boolean | number, { props }) => {\n return {\n // TODO size it with size in '...size'\n borderWidth: typeof val === 'number' ? val : 1,\n borderColor: '$borderColor',\n\n ...(props.hoverTheme && {\n hoverStyle: {\n borderColor: '$borderColorHover',\n },\n }),\n\n ...(props.pressTheme && {\n pressStyle: {\n borderColor: '$borderColorPress',\n },\n }),\n\n ...(props.focusTheme && {\n focusStyle: {\n borderColor: '$borderColorFocus',\n },\n }),\n }\n}\n\nexport const padded = {\n true: (_, extras) => {\n const { tokens, props } = extras\n return {\n padding: tokens.space[props.size] || tokens.space['$true'],\n }\n },\n}\n\nexport const radiused = {\n true: (_, extras) => {\n const { tokens, props } = extras\n return {\n borderRadius: tokens.radius[props.size] || tokens.radius['$true'],\n }\n },\n}\n\nexport const circular = {\n true: (_, { props, tokens }) => {\n const size = tokens.size[props.size]\n return {\n width: size,\n height: size,\n maxWidth: size,\n maxHeight: size,\n minWidth: size,\n minHeight: size,\n borderRadius: 100_000,\n padding: 0,\n }\n },\n}\n\nexport const hoverTheme = {\n true: {\n hoverStyle: {\n backgroundColor: '$backgroundHover',\n borderColor: '$borderColorHover',\n },\n },\n false: {},\n}\n\nexport const pressTheme = {\n true: {\n pressStyle: {\n backgroundColor: '$backgroundPress',\n borderColor: '$borderColorPress',\n },\n },\n false: {},\n}\n\nexport const focusTheme = {\n true: {\n focusStyle: {\n backgroundColor: '$backgroundFocus',\n borderColor: '$borderColorFocus',\n },\n },\n false: {},\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAEtB,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,GAAY,WAAgB;AACjC,WAAO,aAAa,OAAO,MAAM,MAAM,GAAG,MAAM;AAAA,EAClD;AACF;AAEO,MAAM,WAAW,CAAC,KAAuB,EAAE,MAAM,MAAM;AAC5D,SAAO;AAAA;AAAA,IAEL,aAAa,OAAO,QAAQ,WAAW,MAAM;AAAA,IAC7C,aAAa;AAAA,IAEb,GAAI,MAAM,cAAc;AAAA,MACtB,YAAY;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IAEA,GAAI,MAAM,cAAc;AAAA,MACtB,YAAY;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IAEA,GAAI,MAAM,cAAc;AAAA,MACtB,YAAY;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,SAAS;AAAA,EACpB,MAAM,CAAC,GAAG,WAAW;AACnB,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,WAAO;AAAA,MACL,SAAS,OAAO,MAAM,MAAM,IAAI,KAAK,OAAO,MAAM,OAAO;AAAA,IAC3D;AAAA,EACF;AACF;AAEO,MAAM,WAAW;AAAA,EACtB,MAAM,CAAC,GAAG,WAAW;AACnB,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,WAAO;AAAA,MACL,cAAc,OAAO,OAAO,MAAM,IAAI,KAAK,OAAO,OAAO,OAAO;AAAA,IAClE;AAAA,EACF;AACF;AAEO,MAAM,WAAW;AAAA,EACtB,MAAM,CAAC,GAAG,EAAE,OAAO,OAAO,MAAM;AAC9B,UAAM,OAAO,OAAO,KAAK,MAAM,IAAI;AACnC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AACV;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AACV;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AACV;",
6
+ "names": []
7
+ }
@@ -0,0 +1,32 @@
1
+ import { styled } from "@tamagui/core";
2
+ import { getButtonSized } from "@tamagui/get-button-sized";
3
+ import { YStack } from "./Stacks";
4
+ import {
5
+ bordered,
6
+ circular,
7
+ elevate,
8
+ focusTheme,
9
+ hoverTheme,
10
+ pressTheme
11
+ } from "./variants";
12
+ const SizableStack = styled(YStack, {
13
+ name: "SizableStack",
14
+ backgroundColor: "$background",
15
+ flexDirection: "row",
16
+ flexShrink: 1,
17
+ variants: {
18
+ hoverTheme,
19
+ pressTheme,
20
+ focusTheme,
21
+ circular,
22
+ elevate,
23
+ bordered,
24
+ size: {
25
+ "...size": getButtonSized
26
+ }
27
+ }
28
+ });
29
+ export {
30
+ SizableStack
31
+ };
32
+ //# sourceMappingURL=SizableStack.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/SizableStack.tsx"],
4
+ "sourcesContent": ["import { GetProps, styled } from '@tamagui/core'\nimport { getButtonSized } from '@tamagui/get-button-sized'\n\nimport { YStack } from './Stacks'\nimport {\n bordered,\n circular,\n elevate,\n focusTheme,\n hoverTheme,\n pressTheme,\n} from './variants'\n\nexport const SizableStack = styled(YStack, {\n name: 'SizableStack',\n backgroundColor: '$background',\n flexDirection: 'row',\n flexShrink: 1,\n\n variants: {\n hoverTheme,\n pressTheme,\n focusTheme,\n circular,\n elevate,\n bordered,\n\n size: {\n '...size': getButtonSized,\n },\n } as const,\n})\n\nexport type SizableStackProps = GetProps<typeof SizableStack>\n"],
5
+ "mappings": "AAAA,SAAmB,cAAc;AACjC,SAAS,sBAAsB;AAE/B,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,eAAe,OAAO,QAAQ;AAAA,EACzC,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,YAAY;AAAA,EAEZ,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,MAAM;AAAA,MACJ,WAAW;AAAA,IACb;AAAA,EACF;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,83 @@
1
+ import {
2
+ Stack,
3
+ getVariableValue,
4
+ isVariable,
5
+ styled
6
+ } from "@tamagui/core";
7
+ const getElevation = (size, extras) => {
8
+ if (!size)
9
+ return;
10
+ const { tokens } = extras;
11
+ const token = tokens.size[size];
12
+ const sizeNum = isVariable(token) ? +token.val : size;
13
+ return getSizedElevation(sizeNum, extras);
14
+ };
15
+ const fullscreenStyle = {
16
+ position: "absolute",
17
+ top: 0,
18
+ left: 0,
19
+ right: 0,
20
+ bottom: 0
21
+ };
22
+ const variants = {
23
+ fullscreen: {
24
+ true: fullscreenStyle
25
+ },
26
+ elevation: {
27
+ "...size": getElevation
28
+ }
29
+ };
30
+ const YStack = styled(Stack, {
31
+ flexDirection: "column",
32
+ name: "YStack",
33
+ variants
34
+ });
35
+ const XStack = styled(Stack, {
36
+ flexDirection: "row",
37
+ name: "XStack",
38
+ variants
39
+ });
40
+ const ZStack = styled(
41
+ YStack,
42
+ {
43
+ name: "ZStack",
44
+ position: "relative"
45
+ },
46
+ {
47
+ neverFlatten: true,
48
+ isZStack: true
49
+ }
50
+ );
51
+ const getSizedElevation = (val, { theme, tokens }) => {
52
+ let num = 0;
53
+ if (val === true) {
54
+ const val2 = getVariableValue(tokens.size["true"]);
55
+ if (typeof val2 === "number") {
56
+ num = val2;
57
+ } else {
58
+ num = 10;
59
+ }
60
+ } else {
61
+ num = +val;
62
+ }
63
+ if (process.env.NODE_ENV === "development") {
64
+ if (num !== null && isNaN(num)) {
65
+ console.warn("NaN shadow", num, val);
66
+ }
67
+ }
68
+ const [height, shadowRadius] = [Math.round(num / 4 + 1), Math.round(num / 2 + 2)];
69
+ const shadow = {
70
+ shadowColor: theme.shadowColor,
71
+ shadowRadius,
72
+ shadowOffset: { height, width: 0 }
73
+ };
74
+ return shadow;
75
+ };
76
+ export {
77
+ XStack,
78
+ YStack,
79
+ ZStack,
80
+ getElevation,
81
+ getSizedElevation
82
+ };
83
+ //# sourceMappingURL=Stacks.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Stacks.tsx"],
4
+ "sourcesContent": ["import {\n GetProps,\n SizeTokens,\n SizeVariantSpreadFunction,\n Stack,\n StackProps,\n VariantSpreadExtras,\n getVariableValue,\n isVariable,\n styled,\n} from '@tamagui/core'\n\nexport type YStackProps = GetProps<typeof YStack>\nexport type XStackProps = YStackProps\nexport type ZStackProps = YStackProps\n\nexport const getElevation: SizeVariantSpreadFunction<StackProps> = (size, extras) => {\n if (!size) return\n const { tokens } = extras\n const token = tokens.size[size]\n const sizeNum = (isVariable(token) ? +token.val : size) as number\n return getSizedElevation(sizeNum, extras)\n}\n\nconst fullscreenStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n} as const\n\nconst variants = {\n fullscreen: {\n true: fullscreenStyle,\n },\n elevation: {\n '...size': getElevation,\n },\n} as const\n\nexport const YStack = styled(Stack, {\n flexDirection: 'column',\n name: 'YStack',\n variants,\n})\n\nexport const XStack = styled(Stack, {\n flexDirection: 'row',\n name: 'XStack',\n variants,\n})\n\nexport const ZStack = styled(\n YStack,\n {\n name: 'ZStack',\n position: 'relative',\n },\n {\n neverFlatten: true,\n isZStack: true,\n }\n)\n\nexport const getSizedElevation = (\n val: SizeTokens | number | boolean,\n { theme, tokens }: VariantSpreadExtras<any>\n) => {\n let num = 0\n if (val === true) {\n const val = getVariableValue(tokens.size['true'])\n if (typeof val === 'number') {\n num = val\n } else {\n num = 10\n }\n } else {\n num = +val\n }\n if (process.env.NODE_ENV === 'development') {\n if (num !== null && isNaN(num)) {\n // eslint-disable-next-line no-console\n console.warn('NaN shadow', num, val)\n }\n }\n const [height, shadowRadius] = [Math.round(num / 4 + 1), Math.round(num / 2 + 2)]\n const shadow = {\n shadowColor: theme.shadowColor,\n shadowRadius,\n shadowOffset: { height, width: 0 },\n }\n return shadow\n}\n"],
5
+ "mappings": "AAAA;AAAA,EAIE;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,MAAM,eAAsD,CAAC,MAAM,WAAW;AACnF,MAAI,CAAC;AAAM;AACX,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,QAAM,UAAW,WAAW,KAAK,IAAI,CAAC,MAAM,MAAM;AAClD,SAAO,kBAAkB,SAAS,MAAM;AAC1C;AAEA,MAAM,kBAAkB;AAAA,EACtB,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV;AAEA,MAAM,WAAW;AAAA,EACf,YAAY;AAAA,IACV,MAAM;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,EACb;AACF;AAEO,MAAM,SAAS,OAAO,OAAO;AAAA,EAClC,eAAe;AAAA,EACf,MAAM;AAAA,EACN;AACF,CAAC;AAEM,MAAM,SAAS,OAAO,OAAO;AAAA,EAClC,eAAe;AAAA,EACf,MAAM;AAAA,EACN;AACF,CAAC;AAEM,MAAM,SAAS;AAAA,EACpB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AACF;AAEO,MAAM,oBAAoB,CAC/B,KACA,EAAE,OAAO,OAAO,MACb;AACH,MAAI,MAAM;AACV,MAAI,QAAQ,MAAM;AAChB,UAAMA,OAAM,iBAAiB,OAAO,KAAK,MAAM,CAAC;AAChD,QAAI,OAAOA,SAAQ,UAAU;AAC3B,YAAMA;AAAA,IACR,OAAO;AACL,YAAM;AAAA,IACR;AAAA,EACF,OAAO;AACL,UAAM,CAAC;AAAA,EACT;AACA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,QAAI,QAAQ,QAAQ,MAAM,GAAG,GAAG;AAE9B,cAAQ,KAAK,cAAc,KAAK,GAAG;AAAA,IACrC;AAAA,EACF;AACA,QAAM,CAAC,QAAQ,YAAY,IAAI,CAAC,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC;AAChF,QAAM,SAAS;AAAA,IACb,aAAa,MAAM;AAAA,IACnB;AAAA,IACA,cAAc,EAAE,QAAQ,OAAO,EAAE;AAAA,EACnC;AACA,SAAO;AACT;",
6
+ "names": ["val"]
7
+ }
@@ -0,0 +1,53 @@
1
+ import { styled } from "@tamagui/core";
2
+ import { YStack } from "./Stacks";
3
+ import {
4
+ bordered,
5
+ circular,
6
+ elevate,
7
+ focusTheme,
8
+ hoverTheme,
9
+ padded,
10
+ pressTheme,
11
+ radiused
12
+ } from "./variants";
13
+ const chromelessStyle = {
14
+ backgroundColor: "transparent",
15
+ borderColor: "transparent",
16
+ shadowColor: "transparent"
17
+ };
18
+ const ThemeableStack = styled(YStack, {
19
+ name: "SizableStack",
20
+ variants: {
21
+ backgrounded: {
22
+ true: {
23
+ backgroundColor: "$background"
24
+ }
25
+ },
26
+ radiused,
27
+ hoverTheme,
28
+ pressTheme,
29
+ focusTheme,
30
+ circular,
31
+ padded,
32
+ elevate,
33
+ bordered,
34
+ transparent: {
35
+ true: {
36
+ backgroundColor: "transparent"
37
+ }
38
+ },
39
+ chromeless: {
40
+ true: chromelessStyle,
41
+ all: {
42
+ ...chromelessStyle,
43
+ hoverStyle: chromelessStyle,
44
+ pressStyle: chromelessStyle,
45
+ focusStyle: chromelessStyle
46
+ }
47
+ }
48
+ }
49
+ });
50
+ export {
51
+ ThemeableStack
52
+ };
53
+ //# sourceMappingURL=ThemeableStack.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ThemeableStack.tsx"],
4
+ "sourcesContent": ["import { GetProps, styled } from '@tamagui/core'\n\nimport { YStack } from './Stacks'\nimport {\n bordered,\n circular,\n elevate,\n focusTheme,\n hoverTheme,\n padded,\n pressTheme,\n radiused,\n} from './variants'\n\nconst chromelessStyle = {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n shadowColor: 'transparent',\n}\n\nexport const ThemeableStack = styled(YStack, {\n name: 'SizableStack',\n\n variants: {\n backgrounded: {\n true: {\n backgroundColor: '$background',\n },\n },\n\n radiused,\n hoverTheme,\n pressTheme,\n focusTheme,\n circular,\n padded,\n elevate,\n bordered,\n\n transparent: {\n true: {\n backgroundColor: 'transparent',\n },\n },\n\n chromeless: {\n true: chromelessStyle,\n all: {\n ...chromelessStyle,\n hoverStyle: chromelessStyle,\n pressStyle: chromelessStyle,\n focusStyle: chromelessStyle,\n },\n },\n } as const,\n})\n\nexport type ThemeableStackProps = GetProps<typeof ThemeableStack>\n"],
5
+ "mappings": "AAAA,SAAmB,cAAc;AAEjC,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,kBAAkB;AAAA,EACtB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,aAAa;AACf;AAEO,MAAM,iBAAiB,OAAO,QAAQ;AAAA,EAC3C,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,cAAc;AAAA,MACZ,MAAM;AAAA,QACJ,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,aAAa;AAAA,MACX,MAAM;AAAA,QACJ,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,YAAY;AAAA,MACV,MAAM;AAAA,MACN,KAAK;AAAA,QACH,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACF,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./Stacks";
2
+ export * from "./SizableStack";
3
+ export * from "./ThemeableStack";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["export * from './Stacks'\nexport * from './SizableStack'\nexport * from './ThemeableStack'\n"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,97 @@
1
+ import { getElevation } from "./Stacks";
2
+ const elevate = {
3
+ true: (_, extras) => {
4
+ return getElevation(extras.props["size"], extras);
5
+ }
6
+ };
7
+ const bordered = (val, { props }) => {
8
+ return {
9
+ // TODO size it with size in '...size'
10
+ borderWidth: typeof val === "number" ? val : 1,
11
+ borderColor: "$borderColor",
12
+ ...props.hoverTheme && {
13
+ hoverStyle: {
14
+ borderColor: "$borderColorHover"
15
+ }
16
+ },
17
+ ...props.pressTheme && {
18
+ pressStyle: {
19
+ borderColor: "$borderColorPress"
20
+ }
21
+ },
22
+ ...props.focusTheme && {
23
+ focusStyle: {
24
+ borderColor: "$borderColorFocus"
25
+ }
26
+ }
27
+ };
28
+ };
29
+ const padded = {
30
+ true: (_, extras) => {
31
+ const { tokens, props } = extras;
32
+ return {
33
+ padding: tokens.space[props.size] || tokens.space["$true"]
34
+ };
35
+ }
36
+ };
37
+ const radiused = {
38
+ true: (_, extras) => {
39
+ const { tokens, props } = extras;
40
+ return {
41
+ borderRadius: tokens.radius[props.size] || tokens.radius["$true"]
42
+ };
43
+ }
44
+ };
45
+ const circular = {
46
+ true: (_, { props, tokens }) => {
47
+ const size = tokens.size[props.size];
48
+ return {
49
+ width: size,
50
+ height: size,
51
+ maxWidth: size,
52
+ maxHeight: size,
53
+ minWidth: size,
54
+ minHeight: size,
55
+ borderRadius: 1e5,
56
+ padding: 0
57
+ };
58
+ }
59
+ };
60
+ const hoverTheme = {
61
+ true: {
62
+ hoverStyle: {
63
+ backgroundColor: "$backgroundHover",
64
+ borderColor: "$borderColorHover"
65
+ }
66
+ },
67
+ false: {}
68
+ };
69
+ const pressTheme = {
70
+ true: {
71
+ pressStyle: {
72
+ backgroundColor: "$backgroundPress",
73
+ borderColor: "$borderColorPress"
74
+ }
75
+ },
76
+ false: {}
77
+ };
78
+ const focusTheme = {
79
+ true: {
80
+ focusStyle: {
81
+ backgroundColor: "$backgroundFocus",
82
+ borderColor: "$borderColorFocus"
83
+ }
84
+ },
85
+ false: {}
86
+ };
87
+ export {
88
+ bordered,
89
+ circular,
90
+ elevate,
91
+ focusTheme,
92
+ hoverTheme,
93
+ padded,
94
+ pressTheme,
95
+ radiused
96
+ };
97
+ //# sourceMappingURL=variants.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/variants.tsx"],
4
+ "sourcesContent": ["import { getElevation } from './Stacks'\n\nexport const elevate = {\n true: (_: boolean, extras: any) => {\n return getElevation(extras.props['size'], extras)\n },\n}\n\nexport const bordered = (val: boolean | number, { props }) => {\n return {\n // TODO size it with size in '...size'\n borderWidth: typeof val === 'number' ? val : 1,\n borderColor: '$borderColor',\n\n ...(props.hoverTheme && {\n hoverStyle: {\n borderColor: '$borderColorHover',\n },\n }),\n\n ...(props.pressTheme && {\n pressStyle: {\n borderColor: '$borderColorPress',\n },\n }),\n\n ...(props.focusTheme && {\n focusStyle: {\n borderColor: '$borderColorFocus',\n },\n }),\n }\n}\n\nexport const padded = {\n true: (_, extras) => {\n const { tokens, props } = extras\n return {\n padding: tokens.space[props.size] || tokens.space['$true'],\n }\n },\n}\n\nexport const radiused = {\n true: (_, extras) => {\n const { tokens, props } = extras\n return {\n borderRadius: tokens.radius[props.size] || tokens.radius['$true'],\n }\n },\n}\n\nexport const circular = {\n true: (_, { props, tokens }) => {\n const size = tokens.size[props.size]\n return {\n width: size,\n height: size,\n maxWidth: size,\n maxHeight: size,\n minWidth: size,\n minHeight: size,\n borderRadius: 100_000,\n padding: 0,\n }\n },\n}\n\nexport const hoverTheme = {\n true: {\n hoverStyle: {\n backgroundColor: '$backgroundHover',\n borderColor: '$borderColorHover',\n },\n },\n false: {},\n}\n\nexport const pressTheme = {\n true: {\n pressStyle: {\n backgroundColor: '$backgroundPress',\n borderColor: '$borderColorPress',\n },\n },\n false: {},\n}\n\nexport const focusTheme = {\n true: {\n focusStyle: {\n backgroundColor: '$backgroundFocus',\n borderColor: '$borderColorFocus',\n },\n },\n false: {},\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAEtB,MAAM,UAAU;AAAA,EACrB,MAAM,CAAC,GAAY,WAAgB;AACjC,WAAO,aAAa,OAAO,MAAM,MAAM,GAAG,MAAM;AAAA,EAClD;AACF;AAEO,MAAM,WAAW,CAAC,KAAuB,EAAE,MAAM,MAAM;AAC5D,SAAO;AAAA;AAAA,IAEL,aAAa,OAAO,QAAQ,WAAW,MAAM;AAAA,IAC7C,aAAa;AAAA,IAEb,GAAI,MAAM,cAAc;AAAA,MACtB,YAAY;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IAEA,GAAI,MAAM,cAAc;AAAA,MACtB,YAAY;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IAEA,GAAI,MAAM,cAAc;AAAA,MACtB,YAAY;AAAA,QACV,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,SAAS;AAAA,EACpB,MAAM,CAAC,GAAG,WAAW;AACnB,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,WAAO;AAAA,MACL,SAAS,OAAO,MAAM,MAAM,IAAI,KAAK,OAAO,MAAM,OAAO;AAAA,IAC3D;AAAA,EACF;AACF;AAEO,MAAM,WAAW;AAAA,EACtB,MAAM,CAAC,GAAG,WAAW;AACnB,UAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,WAAO;AAAA,MACL,cAAc,OAAO,OAAO,MAAM,IAAI,KAAK,OAAO,OAAO,OAAO;AAAA,IAClE;AAAA,EACF;AACF;AAEO,MAAM,WAAW;AAAA,EACtB,MAAM,CAAC,GAAG,EAAE,OAAO,OAAO,MAAM;AAC9B,UAAM,OAAO,OAAO,KAAK,MAAM,IAAI;AACnC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,WAAW;AAAA,MACX,UAAU;AAAA,MACV,WAAW;AAAA,MACX,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AACV;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AACV;AAEO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,OAAO,CAAC;AACV;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/stacks",
3
- "version": "1.2.9",
3
+ "version": "1.2.11",
4
4
  "sideEffects": [
5
5
  "*.css"
6
6
  ],
@@ -24,20 +24,20 @@
24
24
  "./package.json": "./package.json",
25
25
  ".": {
26
26
  "types": "./types/index.d.ts",
27
- "import": "./dist/esm/index.js",
27
+ "import": "./dist/esm/index.mjs",
28
28
  "require": "./dist/cjs/index.js"
29
29
  }
30
30
  },
31
31
  "dependencies": {
32
- "@tamagui/core": "^1.2.9"
32
+ "@tamagui/core": "^1.2.11"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "react": "*",
36
36
  "react-dom": "*"
37
37
  },
38
38
  "devDependencies": {
39
- "@tamagui/build": "^1.2.9",
40
- "@tamagui/get-button-sized": "^1.2.9",
39
+ "@tamagui/build": "^1.2.11",
40
+ "@tamagui/get-button-sized": "^1.2.11",
41
41
  "react": "^18.2.0",
42
42
  "react-dom": "^18.2.0"
43
43
  },