@tamagui/demos 2.0.0-1768326993354 → 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 (113) hide show
  1. package/dist/cjs/AccordionDemo.cjs +1 -0
  2. package/dist/cjs/AccordionDemo.js +1 -1
  3. package/dist/cjs/AccordionDemo.js.map +1 -1
  4. package/dist/cjs/AccordionDemo.native.js +3 -1
  5. package/dist/cjs/AccordionDemo.native.js.map +1 -1
  6. package/dist/cjs/ContextMenuDemo.cjs +179 -98
  7. package/dist/cjs/ContextMenuDemo.js +140 -87
  8. package/dist/cjs/ContextMenuDemo.js.map +1 -1
  9. package/dist/cjs/ContextMenuDemo.native.js +180 -100
  10. package/dist/cjs/ContextMenuDemo.native.js.map +1 -1
  11. package/dist/cjs/DialogDemo.cjs +1 -0
  12. package/dist/cjs/DialogDemo.js +1 -1
  13. package/dist/cjs/DialogDemo.js.map +1 -1
  14. package/dist/cjs/DialogDemo.native.js +1 -0
  15. package/dist/cjs/LabelDemo.cjs +1 -1
  16. package/dist/cjs/LabelDemo.js +1 -1
  17. package/dist/cjs/LabelDemo.js.map +1 -1
  18. package/dist/cjs/LabelDemo.native.js +1 -1
  19. package/dist/cjs/MenuDemo.cjs +213 -111
  20. package/dist/cjs/MenuDemo.js +204 -131
  21. package/dist/cjs/MenuDemo.js.map +1 -1
  22. package/dist/cjs/MenuDemo.native.js +214 -113
  23. package/dist/cjs/MenuDemo.native.js.map +1 -1
  24. package/dist/cjs/PopoverDemo.cjs +1 -1
  25. package/dist/cjs/PopoverDemo.js +1 -1
  26. package/dist/cjs/PopoverDemo.js.map +1 -1
  27. package/dist/cjs/PopoverDemo.native.js +1 -1
  28. package/dist/cjs/PopoverDemo.native.js.map +1 -1
  29. package/dist/cjs/SwitchDemo.cjs +1 -1
  30. package/dist/cjs/SwitchDemo.js +1 -1
  31. package/dist/cjs/SwitchDemo.js.map +1 -1
  32. package/dist/cjs/SwitchDemo.native.js +1 -1
  33. package/dist/cjs/SwitchUnstyledDemo.cjs +1 -1
  34. package/dist/cjs/SwitchUnstyledDemo.js +1 -1
  35. package/dist/cjs/SwitchUnstyledDemo.js.map +1 -1
  36. package/dist/cjs/SwitchUnstyledDemo.native.js +1 -1
  37. package/dist/cjs/ToastDemo.cjs +29 -17
  38. package/dist/cjs/ToastDemo.js +14 -9
  39. package/dist/cjs/ToastDemo.js.map +1 -1
  40. package/dist/cjs/ToastDemo.native.js +29 -17
  41. package/dist/cjs/ToastDemo.native.js.map +1 -1
  42. package/dist/cjs/tamagui.config.cjs +4 -1
  43. package/dist/cjs/tamagui.config.js +4 -1
  44. package/dist/cjs/tamagui.config.js.map +1 -1
  45. package/dist/cjs/tamagui.config.native.js +4 -1
  46. package/dist/cjs/tamagui.config.native.js.map +1 -1
  47. package/dist/esm/AccordionDemo.js +1 -1
  48. package/dist/esm/AccordionDemo.js.map +1 -1
  49. package/dist/esm/AccordionDemo.mjs +1 -0
  50. package/dist/esm/AccordionDemo.mjs.map +1 -1
  51. package/dist/esm/AccordionDemo.native.js +3 -1
  52. package/dist/esm/AccordionDemo.native.js.map +1 -1
  53. package/dist/esm/ContextMenuDemo.js +141 -88
  54. package/dist/esm/ContextMenuDemo.js.map +1 -1
  55. package/dist/esm/ContextMenuDemo.mjs +180 -99
  56. package/dist/esm/ContextMenuDemo.mjs.map +1 -1
  57. package/dist/esm/ContextMenuDemo.native.js +180 -100
  58. package/dist/esm/ContextMenuDemo.native.js.map +1 -1
  59. package/dist/esm/DialogDemo.js +1 -1
  60. package/dist/esm/DialogDemo.js.map +1 -1
  61. package/dist/esm/DialogDemo.mjs +1 -0
  62. package/dist/esm/DialogDemo.mjs.map +1 -1
  63. package/dist/esm/DialogDemo.native.js +1 -0
  64. package/dist/esm/LabelDemo.js +1 -1
  65. package/dist/esm/LabelDemo.js.map +1 -1
  66. package/dist/esm/LabelDemo.mjs +1 -1
  67. package/dist/esm/LabelDemo.mjs.map +1 -1
  68. package/dist/esm/LabelDemo.native.js +1 -1
  69. package/dist/esm/MenuDemo.js +213 -133
  70. package/dist/esm/MenuDemo.js.map +1 -1
  71. package/dist/esm/MenuDemo.mjs +214 -112
  72. package/dist/esm/MenuDemo.mjs.map +1 -1
  73. package/dist/esm/MenuDemo.native.js +215 -114
  74. package/dist/esm/MenuDemo.native.js.map +1 -1
  75. package/dist/esm/PopoverDemo.js +1 -1
  76. package/dist/esm/PopoverDemo.js.map +1 -1
  77. package/dist/esm/PopoverDemo.mjs +1 -1
  78. package/dist/esm/PopoverDemo.mjs.map +1 -1
  79. package/dist/esm/PopoverDemo.native.js +1 -1
  80. package/dist/esm/PopoverDemo.native.js.map +1 -1
  81. package/dist/esm/SwitchDemo.js +1 -1
  82. package/dist/esm/SwitchDemo.js.map +1 -1
  83. package/dist/esm/SwitchDemo.mjs +1 -1
  84. package/dist/esm/SwitchDemo.mjs.map +1 -1
  85. package/dist/esm/SwitchDemo.native.js +1 -1
  86. package/dist/esm/SwitchUnstyledDemo.js +1 -1
  87. package/dist/esm/SwitchUnstyledDemo.js.map +1 -1
  88. package/dist/esm/SwitchUnstyledDemo.mjs +1 -1
  89. package/dist/esm/SwitchUnstyledDemo.mjs.map +1 -1
  90. package/dist/esm/SwitchUnstyledDemo.native.js +1 -1
  91. package/dist/esm/ToastDemo.js +14 -9
  92. package/dist/esm/ToastDemo.js.map +1 -1
  93. package/dist/esm/ToastDemo.mjs +29 -17
  94. package/dist/esm/ToastDemo.mjs.map +1 -1
  95. package/dist/esm/ToastDemo.native.js +29 -17
  96. package/dist/esm/ToastDemo.native.js.map +1 -1
  97. package/dist/esm/tamagui.config.js +5 -2
  98. package/dist/esm/tamagui.config.js.map +1 -1
  99. package/dist/esm/tamagui.config.mjs +5 -2
  100. package/dist/esm/tamagui.config.mjs.map +1 -1
  101. package/dist/esm/tamagui.config.native.js +5 -2
  102. package/dist/esm/tamagui.config.native.js.map +1 -1
  103. package/package.json +34 -34
  104. package/src/AccordionDemo.tsx +2 -1
  105. package/src/ContextMenuDemo.tsx +119 -98
  106. package/src/DialogDemo.tsx +1 -1
  107. package/src/LabelDemo.tsx +1 -1
  108. package/src/MenuDemo.tsx +150 -106
  109. package/src/PopoverDemo.tsx +1 -1
  110. package/src/SwitchDemo.tsx +1 -1
  111. package/src/SwitchUnstyledDemo.tsx +1 -1
  112. package/src/ToastDemo.tsx +20 -13
  113. package/src/tamagui.config.ts +5 -2
