@tamagui/demos 2.0.0-1768427228811 → 2.0.0-1768530912818

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 (59) hide show
  1. package/dist/cjs/ContextMenuDemo.cjs +179 -98
  2. package/dist/cjs/ContextMenuDemo.js +140 -87
  3. package/dist/cjs/ContextMenuDemo.js.map +1 -1
  4. package/dist/cjs/ContextMenuDemo.native.js +180 -100
  5. package/dist/cjs/ContextMenuDemo.native.js.map +1 -1
  6. package/dist/cjs/DialogDemo.cjs +1 -0
  7. package/dist/cjs/DialogDemo.js +1 -1
  8. package/dist/cjs/DialogDemo.js.map +1 -1
  9. package/dist/cjs/DialogDemo.native.js +1 -0
  10. package/dist/cjs/MenuDemo.cjs +213 -111
  11. package/dist/cjs/MenuDemo.js +204 -131
  12. package/dist/cjs/MenuDemo.js.map +1 -1
  13. package/dist/cjs/MenuDemo.native.js +214 -113
  14. package/dist/cjs/MenuDemo.native.js.map +1 -1
  15. package/dist/cjs/ToastDemo.cjs +3 -3
  16. package/dist/cjs/ToastDemo.js +3 -3
  17. package/dist/cjs/ToastDemo.js.map +1 -1
  18. package/dist/cjs/ToastDemo.native.js +3 -3
  19. package/dist/cjs/ToastDemo.native.js.map +1 -1
  20. package/dist/cjs/tamagui.config.cjs +4 -1
  21. package/dist/cjs/tamagui.config.js +4 -1
  22. package/dist/cjs/tamagui.config.js.map +1 -1
  23. package/dist/cjs/tamagui.config.native.js +4 -1
  24. package/dist/cjs/tamagui.config.native.js.map +1 -1
  25. package/dist/esm/ContextMenuDemo.js +141 -88
  26. package/dist/esm/ContextMenuDemo.js.map +1 -1
  27. package/dist/esm/ContextMenuDemo.mjs +180 -99
  28. package/dist/esm/ContextMenuDemo.mjs.map +1 -1
  29. package/dist/esm/ContextMenuDemo.native.js +180 -100
  30. package/dist/esm/ContextMenuDemo.native.js.map +1 -1
  31. package/dist/esm/DialogDemo.js +1 -1
  32. package/dist/esm/DialogDemo.js.map +1 -1
  33. package/dist/esm/DialogDemo.mjs +1 -0
  34. package/dist/esm/DialogDemo.mjs.map +1 -1
  35. package/dist/esm/DialogDemo.native.js +1 -0
  36. package/dist/esm/MenuDemo.js +213 -133
  37. package/dist/esm/MenuDemo.js.map +1 -1
  38. package/dist/esm/MenuDemo.mjs +214 -112
  39. package/dist/esm/MenuDemo.mjs.map +1 -1
  40. package/dist/esm/MenuDemo.native.js +215 -114
  41. package/dist/esm/MenuDemo.native.js.map +1 -1
  42. package/dist/esm/ToastDemo.js +3 -3
  43. package/dist/esm/ToastDemo.js.map +1 -1
  44. package/dist/esm/ToastDemo.mjs +3 -3
  45. package/dist/esm/ToastDemo.mjs.map +1 -1
  46. package/dist/esm/ToastDemo.native.js +3 -3
  47. package/dist/esm/ToastDemo.native.js.map +1 -1
  48. package/dist/esm/tamagui.config.js +5 -2
  49. package/dist/esm/tamagui.config.js.map +1 -1
  50. package/dist/esm/tamagui.config.mjs +5 -2
  51. package/dist/esm/tamagui.config.mjs.map +1 -1
  52. package/dist/esm/tamagui.config.native.js +5 -2
  53. package/dist/esm/tamagui.config.native.js.map +1 -1
  54. package/package.json +34 -34
  55. package/src/ContextMenuDemo.tsx +119 -98
  56. package/src/DialogDemo.tsx +1 -1
  57. package/src/MenuDemo.tsx +150 -106
  58. package/src/ToastDemo.tsx +3 -3
  59. package/src/tamagui.config.ts +5 -2
package/src/MenuDemo.tsx CHANGED
@@ -1,8 +1,15 @@
1
- import { styled } from '@tamagui/core'
2
- import { Backpack, Calendar, Check, ChevronRight } from '@tamagui/lucide-icons'
1
+ import {
2
+ Backpack,
3
+ Calendar,
4
+ Check,
5
+ ChevronRight,
6
+ FilePlus,
7
+ Trash2,
8
+ RefreshCw,
9
+ } from '@tamagui/lucide-icons'
3
10
  import { Menu } from '@tamagui/menu'
