@synopackageland/ui 0.10.1 → 0.10.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 +21 -0
- package/README.md +13 -4
- package/dist/components/composite/settings-section/SettingsSection.vue.d.ts +2 -2
- package/dist/components/containers/card/Card.vue.d.ts +2 -2
- package/dist/components/containers/panel/Panel.vue.d.ts +3 -3
- package/dist/components/primitives/dialog/Dialog.vue.d.ts +4 -1
- package/dist/components/primitives/dialog/dialogSize.d.ts +12 -0
- package/dist/components/primitives/sheet/Sheet.vue.d.ts +2 -2
- package/dist/components/primitives/tag/Tag.vue.d.ts +4 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4969 -4926
- package/dist/json/catalog.d.ts +12 -0
- package/dist/json/registry.d.ts +204 -0
- package/dist/json-ai-prompt.md +1 -1
- package/dist/json-catalog.schema.json +17 -1
- package/dist/json-preview/preview.js +3808 -3777
- package/dist/json.js +50 -48
- 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 +8 -3
- package/docs/layout-rules.md +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.10.3 (2026-10-16)
|
|
4
|
+
|
|
5
|
+
- `Dialog` takes `size="sm" | "md" | "lg" | "xl"`: the DSM 7.4 dialog widths 450, 530, 740 and 860 px (`--ui-dialog-width-<size>`), measured on File Station's Create folder, Task Scheduler's Create task, Storage Manager's Data Scrubbing and a shared folder's Edit. An explicit `width` still wins. JSON UI `Dialog` takes `size` too.
|
|
6
|
+
- A content-sized `Dialog` holding a `Textarea` opens at least `md` (530 px) wide, and one holding a row-wide `Input` at least `sm` (450 px), as DSM builds dialogs around such fields. A number field does not widen it. The floor never passes the maximum width.
|
|
7
|
+
- Every dialog width, presets included, stays inside its DSM window less a 12 px margin, also when the dialog floats over the desktop (`dialogBounds: 'viewport'`, as the SDK's AppShell sets in a DSM window). A 760 px dialog in a 700 px window no longer overflows it.
|
|
8
|
+
- A content-sized dialog can grow to the whole room it is given; before, its centring limited it to half its container's width.
|
|
9
|
+
- A dialog with a title bar draws DSM's 3 px modal-window corner (`--ui-radius-window`); a message box without a title keeps 8 px (`--ui-radius-dialog`). Both measured on DSM 7.4.
|
|
10
|
+
- On a phone-width app, the bottom sheet of an app-local dialog now runs edge to edge; it was 24 px short of the app.
|
|
11
|
+
- Visible changes for apps: dialogs with a text area or text fields get wider, titled dialogs get squarer corners, and some content-sized dialogs grow up to 760 px. Download Hub's 新增下載 dialog needs no change: its text area makes it 530 px. Remove hard-coded dialog widths that only imitated DSM, and use `size` for a wide form.
|
|
12
|
+
|
|
13
|
+
繁中摘要:Dialog 新增 `size`(sm 450/md 530/lg 740/xl 860px,依 DSM 7.4 實測),明確的 `width` 仍優先;JSON UI 的 Dialog 同樣支援。依內容決定寬度的 Dialog 內含 Textarea 時至少 530px、含整列 Input 時至少 450px(數字欄位不影響),不超過最大寬度。所有寬度(含 size)都夾在 DSM 視窗內寬減 12px 邊距內,浮在桌面上的對話框(SDK AppShell 在 DSM 視窗中的 `dialogBounds: 'viewport'`)也一樣;700px 視窗中的 760px 對話框不再溢出。依內容決定寬度的對話框不再因置中方式被限制在容器一半寬。有標題列的 Dialog 改用 DSM 模態視窗的 3px 圓角(`--ui-radius-window`),無標題的訊息框維持 8px。手機寬度下 app-local 對話框的底部面板改為滿版(先前比 App 窄 24px)。App 升級後:含文字區域/文字欄位的對話框變寬、有標題的對話框圓角變小、部分依內容決定寬度的對話框可寬到 760px。Download Hub 的「新增下載」不需修改即為 530px;移除只為模仿 DSM 而寫死的寬度,寬表單改用 `size`。
|
|
14
|
+
|
|
15
|
+
## 0.10.2 (2026-10-16)
|
|
16
|
+
|
|
17
|
+
- 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.
|
|
18
|
+
- 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.
|
|
19
|
+
- **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 ×.
|
|
20
|
+
- 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.
|
|
21
|
+
|
|
22
|
+
繁中摘要: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"`。
|
|
23
|
+
|
|
3
24
|
## 0.10.1 (2026-10-16)
|
|
4
25
|
|
|
5
26
|
- Components follow measured DSM 7 metrics (see `docs/dsm-native-metrics.md`).
|
package/README.md
CHANGED
|
@@ -257,10 +257,17 @@ const open = ref(false)
|
|
|
257
257
|
</template>
|
|
258
258
|
```
|
|
259
259
|
|
|
260
|
-
Without `width` the dialog sizes to its content between
|
|
260
|
+
Without `width` or `size` the dialog sizes to its content between
|
|
261
261
|
`--ui-dialog-min-width` (420px) and `--ui-dialog-max-width` (760px, or the
|
|
262
|
-
`max-width` prop); a long paragraph wraps at the maximum.
|
|
263
|
-
width
|
|
262
|
+
`max-width` prop); a long paragraph wraps at the maximum. A field without a
|
|
263
|
+
width of its own raises that minimum to the DSM width of a dialog built around
|
|
264
|
+
it: a `Textarea` to `md` (530px), a row-wide `Input` to `sm` (450px). `size`
|
|
265
|
+
picks a fixed DSM dialog width: `sm` 450px (one field), `md` 530px (a form
|
|
266
|
+
with a text area), `lg` 740px (a wide form), `xl` 860px (tabs of settings),
|
|
267
|
+
as measured on DSM 7.4. `width` sets any
|
|
268
|
+
fixed width and wins over `size`. Every width stays inside the room the
|
|
269
|
+
container leaves: the viewport or the app less a margin, and in a DSM window
|
|
270
|
+
the window itself, also when the dialog floats over the desktop. A dialog with no title and no close button is a
|
|
264
271
|
question and takes DSM's message-box layout. Buttons in the `footer` slot are
|
|
265
272
|
capsule `action` buttons (`kind="tool"` opts one out). `height` or
|
|
266
273
|
`min-height` (for example `min-height="420px"`) keeps a panel with little
|
|
@@ -324,7 +331,9 @@ import { AppLayout, Button, PageHeader } from '@synopackageland/ui'
|
|
|
324
331
|
`AppLayout` also accepts `sidebar`, `toolbar`, and `footer` slots.
|
|
325
332
|
|
|
326
333
|
`PageContent` stacks its direct children (a search row, a toolbar, cards) at
|
|
327
|
-
`--ui-section-gap`, so a page needs no margins between them.
|
|
334
|
+
`--ui-section-gap`, so a page needs no margins between them. Under a
|
|
335
|
+
`PageHeader` the space is the header's own bottom padding (12px in a DSM
|
|
336
|
+
window), with no section gap added.
|
|
328
337
|
|
|
329
338
|
To set a block apart inside a card, use `<Surface variant="inset">`. DSM draws it as a
|
|
330
339
|
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: {},
|
|
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
|
|
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: {},
|
|
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
|
|
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: {},
|
|
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
|
|
31
|
+
fbar?: (props: typeof __VLS_15) => any;
|
|
32
32
|
} & {
|
|
33
|
-
'spin-inner'?: (props: typeof
|
|
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;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { DialogSize } from './dialogSize';
|
|
1
2
|
type __VLS_Props = {
|
|
2
3
|
open?: boolean;
|
|
3
4
|
defaultOpen?: boolean;
|
|
4
5
|
title?: string;
|
|
5
6
|
description?: string;
|
|
6
|
-
/** A fixed width, capped to the
|
|
7
|
+
/** A fixed width, capped to the room the app window leaves. Without it (or `size`) the dialog sizes to its content. */
|
|
7
8
|
width?: string;
|
|
9
|
+
/** A fixed DSM dialog width (`--ui-dialog-width-<size>`), capped like `width`; `width` wins over it. */
|
|
10
|
+
size?: DialogSize;
|
|
8
11
|
/** The widest a content-sized dialog grows (default `--ui-dialog-max-width`). */
|
|
9
12
|
maxWidth?: string;
|
|
10
13
|
/** A fixed panel height, capped to the available height. */
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ComputedRef } from 'vue';
|
|
2
|
+
/** A Dialog width preset: one of the dialog widths DSM 7 itself uses (`--ui-dialog-width-<size>`). */
|
|
3
|
+
export type DialogSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
/**
|
|
5
|
+
* The narrowest DSM dialog width the fields in a dialog ask for: the widest
|
|
6
|
+
* of their wishes, or undefined. A field without a width of its own (a text
|
|
7
|
+
* area, a row-wide input) would otherwise shrink to a content-sized dialog's
|
|
8
|
+
* minimum.
|
|
9
|
+
*/
|
|
10
|
+
export declare function provideDialogContentWidth(): ComputedRef<DialogSize | undefined>;
|
|
11
|
+
/** Asks the dialog a field is in, if any, to be at least `size` wide while the field is shown. */
|
|
12
|
+
export declare function useDialogContentWidth(size: () => DialogSize | undefined): void;
|
|
@@ -8,13 +8,13 @@ type __VLS_Props = {
|
|
|
8
8
|
description?: string;
|
|
9
9
|
closeLabel?: string;
|
|
10
10
|
};
|
|
11
|
-
declare var __VLS_14: {}, __VLS_62: {},
|
|
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
|
|
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
|
-
/**
|
|
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;
|
package/dist/index.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ export { default as SplitButton } from './components/primitives/split-button/Spl
|
|
|
40
40
|
export { default as ContextMenu } from './components/primitives/context-menu/ContextMenu.vue';
|
|
41
41
|
export type { ContextMenuEntry } from './components/primitives/context-menu/types';
|
|
42
42
|
export { default as Dialog } from './components/primitives/dialog/Dialog.vue';
|
|
43
|
+
export type { DialogSize } from './components/primitives/dialog/dialogSize';
|
|
43
44
|
export { default as Sheet, default as Drawer } from './components/primitives/sheet/Sheet.vue';
|
|
44
45
|
export { default as DatePicker } from './components/primitives/date-picker/DatePicker.vue';
|
|
45
46
|
export type { DateFormat, DateTimeParts, TimeFormat } from './components/primitives/date-picker/dateTime';
|