@synopackageland/ui 0.10.1 → 0.10.2

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,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.10.2 (2026-10-16)
4
+
5
+ - A `PageHeader` inside `PageContent` no longer gets the section gap on top of its own bottom padding: the title sits 12 px above the content in a DSM window again (16 px on a phone, 24 px in the web layout), not 24 px.
6
+ - Buttons in `SettingsSection` `#footer`, `Card` `#footer`, `Panel` `#fbar`, `Sheet` `#footer` and `AppActionBar` become `action` automatically, like `FormActions`, `Footbar`, `Dialog` and `Wizard` footers. An explicit `kind` still wins.
7
+ - **Behavior change:** `Tag` `removable` now defaults to `false`. DSM status and label tags are display-only, so the remove control must be opted into with `removable`; a Tag that relied on the old default loses its ×.
8
+ - Visible changes for apps: less space under page titles, and these footers draw capsule buttons. An app can drop the `kind="action"` it added to such footers, and the `:removable="false"` it set on Tags.
9
+
10
+ 繁中摘要:PageContent 裡的 PageHeader 不再把段落間距疊在自己的下方 padding 上,DSM 視窗中標題到內容回到 12px(手機 16px、web 版面 24px)。SettingsSection `#footer`、Card `#footer`、Panel `#fbar`、Sheet `#footer`、AppActionBar 的按鈕跟 FormActions/Footbar/Dialog/Wizard 頁尾一樣自動用 action;明確寫的 `kind` 仍優先。**行為變更:**Tag 的 `removable` 預設改為 `false`(DSM 狀態/標籤 Tag 只供顯示),需要移除鈕時要明確寫 `removable`;依賴舊預設的 Tag 會失去 ×。App 可刪掉自己在這些頁尾加的 `kind="action"`,以及 Tag 上的 `:removable="false"`。
11
+
3
12
  ## 0.10.1 (2026-10-16)
4
13
 
5
14
  - Components follow measured DSM 7 metrics (see `docs/dsm-native-metrics.md`).
package/README.md CHANGED
@@ -324,7 +324,9 @@ import { AppLayout, Button, PageHeader } from '@synopackageland/ui'
324
324
  `AppLayout` also accepts `sidebar`, `toolbar`, and `footer` slots.
325
325
 
326
326
  `PageContent` stacks its direct children (a search row, a toolbar, cards) at
327
- `--ui-section-gap`, so a page needs no margins between them.
327
+ `--ui-section-gap`, so a page needs no margins between them. Under a
328
+ `PageHeader` the space is the header's own bottom padding (12px in a DSM
329
+ window), with no section gap added.
328
330
 
329
331
  To set a block apart inside a card, use `<Surface variant="inset">`. DSM draws it as a
330
332
  faint grey block with no border of its own, at 12px × 16px padding.
@@ -10,7 +10,7 @@ type __VLS_Props = {
10
10
  /** Bound with `v-model:open` for controlled collapse. */
11
11
  open?: boolean;
12
12
  };
13
- declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {}, __VLS_21: {}, __VLS_23: {};
13
+ declare var __VLS_6: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {}, __VLS_21: {}, __VLS_29: {};
14
14
  type __VLS_Slots = {} & {
15
15
  title?: (props: typeof __VLS_6) => any;
16
16
  } & {
@@ -24,7 +24,7 @@ type __VLS_Slots = {} & {
24
24
  } & {
25
25
  default?: (props: typeof __VLS_21) => any;
26
26
  } & {
27
- footer?: (props: typeof __VLS_23) => any;
27
+ footer?: (props: typeof __VLS_29) => any;
28
28
  };
29
29
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
30
30
  "update:open": (value: boolean) => any;
@@ -14,7 +14,7 @@ type __VLS_Props = {
14
14
  /** Shows a skeleton in place of the body and footer while they load. */
15
15
  loading?: boolean;
16
16
  };
17
- declare var __VLS_8: {}, __VLS_10: {}, __VLS_22: {}, __VLS_24: {}, __VLS_26: {};
17
+ declare var __VLS_8: {}, __VLS_10: {}, __VLS_22: {}, __VLS_24: {}, __VLS_32: {};
18
18
  type __VLS_Slots = {} & {
19
19
  title?: (props: typeof __VLS_8) => any;
20
20
  } & {
@@ -24,7 +24,7 @@ type __VLS_Slots = {} & {
24
24
  } & {
25
25
  default?: (props: typeof __VLS_24) => any;
26
26
  } & {
27
- footer?: (props: typeof __VLS_26) => any;
27
+ footer?: (props: typeof __VLS_32) => any;
28
28
  };
29
29
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
30
30
  "update:expanded": (value: boolean) => any;
@@ -18,7 +18,7 @@ type __VLS_Props = {
18
18
  /** Make the default body slot scroll when its content overflows. */
19
19
  scrollable?: boolean;
20
20
  };
21
- declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_9: {}, __VLS_18: {};
21
+ declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_15: {}, __VLS_24: {};
22
22
  type __VLS_Slots = {} & {
23
23
  tbar?: (props: typeof __VLS_1) => any;
24
24
  } & {
@@ -28,9 +28,9 @@ type __VLS_Slots = {} & {
28
28
  } & {
29
29
  default?: (props: typeof __VLS_7) => any;
30
30
  } & {
31
- fbar?: (props: typeof __VLS_9) => any;
31
+ fbar?: (props: typeof __VLS_15) => any;
32
32
  } & {
33
- 'spin-inner'?: (props: typeof __VLS_18) => any;
33
+ 'spin-inner'?: (props: typeof __VLS_24) => any;
34
34
  };
35
35
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
36
36
  getScrollEl: () => HTMLElement | null;
@@ -8,13 +8,13 @@ type __VLS_Props = {
8
8
  description?: string;
9
9
  closeLabel?: string;
10
10
  };
11
- declare var __VLS_14: {}, __VLS_62: {}, __VLS_64: {};
11
+ declare var __VLS_14: {}, __VLS_62: {}, __VLS_70: {};
12
12
  type __VLS_Slots = {} & {
13
13
  trigger?: (props: typeof __VLS_14) => any;
14
14
  } & {
15
15
  default?: (props: typeof __VLS_62) => any;
16
16
  } & {
17
- footer?: (props: typeof __VLS_64) => any;
17
+ footer?: (props: typeof __VLS_70) => any;
18
18
  };
19
19
  declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
20
20
  escapeKeyDown: (event: KeyboardEvent) => any;
@@ -10,7 +10,10 @@ export interface TagVisual {
10
10
  type __VLS_Props = {
11
11
  label?: string;
12
12
  appearance?: TagAppearance;
13
- /** Shows the remove control; the caller handles the actual removal. */
13
+ /**
14
+ * Shows the remove control; the caller handles the actual removal. Off by
15
+ * default: DSM status and label tags are display-only.
16
+ */
14
17
  removable?: boolean;
15
18
  selected?: boolean;
16
19
  disabled?: boolean;