@synopackageland/ui 0.9.1 → 0.9.3
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 +36 -0
- package/README.md +77 -3
- package/dist/components/app/page-header/PageHeader.vue.d.ts +4 -1
- package/dist/components/composite/about-dialog/AboutDialog.vue.d.ts +1 -1
- package/dist/components/composite/connection-topology/ConnectionTopology.vue.d.ts +40 -0
- package/dist/components/composite/connection-topology/TopologyLink.vue.d.ts +8 -0
- package/dist/components/composite/connection-topology/TopologyNode.vue.d.ts +19 -0
- package/dist/components/composite/connection-topology/types.d.ts +30 -0
- package/dist/components/composite/data-grid/DataGrid.vue.d.ts +1 -1
- package/dist/components/composite/path-display/PathDisplay.vue.d.ts +25 -0
- package/dist/components/composite/settings-section/SettingsSection.vue.d.ts +10 -2
- package/dist/components/composite/step-list/StepList.vue.d.ts +29 -0
- package/dist/components/composite/step-list/types.d.ts +7 -0
- package/dist/components/containers/card/Card.vue.d.ts +6 -4
- package/dist/components/feedback/validation-popup/ValidationPopup.vue.d.ts +1 -1
- package/dist/components/primitives/pagination/Pagination.vue.d.ts +1 -1
- package/dist/components/primitives/rich-text/RichText.vue.d.ts +1 -1
- package/dist/components/primitives/skeleton/SectionSkeleton.vue.d.ts +8 -0
- package/dist/components/primitives/skeleton/Skeleton.vue.d.ts +1 -1
- package/dist/components/primitives/status-dot/StatusDot.vue.d.ts +13 -0
- package/dist/components/primitives/tag/Tag.vue.d.ts +2 -2
- package/dist/i18n/text.d.ts +13 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8538 -7960
- package/dist/json-preview/preview.js +3714 -3458
- package/dist/lib/clipboard.d.ts +2 -0
- 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/app-local-modal.md +6 -1
- package/docs/layout-rules.md +37 -0
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,41 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.3 (2026-10-13)
|
|
4
|
+
|
|
5
|
+
Behavior changes: `Checkbox` renders its root as a `span` with a `label` for its text, `Input type="password"` adds a show/hide button, number inputs are 128px wide, `PageHeader` is sticky by default, and disabled primary and danger buttons are tinted instead of faded. Layout rules are in `docs/layout-rules.md`.
|
|
6
|
+
行為變化:`Checkbox` 根元素改為 `span`,文字用 `label`;`Input type="password"` 加上顯示/隱藏按鈕;數字欄位寬 128px;`PageHeader` 預設 sticky;停用的主要與危險按鈕改為淡色底而非半透明。版面規則見 `docs/layout-rules.md`。
|
|
7
|
+
|
|
8
|
+
- **Behavior change.** `Checkbox` keeps its box and text on one line even when App CSS sets `label { display: grid }`: the root is a `span` and only the text is a `label` bound to the box.
|
|
9
|
+
- **行為變化。** App CSS 設 `label { display: grid }` 時,`Checkbox` 的方塊與文字仍在同一行:根元素改為 `span`,只有文字是綁定方塊的 `label`。
|
|
10
|
+
- **Behavior change.** `Input type="password"` has a show/hide button (`data-ui-password-toggle`, `aria-pressed`). `Input type="number"` is 128px wide instead of the full row.
|
|
11
|
+
- **行為變化。** `Input type="password"` 加上顯示/隱藏按鈕(`data-ui-password-toggle`、`aria-pressed`)。`Input type="number"` 寬 128px,不再撐滿整列。
|
|
12
|
+
- **Behavior change.** `PageHeader` sticks to the top while the page scrolls; `:sticky="false"` turns it off. `EmptyState` fills the remaining height so its content is centred.
|
|
13
|
+
- **行為變化。** `PageHeader` 捲動時固定在頂端,`:sticky="false"` 可關閉。`EmptyState` 撐滿剩餘高度,內容垂直置中。
|
|
14
|
+
- **Behavior change.** Disabled primary and danger buttons use a pale tint of their colour with readable text (4.5:1) instead of 40% opacity.
|
|
15
|
+
- **行為變化。** 停用的主要與危險按鈕改用淡色底與可讀文字(4.5:1),不再是 40% 透明度。
|
|
16
|
+
- `SettingsSection` takes a `description` (one paragraph, at most 72ch) and a `#footer` slot for its actions; its title is body-colour text over a solid divider. `SettingsSection` and `Card` take `loading`, which keeps the title and shows the new `SectionSkeleton` in place of the content and actions.
|
|
17
|
+
- `SettingsSection` 新增 `description`(一段,最寬 72ch)與放動作的 `#footer` slot;標題改為內文色、下方實線分隔。`SettingsSection` 與 `Card` 新增 `loading`:保留標題,內容與動作改顯示新的 `SectionSkeleton`。
|
|
18
|
+
- `PathDisplay` shows a NAS path read-only: folder icon, truncated from the start with the full path as its tooltip, and a copy button. It emits `copied` and `copy-failed`.
|
|
19
|
+
- 新增 `PathDisplay`:唯讀顯示 NAS 路徑,含資料夾圖示,從開頭截斷並以 tooltip 顯示完整路徑,附複製按鈕;發出 `copied`、`copy-failed`。
|
|
20
|
+
- Fix: `SectionTabs` spans the full toolbar width and its first tab starts at the content edge. The `Select` chevron is vertically centred.
|
|
21
|
+
- 修正:`SectionTabs` 撐滿整個 toolbar,第一個分頁與內容左緣對齊。`Select` 的箭頭垂直置中。
|
|
22
|
+
- `pnpm check:polish` checks these rules in Chrome against a DSM host page.
|
|
23
|
+
- `pnpm check:polish` 在 Chrome 中以 DSM 主機頁檢查上述規則。
|
|
24
|
+
|
|
25
|
+
## 0.9.2 (2026-10-12)
|
|
26
|
+
|
|
27
|
+
One behavior change: while a Dialog floats outside its window (`dialog-bounds="viewport"`), focus that lands on the owning DSM window returns to the top Dialog, so Escape closes that Dialog instead of the window. Everything else is additive: Badge looks the same in the DSM 7 theme.
|
|
28
|
+
一項行為變化:Dialog 浮出視窗外(`dialog-bounds="viewport"`)期間,落到所屬 DSM 視窗的焦點會回到最上層 Dialog,Esc 因此只關該 Dialog,不再關掉視窗。其餘皆為新增;DSM 7 主題下 Badge 外觀不變。
|
|
29
|
+
|
|
30
|
+
- `ConnectionTopology` draws paths from several sources, each through an optional relay, to one shared target, with no product wording built in. Each link is one of `active`, `pending`, `attention`, `error`, `idle` or `unknown`, shown with colour, a glyph and a word: working links flow dots toward the target, changing ones move slow dashes with a pulsing dot. Lanes are buttons that emit `select-lane` (Enter/Space; arrow keys, Home and End move between lanes); `lane-footer-<id>` and `node-<id>` slots add content. Below 600px of container width, or with `compact`, lanes stack with their own target. `pnpm check:topology` checks it in Chrome.
|
|
31
|
+
- 新增 `ConnectionTopology`:畫出多個來源各自經過(可省略的)中繼、連到同一個目標的路徑,元件本身不含產品用語。每段連線是 `active`、`pending`、`attention`、`error`、`idle`、`unknown` 之一,以顏色、圖示與文字表示:運作中的連線有點點流向目標,變化中的連線是慢速虛線加脈動圓點。每條 lane 是按鈕,發出 `select-lane`(Enter/Space;方向鍵、Home、End 在 lane 間移動);`lane-footer-<id>`、`node-<id>` slot 可加內容。容器寬度小於 600px 或設 `compact` 時改為直向堆疊、每條 lane 各帶目標。`pnpm check:topology` 在 Chrome 中檢查。
|
|
32
|
+
- `StatusDot` is a tone dot; `pulse` ripples a ring out of it. `StepList` is a static numbered list of instructions or checklist items, each with an optional status (`done`, `current`, `pending`, `error`, `warning`) and `#description`/`#action` slots.
|
|
33
|
+
- 新增 `StatusDot`(色調圓點,`pulse` 會向外擴散光圈)與 `StepList`(靜態編號步驟清單,可作操作說明或檢查清單;每項可帶狀態 `done`、`current`、`pending`、`error`、`warning`,並有 `#description`/`#action` slot)。
|
|
34
|
+
- Theme tokens `--ui-{neutral,info,success,warning,danger}-soft` and `-text` give each status tone a soft fill and the text that reads on it; `Badge` now uses them (same colours in the DSM 7 theme), so a theme recolours every tone. New keyframes `ui-flow` and `ui-pulse`; both stop under `prefers-reduced-motion`.
|
|
35
|
+
- 新增主題 token `--ui-{neutral,info,success,warning,danger}-soft` 與 `-text`,為每個狀態色提供淡底色與其上的文字色;`Badge` 改用它們(DSM 7 主題下顏色不變),主題可一次改掉所有色調。新增 keyframe `ui-flow`、`ui-pulse`,在 `prefers-reduced-motion` 下皆停止。
|
|
36
|
+
- **Behavior change.** Fix: with `dialog-bounds="viewport"`, Escape after pressing a floating Dialog no longer closes the whole DSM window. The `activate` handler's `toFront()` moved focus to the window's own anchor, so Escape skipped the Dialog and reached the window's keymap. Focus that lands on the owning window while a Dialog floats now returns to the top Dialog, so Escape closes only that Dialog. Apps need no change.
|
|
37
|
+
- **行為變化。** 修正:`dialog-bounds="viewport"` 下,按過浮出的 Dialog 後再按 Esc,不再關掉整個 DSM 視窗。`activate` 處理中的 `toFront()` 會把焦點移到視窗自己的錨點,Esc 因此繞過 Dialog、由視窗 keymap 處理。現在 Dialog 浮出期間,落到所屬視窗的焦點會回到最上層 Dialog,Esc 只關該 Dialog。App 不需修改。
|
|
38
|
+
|
|
3
39
|
## 0.9.1 (2026-10-12)
|
|
4
40
|
|
|
5
41
|
Two behavior changes: a Dialog without `width` is 520px wide inside `AppRoot`, and Breadcrumb's last level no longer emits `click-item`.
|
package/README.md
CHANGED
|
@@ -8,7 +8,8 @@ Import the components you need into your Vue application.
|
|
|
8
8
|
For DSM window / full-page Portal / phone layouts, see
|
|
9
9
|
[Responsive DSM application layout](docs/adaptive-layout.md). To generate UI
|
|
10
10
|
as JSON (including with an AI and the `syno-pkg-land-ui` validate/render CLI), see
|
|
11
|
-
[Declarative DSM UI](docs/json-ui.md).
|
|
11
|
+
[Declarative DSM UI](docs/json-ui.md). For page layout rules, see
|
|
12
|
+
[Layout rules](docs/layout-rules.md).
|
|
12
13
|
|
|
13
14
|
Synology Package Land UI provides Vue components for Synology package applications,
|
|
14
15
|
including an embedded theme and AppRoot for shared DSM desktop windows.
|
|
@@ -227,6 +228,9 @@ packed-consumer Chromium acceptance run (requires ego-browser).
|
|
|
227
228
|
|
|
228
229
|
## Common component patterns
|
|
229
230
|
|
|
231
|
+
Spacing, action rows, field widths, status display and section loading follow
|
|
232
|
+
[Layout rules](docs/layout-rules.md).
|
|
233
|
+
|
|
230
234
|
### Dialog
|
|
231
235
|
|
|
232
236
|
Use `v-model:open` to control visibility. The default slot contains the body;
|
|
@@ -328,6 +332,19 @@ Components use semantic CSS tokens. Import your override stylesheet after the li
|
|
|
328
332
|
}
|
|
329
333
|
```
|
|
330
334
|
|
|
335
|
+
Status tones come in pairs, a soft fill and the text that reads on it:
|
|
336
|
+
`--ui-{neutral,info,success,warning,danger}-soft` and `-text`. `Badge`,
|
|
337
|
+
`StatusDot`, `StepList` and `ConnectionTopology` use only these and the base
|
|
338
|
+
tones (`--ui-success`, …), so a dark theme overrides the pairs once:
|
|
339
|
+
|
|
340
|
+
```css
|
|
341
|
+
[data-ui-theme='dark'] {
|
|
342
|
+
--ui-success-soft: #173222;
|
|
343
|
+
--ui-success-text: #6fdc8a;
|
|
344
|
+
/* … the other tones, and the surface and text tokens */
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
331
348
|
Density can be switched per application subtree:
|
|
332
349
|
|
|
333
350
|
```html
|
|
@@ -344,7 +361,7 @@ Primitives:
|
|
|
344
361
|
- Input / Textarea
|
|
345
362
|
- Checkbox / RadioGroup / Switch
|
|
346
363
|
- Select
|
|
347
|
-
- Badge / Separator / Spinner / LoadingMask / LoadingArea / Progress / Skeleton / Surface
|
|
364
|
+
- Badge / StatusDot / Separator / Spinner / LoadingMask / LoadingArea / Progress / Skeleton / Surface
|
|
348
365
|
- SplitButton
|
|
349
366
|
- Tooltip / Popover / DropdownMenu / ContextMenu / Dialog
|
|
350
367
|
- Sheet / Drawer
|
|
@@ -356,7 +373,8 @@ DSM-style application building blocks:
|
|
|
356
373
|
|
|
357
374
|
- SearchField
|
|
358
375
|
- SettingsRow / SettingsSection
|
|
359
|
-
- Callout / EmptyState
|
|
376
|
+
- Callout / EmptyState / StepList
|
|
377
|
+
- ConnectionTopology
|
|
360
378
|
- DataTable / DataGrid
|
|
361
379
|
- TreeView
|
|
362
380
|
- FilePicker
|
|
@@ -385,6 +403,54 @@ by the caller, add `class="ui-tab-panel"` to a panel keyed by the selected value
|
|
|
385
403
|
to use the same short fade. These effects and the loading ring respect the
|
|
386
404
|
system's reduced-motion preference.
|
|
387
405
|
|
|
406
|
+
### Status: StatusDot, StepList, ConnectionTopology
|
|
407
|
+
|
|
408
|
+
`StatusDot` is an 8px tone dot; `pulse` ripples a ring out of it for a state
|
|
409
|
+
that is still changing. It is decorative unless it has a `label`.
|
|
410
|
+
|
|
411
|
+
`StepList` is a static numbered list (`items: { title, description?, status? }[]`)
|
|
412
|
+
for instructions or a checklist. `status` (`done`, `current`, `pending`, `error`,
|
|
413
|
+
`warning`) recolours the marker and is read out to assistive technology;
|
|
414
|
+
`#description` and `#action` scoped slots add content per step. It does not
|
|
415
|
+
navigate; use `Wizard` for that.
|
|
416
|
+
|
|
417
|
+
`ConnectionTopology` draws paths from several sources, each through an optional
|
|
418
|
+
relay, to one shared target. It knows nothing about any product: the caller
|
|
419
|
+
maps its own states to six link states.
|
|
420
|
+
|
|
421
|
+
```vue
|
|
422
|
+
<ConnectionTopology
|
|
423
|
+
aria-label="Connections"
|
|
424
|
+
:target="{ id: 'server', label: 'Server', caption: 'office-01', icon: Server }"
|
|
425
|
+
:lanes="[{
|
|
426
|
+
id: 'relay',
|
|
427
|
+
source: { id: 'browser', label: 'Any browser', icon: Globe },
|
|
428
|
+
via: { id: 'relay', label: 'Edge relay', icon: Cloud },
|
|
429
|
+
links: [{ state: 'active', label: 'Reachable' }, { state: 'active', label: 'Running' }],
|
|
430
|
+
}]"
|
|
431
|
+
@select-lane="open"
|
|
432
|
+
>
|
|
433
|
+
<template #lane-footer-relay>https://office.example.com</template>
|
|
434
|
+
</ConnectionTopology>
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
- **States.** `active` (green, dots flow toward the target), `pending` (amber,
|
|
438
|
+
slow dashes and a pulsing dot), `attention` (amber, waits for the user),
|
|
439
|
+
`error` (red), `idle` (grey dashes), `unknown` (grey dots). Every state but
|
|
440
|
+
`idle` has a glyph and every link a word, so colour is never the only cue;
|
|
441
|
+
`link.icon` replaces the glyph (a key for a sign-in, say). A missing `label`
|
|
442
|
+
shows the localized state word (`text` overrides them); `label: ''` hides it.
|
|
443
|
+
- **Keyboard and screen readers.** Each lane is a button named after its nodes
|
|
444
|
+
and link states; Enter or Space emits `select-lane`, the arrow keys, Home and
|
|
445
|
+
End move between lanes. `selectable: false` renders plain rows.
|
|
446
|
+
`lane-footer-<id>` content sits below the lane button, so it may hold its own
|
|
447
|
+
buttons and links; `node-<id>` replaces a node's content.
|
|
448
|
+
- **Layout.** Below 600px of container width (or with `compact`), each lane
|
|
449
|
+
stacks with its own copy of the target and the link words move to a caption
|
|
450
|
+
line. With no lanes, one idle line shows `empty-label`.
|
|
451
|
+
- **Motion.** The keyframes `ui-flow` and `ui-pulse` stop under
|
|
452
|
+
`prefers-reduced-motion`; a working link then turns solid with an arrow.
|
|
453
|
+
|
|
388
454
|
`FilePicker` owns file selection/validation/drop-zone UI only; applications remain responsible for upload transport.
|
|
389
455
|
|
|
390
456
|
### DataGrid
|
|
@@ -443,6 +509,7 @@ pnpm check # lint, typecheck, tests, and production build
|
|
|
443
509
|
pnpm story:build # build the component workbench
|
|
444
510
|
pnpm check:host # after pnpm build: DSM host simulation screenshots (Chrome)
|
|
445
511
|
pnpm check:switch # after pnpm build: Switch knob geometry and click toggling (Chrome)
|
|
512
|
+
pnpm check:topology # after pnpm build: ConnectionTopology motion, keyboard and narrow layout (Chrome)
|
|
446
513
|
```
|
|
447
514
|
|
|
448
515
|
`pnpm check:host` serves `tests/dsm-host` and screenshots each overlay scene in
|
|
@@ -457,6 +524,13 @@ embedded theme (also under `host-simulation.css`), checks in headless Chrome tha
|
|
|
457
524
|
inside and centred in the track and that a real mouse click toggles an enabled switch. Screenshots
|
|
458
525
|
are left in `.switch-shots/`.
|
|
459
526
|
|
|
527
|
+
`pnpm check:topology` renders every link state wide, on dark tokens, at 360px and
|
|
528
|
+
empty, on the standalone and the embedded theme. In headless Chrome it checks
|
|
529
|
+
that working links flow and changing ones pulse, that reduced motion stills
|
|
530
|
+
them, that the arrow keys and Enter select a lane with a visible focus ring, and
|
|
531
|
+
that the narrow layout stacks without overflow. Screenshots are left in
|
|
532
|
+
`.topology-shots/`.
|
|
533
|
+
|
|
460
534
|
In the workbench, open `DSM 7 / App Interior` and `DSM 7 / Advanced Components`
|
|
461
535
|
for reference compositions. See [SPEC.md](./SPEC.md) for architecture and
|
|
462
536
|
contribution rules, and [src/index.ts](./src/index.ts) for public exports.
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
title: string;
|
|
3
3
|
description?: string;
|
|
4
|
+
sticky?: boolean;
|
|
4
5
|
};
|
|
5
6
|
declare var __VLS_1: {};
|
|
6
7
|
type __VLS_Slots = {} & {
|
|
7
8
|
actions?: (props: typeof __VLS_1) => any;
|
|
8
9
|
};
|
|
9
|
-
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
10
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
11
|
+
sticky: boolean;
|
|
12
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
10
13
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
11
14
|
declare const _default: typeof __VLS_export;
|
|
12
15
|
export default _default;
|
|
@@ -58,9 +58,9 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
58
58
|
"onCheck-error"?: ((error: unknown) => any) | undefined;
|
|
59
59
|
}>, {
|
|
60
60
|
width: string;
|
|
61
|
+
version: string;
|
|
61
62
|
defaultOpen: boolean;
|
|
62
63
|
open: boolean;
|
|
63
|
-
version: string;
|
|
64
64
|
tagline: string;
|
|
65
65
|
iconSrc: string;
|
|
66
66
|
beta: boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LinkState, TopologyLane, TopologyNode } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Paths from several sources, each through an optional relay, to one shared
|
|
4
|
+
* target. Each link shows its state with colour, a glyph and text; working
|
|
5
|
+
* links flow toward the target. Every lane is a button that emits
|
|
6
|
+
* `select-lane`. Below 600px of container width the lanes stack compactly.
|
|
7
|
+
*/
|
|
8
|
+
type __VLS_Props = {
|
|
9
|
+
target: TopologyNode;
|
|
10
|
+
lanes: TopologyLane[];
|
|
11
|
+
ariaLabel?: string;
|
|
12
|
+
/** Always use the stacked narrow layout. */
|
|
13
|
+
compact?: boolean;
|
|
14
|
+
/** Render lanes as buttons that emit `select-lane`. */
|
|
15
|
+
selectable?: boolean;
|
|
16
|
+
emptyLabel?: string;
|
|
17
|
+
/** State words for links without a label. */
|
|
18
|
+
text?: Partial<Record<LinkState, string>>;
|
|
19
|
+
};
|
|
20
|
+
type __VLS_Slots = Record<`node-${string}`, (props: {
|
|
21
|
+
node: TopologyNode;
|
|
22
|
+
}) => unknown> & Record<`lane-footer-${string}`, (props: {
|
|
23
|
+
lane: TopologyLane;
|
|
24
|
+
}) => unknown>;
|
|
25
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
26
|
+
"select-lane": (id: string) => any;
|
|
27
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
28
|
+
"onSelect-lane"?: ((id: string) => any) | undefined;
|
|
29
|
+
}>, {
|
|
30
|
+
compact: boolean;
|
|
31
|
+
selectable: boolean;
|
|
32
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
33
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
34
|
+
declare const _default: typeof __VLS_export;
|
|
35
|
+
export default _default;
|
|
36
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
37
|
+
new (): {
|
|
38
|
+
$slots: S;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TopologyLink } from './types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
link: TopologyLink;
|
|
4
|
+
text: string;
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TopologyNode } from './types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
node: TopologyNode;
|
|
4
|
+
};
|
|
5
|
+
declare var __VLS_1: {
|
|
6
|
+
node: TopologyNode;
|
|
7
|
+
};
|
|
8
|
+
type __VLS_Slots = {} & {
|
|
9
|
+
default?: (props: typeof __VLS_1) => any;
|
|
10
|
+
};
|
|
11
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
13
|
+
declare const _default: typeof __VLS_export;
|
|
14
|
+
export default _default;
|
|
15
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
16
|
+
new (): {
|
|
17
|
+
$slots: S;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* `active` works, `pending` is still changing, `attention` waits for the user,
|
|
4
|
+
* `error` failed, `idle` is not set up or turned off, `unknown` cannot be told.
|
|
5
|
+
*/
|
|
6
|
+
export type LinkState = 'active' | 'pending' | 'attention' | 'error' | 'idle' | 'unknown';
|
|
7
|
+
export interface TopologyNode {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
caption?: string;
|
|
11
|
+
icon?: Component;
|
|
12
|
+
}
|
|
13
|
+
export interface TopologyLink {
|
|
14
|
+
state: LinkState;
|
|
15
|
+
/** Short visible text; the state word stands in when it is missing, and an
|
|
16
|
+
* empty string shows none (the lane's accessible name keeps the state word). */
|
|
17
|
+
label?: string;
|
|
18
|
+
/** Replaces the state's glyph, e.g. a key for a sign-in. */
|
|
19
|
+
icon?: Component;
|
|
20
|
+
}
|
|
21
|
+
export interface TopologyLane {
|
|
22
|
+
id: string;
|
|
23
|
+
/** The far end, e.g. the people or devices that connect. */
|
|
24
|
+
source: TopologyNode;
|
|
25
|
+
/** The relay in between; without it the lane is a direct path. */
|
|
26
|
+
via?: TopologyNode;
|
|
27
|
+
/** Source to relay, then relay to the shared target. */
|
|
28
|
+
links: [TopologyLink, TopologyLink];
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
@@ -229,10 +229,10 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
229
229
|
draggable: boolean | DataGridDraggable;
|
|
230
230
|
page: number;
|
|
231
231
|
pageSize: number;
|
|
232
|
+
selectable: boolean;
|
|
232
233
|
rowKey: string;
|
|
233
234
|
defaultSort: DataGridSort | null;
|
|
234
235
|
selectedKeys: string[];
|
|
235
|
-
selectable: boolean;
|
|
236
236
|
selectOnRowClick: boolean;
|
|
237
237
|
singleSelect: boolean;
|
|
238
238
|
localSort: boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
path: string;
|
|
3
|
+
copyable?: boolean;
|
|
4
|
+
};
|
|
5
|
+
declare var __VLS_16: {};
|
|
6
|
+
type __VLS_Slots = {} & {
|
|
7
|
+
actions?: (props: typeof __VLS_16) => any;
|
|
8
|
+
};
|
|
9
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
10
|
+
copied: (path: string) => any;
|
|
11
|
+
copyFailed: () => any;
|
|
12
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onCopied?: ((path: string) => any) | undefined;
|
|
14
|
+
onCopyFailed?: (() => any) | undefined;
|
|
15
|
+
}>, {
|
|
16
|
+
copyable: boolean;
|
|
17
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
18
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
19
|
+
declare const _default: typeof __VLS_export;
|
|
20
|
+
export default _default;
|
|
21
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
22
|
+
new (): {
|
|
23
|
+
$slots: S;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
type __VLS_Props = {
|
|
2
2
|
title: string;
|
|
3
|
+
/** One paragraph under the title; its width is capped for reading. */
|
|
4
|
+
description?: string;
|
|
5
|
+
/** Shows a skeleton in place of the content and actions while they load. */
|
|
6
|
+
loading?: boolean;
|
|
3
7
|
collapsible?: boolean;
|
|
4
8
|
defaultOpen?: boolean;
|
|
5
9
|
/** Bound with `v-model:open` for controlled collapse. */
|
|
6
10
|
open?: boolean;
|
|
7
11
|
};
|
|
8
|
-
declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {};
|
|
12
|
+
declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {}, __VLS_21: {}, __VLS_23: {};
|
|
9
13
|
type __VLS_Slots = {} & {
|
|
10
14
|
title?: (props: typeof __VLS_6) => any;
|
|
11
15
|
} & {
|
|
@@ -15,7 +19,11 @@ type __VLS_Slots = {} & {
|
|
|
15
19
|
} & {
|
|
16
20
|
actions?: (props: typeof __VLS_12) => any;
|
|
17
21
|
} & {
|
|
18
|
-
|
|
22
|
+
description?: (props: typeof __VLS_14) => any;
|
|
23
|
+
} & {
|
|
24
|
+
default?: (props: typeof __VLS_21) => any;
|
|
25
|
+
} & {
|
|
26
|
+
footer?: (props: typeof __VLS_23) => any;
|
|
19
27
|
};
|
|
20
28
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
21
29
|
"update:open": (value: boolean) => any;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { StepListItem, StepStatus } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* A static, numbered list of steps: instructions to follow or a checklist
|
|
4
|
+
* whose items each carry a status. It does not navigate; see Wizard for that.
|
|
5
|
+
*/
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
items: StepListItem[];
|
|
8
|
+
/** Status words read to assistive technology. */
|
|
9
|
+
text?: Partial<Record<Exclude<StepStatus, 'pending'>, string>>;
|
|
10
|
+
};
|
|
11
|
+
type __VLS_Slots = {
|
|
12
|
+
description?: (props: {
|
|
13
|
+
item: StepListItem;
|
|
14
|
+
index: number;
|
|
15
|
+
}) => unknown;
|
|
16
|
+
action?: (props: {
|
|
17
|
+
item: StepListItem;
|
|
18
|
+
index: number;
|
|
19
|
+
}) => unknown;
|
|
20
|
+
};
|
|
21
|
+
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
22
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
23
|
+
declare const _default: typeof __VLS_export;
|
|
24
|
+
export default _default;
|
|
25
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
26
|
+
new (): {
|
|
27
|
+
$slots: S;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -11,18 +11,20 @@ type __VLS_Props = {
|
|
|
11
11
|
toggleLabel?: string;
|
|
12
12
|
/** Where footer actions sit; DSM aligns them to a side, never the centre. */
|
|
13
13
|
footerAlign?: 'start' | 'end' | 'between';
|
|
14
|
+
/** Shows a skeleton in place of the body and footer while they load. */
|
|
15
|
+
loading?: boolean;
|
|
14
16
|
};
|
|
15
|
-
declare var __VLS_8: {}, __VLS_10: {},
|
|
17
|
+
declare var __VLS_8: {}, __VLS_10: {}, __VLS_22: {}, __VLS_24: {}, __VLS_26: {};
|
|
16
18
|
type __VLS_Slots = {} & {
|
|
17
19
|
title?: (props: typeof __VLS_8) => any;
|
|
18
20
|
} & {
|
|
19
21
|
'header-actions'?: (props: typeof __VLS_10) => any;
|
|
20
22
|
} & {
|
|
21
|
-
body?: (props: typeof
|
|
23
|
+
body?: (props: typeof __VLS_22) => any;
|
|
22
24
|
} & {
|
|
23
|
-
default?: (props: typeof
|
|
25
|
+
default?: (props: typeof __VLS_24) => any;
|
|
24
26
|
} & {
|
|
25
|
-
footer?: (props: typeof
|
|
27
|
+
footer?: (props: typeof __VLS_26) => any;
|
|
26
28
|
};
|
|
27
29
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
28
30
|
"update:expanded": (value: boolean) => any;
|
|
@@ -24,11 +24,11 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
24
24
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
25
25
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
26
26
|
}>, {
|
|
27
|
+
offset: number;
|
|
27
28
|
side: "top" | "right" | "bottom" | "left";
|
|
28
29
|
align: "start" | "center" | "end";
|
|
29
30
|
defaultOpen: boolean;
|
|
30
31
|
open: boolean;
|
|
31
|
-
offset: number;
|
|
32
32
|
disable: boolean;
|
|
33
33
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
34
34
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -77,9 +77,9 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
77
77
|
onChangePage?: ((payload: PaginationSwitch) => any) | undefined;
|
|
78
78
|
}>, {
|
|
79
79
|
modelValue: number;
|
|
80
|
-
labels: Partial<PaginationLabels>;
|
|
81
80
|
end: string | number;
|
|
82
81
|
mode: "normal" | "less";
|
|
82
|
+
labels: Partial<PaginationLabels>;
|
|
83
83
|
start: string | number;
|
|
84
84
|
refresh: boolean;
|
|
85
85
|
total: string | number;
|
|
@@ -48,7 +48,7 @@ declare const __VLS_export: import('vue').DefineComponent<import('vue').ExtractP
|
|
|
48
48
|
default: () => string[];
|
|
49
49
|
};
|
|
50
50
|
}>> & Readonly<{
|
|
51
|
-
"onClick-link"?: ((linkId: string, attrs: Record<string, string>, event:
|
|
51
|
+
"onClick-link"?: ((linkId: string, attrs: Record<string, string>, event: MouseEvent | KeyboardEvent) => any) | undefined;
|
|
52
52
|
}>, {
|
|
53
53
|
text: string;
|
|
54
54
|
parseTags: string[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
lines?: number;
|
|
3
|
+
};
|
|
4
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
5
|
+
lines: number;
|
|
6
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
@@ -4,8 +4,8 @@ type __VLS_Props = {
|
|
|
4
4
|
radius?: string;
|
|
5
5
|
};
|
|
6
6
|
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
7
|
-
width: string;
|
|
8
7
|
height: string;
|
|
8
|
+
width: string;
|
|
9
9
|
radius: string;
|
|
10
10
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
11
|
declare const _default: typeof __VLS_export;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
tone?: 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
3
|
+
/** Ripple a ring out of the dot, for a state that is still changing. */
|
|
4
|
+
pulse?: boolean;
|
|
5
|
+
/** Names the state for assistive technology; without it the dot is decorative. */
|
|
6
|
+
label?: string;
|
|
7
|
+
};
|
|
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
|
+
tone: "neutral" | "info" | "success" | "warning" | "danger";
|
|
10
|
+
pulse: boolean;
|
|
11
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
declare const _default: typeof __VLS_export;
|
|
13
|
+
export default _default;
|
|
@@ -35,10 +35,10 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
|
|
|
35
35
|
measure: typeof measure;
|
|
36
36
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
37
37
|
remove: () => any;
|
|
38
|
-
click: (event:
|
|
38
|
+
click: (event: MouseEvent | KeyboardEvent) => any;
|
|
39
39
|
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
40
40
|
onRemove?: (() => any) | undefined;
|
|
41
|
-
onClick?: ((event:
|
|
41
|
+
onClick?: ((event: MouseEvent | KeyboardEvent) => any) | undefined;
|
|
42
42
|
}>, {
|
|
43
43
|
label: string;
|
|
44
44
|
disabled: boolean;
|
package/dist/i18n/text.d.ts
CHANGED
|
@@ -43,6 +43,15 @@ export declare const englishUiText: {
|
|
|
43
43
|
readonly Info: "Info";
|
|
44
44
|
readonly Warning: "Warning";
|
|
45
45
|
readonly Error: "Error";
|
|
46
|
+
readonly Completed: "Completed";
|
|
47
|
+
readonly "Current step": "Current step";
|
|
48
|
+
readonly Connected: "Connected";
|
|
49
|
+
readonly Connecting: "Connecting";
|
|
50
|
+
readonly "Needs attention": "Needs attention";
|
|
51
|
+
readonly Failed: "Failed";
|
|
52
|
+
readonly "Not set up": "Not set up";
|
|
53
|
+
readonly Unknown: "Unknown";
|
|
54
|
+
readonly "No connections": "No connections";
|
|
46
55
|
readonly Reset: "Reset";
|
|
47
56
|
readonly Custom: "Custom";
|
|
48
57
|
readonly Color: "Color";
|
|
@@ -129,6 +138,10 @@ export declare const englishUiText: {
|
|
|
129
138
|
readonly "Pagination, {total} item total": "Pagination, {total} item total";
|
|
130
139
|
readonly Notification: "Notification";
|
|
131
140
|
readonly "Notifications ({hotkey})": "Notifications ({hotkey})";
|
|
141
|
+
readonly "Show password": "Show password";
|
|
142
|
+
readonly "Hide password": "Hide password";
|
|
143
|
+
readonly "Copy path": "Copy path";
|
|
144
|
+
readonly Copied: "Copied";
|
|
132
145
|
};
|
|
133
146
|
export type UiTextKey = keyof typeof englishUiText;
|
|
134
147
|
export type UiTranslator = (key: UiTextKey, values?: Record<string, string | number>) => string;
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export { default as MultipleSelect } from './components/primitives/multiple-sele
|
|
|
19
19
|
export { default as SuperboxSelect } from './components/primitives/superbox-select/SuperboxSelect.vue';
|
|
20
20
|
export type { SelectAllowCreate, SelectCreateOptions, SelectOptionGroup, SelectOptions, SelectOptionsRecord, SelectSearch, } from './components/primitives/select/internal/types';
|
|
21
21
|
export { default as Badge } from './components/primitives/badge/Badge.vue';
|
|
22
|
+
export { default as StatusDot } from './components/primitives/status-dot/StatusDot.vue';
|
|
22
23
|
export { default as Separator } from './components/primitives/separator/Separator.vue';
|
|
23
24
|
export { default as Spinner } from './components/primitives/spinner/Spinner.vue';
|
|
24
25
|
export { default as LoadingMask } from './components/primitives/loading/LoadingMask.vue';
|
|
@@ -26,6 +27,7 @@ export { default as LoadingArea } from './components/primitives/loading/LoadingA
|
|
|
26
27
|
export { default as LoadingIndicator } from './components/primitives/loading/LoadingIndicator.vue';
|
|
27
28
|
export { default as Progress } from './components/primitives/progress/Progress.vue';
|
|
28
29
|
export { default as Skeleton } from './components/primitives/skeleton/Skeleton.vue';
|
|
30
|
+
export { default as SectionSkeleton } from './components/primitives/skeleton/SectionSkeleton.vue';
|
|
29
31
|
export { default as Surface } from './components/primitives/surface/Surface.vue';
|
|
30
32
|
export { default as Tooltip } from './components/primitives/tooltip/Tooltip.vue';
|
|
31
33
|
export { default as Popover } from './components/primitives/popover/Popover.vue';
|
|
@@ -103,6 +105,10 @@ export { default as SettingsSection } from './components/composite/settings-sect
|
|
|
103
105
|
export { default as Footbar } from './components/composite/footbar/Footbar.vue';
|
|
104
106
|
export type { FootbarButton, FootbarButtonRegion, FootbarButtonSize, FootbarButtonVariant, } from './components/composite/footbar/types';
|
|
105
107
|
export { default as Callout } from './components/composite/callout/Callout.vue';
|
|
108
|
+
export { default as StepList } from './components/composite/step-list/StepList.vue';
|
|
109
|
+
export type { StepListItem, StepStatus } from './components/composite/step-list/types';
|
|
110
|
+
export { default as ConnectionTopology } from './components/composite/connection-topology/ConnectionTopology.vue';
|
|
111
|
+
export type { LinkState, TopologyLane, TopologyLink, TopologyNode } from './components/composite/connection-topology/types';
|
|
106
112
|
export { default as EmptyState } from './components/composite/empty-state/EmptyState.vue';
|
|
107
113
|
export { default as DataTable } from './components/composite/data-table/DataTable.vue';
|
|
108
114
|
export type { DataTableColumn } from './components/composite/data-table/DataTable.vue';
|
|
@@ -113,6 +119,7 @@ export type { TreeNode, TreeViewCheckPayload, TreeViewDraggableConfig, TreeViewP
|
|
|
113
119
|
export { default as FilePicker } from './components/composite/file-picker/FilePicker.vue';
|
|
114
120
|
export type { FileRejection } from './components/composite/file-picker/FilePicker.vue';
|
|
115
121
|
export { default as CopyCutField } from './components/composite/copy-cut-field/CopyCutField.vue';
|
|
122
|
+
export { default as PathDisplay } from './components/composite/path-display/PathDisplay.vue';
|
|
116
123
|
export type { CopyCutFieldAutosize } from './components/composite/copy-cut-field/CopyCutField.vue';
|
|
117
124
|
export { default as DataView } from './components/composite/data-view/DataView.vue';
|
|
118
125
|
export { default as VirtualList } from './components/composite/virtual-list/VirtualList.vue';
|