@synopackageland/ui 0.9.3 → 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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
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
+
3
17
  ## 0.9.3 (2026-10-13)
4
18
 
5
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`.
@@ -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;
@@ -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";
package/dist/index.d.ts CHANGED
@@ -166,7 +166,9 @@ export { default as AppLayout } from './components/app/app-layout/AppLayout.vue'
166
166
  export { default as ResponsiveView } from './components/app/responsive-view/ResponsiveView.vue';
167
167
  export { appPresentationForWidth, MOBILE_LAYOUT_MAX, WEB_LAYOUT_MIN } from './lib/adaptiveLayout';
168
168
  export type { AppPresentation, WideLayout } from './lib/adaptiveLayout';
169
+ export { ensureDeviceViewport } from './lib/deviceViewport';
169
170
  export { default as AppSidebar } from './components/app/app-sidebar/AppSidebar.vue';
171
+ export { default as AppSidebarUser } from './components/app/app-sidebar/AppSidebarUser.vue';
170
172
  export type { AppSidebarGroup, AppSidebarItem } from './components/app/app-sidebar/AppSidebar.vue';
171
173
  export { default as AppToolbar } from './components/app/app-toolbar/AppToolbar.vue';
172
174
  export { default as AppActionBar } from './components/app/app-action-bar/AppActionBar.vue';