@synopackageland/ui 0.25.15 → 0.25.17
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 +23 -0
- package/dist/components/app/app-layout/pageTitle.d.ts +6 -0
- package/dist/components/app/app-layout/shellBack.d.ts +4 -4
- package/dist/grid/host/controller.d.ts +9 -0
- package/dist/grid.js +1317 -1302
- package/dist/i18n/text.d.ts +1 -1
- package/dist/index.js +6060 -6046
- package/dist/json-preview/preview.js +4818 -4789
- package/dist/lib/nativeShell.d.ts +37 -5
- package/dist/reka-runtime.json +1 -1
- package/docs/adaptive-layout.md +40 -10
- package/docs/ux-grid.md +23 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.25.17 (2026-11-14)
|
|
6
|
+
|
|
7
|
+
### Grid
|
|
8
|
+
|
|
9
|
+
- **A click on the row number opens the record.** In `@synopackageland/ui/grid`, a mouse click on the row header outside its controls now emits `row-expand(row)`, the event the expand control and Space already send. The cursor there is a pointer. The checkbox keeps toggling the selection and never opens.
|
|
10
|
+
- Only when a `row-expand` listener is bound. Without one, the click keeps the old behaviour (nothing opens, the selection stays), so Apps that do not open records are unaffected.
|
|
11
|
+
- With only a `checkbox` control, the checkbox covers the number, so a click there still selects.
|
|
12
|
+
- `GridHostController` takes an optional `canExpandRow()` hook, asked at click time.
|
|
13
|
+
- Touch is unchanged: a tap on the row header follows the finger rules.
|
|
14
|
+
|
|
15
|
+
## 0.25.16 (2026-11-14)
|
|
16
|
+
|
|
17
|
+
### Phone shell
|
|
18
|
+
|
|
19
|
+
- **Home in the browser launcher too, and drawn as Home.** Inside the Package Land launcher, the button now shows in the browser build as well as in the phone app.
|
|
20
|
+
- The browser launcher names the App's frame `synopkg-shell:1:close`, and a tap posts `{ v: 1, type: 'close' }` to the parent at the page's own origin.
|
|
21
|
+
- The button is now a home icon labelled Home, matching the launcher's own bars. It was a back arrow labelled "Back to apps".
|
|
22
|
+
- **Inside the launcher, every page leads with Home; Back is the system one.**
|
|
23
|
+
- A sub-page (AppLayout `back`, a `PageHeader` with `back`, a pushed page) shows Home before its title instead of the Back arrow.
|
|
24
|
+
- Each sub-page is a history entry of the App, so the system Back steps through sub-pages before the launcher leaves the App. Android's back and the browser's back or swipe both work this way.
|
|
25
|
+
- A pushed page keeps its single entry.
|
|
26
|
+
- Outside the launcher, sub-pages keep their Back arrow and take no entry.
|
|
27
|
+
|
|
5
28
|
## 0.25.15 (2026-11-13)
|
|
6
29
|
|
|
7
30
|
### Tags
|
|
@@ -15,6 +15,11 @@ interface PageTitleEntry {
|
|
|
15
15
|
* AppLayout's own `title` says: the page and its way back are one row.
|
|
16
16
|
*/
|
|
17
17
|
back?: () => void;
|
|
18
|
+
/**
|
|
19
|
+
* The sub-page already owns a history entry (a pushed page), so the
|
|
20
|
+
* browser's Back reaches it without another one from the layout.
|
|
21
|
+
*/
|
|
22
|
+
history?: boolean;
|
|
18
23
|
}
|
|
19
24
|
/**
|
|
20
25
|
* The bar's page title (the phone bar, or the bar of a short screen). A
|
|
@@ -75,6 +80,7 @@ export declare function createPageTitleHost(main: Readonly<Ref<HTMLElement | nul
|
|
|
75
80
|
export declare function usePageTitle(element: Readonly<Ref<HTMLElement | null>>, title: () => string, options?: {
|
|
76
81
|
back?: () => (() => void) | undefined;
|
|
77
82
|
when?: () => boolean;
|
|
83
|
+
history?: boolean;
|
|
78
84
|
}): ComputedRef<boolean>;
|
|
79
85
|
/**
|
|
80
86
|
* Where a component's actions render on a phone: the phone bar or the FAB
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { ComputedRef, InjectionKey, Ref } from 'vue';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Home in the Package Land launcher, the phone app or its browser build
|
|
4
|
+
* (docs/adaptive-layout.md). On a root page AppLayout leads its phone bar with it. When that bar
|
|
5
5
|
* is not drawn (a tab page with `phone-bar-title="none"` and nothing else in
|
|
6
6
|
* the bar), the page's first row takes it instead: the first PageToolbar,
|
|
7
7
|
* SectionTabs row or PageHeader in the page, in document order, so it costs
|
|
8
8
|
* no row of its own. With no such row the bar is drawn for it.
|
|
9
9
|
*/
|
|
10
10
|
export interface ShellBackHost {
|
|
11
|
-
/** The page's first row should lead with
|
|
11
|
+
/** The page's first row should lead with Home. */
|
|
12
12
|
readonly wanted: Readonly<Ref<boolean>>;
|
|
13
13
|
/** The row that holds Back now (its registration), if any. */
|
|
14
14
|
readonly owner: Readonly<Ref<symbol | undefined>>;
|
|
@@ -19,5 +19,5 @@ export interface ShellBackHost {
|
|
|
19
19
|
export declare const APP_SHELL_BACK_KEY: InjectionKey<ShellBackHost>;
|
|
20
20
|
/** AppLayout's side: the rows that could hold Back, and the one that does. */
|
|
21
21
|
export declare function createShellBackHost(wanted: Readonly<Ref<boolean>>): ShellBackHost;
|
|
22
|
-
/** A row's side: true while this row leads with
|
|
22
|
+
/** A row's side: true while this row leads with Home. */
|
|
23
23
|
export declare function useShellBackRow(element: () => HTMLElement | null | undefined): ComputedRef<boolean>;
|
|
@@ -48,6 +48,13 @@ export interface GridHostHooks {
|
|
|
48
48
|
clearRequest: (selection: GridSelectionState) => void;
|
|
49
49
|
/** Open the row's record. `columnIndex`: the tapped field, on a phone (scroll the record to it). */
|
|
50
50
|
rowExpand: (rowIndex: number, columnIndex?: number) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Whether anyone opens records (`GridHost`: a `row-expand` listener is
|
|
53
|
+
* bound). True: a click on the row header outside its controls (on the row
|
|
54
|
+
* number) opens the record. False or absent: that click selects nothing and
|
|
55
|
+
* opens nothing, as before.
|
|
56
|
+
*/
|
|
57
|
+
canExpandRow?: () => boolean;
|
|
51
58
|
headerMenu: (columnIndex: number, rect: GridRect) => void;
|
|
52
59
|
columnResize: (columnIndex: number, width: number, done: boolean) => void;
|
|
53
60
|
reorder: (kind: 'columns' | 'rows', ranges: readonly GridRange[], dropIndex: number) => void;
|
|
@@ -158,6 +165,8 @@ export declare class GridHostController {
|
|
|
158
165
|
private get isFillEnabled();
|
|
159
166
|
/** No resize handle on touch: a 5 px edge is no finger target. */
|
|
160
167
|
private get isResizeEnabled();
|
|
168
|
+
/** A click on the row number opens the record (someone listens for `rowExpand`). */
|
|
169
|
+
private get canExpandRow();
|
|
161
170
|
/** True while the fill handle is dragged. */
|
|
162
171
|
get isFilling(): boolean;
|
|
163
172
|
/**
|