@synopackageland/ui 0.25.10 → 0.25.12
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 +24 -0
- package/dist/components/app/app-layout/BackArrowIcon.vue.d.ts +8 -0
- package/dist/components/app/app-layout/MovableActions.d.ts +35 -0
- package/dist/components/app/app-layout/ShellBackButton.vue.d.ts +3 -0
- package/dist/components/app/app-layout/back-arrow.json.d.ts +9 -0
- package/dist/components/app/app-layout/shellBack.d.ts +23 -0
- package/dist/components/app/page-header/PageHeader.vue.d.ts +1 -3
- package/dist/components/app/page-toolbar/PageToolbar.vue.d.ts +3 -3
- package/dist/components/app/section-tabs/SectionTabs.vue.d.ts +4 -4
- package/dist/grid.js +9 -0
- package/dist/i18n/text.d.ts +1 -0
- package/dist/index.js +10484 -10323
- package/dist/json-preview/preview.js +7820 -7665
- package/dist/lib/nativeShell.d.ts +8 -0
- 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/adaptive-layout.md +12 -0
- package/docs/button-policy.md +1 -1
- package/docs/layout-rules.md +1 -1
- package/docs/mobile-native.md +24 -1
- package/package.json +97 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.25.12 (2026-11-12)
|
|
6
|
+
|
|
7
|
+
### Phone
|
|
8
|
+
|
|
9
|
+
- **Back to the App list inside the Package Land phone app.** On a root page in the phone app (its bridge lists the `close` feature), the phone bar starts with a back arrow that asks the app to return to its App list; a browser, a sub-page and wider layouts never show it. When the page hides the bar, the first PageToolbar or SectionTabs row holds the button, so it costs no extra row; with no such row the bar is drawn for it. Apps need no change (docs/adaptive-layout.md)
|
|
10
|
+
- **A sub-page's Back draws the shared arrow** instead of a chevron, matching the phone app's Back, and both Back buttons tint while pressed
|
|
11
|
+
|
|
12
|
+
## 0.25.11 (2026-11-12)
|
|
13
|
+
|
|
14
|
+
### Phone layout
|
|
15
|
+
|
|
16
|
+
- **The soft keyboard stays up on Android.** AppRoot's focus handling called `focus()` on every pressed control during pointerdown. On Android Chrome and WebView, focusing a text field from script before the tap's own mousedown hides the keyboard it has just raised, and focus moves to the app root about 150ms later, so a chat composer could not be typed into. A press on a text field or inside editable content is now left to the browser; buttons, links and other controls are focused as before. Apps need no change
|
|
17
|
+
- **Equal left and right margins on a touch phone.** The UI's styled `::-webkit-scrollbar` made Chromium (Android included) draw a classic 10px scrollbar inside every scroller, so pages, lists and toolbars ran 10px past the right margin. The webkit bar rules now apply only with a fine pointer; touch keeps the overlay bar, and Select and Combobox lists a thin one
|
|
18
|
+
- **A natural-height list keeps its full width in a flex row.** The phone natural-height chain (`flex: 0 0 auto`, 0.25.8) shrank a pane in a flex row such as `ListDetail` to its content, so a list took half the screen. It now stretches to the row (`inline-size: stretch`), also in a flush BottomSheet
|
|
19
|
+
- **Only actions float.** PageHeader, AppToolbar and PushTransition keep their actions in the page's own row, with no FAB or bar icons, while the actions hold anything that is not an action: a status badge, a count, a field. This includes content an App shell teleports in later. A status no longer floats as a pill over the list. Put a page's status in its meta (the SDK `PageInfo`)
|
|
20
|
+
- **Toolbar actions wrap.** AppToolbar's actions row wraps within the page instead of pushing it into horizontal scroll
|
|
21
|
+
- **Segmented controls of up to four segments are not cut.** A label wider than its share grows its column, and labels too wide together scroll the track sideways; none ends in an ellipsis
|
|
22
|
+
- **A search field fills its row on a phone.** `SearchField` (now `data-ui-search-field`), alone or in a wrapper holding only it, grows to its row and ignores a fixed basis or `max-width`
|
|
23
|
+
- **A DataGrid group title wraps in list mode.** A `#group-title` slot was wrapped in a `truncate` span, so a title with its own links ran over them on a narrow screen. It now wraps
|
|
24
|
+
|
|
25
|
+
### Docs
|
|
26
|
+
|
|
27
|
+
- Button policy and layout rules: a page's header actions (the SDK `AppShell`'s `#actions`, `PageHeader` `#actions`) hold only the page's own actions, such as Add. There is no page-wide refresh: a page reads its data again on `ctx.reopen` and when it is shown, and a failed read puts Retry next to its error. The demos no longer show one
|
|
28
|
+
|
|
5
29
|
## 0.25.10 (2026-11-12)
|
|
6
30
|
|
|
7
31
|
### Aside
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
size?: 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
|
+
size: number;
|
|
6
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { PropType, VNode } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* True when `node` shows something that is not an action: text outside a
|
|
4
|
+
* button (a status badge, a count, a date) or a field. Neither belongs in a
|
|
5
|
+
* floating button or the 44px bar: there it would float over the page's rows.
|
|
6
|
+
*/
|
|
7
|
+
export declare function showsPassiveContent(node: Node): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* A page's actions on a phone (PageHeader, AppToolbar, PushTransition): in
|
|
10
|
+
* place, or teleported to `to` (the FAB or the phone bar). It reports
|
|
11
|
+
* `passive` while the actions hold anything that is not an action, whichever
|
|
12
|
+
* place they are in, so the owner keeps them in its own row and they never
|
|
13
|
+
* float over the page. Content that arrives later (a teleport of the App's
|
|
14
|
+
* own, as an App shell's page actions) is watched too.
|
|
15
|
+
*/
|
|
16
|
+
declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
17
|
+
to: {
|
|
18
|
+
type: PropType<HTMLElement | null>;
|
|
19
|
+
default: null;
|
|
20
|
+
};
|
|
21
|
+
}>, () => VNode<import('vue').RendererNode, import('vue').RendererElement, {
|
|
22
|
+
[key: string]: any;
|
|
23
|
+
}>, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
24
|
+
passive: (value: boolean) => boolean;
|
|
25
|
+
}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
26
|
+
to: {
|
|
27
|
+
type: PropType<HTMLElement | null>;
|
|
28
|
+
default: null;
|
|
29
|
+
};
|
|
30
|
+
}>> & Readonly<{
|
|
31
|
+
onPassive?: ((value: boolean) => any) | undefined;
|
|
32
|
+
}>, {
|
|
33
|
+
to: HTMLElement | null;
|
|
34
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
35
|
+
export default _default;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComputedRef, InjectionKey, Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Back to the phone app's App list (docs/mobile-native.md, "Back to the App
|
|
4
|
+
* list"). On a root page AppLayout leads its phone bar with it. When that bar
|
|
5
|
+
* is not drawn (a tab page with `phone-bar-title="none"` and nothing else in
|
|
6
|
+
* the bar), the page's first row takes it instead: the first PageToolbar,
|
|
7
|
+
* SectionTabs row or PageHeader in the page, in document order, so it costs
|
|
8
|
+
* no row of its own. With no such row the bar is drawn for it.
|
|
9
|
+
*/
|
|
10
|
+
export interface ShellBackHost {
|
|
11
|
+
/** The page's first row should lead with Back. */
|
|
12
|
+
readonly wanted: Readonly<Ref<boolean>>;
|
|
13
|
+
/** The row that holds Back now (its registration), if any. */
|
|
14
|
+
readonly owner: Readonly<Ref<symbol | undefined>>;
|
|
15
|
+
/** Registers a row by a stable key, so a row whose element changes keeps its turn. */
|
|
16
|
+
register(key: symbol, element: () => HTMLElement | null | undefined): () => void;
|
|
17
|
+
refresh(): void;
|
|
18
|
+
}
|
|
19
|
+
export declare const APP_SHELL_BACK_KEY: InjectionKey<ShellBackHost>;
|
|
20
|
+
/** AppLayout's side: the rows that could hold Back, and the one that does. */
|
|
21
|
+
export declare function createShellBackHost(wanted: Readonly<Ref<boolean>>): ShellBackHost;
|
|
22
|
+
/** A row's side: true while this row leads with Back. */
|
|
23
|
+
export declare function useShellBackRow(element: () => HTMLElement | null | undefined): ComputedRef<boolean>;
|
|
@@ -8,11 +8,9 @@ type __VLS_Props = {
|
|
|
8
8
|
/** Where `#actions` go on a phone: `fab`, `bar` or `inline` (this header's row). Defaults to AppLayout's `phone-actions`. */
|
|
9
9
|
phoneActions?: PhoneActionsPlacement;
|
|
10
10
|
};
|
|
11
|
-
declare var __VLS_19: {},
|
|
11
|
+
declare var __VLS_19: {}, __VLS_29: {};
|
|
12
12
|
type __VLS_Slots = {} & {
|
|
13
13
|
meta?: (props: typeof __VLS_19) => any;
|
|
14
|
-
} & {
|
|
15
|
-
actions?: (props: typeof __VLS_27) => any;
|
|
16
14
|
} & {
|
|
17
15
|
actions?: (props: typeof __VLS_29) => any;
|
|
18
16
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
declare var
|
|
1
|
+
declare var __VLS_6: {}, __VLS_8: {};
|
|
2
2
|
type __VLS_Slots = {} & {
|
|
3
|
-
default?: (props: typeof
|
|
3
|
+
default?: (props: typeof __VLS_6) => any;
|
|
4
4
|
} & {
|
|
5
|
-
actions?: (props: typeof
|
|
5
|
+
actions?: (props: typeof __VLS_8) => any;
|
|
6
6
|
};
|
|
7
7
|
declare const __VLS_base: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
8
8
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -31,15 +31,15 @@ type __VLS_Props = {
|
|
|
31
31
|
/** On a phone's section list, whether the selected section is pushed (`v-model:pushed`). */
|
|
32
32
|
pushed?: boolean;
|
|
33
33
|
};
|
|
34
|
-
declare var __VLS_8: {},
|
|
34
|
+
declare var __VLS_8: {}, __VLS_42: {}, __VLS_51: `panel-${string}`, __VLS_52: {}, __VLS_55: `panel-${string}`, __VLS_56: {};
|
|
35
35
|
type __VLS_Slots = {} & {
|
|
36
|
-
[K in NonNullable<typeof
|
|
36
|
+
[K in NonNullable<typeof __VLS_51>]?: (props: typeof __VLS_52) => any;
|
|
37
37
|
} & {
|
|
38
|
-
[K in NonNullable<typeof
|
|
38
|
+
[K in NonNullable<typeof __VLS_55>]?: (props: typeof __VLS_56) => any;
|
|
39
39
|
} & {
|
|
40
40
|
actions?: (props: typeof __VLS_8) => any;
|
|
41
41
|
} & {
|
|
42
|
-
actions?: (props: typeof
|
|
42
|
+
actions?: (props: typeof __VLS_42) => any;
|
|
43
43
|
};
|
|
44
44
|
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
45
45
|
"update:modelValue": (value: string) => any;
|
package/dist/grid.js
CHANGED
|
@@ -3952,6 +3952,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
3952
3952
|
"Free now {now}, free after {after}": "Free now {now}, free after {after}",
|
|
3953
3953
|
Sections: "Sections",
|
|
3954
3954
|
"Back to the previous page": "Back",
|
|
3955
|
+
"Back to the App list": "Back to apps",
|
|
3955
3956
|
"Page actions": "Page actions",
|
|
3956
3957
|
Slider: "Slider",
|
|
3957
3958
|
"Increase value": "Increase value",
|
|
@@ -4215,6 +4216,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
4215
4216
|
"Free now {now}, free after {after}": "目前可用 {now},清理後可用 {after}",
|
|
4216
4217
|
Sections: "區段",
|
|
4217
4218
|
"Back to the previous page": "返回",
|
|
4219
|
+
"Back to the App list": "返回 App 列表",
|
|
4218
4220
|
"Page actions": "頁面動作",
|
|
4219
4221
|
Slider: "滑桿",
|
|
4220
4222
|
"Increase value": "增加數值",
|
|
@@ -4477,6 +4479,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
4477
4479
|
"Free now {now}, free after {after}": "当前可用 {now},清理后可用 {after}",
|
|
4478
4480
|
Sections: "区段",
|
|
4479
4481
|
"Back to the previous page": "返回",
|
|
4482
|
+
"Back to the App list": "返回应用列表",
|
|
4480
4483
|
"Page actions": "页面操作",
|
|
4481
4484
|
Slider: "滑块",
|
|
4482
4485
|
"Increase value": "增加数值",
|
|
@@ -4739,6 +4742,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
4739
4742
|
"Free now {now}, free after {after}": "現在の空き {now}、解放後の空き {after}",
|
|
4740
4743
|
Sections: "セクション",
|
|
4741
4744
|
"Back to the previous page": "戻る",
|
|
4745
|
+
"Back to the App list": "アプリ一覧に戻る",
|
|
4742
4746
|
"Page actions": "ページの操作",
|
|
4743
4747
|
Slider: "スライダー",
|
|
4744
4748
|
"Increase value": "値を増やす",
|
|
@@ -5001,6 +5005,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
5001
5005
|
"Free now {now}, free after {after}": "현재 여유 공간 {now}, 정리 후 여유 공간 {after}",
|
|
5002
5006
|
Sections: "섹션",
|
|
5003
5007
|
"Back to the previous page": "뒤로",
|
|
5008
|
+
"Back to the App list": "앱 목록으로 돌아가기",
|
|
5004
5009
|
"Page actions": "페이지 작업",
|
|
5005
5010
|
Slider: "슬라이더",
|
|
5006
5011
|
"Increase value": "값 증가",
|
|
@@ -5263,6 +5268,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
5263
5268
|
"Free now {now}, free after {after}": "Jetzt frei {now}, danach frei {after}",
|
|
5264
5269
|
Sections: "Abschnitte",
|
|
5265
5270
|
"Back to the previous page": "Zurück",
|
|
5271
|
+
"Back to the App list": "Zurück zu den Apps",
|
|
5266
5272
|
"Page actions": "Seitenaktionen",
|
|
5267
5273
|
Slider: "Schieberegler",
|
|
5268
5274
|
"Increase value": "Wert erhöhen",
|
|
@@ -5525,6 +5531,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
5525
5531
|
"Free now {now}, free after {after}": "Libre maintenant {now}, libre ensuite {after}",
|
|
5526
5532
|
Sections: "Sections",
|
|
5527
5533
|
"Back to the previous page": "Retour",
|
|
5534
|
+
"Back to the App list": "Retour aux applications",
|
|
5528
5535
|
"Page actions": "Actions de la page",
|
|
5529
5536
|
Slider: "Curseur",
|
|
5530
5537
|
"Increase value": "Augmenter la valeur",
|
|
@@ -5787,6 +5794,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
5787
5794
|
"Free now {now}, free after {after}": "Libre ahora {now}, libre después {after}",
|
|
5788
5795
|
Sections: "Secciones",
|
|
5789
5796
|
"Back to the previous page": "Atrás",
|
|
5797
|
+
"Back to the App list": "Volver a las aplicaciones",
|
|
5790
5798
|
"Page actions": "Acciones de la página",
|
|
5791
5799
|
Slider: "Control deslizante",
|
|
5792
5800
|
"Increase value": "Aumentar valor",
|
|
@@ -6049,6 +6057,7 @@ const qe = (e, t) => e.x >= t.x && e.x < t.x + t.width && e.y >= t.y && e.y < t.
|
|
|
6049
6057
|
"Free now {now}, free after {after}": "Libero ora {now}, libero dopo {after}",
|
|
6050
6058
|
Sections: "Sezioni",
|
|
6051
6059
|
"Back to the previous page": "Indietro",
|
|
6060
|
+
"Back to the App list": "Torna alle app",
|
|
6052
6061
|
"Page actions": "Azioni della pagina",
|
|
6053
6062
|
Slider: "Cursore",
|
|
6054
6063
|
"Increase value": "Aumenta valore",
|
package/dist/i18n/text.d.ts
CHANGED
|
@@ -106,6 +106,7 @@ export declare const englishUiText: {
|
|
|
106
106
|
readonly "Free now {now}, free after {after}": "Free now {now}, free after {after}";
|
|
107
107
|
readonly Sections: "Sections";
|
|
108
108
|
readonly "Back to the previous page": "Back";
|
|
109
|
+
readonly "Back to the App list": "Back to apps";
|
|
109
110
|
readonly "Page actions": "Page actions";
|
|
110
111
|
readonly Slider: "Slider";
|
|
111
112
|
readonly "Increase value": "Increase value";
|