@tamagui/demos 1.58.7 → 1.59.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.
@@ -26,15 +26,36 @@ var import_lucide_icons = require("@tamagui/lucide-icons");
26
26
  var import_sheet = require("@tamagui/sheet");
27
27
  var import_react = require("react");
28
28
  var import_tamagui = require("tamagui");
29
+ const spModes = ["percent", "constant", "fit", "mixed"];
29
30
  const SheetDemo = () => {
30
31
  const [position, setPosition] = (0, import_react.useState)(0);
31
32
  const [open, setOpen] = (0, import_react.useState)(false);
32
33
  const [modal, setModal] = (0, import_react.useState)(true);
33
34
  const [innerOpen, setInnerOpen] = (0, import_react.useState)(false);
35
+ const [snapPointsMode, setSnapPointsMode] = (0, import_react.useState)("percent");
36
+ const [mixedFitDemo, setMixedFitDemo] = (0, import_react.useState)(false);
37
+ const isPercent = snapPointsMode === "percent";
38
+ const isConstant = snapPointsMode === "constant";
39
+ const isFit = snapPointsMode === "fit";
40
+ const isMixed = snapPointsMode === "mixed";
41
+ const hasFit = isFit || isMixed && mixedFitDemo;
42
+ const snapPoints = isPercent ? [85, 50, 25] : isConstant ? [256, 190] : isFit ? void 0 : mixedFitDemo ? ["fit", 190] : ["80%", 256, 190];
34
43
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
35
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.XStack, { space: true, children: [
36
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Button, { onPress: () => setOpen(true), children: "Open" }),
37
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Button, { onPress: () => setModal((x) => !x), children: modal ? "Type: Modal" : "Type: Inline" })
44
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.YStack, { space: true, children: [
45
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tamagui.XStack, { space: true, $sm: { flexDirection: "column", alignItems: "center" }, children: [
46
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Button, { onPress: () => setOpen(true), children: "Open" }),
47
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Button, { onPress: () => setModal((x) => !x), children: modal ? "Type: Modal" : "Type: Inline" }),
48
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
49
+ import_tamagui.Button,
50
+ {
51
+ onPress: () => setSnapPointsMode(
52
+ (prev) => spModes[(spModes.indexOf(prev) + 1) % spModes.length]
53
+ ),
54
+ children: `Mode: ${{ percent: "Percentage", constant: "Constant", fit: "Fit", mixed: "Mixed" }[snapPointsMode]}`
55
+ }
56
+ )
57
+ ] }),
58
+ isMixed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Button, { onPress: () => setMixedFitDemo((x) => !x), children: `Snap Points: ${JSON.stringify(snapPoints)}` }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.XStack, { paddingVertical: "$2.5", justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Paragraph, { children: `Snap Points: ${isFit ? "(none)" : JSON.stringify(snapPoints)}` }) })
38
59
  ] }),
39
60
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
40
61
  import_sheet.Sheet,
@@ -43,7 +64,8 @@ const SheetDemo = () => {
43
64
  modal,
44
65
  open,
45
66
  onOpenChange: setOpen,
46
- snapPoints: [85, 50, 25],
67
+ snapPoints,
68
+ snapPointsMode,
47
69
  dismissOnSnapToBottom: true,
48
70
  position,
49
71
  onPositionChange: setPosition,
@@ -67,10 +89,11 @@ const SheetDemo = () => {
67
89
  justifyContent: "center",
68
90
  alignItems: "center",
69
91
  space: "$5",
92
+ ...hasFit && { minHeight: 320, flexShrink: 0 },
70
93
  children: [
71
94
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Button, { size: "$6", circular: true, icon: import_lucide_icons.ChevronDown, onPress: () => setOpen(false) }),
72
95
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tamagui.Input, { width: 200 }),
73
- modal && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
96
+ modal && isPercent && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
74
97
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InnerSheet, { open: innerOpen, onOpenChange: setInnerOpen }),
75
98
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
99
  import_tamagui.Button,
