@shivaedev/work-board 0.5.0 → 0.6.0
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 +20 -0
- package/README.md +32 -2
- package/dist/board.d.ts.map +1 -1
- package/dist/board.js +2 -0
- package/dist/board.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/files/watchDirectories.d.ts.map +1 -1
- package/dist/files/watchDirectories.js +2 -1
- package/dist/files/watchDirectories.js.map +1 -1
- package/dist/http/assets.d.ts.map +1 -1
- package/dist/http/assets.js +4 -0
- package/dist/http/assets.js.map +1 -1
- package/dist/http/attachment.d.ts +4 -0
- package/dist/http/attachment.d.ts.map +1 -0
- package/dist/http/attachment.js +43 -0
- package/dist/http/attachment.js.map +1 -0
- package/dist/metadata/sourceLinks.d.ts.map +1 -1
- package/dist/metadata/sourceLinks.js +3 -1
- package/dist/metadata/sourceLinks.js.map +1 -1
- package/dist/page/client.d.ts +1 -1
- package/dist/page/client.d.ts.map +1 -1
- package/dist/page/client.js +1 -0
- package/dist/page/client.js.map +1 -1
- package/dist/page/diagrams.d.ts +1 -1
- package/dist/page/diagrams.d.ts.map +1 -1
- package/dist/page/diagrams.js +7 -0
- package/dist/page/diagrams.js.map +1 -1
- package/dist/page/shell.d.ts.map +1 -1
- package/dist/page/shell.js +3 -2
- package/dist/page/shell.js.map +1 -1
- package/dist/page/style.d.ts.map +1 -1
- package/dist/page/style.js +3 -2
- package/dist/page/style.js.map +1 -1
- package/dist/page/swap.d.ts +1 -1
- package/dist/page/swap.d.ts.map +1 -1
- package/dist/page/swap.js +7 -2
- package/dist/page/swap.js.map +1 -1
- package/dist/page/visualDialog.d.ts +3 -0
- package/dist/page/visualDialog.d.ts.map +1 -0
- package/dist/page/visualDialog.js +25 -0
- package/dist/page/visualDialog.js.map +1 -0
- package/dist/page/visualScript.d.ts +2 -0
- package/dist/page/visualScript.d.ts.map +1 -0
- package/dist/page/visualScript.js +42 -0
- package/dist/page/visualScript.js.map +1 -0
- package/dist/page/visualViewport.d.ts +2 -0
- package/dist/page/visualViewport.d.ts.map +1 -0
- package/dist/page/visualViewport.js +87 -0
- package/dist/page/visualViewport.js.map +1 -0
- package/dist/path/attachment.d.ts +3 -0
- package/dist/path/attachment.d.ts.map +1 -0
- package/dist/path/attachment.js +22 -0
- package/dist/path/attachment.js.map +1 -0
- package/dist/render/documentLinks.d.ts +2 -1
- package/dist/render/documentLinks.d.ts.map +1 -1
- package/dist/render/documentLinks.js +15 -4
- package/dist/render/documentLinks.js.map +1 -1
- package/package.json +1 -1
- package/src/board.ts +2 -0
- package/src/cli.ts +1 -1
- package/src/files/watchDirectories.ts +2 -1
- package/src/http/assets.ts +4 -0
- package/src/http/attachment.ts +46 -0
- package/src/metadata/sourceLinks.ts +3 -1
- package/src/page/client.ts +1 -0
- package/src/page/diagrams.ts +7 -0
- package/src/page/shell.ts +3 -2
- package/src/page/style.ts +4 -2
- package/src/page/swap.ts +7 -2
- package/src/page/visualDialog.ts +25 -0
- package/src/page/visualScript.ts +41 -0
- package/src/page/visualViewport.ts +86 -0
- package/src/path/attachment.ts +23 -0
- package/src/render/documentLinks.ts +15 -4
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,26 @@
|
|
|
6
6
|
|
|
7
7
|
- Record the approved Platform-first live client direction and its actual shared HTTP/browser fixture evidence; Work Board adopts that foundation in 0.5.0 below.
|
|
8
8
|
|
|
9
|
+
## 0.6.0 - 2026-10-06
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Serve source-relative PNG, JPEG, GIF and WebP images inside the workspace with
|
|
14
|
+
loopback guards, resolved-path containment, correct media headers, no caching
|
|
15
|
+
and a 16 MiB limit. Refuse traversal, escaping file/directory links and active
|
|
16
|
+
attachment formats. Watch image edits through native reconciliation.
|
|
17
|
+
- Add a keyboard image gallery and Mermaid inspection with bounded zoom, a
|
|
18
|
+
scrollable/fullscreen viewport, local downloads and focus restoration. Explain
|
|
19
|
+
missing images and failed diagrams; retain Mermaid source without JavaScript.
|
|
20
|
+
- Disclose an open preview after source updates and require reopening before
|
|
21
|
+
saving it. Downloads copy files locally and never write workspace sources.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Normalize visual controls and refreshed image URLs during reading-state swaps
|
|
26
|
+
so unchanged images and drawings keep their source context. Existing history
|
|
27
|
+
baselines remain Markdown-only; image bytes are not added to Mark seen snapshots.
|
|
28
|
+
|
|
9
29
|
## 0.5.0 - 2026-10-06
|
|
10
30
|
|
|
11
31
|
### Added
|
package/README.md
CHANGED
|
@@ -12,8 +12,9 @@ work-board ./project-notes --port 4747 --home plan.md
|
|
|
12
12
|
It listens on `127.0.0.1` only and answers only requests addressed to a loopback
|
|
13
13
|
host. Every `.md` file under the folder appears in the collapsible sidebar with
|
|
14
14
|
how long ago it changed. Below the folder, files and folders starting with a dot
|
|
15
|
-
and `node_modules` are never entered
|
|
16
|
-
|
|
15
|
+
and `node_modules` are never entered. Only Markdown appears in the sidebar;
|
|
16
|
+
supported local images are served when explicitly referenced below. The folder
|
|
17
|
+
itself may be a dot folder such as `.notes`.
|
|
17
18
|
|
|
18
19
|
Directory symlinks explicitly include reference folders, including ones outside
|
|
19
20
|
the workspace. Their Markdown keeps the link's workspace-relative URLs. Broken
|
|
@@ -55,6 +56,35 @@ preference says otherwise. A keyboard skip link moves directly to the content.
|
|
|
55
56
|
| `--port` | `4747` | The port on `127.0.0.1`. `0` picks a free one. |
|
|
56
57
|
| `--home` | none | The file shown at `/` as a board, relative to the folder. The command stops with an error unless it leads to one of the markdown files listed from the folder. Without it, `/` shows the first file as a document. |
|
|
57
58
|
|
|
59
|
+
## Local visual evidence
|
|
60
|
+
|
|
61
|
+
Use ordinary Markdown such as `` or
|
|
62
|
+
`[Open screenshot](shots/review.png)`. PNG, JPEG (`.jpg`/`.jpeg`), GIF and WebP
|
|
63
|
+
paths resolve relative to the source file, including a nested home served at `/`.
|
|
64
|
+
The local image route serves at most 16 MiB per file, checks the resolved path on
|
|
65
|
+
every request, and refuses hidden/dependency paths, traversal and links outside
|
|
66
|
+
the workspace. Outside-workspace reference folders retain their Markdown support;
|
|
67
|
+
their images must be copied inside the workspace to be served. SVG, HTML, PDF and
|
|
68
|
+
arbitrary attachments are not served through this route.
|
|
69
|
+
|
|
70
|
+
Open a local image link (including an evidence source), or click/focus an embedded
|
|
71
|
+
image and press Enter, to inspect a gallery of the
|
|
72
|
+
current document's images. Previous/Next and arrow keys select images. Zoom from
|
|
73
|
+
25% to 800%, scroll, Fit, Actual size or Fullscreen to inspect details; Escape closes the viewer
|
|
74
|
+
and restores source focus. **Save locally** uses the browser download mechanism.
|
|
75
|
+
An unavailable image keeps its alt text and explains the local path/type/boundary
|
|
76
|
+
and size checks. Images still render through ordinary GET requests without JavaScript.
|
|
77
|
+
|
|
78
|
+
A rendered Mermaid diagram has **Inspect diagram**, with the same zoom, scrolling,
|
|
79
|
+
fullscreen, Actual size and keyboard dismissal, plus a local SVG download of its current
|
|
80
|
+
drawing. Failed diagrams expose their source and a readable error; source remains
|
|
81
|
+
visible without JavaScript. When fullscreen is unavailable, scrolling still works.
|
|
82
|
+
An open preview remains the earlier drawing/image after a source update, discloses
|
|
83
|
+
that state and requires reopening before saving. Image edits trigger conservative
|
|
84
|
+
native reconciliation and image reloads, respecting Pause/Resume. The explicit
|
|
85
|
+
Mark seen baseline stays Markdown-only: image bytes are not captured or retained.
|
|
86
|
+
Viewing and downloading do not write source files or imply verified acceptance.
|
|
87
|
+
|
|
58
88
|
## Document navigation
|
|
59
89
|
|
|
60
90
|
Markdown headings have passage links and an **On this page** outline, including separate
|
package/dist/board.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,aAAa,EAAc,MAAM,QAAQ,CAAC;AAClG,OAAO,EAAE,UAAU,EAA8C,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAyB,KAAK,cAAc,EAAuD,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,aAAa,EAAc,MAAM,QAAQ,CAAC;AAClG,OAAO,EAAE,UAAU,EAA8C,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAyB,KAAK,cAAc,EAAuD,MAAM,iBAAiB,CAAC;AAYlI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAsED,KAAK,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC,aAAa,GAAG,YAAY,CAAC;AAC5F,KAAK,aAAa,GAAG,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;AAE1I,eAAO,MAAM,UAAU,GAAI,SAAS,YAAY,KAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CACxC,CAAC"}
|
package/dist/board.js
CHANGED
|
@@ -3,6 +3,7 @@ import { HttpRouter, HttpServerRequest } from "effect/unstable/http";
|
|
|
3
3
|
import { watchChanges } from "#files/changes.ts";
|
|
4
4
|
import { homeIn } from "#files/home.ts";
|
|
5
5
|
import { ASSETS, MERMAID_ROUTE, mermaidFile, mermaidRoot, NATIVE_ROUTE, nativeAsset } from "#http/assets.ts";
|
|
6
|
+
import { attachment } from "#http/attachment.ts";
|
|
6
7
|
import { events } from "#http/events.ts";
|
|
7
8
|
import { changesPage, history } from "#http/history.ts";
|
|
8
9
|
import { identity } from "#http/identity.ts";
|
|
@@ -23,6 +24,7 @@ const routes = (options) => HttpRouter.use((router) => Effect.gen(function* () {
|
|
|
23
24
|
const context = (yield* Effect.context()).pipe(Context.pick(Highlighter, FileSystem.FileSystem, Path.Path));
|
|
24
25
|
const serve = (route, handler, method = "GET") => router.add(method, route, loopbackOnly((request) => Effect.provideContext(handler(request), context)));
|
|
25
26
|
yield* serve("/events", events(changes));
|
|
27
|
+
yield* serve("/_board/attachment/*", attachment(options.root, changes.realRoot));
|
|
26
28
|
const index = yield* searchSnapshot(options.root, home, changes);
|
|
27
29
|
yield* serve("/_board/search", search(index));
|
|
28
30
|
const workPage = work(index, changes, home);
|
package/dist/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../src/board.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import { NodeRuntime, NodeServices } from "@effect/platform-node";
|
|
|
3
3
|
import { Effect, Layer, Option, Path } from "effect";
|
|
4
4
|
import { Argument, Command, Flag } from "effect/unstable/cli";
|
|
5
5
|
import { HOST, serveBoard } from "./serve.js";
|
|
6
|
-
const VERSION = "0.
|
|
6
|
+
const VERSION = "0.6.0";
|
|
7
7
|
const serve = Effect.fn("WorkBoard.serve")(function* (input) {
|
|
8
8
|
const path = yield* Path.Path;
|
|
9
9
|
return yield* Layer.launch(serveBoard({ home: Option.getOrUndefined(input.home), port: input.port, root: path.resolve(input.dir) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watchDirectories.d.ts","sourceRoot":"","sources":["../../src/files/watchDirectories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,UAAU,EAAU,IAAI,EAAU,MAAM,QAAQ,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"watchDirectories.d.ts","sourceRoot":"","sources":["../../src/files/watchDirectories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,EAAE,UAAU,EAAU,IAAI,EAAU,MAAM,QAAQ,CAAC;;;;AAIlF,cAAM,UAAW,SAAQ,eAA8B;CAAG;AAK1D,eAAO,MAAM,gBAAgB,qGAIJ,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,mBACzC,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,sHA8C5D,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Data, Deferred, Effect, FileSystem, Option, Path, Stream } from "effect";
|
|
2
|
+
import { attachmentType } from "#path/attachment.ts";
|
|
2
3
|
import { isMarkdown, scanMarkdown } from "./list.js";
|
|
3
4
|
class WatchEnded extends Data.TaggedError("WatchEnded") {
|
|
4
5
|
}
|
|
@@ -23,7 +24,7 @@ export const watchDirectories = Effect.fn("WorkBoard.watchDirectories")(function
|
|
|
23
24
|
if (Option.match(info, { onNone: () => removedLink, onSome: (value) => value.type === "Directory" })) {
|
|
24
25
|
yield* Effect.forkScoped(Effect.delay(Deferred.succeed(topology, undefined), SETTLE));
|
|
25
26
|
}
|
|
26
|
-
})), Stream.filter(isMarkdown), Stream.interruptWhen(Deferred.await(topology)), Stream.groupedWithin(BATCH, SETTLE), Stream.runForEach((paths) => publish([...new Set(paths)])), Effect.andThen(Effect.flatMap(Deferred.isDone(topology), (changed) => (changed ? Effect.void : Effect.fail(new WatchEnded())))));
|
|
27
|
+
})), Stream.filter((relative) => isMarkdown(relative) || attachmentType(relative) !== undefined), Stream.interruptWhen(Deferred.await(topology)), Stream.groupedWithin(BATCH, SETTLE), Stream.runForEach((paths) => publish([...new Set(paths)])), Effect.andThen(Effect.flatMap(Deferred.isDone(topology), (changed) => (changed ? Effect.void : Effect.fail(new WatchEnded())))));
|
|
27
28
|
yield* Effect.forkScoped(Effect.delay(setWatching(true), SETTLE));
|
|
28
29
|
yield* watch;
|
|
29
30
|
yield* setWatching(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watchDirectories.js","sourceRoot":"","sources":["../../src/files/watchDirectories.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"watchDirectories.js","sourceRoot":"","sources":["../../src/files/watchDirectories.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAkB1E,eAAO,MAAM,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAiBjF,CAAC;;;;AAIF,qBAAa,cAAe,SAAQ,oBAAmC;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;CAAG;AAEtG,eAAO,MAAM,WAAW,wDAItB,CAAC;AAEH,eAAO,MAAM,WAAW,GAAI,aAAa,MAAM,2NAS5C,CAAC;AAEJ,eAAO,MAAM,aAAa,EAAE,UAAU,CAAC,SAAyB,CAAC;AAEjE,eAAO,MAAM,YAAY,EAAE,UAAU,CAAC,SAA+B,CAAC;AACtE,eAAO,MAAM,WAAW,4KAMtB,CAAC"}
|
package/dist/http/assets.js
CHANGED
|
@@ -12,10 +12,14 @@ import { searchScript } from "#page/searchScript.ts";
|
|
|
12
12
|
import { pageStateScript } from "#page/stateScript.ts";
|
|
13
13
|
import { style } from "#page/style.ts";
|
|
14
14
|
import { swap } from "#page/swap.ts";
|
|
15
|
+
import { visualScript } from "#page/visualScript.ts";
|
|
16
|
+
import { visualViewport } from "#page/visualViewport.ts";
|
|
15
17
|
import { savedScript } from "#views/savedScript.ts";
|
|
16
18
|
import { respond } from "./respond.js";
|
|
17
19
|
export const ASSETS = [
|
|
18
20
|
["/_board/style.css", style, "text/css"],
|
|
21
|
+
["/_board/visuals.js", visualScript(), "text/javascript"],
|
|
22
|
+
["/_board/visual-viewport.js", visualViewport(), "text/javascript"],
|
|
19
23
|
["/_board/saved-views.js", savedScript(), "text/javascript"],
|
|
20
24
|
["/_board/client.js", client, "text/javascript"],
|
|
21
25
|
["/_board/ages.js", ageScript(), "text/javascript"],
|
package/dist/http/assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/http/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect, FileSystem, Path } from "effect";
|
|
2
|
+
import type { HttpServerRequest } from "effect/unstable/http";
|
|
3
|
+
export declare function attachment(root: string, realRoot: string): (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<import("effect/unstable/http/HttpServerResponse").HttpServerResponse, never, FileSystem.FileSystem | Path.Path>;
|
|
4
|
+
//# sourceMappingURL=attachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/http/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAO9D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mLAqCxD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Effect, FileSystem, Path } from "effect";
|
|
2
|
+
import { within } from "#files/list.ts";
|
|
3
|
+
import { attachmentType } from "#path/attachment.ts";
|
|
4
|
+
import { respond } from "./respond.js";
|
|
5
|
+
const MAX_BYTES = 16 * 1024 * 1024;
|
|
6
|
+
export function attachment(root, realRoot) {
|
|
7
|
+
return Effect.fn("WorkBoard.attachment")(function* (request) {
|
|
8
|
+
function missing() {
|
|
9
|
+
return respond("Local image unavailable: unsupported type, missing file or workspace boundary.", "text/plain", 404);
|
|
10
|
+
}
|
|
11
|
+
let relative;
|
|
12
|
+
try {
|
|
13
|
+
relative = decodeURIComponent(new URL(request.url, "http://127.0.0.1").pathname.slice("/_board/attachment/".length));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return missing();
|
|
17
|
+
}
|
|
18
|
+
const type = attachmentType(relative);
|
|
19
|
+
if (!type
|
|
20
|
+
|| relative.includes("\\")
|
|
21
|
+
|| relative.split("/").some((part) => !part || part === ".." || part.startsWith(".") || part === "node_modules")) {
|
|
22
|
+
return missing();
|
|
23
|
+
}
|
|
24
|
+
const fs = yield* FileSystem.FileSystem;
|
|
25
|
+
const path = yield* Path.Path;
|
|
26
|
+
return yield* Effect.gen(function* () {
|
|
27
|
+
const real = yield* fs.realPath(path.join(root, relative));
|
|
28
|
+
if (!within(realRoot, path.sep, real)) {
|
|
29
|
+
return missing();
|
|
30
|
+
}
|
|
31
|
+
const info = yield* fs.stat(real);
|
|
32
|
+
if (info.type !== "File") {
|
|
33
|
+
return missing();
|
|
34
|
+
}
|
|
35
|
+
if (info.size > BigInt(MAX_BYTES)) {
|
|
36
|
+
return respond("Local image exceeds the 16 MiB limit.", "text/plain", 413);
|
|
37
|
+
}
|
|
38
|
+
const body = yield* fs.readFile(real);
|
|
39
|
+
return body.byteLength > MAX_BYTES ? respond("Local image exceeds the 16 MiB limit.", "text/plain", 413) : respond(body, type);
|
|
40
|
+
}).pipe(Effect.orElseSucceed(missing));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=attachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/http/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAgB;IACxD,OAAO,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAA4C;QAC/F,SAAS,OAAO;YACf,OAAO,OAAO,CAAC,gFAAgF,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QACrH,CAAC;QACD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACJ,QAAQ,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;QACtH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,OAAO,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACtC,IACC,CAAC,IAAI;eACF,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;eACvB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,cAAc,CAAC,EAC/G,CAAC;YACF,OAAO,OAAO,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gBACvC,OAAO,OAAO,EAAE,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO,OAAO,EAAE,CAAC;YAClB,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,OAAO,OAAO,CAAC,uCAAuC,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;YAC5E,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,uCAAuC,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceLinks.d.ts","sourceRoot":"","sources":["../../src/metadata/sourceLinks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sourceLinks.d.ts","sourceRoot":"","sources":["../../src/metadata/sourceLinks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW3E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAKzF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAmBjG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fileUrl } from "#files/url.ts";
|
|
2
|
+
import { attachmentHref } from "#path/attachment.ts";
|
|
2
3
|
import { referenceTarget } from "./links.js";
|
|
3
4
|
const BASE = "http://work-board.local";
|
|
4
5
|
const absolute = /^(?:[a-z][a-z\d+.-]*:|\/\/)/iu;
|
|
@@ -8,7 +9,8 @@ export function sourceHref(source, file) {
|
|
|
8
9
|
if (!["http:", "https:"].includes(url.protocol)) {
|
|
9
10
|
return undefined;
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
+
const local = url.pathname + url.search + url.hash;
|
|
13
|
+
return absolute.exec(source) === null ? (attachmentHref(local) ?? local) : url.href;
|
|
12
14
|
}
|
|
13
15
|
catch {
|
|
14
16
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sourceLinks.js","sourceRoot":"","sources":["../../src/metadata/sourceLinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,IAAI,GAAG,yBAAyB,CAAC;AACvC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAEjD,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,IAAY;IACtD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"sourceLinks.js","sourceRoot":"","sources":["../../src/metadata/sourceLinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,IAAI,GAAG,yBAAyB,CAAC;AACvC,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AAEjD,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,IAAY;IACtD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;QACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB,EAAE,KAAoB;IACpE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,KAAoB;IAC5E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,QAAQ,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,GAAG,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QAC5E,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC"}
|
package/dist/page/client.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const client = "\nimport \"/_board/saved-views.js\";\nimport \"/_board/history.js\";\nimport \"/_board/preferences.js\";\nimport \"/_board/search.js\";\nimport { tick } from \"/_board/ages.js\";\nimport { renderDiagrams } from \"/_board/diagrams.js\";\nimport { applyPage } from \"/_board/page-state.js\";\nimport \"/_board/navigation.js\";\nimport { remember, swap } from \"/_board/swap.js\";\nimport { refreshLibrary } from \"/_board/library.js\";\nimport { session } from \"/_board/native.js\";\n\n\nremember(document.getElementById(\"files\"));\nremember(document.getElementById(\"doc\"));\n\nlet native = session(window);\nconst live = document.getElementById(\"live\");\nconst toggle = document.getElementById(\"updates-toggle\");\nlet pageFailure = \"\";\nlet navFailure = \"\";\nlet pageWaiting = true;\nlet watching = false;\nlet navWaiting = true;\nlet active = \"\";\nlet releasePage;\nconst show = () => {\n const state = native.registry.get(native.updates.status);\n const paused = native.registry.get(native.updates.paused);\n const failure = pageFailure || navFailure;\n live.dataset.state = paused ? \"paused\" : failure ? \"stale\" : !watching || state.connection !== \"live\" ? \"down\" : pageWaiting || navWaiting ? \"refreshing\" : \"live\";\n live.textContent = paused ? \"updates paused \u00B7 \" + state.pending + (state.pending === 256 ? \"+\" : \"\") + \" pending updates\" : failure || (!watching || state.connection !== \"live\" ? \"reconnecting\" : pageWaiting || navWaiting ? \"refreshing\" : \"live\");\n toggle.textContent = paused ? \"Resume updates\" : \"Pause updates\";\n toggle.setAttribute(\"aria-pressed\", String(paused));\n live.title = \"Connection: \" + state.connection + \"; last observed source watcher: \" + (watching ? \"watching\" : \"unavailable\") + \"; \" + (paused ? \"automatic reads paused\" : pageWaiting || navWaiting ? \"reads pending\" : failure ? \"showing retained source\" : \"reads settled\");\n};\nconst watchPage = () => {\n const path = location.pathname + location.search;\n if (path === active) return;\n active = path;\n releasePage?.();\n pageFailure = \"\";\n const atom = native.api.page.query({ url: path });\n releasePage = native.registry.subscribe(atom, (value) => {\n pageWaiting = value.waiting || value._tag === \"Initial\";\n if (value._tag === \"Failure\") pageFailure = \"refresh failed\";\n if (value._tag === \"Success\" && !value.waiting && active === location.pathname + location.search) {\n const next = new DOMParser().parseFromString(value.value.html, \"text/html\");\n pageFailure = applyPage(next, true) ? \"\" : \"refresh failed\";\n tick();\n }\n show();\n }, { immediate: true });\n};\nconst observe = () => {\nnative.registry.subscribe(native.api.navigation.query(), (value) => {\n navWaiting = value.waiting || value._tag === \"Initial\";\n if (value._tag === \"Failure\") navFailure = \"navigation refresh failed\";\n if (value._tag === \"Success\" && !value.waiting) {\n navFailure = \"\";\n const files = document.getElementById(\"files\");\n const next = files.cloneNode(false);\n next.innerHTML = value.value;\n const current = document.getElementById(\"doc\").dataset.file;\n for (const link of next.querySelectorAll(\"a\")) if (decodeURIComponent(new URL(link.href, location.href).pathname.slice(1)) === current) link.setAttribute(\"aria-current\", \"page\");\n swap(files, next);\n refreshLibrary();\n tick();\n document.dispatchEvent(new Event(\"board-index-change\"));\n }\n show();\n}, { immediate: true });\nnative.registry.subscribe(native.api.watcher.query(), (value) => {\n watching = value._tag === \"Success\" && value.value.watching;\n show();\n}, { immediate: true });\nnative.registry.subscribe(native.updates.status, show);\nnative.registry.subscribe(native.updates.paused, (paused) => { show(); if (!paused) document.dispatchEvent(new Event(\"board-updates-resumed\")); });\n};\nobserve();\ntoggle.disabled = false;\ntoggle.addEventListener(\"click\", () => native.registry.set(native.updates.paused, !native.registry.get(native.updates.paused)));\ndocument.addEventListener(\"board-page\", watchPage);\nwatchPage();\nwindow.addEventListener(\"pagehide\", () => { releasePage?.(); active = \"\"; });\nwindow.addEventListener(\"pageshow\", (event) => {\n if (!event.persisted) return;\n native = session(window);\n pageWaiting = navWaiting = true;\n watching = false;\n pageFailure = navFailure = \"\";\n observe();\n watchPage();\n});\n\nrenderDiagrams(document);\n";
|
|
1
|
+
export declare const client = "\nimport \"/_board/saved-views.js\";\nimport \"/_board/history.js\";\nimport \"/_board/preferences.js\";\nimport \"/_board/search.js\";\nimport { tick } from \"/_board/ages.js\";\nimport { renderDiagrams } from \"/_board/diagrams.js\";\nimport { applyPage } from \"/_board/page-state.js\";\nimport \"/_board/navigation.js\";\nimport { remember, swap } from \"/_board/swap.js\";\nimport { refreshLibrary } from \"/_board/library.js\";\nimport { session } from \"/_board/native.js\";\n\n\ndocument.documentElement.dataset.js = \"true\";\nremember(document.getElementById(\"files\"));\nremember(document.getElementById(\"doc\"));\n\nlet native = session(window);\nconst live = document.getElementById(\"live\");\nconst toggle = document.getElementById(\"updates-toggle\");\nlet pageFailure = \"\";\nlet navFailure = \"\";\nlet pageWaiting = true;\nlet watching = false;\nlet navWaiting = true;\nlet active = \"\";\nlet releasePage;\nconst show = () => {\n const state = native.registry.get(native.updates.status);\n const paused = native.registry.get(native.updates.paused);\n const failure = pageFailure || navFailure;\n live.dataset.state = paused ? \"paused\" : failure ? \"stale\" : !watching || state.connection !== \"live\" ? \"down\" : pageWaiting || navWaiting ? \"refreshing\" : \"live\";\n live.textContent = paused ? \"updates paused \u00B7 \" + state.pending + (state.pending === 256 ? \"+\" : \"\") + \" pending updates\" : failure || (!watching || state.connection !== \"live\" ? \"reconnecting\" : pageWaiting || navWaiting ? \"refreshing\" : \"live\");\n toggle.textContent = paused ? \"Resume updates\" : \"Pause updates\";\n toggle.setAttribute(\"aria-pressed\", String(paused));\n live.title = \"Connection: \" + state.connection + \"; last observed source watcher: \" + (watching ? \"watching\" : \"unavailable\") + \"; \" + (paused ? \"automatic reads paused\" : pageWaiting || navWaiting ? \"reads pending\" : failure ? \"showing retained source\" : \"reads settled\");\n};\nconst watchPage = () => {\n const path = location.pathname + location.search;\n if (path === active) return;\n active = path;\n releasePage?.();\n pageFailure = \"\";\n const atom = native.api.page.query({ url: path });\n releasePage = native.registry.subscribe(atom, (value) => {\n pageWaiting = value.waiting || value._tag === \"Initial\";\n if (value._tag === \"Failure\") pageFailure = \"refresh failed\";\n if (value._tag === \"Success\" && !value.waiting && active === location.pathname + location.search) {\n const next = new DOMParser().parseFromString(value.value.html, \"text/html\");\n pageFailure = applyPage(next, true) ? \"\" : \"refresh failed\";\n tick();\n }\n show();\n }, { immediate: true });\n};\nconst observe = () => {\nnative.registry.subscribe(native.api.navigation.query(), (value) => {\n navWaiting = value.waiting || value._tag === \"Initial\";\n if (value._tag === \"Failure\") navFailure = \"navigation refresh failed\";\n if (value._tag === \"Success\" && !value.waiting) {\n navFailure = \"\";\n const files = document.getElementById(\"files\");\n const next = files.cloneNode(false);\n next.innerHTML = value.value;\n const current = document.getElementById(\"doc\").dataset.file;\n for (const link of next.querySelectorAll(\"a\")) if (decodeURIComponent(new URL(link.href, location.href).pathname.slice(1)) === current) link.setAttribute(\"aria-current\", \"page\");\n swap(files, next);\n refreshLibrary();\n tick();\n document.dispatchEvent(new Event(\"board-index-change\"));\n }\n show();\n}, { immediate: true });\nnative.registry.subscribe(native.api.watcher.query(), (value) => {\n watching = value._tag === \"Success\" && value.value.watching;\n show();\n}, { immediate: true });\nnative.registry.subscribe(native.updates.status, show);\nnative.registry.subscribe(native.updates.paused, (paused) => { show(); if (!paused) document.dispatchEvent(new Event(\"board-updates-resumed\")); });\n};\nobserve();\ntoggle.disabled = false;\ntoggle.addEventListener(\"click\", () => native.registry.set(native.updates.paused, !native.registry.get(native.updates.paused)));\ndocument.addEventListener(\"board-page\", watchPage);\nwatchPage();\nwindow.addEventListener(\"pagehide\", () => { releasePage?.(); active = \"\"; });\nwindow.addEventListener(\"pageshow\", (event) => {\n if (!event.persisted) return;\n native = session(window);\n pageWaiting = navWaiting = true;\n watching = false;\n pageFailure = navFailure = \"\";\n observe();\n watchPage();\n});\n\nrenderDiagrams(document);\n";
|
|
2
2
|
export declare const preferences = "\nconst root = document.documentElement;\nconst key = \"work-board:appearance:\" + root.dataset.workspace;\nconst theme = document.getElementById(\"theme\");\nconst density = document.getElementById(\"density\");\nconst sidebar = document.getElementById(\"sidebar\");\nconst toggle = document.getElementById(\"sidebar-toggle\");\nconst status = document.getElementById(\"preference-status\");\nconst system = matchMedia(\"(prefers-color-scheme: dark)\");\nlet saved = {};\ntry {\n const value = JSON.parse(localStorage.getItem(key) ?? \"{}\");\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) saved = value;\n} catch {\n status.textContent = \"Preferences apply to this page only.\";\n}\n\ntheme.value = [\"light\", \"dark\"].includes(saved.theme) ? saved.theme : \"system\";\ndensity.value = saved.density === \"compact\" ? \"compact\" : \"comfortable\";\nlet closed = typeof saved.closed === \"boolean\" ? saved.closed : matchMedia(\"(max-width: 760px)\").matches;\n\nconst appearance = () => {\n root.dataset.theme = theme.value;\n root.dataset.scheme = theme.value === \"system\" ? (system.matches ? \"dark\" : \"light\") : theme.value;\n root.dataset.density = density.value;\n root.dataset.sidebar = closed ? \"closed\" : \"open\";\n sidebar.hidden = closed;\n toggle.setAttribute(\"aria-expanded\", String(!closed));\n document.dispatchEvent(new Event(\"board-theme\"));\n};\n\nconst save = () => {\n appearance();\n try {\n localStorage.setItem(key, JSON.stringify({ theme: theme.value, density: density.value, closed }));\n status.textContent = \"\";\n } catch {\n status.textContent = \"Preferences apply to this page only.\";\n }\n};\n\ntheme.addEventListener(\"change\", save);\ndensity.addEventListener(\"change\", save);\ntoggle.addEventListener(\"click\", () => {\n closed = !closed;\n save();\n});\nsystem.addEventListener(\"change\", appearance);\nappearance();\n";
|
|
3
3
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/page/client.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/page/client.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,kgJAkGlB,CAAC;AACF,eAAO,MAAM,WAAW,m5DAiDvB,CAAC"}
|
package/dist/page/client.js
CHANGED
package/dist/page/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/page/client.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/page/client.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGrB,CAAC;AACF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD1B,CAAC"}
|
package/dist/page/diagrams.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const diagrams = "\nconst rendered = new Map();\nconst dark = matchMedia(\"(prefers-color-scheme: dark)\");\nlet mermaid;\nlet counter = 0;\n\nconst token = (name) => getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n\nconst load = async () => {\n mermaid ??= (await import(\"/_board/mermaid/mermaid.esm.min.mjs\")).default;\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: \"strict\",\n theme: \"base\",\n themeVariables: {\n darkMode: schemeNow() === \"dark\",\n background: token(\"--bg\"),\n primaryColor: token(\"--surface\"),\n primaryTextColor: token(\"--text\"),\n primaryBorderColor: token(\"--border\"),\n lineColor: token(\"--muted\"),\n textColor: token(\"--text\"),\n fontFamily: token(\"--sans\"),\n },\n });\n return mermaid;\n};\n\nconst schemeNow = () => document.documentElement.dataset.scheme ?? (dark.matches ? \"dark\" : \"light\");\nlet lastScheme = schemeNow();\n\nconst draw = async (figure) => {\n const source = figure.querySelector(\".diagram-source\").textContent;\n const scheme = schemeNow();\n const key = scheme + \":\" + source;\n if (!rendered.has(key)) {\n rendered.set(key, load().then((engine) => engine.render(\"diagram-\" + ++counter, source)).then((result) => result.svg));\n }\n try {\n const svg = await rendered.get(key);\n if (scheme !== schemeNow()) {\n rendered.delete(key);\n return;\n }\n figure.querySelector(\".diagram-svg\")?.remove();\n figure.insertAdjacentHTML(\"afterbegin\", '<div class=\"diagram-svg\">' + svg + \"</div>\");\n figure.dataset.state = \"drawn\";\n } catch (error) {\n rendered.delete(key);\n if (scheme !== schemeNow()) return;\n figure.querySelector(\".diagram-svg\")?.remove();\n figure.dataset.state = \"failed\";\n figure.dataset.error = String(error?.message ?? error);\n }\n};\n\nconst forget = (root) => {\n const shown = new Set([...root.querySelectorAll(\"figure.diagram .diagram-source\")].map((source) => source.textContent));\n for (const key of rendered.keys()) {\n if (!shown.has(key.slice(key.indexOf(\":\") + 1))) rendered.delete(key);\n }\n};\n\nexport const renderDiagrams = (root, selector = \"figure.diagram:not([data-state=drawn])\") => {\n forget(root);\n return Promise.all([...root.querySelectorAll(selector)].map(draw));\n};\n\nconst themeChanged = () => {\n const scheme = schemeNow();\n if (lastScheme === scheme) return;\n lastScheme = scheme;\n const doc = document.getElementById(\"doc\");\n if (doc) doc.dataset.scheme = scheme;\n mermaid = undefined;\n renderDiagrams(document, \"figure.diagram\");\n};\ndocument.addEventListener(\"board-theme\", themeChanged);\ndark.addEventListener(\"change\", themeChanged);\n";
|
|
1
|
+
export declare const diagrams = "\nimport { diagramTools } from \"/_board/visuals.js\";\nconst rendered = new Map();\nconst dark = matchMedia(\"(prefers-color-scheme: dark)\");\nlet mermaid;\nlet counter = 0;\n\nconst token = (name) => getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n\nconst load = async () => {\n mermaid ??= (await import(\"/_board/mermaid/mermaid.esm.min.mjs\")).default;\n mermaid.initialize({\n startOnLoad: false,\n securityLevel: \"strict\",\n theme: \"base\",\n themeVariables: {\n darkMode: schemeNow() === \"dark\",\n background: token(\"--bg\"),\n primaryColor: token(\"--surface\"),\n primaryTextColor: token(\"--text\"),\n primaryBorderColor: token(\"--border\"),\n lineColor: token(\"--muted\"),\n textColor: token(\"--text\"),\n fontFamily: token(\"--sans\"),\n },\n });\n return mermaid;\n};\n\nconst schemeNow = () => document.documentElement.dataset.scheme ?? (dark.matches ? \"dark\" : \"light\");\nlet lastScheme = schemeNow();\n\nconst draw = async (figure) => {\n const source = figure.querySelector(\".diagram-source\").textContent;\n const scheme = schemeNow();\n const key = scheme + \":\" + source;\n if (!rendered.has(key)) {\n rendered.set(key, load().then((engine) => engine.render(\"diagram-\" + ++counter, source)).then((result) => result.svg));\n }\n try {\n const svg = await rendered.get(key);\n if (scheme !== schemeNow()) {\n rendered.delete(key);\n return;\n }\n figure.querySelector(\".diagram-svg\")?.remove();\n figure.querySelector(\"[data-diagram-error]\")?.remove();\n figure.insertAdjacentHTML(\"afterbegin\", '<div class=\"diagram-svg\">' + svg + \"</div>\");\n figure.dataset.state = \"drawn\";\n diagramTools(figure);\n } catch (error) {\n rendered.delete(key);\n if (scheme !== schemeNow()) return;\n figure.querySelector(\".diagram-svg\")?.remove();\n figure.dataset.state = \"failed\";\n figure.dataset.error = String(error?.message ?? error);\n figure.querySelector(\"[data-diagram-error]\")?.remove();\n const message = document.createElement(\"p\"); message.setAttribute(\"data-diagram-error\", \"\"); message.setAttribute(\"role\", \"status\");\n message.textContent = \"Diagram could not be drawn: \" + figure.dataset.error; figure.append(message);\n diagramTools(figure);\n }\n};\n\nconst forget = (root) => {\n const shown = new Set([...root.querySelectorAll(\"figure.diagram .diagram-source\")].map((source) => source.textContent));\n for (const key of rendered.keys()) {\n if (!shown.has(key.slice(key.indexOf(\":\") + 1))) rendered.delete(key);\n }\n};\n\nexport const renderDiagrams = (root, selector = \"figure.diagram:not([data-state=drawn])\") => {\n forget(root);\n return Promise.all([...root.querySelectorAll(selector)].map(draw));\n};\n\nconst themeChanged = () => {\n const scheme = schemeNow();\n if (lastScheme === scheme) return;\n lastScheme = scheme;\n const doc = document.getElementById(\"doc\");\n if (doc) doc.dataset.scheme = scheme;\n mermaid = undefined;\n renderDiagrams(document, \"figure.diagram\");\n};\ndocument.addEventListener(\"board-theme\", themeChanged);\ndark.addEventListener(\"change\", themeChanged);\n";
|
|
2
2
|
//# sourceMappingURL=diagrams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagrams.d.ts","sourceRoot":"","sources":["../../src/page/diagrams.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"diagrams.d.ts","sourceRoot":"","sources":["../../src/page/diagrams.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,4rGAsFpB,CAAC"}
|
package/dist/page/diagrams.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export const diagrams = `
|
|
2
|
+
import { diagramTools } from "/_board/visuals.js";
|
|
2
3
|
const rendered = new Map();
|
|
3
4
|
const dark = matchMedia("(prefers-color-scheme: dark)");
|
|
4
5
|
let mermaid;
|
|
@@ -43,14 +44,20 @@ const draw = async (figure) => {
|
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
figure.querySelector(".diagram-svg")?.remove();
|
|
47
|
+
figure.querySelector("[data-diagram-error]")?.remove();
|
|
46
48
|
figure.insertAdjacentHTML("afterbegin", '<div class="diagram-svg">' + svg + "</div>");
|
|
47
49
|
figure.dataset.state = "drawn";
|
|
50
|
+
diagramTools(figure);
|
|
48
51
|
} catch (error) {
|
|
49
52
|
rendered.delete(key);
|
|
50
53
|
if (scheme !== schemeNow()) return;
|
|
51
54
|
figure.querySelector(".diagram-svg")?.remove();
|
|
52
55
|
figure.dataset.state = "failed";
|
|
53
56
|
figure.dataset.error = String(error?.message ?? error);
|
|
57
|
+
figure.querySelector("[data-diagram-error]")?.remove();
|
|
58
|
+
const message = document.createElement("p"); message.setAttribute("data-diagram-error", ""); message.setAttribute("role", "status");
|
|
59
|
+
message.textContent = "Diagram could not be drawn: " + figure.dataset.error; figure.append(message);
|
|
60
|
+
diagramTools(figure);
|
|
54
61
|
}
|
|
55
62
|
};
|
|
56
63
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagrams.js","sourceRoot":"","sources":["../../src/page/diagrams.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"diagrams.js","sourceRoot":"","sources":["../../src/page/diagrams.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsFvB,CAAC"}
|
package/dist/page/shell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/page/shell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/page/shell.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,KAAK,GACjB,OAAO,MAAM,EACb,KAAK,MAAM,EACX,MAAM,MAAM,EACZ,WAAW,MAAM,EACjB,OAAO,OAAO,EACd,WAAW,MAAM,EACjB,OAAM,OAAO,GAAG,UAAU,GAAG,SAAiB,KAC5C,MAmBQ,CAAC"}
|
package/dist/page/shell.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { fileUrl } from "#files/url.ts";
|
|
2
2
|
import { escapeHtml } from "./escape.js";
|
|
3
3
|
import { searchDialog } from "./searchDialog.js";
|
|
4
|
+
import { visualDialog } from "./visualDialog.js";
|
|
4
5
|
function location(file) {
|
|
5
6
|
return file
|
|
6
7
|
.split("/")
|
|
@@ -12,7 +13,7 @@ export const shell = (title, nav, main, workspace, board, identity, view = false
|
|
|
12
13
|
'<meta name="viewport" content="width=device-width, initial-scale=1"><meta name="color-scheme" content="light dark">',
|
|
13
14
|
`<title>${escapeHtml(title)}</title>`,
|
|
14
15
|
'<link rel="stylesheet" href="/_board/style.css"><script type="module" src="/_board/client.js"></script>',
|
|
15
|
-
'</head><body><a class="skip" href="#doc">Skip to content</a><div class="workspace">',
|
|
16
|
+
'</head><body><noscript><style>html:not([data-js]) figure.diagram .diagram-source{display:block}html:not([data-js]) figure.diagram[data-state="pending"]{min-height:0}</style></noscript><a class="skip" href="#doc">Skip to content</a><div class="workspace">',
|
|
16
17
|
'<aside id="sidebar" class="sidebar"><a class="brand" href="/">work board<span>Local workspace</span></a>',
|
|
17
18
|
'<div id="reading-library" class="reading-library" hidden></div><h2 class="nav-heading">Project files</h2>',
|
|
18
19
|
`<nav id="files" class="files" aria-label="Project files">${nav}</nav></aside>`,
|
|
@@ -24,6 +25,6 @@ export const shell = (title, nav, main, workspace, board, identity, view = false
|
|
|
24
25
|
'<div class="preference"><label for="density">Density</label><select id="density"><option value="comfortable">Comfortable</option><option value="compact">Compact</option></select></div>',
|
|
25
26
|
'<button id="updates-toggle" type="button" aria-pressed="false" disabled>Pause updates</button><span id="preference-status" role="status"></span></div>',
|
|
26
27
|
`<main${view ? ` data-view="${typeof view === "string" ? view : "work"}"` : ""}${identity ? ` data-identity="${escapeHtml(identity)}"` : ""} id="doc" data-file="${escapeHtml(title)}" data-url="${escapeHtml(fileUrl(title))}" class="${board ? "board-view" : "document-view"}" tabindex="-1">${main}</main>`,
|
|
27
|
-
`</div></div>${searchDialog}</body></html>`,
|
|
28
|
+
`</div></div>${searchDialog}${visualDialog}</body></html>`,
|
|
28
29
|
].join("");
|
|
29
30
|
//# sourceMappingURL=shell.js.map
|
package/dist/page/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/page/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,SAAS,QAAQ,CAAC,IAAY;IAC7B,OAAO,IAAI;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;SACjD,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CACpB,KAAa,EACb,GAAW,EACX,IAAY,EACZ,SAAiB,EACjB,KAAc,EACd,QAAiB,EACjB,OAAyC,KAAK,EACrC,EAAE,CACX;IACC,kDAAkD,UAAU,CAAC,SAAS,CAAC,gCAAgC;IACvG,qHAAqH;IACrH,UAAU,UAAU,CAAC,KAAK,CAAC,UAAU;IACrC,yGAAyG;IACzG,
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/page/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,SAAS,QAAQ,CAAC,IAAY;IAC7B,OAAO,IAAI;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;SACjD,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CACpB,KAAa,EACb,GAAW,EACX,IAAY,EACZ,SAAiB,EACjB,KAAc,EACd,QAAiB,EACjB,OAAyC,KAAK,EACrC,EAAE,CACX;IACC,kDAAkD,UAAU,CAAC,SAAS,CAAC,gCAAgC;IACvG,qHAAqH;IACrH,UAAU,UAAU,CAAC,KAAK,CAAC,UAAU;IACrC,yGAAyG;IACzG,gQAAgQ;IAChQ,0GAA0G;IAC1G,2GAA2G;IAC3G,4DAA4D,GAAG,gBAAgB;IAC/E,6IAA6I;IAC7I,iIAAiI,QAAQ,CAAC,KAAK,CAAC,QAAQ;IACxJ,kEAAkE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,kFAAkF,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,yEAAyE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,6QAA6Q;IACtnB,yEAAyE;IACzE,wMAAwM;IACxM,0LAA0L;IAC1L,wJAAwJ;IACxJ,QAAQ,IAAI,CAAC,CAAC,CAAC,eAAe,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAmB,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,wBAAwB,UAAU,CAAC,KAAK,CAAC,eAAe,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,mBAAmB,IAAI,SAAS;IAC/S,eAAe,YAAY,GAAG,YAAY,gBAAgB;CAC1D,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC"}
|
package/dist/page/style.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/page/style.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/page/style.ts"],"names":[],"mappings":"AA4DA,eAAO,MAAM,KAAK,QAC0H,CAAC"}
|
package/dist/page/style.js
CHANGED
|
@@ -3,6 +3,7 @@ import { workStyle } from "#views/workStyle.ts";
|
|
|
3
3
|
import { metadataStyles } from "./metadata.js";
|
|
4
4
|
import { readingStyles } from "./readingStyles.js";
|
|
5
5
|
import { searchStyles } from "./searchDialog.js";
|
|
6
|
+
import { visualStyles } from "./visualDialog.js";
|
|
6
7
|
import { layout, theme } from "./workspaceStyles.js";
|
|
7
8
|
const prose = `
|
|
8
9
|
h1, h2, h3, h4 { font-weight: 600; line-height: 1.25; margin: 1.6em 0 0.5em; }
|
|
@@ -50,8 +51,8 @@ figure.diagram { margin-left: 0; margin-right: 0; }
|
|
|
50
51
|
figure.diagram[data-state="pending"] { min-height: 12rem; background: var(--surface); border-radius: 6px; }
|
|
51
52
|
figure.diagram .diagram-source { display: none; }
|
|
52
53
|
figure.diagram[data-state="failed"] .diagram-source { display: block; }
|
|
53
|
-
|
|
54
|
+
[data-diagram-error] { color: var(--danger); font-size: 0.875em; }
|
|
54
55
|
@media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }
|
|
55
56
|
`;
|
|
56
|
-
export const style = theme + layout + prose + board + diagrams + readingStyles() + searchStyles + metadataStyles + workStyle() + attentionStyle();
|
|
57
|
+
export const style = theme + layout + prose + board + diagrams + readingStyles() + searchStyles + metadataStyles + workStyle() + attentionStyle() + visualStyles;
|
|
57
58
|
//# sourceMappingURL=style.js.map
|
package/dist/page/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/page/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Bb,CAAC;AAEF,MAAM,KAAK,GAAG;;;;;;;;;;;;CAYb,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;CAQhB,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/page/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Bb,CAAC;AAEF,MAAM,KAAK,GAAG;;;;;;;;;;;;CAYb,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;CAQhB,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GACjB,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,aAAa,EAAE,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,EAAE,GAAG,cAAc,EAAE,GAAG,YAAY,CAAC"}
|
package/dist/page/swap.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const swap = "\nconst containers = new Set([\"DIV\", \"SECTION\", \"ARTICLE\", \"HEADER\", \"FOOTER\", \"MAIN\", \"NAV\", \"FORM\", \"SELECT\", \"LABEL\", \"ASIDE\"]);\n\nconst structural = (element) => [...element.childNodes].every((node) => node.nodeType === 1 || node.textContent.trim() === \"\");\n\nconst pristine = new WeakMap();\nconst flash = (element) => {\n if (element.matches(\"[data-modified]\")) return;\n if (!element.matches(\"p, li, pre, blockquote, h1, h2, h3, h4, h5, h6, .item, .notes, .metadata-panel\")) return;\n element.setAttribute(\"data-live-change\", \"\");\n setTimeout(() => element.removeAttribute(\"data-live-change\"), 2500);\n};\n\nexport const remember = (element) => {\n pristine.set(element, element
|
|
1
|
+
export declare const swap = "\nconst containers = new Set([\"DIV\", \"SECTION\", \"ARTICLE\", \"HEADER\", \"FOOTER\", \"MAIN\", \"NAV\", \"FORM\", \"SELECT\", \"LABEL\", \"ASIDE\"]);\n\nconst structural = (element) => [...element.childNodes].every((node) => node.nodeType === 1 || node.textContent.trim() === \"\");\n\nconst pristine = new WeakMap();\nconst flash = (element) => {\n if (element.matches(\"[data-modified]\")) return;\n if (!element.matches(\"p, li, pre, blockquote, h1, h2, h3, h4, h5, h6, .item, .notes, .metadata-panel\")) return;\n element.setAttribute(\"data-live-change\", \"\");\n setTimeout(() => element.removeAttribute(\"data-live-change\"), 2500);\n};\n\nexport const remember = (element) => {\n pristine.set(element, normalized(element));\n if (containers.has(element.tagName)) for (const child of element.children) remember(child);\n};\n\nconst normalized = (element) => {\n const copy = element.cloneNode(true);\n for (const tool of copy.querySelectorAll(\"[data-visual-tools], [data-image-error], [data-diagram-error]\")) tool.remove();\n for (const node of [copy, ...copy.querySelectorAll(\"*\")]) {\n node.removeAttribute(\"data-live-change\");\n if (node.tagName === \"DETAILS\") node.removeAttribute(\"open\");\n if (node.matches(\"figure.diagram\")) {\n node.querySelector(\".diagram-svg\")?.remove();\n node.dataset.state = \"pending\";\n delete node.dataset.error;\n }\n if (node.matches(\"[data-modified]\")) node.textContent = \"\";\n if (node.matches(\"img[data-local-image]\")) {\n node.setAttribute(\"src\", node.dataset.localImage);\n for (const attribute of [\"tabindex\", \"role\", \"aria-label\"]) node.removeAttribute(attribute);\n }\n }\n return copy.outerHTML;\n};\n\nconst signature = (element) => {\n if (!pristine.has(element)) pristine.set(element, normalized(element));\n return pristine.get(element);\n};\n\nconst normalizedShell = (element) => { const copy = element.cloneNode(false); copy.removeAttribute(\"data-live-change\"); return copy.outerHTML; };\n\nconst sameShell = (old, next) =>\n old.tagName === next.tagName && containers.has(old.tagName) && normalizedShell(old) === normalizedShell(next);\n\nconst matches = (a, b) => {\n let start = 0;\n while (start < a.length && start < b.length && a[start] === b[start]) start++;\n let tail = 0;\n while (tail < a.length - start && tail < b.length - start && a[a.length - 1 - tail] === b[b.length - 1 - tail]) tail++;\n const n = a.length - start - tail;\n const m = b.length - start - tail;\n const table = Array.from({ length: n + 1 }, () => new Uint32Array(m + 1));\n for (let i = n - 1; i >= 0; i--) {\n for (let j = m - 1; j >= 0; j--) {\n table[i][j] = a[start + i] === b[start + j] ? table[i + 1][j + 1] + 1 : Math.max(table[i + 1][j], table[i][j + 1]);\n }\n }\n const pairs = Array.from({ length: start }, (_, index) => [index, index]);\n for (let i = 0, j = 0; i < n && j < m; ) {\n if (a[start + i] === b[start + j]) pairs.push([start + i++, start + j++]);\n else if (table[i + 1][j] >= table[i][j + 1]) i++;\n else j++;\n }\n for (let index = tail; index > 0; index--) pairs.push([a.length - index, b.length - index]);\n return [...pairs, [a.length, b.length]];\n};\n\nconst patch = (current, incoming, highlight) => {\n const selected = current.tagName === \"SELECT\" ? current.value : null;\n const fallback = incoming.tagName === \"SELECT\" ? incoming.value : null;\n if (!structural(current) || !structural(incoming)) {\n current.replaceChildren(...incoming.childNodes);\n for (const child of current.children) remember(child);\n if (highlight) flash(current);\n return;\n }\n const olds = [...current.children];\n const news = [...incoming.children];\n const signatures = news.map(normalized);\n const arrive = (index) => {\n remember(news[index]);\n if (highlight) flash(news[index]);\n return news[index];\n };\n let i = 0;\n let j = 0;\n for (const [kept, arrived] of matches(olds.map(signature), signatures)) {\n const anchor = olds[kept] ?? null;\n for (; i < kept && j < arrived; i++, j++) {\n if (sameShell(olds[i], news[j])) {\n patch(olds[i], news[j], highlight);\n pristine.set(olds[i], signatures[j]);\n } else olds[i].replaceWith(arrive(j));\n }\n for (; i < kept; i++) olds[i].remove();\n for (; j < arrived; j++) current.insertBefore(arrive(j), anchor);\n i++;\n j++;\n }\n if (selected !== null) current.value = [...current.options].some((option) => option.value === selected) ? selected : fallback;\n};\n\nconst keysOf = (root) => {\n const seen = new Map();\n return [...root.querySelectorAll(\"details\")].map((details) => {\n const base =\n details.dataset.key ??\n (details.closest(\".item\")?.querySelector(\"h3\")?.textContent ?? \"\") + \"|\" + (details.querySelector(\"summary\")?.textContent ?? \"\");\n const count = seen.get(base) ?? 0;\n seen.set(base, count + 1);\n return [base + \"#\" + count, details];\n });\n};\n\nconst carryDrawings = (drawings, figures) => {\n if (drawings.length !== figures.length) return;\n figures.forEach((figure, index) => {\n const drawing = drawings[index];\n if (figure.dataset.state !== \"pending\" || drawing === null || drawing.isConnected) return;\n figure.prepend(drawing);\n figure.dataset.state = \"redrawing\";\n });\n};\n\nexport const swap = (current, incoming, highlight = false) => {\n const before = keysOf(current);\n const open = new Map(before.map(([key, details]) => [key, details.open]));\n const existing = new Set(before.map(([, details]) => details));\n const drawings = [...current.querySelectorAll(\"figure.diagram\")].map((figure) => figure.querySelector(\".diagram-svg\"));\n patch(current, incoming, highlight);\n carryDrawings(drawings, [...current.querySelectorAll(\"figure.diagram\")]);\n for (const [key, details] of keysOf(current)) {\n const was = open.get(key);\n if (was !== undefined && !existing.has(details)) details.open = was;\n }\n};\n";
|
|
2
2
|
//# sourceMappingURL=swap.d.ts.map
|
package/dist/page/swap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/page/swap.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../src/page/swap.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,m7LA4IhB,CAAC"}
|
package/dist/page/swap.js
CHANGED
|
@@ -12,12 +12,13 @@ const flash = (element) => {
|
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
export const remember = (element) => {
|
|
15
|
-
pristine.set(element, element
|
|
15
|
+
pristine.set(element, normalized(element));
|
|
16
16
|
if (containers.has(element.tagName)) for (const child of element.children) remember(child);
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
const normalized = (element) => {
|
|
20
20
|
const copy = element.cloneNode(true);
|
|
21
|
+
for (const tool of copy.querySelectorAll("[data-visual-tools], [data-image-error], [data-diagram-error]")) tool.remove();
|
|
21
22
|
for (const node of [copy, ...copy.querySelectorAll("*")]) {
|
|
22
23
|
node.removeAttribute("data-live-change");
|
|
23
24
|
if (node.tagName === "DETAILS") node.removeAttribute("open");
|
|
@@ -27,6 +28,10 @@ const normalized = (element) => {
|
|
|
27
28
|
delete node.dataset.error;
|
|
28
29
|
}
|
|
29
30
|
if (node.matches("[data-modified]")) node.textContent = "";
|
|
31
|
+
if (node.matches("img[data-local-image]")) {
|
|
32
|
+
node.setAttribute("src", node.dataset.localImage);
|
|
33
|
+
for (const attribute of ["tabindex", "role", "aria-label"]) node.removeAttribute(attribute);
|
|
34
|
+
}
|
|
30
35
|
}
|
|
31
36
|
return copy.outerHTML;
|
|
32
37
|
};
|
|
@@ -75,7 +80,7 @@ const patch = (current, incoming, highlight) => {
|
|
|
75
80
|
}
|
|
76
81
|
const olds = [...current.children];
|
|
77
82
|
const news = [...incoming.children];
|
|
78
|
-
const signatures = news.map(
|
|
83
|
+
const signatures = news.map(normalized);
|
|
79
84
|
const arrive = (index) => {
|
|
80
85
|
remember(news[index]);
|
|
81
86
|
if (highlight) flash(news[index]);
|
package/dist/page/swap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/page/swap.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/page/swap.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4InB,CAAC"}
|