@shivaedev/work-board 0.5.0 → 0.6.1
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 +38 -0
- package/README.md +40 -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 +8 -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/code.d.ts +2 -8
- package/dist/render/code.d.ts.map +1 -1
- package/dist/render/code.js +26 -18
- package/dist/render/code.js.map +1 -1
- package/dist/render/documentHeadings.d.ts +2 -658
- package/dist/render/documentHeadings.d.ts.map +1 -1
- package/dist/render/documentHeadings.js +20 -23
- package/dist/render/documentHeadings.js.map +1 -1
- package/dist/render/documentLinks.d.ts +2 -658
- package/dist/render/documentLinks.d.ts.map +1 -1
- package/dist/render/documentLinks.js +23 -15
- package/dist/render/documentLinks.js.map +1 -1
- package/dist/render/footnotes.d.ts +2 -18
- package/dist/render/footnotes.d.ts.map +1 -1
- package/dist/render/footnotes.js +9 -11
- package/dist/render/footnotes.js.map +1 -1
- package/dist/render/markdown.d.ts.map +1 -1
- package/dist/render/markdown.js +13 -4
- package/dist/render/markdown.js.map +1 -1
- package/dist/render/textContent.d.ts +3 -0
- package/dist/render/textContent.d.ts.map +1 -0
- package/dist/render/textContent.js +7 -0
- package/dist/render/textContent.js.map +1 -0
- package/dist/search/collector.d.ts +2 -8
- package/dist/search/collector.d.ts.map +1 -1
- package/dist/search/collector.js +29 -25
- package/dist/search/collector.js.map +1 -1
- package/dist/search/entries.d.ts.map +1 -1
- package/dist/search/entries.js +7 -3
- package/dist/search/entries.js.map +1 -1
- package/dist/search/linkCollector.d.ts +2 -7
- package/dist/search/linkCollector.d.ts.map +1 -1
- package/dist/search/linkCollector.js +12 -13
- package/dist/search/linkCollector.js.map +1 -1
- package/package.json +10 -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 +8 -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/code.ts +29 -19
- package/src/render/documentHeadings.ts +21 -23
- package/src/render/documentLinks.ts +24 -15
- package/src/render/footnotes.ts +11 -14
- package/src/render/markdown.ts +17 -4
- package/src/render/textContent.ts +8 -0
- package/src/search/collector.ts +30 -27
- package/src/search/entries.ts +7 -3
- package/src/search/linkCollector.ts +13 -13
package/CHANGELOG.md
CHANGED
|
@@ -4,8 +4,46 @@
|
|
|
4
4
|
|
|
5
5
|
### Changed
|
|
6
6
|
|
|
7
|
+
- Prepare concrete step 11 visual-document source examples for discussion; the
|
|
8
|
+
proposed block conventions are not implemented or approved yet.
|
|
7
9
|
- 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
10
|
|
|
11
|
+
## 0.6.1 - 2026-10-06
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Adopt Antumbra's `react-markdown` and `remark-gfm` rendering stack on the
|
|
16
|
+
server, retaining no-JavaScript reading, local links/images, generated heading
|
|
17
|
+
anchors, scoped footnotes, raw-HTML details and Shiki highlighting. Search uses
|
|
18
|
+
the same Markdown/GFM processing and heading rules as the reader. Rendering
|
|
19
|
+
and search plugins now use unified transformers rather than Satteri visitors;
|
|
20
|
+
Satteri remains only for legacy heading-board source segmentation.
|
|
21
|
+
- Match Antumbra's Mermaid error-rendering setting so parse failures show a local
|
|
22
|
+
diagnostic/source without inserting Mermaid's global error diagram. Existing
|
|
23
|
+
local assets, strict rendering and visual inspection remain available.
|
|
24
|
+
- Keep the custom step 11 metric/progress/timeline source-format proposal open;
|
|
25
|
+
the renderer adoption does not settle that authoring contract.
|
|
26
|
+
|
|
27
|
+
## 0.6.0 - 2026-10-06
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- Serve source-relative PNG, JPEG, GIF and WebP images inside the workspace with
|
|
32
|
+
loopback guards, resolved-path containment, correct media headers, no caching
|
|
33
|
+
and a 16 MiB limit. Refuse traversal, escaping file/directory links and active
|
|
34
|
+
attachment formats. Watch image edits through native reconciliation.
|
|
35
|
+
- Add a keyboard image gallery and Mermaid inspection with bounded zoom, a
|
|
36
|
+
scrollable/fullscreen viewport, local downloads and focus restoration. Explain
|
|
37
|
+
missing images and failed diagrams; retain Mermaid source without JavaScript.
|
|
38
|
+
- Disclose an open preview after source updates and require reopening before
|
|
39
|
+
saving it. Downloads copy files locally and never write workspace sources.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- Normalize visual controls and refreshed image URLs during reading-state swaps
|
|
44
|
+
so unchanged images and drawings keep their source context. Existing history
|
|
45
|
+
baselines remain Markdown-only; image bytes are not added to Mark seen snapshots.
|
|
46
|
+
|
|
9
47
|
## 0.5.0 - 2026-10-06
|
|
10
48
|
|
|
11
49
|
### 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
|
|
@@ -364,3 +394,11 @@ sets the waves, acceptance criteria, and open design decisions.
|
|
|
364
394
|
[Experience designs and mockups](https://github.com/ShivaeDev/platform/blob/main/packages/work-board/docs/vision/experience.md)
|
|
365
395
|
illustrate the target with fictional data. These are future plans; the sections
|
|
366
396
|
above describe the package's current behavior.
|
|
397
|
+
|
|
398
|
+
### Markdown rendering
|
|
399
|
+
|
|
400
|
+
Work Board uses Antumbra's `react-markdown` and `remark-gfm` libraries for
|
|
401
|
+
server-rendered Markdown, with locally served Mermaid for ordinary `mermaid`
|
|
402
|
+
fences. Existing local links, images, heading anchors, footnotes, raw-HTML details
|
|
403
|
+
and Shiki code highlighting remain available without React client state. Mermaid
|
|
404
|
+
rendering and inspection need JavaScript; its source remains readable without it.
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAkC,MAAM,QAAQ,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAA2B,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAoB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAuB,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClI,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,MAAM,MAAM,GAAG,CAAC,OAAqB,EAAE,EAAE,CACxC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtH,MAAM,KAAK,GAAG,CAAI,KAA2B,EAAE,OAAmB,EAAE,SAAyB,KAAK,EAAE,EAAE,CACrG,MAAM,CAAC,GAAG,CACT,MAAM,EACN,KAAK,EACL,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAC3E,CAAC;IACH,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACvC,KAAK,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC/C,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC7C,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;QACjD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACtC,SAAS,QAAQ,CAAC,GAAW;QAC5B,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC;QAC3D,IAAI,QAAkC,CAAC;QACvC,QAAQ,QAAQ,EAAE,CAAC;YAClB,KAAK,cAAc;gBAClB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM;YACP,KAAK,kBAAkB;gBACtB,QAAQ,GAAG,YAAY,EAAE,CAAC;gBAC1B,MAAM;YACP,KAAK,iBAAiB;gBACrB,QAAQ,GAAG,WAAW,EAAE,CAAC;gBACzB,MAAM;YACP;gBACC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3G,KAAK,CAAC,CAAC,KAAK,CACX,aAAa,EACb,CAAC,OAAO,EAAE,EAAE,CACX,UAAU,CAAC,OAAO,CAAC;QAClB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC/E,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,EACjF,MAAM,CACN,CAAC;IACF,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzB,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC,CAAC,CACF,CAAC;AAKH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAqB,EAAiD,EAAE,CAClG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
|
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.1";
|
|
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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,MAAM,GAAmE;IACrF,CAAC,mBAAmB,EAAE,KAAK,EAAE,UAAU,CAAC;IACxC,CAAC,wBAAwB,EAAE,WAAW,EAAE,EAAE,iBAAiB,CAAC;IAC5D,CAAC,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,CAAC;IAChD,CAAC,iBAAiB,EAAE,SAAS,EAAE,EAAE,iBAAiB,CAAC;IACnD,CAAC,oBAAoB,EAAE,aAAa,EAAE,EAAE,iBAAiB,CAAC;IAC1D,CAAC,wBAAwB,EAAE,WAAW,EAAE,iBAAiB,CAAC;IAC1D,CAAC,mBAAmB,EAAE,YAAY,EAAE,EAAE,iBAAiB,CAAC;IACxD,CAAC,2BAA2B,EAAE,mBAAmB,EAAE,EAAE,iBAAiB,CAAC;IACvE,CAAC,oBAAoB,EAAE,aAAa,EAAE,EAAE,iBAAiB,CAAC;IAC1D,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,EAAE,iBAAiB,CAAC;IAChE,CAAC,uBAAuB,EAAE,eAAe,EAAE,EAAE,iBAAiB,CAAC;IAC/D,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,CAAC;IACrE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,iBAAiB,CAAC;IACpD,CAAC,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,CAAC;CAC5C,CAAC;AAEF,MAAM,OAAO,GAAG,kBAAkB,CAAC;AAEnC,MAAM,OAAO,cAAe,SAAQ,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAA8B;CAAG;AAEtG,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC;IACtE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnJ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAmB,EAAE,EAAE,CAClD,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAA4C;IACzF,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAChH,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1G,OAAO,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC7D,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,aAAa,GAAyB,GAAG,OAAO,GAAG,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAyB,mBAAmB,CAAC;AACtE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC;IACtE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC"}
|
|
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 suppressErrorRendering: true,\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,+tGAuFpB,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;
|
|
@@ -10,6 +11,7 @@ const load = async () => {
|
|
|
10
11
|
mermaid ??= (await import("/_board/mermaid/mermaid.esm.min.mjs")).default;
|
|
11
12
|
mermaid.initialize({
|
|
12
13
|
startOnLoad: false,
|
|
14
|
+
suppressErrorRendering: true,
|
|
13
15
|
securityLevel: "strict",
|
|
14
16
|
theme: "base",
|
|
15
17
|
themeVariables: {
|
|
@@ -43,14 +45,20 @@ const draw = async (figure) => {
|
|
|
43
45
|
return;
|
|
44
46
|
}
|
|
45
47
|
figure.querySelector(".diagram-svg")?.remove();
|
|
48
|
+
figure.querySelector("[data-diagram-error]")?.remove();
|
|
46
49
|
figure.insertAdjacentHTML("afterbegin", '<div class="diagram-svg">' + svg + "</div>");
|
|
47
50
|
figure.dataset.state = "drawn";
|
|
51
|
+
diagramTools(figure);
|
|
48
52
|
} catch (error) {
|
|
49
53
|
rendered.delete(key);
|
|
50
54
|
if (scheme !== schemeNow()) return;
|
|
51
55
|
figure.querySelector(".diagram-svg")?.remove();
|
|
52
56
|
figure.dataset.state = "failed";
|
|
53
57
|
figure.dataset.error = String(error?.message ?? error);
|
|
58
|
+
figure.querySelector("[data-diagram-error]")?.remove();
|
|
59
|
+
const message = document.createElement("p"); message.setAttribute("data-diagram-error", ""); message.setAttribute("role", "status");
|
|
60
|
+
message.textContent = "Diagram could not be drawn: " + figure.dataset.error; figure.append(message);
|
|
61
|
+
diagramTools(figure);
|
|
54
62
|
}
|
|
55
63
|
};
|
|
56
64
|
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFvB,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"}
|