@synopackageland/ui 0.9.2 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +5 -1
  3. package/dist/components/app/app-layout/AppBrand.vue.d.ts +8 -0
  4. package/dist/components/app/app-layout/AppLayout.vue.d.ts +16 -9
  5. package/dist/components/app/app-sidebar/AppSidebarItems.vue.d.ts +2 -0
  6. package/dist/components/app/app-sidebar/AppSidebarTip.vue.d.ts +19 -0
  7. package/dist/components/app/app-sidebar/AppSidebarUser.vue.d.ts +8 -0
  8. package/dist/components/app/page-header/PageHeader.vue.d.ts +4 -1
  9. package/dist/components/composite/about-dialog/AboutDialog.vue.d.ts +1 -1
  10. package/dist/components/composite/path-display/PathDisplay.vue.d.ts +25 -0
  11. package/dist/components/composite/settings-section/SettingsSection.vue.d.ts +10 -2
  12. package/dist/components/containers/card/Card.vue.d.ts +6 -4
  13. package/dist/components/feedback/validation-popup/ValidationPopup.vue.d.ts +1 -1
  14. package/dist/components/primitives/pagination/Pagination.vue.d.ts +1 -1
  15. package/dist/components/primitives/rich-text/RichText.vue.d.ts +1 -1
  16. package/dist/components/primitives/skeleton/SectionSkeleton.vue.d.ts +8 -0
  17. package/dist/components/primitives/skeleton/Skeleton.vue.d.ts +1 -1
  18. package/dist/components/primitives/tag/Tag.vue.d.ts +2 -2
  19. package/dist/composables/sidebarPreference.d.ts +6 -0
  20. package/dist/i18n/text.d.ts +7 -0
  21. package/dist/index.d.ts +4 -0
  22. package/dist/index.js +8033 -7582
  23. package/dist/json-preview/preview.js +8072 -6886
  24. package/dist/lib/adaptiveLayout.d.ts +6 -0
  25. package/dist/lib/clipboard.d.ts +2 -0
  26. package/dist/lib/deviceViewport.d.ts +8 -0
  27. package/dist/reka-runtime.json +1 -1
  28. package/dist/theme.css +1 -1
  29. package/dist/themes/dsm7-embedded-theme.css +1 -1
  30. package/dist/themes/dsm7-embedded.css +1 -1
  31. package/dist/themes/dsm7.css +1 -1
  32. package/docs/adaptive-layout.md +73 -1
  33. package/docs/layout-rules.md +37 -0
  34. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.4 (2026-10-13)
