@wirecore/wirelayer-vue 0.5.0 → 0.6.0

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 (84) hide show
  1. package/dist/{Button-DZ_ZGl7X.js → Button-BpMOPs8b.js} +7 -8
  2. package/dist/{ContextMenu-R23YbbaS.js → ContextMenu-C5JKyNlX.js} +132 -111
  3. package/dist/{Field-BdIPugFP.js → Field-B1EsNF84.js} +20 -17
  4. package/dist/{Highlight-DvGcm2QR.js → Highlight-Cg8DvCfq.js} +1 -1
  5. package/dist/{Input-C59NJK4m.js → Input-BhnYMKjE.js} +5 -4
  6. package/dist/{InputStatus-CUyF9-GR.js → InputStatus-D7kBGlew.js} +4 -1
  7. package/dist/{Select-BlEjQWBP.js → Select-DAuYpE1c.js} +3 -1
  8. package/dist/{Tree-B39xwNbU.js → Tree-DWxqSrO6.js} +2 -2
  9. package/dist/chart/Chart.vue.d.ts +10 -4
  10. package/dist/chart/Chart.vue.d.ts.map +1 -1
  11. package/dist/chart/index.d.ts +2 -0
  12. package/dist/chart/index.d.ts.map +1 -1
  13. package/dist/chart.js +29 -23
  14. package/dist/code.js +1 -1
  15. package/dist/components/Badge/Badge.vue.d.ts +2 -0
  16. package/dist/components/Badge/Badge.vue.d.ts.map +1 -1
  17. package/dist/components/Button/Button.vue.d.ts +5 -0
  18. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  19. package/dist/components/ChipGroup/ChipGroup.vue.d.ts +1 -1
  20. package/dist/components/ChipGroup/ChipGroup.vue.d.ts.map +1 -1
  21. package/dist/components/Combobox/Combobox.vue.d.ts +6 -1
  22. package/dist/components/Combobox/Combobox.vue.d.ts.map +1 -1
  23. package/dist/components/DatePicker/DatePicker.vue.d.ts +2 -0
  24. package/dist/components/DatePicker/DatePicker.vue.d.ts.map +1 -1
  25. package/dist/components/DatePicker/DatePickerBase.vue.d.ts +2 -0
  26. package/dist/components/DatePicker/DatePickerBase.vue.d.ts.map +1 -1
  27. package/dist/components/DateRangePicker/DateRangePicker.vue.d.ts +2 -0
  28. package/dist/components/DateRangePicker/DateRangePicker.vue.d.ts.map +1 -1
  29. package/dist/components/Dialog/DialogContent.vue.d.ts +10 -6
  30. package/dist/components/Dialog/DialogContent.vue.d.ts.map +1 -1
  31. package/dist/components/Drawer/DrawerContent.vue.d.ts +5 -5
  32. package/dist/components/Drawer/DrawerContent.vue.d.ts.map +1 -1
  33. package/dist/components/EmptyState/EmptyState.vue.d.ts +5 -5
  34. package/dist/components/EmptyState/EmptyState.vue.d.ts.map +1 -1
  35. package/dist/components/Field/Field.vue.d.ts +12 -2
  36. package/dist/components/Field/Field.vue.d.ts.map +1 -1
  37. package/dist/components/Field/context.d.ts +3 -1
  38. package/dist/components/Field/context.d.ts.map +1 -1
  39. package/dist/components/FileUpload/FileUpload.vue.d.ts +11 -0
  40. package/dist/components/FileUpload/FileUpload.vue.d.ts.map +1 -1
  41. package/dist/components/IconButton/IconButton.vue.d.ts +2 -0
  42. package/dist/components/IconButton/IconButton.vue.d.ts.map +1 -1
  43. package/dist/components/LocaleProvider/LocaleProvider.vue.d.ts +1 -0
  44. package/dist/components/LocaleProvider/LocaleProvider.vue.d.ts.map +1 -1
  45. package/dist/components/MonthPicker/MonthPicker.vue.d.ts +2 -0
  46. package/dist/components/MonthPicker/MonthPicker.vue.d.ts.map +1 -1
  47. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +6 -1
  48. package/dist/components/MultiSelect/MultiSelect.vue.d.ts.map +1 -1
  49. package/dist/components/RadioGroup/RadioGroup.vue.d.ts +1 -1
  50. package/dist/components/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
  51. package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts +2 -2
  52. package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
  53. package/dist/components/Select/Select.vue.d.ts +6 -1
  54. package/dist/components/Select/Select.vue.d.ts.map +1 -1
  55. package/dist/components/Select/types.d.ts +2 -0
  56. package/dist/components/Select/types.d.ts.map +1 -1
  57. package/dist/components/Toast/Toaster.vue.d.ts +12 -2
  58. package/dist/components/Toast/Toaster.vue.d.ts.map +1 -1
  59. package/dist/components/ToggleButton/ToggleButton.vue.d.ts +9 -2
  60. package/dist/components/ToggleButton/ToggleButton.vue.d.ts.map +1 -1
  61. package/dist/components/YearPicker/YearPicker.vue.d.ts +2 -0
  62. package/dist/components/YearPicker/YearPicker.vue.d.ts.map +1 -1
  63. package/dist/data-table/DataTable.vue.d.ts +28 -2
  64. package/dist/data-table/DataTable.vue.d.ts.map +1 -1
  65. package/dist/data-table/FilterMenu.vue.d.ts +10 -0
  66. package/dist/data-table/FilterMenu.vue.d.ts.map +1 -1
  67. package/dist/data-table/ValueInput.vue.d.ts +19 -1
  68. package/dist/data-table/ValueInput.vue.d.ts.map +1 -1
  69. package/dist/data-table/index.d.ts +1 -1
  70. package/dist/data-table/index.d.ts.map +1 -1
  71. package/dist/data-table/types.d.ts +23 -1
  72. package/dist/data-table/types.d.ts.map +1 -1
  73. package/dist/data-table.js +1452 -1331
  74. package/dist/editor.js +1 -1
  75. package/dist/form/FormField.vue.d.ts +10 -5
  76. package/dist/form/FormField.vue.d.ts.map +1 -1
  77. package/dist/form.js +122 -106
  78. package/dist/index.js +4780 -4714
  79. package/dist/pdf.js +4 -4
  80. package/dist/{useTree-Dt7NO7cp.js → useTree-H8XsFHMk.js} +2 -2
  81. package/dist/utils/list.d.ts.map +1 -1
  82. package/dist/virtual.js +2 -2
  83. package/llms-full.txt +511 -370
  84. package/package.json +2 -2
package/llms-full.txt CHANGED
@@ -22,7 +22,7 @@ Sections that open and close (one or several at a time); each item is a heading
22
22
 
23
23
  | Prop | Type | Description |
24
24
  | --- | --- | --- |
25
- | v-model? (modelValue) | `string[]` | Open items (values of AccordionItem) |
25
+ | v-model? (modelValue) | `string[]` | Open items (values of AccordionItem) – use with v-model |
26
26
  | default-value? | `string[]` | |
27
27
  | multiple? | `boolean` | Several items open at once |
28
28
  | collapsible? | `boolean` | The open item can be closed again (single mode) |
@@ -44,7 +44,8 @@ One section of an Accordion: heading button and content
44
44
 
45
45
  | Prop | Type | Description |
46
46
  | --- | --- | --- |
