@wirecore/wirelayer-vue 0.7.0 → 0.9.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.
- package/dist/{Checkbox-D175nhKK.js → Checkbox-DS2qfQK1.js} +2 -8
- package/dist/ContextMenu-CBE9YnDW.js +2321 -0
- package/dist/{Field-B1EsNF84.js → Field-Cqe2BG_x.js} +1 -1
- package/dist/Input-C5dyvZfJ.js +183 -0
- package/dist/{InputStatus-D7kBGlew.js → InputStatus-Cgarj-yu.js} +16 -3
- package/dist/{Select-Bd2Vpr7G.js → Select-q8FUIWLi.js} +141 -124
- package/dist/Tree-B-0NXpUq.js +839 -0
- package/dist/components/Alert/Alert.vue.d.ts +5 -3
- package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.vue.d.ts +2 -0
- package/dist/components/Avatar/Avatar.vue.d.ts.map +1 -1
- package/dist/components/Card/Card.vue.d.ts +2 -0
- package/dist/components/Card/Card.vue.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.vue.d.ts +26 -23
- package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
- package/dist/components/Code/Code.vue.d.ts +21 -0
- package/dist/components/Code/Code.vue.d.ts.map +1 -0
- package/dist/components/Combobox/Combobox.vue.d.ts +9 -1
- package/dist/components/Combobox/Combobox.vue.d.ts.map +1 -1
- package/dist/components/CommandPalette/CommandPalette.vue.d.ts +1 -1
- package/dist/components/ContextMenu/ContextMenu.vue.d.ts +18 -2
- package/dist/components/ContextMenu/ContextMenu.vue.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.vue.d.ts +1 -1
- package/dist/components/Dialog/Dialog.vue.d.ts.map +1 -1
- package/dist/components/Dialog/DialogContent.vue.d.ts +12 -1
- package/dist/components/Dialog/DialogContent.vue.d.ts.map +1 -1
- package/dist/components/Dialog/context.d.ts +3 -1
- package/dist/components/Dialog/context.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.vue.d.ts +1 -1
- package/dist/components/Fieldset/Fieldset.vue.d.ts +1 -1
- package/dist/components/FilterPanel/FilterPanel.vue.d.ts +1 -1
- package/dist/components/HoverCard/HoverCard.vue.d.ts +1 -1
- package/dist/components/Input/Input.vue.d.ts +3 -1
- package/dist/components/Input/Input.vue.d.ts.map +1 -1
- package/dist/components/MaskInput/MaskInput.vue.d.ts +2 -1
- package/dist/components/MaskInput/MaskInput.vue.d.ts.map +1 -1
- package/dist/components/Menu/Menu.vue.d.ts +9 -1
- package/dist/components/Menu/Menu.vue.d.ts.map +1 -1
- package/dist/components/Menu/state.d.ts +22 -0
- package/dist/components/Menu/state.d.ts.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.vue.d.ts +31 -19
- package/dist/components/NativeSelect/NativeSelect.vue.d.ts.map +1 -1
- package/dist/components/NumberInput/NumberInput.vue.d.ts +27 -20
- package/dist/components/NumberInput/NumberInput.vue.d.ts.map +1 -1
- package/dist/components/Panel/Panel.vue.d.ts +1 -1
- package/dist/components/PasswordInput/PasswordInput.vue.d.ts +9 -3
- package/dist/components/PasswordInput/PasswordInput.vue.d.ts.map +1 -1
- package/dist/components/Popover/Popover.vue.d.ts +1 -1
- package/dist/components/Progress/Progress.vue.d.ts +14 -0
- package/dist/components/Progress/Progress.vue.d.ts.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.vue.d.ts +32 -26
- package/dist/components/RadioGroup/RadioGroup.vue.d.ts.map +1 -1
- package/dist/components/RadioGroup/RadioGroupItem.vue.d.ts +2 -1
- package/dist/components/RadioGroup/RadioGroupItem.vue.d.ts.map +1 -1
- package/dist/components/RadioGroup/context.d.ts +4 -0
- package/dist/components/RadioGroup/context.d.ts.map +1 -0
- package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts +31 -22
- package/dist/components/SegmentedControl/SegmentedControl.vue.d.ts.map +1 -1
- package/dist/components/Select/Select.vue.d.ts +21 -7
- package/dist/components/Select/Select.vue.d.ts.map +1 -1
- package/dist/components/Stepper/Stepper.vue.d.ts +2 -0
- package/dist/components/Stepper/Stepper.vue.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.vue.d.ts +6 -3
- package/dist/components/Tabs/Tabs.vue.d.ts.map +1 -1
- package/dist/components/Tabs/TabsTrigger.vue.d.ts +6 -0
- package/dist/components/Tabs/TabsTrigger.vue.d.ts.map +1 -1
- package/dist/components/Tabs/context.d.ts +4 -0
- package/dist/components/Tabs/context.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.vue.d.ts +3 -1
- package/dist/components/Textarea/Textarea.vue.d.ts.map +1 -1
- package/dist/components/Wizard/Wizard.vue.d.ts +10 -2
- package/dist/components/Wizard/Wizard.vue.d.ts.map +1 -1
- package/dist/composables/index.d.ts +1 -1
- package/dist/composables/index.d.ts.map +1 -1
- package/dist/composables/media.d.ts +8 -1
- package/dist/composables/media.d.ts.map +1 -1
- package/dist/data-table.js +4 -4
- package/dist/editor.js +1 -1
- package/dist/form.js +2 -2
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2751 -2649
- package/dist/pdf.js +3 -3
- package/dist/sources/Code.css +2 -0
- package/dist/utils/text-field.d.ts +16 -0
- package/dist/utils/text-field.d.ts.map +1 -0
- package/llms-full.txt +117 -27
- package/llms.txt +6 -4
- package/package.json +3 -3
- package/dist/ContextMenu-BEOEyUa6.js +0 -2235
- package/dist/Input-Cn5q0yVE.js +0 -181
- package/dist/Tree-fd9LXqgZ.js +0 -792
package/dist/pdf.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as e, i as t, n } from "./recipes-BlM9aKyt.js";
|
|
2
2
|
import { t as r } from "./Button-BpMOPs8b.js";
|
|
3
|
-
import { t as i } from "./Field-
|
|
4
|
-
import { i as a, t as o } from "./Select-
|
|
5
|
-
import { c as s, i as c, l, n as u, o as d, r as ee, s as te, t as ne } from "./Tree-
|
|
3
|
+
import { t as i } from "./Field-Cqe2BG_x.js";
|
|
4
|
+
import { i as a, t as o } from "./Select-q8FUIWLi.js";
|
|
5
|
+
import { c as s, i as c, l, n as u, o as d, r as ee, s as te, t as ne } from "./Tree-B-0NXpUq.js";
|
|
6
6
|
import { Fragment as f, computed as p, createBlock as re, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createTextVNode as _, createVNode as v, defineComponent as y, mergeProps as ie, nextTick as ae, normalizeClass as b, normalizeStyle as oe, onBeforeUnmount as se, onMounted as ce, openBlock as x, reactive as le, ref as S, renderList as ue, resolveDynamicComponent as de, toDisplayString as C, unref as w, useAttrs as fe, useId as pe, useTemplateRef as T, vModelText as me, watch as E, withCtx as D, withDirectives as he, withModifiers as ge } from "vue";
|
|
7
7
|
import { CaseSensitive as _e, ChevronDown as ve, ChevronUp as ye, Download as be, FileWarning as xe, Maximize as Se, Minimize as Ce, PanelLeft as we, Printer as Te, RotateCw as Ee, Search as De, X as Oe, ZoomIn as ke, ZoomOut as Ae } from "@lucide/vue";
|
|
8
8
|
import { PDF_ZOOM_MAX as je, PDF_ZOOM_MIN as Me, clampPdfPage as Ne, clampPdfZoom as Pe, downloadBytes as Fe, input as Ie, normalizePdfRotation as O, parsePdfPage as Le, pdfFileName as Re, pdfKeyAction as ze, pdfPrintDocument as k, pdfSearchText as Be, pdfThumbnailSize as Ve, pdfTools as A, pdfViewer as He, pdfZoomFromKey as Ue, pdfZoomKey as We, pdfZoomStep as Ge, pdfZoomSteps as j, pdfZoomSteps as Ke, resolvePdfTools as qe, setupToolbar as Je } from "@wirecore/wirelayer-recipes";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the text fields expose (Input, PasswordInput, NumberInput, Textarea, MaskInput): the native element and its
|
|
3
|
+
* focus and selection methods – the root of these components is a wrapper, not the input
|
|
4
|
+
*/
|
|
5
|
+
export interface TextFieldHandle<E extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement> {
|
|
6
|
+
/** The native input (or textarea); null before mounting */
|
|
7
|
+
readonly element: E | null;
|
|
8
|
+
focus(options?: FocusOptions): void;
|
|
9
|
+
blur(): void;
|
|
10
|
+
/** Selects the whole text */
|
|
11
|
+
select(): void;
|
|
12
|
+
setSelectionRange(start: number | null, end: number | null, direction?: 'forward' | 'backward' | 'none'): void;
|
|
13
|
+
}
|
|
14
|
+
/** The handle for a component's defineExpose, reading the element when called */
|
|
15
|
+
export declare function textFieldHandle<E extends HTMLInputElement | HTMLTextAreaElement>(element: () => E | null | undefined): TextFieldHandle<E>;
|
|
16
|
+
//# sourceMappingURL=text-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-field.d.ts","sourceRoot":"","sources":["../../src/utils/text-field.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,gBAAgB,GAAG,mBAAmB,GAAG,gBAAgB;IAChG,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,IAAI,IAAI,IAAI,CAAC;IACb,6BAA6B;IAC7B,MAAM,IAAI,IAAI,CAAC;IACf,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;CAClH;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,SAAS,gBAAgB,GAAG,mBAAmB,EAC5E,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GACpC,eAAe,CAAC,CAAC,CAAC,CAUpB"}
|
package/llms-full.txt
CHANGED
|
@@ -139,6 +139,10 @@ Message box with status colour, icon, title and text; role="alert" for errors an
|
|
|
139
139
|
| --- | --- | --- |
|
|
140
140
|
| @dismiss | – | |
|
|
141
141
|
|
|
142
|
+
| Slot | Slot props | Description |
|
|
143
|
+
| --- | --- | --- |
|
|
144
|
+
| #default | – | The message text |
|
|
145
|
+
| #actions | – | Buttons in the message, e.g. "Unlock" or "Reconnect" – beside the text, below it when there is little room |
|
|
142
146
|
|
|
143
147
|
### AngleSlider
|
|
144
148
|
|
|
@@ -352,6 +356,7 @@ Image, initials or icon of a person or organisation; `as="button"` makes it a tr
|
|
|
352
356
|
| Prop | Type | Description |
|
|
353
357
|
| --- | --- | --- |
|
|
354
358
|
| name? | `string` | Person or organisation – accessible name of the avatar and source of the initials |
|
|
359
|
+
| initials? | `string` | Own initials instead of the ones taken from `name`, e.g. "MS" for "my-server" |
|
|
355
360
|
| src? | `string` | Image URL; initials (or the icon) are shown while it loads or if it fails |
|
|
356
361
|
| icon? | `Component` | Icon shown when there is neither an image nor a name (default: user icon) |
|
|
357
362
|
| variant? | `AvatarVariant` | |
|
|
@@ -694,6 +699,7 @@ Surface for grouped content, optionally with title, media and footer; interactiv
|
|
|
694
699
|
| subtitle? | `string` | Line below the title (also via #subtitle) |
|
|
695
700
|
| title-tag? | `'h2' \| 'h3' \| 'h4' \| 'h5' \| 'h6' \| 'p'` | Element of the title – pick the level that fits the page outline |
|
|
696
701
|
| orientation? | `'vertical' \| 'horizontal'` | `horizontal`: media at the start, the content beside it |
|
|
702
|
+
| size? | `'sm' \| 'md'` | `sm`: smaller radius, padding and title, e.g. for cards in a list inside a dialog |
|
|
697
703
|
| classes? | `RecipeClasses<typeof cardRecipe> & RecipeClasses<typeof cardPartsRecipe>` | Extra classes per part of the component, e.g. { base: "…", title: "…" } (see the recipes card and cardParts) |
|
|
698
704
|
|
|
699
705
|
| Slot | Slot props | Description |
|
|
@@ -973,8 +979,8 @@ Checkbox with label (also indeterminate), works inside Field
|
|
|
973
979
|
|
|
974
980
|
| Prop | Type | Description |
|
|
975
981
|
| --- | --- | --- |
|
|
976
|
-
| v-model:checked? | `
|
|
977
|
-
| default-checked? | `
|
|
982
|
+
| v-model:checked? | `C` | Controlled state – use with v-model:checked |
|
|
983
|
+
| default-checked? | `C` | |
|
|
978
984
|
| disabled? | `boolean` | |
|
|
979
985
|
| invalid? | `boolean` | |
|
|
980
986
|
| required? | `boolean` | |
|
|
@@ -985,7 +991,7 @@ Checkbox with label (also indeterminate), works inside Field
|
|
|
985
991
|
|
|
986
992
|
| Event | Payload | Description |
|
|
987
993
|
| --- | --- | --- |
|
|
988
|
-
| v-model:checked | `checked:
|
|
994
|
+
| v-model:checked | `checked: C` | |
|
|
989
995
|
|
|
990
996
|
|
|
991
997
|
### CheckboxCard
|
|
@@ -1100,6 +1106,21 @@ Filter chips: one or several options as toggle buttons
|
|
|
1100
1106
|
| v-model | `value: string[]` | |
|
|
1101
1107
|
|
|
1102
1108
|
|
|
1109
|
+
### Code
|
|
1110
|
+
|
|
1111
|
+
Code inside a sentence, without syntax colours: the look of InlineCode (/code) without shiki
|
|
1112
|
+
|
|
1113
|
+
- Import: `import { Code } from '@wirecore/wirelayer-vue'`
|
|
1114
|
+
- Category: Data
|
|
1115
|
+
- Example: https://wirecore.github.io/WireLayer/?path=/story/vue_data-code--playground
|
|
1116
|
+
- Other attributes go to the root element (<code>)
|
|
1117
|
+
|
|
1118
|
+
| Prop | Type | Description |
|
|
1119
|
+
| --- | --- | --- |
|
|
1120
|
+
| code? | `string` | The code (one line) – or pass it as the content |
|
|
1121
|
+
| classes? | `RecipeClasses<typeof inlineCodeRecipe>` | Extra classes of the recipe (see the recipe inlineCode) |
|
|
1122
|
+
|
|
1123
|
+
|
|
1103
1124
|
### CodeHighlight
|
|
1104
1125
|
|
|
1105
1126
|
Code block with syntax colours; the scroll area is focusable, the copy button copies the plain code
|
|
@@ -1307,6 +1328,8 @@ Text field with suggestions (autocomplete): type to filter, arrow keys to choose
|
|
|
1307
1328
|
| min-search-length? | `number` | Fewest characters typed before the data source is asked |
|
|
1308
1329
|
| page-size? | `number` | Options per request of the data source (default 50) |
|
|
1309
1330
|
| id? | `string` | Id of the input, e.g. for a `<label for>` |
|
|
1331
|
+
| v-model:open? | `boolean` | Whether the list is open – use with v-model:open, or listen to update:open |
|
|
1332
|
+
| stop-key-propagation? | `boolean` | Keeps the keys the open list handles itself (Enter choosing, Escape closing, Tab leaving) from bubbling up – e.g. in a dialog with window shortcuts for Enter (save) and Escape (cancel) |
|
|
1310
1333
|
| classes? | `RecipeClasses<typeof comboboxRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
1311
1334
|
|
|
1312
1335
|
| Event | Payload | Description |
|
|
@@ -1315,6 +1338,7 @@ Text field with suggestions (autocomplete): type to filter, arrow keys to choose
|
|
|
1315
1338
|
| @input-value-change | `inputValue: string` | Every change of the text (typing, choosing, clearing) |
|
|
1316
1339
|
| @filter-change | `text: string` | Typed text – e.g. to load matching items from a server (manualFilter) |
|
|
1317
1340
|
| @load-more | – | The end of the list was scrolled into view (hasMore) |
|
|
1341
|
+
| v-model:open | `open: boolean` | The list opened or closed |
|
|
1318
1342
|
|
|
1319
1343
|
| Slot | Slot props | Description |
|
|
1320
1344
|
| --- | --- | --- |
|
|
@@ -1522,13 +1546,18 @@ Opens at the pointer on right click, on touch screens with a long press (and wit
|
|
|
1522
1546
|
- Import: `import { ContextMenu } from '@wirecore/wirelayer-vue'`
|
|
1523
1547
|
- Category: Overlays
|
|
1524
1548
|
- Example: https://wirecore.github.io/WireLayer/?path=/story/vue_overlays-contextmenu--playground
|
|
1525
|
-
- Also takes the props of: MenuItemOptions
|
|
1549
|
+
- Also takes the props of: MenuItemOptions, MenuBehaviorOptions
|
|
1526
1550
|
|
|
1527
1551
|
| Prop | Type | Description |
|
|
1528
1552
|
| --- | --- | --- |
|
|
1529
1553
|
| items | `readonly MenuEntry[]` | Items, groups, separators, checkbox items, radio groups and submenus – as in Menu |
|
|
1530
1554
|
| label? | `string` | Accessible name of the menu – without it the menu is named by the area's content |
|
|
1531
1555
|
| link-as? | `Component \| string` | Component for link items, e.g. RouterLink or NuxtLink (gets `to` for items with `to`, else `href`); default <a> |
|
|
1556
|
+
| v-model:open? | `boolean` | Whether the menu is open – use with v-model:open, or listen to update:open (e.g. to pause list shortcuts) |
|
|
1557
|
+
| close-on-scroll? | `boolean` | Closes when the page (or a container) scrolls |
|
|
1558
|
+
| close-on-resize? | `boolean` | Closes when the window is resized |
|
|
1559
|
+
| close-on-blur? | `boolean` | Closes when the window loses the focus (switching to another window) |
|
|
1560
|
+
| highlight-first? | `boolean` | Highlights the first item when the menu opens, so Enter takes it (as in desktop context menus) |
|
|
1532
1561
|
| classes? | `RecipeClasses<typeof menuRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
1533
1562
|
|
|
1534
1563
|
| Event | Payload | Description |
|
|
@@ -1536,6 +1565,8 @@ Opens at the pointer on right click, on touch screens with a long press (and wit
|
|
|
1536
1565
|
| @select | `value: string` | |
|
|
1537
1566
|
| @checked-change | `value: string, checked: boolean` | A checkbox item was switched |
|
|
1538
1567
|
| @value-change | `name: string, value: string` | A radio group got a new value |
|
|
1568
|
+
| v-model:open | `open: boolean` | |
|
|
1569
|
+
| @before-open | `target: Element, details: ContextMenuOpenDetails` | A right click, long press or the menu key is opening the menu, on this element (e.g. the row under the pointer – select it before the menu shows); `details.source` tells pointer from keyboard, with the keyboard `details.focused` is the focused element (e.g. the row with the focus) |
|
|
1539
1570
|
|
|
1540
1571
|
| Slot | Slot props | Description |
|
|
1541
1572
|
| --- | --- | --- |
|
|
@@ -1997,6 +2028,7 @@ The modal window of a Dialog: title, description, focus trap, Escape closes
|
|
|
1997
2028
|
| --- | --- | --- |
|
|
1998
2029
|
| title | `string` | |
|
|
1999
2030
|
| hide-title? | `boolean` | The title only for screen readers – it still names the dialog (e.g. a video in a dialog) |
|
|
2031
|
+
| title-position? | `'body' \| 'header'` | `body` (default): the title below the header row; `header`: in the row of the close button, after a smaller icon, the header separated by a line (as on the Drawer) |
|
|
2000
2032
|
| description? | `string` | |
|
|
2001
2033
|
| icon? | `Component` | Icon component in the coloured box at the top |
|
|
2002
2034
|
| status? | `DialogStatus` | |
|
|
@@ -3019,7 +3051,7 @@ Shows a value as a button; activating it swaps in the editor (Escape closes it)
|
|
|
3019
3051
|
|
|
3020
3052
|
### Input
|
|
3021
3053
|
|
|
3022
|
-
Text field with sizes, leading icon, prefix and suffix; works inside Field
|
|
3054
|
+
Text field with sizes, leading icon, prefix and suffix; works inside Field. `ref` reaches the native input (focus, select, setSelectionRange)
|
|
3023
3055
|
|
|
3024
3056
|
- Import: `import { Input } from '@wirecore/wirelayer-vue'`
|
|
3025
3057
|
|
|
@@ -3038,6 +3070,7 @@ Text field with sizes, leading icon, prefix and suffix; works inside Field
|
|
|
3038
3070
|
| leading-icon? | `Component` | Icon component rendered inside the field, before the text |
|
|
3039
3071
|
| prefix? | `string` | Static text segment before the input, e.g. `https://` |
|
|
3040
3072
|
| suffix? | `string` | Static text segment after the input, e.g. `.de` |
|
|
3073
|
+
| mono? | `boolean` | Monospace font of the theme (JetBrains Mono) – for paths, tokens, codes, URLs and keys |
|
|
3041
3074
|
| classes? | `RecipeClasses<typeof inputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
3042
3075
|
|
|
3043
3076
|
| Event | Payload | Description |
|
|
@@ -3553,7 +3586,7 @@ The trigger is the slotted element (e.g. a Button or IconButton)
|
|
|
3553
3586
|
- Import: `import { Menu } from '@wirecore/wirelayer-vue'`
|
|
3554
3587
|
- Category: Overlays
|
|
3555
3588
|
- Example: https://wirecore.github.io/WireLayer/?path=/story/vue_overlays-menu--playground
|
|
3556
|
-
- Also takes the props of: MenuItemOptions
|
|
3589
|
+
- Also takes the props of: MenuItemOptions, MenuBehaviorOptions
|
|
3557
3590
|
|
|
3558
3591
|
| Prop | Type | Description |
|
|
3559
3592
|
| --- | --- | --- |
|
|
@@ -3566,6 +3599,10 @@ The trigger is the slotted element (e.g. a Button or IconButton)
|
|
|
3566
3599
|
| placement? | `PopoverPlacement` | Side of the trigger the menu opens on, e.g. `bottom-end` for a menu at the right edge (default bottom-start) |
|
|
3567
3600
|
| arrow? | `boolean` | Arrow pointing at the trigger, as on the Popover |
|
|
3568
3601
|
| link-as? | `Component \| string` | Component for link items, e.g. RouterLink or NuxtLink (gets `to` for items with `to`, else `href`); default <a> |
|
|
3602
|
+
| close-on-scroll? | `boolean` | Closes when the page (or a container) scrolls – e.g. for a menu opened at a point |
|
|
3603
|
+
| close-on-resize? | `boolean` | Closes when the window is resized |
|
|
3604
|
+
| close-on-blur? | `boolean` | Closes when the window loses the focus (switching to another window) |
|
|
3605
|
+
| highlight-first? | `boolean` | Highlights the first item also when the menu opens by pointer, so Enter takes it (as in desktop menus) |
|
|
3569
3606
|
| classes? | `RecipeClasses<typeof menuRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
3570
3607
|
|
|
3571
3608
|
| Event | Payload | Description |
|
|
@@ -3775,9 +3812,9 @@ The browser's select: its own keyboard and mobile pickers; inside a Field it is
|
|
|
3775
3812
|
|
|
3776
3813
|
| Prop | Type | Description |
|
|
3777
3814
|
| --- | --- | --- |
|
|
3778
|
-
| items | `readonly NativeSelectOption[]` | |
|
|
3779
|
-
| v-model? (modelValue) | `
|
|
3780
|
-
| placeholder? | `
|
|
3815
|
+
| items | `readonly NativeSelectOption<V>[]` | |
|
|
3816
|
+
| v-model? (modelValue) | `V \| ''` | Chosen value – use with v-model; the placeholder option gives an empty string |
|
|
3817
|
+
| placeholder? | `P` | First, empty option, e.g. "Please choose" – without it v-model only gets values (typed `V`, not `V \| ''`) |
|
|
3781
3818
|
| size? | `Size` | |
|
|
3782
3819
|
| invalid? | `boolean` | |
|
|
3783
3820
|
| disabled? | `boolean` | |
|
|
@@ -3785,7 +3822,7 @@ The browser's select: its own keyboard and mobile pickers; inside a Field it is
|
|
|
3785
3822
|
|
|
3786
3823
|
| Event | Payload | Description |
|
|
3787
3824
|
| --- | --- | --- |
|
|
3788
|
-
| v-model | `value: string` | |
|
|
3825
|
+
| v-model | `value: P extends string ? V \| '' : V` | |
|
|
3789
3826
|
|
|
3790
3827
|
|
|
3791
3828
|
### NavigationMenu
|
|
@@ -3872,7 +3909,7 @@ A number in the format of the locale ("€1,234.50")
|
|
|
3872
3909
|
|
|
3873
3910
|
### NumberInput
|
|
3874
3911
|
|
|
3875
|
-
Number field with − / + buttons, arrow keys and locale formatting ("1,234.5")
|
|
3912
|
+
Number field with − / + buttons, arrow keys and locale formatting ("1,234.5"); `ref` reaches the native input
|
|
3876
3913
|
|
|
3877
3914
|
- Import: `import { NumberInput } from '@wirecore/wirelayer-vue'`
|
|
3878
3915
|
- Category: Forms
|
|
@@ -3903,6 +3940,7 @@ Number field with − / + buttons, arrow keys and locale formatting ("1,234.5")
|
|
|
3903
3940
|
| allow-decimal? | `boolean` | Allows decimals (default); false blocks the decimal separator and rounds to whole numbers |
|
|
3904
3941
|
| decimals? | `number` | Exactly this many decimals, e.g. 2 → "12.50" |
|
|
3905
3942
|
| clamp-behavior? | `'blur' \| 'strict' \| 'none'` | Out of min/max: `blur` corrects the value when the field is left (default), `strict` does not let it leave the range, `none` keeps it (mark it invalid yourself) |
|
|
3943
|
+
| empty-fallback? | `F` | A number is always set: an emptied field falls back to `min` (or 0) or to the last valid number (`previous`) when it is left or Enter is pressed – v-model then only gets numbers (typed `number`, not `number \| null`) |
|
|
3906
3944
|
| select-on-focus? | `boolean` | Selects the whole number when the field gets the focus |
|
|
3907
3945
|
| loading? | `boolean` | Shows a spinner in the field and marks it busy (aria-busy) |
|
|
3908
3946
|
| clearable? | `boolean` | Shows a button that empties the field while it has a value |
|
|
@@ -3912,7 +3950,7 @@ Number field with − / + buttons, arrow keys and locale formatting ("1,234.5")
|
|
|
3912
3950
|
|
|
3913
3951
|
| Event | Payload | Description |
|
|
3914
3952
|
| --- | --- | --- |
|
|
3915
|
-
| v-model | `value: number \| null` | |
|
|
3953
|
+
| v-model | `value: F extends string ? number : number \| null` | |
|
|
3916
3954
|
|
|
3917
3955
|
|
|
3918
3956
|
### OrderList
|
|
@@ -4112,7 +4150,7 @@ Card with a heading (and actions); toggleable: the heading holds a button with a
|
|
|
4112
4150
|
|
|
4113
4151
|
### PasswordInput
|
|
4114
4152
|
|
|
4115
|
-
Password field with a button that shows/hides the password (named "Show/Hide password")
|
|
4153
|
+
Password field with a button that shows/hides the password (named "Show/Hide password"); `ref` reaches the native input
|
|
4116
4154
|
|
|
4117
4155
|
- Import: `import { PasswordInput } from '@wirecore/wirelayer-vue'`
|
|
4118
4156
|
- Category: Forms
|
|
@@ -4131,7 +4169,7 @@ Password field with a button that shows/hides the password (named "Show/Hide pas
|
|
|
4131
4169
|
| name? | `string` | |
|
|
4132
4170
|
| default-visible? | `boolean` | Initially show the password in plain text |
|
|
4133
4171
|
| v-model:visible? | `boolean` | Whether the password is shown in plain text – use with v-model:visible |
|
|
4134
|
-
| autocomplete? | `'current-password' \| 'new-password'` |
|
|
4172
|
+
| autocomplete? | `'current-password' \| 'new-password' \| 'off' \| 'one-time-code'` | `current-password` (default) or `new-password` for the browser's password manager; `off` or `one-time-code` for secrets it should not offer to save (tokens, passphrases, master passwords, one-time codes) |
|
|
4135
4173
|
| strength? | `boolean` | Strength meter below the field – for choosing a new password |
|
|
4136
4174
|
| 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 |
|
|
4137
4175
|
| loading? | `boolean` | Shows a spinner in the field and marks it busy (aria-busy) |
|
|
@@ -4139,6 +4177,7 @@ Password field with a button that shows/hides the password (named "Show/Hide pas
|
|
|
4139
4177
|
| clear-label? | `string` | Accessible name of the clear button (default "Clear input") |
|
|
4140
4178
|
| default-value? | `string` | Initial value without v-model |
|
|
4141
4179
|
| id? | `string` | Id of the input, e.g. for a `<label for>` |
|
|
4180
|
+
| mono? | `boolean` | Monospace font of the theme (JetBrains Mono) – for tokens, passphrases and keys |
|
|
4142
4181
|
| classes? | `RecipeClasses<typeof passwordInputRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
4143
4182
|
|
|
4144
4183
|
| Event | Payload | Description |
|
|
@@ -4408,6 +4447,10 @@ Ark names the progressbar after its value; the label is the name, the value its
|
|
|
4408
4447
|
| striped? | `boolean` | Diagonal stripes on the filled part |
|
|
4409
4448
|
| animated? | `boolean` | Moving stripes (only without reduced motion) |
|
|
4410
4449
|
| orientation? | `'horizontal' \| 'vertical'` | Vertical bar (fills the height of its parent) |
|
|
4450
|
+
| size? | `'xs' \| 'md'` | `xs`: a thin bar with small text, e.g. in a list or a status bar |
|
|
4451
|
+
| status? | `'info' \| 'success' \| 'warn' \| 'danger' \| 'neutral'` | Colour of the filled part by its state, e.g. `danger` for a failed transfer, `neutral` (grey) for a cancelled one |
|
|
4452
|
+
| hide-label? | `boolean` | The label only for screen readers – it still names the progress bar |
|
|
4453
|
+
| bar-text? | `string` | Short text in the bar, e.g. "42 %", "waiting" or "failed" (a taller bar; horizontal, without segments or steps) – screen readers get it after the value |
|
|
4411
4454
|
| classes? | `RecipeClasses<typeof progressRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
4412
4455
|
|
|
4413
4456
|
|
|
@@ -4535,20 +4578,20 @@ One choice out of several (role="radiogroup", arrow keys), horizontal or vertica
|
|
|
4535
4578
|
|
|
4536
4579
|
| Prop | Type | Description |
|
|
4537
4580
|
| --- | --- | --- |
|
|
4538
|
-
| v-model? (modelValue) | `
|
|
4539
|
-
| default-value? | `
|
|
4581
|
+
| v-model? (modelValue) | `V \| null` | Selected value – use with v-model; numbers when the items have number values |
|
|
4582
|
+
| default-value? | `V \| null` | |
|
|
4540
4583
|
| label? | `string` | Visible group label (otherwise pass aria-label – or place the group in a Field with a label) |
|
|
4541
4584
|
| orientation? | `RadioGroupOrientation` | |
|
|
4542
4585
|
| columns? | `number` | Cards in a grid with this many columns (one column on small screens) – for RadioCard |
|
|
4543
4586
|
| disabled? | `boolean` | |
|
|
4544
4587
|
| invalid? | `boolean` | |
|
|
4545
|
-
| required? | `boolean` |
|
|
4588
|
+
| required? | `R & boolean` | A choice is required (aria-required). v-model then only gets values (typed `V`, not `V \| null`): a form reset back to an empty start is not passed on |
|
|
4546
4589
|
| name? | `string` | |
|
|
4547
4590
|
| classes? | `RecipeClasses<typeof radioGroupRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
4548
4591
|
|
|
4549
4592
|
| Event | Payload | Description |
|
|
4550
4593
|
| --- | --- | --- |
|
|
4551
|
-
| v-model | `value:
|
|
4594
|
+
| v-model | `value: R extends true ? V : V \| null` | |
|
|
4552
4595
|
|
|
4553
4596
|
|
|
4554
4597
|
### RadioGroupItem
|
|
@@ -4562,7 +4605,7 @@ One option of a RadioGroup
|
|
|
4562
4605
|
|
|
4563
4606
|
| Prop | Type | Description |
|
|
4564
4607
|
| --- | --- | --- |
|
|
4565
|
-
| value | `string` |
|
|
4608
|
+
| value | `string \| number` | Value of the option – a number makes the group's v-model a number |
|
|
4566
4609
|
| disabled? | `boolean` | |
|
|
4567
4610
|
| classes? | `RecipeClasses<typeof radioGroupRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
4568
4611
|
|
|
@@ -4864,17 +4907,18 @@ Few exclusive options as a segmented switch (radio group)
|
|
|
4864
4907
|
|
|
4865
4908
|
| Prop | Type | Description |
|
|
4866
4909
|
| --- | --- | --- |
|
|
4867
|
-
| v-model? (modelValue) | `
|
|
4868
|
-
| default-value? | `
|
|
4910
|
+
| v-model? (modelValue) | `V \| null` | Selected value – use with v-model |
|
|
4911
|
+
| default-value? | `V` | |
|
|
4869
4912
|
| label? | `string` | Accessible name of the group (visually hidden) – inside a Field with a label, the Field's label names it |
|
|
4870
4913
|
| size? | `SegmentedControlSize` | |
|
|
4871
4914
|
| disabled? | `boolean` | |
|
|
4915
|
+
| required? | `R & boolean` | A value is required (aria-required). v-model then only gets values (typed `V`, not `V \| null`): a form reset back to an empty start is not passed on |
|
|
4872
4916
|
| name? | `string` | |
|
|
4873
4917
|
| classes? | `RecipeClasses<typeof segmentedControlRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
4874
4918
|
|
|
4875
4919
|
| Event | Payload | Description |
|
|
4876
4920
|
| --- | --- | --- |
|
|
4877
|
-
| v-model | `value:
|
|
4921
|
+
| v-model | `value: R extends true ? V : V \| null` | |
|
|
4878
4922
|
|
|
4879
4923
|
|
|
4880
4924
|
### SegmentedControlItem
|
|
@@ -4906,8 +4950,9 @@ Dropdown list for one option: arrow keys, typeahead, Escape; native select hidde
|
|
|
4906
4950
|
| Prop | Type | Description |
|
|
4907
4951
|
| --- | --- | --- |
|
|
4908
4952
|
| items | `readonly T[]` | Options: SelectItem objects – or any objects or values, read with itemValue/itemLabel/itemDisabled/itemGroup |
|
|
4909
|
-
| v-model? (modelValue) | `V \| null` | Selected value – use with v-model; any type (string, number, boolean, object) |
|
|
4910
|
-
| default-value? | `V \| null` | |
|
|
4953
|
+
| v-model? (modelValue) | `V \| NoInfer<E> \| null` | Selected value – use with v-model; any type (string, number, boolean, object) |
|
|
4954
|
+
| default-value? | `V \| NoInfer<E> \| null` | |
|
|
4955
|
+
| empty-value? | `E` | The value that means "nothing chosen" instead of null, e.g. `""`: it shows the placeholder, and clearing gives it back (v-model is then typed `V \| E`, without null) |
|
|
4911
4956
|
| placeholder? | `string` | |
|
|
4912
4957
|
| disabled? | `boolean` | |
|
|
4913
4958
|
| invalid? | `boolean` | |
|
|
@@ -4931,14 +4976,17 @@ Dropdown list for one option: arrow keys, typeahead, Escape; native select hidde
|
|
|
4931
4976
|
| min-search-length? | `number` | Fewest characters the search needs before the data source is asked |
|
|
4932
4977
|
| page-size? | `number` | Options per request of the data source (default 50) |
|
|
4933
4978
|
| standalone? | `boolean` | Not labelled by a surrounding Field – for a second control inside it (e.g. PhoneInput's country) |
|
|
4979
|
+
| v-model:open? | `boolean` | Whether the list is open – use with v-model:open, or listen to update:open |
|
|
4980
|
+
| stop-key-propagation? | `boolean` | Keeps the keys the list handles itself (Enter choosing or opening, Escape closing, Tab leaving) from bubbling up – e.g. in a dialog with window shortcuts for Enter (save) and Escape (cancel) |
|
|
4934
4981
|
| id? | `string` | Id of the field (the trigger), e.g. for a `<label for>` |
|
|
4935
4982
|
| classes? | `RecipeClasses<typeof selectRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
4936
4983
|
|
|
4937
4984
|
| Event | Payload | Description |
|
|
4938
4985
|
| --- | --- | --- |
|
|
4939
|
-
| v-model | `value: V \|
|
|
4986
|
+
| v-model | `value: V \| NoInfer<E>` | |
|
|
4940
4987
|
| @filter-change | `text: string` | Text of the search field (filter) – e.g. to load matching items from a server (manualFilter) |
|
|
4941
4988
|
| @load-more | – | The end of the list was scrolled into view (hasMore) |
|
|
4989
|
+
| v-model:open | `open: boolean` | The list opened or closed |
|
|
4942
4990
|
|
|
4943
4991
|
| Slot | Slot props | Description |
|
|
4944
4992
|
| --- | --- | --- |
|
|
@@ -5389,6 +5437,7 @@ Steps list (tabs) with one panel per step and back/next buttons; the last "Next"
|
|
|
5389
5437
|
| is-step-valid? | `(index: number) => boolean` | Blocks "Next" while a step is not valid (with linear) |
|
|
5390
5438
|
| orientation? | `'horizontal' \| 'vertical'` | Steps listed top to bottom beside the content |
|
|
5391
5439
|
| label-placement? | `'end' \| 'bottom'` | Label beside the number (default) or below it |
|
|
5440
|
+
| finish-label? | `string` | Text of the last "Next" button, e.g. "Create" (default "Finish") |
|
|
5392
5441
|
| classes? | `RecipeClasses<typeof stepperRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
5393
5442
|
|
|
5394
5443
|
| Event | Payload | Description |
|
|
@@ -5523,7 +5572,7 @@ Tab panels: tab list with arrow keys, one panel visible
|
|
|
5523
5572
|
|
|
5524
5573
|
| Prop | Type | Description |
|
|
5525
5574
|
| --- | --- | --- |
|
|
5526
|
-
| v-model? (modelValue) | `string` | Selected tab – use with v-model |
|
|
5575
|
+
| v-model? (modelValue) | `string \| null` | Selected tab – use with v-model; `null`: no tab selected (e.g. tabs of panels that live elsewhere – the first tab stays reachable with Tab) |
|
|
5527
5576
|
| default-value? | `string` | |
|
|
5528
5577
|
| label? | `string` | Accessible name of the tab list |
|
|
5529
5578
|
| orientation? | `'horizontal' \| 'vertical'` | Tab list above (default) or beside the panels |
|
|
@@ -5581,6 +5630,7 @@ One tab button
|
|
|
5581
5630
|
| icon? | `Component` | Icon component before the label |
|
|
5582
5631
|
| disabled? | `boolean` | |
|
|
5583
5632
|
| 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 |
|
|
5633
|
+
| controls? | `string \| null` | Id of the element the tab shows, when it is not a TabsContent of these Tabs (e.g. a pane elsewhere shown with v-show) – `null`: none (tabs without panels) |
|
|
5584
5634
|
| classes? | `RecipeClasses<typeof tabsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
5585
5635
|
|
|
5586
5636
|
| Event | Payload | Description |
|
|
@@ -5627,7 +5677,7 @@ Free entries: Enter or "," adds, Backspace on the empty field selects the last e
|
|
|
5627
5677
|
|
|
5628
5678
|
### Textarea
|
|
5629
5679
|
|
|
5630
|
-
Multi-line text field, optionally growing with the text (autoResize) and with a counter; works inside Field
|
|
5680
|
+
Multi-line text field, optionally growing with the text (autoResize) and with a counter; works inside Field. `ref` reaches the native textarea
|
|
5631
5681
|
|
|
5632
5682
|
- Import: `import { Textarea } from '@wirecore/wirelayer-vue'`
|
|
5633
5683
|
- Category: Forms
|
|
@@ -5649,6 +5699,7 @@ Multi-line text field, optionally growing with the text (autoResize) and with a
|
|
|
5649
5699
|
| loading? | `boolean` | Shows a spinner in the corner and marks the field busy (aria-busy) |
|
|
5650
5700
|
| clearable? | `boolean` | Shows a button that empties the field while it has text |
|
|
5651
5701
|
| clear-label? | `string` | Accessible name of the clear button (default "Clear input") |
|
|
5702
|
+
| mono? | `boolean` | Monospace font of the theme (JetBrains Mono) – for keys, codes and logs |
|
|
5652
5703
|
| classes? | `RecipeClasses<typeof textareaRecipe> & RecipeClasses<typeof textareaPartsRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipes textarea and textareaParts) |
|
|
5653
5704
|
|
|
5654
5705
|
| Event | Payload | Description |
|
|
@@ -6297,6 +6348,8 @@ Multi-step form on the Stepper: "Next" checks the step (async with a spinner), "
|
|
|
6297
6348
|
| default-step? | `number` | |
|
|
6298
6349
|
| summary-label? | `string` | Name of the summary step – the step appears with the #summary slot (default "Summary") |
|
|
6299
6350
|
| orientation? | `'horizontal' \| 'vertical'` | Steps listed top to bottom beside the content |
|
|
6351
|
+
| finish-label? | `string` | Text of the last button, e.g. "Create" (default "Finish") |
|
|
6352
|
+
| focus-on-step-change? | `boolean` | Moves the focus into a new step when the step changes: to the element marked data-autoselect (text selected), data-autofocus or autofocus, otherwise to the step's first field |
|
|
6300
6353
|
| classes? | `RecipeClasses<typeof wizardRecipe>` | Extra classes per part of the component, e.g. { base: "…" } (see the recipe) |
|
|
6301
6354
|
|
|
6302
6355
|
| Event | Payload | Description |
|
|
@@ -6368,6 +6421,7 @@ Year field ("2026"): type the digits, or pick from the year grid; range: start
|
|
|
6368
6421
|
- `emptyConditionGroup` (`@wirecore/wirelayer-vue`): –
|
|
6369
6422
|
- `expandRecurrence` (`@wirecore/wirelayer-vue`): –
|
|
6370
6423
|
- `firstError` (`@wirecore/wirelayer-vue/form`): First readable message of TanStack Form errors (strings or Standard Schema issues).
|
|
6424
|
+
- `focusFirst` (`@wirecore/wirelayer-vue`): –
|
|
6371
6425
|
- `formatColor` (`@wirecore/wirelayer-vue`): –
|
|
6372
6426
|
- `formatHotkey` (`@wirecore/wirelayer-vue`): –
|
|
6373
6427
|
- `formatHotkeyText` (`@wirecore/wirelayer-vue`): –
|
|
@@ -6400,6 +6454,7 @@ Year field ("2026"): type the digits, or pick from the year grid; range: start
|
|
|
6400
6454
|
- `provideRecipes` (`@wirecore/wirelayer-vue`): Adds overrides for the components below (inner ones win) – used by RecipesProvider
|
|
6401
6455
|
- `registerLocale` (`@wirecore/wirelayer-vue`): –
|
|
6402
6456
|
- `removeTreeNode` (`@wirecore/wirelayer-vue`): –
|
|
6457
|
+
- `resolveTokens` (`@wirecore/wirelayer-vue`): –
|
|
6403
6458
|
- `rowsToDataSource` (`@wirecore/wirelayer-vue/data-table`): –
|
|
6404
6459
|
- `toast` (`@wirecore/wirelayer-vue`): –
|
|
6405
6460
|
- `toaster` (`@wirecore/wirelayer-vue`): –
|
|
@@ -6437,6 +6492,7 @@ Year field ("2026"): type the digits, or pick from the year grid; range: start
|
|
|
6437
6492
|
- `useReducedMotion` (`@wirecore/wirelayer-vue`): Whether the user asked for less motion (prefers-reduced-motion: reduce)
|
|
6438
6493
|
- `useRegisteredHotkeys` (`@wirecore/wirelayer-vue`): The registered shortcuts (enabled, with a description), updated as components register them
|
|
6439
6494
|
- `useResizeObserver` (`@wirecore/wirelayer-vue`): The content box of an element as it changes (bind `ref` to it)
|
|
6495
|
+
- `useResolvedTokens` (`@wirecore/wirelayer-vue`): The token colours as fixed values (hex, see resolveTokens) – for canvas libraries like xterm.js that cannot read CSS variables; new values when the mode, the theme or the system colour scheme changes. On the server: the light base colours as written
|
|
6440
6496
|
- `useScrollSpy` (`@wirecore/wirelayer-vue`): The id of the section being read: the last of `ids` whose top passed `offset` px (e.g. a sticky header) – for a table of contents
|
|
6441
6497
|
- `useSelection` (`@wirecore/wirelayer-vue`): Selected items of a list: toggle, select all, clear – with "all"/"some" for a header checkbox
|
|
6442
6498
|
- `useSessionStorage` (`@wirecore/wirelayer-vue`): Like useLocalStorage, in sessionStorage (this tab only, gone when it closes)
|
|
@@ -6448,6 +6504,7 @@ Year field ("2026"): type the digits, or pick from the year grid; range: start
|
|
|
6448
6504
|
- `useWindowScroll` (`@wirecore/wirelayer-vue`): Scroll position of the window and `scrollTo` (0 on the server)
|
|
6449
6505
|
- `validateFields` (`@wirecore/wirelayer-vue/form`): Validates some fields of a TanStack form (e.g. one Wizard step) and marks them touched, so their errors show. Resolves with true when none has an error.
|
|
6450
6506
|
- `virtualRows` (`@wirecore/wirelayer-vue/virtual`): DataTable feature: only the visible rows are rendered with `virtual` – `<DataTable :features="[virtualRows]" virtual>`
|
|
6507
|
+
- `watchTokens` (`@wirecore/wirelayer-vue`): –
|
|
6451
6508
|
|
|
6452
6509
|
## Guides
|
|
6453
6510
|
|
|
@@ -7139,6 +7196,39 @@ as `pdfjs-dist` (Apache-2.0), Chart.js, Tiptap and Shiki are installed by the ap
|
|
|
7139
7196
|
- **Brand colours:** `checkTheme` lists the pairs below WCAG AA, `suggestThemeFixes` the nearest colours (and `on-*`
|
|
7140
7197
|
colours) that meet them – an orange `primary` with white text, common in PrimeVue themes, does not.
|
|
7141
7198
|
|
|
7199
|
+
### Desktop apps (dense UI, many dialogs)
|
|
7200
|
+
|
|
7201
|
+
- **Focus from code:** the text fields expose `focus()`, `select()`, `setSelectionRange()` and the native input
|
|
7202
|
+
(`element`) through a template ref – no `$el.querySelector('input')`. In a dialog, mark the first field with
|
|
7203
|
+
`data-autofocus`: a `focus()` in `onMounted` is overridden by the dialog's focus trap.
|
|
7204
|
+
- **Window shortcuts in dialogs:** Enter/Escape listeners on `window` also get the keys of an open list. `Select` and
|
|
7205
|
+
`Combobox` take `stop-key-propagation` and report `v-model:open`; `ContextMenu` reports `v-model:open` and the
|
|
7206
|
+
right-clicked element (`@before-open`).
|
|
7207
|
+
- **Menus at a point:** `close-on-scroll`, `close-on-resize`, `close-on-blur`, and `highlight-first` so Enter takes the
|
|
7208
|
+
first item.
|
|
7209
|
+
- **Closable tabs** are built in: `TabsTrigger closable @close` – the close button is not nested in the tab, Delete
|
|
7210
|
+
closes the focused tab and the focus moves to its neighbour.
|
|
7211
|
+
- **Typed values:** `RadioGroup`, `SegmentedControl` and `NativeSelect` keep the type of the bound value (unions,
|
|
7212
|
+
numbers); `Checkbox` with a boolean model gives booleans.
|
|
7213
|
+
- **Compact parts:** `Progress size="xs"` with `hide-label`, `bar-text` and `status`; `Alert #actions`; `mono` on text
|
|
7214
|
+
fields; `DialogContent title-position="header"` puts the title next to the close button.
|
|
7215
|
+
- **Values that are never empty:** with `required`, `RadioGroup` and `SegmentedControl` give v-model `V` instead of
|
|
7216
|
+
`V | null`; `NativeSelect` without `placeholder` gives `V` instead of `V | ''`; `NumberInput empty-fallback="min"` or
|
|
7217
|
+
`"previous"` refills an emptied field when it is left (typed `number`). `Select empty-value=""` treats an empty string
|
|
7218
|
+
like null – the placeholder shows, clearing gives `""` back.
|
|
7219
|
+
- **Focus in dialogs and wizards:** `data-autoselect` focuses a field and selects its text when the dialog opens (e.g. a
|
|
7220
|
+
prefilled name). For content that changes while it is open, `DialogContent` exposes `focusFirst()` (React:
|
|
7221
|
+
`focusFirst(element)`), and `Wizard focus-on-step-change` moves the focus into each new step. `Wizard finish-label`
|
|
7222
|
+
names the last button; `validate` may return a text, shown as the step's error.
|
|
7223
|
+
- **Panels elsewhere:** `TabsTrigger controls="pane-id"` points a tab at a pane outside the Tabs (`:controls="null"`
|
|
7224
|
+
for none); `Tabs` takes `null` for "no tab selected" – the first tab stays reachable with Tab.
|
|
7225
|
+
- **Context menus by keyboard:** `@before-open` gets a second argument `{ source: 'pointer' | 'keyboard', focused }` –
|
|
7226
|
+
with Shift+F10 or the menu key `focused` is the element with the focus (e.g. the list row).
|
|
7227
|
+
- **Canvas libraries** (xterm.js, charts): `resolveTokens()` gives the token colours of the current mode and theme as hex;
|
|
7228
|
+
`useResolvedTokens()` updates when the mode, the theme or the system colour scheme changes.
|
|
7229
|
+
- **More compact parts:** `Card size="sm"` for lists in dialogs, `Progress status="neutral"` for cancelled work,
|
|
7230
|
+
`Avatar initials="MS"`, and `Code` for code in a sentence without shiki (the look of `InlineCode` from `/code`).
|
|
7231
|
+
|
|
7142
7232
|
### Custom theme
|
|
7143
7233
|
|
|
7144
7234
|
A theme overrides any colors per mode. `themeToCss` generates the CSS for it,
|
package/llms.txt
CHANGED
|
@@ -58,6 +58,7 @@ Full API (props, events, slots, examples) in llms-full.txt next to this file. MC
|
|
|
58
58
|
- [ChatThinking](https://wirecore.github.io/WireLayer/?path=/story/vue_data-chat--playground): The reasoning of an answer: collapsed by default, "Thinking …" while it is being written (`@wirecore/wirelayer-vue`)
|
|
59
59
|
- [ChatToolCall](https://wirecore.github.io/WireLayer/?path=/story/vue_data-chat--playground): A tool call of an assistant: name and status in the summary, arguments and result inside (`@wirecore/wirelayer-vue`)
|
|
60
60
|
- [Chip](https://wirecore.github.io/WireLayer/?path=/story/vue_data-chip--playground): One option of a ChipGroup (a toggle button); outside a ChipGroup a standalone chip, optionally removable (`@wirecore/wirelayer-vue`)
|
|
61
|
+
- [Code](https://wirecore.github.io/WireLayer/?path=/story/vue_data-code--playground): Code inside a sentence, without syntax colours: the look of InlineCode (/code) without shiki (`@wirecore/wirelayer-vue`)
|
|
61
62
|
- [CodeHighlight](https://wirecore.github.io/WireLayer/?path=/story/vue_data-codehighlight--playground): Code block with syntax colours; the scroll area is focusable, the copy button copies the plain code (`@wirecore/wirelayer-vue/code`)
|
|
62
63
|
- [CodeHighlightTabs](https://wirecore.github.io/WireLayer/?path=/story/vue_data-codehighlight--playground): Several files: tabs with the file names (and an icon by type) above the shown code (`@wirecore/wirelayer-vue/code`)
|
|
63
64
|
- [CompositeChart](https://wirecore.github.io/WireLayer/?path=/story/vue_data-compositechart--playground): Bars and lines in one chart (series[].type), e.g. revenue as bars and margin as a line on a second axis (`@wirecore/wirelayer-vue/chart`)
|
|
@@ -169,8 +170,8 @@ Full API (props, events, slots, examples) in llms-full.txt next to this file. MC
|
|
|
169
170
|
- [MonthPicker](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-monthpicker--playground): Month field ("10.2026"): type the digits in one go, or pick from the month grid; range: start – end (`@wirecore/wirelayer-vue`)
|
|
170
171
|
- [MultiSelect](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-multiselect--playground): Select with several values: the list stays open while choosing, Space/Enter toggle an option (`@wirecore/wirelayer-vue`)
|
|
171
172
|
- [NativeSelect](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-nativeselect--playground): The browser's select: its own keyboard and mobile pickers; inside a Field it is labelled and described (`@wirecore/wirelayer-vue`)
|
|
172
|
-
- [NumberInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-numberinput--playground): Number field with − / + buttons, arrow keys and locale formatting ("1,234.5") (`@wirecore/wirelayer-vue`)
|
|
173
|
-
- [PasswordInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-passwordinput--playground): Password field with a button that shows/hides the password (named "Show/Hide password") (`@wirecore/wirelayer-vue`)
|
|
173
|
+
- [NumberInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-numberinput--playground): Number field with − / + buttons, arrow keys and locale formatting ("1,234.5"); `ref` reaches the native input (`@wirecore/wirelayer-vue`)
|
|
174
|
+
- [PasswordInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-passwordinput--playground): Password field with a button that shows/hides the password (named "Show/Hide password"); `ref` reaches the native input (`@wirecore/wirelayer-vue`)
|
|
174
175
|
- [PhoneInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-phoneinput--playground): Country (flag and calling code, searchable) and the number, formatted for the country; the value is E.164 (`@wirecore/wirelayer-vue`)
|
|
175
176
|
- [PinInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-pininput--playground): Code input (OTP, PIN): one box per character, typing moves on, pasting fills all boxes (`@wirecore/wirelayer-vue`)
|
|
176
177
|
- [QuarterPicker](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-quarterpicker--playground): Quarter field: type "Q4 2026" (also "2026-Q4", "4/2026") or pick from the four quarters of a year; with range a start and an end quarter. Arrow keys move between the quarters and on into the next or previous year. (`@wirecore/wirelayer-vue`)
|
|
@@ -185,7 +186,7 @@ Full API (props, events, slots, examples) in llms-full.txt next to this file. MC
|
|
|
185
186
|
- [Switch](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-switch--playground): Without a text the label is left out: Ark names the input by it, an empty one would hide a <label for> (`@wirecore/wirelayer-vue`)
|
|
186
187
|
- [SwitchGroup](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-switchgroup--playground): role="group" named by its label, described by helper and error text; Switches with a value inside (`@wirecore/wirelayer-vue`)
|
|
187
188
|
- [TagsInput](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-tagsinput--playground): Free entries: Enter or "," adds, Backspace on the empty field selects the last entry (again removes it), arrow keys move between entries; additions and removals are announced. With suggestions the field is a combobox: Arrow down opens them, Enter adds the highlighted one. (`@wirecore/wirelayer-vue`)
|
|
188
|
-
- [Textarea](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-textarea--auto-resize): Multi-line text field, optionally growing with the text (autoResize) and with a counter; works inside Field (`@wirecore/wirelayer-vue`)
|
|
189
|
+
- [Textarea](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-textarea--auto-resize): Multi-line text field, optionally growing with the text (autoResize) and with a counter; works inside Field. `ref` reaches the native textarea (`@wirecore/wirelayer-vue`)
|
|
189
190
|
- [TimeGrid](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-timegrid--playground): Free time slots for a booking: radio buttons for one time (arrow keys move and choose), toggle buttons for a range (start, then end). Taken slots stay visible but cannot be chosen. (`@wirecore/wirelayer-vue`)
|
|
190
191
|
- [TimePicker](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-timepicker--playground): Time field: type the digits one after another ("1430"), arrow keys change hour or minute – or pick from the list of times (every `step` minutes). Gives "HH:mm". (`@wirecore/wirelayer-vue`)
|
|
191
192
|
- [TimeRangePicker](https://wirecore.github.io/WireLayer/?path=/story/vue_forms-timerangepicker--playground): Start and end time in one field ("09:00 – 17:30"): typing runs on from start to end (`@wirecore/wirelayer-vue`)
|
|
@@ -274,7 +275,7 @@ Full API (props, events, slots, examples) in llms-full.txt next to this file. MC
|
|
|
274
275
|
## Other
|
|
275
276
|
|
|
276
277
|
- FilterChips: The active filters as a list of chips with remove buttons ("Remove filter Location: Frankfurt") (`@wirecore/wirelayer-vue`)
|
|
277
|
-
- Input: Text field with sizes, leading icon, prefix and suffix; works inside Field (`@wirecore/wirelayer-vue`)
|
|
278
|
+
- Input: Text field with sizes, leading icon, prefix and suffix; works inside Field. `ref` reaches the native input (focus, select, setSelectionRange) (`@wirecore/wirelayer-vue`)
|
|
278
279
|
- KeyValueEditor: Key-value pairs (FormList preset): two inputs per row, duplicate keys marked (`@wirecore/wirelayer-vue/form`)
|
|
279
280
|
- LocaleProvider: Renders nothing itself; Ark's provider passes locale and direction (keyboard order) on to Ark (`@wirecore/wirelayer-vue`)
|
|
280
281
|
|
|
@@ -310,5 +311,6 @@ Full API (props, events, slots, examples) in llms-full.txt next to this file. MC
|
|
|
310
311
|
- License
|
|
311
312
|
- Components and APIs side by side
|
|
312
313
|
- Pitfalls
|
|
314
|
+
- Desktop apps (dense UI, many dialogs)
|
|
313
315
|
- Custom theme
|
|
314
316
|
- Component sizes and shapes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecore/wirelayer-vue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "WireLayer components for Vue 3",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -166,8 +166,8 @@
|
|
|
166
166
|
"@ark-ui/vue": "^5.39.3",
|
|
167
167
|
"@internationalized/date": "^3.12.4",
|
|
168
168
|
"@lucide/vue": "^1.59.0",
|
|
169
|
-
"@wirecore/wirelayer-recipes": "^0.
|
|
170
|
-
"@wirecore/wirelayer-tokens": "^0.
|
|
169
|
+
"@wirecore/wirelayer-recipes": "^0.8.0",
|
|
170
|
+
"@wirecore/wirelayer-tokens": "^0.5.0"
|
|
171
171
|
},
|
|
172
172
|
"devDependencies": {
|
|
173
173
|
"@storybook/addon-a11y": "^10.6.2",
|