@synopackageland/ui 0.17.14 → 0.18.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/CHANGELOG.md +30 -0
- package/README.md +9 -7
- package/dist/components/app/page-toolbar/PageToolbar.vue.d.ts +15 -0
- package/dist/components/composite/callout/Callout.vue.d.ts +14 -6
- package/dist/components/composite/comment-item/CommentItem.vue.d.ts +2 -2
- package/dist/components/composite/facet-panel/FacetPanel.vue.d.ts +34 -0
- package/dist/components/composite/new-items-pill/NewItemsPill.vue.d.ts +14 -0
- package/dist/components/composite/summary-card/SummaryCard.vue.d.ts +48 -0
- package/dist/components/composite/tag-editor/TagEditor.vue.d.ts +32 -0
- package/dist/components/composite/timeline-row/TimelineRow.vue.d.ts +57 -0
- package/dist/components/composite/tree-view/TreeView.vue.d.ts +2 -2
- package/dist/components/primitives/badge/Badge.vue.d.ts +7 -0
- package/dist/components/primitives/button/Button.vue.d.ts +1 -1
- package/dist/components/primitives/dropdown-menu/DropdownMenu.vue.d.ts +5 -0
- package/dist/components/primitives/dropdown-menu/types.d.ts +6 -0
- package/dist/components/primitives/popover/Popover.vue.d.ts +8 -1
- package/dist/components/primitives/radio-group/RadioGroup.vue.d.ts +6 -0
- package/dist/components/primitives/segment-control/SegmentItem.vue.d.ts +2 -0
- package/dist/components/primitives/sheet/Sheet.vue.d.ts +10 -0
- package/dist/components/primitives/skeleton/SectionSkeleton.vue.d.ts +6 -0
- package/dist/i18n/text.d.ts +7 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +10587 -9704
- package/dist/json/catalog.d.ts +2 -0
- package/dist/json/registry.d.ts +34 -0
- package/dist/json-ai-prompt.md +1 -1
- package/dist/json-catalog.schema.json +2 -1
- package/dist/json-preview/preview.js +7199 -6754
- package/dist/json.js +1 -1
- package/dist/reka-runtime.json +1 -1
- package/dist/theme.css +1 -1
- package/dist/themes/dsm7-embedded-theme.css +1 -1
- package/dist/themes/dsm7-embedded.css +1 -1
- package/dist/themes/dsm7.css +1 -1
- package/docs/button-policy.md +3 -1
- package/docs/callout.md +9 -2
- package/docs/layout-rules.md +3 -3
- package/docs/theme-hooks.md +16 -1
- package/docs/wizard.md +6 -0
- package/package.json +76 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.18.0 (2026-10-31)
|
|
4
|
+
|
|
5
|
+
New page pieces for list-and-detail Apps. Nothing existing changes.
|
|
6
|
+
|
|
7
|
+
- Add `PageToolbar`: the row under a page header, one control high on every page, with the default slot at the start (a sub-view switch, counts, filters) and `#actions` at the end; it wraps instead of clipping and shares the page's side padding.
|
|
8
|
+
- Add `SummaryCard`: a section summary that is one button (`open`) with a title, a state `Badge` (`state`, `stateTone`), one to three `figures` (`{ label, value, tone }`), an optional default slot (a meter) and `note`. `loading` draws figure-shaped placeholders and `error` a line in place of the figures, never zeros; `wide` spans every column of a `CardGrid`.
|
|
9
|
+
- `SectionSkeleton` takes `variant`: `figures` (a value bar over a label bar per figure) and `rows` (an icon, two text lines, a chip and a time per row) with `count`, beside the default `lines`.
|
|
10
|
+
- Add `TimelineRow`: one event in a list, with `#leading` (a checkbox), a severity-tinted icon (`tone`, `icon` or `#icon`), a one-line `title` and `meta`, a `chip` (or `#chip`), `time` with `datetime`, `#actions`, and `#expand` behind a chevron (`v-model:expanded`). Under a 600px container the chip and time move under the meta.
|
|
11
|
+
- Add `NewItemsPill`: a pill floating over a scroll container's top or bottom edge (`edge`), with the caller's `label` ("3 new events") and `click`.
|
|
12
|
+
- Add `FacetPanel`: filter `groups` of values with counts, single or `multiple` per group, collapsible, with Clear filters once something is picked (`v-model` is `{ [group]: values[] }`). In the App's phone layout, or with `presentation="sheet"`, it is a Filters button with the picked count that opens the groups in a bottom sheet.
|
|
13
|
+
- Add `TagEditor`: tags edited in place. It reads as chips; a click or Enter opens the editor; typing filters `options`, Enter adds the highlighted one or creates what was typed (`allow-create`), × removes, Backspace in the empty field removes the last chip, and Escape or a press outside closes it. Each change shows at once and goes to `save(next, previous)`; a rejection rolls the tags back and emits `error`.
|
|
14
|
+
- `Callout` takes `variant="hint"`: the icon and a short message on one toolbar-high line, the `#details` in an info mark's tooltip that also opens on a tap; no close button.
|
|
15
|
+
|
|
16
|
+
## 0.17.16 (2026-10-31)
|
|
17
|
+
|
|
18
|
+
- `Popover` and `DropdownMenu` take `v-model:open`, so a caller can close one after a pick or open it from a link. Without `open` they keep their own state as before.
|
|
19
|
+
- A `DropdownMenu` entry (item, checkbox or radio) takes `description`: a second, quieter 12px line under the label (`data-menu-description`).
|
|
20
|
+
- `Button` takes `variant="danger-outline"`: the grey control with a red border and label, for a destructive choice beside the main action (Replace theirs next to Save as copy). It does not count as a footer's main action.
|
|
21
|
+
- `Button` spaces any element before or after its text 8px from it, a `StatusDot` as well as an icon (`data-lead`, `data-trail` on the label); an element between two texts is left alone.
|
|
22
|
+
- `Sheet` takes `:modal="false"`: a side panel over the page with no overlay, scroll lock, focus trap or `aria-hidden` on the page (`data-modal="false"`). A press outside leaves it open unless `close-on-outside`; Escape and the close button close it.
|
|
23
|
+
- `Badge` takes `dot`: `true` leads every tone with the dot, so a neutral Paused or Pending lines up with Normal beside it; `false` drops it. By default only a non-neutral tone has one.
|
|
24
|
+
- `SegmentItem` takes `count`: a pill after the label (`data-ui-segment-count`), zero included, tinted on the selected item. Toolbar items keep their width: a row of more views than fit scrolls sideways without a scrollbar instead of cutting labels, and the selected item scrolls into view.
|
|
25
|
+
|
|
26
|
+
- `SettingsPage` spaces every visible direct child of its body 16px (`--ui-space-4`) after the one before, so a page drops its own `Space direction="column"` wrapper around callouts, skeletons and sections. Sibling `SettingsSection`s stay 24px apart, `Fieldset`s keep their DSM gap, and a `hidden` child (a closed Callout) takes no gap.
|
|
27
|
+
- `SectionTabs fill` takes the height its siblings leave in a flex column (`flex: 1 1 0%`), so a consumer no longer needs `flex: 1 1 0; height: auto`. In a column without a height (a phone page) it still sizes to its content.
|
|
28
|
+
|
|
29
|
+
## 0.17.15 (2026-10-31)
|
|
30
|
+
|
|
31
|
+
- `RadioGroup` takes `variant="card"`: each option is a choice card with an optional `icon` tile (`RadioOption.icon`), its label and description, and the radio dot. The whole card picks it; the chosen card takes the primary border and a soft fill (`data-ui-choice-card`, `data-state`). Horizontal cards share the row, at least 180px each, and wrap. Use it for a wizard step's 2–4 options (docs/wizard.md, Choices). The default variant is unchanged.
|
|
32
|
+
|
|
3
33
|
## 0.17.14 (2026-10-30)
|
|
4
34
|
|
|
5
35
|
- `SectionTabs keep-mounted` retains all supplied item panels with `v-show`, preserving component-local drafts across tab switches, with or without `fill`. Inactive panels are hidden; the default still unmounts them.
|
package/README.md
CHANGED
|
@@ -506,14 +506,14 @@ Density can be switched per application subtree:
|
|
|
506
506
|
|
|
507
507
|
Primitives:
|
|
508
508
|
|
|
509
|
-
- Button / IconButton / CopyButton
|
|
509
|
+
- Button (`danger-outline` for a destructive choice beside the main action) / IconButton / CopyButton
|
|
510
510
|
- Input / Textarea
|
|
511
|
-
- Checkbox / CheckboxGroup / RadioGroup / Switch — use RadioGroup for 2–4 mutually exclusive settings; Checkbox for independent options; Switch for immediate on/off. Reserve primary-filled, capsule-shaped SegmentControl for toolbar views ([choice policy](docs/layout-rules.md)).
|
|
511
|
+
- Checkbox / CheckboxGroup / RadioGroup / Switch — use RadioGroup for 2–4 mutually exclusive settings; Checkbox for independent options; Switch for immediate on/off. Reserve primary-filled, capsule-shaped SegmentControl for toolbar views ([choice policy](docs/layout-rules.md)); a `SegmentItem` takes a `count`, and a row of more views than fit scrolls sideways.
|
|
512
512
|
- Select
|
|
513
|
-
- Badge / StatusDot / Separator / Spinner / LoadingMask / LoadingArea / Progress / SizeBar / Skeleton / Surface
|
|
513
|
+
- Badge (`dot` leads any tone with the dot) / StatusDot / Separator / Spinner / LoadingMask / LoadingArea / Progress / SizeBar / Skeleton / Surface
|
|
514
514
|
- SplitButton
|
|
515
|
-
- Tooltip / Popover / DropdownMenu / ContextMenu / Dialog
|
|
516
|
-
- Sheet / Drawer
|
|
515
|
+
- Tooltip / Popover / DropdownMenu / ContextMenu / Dialog — Popover and DropdownMenu take `v-model:open`; a menu entry takes a `description` line
|
|
516
|
+
- Sheet / Drawer — `:modal="false"` overlays the page without blocking it
|
|
517
517
|
- DatePicker
|
|
518
518
|
- ToastProvider + `useToast()`
|
|
519
519
|
- Tabs / Accordion
|
|
@@ -530,8 +530,10 @@ DSM-style application building blocks:
|
|
|
530
530
|
- FilePicker
|
|
531
531
|
- AppRoot (DSM-embedded app root)
|
|
532
532
|
- AppLayout / AppSidebar / AppToolbar / AppActionBar / AppTabBar
|
|
533
|
-
- PageHeader / SectionTabs
|
|
534
|
-
- Statistic / StatTile / StatTileGroup
|
|
533
|
+
- PageHeader / PageToolbar (the row under the header: views and filters at the start, actions at the end) / SectionTabs
|
|
534
|
+
- Statistic / StatTile / StatTileGroup / SummaryCard (a section summary that opens its detail, with loading and error states)
|
|
535
|
+
- TimelineRow (one event in a list) / NewItemsPill (a floating "N new" pill) / SectionSkeleton `variant="lines" | "figures" | "rows"`
|
|
536
|
+
- FacetPanel (filter groups with counts; a bottom sheet on a phone) / TagEditor (tags edited in place, saved optimistically)
|
|
535
537
|
- SplitPane / StorageMeter / StackedBar (see [docs/size-and-split.md](docs/size-and-split.md))
|
|
536
538
|
|
|
537
539
|
`Tabs` and `SectionTabs` move a raised selection notch in 120ms. Selected labels
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
2
|
+
type __VLS_Slots = {} & {
|
|
3
|
+
default?: (props: typeof __VLS_1) => any;
|
|
4
|
+
} & {
|
|
5
|
+
actions?: (props: typeof __VLS_3) => any;
|
|
6
|
+
};
|
|
7
|
+
declare const __VLS_base: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
8
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
9
|
+
declare const _default: typeof __VLS_export;
|
|
10
|
+
export default _default;
|
|
11
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
12
|
+
new (): {
|
|
13
|
+
$slots: S;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
tone?: 'info' | 'success' | 'warning' | 'danger';
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `soft`: a compact tinted panel. `inline`: a status line with no panel, for a short note under a field or a section.
|
|
5
|
+
* `hint`: the icon and a short message that fit a toolbar row; the `details` slot opens in a tooltip on hover,
|
|
6
|
+
* focus or tap. A hint has no close button.
|
|
7
|
+
*/
|
|
8
|
+
variant?: 'soft' | 'inline' | 'hint';
|
|
5
9
|
title?: string;
|
|
6
10
|
/**
|
|
7
11
|
* Shows a close button (default). Closing hides the callout until its
|
|
@@ -25,13 +29,17 @@ type __VLS_ModelProps = {
|
|
|
25
29
|
'expanded'?: boolean;
|
|
26
30
|
};
|
|
27
31
|
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
28
|
-
declare var __VLS_6: {},
|
|
32
|
+
declare var __VLS_6: {}, __VLS_14: {}, __VLS_21: {}, __VLS_28: {}, __VLS_30: {};
|
|
29
33
|
type __VLS_Slots = {} & {
|
|
30
34
|
default?: (props: typeof __VLS_6) => any;
|
|
31
35
|
} & {
|
|
32
|
-
details?: (props: typeof
|
|
36
|
+
details?: (props: typeof __VLS_14) => any;
|
|
37
|
+
} & {
|
|
38
|
+
default?: (props: typeof __VLS_21) => any;
|
|
39
|
+
} & {
|
|
40
|
+
details?: (props: typeof __VLS_28) => any;
|
|
33
41
|
} & {
|
|
34
|
-
actions?: (props: typeof
|
|
42
|
+
actions?: (props: typeof __VLS_30) => any;
|
|
35
43
|
};
|
|
36
44
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
37
45
|
close: () => any;
|
|
@@ -41,7 +49,7 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {
|
|
|
41
49
|
"onUpdate:expanded"?: ((value: boolean) => any) | undefined;
|
|
42
50
|
}>, {
|
|
43
51
|
fill: boolean;
|
|
44
|
-
variant: "soft" | "inline";
|
|
52
|
+
variant: "soft" | "inline" | "hint";
|
|
45
53
|
tone: "info" | "success" | "warning" | "danger";
|
|
46
54
|
dismissible: boolean;
|
|
47
55
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
@@ -32,13 +32,13 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
32
32
|
body: string;
|
|
33
33
|
time: string;
|
|
34
34
|
avatar: string;
|
|
35
|
+
datetime: string;
|
|
36
|
+
highlighted: boolean;
|
|
35
37
|
mentions: MentionCandidate[];
|
|
36
38
|
files: (id: string) => FileItem | undefined;
|
|
37
39
|
authorId: string;
|
|
38
|
-
datetime: string;
|
|
39
40
|
edited: boolean;
|
|
40
41
|
deleted: boolean;
|
|
41
|
-
highlighted: boolean;
|
|
42
42
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
43
43
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
44
44
|
declare const _default: typeof __VLS_export;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface FacetValue {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
/** The items this value would show; the app counts them. */
|
|
5
|
+
count?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface FacetGroup {
|
|
8
|
+
key: string;
|
|
9
|
+
label: string;
|
|
10
|
+
values: FacetValue[];
|
|
11
|
+
/** Pick several values (any of them matches); otherwise one, and pressing it again clears it. */
|
|
12
|
+
multiple?: boolean;
|
|
13
|
+
/** Starts collapsed. */
|
|
14
|
+
collapsed?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export type FacetSelection = Record<string, string[]>;
|
|
17
|
+
type __VLS_Props = {
|
|
18
|
+
groups: FacetGroup[];
|
|
19
|
+
modelValue?: FacetSelection;
|
|
20
|
+
/** `auto` (default): a sheet in the App's phone layout, else a panel. */
|
|
21
|
+
presentation?: 'auto' | 'panel' | 'sheet';
|
|
22
|
+
title?: string;
|
|
23
|
+
clearLabel?: string;
|
|
24
|
+
};
|
|
25
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
26
|
+
"update:modelValue": (value: FacetSelection) => any;
|
|
27
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
28
|
+
"onUpdate:modelValue"?: ((value: FacetSelection) => any) | undefined;
|
|
29
|
+
}>, {
|
|
30
|
+
modelValue: FacetSelection;
|
|
31
|
+
presentation: "auto" | "panel" | "sheet";
|
|
32
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
33
|
+
declare const _default: typeof __VLS_export;
|
|
34
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
label: string;
|
|
3
|
+
/** The edge where the new rows arrive; the arrow points there. */
|
|
4
|
+
edge?: 'top' | 'bottom';
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
7
|
+
click: (event: MouseEvent) => any;
|
|
8
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
9
|
+
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
10
|
+
}>, {
|
|
11
|
+
edge: "top" | "bottom";
|
|
12
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
13
|
+
declare const _default: typeof __VLS_export;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export type SummaryCardTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
2
|
+
export interface SummaryCardFigure {
|
|
3
|
+
label: string;
|
|
4
|
+
/** Formatted by the app, as for `Statistic`. */
|
|
5
|
+
value: string | number;
|
|
6
|
+
/** Colours the value, for a figure that needs attention. */
|
|
7
|
+
tone?: SummaryCardTone;
|
|
8
|
+
}
|
|
9
|
+
type __VLS_Props = {
|
|
10
|
+
title: string;
|
|
11
|
+
/** A state badge after the title, such as Normal or Paused. */
|
|
12
|
+
state?: string;
|
|
13
|
+
stateTone?: SummaryCardTone;
|
|
14
|
+
figures?: SummaryCardFigure[];
|
|
15
|
+
note?: string;
|
|
16
|
+
loading?: boolean;
|
|
17
|
+
/** The line shown instead of the figures when the read failed. */
|
|
18
|
+
error?: string;
|
|
19
|
+
/** Span every column of a `CardGrid`. */
|
|
20
|
+
wide?: boolean;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
};
|
|
23
|
+
declare var __VLS_22: {};
|
|
24
|
+
type __VLS_Slots = {} & {
|
|
25
|
+
default?: (props: typeof __VLS_22) => any;
|
|
26
|
+
};
|
|
27
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
28
|
+
open: (event: MouseEvent) => any;
|
|
29
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
30
|
+
onOpen?: ((event: MouseEvent) => any) | undefined;
|
|
31
|
+
}>, {
|
|
32
|
+
loading: boolean;
|
|
33
|
+
disabled: boolean;
|
|
34
|
+
error: string;
|
|
35
|
+
figures: SummaryCardFigure[];
|
|
36
|
+
note: string;
|
|
37
|
+
state: string;
|
|
38
|
+
stateTone: SummaryCardTone;
|
|
39
|
+
wide: boolean;
|
|
40
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
41
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
42
|
+
declare const _default: typeof __VLS_export;
|
|
43
|
+
export default _default;
|
|
44
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
45
|
+
new (): {
|
|
46
|
+
$slots: S;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
modelValue?: string[];
|
|
3
|
+
/** Suggestions offered while typing. */
|
|
4
|
+
options?: string[];
|
|
5
|
+
/** Lets Enter add a tag that is not among the options. */
|
|
6
|
+
allowCreate?: boolean;
|
|
7
|
+
/** Persists a change; a rejection rolls the tags back to `previous`. */
|
|
8
|
+
save?: (next: string[], previous: string[]) => unknown;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/** Accessible name of the tags. */
|
|
11
|
+
label?: string;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
};
|
|
14
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
15
|
+
error: (error: unknown) => any;
|
|
16
|
+
"update:modelValue": (value: string[]) => any;
|
|
17
|
+
open: () => any;
|
|
18
|
+
close: () => any;
|
|
19
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
20
|
+
onError?: ((error: unknown) => any) | undefined;
|
|
21
|
+
"onUpdate:modelValue"?: ((value: string[]) => any) | undefined;
|
|
22
|
+
onOpen?: (() => any) | undefined;
|
|
23
|
+
onClose?: (() => any) | undefined;
|
|
24
|
+
}>, {
|
|
25
|
+
disabled: boolean;
|
|
26
|
+
modelValue: string[];
|
|
27
|
+
options: string[];
|
|
28
|
+
allowCreate: boolean;
|
|
29
|
+
save: (next: string[], previous: string[]) => unknown;
|
|
30
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
31
|
+
declare const _default: typeof __VLS_export;
|
|
32
|
+
export default _default;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
export type TimelineRowTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
title: string;
|
|
5
|
+
meta?: string;
|
|
6
|
+
/** Severity: tints the icon tile. */
|
|
7
|
+
tone?: TimelineRowTone;
|
|
8
|
+
icon?: Component;
|
|
9
|
+
chip?: string;
|
|
10
|
+
chipTone?: TimelineRowTone;
|
|
11
|
+
/** The time as the app formats it, such as "2 min ago". */
|
|
12
|
+
time?: string;
|
|
13
|
+
/** A full date for the time's tooltip and `datetime`. */
|
|
14
|
+
datetime?: string;
|
|
15
|
+
showLabel?: string;
|
|
16
|
+
hideLabel?: string;
|
|
17
|
+
};
|
|
18
|
+
type __VLS_ModelProps = {
|
|
19
|
+
/** Whether the `#expand` detail is shown. */
|
|
20
|
+
'expanded'?: boolean;
|
|
21
|
+
};
|
|
22
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
23
|
+
declare var __VLS_1: {}, __VLS_3: {}, __VLS_10: {}, __VLS_12: {}, __VLS_20: {}, __VLS_35: {};
|
|
24
|
+
type __VLS_Slots = {} & {
|
|
25
|
+
leading?: (props: typeof __VLS_1) => any;
|
|
26
|
+
} & {
|
|
27
|
+
icon?: (props: typeof __VLS_3) => any;
|
|
28
|
+
} & {
|
|
29
|
+
meta?: (props: typeof __VLS_10) => any;
|
|
30
|
+
} & {
|
|
31
|
+
chip?: (props: typeof __VLS_12) => any;
|
|
32
|
+
} & {
|
|
33
|
+
actions?: (props: typeof __VLS_20) => any;
|
|
34
|
+
} & {
|
|
35
|
+
expand?: (props: typeof __VLS_35) => any;
|
|
36
|
+
};
|
|
37
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
38
|
+
"update:expanded": (value: boolean) => any;
|
|
39
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
40
|
+
"onUpdate:expanded"?: ((value: boolean) => any) | undefined;
|
|
41
|
+
}>, {
|
|
42
|
+
meta: string;
|
|
43
|
+
time: string;
|
|
44
|
+
tone: TimelineRowTone;
|
|
45
|
+
icon: Component;
|
|
46
|
+
chip: string;
|
|
47
|
+
chipTone: TimelineRowTone;
|
|
48
|
+
datetime: string;
|
|
49
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
50
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
51
|
+
declare const _default: typeof __VLS_export;
|
|
52
|
+
export default _default;
|
|
53
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
54
|
+
new (): {
|
|
55
|
+
$slots: S;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
@@ -51,13 +51,13 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
51
51
|
check: (payload: TreeViewCheckPayload) => any;
|
|
52
52
|
"update:checkedKeys": (value: string[]) => any;
|
|
53
53
|
"update:expanded": (value: string[]) => any;
|
|
54
|
+
expand: (node: TreeNode) => any;
|
|
54
55
|
reorder: (payload: {
|
|
55
56
|
node: TreeNode;
|
|
56
57
|
target: TreeNode;
|
|
57
58
|
position: TreeViewPosition;
|
|
58
59
|
nodes: TreeNode[];
|
|
59
60
|
}) => any;
|
|
60
|
-
expand: (node: TreeNode) => any;
|
|
61
61
|
"update:nodes": (value: TreeNode[]) => any;
|
|
62
62
|
collapse: (node: TreeNode) => any;
|
|
63
63
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
@@ -70,13 +70,13 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
70
70
|
onCheck?: ((payload: TreeViewCheckPayload) => any) | undefined;
|
|
71
71
|
"onUpdate:checkedKeys"?: ((value: string[]) => any) | undefined;
|
|
72
72
|
"onUpdate:expanded"?: ((value: string[]) => any) | undefined;
|
|
73
|
+
onExpand?: ((node: TreeNode) => any) | undefined;
|
|
73
74
|
onReorder?: ((payload: {
|
|
74
75
|
node: TreeNode;
|
|
75
76
|
target: TreeNode;
|
|
76
77
|
position: TreeViewPosition;
|
|
77
78
|
nodes: TreeNode[];
|
|
78
79
|
}) => any) | undefined;
|
|
79
|
-
onExpand?: ((node: TreeNode) => any) | undefined;
|
|
80
80
|
"onUpdate:nodes"?: ((value: TreeNode[]) => any) | undefined;
|
|
81
81
|
onCollapse?: ((node: TreeNode) => any) | undefined;
|
|
82
82
|
}>, {
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
tone?: 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
3
|
+
/**
|
|
4
|
+
* `true` leads every tone with the dot, so a neutral state (Paused, Pending)
|
|
5
|
+
* lines up with the coloured ones beside it; `false` drops it. By default
|
|
6
|
+
* only a non-neutral tone has one.
|
|
7
|
+
*/
|
|
8
|
+
dot?: boolean;
|
|
3
9
|
};
|
|
4
10
|
declare var __VLS_1: {};
|
|
5
11
|
type __VLS_Slots = {} & {
|
|
@@ -7,6 +13,7 @@ type __VLS_Slots = {} & {
|
|
|
7
13
|
};
|
|
8
14
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
9
15
|
tone: "neutral" | "info" | "success" | "warning" | "danger";
|
|
16
|
+
dot: boolean;
|
|
10
17
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
18
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
12
19
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ClickHandlers } from '../../../composables/pendingClick';
|
|
2
2
|
import { ButtonKind } from '../../../composables/buttonKind';
|
|
3
|
-
type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
3
|
+
type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'danger-outline';
|
|
4
4
|
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
5
5
|
type __VLS_Props = {
|
|
6
6
|
variant?: ButtonVariant;
|
|
@@ -2,6 +2,8 @@ import { DropdownMenuEntry } from './types';
|
|
|
2
2
|
export type { DropdownMenuEntry } from './types';
|
|
3
3
|
type __VLS_Props = {
|
|
4
4
|
items: DropdownMenuEntry[];
|
|
5
|
+
/** Controlled open state (`v-model:open`), so the caller can close it after a pick or open it from elsewhere. */
|
|
6
|
+
open?: boolean;
|
|
5
7
|
align?: 'start' | 'center' | 'end';
|
|
6
8
|
/** Controlled checked keys for `type: 'checkbox'` entries. */
|
|
7
9
|
checkedKeys?: string[];
|
|
@@ -19,6 +21,7 @@ type __VLS_Slots = {} & {
|
|
|
19
21
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
20
22
|
select: (key: string) => any;
|
|
21
23
|
toggle: (key: string, checked: boolean) => any;
|
|
24
|
+
"update:open": (value: boolean) => any;
|
|
22
25
|
"update:checkedKeys": (value: string[]) => any;
|
|
23
26
|
"update:radioValue": (value: string) => any;
|
|
24
27
|
"update:radioValues": (value: Record<string, string>) => any;
|
|
@@ -26,12 +29,14 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
26
29
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
27
30
|
onSelect?: ((key: string) => any) | undefined;
|
|
28
31
|
onToggle?: ((key: string, checked: boolean) => any) | undefined;
|
|
32
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
29
33
|
"onUpdate:checkedKeys"?: ((value: string[]) => any) | undefined;
|
|
30
34
|
"onUpdate:radioValue"?: ((value: string) => any) | undefined;
|
|
31
35
|
"onUpdate:radioValues"?: ((value: Record<string, string>) => any) | undefined;
|
|
32
36
|
onRadioSelect?: ((value: string, key: string, group: string) => any) | undefined;
|
|
33
37
|
}>, {
|
|
34
38
|
align: "start" | "center" | "end";
|
|
39
|
+
open: boolean;
|
|
35
40
|
radioIndicator: "dot" | "check";
|
|
36
41
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
37
42
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -3,6 +3,8 @@ export type DropdownMenuSubEntry = {
|
|
|
3
3
|
type?: 'item';
|
|
4
4
|
key: string;
|
|
5
5
|
label: string;
|
|
6
|
+
/** A second, quieter line under the label, such as what the entry does. */
|
|
7
|
+
description?: string;
|
|
6
8
|
disabled?: boolean;
|
|
7
9
|
/** Legacy visual check mark. Use `type: 'checkbox'` for a real, togglable item. */
|
|
8
10
|
checked?: boolean;
|
|
@@ -19,6 +21,8 @@ export type DropdownMenuCheckboxEntry = {
|
|
|
19
21
|
type: 'checkbox';
|
|
20
22
|
key: string;
|
|
21
23
|
label: string;
|
|
24
|
+
/** A second, quieter line under the label, such as what the entry does. */
|
|
25
|
+
description?: string;
|
|
22
26
|
disabled?: boolean;
|
|
23
27
|
danger?: boolean;
|
|
24
28
|
shortcut?: string;
|
|
@@ -29,6 +33,8 @@ export type DropdownMenuRadioEntry = {
|
|
|
29
33
|
type: 'radio';
|
|
30
34
|
key: string;
|
|
31
35
|
label: string;
|
|
36
|
+
/** A second, quieter line under the label, such as what the entry does. */
|
|
37
|
+
description?: string;
|
|
32
38
|
value: string;
|
|
33
39
|
/** Radio entries that share a group are mutually exclusive. Defaults to the root group. */
|
|
34
40
|
group?: string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
|
+
/** Controlled open state (`v-model:open`), so the caller can close it after a pick or open it from elsewhere. */
|
|
3
|
+
open?: boolean;
|
|
2
4
|
side?: 'top' | 'right' | 'bottom' | 'left';
|
|
3
5
|
align?: 'start' | 'center' | 'end';
|
|
4
6
|
width?: string;
|
|
@@ -9,10 +11,15 @@ type __VLS_Slots = {} & {
|
|
|
9
11
|
} & {
|
|
10
12
|
default?: (props: typeof __VLS_30) => any;
|
|
11
13
|
};
|
|
12
|
-
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
14
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
15
|
+
"update:open": (value: boolean) => any;
|
|
16
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
|
+
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
18
|
+
}>, {
|
|
13
19
|
width: string;
|
|
14
20
|
side: "top" | "right" | "bottom" | "left";
|
|
15
21
|
align: "start" | "center" | "end";
|
|
22
|
+
open: boolean;
|
|
16
23
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
17
24
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
18
25
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
1
2
|
export type RadioOption = {
|
|
2
3
|
label: string;
|
|
3
4
|
value: string;
|
|
4
5
|
description?: string;
|
|
5
6
|
disabled?: boolean;
|
|
7
|
+
/** An icon in a tile at the top of the option; drawn by the `card` variant only. */
|
|
8
|
+
icon?: Component;
|
|
6
9
|
};
|
|
7
10
|
type __VLS_Props = {
|
|
8
11
|
modelValue?: string;
|
|
9
12
|
options: RadioOption[];
|
|
10
13
|
orientation?: 'vertical' | 'horizontal';
|
|
11
14
|
disabled?: boolean;
|
|
15
|
+
/** `card` draws each option as a choice card (a wizard step's options); the radio dot stays. */
|
|
16
|
+
variant?: 'default' | 'card';
|
|
12
17
|
};
|
|
13
18
|
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
14
19
|
"update:modelValue": (value: string) => any;
|
|
15
20
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
16
21
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
17
22
|
}>, {
|
|
23
|
+
variant: "default" | "card";
|
|
18
24
|
disabled: boolean;
|
|
19
25
|
orientation: "vertical" | "horizontal";
|
|
20
26
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
@@ -8,6 +8,8 @@ type __VLS_Props = {
|
|
|
8
8
|
tooltip?: string | boolean | Record<string, unknown>;
|
|
9
9
|
/** Accessible name; required for icon-only items. */
|
|
10
10
|
ariaLabel?: string;
|
|
11
|
+
/** A count pill after the label, such as the items a view holds. */
|
|
12
|
+
count?: number | string;
|
|
11
13
|
};
|
|
12
14
|
declare var __VLS_8: {}, __VLS_10: {}, __VLS_12: {};
|
|
13
15
|
type __VLS_Slots = {} & {
|
|
@@ -7,6 +7,14 @@ type __VLS_Props = {
|
|
|
7
7
|
title?: string;
|
|
8
8
|
description?: string;
|
|
9
9
|
closeLabel?: string;
|
|
10
|
+
/**
|
|
11
|
+
* `false` opens a side panel over the page without blocking it: no overlay,
|
|
12
|
+
* no scroll lock, no focus trap, and the page stays readable to assistive
|
|
13
|
+
* technology. Escape and the close button still close it.
|
|
14
|
+
*/
|
|
15
|
+
modal?: boolean;
|
|
16
|
+
/** Whether a press outside closes the sheet. Defaults to `modal`: a non-modal sheet stays while the page behind is used. */
|
|
17
|
+
closeOnOutside?: boolean;
|
|
10
18
|
};
|
|
11
19
|
declare var __VLS_14: {}, __VLS_62: {}, __VLS_70: {};
|
|
12
20
|
type __VLS_Slots = {} & {
|
|
@@ -35,6 +43,8 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
35
43
|
side: SheetSide;
|
|
36
44
|
defaultOpen: boolean;
|
|
37
45
|
open: boolean;
|
|
46
|
+
modal: boolean;
|
|
47
|
+
closeOnOutside: boolean;
|
|
38
48
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
39
49
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
40
50
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
|
+
variant?: 'lines' | 'figures' | 'rows';
|
|
3
|
+
/** The number of lines (`lines`). */
|
|
2
4
|
lines?: number;
|
|
5
|
+
/** The number of figures or rows (`figures`, `rows`). */
|
|
6
|
+
count?: number;
|
|
3
7
|
};
|
|
4
8
|
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
9
|
+
variant: "lines" | "figures" | "rows";
|
|
5
10
|
lines: number;
|
|
11
|
+
count: number;
|
|
6
12
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
13
|
declare const _default: typeof __VLS_export;
|
|
8
14
|
export default _default;
|
package/dist/i18n/text.d.ts
CHANGED
|
@@ -227,6 +227,13 @@ export declare const englishUiText: {
|
|
|
227
227
|
readonly Copied: "Copied";
|
|
228
228
|
readonly "Couldn't copy. Select the text and copy it manually.": "Couldn't copy. Select the text and copy it manually.";
|
|
229
229
|
readonly "Couldn't copy": "Couldn't copy";
|
|
230
|
+
readonly "Clear filters": "Clear filters";
|
|
231
|
+
readonly Filters: "Filters";
|
|
232
|
+
readonly Tags: "Tags";
|
|
233
|
+
readonly "Add tag": "Add tag";
|
|
234
|
+
readonly "Create \u201C{name}\u201D": "Create “{name}”";
|
|
235
|
+
readonly "Show details": "Show details";
|
|
236
|
+
readonly "Hide details": "Hide details";
|
|
230
237
|
};
|
|
231
238
|
export type UiTextKey = keyof typeof englishUiText;
|
|
232
239
|
export type UiTranslator = (key: UiTextKey, values?: Record<string, string | number>) => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -130,6 +130,14 @@ export { default as Statistic } from './components/composite/statistic/Statistic
|
|
|
130
130
|
export { default as StatTile } from './components/composite/stat-tile/StatTile.vue';
|
|
131
131
|
export type { StatTileTone } from './components/composite/stat-tile/StatTile.vue';
|
|
132
132
|
export { default as StatTileGroup } from './components/composite/stat-tile/StatTileGroup.vue';
|
|
133
|
+
export { default as SummaryCard } from './components/composite/summary-card/SummaryCard.vue';
|
|
134
|
+
export type { SummaryCardFigure, SummaryCardTone } from './components/composite/summary-card/SummaryCard.vue';
|
|
135
|
+
export { default as TimelineRow } from './components/composite/timeline-row/TimelineRow.vue';
|
|
136
|
+
export type { TimelineRowTone } from './components/composite/timeline-row/TimelineRow.vue';
|
|
137
|
+
export { default as NewItemsPill } from './components/composite/new-items-pill/NewItemsPill.vue';
|
|
138
|
+
export { default as FacetPanel } from './components/composite/facet-panel/FacetPanel.vue';
|
|
139
|
+
export type { FacetGroup, FacetSelection, FacetValue } from './components/composite/facet-panel/FacetPanel.vue';
|
|
140
|
+
export { default as TagEditor } from './components/composite/tag-editor/TagEditor.vue';
|
|
133
141
|
export { default as CompletionToggle } from './components/composite/completion-toggle/CompletionToggle.vue';
|
|
134
142
|
export { default as CommentItem } from './components/composite/comment-item/CommentItem.vue';
|
|
135
143
|
export { mentionParts } from './lib/mentions';
|
|
@@ -217,6 +225,7 @@ export type { AppSidebarGroup, AppSidebarItem } from './components/app/app-sideb
|
|
|
217
225
|
export { default as AppToolbar } from './components/app/app-toolbar/AppToolbar.vue';
|
|
218
226
|
export { default as AppActionBar } from './components/app/app-action-bar/AppActionBar.vue';
|
|
219
227
|
export { default as PageHeader } from './components/app/page-header/PageHeader.vue';
|
|
228
|
+
export { default as PageToolbar } from './components/app/page-toolbar/PageToolbar.vue';
|
|
220
229
|
export { default as SplitPane } from './components/containers/split-pane/SplitPane.vue';
|
|
221
230
|
export { default as StorageMeter } from './components/composite/storage-meter/StorageMeter.vue';
|
|
222
231
|
export type { StorageMeterLabels } from './components/composite/storage-meter/StorageMeter.vue';
|