4
+
5
+ Additive; DSM-window and mobile presentations render as before.
6
+ 新增功能;DSM 視窗與 mobile 呈現與先前相同。
7
+
8
+ - The `web` presentation (full-page Portal, `wide-layout="web"`, 1200px+) reads as a modern SaaS console: heavier dividers, Card/Panel surfaces and the page card lifted with a soft shadow, bolder page titles and selected nav row. New tokens `--ui-app-web-shadow` and `--ui-web-sidebar-collapsed-width`; dark values in `docs/adaptive-layout.md`.
9
+ - `web` 呈現(整頁 Portal、`wide-layout="web"`、1200px 以上)改為現代 SaaS 風格:較重分隔線、Card/Panel 與頁面卡片加柔和陰影、頁面標題與選取中的導覽列加粗。新增 token `--ui-app-web-shadow`、`--ui-web-sidebar-collapsed-width`;dark 值見 `docs/adaptive-layout.md`。
10
+ - In `web`, the AppLayout sidebar collapses to an icon rail with tooltips and resizes between 200 and 360px by drag or keyboard (`role="separator"`). `sidebar-storage-key` remembers both per app in `localStorage`.
11
+ - `web` 呈現下 AppLayout 側欄可收合成圖示列(附 tooltip),並可拖拉或用鍵盤在 200–360px 間調整寬度(`role="separator"`);`sidebar-storage-key` 以各 App 的 key 將狀態記在 `localStorage`。
12
+ - Full-page shells show the app's logo and name (`brand-name`, `brand-icon`; default: page title and icon; `#brand` slot) at the top of the web sidebar and in the phone bar and drawer, not in a DSM window. A `#sidebar-footer` slot and the new `AppSidebarUser` show the signed-in account. Sidebar group labels become section titles in web.
13
+ - 整頁版面顯示 App 的 logo 與名稱(`brand-name`、`brand-icon`;預設取頁面標題與圖示;可用 `#brand` slot):web 側欄頂端、手機頂部列與滑出選單頂端;DSM 視窗不顯示。新增 `#sidebar-footer` slot 與 `AppSidebarUser` 顯示目前帳號。web 呈現下側欄分組標題改為區段標題樣式。
14
+ - `ensureDeviceViewport()` adds a device-width viewport to a full-page host. DSM's page declares none, so on a phone a Portal app was laid out ~980px wide and never reached mobile mode.
15
+ - 新增 `ensureDeviceViewport()`:為整頁宿主加上 device-width viewport。DSM 頁面沒有宣告,手機上的 Portal App 因此以約 980px 排版,進不了 mobile 模式。
16
+
17
+ ## 0.9.3 (2026-10-13)
18
+
19
+ 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`.
20
+ 行為變化:`Checkbox` 根元素改為 `span`,文字用 `label`;`Input type="password"` 加上顯示/隱藏按鈕;數字欄位寬 128px;`PageHeader` 預設 sticky;停用的主要與危險按鈕改為淡色底而非半透明。版面規則見 `docs/layout-rules.md`。
21
+
22
+ - **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.
23
+ - **行為變化。** App CSS 設 `label { display: grid }` 時,`Checkbox` 的方塊與文字仍在同一行:根元素改為 `span`,只有文字是綁定方塊的 `label`。
24
+ - **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.
25
+ - **行為變化。** `Input type="password"` 加上顯示/隱藏按鈕(`data-ui-password-toggle`、`aria-pressed`)。`Input type="number"` 寬 128px,不再撐滿整列。
26
+ - **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.
27
+ - **行為變化。** `PageHeader` 捲動時固定在頂端,`:sticky="false"` 可關閉。`EmptyState` 撐滿剩餘高度,內容垂直置中。
28
+ - **Behavior change.** Disabled primary and danger buttons use a pale tint of their colour with readable text (4.5:1) instead of 40% opacity.
29
+ - **行為變化。** 停用的主要與危險按鈕改用淡色底與可讀文字(4.5:1),不再是 40% 透明度。
30
+ - `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.
31
+ - `SettingsSection` 新增 `description`(一段,最寬 72ch)與放動作的 `#footer` slot;標題改為內文色、下方實線分隔。`SettingsSection` 與 `Card` 新增 `loading`:保留標題,內容與動作改顯示新的 `SectionSkeleton`。
32
+ - `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`.
33
+ - 新增 `PathDisplay`:唯讀顯示 NAS 路徑,含資料夾圖示,從開頭截斷並以 tooltip 顯示完整路徑,附複製按鈕;發出 `copied`、`copy-failed`。
34
+ - Fix: `SectionTabs` spans the full toolbar width and its first tab starts at the content edge. The `Select` chevron is vertically centred.
35
+ - 修正:`SectionTabs` 撐滿整個 toolbar,第一個分頁與內容左緣對齊。`Select` 的箭頭垂直置中。
36
+ - `pnpm check:polish` checks these rules in Chrome against a DSM host page.
37
+ - `pnpm check:polish` 在 Chrome 中以 DSM 主機頁檢查上述規則。
38
+
3
39
  ## 0.9.2 (2026-10-12)
4
40
 
