1
1
'use client' ;
2
2
3
- import { IconCopy , IconDownload , IconUser } from '@tabler/icons-react' ;
3
+ import {
4
+ IconArrowRight ,
5
+ IconChevronRight ,
6
+ IconCopy ,
7
+ IconDownload ,
8
+ IconFlipHorizontal ,
9
+ IconFlipVertical ,
10
+ IconUser ,
11
+ IconView360 ,
12
+ } from '@tabler/icons-react' ;
4
13
import { useContextMenu } from '__PACKAGE__' ;
14
+ import { useState } from 'react' ;
5
15
import { Picture } from '~/components/Picture' ;
6
16
import { copyImageToClipboard , downloadImage , unsplashImages } from '~/lib/images' ;
7
17
8
18
export function SubmenuExample ( ) {
9
19
// example-start submenu
10
20
const { showContextMenu } = useContextMenu ( ) ;
21
+
22
+ const [ flipVertical , setFlipVertical ] = useState ( false ) ;
23
+ const [ flipHorizontal , setFlipHorizontal ] = useState ( false ) ;
11
24
// example-skip
12
25
const image = unsplashImages [ 1 ] ;
13
26
const { src } = image . file ;
14
27
// example-resume
15
28
return (
16
29
< Picture
17
30
image = { image }
31
+ flipVertical = { flipVertical }
32
+ flipHorizontal = { flipHorizontal }
18
33
onContextMenu = { showContextMenu ( [
19
34
{
20
35
icon : < IconCopy size = { 16 } /> ,
@@ -40,6 +55,22 @@ export function SubmenuExample() {
40
55
} ,
41
56
] ,
42
57
} ,
58
+ {
59
+ key : 'flip' ,
60
+ icon : < IconView360 size = { 16 } /> ,
61
+ items : [
62
+ {
63
+ key : 'flipVertical' ,
64
+ icon : < IconFlipVertical size = { 16 } /> ,
65
+ onClick : ( ) => setFlipVertical ( ( v ) => ! v ) ,
66
+ } ,
67
+ {
68
+ key : 'flipHorizontal' ,
69
+ icon : < IconFlipHorizontal size = { 16 } /> ,
70
+ onClick : ( ) => setFlipHorizontal ( ( v ) => ! v ) ,
71
+ } ,
72
+ ] ,
73
+ } ,
43
74
] ) }
44
75
/>
45
76
) ;
@@ -121,3 +152,75 @@ export function NestedSubmenuExample() {
121
152
) ;
122
153
// example-end
123
154
}
155
+
156
+ export function SubmenuExampleCustomArrowIcon ( ) {
157
+ // example-start submenu-custom-arrow-icon
158
+ const { showContextMenu } = useContextMenu ( ) ;
159
+
160
+ const [ flipVertical , setFlipVertical ] = useState ( false ) ;
161
+ const [ flipHorizontal , setFlipHorizontal ] = useState ( false ) ;
162
+ // example-skip
163
+ const image = unsplashImages [ 1 ] ;
164
+ const { src } = image . file ;
165
+ // example-resume
166
+ return (
167
+ < Picture
168
+ image = { image }
169
+ flipVertical = { flipVertical }
170
+ flipHorizontal = { flipHorizontal }
171
+ onContextMenu = { showContextMenu ( [
172
+ // example-skip some items
173
+ {
174
+ icon : < IconCopy size = { 16 } /> ,
175
+ key : 'copy' ,
176
+ onClick : ( ) => copyImageToClipboard ( src ) ,
177
+ } ,
178
+ {
179
+ icon : < IconDownload size = { 16 } /> ,
180
+ key : 'download' ,
181
+ onClick : ( ) => downloadImage ( src ) ,
182
+ } ,
183
+ // example-resume
184
+ {
185
+ key : 'author' ,
186
+ icon : < IconUser size = { 16 } /> ,
187
+ // 👇 custom arrow icon
188
+ iconRight : < IconChevronRight size = { 16 } /> ,
189
+ items : [
190
+ // example-skip some nested items
191
+ {
192
+ key : 'open-in-new-tab' ,
193
+ onClick : ( ) => window . open ( `http://unsplash.com/@${ image . author . profile } ` , '_blank' ) ,
194
+ } ,
195
+ {
196
+ key : 'another-item' ,
197
+ onClick : ( ) => console . log ( 'another item clicked' ) ,
198
+ } ,
199
+ // example-resume
200
+ ] ,
201
+ } ,
202
+ {
203
+ key : 'flip' ,
204
+ icon : < IconView360 size = { 16 } /> ,
205
+ // 👇 custom arrow icon
206
+ iconRight : < IconArrowRight size = { 16 } /> ,
207
+ items : [
208
+ // example-skip more nested items
209
+ {
210
+ key : 'flipVertical' ,
211
+ icon : < IconFlipVertical size = { 16 } /> ,
212
+ onClick : ( ) => setFlipVertical ( ( v ) => ! v ) ,
213
+ } ,
214
+ {
215
+ key : 'flipHorizontal' ,
216
+ icon : < IconFlipHorizontal size = { 16 } /> ,
217
+ onClick : ( ) => setFlipHorizontal ( ( v ) => ! v ) ,
218
+ } ,
219
+ // example-resume
220
+ ] ,
221
+ } ,
222
+ ] ) }
223
+ />
224
+ ) ;
225
+ // example-end
226
+ }
0 commit comments