@@ -86,7 +109,8 @@ const SheetDemo = () => {
86
109
  }
87
110
  )
88
111
  ]
89
- }
112
+ },
113
+ hasFit ? "fit" : "no-fit"
90
114
  )
91
115
  ] });
92
116
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/SheetDemo.tsx"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaM;AAbN,0BAAuC;AACvC,mBAA4C;AAC5C,mBAAyB;AACzB,qBAAyD;AAElD,MAAM,YAAY,MAAM;AAC7B,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,CAAC;AAC1C,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AACtC,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAS,IAAI;AACvC,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,KAAK;AAEhD,SACE,4EACE;AAAA,iDAAC,yBAAO,OAAK,MACX;AAAA,kDAAC,yBAAO,SAAS,MAAM,QAAQ,IAAI,GAAG,kBAAI;AAAA,MAC1C,4CAAC,yBAAO,SAAS,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,GACtC,kBAAQ,gBAAgB,gBAC3B;AAAA,OACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,0BAA0B;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,YAAY,CAAC,IAAI,IAAI,EAAE;AAAA,QACvB,uBAAqB;AAAA,QACrB;AAAA,QACA,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAU;AAAA,QAEV;AAAA;AAAA,YAAC,mBAAM;AAAA,YAAN;AAAA,cACC,WAAU;AAAA,cACV,YAAY,EAAE,SAAS,EAAE;AAAA,cACzB,WAAW,EAAE,SAAS,EAAE;AAAA;AAAA,UAC1B;AAAA,UACA,4CAAC,mBAAM,QAAN,EAAa;AAAA,UACd;AAAA,YAAC,mBAAM;AAAA,YAAN;AAAA,cACC,MAAM;AAAA,cACN,SAAQ;AAAA,cACR,gBAAe;AAAA,cACf,YAAW;AAAA,cACX,OAAM;AAAA,cAEN;AAAA,4DAAC,yBAAO,MAAK,MAAK,UAAQ,MAAC,MAAM,iCAAa,SAAS,MAAM,QAAQ,KAAK,GAAG;AAAA,gBAC7E,4CAAC,wBAAM,OAAO,KAAK;AAAA,gBAClB,SACC,4EACE;AAAA,8DAAC,cAAW,MAAM,WAAW,cAAc,cAAc;AAAA,kBACzD;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,UAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,SAAS,MAAM,aAAa,IAAI;AAAA;AAAA,kBAClC;AAAA,mBACF;AAAA;AAAA;AAAA,UAEJ;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,OAAmB;AACrC,SACE,6CAAC,sBAAM,OAAK,MAAC,YAAY,CAAC,EAAE,GAAG,uBAAqB,MAAE,GAAG,OACvD;AAAA,gDAAC,mBAAM,SAAN,EAAc;AAAA,IACf,4CAAC,mBAAM,QAAN,EAAa;AAAA,IACd,4CAAC,mBAAM,OAAN,EAAY,MAAM,GAAG,gBAAe,UAAS,YAAW,UAAS,OAAM,MACtE,uDAAC,mBAAM,YAAN,EAAiB,SAAQ,MAAK,OAAK,MAClC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAQ;AAAA,UACR,WAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS,MAAG;AA5ExB;AA4E2B,+BAAM,iBAAN,+BAAqB;AAAA;AAAA;AAAA,MACtC;AAAA,MACA,4CAAC,qBAAG,yBAAW;AAAA,MACf,4CAAC,qBAAG,+BAAiB;AAAA,MACpB,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACd,4CAAC,4BAAkB,MAAK,OAAM,0XAAd,CAMhB,CACD;AAAA,OACH,GACF;AAAA,KACF;AAEJ;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -2,16 +2,37 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { ChevronDown, ChevronUp } from "@tamagui/lucide-icons";
3
3
  import { Sheet } from "@tamagui/sheet";