5
41
  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.
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;
@@ -0,0 +1,8 @@
1
+ type __VLS_Props = {
2
+ name?: string;
3
+ icon?: string;
4
+ collapsed?: boolean;
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;
@@ -6,22 +6,29 @@ type __VLS_Props = {
6
6
  responsive?: boolean;
7
7
  /** `web` opts a full-page Portal into the spacious layout at 1200px or wider; DSM windows keep `window`. */
8
8
  wideLayout?: WideLayout;
9
+ /** Remembers the web sidebar's width and collapse under `${key}:app-sidebar`; use an app-unique key. */
10
+ sidebarStorageKey?: string;
11
+ /** Heads the web sidebar and the phone bar; defaults to the page title. A DSM window shows it in its title bar instead. */
12
+ brandName?: string;
13
+ /** Logo URL beside the brand name; defaults to the page icon. */
14
+ brandIcon?: string;
9
15
  };
10
- declare var __VLS_6: {}, __VLS_13: {}, __VLS_15: {}, __VLS_17: {};
11
- type __VLS_Slots = {} & {
12
- sidebar?: (props: typeof __VLS_6) => any;
13
- } & {
14
- toolbar?: (props: typeof __VLS_13) => any;
15
- } & {
16
- default?: (props: typeof __VLS_15) => any;
17
- } & {
18
- footer?: (props: typeof __VLS_17) => any;
16
+ type __VLS_Slots = {
17
+ sidebar?: () => unknown;
18
+ 'sidebar-footer'?: () => unknown;
19
+ brand?: () => unknown;
20
+ toolbar?: () => unknown;
21
+ default?: () => unknown;
22
+ footer?: () => unknown;
19
23
  };
20
24
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
21
25
  minHeight: string;
22
26
  sidebarWidth: string;
23
27
  responsive: boolean;
24
28
  wideLayout: WideLayout;
29
+ sidebarStorageKey: string;
30
+ brandName: string;
31
+ brandIcon: string;
25
32
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
26
33
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
27
34
  declare const _default: typeof __VLS_export;
@@ -5,6 +5,8 @@ type __VLS_Props = {
5
5
  expandedKeys: string[];
6
6
  depth: number;
7
7
  searching?: boolean;
8
+ /** Icons only: each row keeps its label as the accessible name and tooltip. */
9
+ collapsed?: boolean;
8
10
  };
9
11
  declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
10
12
  select: (item: AppSidebarItem) => any;
@@ -0,0 +1,19 @@
1
+ type __VLS_Props = {
2
+ label: string;
3
+ enabled: boolean;
4
+ };
5
+ declare var __VLS_8: {}, __VLS_10: {};
6
+ type __VLS_Slots = {} & {
7
+ default?: (props: typeof __VLS_8) => any;
8
+ } & {
9
+ default?: (props: typeof __VLS_10) => 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,8 @@
1
+ type __VLS_Props = {
2
+ name: string;
3
+ /** A second line such as the role or the NAS name. */
4
+ detail?: 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;
@@ -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<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
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,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
- default?: (props: typeof __VLS_14) => any;
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;
@@ -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: {}, __VLS_17: {}, __VLS_19: {}, __VLS_21: {};
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 __VLS_17) => any;
23
+ body?: (props: typeof __VLS_22) => any;
22
24
  } & {
23
- default?: (props: typeof __VLS_19) => any;
25
+ default?: (props: typeof __VLS_24) => any;
24
26
  } & {
25
- footer?: (props: typeof __VLS_21) => any;
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: KeyboardEvent | MouseEvent) => any) | undefined;
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;
@@ -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: KeyboardEvent | MouseEvent) => any;
38
+ click: (event: MouseEvent | KeyboardEvent) => any;
39
39
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
40
40
  onRemove?: (() => any) | undefined;
