@graview/embed 0.1.14 → 0.1.16
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/README.md +58 -18
- package/dist/address.d.ts +9 -8
- package/dist/address.d.ts.map +1 -1
- package/dist/address.js +32 -21
- package/dist/address.js.map +1 -1
- package/dist/embed.d.ts +39 -20
- package/dist/embed.d.ts.map +1 -1
- package/dist/embed.js +164 -61
- package/dist/embed.js.map +1 -1
- package/dist/fonts.d.ts +1 -1
- package/dist/fonts.d.ts.map +1 -1
- package/dist/fonts.js +3 -1
- package/dist/fonts.js.map +1 -1
- package/dist/frame.d.ts +66 -29
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +56 -80
- package/dist/frame.js.map +1 -1
- package/dist/pages-content.d.ts +10 -1
- package/dist/pages-content.d.ts.map +1 -1
- package/dist/pages-content.js +28 -21
- package/dist/pages-content.js.map +1 -1
- package/dist/pages.d.ts +11 -4
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +18 -5
- package/dist/pages.js.map +1 -1
- package/dist/picture-face.d.ts +2 -1
- package/dist/picture-face.d.ts.map +1 -1
- package/dist/picture-face.js +8 -4
- package/dist/picture-face.js.map +1 -1
- package/dist/scene-face.d.ts +2 -4
- package/dist/scene-face.d.ts.map +1 -1
- package/dist/scene-face.js +11 -7
- package/dist/scene-face.js.map +1 -1
- package/dist/where.d.ts +4 -3
- package/dist/where.d.ts.map +1 -1
- package/dist/where.js +3 -2
- package/dist/where.js.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Mount a declared Graview app into any element — a paragraph of a docs page, a
|
|
4
4
|
card on a dashboard, a preview in a builder — without the Shell, sized to the
|
|
5
|
-
element, themed within it,
|
|
5
|
+
element, themed within it, under one app bar.
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
8
|
import { mount } from "@graview/embed";
|
|
@@ -13,19 +13,44 @@ const handle = mount(document.querySelector("#garden")!, {
|
|
|
13
13
|
face: "graview", // "scene" | "graview" | "pages" | "picture" — one named lens, no chrome: stop "#view=<place>"
|
|
14
14
|
stop: "#focus=plot-1", // the scene's view state, as its URL fragment
|
|
15
15
|
principal: { kind: "human", id: "june", roles: ["coordinator"] },
|
|
16
|
-
|
|
16
|
+
bar: true, // the app bar over every face (the default)
|
|
17
17
|
});
|
|
18
18
|
|
|
19
|
-
handle.
|
|
19
|
+
handle.setPath("/plots"); // a place: the plots' list, at the element's width
|
|
20
|
+
handle.setPath("/places/overview"); // the overview: the scene
|
|
20
21
|
handle.setStop("#overview=1&expand=kind:plot");
|
|
21
22
|
handle.unmount();
|
|
22
23
|
```
|
|
23
24
|
|
|
24
25
|
`<Embed {...options} />` is the same thing as a React component.
|
|
25
26
|
|
|
27
|
+
## The app bar
|
|
28
|
+
|
|
29
|
+
One bar stands over every face (FR-131). At the left, the app: its mark —
|
|
30
|
+
the brand's logo, when the document has one — and its name, said once, as
|
|
31
|
+
the page's heading (`heading`: `1` when the host's page is the app, `2`, the
|
|
32
|
+
default, inside an article, `false` when the host's own heading says it),
|
|
33
|
+
and the way home. Then the app's places as plain tabs, the one you are on
|
|
34
|
+
marked (`aria-current`), and what the row cannot hold under "More": the
|
|
35
|
+
overview, each named picture, each kind's list, and how the kinds connect.
|
|
36
|
+
At the right, three tools of one size: Find (inline; ⌘K or Ctrl+K on a
|
|
37
|
+
desk, a magnifier that opens the box on a phone), the standing (a dot in the
|
|
38
|
+
tone of the rules, a number only when one is broken, opening what is broken;
|
|
39
|
+
its name says "Everything is in order" otherwise), and the person (an avatar
|
|
40
|
+
whose menu holds who is signed in, the seats, the host's own actions and,
|
|
41
|
+
for whoever keeps the app, the installation and the studio). On a desk it
|
|
42
|
+
is one row; on a phone the places take a second.
|
|
43
|
+
|
|
44
|
+
THE SCENE IS A PLACE (FR-132): the overview, a tab beside the others —
|
|
45
|
+
"Overview" unless the declaration calls it something else (`pages: {
|
|
46
|
+
overview: "The farm" }`), at `/places/overview` whatever it is called.
|
|
47
|
+
Choosing it draws the scene under the same bar; any other tab draws that
|
|
48
|
+
page. Nothing says "Scene" or "Pages". `bar: false` draws none of it, for a
|
|
49
|
+
host whose own page already says all of that.
|
|
50
|
+
|
|
26
51
|
## What a page loads first
|
|
27
52
|
|
|
28
|
-
The frame — the element's region, its theme, the
|
|
53
|
+
The frame — the element's region, its theme, the app bar, the provider — is
|
|
29
54
|
on the page when `mount` returns. Each face is a chunk of its own, fetched
|
|
30
55
|
the first time it is drawn: a page that opens on the pages never loads the
|
|
31
56
|
scene, one that opens on the scene never loads the router, and the
|
|
@@ -49,12 +74,16 @@ const handle = mount(root, { app, face }); // drawn in this commit
|
|
|
49
74
|
```
|
|
50
75
|
|
|
51
76
|
What this asks of the framework, and what it adds: the theme scopes to the
|
|
52
|
-
element (`themeBaseCss(scheme, brand, { scope })`, and the
|
|
53
|
-
`
|
|
77
|
+
element (`themeBaseCss(scheme, brand, { scope })`, and the blocks a view is
|
|
78
|
+
drawn with, `viewsCss`, and the scene's own rules, `sceneCss`, drawn by the
|
|
79
|
+
face that needs them beside it) rather than the document, every
|
|
54
80
|
rule of it held inside that element, so nothing of the host's is restyled; the
|
|
55
81
|
panes size against the picture's own box (`cqh`) rather than the viewport;
|
|
56
82
|
the routed face runs on a memory router, so the host page's address is never
|
|
57
|
-
touched (unless the host's page is the app: see below); the brand's fonts are fetched by the embed rather than assumed. The
|
|
83
|
+
touched (unless the host's page is the app: see below); the brand's fonts are fetched by the embed rather than assumed. The page's icon is
|
|
84
|
+
the host's: only a host whose page is the app passes `favicon: true` to wear
|
|
85
|
+
the brand's (FR-124), and an app that prefers dark is drawn dark until the host
|
|
86
|
+
stamps a scheme of its own. The
|
|
58
87
|
store is in memory and starts from the seed on every mount, unless the host
|
|
59
88
|
hands it one.
|
|
60
89
|
|
|
@@ -80,14 +109,15 @@ Shell spells it:
|
|
|
80
109
|
| Address | Drawn |
|
|
81
110
|
|---|---|
|
|
82
111
|
| `/apps/a1/places/the-board`, `/apps/a1/tasks/t1` | the routed face, at that page |
|
|
83
|
-
| `/apps/a1#
|
|
84
|
-
| `/apps/a1` | the
|
|
112
|
+
| `/apps/a1/places/overview#focus=t1`, `/apps/a1/places/overview#overview=1` | the overview: the scene, at that stop (the Graview at altitude) |
|
|
113
|
+
| `/apps/a1#focus=t1` | the scene too — a link written before the scene was a place — tidied on arrival to the overview's address |
|
|
114
|
+
| `/apps/a1` | the routed face's home, or on arrival the host's `face` (the Graview or the scene land on the overview's address) |
|
|
85
115
|
|
|
86
116
|
Each page the routed face opens is pushed, and Back returns. The scene
|
|
87
117
|
keeps its stop in the fragment the way the Shell does: a step is pushed,
|
|
88
|
-
moving the furniture replaces.
|
|
89
|
-
|
|
90
|
-
|
|
118
|
+
moving the furniture replaces. A tab pushes the address of the place it goes
|
|
119
|
+
to, the overview's included, so Back undoes it. A reload stays where it
|
|
120
|
+
was. `faceAtAddress(options)`
|
|
91
121
|
is the face an address opens on, for a host that renders `<Embed>` itself.
|
|
92
122
|
`placesOf(app)` gives each place's `address` within the app, and
|
|
93
123
|
`addressOf(place, { basePath })` from `@graview/core` gives it under the
|
|
@@ -96,9 +126,11 @@ base, spelled as the face's own links are (`pathWithin` reads one back).
|
|
|
96
126
|
`routing: "memory"`, the default, is for somebody else's page: it never
|
|
97
127
|
writes `history` and leaves `location` as it was. A host that keeps its
|
|
98
128
|
own history stays on memory routing: `onNavigate(path, how)` is told each
|
|
99
|
-
|
|
100
|
-
`"replace"` or `"pop"`), and `handle.setPath(path)`
|
|
101
|
-
when the host's own Back arrives
|
|
129
|
+
place the reader goes to (the path within the app — `/places/overview` for
|
|
130
|
+
the scene — and `"push"`, `"replace"` or `"pop"`), and `handle.setPath(path)`
|
|
131
|
+
sends the reader back to one when the host's own Back arrives: the
|
|
132
|
+
overview's path draws the scene, any other the page. `where().path` is the
|
|
133
|
+
place's path the same way.
|
|
102
134
|
|
|
103
135
|
## When the declaration changes
|
|
104
136
|
|
|
@@ -122,6 +154,14 @@ the scheme, the brand and the notices stay; the faces are drawn again, so
|
|
|
122
154
|
an open menu, a scroll position and a half-typed field do not. `drawn()`
|
|
123
155
|
resolves once the new app is on the page.
|
|
124
156
|
|
|
157
|
+
A renamed app says its new name at once (FR-128). A `label` that was the
|
|
158
|
+
app's own name — as a host that mounts with `label: app.name` gives it —
|
|
159
|
+
follows the new app: the embed's accessible name and each landmark inside
|
|
160
|
+
say the new name, and the bar's name — its heading — is the new app's. A label the host chose ("Chapter 13") stays;
|
|
161
|
+
`setApp(app, store, { label })` gives another, and `handle.setLabel(label)`
|
|
162
|
+
renames the embed in place. `handle.setHostActions(actions)` changes the
|
|
163
|
+
host's own actions in the profile menu the same way.
|
|
164
|
+
|
|
125
165
|
A host that must remount reads the place first and hands it back:
|
|
126
166
|
|
|
127
167
|
```ts
|
|
@@ -148,7 +188,7 @@ the embed reads the rung it means rather than guessing a number.
|
|
|
148
188
|
## The host's own actions
|
|
149
189
|
|
|
150
190
|
A host's links about the app and the person — "Change the app", "Your
|
|
151
|
-
apps", "Report this app" — go in the
|
|
191
|
+
apps", "Report this app" — go in the person's menu on the app bar, under who is
|
|
152
192
|
signed in, rather than in a menu of the host's own laid over the scene:
|
|
153
193
|
|
|
154
194
|
```ts
|
|
@@ -231,7 +271,7 @@ mount(root, {
|
|
|
231
271
|
});
|
|
232
272
|
```
|
|
233
273
|
|
|
234
|
-
A view, a page, the
|
|
274
|
+
A view, a page, the bar or the studio that throws is contained where it
|
|
235
275
|
threw: it says it could not draw and offers to try again, and the rest of
|
|
236
276
|
the embed keeps working. The host is told the error's class (a TypeError,
|
|
237
277
|
a `GraphError`) and the framework module that caught it, never the message,
|
|
@@ -240,7 +280,7 @@ how many milliseconds it took.
|
|
|
240
280
|
|
|
241
281
|
## What the host can keep
|
|
242
282
|
|
|
243
|
-
The Studio is on the
|
|
283
|
+
The Studio is in the person's menu on the overview for the seat that keeps the app, and writes
|
|
244
284
|
through a dev server's door or hands over files. A host whose readers
|
|
245
285
|
cannot save a declaration leaves it off, or keeps what it applies:
|
|
246
286
|
|
package/dist/address.d.ts
CHANGED
|
@@ -4,30 +4,31 @@ import type { EmbedFace, FrameOptions } from "./frame.js";
|
|
|
4
4
|
/**
|
|
5
5
|
* THE FACE AN EMBED OPENS ON (FR-106): under memory routing, the host's
|
|
6
6
|
* (`face`, else the one its `stop` implies); under address routing, the one
|
|
7
|
-
* the address names —
|
|
8
|
-
* at the home
|
|
7
|
+
* the address names — the overview's place is the scene (FR-132), any other
|
|
8
|
+
* page the routed face, a fragment at the home the scene's stop — and the
|
|
9
|
+
* host's when it names none.
|
|
9
10
|
* `mount` asks this itself; a host that renders `<Embed>` passes it as `face`.
|
|
10
11
|
*/
|
|
11
12
|
export declare function faceAtAddress(options: Pick<FrameOptions, "routing" | "basePath"> & {
|
|
12
13
|
readonly face?: EmbedFace;
|
|
13
14
|
readonly stop?: string;
|
|
14
15
|
}): EmbedFace;
|
|
15
|
-
/** The stop the address holds for the scene on arrival, if it holds one. */
|
|
16
|
+
/** The stop the address holds for the scene on arrival, if it holds one: on the overview's address, or the home's. */
|
|
16
17
|
export declare function stopAtAddress(basePath: string | undefined): string | undefined;
|
|
17
18
|
/**
|
|
18
19
|
* Keeps the face in step with the address: Back and Forward move between
|
|
19
|
-
* the routed face and the
|
|
20
|
-
*
|
|
20
|
+
* the routed face and the overview, and the bar pushes the address of the
|
|
21
|
+
* place it goes to. Inside the provider; the scene's own fragment sync
|
|
21
22
|
* (`UrlSync`) is drawn by the scene face, so it is fetched with the scene.
|
|
22
23
|
*/
|
|
23
24
|
export declare function AddressBar({ basePath, pagesWere, shown, onFace, toggle, kinds, places, }: {
|
|
24
25
|
readonly basePath: string | undefined;
|
|
25
|
-
/** The page the routed face had before a new declaration (FR-116),
|
|
26
|
+
/** The page the routed face had before a new declaration (FR-116), to go back to. */
|
|
26
27
|
readonly pagesWere?: string | undefined;
|
|
27
28
|
readonly shown: EmbedFace;
|
|
28
29
|
readonly onFace: ((face: EmbedFace) => void) | undefined;
|
|
29
|
-
/** Where the
|
|
30
|
-
readonly toggle: MutableRefObject<((face: EmbedFace) => void) | undefined>;
|
|
30
|
+
/** Where the app bar is handed this one's way of changing face: to a page's path, or to the overview at a stop. */
|
|
31
|
+
readonly toggle: MutableRefObject<((face: EmbedFace, path?: string, stop?: string) => void) | undefined>;
|
|
31
32
|
readonly kinds: readonly string[];
|
|
32
33
|
readonly places: readonly Place[];
|
|
33
34
|
}): null;
|
package/dist/address.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../src/address.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../src/address.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAIjF,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAmC1D;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIpJ;AAED,sHAAsH;AACtH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI9E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,GACP,EAAE;IACD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,mHAAmH;IACnH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IACzG,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;CACnC,QA4CA"}
|
package/dist/address.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addressOf, pathWithin } from "@graview/core";
|
|
1
|
+
import { addressOf, OVERVIEW_PATH, pathWithin } from "@graview/core";
|
|
2
2
|
import { aggregateId, fromUrl, toUrl, withFocus, withOverview } from "@graview/layout/view";
|
|
3
3
|
import { descentTarget } from "@graview/primitives/frame";
|
|
4
4
|
import { useNavigation } from "@graview/react/provider";
|
|
@@ -10,14 +10,17 @@ import { useEffect, useRef } from "react";
|
|
|
10
10
|
* where on it, the way the whole-page Shell spells it:
|
|
11
11
|
*
|
|
12
12
|
* <base>/places/the-board, <base>/tasks/t1 a page: the routed face, on its router
|
|
13
|
-
* <base
|
|
14
|
-
*
|
|
13
|
+
* <base>/places/overview#focus=t1 the overview (FR-132): the scene, its
|
|
14
|
+
* view state in the fragment — at altitude
|
|
15
|
+
* (`#overview=1`), the Graview
|
|
16
|
+
* <base>#focus=t1 a stop written before the scene was a
|
|
17
|
+
* place: the scene still, tidied to the
|
|
18
|
+
* overview's address on arrival
|
|
15
19
|
* <base> the routed face's home — or, on arrival
|
|
16
20
|
* with no entry the router wrote, the host's face
|
|
17
21
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* other: it pushes the address of the face it goes to, and Back undoes it.
|
|
22
|
+
* Moving between the overview and a page is a step like any other: the bar
|
|
23
|
+
* pushes the address of the place it goes to, and Back undoes it.
|
|
21
24
|
*/
|
|
22
25
|
/** The router's own mark on an entry it wrote: `{ idx }` (react-router), kept across a reload. */
|
|
23
26
|
const routerWrote = (state) => typeof state === "object" && state !== null && "idx" in state;
|
|
@@ -26,6 +29,8 @@ function faceNamed(basePath) {
|
|
|
26
29
|
const path = pathWithin(window.location.pathname, basePath);
|
|
27
30
|
if (path === null)
|
|
28
31
|
return null;
|
|
32
|
+
if (path === OVERVIEW_PATH)
|
|
33
|
+
return fromUrl(window.location.hash).overview ? "graview" : "scene";
|
|
29
34
|
if (path !== "/")
|
|
30
35
|
return "pages";
|
|
31
36
|
if (window.location.href.includes("#"))
|
|
@@ -35,8 +40,9 @@ function faceNamed(basePath) {
|
|
|
35
40
|
/**
|
|
36
41
|
* THE FACE AN EMBED OPENS ON (FR-106): under memory routing, the host's
|
|
37
42
|
* (`face`, else the one its `stop` implies); under address routing, the one
|
|
38
|
-
* the address names —
|
|
39
|
-
* at the home
|
|
43
|
+
* the address names — the overview's place is the scene (FR-132), any other
|
|
44
|
+
* page the routed face, a fragment at the home the scene's stop — and the
|
|
45
|
+
* host's when it names none.
|
|
40
46
|
* `mount` asks this itself; a host that renders `<Embed>` passes it as `face`.
|
|
41
47
|
*/
|
|
42
48
|
export function faceAtAddress(options) {
|
|
@@ -45,38 +51,40 @@ export function faceAtAddress(options) {
|
|
|
45
51
|
return asked;
|
|
46
52
|
return faceNamed(options.basePath) ?? asked;
|
|
47
53
|
}
|
|
48
|
-
/** The stop the address holds for the scene on arrival, if it holds one. */
|
|
54
|
+
/** The stop the address holds for the scene on arrival, if it holds one: on the overview's address, or the home's. */
|
|
49
55
|
export function stopAtAddress(basePath) {
|
|
50
56
|
if (typeof window === "undefined")
|
|
51
57
|
return undefined;
|
|
52
|
-
|
|
58
|
+
const path = pathWithin(window.location.pathname, basePath);
|
|
59
|
+
return (path === "/" || path === OVERVIEW_PATH) && window.location.href.includes("#") ? window.location.hash || "#" : undefined;
|
|
53
60
|
}
|
|
54
61
|
/**
|
|
55
62
|
* Keeps the face in step with the address: Back and Forward move between
|
|
56
|
-
* the routed face and the
|
|
57
|
-
*
|
|
63
|
+
* the routed face and the overview, and the bar pushes the address of the
|
|
64
|
+
* place it goes to. Inside the provider; the scene's own fragment sync
|
|
58
65
|
* (`UrlSync`) is drawn by the scene face, so it is fetched with the scene.
|
|
59
66
|
*/
|
|
60
67
|
export function AddressBar({ basePath, pagesWere, shown, onFace, toggle, kinds, places, }) {
|
|
61
68
|
const { view, go } = useNavigation();
|
|
62
69
|
const latest = useRef({ shown, view, onFace });
|
|
63
70
|
latest.current = { shown, view, onFace };
|
|
64
|
-
// The page the routed face was on when the
|
|
71
|
+
// The page the routed face was on when the overview was asked for, to go back to.
|
|
65
72
|
const pagesAt = useRef(pagesWere ?? "/");
|
|
66
73
|
const leaving = () => {
|
|
67
74
|
pagesAt.current = `${pathWithin(window.location.pathname, basePath) ?? "/"}${window.location.search}`;
|
|
68
75
|
};
|
|
69
|
-
toggle.current = (next) => {
|
|
76
|
+
toggle.current = (next, path, asked) => {
|
|
70
77
|
const { shown: from, view: here, onFace: tell } = latest.current;
|
|
71
78
|
if (next === "pages" && from !== "pages") {
|
|
72
|
-
window.history.pushState(null, "", addressOf(pagesAt.current, { basePath }));
|
|
79
|
+
window.history.pushState(null, "", addressOf(path ?? pagesAt.current, { basePath }));
|
|
73
80
|
}
|
|
74
81
|
else if (next !== "pages" && from === "pages") {
|
|
75
82
|
leaving();
|
|
76
83
|
// The view the scene will draw, decided here so the fragment pushed is the one it lands on.
|
|
77
|
-
const
|
|
84
|
+
const given = asked === undefined ? here : placed(fromUrl(asked), places);
|
|
85
|
+
const stop = next === "graview" ? withOverview(given, true) : given.overview ? withFocus(withOverview(given, false), descentTarget(given, kinds)) : given;
|
|
78
86
|
go(stop);
|
|
79
|
-
window.history.pushState(null, "", `${addressOf(
|
|
87
|
+
window.history.pushState(null, "", `${addressOf(OVERVIEW_PATH, { basePath })}${toUrl(stop)}`);
|
|
80
88
|
}
|
|
81
89
|
tell?.(next);
|
|
82
90
|
};
|
|
@@ -95,10 +103,7 @@ export function AddressBar({ basePath, pagesWere, shown, onFace, toggle, kinds,
|
|
|
95
103
|
// Between the scene and the Graview the fragment sync follows by itself; from the pages, the scene comes back where the fragment says.
|
|
96
104
|
if (from !== "pages")
|
|
97
105
|
return;
|
|
98
|
-
|
|
99
|
-
const name = parsed.within?.["view"];
|
|
100
|
-
const place = name !== undefined && !parsed.focusId ? places.find((candidate) => candidate.as === name) : undefined;
|
|
101
|
-
go(place ? { ...parsed, focusId: aggregateId(place.kind) } : parsed);
|
|
106
|
+
go(placed(fromUrl(window.location.hash), places));
|
|
102
107
|
tell?.(named);
|
|
103
108
|
};
|
|
104
109
|
window.addEventListener("popstate", onPop);
|
|
@@ -106,4 +111,10 @@ export function AddressBar({ basePath, pagesWere, shown, onFace, toggle, kinds,
|
|
|
106
111
|
}, [basePath, go, places]);
|
|
107
112
|
return null;
|
|
108
113
|
}
|
|
114
|
+
/** A stop that names a place by its name alone (`#view=the-board`) goes to the group it is a picture of. */
|
|
115
|
+
function placed(parsed, places) {
|
|
116
|
+
const name = parsed.within?.["view"];
|
|
117
|
+
const place = name !== undefined && !parsed.focusId ? places.find((candidate) => candidate.as === name) : undefined;
|
|
118
|
+
return place ? { ...parsed, focusId: aggregateId(place.kind) } : parsed;
|
|
119
|
+
}
|
|
109
120
|
//# sourceMappingURL=address.js.map
|
package/dist/address.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["../src/address.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAc,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../src/address.tsx"],"names":[],"mappings":"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"}
|
package/dist/embed.d.ts
CHANGED
|
@@ -27,26 +27,32 @@ export declare function preload(...faces: readonly EmbedFace[]): Promise<void>;
|
|
|
27
27
|
*/
|
|
28
28
|
export { AUTO_SCENE_HEIGHT };
|
|
29
29
|
export interface EmbedOptions<S extends AnySchema = AnySchema> extends FrameOptions<S> {
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Which face to open on. Omitted, the stop decides: at altitude the
|
|
32
|
+
* Graview, anything else the scene — the app's overview, one of its
|
|
33
|
+
* places (FR-132).
|
|
34
|
+
*/
|
|
31
35
|
readonly face?: EmbedFace;
|
|
32
36
|
/** The scene's view state, as the fragment the app itself would put in its address bar. */
|
|
33
37
|
readonly stop?: string;
|
|
34
38
|
/**
|
|
35
|
-
* THE
|
|
36
|
-
* for a reader moving by headings — `1` when the host's page
|
|
37
|
-
* `2` (the default) inside somebody else's article, `false`
|
|
38
|
-
* host's own heading already names it.
|
|
39
|
+
* THE APP'S NAME AS A HEADING (FR-25, FR-131): the level the app bar says
|
|
40
|
+
* the name at, for a reader moving by headings — `1` when the host's page
|
|
41
|
+
* is the app, `2` (the default) inside somebody else's article, `false`
|
|
42
|
+
* when the host's own heading already names it. Each page's own title is
|
|
43
|
+
* said under it, at the level below the app's.
|
|
39
44
|
*/
|
|
40
45
|
readonly heading?: 1 | 2 | 3 | 4 | 5 | 6 | false;
|
|
41
46
|
/**
|
|
42
|
-
* Below this width the scene and the Graview give way to the
|
|
43
|
-
* and come back above it
|
|
47
|
+
* Below this width the scene and the Graview give way to the routed face,
|
|
48
|
+
* and come back above it — unless the reader asks for the overview on the
|
|
49
|
+
* bar, which is then drawn whatever the width. Off by default.
|
|
44
50
|
*/
|
|
45
51
|
readonly pagesBelow?: number;
|
|
46
52
|
/**
|
|
47
|
-
* WHAT BECOMES OF THE STUDIO (FR-19). Offered by default,
|
|
48
|
-
* that keeps the app, writing through a dev
|
|
49
|
-
* over files. `false` leaves it
|
|
53
|
+
* WHAT BECOMES OF THE STUDIO (FR-19). Offered by default, in the
|
|
54
|
+
* person's menu for the seat that keeps the app, writing through a dev
|
|
55
|
+
* server's door or handing over files. `false` leaves it out: a hosted reader cannot
|
|
50
56
|
* save a declaration, so is not offered one to change. `{ onApply }`
|
|
51
57
|
* keeps it and hands the host what the checker passed, writing nothing
|
|
52
58
|
* itself: the host makes it a proposal, a version, a review.
|
|
@@ -85,7 +91,7 @@ export interface EmbedStudio {
|
|
|
85
91
|
readonly onApply: StudioOnApply;
|
|
86
92
|
/**
|
|
87
93
|
* What the studio's picture is to the host's page (FR-58). Inside an
|
|
88
|
-
* embed it is a
|
|
94
|
+
* embed it is a labeled region by default, never a second `<main>`;
|
|
89
95
|
* "main" is for a host whose page has none of its own and whose whole
|
|
90
96
|
* body is the studio.
|
|
91
97
|
*/
|
|
@@ -110,19 +116,20 @@ export interface EmbedStudio {
|
|
|
110
116
|
readonly place?: typeof StudioPlaceType;
|
|
111
117
|
}
|
|
112
118
|
export interface EmbedProps<S extends AnySchema = AnySchema> extends EmbedOptions<S> {
|
|
113
|
-
/** Called when the
|
|
119
|
+
/** Called when the bar moves between the overview and a page (FR-132); the host decides the face. */
|
|
114
120
|
readonly onFace?: (face: EmbedFace) => void;
|
|
115
|
-
/** Called when a seat
|
|
121
|
+
/** Called when a seat is taken in the person's menu; the host decides who sits. */
|
|
116
122
|
readonly onSeat?: (principal: Principal) => void;
|
|
117
123
|
}
|
|
118
|
-
/** The face a stop implies: a stop at altitude opens the Graview. */
|
|
124
|
+
/** The face a stop implies: a stop at altitude opens the Graview, anything else the scene — the overview (FR-132). */
|
|
119
125
|
export declare function faceOf(stop: string | undefined): EmbedFace;
|
|
120
126
|
export declare function Embed<S extends AnySchema>(props: EmbedProps<S>): import("react").JSX.Element;
|
|
121
127
|
export interface EmbedHandle {
|
|
122
128
|
/**
|
|
123
|
-
* WHERE THE READER IS (FR-116): the face, the
|
|
124
|
-
*
|
|
125
|
-
*
|
|
129
|
+
* WHERE THE READER IS (FR-116): the face, the path of the place they are
|
|
130
|
+
* on — the overview's (`/places/overview`) on the scene (FR-132) — and the
|
|
131
|
+
* scene's stop, for a host that must remount to hand back as
|
|
132
|
+
* `mount(…, { at })`.
|
|
126
133
|
*/
|
|
127
134
|
where(): EmbedWhere;
|
|
128
135
|
/**
|
|
@@ -132,13 +139,25 @@ export interface EmbedHandle {
|
|
|
132
139
|
* falls back to its nearest parent. The seat, the seats, the people, the
|
|
133
140
|
* scheme, the brand asked for and the notices stay; what is drawn is drawn
|
|
134
141
|
* again, so an open menu, a scroll and a half-typed field do not.
|
|
142
|
+
*
|
|
143
|
+
* THE NEW APP'S NAME (FR-128): a `label` that was the app's own name
|
|
144
|
+
* follows the app, so a renamed app says its new name — the embed's
|
|
145
|
+
* accessible name, its heading, each landmark inside — without a reload;
|
|
146
|
+
* a label the host chose stays. `{ label }` says which.
|
|
135
147
|
*/
|
|
136
|
-
setApp(app: GraviewApp<AnySchema>, store: Store<AnySchema> | EmbedRemote<AnySchema
|
|
148
|
+
setApp(app: GraviewApp<AnySchema>, store: Store<AnySchema> | EmbedRemote<AnySchema>, options?: {
|
|
149
|
+
readonly label?: string;
|
|
150
|
+
}): void;
|
|
151
|
+
/** What the embed is called (FR-128): its accessible name, its heading, and the name each landmark inside is said after. */
|
|
152
|
+
setLabel(label: string): void;
|
|
153
|
+
/** The host's own actions in the profile menu (FR-72), now. */
|
|
154
|
+
setHostActions(actions: EmbedOptions["hostActions"]): void;
|
|
137
155
|
setFace(face: EmbedFace): void;
|
|
138
156
|
setStop(stop: string): void;
|
|
139
157
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
158
|
+
* Goes to a path within the app's own routes (FR-106): a host that keeps
|
|
159
|
+
* its own history hands back the path its Back arrived at. The overview's
|
|
160
|
+
* path (`/places/overview`) is the scene (FR-132); any other is a page.
|
|
142
161
|
*/
|
|
143
162
|
setPath(path: string): void;
|
|
144
163
|
setScheme(scheme: Scheme): void;
|
package/dist/embed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.tsx"],"names":[],"mappings":"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"}
|