4
4
  import { useState } from "react";
5
- import { Button, H1, H2, Input, Paragraph, XStack } from "tamagui";
5
+ import { Button, H1, H2, Input, Paragraph, XStack, YStack } from "tamagui";
6
+ const spModes = ["percent", "constant", "fit", "mixed"];
6
7
  const SheetDemo = () => {
7
8
  const [position, setPosition] = useState(0);
8
9
  const [open, setOpen] = useState(false);
9
10
  const [modal, setModal] = useState(true);
10
11
  const [innerOpen, setInnerOpen] = useState(false);
12
+ const [snapPointsMode, setSnapPointsMode] = useState("percent");
13
+ const [mixedFitDemo, setMixedFitDemo] = useState(false);
14
+ const isPercent = snapPointsMode === "percent";
15
+ const isConstant = snapPointsMode === "constant";
16
+ const isFit = snapPointsMode === "fit";
17
+ const isMixed = snapPointsMode === "mixed";
18
+ const hasFit = isFit || isMixed && mixedFitDemo;
19
+ const snapPoints = isPercent ? [85, 50, 25] : isConstant ? [256, 190] : isFit ? void 0 : mixedFitDemo ? ["fit", 190] : ["80%", 256, 190];
11
20
  return /* @__PURE__ */ jsxs(Fragment, { children: [
12
- /* @__PURE__ */ jsxs(XStack, { space: true, children: [
13
- /* @__PURE__ */ jsx(Button, { onPress: () => setOpen(true), children: "Open" }),
14
- /* @__PURE__ */ jsx(Button, { onPress: () => setModal((x) => !x), children: modal ? "Type: Modal" : "Type: Inline" })
21
+ /* @__PURE__ */ jsxs(YStack, { space: true, children: [
22
+ /* @__PURE__ */ jsxs(XStack, { space: true, $sm: { flexDirection: "column", alignItems: "center" }, children: [
23
+ /* @__PURE__ */ jsx(Button, { onPress: () => setOpen(true), children: "Open" }),
24
+ /* @__PURE__ */ jsx(Button, { onPress: () => setModal((x) => !x), children: modal ? "Type: Modal" : "Type: Inline" }),
25
+ /* @__PURE__ */ jsx(
26
+ Button,
27
+ {
28
+ onPress: () => setSnapPointsMode(
29
+ (prev) => spModes[(spModes.indexOf(prev) + 1) % spModes.length]
30
+ ),
31
+ children: `Mode: ${{ percent: "Percentage", constant: "Constant", fit: "Fit", mixed: "Mixed" }[snapPointsMode]}`
32
+ }
33
+ )
34
+ ] }),
35
+ isMixed ? /* @__PURE__ */ jsx(Button, { onPress: () => setMixedFitDemo((x) => !x), children: `Snap Points: ${JSON.stringify(snapPoints)}` }) : /* @__PURE__ */ jsx(XStack, { paddingVertical: "$2.5", justifyContent: "center", children: /* @__PURE__ */ jsx(Paragraph, { children: `Snap Points: ${isFit ? "(none)" : JSON.stringify(snapPoints)}` }) })
15
36
  ] }),
16
37
  /* @__PURE__ */ jsxs(
17
38
  Sheet,
@@ -20,7 +41,8 @@ const SheetDemo = () => {
20
41
  modal,
21
42
  open,
22
43
  onOpenChange: setOpen,
23
- snapPoints: [85, 50, 25],
44
+ snapPoints,
45
+ snapPointsMode,
24
46
  dismissOnSnapToBottom: true,
25
47
  position,
26
48
  onPositionChange: setPosition,
@@ -44,10 +66,11 @@ const SheetDemo = () => {
44
66
  justifyContent: "center",
45
67
  alignItems: "center",
46
68
  space: "$5",
69
+ ...hasFit && { minHeight: 320, flexShrink: 0 },
47
70
  children: [
48
71
  /* @__PURE__ */ jsx(Button, { size: "$6", circular: true, icon: ChevronDown, onPress: () => setOpen(false) }),
49
72
  /* @__PURE__ */ jsx(Input, { width: 200 }),
50
- modal && /* @__PURE__ */ jsxs(Fragment, { children: [
73
+ modal && isPercent && /* @__PURE__ */ jsxs(Fragment, { children: [
51
74
  /* @__PURE__ */ jsx(InnerSheet, { open: innerOpen, onOpenChange: setInnerOpen }),
52
75
  /* @__PURE__ */ jsx(
53
76
  Button,
@@ -63,7 +86,8 @@ const SheetDemo = () => {
63
86
  }
64
87
  )
65
88
  ]
66
- }
89
+ },
90
+ hasFit ? "fit" : "no-fit"
67
91
  )
68
92
  ] });
69
93
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/SheetDemo.tsx"],
4
- "mappings": "AAaM,SAmCM,UAlCJ,KADF;AAbN,SAAS,aAAa,iBAAiB;AACvC,SAAS,aAAmC;AAC5C,SAAS,gBAAgB;AACzB,SAAS,QAAQ,IAAI,IAAI,OAAO,WAAW,cAAc;AAElD,MAAM,YAAY,MAAM;AAC7B,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAC;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,IAAI;AACvC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,SACE,iCACE;AAAA,yBAAC,UAAO,OAAK,MACX;AAAA,0BAAC,UAAO,SAAS,MAAM,QAAQ,IAAI,GAAG,kBAAI;AAAA,MAC1C,oBAAC,UAAO,SAAS,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,GACtC,kBAAQ,gBAAgB,gBAC3B;AAAA,OACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,0BAA0B;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,YAAY,CAAC,IAAI,IAAI,EAAE;AAAA,QACvB,uBAAqB;AAAA,QACrB;AAAA,QACA,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,WAAU;AAAA,QAEV;AAAA;AAAA,YAAC,MAAM;AAAA,YAAN;AAAA,cACC,WAAU;AAAA,cACV,YAAY,EAAE,SAAS,EAAE;AAAA,cACzB,WAAW,EAAE,SAAS,EAAE;AAAA;AAAA,UAC1B;AAAA,UACA,oBAAC,MAAM,QAAN,EAAa;AAAA,UACd;AAAA,YAAC,MAAM;AAAA,YAAN;AAAA,cACC,MAAM;AAAA,cACN,SAAQ;AAAA,cACR,gBAAe;AAAA,cACf,YAAW;AAAA,cACX,OAAM;AAAA,cAEN;AAAA,oCAAC,UAAO,MAAK,MAAK,UAAQ,MAAC,MAAM,aAAa,SAAS,MAAM,QAAQ,KAAK,GAAG;AAAA,gBAC7E,oBAAC,SAAM,OAAO,KAAK;AAAA,gBAClB,SACC,iCACE;AAAA,sCAAC,cAAW,MAAM,WAAW,cAAc,cAAc;AAAA,kBACzD;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,UAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,SAAS,MAAM,aAAa,IAAI;AAAA;AAAA,kBAClC;AAAA,mBACF;AAAA;AAAA;AAAA,UAEJ;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,OAAmB;AACrC,SACE,qBAAC,SAAM,OAAK,MAAC,YAAY,CAAC,EAAE,GAAG,uBAAqB,MAAE,GAAG,OACvD;AAAA,wBAAC,MAAM,SAAN,EAAc;AAAA,IACf,oBAAC,MAAM,QAAN,EAAa;AAAA,IACd,oBAAC,MAAM,OAAN,EAAY,MAAM,GAAG,gBAAe,UAAS,YAAW,UAAS,OAAM,MACtE,+BAAC,MAAM,YAAN,EAAiB,SAAQ,MAAK,OAAK,MAClC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAQ;AAAA,UACR,WAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS,MAAG;AA5ExB;AA4E2B,+BAAM,iBAAN,+BAAqB;AAAA;AAAA;AAAA,MACtC;AAAA,MACA,oBAAC,MAAG,yBAAW;AAAA,MACf,oBAAC,MAAG,+BAAiB;AAAA,MACpB,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACd,oBAAC,aAAkB,MAAK,OAAM,0XAAd,CAMhB,CACD;AAAA,OACH,GACF;AAAA,KACF;AAEJ;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1,23 +1,42 @@
1
1
  import { ChevronDown, ChevronUp } from "@tamagui/lucide-icons";
2
2
  import { Sheet } from "@tamagui/sheet";
3
3
  import { useState } from "react";
4
- import { Button, H1, H2, Input, Paragraph, XStack } from "tamagui";
4
+ import { Button, H1, H2, Input, Paragraph, XStack, YStack } from "tamagui";
5
+ const spModes = ["percent", "constant", "fit", "mixed"];
5
6
  const SheetDemo = () => {
6
7
  const [position, setPosition] = useState(0);
7
8
  const [open, setOpen] = useState(false);
8
9
  const [modal, setModal] = useState(true);
9
10
  const [innerOpen, setInnerOpen] = useState(false);
11
+ const [snapPointsMode, setSnapPointsMode] = useState("percent");
12
+ const [mixedFitDemo, setMixedFitDemo] = useState(false);
13
+ const isPercent = snapPointsMode === "percent";
14
+ const isConstant = snapPointsMode === "constant";
15
+ const isFit = snapPointsMode === "fit";
16
+ const isMixed = snapPointsMode === "mixed";
17
+ const hasFit = isFit || isMixed && mixedFitDemo;
18
+ const snapPoints = isPercent ? [85, 50, 25] : isConstant ? [256, 190] : isFit ? void 0 : mixedFitDemo ? ["fit", 190] : ["80%", 256, 190];
10
19
  return <>
11
- <XStack space>
12
- <Button onPress={() => setOpen(true)}>Open</Button>
13
- <Button onPress={() => setModal((x) => !x)}>{modal ? "Type: Modal" : "Type: Inline"}</Button>
14
- </XStack>
20
+ <YStack space>
21
+ <XStack space $sm={{ flexDirection: "column", alignItems: "center" }}>
22
+ <Button onPress={() => setOpen(true)}>Open</Button>
23
+ <Button onPress={() => setModal((x) => !x)}>{modal ? "Type: Modal" : "Type: Inline"}</Button>
24
+ <Button
25
+ onPress={() => setSnapPointsMode(
26
+ (prev) => spModes[(spModes.indexOf(prev) + 1) % spModes.length]
27
+ )}
28
+ >{`Mode: ${{ percent: "Percentage", constant: "Constant", fit: "Fit", mixed: "Mixed" }[snapPointsMode]}`}</Button>
29
+ </XStack>
30
+ {isMixed ? <Button onPress={() => setMixedFitDemo((x) => !x)}>{`Snap Points: ${JSON.stringify(snapPoints)}`}</Button> : <XStack paddingVertical="$2.5" justifyContent="center"><Paragraph>{`Snap Points: ${isFit ? "(none)" : JSON.stringify(snapPoints)}`}</Paragraph></XStack>}
31
+ </YStack>
15
32
  <Sheet
33
+ key={hasFit ? "fit" : "no-fit"}
16
34
  forceRemoveScrollEnabled={open}
17
35
  modal={modal}
18
36
  open={open}
19
37
  onOpenChange={setOpen}
20
- snapPoints={[85, 50, 25]}
38
+ snapPoints={snapPoints}
39
+ snapPointsMode={snapPointsMode}
21
40
  dismissOnSnapToBottom
22
41
  position={position}
23
42
  onPositionChange={setPosition}
@@ -36,10 +55,11 @@ const SheetDemo = () => {
36
55
  justifyContent="center"
37
56
  alignItems="center"
38
57
  space="$5"
58
+ {...hasFit && { minHeight: 320, flexShrink: 0 }}
39
59
  >
40
60
  <Button size="$6" circular icon={ChevronDown} onPress={() => setOpen(false)} />
41
61
  <Input width={200} />
42
- {modal && <>
62
+ {modal && isPercent && <>
43
63
  <InnerSheet open={innerOpen} onOpenChange={setInnerOpen} />
44
64
  <Button
45
65
  size="$6"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/SheetDemo.tsx"],
4
- "mappings": "AAAA,SAAS,aAAa,iBAAiB;AACvC,SAAS,aAAmC;AAC5C,SAAS,gBAAgB;AACzB,SAAS,QAAQ,IAAI,IAAI,OAAO,WAAW,cAAc;AAElD,MAAM,YAAY,MAAM;AAC7B,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAC;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,IAAI;AACvC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,SACE;AAAA,IACE,CAAC,OAAO;AAAA,MACN,CAAC,OAAO,SAAS,MAAM,QAAQ,IAAI,GAAG,IAAI,EAAzC;AAAA,MACD,CAAC,OAAO,SAAS,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,IACtC,QAAQ,gBAAgB,eAC3B,EAFC;AAAA,IAGH,EALC;AAAA,IAOD,CAAC;AAAA,MACC,0BAA0B;AAAA,MAC1B,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,YAAY,CAAC,IAAI,IAAI,EAAE;AAAA,MACvB;AAAA,MACA,UAAU;AAAA,MACV,kBAAkB;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU;AAAA;AAAA,MAEV,CAAC,MAAM;AAAA,QACL,UAAU;AAAA,QACV,YAAY,EAAE,SAAS,EAAE;AAAA,QACzB,WAAW,EAAE,SAAS,EAAE;AAAA,MAC1B;AAAA,MACA,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,WAAW;AAAA,QACX,MAAM;AAAA;AAAA,QAEN,CAAC,OAAO,KAAK,KAAK,SAAS,MAAM,aAAa,SAAS,MAAM,QAAQ,KAAK,GAAG;AAAA,QAC7E,CAAC,MAAM,OAAO,KAAK;AAAA,SAClB,SACC;AAAA,UACE,CAAC,WAAW,MAAM,WAAW,cAAc,cAAc;AAAA,UACzD,CAAC;AAAA,YACC,KAAK;AAAA,YACL;AAAA,YACA,MAAM;AAAA,YACN,SAAS,MAAM,aAAa,IAAI;AAAA,UAClC;AAAA,QACF;AAAA,MAEJ,EApBC,MAAM;AAAA,IAqBT,EAvCC;AAAA,EAwCH;AAEJ;AAEA,SAAS,WAAW,OAAmB;AACrC,SACE,CAAC,MAAM,MAAM,YAAY,CAAC,EAAE,GAAG,0BAA0B;AAAA,IACvD,CAAC,MAAM,QAAQ;AAAA,IACf,CAAC,MAAM,OAAO;AAAA,IACd,CAAC,MAAM,MAAM,MAAM,GAAG,eAAe,SAAS,WAAW,SAAS,MAAM,KACtE,CAAC,MAAM,WAAW,QAAQ,KAAK;AAAA,MAC7B,CAAC;AAAA,QACC,KAAK;AAAA,QACL;AAAA,QACA,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,MAAM,MAAM,eAAe,KAAK;AAAA,MAC3C;AAAA,MACA,CAAC,GAAG,WAAW,EAAd;AAAA,MACD,CAAC,GAAG,iBAAiB,EAApB;AAAA,OACA,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACd,CAAC,UAAU,KAAK,GAAG,KAAK,MAAM,0WAM9B,EANC,UAOF;AAAA,IACH,EAnBC,MAAM,WAoBT,EArBC,MAAM;AAAA,EAsBT,EAzBC;AA2BL;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/demos",
3
- "version": "1.58.7",
3
+ "version": "1.59.0",
4
4
  "sideEffects": [
5
5
  "*.css"
6
6
  ],
@@ -33,29 +33,29 @@
33
33
  }
34
34
  },
35
35
  "dependencies": {
36
- "@tamagui/avatar": "1.58.7",
37
- "@tamagui/button": "1.58.7",
38
- "@tamagui/core": "1.58.7",
39
- "@tamagui/list-item": "1.58.7",
40
- "@tamagui/logo": "1.58.7",
41
- "@tamagui/menu": "1.58.7",
42
- "@tamagui/popover": "1.58.7",
43
- "@tamagui/progress": "1.58.7",
44
- "@tamagui/radio-group": "1.58.7",
45
- "@tamagui/select": "1.58.7",
46
- "@tamagui/sheet": "1.58.7",
47
- "@tamagui/site-config": "1.58.7",
48
- "@tamagui/slider": "1.58.7",
49
- "@tamagui/stacks": "1.58.7",
50
- "@tamagui/toast": "1.58.7",
51
- "tamagui": "1.58.7"
36
+ "@tamagui/avatar": "1.59.0",
37
+ "@tamagui/button": "1.59.0",
38
+ "@tamagui/core": "1.59.0",
39
+ "@tamagui/list-item": "1.59.0",
40
+ "@tamagui/logo": "1.59.0",
41
+ "@tamagui/menu": "1.59.0",
42
+ "@tamagui/popover": "1.59.0",
43
+ "@tamagui/progress": "1.59.0",
44
+ "@tamagui/radio-group": "1.59.0",
45
+ "@tamagui/select": "1.59.0",
46
+ "@tamagui/sheet": "1.59.0",
47
+ "@tamagui/site-config": "1.59.0",
48
+ "@tamagui/slider": "1.59.0",
49
+ "@tamagui/stacks": "1.59.0",
50
+ "@tamagui/toast": "1.59.0",
51
+ "tamagui": "1.59.0"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "react": "*",
55
55
  "react-dom": "*"
56
56
  },
57
57
  "devDependencies": {
58
- "@tamagui/build": "1.58.7",
58
+ "@tamagui/build": "1.59.0",
59
59
  "react": "^18.2.0",
60
60
  "react-dom": "^18.2.0"
61
61
  },
package/src/SheetDemo.tsx CHANGED
@@ -1,29 +1,78 @@
1
1
  import { ChevronDown, ChevronUp } from '@tamagui/lucide-icons'
2
2
  import { Sheet, SheetProps, useSheet } from '@tamagui/sheet'
3
3
  import { useState } from 'react'
4
- import { Button, H1, H2, Input, Paragraph, XStack } from 'tamagui'
4
+ import { Button, H1, H2, Input, Paragraph, XStack, YStack } from 'tamagui'
5
+
6
+ const spModes = ['percent', 'constant', 'fit', 'mixed'] as const
5
7
 
6
8
  export const SheetDemo = () => {
7
9
  const [position, setPosition] = useState(0)
8
10
  const [open, setOpen] = useState(false)
9
11
  const [modal, setModal] = useState(true)
10
12
  const [innerOpen, setInnerOpen] = useState(false)
13
+ const [snapPointsMode, setSnapPointsMode] =
14
+ useState<(typeof spModes)[number]>('percent')
15
+ const [mixedFitDemo, setMixedFitDemo] = useState(false)
16
+
17
+ const isPercent = snapPointsMode === 'percent'
18
+ const isConstant = snapPointsMode === 'constant'
19
+ const isFit = snapPointsMode === 'fit'
20
+ const isMixed = snapPointsMode === 'mixed'
21
+ const hasFit = isFit || (isMixed && mixedFitDemo)
22
+ const snapPoints = isPercent
23
+ ? [85, 50, 25]
24
+ : isConstant
25
+ ? [256, 190]
26
+ : isFit
27
+ ? undefined
28
+ : mixedFitDemo
29
+ ? ['fit', 190]
30
+ : ['80%', 256, 190]
11
31
 
12
32
  return (
13
33
  <>
14
- <XStack space>
15
- <Button onPress={() => setOpen(true)}>Open</Button>
16
- <Button onPress={() => setModal((x) => !x)}>
17
- {modal ? 'Type: Modal' : 'Type: Inline'}
18
- </Button>
19
- </XStack>
34
+ <YStack space>
35
+ <XStack space $sm={{ flexDirection: 'column', alignItems: 'center' }}>
36
+ <Button onPress={() => setOpen(true)}>Open</Button>
37
+ <Button onPress={() => setModal((x) => !x)}>
38
+ {modal ? 'Type: Modal' : 'Type: Inline'}
39
+ </Button>
40
+ <Button
41
+ onPress={() =>
42
+ setSnapPointsMode(
43
+ (prev) => spModes[(spModes.indexOf(prev) + 1) % spModes.length]
44
+ )
45
+ }
46
+ >
47
+ {`Mode: ${
48
+ { percent: 'Percentage', constant: 'Constant', fit: 'Fit', mixed: 'Mixed' }[
49
+ snapPointsMode
50
+ ]
51
+ }`}
52
+ </Button>
53
+ </XStack>
54
+ {isMixed ? (
55
+ <Button onPress={() => setMixedFitDemo((x) => !x)}>
56
+ {`Snap Points: ${JSON.stringify(snapPoints)}`}
57
+ </Button>
58
+ ) : (
59
+ <XStack paddingVertical="$2.5" justifyContent="center">
60
+ <Paragraph>{`Snap Points: ${
61
+ isFit ? '(none)' : JSON.stringify(snapPoints)
62
+ }`}</Paragraph>
63
+ </XStack>
64
+ )}
65
+ </YStack>
20
66
 
21
67
  <Sheet
68
+ // force remount when switching to fit modes to avoid weird measurement loop
69
+ key={hasFit ? 'fit' : 'no-fit'}
22
70
  forceRemoveScrollEnabled={open}
23
71
  modal={modal}
24
72
  open={open}
25
73
  onOpenChange={setOpen}
26
- snapPoints={[85, 50, 25]}
74
+ snapPoints={snapPoints}
75
+ snapPointsMode={snapPointsMode}
27
76
  dismissOnSnapToBottom
28
77
  position={position}
29
78
  onPositionChange={setPosition}
@@ -42,10 +91,11 @@ export const SheetDemo = () => {
42
91
  justifyContent="center"
43
92
  alignItems="center"
44
93
  space="$5"
94
+ {...(hasFit && { minHeight: 320, flexShrink: 0 })}
45
95
  >
46
96
  <Button size="$6" circular icon={ChevronDown} onPress={() => setOpen(false)} />
47
97
  <Input width={200} />
48
- {modal && (
98
+ {modal && isPercent && (
49
99
  <>
50
100
  <InnerSheet open={innerOpen} onOpenChange={setInnerOpen} />
51
101
  <Button
@@ -1 +1 @@
1
- {"version":3,"file":"SheetDemo.d.ts","sourceRoot":"","sources":["../src/SheetDemo.tsx"],"names":[],"mappings":";AAKA,eAAO,MAAM,SAAS,mBAyDrB,CAAA"}
1
+ {"version":3,"file":"SheetDemo.d.ts","sourceRoot":"","sources":["../src/SheetDemo.tsx"],"names":[],"mappings":";AAOA,eAAO,MAAM,SAAS,mBAyGrB,CAAA"}