@tamagui/demos 1.88.13 → 1.89.0-1706308641099
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/LICENSE +21 -0
- package/dist/esm/AccordionDemo.mjs +58 -0
- package/dist/esm/AddThemeDemo.mjs +35 -0
- package/dist/esm/AlertDialogDemo.mjs +72 -0
- package/dist/esm/AnimationsDemo.mjs +75 -0
- package/dist/esm/AnimationsEnterDemo.mjs +40 -0
- package/dist/esm/AnimationsHoverDemo.mjs +23 -0
- package/dist/esm/AnimationsPresenceDemo.mjs +88 -0
- package/dist/esm/AnimationsTimingDemo.mjs +22 -0
- package/dist/esm/AvatarDemo.mjs +29 -0
- package/dist/esm/BuildAButtonDemo.mjs +101 -0
- package/dist/esm/ButtonDemo.mjs +59 -0
- package/dist/esm/CardDemo.mjs +64 -0
- package/dist/esm/CheckboxDemo.mjs +45 -0
- package/dist/esm/ColorsDemo.mjs +97 -0
- package/dist/esm/DialogDemo.mjs +136 -0
- package/dist/esm/FormsDemo.mjs +35 -0
- package/dist/esm/Grid.mjs +37 -0
- package/dist/esm/GroupDemo.mjs +61 -0
- package/dist/esm/HeadingsDemo.mjs +21 -0
- package/dist/esm/ImageDemo.mjs +12 -0
- package/dist/esm/InputsDemo.mjs +36 -0
- package/dist/esm/LabelDemo.mjs +36 -0
- package/dist/esm/LinearGradientDemo.mjs +24 -0
- package/dist/esm/ListItemDemo.mjs +76 -0
- package/dist/esm/LucideIconsDemo.mjs +58 -0
- package/dist/esm/PopoverDemo.mjs +106 -0
- package/dist/esm/ProgressDemo.mjs +64 -0
- package/dist/esm/RadioGroupDemo.mjs +46 -0
- package/dist/esm/ReplaceThemeDemo.mjs +43 -0
- package/dist/esm/ScrollViewDemo.mjs +50 -0
- package/dist/esm/SelectDemo.mjs +188 -0
- package/dist/esm/SeparatorDemo.mjs +36 -0
- package/dist/esm/ShapesDemo.mjs +18 -0
- package/dist/esm/SheetDemo.mjs +141 -0
- package/dist/esm/SliderDemo.mjs +34 -0
- package/dist/esm/SpinnerDemo.mjs +17 -0
- package/dist/esm/StacksDemo.mjs +80 -0
- package/dist/esm/SwitchDemo.mjs +81 -0
- package/dist/esm/TabsAdvancedDemo.mjs +303 -0
- package/dist/esm/TabsDemo.mjs +158 -0
- package/dist/esm/TextDemo.mjs +28 -0
- package/dist/esm/ThemeBuilderDemo.mjs +154 -0
- package/dist/esm/ThemeInverseDemo.mjs +45 -0
- package/dist/esm/ToastDemo.mjs +98 -0
- package/dist/esm/ToastDuplicateDemo.mjs +48 -0
- package/dist/esm/ToggleGroupDemo.mjs +73 -0
- package/dist/esm/TokensDemo.mjs +90 -0
- package/dist/esm/TooltipDemo.mjs +101 -0
- package/dist/esm/UpdateThemeDemo.mjs +46 -0
- package/dist/esm/index.mjs +49 -0
- package/dist/esm/tamagui.config.mjs +4 -0
- package/dist/esm/useOnIntersecting.mjs +43 -0
- package/dist/jsx/AccordionDemo.mjs +58 -0
- package/dist/jsx/AddThemeDemo.mjs +35 -0
- package/dist/jsx/AlertDialogDemo.mjs +72 -0
- package/dist/jsx/AnimationsDemo.mjs +75 -0
- package/dist/jsx/AnimationsEnterDemo.mjs +40 -0
- package/dist/jsx/AnimationsHoverDemo.mjs +23 -0
- package/dist/jsx/AnimationsPresenceDemo.mjs +88 -0
- package/dist/jsx/AnimationsTimingDemo.mjs +22 -0
- package/dist/jsx/AvatarDemo.mjs +29 -0
- package/dist/jsx/BuildAButtonDemo.mjs +101 -0
- package/dist/jsx/ButtonDemo.mjs +59 -0
- package/dist/jsx/CardDemo.mjs +64 -0
- package/dist/jsx/CheckboxDemo.mjs +45 -0
- package/dist/jsx/ColorsDemo.mjs +97 -0
- package/dist/jsx/DialogDemo.mjs +136 -0
- package/dist/jsx/FormsDemo.mjs +35 -0
- package/dist/jsx/Grid.mjs +37 -0
- package/dist/jsx/GroupDemo.mjs +61 -0
- package/dist/jsx/HeadingsDemo.mjs +21 -0
- package/dist/jsx/ImageDemo.mjs +12 -0
- package/dist/jsx/InputsDemo.mjs +36 -0
- package/dist/jsx/LabelDemo.mjs +36 -0
- package/dist/jsx/LinearGradientDemo.mjs +24 -0
- package/dist/jsx/ListItemDemo.mjs +76 -0
- package/dist/jsx/LucideIconsDemo.mjs +58 -0
- package/dist/jsx/PopoverDemo.mjs +106 -0
- package/dist/jsx/ProgressDemo.mjs +64 -0
- package/dist/jsx/RadioGroupDemo.mjs +46 -0
- package/dist/jsx/ReplaceThemeDemo.mjs +43 -0
- package/dist/jsx/ScrollViewDemo.mjs +50 -0
- package/dist/jsx/SelectDemo.mjs +188 -0
- package/dist/jsx/SeparatorDemo.mjs +36 -0
- package/dist/jsx/ShapesDemo.mjs +18 -0
- package/dist/jsx/SheetDemo.mjs +141 -0
- package/dist/jsx/SliderDemo.mjs +34 -0
- package/dist/jsx/SpinnerDemo.mjs +17 -0
- package/dist/jsx/StacksDemo.mjs +80 -0
- package/dist/jsx/SwitchDemo.mjs +81 -0
- package/dist/jsx/TabsAdvancedDemo.mjs +303 -0
- package/dist/jsx/TabsDemo.mjs +158 -0
- package/dist/jsx/TextDemo.mjs +28 -0
- package/dist/jsx/ThemeBuilderDemo.mjs +154 -0
- package/dist/jsx/ThemeInverseDemo.mjs +45 -0
- package/dist/jsx/ToastDemo.mjs +98 -0
- package/dist/jsx/ToastDuplicateDemo.mjs +48 -0
- package/dist/jsx/ToggleGroupDemo.mjs +73 -0
- package/dist/jsx/TokensDemo.mjs +90 -0
- package/dist/jsx/TooltipDemo.mjs +101 -0
- package/dist/jsx/UpdateThemeDemo.mjs +46 -0
- package/dist/jsx/index.mjs +49 -0
- package/dist/jsx/tamagui.config.mjs +4 -0
- package/dist/jsx/useOnIntersecting.mjs +43 -0
- package/package.json +18 -18
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Toast, useToastController, useToastState } from "@tamagui/toast";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Button, Label, Switch, XStack, YStack } from "tamagui";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
const ToastDemo = () => {
|
|
6
|
+
const [native, setNative] = React.useState(!1);
|
|
7
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
8
|
+
space: !0,
|
|
9
|
+
alignItems: "center",
|
|
10
|
+
children: [/* @__PURE__ */jsx(ToastControl, {
|
|
11
|
+
native
|
|
12
|
+
}), /* @__PURE__ */jsx(CurrentToast, {}), /* @__PURE__ */jsx(NativeOptions, {
|
|
13
|
+
native,
|
|
14
|
+
setNative
|
|
15
|
+
})]
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
CurrentToast = () => {
|
|
19
|
+
const currentToast = useToastState();
|
|
20
|
+
return !currentToast || currentToast.isHandledNatively ? null : /* @__PURE__ */jsx(Toast, {
|
|
21
|
+
duration: currentToast.duration,
|
|
22
|
+
enterStyle: {
|
|
23
|
+
opacity: 0,
|
|
24
|
+
scale: 0.5,
|
|
25
|
+
y: -25
|
|
26
|
+
},
|
|
27
|
+
exitStyle: {
|
|
28
|
+
opacity: 0,
|
|
29
|
+
scale: 1,
|
|
30
|
+
y: -20
|
|
31
|
+
},
|
|
32
|
+
y: 0,
|
|
33
|
+
opacity: 1,
|
|
34
|
+
scale: 1,
|
|
35
|
+
animation: "100ms",
|
|
36
|
+
viewportName: currentToast.viewportName,
|
|
37
|
+
children: /* @__PURE__ */jsxs(YStack, {
|
|
38
|
+
children: [/* @__PURE__ */jsx(Toast.Title, {
|
|
39
|
+
children: currentToast.title
|
|
40
|
+
}), !!currentToast.message && /* @__PURE__ */jsx(Toast.Description, {
|
|
41
|
+
children: currentToast.message
|
|
42
|
+
})]
|
|
43
|
+
})
|
|
44
|
+
}, currentToast.id);
|
|
45
|
+
},
|
|
46
|
+
ToastControl = ({
|
|
47
|
+
native
|
|
48
|
+
}) => {
|
|
49
|
+
const toast = useToastController();
|
|
50
|
+
return /* @__PURE__ */jsxs(XStack, {
|
|
51
|
+
space: "$2",
|
|
52
|
+
justifyContent: "center",
|
|
53
|
+
children: [/* @__PURE__ */jsx(Button, {
|
|
54
|
+
onPress: () => {
|
|
55
|
+
toast.show("Successfully saved!", {
|
|
56
|
+
message: "Don't worry, we've got your data.",
|
|
57
|
+
native
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
children: "Show"
|
|
61
|
+
}), /* @__PURE__ */jsx(Button, {
|
|
62
|
+
onPress: () => {
|
|
63
|
+
toast.hide();
|
|
64
|
+
},
|
|
65
|
+
children: "Hide"
|
|
66
|
+
})]
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
NativeOptions = ({
|
|
70
|
+
native,
|
|
71
|
+
setNative
|
|
72
|
+
}) => /* @__PURE__ */jsxs(XStack, {
|
|
73
|
+
space: "$3",
|
|
74
|
+
children: [/* @__PURE__ */jsx(Label, {
|
|
75
|
+
size: "$1",
|
|
76
|
+
onPress: () => setNative(!1),
|
|
77
|
+
children: "Custom"
|
|
78
|
+
}), /* @__PURE__ */jsx(Switch, {
|
|
79
|
+
id: "native-toggle",
|
|
80
|
+
nativeID: "native-toggle",
|
|
81
|
+
theme: "active",
|
|
82
|
+
size: "$1",
|
|
83
|
+
checked: !!native,
|
|
84
|
+
onCheckedChange: val => setNative(val),
|
|
85
|
+
children: /* @__PURE__ */jsx(Switch.Thumb, {
|
|
86
|
+
animation: ["quick", {
|
|
87
|
+
transform: {
|
|
88
|
+
overshootClamping: !0
|
|
89
|
+
}
|
|
90
|
+
}]
|
|
91
|
+
})
|
|
92
|
+
}), /* @__PURE__ */jsx(Label, {
|
|
93
|
+
size: "$1",
|
|
94
|
+
onPress: () => setNative(!0),
|
|
95
|
+
children: "Native"
|
|
96
|
+
})]
|
|
97
|
+
});
|
|
98
|
+
export { ToastDemo };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { CheckCircle2 } from "@tamagui/lucide-icons";
|
|
2
|
+
import { Toast } from "@tamagui/toast";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { Button, XStack, YStack } from "tamagui";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
const ToastDuplicateDemo = () => {
|
|
7
|
+
const [savedCount, setSavedCount] = React.useState(0);
|
|
8
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
9
|
+
alignItems: "center",
|
|
10
|
+
children: [/* @__PURE__ */jsx(Button, {
|
|
11
|
+
onPress: () => {
|
|
12
|
+
setSavedCount(old => old + 1);
|
|
13
|
+
},
|
|
14
|
+
children: "Show toast"
|
|
15
|
+
}), [...Array(savedCount)].map((_, index) => /* @__PURE__ */jsx(Toast, {
|
|
16
|
+
viewportName: "viewport-multiple",
|
|
17
|
+
duration: 4e3,
|
|
18
|
+
enterStyle: {
|
|
19
|
+
opacity: 0,
|
|
20
|
+
scale: 0.5,
|
|
21
|
+
y: -25
|
|
22
|
+
},
|
|
23
|
+
exitStyle: {
|
|
24
|
+
opacity: 0,
|
|
25
|
+
scale: 1,
|
|
26
|
+
y: -20
|
|
27
|
+
},
|
|
28
|
+
y: 0,
|
|
29
|
+
opacity: 1,
|
|
30
|
+
scale: 1,
|
|
31
|
+
animation: "100ms",
|
|
32
|
+
children: /* @__PURE__ */jsxs(XStack, {
|
|
33
|
+
space: !0,
|
|
34
|
+
alignItems: "center",
|
|
35
|
+
children: [/* @__PURE__ */jsx(YStack, {
|
|
36
|
+
children: /* @__PURE__ */jsx(CheckCircle2, {})
|
|
37
|
+
}), /* @__PURE__ */jsxs(YStack, {
|
|
38
|
+
children: [/* @__PURE__ */jsx(Toast.Title, {
|
|
39
|
+
children: "Successfully saved!"
|
|
40
|
+
}), /* @__PURE__ */jsx(Toast.Description, {
|
|
41
|
+
children: "Don't worry... We've got your data."
|
|
42
|
+
})]
|
|
43
|
+
})]
|
|
44
|
+
})
|
|
45
|
+
}, index))]
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
export { ToastDuplicateDemo };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AlignCenter, AlignLeft, AlignRight } from "@tamagui/lucide-icons";
|
|
2
|
+
import { Label, ToggleGroup, XStack, YStack } from "tamagui";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
function ToggleGroupDemo() {
|
|
5
|
+
return /* @__PURE__ */jsx(YStack, {
|
|
6
|
+
paddingHorizontal: "$4",
|
|
7
|
+
children: /* @__PURE__ */jsxs(XStack, {
|
|
8
|
+
alignItems: "center",
|
|
9
|
+
space: "$10",
|
|
10
|
+
children: [/* @__PURE__ */jsxs(YStack, {
|
|
11
|
+
alignItems: "center",
|
|
12
|
+
space: "$6",
|
|
13
|
+
children: [/* @__PURE__ */jsx(ToggleGroupComponent, {
|
|
14
|
+
type: "single",
|
|
15
|
+
size: "$3",
|
|
16
|
+
orientation: "horizontal"
|
|
17
|
+
}), /* @__PURE__ */jsx(ToggleGroupComponent, {
|
|
18
|
+
type: "multiple",
|
|
19
|
+
size: "$4",
|
|
20
|
+
orientation: "horizontal"
|
|
21
|
+
})]
|
|
22
|
+
}), /* @__PURE__ */jsxs(XStack, {
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
space: "$6",
|
|
25
|
+
children: [/* @__PURE__ */jsx(ToggleGroupComponent, {
|
|
26
|
+
type: "single",
|
|
27
|
+
size: "$3",
|
|
28
|
+
orientation: "vertical"
|
|
29
|
+
}), /* @__PURE__ */jsx(ToggleGroupComponent, {
|
|
30
|
+
type: "multiple",
|
|
31
|
+
size: "$4",
|
|
32
|
+
orientation: "vertical"
|
|
33
|
+
})]
|
|
34
|
+
})]
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function ToggleGroupComponent(props) {
|
|
39
|
+
const id = `switch-${props.size.toString().slice(1)}-${props.type}`;
|
|
40
|
+
return /* @__PURE__ */jsxs(XStack, {
|
|
41
|
+
flexDirection: props.orientation === "horizontal" ? "row" : "column",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
justifyContent: "center",
|
|
44
|
+
space: "$4",
|
|
45
|
+
children: [/* @__PURE__ */jsx(Label, {
|
|
46
|
+
paddingRight: "$0",
|
|
47
|
+
justifyContent: "flex-end",
|
|
48
|
+
size: props.size,
|
|
49
|
+
htmlFor: id,
|
|
50
|
+
children: props.type === "single" ? "Single" : "Multiple"
|
|
51
|
+
}), /* @__PURE__ */jsxs(ToggleGroup, {
|
|
52
|
+
orientation: props.orientation,
|
|
53
|
+
id,
|
|
54
|
+
type: props.type,
|
|
55
|
+
size: props.size,
|
|
56
|
+
disableDeactivation: props.type === "single" ? !0 : void 0,
|
|
57
|
+
children: [/* @__PURE__ */jsx(ToggleGroup.Item, {
|
|
58
|
+
value: "left",
|
|
59
|
+
"aria-label": "Left aligned",
|
|
60
|
+
children: /* @__PURE__ */jsx(AlignLeft, {})
|
|
61
|
+
}), /* @__PURE__ */jsx(ToggleGroup.Item, {
|
|
62
|
+
value: "center",
|
|
63
|
+
"aria-label": "Center aligned",
|
|
64
|
+
children: /* @__PURE__ */jsx(AlignCenter, {})
|
|
65
|
+
}), /* @__PURE__ */jsx(ToggleGroup.Item, {
|
|
66
|
+
value: "right",
|
|
67
|
+
"aria-label": "Right aligned",
|
|
68
|
+
children: /* @__PURE__ */jsx(AlignRight, {})
|
|
69
|
+
})]
|
|
70
|
+
})]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export { ToggleGroupDemo };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { getConfig } from "@tamagui/core";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Button, H2, H3, H4, Separator, Square, XGroup, XStack, YStack } from "tamagui";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
const sections = [{
|
|
6
|
+
name: "Size",
|
|
7
|
+
key: "size"
|
|
8
|
+
}, {
|
|
9
|
+
name: "Space",
|
|
10
|
+
key: "space"
|
|
11
|
+
}, {
|
|
12
|
+
name: "Space (-)",
|
|
13
|
+
key: "spaceNegative"
|
|
14
|
+
}, {
|
|
15
|
+
name: "Radius",
|
|
16
|
+
key: "radius"
|
|
17
|
+
}];
|
|
18
|
+
function TokensDemo() {
|
|
19
|
+
const [section, setSection] = useState("size");
|
|
20
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
21
|
+
space: !0,
|
|
22
|
+
children: [/* @__PURE__ */jsx(XGroup, {
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
alignSelf: "center",
|
|
25
|
+
children: sections.map(({
|
|
26
|
+
name,
|
|
27
|
+
key
|
|
28
|
+
}) => /* @__PURE__ */jsx(XGroup.Item, {
|
|
29
|
+
children: /* @__PURE__ */jsx(Button, {
|
|
30
|
+
size: "$3",
|
|
31
|
+
theme: section === key ? "active" : null,
|
|
32
|
+
fontFamily: "$silkscreen",
|
|
33
|
+
onPress: () => setSection(key),
|
|
34
|
+
children: name
|
|
35
|
+
})
|
|
36
|
+
}, key))
|
|
37
|
+
}), (section === "size" || section === "spaceNegative" || section === "space" || section === "radius") && /* @__PURE__ */jsx(SizeSection, {
|
|
38
|
+
section
|
|
39
|
+
})]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function SizeSection({
|
|
43
|
+
section
|
|
44
|
+
}) {
|
|
45
|
+
const allTokens = getConfig().tokens,
|
|
46
|
+
tokens = allTokens[section.startsWith("space") ? "space" : section],
|
|
47
|
+
st = Object.keys(tokens).sort((a, b) => parseFloat(a) > parseFloat(b) ? 1 : -1),
|
|
48
|
+
spaceTokens = st.filter(t => parseFloat(t) >= 0),
|
|
49
|
+
spaceTokensNegative = st.filter(t => parseFloat(t) < 0).sort((a, b) => parseFloat(a) > parseFloat(b) ? -1 : 1);
|
|
50
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
51
|
+
flex: 1,
|
|
52
|
+
space: !0,
|
|
53
|
+
children: [/* @__PURE__ */jsx(H2, {
|
|
54
|
+
children: "Sizes"
|
|
55
|
+
}), /* @__PURE__ */jsx(YStack, {
|
|
56
|
+
width: "100%",
|
|
57
|
+
space: "$2",
|
|
58
|
+
separator: /* @__PURE__ */jsx(Separator, {}),
|
|
59
|
+
children: (section === "spaceNegative" ? spaceTokensNegative : spaceTokens).map(token => /* @__PURE__ */jsxs(XStack, {
|
|
60
|
+
width: "100%",
|
|
61
|
+
alignItems: "center",
|
|
62
|
+
children: [/* @__PURE__ */jsx(YStack, {
|
|
63
|
+
width: "25%",
|
|
64
|
+
children: /* @__PURE__ */jsxs(H3, {
|
|
65
|
+
size: "$6",
|
|
66
|
+
children: ["$", token]
|
|
67
|
+
})
|
|
68
|
+
}), /* @__PURE__ */jsx(YStack, {
|
|
69
|
+
width: "20%",
|
|
70
|
+
children: /* @__PURE__ */jsxs(H4, {
|
|
71
|
+
size: "$5",
|
|
72
|
+
children: [tokens[token]?.val, "px"]
|
|
73
|
+
})
|
|
74
|
+
}), /* @__PURE__ */jsx(Square, {
|
|
75
|
+
size: tokens[token]?.val,
|
|
76
|
+
backgroundColor: "$color5",
|
|
77
|
+
...(section === "spaceNegative" && {
|
|
78
|
+
backgroundColor: "$red5",
|
|
79
|
+
size: -tokens[spaceTokensNegative.find(t => parseFloat(t) === -parseFloat(token)) ?? token]?.val
|
|
80
|
+
}),
|
|
81
|
+
...(section === "radius" && {
|
|
82
|
+
size: allTokens.size[token]?.val,
|
|
83
|
+
borderRadius: tokens[token]?.val
|
|
84
|
+
})
|
|
85
|
+
})]
|
|
86
|
+
}, token))
|
|
87
|
+
})]
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export { TokensDemo };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle } from "@tamagui/lucide-icons";
|
|
2
|
+
import { Button, Paragraph, Tooltip, TooltipGroup, XStack, YStack } from "tamagui";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
function TooltipDemo() {
|
|
5
|
+
return /* @__PURE__ */jsx(TooltipGroup, {
|
|
6
|
+
delay: {
|
|
7
|
+
open: 3e3,
|
|
8
|
+
close: 100
|
|
9
|
+
},
|
|
10
|
+
children: /* @__PURE__ */jsxs(YStack, {
|
|
11
|
+
space: "$2",
|
|
12
|
+
alignSelf: "center",
|
|
13
|
+
children: [/* @__PURE__ */jsxs(XStack, {
|
|
14
|
+
space: "$2",
|
|
15
|
+
children: [/* @__PURE__ */jsx(Demo, {
|
|
16
|
+
groupId: "0",
|
|
17
|
+
placement: "top-end",
|
|
18
|
+
Icon: Circle
|
|
19
|
+
}), /* @__PURE__ */jsx(Demo, {
|
|
20
|
+
groupId: "1",
|
|
21
|
+
placement: "top",
|
|
22
|
+
Icon: ChevronUp
|
|
23
|
+
}), /* @__PURE__ */jsx(Demo, {
|
|
24
|
+
groupId: "2",
|
|
25
|
+
placement: "top-start",
|
|
26
|
+
Icon: Circle
|
|
27
|
+
})]
|
|
28
|
+
}), /* @__PURE__ */jsxs(XStack, {
|
|
29
|
+
space: "$2",
|
|
30
|
+
children: [/* @__PURE__ */jsx(Demo, {
|
|
31
|
+
groupId: "3",
|
|
32
|
+
placement: "left",
|
|
33
|
+
Icon: ChevronLeft
|
|
34
|
+
}), /* @__PURE__ */jsx(YStack, {
|
|
35
|
+
flex: 1
|
|
36
|
+
}), /* @__PURE__ */jsx(Demo, {
|
|
37
|
+
groupId: "4",
|
|
38
|
+
placement: "right",
|
|
39
|
+
Icon: ChevronRight
|
|
40
|
+
})]
|
|
41
|
+
}), /* @__PURE__ */jsxs(XStack, {
|
|
42
|
+
space: "$2",
|
|
43
|
+
children: [/* @__PURE__ */jsx(Demo, {
|
|
44
|
+
groupId: "5",
|
|
45
|
+
placement: "bottom-end",
|
|
46
|
+
Icon: Circle
|
|
47
|
+
}), /* @__PURE__ */jsx(Demo, {
|
|
48
|
+
groupId: "6",
|
|
49
|
+
placement: "bottom",
|
|
50
|
+
Icon: ChevronDown
|
|
51
|
+
}), /* @__PURE__ */jsx(Demo, {
|
|
52
|
+
groupId: "7",
|
|
53
|
+
placement: "bottom-start",
|
|
54
|
+
Icon: Circle
|
|
55
|
+
})]
|
|
56
|
+
})]
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function Demo({
|
|
61
|
+
Icon,
|
|
62
|
+
...props
|
|
63
|
+
}) {
|
|
64
|
+
return /* @__PURE__ */jsxs(Tooltip, {
|
|
65
|
+
...props,
|
|
66
|
+
children: [/* @__PURE__ */jsx(Tooltip.Trigger, {
|
|
67
|
+
children: /* @__PURE__ */jsx(Button, {
|
|
68
|
+
icon: Icon,
|
|
69
|
+
circular: !0
|
|
70
|
+
})
|
|
71
|
+
}), /* @__PURE__ */jsxs(Tooltip.Content, {
|
|
72
|
+
enterStyle: {
|
|
73
|
+
x: 0,
|
|
74
|
+
y: -5,
|
|
75
|
+
opacity: 0,
|
|
76
|
+
scale: 0.9
|
|
77
|
+
},
|
|
78
|
+
exitStyle: {
|
|
79
|
+
x: 0,
|
|
80
|
+
y: -5,
|
|
81
|
+
opacity: 0,
|
|
82
|
+
scale: 0.9
|
|
83
|
+
},
|
|
84
|
+
scale: 1,
|
|
85
|
+
x: 0,
|
|
86
|
+
y: 0,
|
|
87
|
+
opacity: 1,
|
|
88
|
+
animation: ["quick", {
|
|
89
|
+
opacity: {
|
|
90
|
+
overshootClamping: !0
|
|
91
|
+
}
|
|
92
|
+
}],
|
|
93
|
+
children: [/* @__PURE__ */jsx(Tooltip.Arrow, {}), /* @__PURE__ */jsx(Paragraph, {
|
|
94
|
+
size: "$2",
|
|
95
|
+
lineHeight: "$1",
|
|
96
|
+
children: "Hello world"
|
|
97
|
+
})]
|
|
98
|
+
})]
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export { TooltipDemo };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as Config from "@tamagui/site-config";
|
|
2
|
+
import { addTheme, updateTheme } from "@tamagui/theme";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Button, Square, Theme, XStack, YStack, getVariableValue, useForceUpdate, useIsomorphicLayoutEffect } from "tamagui";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
const colors = Config.config.tokens.color,
|
|
7
|
+
colorKeys = Object.keys(colors);
|
|
8
|
+
function UpdateThemeDemo() {
|
|
9
|
+
const [theme, setTheme] = useState(),
|
|
10
|
+
update = useForceUpdate();
|
|
11
|
+
return useIsomorphicLayoutEffect(() => {
|
|
12
|
+
addTheme({
|
|
13
|
+
name: "custom",
|
|
14
|
+
insertCSS: !0,
|
|
15
|
+
theme: {
|
|
16
|
+
color: "red"
|
|
17
|
+
}
|
|
18
|
+
}), setTheme("custom");
|
|
19
|
+
}, []), /* @__PURE__ */jsxs(YStack, {
|
|
20
|
+
alignItems: "center",
|
|
21
|
+
space: !0,
|
|
22
|
+
children: [/* @__PURE__ */jsx(XStack, {
|
|
23
|
+
gap: "$5",
|
|
24
|
+
children: /* @__PURE__ */jsx(Theme, {
|
|
25
|
+
name: theme ?? null,
|
|
26
|
+
children: /* @__PURE__ */jsx(Square, {
|
|
27
|
+
borderRadius: "$8",
|
|
28
|
+
size: 100,
|
|
29
|
+
backgroundColor: "$color"
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
}), /* @__PURE__ */jsx(Button, {
|
|
33
|
+
onPress: () => {
|
|
34
|
+
const randomColor = getVariableValue(colors[colorKeys[Math.floor(Math.random() * colorKeys.length)]]);
|
|
35
|
+
updateTheme({
|
|
36
|
+
name: "custom",
|
|
37
|
+
theme: {
|
|
38
|
+
color: randomColor
|
|
39
|
+
}
|
|
40
|
+
}), update();
|
|
41
|
+
},
|
|
42
|
+
children: "Set to random color"
|
|
43
|
+
})]
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export { UpdateThemeDemo };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export * from "./AccordionDemo.mjs";
|
|
2
|
+
export * from "./AddThemeDemo.mjs";
|
|
3
|
+
export * from "./AlertDialogDemo.mjs";
|
|
4
|
+
export * from "./AnimationsDemo.mjs";
|
|
5
|
+
export * from "./AnimationsEnterDemo.mjs";
|
|
6
|
+
export * from "./AnimationsHoverDemo.mjs";
|
|
7
|
+
export * from "./AnimationsPresenceDemo.mjs";
|
|
8
|
+
export * from "./AnimationsTimingDemo.mjs";
|
|
9
|
+
export * from "./AvatarDemo.mjs";
|
|
10
|
+
export * from "./BuildAButtonDemo.mjs";
|
|
11
|
+
export * from "./ButtonDemo.mjs";
|
|
12
|
+
export * from "./ThemeBuilderDemo.mjs";
|
|
13
|
+
export * from "./CardDemo.mjs";
|
|
14
|
+
export * from "./CheckboxDemo.mjs";
|
|
15
|
+
export * from "./ColorsDemo.mjs";
|
|
16
|
+
export * from "./DialogDemo.mjs";
|
|
17
|
+
export * from "./FormsDemo.mjs";
|
|
18
|
+
export * from "./GroupDemo.mjs";
|
|
19
|
+
export * from "./HeadingsDemo.mjs";
|
|
20
|
+
export * from "./ImageDemo.mjs";
|
|
21
|
+
export * from "./InputsDemo.mjs";
|
|
22
|
+
export * from "./LabelDemo.mjs";
|
|
23
|
+
export * from "./LinearGradientDemo.mjs";
|
|
24
|
+
export * from "./ListItemDemo.mjs";
|
|
25
|
+
export * from "./LucideIconsDemo.mjs";
|
|
26
|
+
export * from "./PopoverDemo.mjs";
|
|
27
|
+
export * from "./ProgressDemo.mjs";
|
|
28
|
+
export * from "./RadioGroupDemo.mjs";
|
|
29
|
+
export * from "./ReplaceThemeDemo.mjs";
|
|
30
|
+
export * from "./ScrollViewDemo.mjs";
|
|
31
|
+
export * from "./SelectDemo.mjs";
|
|
32
|
+
export * from "./SeparatorDemo.mjs";
|
|
33
|
+
export * from "./ShapesDemo.mjs";
|
|
34
|
+
export * from "./SheetDemo.mjs";
|
|
35
|
+
export * from "./SliderDemo.mjs";
|
|
36
|
+
export * from "./SpinnerDemo.mjs";
|
|
37
|
+
export * from "./StacksDemo.mjs";
|
|
38
|
+
export * from "./SwitchDemo.mjs";
|
|
39
|
+
export * from "./TabsAdvancedDemo.mjs";
|
|
40
|
+
export * from "./TabsDemo.mjs";
|
|
41
|
+
export * from "./TextDemo.mjs";
|
|
42
|
+
export * from "./ThemeInverseDemo.mjs";
|
|
43
|
+
export * from "./ToastDemo.mjs";
|
|
44
|
+
export * from "./ToastDuplicateDemo.mjs";
|
|
45
|
+
export * from "./ToggleGroupDemo.mjs";
|
|
46
|
+
export * from "./TokensDemo.mjs";
|
|
47
|
+
export * from "./TooltipDemo.mjs";
|
|
48
|
+
export * from "./UpdateThemeDemo.mjs";
|
|
49
|
+
export * from "./useOnIntersecting.mjs";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { isWeb, useEvent } from "tamagui";
|
|
3
|
+
function useIsIntersecting(refs, {
|
|
4
|
+
once,
|
|
5
|
+
...opts
|
|
6
|
+
} = {}) {
|
|
7
|
+
const [values, setValues] = useState([]);
|
|
8
|
+
return isWeb && useOnIntersecting(refs, entries => {
|
|
9
|
+
const intersecting = entries.some(x => x?.isIntersecting);
|
|
10
|
+
once && !intersecting || setValues(prev => {
|
|
11
|
+
const next = entries.map(e => e?.isIntersecting ?? !1);
|
|
12
|
+
return prev.length === next.length && prev.every((e, i) => e === next[i]) ? prev : next;
|
|
13
|
+
});
|
|
14
|
+
}, opts), Array.isArray(refs) ? values : values[0];
|
|
15
|
+
}
|
|
16
|
+
function useOnIntersecting(refsIn, incomingCbRaw, {
|
|
17
|
+
threshold = 0,
|
|
18
|
+
root,
|
|
19
|
+
rootMargin
|
|
20
|
+
} = {}, mountArgs = []) {
|
|
21
|
+
const onIntersectEvent = useEvent(incomingCbRaw);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const refs = Array.isArray(refsIn) ? refsIn : [refsIn];
|
|
24
|
+
if (!refs.length) return;
|
|
25
|
+
let dispose = null,
|
|
26
|
+
currentEntries = [];
|
|
27
|
+
const options = {
|
|
28
|
+
threshold,
|
|
29
|
+
root,
|
|
30
|
+
rootMargin
|
|
31
|
+
},
|
|
32
|
+
io = new IntersectionObserver(entries => {
|
|
33
|
+
currentEntries = refs.map((ref, index) => entries.find(x => x.target === ref.current) ?? currentEntries[index] ?? null), dispose?.(), dispose = onIntersectEvent(currentEntries) || null;
|
|
34
|
+
}, options);
|
|
35
|
+
for (const ref of refs) ref.current && io.observe(ref.current);
|
|
36
|
+
return () => {
|
|
37
|
+
dispose?.(), io.disconnect();
|
|
38
|
+
};
|
|
39
|
+
}, [onIntersectEvent, refsIn, root, rootMargin, threshold,
|
|
40
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
+
...mountArgs]);
|
|
42
|
+
}
|
|
43
|
+
export { useIsIntersecting, useOnIntersecting };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/demos",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.89.0-1706308641099",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -40,29 +40,29 @@
|
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@tamagui/avatar": "1.
|
|
44
|
-
"@tamagui/button": "1.
|
|
45
|
-
"@tamagui/core": "1.
|
|
46
|
-
"@tamagui/list-item": "1.
|
|
47
|
-
"@tamagui/logo": "1.
|
|
48
|
-
"@tamagui/menu": "1.
|
|
49
|
-
"@tamagui/popover": "1.
|
|
50
|
-
"@tamagui/progress": "1.
|
|
51
|
-
"@tamagui/radio-group": "1.
|
|
52
|
-
"@tamagui/select": "1.
|
|
53
|
-
"@tamagui/sheet": "1.
|
|
54
|
-
"@tamagui/site-config": "1.
|
|
55
|
-
"@tamagui/slider": "1.
|
|
56
|
-
"@tamagui/stacks": "1.
|
|
57
|
-
"@tamagui/toast": "1.
|
|
58
|
-
"tamagui": "1.
|
|
43
|
+
"@tamagui/avatar": "1.89.0-1706308641099",
|
|
44
|
+
"@tamagui/button": "1.89.0-1706308641099",
|
|
45
|
+
"@tamagui/core": "1.89.0-1706308641099",
|
|
46
|
+
"@tamagui/list-item": "1.89.0-1706308641099",
|
|
47
|
+
"@tamagui/logo": "1.89.0-1706308641099",
|
|
48
|
+
"@tamagui/menu": "1.89.0-1706308641099",
|
|
49
|
+
"@tamagui/popover": "1.89.0-1706308641099",
|
|
50
|
+
"@tamagui/progress": "1.89.0-1706308641099",
|
|
51
|
+
"@tamagui/radio-group": "1.89.0-1706308641099",
|
|
52
|
+
"@tamagui/select": "1.89.0-1706308641099",
|
|
53
|
+
"@tamagui/sheet": "1.89.0-1706308641099",
|
|
54
|
+
"@tamagui/site-config": "1.89.0-1706308641099",
|
|
55
|
+
"@tamagui/slider": "1.89.0-1706308641099",
|
|
56
|
+
"@tamagui/stacks": "1.89.0-1706308641099",
|
|
57
|
+
"@tamagui/toast": "1.89.0-1706308641099",
|
|
58
|
+
"tamagui": "1.89.0-1706308641099"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
61
|
"react": "*",
|
|
62
62
|
"react-dom": "*"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@tamagui/build": "1.
|
|
65
|
+
"@tamagui/build": "1.89.0-1706308641099",
|
|
66
66
|
"react": "^18.2.0",
|
|
67
67
|
"react-dom": "^18.2.0"
|
|
68
68
|
},
|