@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.
Files changed (173) hide show
  1. package/LICENSE.md +45 -21
  2. package/README.md +48 -250
  3. package/data/components.json +47269 -0
  4. package/data/llms/components/accordion.md +629 -0
  5. package/data/llms/components/animateonscroll.md +165 -0
  6. package/data/llms/components/autocomplete.md +995 -0
  7. package/data/llms/components/avatar.md +264 -0
  8. package/data/llms/components/badge.md +200 -0
  9. package/data/llms/components/blockui.md +99 -0
  10. package/data/llms/components/breadcrumb.md +269 -0
  11. package/data/llms/components/button.md +902 -0
  12. package/data/llms/components/card.md +209 -0
  13. package/data/llms/components/carousel.md +506 -0
  14. package/data/llms/components/cascadeselect.md +1207 -0
  15. package/data/llms/components/chart.md +1022 -0
  16. package/data/llms/components/checkbox.md +401 -0
  17. package/data/llms/components/chip.md +206 -0
  18. package/data/llms/components/colorpicker.md +213 -0
  19. package/data/llms/components/commandmenu.md +660 -0
  20. package/data/llms/components/compare.md +407 -0
  21. package/data/llms/components/confirmdialog.md +343 -0
  22. package/data/llms/components/confirmpopup.md +252 -0
  23. package/data/llms/components/contextmenu.md +522 -0
  24. package/data/llms/components/datatable.md +5266 -0
  25. package/data/llms/components/dataview.md +569 -0
  26. package/data/llms/components/datepicker.md +964 -0
  27. package/data/llms/components/deferredcontent.md +96 -0
  28. package/data/llms/components/dialog.md +702 -0
  29. package/data/llms/components/divider.md +152 -0
  30. package/data/llms/components/dock.md +488 -0
  31. package/data/llms/components/drawer.md +469 -0
  32. package/data/llms/components/dynamicdialog.md +214 -0
  33. package/data/llms/components/editor.md +205 -0
  34. package/data/llms/components/fieldset.md +253 -0
  35. package/data/llms/components/fileupload.md +459 -0
  36. package/data/llms/components/floatlabel.md +144 -0
  37. package/data/llms/components/fluid.md +104 -0
  38. package/data/llms/components/focustrap.md +59 -0
  39. package/data/llms/components/forms.md +344 -0
  40. package/data/llms/components/galleria.md +1119 -0
  41. package/data/llms/components/gallery.md +1003 -0
  42. package/data/llms/components/iconfield.md +283 -0
  43. package/data/llms/components/iftalabel.md +96 -0
  44. package/data/llms/components/image.md +179 -0
  45. package/data/llms/components/imagecompare.md +108 -0
  46. package/data/llms/components/inplace.md +183 -0
  47. package/data/llms/components/inputcolor.md +869 -0
  48. package/data/llms/components/inputgroup.md +419 -0
  49. package/data/llms/components/inputmask.md +345 -0
  50. package/data/llms/components/inputnumber.md +551 -0
  51. package/data/llms/components/inputotp.md +345 -0
  52. package/data/llms/components/inputpassword.md +738 -0
  53. package/data/llms/components/inputtags.md +432 -0
  54. package/data/llms/components/inputtext.md +569 -0
  55. package/data/llms/components/installation.md +1 -0
  56. package/data/llms/components/keyfilter.md +116 -0
  57. package/data/llms/components/knob.md +318 -0
  58. package/data/llms/components/label.md +151 -0
  59. package/data/llms/components/laravel.md +53 -0
  60. package/data/llms/components/listbox.md +636 -0
  61. package/data/llms/components/mask.md +203 -0
  62. package/data/llms/components/mcp.md +39 -0
  63. package/data/llms/components/megamenu.md +563 -0
  64. package/data/llms/components/menu.md +651 -0
  65. package/data/llms/components/menubar.md +446 -0
  66. package/data/llms/components/message.md +497 -0
  67. package/data/llms/components/metergroup.md +281 -0
  68. package/data/llms/components/multiselect.md +752 -0
  69. package/data/llms/components/orderlist.md +224 -0
  70. package/data/llms/components/organizationchart.md +418 -0
  71. package/data/llms/components/paginator.md +221 -0
  72. package/data/llms/components/panel.md +321 -0
  73. package/data/llms/components/panelmenu.md +703 -0
  74. package/data/llms/components/password.md +657 -0
  75. package/data/llms/components/picklist.md +286 -0
  76. package/data/llms/components/popover.md +145 -0
  77. package/data/llms/components/progressbar.md +242 -0
  78. package/data/llms/components/progressspinner.md +104 -0
  79. package/data/llms/components/radiobutton.md +427 -0
  80. package/data/llms/components/rating.md +312 -0
  81. package/data/llms/components/ripple.md +91 -0
  82. package/data/llms/components/scrollarea.md +700 -0
  83. package/data/llms/components/scrollpanel.md +131 -0
  84. package/data/llms/components/scrolltop.md +87 -0
  85. package/data/llms/components/select.md +1251 -0
  86. package/data/llms/components/selectbutton.md +268 -0
  87. package/data/llms/components/sidebar.md +2232 -0
  88. package/data/llms/components/skeleton.md +302 -0
  89. package/data/llms/components/slider.md +416 -0
  90. package/data/llms/components/speeddial.md +402 -0
  91. package/data/llms/components/splitbutton.md +840 -0
  92. package/data/llms/components/splitter.md +447 -0
  93. package/data/llms/components/stepper.md +551 -0
  94. package/data/llms/components/styleclass.md +226 -0
  95. package/data/llms/components/tabs.md +609 -0
  96. package/data/llms/components/tag.md +178 -0
  97. package/data/llms/components/terminal.md +123 -0
  98. package/data/llms/components/textarea.md +519 -0
  99. package/data/llms/components/tieredmenu.md +578 -0
  100. package/data/llms/components/timeline.md +494 -0
  101. package/data/llms/components/toast.md +472 -0
  102. package/data/llms/components/togglebutton.md +276 -0
  103. package/data/llms/components/toggleswitch.md +271 -0
  104. package/data/llms/components/toolbar.md +140 -0
  105. package/data/llms/components/tooltip.md +160 -0
  106. package/data/llms/components/tree.md +1076 -0
  107. package/data/llms/components/treeselect.md +660 -0
  108. package/data/llms/components/treetable.md +2493 -0
  109. package/data/llms/components/virtualscroller.md +265 -0
  110. package/data/llms/guides/autoimport.md +28 -0
  111. package/data/llms/guides/cdn.md +72 -0
  112. package/data/llms/guides/configuration.md +158 -0
  113. package/data/llms/guides/customicons.md +67 -0
  114. package/data/llms/guides/guides/accessibility.md +27 -0
  115. package/data/llms/guides/guides/animations.md +119 -0
  116. package/data/llms/guides/guides/rtl.md +7 -0
  117. package/data/llms/guides/icons.md +136 -0
  118. package/data/llms/guides/installation.md +3 -0
  119. package/data/llms/guides/laravel.md +66 -0
  120. package/data/llms/guides/llms.md +15 -0
  121. package/data/llms/guides/mcp.md +104 -0
  122. package/data/llms/guides/migration/v4.md +15 -0
  123. package/data/llms/guides/migration/v5.md +15 -0
  124. package/data/llms/guides/nuxt.md +141 -0
  125. package/data/llms/guides/passthrough.md +137 -0
  126. package/data/llms/guides/primeclt.md +43 -0
  127. package/data/llms/guides/tailwind.md +151 -0
  128. package/data/llms/guides/theming/styled.md +497 -0
  129. package/data/llms/guides/theming/unstyled.md +57 -0
  130. package/data/llms/guides/uikit.md +3 -0
  131. package/data/llms/guides/vite.md +90 -0
  132. package/data/llms/llms-full.txt +54465 -0
  133. package/data/llms/llms.txt +132 -0
  134. package/data/llms/pages/accessibility.md +27 -0
  135. package/data/llms/pages/animations.md +119 -0
  136. package/data/llms/pages/autoimport.md +28 -0
  137. package/data/llms/pages/cdn.md +72 -0
  138. package/data/llms/pages/configuration.md +158 -0
  139. package/data/llms/pages/contribution.md +31 -0
  140. package/data/llms/pages/customicons.md +67 -0
  141. package/data/llms/pages/designer.md +79 -0
  142. package/data/llms/pages/dynamicimports.md +7 -0
  143. package/data/llms/pages/forms.md +63 -0
  144. package/data/llms/pages/guides/accessibility.md +27 -0
  145. package/data/llms/pages/guides/animations.md +119 -0
  146. package/data/llms/pages/guides/rtl.md +7 -0
  147. package/data/llms/pages/icons.md +136 -0
  148. package/data/llms/pages/installation.md +3 -0
  149. package/data/llms/pages/introduction.md +23 -0
  150. package/data/llms/pages/laravel.md +66 -0
  151. package/data/llms/pages/llms.md +15 -0
  152. package/data/llms/pages/mcp.md +104 -0
  153. package/data/llms/pages/migration/v4.md +15 -0
  154. package/data/llms/pages/migration/v5.md +15 -0
  155. package/data/llms/pages/nuxt.md +141 -0
  156. package/data/llms/pages/passthrough.md +137 -0
  157. package/data/llms/pages/primeclt.md +43 -0
  158. package/data/llms/pages/rtl.md +7 -0
  159. package/data/llms/pages/setup.md +3 -0
  160. package/data/llms/pages/styled.md +497 -0
  161. package/data/llms/pages/tailwind.md +151 -0
  162. package/data/llms/pages/theming/styled.md +497 -0
  163. package/data/llms/pages/theming/unstyled.md +57 -0
  164. package/data/llms/pages/uikit.md +3 -0
  165. package/data/llms/pages/unstyled.md +57 -0
  166. package/data/llms/pages/v4.md +15 -0
  167. package/data/llms/pages/v5.md +15 -0
  168. package/data/llms/pages/vite.md +90 -0
  169. package/data/manifest.json +11117 -0
  170. package/data/mcp-data.json +55940 -0
  171. package/dist/index.d.ts +17 -1
  172. package/dist/index.js +66066 -72541
  173. package/package.json +10 -12