4
11
  import React from 'react'
5
- import { Button } from 'tamagui'
12
+ import { Button, useIsTouchDevice } from 'tamagui'
6
13
 
7
14
  /**
8
15
  * Menu Demo using Tamagui Menu component.
@@ -14,27 +21,11 @@ import { Button } from 'tamagui'
14
21
  * Note: you'll want to use createMenu() to customize further.
15
22
  */
16
23
 
17
- const Item = styled(Menu.Item, {
18
- py: 4,
19
-
20
- hoverStyle: {
21
- bg: '$color2',
22
- },
23
- pressStyle: {
24
- bg: '$color3',
25
- },
26
- })
27
-
28
- const ItemTitle = styled(Menu.ItemTitle, {
29
- color: '$color11',
30
- })
31
-
32
- Item.displayName = 'Item'
33
- ItemTitle.displayName = 'ItemTitle'
34
-
35
24
  export function MenuDemo() {
36
25
  const [bookmarksChecked, setBookmarksChecked] = React.useState(true)
37
26
  const [native, setNative] = React.useState(true)
27
+ const [subMenuOpen, setSubMenuOpen] = React.useState(false)
28
+ const isTouchDevice = useIsTouchDevice()
38
29
 
39
30
  // Note: `item` is the Event on web, undefined on native
40
31
  const onSelect = (item) => {
@@ -43,115 +34,166 @@ export function MenuDemo() {
43
34
 
44
35
  return (
45
36
  <>
46
- <Menu
47
- offset={{
48
- crossAxis: 25,
49
- }}
50
- allowFlip
51
- placement="bottom-start"
52
- >
37
+ <Menu allowFlip placement="bottom-start" offset={8}>
53
38
  <Menu.Trigger asChild>
54
- <Button rounded="$10" icon={Backpack} scaleIcon={1.2} />
39
+ <Button size="$3" circular icon={Backpack} scaleIcon={1.2} />
55
40
  </Menu.Trigger>
56
41
 
57
42
  <Menu.Portal zIndex={100}>
58
43
  <Menu.Content
59
- px={0}
44
+ p="$1.5"
45
+ minW={180}
60
46
  borderWidth={1}
61
- items="flex-start"
62
47
  borderColor="$borderColor"
63
- enterStyle={{ y: -10, opacity: 0 }}
64
- exitStyle={{ y: -10, opacity: 0 }}
65
- transition={[
66
- 'quicker',
67
- {
68
- opacity: {
69
- overshootClamping: true,
70
- },
71
- },
72
- ]}
48
+ transformOrigin="left top"
49
+ enterStyle={{ scale: 0.9, opacity: 0, y: -5 }}
50
+ exitStyle={{ scale: 0.95, opacity: 0, y: -3 }}
51
+ transition="menu"
52
+ elevation="$3"
73
53
  >
74
- <Menu.Item onSelect={onSelect} key="about-notes">
54
+ <Menu.Arrow size="$4" borderWidth={1} borderColor="$borderColor" />
55
+
56
+ <Menu.Item
57
+ onSelect={onSelect}
58
+ key="about-notes"
59
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
60
+ hoverStyle={{ bg: '$backgroundHover' }}
61
+ >
75
62
  <Menu.ItemTitle>About Notes</Menu.ItemTitle>
76
63
  </Menu.Item>
77
64
 
78
65
  <Menu.Separator />
79
66
 
80
- <Menu.Group backgroundColor="transparent">
81
- <Menu.Item onSelect={onSelect} key="settings">
82
- <Menu.ItemTitle>Settings</Menu.ItemTitle>
83
- </Menu.Item>
84
- <Menu.Item
85
- onSelect={onSelect}
86
- key="accounts"
87
- justify="space-between"
88
- // when title is nested inside a React element then you need to use `textValue`
89
- textValue="Calendar"
67
+ <Menu.Item
68
+ onSelect={onSelect}
69
+ key="settings"
70
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
71
+ hoverStyle={{ bg: '$backgroundHover' }}
72
+ >
73
+ <Menu.ItemTitle>Settings</Menu.ItemTitle>
74
+ </Menu.Item>
75
+ <Menu.Item
76
+ onSelect={onSelect}
77
+ key="accounts"
78
+ justify="space-between"
79
+ // when title is nested inside a React element then you need to use `textValue`
80
+ textValue="Calendar"
81
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
82
+ hoverStyle={{ bg: '$backgroundHover' }}
83
+ >
84
+ <Menu.ItemTitle>Calendar</Menu.ItemTitle>
85
+ <Menu.ItemIcon
86
+ androidIconName="ic_menu_today"
87
+ ios={{
88
+ name: 'calendar',
89
+ hierarchicalColor: '#000',
90
+ pointSize: 20,
91
+ }}
90
92
  >
91
- <Menu.ItemTitle>Calendar</Menu.ItemTitle>
92
- <Menu.ItemIcon
93
- androidIconName="ic_menu_today"
94
- ios={{
95
- name: 'calendar',
96
- hierarchicalColor: '#000',
97
- pointSize: 20,
98
- }}
99
- >
100
- <Calendar color="gray" size={14} />
101
- </Menu.ItemIcon>
102
- </Menu.Item>
103
- </Menu.Group>
93
+ <Calendar color="gray" size={14} />
94
+ </Menu.ItemIcon>
95
+ </Menu.Item>
104
96
 
105
97
  <Menu.Separator />
106
98
 
107
- <Menu.Group backgroundColor="transparent">
108
- <Menu.Item onSelect={onSelect} key="close-notes" disabled>
109
- <Menu.ItemTitle color="gray">locked notes</Menu.ItemTitle>
110
- </Menu.Item>
111
- <Menu.Item onSelect={onSelect} destructive key="delete-all">
112
- <Menu.ItemTitle color="red">Delete all</Menu.ItemTitle>
113
- </Menu.Item>
114
- </Menu.Group>
99
+ <Menu.Item
100
+ onSelect={onSelect}
101
+ key="close-notes"
102
+ disabled
103
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
104
+ hoverStyle={{ bg: '$backgroundHover' }}
105
+ >
106
+ <Menu.ItemTitle color="gray">Locked Notes</Menu.ItemTitle>
107
+ </Menu.Item>
108
+ <Menu.Item
109
+ onSelect={onSelect}
110
+ destructive
111
+ key="delete-all"
112
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
113
+ hoverStyle={{ bg: '$backgroundHover' }}
114
+ >
115
+ <Menu.ItemTitle color="red">Delete all</Menu.ItemTitle>
116
+ </Menu.Item>
115
117
 
116
118
  <Menu.Separator />
117
119
 
118
- {/* Submenu */}
119
- <Menu.Sub placement="right-start">
120
+ <Menu.Sub
121
+ open={subMenuOpen}
122
+ placement={isTouchDevice ? 'bottom' : 'right-start'}
123
+ onOpenChange={setSubMenuOpen}
124
+ >
120
125
  <Menu.SubTrigger
121
126
  justify="space-between"
122
127
  key="actions-trigger"
123
128
  textValue="Actions"
129
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
130
+ hoverStyle={{ bg: '$backgroundHover' }}
124
131
  >
125
- <>
126
- <Menu.ItemTitle>Actions</Menu.ItemTitle>
127
- <ChevronRight size="$1" />
128
- </>
132
+ <Menu.ItemTitle>Actions</Menu.ItemTitle>
133
+ <ChevronRight size={12} color="$color10" />
129
134
  </Menu.SubTrigger>
130
135
 
131
136
  <Menu.Portal zIndex={200}>
132
137
  <Menu.SubContent
133
- enterStyle={{ y: -10, opacity: 0 }}
134
- exitStyle={{ y: -10, opacity: 0 }}
135
- transition={[
136
- 'quicker',
137
- {
138
- opacity: {
139
- overshootClamping: true,
140
- },
141
- },
142
- ]}
143
- px={0}
138
+ enterStyle={{ scale: 0.9, opacity: 0, x: -5 }}
139
+ exitStyle={{ scale: 0.95, opacity: 0, x: -3 }}
140
+ transition="menu"
141
+ transformOrigin="left top"
142
+ elevation="$3"
143
+ minW={160}
144
+ bg="$background"
145
+ p="$1.5"
146
+ borderWidth={1}
147
+ borderColor="$borderColor"
144
148
  >
145
- <Menu.Label fontSize={'$1'}>Note settings</Menu.Label>
146
- <Item onSelect={onSelect} key="create-note" textValue="Create note">
147
- <ItemTitle>Create note</ItemTitle>
148
- </Item>
149
- <Item onSelect={onSelect} key="delete-all" textValue="Create note">
150
- <ItemTitle>Delete all notes</ItemTitle>
151
- </Item>
152
- <Item onSelect={onSelect} key="sync-all" textValue="Sync notes">
153
- <ItemTitle>Sync notes</ItemTitle>
154
- </Item>
149
+ <Menu.Label
150
+ color="$color10"
151
+ fontWeight="400"
152
+ fontSize={14}
153
+ alignSelf="flex-start"
154
+ style={{ paddingHorizontal: 8, paddingVertical: 5 }}
155
+ >
156
+ Note settings
157
+ </Menu.Label>
158
+ <Menu.Item
159
+ onSelect={onSelect}
160
+ key="create-note"
161
+ textValue="Create note"
162
+ justify="space-between"
163
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
164
+ hoverStyle={{ bg: '$backgroundHover' }}
165
+ >
166
+ <Menu.ItemTitle>Create note</Menu.ItemTitle>
167
+ <Menu.ItemIcon>
168
+ <FilePlus size={14} color="$color10" />
169
+ </Menu.ItemIcon>
170
+ </Menu.Item>
171
+ <Menu.Item
172
+ onSelect={onSelect}
173
+ key="delete-all"
174
+ textValue="Delete all notes"
175
+ justify="space-between"
176
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
177
+ hoverStyle={{ bg: '$backgroundHover' }}
178
+ >
179
+ <Menu.ItemTitle>Delete all notes</Menu.ItemTitle>
180
+ <Menu.ItemIcon>
181
+ <Trash2 size={14} color="$color10" />
182
+ </Menu.ItemIcon>
183
+ </Menu.Item>
184
+ <Menu.Item
185
+ onSelect={onSelect}
186
+ key="sync-all"
187
+ textValue="Sync notes"
188
+ justify="space-between"
189
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
190
+ hoverStyle={{ bg: '$backgroundHover' }}
191
+ >
192
+ <Menu.ItemTitle>Sync notes</Menu.ItemTitle>
193
+ <Menu.ItemIcon>
194
+ <RefreshCw size={14} color="$color10" />
195
+ </Menu.ItemIcon>
196
+ </Menu.Item>
155
197
  </Menu.SubContent>
156
198
  </Menu.Portal>
157
199
  </Menu.Sub>
@@ -162,26 +204,28 @@ export function MenuDemo() {
162
204
  key="show-hidden"
163
205
  checked={bookmarksChecked}
164
206
  onCheckedChange={setBookmarksChecked}
165
- gap={'$2'}
207
+ justify="space-between"
208
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
209
+ hoverStyle={{ bg: '$backgroundHover' }}
166
210
  >
167
211
  <Menu.ItemTitle>Mark as read</Menu.ItemTitle>
168
212
  <Menu.ItemIndicator>
169
- <Check size="$1" />
213
+ <Check size={12} color="$color10" />
170
214
  </Menu.ItemIndicator>
171
215
  </Menu.CheckboxItem>
172
216
  <Menu.CheckboxItem
173
217
  key="show-other-notes"
174
218
  checked={native}
175
219
  onCheckedChange={setNative}
176
- gap={'$2'}
220
+ justify="space-between"
221
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
222
+ hoverStyle={{ bg: '$backgroundHover' }}
177
223
  >
178
224
  <Menu.ItemTitle>Enable Native</Menu.ItemTitle>
179
225
  <Menu.ItemIndicator>
180
- <Check size="$1" />
226
+ <Check size={12} color="$color10" />
181
227
  </Menu.ItemIndicator>
182
228
  </Menu.CheckboxItem>
183
-
184
- <Menu.Arrow size={'$2'} />
185
229
  </Menu.Content>
186
230
  </Menu.Portal>
187
231
  </Menu>
package/src/ToastDemo.tsx CHANGED
@@ -30,11 +30,11 @@ const CurrentToast = () => {
30
30
  key={currentToast.id}
31
31
  duration={currentToast.duration}
32
32
  viewportName={currentToast.viewportName}
33
- enterStyle={{ opacity: 0, scale: 0.95, y: 50 }}
34
- exitStyle={{ opacity: 0, scale: 0.95, y: 50 }}
33
+ enterStyle={{ opacity: 0, scale: 0.95, y: -80 }}
34
+ exitStyle={{ opacity: 0, scale: 0.95, y: -80 }}
35
35
  opacity={1}
36
36
  scale={1}
37
- y={0}
37
+ y={-50}
38
38
  transition="quicker"
39
39
  bg="$color2"
40
40
  boxShadow="0px 2px 4px rgba(0,0,0,0.12), 0px 8px 24px rgba(0,0,0,0.08)"
@@ -1,7 +1,10 @@
1
1
  import { createTamagui } from 'tamagui'
2
- import { config } from '@tamagui/tamagui-dev-config'
2
+ import { config, animationsMotion } from '@tamagui/tamagui-dev-config'
3
3
 
4
- const tamaConf = createTamagui(config)
4
+ const tamaConf = createTamagui({
5
+ ...config,
6
+ animations: animationsMotion,
7
+ })
5
8
 
6
9
  export type Conf = typeof tamaConf
7
10