@@ -1,29 +1,12 @@
1
1
  import { ContextMenu } from '@tamagui/context-menu'
2
2
  import { Calendar, Check, ChevronRight } from '@tamagui/lucide-icons'
3
3
  import React from 'react'
4
- import { styled, Text, YStack } from 'tamagui'
4
+ import { Text, YStack } from 'tamagui'
5
5
 
6
6
  /**
7
7
  * Note: you'll want to use createMenu() to customize further.
8
8
  */
9
9
 
10
- const Item = styled(ContextMenu.Item, {
11
- py: 4,
12
- hoverStyle: {
13
- bg: '$color2',
14
- },
15
- pressStyle: {
16
- bg: '$color3',
17
- },
18
- })
19
-
20
- const ItemTitle = styled(ContextMenu.ItemTitle, {
21
- color: '$color11',
22
- })
23
-
24
- Item.displayName = 'Item'
25
- ItemTitle.displayName = 'ItemTitle'
26
-
27
10
  export function ContextMenuDemo() {
28
11
  const [bookmarksChecked, setBookmarksChecked] = React.useState(true)
29
12
  const [native, setNative] = React.useState(true)
@@ -33,7 +16,7 @@ export function ContextMenuDemo() {
33
16
  }
34
17
 
35
18
  return (
36
- <ContextMenu allowFlip native={native} placement="right-start">
19
+ <ContextMenu allowFlip native={native} placement="bottom-start" offset={14}>
37
20
  <ContextMenu.Trigger asChild>
38
21
  <Text text="center" select={null}>
39
22
  Right Click or longPress
@@ -42,22 +25,18 @@ export function ContextMenuDemo() {
42
25
 
43
26
  <ContextMenu.Portal zIndex={100}>
44
27
  <ContextMenu.Content
45
- px={0}
28
+ p="$1.5"
29
+ minW={180}
46
30
  borderWidth={1}
47
- items="flex-start"
48
31
  borderColor="$borderColor"
49
- enterStyle={{ y: -10, opacity: 0 }}
50
- exitStyle={{ y: -10, opacity: 0 }}
51
- elevate
52
- transition={[
53
- 'quick',
54
- {
55
- opacity: {
56
- overshootClamping: true,
57
- },
58
- },
59
- ]}
32
+ transformOrigin="left top"
33
+ enterStyle={{ scale: 0.9, opacity: 0, y: -5 }}
34
+ exitStyle={{ scale: 0.95, opacity: 0, y: -3 }}
35
+ elevation="$3"
36
+ transition="menu"
60
37
  >
38
+ <ContextMenu.Arrow size="$4" borderWidth={1} borderColor="$borderColor" />
39
+
61
40
  <ContextMenu.Preview>
62
41
  {() => {
63
42
  return (
@@ -73,50 +52,64 @@ export function ContextMenuDemo() {
73
52
  )
74
53
  }}
75
54
  </ContextMenu.Preview>
76
- <ContextMenu.Item onSelect={onSelect} key="about-notes">
55
+ <ContextMenu.Item
56
+ onSelect={onSelect}
57
+ key="about-notes"
58
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
59
+ hoverStyle={{ bg: '$backgroundHover' }}
60
+ >
77
61
  <ContextMenu.ItemTitle>About Notes</ContextMenu.ItemTitle>
78
62
  </ContextMenu.Item>
79
63
  <ContextMenu.Separator />
80
- <ContextMenu.Group backgroundColor="transparent">
81
- <ContextMenu.Item onSelect={onSelect} key="settings">
82
- <ContextMenu.ItemTitle>Settings</ContextMenu.ItemTitle>
83
- </ContextMenu.Item>
84
- <ContextMenu.Item
85
- onSelect={onSelect}
86
- justify="space-between"
87
- // when title is nested inside a React element then you need to use `textValue`
88
- textValue="Calender"
89
- key="accounts"
64
+
65
+ <ContextMenu.Item
66
+ onSelect={onSelect}
67
+ key="settings"
68
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
69
+ hoverStyle={{ bg: '$backgroundHover' }}
70
+ >
71
+ <ContextMenu.ItemTitle>Settings</ContextMenu.ItemTitle>
72
+ </ContextMenu.Item>
73
+ <ContextMenu.Item
74
+ onSelect={onSelect}
75
+ justify="space-between"
76
+ textValue="Calendar"
77
+ key="accounts"
78
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
79
+ hoverStyle={{ bg: '$backgroundHover' }}
80
+ >
81
+ <ContextMenu.ItemTitle>Calendar</ContextMenu.ItemTitle>
82
+ <ContextMenu.ItemIcon
83
+ androidIconName="ic_menu_today"
84
+ ios={{
85
+ name: 'calendar',
86
+ }}
90
87
  >
91
- <ContextMenu.ItemTitle>
92
- <Text>Calender</Text>
93
- </ContextMenu.ItemTitle>
94
- <ContextMenu.ItemIcon
95
- androidIconName="ic_menu_today"
96
- ios={{
97
- name: 'calendar',
98
- }}
99
- >
100
- <Calendar color="gray" size="$1" />
101
- </ContextMenu.ItemIcon>
102
- </ContextMenu.Item>
103
- </ContextMenu.Group>
88
+ <Calendar color="gray" size={14} />
89
+ </ContextMenu.ItemIcon>
90
+ </ContextMenu.Item>
91
+
104
92
  <ContextMenu.Separator />
105
- <ContextMenu.Group backgroundColor="transparent">
106
- <ContextMenu.Item
107
- onSelect={onSelect}
108
- key="close-notes"
109
- disabled
110
- textValue="locked notes"
111
- >
112
- <ContextMenu.ItemTitle>
113
- <Text color="gray">locked notes</Text>
114
- </ContextMenu.ItemTitle>
115
- </ContextMenu.Item>
116
- <ContextMenu.Item destructive onSelect={onSelect} key="delete-all">
117
- <ContextMenu.ItemTitle color="red">Delete all</ContextMenu.ItemTitle>
118
- </ContextMenu.Item>
119
- </ContextMenu.Group>
93
+
94
+ <ContextMenu.Item
95
+ onSelect={onSelect}
96
+ key="close-notes"
97
+ disabled
98
+ textValue="Locked Notes"
99
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
100
+ hoverStyle={{ bg: '$backgroundHover' }}
101
+ >
102
+ <ContextMenu.ItemTitle color="gray">Locked Notes</ContextMenu.ItemTitle>
103
+ </ContextMenu.Item>
104
+ <ContextMenu.Item
105
+ destructive
106
+ onSelect={onSelect}
107
+ key="delete-all"
108
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
109
+ hoverStyle={{ bg: '$backgroundHover' }}
110
+ >
111
+ <ContextMenu.ItemTitle color="red">Delete all</ContextMenu.ItemTitle>
112
+ </ContextMenu.Item>
120
113
  <ContextMenu.Separator />
121
114
  {/* Submenu */}
122
115
  <ContextMenu.Sub placement="right-start">
@@ -124,33 +117,61 @@ export function ContextMenuDemo() {
124
117
  key="actions-trigger"
125
118
  justify="space-between"
126
119
  textValue="Actions"
120
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
121
+ hoverStyle={{ bg: '$backgroundHover' }}
127
122
  >
128
123
  <ContextMenu.ItemTitle>Actions</ContextMenu.ItemTitle>
129
- <ChevronRight size="$1" />
124
+ <ChevronRight size={12} color="$color10" />
130
125
  </ContextMenu.SubTrigger>
131
126
  <ContextMenu.Portal zIndex={200}>
132
127
  <ContextMenu.SubContent
133
- enterStyle={{ y: -10, opacity: 0 }}
134
- exitStyle={{ y: -10, opacity: 0 }}
135
- transition={[
136
- 'quick',
137
- {
138
- opacity: {
139
- overshootClamping: true,
140
- },
141
- },
142
- ]}
143
- px={0}
128
+ enterStyle={{ scale: 0.9, opacity: 0, x: -5 }}
129
+ exitStyle={{ scale: 0.95, opacity: 0, x: -3 }}
130
+ transition="menu"
131
+ transformOrigin="left top"
132
+ elevation="$3"
133
+ minW={160}
134
+ bg="$background"
135
+ p="$1.5"
136
+ borderWidth={1}
137
+ borderColor="$borderColor"
144
138
  >
145
- <Item onSelect={onSelect} key="create-note" textValue="Create note">
146
- <ItemTitle>Create note</ItemTitle>
147
- </Item>
148
- <Item onSelect={onSelect} key="delete-all" textValue="Delete all notes">
149
- <ItemTitle>Delete all notes</ItemTitle>
150
- </Item>
151
- <Item onSelect={onSelect} key="sync-all" textValue="Sync notes">
152
- <ItemTitle>Sync notes</ItemTitle>
153
- </Item>
139
+ <ContextMenu.Label
140
+ color="$color10"
141
+ fontWeight="400"
142
+ fontSize={14}
143
+ alignSelf="flex-start"
144
+ style={{ paddingHorizontal: 8, paddingVertical: 5 }}
145
+ >
146
+ Note settings
147
+ </ContextMenu.Label>
148
+ <ContextMenu.Item
149
+ onSelect={onSelect}
150
+ key="create-note"
151
+ textValue="Create note"
152
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
153
+ hoverStyle={{ bg: '$backgroundHover' }}
154
+ >
155
+ <ContextMenu.ItemTitle>Create note</ContextMenu.ItemTitle>
156
+ </ContextMenu.Item>
157
+ <ContextMenu.Item
158
+ onSelect={onSelect}
159
+ key="delete-all"
160
+ textValue="Delete all notes"
161
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
162
+ hoverStyle={{ bg: '$backgroundHover' }}
163
+ >
164
+ <ContextMenu.ItemTitle>Delete all notes</ContextMenu.ItemTitle>
165
+ </ContextMenu.Item>
166
+ <ContextMenu.Item
167
+ onSelect={onSelect}
168
+ key="sync-all"
169
+ textValue="Sync notes"
170
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
171
+ hoverStyle={{ bg: '$backgroundHover' }}
172
+ >
173
+ <ContextMenu.ItemTitle>Sync notes</ContextMenu.ItemTitle>
174
+ </ContextMenu.Item>
154
175
  </ContextMenu.SubContent>
155
176
  </ContextMenu.Portal>
156
177
  </ContextMenu.Sub>
@@ -159,28 +180,28 @@ export function ContextMenuDemo() {
159
180
  key="show-hidden"
160
181
  checked={bookmarksChecked}
161
182
  onCheckedChange={setBookmarksChecked}
162
- gap="$2"
163
183
  justify="space-between"
184
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
185
+ hoverStyle={{ bg: '$backgroundHover' }}
164
186
  >
165
187
  <ContextMenu.ItemTitle>Mark as read</ContextMenu.ItemTitle>
166
188
  <ContextMenu.ItemIndicator>
167
- <Check size="$1" />
189
+ <Check size={12} color="$color10" />
168
190
  </ContextMenu.ItemIndicator>
169
191
  </ContextMenu.CheckboxItem>
170
192
  <ContextMenu.CheckboxItem
171
193
  key="show-other-notes"
172
194
  checked={native}
173
195
  onCheckedChange={setNative}
174
- gap="$2"
175
196
  justify="space-between"
197
+ style={{ paddingHorizontal: 8, paddingVertical: 5, borderRadius: 4 }}
198
+ hoverStyle={{ bg: '$backgroundHover' }}
176
199
  >
177
200
  <ContextMenu.ItemTitle>Enable Native</ContextMenu.ItemTitle>
178
201
  <ContextMenu.ItemIndicator>
179
- <Check size="$1" />
202
+ <Check size={12} color="$color10" />
180
203
  </ContextMenu.ItemIndicator>
181
204
  </ContextMenu.CheckboxItem>
182
-
183
- <ContextMenu.Arrow size={'$2'} />
184
205
  </ContextMenu.Content>
185
206
  </ContextMenu.Portal>
186
207
  </ContextMenu>
@@ -117,7 +117,7 @@ function DialogInstance({ disableAdapt }: { disableAdapt?: boolean }) {
117
117
  <XStack flex={1}>
118
118
  <SelectDemoContents
119
119
  trigger={
120
- <Select.Trigger flex={1} iconAfter={ChevronDown}>
120
+ <Select.Trigger flex={1} iconAfter={ChevronDown} borderRadius="$4">
121
121
  <Select.Value placeholder="Something" />
122
122
  </Select.Trigger>
123
123
  }
package/src/LabelDemo.tsx CHANGED
@@ -15,7 +15,7 @@ export function LabelDemo() {
15
15
  Notifications
16
16
  </Label>
17
17
  <Switch id="notify">
18
- <Switch.Thumb transition="quick" />
18
+ <Switch.Thumb transition="quickest" />
19
19
  </Switch>
20
20
  </XStack>
21
21
  </YStack>
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>
@@ -90,7 +90,7 @@ export function Demo({
90
90
  height={200}
91
91
  enterStyle={{ y: -10, opacity: 0 }}
92
92
  exitStyle={{ y: -10, opacity: 0 }}
93
- elevate
93
+ boxShadow="0px 4px 8px rgba(0,0,0,0.1), 0px 12px 32px rgba(0,0,0,0.08)"
94
94
  transition={[
95
95
  'quick',
96
96
  {
@@ -29,7 +29,7 @@ export function SwitchWithLabel(props: { size: SizeTokens; defaultChecked?: bool
29
29
  </Label>
30
30
  <Separator minH={20} vertical />
31
31
  <Switch id={id} size={props.size} defaultChecked={props.defaultChecked}>
32
- <Switch.Thumb transition="quicker" />
32
+ <Switch.Thumb transition="quickest" />
33
33
  </Switch>
34
34
  </XStack>
35
35
  )