@lglab/compose-ui-mcp 0.0.1
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.
- package/README.md +11 -0
- package/dist/assets/llms/accordion.md +184 -0
- package/dist/assets/llms/alert-dialog.md +306 -0
- package/dist/assets/llms/autocomplete.md +756 -0
- package/dist/assets/llms/avatar.md +166 -0
- package/dist/assets/llms/badge.md +478 -0
- package/dist/assets/llms/button.md +238 -0
- package/dist/assets/llms/card.md +264 -0
- package/dist/assets/llms/checkbox-group.md +158 -0
- package/dist/assets/llms/checkbox.md +83 -0
- package/dist/assets/llms/collapsible.md +165 -0
- package/dist/assets/llms/combobox.md +1255 -0
- package/dist/assets/llms/context-menu.md +371 -0
- package/dist/assets/llms/dialog.md +592 -0
- package/dist/assets/llms/drawer.md +437 -0
- package/dist/assets/llms/field.md +74 -0
- package/dist/assets/llms/form.md +1931 -0
- package/dist/assets/llms/input.md +47 -0
- package/dist/assets/llms/menu.md +484 -0
- package/dist/assets/llms/menubar.md +804 -0
- package/dist/assets/llms/meter.md +181 -0
- package/dist/assets/llms/navigation-menu.md +187 -0
- package/dist/assets/llms/number-field.md +243 -0
- package/dist/assets/llms/pagination.md +514 -0
- package/dist/assets/llms/popover.md +206 -0
- package/dist/assets/llms/preview-card.md +146 -0
- package/dist/assets/llms/progress.md +60 -0
- package/dist/assets/llms/radio-group.md +105 -0
- package/dist/assets/llms/scroll-area.md +132 -0
- package/dist/assets/llms/select.md +276 -0
- package/dist/assets/llms/separator.md +49 -0
- package/dist/assets/llms/skeleton.md +96 -0
- package/dist/assets/llms/slider.md +161 -0
- package/dist/assets/llms/switch.md +101 -0
- package/dist/assets/llms/table.md +1325 -0
- package/dist/assets/llms/tabs.md +327 -0
- package/dist/assets/llms/textarea.md +38 -0
- package/dist/assets/llms/toast.md +349 -0
- package/dist/assets/llms/toggle-group.md +261 -0
- package/dist/assets/llms/toggle.md +161 -0
- package/dist/assets/llms/toolbar.md +148 -0
- package/dist/assets/llms/tooltip.md +486 -0
- package/dist/assets/llms-full.txt +14515 -0
- package/dist/assets/llms.txt +65 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +161 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Input
|
|
2
|
+
|
|
3
|
+
A single-line text input element.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lglab/compose-ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Import
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { Input } from '@lglab/compose-ui'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
|
|
19
|
+
### Default
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { Input } from '@lglab/compose-ui/input'
|
|
23
|
+
|
|
24
|
+
export default function DefaultExample() {
|
|
25
|
+
return (
|
|
26
|
+
<div className='flex flex-col gap-4'>
|
|
27
|
+
<label className='flex flex-col gap-1'>
|
|
28
|
+
<span className='text-sm font-medium text-foreground'>Name</span>
|
|
29
|
+
<Input placeholder='Enter your name' />
|
|
30
|
+
</label>
|
|
31
|
+
<label className='flex flex-col gap-1'>
|
|
32
|
+
<span className='text-sm font-medium text-foreground'>Email</span>
|
|
33
|
+
<Input type='email' placeholder='Enter your email' />
|
|
34
|
+
</label>
|
|
35
|
+
<label className='flex flex-col gap-1'>
|
|
36
|
+
<span className='text-sm font-medium text-foreground'>Password</span>
|
|
37
|
+
<Input type='password' placeholder='Enter your password' />
|
|
38
|
+
</label>
|
|
39
|
+
</div>
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Resources
|
|
45
|
+
|
|
46
|
+
- [Base UI Input Documentation](https://base-ui.com/react/components/input)
|
|
47
|
+
- [API Reference](https://base-ui.com/react/components/input#api-reference)
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
# Menu
|
|
2
|
+
|
|
3
|
+
A component that displays a list of options on a temporary surface.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lglab/compose-ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Import
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { MenuRoot, MenuTrigger, MenuPortal, MenuPositioner, MenuPopup, MenuArrow, MenuItem, MenuSeparator, MenuGroup, MenuGroupLabel, MenuRadioGroup, MenuRadioItem, MenuRadioItemIndicator, MenuRadioItemLabel, MenuCheckboxItem, MenuCheckboxItemIndicator, MenuCheckboxItemLabel, MenuSubmenuTrigger, MenuSubmenuRoot } from '@lglab/compose-ui'
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Examples
|
|
18
|
+
|
|
19
|
+
### Basic
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
23
|
+
import {
|
|
24
|
+
MenuArrow,
|
|
25
|
+
MenuItem,
|
|
26
|
+
MenuPopup,
|
|
27
|
+
MenuPortal,
|
|
28
|
+
MenuPositioner,
|
|
29
|
+
MenuRoot,
|
|
30
|
+
MenuSeparator,
|
|
31
|
+
MenuTrigger,
|
|
32
|
+
} from '@lglab/compose-ui/menu'
|
|
33
|
+
import { MoreVertical } from 'lucide-react'
|
|
34
|
+
|
|
35
|
+
export default function DefaultExample() {
|
|
36
|
+
const handleLogout = () => false
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<MenuRoot>
|
|
40
|
+
<MenuTrigger
|
|
41
|
+
render={(props) => (
|
|
42
|
+
<Button {...props} variant='outline' size='icon'>
|
|
43
|
+
<MoreVertical className='size-4' />
|
|
44
|
+
</Button>
|
|
45
|
+
)}
|
|
46
|
+
/>
|
|
47
|
+
<MenuPortal>
|
|
48
|
+
<MenuPositioner side='bottom'>
|
|
49
|
+
<MenuPopup>
|
|
50
|
+
<MenuArrow />
|
|
51
|
+
<MenuItem>Profile</MenuItem>
|
|
52
|
+
<MenuItem>Settings</MenuItem>
|
|
53
|
+
<MenuSeparator />
|
|
54
|
+
<MenuItem onClick={handleLogout}>Logout</MenuItem>
|
|
55
|
+
</MenuPopup>
|
|
56
|
+
</MenuPositioner>
|
|
57
|
+
</MenuPortal>
|
|
58
|
+
</MenuRoot>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Open on Hover
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
67
|
+
import {
|
|
68
|
+
MenuArrow,
|
|
69
|
+
MenuItem,
|
|
70
|
+
MenuPopup,
|
|
71
|
+
MenuPortal,
|
|
72
|
+
MenuPositioner,
|
|
73
|
+
MenuRoot,
|
|
74
|
+
MenuSeparator,
|
|
75
|
+
MenuTrigger,
|
|
76
|
+
} from '@lglab/compose-ui/menu'
|
|
77
|
+
import { MoreVertical } from 'lucide-react'
|
|
78
|
+
|
|
79
|
+
export default function OpenOnHoverExample() {
|
|
80
|
+
return (
|
|
81
|
+
<MenuRoot>
|
|
82
|
+
<MenuTrigger
|
|
83
|
+
openOnHover
|
|
84
|
+
render={(props) => (
|
|
85
|
+
<Button {...props} variant='outline' size='icon'>
|
|
86
|
+
<MoreVertical className='size-4' />
|
|
87
|
+
</Button>
|
|
88
|
+
)}
|
|
89
|
+
/>
|
|
90
|
+
<MenuPortal>
|
|
91
|
+
<MenuPositioner side='bottom'>
|
|
92
|
+
<MenuPopup>
|
|
93
|
+
<MenuArrow />
|
|
94
|
+
<MenuItem>Profile</MenuItem>
|
|
95
|
+
<MenuItem>Settings</MenuItem>
|
|
96
|
+
<MenuSeparator />
|
|
97
|
+
<MenuItem>Logout</MenuItem>
|
|
98
|
+
</MenuPopup>
|
|
99
|
+
</MenuPositioner>
|
|
100
|
+
</MenuPortal>
|
|
101
|
+
</MenuRoot>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Sides
|
|
107
|
+
|
|
108
|
+
```tsx
|
|
109
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
110
|
+
import {
|
|
111
|
+
MenuArrow,
|
|
112
|
+
MenuItem,
|
|
113
|
+
MenuPopup,
|
|
114
|
+
MenuPortal,
|
|
115
|
+
MenuPositioner,
|
|
116
|
+
MenuRoot,
|
|
117
|
+
MenuSeparator,
|
|
118
|
+
MenuTrigger,
|
|
119
|
+
} from '@lglab/compose-ui/menu'
|
|
120
|
+
|
|
121
|
+
const sides = ['left', 'bottom', 'top', 'right'] as const
|
|
122
|
+
|
|
123
|
+
export default function SidesExample() {
|
|
124
|
+
return (
|
|
125
|
+
<div className='flex flex-wrap gap-2 items-center justify-center'>
|
|
126
|
+
{sides.map((side) => (
|
|
127
|
+
<MenuRoot key={side}>
|
|
128
|
+
<MenuTrigger
|
|
129
|
+
render={(props) => (
|
|
130
|
+
<Button {...props} variant='outline' className='capitalize'>
|
|
131
|
+
{side}
|
|
132
|
+
</Button>
|
|
133
|
+
)}
|
|
134
|
+
/>
|
|
135
|
+
<MenuPortal>
|
|
136
|
+
<MenuPositioner side={side}>
|
|
137
|
+
<MenuPopup>
|
|
138
|
+
<MenuArrow />
|
|
139
|
+
<MenuItem>Profile</MenuItem>
|
|
140
|
+
<MenuItem>Settings</MenuItem>
|
|
141
|
+
<MenuSeparator />
|
|
142
|
+
<MenuItem>Logout</MenuItem>
|
|
143
|
+
</MenuPopup>
|
|
144
|
+
</MenuPositioner>
|
|
145
|
+
</MenuPortal>
|
|
146
|
+
</MenuRoot>
|
|
147
|
+
))}
|
|
148
|
+
</div>
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### With Icons
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
157
|
+
import {
|
|
158
|
+
MenuArrow,
|
|
159
|
+
MenuItem,
|
|
160
|
+
MenuPopup,
|
|
161
|
+
MenuPortal,
|
|
162
|
+
MenuPositioner,
|
|
163
|
+
MenuRoot,
|
|
164
|
+
MenuSeparator,
|
|
165
|
+
MenuTrigger,
|
|
166
|
+
} from '@lglab/compose-ui/menu'
|
|
167
|
+
import { Copy, LogOut, MoreVertical, PenLine, Settings, Trash2, User } from 'lucide-react'
|
|
168
|
+
|
|
169
|
+
export default function WithIconsExample() {
|
|
170
|
+
return (
|
|
171
|
+
<MenuRoot>
|
|
172
|
+
<MenuTrigger
|
|
173
|
+
render={(props) => (
|
|
174
|
+
<Button {...props} variant='outline' size='icon'>
|
|
175
|
+
<MoreVertical className='size-4' />
|
|
176
|
+
</Button>
|
|
177
|
+
)}
|
|
178
|
+
/>
|
|
179
|
+
<MenuPortal>
|
|
180
|
+
<MenuPositioner>
|
|
181
|
+
<MenuPopup>
|
|
182
|
+
<MenuArrow />
|
|
183
|
+
<MenuItem>
|
|
184
|
+
<User className='size-4' />
|
|
185
|
+
Profile
|
|
186
|
+
</MenuItem>
|
|
187
|
+
<MenuItem>
|
|
188
|
+
<Settings className='size-4' />
|
|
189
|
+
Settings
|
|
190
|
+
</MenuItem>
|
|
191
|
+
<MenuSeparator />
|
|
192
|
+
<MenuItem>
|
|
193
|
+
<PenLine className='size-4' />
|
|
194
|
+
Edit
|
|
195
|
+
</MenuItem>
|
|
196
|
+
<MenuItem>
|
|
197
|
+
<Copy className='size-4' />
|
|
198
|
+
Duplicate
|
|
199
|
+
</MenuItem>
|
|
200
|
+
<MenuSeparator />
|
|
201
|
+
<MenuItem className='text-destructive'>
|
|
202
|
+
<Trash2 className='size-4' />
|
|
203
|
+
Delete
|
|
204
|
+
</MenuItem>
|
|
205
|
+
<MenuItem>
|
|
206
|
+
<LogOut className='size-4' />
|
|
207
|
+
Logout
|
|
208
|
+
</MenuItem>
|
|
209
|
+
</MenuPopup>
|
|
210
|
+
</MenuPositioner>
|
|
211
|
+
</MenuPortal>
|
|
212
|
+
</MenuRoot>
|
|
213
|
+
)
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Groups
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
221
|
+
import {
|
|
222
|
+
MenuArrow,
|
|
223
|
+
MenuGroup,
|
|
224
|
+
MenuGroupLabel,
|
|
225
|
+
MenuItem,
|
|
226
|
+
MenuPopup,
|
|
227
|
+
MenuPortal,
|
|
228
|
+
MenuPositioner,
|
|
229
|
+
MenuRoot,
|
|
230
|
+
MenuSeparator,
|
|
231
|
+
MenuTrigger,
|
|
232
|
+
} from '@lglab/compose-ui/menu'
|
|
233
|
+
import { Menu } from 'lucide-react'
|
|
234
|
+
|
|
235
|
+
export default function GroupsExample() {
|
|
236
|
+
return (
|
|
237
|
+
<MenuRoot>
|
|
238
|
+
<MenuTrigger
|
|
239
|
+
render={(props) => (
|
|
240
|
+
<Button {...props} variant='outline' className='gap-2'>
|
|
241
|
+
<Menu className='size-4' />
|
|
242
|
+
Menu
|
|
243
|
+
</Button>
|
|
244
|
+
)}
|
|
245
|
+
/>
|
|
246
|
+
<MenuPortal>
|
|
247
|
+
<MenuPositioner>
|
|
248
|
+
<MenuPopup>
|
|
249
|
+
<MenuArrow />
|
|
250
|
+
<MenuGroup>
|
|
251
|
+
<MenuGroupLabel>Account</MenuGroupLabel>
|
|
252
|
+
<MenuItem>Profile</MenuItem>
|
|
253
|
+
<MenuItem>Billing</MenuItem>
|
|
254
|
+
<MenuItem>Settings</MenuItem>
|
|
255
|
+
</MenuGroup>
|
|
256
|
+
<MenuSeparator />
|
|
257
|
+
<MenuGroup>
|
|
258
|
+
<MenuGroupLabel>Support</MenuGroupLabel>
|
|
259
|
+
<MenuItem>Help Center</MenuItem>
|
|
260
|
+
<MenuItem>Contact Us</MenuItem>
|
|
261
|
+
</MenuGroup>
|
|
262
|
+
</MenuPopup>
|
|
263
|
+
</MenuPositioner>
|
|
264
|
+
</MenuPortal>
|
|
265
|
+
</MenuRoot>
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Checkbox Items
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
274
|
+
import {
|
|
275
|
+
MenuArrow,
|
|
276
|
+
MenuCheckboxItem,
|
|
277
|
+
MenuCheckboxItemIndicator,
|
|
278
|
+
MenuCheckboxItemLabel,
|
|
279
|
+
MenuPopup,
|
|
280
|
+
MenuPortal,
|
|
281
|
+
MenuPositioner,
|
|
282
|
+
MenuRoot,
|
|
283
|
+
MenuSeparator,
|
|
284
|
+
MenuTrigger,
|
|
285
|
+
} from '@lglab/compose-ui/menu'
|
|
286
|
+
import { Check, Settings } from 'lucide-react'
|
|
287
|
+
import * as React from 'react'
|
|
288
|
+
|
|
289
|
+
export default function CheckboxItemsExample() {
|
|
290
|
+
const [showStatusBar, setShowStatusBar] = React.useState(true)
|
|
291
|
+
const [showActivityBar, setShowActivityBar] = React.useState(false)
|
|
292
|
+
const [showPanel, setShowPanel] = React.useState(false)
|
|
293
|
+
|
|
294
|
+
return (
|
|
295
|
+
<MenuRoot>
|
|
296
|
+
<MenuTrigger
|
|
297
|
+
render={(props) => (
|
|
298
|
+
<Button {...props} variant='outline' className='gap-2'>
|
|
299
|
+
<Settings className='size-4' />
|
|
300
|
+
View Options
|
|
301
|
+
</Button>
|
|
302
|
+
)}
|
|
303
|
+
/>
|
|
304
|
+
<MenuPortal>
|
|
305
|
+
<MenuPositioner>
|
|
306
|
+
<MenuPopup>
|
|
307
|
+
<MenuArrow />
|
|
308
|
+
<MenuCheckboxItem checked={showStatusBar} onCheckedChange={setShowStatusBar}>
|
|
309
|
+
<MenuCheckboxItemIndicator>
|
|
310
|
+
<Check className='size-3.5' />
|
|
311
|
+
</MenuCheckboxItemIndicator>
|
|
312
|
+
<MenuCheckboxItemLabel>Status Bar</MenuCheckboxItemLabel>
|
|
313
|
+
</MenuCheckboxItem>
|
|
314
|
+
<MenuCheckboxItem
|
|
315
|
+
checked={showActivityBar}
|
|
316
|
+
onCheckedChange={setShowActivityBar}
|
|
317
|
+
>
|
|
318
|
+
<MenuCheckboxItemIndicator>
|
|
319
|
+
<Check className='size-3.5' />
|
|
320
|
+
</MenuCheckboxItemIndicator>
|
|
321
|
+
<MenuCheckboxItemLabel>Activity Bar</MenuCheckboxItemLabel>
|
|
322
|
+
</MenuCheckboxItem>
|
|
323
|
+
<MenuSeparator />
|
|
324
|
+
<MenuCheckboxItem checked={showPanel} onCheckedChange={setShowPanel}>
|
|
325
|
+
<MenuCheckboxItemIndicator>
|
|
326
|
+
<Check className='size-3.5' />
|
|
327
|
+
</MenuCheckboxItemIndicator>
|
|
328
|
+
<MenuCheckboxItemLabel>Panel</MenuCheckboxItemLabel>
|
|
329
|
+
</MenuCheckboxItem>
|
|
330
|
+
</MenuPopup>
|
|
331
|
+
</MenuPositioner>
|
|
332
|
+
</MenuPortal>
|
|
333
|
+
</MenuRoot>
|
|
334
|
+
)
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Radio Group
|
|
339
|
+
|
|
340
|
+
```tsx
|
|
341
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
342
|
+
import {
|
|
343
|
+
MenuArrow,
|
|
344
|
+
MenuGroup,
|
|
345
|
+
MenuGroupLabel,
|
|
346
|
+
MenuPopup,
|
|
347
|
+
MenuPortal,
|
|
348
|
+
MenuPositioner,
|
|
349
|
+
MenuRadioGroup,
|
|
350
|
+
MenuRadioItem,
|
|
351
|
+
MenuRadioItemIndicator,
|
|
352
|
+
MenuRadioItemLabel,
|
|
353
|
+
MenuRoot,
|
|
354
|
+
MenuTrigger,
|
|
355
|
+
} from '@lglab/compose-ui/menu'
|
|
356
|
+
import { Check, SunMoon } from 'lucide-react'
|
|
357
|
+
import * as React from 'react'
|
|
358
|
+
|
|
359
|
+
export default function RadioGroupExample() {
|
|
360
|
+
const [theme, setTheme] = React.useState('system')
|
|
361
|
+
|
|
362
|
+
return (
|
|
363
|
+
<MenuRoot>
|
|
364
|
+
<MenuTrigger
|
|
365
|
+
render={(props) => (
|
|
366
|
+
<Button {...props} variant='outline' className='gap-2'>
|
|
367
|
+
<SunMoon className='size-4' />
|
|
368
|
+
Theme
|
|
369
|
+
</Button>
|
|
370
|
+
)}
|
|
371
|
+
/>
|
|
372
|
+
<MenuPortal>
|
|
373
|
+
<MenuPositioner>
|
|
374
|
+
<MenuPopup>
|
|
375
|
+
<MenuArrow />
|
|
376
|
+
<MenuGroup>
|
|
377
|
+
<MenuGroupLabel>Theme</MenuGroupLabel>
|
|
378
|
+
<MenuRadioGroup value={theme} onValueChange={setTheme}>
|
|
379
|
+
<MenuRadioItem value='light'>
|
|
380
|
+
<MenuRadioItemIndicator>
|
|
381
|
+
<Check className='size-3.5' />
|
|
382
|
+
</MenuRadioItemIndicator>
|
|
383
|
+
<MenuRadioItemLabel>Light</MenuRadioItemLabel>
|
|
384
|
+
</MenuRadioItem>
|
|
385
|
+
<MenuRadioItem value='dark'>
|
|
386
|
+
<MenuRadioItemIndicator>
|
|
387
|
+
<Check className='size-3.5' />
|
|
388
|
+
</MenuRadioItemIndicator>
|
|
389
|
+
<MenuRadioItemLabel>Dark</MenuRadioItemLabel>
|
|
390
|
+
</MenuRadioItem>
|
|
391
|
+
<MenuRadioItem value='system'>
|
|
392
|
+
<MenuRadioItemIndicator>
|
|
393
|
+
<Check className='size-3.5' />
|
|
394
|
+
</MenuRadioItemIndicator>
|
|
395
|
+
<MenuRadioItemLabel>System</MenuRadioItemLabel>
|
|
396
|
+
</MenuRadioItem>
|
|
397
|
+
</MenuRadioGroup>
|
|
398
|
+
</MenuGroup>
|
|
399
|
+
</MenuPopup>
|
|
400
|
+
</MenuPositioner>
|
|
401
|
+
</MenuPortal>
|
|
402
|
+
</MenuRoot>
|
|
403
|
+
)
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Submenu
|
|
408
|
+
|
|
409
|
+
```tsx
|
|
410
|
+
import { Button } from '@lglab/compose-ui/button'
|
|
411
|
+
import {
|
|
412
|
+
MenuArrow,
|
|
413
|
+
MenuItem,
|
|
414
|
+
MenuPopup,
|
|
415
|
+
MenuPortal,
|
|
416
|
+
MenuPositioner,
|
|
417
|
+
MenuRoot,
|
|
418
|
+
MenuSeparator,
|
|
419
|
+
MenuSubmenuRoot,
|
|
420
|
+
MenuSubmenuTrigger,
|
|
421
|
+
MenuTrigger,
|
|
422
|
+
} from '@lglab/compose-ui/menu'
|
|
423
|
+
import { ChevronRight, Share } from 'lucide-react'
|
|
424
|
+
|
|
425
|
+
export default function SubmenuExample() {
|
|
426
|
+
return (
|
|
427
|
+
<MenuRoot>
|
|
428
|
+
<MenuTrigger
|
|
429
|
+
render={(props) => (
|
|
430
|
+
<Button {...props} variant='outline' className='gap-2'>
|
|
431
|
+
<Share className='size-4' />
|
|
432
|
+
Share
|
|
433
|
+
</Button>
|
|
434
|
+
)}
|
|
435
|
+
/>
|
|
436
|
+
<MenuPortal>
|
|
437
|
+
<MenuPositioner>
|
|
438
|
+
<MenuPopup>
|
|
439
|
+
<MenuArrow />
|
|
440
|
+
<MenuItem>Copy Link</MenuItem>
|
|
441
|
+
<MenuItem>Email Link</MenuItem>
|
|
442
|
+
<MenuSeparator />
|
|
443
|
+
<MenuSubmenuRoot>
|
|
444
|
+
<MenuSubmenuTrigger>
|
|
445
|
+
Social Media
|
|
446
|
+
<ChevronRight className='size-4' />
|
|
447
|
+
</MenuSubmenuTrigger>
|
|
448
|
+
<MenuPortal>
|
|
449
|
+
<MenuPositioner side='right' sideOffset={4}>
|
|
450
|
+
<MenuPopup>
|
|
451
|
+
<MenuItem>Twitter</MenuItem>
|
|
452
|
+
<MenuItem>Facebook</MenuItem>
|
|
453
|
+
<MenuItem>LinkedIn</MenuItem>
|
|
454
|
+
<MenuSubmenuRoot>
|
|
455
|
+
<MenuSubmenuTrigger>
|
|
456
|
+
More
|
|
457
|
+
<ChevronRight className='size-4' />
|
|
458
|
+
</MenuSubmenuTrigger>
|
|
459
|
+
<MenuPortal>
|
|
460
|
+
<MenuPositioner side='right' sideOffset={4}>
|
|
461
|
+
<MenuPopup>
|
|
462
|
+
<MenuItem>Reddit</MenuItem>
|
|
463
|
+
<MenuItem>Pinterest</MenuItem>
|
|
464
|
+
<MenuItem>Mastodon</MenuItem>
|
|
465
|
+
</MenuPopup>
|
|
466
|
+
</MenuPositioner>
|
|
467
|
+
</MenuPortal>
|
|
468
|
+
</MenuSubmenuRoot>
|
|
469
|
+
</MenuPopup>
|
|
470
|
+
</MenuPositioner>
|
|
471
|
+
</MenuPortal>
|
|
472
|
+
</MenuSubmenuRoot>
|
|
473
|
+
</MenuPopup>
|
|
474
|
+
</MenuPositioner>
|
|
475
|
+
</MenuPortal>
|
|
476
|
+
</MenuRoot>
|
|
477
|
+
)
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
## Resources
|
|
482
|
+
|
|
483
|
+
- [Base UI Menu Documentation](https://base-ui.com/react/components/menu)
|
|
484
|
+
- [API Reference](https://base-ui.com/react/components/menu#api-reference)
|