@sebastianwessel/isostate 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/animation/controller.d.ts.map +1 -1
- package/dist/browser/isostate.runtime.js +19 -8
- package/dist/browser/isostate.runtime.js.map +1 -1
- package/dist/chunks/{index-CDQt8CfR.js → index-DEv2-G9F.js} +20 -9
- package/dist/chunks/index-DEv2-G9F.js.map +1 -0
- package/dist/dsl/index.js +1 -1
- package/dist/dsl/index.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/runtime/index.js +1 -1
- package/package.json +13 -1
- package/dist/chunks/index-CDQt8CfR.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# @sebastianwessel/isostate
|
|
2
|
+
|
|
3
|
+
Scroll-driven animated isometric scenes for product storytelling, technical
|
|
4
|
+
docs, and visual explainers.
|
|
5
|
+
|
|
6
|
+
Isostate renders compiled scene bundles as lightweight SVG. YAML parsing,
|
|
7
|
+
validation, and compilation happen at build time; browsers only receive the
|
|
8
|
+
runtime, compiled scene data, and referenced assets.
|
|
9
|
+
|
|
10
|
+
## Links
|
|
11
|
+
|
|
12
|
+
- Website: https://sebastianwessel.github.io/isostate
|
|
13
|
+
- Repository: https://github.com/sebastianwessel/isostate
|
|
14
|
+
- Issues: https://github.com/sebastianwessel/isostate/issues
|
|
15
|
+
- Documentation: https://sebastianwessel.github.io/isostate/docs/getting-started.md/
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @sebastianwessel/isostate
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The browser runtime has no production dependencies. The optional `yaml` peer is
|
|
24
|
+
only needed when you use the dev-time DSL APIs from `@sebastianwessel/isostate/dsl`.
|
|
25
|
+
|
|
26
|
+
## Runtime Usage
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
import { mountScene, type RuntimeBundle } from '@sebastianwessel/isostate';
|
|
30
|
+
import sceneBundle from './scene.isostate.js';
|
|
31
|
+
|
|
32
|
+
const target = document.querySelector<HTMLElement>('#scene');
|
|
33
|
+
if (!target) throw new Error('Missing #scene');
|
|
34
|
+
|
|
35
|
+
const mounted = mountScene(target, sceneBundle as RuntimeBundle, {
|
|
36
|
+
label: 'Product story',
|
|
37
|
+
controller: false
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
mounted.engine.setProgress(0.5);
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Dev-Time DSL Usage
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import {
|
|
47
|
+
compileScene,
|
|
48
|
+
parseScene,
|
|
49
|
+
toJs,
|
|
50
|
+
validateScene
|
|
51
|
+
} from '@sebastianwessel/isostate/dsl';
|
|
52
|
+
|
|
53
|
+
const document = parseScene(yamlText);
|
|
54
|
+
const report = validateScene(document);
|
|
55
|
+
if (!report.isValid) throw new Error(report.errors[0]?.message);
|
|
56
|
+
|
|
57
|
+
const bundle = compileScene(document);
|
|
58
|
+
const jsModule = toJs(bundle);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
For CLI validation, compilation, and static bundles, use
|
|
62
|
+
`@sebastianwessel/isostate-cli`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/animation/controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/animation/controller.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,MAAM,WAAW,gBAAgB;IAChC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,KAAK,QAAQ,GAAG,MAAM,gBAAgB,CAAC;AASvC,MAAM,WAAW,gBAAgB;IAChC,gGAAgG;IAChG,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,kHAAkH;IAClH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,eAAe,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IAC5C,YAAY,CAAC,EAAE;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;CACzD;AAmBD,UAAU,iBAAiB;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,YAAY,CAAC,EAAE,aAAa,CAAC;CAC7B;AAID;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAmD;IAGrE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,eAAe,CAAyD;IAEhF,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,WAAW,IAAI,MAAM;IAKrB,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,aAAa,IAAI,MAAM;IAKvB,IAAI,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,CAEpC;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,YAAY,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAE9D;IAED;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,GAAE,gBAAqB,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI;IAoBjG;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBnC;;OAEG;IACH,SAAS,IAAI,IAAI;IAQjB;;OAEG;IACH,SAAS,IAAI,IAAI;IAQjB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,MAAM,IAAI,IAAI;IAUd;;OAEG;IACH,QAAQ,IAAI,OAAO;IAKnB;;OAEG;IACH,OAAO,IAAI,IAAI;IAef,EAAE,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAOrE,GAAG,CAAC,CAAC,SAAS,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAQtE,OAAO,CAAC,KAAK;IAiBb,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAyCzB,OAAO,CAAC,sBAAsB;IA0C9B,OAAO,CAAC,+BAA+B;IAsDvC,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,6BAA6B;IAqBrC,OAAO,CAAC,4BAA4B;IA0BpC,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,SAAS,CAqBf;IAEF,OAAO,CAAC,SAAS,CAGf;IAEF,OAAO,CAAC,UAAU,CAShB;IAEF,OAAO,CAAC,aAAa,CASnB;IAEF,OAAO,CAAC,YAAY,CAelB;IAEF,OAAO,CAAC,WAAW,CAGjB;IAIF,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,mBAAmB;CAI3B"}
|
|
@@ -256,7 +256,7 @@ function interpolateConnector(id, prevStop, nextStop, t) {
|
|
|
256
256
|
route: interpolateRoute(prev.route, next.route, t),
|
|
257
257
|
layer: t < 1 ? prev.layer : next.layer,
|
|
258
258
|
lifecycle,
|
|
259
|
-
style: cloneConnectorStyle(next.style),
|
|
259
|
+
style: cloneConnectorStyle(t < 1 ? prev.style : next.style),
|
|
260
260
|
start: next.start,
|
|
261
261
|
end: next.end,
|
|
262
262
|
direction: next.direction,
|
|
@@ -1527,8 +1527,7 @@ function applyConnectorAmbientClasses(state, ambient) {
|
|
|
1527
1527
|
state.shaft.classList.remove(`iso-ambient-${name}`);
|
|
1528
1528
|
}
|
|
1529
1529
|
for (const name of next) {
|
|
1530
|
-
|
|
1531
|
-
state.shaft.classList.add(`iso-ambient-${name}`);
|
|
1530
|
+
state.shaft.classList.add(`iso-ambient-${name}`);
|
|
1532
1531
|
}
|
|
1533
1532
|
state.ambient = next;
|
|
1534
1533
|
}
|
|
@@ -1935,8 +1934,11 @@ class AnimationController {
|
|
|
1935
1934
|
if (entryAnim === "none")
|
|
1936
1935
|
return;
|
|
1937
1936
|
animateElement(state.node, `iso-anim-${entryAnim}`, "enter");
|
|
1937
|
+
const expectedAnimation = state.node.style.animation;
|
|
1938
1938
|
state.node.addEventListener("animationend", () => {
|
|
1939
|
-
state.node.style.animation
|
|
1939
|
+
if (state.node.style.animation === expectedAnimation) {
|
|
1940
|
+
state.node.style.animation = "";
|
|
1941
|
+
}
|
|
1940
1942
|
}, { once: true });
|
|
1941
1943
|
}
|
|
1942
1944
|
_applyExitAnimation(elDef, state) {
|
|
@@ -1946,8 +1948,11 @@ class AnimationController {
|
|
|
1946
1948
|
return;
|
|
1947
1949
|
}
|
|
1948
1950
|
animateElement(state.node, `iso-anim-${exitAnim}`, "exit");
|
|
1951
|
+
const expectedAnimation = state.node.style.animation;
|
|
1949
1952
|
state.node.addEventListener("animationend", () => {
|
|
1950
|
-
|
|
1953
|
+
if (state.node.style.animation === expectedAnimation) {
|
|
1954
|
+
hideElementAfterExit(state.node);
|
|
1955
|
+
}
|
|
1951
1956
|
}, { once: true });
|
|
1952
1957
|
}
|
|
1953
1958
|
_applyConnectorEntryAnimation(connectorDef, state) {
|
|
@@ -1955,8 +1960,11 @@ class AnimationController {
|
|
|
1955
1960
|
if (entryAnim === "none")
|
|
1956
1961
|
return;
|
|
1957
1962
|
animateElement(state.node, `iso-anim-${entryAnim}`, "enter");
|
|
1963
|
+
const expectedAnimation = state.node.style.animation;
|
|
1958
1964
|
state.node.addEventListener("animationend", () => {
|
|
1959
|
-
state.node.style.animation
|
|
1965
|
+
if (state.node.style.animation === expectedAnimation) {
|
|
1966
|
+
state.node.style.animation = "";
|
|
1967
|
+
}
|
|
1960
1968
|
}, { once: true });
|
|
1961
1969
|
}
|
|
1962
1970
|
_applyConnectorExitAnimation(connectorDef, state) {
|
|
@@ -1966,8 +1974,11 @@ class AnimationController {
|
|
|
1966
1974
|
return;
|
|
1967
1975
|
}
|
|
1968
1976
|
animateElement(state.node, `iso-anim-${exitAnim}`, "exit");
|
|
1977
|
+
const expectedAnimation = state.node.style.animation;
|
|
1969
1978
|
state.node.addEventListener("animationend", () => {
|
|
1970
|
-
|
|
1979
|
+
if (state.node.style.animation === expectedAnimation) {
|
|
1980
|
+
hideElementAfterExit(state.node);
|
|
1981
|
+
}
|
|
1971
1982
|
}, { once: true });
|
|
1972
1983
|
}
|
|
1973
1984
|
// ── Scene transitions ──────────────────────────────────────────────────
|
|
@@ -2202,7 +2213,7 @@ function oppositeEntryAnimation(exit) {
|
|
|
2202
2213
|
}
|
|
2203
2214
|
|
|
2204
2215
|
const RUNTIME_BUNDLE_FORMAT = "isostate-runtime-bundle";
|
|
2205
|
-
const RUNTIME_VERSION = "0.1.
|
|
2216
|
+
const RUNTIME_VERSION = "0.1.2";
|
|
2206
2217
|
const HEX_DIGEST_PATTERN = /^[a-f0-9]{64}$/;
|
|
2207
2218
|
/** Mount a compiled runtime bundle into an HTML element. */
|
|
2208
2219
|
function mountScene(target, bundle, options = {}) {
|