@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.
Files changed (106) hide show
  1. package/LICENSE +21 -0
  2. package/dist/esm/AccordionDemo.mjs +58 -0
  3. package/dist/esm/AddThemeDemo.mjs +35 -0
  4. package/dist/esm/AlertDialogDemo.mjs +72 -0
  5. package/dist/esm/AnimationsDemo.mjs +75 -0
  6. package/dist/esm/AnimationsEnterDemo.mjs +40 -0
  7. package/dist/esm/AnimationsHoverDemo.mjs +23 -0
  8. package/dist/esm/AnimationsPresenceDemo.mjs +88 -0
  9. package/dist/esm/AnimationsTimingDemo.mjs +22 -0
  10. package/dist/esm/AvatarDemo.mjs +29 -0
  11. package/dist/esm/BuildAButtonDemo.mjs +101 -0
  12. package/dist/esm/ButtonDemo.mjs +59 -0
  13. package/dist/esm/CardDemo.mjs +64 -0
  14. package/dist/esm/CheckboxDemo.mjs +45 -0
  15. package/dist/esm/ColorsDemo.mjs +97 -0
  16. package/dist/esm/DialogDemo.mjs +136 -0
  17. package/dist/esm/FormsDemo.mjs +35 -0
  18. package/dist/esm/Grid.mjs +37 -0
  19. package/dist/esm/GroupDemo.mjs +61 -0
  20. package/dist/esm/HeadingsDemo.mjs +21 -0
  21. package/dist/esm/ImageDemo.mjs +12 -0
  22. package/dist/esm/InputsDemo.mjs +36 -0
  23. package/dist/esm/LabelDemo.mjs +36 -0
  24. package/dist/esm/LinearGradientDemo.mjs +24 -0
  25. package/dist/esm/ListItemDemo.mjs +76 -0
  26. package/dist/esm/LucideIconsDemo.mjs +58 -0
  27. package/dist/esm/PopoverDemo.mjs +106 -0
  28. package/dist/esm/ProgressDemo.mjs +64 -0
  29. package/dist/esm/RadioGroupDemo.mjs +46 -0
  30. package/dist/esm/ReplaceThemeDemo.mjs +43 -0
  31. package/dist/esm/ScrollViewDemo.mjs +50 -0
  32. package/dist/esm/SelectDemo.mjs +188 -0
  33. package/dist/esm/SeparatorDemo.mjs +36 -0
  34. package/dist/esm/ShapesDemo.mjs +18 -0
  35. package/dist/esm/SheetDemo.mjs +141 -0
  36. package/dist/esm/SliderDemo.mjs +34 -0
  37. package/dist/esm/SpinnerDemo.mjs +17 -0
  38. package/dist/esm/StacksDemo.mjs +80 -0
  39. package/dist/esm/SwitchDemo.mjs +81 -0
  40. package/dist/esm/TabsAdvancedDemo.mjs +303 -0
  41. package/dist/esm/TabsDemo.mjs +158 -0
  42. package/dist/esm/TextDemo.mjs +28 -0
  43. package/dist/esm/ThemeBuilderDemo.mjs +154 -0
  44. package/dist/esm/ThemeInverseDemo.mjs +45 -0
  45. package/dist/esm/ToastDemo.mjs +98 -0
  46. package/dist/esm/ToastDuplicateDemo.mjs +48 -0
  47. package/dist/esm/ToggleGroupDemo.mjs +73 -0
  48. package/dist/esm/TokensDemo.mjs +90 -0
  49. package/dist/esm/TooltipDemo.mjs +101 -0
  50. package/dist/esm/UpdateThemeDemo.mjs +46 -0
  51. package/dist/esm/index.mjs +49 -0
  52. package/dist/esm/tamagui.config.mjs +4 -0
  53. package/dist/esm/useOnIntersecting.mjs +43 -0
  54. package/dist/jsx/AccordionDemo.mjs +58 -0
  55. package/dist/jsx/AddThemeDemo.mjs +35 -0
  56. package/dist/jsx/AlertDialogDemo.mjs +72 -0
  57. package/dist/jsx/AnimationsDemo.mjs +75 -0
  58. package/dist/jsx/AnimationsEnterDemo.mjs +40 -0
  59. package/dist/jsx/AnimationsHoverDemo.mjs +23 -0
  60. package/dist/jsx/AnimationsPresenceDemo.mjs +88 -0
  61. package/dist/jsx/AnimationsTimingDemo.mjs +22 -0
  62. package/dist/jsx/AvatarDemo.mjs +29 -0
  63. package/dist/jsx/BuildAButtonDemo.mjs +101 -0
  64. package/dist/jsx/ButtonDemo.mjs +59 -0
  65. package/dist/jsx/CardDemo.mjs +64 -0
  66. package/dist/jsx/CheckboxDemo.mjs +45 -0
  67. package/dist/jsx/ColorsDemo.mjs +97 -0
  68. package/dist/jsx/DialogDemo.mjs +136 -0
  69. package/dist/jsx/FormsDemo.mjs +35 -0
  70. package/dist/jsx/Grid.mjs +37 -0
  71. package/dist/jsx/GroupDemo.mjs +61 -0
  72. package/dist/jsx/HeadingsDemo.mjs +21 -0
  73. package/dist/jsx/ImageDemo.mjs +12 -0
  74. package/dist/jsx/InputsDemo.mjs +36 -0
  75. package/dist/jsx/LabelDemo.mjs +36 -0
  76. package/dist/jsx/LinearGradientDemo.mjs +24 -0
  77. package/dist/jsx/ListItemDemo.mjs +76 -0
  78. package/dist/jsx/LucideIconsDemo.mjs +58 -0
  79. package/dist/jsx/PopoverDemo.mjs +106 -0
  80. package/dist/jsx/ProgressDemo.mjs +64 -0
  81. package/dist/jsx/RadioGroupDemo.mjs +46 -0
  82. package/dist/jsx/ReplaceThemeDemo.mjs +43 -0
  83. package/dist/jsx/ScrollViewDemo.mjs +50 -0
  84. package/dist/jsx/SelectDemo.mjs +188 -0
  85. package/dist/jsx/SeparatorDemo.mjs +36 -0
  86. package/dist/jsx/ShapesDemo.mjs +18 -0
  87. package/dist/jsx/SheetDemo.mjs +141 -0
  88. package/dist/jsx/SliderDemo.mjs +34 -0
  89. package/dist/jsx/SpinnerDemo.mjs +17 -0
  90. package/dist/jsx/StacksDemo.mjs +80 -0
  91. package/dist/jsx/SwitchDemo.mjs +81 -0
  92. package/dist/jsx/TabsAdvancedDemo.mjs +303 -0
  93. package/dist/jsx/TabsDemo.mjs +158 -0
  94. package/dist/jsx/TextDemo.mjs +28 -0
  95. package/dist/jsx/ThemeBuilderDemo.mjs +154 -0
  96. package/dist/jsx/ThemeInverseDemo.mjs +45 -0
  97. package/dist/jsx/ToastDemo.mjs +98 -0
  98. package/dist/jsx/ToastDuplicateDemo.mjs +48 -0
  99. package/dist/jsx/ToggleGroupDemo.mjs +73 -0
  100. package/dist/jsx/TokensDemo.mjs +90 -0
  101. package/dist/jsx/TooltipDemo.mjs +101 -0
  102. package/dist/jsx/UpdateThemeDemo.mjs +46 -0
  103. package/dist/jsx/index.mjs +49 -0
  104. package/dist/jsx/tamagui.config.mjs +4 -0
  105. package/dist/jsx/useOnIntersecting.mjs +43 -0
  106. 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,4 @@
1
+ import { config } from "@tamagui/site-config";
2
+ import { config as config2 } from "@tamagui/site-config";
3
+ var tamagui_config_default = config;
4
+ export { config2 as config, tamagui_config_default as default };
@@ -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.88.13",
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.88.13",
44
- "@tamagui/button": "1.88.13",
45
- "@tamagui/core": "1.88.13",
46
- "@tamagui/list-item": "1.88.13",
47
- "@tamagui/logo": "1.88.13",
48
- "@tamagui/menu": "1.88.13",
49
- "@tamagui/popover": "1.88.13",
50
- "@tamagui/progress": "1.88.13",
51
- "@tamagui/radio-group": "1.88.13",
52
- "@tamagui/select": "1.88.13",
53
- "@tamagui/sheet": "1.88.13",
54
- "@tamagui/site-config": "1.88.13",
55
- "@tamagui/slider": "1.88.13",
56
- "@tamagui/stacks": "1.88.13",
57
- "@tamagui/toast": "1.88.13",
58
- "tamagui": "1.88.13"
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.88.13",
65
+ "@tamagui/build": "1.89.0-1706308641099",
66
66
  "react": "^18.2.0",
67
67
  "react-dom": "^18.2.0"
68
68
  },