@primevue/mcp 4.5.5 → 5.0.0-rc.2
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/LICENSE.md +45 -21
- package/README.md +48 -250
- package/data/components.json +47269 -0
- package/data/llms/components/accordion.md +629 -0
- package/data/llms/components/animateonscroll.md +165 -0
- package/data/llms/components/autocomplete.md +995 -0
- package/data/llms/components/avatar.md +264 -0
- package/data/llms/components/badge.md +200 -0
- package/data/llms/components/blockui.md +99 -0
- package/data/llms/components/breadcrumb.md +269 -0
- package/data/llms/components/button.md +902 -0
- package/data/llms/components/card.md +209 -0
- package/data/llms/components/carousel.md +506 -0
- package/data/llms/components/cascadeselect.md +1207 -0
- package/data/llms/components/chart.md +1022 -0
- package/data/llms/components/checkbox.md +401 -0
- package/data/llms/components/chip.md +206 -0
- package/data/llms/components/colorpicker.md +213 -0
- package/data/llms/components/commandmenu.md +660 -0
- package/data/llms/components/compare.md +407 -0
- package/data/llms/components/confirmdialog.md +343 -0
- package/data/llms/components/confirmpopup.md +252 -0
- package/data/llms/components/contextmenu.md +522 -0
- package/data/llms/components/datatable.md +5266 -0
- package/data/llms/components/dataview.md +569 -0
- package/data/llms/components/datepicker.md +964 -0
- package/data/llms/components/deferredcontent.md +96 -0
- package/data/llms/components/dialog.md +702 -0
- package/data/llms/components/divider.md +152 -0
- package/data/llms/components/dock.md +488 -0
- package/data/llms/components/drawer.md +469 -0
- package/data/llms/components/dynamicdialog.md +214 -0
- package/data/llms/components/editor.md +205 -0
- package/data/llms/components/fieldset.md +253 -0
- package/data/llms/components/fileupload.md +459 -0
- package/data/llms/components/floatlabel.md +144 -0
- package/data/llms/components/fluid.md +104 -0
- package/data/llms/components/focustrap.md +59 -0
- package/data/llms/components/forms.md +344 -0
- package/data/llms/components/galleria.md +1119 -0
- package/data/llms/components/gallery.md +1003 -0
- package/data/llms/components/iconfield.md +283 -0
- package/data/llms/components/iftalabel.md +96 -0
- package/data/llms/components/image.md +179 -0
- package/data/llms/components/imagecompare.md +108 -0
- package/data/llms/components/inplace.md +183 -0
- package/data/llms/components/inputcolor.md +869 -0
- package/data/llms/components/inputgroup.md +419 -0
- package/data/llms/components/inputmask.md +345 -0
- package/data/llms/components/inputnumber.md +551 -0
- package/data/llms/components/inputotp.md +345 -0
- package/data/llms/components/inputpassword.md +738 -0
- package/data/llms/components/inputtags.md +432 -0
- package/data/llms/components/inputtext.md +569 -0
- package/data/llms/components/installation.md +1 -0
- package/data/llms/components/keyfilter.md +116 -0
- package/data/llms/components/knob.md +318 -0
- package/data/llms/components/label.md +151 -0
- package/data/llms/components/laravel.md +53 -0
- package/data/llms/components/listbox.md +636 -0
- package/data/llms/components/mask.md +203 -0
- package/data/llms/components/mcp.md +39 -0
- package/data/llms/components/megamenu.md +563 -0
- package/data/llms/components/menu.md +651 -0
- package/data/llms/components/menubar.md +446 -0
- package/data/llms/components/message.md +497 -0
- package/data/llms/components/metergroup.md +281 -0
- package/data/llms/components/multiselect.md +752 -0
- package/data/llms/components/orderlist.md +224 -0
- package/data/llms/components/organizationchart.md +418 -0
- package/data/llms/components/paginator.md +221 -0
- package/data/llms/components/panel.md +321 -0
- package/data/llms/components/panelmenu.md +703 -0
- package/data/llms/components/password.md +657 -0
- package/data/llms/components/picklist.md +286 -0
- package/data/llms/components/popover.md +145 -0
- package/data/llms/components/progressbar.md +242 -0
- package/data/llms/components/progressspinner.md +104 -0
- package/data/llms/components/radiobutton.md +427 -0
- package/data/llms/components/rating.md +312 -0
- package/data/llms/components/ripple.md +91 -0
- package/data/llms/components/scrollarea.md +700 -0
- package/data/llms/components/scrollpanel.md +131 -0
- package/data/llms/components/scrolltop.md +87 -0
- package/data/llms/components/select.md +1251 -0
- package/data/llms/components/selectbutton.md +268 -0
- package/data/llms/components/sidebar.md +2232 -0
- package/data/llms/components/skeleton.md +302 -0
- package/data/llms/components/slider.md +416 -0
- package/data/llms/components/speeddial.md +402 -0
- package/data/llms/components/splitbutton.md +840 -0
- package/data/llms/components/splitter.md +447 -0
- package/data/llms/components/stepper.md +551 -0
- package/data/llms/components/styleclass.md +226 -0
- package/data/llms/components/tabs.md +609 -0
- package/data/llms/components/tag.md +178 -0
- package/data/llms/components/terminal.md +123 -0
- package/data/llms/components/textarea.md +519 -0
- package/data/llms/components/tieredmenu.md +578 -0
- package/data/llms/components/timeline.md +494 -0
- package/data/llms/components/toast.md +472 -0
- package/data/llms/components/togglebutton.md +276 -0
- package/data/llms/components/toggleswitch.md +271 -0
- package/data/llms/components/toolbar.md +140 -0
- package/data/llms/components/tooltip.md +160 -0
- package/data/llms/components/tree.md +1076 -0
- package/data/llms/components/treeselect.md +660 -0
- package/data/llms/components/treetable.md +2493 -0
- package/data/llms/components/virtualscroller.md +265 -0
- package/data/llms/guides/autoimport.md +28 -0
- package/data/llms/guides/cdn.md +72 -0
- package/data/llms/guides/configuration.md +158 -0
- package/data/llms/guides/customicons.md +67 -0
- package/data/llms/guides/guides/accessibility.md +27 -0
- package/data/llms/guides/guides/animations.md +119 -0
- package/data/llms/guides/guides/rtl.md +7 -0
- package/data/llms/guides/icons.md +136 -0
- package/data/llms/guides/installation.md +3 -0
- package/data/llms/guides/laravel.md +66 -0
- package/data/llms/guides/llms.md +15 -0
- package/data/llms/guides/mcp.md +104 -0
- package/data/llms/guides/migration/v4.md +15 -0
- package/data/llms/guides/migration/v5.md +15 -0
- package/data/llms/guides/nuxt.md +141 -0
- package/data/llms/guides/passthrough.md +137 -0
- package/data/llms/guides/primeclt.md +43 -0
- package/data/llms/guides/tailwind.md +151 -0
- package/data/llms/guides/theming/styled.md +497 -0
- package/data/llms/guides/theming/unstyled.md +57 -0
- package/data/llms/guides/uikit.md +3 -0
- package/data/llms/guides/vite.md +90 -0
- package/data/llms/llms-full.txt +54465 -0
- package/data/llms/llms.txt +132 -0
- package/data/llms/pages/accessibility.md +27 -0
- package/data/llms/pages/animations.md +119 -0
- package/data/llms/pages/autoimport.md +28 -0
- package/data/llms/pages/cdn.md +72 -0
- package/data/llms/pages/configuration.md +158 -0
- package/data/llms/pages/contribution.md +31 -0
- package/data/llms/pages/customicons.md +67 -0
- package/data/llms/pages/designer.md +79 -0
- package/data/llms/pages/dynamicimports.md +7 -0
- package/data/llms/pages/forms.md +63 -0
- package/data/llms/pages/guides/accessibility.md +27 -0
- package/data/llms/pages/guides/animations.md +119 -0
- package/data/llms/pages/guides/rtl.md +7 -0
- package/data/llms/pages/icons.md +136 -0
- package/data/llms/pages/installation.md +3 -0
- package/data/llms/pages/introduction.md +23 -0
- package/data/llms/pages/laravel.md +66 -0
- package/data/llms/pages/llms.md +15 -0
- package/data/llms/pages/mcp.md +104 -0
- package/data/llms/pages/migration/v4.md +15 -0
- package/data/llms/pages/migration/v5.md +15 -0
- package/data/llms/pages/nuxt.md +141 -0
- package/data/llms/pages/passthrough.md +137 -0
- package/data/llms/pages/primeclt.md +43 -0
- package/data/llms/pages/rtl.md +7 -0
- package/data/llms/pages/setup.md +3 -0
- package/data/llms/pages/styled.md +497 -0
- package/data/llms/pages/tailwind.md +151 -0
- package/data/llms/pages/theming/styled.md +497 -0
- package/data/llms/pages/theming/unstyled.md +57 -0
- package/data/llms/pages/uikit.md +3 -0
- package/data/llms/pages/unstyled.md +57 -0
- package/data/llms/pages/v4.md +15 -0
- package/data/llms/pages/v5.md +15 -0
- package/data/llms/pages/vite.md +90 -0
- package/data/manifest.json +11117 -0
- package/data/mcp-data.json +55940 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.js +66066 -72541
- package/package.json +10 -12
|
@@ -0,0 +1,660 @@
|
|
|
1
|
+
# CommandMenu
|
|
2
|
+
|
|
3
|
+
CommandMenu is a search-driven command palette component.
|
|
4
|
+
|
|
5
|
+
## Basic
|
|
6
|
+
|
|
7
|
+
CommandMenu accepts Menu-style items via the model prop. Leaf items support an optional keywords field for the default scorer and groups are expressed as items with nested items .
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<template>
|
|
11
|
+
<div class="flex justify-center">
|
|
12
|
+
<CommandMenu :model="commands" placeholder="Search for commands..." class="mx-auto">
|
|
13
|
+
<template #emptyfilter>No results found</template>
|
|
14
|
+
<template #footer>
|
|
15
|
+
<div class="flex items-center justify-end gap-3 w-full">
|
|
16
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
17
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
18
|
+
<ArrowUp />
|
|
19
|
+
</kbd>
|
|
20
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
21
|
+
<ArrowDown />
|
|
22
|
+
</kbd>
|
|
23
|
+
Navigate
|
|
24
|
+
</span>
|
|
25
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
26
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700"> ↵ </kbd>
|
|
27
|
+
Select
|
|
28
|
+
</span>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
</CommandMenu>
|
|
32
|
+
</div>
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<script setup>
|
|
36
|
+
import ArrowDown from '@primeicons/vue/arrow-down';
|
|
37
|
+
import ArrowUp from '@primeicons/vue/arrow-up';
|
|
38
|
+
|
|
39
|
+
const commands = [
|
|
40
|
+
{
|
|
41
|
+
label: 'Recents',
|
|
42
|
+
items: [
|
|
43
|
+
{ label: 'Check For Updates', keywords: ['check', 'updates'] },
|
|
44
|
+
{ label: 'Open Settings' },
|
|
45
|
+
{ label: 'Search Files' },
|
|
46
|
+
{ label: 'Open Terminal' },
|
|
47
|
+
{ label: 'View History', keywords: ['history', 'recent'] },
|
|
48
|
+
{ label: 'Open Chat' }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: 'Files',
|
|
53
|
+
items: [
|
|
54
|
+
{ label: 'New File' },
|
|
55
|
+
{ label: 'New Folder' },
|
|
56
|
+
{ label: 'Save All' },
|
|
57
|
+
{ label: 'Change Theme' },
|
|
58
|
+
{ label: 'Run Task' },
|
|
59
|
+
{ label: 'Stop Task' },
|
|
60
|
+
{ label: 'Export Project' },
|
|
61
|
+
{ label: 'Import Project' },
|
|
62
|
+
{ label: 'Delete File' },
|
|
63
|
+
{ label: 'Duplicate File' }
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
label: 'Source',
|
|
68
|
+
items: [
|
|
69
|
+
{ label: 'Git: Commit' },
|
|
70
|
+
{ label: 'Git: Push' },
|
|
71
|
+
{ label: 'Git: Pull' },
|
|
72
|
+
{ label: 'Switch Account' },
|
|
73
|
+
{ label: 'Open Documentation' },
|
|
74
|
+
{ label: 'Git: Sync' },
|
|
75
|
+
{ label: 'Git: Create Branch' },
|
|
76
|
+
{ label: 'Git: Create Tag' }
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
label: 'Editor',
|
|
81
|
+
items: [
|
|
82
|
+
{ label: 'Align Left' },
|
|
83
|
+
{ label: 'Align Center' },
|
|
84
|
+
{ label: 'Align Right' },
|
|
85
|
+
{ label: 'Toggle Bold' },
|
|
86
|
+
{ label: 'Toggle Italic' },
|
|
87
|
+
{ label: 'Insert Link' },
|
|
88
|
+
{ label: 'Insert Image' },
|
|
89
|
+
{ label: 'Insert List' }
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
];
|
|
93
|
+
<\/script>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Filter
|
|
97
|
+
|
|
98
|
+
A custom filter function can be provided with the filter property. It receives the raw item and the current search term, and should return a positive score (higher = better rank), or 0 to drop the item.
|
|
99
|
+
|
|
100
|
+
```vue
|
|
101
|
+
<template>
|
|
102
|
+
<div>
|
|
103
|
+
<CommandMenu :model="commands" placeholder="Search for commands..." :filter="fuzzyFilter" class="mx-auto">
|
|
104
|
+
<template #footer>
|
|
105
|
+
<div class="flex items-center justify-end gap-3 w-full">
|
|
106
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
107
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
108
|
+
<ArrowUp />
|
|
109
|
+
</kbd>
|
|
110
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
111
|
+
<ArrowDown />
|
|
112
|
+
</kbd>
|
|
113
|
+
Navigate
|
|
114
|
+
</span>
|
|
115
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
116
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700"> ↵ </kbd>
|
|
117
|
+
Select
|
|
118
|
+
</span>
|
|
119
|
+
</div>
|
|
120
|
+
</template>
|
|
121
|
+
</CommandMenu>
|
|
122
|
+
</div>
|
|
123
|
+
</template>
|
|
124
|
+
|
|
125
|
+
<script setup>
|
|
126
|
+
import ArrowDown from '@primeicons/vue/arrow-down';
|
|
127
|
+
import ArrowUp from '@primeicons/vue/arrow-up';
|
|
128
|
+
|
|
129
|
+
const fuzzyFilter = (item, search) => {
|
|
130
|
+
if (!search) return 1;
|
|
131
|
+
const value = String(typeof item.label === 'function' ? item.label() : (item.label ?? '')).toLowerCase();
|
|
132
|
+
const q = search.toLowerCase();
|
|
133
|
+
let ti = 0;
|
|
134
|
+
let qi = 0;
|
|
135
|
+
let score = 0;
|
|
136
|
+
|
|
137
|
+
while (ti < value.length && qi < q.length) {
|
|
138
|
+
if (value[ti] === q[qi]) {
|
|
139
|
+
score += 1;
|
|
140
|
+
qi++;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
ti++;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return qi === q.length ? score / value.length : 0;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const commands = [
|
|
150
|
+
{
|
|
151
|
+
label: 'Recents',
|
|
152
|
+
items: [
|
|
153
|
+
{ label: 'Check For Updates', keywords: ['check', 'updates'] },
|
|
154
|
+
{ label: 'Open Settings' },
|
|
155
|
+
{ label: 'Search Files' },
|
|
156
|
+
{ label: 'Open Terminal' },
|
|
157
|
+
{ label: 'View History', keywords: ['history', 'recent'] },
|
|
158
|
+
{ label: 'Open Chat' }
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
label: 'Files',
|
|
163
|
+
items: [
|
|
164
|
+
{ label: 'New File' },
|
|
165
|
+
{ label: 'New Folder' },
|
|
166
|
+
{ label: 'Save All' },
|
|
167
|
+
{ label: 'Change Theme' },
|
|
168
|
+
{ label: 'Run Task' },
|
|
169
|
+
{ label: 'Stop Task' },
|
|
170
|
+
{ label: 'Export Project' },
|
|
171
|
+
{ label: 'Import Project' },
|
|
172
|
+
{ label: 'Delete File' },
|
|
173
|
+
{ label: 'Duplicate File' }
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
label: 'Source',
|
|
178
|
+
items: [
|
|
179
|
+
{ label: 'Git: Commit' },
|
|
180
|
+
{ label: 'Git: Push' },
|
|
181
|
+
{ label: 'Git: Pull' },
|
|
182
|
+
{ label: 'Switch Account' },
|
|
183
|
+
{ label: 'Open Documentation' },
|
|
184
|
+
{ label: 'Git: Sync' },
|
|
185
|
+
{ label: 'Git: Create Branch' },
|
|
186
|
+
{ label: 'Git: Create Tag' }
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
label: 'Editor',
|
|
191
|
+
items: [
|
|
192
|
+
{ label: 'Align Left' },
|
|
193
|
+
{ label: 'Align Center' },
|
|
194
|
+
{ label: 'Align Right' },
|
|
195
|
+
{ label: 'Toggle Bold' },
|
|
196
|
+
{ label: 'Toggle Italic' },
|
|
197
|
+
{ label: 'Insert Link' },
|
|
198
|
+
{ label: 'Insert Image' },
|
|
199
|
+
{ label: 'Insert List' }
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
label: 'Navigation',
|
|
204
|
+
items: [
|
|
205
|
+
{ label: 'Go to Home' },
|
|
206
|
+
{ label: 'Go Back' },
|
|
207
|
+
{ label: 'Go Forward' },
|
|
208
|
+
{ label: 'Open Explorer' },
|
|
209
|
+
{ label: 'View Bookmarks' },
|
|
210
|
+
{ label: 'Open Minimap' }
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
label: 'View',
|
|
215
|
+
items: [
|
|
216
|
+
{ label: 'Toggle Preview' },
|
|
217
|
+
{ label: 'Maximize Window' },
|
|
218
|
+
{ label: 'Minimize Window' },
|
|
219
|
+
{ label: 'Grid View' },
|
|
220
|
+
{ label: 'List View' },
|
|
221
|
+
{ label: 'Light Mode' },
|
|
222
|
+
{ label: 'Dark Mode' }
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
label: 'Tools',
|
|
227
|
+
items: [
|
|
228
|
+
{ label: 'Open Calculator' },
|
|
229
|
+
{ label: 'Open Calendar' },
|
|
230
|
+
{ label: 'Open Timer' },
|
|
231
|
+
{ label: 'View Analytics' },
|
|
232
|
+
{ label: 'View Trends' },
|
|
233
|
+
{ label: 'Open Database' }
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
];
|
|
237
|
+
<\/script>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Controlled
|
|
241
|
+
|
|
242
|
+
The search query is exposed via v-model:search . Bind it to external state to read, reset, or prefill the query — the filtered list updates in both directions.
|
|
243
|
+
|
|
244
|
+
```vue
|
|
245
|
+
<template>
|
|
246
|
+
<div>
|
|
247
|
+
<CommandMenu v-model:search="search" :model="commands" placeholder="Search for commands..." class="mx-auto">
|
|
248
|
+
<template #emptyfilter>
|
|
249
|
+
<span>
|
|
250
|
+
No results found for <span class="text-surface-900 dark:text-surface-0">"{{ search }}"</span>
|
|
251
|
+
</span>
|
|
252
|
+
</template>
|
|
253
|
+
<template #footer>
|
|
254
|
+
<div class="flex items-center justify-end gap-3 w-full">
|
|
255
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
256
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
257
|
+
<ArrowUp />
|
|
258
|
+
</kbd>
|
|
259
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
260
|
+
<ArrowDown />
|
|
261
|
+
</kbd>
|
|
262
|
+
Navigate
|
|
263
|
+
</span>
|
|
264
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
265
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700"> ↵ </kbd>
|
|
266
|
+
Select
|
|
267
|
+
</span>
|
|
268
|
+
</div>
|
|
269
|
+
</template>
|
|
270
|
+
</CommandMenu>
|
|
271
|
+
</div>
|
|
272
|
+
</template>
|
|
273
|
+
|
|
274
|
+
<script setup>
|
|
275
|
+
import { ref } from 'vue';
|
|
276
|
+
import ArrowDown from '@primeicons/vue/arrow-down';
|
|
277
|
+
import ArrowUp from '@primeicons/vue/arrow-up';
|
|
278
|
+
|
|
279
|
+
const search = ref('');
|
|
280
|
+
const commands = ref([
|
|
281
|
+
{
|
|
282
|
+
label: 'Files',
|
|
283
|
+
items: [{ label: 'New File' }, { label: 'New Folder' }, { label: 'Save All' }, { label: 'Delete File' }]
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
label: 'Source',
|
|
287
|
+
items: [{ label: 'Git: Commit' }, { label: 'Git: Push' }, { label: 'Git: Pull' }, { label: 'Git: Create Branch' }]
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
label: 'Editor',
|
|
291
|
+
items: [{ label: 'Toggle Bold' }, { label: 'Toggle Italic' }]
|
|
292
|
+
}
|
|
293
|
+
]);
|
|
294
|
+
<\/script>
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## With Dialog
|
|
298
|
+
|
|
299
|
+
CommandMenu can be used inside a Dialog to create a command palette experience. Press Ctrl+L (or Cmd+L on Mac) to open.
|
|
300
|
+
|
|
301
|
+
```vue
|
|
302
|
+
<template>
|
|
303
|
+
<div class="flex items-center justify-center py-8">
|
|
304
|
+
<span class="cursor-pointer" @click="visible = true">
|
|
305
|
+
Press
|
|
306
|
+
<kbd class="bg-surface-100 dark:bg-surface-950 px-2 py-1 rounded-md border border-surface-200 dark:border-surface-700/50 text-sm ml-2"> CTRL/⌘ + L </kbd>
|
|
307
|
+
</span>
|
|
308
|
+
|
|
309
|
+
<Dialog v-model:visible="visible" modal :showHeader="false" dismissableMask class="overflow-hidden" :style="{ width: '28rem' }" :pt="{ content: { class: 'p-0!' } }">
|
|
310
|
+
<CommandMenu v-model:search="searchValue" :model="commands" placeholder="Search for commands..." class="w-full rounded-none border-none" @select="visible = false">
|
|
311
|
+
<template #emptyfilter>
|
|
312
|
+
No results found for <span class="text-surface-900 dark:text-surface-0">"{{ searchValue }}"</span>
|
|
313
|
+
</template>
|
|
314
|
+
<template #footer>
|
|
315
|
+
<div class="flex items-center justify-end gap-3 w-full">
|
|
316
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
317
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
318
|
+
<ArrowUp />
|
|
319
|
+
</kbd>
|
|
320
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
321
|
+
<ArrowDown />
|
|
322
|
+
</kbd>
|
|
323
|
+
Navigate
|
|
324
|
+
</span>
|
|
325
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
326
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700"> ↵ </kbd>
|
|
327
|
+
Select
|
|
328
|
+
</span>
|
|
329
|
+
</div>
|
|
330
|
+
</template>
|
|
331
|
+
</CommandMenu>
|
|
332
|
+
</Dialog>
|
|
333
|
+
</div>
|
|
334
|
+
</template>
|
|
335
|
+
|
|
336
|
+
<script setup>
|
|
337
|
+
import { ref, onMounted, onBeforeUnmount } from 'vue';
|
|
338
|
+
import ArrowDown from '@primeicons/vue/arrow-down';
|
|
339
|
+
import ArrowUp from '@primeicons/vue/arrow-up';
|
|
340
|
+
|
|
341
|
+
const visible = ref(false);
|
|
342
|
+
const searchValue = ref('');
|
|
343
|
+
const commands = ref([
|
|
344
|
+
{
|
|
345
|
+
label: 'Recents',
|
|
346
|
+
items: [{ label: 'Check For Updates', keywords: ['check', 'updates'] }, { label: 'Open Settings' }, { label: 'Search Files' }, { label: 'Open Terminal' }, { label: 'View History', keywords: ['history', 'recent'] }, { label: 'Open Chat' }]
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
label: 'Files',
|
|
350
|
+
items: [
|
|
351
|
+
{ label: 'New File' },
|
|
352
|
+
{ label: 'New Folder' },
|
|
353
|
+
{ label: 'Save All' },
|
|
354
|
+
{ label: 'Change Theme' },
|
|
355
|
+
{ label: 'Run Task' },
|
|
356
|
+
{ label: 'Stop Task' },
|
|
357
|
+
{ label: 'Export Project' },
|
|
358
|
+
{ label: 'Import Project' },
|
|
359
|
+
{ label: 'Delete File' },
|
|
360
|
+
{ label: 'Duplicate File' }
|
|
361
|
+
]
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
label: 'Source',
|
|
365
|
+
items: [{ label: 'Git: Commit' }, { label: 'Git: Push' }, { label: 'Git: Pull' }, { label: 'Switch Account' }, { label: 'Open Documentation' }, { label: 'Git: Sync' }, { label: 'Git: Create Branch' }, { label: 'Git: Create Tag' }]
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
label: 'Editor',
|
|
369
|
+
items: [{ label: 'Align Left' }, { label: 'Align Center' }, { label: 'Align Right' }, { label: 'Toggle Bold' }, { label: 'Toggle Italic' }, { label: 'Insert Link' }, { label: 'Insert Image' }, { label: 'Insert List' }]
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
label: 'Navigation',
|
|
373
|
+
items: [{ label: 'Go to Home' }, { label: 'Go Back' }, { label: 'Go Forward' }, { label: 'Open Explorer' }, { label: 'View Bookmarks' }, { label: 'Open Minimap' }]
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
label: 'View',
|
|
377
|
+
items: [{ label: 'Toggle Preview' }, { label: 'Maximize Window' }, { label: 'Minimize Window' }, { label: 'Grid View' }, { label: 'List View' }, { label: 'Light Mode' }, { label: 'Dark Mode' }]
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
label: 'Tools',
|
|
381
|
+
items: [{ label: 'Open Calculator' }, { label: 'Open Calendar' }, { label: 'Open Timer' }, { label: 'View Analytics' }, { label: 'View Trends' }, { label: 'Open Database' }]
|
|
382
|
+
}
|
|
383
|
+
]);
|
|
384
|
+
|
|
385
|
+
function onHotkey(event) {
|
|
386
|
+
if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'l') {
|
|
387
|
+
event.preventDefault();
|
|
388
|
+
visible.value = !visible.value;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
onMounted(() => window.addEventListener('keydown', onHotkey));
|
|
393
|
+
onBeforeUnmount(() => window.removeEventListener('keydown', onHotkey));
|
|
394
|
+
<\/script>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
## Custom
|
|
398
|
+
|
|
399
|
+
The item and submenulabel slots are forwarded to the underlying Menu . Use them to render a custom icon, a category label, or any other per-item UI.
|
|
400
|
+
|
|
401
|
+
```vue
|
|
402
|
+
<template>
|
|
403
|
+
<div>
|
|
404
|
+
<CommandMenu :model="commands" placeholder="Search for commands..." class="mx-auto">
|
|
405
|
+
<template #submenulabel="{ item }">
|
|
406
|
+
<span class="px-2.25">{{ item.label }}</span>
|
|
407
|
+
</template>
|
|
408
|
+
<template #item="{ item, icon }">
|
|
409
|
+
<div class="flex items-center gap-3.5 py-1 px-2.5 w-full">
|
|
410
|
+
<span :class="['w-5 h-5 rounded-md flex items-center justify-center text-white', item.color]">
|
|
411
|
+
<component :is="icon" class="text-xs font-bold" />
|
|
412
|
+
</span>
|
|
413
|
+
<span class="text-sm">{{ item.label }}</span>
|
|
414
|
+
<span class="opacity-50 ml-auto text-sm">{{ item.category }}</span>
|
|
415
|
+
</div>
|
|
416
|
+
</template>
|
|
417
|
+
<template #emptyfilter>
|
|
418
|
+
<span class="text-sm text-surface-500">No results found</span>
|
|
419
|
+
</template>
|
|
420
|
+
<template #footer>
|
|
421
|
+
<div class="flex items-center justify-end gap-3 w-full">
|
|
422
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
423
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
424
|
+
<ArrowUp />
|
|
425
|
+
</kbd>
|
|
426
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700">
|
|
427
|
+
<ArrowDown />
|
|
428
|
+
</kbd>
|
|
429
|
+
Navigate
|
|
430
|
+
</span>
|
|
431
|
+
<span class="flex items-center gap-1 text-surface-500 text-xs">
|
|
432
|
+
<kbd class="bg-surface-100 dark:bg-surface-800 size-5 inline-flex items-center justify-center rounded border border-surface-200 dark:border-surface-700"> ↵ </kbd>
|
|
433
|
+
Select
|
|
434
|
+
</span>
|
|
435
|
+
</div>
|
|
436
|
+
</template>
|
|
437
|
+
</CommandMenu>
|
|
438
|
+
</div>
|
|
439
|
+
</template>
|
|
440
|
+
|
|
441
|
+
<script setup>
|
|
442
|
+
import AlignCenter from '@primeicons/vue/align-center';
|
|
443
|
+
import AlignLeft from '@primeicons/vue/align-left';
|
|
444
|
+
import AlignRight from '@primeicons/vue/align-right';
|
|
445
|
+
import ArrowDown from '@primeicons/vue/arrow-down';
|
|
446
|
+
import ArrowLeft from '@primeicons/vue/arrow-left';
|
|
447
|
+
import ArrowRight from '@primeicons/vue/arrow-right';
|
|
448
|
+
import ArrowUp from '@primeicons/vue/arrow-up';
|
|
449
|
+
import Bars from '@primeicons/vue/bars';
|
|
450
|
+
import Bold from '@primeicons/vue/bold';
|
|
451
|
+
import Book from '@primeicons/vue/book';
|
|
452
|
+
import Bookmark from '@primeicons/vue/bookmark';
|
|
453
|
+
import Calculator from '@primeicons/vue/calculator';
|
|
454
|
+
import Calendar from '@primeicons/vue/calendar';
|
|
455
|
+
import ChartBar from '@primeicons/vue/chart-bar';
|
|
456
|
+
import ChartLine from '@primeicons/vue/chart-line';
|
|
457
|
+
import Clock from '@primeicons/vue/clock';
|
|
458
|
+
import Code from '@primeicons/vue/code';
|
|
459
|
+
import CodeBranch from '@primeicons/vue/code-branch';
|
|
460
|
+
import Cog from '@primeicons/vue/cog';
|
|
461
|
+
import Comments from '@primeicons/vue/comments';
|
|
462
|
+
import Compass from '@primeicons/vue/compass';
|
|
463
|
+
import Copy from '@primeicons/vue/copy';
|
|
464
|
+
import Database from '@primeicons/vue/database';
|
|
465
|
+
import Download from '@primeicons/vue/download';
|
|
466
|
+
import Eye from '@primeicons/vue/eye';
|
|
467
|
+
import File from '@primeicons/vue/file';
|
|
468
|
+
import FileExport from '@primeicons/vue/file-export';
|
|
469
|
+
import FileImport from '@primeicons/vue/file-import';
|
|
470
|
+
import Folder from '@primeicons/vue/folder';
|
|
471
|
+
import Github from '@primeicons/vue/github';
|
|
472
|
+
import History from '@primeicons/vue/history';
|
|
473
|
+
import Home from '@primeicons/vue/home';
|
|
474
|
+
import Image from '@primeicons/vue/image';
|
|
475
|
+
import Italic from '@primeicons/vue/italic';
|
|
476
|
+
import Link from '@primeicons/vue/link';
|
|
477
|
+
import List from '@primeicons/vue/list';
|
|
478
|
+
import Map from '@primeicons/vue/map';
|
|
479
|
+
import Moon from '@primeicons/vue/moon';
|
|
480
|
+
import Palette from '@primeicons/vue/palette';
|
|
481
|
+
import Play from '@primeicons/vue/play';
|
|
482
|
+
import Refresh from '@primeicons/vue/refresh';
|
|
483
|
+
import Save from '@primeicons/vue/save';
|
|
484
|
+
import Search from '@primeicons/vue/search';
|
|
485
|
+
import Stop from '@primeicons/vue/stop';
|
|
486
|
+
import Sun from '@primeicons/vue/sun';
|
|
487
|
+
import Sync from '@primeicons/vue/sync';
|
|
488
|
+
import TagIcon from '@primeicons/vue/tag';
|
|
489
|
+
import ThLarge from '@primeicons/vue/th-large';
|
|
490
|
+
import Trash from '@primeicons/vue/trash';
|
|
491
|
+
import Upload from '@primeicons/vue/upload';
|
|
492
|
+
import Users from '@primeicons/vue/users';
|
|
493
|
+
import WindowMaximize from '@primeicons/vue/window-maximize';
|
|
494
|
+
import WindowMinimize from '@primeicons/vue/window-minimize';
|
|
495
|
+
|
|
496
|
+
const commands = [
|
|
497
|
+
{
|
|
498
|
+
label: 'Recents',
|
|
499
|
+
items: [
|
|
500
|
+
{ icon: Refresh, label: 'Check For Updates', category: 'Command', color: 'bg-[linear-gradient(rgb(245,83,84),rgb(235,70,70))]', keywords: ['check', 'updates'] },
|
|
501
|
+
{ icon: Cog, label: 'Open Settings', category: 'Command', color: 'bg-[linear-gradient(rgb(96,165,250),rgb(59,130,246))]' },
|
|
502
|
+
{ icon: Search, label: 'Search Files', category: 'Command', color: 'bg-[linear-gradient(rgb(167,139,250),rgb(139,92,246))]' },
|
|
503
|
+
{ icon: Code, label: 'Open Terminal', category: 'View', color: 'bg-[linear-gradient(rgb(148,163,184),rgb(100,116,139))]' },
|
|
504
|
+
{ icon: History, label: 'View History', category: 'View', color: 'bg-[linear-gradient(rgb(192,132,252),rgb(168,85,247))]', keywords: ['history', 'recent'] },
|
|
505
|
+
{ icon: Comments, label: 'Open Chat', category: 'Communication', color: 'bg-[linear-gradient(rgb(34,211,238),rgb(6,182,212))]' }
|
|
506
|
+
]
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
label: 'Files',
|
|
510
|
+
items: [
|
|
511
|
+
{ icon: File, label: 'New File', category: 'File', color: 'bg-[linear-gradient(rgb(52,211,153),rgb(16,185,129))]' },
|
|
512
|
+
{ icon: Folder, label: 'New Folder', category: 'File', color: 'bg-[linear-gradient(rgb(251,191,36),rgb(245,158,11))]' },
|
|
513
|
+
{ icon: Save, label: 'Save All', category: 'File', color: 'bg-[linear-gradient(rgb(34,197,94),rgb(22,163,74))]' },
|
|
514
|
+
{ icon: Palette, label: 'Change Theme', category: 'Appearance', color: 'bg-[linear-gradient(rgb(251,146,60),rgb(249,115,22))]' },
|
|
515
|
+
{ icon: Play, label: 'Run Task', category: 'Command', color: 'bg-[linear-gradient(rgb(34,197,94),rgb(21,128,61))]' },
|
|
516
|
+
{ icon: Stop, label: 'Stop Task', category: 'Command', color: 'bg-[linear-gradient(rgb(239,68,68),rgb(220,38,38))]' },
|
|
517
|
+
{ icon: FileExport, label: 'Export Project', category: 'File', color: 'bg-[linear-gradient(rgb(147,51,234),rgb(126,34,206))]' },
|
|
518
|
+
{ icon: FileImport, label: 'Import Project', category: 'File', color: 'bg-[linear-gradient(rgb(99,102,241),rgb(79,70,229))]' },
|
|
519
|
+
{ icon: Trash, label: 'Delete File', category: 'File', color: 'bg-[linear-gradient(rgb(239,68,68),rgb(185,28,28))]' },
|
|
520
|
+
{ icon: Copy, label: 'Duplicate File', category: 'File', color: 'bg-[linear-gradient(rgb(156,163,175),rgb(107,114,128))]' }
|
|
521
|
+
]
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
label: 'Source',
|
|
525
|
+
items: [
|
|
526
|
+
{ icon: Github, label: 'Git: Commit', category: 'Source Control', color: 'bg-[linear-gradient(rgb(249,115,22),rgb(234,88,12))]' },
|
|
527
|
+
{ icon: Upload, label: 'Git: Push', category: 'Source Control', color: 'bg-[linear-gradient(rgb(14,165,233),rgb(2,132,199))]' },
|
|
528
|
+
{ icon: Download, label: 'Git: Pull', category: 'Source Control', color: 'bg-[linear-gradient(rgb(59,130,246),rgb(37,99,235))]' },
|
|
529
|
+
{ icon: Users, label: 'Switch Account', category: 'Account', color: 'bg-[linear-gradient(rgb(236,72,153),rgb(219,39,119))]' },
|
|
530
|
+
{ icon: Book, label: 'Open Documentation', category: 'Help', color: 'bg-[linear-gradient(rgb(147,197,253),rgb(96,165,250))]' },
|
|
531
|
+
{ icon: Sync, label: 'Git: Sync', category: 'Source Control', color: 'bg-[linear-gradient(rgb(74,222,128),rgb(34,197,94))]' },
|
|
532
|
+
{ icon: CodeBranch, label: 'Git: Create Branch', category: 'Source Control', color: 'bg-[linear-gradient(rgb(251,146,60),rgb(249,115,22))]' },
|
|
533
|
+
{ icon: TagIcon, label: 'Git: Create Tag', category: 'Source Control', color: 'bg-[linear-gradient(rgb(196,181,253),rgb(167,139,250))]' }
|
|
534
|
+
]
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
label: 'Editor',
|
|
538
|
+
items: [
|
|
539
|
+
{ icon: AlignLeft, label: 'Align Left', category: 'Editor', color: 'bg-[linear-gradient(rgb(147,197,253),rgb(59,130,246))]' },
|
|
540
|
+
{ icon: AlignCenter, label: 'Align Center', category: 'Editor', color: 'bg-[linear-gradient(rgb(147,197,253),rgb(59,130,246))]' },
|
|
541
|
+
{ icon: AlignRight, label: 'Align Right', category: 'Editor', color: 'bg-[linear-gradient(rgb(147,197,253),rgb(59,130,246))]' },
|
|
542
|
+
{ icon: Bold, label: 'Toggle Bold', category: 'Editor', color: 'bg-[linear-gradient(rgb(30,41,59),rgb(15,23,42))]' },
|
|
543
|
+
{ icon: Italic, label: 'Toggle Italic', category: 'Editor', color: 'bg-[linear-gradient(rgb(71,85,105),rgb(51,65,85))]' },
|
|
544
|
+
{ icon: Link, label: 'Insert Link', category: 'Editor', color: 'bg-[linear-gradient(rgb(59,130,246),rgb(37,99,235))]' },
|
|
545
|
+
{ icon: Image, label: 'Insert Image', category: 'Editor', color: 'bg-[linear-gradient(rgb(168,85,247),rgb(147,51,234))]' },
|
|
546
|
+
{ icon: List, label: 'Insert List', category: 'Editor', color: 'bg-[linear-gradient(rgb(34,197,94),rgb(22,163,74))]' }
|
|
547
|
+
]
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
label: 'Navigation',
|
|
551
|
+
items: [
|
|
552
|
+
{ icon: Home, label: 'Go to Home', category: 'Navigation', color: 'bg-[linear-gradient(rgb(96,165,250),rgb(59,130,246))]' },
|
|
553
|
+
{ icon: ArrowLeft, label: 'Go Back', category: 'Navigation', color: 'bg-[linear-gradient(rgb(148,163,184),rgb(100,116,139))]' },
|
|
554
|
+
{ icon: ArrowRight, label: 'Go Forward', category: 'Navigation', color: 'bg-[linear-gradient(rgb(148,163,184),rgb(100,116,139))]' },
|
|
555
|
+
{ icon: Compass, label: 'Open Explorer', category: 'Navigation', color: 'bg-[linear-gradient(rgb(251,191,36),rgb(245,158,11))]' },
|
|
556
|
+
{ icon: Bookmark, label: 'View Bookmarks', category: 'Navigation', color: 'bg-[linear-gradient(rgb(249,115,22),rgb(234,88,12))]' },
|
|
557
|
+
{ icon: Map, label: 'Open Minimap', category: 'Navigation', color: 'bg-[linear-gradient(rgb(52,211,153),rgb(16,185,129))]' }
|
|
558
|
+
]
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
label: 'View',
|
|
562
|
+
items: [
|
|
563
|
+
{ icon: Eye, label: 'Toggle Preview', category: 'View', color: 'bg-[linear-gradient(rgb(147,51,234),rgb(126,34,206))]' },
|
|
564
|
+
{ icon: WindowMaximize, label: 'Maximize Window', category: 'View', color: 'bg-[linear-gradient(rgb(100,116,139),rgb(71,85,105))]' },
|
|
565
|
+
{ icon: WindowMinimize, label: 'Minimize Window', category: 'View', color: 'bg-[linear-gradient(rgb(148,163,184),rgb(100,116,139))]' },
|
|
566
|
+
{ icon: ThLarge, label: 'Grid View', category: 'View', color: 'bg-[linear-gradient(rgb(34,197,94),rgb(22,163,74))]' },
|
|
567
|
+
{ icon: Bars, label: 'List View', category: 'View', color: 'bg-[linear-gradient(rgb(59,130,246),rgb(37,99,235))]' },
|
|
568
|
+
{ icon: Sun, label: 'Light Mode', category: 'View', color: 'bg-[linear-gradient(rgb(253,224,71),rgb(250,204,21))]' },
|
|
569
|
+
{ icon: Moon, label: 'Dark Mode', category: 'View', color: 'bg-[linear-gradient(rgb(30,41,59),rgb(15,23,42))]' }
|
|
570
|
+
]
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
label: 'Tools',
|
|
574
|
+
items: [
|
|
575
|
+
{ icon: Calculator, label: 'Open Calculator', category: 'Tools', color: 'bg-[linear-gradient(rgb(148,163,184),rgb(100,116,139))]' },
|
|
576
|
+
{ icon: Calendar, label: 'Open Calendar', category: 'Tools', color: 'bg-[linear-gradient(rgb(96,165,250),rgb(59,130,246))]' },
|
|
577
|
+
{ icon: Clock, label: 'Open Timer', category: 'Tools', color: 'bg-[linear-gradient(rgb(251,146,60),rgb(249,115,22))]' },
|
|
578
|
+
{ icon: ChartBar, label: 'View Analytics', category: 'Tools', color: 'bg-[linear-gradient(rgb(34,197,94),rgb(22,163,74))]' },
|
|
579
|
+
{ icon: ChartLine, label: 'View Trends', category: 'Tools', color: 'bg-[linear-gradient(rgb(59,130,246),rgb(37,99,235))]' },
|
|
580
|
+
{ icon: Database, label: 'Open Database', category: 'Tools', color: 'bg-[linear-gradient(rgb(168,85,247),rgb(147,51,234))]' }
|
|
581
|
+
]
|
|
582
|
+
}
|
|
583
|
+
];
|
|
584
|
+
<\/script>
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
## Accessibility
|
|
588
|
+
|
|
589
|
+
Screen Reader CommandMenu pairs a combobox input with the Menu component that renders the results. The input exposes aria-autocomplete="list" and aria-controls (omitted when the filtered list is empty), and the focused item is announced via aria-activedescendant . Use ariaLabel or ariaLabelledby to label the Menu when context is not clear from the DOM. Keyboard Support Key Function tab Moves focus to the search input. down arrow Moves focus to the next item. up arrow Moves focus to the previous item. home Moves focus to the first item. end Moves focus to the last item. enter Activates the focused item and emits the select event.
|
|
590
|
+
|
|
591
|
+
## Command Menu API
|
|
592
|
+
|
|
593
|
+
### Props
|
|
594
|
+
|
|
595
|
+
| Name |Type |Default |Description |
|
|
596
|
+
| --- | --- | --- | --- |
|
|
597
|
+
| model | null \| CommandMenuItem[] | - | Menu items to display. Leaf items support `command` , `disabled` , `keywords` and any custom fields. Groups are expressed as items with nested `items` . |
|
|
598
|
+
| search | null \| string | - | Current search string. Use with `v-model:search` for two-way binding. |
|
|
599
|
+
| filter | null \| CommandMenuFilterFunction | - | Custom scoring function. Replaces the default substring scorer. |
|
|
600
|
+
| placeholder | string | - | Placeholder for the search input. |
|
|
601
|
+
| emptyMessage | string | - | Text shown when `model` is empty. Defaults to the locale `emptyMessage` . |
|
|
602
|
+
| emptyFilterMessage | string | - | Text shown when no items match the current search. Defaults to the locale `emptySearchMessage` . |
|
|
603
|
+
| menuClass | null \| string \| object \| (string \| object)[] | - | Class applied to the underlying Menu, merged with the internal list class. |
|
|
604
|
+
| menuStyle | null \| string \| object \| (string \| object)[] | - | Inline style applied to the underlying Menu. |
|
|
605
|
+
| ariaLabel | string | - | Accessible label for the underlying Menu. Forwarded as `aria-label` . |
|
|
606
|
+
| ariaLabelledby | string | - | Id of an external element that labels the underlying Menu. Forwarded as `aria-labelledby` . |
|
|
607
|
+
| as | string \| Component | DIV | Use to change the HTML tag of root element. |
|
|
608
|
+
| asChild | boolean | false | When enabled, it changes the default rendered element for the one passed as a child element. |
|
|
609
|
+
| dt | any | - | It generates scoped CSS variables using design tokens for the component. |
|
|
610
|
+
| pt | PassThrough<CommandMenuPassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
|
|
611
|
+
| ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
|
|
612
|
+
| unstyled | boolean | false | When enabled, it removes component related styles in the core. |
|
|
613
|
+
|
|
614
|
+
### Pass Through Options
|
|
615
|
+
|
|
616
|
+
| Name |Type |Description |
|
|
617
|
+
| --- | --- | --- |
|
|
618
|
+
| root | CommandMenuPassThroughOptionType | Used to pass attributes to the root's DOM element. |
|
|
619
|
+
| header | CommandMenuPassThroughOptionType | Used to pass attributes to the header's DOM element. |
|
|
620
|
+
| input | CommandMenuPassThroughOptionType | Used to pass attributes to the search input's DOM element. |
|
|
621
|
+
| pcMenu | CommandMenuPassThroughOptionType | Used to pass attributes to the underlying Menu. |
|
|
622
|
+
| emptyMessage | CommandMenuPassThroughOptionType | Used to pass attributes to the empty message's DOM element. |
|
|
623
|
+
| footer | CommandMenuPassThroughOptionType | Used to pass attributes to the footer's DOM element. |
|
|
624
|
+
| hooks | any | Used to manage all lifecycle hooks. |
|
|
625
|
+
|
|
626
|
+
### Theming
|
|
627
|
+
|
|
628
|
+
### CSS Classes
|
|
629
|
+
|
|
630
|
+
| Class |Description |
|
|
631
|
+
| --- | --- |
|
|
632
|
+
| p-commandmenu | Class name of root element. |
|
|
633
|
+
| p-commandmenu-header | Class name of header element. |
|
|
634
|
+
| p-commandmenu-list | Class name of list element. |
|
|
635
|
+
| p-commandmenu-input | Class name of input element. |
|
|
636
|
+
| p-commandmenu-empty-message | Class name of empty message element. |
|
|
637
|
+
| p-commandmenu-footer | Class name of footer element. |
|
|
638
|
+
|
|
639
|
+
### Design Tokens
|
|
640
|
+
|
|
641
|
+
| Token |CSS Variable |Description |
|
|
642
|
+
| --- | --- | --- |
|
|
643
|
+
| commandmenu.background | --p-commandmenu-background | Background of root |
|
|
644
|
+
| commandmenu.border.color | --p-commandmenu-border-color | Border color of root |
|
|
645
|
+
| commandmenu.border.radius | --p-commandmenu-border-radius | Border radius of root |
|
|
646
|
+
| commandmenu.height | --p-commandmenu-height | Height of root |
|
|
647
|
+
| commandmenu.header.padding | --p-commandmenu-header-padding | Padding of header |
|
|
648
|
+
| commandmenu.header.background | --p-commandmenu-header-background | Background of header |
|
|
649
|
+
| commandmenu.header.border.color | --p-commandmenu-header-border-color | Border color of header |
|
|
650
|
+
| commandmenu.input.padding | --p-commandmenu-input-padding | Padding of input |
|
|
651
|
+
| commandmenu.input.font.size | --p-commandmenu-input-font-size | Font size of input |
|
|
652
|
+
| commandmenu.input.font.weight | --p-commandmenu-input-font-weight | Font weight of input |
|
|
653
|
+
| commandmenu.input.color | --p-commandmenu-input-color | Color of input |
|
|
654
|
+
| commandmenu.input.placeholder.color | --p-commandmenu-input-placeholder-color | Placeholder color of input |
|
|
655
|
+
| commandmenu.list.padding | --p-commandmenu-list-padding | Padding of list |
|
|
656
|
+
| commandmenu.empty.padding | --p-commandmenu-empty-padding | Padding of empty |
|
|
657
|
+
| commandmenu.empty.color | --p-commandmenu-empty-color | Color of empty |
|
|
658
|
+
| commandmenu.footer.padding | --p-commandmenu-footer-padding | Padding of footer |
|
|
659
|
+
| commandmenu.footer.background | --p-commandmenu-footer-background | Background of footer |
|
|
660
|
+
| commandmenu.footer.border.color | --p-commandmenu-footer-border-color | Border color of footer |
|