@motionscript/grids 0.0.0-stage → 0.1.0-alpha.10
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 +87 -0
- package/LICENSE +201 -0
- package/NOTICE +49 -0
- package/README.md +117 -2
- package/dist/browser/chunks/chunk-TYNFMZ3D.js +2 -0
- package/dist/browser/chunks/chunk-TYNFMZ3D.js.map +7 -0
- package/dist/browser/index.js +2 -0
- package/dist/browser/index.js.map +7 -0
- package/dist/browser/kit.js +2 -0
- package/dist/browser/kit.js.map +7 -0
- package/dist/browser/manifest.json +13 -0
- package/dist/engine.d.ts +13 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +13 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/kit/index.d.ts +9 -0
- package/dist/kit/index.d.ts.map +1 -0
- package/dist/kit/index.js +10 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/item-effects.d.ts +37 -0
- package/dist/kit/item-effects.d.ts.map +1 -0
- package/dist/kit/item-effects.js +76 -0
- package/dist/kit/item-effects.js.map +1 -0
- package/dist/kit/item-grid.d.ts +240 -0
- package/dist/kit/item-grid.d.ts.map +1 -0
- package/dist/kit/item-grid.js +492 -0
- package/dist/kit/item-grid.js.map +1 -0
- package/dist/kit/order.d.ts +13 -0
- package/dist/kit/order.d.ts.map +1 -0
- package/dist/kit/order.js +43 -0
- package/dist/kit/order.js.map +1 -0
- package/dist/kit/random.d.ts +7 -0
- package/dist/kit/random.d.ts.map +1 -0
- package/dist/kit/random.js +29 -0
- package/dist/kit/random.js.map +1 -0
- package/dist/kit/slots/index.d.ts +22 -0
- package/dist/kit/slots/index.d.ts.map +1 -0
- package/dist/kit/slots/index.js +28 -0
- package/dist/kit/slots/index.js.map +1 -0
- package/dist/kit/slots/path-templates.d.ts +15 -0
- package/dist/kit/slots/path-templates.d.ts.map +1 -0
- package/dist/kit/slots/path-templates.js +113 -0
- package/dist/kit/slots/path-templates.js.map +1 -0
- package/dist/kit/slots/path.d.ts +45 -0
- package/dist/kit/slots/path.d.ts.map +1 -0
- package/dist/kit/slots/path.js +87 -0
- package/dist/kit/slots/path.js.map +1 -0
- package/dist/kit/slots/radial.d.ts +30 -0
- package/dist/kit/slots/radial.d.ts.map +1 -0
- package/dist/kit/slots/radial.js +45 -0
- package/dist/kit/slots/radial.js.map +1 -0
- package/dist/kit/slots/rectangular.d.ts +42 -0
- package/dist/kit/slots/rectangular.d.ts.map +1 -0
- package/dist/kit/slots/rectangular.js +79 -0
- package/dist/kit/slots/rectangular.js.map +1 -0
- package/dist/kit/slots/slot.d.ts +62 -0
- package/dist/kit/slots/slot.d.ts.map +1 -0
- package/dist/kit/slots/slot.js +41 -0
- package/dist/kit/slots/slot.js.map +1 -0
- package/dist/kit/slots/sphere.d.ts +36 -0
- package/dist/kit/slots/sphere.d.ts.map +1 -0
- package/dist/kit/slots/sphere.js +68 -0
- package/dist/kit/slots/sphere.js.map +1 -0
- package/dist/kit/stagger.d.ts +24 -0
- package/dist/kit/stagger.d.ts.map +1 -0
- package/dist/kit/stagger.js +90 -0
- package/dist/kit/stagger.js.map +1 -0
- package/dist/nodes.d.ts +20 -0
- package/dist/nodes.d.ts.map +1 -0
- package/dist/nodes.js +11 -0
- package/dist/nodes.js.map +1 -0
- package/dist/path-grid/index.d.ts +2 -0
- package/dist/path-grid/index.d.ts.map +1 -0
- package/dist/path-grid/index.js +2 -0
- package/dist/path-grid/index.js.map +1 -0
- package/dist/path-grid/path-grid.d.ts +196 -0
- package/dist/path-grid/path-grid.d.ts.map +1 -0
- package/dist/path-grid/path-grid.js +149 -0
- package/dist/path-grid/path-grid.js.map +1 -0
- package/dist/radial-grid/index.d.ts +2 -0
- package/dist/radial-grid/index.d.ts.map +1 -0
- package/dist/radial-grid/index.js +2 -0
- package/dist/radial-grid/index.js.map +1 -0
- package/dist/radial-grid/radial-grid.d.ts +177 -0
- package/dist/radial-grid/radial-grid.d.ts.map +1 -0
- package/dist/radial-grid/radial-grid.js +63 -0
- package/dist/radial-grid/radial-grid.js.map +1 -0
- package/dist/rectangular-grid/index.d.ts +2 -0
- package/dist/rectangular-grid/index.d.ts.map +1 -0
- package/dist/rectangular-grid/index.js +2 -0
- package/dist/rectangular-grid/index.js.map +1 -0
- package/dist/rectangular-grid/rectangular-grid.d.ts +212 -0
- package/dist/rectangular-grid/rectangular-grid.d.ts.map +1 -0
- package/dist/rectangular-grid/rectangular-grid.js +118 -0
- package/dist/rectangular-grid/rectangular-grid.js.map +1 -0
- package/dist/sphere-grid/index.d.ts +2 -0
- package/dist/sphere-grid/index.d.ts.map +1 -0
- package/dist/sphere-grid/index.js +2 -0
- package/dist/sphere-grid/index.js.map +1 -0
- package/dist/sphere-grid/sphere-grid.d.ts +200 -0
- package/dist/sphere-grid/sphere-grid.d.ts.map +1 -0
- package/dist/sphere-grid/sphere-grid.js +102 -0
- package/dist/sphere-grid/sphere-grid.js.map +1 -0
- package/package.json +72 -3
- package/registry.json +32 -0
- package/src/engine.ts +12 -0
- package/src/index.ts +6 -0
- package/src/kit/index.ts +18 -0
- package/src/kit/item-effects.ts +114 -0
- package/src/kit/item-grid.ts +648 -0
- package/src/kit/order.ts +41 -0
- package/src/kit/random.ts +29 -0
- package/src/kit/slots/index.ts +39 -0
- package/src/kit/slots/path-templates.ts +120 -0
- package/src/kit/slots/path.ts +120 -0
- package/src/kit/slots/radial.ts +62 -0
- package/src/kit/slots/rectangular.ts +108 -0
- package/src/kit/slots/slot.ts +82 -0
- package/src/kit/slots/sphere.ts +94 -0
- package/src/kit/stagger.ts +96 -0
- package/src/nodes.ts +30 -0
- package/src/path-grid/index.ts +1 -0
- package/src/path-grid/path-grid.ts +186 -0
- package/src/radial-grid/index.ts +1 -0
- package/src/radial-grid/radial-grid.ts +81 -0
- package/src/rectangular-grid/index.ts +1 -0
- package/src/rectangular-grid/rectangular-grid.ts +145 -0
- package/src/sphere-grid/index.ts +1 -0
- package/src/sphere-grid/sphere-grid.ts +129 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What an item does on its way in (or out): grow from nothing, fade, fly out of
|
|
3
|
+
* the grid's centre, rise into place, flip up, or spin in.
|
|
4
|
+
*/
|
|
5
|
+
export const REVEAL_STYLES = ["scale", "fade", "center", "rise", "flip", "spin"];
|
|
6
|
+
/** What a wave does to each item as it passes. */
|
|
7
|
+
export const WAVE_STYLES = ["scale", "lift", "fade", "spin"];
|
|
8
|
+
/** Layer item `i`'s reveal, wave and focus onto its slot, in place. */
|
|
9
|
+
export function applyItemEffects(s, i, size, reveal, wave, focus) {
|
|
10
|
+
if (reveal)
|
|
11
|
+
applyReveal(s, reveal.style, reveal.values[i] ?? 1, size);
|
|
12
|
+
if (wave)
|
|
13
|
+
applyWave(s, wave, wave.values[i] ?? 0, size);
|
|
14
|
+
if (focus)
|
|
15
|
+
applyFocus(s, focus, focus.values[i] ?? 0);
|
|
16
|
+
}
|
|
17
|
+
function applyReveal(s, style, v, size) {
|
|
18
|
+
if (v === 1)
|
|
19
|
+
return;
|
|
20
|
+
const shown = clamp01(v);
|
|
21
|
+
switch (style) {
|
|
22
|
+
case "fade":
|
|
23
|
+
s.opacity *= shown;
|
|
24
|
+
break;
|
|
25
|
+
case "center":
|
|
26
|
+
s.x *= v;
|
|
27
|
+
s.y *= v;
|
|
28
|
+
s.depth *= v;
|
|
29
|
+
s.opacity *= clamp01(v * 4);
|
|
30
|
+
break;
|
|
31
|
+
case "rise":
|
|
32
|
+
s.y -= (1 - v) * Math.max(40, size.height);
|
|
33
|
+
s.opacity *= shown;
|
|
34
|
+
break;
|
|
35
|
+
case "flip":
|
|
36
|
+
s.rotationX += (1 - v) * 90;
|
|
37
|
+
break;
|
|
38
|
+
case "spin":
|
|
39
|
+
s.rotation -= (1 - v) * 180;
|
|
40
|
+
s.scale *= Math.max(0, v);
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
s.scale *= Math.max(0, v);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function applyWave(s, wave, w, size) {
|
|
47
|
+
if (w === 0)
|
|
48
|
+
return;
|
|
49
|
+
switch (wave.style) {
|
|
50
|
+
case "lift":
|
|
51
|
+
s.y += wave.amount * w * Math.max(40, size.height);
|
|
52
|
+
break;
|
|
53
|
+
case "fade":
|
|
54
|
+
s.opacity *= clamp01(1 - wave.amount * w);
|
|
55
|
+
break;
|
|
56
|
+
case "spin":
|
|
57
|
+
s.rotation += wave.amount * w * 360;
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
s.scale *= 1 + wave.amount * w;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function applyFocus(s, focus, f) {
|
|
64
|
+
if (f === 0)
|
|
65
|
+
return;
|
|
66
|
+
if (f > 0) {
|
|
67
|
+
s.scale *= 1 + focus.grow * f;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
s.opacity *= clamp01(1 - focus.dim * -f);
|
|
71
|
+
s.scale *= Math.max(0, 1 + focus.grow * 0.5 * f);
|
|
72
|
+
}
|
|
73
|
+
function clamp01(v) {
|
|
74
|
+
return v < 0 ? 0 : v > 1 ? 1 : v;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=item-effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-effects.js","sourceRoot":"","sources":["../../src/kit/item-effects.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAA;AAGzF,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAA;AA6BrE,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAC9B,CAAO,EACP,CAAS,EACT,IAAY,EACZ,MAAsC,EACtC,IAAkC,EAClC,KAAoC;IAEpC,IAAI,MAAM;QAAE,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;IACrE,IAAI,IAAI;QAAE,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;IACvD,IAAI,KAAK;QAAE,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,WAAW,CAAC,CAAO,EAAE,KAAkB,EAAE,CAAS,EAAE,IAAY;IACvE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAM;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACxB,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,CAAC,CAAC,OAAO,IAAI,KAAK,CAAA;YAClB,MAAK;QACP,KAAK,QAAQ;YACX,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACR,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACR,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;YACZ,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC3B,MAAK;QACP,KAAK,MAAM;YACT,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC1C,CAAC,CAAC,OAAO,IAAI,KAAK,CAAA;YAClB,MAAK;QACP,KAAK,MAAM;YACT,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;YAC3B,MAAK;QACP,KAAK,MAAM;YACT,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;YAC3B,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACzB,MAAK;QACP;YACE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,CAAO,EAAE,IAAe,EAAE,CAAS,EAAE,IAAY;IAClE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAM;IACnB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAClD,MAAK;QACP,KAAK,MAAM;YACT,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACzC,MAAK;QACP,KAAK,MAAM;YACT,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAA;YACnC,MAAK;QACP;YACE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAO,EAAE,KAAiB,EAAE,CAAS;IACvD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAM;IACnB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QAC7B,OAAM;IACR,CAAC;IACD,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC","sourcesContent":["import type { Size2D } from \"@motionscript/sdk\"\n\nimport type { Slot } from \"./slots\"\n\n/**\n * What an item does on its way in (or out): grow from nothing, fade, fly out of\n * the grid's centre, rise into place, flip up, or spin in.\n */\nexport const REVEAL_STYLES = [\"scale\", \"fade\", \"center\", \"rise\", \"flip\", \"spin\"] as const\nexport type RevealStyle = (typeof REVEAL_STYLES)[number]\n\n/** What a wave does to each item as it passes. */\nexport const WAVE_STYLES = [\"scale\", \"lift\", \"fade\", \"spin\"] as const\nexport type WaveStyle = (typeof WAVE_STYLES)[number]\n\n/**\n * How far into view each item is, `1` shown and `0` gone — past `1` on the\n * way to it under an overshooting ease. Absent means every item is shown.\n */\nexport interface RevealState {\n style: RevealStyle\n values: readonly number[]\n}\n\n/** Each item's share of the wave passing through it, `0` at rest and `1` at the crest. */\nexport interface WaveState {\n style: WaveStyle\n /** How big the crest is — a share of the item's size, opacity or a turn, by style. */\n amount: number\n values: readonly number[]\n}\n\n/** Each item's emphasis: `1` the focus, `-1` pushed back, `0` untouched. */\nexport interface FocusState {\n /** How far the others fade, `0..1`. */\n dim: number\n /** How much the focus grows, as a share of its size; the others shrink by half that. */\n grow: number\n values: readonly number[]\n}\n\n/** Layer item `i`'s reveal, wave and focus onto its slot, in place. */\nexport function applyItemEffects(\n s: Slot,\n i: number,\n size: Size2D,\n reveal: RevealState | null | undefined,\n wave: WaveState | null | undefined,\n focus: FocusState | null | undefined,\n): void {\n if (reveal) applyReveal(s, reveal.style, reveal.values[i] ?? 1, size)\n if (wave) applyWave(s, wave, wave.values[i] ?? 0, size)\n if (focus) applyFocus(s, focus, focus.values[i] ?? 0)\n}\n\nfunction applyReveal(s: Slot, style: RevealStyle, v: number, size: Size2D): void {\n if (v === 1) return\n const shown = clamp01(v)\n switch (style) {\n case \"fade\":\n s.opacity *= shown\n break\n case \"center\":\n s.x *= v\n s.y *= v\n s.depth *= v\n s.opacity *= clamp01(v * 4)\n break\n case \"rise\":\n s.y -= (1 - v) * Math.max(40, size.height)\n s.opacity *= shown\n break\n case \"flip\":\n s.rotationX += (1 - v) * 90\n break\n case \"spin\":\n s.rotation -= (1 - v) * 180\n s.scale *= Math.max(0, v)\n break\n default:\n s.scale *= Math.max(0, v)\n }\n}\n\nfunction applyWave(s: Slot, wave: WaveState, w: number, size: Size2D): void {\n if (w === 0) return\n switch (wave.style) {\n case \"lift\":\n s.y += wave.amount * w * Math.max(40, size.height)\n break\n case \"fade\":\n s.opacity *= clamp01(1 - wave.amount * w)\n break\n case \"spin\":\n s.rotation += wave.amount * w * 360\n break\n default:\n s.scale *= 1 + wave.amount * w\n }\n}\n\nfunction applyFocus(s: Slot, focus: FocusState, f: number): void {\n if (f === 0) return\n if (f > 0) {\n s.scale *= 1 + focus.grow * f\n return\n }\n s.opacity *= clamp01(1 - focus.dim * -f)\n s.scale *= Math.max(0, 1 + focus.grow * 0.5 * f)\n}\n\nfunction clamp01(v: number): number {\n return v < 0 ? 0 : v > 1 ? 1 : v\n}\n"]}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { type ChildView, type InsetsResolved, type LayoutBox, type LayoutItem, type Measurer, type Node2D, type NodeView, type Piece, type Placement2D, type RenderContext, type Size2D, type Timeline, type Values } from "@motionscript/sdk";
|
|
2
|
+
import { type FocusState, type RevealState, type WaveState } from "./item-effects.js";
|
|
3
|
+
import { type Arrangement, type Slot } from "./slots/index.js";
|
|
4
|
+
import { type StaggerOrder } from "./stagger.js";
|
|
5
|
+
/**
|
|
6
|
+
* What every grid is built from: a container that places each of its children
|
|
7
|
+
* in a slot of an arrangement — a rectangular grid, a ring, a path, a sphere.
|
|
8
|
+
* Spread `state` and `commands` in, take `defaults`, hand `fields` the
|
|
9
|
+
* {@link Arranger} that makes this grid's arrangement from its state, and pass
|
|
10
|
+
* the finished component and its arranger through {@link define}.
|
|
11
|
+
*
|
|
12
|
+
* ## Children only
|
|
13
|
+
*
|
|
14
|
+
* The items are the children, in layer order. A child's slot is a parent
|
|
15
|
+
* transform on it, so its own `x`/`y`/`rotation`/`scale` — and any command on
|
|
16
|
+
* them — still work, relative to the slot. A group is one item; a grid of
|
|
17
|
+
* grids is a grid of items that happen to be grids.
|
|
18
|
+
*
|
|
19
|
+
* ## One pass
|
|
20
|
+
*
|
|
21
|
+
* Every frame: measure the children, ask the arrangement for its slots (a pure
|
|
22
|
+
* function of the state, the sizes and the clock), blend them from where a
|
|
23
|
+
* transition is leaving, and layer on the per-item effects — reveal, wave,
|
|
24
|
+
* focus. What is left is each child's box and slot, which the renderer,
|
|
25
|
+
* picking and `global` all read, so a selection outline lands on the pixels
|
|
26
|
+
* even on a sphere.
|
|
27
|
+
*
|
|
28
|
+
* ## Commands
|
|
29
|
+
*
|
|
30
|
+
* Every command is a pure function of time. The per-item ones stagger *inside*
|
|
31
|
+
* their duration — a one-second reveal takes one second for four children or
|
|
32
|
+
* four hundred — and write their per-item state into entries
|
|
33
|
+
* (`revealState` and its siblings), which is what keeps them seekable. The ones
|
|
34
|
+
* that change the arrangement itself (a reorder, a morph, a column count) keep
|
|
35
|
+
* the arrangement they are leaving as data and blend each item from its old
|
|
36
|
+
* slot to its new one.
|
|
37
|
+
*/
|
|
38
|
+
/** An arrangement a grid is leaving, kept as data so its slots can be worked out afresh every frame. */
|
|
39
|
+
export interface GridSnapshot {
|
|
40
|
+
arrangement: Arrangement;
|
|
41
|
+
/** The grid the arrangement was borrowed from, or `""` for the grid's own. */
|
|
42
|
+
source: string;
|
|
43
|
+
order: readonly number[];
|
|
44
|
+
spread: number;
|
|
45
|
+
}
|
|
46
|
+
/** A change of arrangement under way: where the items are coming from, and how far each has come. */
|
|
47
|
+
export interface GridTransition {
|
|
48
|
+
from: GridSnapshot;
|
|
49
|
+
/** Each item's eased, staggered progress, `0..1`. */
|
|
50
|
+
mix: readonly number[];
|
|
51
|
+
}
|
|
52
|
+
/** The stagger options every per-item command takes. */
|
|
53
|
+
export interface StaggerArgs {
|
|
54
|
+
staggerOrder?: StaggerOrder;
|
|
55
|
+
/** `0..0.95`: how much of the command's length the items' offsets take up. */
|
|
56
|
+
stagger?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Every grid's document key — what a reference to "another grid" may name. A
|
|
60
|
+
* `nodeRef` descriptor carries it as `nodeTypes`, for a host's picker to offer
|
|
61
|
+
* only those.
|
|
62
|
+
*/
|
|
63
|
+
export declare const ITEM_GRID_TYPES: readonly ["rectangularGrid", "radialGrid", "pathGrid", "sphereGrid"];
|
|
64
|
+
/** The stagger a move to new slots takes when its command states none. */
|
|
65
|
+
export declare const TRANSITION_STAGGER = 0.3;
|
|
66
|
+
/** A reference to another node, a host's picker offering only `types`. Its fields read a view of it. */
|
|
67
|
+
export declare function nodeRef(types: readonly string[]): import("@motionscript/sdk").Type<string, NodeView<import("@motionscript/sdk").Element<string, unknown, unknown>> | null, false>;
|
|
68
|
+
/** The stagger args every per-item command takes, `stagger` defaulting to `fallback`. */
|
|
69
|
+
export declare function staggerArgs(fallback: number): {
|
|
70
|
+
staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
71
|
+
stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* A command arg a host fills in with `hint`, which a row may leave out: the
|
|
75
|
+
* command then keeps what the grid has. A run arg's default is both what a
|
|
76
|
+
* host offers and what an omitted arg means, so the hint rides on the arg's
|
|
77
|
+
* description alone, and an omitted arg reads `undefined`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function hinted<T extends number | string>(hint: T, options?: object): import("@motionscript/sdk").Type<T | undefined, T | undefined, false>;
|
|
80
|
+
/** A command arg naming another node, a host's picker offering only `types`; left out, it reads `undefined`. */
|
|
81
|
+
export declare function nodeRefArg(types: readonly string[]): import("@motionscript/sdk").Type<string | undefined, string | undefined, false>;
|
|
82
|
+
/** The state every grid shares. */
|
|
83
|
+
export declare const state: {
|
|
84
|
+
/** Items in slot order: slot `k` holds child `order[k]`. Empty is the children's own order. */
|
|
85
|
+
order: import("@motionscript/sdk").Type<number[], number[], false>;
|
|
86
|
+
/** `0` gathers every item at the centre, `1` is the arrangement, past `1` pushes them apart. */
|
|
87
|
+
spread: import("@motionscript/sdk").Type<number, number, false>;
|
|
88
|
+
/** Another grid whose arrangement this one takes on — what `morphInto` animates. */
|
|
89
|
+
arrangeLike: import("@motionscript/sdk").Type<string, NodeView<import("@motionscript/sdk").Element<string, unknown, unknown>> | null, false>;
|
|
90
|
+
revealState: import("@motionscript/sdk").Type<RevealState | null | undefined, RevealState | null | undefined, false>;
|
|
91
|
+
waveState: import("@motionscript/sdk").Type<WaveState | null | undefined, WaveState | null | undefined, false>;
|
|
92
|
+
focusState: import("@motionscript/sdk").Type<FocusState | null | undefined, FocusState | null | undefined, false>;
|
|
93
|
+
transition: import("@motionscript/sdk").Type<GridTransition | null | undefined, GridTransition | null | undefined, false>;
|
|
94
|
+
/** The grid a transition's leaving arrangement was borrowed from, followed while the items travel. */
|
|
95
|
+
transitionSource: import("@motionscript/sdk").Type<string, NodeView<import("@motionscript/sdk").Element<string, unknown, unknown>> | null, true>;
|
|
96
|
+
};
|
|
97
|
+
/** A grid's size is what its items come to, whether it was built with children or they arrive after it. */
|
|
98
|
+
export declare const defaults: {
|
|
99
|
+
readonly width: "hug";
|
|
100
|
+
readonly height: "hug";
|
|
101
|
+
};
|
|
102
|
+
/** What a grid's commands read of its state, beyond its own arrangement's entries. */
|
|
103
|
+
export type GridValues = Values<typeof state> & {
|
|
104
|
+
readonly padding: InsetsResolved;
|
|
105
|
+
};
|
|
106
|
+
/** What a grid's measure, layout and render read of its state, beyond its own arrangement's entries. */
|
|
107
|
+
export type GridState = GridValues & {
|
|
108
|
+
readonly width: LayoutItem["width"];
|
|
109
|
+
readonly height: LayoutItem["height"];
|
|
110
|
+
readonly children: readonly ChildView[];
|
|
111
|
+
};
|
|
112
|
+
/** What makes one grid's arrangement from its state: the rest of a grid is this module. */
|
|
113
|
+
export interface Arranger<S = unknown> {
|
|
114
|
+
/** This grid's own arrangement, for a content box of `box`. */
|
|
115
|
+
arrangement(state: S, box: Size2D): Arrangement;
|
|
116
|
+
/** The room each item is measured in — the whole content box, unless the arrangement has cells. */
|
|
117
|
+
itemSpace?(state: S, count: number, space: Size2D): Size2D;
|
|
118
|
+
}
|
|
119
|
+
type GridComponent = {
|
|
120
|
+
readonly key: string;
|
|
121
|
+
readonly node: abstract new (...args: never[]) => object;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* `component` as a grid: registers its `arranger`, which another grid borrowing
|
|
125
|
+
* its arrangement or morphing into it reads it by, and which {@link isGrid} knows it by.
|
|
126
|
+
*/
|
|
127
|
+
export declare function define<C extends GridComponent, S>(component: C, arranger: Arranger<S>): C;
|
|
128
|
+
/** Whether `value` is a node of one of the grids {@link define} has seen. */
|
|
129
|
+
export declare function isGrid(value: unknown): boolean;
|
|
130
|
+
/** The grid's measure, layout and render, for `arranger`'s arrangement: spread them into the component. */
|
|
131
|
+
export declare function fields<S>(arranger: Arranger<S>): {
|
|
132
|
+
measure: (measurer: Measurer, s: GridState & S, children: readonly ChildView[]) => Size2D;
|
|
133
|
+
layout: (box: LayoutBox, s: GridState & S, children: readonly ChildView[]) => readonly Placement2D[];
|
|
134
|
+
render: (ctx: RenderContext, s: GridState & S) => void;
|
|
135
|
+
};
|
|
136
|
+
export declare function measure<S>(measurer: Measurer, s: GridState & S, children: readonly ChildView[], arranger: Arranger<S>): Size2D;
|
|
137
|
+
export declare function layout<S>(box: LayoutBox, s: GridState & S, children: readonly ChildView[], arranger: Arranger<S>): readonly Placement2D[];
|
|
138
|
+
/**
|
|
139
|
+
* A grid whose arrangement has depth is seen through a camera of its own,
|
|
140
|
+
* which paints its items far to near — unless it already sits in a space (an
|
|
141
|
+
* orbit camera, a 3D stage), where its items join that one and its camera.
|
|
142
|
+
*/
|
|
143
|
+
export declare function render<S>(ctx: RenderContext, s: GridState & S, arranger: Arranger<S>): void;
|
|
144
|
+
/** A node's content box: its laid-out size inside its padding. */
|
|
145
|
+
export declare function contentBoxOf(grid: Node2D): Size2D;
|
|
146
|
+
type GridTimeline = Timeline<StaggerArgs, never>;
|
|
147
|
+
/**
|
|
148
|
+
* Each item's slot in its arrangement as it stands, for a command being built,
|
|
149
|
+
* at the clock commands are built against (the tree stands at time 0 while a
|
|
150
|
+
* timeline compiles): what its stagger is ranked by.
|
|
151
|
+
*/
|
|
152
|
+
export declare function itemSlots(timeline: Timeline<object, never>, s: GridValues, children: readonly ChildView[]): Slot[];
|
|
153
|
+
/** Each item's start in a stagger. A random order is seeded by the node's id, so it never changes between builds. */
|
|
154
|
+
export declare function ranks(timeline: Timeline<object, never>, s: GridValues, children: readonly ChildView[], order: StaggerOrder | undefined): number[];
|
|
155
|
+
/**
|
|
156
|
+
* Write `changes` to the arrangement and move each item from its slot in the
|
|
157
|
+
* one being left to its slot in the new one, staggered.
|
|
158
|
+
*/
|
|
159
|
+
export declare function transitionTo(timeline: GridTimeline, s: GridValues, children: readonly ChildView[], changes: Record<string, unknown>, stagger?: number): Piece;
|
|
160
|
+
/** Emphasise the items `isFocus` picks and push the rest back. */
|
|
161
|
+
export declare function focusOn(timeline: Timeline<object, never>, s: GridValues, isFocus: (item: number) => boolean, count: number, dim: number, grow: number): Piece;
|
|
162
|
+
export declare const commands: {
|
|
163
|
+
readonly reveal: {
|
|
164
|
+
readonly args: {
|
|
165
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
166
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
167
|
+
readonly style: import("@motionscript/sdk").Type<"center" | "scale" | "fade" | "rise" | "flip" | "spin", "center" | "scale" | "fade" | "rise" | "flip" | "spin", false>;
|
|
168
|
+
};
|
|
169
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
170
|
+
};
|
|
171
|
+
readonly conceal: {
|
|
172
|
+
readonly args: {
|
|
173
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
174
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
175
|
+
readonly style: import("@motionscript/sdk").Type<"center" | "scale" | "fade" | "rise" | "flip" | "spin", "center" | "scale" | "fade" | "rise" | "flip" | "spin", false>;
|
|
176
|
+
};
|
|
177
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
178
|
+
};
|
|
179
|
+
readonly wave: {
|
|
180
|
+
readonly args: {
|
|
181
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
182
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
183
|
+
readonly style: import("@motionscript/sdk").Type<"scale" | "fade" | "spin" | "lift", "scale" | "fade" | "spin" | "lift", false>;
|
|
184
|
+
readonly amount: import("@motionscript/sdk").Type<number, number, false>;
|
|
185
|
+
};
|
|
186
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
187
|
+
};
|
|
188
|
+
readonly focus: {
|
|
189
|
+
readonly args: {
|
|
190
|
+
readonly item: import("@motionscript/sdk").Type<number, number, false>;
|
|
191
|
+
readonly dim: import("@motionscript/sdk").Type<number, number, false>;
|
|
192
|
+
readonly grow: import("@motionscript/sdk").Type<number, number, false>;
|
|
193
|
+
};
|
|
194
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
195
|
+
};
|
|
196
|
+
readonly unfocus: (timeline: any, state: any, children: any) => Piece;
|
|
197
|
+
readonly spreadTo: {
|
|
198
|
+
readonly args: {
|
|
199
|
+
readonly spread: import("@motionscript/sdk").Type<number, number, false>;
|
|
200
|
+
};
|
|
201
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
202
|
+
};
|
|
203
|
+
readonly shuffle: {
|
|
204
|
+
readonly args: {
|
|
205
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
206
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
207
|
+
readonly seed: import("@motionscript/sdk").Type<number, number, false>;
|
|
208
|
+
};
|
|
209
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
210
|
+
};
|
|
211
|
+
readonly swap: {
|
|
212
|
+
readonly args: {
|
|
213
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
214
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
215
|
+
readonly first: import("@motionscript/sdk").Type<number, number, false>;
|
|
216
|
+
readonly second: import("@motionscript/sdk").Type<number, number, false>;
|
|
217
|
+
};
|
|
218
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
219
|
+
};
|
|
220
|
+
readonly reorder: {
|
|
221
|
+
readonly args: {
|
|
222
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
223
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
224
|
+
readonly order: import("@motionscript/sdk").Type<string, string, false>;
|
|
225
|
+
};
|
|
226
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
227
|
+
};
|
|
228
|
+
readonly morphInto: {
|
|
229
|
+
readonly args: {
|
|
230
|
+
readonly staggerOrder: import("@motionscript/sdk").Type<"path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", "path" | "row" | "column" | "angle" | "depth" | "index" | "reverse" | "random" | "centerOut" | "edgesIn", false>;
|
|
231
|
+
readonly stagger: import("@motionscript/sdk").Type<number, number, false>;
|
|
232
|
+
readonly target: import("@motionscript/sdk").Type<string | undefined, string | undefined, false>;
|
|
233
|
+
};
|
|
234
|
+
run(timeline: any, state: any, children: any): Piece;
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
/** A box of `size` inside `padding`: what a command reads as its grid's content box from `timeline.node.size`. */
|
|
238
|
+
export declare function contentBox(size: Size2D, padding: InsetsResolved): Size2D;
|
|
239
|
+
export {};
|
|
240
|
+
//# sourceMappingURL=item-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-grid.d.ts","sourceRoot":"","sources":["../../src/kit/item-grid.ts"],"names":[],"mappings":"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"}
|