47
- | v-model (modelValue) | `string` | |
47
+ | value | `string` | |
48
+ | title? | `string` | Title of the trigger (also via #title) |
48
49
  | icon? | `Component` | Icon component before the title |
49
50
  | disabled? | `boolean` | |
50
51
  | heading-level? | `2 \| 3 \| 4 \| 5 \| 6` | Level of the heading around the trigger, to fit the page outline |
@@ -71,7 +72,6 @@ Actions for the selected items: a toolbar (one tab stop, arrow keys) with the co
71
72
  | label? | `string` | Accessible name of the toolbar |
72
73
  | clear-label? | `string` | Name of the button that clears the selection |
73
74
  | placement? | `'fixed' \| 'inline'` | `fixed` floats at the bottom of the window, `inline` stays in the flow |
74
- | style? | `CSSProperties` | |
75
75
  | classes? | `RecipeClasses<typeof actionBarRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
76
76
 
77
77
  | Event | Payload | Description |
@@ -107,6 +107,7 @@ Fixed in a corner of the window, e.g. a help or chat button
107
107
  | Prop | Type | Description |
108
108
  | --- | --- | --- |
109
109
  | label? | `string` | Text of the label (default "AI-generated") |
110
+ | explanation? | `string \| false` | Explanation behind the (i) button (default: a short note on AI content); `false` hides the button |
110
111
  | size? | `'sm' \| 'md'` | |
111
112
  | classes? | `RecipeClasses<typeof aiLabelRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
112
113
 
@@ -128,10 +129,10 @@ Message box with status colour, icon, title and text; role="alert" for errors an
128
129
  | status? | `AlertStatus` | |
129
130
  | variant? | `AlertVariant` | `box` (default) or `simple`: only icon and text in the status colour, e.g. for a field error |
130
131
  | size? | `'sm' \| 'md'` | |
131
- | title? | `ReactNode` | |
132
- | dismissible? | `boolean` | Shows a close button that calls `onDismiss` |
132
+ | title? | `string` | |
133
+ | dismissible? | `boolean` | Shows a close button that emits `dismiss` |
133
134
  | dismiss-label? | `string` | Accessible name of the close button |
134
- | duration? | `number` | Calls `onDismiss` after this many milliseconds. The time pauses while the pointer is over the alert or the focus is in it (WCAG 2.2.1); prefer `dismissible` for messages people need to read |
135
+ | duration? | `number` | Emits `dismiss` after this many milliseconds. The time pauses while the pointer is over the alert or the focus is in it (WCAG 2.2.1); prefer `dismissible` for messages people need to read |
135
136
  | classes? | `RecipeClasses<typeof alertRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
136
137
 
137
138
  | Event | Payload | Description |
@@ -149,7 +150,7 @@ Dial for an angle: the needle is the slider (arrow keys, Home/End), drag anywher
149
150
 
150
151
  | Prop | Type | Description |
151
152
  | --- | --- | --- |
152
- | v-model? (modelValue) | `number` | Angle 0–360 (controlled) |
153
+ | v-model? (modelValue) | `number` | Angle 0–360 – use with v-model |
153
154
  | default-value? | `number` | |
154
155
  | step? | `number` | Step of the arrow keys and of dragging (default 1) |
155
156
  | label? | `string` | Visible label, also the accessible name (or a surrounding Field, or aria-label) |
@@ -160,8 +161,6 @@ Dial for an angle: the needle is the slider (arrow keys, Home/End), drag anywher
160
161
  | read-only? | `boolean` | |
161
162
  | invalid? | `boolean` | |
162
163
  | name? | `string` | |
163
- | aria-label? | `string` | |
164
- | style? | `CSSProperties` | |
165
164
  | classes? | `RecipeClasses<typeof angleSliderRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
166
165
 
167
166
  | Event | Payload | Description |
@@ -180,17 +179,17 @@ App frame with landmarks: skip link, header (banner), side navigation (from lg o
180
179
 
181
180
  | Prop | Type | Description |
182
181
  | --- | --- | --- |
183
- | navbar-open? | `boolean` | |
182
+ | v-model:navbar-open? | `boolean` | Navigation drawer on small screens – use with v-model:navbar-open |
184
183
  | navbar-label? | `string` | Title of the drawer and name of the button that opens it |
185
184
  | skip-link-label? | `string` | |
186
185
  | skip-links? | `readonly SkipLink[]` | Further skip links after the one to the main area, e.g. [{ href: '#search', label: 'Skip to search' }] – then rendered as a named list (SkipLinks) |
187
- | navbar-collapsed? | `boolean` | The navbar is a rail of icons on the desktop (a SidebarNav inside shows tooltips) |
186
+ | v-model:navbar-collapsed? | `boolean` | The navbar is a rail of icons on the desktop (a SidebarNav inside shows tooltips) – v-model:navbar-collapsed |
188
187
  | collapsible? | `boolean` | A button in the header folds and unfolds the navbar (desktop) |
189
188
  | navbar-expand-on-hover? | `boolean` | With navbarCollapsed: the rail opens over the main area while hovered or focused |
190
189
  | navbar-resizable? | `boolean` | The navbar width can be changed with a handle (drag, arrow keys, Home/End, double click resets) |
191
190
  | aside-resizable? | `boolean` | The aside width can be changed the same way |
192
- | navbar-width? | `number` | Width of the navbar in px (default 256) |
193
- | aside-width? | `number` | Width of the aside in px (default 288) |
191
+ | v-model:navbar-width? | `number` | Width of the navbar in px (default 256) – v-model:navbar-width |
192
+ | v-model:aside-width? | `number` | Width of the aside in px (default 288) – v-model:aside-width |
194
193
  | navbar-min-width? | `number` | Limits for resizing (px) |
195
194
  | navbar-max-width? | `number` | |
196
195
  | aside-min-width? | `number` | |
@@ -241,7 +240,7 @@ One form for sign in, sign up, password reset and one-time code; errors in a sum
241
240
 
242
241
  | Prop | Type | Description |
243
242
  | --- | --- | --- |
244
- | mode? | `AuthMode` | signIn, signUp, reset (password forgotten) or code (one-time code) (controlled) |
243
+ | v-model:mode? | `AuthMode` | signIn, signUp, reset (password forgotten) or code (one-time code) – use with v-model:mode |
245
244
  | default-mode? | `AuthMode` | |
246
245
  | modes? | `readonly AuthMode[]` | Modes the links switch between (default sign in, sign up and reset) |
247
246
  | title? | `string` | Heading (default by mode) |
@@ -301,14 +300,14 @@ Free text with suggestions: type, arrow keys to pick a suggestion, Enter takes i
301
300
  | Prop | Type | Description |
302
301
  | --- | --- | --- |
303
302
  | items | `readonly T[]` | Suggestions while typing – any other text is allowed, too; strings or objects (read with itemLabel) |
304
- | v-model? (modelValue) | `string` | The text |
303
+ | v-model? (modelValue) | `string` | The text – use with v-model |
305
304
  | default-value? | `string` | |
306
- | multiple? | `boolean` | Several entries as chips (a TagsInput with these suggestions) – use values/onValuesChange |
307
- | values? | `string[]` | The entries with `multiple` |
305
+ | multiple? | `boolean` | Several entries as chips (a TagsInput with these suggestions) – use with v-model:values |
306
+ | v-model:values? | `string[]` | The entries with `multiple` – use with v-model:values |
308
307
  | default-values? | `string[]` | |
309
308
  | max? | `number` | Most entries with `multiple` |
310
309
  | filter? | `boolean` | Filters the suggestions by the typed text (ignores case and accents) |
311
- | manual-filter? | `boolean` | The suggestions are filtered elsewhere (server): no local filtering, listen to onFilterChange |
310
+ | manual-filter? | `boolean` | The suggestions are filtered elsewhere (server): no local filtering, listen to filterChange |
312
311
  | item-label? | `ItemAccessor<T, string>` | Text of a suggestion: property name or function (default: `label`, or the item itself) |
313
312
  | item-disabled? | `ItemAccessor<T, boolean>` | Disabled state of a suggestion: property name or function (default: `disabled`) |
314
313
  | item-group? | `ItemAccessor<T, string \| null \| undefined>` | Group heading of a suggestion: property name or function (default: `group`) |
@@ -316,10 +315,13 @@ Free text with suggestions: type, arrow keys to pick a suggestion, Enter takes i
316
315
  | loading? | `boolean` | Shows a spinner in the field and "Loading" in the list (aria-busy) |
317
316
  | loading-text? | `string` | Text of the loading row in the list |
318
317
  | size? | `SelectSize` | Height of the field: 32, 40 (default) or 48 px |
319
- | has-more? | `boolean` | More suggestions can be loaded: scrolling to the end of the list calls onLoadMore |
318
+ | has-more? | `boolean` | More suggestions can be loaded: scrolling to the end of the list emits loadMore |
320
319
  | data-source? | `DataSource<T>` | Loads the suggestions for the typed text (after a typing pause, outdated answers dropped) |
321
320
  | min-search-length? | `number` | Fewest characters typed before the data source is asked |
322
321
  | page-size? | `number` | Suggestions per request of the data source (default 50) |
322
+ | placeholder? | `string` | |
323
+ | disabled? | `boolean` | |
324
+ | read-only? | `boolean` | |
323
325
  | invalid? | `boolean` | |
324
326
  | required? | `boolean` | |
325
327
  | name? | `string` | |
@@ -389,6 +391,7 @@ Short label or status (solid, soft, outline or a status colour)
389
391
  | --- | --- | --- |
390
392
  | variant? | `BadgeVariant` | |
391
393
  | icon? | `Component` | Icon component rendered before the text |
394
+ | icon-props? | `Record<string, unknown>` | Props passed on to the icon component, e.g. { fill: 'currentColor' } for a filled icon or { strokeWidth: 1.5 } |
392
395
  | circle? | `boolean` | Round shape for a count or a single character (grows into a pill for longer content) |
393
396
  | classes? | `RecipeClasses<typeof badgeRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
394
397
 
@@ -408,7 +411,7 @@ Page-wide notice: message in a live region (role="alert" for danger, else "statu
408
411
  | title? | `string` | Bold text before the message |
409
412
  | position? | `BannerPosition` | `inline` (default): in the flow; `top`/`bottom`: fixed to that edge of the window |
410
413
  | dismissible? | `boolean` | Shows a close button |
411
- | open? | `boolean` | Controlled visibility |
414
+ | v-model:open? | `boolean` | Controlled visibility – use with v-model:open |
412
415
  | storage-key? | `string` | Remembers the dismissal in localStorage under this key – the banner stays hidden on the next visit |
413
416
  | icon? | `Component` | Own icon instead of the one for the variant |
414
417
  | hide-icon? | `boolean` | |
@@ -436,6 +439,22 @@ Bars per category for one or more series – vertical or horizontal, grouped or
436
439
 
437
440
  | Prop | Type | Description |
438
441
  | --- | --- | --- |
442
+ | data | `readonly ChartRow[]` | The rows: one object per category with a value per series |
443
+ | category-key | `string` | Property of each row with the category (x axis) |
444
+ | series | `readonly ChartSeries[]` | The series: key of the value, label, colour, axis, stack … |
445
+ | title | `string` | Title of the chart, also its accessible name |
446
+ | hide-title? | `boolean` | Keep the title for screen readers only |
447
+ | height? | `string` | Height of the chart area (CSS length, default 18rem) |
448
+ | table? | `boolean` | The data as a table below the chart (opens on demand) – the text alternative (default true) |
449
+ | format-value? | `(value: number) => string` | Formats values in the axis, tooltips, legend and table (default: numbers in the locale) |
450
+ | references? | `readonly ChartReference[]` | Reference lines (`value`) and areas (`from`–`to`), on the value axis or with `axis: 'x'` on the categories |
451
+ | scale? | `'linear' \| 'logarithmic'` | Logarithmic value axis |
452
+ | legend? | `boolean` | Legend (default: with more than one series) |
453
+ | brush? | `boolean` | A small overview below with a range to zoom into (keyboard: the slider's arrow keys) |
454
+ | v-model:range? | `[number, number]` | Shown rows with `brush` (inclusive indexes) – use with v-model:range |
455
+ | default-range? | `[number, number]` | |
456
+ | options? | `Record<string, unknown>` | Chart.js options – merged over the WireLayer defaults |
457
+ | classes? | `RecipeClasses<typeof chartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe chart) |
439
458
  | horizontal? | `boolean` | Bars from the start edge instead of from the bottom |
440
459
  | stacked? | `boolean` | Stack all series |
441
460
 
@@ -478,7 +497,6 @@ While blocked: the content is inert (no focus, no clicks) and busy; the overlay
478
497
  | --- | --- | --- |
479
498
  | blocked? | `boolean` | Covers the content and makes it inert |
480
499
  | label? | `string` | |
481
- | style? | `CSSProperties` | |
482
500
  | classes? | `RecipeClasses<typeof blockUiRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
483
501
 
484
502
 
@@ -497,7 +515,7 @@ Navigation landmark fixed at the bottom (above the home indicator): icon and tex
497
515
  | label? | `string` | Name of the navigation landmark (default "Navigation") |
498
516
  | current-href? | `string` | Path of the current page – the item with exactly this href gets aria-current="page" |
499
517
  | is-current? | `(item: BottomNavigationItem) => boolean` | Own check for the current page, e.g. with the router |
500
- | link-as? | `Component \| string` | Component for the links, e.g. a router link (gets `to` for links with `to`, else `href`); default <a> |
518
+ | link-as? | `string \| Component` | Component for the links, e.g. RouterLink or NuxtLink (gets `to` for links with `to`, else `href`); default <a> |
501
519
  | inline? | `boolean` | In the flow of the page instead of fixed at the bottom |
502
520
  | classes? | `RecipeClasses<typeof bottomNavigationRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
503
521
 
@@ -545,7 +563,7 @@ One step of a Breadcrumb (link, or the current page)
545
563
  | current? | `boolean` | The current page – sets aria-current="page" |
546
564
  | icon? | `Component` | Icon component before the label |
547
565
  | icon-only? | `boolean` | Show only the icon; the label stays available to screen readers |
548
- | as-child? | `boolean` | Render the child link (e.g. Next.js Link) with breadcrumb styles |
566
+ | as-child? | `boolean` | Render the slotted link (e.g. RouterLink) with breadcrumb styles |
549
567
  | classes? | `RecipeClasses<typeof breadcrumbRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
550
568
 
551
569
 
@@ -562,7 +580,7 @@ A meter (role="meter") with the value, the end of the scale and the target as it
562
580
  | --- | --- | --- |
563
581
  | label | `string` | Name of the measure, e.g. "Revenue" |
564
582
  | description? | `string` | Smaller text below the name, e.g. the unit |
565
- | v-model (modelValue) | `number` | |
583
+ | value | `number` | |
566
584
  | max | `number` | End of the scale |
567
585
  | min? | `number` | Start of the scale (default 0) |
568
586
  | target? | `number` | Target value: a marker across the bar |
@@ -590,10 +608,13 @@ Button in the variants of the design, with leading/trailing icon; loading keeps
590
608
  | block? | `boolean` | Full width of the container |
591
609
  | leading-icon? | `Component` | Icon component rendered before the label |
592
610
  | trailing-icon? | `Component` | Icon component rendered after the label |
611
+ | icon-props? | `Record<string, unknown>` | Props passed on to the leading and trailing icon, e.g. { fill: 'currentColor' } for a filled icon or { strokeWidth: 1.5 } |
593
612
  | loading? | `boolean` | Shows a spinner and ignores clicks; stays focusable (aria-disabled + aria-busy) so focus is not lost |
613
+ | disabled? | `boolean` | |
614
+ | type? | `'button' \| 'submit' \| 'reset'` | |
594
615
  | badge? | `number \| boolean` | Counter (number > 0) or dot (true) after the label |
595
616
  | badge-label? | `(count: string \| null) => string` | Added to the accessible name while a badge is shown, e.g. "Notifications 4 new". Receives the visible counter text ("4", "99+") or null for the dot |
596
- | as-child? | `boolean` | Render the child element (e.g. a link) with button styles instead of a <button> |
617
+ | as-child? | `boolean` | Render the slotted element (e.g. a link) with button styles instead of a <button> |
597
618
  | classes? | `RecipeClasses<typeof buttonRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
598
619
 
599
620
 
@@ -625,9 +646,9 @@ Calendar on the page (no field, no popup): a grid with arrow keys, Page Up/Down,
625
646
  | Prop | Type | Description |
626
647
  | --- | --- | --- |
627
648
  | selection-mode? | `'single' \| 'multiple' \| 'range'` | One day, several days, or a range (start and end) |
628
- | v-model? (modelValue) | `T` | Chosen days as ISO dates; Date objects are accepted too |
649
+ | v-model? (modelValue) | `T` | Chosen days as ISO dates – use with v-model; Date objects are accepted too |
629
650
  | default-value? | `T` | |
630
- | value-type? | `DateValueType` | What onValueChange gets: ISO strings (default) or Date objects |
651
+ | value-type? | `DateValueType` | What v-model gets: ISO strings (default) or Date objects |
631
652
  | min? | `DateLike` | |
632
653
  | max? | `DateLike` | |
633
654
  | is-date-unavailable? | `(date: string) => boolean` | Days that cannot be chosen – receives the ISO date |
@@ -644,8 +665,6 @@ Calendar on the page (no field, no popup): a grid with arrow keys, Page Up/Down,
644
665
  | weekend-days? | `readonly number[]` | Weekend days (0 = Sunday … 6) marked with data-weekend; default from the locale |
645
666
  | allow-deselect? | `boolean` | With selectionMode single: choosing the selected day again clears it |
646
667
  | time-zone? | `string` | IANA zone that decides which day is today |
647
- | render-day? | `RenderDay` | Content of a day instead of its number, e.g. a dot for appointments |
648
- | style? | `CSSProperties` | |
649
668
  | classes? | `RecipeClasses<typeof datePickerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
650
669
 
651
670
  | Event | Payload | Description |
@@ -668,7 +687,9 @@ Surface for grouped content, optionally with title, media and footer; interactiv
668
687
  | Prop | Type | Description |
669
688
  | --- | --- | --- |
670
689
  | interactive? | `boolean` | Hover state and glow, for cards that act as a link or button. Combine with `asChild` and an `<a>`/`<button>` – a clickable `<div>` is not keyboard accessible. |
671
- | as-child? | `boolean` | Render the child element (e.g. a link) with card styles instead of a <div> (the parts are not rendered) |
690
+ | as-child? | `boolean` | Render the slotted element (e.g. a link) with card styles instead of a <div> (the parts are not rendered) |
691
+ | title? | `string` | Heading of the card (also via #title) |
692
+ | subtitle? | `string` | Line below the title (also via #subtitle) |
672
693
  | title-tag? | `'h2' \| 'h3' \| 'h4' \| 'h5' \| 'h6' \| 'p'` | Element of the title – pick the level that fits the page outline |
673
694
  | orientation? | `'vertical' \| 'horizontal'` | `horizontal`: media at the start, the content beside it |
674
695
  | classes? | `RecipeClasses<typeof cardRecipe> & RecipeClasses<typeof cardPartsRecipe>` | Extra classes per part of the component, e.g. { base: "…", title: "…" } (see the recipes card and cardParts) |
@@ -704,9 +725,8 @@ Region "carousel" with slides labelled "Image n of m". Previous/next buttons, on
704
725
  | loop? | `boolean` | |
705
726
  | autoplay? | `boolean \| { delay: number }` | Turns pages by itself (default every 4 s) – always with a pause button (WCAG 2.2.2) |
706
727
  | indicators? | `boolean` | Dots below the slides, one per page |
707
- | page? | `number` | |
728
+ | v-model:page? | `number` | Current page – use with v-model:page |
708
729
  | default-page? | `number` | |
709
- | style? | `CSSProperties` | |
710
730
  | classes? | `RecipeClasses<typeof carouselRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
711
731
 
712
732
  | Event | Payload | Description |
@@ -728,7 +748,7 @@ Select with cascading levels: a menu whose groups open to the side (arrow right/
728
748
  | Prop | Type | Description |
729
749
  | --- | --- | --- |
730
750
  | items | `readonly CascadeOption<V>[]` | |
731
- | v-model? (modelValue) | `V \| null` | Chosen value; any type (see `valueKey`) |
751
+ | v-model? (modelValue) | `V \| null` | Chosen value – use with v-model; any type (see `valueKey`) |
732
752
  | default-value? | `V \| null` | |
733
753
  | placeholder? | `string` | |
734
754
  | separator? | `string` | Separator of the path shown in the trigger ("Germany › Bavaria › Munich") |
@@ -743,8 +763,6 @@ Select with cascading levels: a menu whose groups open to the side (arrow right/
743
763
  | size? | `'sm' \| 'md' \| 'lg'` | Height of the field: 32, 40 (default) or 48 px |
744
764
  | load-children? | `(option: CascadeOption<V>, request: { signal: AbortSignal }) => Promise<CascadeOption<V>[]>` | Loads the options of a level (`hasChildren: true`) when it opens; the signal aborts it |
745
765
  | data-source? | `DataSource<CascadeOption<V>>` | Source of the options of lazy levels (`getChildren`) |
746
- | aria-label? | `string` | |
747
- | style? | `CSSProperties` | |
748
766
  | classes? | `RecipeClasses<typeof cascadeSelectRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
749
767
 
750
768
  | Event | Payload | Description |
@@ -778,15 +796,15 @@ Canvas with role="img" named by the title; the data table is its text alternativ
778
796
 
779
797
  | Prop | Type | Description |
780
798
  | --- | --- | --- |
781
- | type | `TType` | |
782
- | data | `ChartData<TType>` | |
783
- | options? | `ChartOptions<TType>` | Chart.js options – merged over the WireLayer defaults (colours, font, no fixed aspect ratio) |
799
+ | type | `TType` | Chart.js chart type – it alone decides the types of `data`, `options` and `plugins` |
800
+ | data | `ChartData<NoInfer<TType>>` | |
801
+ | options? | `ChartOptions<NoInfer<TType>>` | Chart.js options – merged over the WireLayer defaults (colours, font, no fixed aspect ratio). Options kept in a variable need their type, e.g. `computed<ChartOptions<'bar'>>(…)`, or `indexAxis: 'y'` becomes a string |
802
+ | plugins? | `Plugin<NoInfer<TType>>[]` | Inline Chart.js plugins of this chart (global ones: `Chart.register`) – changing them re-creates the chart |
784
803
  | title | `string` | Title of the chart, also its accessible name |
785
804
  | hide-title? | `boolean` | Keep the title for screen readers only, e.g. inside a card that already has a heading |
786
805
  | height? | `string` | Height of the chart area (CSS length) |
787
806
  | table? | `boolean` | The data as a table below the chart (opens on demand) – the text alternative for the canvas |
788
807
  | format-value? | `(value: number) => string` | |
789
- | style? | `CSSProperties` | |
790
808
  | classes? | `RecipeClasses<typeof chartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
791
809
 
792
810
 
@@ -801,7 +819,7 @@ A message: author and time (only for screen readers when grouped), the bubble, t
801
819
 
802
820
  | Prop | Type | Description |
803
821
  | --- | --- | --- |
804
- | text? | `string` | Text of the message – Markdown unless `markdown` is false (children replace it) |
822
+ | text? | `string` | Text of the message – Markdown unless `markdown` is false (the default slot replaces it) |
805
823
  | markdown? | `boolean` | Render the text as Markdown (default true); otherwise plain text with its line breaks |
806
824
  | author? | `string` | Name of the author, above the message |
807
825
  | avatar? | `string` | Avatar image (default: the initials of the author) |
@@ -839,7 +857,7 @@ Message list: role="log" (announcements of new messages come from the live annou
839
857
  | now? | `string \| number \| Date` | Today's date – the date lines then say "Today" and "Yesterday" (pass it from the server for hydration) |
840
858
  | markdown? | `boolean` | Message texts are Markdown (default true) |
841
859
  | announce? | `boolean` | Announces new messages of others – streamed ones once they are complete (default true) |
842
- | has-more? | `boolean` | Older messages can be loaded: a button at the top calls onLoadMore |
860
+ | has-more? | `boolean` | Older messages can be loaded: a button at the top emits loadMore |
843
861
  | loading? | `boolean` | |
844
862
  | empty-text? | `string` | Text without messages |
845
863
  | classes? | `RecipeClasses<typeof chatMessagesRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -863,14 +881,14 @@ A form with a growing text field: Enter sends, Shift+Enter adds a line; while re
863
881
 
864
882
  | Prop | Type | Description |
865
883
  | --- | --- | --- |
866
- | v-model? (modelValue) | `string` | The text (controlled) |
884
+ | v-model? (modelValue) | `string` | The text – use with v-model |
867
885
  | default-value? | `string` | |
868
886
  | label? | `string` | Accessible name of the field (default "Message") |
869
887
  | placeholder? | `string` | |
870
888
  | disabled? | `boolean` | |
871
- | responding? | `boolean` | A reply is being written: the send button becomes a stop button (calls onStop) |
889
+ | responding? | `boolean` | A reply is being written: the send button becomes a stop button (emits stop) |
872
890
  | attachments? | `boolean` | A button to attach files |
873
- | files? | `File[]` | Attached files (controlled) |
891
+ | v-model:files? | `File[]` | Attached files – use with v-model:files |
874
892
  | accept? | `string` | Accepted file types for attachments, e.g. "image/*,.pdf" |
875
893
  | max-rows? | `number` | Lines the field grows to before it scrolls (default 8) |
876
894
  | send-on? | `'enter' \| 'mod-enter'` | `enter` (default): Enter sends, Shift+Enter adds a line; `mod-enter`: Ctrl/Cmd+Enter sends |
@@ -915,7 +933,7 @@ The reasoning of an answer: collapsed by default, "Thinking …" while it is bei
915
933
  | Prop | Type | Description |
916
934
  | --- | --- | --- |
917
935
  | active? | `boolean` | Still thinking: "Thinking …" with a spinner, aria-busy |
918
- | text? | `string` | The reasoning (plain text; children replace it) |
936
+ | text? | `string` | The reasoning (plain text; the default slot replaces it) |
919
937
  | duration? | `number` | Seconds it took – shown when done |
920
938
  | default-open? | `boolean` | Open at first |
921
939
  | classes? | `RecipeClasses<typeof chatDetailsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -951,10 +969,13 @@ Checkbox with label (also indeterminate), works inside Field
951
969
 
952
970
  | Prop | Type | Description |
953
971
  | --- | --- | --- |
954
- | checked? | `CheckedState` | |
972
+ | v-model:checked? | `CheckedState` | Controlled state – use with v-model:checked |
955
973
  | default-checked? | `CheckedState` | |
974
+ | disabled? | `boolean` | |
956
975
  | invalid? | `boolean` | |
957
- | v-model? (modelValue) | `string` | |
976
+ | required? | `boolean` | |
977
+ | name? | `string` | |
978
+ | value? | `string` | |
958
979
  | classes? | `RecipeClasses<typeof checkboxRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
959
980
 
960
981
  | Event | Payload | Description |
@@ -974,10 +995,18 @@ A large card that is one checkbox: title (name), description and price (descript
974
995
 
975
996
  | Prop | Type | Description |
976
997
  | --- | --- | --- |
977
- | v-model? (modelValue) | `string` | Value inside a CheckboxGroup |
978
- | checked? | `CheckedState` | Controlled state (alone; in a CheckboxGroup the group holds the value) |
998
+ | title | `string` | Title – the accessible name of the checkbox |
999
+ | description? | `string` | Text below the title – read as the description |
1000
+ | icon? | `Component` | Icon component in a box at the start |
1001
+ | price? | `string` | Price or other figure at the end, e.g. "$29 / month" – part of the description |
1002
+ | value? | `string` | Value inside a CheckboxGroup |
1003
+ | v-model:checked? | `CheckedState` | Controlled state – use with v-model:checked (alone; in a CheckboxGroup the group holds the value) |
979
1004
  | default-checked? | `CheckedState` | |
1005
+ | disabled? | `boolean` | |
980
1006
  | invalid? | `boolean` | |
1007
+ | required? | `boolean` | |
1008
+ | name? | `string` | |
1009
+ | classes? | `RecipeClasses<typeof selectionCardRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
981
1010
 
982
1011
  | Event | Payload | Description |
983
1012
  | --- | --- | --- |
@@ -996,8 +1025,16 @@ role="group" named by its label, described by helper and error text; Checkbox/Ch
996
1025
 
997
1026
  | Prop | Type | Description |
998
1027
  | --- | --- | --- |
999
- | v-model? (modelValue) | `string[]` | Values of the ticked checkboxes (controlled) |
1028
+ | v-model? (modelValue) | `string[]` | Values of the ticked checkboxes – use with v-model |
1000
1029
  | default-value? | `string[]` | |
1030
+ | label? | `string` | Visible label of the group (names it); otherwise pass aria-label |
1031
+ | helper-text? | `string` | |
1032
+ | error? | `string` | Error message – also marks the group and its checkboxes invalid |
1033
+ | invalid? | `boolean` | |
1034
+ | required? | `boolean` | Shows the required mark after the label |
1035
+ | disabled? | `boolean` | |
1036
+ | read-only? | `boolean` | |
1037
+ | name? | `string` | Name of the inputs for form submission |
1001
1038
  | max? | `number` | At most this many can be ticked – the others are disabled until one is unticked (announced) |
1002
1039
  | orientation? | `'vertical' \| 'horizontal'` | vertical (default) or horizontal |
1003
1040
  | columns? | `number` | Cards in a grid with this many columns (one column on small screens) – for CheckboxCard |
@@ -1019,11 +1056,12 @@ One option of a ChipGroup (a toggle button); outside a ChipGroup a standalone ch
1019
1056
 
1020
1057
  | Prop | Type | Description |
1021
1058
  | --- | --- | --- |
1022
- | v-model? (modelValue) | `string` | Value of the option inside a ChipGroup (required there; a standalone chip does not need it) |
1059
+ | value? | `string` | Value of the option inside a ChipGroup (required there; a standalone chip does not need it) |
1023
1060
  | icon? | `Component` | Icon component before the label |
1024
- | label? | `string` | Text of a standalone chip (or the children); also names its remove button |
1061
+ | disabled? | `boolean` | |
1062
+ | label? | `string` | Text of a standalone chip (or the default slot); also names its remove button |
1025
1063
  | avatar? | `string` | Standalone chip: small round image before the label (decorative) |
1026
- | removable? | `boolean` | Standalone chip: shows a remove button that calls `onRemove` |
1064
+ | removable? | `boolean` | Standalone chip: shows a remove button that emits `remove` |
1027
1065
  | remove-label? | `string` | Accessible name of the remove button (default: "Remove <label>") |
1028
1066
  | size? | `ChipSize` | Standalone chip: size |
1029
1067
  | classes? | `RecipeClasses<typeof chipGroupRecipe> & RecipeClasses<typeof chipRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipes chipGroup and chip) |
@@ -1044,10 +1082,10 @@ Filter chips: one or several options as toggle buttons
1044
1082
 
1045
1083
  | Prop | Type | Description |
1046
1084
  | --- | --- | --- |
1047
- | v-model? (modelValue) | `string[]` | |
1085
+ | v-model? (modelValue) | `string[]` | Selected values – use with v-model |
1048
1086
  | default-value? | `string[]` | |
1049
1087
  | multiple? | `boolean` | Allow several selected chips (default) or only one |
1050
- | label? | `string` | Accessible name of the group |
1088
+ | label? | `string` | Accessible name of the group – inside a Field with a label, the Field's label names it |
1051
1089
  | disabled? | `boolean` | |
1052
1090
  | classes? | `RecipeClasses<typeof chipGroupRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1053
1091
 
@@ -1077,7 +1115,7 @@ Code block with syntax colours; the scroll area is focusable, the copy button co
1077
1115
  | header? | `boolean` | The header with title, language and buttons (default true) |
1078
1116
  | max-height? | `string` | Height limit (CSS length); longer code scrolls – or, with `expandable`, opens with "Show all code" |
1079
1117
  | expandable? | `boolean` | With `maxHeight`: the code is cut off there and a button shows all of it |
1080
- | wrap? | `boolean` | Long lines wrap instead of scrolling (controlled) |
1118
+ | v-model:wrap? | `boolean` | Long lines wrap instead of scrolling – use with v-model:wrap |
1081
1119
  | wrap-toggle? | `boolean` | A button in the header switches line wrapping |
1082
1120
  | diff? | `boolean` | Marks lines starting with "+" as added and "-" as removed (e.g. a patch) |
1083
1121
  | added-lines? | `readonly number[]` | Added lines (1-based) – shown with "+" in front |
@@ -1102,7 +1140,7 @@ Several files: tabs with the file names (and an icon by type) above the shown co
1102
1140
  | Prop | Type | Description |
1103
1141
  | --- | --- | --- |
1104
1142
  | files | `readonly CodeFile[]` | |
1105
- | v-model? (modelValue) | `string` | Name of the shown file (controlled) |
1143
+ | v-model? (modelValue) | `string` | Name of the shown file – use with v-model |
1106
1144
  | default-value? | `string` | |
1107
1145
  | label? | `string` | Accessible name of the tabs (default "Files") |
1108
1146
  | line-numbers? | `boolean` | |
@@ -1145,7 +1183,7 @@ Colour field: type a colour (hex, rgb(), hsl(), oklch()) or open the picker with
1145
1183
 
1146
1184
  | Prop | Type | Description |
1147
1185
  | --- | --- | --- |
1148
- | v-model? (modelValue) | `string` | Colour as text in `format` (controlled) |
1186
+ | v-model? (modelValue) | `string` | Colour as text in `format` – use with v-model |
1149
1187
  | default-value? | `string` | |
1150
1188
  | format? | `ColorFormat` | Format of the value and the field: hex (default), rgb, hsl, hsb or oklch; typing accepts all of them |
1151
1189
  | alpha? | `boolean` | Adds an opacity slider |
@@ -1153,7 +1191,11 @@ Colour field: type a colour (hex, rgb(), hsl(), oklch()) or open the picker with
1153
1191
  | with-picker? | `boolean` | Area and sliders in the popup (default true); false: only the `swatches` |
1154
1192
  | eye-dropper? | `boolean` | Button to pick a colour from the screen (where supported) |
1155
1193
  | channel-inputs? | `boolean` | Number fields for the channels in the popup |
1194
+ | placeholder? | `string` | |
1195
+ | disabled? | `boolean` | |
1196
+ | read-only? | `boolean` | |
1156
1197
  | invalid? | `boolean` | |
1198
+ | name? | `string` | Name of the field for form submission (its text) |
1157
1199
  | classes? | `RecipeClasses<typeof colorPickerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1158
1200
 
1159
1201
  | Event | Payload | Description |
@@ -1171,7 +1213,7 @@ Colour field: the button opens a panel with area, hue (and opacity) slider, hex
1171
1213
 
1172
1214
  | Prop | Type | Description |
1173
1215
  | --- | --- | --- |
1174
- | v-model? (modelValue) | `string` | Colour, e.g. "#1e66f5" ("#1e66f580" with alpha; in `format`) |
1216
+ | v-model? (modelValue) | `string` | Colour, e.g. "#1e66f5" ("#1e66f580" with alpha; in `format`) – use with v-model |
1175
1217
  | default-value? | `string` | |
1176
1218
  | alpha? | `boolean` | Adds an opacity slider; the value then has 8 hex digits |
1177
1219
  | swatches? | `readonly string[]` | Preset colours shown below the picker |
@@ -1183,8 +1225,6 @@ Colour field: the button opens a panel with area, hue (and opacity) slider, hex
1183
1225
  | read-only? | `boolean` | |
1184
1226
  | invalid? | `boolean` | |
1185
1227
  | name? | `string` | |
1186
- | aria-label? | `string` | Accessible name without a surrounding Field |
1187
- | style? | `CSSProperties` | |
1188
1228
  | classes? | `RecipeClasses<typeof colorPickerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1189
1229
 
1190
1230
  | Event | Payload | Description |
@@ -1205,7 +1245,7 @@ Colours as a radio group (arrow keys): every swatch is named by its colour name,
1205
1245
  | Prop | Type | Description |
1206
1246
  | --- | --- | --- |
1207
1247
  | items | `readonly ColorSwatch[]` | The colours to choose from |
1208
- | v-model? (modelValue) | `string \| null` | Chosen colour (its value, controlled) |
1248
+ | v-model? (modelValue) | `string \| null` | Chosen colour (its value) – use with v-model |
1209
1249
  | default-value? | `string \| null` | |
1210
1250
  | label? | `string` | Visible label of the group (default "Color"; or aria-label) |
1211
1251
  | show-labels? | `boolean` | Shows the names below the swatches (otherwise only for screen readers) |
@@ -1233,12 +1273,15 @@ Text field with suggestions (autocomplete): type to filter, arrow keys to choose
1233
1273
  | Prop | Type | Description |
1234
1274
  | --- | --- | --- |
1235
1275
  | items | `readonly T[]` | Options: SelectItem objects – or any objects or values, read with itemValue/itemLabel/itemDisabled/itemGroup |
1236
- | v-model? (modelValue) | `V \| null` | Chosen value; any type (string, number, boolean, object) |
1276
+ | v-model? (modelValue) | `V \| null` | Chosen value – use with v-model; any type (string, number, boolean, object) |
1237
1277
  | default-value? | `V \| null` | |
1238
- | filter? | `boolean` | Filters the items by the typed text (ignores case and accents) |
1239
- | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to onFilterChange |
1278
+ | filter? | `boolean` | Filters the items by the typed text (label and itemKeywords; ignores case and accents) |
1279
+ | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to filterChange |
1240
1280
  | allow-custom-value? | `boolean` | Typed text that matches no item becomes the value (a string) on Enter or when leaving the field – an editable select |
1241
1281
  | empty-text? | `string` | Shown when nothing matches |
1282
+ | placeholder? | `string` | |
1283
+ | disabled? | `boolean` | |
1284
+ | read-only? | `boolean` | |
1242
1285
  | invalid? | `boolean` | |
1243
1286
  | required? | `boolean` | |
1244
1287
  | name? | `string` | |
@@ -1246,12 +1289,13 @@ Text field with suggestions (autocomplete): type to filter, arrow keys to choose
1246
1289
  | item-label? | `ItemAccessor<T, string>` | Label of an item: property name or function (default: `label`) |
1247
1290
  | item-disabled? | `ItemAccessor<T, boolean>` | Disabled state of an item: property name or function (default: `disabled`) |
1248
1291
  | item-group? | `ItemAccessor<T, string \| null \| undefined>` | Group heading of an item: property name or function (default: `group`); items are listed per group |
1292
+ | item-keywords? | `ItemAccessor<T, string \| readonly string[] \| null \| undefined>` | More text the search finds an item by, besides its label: property name or function, one text or a list (default: `keywords`), e.g. the name of the item's category |
1249
1293
  | value-key? | `ItemAccessor<V, string \| number>` | Identifies object values (property name or function), e.g. "id" – without it objects are compared by content |
1250
1294
  | clearable? | `boolean` | Button that clears value and text (default true; not a tab stop – the text can be deleted, too) |
1251
1295
  | loading? | `boolean` | Shows a spinner in the field and "Loading" in the list (aria-busy) |
1252
1296
  | loading-text? | `string` | Text of the loading row in the list |
1253
1297
  | size? | `SelectSize` | Height of the field: 32, 40 (default) or 48 px |
1254
- | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list calls onLoadMore |
1298
+ | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list emits loadMore |
1255
1299
  | data-source? | `DataSource<T>` | Loads the options for the typed text (after a typing pause, outdated answers dropped; pages while scrolling); `getItemsByKeys` gives the label of a chosen value that is not loaded |
1256
1300
  | min-search-length? | `number` | Fewest characters typed before the data source is asked |
1257
1301
  | page-size? | `number` | Options per request of the data source (default 50) |
@@ -1279,17 +1323,17 @@ Dialog with a search field (combobox) and the matching items (listbox): typing f
1279
1323
  | Prop | Type | Description |
1280
1324
  | --- | --- | --- |
1281
1325
  | items | `readonly CommandItem[]` | |
1282
- | open? | `boolean` | |
1283
- | data-source? | `DataSource<CommandItem>` | Results from a server: asked with the search text after a typing pause (outdated answers dropped); they come after the matching `items` |
1284
- | min-search-length? | `number` | Fewest characters the search needs before the data source is asked (default 0) |
1326
+ | v-model:open? | `boolean` | Open state – use with v-model:open |
1285
1327
  | hotkey? | `boolean \| string \| string[]` | Opens with Strg+K / ⌘K anywhere on the page – or with own shortcuts: "mod+p", ["mod+k", "/"] (mod is Strg or ⌘; shortcuts without Strg/⌘/Alt do not fire while typing in a field). `false` switches it off |
1286
1328
  | placeholder? | `string` | |
1287
1329
  | limit? | `number` | At most this many results |
1288
- | filter? | `((item: CommandItem, query: string) => number \| boolean) \| false` | Own matching: a score per item (higher first, `false`/0 hides it) – or `false` to show the items as they are (results from the server, see `onSearch`) |
1330
+ | filter? | `((item: CommandItem, query: string) => number \| boolean) \| false` | Own matching: a score per item (higher first, `false`/0 hides it) – or `false` to show the items as they are (results from the server, see `search`) |
1289
1331
  | highlight? | `boolean` | Marks the searched text in the labels |
1290
1332
  | clear-query-on-close? | `boolean` | Starts with an empty search field every time it opens |
1291
1333
  | close-on-select? | `boolean` | Closes after running an item |
1292
- | loading? | `boolean` | Results are being loaded (e.g. after `onSearch`) |
1334
+ | loading? | `boolean` | Results are being loaded (e.g. after `search`) |
1335
+ | data-source? | `DataSource<CommandItem>` | Results from a server: asked with the search text after a typing pause (outdated answers dropped); they come after the matching `items` |
1336
+ | min-search-length? | `number` | Fewest characters the search needs before the data source is asked (default 0) |
1293
1337
  | empty-text? | `string` | Text when nothing matches |
1294
1338
  | classes? | `RecipeClasses<typeof commandPaletteRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1295
1339
 
@@ -1317,7 +1361,7 @@ Two images on top of each other; the range input over them moves the line (drag,
1317
1361
  | label? | `string` | Accessible name of the slider |
1318
1362
  | before-label? | `string` | |
1319
1363
  | after-label? | `string` | |
1320
- | v-model? (modelValue) | `number` | Share of the before image in percent |
1364
+ | v-model? (modelValue) | `number` | Share of the before image in percent – use with v-model |
1321
1365
  | default-value? | `number` | |
1322
1366
  | aspect-ratio? | `string` | Aspect ratio of the area (CSS) |
1323
1367
  | classes? | `RecipeClasses<typeof compareRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -1338,6 +1382,22 @@ Bars and lines in one chart (series[].type), e.g. revenue as bars and margin as
1338
1382
 
1339
1383
  | Prop | Type | Description |
1340
1384
  | --- | --- | --- |
1385
+ | data | `readonly ChartRow[]` | The rows: one object per category with a value per series |
1386
+ | category-key | `string` | Property of each row with the category (x axis) |
1387
+ | series | `readonly ChartSeries[]` | The series: key of the value, label, colour, axis, stack … |
1388
+ | title | `string` | Title of the chart, also its accessible name |
1389
+ | hide-title? | `boolean` | Keep the title for screen readers only |
1390
+ | height? | `string` | Height of the chart area (CSS length, default 18rem) |
1391
+ | table? | `boolean` | The data as a table below the chart (opens on demand) – the text alternative (default true) |
1392
+ | format-value? | `(value: number) => string` | Formats values in the axis, tooltips, legend and table (default: numbers in the locale) |
1393
+ | references? | `readonly ChartReference[]` | Reference lines (`value`) and areas (`from`–`to`), on the value axis or with `axis: 'x'` on the categories |
1394
+ | scale? | `'linear' \| 'logarithmic'` | Logarithmic value axis |
1395
+ | legend? | `boolean` | Legend (default: with more than one series) |
1396
+ | brush? | `boolean` | A small overview below with a range to zoom into (keyboard: the slider's arrow keys) |
1397
+ | v-model:range? | `[number, number]` | Shown rows with `brush` (inclusive indexes) – use with v-model:range |
1398
+ | default-range? | `[number, number]` | |
1399
+ | options? | `Record<string, unknown>` | Chart.js options – merged over the WireLayer defaults |
1400
+ | classes? | `RecipeClasses<typeof chartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe chart) |
1341
1401
  | curved? | `boolean` | Curved lines |
1342
1402
  | stacked? | `boolean` | Stack the bars |
1343
1403
 
@@ -1357,9 +1417,9 @@ Nested and/or groups of rules: field, operator and a value editor matching the f
1357
1417
 
1358
1418
  | Prop | Type | Description |
1359
1419
  | --- | --- | --- |
1360
- | fields | `readonly ConditionField[]` | Fields the rules can test: id, label, type (text, number, date, select, boolean), options of a select |
1361
- | v-model? (modelValue) | `ConditionGroup` | The condition tree (JSON: groups with combinator and children, rules with field, operator, value) – controlled |
1420
+ | v-model? (modelValue) | `ConditionGroup` | The condition tree (JSON: groups with combinator and children, rules with field, operator, value) – v-model |
1362
1421
  | default-value? | `ConditionGroup` | |
1422
+ | fields | `readonly ConditionField[]` | Fields the rules can test: id, label, type (text, number, date, select, boolean), options of a select |
1363
1423
  | label? | `string` | Name of the whole tree (default "Conditions") |
1364
1424
  | max-depth? | `number` | How deep groups can be nested (default 3) |
1365
1425
  | disabled? | `boolean` | |
@@ -1441,7 +1501,7 @@ Centred content with a maximum width and side padding
1441
1501
  | --- | --- | --- |
1442
1502
  | size? | `'sm' \| 'md' \| 'lg' \| 'xl' \| 'full'` | Maximum width: sm (42rem), md (48rem), lg (64rem, default), xl (80rem) or full |
1443
1503
  | flush? | `boolean` | Without the side padding |
1444
- | as? | `Component \| string` | Element to render, e.g. "section" (default div) |
1504
+ | as? | `string \| Component` | Element to render, e.g. "section" (default div) |
1445
1505
  | classes? | `RecipeClasses<typeof containerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1446
1506
 
1447
1507
 
@@ -1458,6 +1518,7 @@ Opens at the pointer on right click, on touch screens with a long press (and wit
1458
1518
  | --- | --- | --- |
1459
1519
  | items | `readonly MenuEntry[]` | Items, groups, separators, checkbox items, radio groups and submenus – as in Menu |
1460
1520
  | label? | `string` | Accessible name of the menu – without it the menu is named by the area's content |
1521
+ | link-as? | `Component \| string` | Component for link items, e.g. RouterLink or NuxtLink (gets `to` for items with `to`, else `href`); default <a> |
1461
1522
  | classes? | `RecipeClasses<typeof menuRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1462
1523
 
1463
1524
  | Event | Payload | Description |
@@ -1481,11 +1542,10 @@ Copies the value; the icon turns into a check and "Copied to clipboard" is annou
1481
1542
 
1482
1543
  | Prop | Type | Description |
1483
1544
  | --- | --- | --- |
1484
- | v-model (modelValue) | `string` | Text that is copied |
1545
+ | value | `string` | Text that is copied |
1485
1546
  | show-value? | `boolean` | Shows the value next to the button (monospace) |
1486
1547
  | label? | `string` | Accessible name, e.g. "Copy IP address" |
1487
1548
  | size? | `Size` | |
1488
- | style? | `CSSProperties` | |
1489
1549
  | classes? | `RecipeClasses<typeof copyButtonRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1490
1550
 
1491
1551
 
@@ -1557,7 +1617,7 @@ One term and its value in a DataList
1557
1617
 
1558
1618
  | Prop | Type | Description |
1559
1619
  | --- | --- | --- |
1560
- | label | `string` | The term (<dt>); the children are its value (<dd>) |
1620
+ | label | `string` | The term (<dt>); the slot is its value (<dd>) |
1561
1621
  | classes? | `RecipeClasses<typeof dataListRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1562
1622
 
1563
1623
 
@@ -1572,79 +1632,82 @@ Data table on TanStack Table: sorting (also by several columns), search, filter
1572
1632
 
1573
1633
  | Prop | Type | Description |
1574
1634
  | --- | --- | --- |
1575
- | data? | `readonly TData[]` | The rows (with `dataSource` the table loads them itself) |
1576
- | data-source? | `DataTableDataSource<TData>` | Rows from a server instead of `data` and `manual`: the table asks `getRows` (page, sorting, filters, search, grouping, abort signal) whenever they change, cancels outdated requests, goes back to page 1 when filters, sorting or the search change, shows errors with "Try again" – `refresh()` asks again |
1635
+ | data? | `readonly T[]` | The rows (with `dataSource` the table loads them itself) |
1636
+ | data-source? | `DataTableDataSource<T>` | Rows from a server instead of `data` and `manual`: the table asks `getRows` (page, sorting, filters, search, grouping, abort signal) whenever they change, cancels outdated requests, goes back to page 1 when filters, sorting or the search change, shows errors with "Try again" – `refresh()` asks again |
1577
1637
  | cache-time? | `number` | How long answers of `dataSource` are reused for the same query, in ms (default 0: always ask) |
1578
1638
  | search-debounce? | `number` | Pause after typing in the search before `dataSource` is asked, in ms (default 300) |
1579
1639
  | pivot? | `DataTablePivot` | Cross table of `data`: rows grouped by the values of `rows`, a column per value combination of `columns`, the `values` aggregated in the cells, totals per row and column (ids are column ids of `columns`) |
1580
- | columns | `readonly DataTableColumn<TData>[]` | |
1640
+ | columns | `readonly DataTableColumn<T>[]` | |
1581
1641
  | caption | `string` | Accessible name of the table (visually hidden caption) |
1582
- | get-row-id? | `(row: TData, index: number) => string` | |
1583
- | page-size? | `number` | Rows per page – enables pagination (changeable with `pageSizeOptions`) |
1642
+ | get-row-id? | `(row: T, index: number) => string` | |
1643
+ | v-model:page-size? | `number` | Rows per page – enables pagination (v-model:page-size with `pageSizeOptions`) |
1584
1644
  | page-size-options? | `readonly number[]` | Choices for the rows per page, shown next to the pagination |
1585
- | page? | `number` | Current page (1-based); controlled together with onPageChange |
1586
- | first? | `number` | Index of the first row of the current page (0-based) – instead of `page`; controlled with onFirstChange |
1645
+ | v-model:page? | `number` | Current page (1-based) – use with v-model:page |
1646
+ | v-model:first? | `number` | Index of the first row of the current page (0-based) – instead of `page`, use with v-model:first |
1587
1647
  | paginator-position? | `'top' \| 'bottom'` | Pagination below (default) or above the table |
1588
- | sorting? | `DataTableSort \| DataTableSort[] \| null` | Current sorting; controlled together with onSortingChange – an array in the multiple mode |
1589
- | default-sorting? | `DataTableSort \| DataTableSort[] \| null` | Sorting at the start (uncontrolled) |
1648
+ | v-model:sorting? | `DataTableSort \| DataTableSort[] \| null` | Current sorting – use with v-model:sorting; an array in the multiple mode |
1649
+ | default-sorting? | `DataTableSort \| DataTableSort[] \| null` | Sorting at the start, without v-model |
1590
1650
  | sort-mode? | `'single' \| 'multiple'` | `multiple`: Shift+click (or the column menu) sorts by further columns |
1591
1651
  | manual? | `boolean` | Server mode: `data` is the current page, already sorted and filtered; requires `rowCount` |
1592
1652
  | row-count? | `number` | |
1593
- | selectable? | `boolean` | Selection column |
1653
+ | selectable? | `boolean` | Selection column – selected row ids via v-model:selection |
1594
1654
  | selection-mode? | `'multiple' \| 'single'` | `multiple` (checkboxes, default) or `single` (radio buttons) |
1595
- | selection? | `string[]` | |
1655
+ | v-model:selection? | `string[]` | |
1656
+ | v-model:selected-rows? | `readonly T[]` | The selected rows as objects – use with v-model:selected-rows (instead of or next to `selection`); rows are found by `getRowId` |
1596
1657
  | select-on-row-click? | `boolean` | A click on the row (not on its controls) selects it; Shift+click selects a range |
1597
- | is-row-selectable? | `(row: TData) => boolean` | Rows that cannot be selected get a disabled checkbox |
1598
- | select-all-mode? | `'page' \| 'all'` | `all` with `manual`: "select all" means every row on every page – `allSelection` then holds `{ mode: 'all', except }` (the rows unchecked since); without `manual` all rows of `data` are selected |
1599
- | all-selection? | `DataTableAllSelection \| null` | "Select all" across the pages of a server table (`selectAllMode="all"`); controlled with onAllSelectionChange |
1600
- | row-label? | `(row: TData, index: number) => string` | Names a row for its controls ("Select <label>") |
1658
+ | is-row-selectable? | `(row: T) => boolean` | Rows that cannot be selected get a disabled checkbox |
1659
+ | select-all-mode? | `'page' \| 'all'` | `all` with `manual`: "select all" means every row on every page – v-model:all-selection then holds `{ mode: 'all', except }` (the rows unchecked since); without `manual` all rows of `data` are selected |
1660
+ | v-model:all-selection? | `DataTableAllSelection \| null` | "Select all" across the pages of a server table (`selectAllMode="all"`) – use with v-model:all-selection |
1661
+ | row-label? | `(row: T, index: number) => string` | Names a row for its controls ("Select <label>") |
1601
1662
  | loading? | `boolean` | |
1602
1663
  | loading-variant? | `'overlay' \| 'skeleton'` | While loading: the table fades (`overlay`, default) or shows placeholder rows (`skeleton`) |
1603
1664
  | empty-text? | `string` | |
1604
1665
  | no-results-text? | `string` | Shown when the filters or the search leave no row (default: `emptyText`) |
1605
1666
  | loading-text? | `string` | |
1606
1667
  | select-all-label? | `string` | |
1607
- | get-sub-rows? | `(row: TData) => TData[] \| undefined` | TreeTable: child rows of a row – they appear indented below it and can be expanded |
1668
+ | get-sub-rows? | `(row: T) => T[] \| undefined` | TreeTable: child rows of a row – they appear indented below it and can be expanded |
1608
1669
  | tree-filter-mode? | `'lenient' \| 'strict'` | TreeTable filters: `strict` (default) – a row must match itself; `lenient` – a match in a child keeps its parents |
1609
- | expanded? | `string[]` | Expanded rows (ids); controlled together with onExpandedChange – also the rows with open details |
1670
+ | v-model:expanded? | `string[]` | Expanded rows (ids) – use with v-model:expanded; also the rows with open details (#expansion) |
1610
1671
  | default-expanded? | `string[]` | |
1611
- | expand-label? | `(row: TData, index: number) => string` | Names the expand button of a row |
1612
- | advanced-filter? | `boolean \| ConditionField[]` | Advanced filter: the rows pass a condition tree (nested and/or rules). `true` offers every column with a filter type; or pass the fields. A toolbar button opens the editor from `renderAdvancedFilter` above the table – usually `ConditionBuilder` from `@wirecore/wirelayer-blocks-react`; without it there is no button (the tree still filters). A server filters instead: `dataSource` gets the tree as `condition`, with `manual` the parent applies `advancedFilterValue` |
1613
- | advanced-filter-value? | `ConditionGroup` | The condition tree of the advanced filter (controlled together with onAdvancedFilterValueChange) |
1614
- | search? | `boolean` | Search field above the table: filters over all columns |
1615
- | global-filter? | `string` | |
1672
+ | expand-label? | `(row: T, index: number) => string` | Names the expand button of a row |
1673
+ | advanced-filter? | `boolean \| ConditionField[]` | Advanced filter: the rows pass a condition tree (nested and/or rules; v-model:advanced-filter-value). `true` offers every column with a filter type; or pass the fields. A toolbar button opens the editor from the `#advancedFilter` slot above the table – usually `ConditionBuilder` from `@wirecore/wirelayer-blocks-vue`; without it there is no button (the tree still filters). A server filters instead: `dataSource` gets the tree as `condition`, with `manual` the parent applies it |
1674
+ | v-model:advanced-filter-value? | `ConditionGroup` | The condition tree of the advanced filter (controlled together with onAdvancedFilterValueChange) |
1675
+ | search? | `boolean` | Search field above the table: filters over all columns (v-model:global-filter) |
1676
+ | v-model:global-filter? | `string` | |
1677
+ | row-keywords? | `(row: T) => string \| readonly string[] \| null \| undefined` | More text the search finds a row by, besides its columns – e.g. fields without a column of their own (not in server mode: there the server searches) |
1616
1678
  | highlight-search? | `boolean` | Marks the search hits in the cells |
1617
- | filters? | `Record<string, DataTableFilterValue>` | Column filters by column id; controlled together with onFiltersChange |
1679
+ | v-model:filters? | `Record<string, DataTableFilterValue>` | Column filters by column id – use with v-model:filters |
1618
1680
  | filter-display? | `'row' \| 'menu' \| 'none'` | Filters in a row below the headers, as a menu per column with match modes and conditions, or none |
1619
- | show-filters? | `boolean` | Shows the filter row or menus (`filterToggle`); controlled with onShowFiltersChange – the filters keep working |
1681
+ | v-model:show-filters? | `boolean` | Shows the filter row or menus – use with v-model:show-filters (`filterToggle`); the filters keep working |
1620
1682
  | filter-toggle? | `boolean` | Button in the toolbar that shows and hides the filters |
1683
+ | filter-reset? | `boolean` | Button in the toolbar that clears the column filters, the search and the advanced filter (`resetFilters()`) |
1621
1684
  | max-constraints? | `number` | Conditions per column in the filter menu |
1622
1685
  | resizable? | `boolean` | Column widths can be changed by dragging the header edge or with the arrow keys |
1623
- | column-toggle? | `boolean` | Menu above the table to show and hide columns |
1624
- | hidden-columns? | `string[]` | |
1686
+ | column-toggle? | `boolean` | Menu above the table to show and hide columns (v-model:hidden-columns) |
1687
+ | v-model:hidden-columns? | `string[]` | |
1625
1688
  | column-menu? | `boolean` | Menu per column header: sort, pin, move, hide, group |
1626
- | reorderable-columns? | `boolean` | Columns can be moved by drag and drop or the column menu |
1627
- | column-order? | `string[]` | |
1628
- | pinned-columns? | `{ start: string[]; end: string[] }` | Pinned columns (default: `pinned` of the columns) |
1689
+ | reorderable-columns? | `boolean` | Columns can be moved by drag and drop or the column menu (v-model:column-order) |
1690
+ | v-model:column-order? | `string[]` | |
1691
+ | v-model:pinned-columns? | `{ start: string[]; end: string[] }` | Pinned columns – use with v-model:pinned-columns (default: `pinned` of the columns) |
1629
1692
  | export-filename? | `string` | Shows an export button; the CSV has the filtered and sorted rows of all pages (or the selection) |
1630
1693
  | csv-separator? | `string` | Separator of the CSV export, also of the export button – default: from the locale (";" where numbers have a decimal comma, e.g. de-DE, as a spreadsheet there expects it; "," otherwise) |
1631
1694
  | export-formats? | `('csv' \| 'xlsx')[]` | Formats of the export button: CSV (default), Excel (.xlsx) or both |
1632
- | group-by? | `string \| string[]` | Groups the rows by the values of these columns (expandable group rows) |
1695
+ | v-model:group-by? | `string \| string[]` | Groups the rows by the values of these columns (expandable group rows) – v-model:group-by |
1633
1696
  | frozen-rows? | `readonly string[]` | Rows (ids) that stay at the top, also while scrolling and paging |
1634
- | reorderable-rows? | `boolean` | Rows can be moved with the drag handle (mouse or arrow keys) |
1697
+ | reorderable-rows? | `boolean` | Rows can be moved with the drag handle (mouse or arrow keys) – reported via row-reorder |
1635
1698
  | row-numbers? | `boolean` | Column with the row number |
1636
- | row-actions? | `MenuEntry[] \| ((row: TData) => MenuEntry[])` | Menu per row (last column) |
1699
+ | row-actions? | `MenuEntry[] \| ((row: T) => MenuEntry[])` | Menu per row (last column) – reported via row-action |
1637
1700
  | context-menu? | `boolean` | The row actions also open on right click (and Shift+F10) |
1638
- | row-class? | `(row: TData) => string \| undefined` | Extra classes of a row |
1639
- | row-href? | `(row: TData) => string \| undefined` | Rows as links: the first cell holds a real link (Ctrl+click and middle click open a new tab), a click anywhere on the row follows it – `onRowClick` can take over the navigation (router) |
1701
+ | row-class? | `(row: T) => string \| undefined` | Extra classes of a row |
1702
+ | row-href? | `(row: T) => string \| undefined` | Rows as links: the first cell holds a real link (Ctrl+click and middle click open a new tab), a click anywhere on the row follows it – `row-click` can take over the navigation (router) |
1640
1703
  | navigation? | `'tab' \| 'grid'` | `grid`: keyboard like a spreadsheet (ARIA grid) – one Tab stop, arrow keys from cell to cell, Home/End, Ctrl+Home/End, Page Up/Down, Enter/F2 into a cell or edit it, Escape back, Space selects the row |
1641
1704
  | status-bar? | `boolean` | Bar below the table: rows, filtered and selected rows, sum and average of the selected numbers |
1642
1705
  | cell-selection? | `boolean` | Cells can be selected as a range: drag with the mouse, Shift+click, Shift+arrow keys (`navigation="grid"`). Ctrl+C copies the range (or the selected rows) as tab-separated text, Ctrl+V pastes text from Excel into editable cells from the active cell on (a single value fills the range), Ctrl+Z/Ctrl+Y undo and redo |
1643
1706
  | find? | `boolean` | Button "Find in table": finds text in the cells, match x of y, previous/next, marks the matches |
1644
1707
  | wrap-headers? | `boolean` | Long header texts wrap instead of being shortened |
1645
1708
  | vertical-headers? | `boolean` | Header texts read from bottom to top (narrow columns) |
1646
- | edit-mode? | `'cell' \| 'row' \| 'batch'` | `cell`: one cell at a time (Tab moves on); `row`: a whole row with save and cancel; `batch`: like `cell`, but the changes are collected (marked) until "Save" (`onSave`) or "Discard", with undo and redo |
1647
- | size? | `Density` | Row height (`densityToggle`) |
1709
+ | edit-mode? | `'cell' \| 'row' \| 'batch'` | `cell`: one cell at a time (Tab moves on); `row`: a whole row with save and cancel; `batch`: like `cell`, but the changes are collected (marked) until "Save" (`save`) or "Discard", with undo and redo |
1710
+ | v-model:size? | `'sm' \| 'md' \| 'lg'` | Row height – use with v-model:size (`densityToggle`) |
1648
1711
  | density-toggle? | `boolean` | Menu above the table to change the row height |
1649
1712
  | gridlines? | `boolean` | Lines between the columns |
1650
1713
  | striped? | `boolean` | Every other row tinted |
@@ -1655,6 +1718,7 @@ Data table on TanStack Table: sorting (also by several columns), search, filter
1655
1718
  | row-height? | `number` | Estimated row height in px for `virtual` |
1656
1719
  | state-key? | `string` | Keeps sorting, filters, page, widths, order and the other settings in the browser under this key |
1657
1720
  | state-storage? | `'local' \| 'session'` | |
1721
+ | state-exclude? | `readonly DataTableStateKey[]` | Parts of the state that `stateKey` does not keep – default: the selection (`[]` keeps it, too) |
1658
1722
  | classes? | `RecipeClasses<typeof dataTableRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1659
1723
 
1660
1724
  | Event | Payload | Description |
@@ -1664,6 +1728,7 @@ Data table on TanStack Table: sorting (also by several columns), search, filter
1664
1728
  | v-model:show-filters | `show: boolean` | |
1665
1729
  | v-model:all-selection | `selection: DataTableAllSelection \| null` | |
1666
1730
  | @selected-rows-change | `rows: TData[]` | The selected rows as objects (with `selection`; rows of other pages are remembered) |
1731
+ | v-model:selected-rows | `rows: TData[]` | |
1667
1732
  | @row-click | `click: DataTableRowClick<TData>` | A click on a row (not on its controls) – with `rowHref`, `event.preventDefault()` stops the navigation |
1668
1733
  | v-model:page-size | `pageSize: number` | |
1669
1734
  | v-model:sorting | `sorting: DataTableSort \| DataTableSort[] \| null` | |
@@ -1692,6 +1757,7 @@ Data table on TanStack Table: sorting (also by several columns), search, filter
1692
1757
  | #cell-<id> | `{ row: TData; value: unknown }` | Content of a cell, by column id |
1693
1758
  | #filter-<id> | `DataTableFilterInputProps<TData>` | Own filter input of a column (filter row and filter menu), by column id |
1694
1759
  | #editor-<id> | `DataTableEditorProps<TData>` | Own editor of a column, by column id |
1760
+ | #option-<id> | `{ item: unknown; selected: boolean; highlighted: boolean; disabled: boolean; }` | An option in the select filter and editor lists of a column, by column id – e.g. a status as a badge |
1695
1761
  | #expansion | `{ row: TData; rowId: string }` | Details below an expanded row – adds the expand column |
1696
1762
  | #advancedFilter | `DataTableAdvancedFilterProps` | The editor of the advanced filter, e.g. ConditionBuilder from `@wirecore/wirelayer-blocks-vue`: `<template #advancedFilter="{ fields, value, setValue, label }">` |
1697
1763
  | #toolbar | – | Own controls in the toolbar, after the search |
@@ -1713,12 +1779,12 @@ Items as a list or grid (a list either way); the switch is a radio group "View"
1713
1779
  | --- | --- | --- |
1714
1780
  | items? | `readonly T[]` | |
1715
1781
  | label | `string` | Accessible name of the list, e.g. "Server" |
1716
- | layout? | `'list' \| 'grid'` | |
1782
+ | v-model:layout? | `'list' \| 'grid'` | List or grid – use with v-model:layout |
1717
1783
  | default-layout? | `'list' \| 'grid'` | |
1718
1784
  | layout-toggle? | `boolean` | Switch between list and grid above the items |
1719
- | page-size? | `number` | Items per page – enables pagination (onPageSizeChange with `pageSizes`) |
1785
+ | v-model:page-size? | `number` | Items per page – enables pagination (v-model:page-size with `pageSizes`) |
1720
1786
  | page-sizes? | `readonly number[]` | Page sizes to choose from below the items |
1721
- | page? | `number` | Current page, 1-based |
1787
+ | v-model:page? | `number` | Current page, 1-based – use with v-model:page |
1722
1788
  | default-page? | `number` | |
1723
1789
  | manual? | `boolean` | The items are the current page only (server); `totalCount` is the number of all items |
1724
1790
  | total-count? | `number` | Number of all items (`manual`) |
@@ -1726,13 +1792,12 @@ Items as a list or grid (a list either way); the switch is a radio group "View"
1726
1792
  | query? | `Omit<DataQuery, 'page' \| 'pageSize' \| 'cursor'>` | Sorting, filters and search for the data source (e.g. from the toolbar); a change starts at page 1 |
1727
1793
  | load-mode? | `'pages' \| 'infinite'` | `pages` (default): pagination below the items; `infinite`: the list grows with "Load more" |
1728
1794
  | auto-load? | `boolean` | `infinite`: loads the next page when the end of the list scrolls into view (the button stays as fallback) |
1729
- | has-more? | `boolean` | More items can be loaded (`infinite` without a data source): the button calls onLoadMore |
1795
+ | has-more? | `boolean` | More items can be loaded (`infinite` without a data source): the button emits loadMore |
1730
1796
  | loading? | `boolean` | Placeholder items while there are none yet, "Loading" on the button otherwise (aria-busy) |
1731
1797
  | skeleton-count? | `number` | Placeholder items while loading (default: the page size, at most 6) |
1732
- | filtered? | `boolean` | The items are filtered: shows the no-results text (`noResults`) instead of the empty text |
1733
- | error? | `unknown` | An error to show instead of the items (`renderError`); a data source sets it itself |
1798
+ | filtered? | `boolean` | The items are filtered: shows the no-results text (slot `noResults`) instead of the empty text |
1799
+ | error? | `unknown` | An error to show instead of the items (slot `error`); a data source sets it itself |
1734
1800
  | empty-text? | `string` | |
1735
- | style? | `CSSProperties` | |
1736
1801
  | classes? | `RecipeClasses<typeof dataViewRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1737
1802
 
1738
1803
  | Event | Payload | Description |
@@ -1761,10 +1826,10 @@ Date field: type the digits one after another (the separators come from the loca
1761
1826
 
1762
1827
  | Prop | Type | Description |
1763
1828
  | --- | --- | --- |
1764
- | v-model? (modelValue) | `T` | ISO date, e.g. "2026-10-20", with time "2026-10-20T14:30". Date objects and ISO strings with offset are accepted too; with selectionMode "multiple" a list of dates |
1829
+ | v-model? (modelValue) | `T` | ISO date, e.g. "2026-10-20", with time "2026-10-20T14:30" – use with v-model. Date objects and ISO strings with offset are accepted too; with selectionMode "multiple" a list of dates |
1765
1830
  | default-value? | `T` | |
1766
1831
  | selection-mode? | `'single' \| 'multiple'` | One date or several dates (the field lists them, the calendar toggles days) |
1767
- | value-type? | `DateValueType` | What onValueChange gets: ISO strings (default) or Date objects |
1832
+ | value-type? | `DateValueType` | What v-model gets: ISO strings (default) or Date objects |
1768
1833
  | with-time? | `boolean` | Adds hour and minute to the field |
1769
1834
  | min? | `DateLike` | Earliest selectable date (ISO or Date) |
1770
1835
  | max? | `DateLike` | Latest selectable date (ISO or Date) |
@@ -1776,6 +1841,7 @@ Date field: type the digits one after another (the separators come from the loca
1776
1841
  | invalid? | `boolean` | |
1777
1842
  | required? | `boolean` | |
1778
1843
  | name? | `string` | |
1844
+ | placeholder? | `string` | Text of the empty field, shown until it gets the focus – no replacement for a label |
1779
1845
  | size? | `'sm' \| 'md' \| 'lg'` | |
1780
1846
  | clearable? | `boolean` | Clear button in the field while it has a value |
1781
1847
  | show-button-bar? | `boolean` | "Today" and "Clear" below the calendar |
@@ -1789,9 +1855,6 @@ Date field: type the digits one after another (the separators come from the loca
1789
1855
  | time-zone? | `string` | IANA zone ("Europe/Berlin") of a date with time: shown and typed in the zone, the value gets its offset |
1790
1856
  | show-time-zone? | `boolean` | Short zone name after the time ("CEST") |
1791
1857
  | responsive? | `boolean` | On narrow screens the calendar opens as a sheet at the bottom |
1792
- | render-day? | `RenderDay` | Content of a day in the calendar instead of its number, e.g. a dot for appointments |
1793
- | aria-label? | `string` | Accessible name without a surrounding Field |
1794
- | style? | `CSSProperties` | |
1795
1858
  | classes? | `RecipeClasses<typeof datePicker>` | Extra classes per part of the date field, e.g. { control: "…" } (the calendar: RecipesProvider) |
1796
1859
 
1797
1860
  | Event | Payload | Description |
@@ -1812,9 +1875,9 @@ Start and end in one field ("10/20/2026 – 10/24/2026"); the calendar picks sta
1812
1875
 
1813
1876
  | Prop | Type | Description |
1814
1877
  | --- | --- | --- |
1815
- | v-model? (modelValue) | `T \| null` | Start and end; Date objects and ISO strings with offset are accepted too |
1878
+ | v-model? (modelValue) | `T \| null` | Start and end – use with v-model; Date objects and ISO strings with offset are accepted too |
1816
1879
  | default-value? | `T \| null` | |
1817
- | value-type? | `DateValueType` | What onValueChange gets: ISO strings (default) or Date objects |
1880
+ | value-type? | `DateValueType` | What v-model gets: ISO strings (default) or Date objects |
1818
1881
  | with-time? | `boolean` | Adds hour and minute to both dates |
1819
1882
  | min? | `DateLike` | Earliest selectable date (ISO or Date) |
1820
1883
  | max? | `DateLike` | Latest selectable date (ISO or Date) |
@@ -1826,6 +1889,7 @@ Start and end in one field ("10/20/2026 – 10/24/2026"); the calendar picks sta
1826
1889
  | invalid? | `boolean` | |
1827
1890
  | required? | `boolean` | |
1828
1891
  | name? | `string` | Sent as name[0] and name[1] |
1892
+ | placeholder? | `string` | Text of the empty field, shown until it gets the focus – no replacement for a label |
1829
1893
  | presets? | `(string \| { label: string; value: DateRangeLike })[]` | Buttons below the calendar: presets ("last7Days", "thisMonth", "thisQuarter", "last3Months", "last12Months", "last3Years" …) or own { label, value } ranges |
1830
1894
  | size? | `'sm' \| 'md' \| 'lg'` | |
1831
1895
  | clearable? | `boolean` | Clear button in the field while it has a value |
@@ -1839,9 +1903,6 @@ Start and end in one field ("10/20/2026 – 10/24/2026"); the calendar picks sta
1839
1903
  | time-zone? | `string` | IANA zone ("Europe/Berlin") with withTime: shown and typed in the zone, the values get its offset |
1840
1904
  | show-time-zone? | `boolean` | Short zone name after the times ("CEST") |
1841
1905
  | responsive? | `boolean` | On narrow screens the calendar opens as a sheet at the bottom |
1842
- | render-day? | `RenderDay` | Content of a day in the calendar instead of its number |
1843
- | aria-label? | `string` | Accessible name without a surrounding Field |
1844
- | style? | `CSSProperties` | |
1845
1906
  | classes? | `RecipeClasses<typeof datePicker>` | Extra classes per part of the date field, e.g. { control: "…" } (the calendar: RecipesProvider) |
1846
1907
 
1847
1908
  | Event | Payload | Description |
@@ -1869,7 +1930,7 @@ Terms and values (<dl>) in columns, with an optional title and actions; values c
1869
1930
  | columns? | `ResponsiveColumns` | Columns: a number or per breakpoint (default { base: 1, sm: 2, lg: 3 }) |
1870
1931
  | orientation? | `'vertical' \| 'horizontal'` | Label above its value (vertical, default) or beside it |
1871
1932
  | bordered? | `boolean` | Table look with lines between the cells |
1872
- | editing? | `boolean` | Edit mode: the values give way to `renderEdit` (inputs labelled by the term via `labelId`) |
1933
+ | editing? | `boolean` | Edit mode: the values give way to the `edit-<id>` slots (inputs labelled by the term via `labelId`) |
1873
1934
  | classes? | `RecipeClasses<typeof descriptionsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1874
1935
 
1875
1936
  | Slot | Slot props | Description |
@@ -1886,7 +1947,7 @@ Ark handles focus trap, aria-modal, Escape, scroll lock and returning focus to t
1886
1947
 
1887
1948
  | Prop | Type | Description |
1888
1949
  | --- | --- | --- |
1889
- | open? | `boolean` | |
1950
+ | v-model:open? | `boolean` | Controlled state – use with v-model:open |
1890
1951
  | default-open? | `boolean` | |
1891
1952
  | role? | `'dialog' \| 'alertdialog'` | "alertdialog" for confirmations that interrupt the user |
1892
1953
  | modal? | `boolean` | `false`: non-modal – no backdrop, no focus trap, no scroll lock; the page stays usable next to the dialog (role="dialog" with aria-modal="false") |
@@ -1922,11 +1983,11 @@ The modal window of a Dialog: title, description, focus trap, Escape closes
1922
1983
  | description? | `string` | |
1923
1984
  | icon? | `Component` | Icon component in the coloured box at the top |
1924
1985
  | status? | `DialogStatus` | |
1925
- | size? | `OverlaySize` | Maximum width: sm 320px, md 400px (default), lg 560px, xl 800px, full (screen width minus the margin) |
1986
+ | size? | `OverlaySize` | Maximum width: sm 320px (20rem), md 400px (25rem, default), lg 560px (35rem), xl 800px (50rem), full (screen width minus the margin). Another width: leave out `size` and set the CSS variable, e.g. style="--wc-dialog-w: 36rem" |
1926
1987
  | position? | `DialogPosition` | Where the dialog sits: centred (default), at the top/bottom or the start/end edge |
1927
1988
  | fullscreen? | `boolean` | Covers the whole screen |
1928
1989
  | maximizable? | `boolean` | Button in the header that switches between the normal size and the whole screen |
1929
- | maximized? | `boolean` | Maximized state of a maximizable dialog (controlled) |
1990
+ | v-model:maximized? | `boolean` | Maximized state of a maximizable dialog – use with v-model:maximized |
1930
1991
  | default-maximized? | `boolean` | |
1931
1992
  | draggable? | `boolean` | Moved by dragging the header; the keyboard moves it with Alt + arrow keys (Shift: larger steps) |
1932
1993
  | closable? | `boolean` | Shows the close button in the header |
@@ -1935,7 +1996,6 @@ The modal window of a Dialog: title, description, focus trap, Escape closes
1935
1996
  | close-label? | `string` | Accessible name of the close button |
1936
1997
  | maximize-label? | `string` | Accessible names of the maximize button: maximize / restore |
1937
1998
  | restore-label? | `string` | |
1938
- | footer? | `ReactNode` | Action buttons at the bottom |
1939
1999
  | portal-target? | `HTMLElement \| null` | Element the dialog is rendered into (default: the page body) – e.g. an element in full-screen mode |
1940
2000
  | classes? | `RecipeClasses<typeof dialogRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1941
2001
 
@@ -1943,6 +2003,10 @@ The modal window of a Dialog: title, description, focus trap, Escape closes
1943
2003
  | --- | --- | --- |
1944
2004
  | v-model:maximized | `maximized: boolean` | |
1945
2005
 
2006
+ | Slot | Slot props | Description |
2007
+ | --- | --- | --- |
2008
+ | #default | – | The content below the title |
2009
+ | #footer | – | Buttons at the bottom, e.g. Cancel and Save (right-aligned) |
1946
2010
 
1947
2011
  ### DialogHost
1948
2012
 
@@ -1981,6 +2045,7 @@ Horizontal or vertical line, optionally with a label
1981
2045
  | orientation? | `DividerOrientation` | |
1982
2046
  | line-style? | `'solid' \| 'dashed' \| 'dotted'` | Line style: `solid` (default), `dashed` or `dotted` |
1983
2047
  | label-position? | `'start' \| 'center' \| 'end'` | Where the label sits: at the `start`, in the `center` (default) or at the `end` |
2048
+ | label? | `string` | Text in the middle, e.g. "or" – read as normal text, the lines are decorative (also via #label) |
1984
2049
  | classes? | `RecipeClasses<typeof dividerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
1985
2050
 
1986
2051
  | Slot | Slot props | Description |
@@ -2002,6 +2067,10 @@ Button that saves text, a Blob or a fetched file; busy (aria-busy) while the dat
2002
2067
  | url? | `string` | Address to fetch and save instead of `data` (same origin or CORS) |
2003
2068
  | file-name | `string` | File name, e.g. "bericht.csv" |
2004
2069
  | mime-type? | `string` | MIME type of text data (default text/plain; a Blob keeps its own type) |
2070
+ | variant? | `ButtonVariant` | |
2071
+ | color? | `ButtonColor` | |
2072
+ | size? | `ButtonSize` | |
2073
+ | disabled? | `boolean` | |
2005
2074
 
2006
2075
  | Event | Payload | Description |
2007
2076
  | --- | --- | --- |
@@ -2022,7 +2091,7 @@ Modal panel at the edge of the screen – a dialog: focus trap, Escape, scroll l
2022
2091
 
2023
2092
  | Prop | Type | Description |
2024
2093
  | --- | --- | --- |
2025
- | open? | `boolean` | |
2094
+ | v-model:open? | `boolean` | Controlled state – use with v-model:open |
2026
2095
  | default-open? | `boolean` | |
2027
2096
  | modal? | `boolean` | `false`: non-modal – no backdrop, no focus trap, the page stays usable next to the panel |
2028
2097
  | close-on-escape? | `boolean` | Escape closes the drawer |
@@ -2060,9 +2129,12 @@ The panel of a Drawer, sliding in from a side; title, focus trap, Escape closes
2060
2129
  | offset? | `boolean` | Floats with a gap to the screen edge and rounded corners |
2061
2130
  | closable? | `boolean` | Shows the close button in the header |
2062
2131
  | close-label? | `string` | Accessible name of the close button |
2063
- | footer? | `ReactNode` | Action buttons at the bottom |
2064
2132
  | classes? | `RecipeClasses<typeof drawerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2065
2133
 
2134
+ | Slot | Slot props | Description |
2135
+ | --- | --- | --- |
2136
+ | #default | – | The content below the title (scrolls) |
2137
+ | #footer | – | Buttons at the bottom, e.g. Cancel and Save |
2066
2138
 
2067
2139
  ### DrawerTrigger
2068
2140
 
@@ -2083,9 +2155,9 @@ Duration field: hours and minutes (optional days and seconds) as spin buttons
2083
2155
 
2084
2156
  | Prop | Type | Description |
2085
2157
  | --- | --- | --- |
2086
- | v-model? (modelValue) | `number \| string \| null` | Total minutes (default), total seconds or ISO 8601 ("PT2H30M") – see valueType |
2158
+ | v-model? (modelValue) | `number \| string \| null` | Total minutes (default), total seconds or ISO 8601 ("PT2H30M") – see valueType; use with v-model |
2087
2159
  | default-value? | `number \| string \| null` | |
2088
- | value-type? | `DurationValueType` | What onValueChange gets: total minutes, total seconds or an ISO 8601 duration |
2160
+ | value-type? | `DurationValueType` | What v-model gets: total minutes, total seconds or an ISO 8601 duration |
2089
2161
  | with-days? | `boolean` | Adds days before the hours (the hours then stop at 23) |
2090
2162
  | with-seconds? | `boolean` | Adds seconds after the minutes |
2091
2163
  | max-hours? | `number` | Highest number of hours (default 999, with days 23) |
@@ -2097,8 +2169,6 @@ Duration field: hours and minutes (optional days and seconds) as spin buttons
2097
2169
  | name? | `string` | |
2098
2170
  | size? | `'sm' \| 'md' \| 'lg'` | |
2099
2171
  | clearable? | `boolean` | Clear button in the field while it has a value |
2100
- | aria-label? | `string` | Accessible name without a surrounding Field |
2101
- | style? | `CSSProperties` | |
2102
2172
  | classes? | `RecipeClasses<typeof datePickerRecipe>` | Extra classes per part of the field (see the datePicker recipe) |
2103
2173
 
2104
2174
  | Event | Payload | Description |
@@ -2116,7 +2186,7 @@ Rich-text editor (Tiptap): a toolbar (role="toolbar", one tab stop, arrow keys i
2116
2186
 
2117
2187
  | Prop | Type | Description |
2118
2188
  | --- | --- | --- |
2119
- | v-model? (modelValue) | `string` | HTML; an empty editor gives '' |
2189
+ | v-model? (modelValue) | `string` | HTML – use with v-model; an empty editor gives '' |
2120
2190
  | default-value? | `string` | |
2121
2191
  | toolbar? | `(EditorTool \| '\|')[]` | Toolbar buttons in order, '\|' for a separator |
2122
2192
  | disabled? | `boolean` | |
@@ -2131,8 +2201,6 @@ Rich-text editor (Tiptap): a toolbar (role="toolbar", one tab stop, arrow keys i
2131
2201
  | floating-menu? | `boolean \| EditorTool[]` | Menu in an empty line – true for the default tools or a list of tools; Alt+F10 moves into it |
2132
2202
  | table-of-contents? | `boolean` | The headings as links above the text |
2133
2203
  | mentions? | `(query: string) => EditorMention[] \| Promise<EditorMention[]>` | Suggestions after "@" (people, documents …) – inserted as a mention |
2134
- | aria-label? | `string` | Accessible name without a Field |
2135
- | style? | `CSSProperties` | |
2136
2204
  | classes? | `RecipeClasses<typeof editorRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2137
2205
 
2138
2206
  | Event | Payload | Description |
@@ -2177,14 +2245,17 @@ Placeholder for an empty list, table or search result, with the next step as act
2177
2245
  | Prop | Type | Description |
2178
2246
  | --- | --- | --- |
2179
2247
  | title | `string` | |
2180
- | description? | `ReactNode` | Text below the title |
2248
+ | description? | `string` | Text below the title (also via #description) |
2181
2249
  | icon? | `Component` | Icon component above the title |
2182
2250
  | variant? | `'plain' \| 'dashed'` | |
2183
2251
  | size? | `'sm' \| 'md'` | |
2184
2252
  | heading-level? | `2 \| 3 \| 4 \| 5 \| 6` | Renders the title as a heading of this level – without it the title is a paragraph |
2185
- | actions? | `ReactNode` | Buttons or links for the next step |
2186
2253
  | classes? | `RecipeClasses<typeof emptyStateRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2187
2254
 
2255
+ | Slot | Slot props | Description |
2256
+ | --- | --- | --- |
2257
+ | #description | – | Own description, e.g. with a link (instead of `description`) |
2258
+ | #actions | – | Buttons below the text, e.g. "Create the first entry" |
2188
2259
 
2189
2260
  ### Field
2190
2261
 
@@ -2197,18 +2268,27 @@ Label, helper text and error for one input – connects them by ids (aria-descri
2197
2268
 
2198
2269
  | Prop | Type | Description |
2199
2270
  | --- | --- | --- |
2271
+ | label? | `string` | Label of the control – or the `label` slot |
2272
+ | helper-text? | `string` | Description below the control – or the `helper-text` slot (e.g. with a link) |
2273
+ | error? | `string` | Error message – also marks the field as invalid; or the `error` slot |
2200
2274
  | invalid? | `boolean` | |
2275
+ | success? | `string` | Confirmation, e.g. "Username is available": shown with a check icon, part of the description; the control gets a green border. Ignored while the field is invalid; or the `success` slot |
2201
2276
  | required? | `boolean` | |
2202
2277
  | optional? | `boolean` | Marks the field as optional: "(optional)" after the label |
2203
2278
  | optional-text? | `string` | Text after the label of an optional field (default "optional") |
2204
2279
  | disabled? | `boolean` | |
2205
2280
  | read-only? | `boolean` | |
2281
+ | label-help? | `string` | Explanation behind an (i) button next to the label (Toggletip: a click shows it and screen readers read it) – or the `label-help` slot |
2206
2282
  | classes? | `RecipeClasses<typeof fieldRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2207
2283
 
2208
2284
  | Slot | Slot props | Description |
2209
2285
  | --- | --- | --- |
2210
2286
  | #default | – | |
2287
+ | #label | – | Own content of the label (instead of `label`) |
2211
2288
  | #label-help | – | |
2289
+ | #helper-text | – | Own helper text, e.g. with a link or a button – part of the control's description (instead of `helperText`) |
2290
+ | #success | – | Own confirmation (instead of `success`) |
2291
+ | #error | – | Own error message (instead of `error`) – also marks the field as invalid |
2212
2292
 
2213
2293
  ### FieldArray
2214
2294
 
@@ -2235,9 +2315,8 @@ Label, helper text and error for one input – connects them by ids (aria-descri
2235
2315
  | invalid? | `boolean` | |
2236
2316
  | disabled? | `boolean` | Disables every field inside (native fieldset – the legend's toggle stays usable) |
2237
2317
  | collapsible? | `boolean` | The legend becomes a button that shows/hides the fields (aria-expanded) |
2238
- | open? | `boolean` | Open state of a collapsible fieldset (controlled, with onOpenChange) |
2318
+ | v-model:open? | `boolean` | Open state of a collapsible fieldset – use with v-model:open |
2239
2319
  | default-open? | `boolean` | |
2240
- | style? | `CSSProperties` | |
2241
2320
  | classes? | `RecipeClasses<typeof fieldsetRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2242
2321
 
2243
2322
  | Event | Payload | Description |
@@ -2269,6 +2348,8 @@ Drop files onto the zone or choose them with the button (the keyboard path). Acc
2269
2348
  | preview? | `boolean` | Thumbnails for images (object URLs, released again) |
2270
2349
  | fullscreen-drop? | `boolean` | Files can be dropped anywhere in the window |
2271
2350
  | paste? | `boolean` | Ctrl+V inside the component adds files from the clipboard |
2351
+ | v-model:files? | `File[]` | The chosen files – use with v-model:files to remove or replace files from outside (otherwise the component keeps them itself; `clear()` empties it) |
2352
+ | show-file-list? | `boolean` | The list of the chosen files below the drop zone – false when the app shows the files itself |
2272
2353
  | disabled? | `boolean` | |
2273
2354
  | invalid? | `boolean` | |
2274
2355
  | required? | `boolean` | |
@@ -2277,7 +2358,8 @@ Drop files onto the zone or choose them with the button (the keyboard path). Acc
2277
2358
 
2278
2359
  | Event | Payload | Description |
2279
2360
  | --- | --- | --- |
2280
- | @files-change | `files: File[]` | |
2361
+ | @files-change | `files: File[]` | The chosen files changed (rejected files: `filesReject`) |
2362
+ | v-model:files | `files: File[]` | |
2281
2363
  | @files-reject | `rejections: { file: File; errors: string[] }[]` | Files that were not taken, with the reasons as codes (FILE_INVALID_TYPE, FILE_TOO_LARGE, TOO_MANY_FILES …) |
2282
2364
  | @upload-complete | `file: File, state: UploadState` | A file finished uploading (or failed) |
2283
2365
 
@@ -2316,7 +2398,7 @@ Filter region above a list or table: a button with the number of active filters
2316
2398
  | --- | --- | --- |
2317
2399
  | filters? | `readonly FilterChip[]` | The active filters – shown as chips and counted on the button |
2318
2400
  | count? | `number` | Number on the button (default: the number of filters) |
2319
- | open? | `boolean` | Form shown (controlled) |
2401
+ | v-model:open? | `boolean` | Form shown – use with v-model:open |
2320
2402
  | default-open? | `boolean` | |
2321
2403
  | label? | `string` | Name of the region, the button and the drawer (default "Filter") |
2322
2404
  | display? | `'inline' \| 'drawer' \| 'auto'` | `inline` (default): the form folds open below the bar; `drawer`: it opens in a drawer; `auto`: a drawer on small screens (`drawerQuery`) |
@@ -2346,7 +2428,7 @@ Non-modal window (role="dialog", named by its title): drag the header, resize at
2346
2428
  | Prop | Type | Description |
2347
2429
  | --- | --- | --- |
2348
2430
  | title | `string` | Title in the header – also the name of the window |
2349
- | open? | `boolean` | Open (controlled) |
2431
+ | v-model:open? | `boolean` | Open – use with v-model:open |
2350
2432
  | default-open? | `boolean` | |
2351
2433
  | default-size? | `Size` | Size when it opens (default 360 × 280) |
2352
2434
  | default-position? | `Point` | Position when it opens (default: next to the trigger, else centred) |
@@ -2380,10 +2462,12 @@ A file or memory size: "1.2 MB"
2380
2462
 
2381
2463
  | Prop | Type | Description |
2382
2464
  | --- | --- | --- |
2383
- | v-model (modelValue) | `number \| null \| undefined` | Size in bytes |
2465
+ | value | `number \| null \| undefined` | Size in bytes |
2384
2466
  | base? | `'decimal' \| 'binary'` | `decimal` (default): 1000 per step, "1.2 MB"; `binary`: 1024 per step, "1.2 MiB" |
2385
2467
  | maximum-fraction-digits? | `number` | Decimals (default 1) |
2386
2468
  | unit-display? | `'short' \| 'long'` | `short` (default) "MB", `long` "Megabyte" (decimal only) |
2469
+ | locale? | `string` | |
2470
+ | classes? | `RecipeClasses<typeof formatValueRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2387
2471
 
2388
2472
 
2389
2473
  ### FormatDate
@@ -2398,9 +2482,11 @@ A date in the format of the locale, in a <time> with the machine-readable value
2398
2482
 
2399
2483
  | Prop | Type | Description |
2400
2484
  | --- | --- | --- |
2401
- | v-model (modelValue) | `DateInput` | The date: Date, ISO text ("2026-10-21") or milliseconds |
2485
+ | value | `DateInput` | The date: Date, ISO text ("2026-10-21") or milliseconds |
2402
2486
  | format-options? | `Intl.DateTimeFormatOptions` | Intl format, e.g. { dateStyle: 'long' } or { weekday: 'long', day: 'numeric', month: 'long' } (default medium) |
2403
2487
  | time-zone? | `string` | Time zone to show the date in, e.g. "Europe/Berlin" (default: the browser's – pass one for server rendering) |
2488
+ | locale? | `string` | |
2489
+ | classes? | `RecipeClasses<typeof formatValueRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2404
2490
 
2405
2491
 
2406
2492
  ### FormatDateTime
@@ -2414,7 +2500,11 @@ Date and time in the format of the locale, in a <time> with the machine-readable
2414
2500
 
2415
2501
  | Prop | Type | Description |
2416
2502
  | --- | --- | --- |
2503
+ | value | `DateInput` | The point in time: Date, ISO text or milliseconds |
2417
2504
  | format-options? | `Intl.DateTimeFormatOptions` | Intl format, e.g. { dateStyle: 'full', timeStyle: 'short' } (default: medium date, short time) |
2505
+ | time-zone? | `string` | Time zone to show the time in, e.g. "Europe/Berlin" (default: the browser's – pass one for server rendering) |
2506
+ | locale? | `string` | |
2507
+ | classes? | `RecipeClasses<typeof formatValueRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2418
2508
 
2419
2509
 
2420
2510
  ### FormatList
@@ -2432,6 +2522,8 @@ A list as a sentence: "Anna, Ben, and Clara"
2432
2522
  | items | `readonly string[]` | |
2433
2523
  | type? | `'conjunction' \| 'disjunction' \| 'unit'` | `conjunction` (default) "A, B, and C", `disjunction` "A, B, or C", `unit` "A, B, C" |
2434
2524
  | format-style? | `'long' \| 'short' \| 'narrow'` | `long` (default), `short`, `narrow` |
2525
+ | locale? | `string` | |
2526
+ | classes? | `RecipeClasses<typeof formatValueRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2435
2527
 
2436
2528
 
2437
2529
  ### FormatNumber
@@ -2455,12 +2547,14 @@ A list as a sentence: "Anna, Ben, and Clara"
2455
2547
 
2456
2548
  | Prop | Type | Description |
2457
2549
  | --- | --- | --- |
2458
- | v-model (modelValue) | `DateInput` | The point in time: Date, ISO text or milliseconds |
2550
+ | value | `DateInput` | The point in time: Date, ISO text or milliseconds |
2459
2551
  | now? | `DateInput` | Reference time (default: now) – pass it for the same text on the server and in the browser |
2460
2552
  | live? | `boolean` | Updates the text as time passes (every 10 s, minute or hour, depending on the distance) |
2461
2553
  | numeric? | `'auto' \| 'always'` | `auto` (default): "yesterday", "tomorrow"; `always`: "1 day ago" |
2462
2554
  | format-style? | `'long' \| 'short' \| 'narrow'` | `long` (default) "3 minutes ago", `short` "3 min. ago", `narrow` |
2463
2555
  | show-title? | `boolean` | The exact date and time as the title (tooltip) – default true |
2556
+ | locale? | `string` | |
2557
+ | classes? | `RecipeClasses<typeof formatValueRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2464
2558
 
2465
2559
 
2466
2560
  ### FormErrorSummary
@@ -2492,15 +2586,20 @@ Label, helper text, error, aria-invalid and aria-describedby come from Field
2492
2586
 
2493
2587
  | Prop | Type | Description |
2494
2588
  | --- | --- | --- |
2495
- | field | `AnyFieldApi` | The TanStack Form field (from `<form.Field children={(field) => …}>`) |
2496
- | id? | `string` | Id of the control – e.g. the field name, so FormErrorSummary (useFormErrors) can link to it |
2497
- | label? | `ReactNode` | |
2498
- | helper-text? | `ReactNode` | |
2499
- | success? | `ReactNode` | Confirmation below the control (Field `success`) |
2589
+ | field | `AnyFieldApi` | The TanStack Form field (from `<form.Field v-slot="{ field }">`) |
2590
+ | label? | `string` | |
2591
+ | helper-text? | `string` | |
2592
+ | success? | `string` | Confirmation below the control (Field `success`) |
2500
2593
  | required? | `boolean` | |
2501
2594
  | optional? | `boolean` | "(optional)" after the label |
2502
2595
  | disabled? | `boolean` | |
2503
2596
 
2597
+ | Slot | Slot props | Description |
2598
+ | --- | --- | --- |
2599
+ | #default | `{ field: AnyFieldApi }` | |
2600
+ | #label | – | Own content of the label (instead of `label`) |
2601
+ | #helper-text | – | Own helper text, e.g. with a link – part of the control's description (instead of `helperText`) |
2602
+ | #success | – | Own confirmation (instead of `success`) |
2504
2603
 
2505
2604
  ### FormList
2506
2605
 
@@ -2513,7 +2612,7 @@ Repeated entries of a form: numbered list with move up/down (also Alt+↑/↓) a
2513
2612
 
2514
2613
  | Prop | Type | Description |
2515
2614
  | --- | --- | --- |
2516
- | field | `AnyFieldApi` | The TanStack Form field of the array (`<form.Field name="contacts" mode="array">`) |
2615
+ | field | `AnyFieldApi` | The TanStack Form field of the array (`<form.Field name="contacts" mode="array" v-slot="{ field }">`) |
2517
2616
  | label | `string` | Visible name of the list (legend), e.g. "Contacts" |
2518
2617
  | new-item | `() => unknown` | The value of a new entry, e.g. `() => ({ name: '', email: '' })` |
2519
2618
  | item-label? | `(position: number) => string` | Name of an entry by position (1-based), e.g. (n) => `Contact ${n}` – names the buttons and announcements |
@@ -2564,11 +2663,10 @@ Carousel of pictures with thumbnails (aria-current marks the shown one) and an o
2564
2663
  | fullscreen? | `boolean` | Button that opens the pictures large in a dialog |
2565
2664
  | tools? | `boolean` | The large view is a lightbox: zoom (buttons, + and −, Ctrl+wheel, two fingers), move the zoomed picture, rotate, download, fill the screen, swipe; keyboard shortcuts are shown in it |
2566
2665
  | lazy? | `boolean` | Pictures load when they come near the view (loading="lazy") |
2567
- | has-more? | `boolean` | More pictures can be loaded: showing one of the last two calls onLoadMore (they are added at the end) |
2666
+ | has-more? | `boolean` | More pictures can be loaded: showing one of the last two emits loadMore (they are added at the end) |
2568
2667
  | loading? | `boolean` | The next pictures are loading (aria-busy) |
2569
- | page? | `number` | |
2668
+ | v-model:page? | `number` | Current picture – use with v-model:page |
2570
2669
  | default-page? | `number` | |
2571
- | style? | `CSSProperties` | |
2572
2670
  | classes? | `RecipeClasses<typeof galleryRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2573
2671
 
2574
2672
  | Event | Payload | Description |
@@ -2589,10 +2687,10 @@ Gantt chart: task list as treegrid (keyboard, texts of dates and dependencies),
2589
2687
  | Prop | Type | Description |
2590
2688
  | --- | --- | --- |
2591
2689
  | tasks | `readonly GanttTask[]` | |
2592
- | zoom? | `GanttZoom` | Unit of the time axis; controlled together with onZoomChange |
2690
+ | v-model:zoom? | `GanttZoom` | Unit of the time axis – use with v-model:zoom |
2593
2691
  | default-zoom? | `GanttZoom` | |
2594
2692
  | zooms? | `readonly GanttZoom[]` | Zoom levels offered in the toolbar |
2595
- | expanded? | `string[]` | Ids of the expanded groups; controlled together with onExpandedChange (default: all expanded) |
2693
+ | v-model:expanded? | `string[]` | Ids of the expanded groups – use with v-model:expanded (default: all expanded) |
2596
2694
  | default-expanded? | `string[]` | |
2597
2695
  | editable? | `boolean` | Tasks can be moved, resized and their progress changed: drag the bars, or Alt(+Shift)+arrow keys in the list |
2598
2696
  | linkable? | `boolean` | New dependencies by dragging from the dot at the end of a bar onto another bar, or by keyboard with "Add dependency…" |
@@ -2627,7 +2725,7 @@ role="meter": a value in a known range; the arc is decoration, the value is name
2627
2725
 
2628
2726
  | Prop | Type | Description |
2629
2727
  | --- | --- | --- |
2630
- | v-model (modelValue) | `number` | |
2728
+ | value | `number` | |
2631
2729
  | min? | `number` | |
2632
2730
  | max? | `number` | |
2633
2731
  | label | `string` | Visible label below the gauge, also its accessible name |
@@ -2655,7 +2753,7 @@ Children side by side, wrapping onto new lines
2655
2753
  | align? | `'middle' \| 'top' \| 'bottom' \| 'baseline' \| 'stretch'` | Vertical alignment of the children (default middle) |
2656
2754
  | nowrap? | `boolean` | Keep everything on one line instead of wrapping |
2657
2755
  | grow? | `boolean` | Children share the width evenly |
2658
- | as? | `Component \| string` | Element to render, e.g. "ul" (default div) |
2756
+ | as? | `string \| Component` | Element to render, e.g. "ul" (default div) |
2659
2757
  | classes? | `RecipeClasses<typeof groupRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2660
2758
 
2661
2759
 
@@ -2713,7 +2811,7 @@ Dialog listing the registered shortcuts with their descriptions, grouped; opens
2713
2811
 
2714
2812
  | Prop | Type | Description |
2715
2813
  | --- | --- | --- |
2716
- | open? | `boolean` | Open state (controlled) |
2814
+ | v-model:open? | `boolean` | Open state – use with v-model:open |
2717
2815
  | hotkey? | `string \| false` | Shortcut that opens the dialog (default "?"); `false` switches it off |
2718
2816
  | title? | `string` | Title of the dialog (default "Keyboard shortcuts") |
2719
2817
  | registry? | `HotkeyRegistry` | Another registry than the page's |
@@ -2736,9 +2834,9 @@ Extra information on hover or keyboard focus of the trigger (WCAG 1.4.13: stays
2736
2834
  | --- | --- | --- |
2737
2835
  | open-delay? | `number` | Delay before opening (ms) |
2738
2836
  | close-delay? | `number` | Delay before closing (ms) – time to move the pointer onto the card |
2739
- | open? | `boolean` | |
2837
+ | v-model:open? | `boolean` | Controlled state – use with v-model:open |
2740
2838
  | default-open? | `boolean` | |
2741
- | anchor? | `AnchorProp` | Element, ref or point to open at instead of the trigger; open with `open` or `ref.current.open(anchor)` |
2839
+ | anchor? | `OverlayAnchor \| null` | Element (or point) to open at instead of the trigger; open with v-model:open or the exposed `open(anchor)` |
2742
2840
  | classes? | `RecipeClasses<typeof hoverCardRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2743
2841
 
2744
2842
  | Event | Payload | Description |
@@ -2762,11 +2860,14 @@ Button with only an icon; the label is its accessible name, optionally with a co
2762
2860
  | Prop | Type | Description |
2763
2861
  | --- | --- | --- |
2764
2862
  | icon | `Component` | Icon component |
2863
+ | icon-props? | `Record<string, unknown>` | Props passed on to the icon component, e.g. { fill: 'currentColor' } for a filled icon or { strokeWidth: 1.5 } |
2765
2864
  | label | `string` | Accessible name – icon buttons have no visible text |
2766
2865
  | variant? | `IconButtonVariant` | |
2767
2866
  | color? | `ButtonColor` | Colour combined with the variant, like Button `color` (e.g. a danger text button) |
2768
2867
  | size? | `ButtonSize` | `xs` is 24px – the minimum target size (WCAG 2.5.8) |
2769
2868
  | shape? | `ButtonShape` | Corner shape: `pill` (round, default), `rounded` or `square` |
2869
+ | disabled? | `boolean` | |
2870
+ | type? | `'button' \| 'submit' \| 'reset'` | |
2770
2871
  | badge? | `number \| boolean` | Counter (number > 0) or dot (true) in the top-right corner |
2771
2872
  | badge-label? | `(count: string \| null) => string` | Appended to the accessible name while a badge is shown, e.g. "Notifications, 4 new". Receives the visible counter text ("4", "99+") or null for the dot – the visible text must stay part of the name (WCAG 2.5.3). |
2772
2873
  | classes? | `RecipeClasses<typeof iconButtonRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -2805,8 +2906,8 @@ The image with a crop area (a slider): arrow keys move it, Alt+arrows resize it,
2805
2906
  | src | `string` | Image URL (an object URL of a chosen file works, too) |
2806
2907
  | aspect-ratio? | `number` | Width / height of the crop area, e.g. 1 or 16 / 9 (free without) |
2807
2908
  | crop-shape? | `'rectangle' \| 'circle'` | Rectangle (default) or circle (e.g. for avatars) |
2808
- | zoom? | `number` | Zoom factor (controlled) |
2809
- | rotation? | `number` | Rotation in degrees (controlled) |
2909
+ | v-model:zoom? | `number` | Zoom factor – use with v-model:zoom |
2910
+ | v-model:rotation? | `number` | Rotation in degrees – use with v-model:rotation |
2810
2911
  | min-zoom? | `number` | Smallest and largest zoom (default 1 and 5) |
2811
2912
  | max-zoom? | `number` | |
2812
2913
  | toolbar? | `boolean` | Buttons for zoom, rotation, mirroring and reset (default true) |
@@ -2847,14 +2948,14 @@ The value as a button; activating it shows an editor (inline or in a popover) wi
2847
2948
 
2848
2949
  | Prop | Type | Description |
2849
2950
  | --- | --- | --- |
2850
- | v-model? (modelValue) | `T` | The value (controlled); it changes only when a valid edit is saved |
2951
+ | v-model? (modelValue) | `T` | The value – use with v-model; it changes only when a valid edit is saved |
2851
2952
  | default-value? | `T` | |
2852
2953
  | label | `string` | What is edited, e.g. "Project name" – names the editor and the button |
2853
2954
  | mode? | `'inline' \| 'popover'` | `inline` (default): the editor replaces the text; `popover`: it opens in a popover next to the text |
2854
2955
  | placeholder? | `string` | Text while the value is empty (default "Empty") |
2855
2956
  | format? | `(value: T \| undefined) => string` | Text of the value (default: the value as text) |
2856
2957
  | validate? | `(value: T \| undefined) => string \| null \| undefined \| Promise<string \| null \| undefined>` | Checks the value before saving: a message keeps the editor open and is shown (and announced); may be async (the save button is busy meanwhile) |
2857
- | editing? | `boolean` | Editing state (controlled) |
2958
+ | v-model:editing? | `boolean` | Editing state – use with v-model:editing |
2858
2959
  | disabled? | `boolean` | |
2859
2960
  | save-label? | `string` | |
2860
2961
  | cancel-label? | `string` | |
@@ -2882,7 +2983,7 @@ Shows a value as a button; activating it swaps in the editor (Escape closes it)
2882
2983
 
2883
2984
  | Prop | Type | Description |
2884
2985
  | --- | --- | --- |
2885
- | active? | `boolean` | |
2986
+ | v-model:active? | `boolean` | Editing – use with v-model:active |
2886
2987
  | edit-label? | `string` | Hint for screen readers after the shown text, e.g. "bearbeiten" |
2887
2988
  | classes? | `RecipeClasses<typeof inplaceRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2888
2989
 
@@ -2905,9 +3006,11 @@ Text field with sizes, leading icon, prefix and suffix; works inside Field
2905
3006
 
2906
3007
  | Prop | Type | Description |
2907
3008
  | --- | --- | --- |
3009
+ | v-model? (modelValue) | `string` | |
2908
3010
  | size? | `Size` | |
2909
3011
  | invalid? | `boolean` | Marks the input as invalid (also inherited from a surrounding Field) |
2910
3012
  | success? | `boolean` | Confirmed value: green border and check icon (also inherited from a Field with `success`) |
3013
+ | disabled? | `boolean` | Disables the input (also inherited from a surrounding Field) |
2911
3014
  | loading? | `boolean` | Shows a spinner in the field and marks it busy (aria-busy), e.g. while checking the value |
2912
3015
  | clearable? | `boolean` | Shows a button that empties the field while it has a value |
2913
3016
  | clear-label? | `string` | Accessible name of the clear button (default "Clear input") |
@@ -2954,12 +3057,17 @@ JSON text field: checked while typing (the result is the field's description), "
2954
3057
 
2955
3058
  | Prop | Type | Description |
2956
3059
  | --- | --- | --- |
2957
- | v-model? (modelValue) | `string` | The JSON text (controlled) |
3060
+ | v-model? (modelValue) | `string` | The JSON text – use with v-model |
2958
3061
  | default-value? | `string` | |
2959
3062
  | indent? | `number` | Spaces per level when formatting (default 2) |
2960
3063
  | format-button? | `boolean` | Button that formats the text (default true) |
2961
3064
  | format-on-blur? | `boolean` | Formats valid JSON when the field loses focus |
3065
+ | placeholder? | `string` | |
3066
+ | rows? | `number` | |
3067
+ | disabled? | `boolean` | |
3068
+ | read-only? | `boolean` | |
2962
3069
  | invalid? | `boolean` | Marks the field invalid (it also is while the text is no valid JSON) |
3070
+ | name? | `string` | |
2963
3071
  | classes? | `RecipeClasses<typeof jsonInputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2964
3072
 
2965
3073
  | Event | Payload | Description |
@@ -2984,8 +3092,6 @@ JSON as a tree (role="tree"): arrow keys open and close, typing jumps to a key;
2984
3092
  | search? | `boolean` | Search field above the tree: hits are marked and their branches opened |
2985
3093
  | copyable? | `boolean` | Copy button per node (and Ctrl+C on the focused node, default true) |
2986
3094
  | show-types? | `boolean` | Shows the type of every value as text (otherwise only for screen readers) |
2987
- | aria-label? | `string` | |
2988
- | style? | `CSSProperties` | |
2989
3095
  | classes? | `RecipeClasses<typeof jsonViewerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
2990
3096
 
2991
3097
  | Event | Payload | Description |
@@ -3004,7 +3110,7 @@ Kanban board: each column is a sortable list of one group – cards move with th
3004
3110
 
3005
3111
  | Prop | Type | Description |
3006
3112
  | --- | --- | --- |
3007
- | columns? | `KanbanColumn<T>[]` | The columns with their cards (controlled) |
3113
+ | v-model:columns? | `KanbanColumn<T>[]` | The columns with their cards – use with v-model:columns |
3008
3114
  | default-columns? | `KanbanColumn<T>[]` | |
3009
3115
  | label? | `string` | Accessible name of the board (default "Board") |
3010
3116
  | item-key? | `ItemAccessor<T, string \| number>` | Key of a card: property name or function (default `id`, else `value`) |
@@ -3036,7 +3142,7 @@ A key, e.g. <Kbd>Strg</Kbd> + <Kbd>K</Kbd> – or a whole shortcut with `hotkey`
3036
3142
 
3037
3143
  | Prop | Type | Description |
3038
3144
  | --- | --- | --- |
3039
- | hotkey? | `string` | A shortcut to show key by key, e.g. "mod+k" → Ctrl K (⌘ K on Apple devices), "g i" → G then I. Without it the children are the key |
3145
+ | hotkey? | `string` | A shortcut to show key by key, e.g. "mod+k" → Ctrl K (⌘ K on Apple devices), "g i" → G then I. Without it the slot is the key |
3040
3146
  | classes? | `RecipeClasses<typeof kbdRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3041
3147
 
3042
3148
 
@@ -3070,13 +3176,12 @@ Dial (270°): a slider – arrow keys, Page Up/Down, Home/End, or drag around th
3070
3176
 
3071
3177
  | Prop | Type | Description |
3072
3178
  | --- | --- | --- |
3073
- | v-model? (modelValue) | `number` | |
3179
+ | v-model? (modelValue) | `number` | Value – use with v-model |
3074
3180
  | default-value? | `number` | |
3075
3181
  | min? | `number` | |
3076
3182
  | max? | `number` | |
3077
3183
  | step? | `number` | |
3078
3184
  | label? | `string` | Visible label, also the accessible name |
3079
- | aria-label? | `string` | |
3080
3185
  | format-value? | `(value: number) => string` | Formats the shown and announced value, e.g. (v) => `${v} %` |
3081
3186
  | value-template? | `string` | Text with the value in it, e.g. "{value} %" (when there is no formatValue) |
3082
3187
  | stroke-width? | `number` | Width of the arc (default 8, of a 100 wide dial) |
@@ -3084,7 +3189,6 @@ Dial (270°): a slider – arrow keys, Page Up/Down, Home/End, or drag around th
3084
3189
  | size? | `'sm' \| 'md' \| 'lg'` | |
3085
3190
  | disabled? | `boolean` | |
3086
3191
  | name? | `string` | |
3087
- | style? | `CSSProperties` | |
3088
3192
  | classes? | `RecipeClasses<typeof knobRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3089
3193
 
3090
3194
  | Event | Payload | Description |
@@ -3118,6 +3222,22 @@ Lines (or areas) over the categories – curved, stacked, with reference lines;
3118
3222
 
3119
3223
  | Prop | Type | Description |
3120
3224
  | --- | --- | --- |
3225
+ | data | `readonly ChartRow[]` | The rows: one object per category with a value per series |
3226
+ | category-key | `string` | Property of each row with the category (x axis) |
3227
+ | series | `readonly ChartSeries[]` | The series: key of the value, label, colour, axis, stack … |
3228
+ | title | `string` | Title of the chart, also its accessible name |
3229
+ | hide-title? | `boolean` | Keep the title for screen readers only |
3230
+ | height? | `string` | Height of the chart area (CSS length, default 18rem) |
3231
+ | table? | `boolean` | The data as a table below the chart (opens on demand) – the text alternative (default true) |
3232
+ | format-value? | `(value: number) => string` | Formats values in the axis, tooltips, legend and table (default: numbers in the locale) |
3233
+ | references? | `readonly ChartReference[]` | Reference lines (`value`) and areas (`from`–`to`), on the value axis or with `axis: 'x'` on the categories |
3234
+ | scale? | `'linear' \| 'logarithmic'` | Logarithmic value axis |
3235
+ | legend? | `boolean` | Legend (default: with more than one series) |
3236
+ | brush? | `boolean` | A small overview below with a range to zoom into (keyboard: the slider's arrow keys) |
3237
+ | v-model:range? | `[number, number]` | Shown rows with `brush` (inclusive indexes) – use with v-model:range |
3238
+ | default-range? | `[number, number]` | |
3239
+ | options? | `Record<string, unknown>` | Chart.js options – merged over the WireLayer defaults |
3240
+ | classes? | `RecipeClasses<typeof chartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe chart) |
3121
3241
  | curved? | `boolean` | Curved lines |
3122
3242
  | area? | `boolean` | Fill the area below every line (an area chart) |
3123
3243
  | stacked? | `boolean` | Stack all series (with `area`: stacked areas) |
@@ -3139,9 +3259,8 @@ Always visible list (role="listbox"): arrow keys move, Enter/Space choose, typin
3139
3259
  | --- | --- | --- |
3140
3260
  | items | `readonly T[]` | Options: ListboxItem objects – or any objects or values, read with itemValue/itemLabel/itemDisabled/itemGroup |
3141
3261
  | label? | `string` | Visible label, also the list's accessible name |
3142
- | aria-label? | `string` | Accessible name without a visible label |
3143
3262
  | multiple? | `boolean` | Several options can be chosen (Space toggles) |
3144
- | v-model? (modelValue) | `V[]` | Chosen values; any type (string, number, boolean, object) |
3263
+ | v-model? (modelValue) | `V[]` | Chosen values – use with v-model; any type (string, number, boolean, object) |
3145
3264
  | default-value? | `V[]` | |
3146
3265
  | disabled? | `boolean` | |
3147
3266
  | item-value? | `ItemAccessor<T, V>` | Value of an item: property name or function (default: `value`, otherwise the item itself) |
@@ -3150,18 +3269,17 @@ Always visible list (role="listbox"): arrow keys move, Enter/Space choose, typin
3150
3269
  | item-group? | `ItemAccessor<T, string \| null \| undefined>` | Group heading of an item: property name or function (default: `group`); items are listed per group |
3151
3270
  | value-key? | `ItemAccessor<V, string \| number>` | Identifies object values (property name or function), e.g. "id" – without it objects are compared by content |
3152
3271
  | filter? | `boolean` | Search field above the list; filters by label, ignoring case and accents |
3153
- | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to onFilterChange |
3272
+ | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to filterChange |
3154
3273
  | empty-text? | `string` | Shown when no item is left (default "No results" / "No entries") |
3155
3274
  | loading? | `boolean` | Shows "Loading" at the end of the list (aria-busy) |
3156
3275
  | loading-text? | `string` | Text of the loading row |
3157
- | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list calls onLoadMore |
3276
+ | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list emits loadMore |
3158
3277
  | checkboxes? | `boolean` | Check boxes before the options (`multiple`) |
3159
3278
  | select-all? | `boolean` | "Select all" above the options (`multiple`) – takes the options in view (filtered, enabled) |
3160
3279
  | data-source? | `DataSource<T>` | Loads the options (pages while scrolling, the search field asks it); `getItemsByKeys` gives the labels of chosen values that are not loaded |
3161
3280
  | min-search-length? | `number` | Fewest characters the search needs before the data source is asked |
3162
3281
  | page-size? | `number` | Options per request of the data source (default 50) |
3163
3282
  | draggable-items? | `boolean` | The options can be dragged (`draggable`, `data-value` is the key) – lists that exchange items (PickList) |
3164
- | style? | `CSSProperties` | |
3165
3283
  | classes? | `RecipeClasses<typeof listboxRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3166
3284
 
3167
3285
  | Event | Payload | Description |
@@ -3215,14 +3333,13 @@ Log: a scrollable, focusable area (arrow keys scroll) with numbered lines; level
3215
3333
  | label? | `string` | Accessible name of the scroll area (default "Log") |
3216
3334
  | search? | `boolean` | Search field: filters the lines and marks the hits (default true) |
3217
3335
  | level-filter? | `boolean` | Buttons to show and hide the levels (default true) |
3218
- | levels? | `LogLevel[]` | Levels shown (controlled, default all) |
3336
+ | v-model:levels? | `LogLevel[]` | Levels shown – use with v-model:levels (default all) |
3219
3337
  | detect-levels? | `boolean` | Reads the level from the text when a line has none ("ERROR", "[warn]" …, default true) |
3220
- | auto-scroll? | `boolean` | Keeps the newest line in view; scrolling up pauses it (default true) |
3338
+ | v-model:auto-scroll? | `boolean` | Keeps the newest line in view; scrolling up pauses it – use with v-model:autoScroll (default true) |
3221
3339
  | line-numbers? | `boolean` | Line numbers (default true) |
3222
- | has-more? | `boolean` | Older lines can be loaded: a button at the top calls onLoadMore |
3340
+ | has-more? | `boolean` | Older lines can be loaded: a button at the top emits loadMore |
3223
3341
  | loading? | `boolean` | Older lines are loading |
3224
3342
  | row-height? | `number` | Height of a line in px – must match the styles (default 20) |
3225
- | style? | `CSSProperties` | |
3226
3343
  | classes? | `RecipeClasses<typeof logViewerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3227
3344
 
3228
3345
  | Event | Payload | Description |
@@ -3271,7 +3388,7 @@ Moving band (region, named by the label): moves only without reduced motion; the
3271
3388
  | spacing? | `string` | Space between the items, a CSS length (default "1rem") |
3272
3389
  | auto-fill? | `boolean` | Repeats the content until the band is full (default true) |
3273
3390
  | reverse? | `boolean` | |
3274
- | paused? | `boolean` | Paused (controlled) – the pause button sets it, hover/focus pause on top of it |
3391
+ | v-model:paused? | `boolean` | Paused – use with v-model:paused (the pause button and hover/focus pause, too) |
3275
3392
  | pause-on-hover? | `boolean` | Stops while the pointer is over the band or the focus is in it (default true) |
3276
3393
  | pause-button? | `boolean` | Button to pause and resume (WCAG 2.2.2, default true) |
3277
3394
  | fade? | `boolean` | Fades the content out at the edges |
@@ -3297,10 +3414,11 @@ Text input with a fixed format (IBAN, phone, postcode …): separators are added
3297
3414
  | Prop | Type | Description |
3298
3415
  | --- | --- | --- |
3299
3416
  | mask | `string` | 9 digit, a letter, * letter or digit – everything else is inserted by itself, \\ escapes a token, `?` starts an optional rest, e.g. "+4\\9 999 9999999" or "99999?-9999" |
3300
- | v-model? (modelValue) | `string` | Masked value (or the raw one with `unmask`) |
3417
+ | v-model? (modelValue) | `string` | Masked value (or the raw one with `unmask`) – use with v-model |
3301
3418
  | default-value? | `string` | |
3419
+ | placeholder? | `string` | |
3302
3420
  | slot-char? | `string` | Character for the open slots in the placeholder (default "_") |
3303
- | unmask? | `boolean` | value/onValueChange hold only the typed characters ("891234" instead of "DE89 1234") |
3421
+ | unmask? | `boolean` | v-model holds only the typed characters ("891234" instead of "DE89 1234") |
3304
3422
  | auto-clear? | `boolean` | Empties an incomplete value when the field is left |
3305
3423
  | tokens? | `MaskTokens` | Own tokens, e.g. { h: /[0-9a-f]/i } – they extend 9, a and * |
3306
3424
 
@@ -3350,8 +3468,8 @@ Website navigation (nav landmark, disclosure pattern – no menu roles): links,
3350
3468
  | current-href? | `string` | Path of the current page – only the link with exactly this href gets aria-current="page" |
3351
3469
  | is-current? | `(link: MegaMenuLink \| MegaMenuItem) => boolean` | Own check for the current page, e.g. with the router |
3352
3470
  | heading-level? | `2 \| 3 \| 4 \| 5` | Level of the group headings (default 3) |
3353
- | link-as? | `Component \| string` | Component for the links, e.g. a router link (gets `to` for links with `to`, else `href`); default <a> |
3354
- | v-model? (modelValue) | `string` | Open panel (its value, '' for none) |
3471
+ | link-as? | `string \| Component` | Component for the links, e.g. RouterLink or NuxtLink (gets `to` for links with `to`, else `href`); default <a> |
3472
+ | v-model:value? | `string` | Open panel (its value, '' for none) – use with v-model:value |
3355
3473
  | default-value? | `string` | |
3356
3474
  | menu-label? | `string` | Name of the menu button and title of the drawer (default "Menu") |
3357
3475
  | classes? | `RecipeClasses<typeof megaMenuRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -3379,14 +3497,20 @@ Text field with mentions: "@" (or another trigger) opens suggestions below the f
3379
3497
  | --- | --- | --- |
3380
3498
  | v-model? (modelValue) | `string` | Text with markup: "Hello |
3381
3499
  | default-value? | `string` | |
3382
- | loading? | `boolean` | Entries are being loaded (after onSearch): the list shows "Loading" |
3383
3500
  | items? | `readonly T[]` | Entries for "@" (shorthand for one trigger) |
3384
3501
  | data-source? | `DataSource<T>` | Loads the "@" entries for the typed text |
3502
+ | loading? | `boolean` | Entries are being loaded (after the search event): the list shows "Loading" |
3385
3503
  | triggers? | `readonly MentionTrigger<T>[]` | Several trigger characters with their own entries (replaces items/dataSource) |
3386
3504
  | item-label? | `ItemAccessor<T, string>` | Text of an entry: property name or function (default `label`) |
3387
3505
  | item-value? | `ItemAccessor<T, unknown>` | Id of an entry in the markup: property name or function (default `value`, else `id`) |
3388
3506
  | limit? | `number` | Most suggestions shown (default 8) |
3507
+ | placeholder? | `string` | |
3508
+ | rows? | `number` | |
3509
+ | disabled? | `boolean` | |
3510
+ | read-only? | `boolean` | |
3389
3511
  | invalid? | `boolean` | |
3512
+ | required? | `boolean` | |
3513
+ | name? | `string` | Name of the hidden form field (the markup) |
3390
3514
  | classes? | `RecipeClasses<typeof mentionsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3391
3515
 
3392
3516
  | Event | Payload | Description |
@@ -3411,13 +3535,14 @@ The trigger is the slotted element (e.g. a Button or IconButton)
3411
3535
  | Prop | Type | Description |
3412
3536
  | --- | --- | --- |
3413
3537
  | items | `readonly MenuEntry[]` | Items, groups ({ type: 'group' }), separators ({ type: 'separator' }), checkbox items ({ type: 'checkbox' }) and radio groups ({ type: 'radio' }); items with children open a submenu, items with href or to are links |
3414
- | open? | `boolean` | |
3538
+ | v-model:open? | `boolean` | Controlled state – use with v-model:open |
3415
3539
  | default-open? | `boolean` | |
3416
- | anchor? | `AnchorProp` | Element, ref or point to open at instead of the trigger; open with `open` or `ref.current.open(anchor)` |
3540
+ | anchor? | `OverlayAnchor \| null` | Element (or point) to open at instead of the trigger; open with v-model:open or the exposed `open(anchor)` |
3417
3541
  | searchable? | `boolean` | Filter field at the top – for long menus; arrow keys move through the matching items, Enter chooses |
3418
3542
  | search-label? | `string` | Placeholder and accessible name of the filter field |
3419
3543
  | placement? | `PopoverPlacement` | Side of the trigger the menu opens on, e.g. `bottom-end` for a menu at the right edge (default bottom-start) |
3420
3544
  | arrow? | `boolean` | Arrow pointing at the trigger, as on the Popover |
3545
+ | link-as? | `Component \| string` | Component for link items, e.g. RouterLink or NuxtLink (gets `to` for items with `to`, else `href`); default <a> |
3421
3546
  | classes? | `RecipeClasses<typeof menuRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3422
3547
 
3423
3548
  | Event | Payload | Description |
@@ -3444,9 +3569,9 @@ Menu bar (role="menubar"): arrow keys move along the bar and between open menus,
3444
3569
  | Prop | Type | Description |
3445
3570
  | --- | --- | --- |
3446
3571
  | menus | `readonly MenubarMenu[]` | |
3447
- | aria-label? | `string` | Name of the menu bar, e.g. "Application" |
3448
3572
  | responsive? | `boolean` | Below the md breakpoint (768px) a menu button with all menus replaces the bar |
3449
3573
  | menu-label? | `string` | Accessible name of the menu button on small screens |
3574
+ | link-as? | `Component \| string` | Component for link items, e.g. RouterLink or NuxtLink (gets `to` for items with `to`, else `href`); default <a> |
3450
3575
  | classes? | `RecipeClasses<typeof menubarRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3451
3576
 
3452
3577
  | Event | Payload | Description |
@@ -3478,7 +3603,6 @@ One bar for the parts (visual), the legend lists every part with its value as te
3478
3603
  | orientation? | `'horizontal' \| 'vertical'` | Vertical bar growing from the bottom, the legend next to it |
3479
3604
  | legend-position? | `'top' \| 'bottom' \| 'start' \| 'end'` | Where the legend is: bottom (default), top, start or end |
3480
3605
  | legend-orientation? | `'horizontal' \| 'vertical'` | Legend entries in a row (default) or one below the other |
3481
- | style? | `CSSProperties` | |
3482
3606
  | classes? | `RecipeClasses<typeof meterGroupRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3483
3607
 
3484
3608
 
@@ -3492,9 +3616,9 @@ Days in a row with arrows to earlier and later days; arrow keys choose a day and
3492
3616
 
3493
3617
  | Prop | Type | Description |
3494
3618
  | --- | --- | --- |
3495
- | v-model? (modelValue) | `T` | Chosen day (ISO "2026-10-20" or Date) |
3619
+ | v-model? (modelValue) | `T` | Chosen day (ISO "2026-10-20" or Date) – use with v-model |
3496
3620
  | default-value? | `T` | |
3497
- | value-type? | `DateValueType` | What onValueChange gets: an ISO string (default) or a Date |
3621
+ | value-type? | `DateValueType` | What v-model gets: an ISO string (default) or a Date |
3498
3622
  | start-date? | `DateLike` | First day shown at the start (default: the start of the week of the value or today) |
3499
3623
  | days? | `number` | Number of days in the strip |
3500
3624
  | min? | `DateLike` | Earliest day that can be chosen |
@@ -3504,8 +3628,6 @@ Days in a row with arrows to earlier and later days; arrow keys choose a day and
3504
3628
  | locale? | `string` | Day names and the spoken dates follow the locale |
3505
3629
  | label? | `string` | Name of the strip (default "Days") |
3506
3630
  | disabled? | `boolean` | |
3507
- | aria-label? | `string` | Accessible name instead of `label` |
3508
- | style? | `CSSProperties` | |
3509
3631
  | classes? | `RecipeClasses<typeof miniCalendarRecipe>` | Extra classes per part of the component, e.g. { day: "…" } (see the recipe) |
3510
3632
 
3511
3633
  | Event | Payload | Description |
@@ -3540,7 +3662,7 @@ Month field ("10.2026"): type the digits in one go, or pick from the month grid;
3540
3662
 
3541
3663
  | Prop | Type | Description |
3542
3664
  | --- | --- | --- |
3543
- | v-model? (modelValue) | `T` | Month as "2026-10"; with range { start, end } |
3665
+ | v-model? (modelValue) | `T` | Month as "2026-10" – use with v-model; with range { start, end } |
3544
3666
  | default-value? | `T` | |
3545
3667
  | range? | `boolean` | Start and end month instead of one |
3546
3668
  | min? | `string` | Earliest month ("2026-01") |
@@ -3552,10 +3674,9 @@ Month field ("10.2026"): type the digits in one go, or pick from the month grid;
3552
3674
  | invalid? | `boolean` | |
3553
3675
  | required? | `boolean` | |
3554
3676
  | name? | `string` | With range sent as name[0] and name[1] |
3677
+ | placeholder? | `string` | Text of the empty field, shown until it gets the focus – no replacement for a label |
3555
3678
  | size? | `'sm' \| 'md' \| 'lg'` | |
3556
3679
  | clearable? | `boolean` | Clear button in the field while it has a value |
3557
- | aria-label? | `string` | Accessible name without a surrounding Field |
3558
- | style? | `CSSProperties` | |
3559
3680
  | classes? | `RecipeClasses<typeof datePicker>` | Extra classes per part of the date field, e.g. { control: "…" } (the calendar: RecipesProvider) |
3560
3681
 
3561
3682
  | Event | Payload | Description |
@@ -3575,11 +3696,12 @@ Select with several values: the list stays open while choosing, Space/Enter togg
3575
3696
  | Prop | Type | Description |
3576
3697
  | --- | --- | --- |
3577
3698
  | items | `readonly T[]` | Options: SelectItem objects – or any objects or values, read with itemValue/itemLabel/itemDisabled/itemGroup |
3578
- | v-model? (modelValue) | `V[]` | Selected values; any type (string, number, boolean, object) |
3699
+ | v-model? (modelValue) | `V[]` | Selected values – use with v-model; any type (string, number, boolean, object) |
3579
3700
  | default-value? | `V[]` | |
3580
3701
  | placeholder? | `string` | |
3581
- | summary? | `(count: number) => string` | Trigger text once more than this many items are selected, e.g. "4 selected" |
3702
+ | summary? | `(count: number) => string` | Trigger text once more than `maxShown` items are selected, e.g. "4 selected" |
3582
3703
  | max-shown? | `number` | Selected labels shown in the trigger before the summary is used |
3704
+ | disabled? | `boolean` | |
3583
3705
  | invalid? | `boolean` | |
3584
3706
  | required? | `boolean` | |
3585
3707
  | name? | `string` | |
@@ -3587,6 +3709,7 @@ Select with several values: the list stays open while choosing, Space/Enter togg
3587
3709
  | item-label? | `ItemAccessor<T, string>` | Label of an item: property name or function (default: `label`) |
3588
3710
  | item-disabled? | `ItemAccessor<T, boolean>` | Disabled state of an item: property name or function (default: `disabled`) |
3589
3711
  | item-group? | `ItemAccessor<T, string \| null \| undefined>` | Group heading of an item: property name or function (default: `group`); items are listed per group |
3712
+ | item-keywords? | `ItemAccessor<T, string \| readonly string[] \| null \| undefined>` | More text the search finds an item by, besides its label: property name or function, one text or a list (default: `keywords`), e.g. the name of the item's category |
3590
3713
  | value-key? | `ItemAccessor<V, string \| number>` | Identifies object values (property name or function), e.g. "id" – without it objects are compared by content |
3591
3714
  | display? | `'text' \| 'chips'` | Selected items as text (default) or as chips with a remove button each (Backspace removes the last) |
3592
3715
  | checkboxes? | `boolean` | Check boxes before the options (default); false shows a check mark after the label |
@@ -3596,10 +3719,10 @@ Select with several values: the list stays open while choosing, Space/Enter togg
3596
3719
  | loading? | `boolean` | Shows a spinner in the field and "Loading" in the list (aria-busy) |
3597
3720
  | loading-text? | `string` | Text of the loading row in the list |
3598
3721
  | size? | `SelectSize` | Height of the field: 32, 40 (default) or 48 px |
3599
- | filter? | `boolean` | Search field at the top of the list; filters by label, ignoring case and accents |
3600
- | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to onFilterChange |
3722
+ | filter? | `boolean` | Search field at the top of the list; filters by label and itemKeywords, ignoring case and accents |
3723
+ | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to filterChange |
3601
3724
  | empty-text? | `string` | Shown when no item is left (default "No results" / "No entries") |
3602
- | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list calls onLoadMore |
3725
+ | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list emits loadMore |
3603
3726
  | data-source? | `DataSource<T>` | Loads the options when the list opens (pages while scrolling; with `filter` the search asks it, after a typing pause, outdated answers dropped); `getItemsByKeys` gives the labels of chosen values that are not loaded |
3604
3727
  | min-search-length? | `number` | Fewest characters the search needs before the data source is asked |
3605
3728
  | page-size? | `number` | Options per request of the data source (default 50) |
@@ -3628,9 +3751,11 @@ The browser's select: its own keyboard and mobile pickers; inside a Field it is
3628
3751
  | Prop | Type | Description |
3629
3752
  | --- | --- | --- |
3630
3753
  | items | `readonly NativeSelectOption[]` | |
3754
+ | v-model? (modelValue) | `string` | Chosen value – use with v-model |
3631
3755
  | placeholder? | `string` | First, empty option, e.g. "Please choose" |
3632
3756
  | size? | `Size` | |
3633
3757
  | invalid? | `boolean` | |
3758
+ | disabled? | `boolean` | |
3634
3759
  | classes? | `RecipeClasses<typeof nativeSelectRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3635
3760
 
3636
3761
  | Event | Payload | Description |
@@ -3650,7 +3775,6 @@ Website navigation (nav landmark): entries with children are buttons (aria-expan
3650
3775
  | --- | --- | --- |
3651
3776
  | items | `readonly NavigationMenuEntry[]` | |
3652
3777
  | label? | `string` | Name of the navigation landmark |
3653
- | style? | `CSSProperties` | |
3654
3778
  | classes? | `RecipeClasses<typeof navigationMenuRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3655
3779
 
3656
3780
 
@@ -3680,13 +3804,13 @@ Bell with the unread count (part of its name) that opens the notifications in a
3680
3804
  | Prop | Type | Description |
3681
3805
  | --- | --- | --- |
3682
3806
  | items? | `readonly NotificationItem[]` | The notifications (with `dataSource`: new ones pushed by the app, before the loaded pages) |
3683
- | data-source? | `DataSource<NotificationItem>` | Notifications from a server, page by page (newest first): the first page is loaded at the start, "Load more" loads the next; items marked as read are kept as read here (report them with onMarkRead/onMarkAllRead) |
3807
+ | data-source? | `DataSource<NotificationItem>` | Notifications from a server, page by page (newest first): the first page is loaded at the start, "Load more" loads the next; items marked as read are kept as read here (report them with markRead/markAllRead) |
3684
3808
  | page-size? | `number` | Notifications per page of the data source (default 20) |
3685
3809
  | unread-count? | `number` | Unread count on the bell when not all items are loaded (default: the unread items) |
3686
- | has-more? | `boolean` | Shows "Load more" below the list (onLoadMore) |
3810
+ | has-more? | `boolean` | Shows "Load more" below the list (loadMore event) |
3687
3811
  | loading? | `boolean` | The next page is loading (the button stays focusable, aria-busy) |
3688
3812
  | display? | `'popover' \| 'drawer'` | popover (default) next to the bell, or drawer from the side |
3689
- | open? | `boolean` | |
3813
+ | v-model:open? | `boolean` | Controlled state – use with v-model:open |
3690
3814
  | label? | `string` | Name of the bell and title of the panel (default "Notifications") |
3691
3815
  | now? | `Date \| string` | Reference time for "Today"/"Yesterday" (default: now) |
3692
3816
  | empty-text? | `string` | Text without notifications (default "No notifications") |
@@ -3715,7 +3839,7 @@ A number in the format of the locale ("€1,234.50")
3715
3839
 
3716
3840
  | Prop | Type | Description |
3717
3841
  | --- | --- | --- |
3718
- | v-model (modelValue) | `number \| bigint \| null \| undefined` | |
3842
+ | value | `number \| bigint \| null \| undefined` | |
3719
3843
  | format-options? | `Intl.NumberFormatOptions` | Format, e.g. { style: 'currency', currency: 'EUR' } or { notation: 'compact' } |
3720
3844
  | locale? | `string` | |
3721
3845
  | classes? | `RecipeClasses<typeof numberFormatterRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -3732,7 +3856,7 @@ Number field with − / + buttons, arrow keys and locale formatting ("1,234.5")
3732
3856
 
3733
3857
  | Prop | Type | Description |
3734
3858
  | --- | --- | --- |
3735
- | v-model? (modelValue) | `number \| null` | |
3859
+ | v-model? (modelValue) | `number \| null` | Number or null (empty) – use with v-model |
3736
3860
  | default-value? | `number \| null` | |
3737
3861
  | min? | `number` | |
3738
3862
  | max? | `number` | |
@@ -3775,7 +3899,7 @@ Choose an item, then move it with the buttons (or Alt + arrow keys); the new pos
3775
3899
 
3776
3900
  | Prop | Type | Description |
3777
3901
  | --- | --- | --- |
3778
- | v-model? (modelValue) | `T[]` | Items in their order; ListboxItem objects or any objects/values (see itemValue/itemLabel) |
3902
+ | v-model? (modelValue) | `T[]` | Items in their order – use with v-model; ListboxItem objects or any objects/values (see itemValue/itemLabel) |
3779
3903
  | default-value? | `T[]` | |
3780
3904
  | label | `string` | Visible label of the list |
3781
3905
  | item-value? | `ItemAccessor<T, V>` | Value of an item: property name or function (default: `value`, otherwise the item itself) |
@@ -3784,7 +3908,6 @@ Choose an item, then move it with the buttons (or Alt + arrow keys); the new pos
3784
3908
  | value-key? | `ItemAccessor<V, string \| number>` | Identifies object values (property name or function), e.g. "id" – without it objects are compared by content |
3785
3909
  | filter? | `boolean` | A search field above the list (moving works on the whole list) |
3786
3910
  | draggable? | `boolean` | Items can be dragged to another place (the buttons and Alt + arrow keys stay the keyboard way) |
3787
- | style? | `CSSProperties` | |
3788
3911
  | classes? | `RecipeClasses<typeof orderListRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3789
3912
 
3790
3913
  | Event | Payload | Description |
@@ -3808,14 +3931,13 @@ Hierarchy as nested lists – screen readers read the structure, the lines are d
3808
3931
  | node | `OrgChartNode` | The top of the hierarchy |
3809
3932
  | label | `string` | Accessible name, e.g. "Org chart" |
3810
3933
  | collapsible? | `boolean` | A button below each node with a team shows or hides it |
3811
- | collapsed-keys? | `string[]` | Keys of the nodes whose team is hidden |
3934
+ | v-model:collapsed-keys? | `string[]` | Keys of the nodes whose team is hidden – use with v-model:collapsed-keys |
3812
3935
  | default-collapsed-keys? | `string[]` | |
3813
- | selection-mode? | `'none' \| 'single' \| 'multiple'` | Nodes can be chosen (toggle buttons): one or several |
3814
- | selected-keys? | `string[]` | |
3936
+ | selection-mode? | `'none' \| 'single' \| 'multiple'` | Nodes can be chosen (toggle buttons): one or several – use with v-model:selected-keys |
3937
+ | v-model:selected-keys? | `string[]` | |
3815
3938
  | default-selected-keys? | `string[]` | |
3816
3939
  | load-children? | `(node: OrgChartNode, request: { signal: AbortSignal }) => Promise<OrgChartNode[]>` | Loads the team of a node with `hasChildren: true` when it is shown; the signal aborts it |
3817
3940
  | data-source? | `DataSource<OrgChartNode>` | Source of the teams of lazy nodes (`getChildren`) |
3818
- | style? | `CSSProperties` | |
3819
3941
  | classes? | `RecipeClasses<typeof orgChartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3820
3942
 
3821
3943
  | Event | Payload | Description |
@@ -3913,8 +4035,8 @@ Page navigation with previous/next, page buttons and a summary ("1–10 of 42")
3913
4035
  | Prop | Type | Description |
3914
4036
  | --- | --- | --- |
3915
4037
  | count | `number` | Total number of items |
3916
- | page-size? | `number` | Items per page – controlled together with onPageSizeChange when `pageSizes` lets the user change it |
3917
- | page? | `number` | Current page (1-based) |
4038
+ | v-model:page-size? | `number` | Items per page – use with v-model:pageSize when `pageSizes` lets the user change it |
4039
+ | v-model:page? | `number` | Current page (1-based) – use with v-model:page |
3918
4040
  | default-page? | `number` | |
3919
4041
  | sibling-count? | `number` | Pages shown on each side of the current page before an ellipsis |
3920
4042
  | boundary-count? | `number` | Pages always shown at the start and the end (default 1) |
@@ -3948,9 +4070,8 @@ Card with a heading (and actions); toggleable: the heading holds a button with a
3948
4070
  | title | `string` | |
3949
4071
  | heading-level? | `2 \| 3 \| 4` | Heading level of the title |
3950
4072
  | toggleable? | `boolean` | The title becomes a button that shows/hides the content |
3951
- | open? | `boolean` | |
4073
+ | v-model:open? | `boolean` | Open state – use with v-model:open |
3952
4074
  | default-open? | `boolean` | |
3953
- | style? | `CSSProperties` | |
3954
4075
  | classes? | `RecipeClasses<typeof panelRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3955
4076
 
3956
4077
  | Event | Payload | Description |
@@ -3974,16 +4095,23 @@ Password field with a button that shows/hides the password (named "Show/Hide pas
3974
4095
 
3975
4096
  | Prop | Type | Description |
3976
4097
  | --- | --- | --- |
4098
+ | v-model? (modelValue) | `string` | |
3977
4099
  | size? | `Size` | |
3978
4100
  | invalid? | `boolean` | |
3979
4101
  | success? | `boolean` | Confirmed value: green border and check icon (also inherited from a Field with `success`) |
4102
+ | disabled? | `boolean` | |
4103
+ | read-only? | `boolean` | |
4104
+ | required? | `boolean` | |
4105
+ | name? | `string` | |
3980
4106
  | default-visible? | `boolean` | Initially show the password in plain text |
3981
- | visible? | `boolean` | Whether the password is shown in plain text (controlled, with onVisibleChange) |
4107
+ | v-model:visible? | `boolean` | Whether the password is shown in plain text – use with v-model:visible |
4108
+ | autocomplete? | `'current-password' \| 'new-password'` | |
3982
4109
  | strength? | `boolean` | Strength meter below the field – for choosing a new password |
3983
4110
  | requirements? | `readonly PasswordRequirement[]` | Checklist below the field, updated while typing: each rule with its state (icon and text), linked to the input as its description |
3984
4111
  | loading? | `boolean` | Shows a spinner in the field and marks it busy (aria-busy) |
3985
4112
  | clearable? | `boolean` | Shows a button that empties the field while it has a value |
3986
4113
  | clear-label? | `string` | Accessible name of the clear button (default "Clear input") |
4114
+ | default-value? | `string` | Initial value without v-model |
3987
4115
  | classes? | `RecipeClasses<typeof passwordInputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
3988
4116
 
3989
4117
  | Event | Payload | Description |
@@ -4004,10 +4132,10 @@ PDF viewer (pdf.js): a toolbar (role="toolbar", one tab stop, arrow keys inside)
4004
4132
  | Prop | Type | Description |
4005
4133
  | --- | --- | --- |
4006
4134
  | src | `PdfSource` | The PDF: URL, ArrayBuffer/Uint8Array or Blob/File – loaded in the browser (the server renders the loading state) |
4007
- | page? | `number` | Current page (1-based) – changing it shows that page |
4008
- | zoom? | `PdfZoom` | Zoom: factor (1 = 100 %, 0.5–4), "page-width" (default) or "page-fit" |
4009
- | rotation? | `number` | Rotation of all pages clockwise: 0, 90, 180 or 270 |
4010
- | sidebar? | `boolean` | Side bar with thumbnails and the outline (controlled) |
4135
+ | v-model:page? | `number` | Current page (1-based) – use with v-model:page |
4136
+ | v-model:zoom? | `PdfZoom` | Zoom: factor (1 = 100 %, 0.5–4), "page-width" (default) or "page-fit" – use with v-model:zoom |
4137
+ | v-model:rotation? | `number` | Rotation of all pages clockwise: 0, 90, 180 or 270 – use with v-model:rotation |
4138
+ | v-model:sidebar? | `boolean` | Side bar with thumbnails and the outline – use with v-model:sidebar |
4011
4139
  | toolbar? | `boolean \| PdfTool[]` | Toolbar: all tools (true, default), none (false) or a list, e.g. ['page', 'zoom', 'download'] |
4012
4140
  | height? | `string` | Height of the viewer (CSS length, default "600px") |
4013
4141
  | label? | `string` | Accessible name of the viewer (default "PDF document") |
@@ -4048,8 +4176,7 @@ Avatar (decorative here – the name follows as text), name, description and pre
4048
4176
  | size? | `'sm' \| 'md' \| 'lg'` | |
4049
4177
  | avatar-color? | `AvatarColor \| 'auto'` | Tinted avatar; `auto` picks a colour from the name |
4050
4178
  | href? | `string` | The whole persona is a link |
4051
- | as? | `'div' \| 'button'` | `button`: the whole persona is a button (use onClick) |
4052
- | @click? | `MouseEventHandler<HTMLElement>` | |
4179
+ | as? | `'div' \| 'button'` | `button`: the whole persona is a button (listen to click) |
4053
4180
  | classes? | `RecipeClasses<typeof personaRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4054
4181
 
4055
4182
 
@@ -4064,14 +4191,18 @@ Country (flag and calling code, searchable) and the number, formatted for the co
4064
4191
 
4065
4192
  | Prop | Type | Description |
4066
4193
  | --- | --- | --- |
4067
- | v-model? (modelValue) | `string` | The number in E.164 ("+4930123456", "" when empty, controlled) |
4194
+ | v-model? (modelValue) | `string` | The number in E.164 ("+4930123456", "" when empty) – use with v-model |
4068
4195
  | default-value? | `string` | |
4069
- | country? | `string` | Chosen country (ISO code, controlled) |
4196
+ | v-model:country? | `string` | Chosen country (ISO code) – use with v-model:country |
4070
4197
  | default-country? | `string` | Country before anything is chosen (default "DE") |
4071
4198
  | countries? | `readonly PhoneCountry[]` | Countries to offer (default: about 60 common ones; extend with your own entries) |
4072
4199
  | country-label? | `string` | Accessible name of the country select (default "Country") |
4200
+ | placeholder? | `string` | |
4073
4201
  | size? | `Size` | |
4202
+ | disabled? | `boolean` | |
4074
4203
  | invalid? | `boolean` | Marks the number invalid (it also is after leaving a number of the wrong length) |
4204
+ | required? | `boolean` | |
4205
+ | name? | `string` | Name of the hidden form field (E.164) |
4075
4206
  | classes? | `RecipeClasses<typeof phoneInputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4076
4207
 
4077
4208
  | Event | Payload | Description |
@@ -4092,7 +4223,7 @@ Two lists with several choices each; the buttons move the chosen items across, t
4092
4223
  | Prop | Type | Description |
4093
4224
  | --- | --- | --- |
4094
4225
  | items | `readonly T[]` | All items: ListboxItem objects – or any objects or values, read with itemValue/itemLabel/itemDisabled |
4095
- | v-model? (modelValue) | `V[]` | Values of the chosen items, in their order; any type (see `valueKey`) |
4226
+ | v-model? (modelValue) | `V[]` | Values of the chosen items, in their order – use with v-model; any type (see `valueKey`) |
4096
4227
  | default-value? | `V[]` | |
4097
4228
  | source-label? | `string` | |
4098
4229
  | target-label? | `string` | |
@@ -4101,12 +4232,11 @@ Two lists with several choices each; the buttons move the chosen items across, t
4101
4232
  | item-disabled? | `ItemAccessor<T, boolean>` | Disabled state of an item: property name or function (default: `disabled`) |
4102
4233
  | value-key? | `ItemAccessor<V, string \| number>` | Identifies object values (property name or function), e.g. "id" – without it objects are compared by content |
4103
4234
  | filter? | `boolean` | A search field above each list |
4104
- | manual-filter? | `boolean` | The source list is searched elsewhere (server): no local filtering there, listen to onFilterChange and pass the found items; chosen items keep their labels |
4235
+ | manual-filter? | `boolean` | The source list is searched elsewhere (server): no local filtering there, listen to filterChange and pass the found items; chosen items keep their labels |
4105
4236
  | loading? | `boolean` | The source list is loading (aria-busy, "Loading") |
4106
- | has-more? | `boolean` | More items can be loaded into the source list: scrolling to its end calls onLoadMore |
4237
+ | has-more? | `boolean` | More items can be loaded into the source list: scrolling to its end emits loadMore |
4107
4238
  | select-all? | `boolean` | Check boxes and "Select all" in each list |
4108
4239
  | draggable? | `boolean` | Items can be dragged from one list to the other (the buttons stay the keyboard way) |
4109
- | style? | `CSSProperties` | |
4110
4240
  | classes? | `RecipeClasses<typeof pickListRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4111
4241
 
4112
4242
  | Event | Payload | Description |
@@ -4138,7 +4268,6 @@ Pie or doughnut on a canvas named by the title; the legend lists value and share
4138
4268
  | table? | `boolean` | The slices as a table below (opens on demand) – the text alternative (default true) |
4139
4269
  | format-value? | `(value: number) => string` | Formats values in the legend, tooltips and table |
4140
4270
  | options? | `Record<string, unknown>` | Chart.js options – merged over the WireLayer defaults |
4141
- | style? | `CSSProperties` | |
4142
4271
  | classes? | `RecipeClasses<typeof chartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe chart) |
4143
4272
 
4144
4273
 
@@ -4153,7 +4282,7 @@ Code input (OTP, PIN): one box per character, typing moves on, pasting fills all
4153
4282
  | Prop | Type | Description |
4154
4283
  | --- | --- | --- |
4155
4284
  | length? | `number` | Number of characters |
4156
- | v-model? (modelValue) | `string` | |
4285
+ | v-model? (modelValue) | `string` | Code – use with v-model |
4157
4286
  | default-value? | `string` | |
4158
4287
  | type? | `'numeric' \| 'alphanumeric' \| 'alphabetic'` | |
4159
4288
  | otp? | `boolean` | One-time code: the browser/phone may fill it in from an SMS |
@@ -4162,8 +4291,6 @@ Code input (OTP, PIN): one box per character, typing moves on, pasting fills all
4162
4291
  | invalid? | `boolean` | |
4163
4292
  | disabled? | `boolean` | |
4164
4293
  | name? | `string` | |
4165
- | aria-label? | `string` | Accessible name of the group without a surrounding Field |
4166
- | style? | `CSSProperties` | |
4167
4294
  | classes? | `RecipeClasses<typeof pinInputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4168
4295
 
4169
4296
  | Event | Payload | Description |
@@ -4182,10 +4309,10 @@ Non-modal panel next to its trigger; Escape and clicking outside close it, focus
4182
4309
 
4183
4310
  | Prop | Type | Description |
4184
4311
  | --- | --- | --- |
4185
- | open? | `boolean` | |
4312
+ | v-model:open? | `boolean` | Controlled state – use with v-model:open |
4186
4313
  | default-open? | `boolean` | |
4187
4314
  | placement? | `PopoverPlacement` | |
4188
- | anchor? | `AnchorProp` | Element, ref or point to open at instead of the trigger – e.g. a table cell; open with `open` or `ref.current.open(anchor)` |
4315
+ | anchor? | `OverlayAnchor \| null` | Element (or point) to open at instead of the trigger – e.g. a table cell; open with v-model:open or the exposed `open(anchor)` |
4189
4316
  | width? | `'trigger'` | `trigger`: as wide as the trigger or anchor |
4190
4317
  | trap-focus? | `boolean` | Keeps the focus inside the panel and makes the page behind inert (modal popover) |
4191
4318
  | overlay? | `boolean` | Dims the page behind the panel |
@@ -4243,7 +4370,7 @@ Ark names the progressbar after its value; the label is the name, the value its
4243
4370
 
4244
4371
  | Prop | Type | Description |
4245
4372
  | --- | --- | --- |
4246
- | v-model (modelValue) | `number` | |
4373
+ | value | `number` | |
4247
4374
  | max? | `number` | |
4248
4375
  | label? | `string` | Visible label, also the accessible name of the progress bar |
4249
4376
  | show-value? | `boolean` | Show the value next to the label |
@@ -4266,13 +4393,12 @@ Ring with the value in the middle; a progressbar named by its label, the value a
4266
4393
 
4267
4394
  | Prop | Type | Description |
4268
4395
  | --- | --- | --- |
4269
- | v-model (modelValue) | `number` | |
4396
+ | value | `number` | |
4270
4397
  | max? | `number` | |
4271
4398
  | label | `string` | Visible label below the ring, also its accessible name |
4272
4399
  | size? | `'sm' \| 'md' \| 'lg'` | |
4273
4400
  | status? | `'neutral' \| 'success' \| 'warn' \| 'danger'` | |
4274
4401
  | format-value? | `(value: number, max: number) => string` | Text in the ring (default: percent) |
4275
- | style? | `CSSProperties` | |
4276
4402
  | classes? | `RecipeClasses<typeof progressCircleRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4277
4403
 
4278
4404
 
@@ -4287,7 +4413,7 @@ QR code as an image named by its value; optional logo, value text and downloads
4287
4413
 
4288
4414
  | Prop | Type | Description |
4289
4415
  | --- | --- | --- |
4290
- | v-model (modelValue) | `string` | Text or URL to encode |
4416
+ | value | `string` | Text or URL to encode |
4291
4417
  | size? | `number` | Width and height in px (default 160) |
4292
4418
  | error-correction? | `'L' \| 'M' \| 'Q' \| 'H'` | Error correction: L 7 %, M 15 % (default), Q 25 %, H 30 % of the code may be covered (H with a logo) |
4293
4419
  | logo? | `string` | Image URL shown in the middle (decorative; use error correction "H") |
@@ -4308,7 +4434,7 @@ Quarter field: type "Q4 2026" (also "2026-Q4", "4/2026") or pick from the four q
4308
4434
 
4309
4435
  | Prop | Type | Description |
4310
4436
  | --- | --- | --- |
4311
- | v-model? (modelValue) | `T` | Quarter as "2026-Q4"; with range { start, end } |
4437
+ | v-model? (modelValue) | `T` | Quarter as "2026-Q4" – use with v-model; with range { start, end } |
4312
4438
  | default-value? | `T` | |
4313
4439
  | range? | `boolean` | Start and end quarter instead of one |
4314
4440
  | min? | `string` | Earliest quarter ("2024-Q1") |
@@ -4322,8 +4448,6 @@ Quarter field: type "Q4 2026" (also "2026-Q4", "4/2026") or pick from the four q
4322
4448
  | name? | `string` | Sent as "2026-Q4"; with range as name[0] and name[1] |
4323
4449
  | size? | `'sm' \| 'md' \| 'lg'` | |
4324
4450
  | clearable? | `boolean` | Clear button in the field while it has a value |
4325
- | aria-label? | `string` | Accessible name without a surrounding Field |
4326
- | style? | `CSSProperties` | |
4327
4451
  | classes? | `RecipeClasses<typeof datePickerRecipe>` | Extra classes per part of the field, e.g. { control: "…" } (see the datePicker recipe) |
4328
4452
 
4329
4453
  | Event | Payload | Description |
@@ -4363,8 +4487,13 @@ A large card that is one option of a RadioGroup (use `columns` on the group for
4363
4487
 
4364
4488
  | Prop | Type | Description |
4365
4489
  | --- | --- | --- |
4366
- | v-model (modelValue) | `string` | Value of the option inside a RadioGroup |
4490
+ | value | `string` | Value of the option inside a RadioGroup |
4491
+ | title | `string` | Title – the accessible name of the radio button |
4492
+ | description? | `string` | Text below the title – read as the description |
4493
+ | icon? | `Component` | Icon component in a box at the start |
4494
+ | price? | `string` | Price or other figure at the end, e.g. "$29 / month" – part of the description |
4367
4495
  | disabled? | `boolean` | |
4496
+ | classes? | `RecipeClasses<typeof selectionCardRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4368
4497
 
4369
4498
 
4370
4499
  ### RadioGroup
@@ -4378,9 +4507,9 @@ One choice out of several (role="radiogroup", arrow keys), horizontal or vertica
4378
4507
 
4379
4508
  | Prop | Type | Description |
4380
4509
  | --- | --- | --- |
4381
- | v-model? (modelValue) | `string \| null` | |
4510
+ | v-model? (modelValue) | `string \| null` | Selected value – use with v-model |
4382
4511
  | default-value? | `string \| null` | |
4383
- | label? | `string` | Visible group label (otherwise pass aria-label) |
4512
+ | label? | `string` | Visible group label (otherwise pass aria-label – or place the group in a Field with a label) |
4384
4513
  | orientation? | `RadioGroupOrientation` | |
4385
4514
  | columns? | `number` | Cards in a grid with this many columns (one column on small screens) – for RadioCard |
4386
4515
  | disabled? | `boolean` | |
@@ -4405,7 +4534,7 @@ One option of a RadioGroup
4405
4534
 
4406
4535
  | Prop | Type | Description |
4407
4536
  | --- | --- | --- |
4408
- | v-model (modelValue) | `string` | |
4537
+ | value | `string` | |
4409
4538
  | disabled? | `boolean` | |
4410
4539
  | classes? | `RecipeClasses<typeof radioGroupRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4411
4540
 
@@ -4420,19 +4549,17 @@ Star rating: a radio group – arrow keys change the value, each star reads "3 s
4420
4549
 
4421
4550
  | Prop | Type | Description |
4422
4551
  | --- | --- | --- |
4423
- | v-model? (modelValue) | `number` | |
4552
+ | v-model? (modelValue) | `number` | Rating – use with v-model |
4424
4553
  | default-value? | `number` | |
4425
4554
  | count? | `number` | Number of stars |
4426
4555
  | allow-half? | `boolean` | |
4427
4556
  | allow-clear? | `boolean` | Clicking the chosen star again (or Delete/Backspace) clears the rating (value 0) |
4428
- | icon? | `ComponentType<{ className?: string; fill?: string; 'aria-hidden'?: boolean \| 'true' \| 'false' }>` | Own symbol instead of the star, e.g. a heart (filled when chosen – it gets `fill`) |
4557
+ | icon? | `Component` | Own symbol instead of the star, e.g. a heart (filled when chosen) |
4429
4558
  | read-only? | `boolean` | |
4430
4559
  | disabled? | `boolean` | |
4431
4560
  | label? | `string` | Visible label, also the group's accessible name |
4432
- | aria-label? | `string` | |
4433
4561
  | size? | `'sm' \| 'md' \| 'lg'` | |
4434
4562
  | name? | `string` | |
4435
- | style? | `CSSProperties` | |
4436
4563
  | classes? | `RecipeClasses<typeof ratingRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4437
4564
 
4438
4565
  | Event | Payload | Description |
@@ -4487,7 +4614,7 @@ One value: the ring is a progress bar named by the label. Segments: a group name
4487
4614
 
4488
4615
  | Prop | Type | Description |
4489
4616
  | --- | --- | --- |
4490
- | v-model? (modelValue) | `number` | One value (a progress bar) – or `segments` |
4617
+ | value? | `number` | One value (a progress bar) – or `segments` |
4491
4618
  | segments? | `readonly RingProgressSegment[]` | Several parts one after another (a group with a legend) |
4492
4619
  | max? | `number` | The whole (default 100, or the sum of the segments when larger) |
4493
4620
  | label | `string` | Visible label below the ring, also its accessible name |
@@ -4551,9 +4678,9 @@ Calendar: toolbar (today, back/forward, title, views); events are buttons named
4551
4678
  | Prop | Type | Description |
4552
4679
  | --- | --- | --- |
4553
4680
  | events? | `readonly SchedulerEvent[]` | Events; with `dataSource` they are shown together with the loaded ones |
4554
- | view? | `SchedulerView` | Shown view; controlled together with onViewChange |
4681
+ | v-model:view? | `SchedulerView` | Shown view – use with v-model:view |
4555
4682
  | default-view? | `SchedulerView` | |
4556
- | date? | `string` | Shown date ("2026-10-20"); controlled together with onDateChange |
4683
+ | v-model:date? | `string` | Shown date ("2026-10-20") – use with v-model:date |
4557
4684
  | default-date? | `string` | |
4558
4685
  | views? | `readonly SchedulerView[]` | Views offered in the toolbar ('timeline' and 'year' as well) |
4559
4686
  | start-hour? | `number` | Hours shown in the day and week view (and the day of the timeline) |
@@ -4569,26 +4696,26 @@ Calendar: toolbar (today, back/forward, title, views); events are buttons named
4569
4696
  | resources? | `readonly SchedulerResource[]` | People, rooms or machines: columns in the day and week view, rows in the timeline, a filter in the toolbar |
4570
4697
  | resources-per-page? | `number` | Day and week view with many resources: at most this many resources as columns at a time, buttons in the toolbar page through them (default: all, side by side) |
4571
4698
  | group-by? | `SchedulerGroupBy` | Resource columns per day (`date`, default) or per resource |
4572
- | resource-filter? | `string` | Shown resource (id; empty: all); controlled together with onResourceFilterChange |
4699
+ | v-model:resource-filter? | `string` | Shown resource (id; empty: all) – use with v-model:resourceFilter |
4573
4700
  | default-resource-filter? | `string` | |
4574
- | timeline-range? | `SchedulerTimelineRange` | Span of the timeline: a day in hours, a week or a month in days; controlled with onTimelineRangeChange |
4701
+ | v-model:timeline-range? | `SchedulerTimelineRange` | Span of the timeline: a day in hours, a week or a month in days – use with v-model:timelineRange |
4575
4702
  | default-timeline-range? | `SchedulerTimelineRange` | |
4576
- | zoom? | `number` | Zoom of the timeline (0.5–3, width of its slots); controlled together with onZoomChange |
4703
+ | v-model:zoom? | `number` | Zoom of the timeline (0.5–3, width of its slots) – use with v-model:zoom |
4577
4704
  | default-zoom? | `number` | |
4578
4705
  | business-hours? | `readonly SchedulerBusinessHours[]` | Opening hours by weekday – times outside are hatched (resources can have their own) |
4579
4706
  | hide-weekends? | `boolean` | Leaves out the weekend days of the locale in the week, month and timeline views |
4580
4707
  | overlap-mode? | `SchedulerOverlapMode` | Overlapping events side by side (`columns`, default) or stacked with an offset |
4581
- | can-drop? | `(event: SchedulerEvent, start: string, end: string, resourceId?: string) => boolean` | Whether an event may be dropped there – a refused move is marked, announced and reported (onDropRejected) |
4708
+ | can-drop? | `(event: SchedulerEvent, start: string, end: string, resourceId?: string) => boolean` | Whether an event may be dropped there – a refused move is marked, announced and reported (dropRejected) |
4582
4709
  | can-resize? | `(event: SchedulerEvent, start: string, end: string) => boolean` | Whether an event may get this length |
4583
4710
  | prevent-overlap? | `boolean` | No overlapping events per resource (without resources: at all) |
4584
4711
  | recurrence-edit-scope? | `'ask' \| RecurrenceScope` | Moving an occurrence of a series: ask (default), or always only this one / the whole series |
4585
4712
  | month-event-limit? | `number` | Events shown per day in the month before "+N more" |
4586
4713
  | more-popover? | `boolean` | "+N more" opens a popover with all events of the day (instead of the day view) |
4587
4714
  | compact-breakpoint? | `number` | Below this width (px) the month view becomes a compact month with the list of the chosen day below |
4588
- | droppable? | `boolean` | Accepts items dragged in from outside (application/x-wirecore-event or text) – see onExternalDrop |
4715
+ | droppable? | `boolean` | Accepts items dragged in from outside (application/x-wirecore-event or text) – see externalDrop |
4589
4716
  | data-source? | `DataSource<SchedulerEvent>` | Loads the events of the shown range (`range` of the query) – cancelled when the range changes, cached |
4590
4717
  | cache-time? | `number` | How long loaded ranges are reused, in ms (default 0) |
4591
- | loading? | `boolean` | Shows the loading state (e.g. while you load on onRangeChange yourself) |
4718
+ | loading? | `boolean` | Shows the loading state (e.g. while you load on rangeChange yourself) |
4592
4719
  | time-zone? | `string` | IANA time zone the times are shown in ("Europe/Berlin"); times with offset are converted, changes get it |
4593
4720
  | label? | `string` | Accessible name of the calendar |
4594
4721
  | heading-level? | `2 \| 3 \| 4 \| 5 \| 6` | Level of the title heading |
@@ -4639,8 +4766,7 @@ Native scrolling with slim scrollbars; the viewport is a named, focusable region
4639
4766
  | label | `string` | Names the scrollable region – it is focusable, so keyboard users can scroll it |
4640
4767
  | scrollbars? | `'auto' \| 'hover' \| 'always' \| 'hidden'` | When the scrollbars show: `auto` (on overflow, default), `hover`, `always` or `hidden` |
4641
4768
  | fade? | `boolean` | Fades the top and bottom edge while there is more to scroll in that direction |
4642
- | reach-threshold? | `number` | Distance in pixels from the start/end at which onReachStart/onReachEnd fire (default 0) |
4643
- | style? | `CSSProperties` | |
4769
+ | reach-threshold? | `number` | Distance in pixels from the start/end at which `reachStart`/`reachEnd` fire (default 0) |
4644
4770
  | classes? | `RecipeClasses<typeof scrollPanelRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4645
4771
 
4646
4772
  | Event | Payload | Description |
@@ -4675,13 +4801,13 @@ A search form (role="search"): optional area, field with magnifier, clear button
4675
4801
 
4676
4802
  | Prop | Type | Description |
4677
4803
  | --- | --- | --- |
4678
- | v-model? (modelValue) | `string` | The search text (controlled) |
4804
+ | v-model? (modelValue) | `string` | The search text – use with v-model |
4679
4805
  | default-value? | `string` | |
4680
4806
  | label? | `string` | Accessible name of the search (form role="search" and field) – default "Search" |
4681
4807
  | placeholder? | `string` | |
4682
4808
  | loading? | `boolean` | Search is running: spinner in the field, aria-busy |
4683
- | scopes? | `readonly NativeSelectOption[]` | Areas to search in – a select before the field |
4684
- | scope? | `string` | Chosen area (controlled) |
4809
+ | scopes? | `readonly NativeSelectOption[]` | Areas to search in – a select before the field (v-model:scope) |
4810
+ | v-model:scope? | `string` | Chosen area – use with v-model:scope |
4685
4811
  | scope-label? | `string` | Accessible name of the area select (default "Search in") |
4686
4812
  | suggestions? | `readonly string[]` | Suggestions while typing (combobox pattern) – any other text can still be searched |
4687
4813
  | clear-label? | `string` | Accessible name of the clear button (default "Clear search") |
@@ -4709,9 +4835,9 @@ Few exclusive options as a segmented switch (radio group)
4709
4835
 
4710
4836
  | Prop | Type | Description |
4711
4837
  | --- | --- | --- |
4712
- | v-model? (modelValue) | `string \| null` | |
4838
+ | v-model? (modelValue) | `string \| null` | Selected value – use with v-model |
4713
4839
  | default-value? | `string` | |
4714
- | label | `string` | Accessible name of the group (visually hidden) |
4840
+ | label? | `string` | Accessible name of the group (visually hidden) – inside a Field with a label, the Field's label names it |
4715
4841
  | size? | `SegmentedControlSize` | |
4716
4842
  | disabled? | `boolean` | |
4717
4843
  | name? | `string` | |
@@ -4733,7 +4859,7 @@ One option of a SegmentedControl
4733
4859
 
4734
4860
  | Prop | Type | Description |
4735
4861
  | --- | --- | --- |
4736
- | v-model (modelValue) | `string` | |
4862
+ | value | `string` | |
4737
4863
  | icon? | `Component` | Icon component before the label |
4738
4864
  | disabled? | `boolean` | |
4739
4865
  | classes? | `RecipeClasses<typeof segmentedControlRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
@@ -4751,9 +4877,10 @@ Dropdown list for one option: arrow keys, typeahead, Escape; native select hidde
4751
4877
  | Prop | Type | Description |
4752
4878
  | --- | --- | --- |
4753
4879
  | items | `readonly T[]` | Options: SelectItem objects – or any objects or values, read with itemValue/itemLabel/itemDisabled/itemGroup |
4754
- | v-model? (modelValue) | `V \| null` | Selected value; any type (string, number, boolean, object) |
4880
+ | v-model? (modelValue) | `V \| null` | Selected value – use with v-model; any type (string, number, boolean, object) |
4755
4881
  | default-value? | `V \| null` | |
4756
4882
  | placeholder? | `string` | |
4883
+ | disabled? | `boolean` | |
4757
4884
  | invalid? | `boolean` | |
4758
4885
  | required? | `boolean` | |
4759
4886
  | name? | `string` | |
@@ -4761,15 +4888,16 @@ Dropdown list for one option: arrow keys, typeahead, Escape; native select hidde
4761
4888
  | item-label? | `ItemAccessor<T, string>` | Label of an item: property name or function (default: `label`) |
4762
4889
  | item-disabled? | `ItemAccessor<T, boolean>` | Disabled state of an item: property name or function (default: `disabled`) |
4763
4890
  | item-group? | `ItemAccessor<T, string \| null \| undefined>` | Group heading of an item: property name or function (default: `group`); items are listed per group |
4891
+ | item-keywords? | `ItemAccessor<T, string \| readonly string[] \| null \| undefined>` | More text the search finds an item by, besides its label: property name or function, one text or a list (default: `keywords`), e.g. the name of the item's category |
4764
4892
  | value-key? | `ItemAccessor<V, string \| number>` | Identifies object values (property name or function), e.g. "id" – without it objects are compared by content |
4765
4893
  | clearable? | `boolean` | Button that clears the value (also Backspace/Delete on the closed field) |
4766
4894
  | loading? | `boolean` | Shows a spinner in the field and "Loading" in the list (aria-busy) |
4767
4895
  | loading-text? | `string` | Text of the loading row in the list |
4768
4896
  | size? | `SelectSize` | Height of the field: 32, 40 (default) or 48 px |
4769
- | filter? | `boolean` | Search field at the top of the list; filters by label, ignoring case and accents |
4770
- | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to onFilterChange |
4897
+ | filter? | `boolean` | Search field at the top of the list; filters by label and itemKeywords, ignoring case and accents |
4898
+ | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to filterChange |
4771
4899
  | empty-text? | `string` | Shown when no item is left (default "No results" / "No entries") |
4772
- | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list calls onLoadMore |
4900
+ | has-more? | `boolean` | More items can be loaded: scrolling to the end of the list emits loadMore |
4773
4901
  | data-source? | `DataSource<T>` | Loads the options when the list opens (pages while scrolling; with `filter` the search asks it, after a typing pause, outdated answers dropped); `getItemsByKeys` gives the label of a chosen value that is not loaded |
4774
4902
  | min-search-length? | `number` | Fewest characters the search needs before the data source is asked |
4775
4903
  | page-size? | `number` | Options per request of the data source (default 50) |
@@ -4824,7 +4952,6 @@ Navigation landmark with links and expandable groups (buttons with aria-expanded
4824
4952
  | label | `string` | Name of the navigation landmark, e.g. "Main navigation" |
4825
4953
  | rail? | `boolean` | Icons only, the labels as tooltips (and for screen readers). Default: the collapsed state of a surrounding AppShell (navbarCollapsed) |
4826
4954
  | expand-on-hover? | `boolean` | With `rail`: hovering or focusing the rail shows the labels (no tooltips) – default from the AppShell |
4827
- | style? | `CSSProperties` | |
4828
4955
  | classes? | `RecipeClasses<typeof sidebarNavRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4829
4956
 
4830
4957
  | Event | Payload | Description |
@@ -4846,21 +4973,20 @@ Signature field (role="application"): draw with mouse, pen or finger; "Undo" rem
4846
4973
 
4847
4974
  | Prop | Type | Description |
4848
4975
  | --- | --- | --- |
4849
- | v-model? (modelValue) | `string` | The signature as data URL ("" when empty, controlled) |
4850
- | paths? | `string[]` | The strokes as SVG paths (controlled – to restore or store them) |
4976
+ | v-model? (modelValue) | `string` | The signature as data URL ("" when empty) – use with v-model |
4977
+ | v-model:paths? | `string[]` | The strokes as SVG paths – use with v-model:paths (to restore or store them) |
4851
4978
  | default-paths? | `string[]` | |
4852
4979
  | format? | `'png' \| 'svg'` | Format of the data URL: png (default) or svg; a typed signature is always svg |
4853
4980
  | label? | `string` | Visible label, also the name of the field (default "Signature"; a surrounding Field names it, too) |
4854
4981
  | color? | `string` | Ink colour – a real colour (it is exported), default black on the light sheet |
4855
4982
  | stroke-width? | `number` | Stroke width in px (default 2) |
4856
4983
  | typed-alternative? | `boolean` | Offers typing the name instead of drawing (accessible alternative) |
4857
- | typed-name? | `string` | The typed name (controlled) |
4984
+ | v-model:typed-name? | `string` | The typed name – use with v-model:typedName |
4858
4985
  | disabled? | `boolean` | |
4859
4986
  | read-only? | `boolean` | |
4860
4987
  | invalid? | `boolean` | |
4861
4988
  | required? | `boolean` | |
4862
4989
  | name? | `string` | Name of the hidden form field (its value is the data URL) |
4863
- | style? | `CSSProperties` | |
4864
4990
  | classes? | `RecipeClasses<typeof signaturePadRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4865
4991
 
4866
4992
  | Event | Payload | Description |
@@ -4884,7 +5010,7 @@ Columns of equal width, fixed per breakpoint or as many as fit
4884
5010
  | columns? | `ResponsiveColumns` | Columns: a number or per breakpoint, e.g. { base: 1, sm: 2, lg: 4 } (default 1) |
4885
5011
  | min-column-width? | `string` | As many columns as fit, each at least this wide (e.g. "14rem") – instead of `columns` |
4886
5012
  | gap? | `LayoutGap` | Space between the cells (default md, 16px) |
4887
- | as? | `Component \| string` | Element to render, e.g. "ul" (default div) |
5013
+ | as? | `string \| Component` | Element to render, e.g. "ul" (default div) |
4888
5014
  | classes? | `RecipeClasses<typeof simpleGridRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
4889
5015
 
4890
5016
 
@@ -4955,7 +5081,7 @@ Range: "Price, Minimum" / "Price, Maximum"
4955
5081
 
4956
5082
  | Prop | Type | Description |
4957
5083
  | --- | --- | --- |
4958
- | v-model? (modelValue) | `number[]` | One value per thumb – two values make a range slider |
5084
+ | v-model? (modelValue) | `number[]` | One value per thumb – two values make a range slider (v-model) |
4959
5085
  | default-value? | `number[]` | |
4960
5086
  | min? | `number` | |
4961
5087
  | max? | `number` | |
@@ -4988,21 +5114,19 @@ Sortable list: every item has a handle – drag it, or press Space/Enter, move w
4988
5114
 
4989
5115
  | Prop | Type | Description |
4990
5116
  | --- | --- | --- |
4991
- | v-model? (modelValue) | `T[]` | The items in their order (controlled) |
5117
+ | v-model? (modelValue) | `T[]` | The items in their order – use with v-model |
4992
5118
  | default-value? | `T[]` | |
4993
5119
  | item-key? | `ItemAccessor<T, string \| number>` | Key of an item: property name or function (default `id`, else `value`, else the item) |
4994
5120
  | item-label? | `ItemAccessor<T, string>` | Text of an item for its handle and the announcements (default `label`, `name` or `title`) |
4995
5121
  | label? | `string` | Name of the list (visible label, also announced when an item moves in) |
4996
5122
  | group? | `string` | Lists of the same group exchange items (e.g. Kanban columns) |
4997
- | name? | `string` | Id of this list in `onMove` (default: generated) |
5123
+ | name? | `string` | Id of this list in `move` events (default: generated) |
4998
5124
  | orientation? | `SortableOrientation` | vertical (default), horizontal or grid (with `columns`) |
4999
5125
  | columns? | `number` | Columns of the grid |
5000
5126
  | accepts? | `(item: T, from: string) => boolean` | Whether an item from another list of the group may come in |
5001
5127
  | animate? | `boolean` | Items glide to their new place when they move (default: yes; not with reduced motion) |
5002
5128
  | disabled? | `boolean` | |
5003
5129
  | empty-text? | `string` | Text of an empty list (it stays a drop target) |
5004
- | aria-label? | `string` | |
5005
- | style? | `CSSProperties` | |
5006
5130
  | classes? | `RecipeClasses<typeof sortableRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5007
5131
 
5008
5132
  | Event | Payload | Description |
@@ -5030,7 +5154,6 @@ Small line without axes; the canvas is an image named by the trend and the extre
5030
5154
  | width? | `string` | |
5031
5155
  | height? | `string` | |
5032
5156
  | format-value? | `(value: number) => string` | |
5033
- | style? | `CSSProperties` | |
5034
5157
  | classes? | `RecipeClasses<typeof sparklineRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5035
5158
 
5036
5159
 
@@ -5049,7 +5172,6 @@ A menu button: the actions open above it (or in a circle around it) as menu item
5049
5172
  | layout? | `SpeedDialLayout` | `column` (default): above the button with visible labels; `circle`, `semicircle`, `quarter`: around it, the labels show as tooltips on hover and focus |
5050
5173
  | direction? | `SpeedDialDirection` | Where the actions open: up (default), down; for semicircle and quarter also left or right |
5051
5174
  | radius? | `number` | Distance of the actions from the centre of the button in px (circle layouts, default 80) |
5052
- | style? | `CSSProperties` | |
5053
5175
  | classes? | `RecipeClasses<typeof speedDialRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5054
5176
 
5055
5177
  | Event | Payload | Description |
@@ -5070,7 +5192,7 @@ Loading indicator with a label for screen readers (role="status"); with `value`
5070
5192
  | --- | --- | --- |
5071
5193
  | size? | `Size` | |
5072
5194
  | label? | `string` | Text announced to screen readers (live region) |
5073
- | v-model? (modelValue) | `number` | Fixed progress 0–100: a ring that fills up instead of turning (a progress bar) |
5195
+ | value? | `number` | Fixed progress 0–100: a ring that fills up instead of turning (a progress bar) |
5074
5196
  | classes? | `RecipeClasses<typeof spinnerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5075
5197
 
5076
5198
 
@@ -5093,7 +5215,6 @@ Main action plus a menu with the other actions; both are separate buttons
5093
5215
  | icon? | `Component` | |
5094
5216
  | disabled? | `boolean` | |
5095
5217
  | menu-label? | `string` | Accessible name of the menu button |
5096
- | style? | `CSSProperties` | |
5097
5218
  | classes? | `RecipeClasses<typeof splitButtonRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5098
5219
 
5099
5220
  | Event | Payload | Description |
@@ -5117,7 +5238,6 @@ Panels with handles between them (role="separator"): drag, or arrow keys (Shift
5117
5238
  | step? | `number` | Arrow keys on a handle change the size by this many percent (default 1) |
5118
5239
  | shift-step? | `number` | Shift + arrow keys (percent, default 10) |
5119
5240
  | storage-key? | `string` | Remembers the sizes in localStorage under this key |
5120
- | style? | `CSSProperties` | |
5121
5241
  | classes? | `RecipeClasses<typeof splitterRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5122
5242
 
5123
5243
  | Event | Payload | Description |
@@ -5142,10 +5262,9 @@ Content cut to maxHeight; the button (aria-expanded) shows the rest. Hidden text
5142
5262
  | Prop | Type | Description |
5143
5263
  | --- | --- | --- |
5144
5264
  | max-height? | `number` | Height of the cut content in px |
5145
- | open? | `boolean` | |
5265
+ | v-model:open? | `boolean` | Open state – use with v-model:open |
5146
5266
  | show-label? | `string` | |
5147
5267
  | hide-label? | `string` | |
5148
- | style? | `CSSProperties` | |
5149
5268
  | classes? | `RecipeClasses<typeof spoilerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5150
5269
 
5151
5270
  | Event | Payload | Description |
@@ -5166,7 +5285,7 @@ Children below each other with an even gap
5166
5285
  | --- | --- | --- |
5167
5286
  | gap? | `LayoutGap` | Space between the children: none, xs (4px), sm (8px), md (16px, default), lg (24px), xl (32px) |
5168
5287
  | align? | `'stretch' \| 'start' \| 'center' \| 'end'` | Horizontal alignment of the children |
5169
- | as? | `Component \| string` | Element to render, e.g. "ul" or "section" (default div) |
5288
+ | as? | `string \| Component` | Element to render, e.g. "ul" or "section" (default div) |
5170
5289
  | classes? | `RecipeClasses<typeof stackRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5171
5290
 
5172
5291
 
@@ -5182,7 +5301,7 @@ Label, value (with prefix/suffix and unit), trend as arrow + text, optional char
5182
5301
  | Prop | Type | Description |
5183
5302
  | --- | --- | --- |
5184
5303
  | label | `string` | What the number is, e.g. "Revenue" |
5185
- | v-model? (modelValue) | `number \| null` | The number; null or undefined shows nothing (or the placeholder while loading) |
5304
+ | value? | `number \| null` | The number; null or undefined shows nothing (or the placeholder while loading) |
5186
5305
  | format-options? | `Intl.NumberFormatOptions` | Format of the value, e.g. { style: 'currency', currency: 'EUR' } or { notation: 'compact' } |
5187
5306
  | unit? | `string` | Unit (Intl unit identifier), e.g. "percent", "kilobyte", "hour" – formatted with the locale |
5188
5307
  | prefix? | `string` | Text before the value, e.g. "≈" |
@@ -5233,13 +5352,12 @@ Steps list (tabs) with one panel per step and back/next buttons; the last "Next"
5233
5352
  | Prop | Type | Description |
5234
5353
  | --- | --- | --- |
5235
5354
  | items | `readonly StepperItem[]` | |
5236
- | step? | `number` | Current step (0-based; items.length = all done) |
5355
+ | v-model:step? | `number` | Current step (0-based; items.length = all done) – use with v-model:step |
5237
5356
  | default-step? | `number` | |
5238
5357
  | linear? | `boolean` | Steps only in order: no jumping ahead via the step list |
5239
5358
  | is-step-valid? | `(index: number) => boolean` | Blocks "Next" while a step is not valid (with linear) |
5240
5359
  | orientation? | `'horizontal' \| 'vertical'` | Steps listed top to bottom beside the content |
5241
5360
  | label-placement? | `'end' \| 'bottom'` | Label beside the number (default) or below it |
5242
- | style? | `CSSProperties` | |
5243
5361
  | classes? | `RecipeClasses<typeof stepperRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5244
5362
 
5245
5363
  | Event | Payload | Description |
@@ -5283,7 +5401,7 @@ Sticks to the top or bottom edge while its container scrolls
5283
5401
  | edge? | `'top' \| 'bottom'` | Edge it sticks to while its container scrolls (default top) |
5284
5402
  | offset? | `string` | Distance from the edge, e.g. "3.5rem" below a fixed header (default 0) |
5285
5403
  | bar? | `boolean` | Action bar look (background, line, buttons at the end) – e.g. Save/Cancel below a long form |
5286
- | as? | `Component \| string` | Element to render (default div) |
5404
+ | as? | `string \| Component` | Element to render (default div) |
5287
5405
  | classes? | `RecipeClasses<typeof stickyRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5288
5406
 
5289
5407
 
@@ -5298,15 +5416,19 @@ Ark renders a plain checkbox; role="switch" makes screen readers announce it as
5298
5416
 
5299
5417
  | Prop | Type | Description |
5300
5418
  | --- | --- | --- |
5301
- | checked? | `boolean` | |
5419
+ | v-model:checked? | `boolean` | Controlled state – use with v-model:checked |
5302
5420
  | default-checked? | `boolean` | |
5303
5421
  | description? | `string` | Second line below the label, also read as the switch's description |
5304
5422
  | icon? | `Component` | Icon component before the label |
5305
5423
  | checked-icon? | `Component` | Icon in the thumb while on |
5306
5424
  | unchecked-icon? | `Component` | Icon in the thumb while off |
5425
+ | on-label? | `string` | Short text in the track while on, e.g. "On" (decoration – the state is announced by the switch) |
5307
5426
  | off-label? | `string` | Short text in the track while off, e.g. "Off" |
5427
+ | disabled? | `boolean` | |
5308
5428
  | invalid? | `boolean` | |
5309
- | v-model? (modelValue) | `string` | |
5429
+ | required? | `boolean` | |
5430
+ | name? | `string` | |
5431
+ | value? | `string` | Value of the switch – inside a SwitchGroup its state comes from the group's value |
5310
5432
  | classes? | `RecipeClasses<typeof switchControlRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5311
5433
 
5312
5434
  | Event | Payload | Description |
@@ -5325,11 +5447,11 @@ role="group" named by its label, described by helper and error text; Switches wi
5325
5447
 
5326
5448
  | Prop | Type | Description |
5327
5449
  | --- | --- | --- |
5328
- | v-model? (modelValue) | `string[]` | Values of the switches that are on (controlled) |
5450
+ | v-model? (modelValue) | `string[]` | Values of the switches that are on – use with v-model |
5329
5451
  | default-value? | `string[]` | |
5330
5452
  | label? | `string` | Visible label of the group (names it); otherwise pass aria-label |
5331
- | helper-text? | `ReactNode` | |
5332
- | error? | `ReactNode` | Error message – also marks the group and its switches invalid |
5453
+ | helper-text? | `string` | |
5454
+ | error? | `string` | Error message – also marks the group and its switches invalid |
5333
5455
  | invalid? | `boolean` | |
5334
5456
  | required? | `boolean` | Shows the required mark after the label |
5335
5457
  | disabled? | `boolean` | |
@@ -5355,7 +5477,6 @@ Navigation to the headings of the page; the section in view is marked (aria-curr
5355
5477
  | --- | --- | --- |
5356
5478
  | items | `readonly TocEntry[]` | |
5357
5479
  | title? | `string` | |
5358
- | style? | `CSSProperties` | |
5359
5480
  | classes? | `RecipeClasses<typeof tableOfContentsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5360
5481
 
5361
5482
 
@@ -5370,7 +5491,7 @@ Tab panels: tab list with arrow keys, one panel visible
5370
5491
 
5371
5492
  | Prop | Type | Description |
5372
5493
  | --- | --- | --- |
5373
- | v-model? (modelValue) | `string` | |
5494
+ | v-model? (modelValue) | `string` | Selected tab – use with v-model |
5374
5495
  | default-value? | `string` | |
5375
5496
  | label? | `string` | Accessible name of the tab list |
5376
5497
  | orientation? | `'horizontal' \| 'vertical'` | Tab list above (default) or beside the panels |
@@ -5395,7 +5516,7 @@ The panel of one tab
5395
5516
 
5396
5517
  | Prop | Type | Description |
5397
5518
  | --- | --- | --- |
5398
- | v-model (modelValue) | `string` | |
5519
+ | value | `string` | |
5399
5520
  | classes? | `RecipeClasses<typeof tabsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5400
5521
 
5401
5522
 
@@ -5424,9 +5545,10 @@ One tab button
5424
5545
 
5425
5546
  | Prop | Type | Description |
5426
5547
  | --- | --- | --- |
5427
- | v-model (modelValue) | `string` | |
5548
+ | value | `string` | |
5428
5549
  | icon? | `Component` | Icon component before the label |
5429
- | closable? | `boolean` | Shows a close button (pointer) and closes with the Delete key; onClose reports it – remove the tab (and select another one) yourself. The focus moves to the neighbouring tab |
5550
+ | disabled? | `boolean` | |
5551
+ | closable? | `boolean` | Shows a close button (pointer) and closes with the Delete key; `close` reports it – remove the tab (and select another one) yourself. The focus moves to the neighbouring tab |
5430
5552
  | classes? | `RecipeClasses<typeof tabsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5431
5553
 
5432
5554
  | Event | Payload | Description |
@@ -5444,7 +5566,7 @@ Free entries: Enter or "," adds, Backspace on the empty field selects the last e
5444
5566
 
5445
5567
  | Prop | Type | Description |
5446
5568
  | --- | --- | --- |
5447
- | v-model? (modelValue) | `string[]` | |
5569
+ | v-model? (modelValue) | `string[]` | Entries – use with v-model |
5448
5570
  | default-value? | `string[]` | |
5449
5571
  | placeholder? | `string` | |
5450
5572
  | max? | `number` | Most entries allowed |
@@ -5455,14 +5577,12 @@ Free entries: Enter or "," adds, Backspace on the empty field selects the last e
5455
5577
  | name? | `string` | |
5456
5578
  | suggestions? | `readonly string[]` | Suggestions while typing (entries already added are left out); arrow keys pick one, Enter adds it |
5457
5579
  | filter? | `boolean` | Filters the suggestions by the typed text, ignoring case and accents (default true) |
5458
- | manual-filter? | `boolean` | The suggestions are filtered elsewhere (server): no local filtering, listen to onFilterChange |
5580
+ | manual-filter? | `boolean` | The suggestions are filtered elsewhere (server): no local filtering, listen to filterChange |
5459
5581
  | loading? | `boolean` | Shows "Loading" in the suggestions (aria-busy) |
5460
5582
  | loading-text? | `string` | Text of the loading row |
5461
- | has-more? | `boolean` | More suggestions can be loaded: scrolling to the end of the list calls onLoadMore |
5583
+ | has-more? | `boolean` | More suggestions can be loaded: scrolling to the end of the list emits loadMore |
5462
5584
  | data-source? | `DataSource<string>` | Suggestions from a server instead of `suggestions`: asked with the typed text after a typing pause (outdated answers dropped), more while scrolling |
5463
5585
  | min-search-length? | `number` | Fewest characters the typed text needs before the data source is asked (default 1) |
5464
- | aria-label? | `string` | Accessible name without a surrounding Field |
5465
- | style? | `CSSProperties` | |
5466
5586
  | classes? | `RecipeClasses<typeof tagsInputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5467
5587
 
5468
5588
  | Event | Payload | Description |
@@ -5483,13 +5603,16 @@ Multi-line text field, optionally growing with the text (autoResize) and with a
5483
5603
 
5484
5604
  | Prop | Type | Description |
5485
5605
  | --- | --- | --- |
5606
+ | v-model? (modelValue) | `string` | |
5607
+ | default-value? | `string` | Start value without v-model (uncontrolled) |
5486
5608
  | size? | `Size` | |
5487
5609
  | invalid? | `boolean` | Marks the textarea as invalid (also inherited from a surrounding Field) |
5488
5610
  | success? | `boolean` | Confirmed value: green border and check icon (also inherited from a Field with `success`) |
5611
+ | disabled? | `boolean` | Disables the textarea (also inherited from a surrounding Field) |
5489
5612
  | auto-resize? | `boolean` | Grows with its text instead of scrolling (rows stays the minimum) |
5490
5613
  | min-rows? | `number` | With autoResize: at least this many rows |
5491
5614
  | max-rows? | `number` | With autoResize: at most this many rows, then it scrolls |
5492
- | show-count? | `boolean` | Counter "12 / 200" below the field (needs `maxLength`); the remaining characters are announced once typing pauses, not on every character |
5615
+ | show-count? | `boolean` | Counter "12 / 200" below the field (needs `maxlength`); the remaining characters are announced once typing pauses, not on every character |
5493
5616
  | loading? | `boolean` | Shows a spinner in the corner and marks the field busy (aria-busy) |
5494
5617
  | clearable? | `boolean` | Shows a button that empties the field while it has text |
5495
5618
  | clear-label? | `string` | Accessible name of the clear button (default "Clear input") |
@@ -5510,7 +5633,7 @@ Free time slots for a booking: radio buttons for one time (arrow keys move and c
5510
5633
 
5511
5634
  | Prop | Type | Description |
5512
5635
  | --- | --- | --- |
5513
- | v-model? (modelValue) | `T` | Chosen start time ("HH:mm"); with range { start, end } (start times of the first and last slot) |
5636
+ | v-model? (modelValue) | `T` | Chosen start time ("HH:mm") – use with v-model; with range { start, end } (start times of the first and last slot) |
5514
5637
  | default-value? | `T` | |
5515
5638
  | times? | `(string \| TimeGridSlot)[]` | The bookable times; default every `interval` minutes from `start` up to `end` |
5516
5639
  | start? | `string` | First slot ("HH:mm") when `times` is not given |
@@ -5525,8 +5648,6 @@ Free time slots for a booking: radio buttons for one time (arrow keys move and c
5525
5648
  | disabled? | `boolean` | |
5526
5649
  | name? | `string` | Sent as "HH:mm"; with range as name[0] and name[1] |
5527
5650
  | size? | `'sm' \| 'md' \| 'lg'` | |
5528
- | aria-label? | `string` | Accessible name instead of `label` |
5529
- | style? | `CSSProperties` | |
5530
5651
  | classes? | `RecipeClasses<typeof timeGridRecipe>` | Extra classes per part of the component, e.g. { slot: "…" } (see the recipe) |
5531
5652
 
5532
5653
  | Event | Payload | Description |
@@ -5550,11 +5671,10 @@ Events in order (ordered list); the markers are decoration, the status colour is
5550
5671
  | orientation? | `'vertical' \| 'horizontal'` | Events side by side with a horizontal line |
5551
5672
  | active-index? | `number` | Index of the current event: filled marker and aria-current="step" |
5552
5673
  | feed? | `boolean` | A feed (role="feed"): each event is an article that takes the focus, Page Up/Down move between them; with `hasMore` older events are loaded at the end |
5553
- | has-more? | `boolean` | Older events can be loaded: the button "Load older entries" (and `autoLoad`) calls onLoadMore |
5674
+ | has-more? | `boolean` | Older events can be loaded: the button "Load older entries" (and `autoLoad`) emits loadMore |
5554
5675
  | loading? | `boolean` | Older events are loading (aria-busy on the feed) |
5555
5676
  | auto-load? | `boolean` | Loads older events when the end of the feed scrolls into view (the button stays as fallback) |
5556
5677
  | set-size? | `number` | Number of all events (aria-setsize); -1 when unknown (default: the number of items, or -1 with hasMore) |
5557
- | style? | `CSSProperties` | |
5558
5678
  | classes? | `RecipeClasses<typeof timelineRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5559
5679
 
5560
5680
  | Event | Payload | Description |
@@ -5577,7 +5697,7 @@ Time field: type the digits one after another ("1430"), arrow keys change hour o
5577
5697
 
5578
5698
  | Prop | Type | Description |
5579
5699
  | --- | --- | --- |
5580
- | v-model? (modelValue) | `string \| null` | "HH:mm", e.g. "14:30" ("HH:mm:ss" with withSeconds); with timeZone "14:30+02:00" |
5700
+ | v-model? (modelValue) | `string \| null` | "HH:mm", e.g. "14:30" ("HH:mm:ss" with withSeconds) – use with v-model; with timeZone "14:30+02:00" |
5581
5701
  | default-value? | `string \| null` | |
5582
5702
  | min? | `string` | Earliest time ("HH:mm") – also the start of the list |
5583
5703
  | max? | `string` | Latest time ("HH:mm") – also the end of the list |
@@ -5596,8 +5716,6 @@ Time field: type the digits one after another ("1430"), arrow keys change hour o
5596
5716
  | time-zone? | `string` | IANA zone ("Europe/Berlin"): the time is typed in the zone, the value gets its offset ("14:30+02:00") |
5597
5717
  | reference-date? | `string` | Day whose offset applies with timeZone (ISO, default today) |
5598
5718
  | show-time-zone? | `boolean` | Short zone name after the time ("CEST") |
5599
- | aria-label? | `string` | Accessible name without a surrounding Field |
5600
- | style? | `CSSProperties` | |
5601
5719
  | classes? | `RecipeClasses<typeof datePickerRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5602
5720
 
5603
5721
  | Event | Payload | Description |
@@ -5615,7 +5733,7 @@ Start and end time in one field ("09:00 – 17:30"): typing runs on from start t
5615
5733
 
5616
5734
  | Prop | Type | Description |
5617
5735
  | --- | --- | --- |
5618
- | v-model? (modelValue) | `TimeRange \| null` | Start and end ("09:00" – "17:30") |
5736
+ | v-model? (modelValue) | `TimeRange \| null` | Start and end ("09:00" – "17:30") – use with v-model |
5619
5737
  | default-value? | `TimeRange \| null` | |
5620
5738
  | min? | `string` | Earliest time ("HH:mm") |
5621
5739
  | max? | `string` | Latest time ("HH:mm") |
@@ -5629,8 +5747,6 @@ Start and end time in one field ("09:00 – 17:30"): typing runs on from start t
5629
5747
  | name? | `string` | Sent as name[0] and name[1] |
5630
5748
  | size? | `'sm' \| 'md' \| 'lg'` | |
5631
5749
  | clearable? | `boolean` | Clear button in the field while it has a value |
5632
- | aria-label? | `string` | Accessible name without a surrounding Field |
5633
- | style? | `CSSProperties` | |
5634
5750
  | classes? | `RecipeClasses<typeof datePickerRecipe>` | Extra classes per part of the component (see the datePicker recipe) |
5635
5751
 
5636
5752
  | Event | Payload | Description |
@@ -5649,6 +5765,10 @@ Place once in the app; show toasts with toast({ title, description, type, action
5649
5765
  | Prop | Type | Description |
5650
5766
  | --- | --- | --- |
5651
5767
  | toaster? | `typeof appToaster` | A toaster from createToaster() – without it the app-wide one of toast() |
5768
+ | placement? | `ToasterOptions['placement']` | Where the toasts appear (default bottom-end) – also for the app-wide toaster of toast() |
5769
+ | max? | `number` | Toasts shown at once (default 5); more wait in a queue |
5770
+ | overlap? | `boolean` | Toasts lie on top of each other and fan out on hover or focus (instead of a list) |
5771
+ | gap? | `number` | Space between the toasts in px (default 12) |
5652
5772
  | label? | `string` | Accessible name of the notification region |
5653
5773
  | close-label? | `string` | Accessible name of each toast's close button |
5654
5774
  | show-progress? | `boolean` | Thin bar at the bottom that shows the remaining time (decorative; stops while paused) |
@@ -5667,10 +5787,14 @@ Button that stays pressed (aria-pressed), e.g. "Active only" – the label does
5667
5787
 
5668
5788
  | Prop | Type | Description |
5669
5789
  | --- | --- | --- |
5670
- | pressed? | `boolean` | |
5790
+ | v-model:pressed? | `boolean` | Pressed state – use with v-model:pressed |
5671
5791
  | default-pressed? | `boolean` | |
5672
5792
  | size? | `Size` | |
5673
5793
  | icon? | `Component` | |
5794
+ | pressed-icon? | `Component` | Icon while pressed (default: `icon`) – the label stays the same |
5795
+ | icon-props? | `Record<string, unknown>` | Props passed on to the icon component, e.g. { fill: 'currentColor' } for a filled icon or { strokeWidth: 1.5 } |
5796
+ | pressed-icon-props? | `Record<string, unknown>` | Props of the icon while pressed, added to `iconProps` – e.g. { fill: 'currentColor' }: a filled icon when on |
5797
+ | disabled? | `boolean` | |
5674
5798
  | classes? | `RecipeClasses<typeof toggleButtonRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5675
5799
 
5676
5800
  | Event | Payload | Description |
@@ -5689,10 +5813,10 @@ Button that stays pressed (aria-pressed), e.g. "Active only" – the label does
5689
5813
 
5690
5814
  | Prop | Type | Description |
5691
5815
  | --- | --- | --- |
5692
- | content? | `ReactNode` | The explanation (or children) |
5816
+ | content? | `string` | The explanation (or the default slot) |
5693
5817
  | label? | `string` | What it explains, e.g. the field label – names the button "More information about <label>" |
5694
5818
  | trigger-label? | `string` | Own accessible name of the button |
5695
- | open? | `boolean` | Open state (controlled) |
5819
+ | v-model:open? | `boolean` | Open state – use with v-model:open |
5696
5820
  | icon? | `Component` | Icon of the button (default: info) |
5697
5821
  | classes? | `RecipeClasses<typeof toggletipRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5698
5822
 
@@ -5713,7 +5837,6 @@ Groups controls (role="toolbar"): one tab stop, arrow keys move between the cont
5713
5837
  | --- | --- | --- |
5714
5838
  | label | `string` | Accessible name, e.g. "Formatting" |
5715
5839
  | orientation? | `'horizontal' \| 'vertical'` | |
5716
- | style? | `CSSProperties` | |
5717
5840
  | classes? | `RecipeClasses<typeof toolbarRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5718
5841
 
5719
5842
  | Slot | Slot props | Description |
@@ -5788,7 +5911,7 @@ Step-by-step introduction: each step is a dialog next to its element (focus move
5788
5911
  | Prop | Type | Description |
5789
5912
  | --- | --- | --- |
5790
5913
  | steps | `readonly TourStep[]` | |
5791
- | open? | `boolean` | Running – starting it sets it, the tour ends itself |
5914
+ | v-model:open? | `boolean` | Running – use with v-model:open |
5792
5915
  | classes? | `RecipeClasses<typeof tourRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5793
5916
 
5794
5917
  | Event | Payload | Description |
@@ -5809,30 +5932,28 @@ Tree (role="tree"): arrow keys move and open/close, Enter/Space select, typing j
5809
5932
  | --- | --- | --- |
5810
5933
  | items | `readonly TreeNode[]` | |
5811
5934
  | label? | `string` | Visible label, also the tree's accessible name |
5812
- | aria-label? | `string` | Accessible name without a visible label |
5813
5935
  | selection-mode? | `'single' \| 'multiple'` | |
5814
- | selected-value? | `string[]` | |
5936
+ | v-model:selected-value? | `string[]` | Selected ids – use with v-model:selected-value |
5815
5937
  | default-selected-value? | `string[]` | |
5816
- | expanded-value? | `string[]` | |
5938
+ | v-model:expanded-value? | `string[]` | Expanded ids – use with v-model:expanded-value |
5817
5939
  | default-expanded-value? | `string[]` | |
5818
- | checkable? | `boolean` | A checkbox per node; checking a branch checks its children |
5819
- | checked-value? | `string[]` | |
5940
+ | checkable? | `boolean` | A checkbox per node; checking a branch checks its children (v-model:checked-value) |
5941
+ | v-model:checked-value? | `string[]` | |
5820
5942
  | default-checked-value? | `string[]` | |
5821
5943
  | check-strictly? | `boolean` | Check boxes of parents and children are independent (no cascade) |
5822
5944
  | checked-strategy? | `TreeCheckedStrategy` | Which checked ids are reported: `all` – every checked node, `parent` – a fully checked branch instead of its children, `child` – only nodes without children. Without it the ids are reported as Ark keeps them. |
5823
- | reorderable? | `boolean` | Nodes can be moved: drag and drop (before, after or into a branch), Alt+arrow keys on the focused node (up/down among the siblings, right into the branch above, left out of the branch), or Ctrl+X and Ctrl+V. Reported via `onMove`. |
5945
+ | reorderable? | `boolean` | Nodes can be moved: drag and drop (before, after or into a branch), Alt+arrow keys on the focused node (up/down among the siblings, right into the branch above, left out of the branch), or Ctrl+X and Ctrl+V. Reported via `move`. |
5824
5946
  | allow-drop? | `TreeDropAllowed` | Decides whether a node may go before, after or into another one (drag and drop, keyboard, paste) |
5825
- | group? | `string` | Trees with the same group exchange nodes: drag and drop, or Ctrl+X in one tree and Ctrl+V in the other. The receiving tree reports `onTransfer`; the parent moves the node between the items. |
5826
- | name? | `string` | Identifies this tree in `onTransfer` events (sourceTree/targetTree) |
5827
- | load-children? | `(node: TreeNode, request: { signal: AbortSignal }) => Promise<TreeNode[]>` | Loads the children of a node with `hasChildren: true` (or `leaf: false`) when it opens; the signal aborts it. Without it (and without `dataSource`) the tree calls `onLoadChildren` and the parent adds the children. |
5947
+ | group? | `string` | Trees with the same group exchange nodes: drag and drop, or Ctrl+X in one tree and Ctrl+V in the other. The receiving tree reports `transfer`; the parent moves the node between the items. |
5948
+ | name? | `string` | Identifies this tree in `transfer` events (sourceTree/targetTree) |
5949
+ | load-children? | `(node: TreeNode, request: { signal: AbortSignal }) => Promise<TreeNode[]>` | Loads the children of a node with `hasChildren: true` (or `leaf: false`) when it opens; the signal aborts it. Without it (and without `dataSource`) the tree emits `loadChildren` and the parent adds the children. |
5828
5950
  | data-source? | `DataSource<TreeNode>` | Source of the children of lazy nodes (`getChildren`) |
5829
5951
  | filter? | `boolean` | Search field above the tree; hits stay with their ancestors (opened), hits are marked |
5830
- | filter-value? | `string` | Search text – controlled, or set it from a search field of your own |
5952
+ | v-model:filter-value? | `string` | Search text – use with v-model:filter-value, or set it from a search field of your own |
5831
5953
  | filter-mode? | `'filter' \| 'highlight'` | `filter`: only the hits and their ancestors stay; `highlight`: all nodes stay, Enter jumps to the next hit |
5832
5954
  | expand-controls? | `boolean` | Buttons "Expand all" and "Collapse all" above the tree |
5833
5955
  | show-lines? | `boolean` | Guide lines along the children of open branches |
5834
- | empty-text? | `string` | Shown without nodes (or without hits) |
5835
- | style? | `CSSProperties` | |
5956
+ | empty-text? | `string` | Shown without nodes (or without hits); the `empty` slot replaces it |
5836
5957
  | classes? | `RecipeClasses<typeof treeRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5837
5958
 
5838
5959
  | Event | Payload | Description |
@@ -5882,7 +6003,7 @@ Select whose options are a tree: the button opens the tree in a panel, choosing
5882
6003
  | Prop | Type | Description |
5883
6004
  | --- | --- | --- |
5884
6005
  | items | `readonly TreeNode[]` | |
5885
- | v-model? (modelValue) | `T` | Chosen node id (an array of ids with `multiple`) |
6006
+ | v-model? (modelValue) | `T` | Chosen node id (an array of ids with `multiple`) – use with v-model |
5886
6007
  | default-value? | `T` | |
5887
6008
  | placeholder? | `string` | |
5888
6009
  | leaves-only? | `boolean` | Only nodes without children can be chosen |
@@ -5899,8 +6020,6 @@ Select whose options are a tree: the button opens the tree in a panel, choosing
5899
6020
  | size? | `'sm' \| 'md' \| 'lg'` | Height of the field: 32, 40 (default) or 48 px |
5900
6021
  | load-children? | `(node: TreeNode, request: { signal: AbortSignal }) => Promise<TreeNode[]>` | Loads the children of lazy nodes (`hasChildren: true`) when they open; they are kept while the field lives |
5901
6022
  | data-source? | `DataSource<TreeNode>` | Source of the children of lazy nodes (`getChildren`) |
5902
- | aria-label? | `string` | Accessible name without a surrounding Field |
5903
- | style? | `CSSProperties` | |
5904
6023
  | classes? | `RecipeClasses<typeof treeSelectRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
5905
6024
 
5906
6025
  | Event | Payload | Description |
@@ -5924,7 +6043,7 @@ Text cut to one or more lines; the full text in a tooltip (only while cut) or be
5924
6043
  | lines? | `number` | Lines before the text is cut (default 1: one line with an ellipsis) |
5925
6044
  | tooltip? | `boolean` | The full text in a tooltip – only while it is cut; the text then becomes focusable for keyboard users |
5926
6045
  | expandable? | `boolean` | A "Show more" button below the cut text instead of the tooltip |
5927
- | expanded? | `boolean` | Expanded state with `expandable` (controlled) |
6046
+ | v-model:expanded? | `boolean` | Expanded state with `expandable` – use with v-model:expanded |
5928
6047
  | default-expanded? | `boolean` | |
5929
6048
  | as? | `'span' \| 'p' \| 'div'` | Element of the text (default span; p for paragraphs) |
5930
6049
  | more-label? | `string` | Text of the button while cut / expanded |
@@ -5952,14 +6071,13 @@ Only the visible rows are in the DOM; each row says its position (aria-posinset/
5952
6071
  | estimate-size? | `(item: T, index: number) => number` | Estimated height of one item, when the heights differ a lot (rows are measured when shown) |
5953
6072
  | height? | `string` | Height of the scroll area (CSS length) |
5954
6073
  | item-group? | `ItemAccessor<T, string \| null \| undefined>` | Group heading of an item (property name or function); the heading of the group in view sticks to the top |
5955
- | has-more? | `boolean` | More items can be loaded: scrolling near the end calls onLoadMore |
6074
+ | has-more? | `boolean` | More items can be loaded: scrolling near the end emits loadMore |
5956
6075
  | loading? | `boolean` | The next items are loading: a loading row at the end |
5957
6076
  | loading-more? | `boolean` | |
5958
- | end-threshold? | `number` | How many rows before the end onLoadMore is called (default 5) |
6077
+ | end-threshold? | `number` | How many rows before the end loadMore is emitted (default 5) |
5959
6078
  | data-source? | `DataSource<T>` | Loads the items page by page while scrolling (instead of `items`) |
5960
6079
  | query? | `Omit<DataQuery, 'page' \| 'pageSize' \| 'cursor'>` | Sorting, filters and search for the data source; a change starts over |
5961
6080
  | page-size? | `number` | Items per request of the data source (default 50) |
5962
- | style? | `CSSProperties` | |
5963
6081
 
5964
6082
  | Event | Payload | Description |
5965
6083
  | --- | --- | --- |
@@ -5982,9 +6100,10 @@ Select for any number of items – only the visible options are rendered.
5982
6100
  | Prop | Type | Description |
5983
6101
  | --- | --- | --- |
5984
6102
  | items | `readonly T[]` | Any number of items – only the visible options are rendered |
5985
- | v-model? (modelValue) | `V \| null` | Selected value; any type (string, number, boolean, object) |
6103
+ | v-model? (modelValue) | `V \| null` | Selected value – use with v-model; any type (string, number, boolean, object) |
5986
6104
  | default-value? | `V \| null` | |
5987
6105
  | placeholder? | `string` | |
6106
+ | disabled? | `boolean` | |
5988
6107
  | invalid? | `boolean` | |
5989
6108
  | required? | `boolean` | |
5990
6109
  | name? | `string` | |
@@ -5997,9 +6116,9 @@ Select for any number of items – only the visible options are rendered.
5997
6116
  | loading-text? | `string` | Text of the loading row in the list |
5998
6117
  | size? | `SelectSize` | Height of the field: 32, 40 (default) or 48 px |
5999
6118
  | filter? | `boolean` | Search field at the top of the list; filters by label, ignoring case and accents |
6000
- | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to onFilterChange |
6119
+ | manual-filter? | `boolean` | The items are filtered elsewhere (server): no local filtering, listen to filterChange |
6001
6120
  | empty-text? | `string` | Shown when no item is left (default "No results" / "No entries") |
6002
- | has-more? | `boolean` | More items can be loaded: reaching the end of the list calls onLoadMore (endless list) |
6121
+ | has-more? | `boolean` | More items can be loaded: reaching the end of the list emits loadMore (endless list) |
6003
6122
  | data-source? | `DataSource<T>` | Loads the items from a server instead of `items`: the first page when it opens, more while scrolling, the search field asks the server (after a typing pause); labels of chosen values that are not loaded come from `getItemsByKeys` |
6004
6123
  | page-size? | `number` | Items per request of the data source (default 50) |
6005
6124
  | min-search-length? | `number` | Fewest characters the search needs before the data source is asked |
@@ -6022,6 +6141,30 @@ Tree for many nodes: the open part of the tree as a flat, virtualised list of tr
6022
6141
 
6023
6142
  | Prop | Type | Description |
6024
6143
  | --- | --- | --- |
6144
+ | items | `readonly TreeNode[]` | |
6145
+ | label? | `string` | Visible label, also the tree's accessible name |
6146
+ | selection-mode? | `'single' \| 'multiple'` | |
6147
+ | v-model:selected-value? | `string[]` | Selected ids – use with v-model:selected-value |
6148
+ | default-selected-value? | `string[]` | |
6149
+ | v-model:expanded-value? | `string[]` | Expanded ids – use with v-model:expanded-value |
6150
+ | default-expanded-value? | `string[]` | |
6151
+ | checkable? | `boolean` | A checkbox per node; checking a branch checks its children (v-model:checked-value) |
6152
+ | v-model:checked-value? | `string[]` | |
6153
+ | default-checked-value? | `string[]` | |
6154
+ | check-strictly? | `boolean` | Check boxes of parents and children are independent (no cascade) |
6155
+ | checked-strategy? | `TreeCheckedStrategy` | Which checked ids are reported: `all` – every checked node, `parent` – a fully checked branch instead of its children, `child` – only nodes without children. Without it the ids are reported as Ark keeps them. |
6156
+ | reorderable? | `boolean` | Nodes can be moved: drag and drop (before, after or into a branch), Alt+arrow keys on the focused node (up/down among the siblings, right into the branch above, left out of the branch), or Ctrl+X and Ctrl+V. Reported via `move`. |
6157
+ | allow-drop? | `TreeDropAllowed` | Decides whether a node may go before, after or into another one (drag and drop, keyboard, paste) |
6158
+ | group? | `string` | Trees with the same group exchange nodes: drag and drop, or Ctrl+X in one tree and Ctrl+V in the other. The receiving tree reports `transfer`; the parent moves the node between the items. |
6159
+ | name? | `string` | Identifies this tree in `transfer` events (sourceTree/targetTree) |
6160
+ | load-children? | `(node: TreeNode, request: { signal: AbortSignal }) => Promise<TreeNode[]>` | Loads the children of a node with `hasChildren: true` (or `leaf: false`) when it opens; the signal aborts it. Without it (and without `dataSource`) the tree emits `loadChildren` and the parent adds the children. |
6161
+ | data-source? | `DataSource<TreeNode>` | Source of the children of lazy nodes (`getChildren`) |
6162
+ | filter? | `boolean` | Search field above the tree; hits stay with their ancestors (opened), hits are marked |
6163
+ | v-model:filter-value? | `string` | Search text – use with v-model:filter-value, or set it from a search field of your own |
6164
+ | filter-mode? | `'filter' \| 'highlight'` | `filter`: only the hits and their ancestors stay; `highlight`: all nodes stay, Enter jumps to the next hit |
6165
+ | expand-controls? | `boolean` | Buttons "Expand all" and "Collapse all" above the tree |
6166
+ | empty-text? | `string` | Shown without nodes (or without hits); the `empty` slot replaces it |
6167
+ | classes? | `RecipeClasses<typeof treeRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
6025
6168
  | height? | `string` | Height of the scrolling tree (CSS length) |
6026
6169
  | item-height? | `number` | Estimated row height in px (rows are measured when shown) |
6027
6170
 
@@ -6051,7 +6194,7 @@ Text only for screen readers, e.g. a label next to an icon
6051
6194
 
6052
6195
  | Prop | Type | Description |
6053
6196
  | --- | --- | --- |
6054
- | as? | `Component \| string` | Element (default span) |
6197
+ | as? | `string` | Element (default span) |
6055
6198
  | focusable? | `boolean` | Becomes visible while it (or something inside) has the focus – e.g. a skip link |
6056
6199
  | classes? | `RecipeClasses<typeof visuallyHiddenRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
6057
6200
 
@@ -6074,7 +6217,6 @@ Floating bars: each change starts where the previous one ended, totals from zero
6074
6217
  | format-value? | `(value: number) => string` | Formats values in the axis, tooltips and table |
6075
6218
  | tones? | `{ up?: ChartTone; down?: ChartTone; total?: ChartTone }` | Colours of rising, falling and total bars (default success, danger, primary) |
6076
6219
  | options? | `Record<string, unknown>` | Chart.js options – merged over the WireLayer defaults |
6077
- | style? | `CSSProperties` | |
6078
6220
  | classes? | `RecipeClasses<typeof chartRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe chart) |
6079
6221
 
6080
6222
 
@@ -6113,9 +6255,9 @@ Multi-step form on the Stepper: "Next" checks the step (async with a spinner), "
6113
6255
  | Prop | Type | Description |
6114
6256
  | --- | --- | --- |
6115
6257
  | steps | `readonly WizardStep[]` | |
6116
- | step? | `number` | Current step (0-based; steps + summary = done) – controlled with onStepChange |
6258
+ | v-model:step? | `number` | Current step (0-based; steps + summary = done) – use with v-model:step |
6117
6259
  | default-step? | `number` | |
6118
- | summary-label? | `string` | Name of the summary step (default "Summary") |
6260
+ | summary-label? | `string` | Name of the summary step – the step appears with the #summary slot (default "Summary") |
6119
6261
  | orientation? | `'horizontal' \| 'vertical'` | Steps listed top to bottom beside the content |
6120
6262
  | classes? | `RecipeClasses<typeof wizardRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
6121
6263
 
@@ -6140,7 +6282,7 @@ Year field ("2026"): type the digits, or pick from the year grid; range: start
6140
6282
 
6141
6283
  | Prop | Type | Description |
6142
6284
  | --- | --- | --- |
6143
- | v-model? (modelValue) | `T` | Year as "2026"; with range { start, end } |
6285
+ | v-model? (modelValue) | `T` | Year as "2026" – use with v-model; with range { start, end } |
6144
6286
  | default-value? | `T` | |
6145
6287
  | range? | `boolean` | Start and end year instead of one |
6146
6288
  | min? | `string` | Earliest year ("2020") |
@@ -6152,10 +6294,9 @@ Year field ("2026"): type the digits, or pick from the year grid; range: start
6152
6294
  | invalid? | `boolean` | |
6153
6295
  | required? | `boolean` | |
6154
6296
  | name? | `string` | With range sent as name[0] and name[1] |
6297
+ | placeholder? | `string` | Text of the empty field, shown until it gets the focus – no replacement for a label |
6155
6298
  | size? | `'sm' \| 'md' \| 'lg'` | |
6156
6299
  | clearable? | `boolean` | Clear button in the field while it has a value |
6157
- | aria-label? | `string` | Accessible name without a surrounding Field |
6158
- | style? | `CSSProperties` | |
6159
6300
  | classes? | `RecipeClasses<typeof datePicker>` | Extra classes per part of the date field, e.g. { control: "…" } (the calendar: RecipesProvider) |
6160
6301
 
6161
6302
  | Event | Payload | Description |