41
- onClick?: ((event: KeyboardEvent | MouseEvent) => any) | undefined;
41
+ onClick?: ((event: MouseEvent | KeyboardEvent) => any) | undefined;
42
42
  }>, {
43
43
  label: string;
44
44
  disabled: boolean;
@@ -0,0 +1,6 @@
1
+ export declare const clampSidebarWidth: (width: number) => number;
2
+ /** Width and collapse of the web-presentation sidebar, remembered under `${storageKey}:app-sidebar`. */
3
+ export declare function useSidebarPreference(storageKey: string | undefined): {
4
+ width: import('vue').Ref<number, number>;
5
+ collapsed: import('vue').Ref<boolean, boolean>;
6
+ };
@@ -32,6 +32,9 @@ export declare const englishUiText: {
32
32
  readonly Notifications: "Notifications";
33
33
  readonly "Press F6 to access notifications": "Press F6 to access notifications";
34
34
  readonly "Application navigation": "Application navigation";
35
+ readonly "Collapse navigation": "Collapse navigation";
36
+ readonly "Expand navigation": "Expand navigation";
37
+ readonly "Resize navigation": "Resize navigation";
35
38
  readonly Sections: "Sections";
36
39
  readonly Slider: "Slider";
37
40
  readonly "Increase value": "Increase value";
@@ -138,6 +141,10 @@ export declare const englishUiText: {
138
141
  readonly "Pagination, {total} item total": "Pagination, {total} item total";
139
142
  readonly Notification: "Notification";
140
143
  readonly "Notifications ({hotkey})": "Notifications ({hotkey})";
144
+ readonly "Show password": "Show password";
145
+ readonly "Hide password": "Hide password";
146
+ readonly "Copy path": "Copy path";
147
+ readonly Copied: "Copied";
141
148
  };
142
149
  export type UiTextKey = keyof typeof englishUiText;
143
150
  export type UiTranslator = (key: UiTextKey, values?: Record<string, string | number>) => string;
package/dist/index.d.ts CHANGED
@@ -27,6 +27,7 @@ export { default as LoadingArea } from './components/primitives/loading/LoadingA
27
27
  export { default as LoadingIndicator } from './components/primitives/loading/LoadingIndicator.vue';
28
28
  export { default as Progress } from './components/primitives/progress/Progress.vue';
29
29
  export { default as Skeleton } from './components/primitives/skeleton/Skeleton.vue';
30
+ export { default as SectionSkeleton } from './components/primitives/skeleton/SectionSkeleton.vue';
30
31
  export { default as Surface } from './components/primitives/surface/Surface.vue';
31
32
  export { default as Tooltip } from './components/primitives/tooltip/Tooltip.vue';
32
33
  export { default as Popover } from './components/primitives/popover/Popover.vue';
@@ -118,6 +119,7 @@ export type { TreeNode, TreeViewCheckPayload, TreeViewDraggableConfig, TreeViewP
118
119
  export { default as FilePicker } from './components/composite/file-picker/FilePicker.vue';
119
120
  export type { FileRejection } from './components/composite/file-picker/FilePicker.vue';
120
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';
121
123
  export type { CopyCutFieldAutosize } from './components/composite/copy-cut-field/CopyCutField.vue';
122
124
  export { default as DataView } from './components/composite/data-view/DataView.vue';
123
125
  export { default as VirtualList } from './components/composite/virtual-list/VirtualList.vue';
@@ -164,7 +166,9 @@ export { default as AppLayout } from './components/app/app-layout/AppLayout.vue'
164
166
  export { default as ResponsiveView } from './components/app/responsive-view/ResponsiveView.vue';
165
167
  export { appPresentationForWidth, MOBILE_LAYOUT_MAX, WEB_LAYOUT_MIN } from './lib/adaptiveLayout';
166
168
  export type { AppPresentation, WideLayout } from './lib/adaptiveLayout';
169
+ export { ensureDeviceViewport } from './lib/deviceViewport';
167
170
  export { default as AppSidebar } from './components/app/app-sidebar/AppSidebar.vue';
171
+ export { default as AppSidebarUser } from './components/app/app-sidebar/AppSidebarUser.vue';
168
172
  export type { AppSidebarGroup, AppSidebarItem } from './components/app/app-sidebar/AppSidebar.vue';
169
173
  export { default as AppToolbar } from './components/app/app-toolbar/AppToolbar.vue';
170
174
  export { default as AppActionBar } from './components/app/app-action-bar/AppActionBar.vue';