@synopackageland/ui 0.9.6 → 0.9.7
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 +16 -0
- package/README.md +22 -0
- package/dist/components/composite/data-table/DataTable.vue.d.ts +2 -2
- package/dist/components/composite/scroll-edges/ScrollEdges.vue.d.ts +18 -0
- package/dist/components/containers/card-grid/CardGrid.vue.d.ts +2 -1
- package/dist/components/containers/card-grid/cardGrid.d.ts +12 -0
- package/dist/components/primitives/space/space.d.ts +1 -0
- package/dist/composables/scrollEdges.d.ts +8 -0
- package/dist/index.js +3006 -2932
- package/dist/json-preview/preview.js +1362 -1318
- 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/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.7 (2026-10-14)
|
|
4
|
+
|
|
5
|
+
Fixes from the t-0496 re-verification on DSM. **Behavior change:** a `Space` row packs its items at the start instead of centring them.
|
|
6
|
+
修正 t-0496 DSM 複驗發現的問題。**行為變更:** `Space` 列的項目改為靠起點排列,不再置中。
|
|
7
|
+
|
|
8
|
+
- A `Space` row packs its items at the start of the line (`justify-content: flex-start`); before, it centred them, and every app had to add `justify-content="start"`. Pass `justify-content="center"` for the old layout.
|
|
9
|
+
- `Space` 列的項目靠行首排列(`justify-content: flex-start`);先前預設置中,每個 App 都得加上 `justify-content="start"`。需要舊版排列時傳入 `justify-content="center"`。
|
|
10
|
+
- A stuck `PageHeader` on a full-page (web) card page is opaque from the top edge of its scroller. When `PageContent` itself scrolled (as the SDK's `AppShell` does), the header stuck inside the page's 28px top padding and the content scrolled visibly above it; the space around the card is now a margin and the first header covers the card's top padding.
|
|
11
|
+
- 全頁(web)卡片頁面中,黏住的 `PageHeader` 從捲動區頂端起就是不透明的。先前 `PageContent` 本身是捲動區時(SDK 的 `AppShell` 即是如此),頁首黏在頁面 28px 上內距之內,捲動內容會從頁首上方透出;現在卡片外的間距改為 margin,第一個頁首涵蓋卡片的上內距。
|
|
12
|
+
- A narrow `ConnectionTopology` (below 600px) breaks node labels between words, never inside one: a node is at least as wide as its longest word and the links give up the room (down to 16px). At 300–360px "Cloudflare" was split into "Cloudflar / e".
|
|
13
|
+
- 窄的 `ConnectionTopology`(600px 以下)節點標籤只在詞與詞之間換行,不在詞中斷開:節點至少與最長的詞同寬,由連線讓出空間(最窄 16px)。先前在 300–360px 時「Cloudflare」被斷成「Cloudflar / e」。
|
|
14
|
+
- A `DataGrid` or `DataTable` wider than its box shades the side it continues on (`[data-ui-scroll-edges]`, `data-overflow-start` / `data-overflow-end`; colour `--ui-scroll-edge-shade`). In a 720px full page the last columns were cut off with no sign that the table scrolls, as macOS hides scrollbars until scrolling.
|
|
15
|
+
- 比外框寬的 `DataGrid` 或 `DataTable` 會在還有內容的一側顯示陰影(`[data-ui-scroll-edges]`、`data-overflow-start`/`data-overflow-end`;顏色 `--ui-scroll-edge-shade`)。先前在 720px 全頁時最後幾欄被切掉,且 macOS 在捲動前隱藏捲軸,看不出表格可以捲動。
|
|
16
|
+
- A `CardGrid` (`fit="stretch"`, `minItemWidth` in px or rem) does not leave one card alone on a row: a card may shrink to 90% of `minItemWidth` to join the row, and the columns spread evenly over the rows (3 cards → 3, 4 → 2 + 2, 5 → 3 + 2). Three 360px cards in a 1033px grid were laid out 2 + 1.
|
|
17
|
+
- `CardGrid`(`fit="stretch"`,`minItemWidth` 為 px 或 rem)不會讓一張卡片獨佔一列:卡片可縮到 `minItemWidth` 的 90% 以併入同列,欄數平均分配到各列(3 張 → 3;4 張 → 2 + 2;5 張 → 3 + 2)。先前三張 360px 卡片在 1033px 寬的格線中排成 2 + 1。
|
|
18
|
+
|
|
3
19
|
## 0.9.6 (2026-10-14)
|
|
4
20
|
|
|
5
21
|
Fixes from the 0.10.3 acceptance run, plus `InputGroup`, `CellText openLabel` and `Space wrap`. **Behavior change:** a floating `Dialog` keeps a 12px margin from the browser viewport and the DSM taskbar, so it can be up to 24px shorter; narrow label columns shrink to 40% of the row.
|
package/README.md
CHANGED
|
@@ -517,6 +517,25 @@ Use `pnpm check:fast` while developing (`SYNOPKGLAND_GATE_BASE` sets the base),
|
|
|
517
517
|
and `pnpm check` once before a release: the full run is the release gate.
|
|
518
518
|
`check` prints one line per passing task and a failing task's whole log.
|
|
519
519
|
|
|
520
|
+
With `SYNOPKGLAND_DOCKER_SSH=<ssh host>`, `pnpm check`, `check:fast` and
|
|
521
|
+
`check:polish` run on that host in Docker instead,
|
|
522
|
+
so a busy machine cannot time out their tests; this machine only sends the
|
|
523
|
+
working tree (untracked files included, `node_modules` and `dist` left out)
|
|
524
|
+
and waits. `scripts/docker-check.sh` runs them there in one of the host's two
|
|
525
|
+
gate slots, in the image `synopkgland-gate-frontend:<tag>` that
|
|
526
|
+
`scripts/gate.Dockerfile` describes (Node.js 24.20.0, pnpm 10.33.2, Debian's
|
|
527
|
+
Chromium and the Noto CJK fonts), after `pnpm install` from the shared
|
|
528
|
+
`synopkgland-cache-npm` volume. `check:polish` builds first and brings its
|
|
529
|
+
screenshots back to `.polish-shots`, even when it fails. Set
|
|
530
|
+
`SYNOPKGLAND_DOCKER_NPM_REGISTRY` when the host cannot reach
|
|
531
|
+
registry.npmjs.org (the lockfile's integrity still holds). Without
|
|
532
|
+
`SYNOPKGLAND_DOCKER_SSH` every check runs here, as before.
|
|
533
|
+
`check:local-browser` stays here with ego-browser: run there, with
|
|
534
|
+
Playwright's Chromium (`LOCAL_BROWSER=playwright`), as
|
|
535
|
+
`bash scripts/docker-check.sh --build --out .dsm-host-shots/local 'node scripts/app-local-browser.mjs'`,
|
|
536
|
+
its two default-modal checks "programmatic focus in A survives with B open"
|
|
537
|
+
fail, because Playwright keeps its page focused and ego-browser does not.
|
|
538
|
+
|
|
520
539
|
`pnpm check:host` serves `tests/dsm-host` and screenshots each overlay scene in
|
|
521
540
|
English and Traditional Chinese with headless Chrome (set `CHROME` to its path
|
|
522
541
|
if it is not in `/Applications`), with and without `host-simulation.css`, a
|
|
@@ -637,6 +656,9 @@ Release;既有版號只在 dry-run 放行。npm 11 在演練也會拒絕重複
|
|
|
637
656
|
手動 `dry_run: false` 會拒絕;正式發佈只能由推 tag 觸發。
|
|
638
657
|
Linux motion 使用 `MOTION_BROWSER=playwright`,本機預設 ego-browser 保留。
|
|
639
658
|
`check:local-browser` 需使用者的互動 ego-browser space,保留為本機驗收項。
|
|
659
|
+
設了 `SYNOPKGLAND_DOCKER_SSH` 時,`pnpm check`、`check:fast`、`check:polish`
|
|
660
|
+
改在該主機的 Docker(`synopkgland-gate-frontend` image、gate slot)跑,
|
|
661
|
+
本機只送工作樹並等待;未設時照舊在本機跑。`check:local-browser` 仍在本機用 ego-browser。
|
|
640
662
|
|
|
641
663
|
|
|
642
664
|
## Form controls and compact settings (0.5.7)
|
|
@@ -17,7 +17,7 @@ declare var __VLS_2: `cell-${string}`, __VLS_3: {
|
|
|
17
17
|
row: Record<string, unknown>;
|
|
18
18
|
value: unknown;
|
|
19
19
|
column: DataTableColumn;
|
|
20
|
-
},
|
|
20
|
+
}, __VLS_12: `cell-${string}`, __VLS_13: {
|
|
21
21
|
row: Record<string, unknown>;
|
|
22
22
|
value: unknown;
|
|
23
23
|
column: DataTableColumn;
|
|
@@ -25,7 +25,7 @@ declare var __VLS_2: `cell-${string}`, __VLS_3: {
|
|
|
25
25
|
type __VLS_Slots = {} & {
|
|
26
26
|
[K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
|
|
27
27
|
} & {
|
|
28
|
-
[K in NonNullable<typeof
|
|
28
|
+
[K in NonNullable<typeof __VLS_12>]?: (props: typeof __VLS_13) => any;
|
|
29
29
|
};
|
|
30
30
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
31
31
|
compact: boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { StyleValue } from 'vue';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
viewportClass?: string;
|
|
4
|
+
viewportStyle?: StyleValue;
|
|
5
|
+
};
|
|
6
|
+
declare var __VLS_1: {};
|
|
7
|
+
type __VLS_Slots = {} & {
|
|
8
|
+
default?: (props: typeof __VLS_1) => any;
|
|
9
|
+
};
|
|
10
|
+
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>;
|
|
11
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
12
|
+
declare const _default: typeof __VLS_export;
|
|
13
|
+
export default _default;
|
|
14
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
15
|
+
new (): {
|
|
16
|
+
$slots: S;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -3,7 +3,8 @@ type __VLS_Props = {
|
|
|
3
3
|
minItemWidth?: string;
|
|
4
4
|
gap?: string;
|
|
5
5
|
/**
|
|
6
|
-
* `'stretch'` (auto-fit) grows the cards to use the whole row
|
|
6
|
+
* `'stretch'` (auto-fit) grows the cards to use the whole row and, once
|
|
7
|
+
* measured, balances the rows so none holds a lone card; `'fill'`
|
|
7
8
|
* (auto-fill) keeps empty tracks, so a few cards stay at column width.
|
|
8
9
|
*/
|
|
9
10
|
fit?: 'stretch' | 'fill';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Columns for `count` cards in a `width`-wide grid, all in px: as many as fit
|
|
3
|
+
* at the minimum width, or one more if every card keeps 90% of it, then spread
|
|
4
|
+
* evenly over the rows it takes, so no row is left with a lone card
|
|
5
|
+
* (3 → 3, 4 → 2 + 2, 5 → 3 + 2). Unknown without a width or cards.
|
|
6
|
+
*/
|
|
7
|
+
export declare function cardGridColumns({ width, count, minItemWidth, gap }: {
|
|
8
|
+
width: number;
|
|
9
|
+
count: number;
|
|
10
|
+
minItemWidth: number;
|
|
11
|
+
gap: number;
|
|
12
|
+
}): number | undefined;
|
|
@@ -7,4 +7,5 @@ export type JustifyContentCss = AlignItemsCss | 'space-between' | 'space-around'
|
|
|
7
7
|
export declare function spaceGap(spacing: SpaceSpacing | number): string;
|
|
8
8
|
/** A row centres its items; a column stretches them, as SVC v11 does. */
|
|
9
9
|
export declare function spaceAlignItems(direction: SpaceDirection, alignItems: SpaceAlign | undefined): AlignItemsCss;
|
|
10
|
+
/** Items pack at the start of the line unless asked otherwise. */
|
|
10
11
|
export declare function spaceJustifyContent(justifyContent: SpaceJustify | undefined): JustifyContentCss;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ShallowRef } from 'vue';
|
|
2
|
+
/** Whether a horizontal scroller has more content before (`start`) or after
|
|
3
|
+
* (`end`) what it shows. Follows scrolling and size changes of the scroller
|
|
4
|
+
* and of its content. */
|
|
5
|
+
export declare function useScrollEdges(viewport: Readonly<ShallowRef<HTMLElement | null>>): {
|
|
6
|
+
start: import('vue').Ref<boolean, boolean>;
|
|
7
|
+
end: import('vue').Ref<boolean, boolean>;
|
|
8
|
+
};
|