@@ -0,0 +1,700 @@
1
+ # ScrollArea
2
+
3
+ ScrollArea is a cross browser, lightweight and themable alternative to native browser scrollbar.
4
+
5
+ ## Basic
6
+
7
+ A custom scrollable container with styled scrollbars.
8
+
9
+ ```vue
10
+ <template>
11
+ <div class="max-w-56 w-full mx-auto">
12
+ <div class="text-surface-500 dark:text-surface-400 font-medium text-sm uppercase font-mono tracking-tight mb-2">Automobiles</div>
13
+ <ScrollArea class="h-72">
14
+ <ScrollAreaViewport>
15
+ <ScrollAreaContent class="space-y-2">
16
+ <span v-for="car in automobiles" :key="car.label" class="flex items-end gap-0.5">
17
+ <span class="text-sm hover:underline!">{{ car.label }}</span>
18
+ <span class="text-surface-500 text-[11px] font-mono mb-px tracking-tighter">({{ car.value }})</span>
19
+ </span>
20
+ </ScrollAreaContent>
21
+ </ScrollAreaViewport>
22
+ <ScrollAreaScrollbar orientation="vertical">
23
+ <ScrollAreaHandle />
24
+ </ScrollAreaScrollbar>
25
+ </ScrollArea>
26
+ </div>
27
+ </template>
28
+
29
+ <script setup>
30
+ import { ref } from 'vue';
31
+
32
+ const automobiles = ref([
33
+ { label: 'Audi', value: '200' },
34
+ { label: 'BMW', value: '350' },
35
+ { label: 'Mercedes-Benz', value: '420' },
36
+ { label: 'Volkswagen', value: '510' },
37
+ { label: 'Toyota', value: '610' },
38
+ { label: 'Honda', value: '280' },
39
+ { label: 'Hyundai', value: '390' },
40
+ { label: 'Kia', value: '260' },
41
+ { label: 'Ford', value: '470' },
42
+ { label: 'Renault', value: '530' },
43
+ { label: 'Peugeot', value: '410' },
44
+ { label: 'Citroen', value: '190' },
45
+ { label: 'Skoda', value: '360' },
46
+ { label: 'Seat', value: '210' },
47
+ { label: 'Opel', value: '440' },
48
+ { label: 'Fiat', value: '620' },
49
+ { label: 'Dacia', value: '380' },
50
+ { label: 'Volvo', value: '140' },
51
+ { label: 'Mazda', value: '120' },
52
+ { label: 'Mitsubishi', value: '110' },
53
+ { label: 'Nissan', value: '330' },
54
+ { label: 'Subaru', value: '60' },
55
+ { label: 'Suzuki', value: '170' },
56
+ { label: 'Jeep', value: '95' },
57
+ { label: 'Land Rover', value: '80' },
58
+ { label: 'Porsche', value: '75' },
59
+ { label: 'Ferrari', value: '12' },
60
+ { label: 'Lamborghini', value: '9' },
61
+ { label: 'Bentley', value: '15' },
62
+ { label: 'Rolls-Royce', value: '6' },
63
+ { label: 'Mini', value: '130' },
64
+ { label: 'Tesla', value: '220' },
65
+ { label: 'BYD', value: '55' },
66
+ { label: 'Chery', value: '160' },
67
+ { label: 'MG', value: '145' },
68
+ { label: 'DS Automobiles', value: '40' },
69
+ { label: 'Alfa Romeo', value: '50' },
70
+ { label: 'Lancia', value: '8' },
71
+ { label: 'Cadillac', value: '22' },
72
+ { label: 'Chevrolet', value: '105' },
73
+ { label: 'Dodge', value: '18' },
74
+ { label: 'GMC', value: '14' },
75
+ { label: 'Infiniti', value: '11' },
76
+ { label: 'Acura', value: '7' },
77
+ { label: 'Genesis', value: '35' },
78
+ { label: 'Geely', value: '27' },
79
+ { label: 'Proton', value: '19' },
80
+ { label: 'Togg', value: '65' },
81
+ { label: 'Rivian', value: '4' },
82
+ { label: 'Lucid', value: '3' }
83
+ ]);
84
+ <\/script>
85
+ ```
86
+
87
+ ## Horizontal
88
+
89
+ ScrollArea supports horizontal scrolling for content that extends beyond the horizontal viewport.
90
+
91
+ ```vue
92
+ <template>
93
+ <div>
94
+ <div class="flex justify-center">
95
+ <ScrollArea class="max-w-md mx-auto">
96
+ <ScrollAreaViewport class="p-3.5!">
97
+ <ScrollAreaContent>
98
+ <div class="flex gap-4 min-w-max">
99
+ <figure v-for="(image, index) in images" :key="index" class="shrink-0">
100
+ <img :src="image.itemImageSrc" :alt="image.title" class="w-72 h-40 object-cover rounded-sm" />
101
+ <figcaption class="mt-2 text-xs">
102
+ <span class="opacity-60">Photo by</span> <span class="font-medium">{{ image.title }}</span>
103
+ </figcaption>
104
+ </figure>
105
+ </div>
106
+ </ScrollAreaContent>
107
+ </ScrollAreaViewport>
108
+ <ScrollAreaScrollbar orientation="horizontal">
109
+ <ScrollAreaHandle />
110
+ </ScrollAreaScrollbar>
111
+ </ScrollArea>
112
+ </div>
113
+ </div>
114
+ </template>
115
+
116
+ <script setup>
117
+ import { onMounted, ref } from 'vue';
118
+ import { PhotoService } from '@/service/PhotoService';
119
+
120
+ const images = ref([]);
121
+
122
+ onMounted(() => {
123
+ PhotoService.getImages().then((data) => (images.value = data));
124
+ });
125
+ <\/script>
126
+ ```
127
+
128
+ ## Both Scrollbars
129
+
130
+ Both vertical and horizontal scrollbars are displayed when the content overflows in both directions.
131
+
132
+ ```vue
133
+ <template>
134
+ <div>
135
+ <ScrollArea class="h-80 max-w-sm mx-auto w-full rounded-md overflow-hidden">
136
+ <ScrollAreaViewport class="p-0!">
137
+ <ScrollAreaContent>
138
+ <table class="min-w-xl w-full text-sm border-collapse border-0">
139
+ <thead class="sticky top-0 z-10">
140
+ <tr class="bg-surface-100 dark:bg-surface-800 border-b border-surface">
141
+ <th v-for="col in columns" :key="col.key" class="border-b border-surface px-4 py-2 text-left text-sm whitespace-nowrap uppercase font-mono font-light">
142
+ {{ col.label }}
143
+ </th>
144
+ </tr>
145
+ </thead>
146
+ <tbody>
147
+ <tr v-for="(city, i) in usCities" :key="i" class="last:border-0 border-b border-surface odd:bg-surface-50 dark:odd:bg-surface-900/40 hover:bg-primary/5">
148
+ <td class="px-4 py-2 font-medium whitespace-nowrap">{{ city.city }}</td>
149
+ <td class="px-4 py-2 text-surface-500">{{ city.state }}</td>
150
+ <td class="px-4 py-2 tabular-nums">{{ city.population.toLocaleString() }}</td>
151
+ <td class="px-4 py-2 tabular-nums">{{ city.area_km2.toLocaleString() }}</td>
152
+ </tr>
153
+ </tbody>
154
+ </table>
155
+ </ScrollAreaContent>
156
+ </ScrollAreaViewport>
157
+ <ScrollAreaScrollbar orientation="vertical" class="m-0! bg-transparent!">
158
+ <ScrollAreaHandle />
159
+ </ScrollAreaScrollbar>
160
+ <ScrollAreaScrollbar orientation="horizontal" class="m-0! bg-transparent!">
161
+ <ScrollAreaHandle />
162
+ </ScrollAreaScrollbar>
163
+ <ScrollAreaCorner />
164
+ </ScrollArea>
165
+ </div>
166
+ </template>
167
+
168
+ <script setup>
169
+ import { ref } from 'vue';
170
+
171
+ const columns = ref([
172
+ { key: 'city', label: 'City' },
173
+ { key: 'state', label: 'State' },
174
+ { key: 'population', label: 'Population' },
175
+ { key: 'area_km2', label: 'Area (km²)' }
176
+ ]);
177
+
178
+ const usCities = ref([
179
+ { city: 'New York', state: 'NY', population: 8419600, area_km2: 783.8 },
180
+ { city: 'Los Angeles', state: 'CA', population: 3980400, area_km2: 1214.9 },
181
+ { city: 'Chicago', state: 'IL', population: 2716000, area_km2: 589.6 },
182
+ { city: 'Houston', state: 'TX', population: 2328000, area_km2: 1651.1 },
183
+ { city: 'Phoenix', state: 'AZ', population: 1690000, area_km2: 1340.6 },
184
+ { city: 'Philadelphia', state: 'PA', population: 1584200, area_km2: 369.6 },
185
+ { city: 'San Antonio', state: 'TX', population: 1547200, area_km2: 1194.0 },
186
+ { city: 'San Diego', state: 'CA', population: 1423800, area_km2: 964.5 },
187
+ { city: 'Dallas', state: 'TX', population: 1341100, area_km2: 882.9 },
188
+ { city: 'San Jose', state: 'CA', population: 1035300, area_km2: 469.7 },
189
+ { city: 'Austin', state: 'TX', population: 1010000, area_km2: 704.0 },
190
+ { city: 'Jacksonville', state: 'FL', population: 949600, area_km2: 2265.3 },
191
+ { city: 'Fort Worth', state: 'TX', population: 918900, area_km2: 920.9 },
192
+ { city: 'Columbus', state: 'OH', population: 905700, area_km2: 577.9 },
193
+ { city: 'Charlotte', state: 'NC', population: 885700, area_km2: 771.0 },
194
+ { city: 'San Francisco', state: 'CA', population: 873900, area_km2: 121.4 },
195
+ { city: 'Indianapolis', state: 'IN', population: 876400, area_km2: 953.0 },
196
+ { city: 'Seattle', state: 'WA', population: 737000, area_km2: 217.0 },
197
+ { city: 'Denver', state: 'CO', population: 715500, area_km2: 401.3 },
198
+ { city: 'Washington', state: 'DC', population: 689500, area_km2: 177.0 },
199
+ { city: 'Boston', state: 'MA', population: 675600, area_km2: 232.1 },
200
+ { city: 'El Paso', state: 'TX', population: 678800, area_km2: 663.7 },
201
+ { city: 'Nashville', state: 'TN', population: 689400, area_km2: 1362.2 },
202
+ { city: 'Detroit', state: 'MI', population: 639100, area_km2: 370.0 },
203
+ { city: 'Oklahoma City', state: 'OK', population: 681100, area_km2: 1608.8 }
204
+ ]);
205
+ <\/script>
206
+ ```
207
+
208
+ ## Scroll Fade
209
+
210
+ The mask property adds a gradient fade effect at the scroll edges.
211
+
212
+ ```vue
213
+ <template>
214
+ <div class="max-w-56 w-full mx-auto">
215
+ <div class="text-surface-500 dark:text-surface-400 font-medium text-sm uppercase font-mono tracking-tight mb-2">Automobiles</div>
216
+ <ScrollArea class="h-72" mask>
217
+ <ScrollAreaViewport>
218
+ <ScrollAreaContent class="space-y-2">
219
+ <span v-for="car in automobiles" :key="car.label" class="flex items-end gap-0.5">
220
+ <span class="text-sm hover:underline!">{{ car.label }}</span>
221
+ <span class="text-surface-500 text-[11px] font-mono mb-px tracking-tighter">({{ car.value }})</span>
222
+ </span>
223
+ </ScrollAreaContent>
224
+ </ScrollAreaViewport>
225
+ <ScrollAreaScrollbar orientation="vertical">
226
+ <ScrollAreaHandle />
227
+ </ScrollAreaScrollbar>
228
+ </ScrollArea>
229
+ </div>
230
+ </template>
231
+
232
+ <script setup>
233
+ import { ref } from 'vue';
234
+
235
+ const automobiles = ref([
236
+ { label: 'Audi', value: '200' },
237
+ { label: 'BMW', value: '350' },
238
+ { label: 'Mercedes-Benz', value: '420' },
239
+ { label: 'Volkswagen', value: '510' },
240
+ { label: 'Toyota', value: '610' },
241
+ { label: 'Honda', value: '280' },
242
+ { label: 'Hyundai', value: '390' },
243
+ { label: 'Kia', value: '260' },
244
+ { label: 'Ford', value: '470' },
245
+ { label: 'Renault', value: '530' },
246
+ { label: 'Peugeot', value: '410' },
247
+ { label: 'Citroen', value: '190' },
248
+ { label: 'Skoda', value: '360' },
249
+ { label: 'Seat', value: '210' },
250
+ { label: 'Opel', value: '440' },
251
+ { label: 'Fiat', value: '620' },
252
+ { label: 'Dacia', value: '380' },
253
+ { label: 'Volvo', value: '140' },
254
+ { label: 'Mazda', value: '120' },
255
+ { label: 'Mitsubishi', value: '110' },
256
+ { label: 'Nissan', value: '330' },
257
+ { label: 'Subaru', value: '60' },
258
+ { label: 'Suzuki', value: '170' },
259
+ { label: 'Jeep', value: '95' },
260
+ { label: 'Land Rover', value: '80' },
261
+ { label: 'Porsche', value: '75' },
262
+ { label: 'Ferrari', value: '12' },
263
+ { label: 'Lamborghini', value: '9' },
264
+ { label: 'Bentley', value: '15' },
265
+ { label: 'Rolls-Royce', value: '6' },
266
+ { label: 'Mini', value: '130' },
267
+ { label: 'Tesla', value: '220' },
268
+ { label: 'BYD', value: '55' },
269
+ { label: 'Chery', value: '160' },
270
+ { label: 'MG', value: '145' },
271
+ { label: 'DS Automobiles', value: '40' },
272
+ { label: 'Alfa Romeo', value: '50' },
273
+ { label: 'Lancia', value: '8' },
274
+ { label: 'Cadillac', value: '22' },
275
+ { label: 'Chevrolet', value: '105' },
276
+ { label: 'Dodge', value: '18' },
277
+ { label: 'GMC', value: '14' },
278
+ { label: 'Infiniti', value: '11' },
279
+ { label: 'Acura', value: '7' },
280
+ { label: 'Genesis', value: '35' },
281
+ { label: 'Geely', value: '27' },
282
+ { label: 'Proton', value: '19' },
283
+ { label: 'Togg', value: '65' },
284
+ { label: 'Rivian', value: '4' },
285
+ { label: 'Lucid', value: '3' }
286
+ ]);
287
+ <\/script>
288
+ ```
289
+
290
+ ## Variant
291
+
292
+ Change the visibility behavior of scrollbars with the variant property.
293
+
294
+ ```vue
295
+ <template>
296
+ <div>
297
+ <div class="flex flex-col items-center">
298
+ <div class="flex flex-wrap items-center justify-center gap-0.5">
299
+ <Button v-for="mode in modes" :key="mode" size="small" :severity="variant === mode ? undefined : 'secondary'" :variant="mode === variant ? undefined : 'text'" class="capitalize cursor-pointer" @click="variant = mode">{{ mode }}</Button>
300
+ </div>
301
+ <div class="mt-8 max-w-56 w-full mx-auto">
302
+ <div class="text-surface-500 dark:text-surface-400 font-medium text-sm uppercase font-mono tracking-tight mb-2">Automobiles</div>
303
+ <ScrollArea class="h-72" :variant="variant">
304
+ <ScrollAreaViewport>
305
+ <ScrollAreaContent class="space-y-2">
306
+ <span v-for="car in automobiles" :key="car.label" class="flex items-end gap-0.5">
307
+ <span class="text-sm hover:underline!">{{ car.label }}</span>
308
+ <span class="text-surface-500 text-[11px] font-mono mb-px tracking-tighter">({{ car.value }})</span>
309
+ </span>
310
+ </ScrollAreaContent>
311
+ </ScrollAreaViewport>
312
+ <ScrollAreaScrollbar orientation="vertical">
313
+ <ScrollAreaHandle />
314
+ </ScrollAreaScrollbar>
315
+ </ScrollArea>
316
+ </div>
317
+ </div>
318
+ </div>
319
+ </template>
320
+
321
+ <script setup>
322
+ import { ref } from 'vue';
323
+
324
+ const variant = ref('auto');
325
+ const modes = ref(['auto', 'hover', 'scroll', 'always', 'hidden']);
326
+
327
+ const automobiles = ref([
328
+ { label: 'Audi', value: '200' },
329
+ { label: 'BMW', value: '350' },
330
+ { label: 'Mercedes-Benz', value: '420' },
331
+ { label: 'Volkswagen', value: '510' },
332
+ { label: 'Toyota', value: '610' },
333
+ { label: 'Honda', value: '280' },
334
+ { label: 'Hyundai', value: '390' },
335
+ { label: 'Kia', value: '260' },
336
+ { label: 'Ford', value: '470' },
337
+ { label: 'Renault', value: '530' },
338
+ { label: 'Peugeot', value: '410' },
339
+ { label: 'Citroen', value: '190' },
340
+ { label: 'Skoda', value: '360' },
341
+ { label: 'Seat', value: '210' },
342
+ { label: 'Opel', value: '440' },
343
+ { label: 'Fiat', value: '620' },
344
+ { label: 'Dacia', value: '380' },
345
+ { label: 'Volvo', value: '140' },
346
+ { label: 'Mazda', value: '120' },
347
+ { label: 'Mitsubishi', value: '110' },
348
+ { label: 'Nissan', value: '330' },
349
+ { label: 'Subaru', value: '60' },
350
+ { label: 'Suzuki', value: '170' },
351
+ { label: 'Jeep', value: '95' },
352
+ { label: 'Land Rover', value: '80' },
353
+ { label: 'Porsche', value: '75' },
354
+ { label: 'Ferrari', value: '12' },
355
+ { label: 'Lamborghini', value: '9' },
356
+ { label: 'Bentley', value: '15' },
357
+ { label: 'Rolls-Royce', value: '6' },
358
+ { label: 'Mini', value: '130' },
359
+ { label: 'Tesla', value: '220' },
360
+ { label: 'BYD', value: '55' },
361
+ { label: 'Chery', value: '160' },
362
+ { label: 'MG', value: '145' },
363
+ { label: 'DS Automobiles', value: '40' },
364
+ { label: 'Alfa Romeo', value: '50' },
365
+ { label: 'Lancia', value: '8' },
366
+ { label: 'Cadillac', value: '22' },
367
+ { label: 'Chevrolet', value: '105' },
368
+ { label: 'Dodge', value: '18' },
369
+ { label: 'GMC', value: '14' },
370
+ { label: 'Infiniti', value: '11' },
371
+ { label: 'Acura', value: '7' },
372
+ { label: 'Genesis', value: '35' },
373
+ { label: 'Geely', value: '27' },
374
+ { label: 'Proton', value: '19' },
375
+ { label: 'Togg', value: '65' },
376
+ { label: 'Rivian', value: '4' },
377
+ { label: 'Lucid', value: '3' }
378
+ ]);
379
+ <\/script>
380
+ ```
381
+
382
+ ## Custom
383
+
384
+ Scrollbar and thumb elements can be customized using classes on the sub-components.
385
+
386
+ ```vue
387
+ <template>
388
+ <div class="max-w-56 w-full mx-auto">
389
+ <div class="text-surface-500 dark:text-surface-400 font-medium text-sm uppercase font-mono tracking-tight mb-2">Automobiles</div>
390
+ <ScrollArea class="h-72">
391
+ <ScrollAreaViewport>
392
+ <ScrollAreaContent class="space-y-2">
393
+ <span v-for="car in automobiles" :key="car.label" class="flex items-end gap-0.5">
394
+ <span class="text-sm hover:underline!">{{ car.label }}</span>
395
+ <span class="text-surface-500 text-[11px] font-mono mb-px tracking-tighter">({{ car.value }})</span>
396
+ </span>
397
+ </ScrollAreaContent>
398
+ </ScrollAreaViewport>
399
+ <ScrollAreaScrollbar class="rounded-full! bg-indigo-500/10!">
400
+ <ScrollAreaHandle class="relative bg-transparent! after:content-[''] after:rounded-full after:bg-indigo-500 after:absolute after:inset-0 active:after:scale-y-90 active:after:scale-x-75 after:transition-transform" />
401
+ </ScrollAreaScrollbar>
402
+ </ScrollArea>
403
+ </div>
404
+ </template>
405
+
406
+ <script setup>
407
+ import { ref } from 'vue';
408
+
409
+ const automobiles = ref([
410
+ { label: 'Audi', value: '200' },
411
+ { label: 'BMW', value: '350' },
412
+ { label: 'Mercedes-Benz', value: '420' },
413
+ { label: 'Volkswagen', value: '510' },
414
+ { label: 'Toyota', value: '610' },
415
+ { label: 'Honda', value: '280' },
416
+ { label: 'Hyundai', value: '390' },
417
+ { label: 'Kia', value: '260' },
418
+ { label: 'Ford', value: '470' },
419
+ { label: 'Renault', value: '530' },
420
+ { label: 'Peugeot', value: '410' },
421
+ { label: 'Citroen', value: '190' },
422
+ { label: 'Skoda', value: '360' },
423
+ { label: 'Seat', value: '210' },
424
+ { label: 'Opel', value: '440' },
425
+ { label: 'Fiat', value: '620' },
426
+ { label: 'Dacia', value: '380' },
427
+ { label: 'Volvo', value: '140' },
428
+ { label: 'Mazda', value: '120' },
429
+ { label: 'Mitsubishi', value: '110' },
430
+ { label: 'Nissan', value: '330' },
431
+ { label: 'Subaru', value: '60' },
432
+ { label: 'Suzuki', value: '170' },
433
+ { label: 'Jeep', value: '95' },
434
+ { label: 'Land Rover', value: '80' },
435
+ { label: 'Porsche', value: '75' },
436
+ { label: 'Ferrari', value: '12' },
437
+ { label: 'Lamborghini', value: '9' },
438
+ { label: 'Bentley', value: '15' },
439
+ { label: 'Rolls-Royce', value: '6' },
440
+ { label: 'Mini', value: '130' },
441
+ { label: 'Tesla', value: '220' },
442
+ { label: 'BYD', value: '55' },
443
+ { label: 'Chery', value: '160' },
444
+ { label: 'MG', value: '145' },
445
+ { label: 'DS Automobiles', value: '40' },
446
+ { label: 'Alfa Romeo', value: '50' },
447
+ { label: 'Lancia', value: '8' },
448
+ { label: 'Cadillac', value: '22' },
449
+ { label: 'Chevrolet', value: '105' },
450
+ { label: 'Dodge', value: '18' },
451
+ { label: 'GMC', value: '14' },
452
+ { label: 'Infiniti', value: '11' },
453
+ { label: 'Acura', value: '7' },
454
+ { label: 'Genesis', value: '35' },
455
+ { label: 'Geely', value: '27' },
456
+ { label: 'Proton', value: '19' },
457
+ { label: 'Togg', value: '65' },
458
+ { label: 'Rivian', value: '4' },
459
+ { label: 'Lucid', value: '3' }
460
+ ]);
461
+ <\/script>
462
+ ```
463
+
464
+ ## Accessibility
465
+
466
+ Screen Reader ScrollArea hides the native scrollbar visually while leaving the underlying viewport scrollable. The viewport remains keyboard scrollable so assistive technologies can still navigate the content using standard scroll semantics. Keyboard Support Key Function tab Moves focus to interactive content inside the scroll area. arrow keys Scroll the focused viewport in the corresponding direction (native browser behaviour). page up / page down Scroll by one viewport height. home / end Scroll to the start or the end of the viewport.
467
+
468
+ ## Scroll Area API
469
+
470
+ ### Props
471
+
472
+ | Name |Type |Default |Description |
473
+ | --- | --- | --- | --- |
474
+ | variant | ScrollAreaVariant | 'auto' | Visibility behaviour of the scrollbars. |
475
+ | mask | boolean | false | When enabled, applies a fade mask to the scrollable content edges. |
476
+ | as | string \| Component | 'DIV' | The element or component used to render the root. |
477
+ | asChild | boolean | false | When enabled, root element renders without its own DOM; consumer renders via slot using `a11yAttrs` . |
478
+ | tabIndex | number | 0 | Tab index applied to the viewport when content overflows. The viewport is omitted from the tab order when content fits. |
479
+ | dt | any | - | It generates scoped CSS variables using design tokens for the component. |
480
+ | pt | PassThrough<ScrollAreaPassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
481
+ | ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
482
+ | unstyled | boolean | false | When enabled, it removes component related styles in the core. |
483
+
484
+ ### Slots
485
+
486
+ | Name |Parameters |Description |
487
+ | --- | --- | --- |
488
+ | default | Function | |
489
+
490
+ ### Pass Through Options
491
+
492
+ | Name |Type |Description |
493
+ | --- | --- | --- |
494
+ | root | ScrollAreaPassThroughOptionType | Used to pass attributes to the root's DOM element. |
495
+ | hooks | any | Used to manage all lifecycle hooks. |
496
+
497
+ ### Theming
498
+
499
+ ### CSS Classes
500
+
501
+ | Class |Description |
502
+ | --- | --- |
503
+ | p-scrollarea | Class name of the root element |
504
+ | p-scrollarea-viewport | Class name of the viewport element |
505
+ | p-scrollarea-content | Class name of the content element |
506
+ | p-scrollarea-scrollbar | Class name of the scrollbar element |
507
+ | p-scrollarea-handle-y | Class name of the vertical handle element |
508
+ | p-scrollarea-handle-x | Class name of the horizontal handle element |
509
+ | p-scrollarea-corner | Class name of the corner element |
510
+
511
+ ### Design Tokens
512
+
513
+ | Token |CSS Variable |Description |
514
+ | --- | --- | --- |
515
+ | scrollarea.background | --p-scrollarea-background | Background of root |
516
+ | scrollarea.border.color | --p-scrollarea-border-color | Border color of root |
517
+ | scrollarea.border.radius | --p-scrollarea-border-radius | Border radius of root |
518
+ | scrollarea.focus.ring.width | --p-scrollarea-focus-ring-width | Focus ring width of root |
519
+ | scrollarea.focus.ring.style | --p-scrollarea-focus-ring-style | Focus ring style of root |
520
+ | scrollarea.focus.ring.color | --p-scrollarea-focus-ring-color | Focus ring color of root |
521
+ | scrollarea.focus.ring.offset | --p-scrollarea-focus-ring-offset | Focus ring offset of root |
522
+ | scrollarea.focus.ring.shadow | --p-scrollarea-focus-ring-shadow | Focus ring shadow of root |
523
+ | scrollarea.viewport.padding | --p-scrollarea-viewport-padding | Padding of viewport |
524
+ | scrollarea.scrollbar.background | --p-scrollarea-scrollbar-background | Background of scrollbar |
525
+ | scrollarea.scrollbar.margin | --p-scrollarea-scrollbar-margin | Margin of scrollbar |
526
+ | scrollarea.scrollbar.size | --p-scrollarea-scrollbar-size | Size of scrollbar (track thickness) |
527
+ | scrollarea.scrollbar.transition.duration | --p-scrollarea-scrollbar-transition-duration | Transition duration of scrollbar |
528
+ | scrollarea.handle.background | --p-scrollarea-handle-background | Background of handle |
529
+ | scrollarea.mask.fade.size | --p-scrollarea-mask-fade-size | Fade size of mask gradient |
530
+
531
+ ## Scroll Area Viewport API
532
+
533
+ ### Props
534
+
535
+ | Name |Type |Default |Description |
536
+ | --- | --- | --- | --- |
537
+ | as | string \| Component | 'DIV' | The element or component used to render the root. |
538
+ | asChild | boolean | false | When enabled, root element renders without its own DOM; consumer renders via slot using `a11yAttrs` . |
539
+ | dt | any | - | It generates scoped CSS variables using design tokens for the component. |
540
+ | pt | PassThrough<ScrollAreaViewportPassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
541
+ | ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
542
+ | unstyled | boolean | false | When enabled, it removes component related styles in the core. |
543
+
544
+ ### Slots
545
+
546
+ | Name |Parameters |Description |
547
+ | --- | --- | --- |
548
+ | default | Function | |
549
+
550
+ ### Pass Through Options
551
+
552
+ | Name |Type |Description |
553
+ | --- | --- | --- |
554
+ | root | ScrollAreaViewportPassThroughOptionType | Used to pass attributes to the root's DOM element. |
555
+ | hooks | any | Used to manage all lifecycle hooks. |
556
+
557
+ ### Theming
558
+
559
+ ### CSS Classes
560
+
561
+ | Class |Description |
562
+ | --- | --- |
563
+ | p-scrollarea-viewport | Class name of the root element |
564
+
565
+ ## Scroll Area Content API
566
+
567
+ ### Props
568
+
569
+ | Name |Type |Default |Description |
570
+ | --- | --- | --- | --- |
571
+ | as | string \| Component | 'DIV' | The element or component used to render the root. |
572
+ | asChild | boolean | false | When enabled, root element renders without its own DOM; consumer renders via slot using `a11yAttrs` . |
573
+ | dt | any | - | It generates scoped CSS variables using design tokens for the component. |
574
+ | pt | PassThrough<ScrollAreaContentPassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
575
+ | ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
576
+ | unstyled | boolean | false | When enabled, it removes component related styles in the core. |
577
+
578
+ ### Slots
579
+
580
+ | Name |Parameters |Description |
581
+ | --- | --- | --- |
582
+ | default | Function | |
583
+
584
+ ### Pass Through Options
585
+
586
+ | Name |Type |Description |
587
+ | --- | --- | --- |
588
+ | root | ScrollAreaContentPassThroughOptionType | Used to pass attributes to the root's DOM element. |
589
+ | hooks | any | Used to manage all lifecycle hooks. |
590
+
591
+ ### Theming
592
+
593
+ ### CSS Classes
594
+
595
+ | Class |Description |
596
+ | --- | --- |
597
+ | p-scrollarea-content | Class name of the root element |
598
+
599
+ ## Scroll Area Scrollbar API
600
+
601
+ ### Props
602
+
603
+ | Name |Type |Default |Description |
604
+ | --- | --- | --- | --- |
605
+ | orientation | ScrollAreaScrollbarOrientation | 'vertical' | Axis along which the scrollbar tracks its viewport. |
606
+ | as | string \| Component | 'DIV' | The element or component used to render the root. |
607
+ | asChild | boolean | false | When enabled, root element renders without its own DOM; consumer renders via slot using `a11yAttrs` . |
608
+ | dt | any | - | It generates scoped CSS variables using design tokens for the component. |
609
+ | pt | PassThrough<ScrollAreaScrollbarPassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
610
+ | ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
611
+ | unstyled | boolean | false | When enabled, it removes component related styles in the core. |
612
+
613
+ ### Slots
614
+
615
+ | Name |Parameters |Description |
616
+ | --- | --- | --- |
617
+ | default | Function | |
618
+
619
+ ### Pass Through Options
620
+
621
+ | Name |Type |Description |
622
+ | --- | --- | --- |
623
+ | root | ScrollAreaScrollbarPassThroughOptionType | Used to pass attributes to the root'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-scrollarea-scrollbar | Class name of the root element |
633
+
634
+ ## Scroll Area Handle API
635
+
636
+ ### Props
637
+
638
+ | Name |Type |Default |Description |
639
+ | --- | --- | --- | --- |
640
+ | as | string \| Component | 'DIV' | The element or component used to render the root. |
641
+ | asChild | boolean | false | When enabled, root element renders without its own DOM; consumer renders via slot using `a11yAttrs` . |
642
+ | dt | any | - | It generates scoped CSS variables using design tokens for the component. |
643
+ | pt | PassThrough<ScrollAreaHandlePassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
644
+ | ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
645
+ | unstyled | boolean | false | When enabled, it removes component related styles in the core. |
646
+
647
+ ### Slots
648
+
649
+ | Name |Parameters |Description |
650
+ | --- | --- | --- |
651
+ | default | Function | |
652
+
653
+ ### Pass Through Options
654
+
655
+ | Name |Type |Description |
656
+ | --- | --- | --- |
657
+ | root | ScrollAreaHandlePassThroughOptionType | Used to pass attributes to the root's DOM element. |
658
+ | hooks | any | Used to manage all lifecycle hooks. |
659
+
660
+ ### Theming
661
+
662
+ ### CSS Classes
663
+
664
+ | Class |Description |
665
+ | --- | --- |
666
+ | p-scrollarea-handle | Class name of the root element |
667
+
668
+ ## Scroll Area Corner API
669
+
670
+ ### Props
671
+
672
+ | Name |Type |Default |Description |
673
+ | --- | --- | --- | --- |
674
+ | as | string \| Component | 'DIV' | The element or component used to render the root. |
675
+ | asChild | boolean | false | When enabled, root element renders without its own DOM; consumer renders via slot using `a11yAttrs` . |
676
+ | dt | any | - | It generates scoped CSS variables using design tokens for the component. |
677
+ | pt | PassThrough<ScrollAreaCornerPassThroughOptions> | - | Used to pass attributes to DOM elements inside the component. |
678
+ | ptOptions | any | - | Used to configure passthrough(pt) options of the component. |
679
+ | unstyled | boolean | false | When enabled, it removes component related styles in the core. |
680
+
681
+ ### Slots
682
+
683
+ | Name |Parameters |Description |
684
+ | --- | --- | --- |
685
+ | default | Function | |
686
+
687
+ ### Pass Through Options
688
+
689
+ | Name |Type |Description |
690
+ | --- | --- | --- |
691
+ | root | ScrollAreaCornerPassThroughOptionType | Used to pass attributes to the root's DOM element. |
692
+ | hooks | any | Used to manage all lifecycle hooks. |
693
+
694
+ ### Theming
695
+
696
+ ### CSS Classes
697
+
698
+ | Class |Description |
699
+ | --- | --- |
700
+ | p-scrollarea-corner | Class name of the root element |