@getnarro/atlas 0.1.0 → 0.2.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 +70 -0
- package/package.json +2 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# @getnarro/atlas
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- cea1117: Three more scenes for `@getnarro/atlas`: a map, a gigapixel image, and a web page
|
|
8
|
+
|
|
9
|
+
**`@getnarro/atlas/map`** — a camera over real geography. Web Mercator is a plane, so
|
|
10
|
+
projecting the world onto the unit square turns longitude, latitude and zoom into an
|
|
11
|
+
ordinary framing: the same interpolation, the same checker, the same timeline, with no
|
|
12
|
+
second camera anywhere. The provider only converts on the way out.
|
|
13
|
+
|
|
14
|
+
It _tells_ the map where to be rather than asking it to fly. `flyTo` decides the camera
|
|
15
|
+
from the wall clock, which is the one thing a renderer advancing a frame counter cannot
|
|
16
|
+
use; a `jumpTo` per frame from a camera that is a pure function of time works in a deck, a
|
|
17
|
+
video and a page alike, and the frame is held until tiles and style have both arrived.
|
|
18
|
+
`maplibre-gl` is an optional peer that nothing here imports. Routes come with it:
|
|
19
|
+
`routeCamera` follows a traveller, and `routeTo` returns the line behind them, ending
|
|
20
|
+
exactly where they are.
|
|
21
|
+
|
|
22
|
+
**`@getnarro/atlas/image`** — a Deep Zoom pyramid, so a camera can fly all the way into a
|
|
23
|
+
40000×30000 scan for the same handful of tiles it costs at any other zoom. Cost follows the
|
|
24
|
+
screen, not the source. The readiness gate covers exactly the tiles the current framing
|
|
25
|
+
draws, and a tile that 404s counts as settled so one missing file cannot stall a render.
|
|
26
|
+
|
|
27
|
+
**`@getnarro/atlas/web`** and **`/embed`** — `<narro-atlas>`, driven by the page's scroll.
|
|
28
|
+
The third clock after a presenter's keypress and a renderer's frame counter, and nearly
|
|
29
|
+
free because the camera was already a pure function of a moment. The page's own markup is
|
|
30
|
+
both the scene and the no-JavaScript fallback: the element slots it rather than copying it,
|
|
31
|
+
and a waypoint can name any element in it. Reduced motion snaps to the nearest waypoint
|
|
32
|
+
rather than removing the feature. 8.5 KB, 3.6 KB gzipped, no framework.
|
|
33
|
+
|
|
34
|
+
`@getnarro/atlas/web` is importable during server rendering; the element itself lives in
|
|
35
|
+
`/embed`, because a class extending `HTMLElement` cannot be evaluated in Node.
|
|
36
|
+
|
|
37
|
+
- cea1117: Add `@getnarro/atlas` — a zooming canvas, and an ` ```atlas ` fence for it
|
|
38
|
+
|
|
39
|
+
One plane, many named framings, and a camera that moves between them instead of cutting.
|
|
40
|
+
Authored as a fence in markdown mode, as `<Atlas>` in React, and as `<AtlasScene>` in a
|
|
41
|
+
video, all over the same camera path.
|
|
42
|
+
|
|
43
|
+
**The camera does not lurch.** Every product in this field — and narro's own
|
|
44
|
+
`TransformSlide` — tweens the centre and the zoom as independent curves, which makes
|
|
45
|
+
_apparent_ speed vary by more than an order of magnitude across one flight. That mismatch
|
|
46
|
+
is the mechanical cause of the motion-sickness complaint the whole category attracts. This
|
|
47
|
+
uses van Wijk & Nuij's interpolation, which holds perceived speed constant; the property is
|
|
48
|
+
asserted by a test rather than claimed in a comment. It also means a flight knows how long
|
|
49
|
+
it should take, so `duration` is rarely worth setting.
|
|
50
|
+
|
|
51
|
+
**A waypoint frames a rectangle, not a scale.** `at: 0, 0, 4000` is a fact about the world
|
|
52
|
+
and survives a change of render target; a scale is a ratio against a viewport and does not.
|
|
53
|
+
A waypoint can also name a reference — `at: "#ingest"` — which the scene resolves.
|
|
54
|
+
|
|
55
|
+
**`narro check` refuses paths nobody could watch.** A zoom jump above 8x, a duration far
|
|
56
|
+
from what the move needs (including milliseconds typed into a seconds field), a framing
|
|
57
|
+
that cannot be rendered, a selector that matches nothing in a recording, a canvas with
|
|
58
|
+
nothing to show. Every one is decidable before anything is rendered, and nothing in this
|
|
59
|
+
field checks them.
|
|
60
|
+
|
|
61
|
+
**Zooming into a recorded app.** `@getnarro/atlas/replay` puts the camera over a
|
|
62
|
+
`@getnarro/replay` cast, so a control magnified 3x is still live DOM — sharp and
|
|
63
|
+
selectable, where a screenshot falls apart. Waypoints name a CSS selector rather than
|
|
64
|
+
coordinates, and `findInCast` verifies them offline.
|
|
65
|
+
|
|
66
|
+
**Cost.** One `translate3d(…) scale(…)` on one element per frame, whatever the scene holds;
|
|
67
|
+
nodes outside the frame are unmounted; `will-change: transform` is switched on for a flight
|
|
68
|
+
and off on arrival, so resting frames are sharp. `prefers-reduced-motion` is honoured by
|
|
69
|
+
cutting between waypoints rather than by hiding anything. The package reaches a deck only
|
|
70
|
+
when it has a fence.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getnarro/atlas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A spatial canvas for Narro — a camera path as text, one pure camera function over it, and scene providers a deck, a video and a web page all render the same way",
|
|
6
6
|
"license": "MIT",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"tsup": "8.5.1",
|
|
105
105
|
"typescript": "5.9.3",
|
|
106
106
|
"vitest": "4.0.14",
|
|
107
|
-
"@getnarro/replay": "0.
|
|
107
|
+
"@getnarro/replay": "0.2.0",
|
|
108
108
|
"@getnarro/video": "0.7.0"
|
|
109
109
|
},
|
|
110
110
|
"scripts": {
|