@tawaship/pixi-animate-runtime 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +452 -2
- package/bin/pixi-animate-runtime.js +27 -0
- package/dist/generator.cjs.js +1056 -0
- package/dist/generator.cjs.js.map +1 -0
- package/dist/pixi-animate-runtime.cjs.js +3678 -0
- package/dist/pixi-animate-runtime.cjs.js.map +1 -0
- package/dist/pixi-animate-runtime.esm.js +3613 -0
- package/dist/pixi-animate-runtime.esm.js.map +1 -0
- package/dist/pixi-animate-runtime.js +3680 -0
- package/dist/pixi-animate-runtime.js.map +1 -0
- package/dist-skills/animate-data-converter-guide/SKILL.md +86 -0
- package/dist-skills/pixi-animate-runtime-guide/SKILL.md +146 -0
- package/package.json +70 -4
- package/tools/pixi-animate-runtime.bat +8 -0
- package/types/generator/generator/cli.d.ts +17 -0
- package/types/generator/generator/converter-version.d.ts +7 -0
- package/types/generator/generator/generate.d.ts +33 -0
- package/types/generator/generator/index.d.ts +6 -0
- package/types/generator/generator/plan.d.ts +87 -0
- package/types/generator/player/data.d.ts +141 -0
- package/types/generator/player/ease.d.ts +11 -0
- package/types/generator/player/semver.d.ts +27 -0
- package/types/generator/player/version.d.ts +2 -0
- package/types/player/animate-container.d.ts +71 -0
- package/types/player/content.d.ts +170 -0
- package/types/player/data.d.ts +141 -0
- package/types/player/display.d.ts +186 -0
- package/types/player/ease.d.ts +11 -0
- package/types/player/events.d.ts +60 -0
- package/types/player/geom.d.ts +19 -0
- package/types/player/index.d.ts +20 -0
- package/types/player/loader.d.ts +53 -0
- package/types/player/movieclip.d.ts +191 -0
- package/types/player/objects.d.ts +320 -0
- package/types/player/semver.d.ts +27 -0
- package/types/player/transform.d.ts +32 -0
- package/types/player/version.d.ts +2 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: animate-data-converter-guide
|
|
3
|
+
description: Use this skill whenever the user asks to extract, inspect, or debug the data that @tawaship/animate-data-converter extracts from Adobe Animate HTML5 Canvas (CreateJS) publish output — the engine-independent symbol and timeline definitions (IDefinition). Trigger on any mention of 'animate-data-converter', 'extractPublishedFile', 'extractPublished', 'expand', 'compact', 'IDefinition', 'converterVersion', definition JSON files, or unsupported-feature 'issues' reported for Animate content. To play content on PixiJS, use the pixi-animate-runtime-guide skill instead (its generator runs this converter for you); with Pixim.js, the pixim-animate-runtime-guide skill.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# @tawaship/animate-data-converter development skill
|
|
7
|
+
|
|
8
|
+
Supported versions: **`^0.1.0`** (written against `0.1.0`).
|
|
9
|
+
|
|
10
|
+
First determine the installed version (`node_modules/@tawaship/animate-data-converter/package.json`). If it is outside the supported range, **treat the type definitions in node_modules as authoritative** and follow them wherever they disagree with this skill.
|
|
11
|
+
|
|
12
|
+
The content is assumed to be published by **Adobe Animate 24.0.15** for HTML5 Canvas, the only version checked: this package depends on the form of the published JavaScript. If the user's content comes from another version of Animate and something does not work, mention this before looking for other causes.
|
|
13
|
+
|
|
14
|
+
## Overview
|
|
15
|
+
|
|
16
|
+
`@tawaship/animate-data-converter` reads the JavaScript that Adobe Animate publishes for HTML5 Canvas and extracts every symbol and its timeline as plain data (JSON-compatible), one definition per symbol, shared by every instance. A player for a specific engine builds on this data, so content can be played without CreateJS or the published code at play time.
|
|
17
|
+
|
|
18
|
+
- It runs in **Node.js 18 or later only**, at development time. Never suggest running it in the browser
|
|
19
|
+
- It reads only the published JavaScript. Images and sounds are not read, and CreateJS 1.0.0 comes with the package
|
|
20
|
+
- Most users do not call it directly: `@tawaship/pixi-animate-runtime`'s generator (`npx --no-install @tawaship/pixi-animate-runtime`) runs it. Use the converter directly only to keep definitions as files, to inspect them, or to build a player of your own
|
|
21
|
+
|
|
22
|
+
## Type definition files
|
|
23
|
+
|
|
24
|
+
**Before writing code that uses this package, check the corresponding type definition file.** Read them from the package installed in the project (`node_modules/@tawaship/animate-data-converter/types/`); that is the single source of truth.
|
|
25
|
+
|
|
26
|
+
| What | Type definition file |
|
|
27
|
+
|---|---|
|
|
28
|
+
| Entry point (everything exported) | `types/index.d.ts` |
|
|
29
|
+
| The definition (`IDefinition` and the types it is made of) | `types/types.d.ts` |
|
|
30
|
+
| `extractPublishedFile`, `extractPublished` | `types/load.d.ts` |
|
|
31
|
+
| `expand`, `compact`, `SLOT_DEFAULTS` | `types/compact.d.ts` |
|
|
32
|
+
| `extract` | `types/extract.d.ts` |
|
|
33
|
+
| The CreateJS surface `extract` reads | `types/createjs.d.ts` |
|
|
34
|
+
|
|
35
|
+
## Basic usage
|
|
36
|
+
|
|
37
|
+
### Command line
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
npx --no-install @tawaship/animate-data-converter game.js --out game.json --pretty
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- `-o, --out <file>`: where to write (standard output without it). `-p, --pretty`: indented JSON. `-e, --expanded`: the expanded form instead of the compact one. `-f, --force`: write even with unsupported features. `-h, --help`: the usage
|
|
44
|
+
- Exit code `1` when the content uses unsupported features (each one is listed, nothing is written unless `--force` is given), `2` when the file cannot be read or is not Animate HTML5 Canvas output
|
|
45
|
+
|
|
46
|
+
### API
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
const { extractPublishedFile } = require('@tawaship/animate-data-converter');
|
|
50
|
+
|
|
51
|
+
extractPublishedFile('game.js').then(definition => {
|
|
52
|
+
definition.issues.forEach(issue => console.warn(issue.symbol, issue.message));
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The published code runs in a sandbox (QuickJS, a JavaScript engine compiled to WebAssembly, given nothing of the host), so extraction is asynchronous. Still tell the user to convert only content they trust (see the README).
|
|
57
|
+
|
|
58
|
+
| Function | Use it for |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `extractPublishedFile(path)` | Extracting from a file (returns a promise) |
|
|
61
|
+
| `extractPublished({ published })` | Extracting from source text already in hand (returns a promise) |
|
|
62
|
+
| `extract(createjs, source)` | Extracting from content already running in an environment you set up |
|
|
63
|
+
| `expand(definition)` / `compact(expanded)` | Converting between the compact form (what extraction gives) and the expanded form (every value as it is) |
|
|
64
|
+
|
|
65
|
+
When calling `extract()` on an environment of your own, images created while symbols are constructed must report that they have loaded as soon as an `onload` handler is assigned; otherwise bitmap fills from sprite sheets are missing from the definition. Prefer `extractPublished()`, which runs the published code in its sandbox (QuickJS) and does this.
|
|
66
|
+
|
|
67
|
+
## What the definition holds
|
|
68
|
+
|
|
69
|
+
The definition is extracted in its **compact form** (`form: 'compact'`): every value kept, written once (drawings in the content's `graphics` with `commandKinds`, slots as `slotTemplates` plus initial values, each tween's distinct `values` with the index of every position's values in `frames`). `expand()` gives the **expanded form** (`form: 'expanded'`), every value where it applies; read `IExpandedDefinition` for that. The README's "Reading a definition" explains both. pixi-animate-runtime's generator takes the compact form only.
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
- `symbols`: every symbol of the published `lib`, under its library name (non-ASCII names kept as they are). Published content has no root of its own; any symbol can be played as a root (the published HTML picks one)
|
|
73
|
+
- For a movie clip: labels, length, the display objects it owns with their initial state, masks, buttons, color effects, caching, and its tweens with **the exact value of every controlled property at every frame** (not approximated)
|
|
74
|
+
- Frame scripts as their **source text**, unchanged. They are not run or rewritten
|
|
75
|
+
- `manifest`, `spriteSheets`, `properties` (size, frame rate, background color), `issues`
|
|
76
|
+
- `converterVersion`: the converter version that extracted it. A reader of kept definition files can tell from it whether it knows their form
|
|
77
|
+
|
|
78
|
+
## Important notes
|
|
79
|
+
|
|
80
|
+
### Unsupported content is reported, not guessed
|
|
81
|
+
|
|
82
|
+
When `issues` is not empty, the content uses something outside the supported range (the Animate camera / "Advanced Layers", filters other than color effects, event listeners added by symbol code, hand-written looping/reversed tweens, non-plain frame script functions, display objects other than MovieClip/Shape/Sprite/Bitmap/Text). Report the listed issues to the user and suggest changing the Animate document (for the camera: delete the camera layer and publish again). Do not suggest `--force` as a fix: it only writes the data anyway.
|
|
83
|
+
|
|
84
|
+
### Publish again → extract again
|
|
85
|
+
|
|
86
|
+
The definition is a snapshot of one publish. After the content is published again from Animate, extract (or generate) again.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pixi-animate-runtime-guide
|
|
3
|
+
description: Use this skill whenever the user asks to create, edit, or debug content using @tawaship/pixi-animate-runtime — a player that plays Adobe Animate HTML5 Canvas (CreateJS) content on pixi.js from runtime content files generated at development time, without CreateJS. Trigger on any mention of 'pixi-animate-runtime', 'runtime content', 'Animate コンテンツ', 'Adobe Animate' or 'createjs' in a project that has @tawaship/pixi-animate-runtime installed, or on concepts like loadContentAsync, AnimateContainer, AnimateController, content.create, PIXI.animateRuntime, or the 'npx pixi-animate-runtime' command. If the project uses @tawaship/pixi-animate-container instead (CreateJS at run time, loadAssetAsync), use the pixi-animate-container-guide skill. If the user is working with Pixim.js, use the pixim-animate-runtime-guide skill (it builds on this one).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# @tawaship/pixi-animate-runtime development skill
|
|
7
|
+
|
|
8
|
+
Supported versions: **`^0.1.0`** (written against `0.1.0`).
|
|
9
|
+
|
|
10
|
+
First determine the installed version (`node_modules/@tawaship/pixi-animate-runtime/package.json`). If it is outside the supported range, **treat the type definitions in node_modules as authoritative** and follow them wherever they disagree with this skill.
|
|
11
|
+
|
|
12
|
+
The content is assumed to be published by **Adobe Animate 24.0.15** for HTML5 Canvas, the only version checked: this package depends on the form of the published JavaScript. If the user's content comes from another version of Animate and something does not work, mention this before looking for other causes.
|
|
13
|
+
|
|
14
|
+
## Dependencies
|
|
15
|
+
|
|
16
|
+
Read these skills first if they are available, then apply this one:
|
|
17
|
+
|
|
18
|
+
- A PixiJS v5.3 skill (such as pixijs-guide): the player runs on pixi.js 5.3 (`^5.3.2`)
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
"Animate content" is what Adobe Animate publishes in HTML5 Canvas mode: a JavaScript file (plus images) that runs on CreateJS. This package plays it on pixi.js in two steps:
|
|
23
|
+
|
|
24
|
+
1. **At development time (Node.js 18+)**, the generator turns the published JavaScript into a **runtime content file** (one per published file). This runs CreateJS once and records every symbol
|
|
25
|
+
2. **In the browser**, the player loads runtime content files and plays them. **CreateJS and the published JavaScript are not loaded**
|
|
26
|
+
|
|
27
|
+
Consequences to keep in mind:
|
|
28
|
+
|
|
29
|
+
- **After the content is published again from Animate, the runtime content must be generated again.** The player never reads the published `.js`. When a change made in Animate does not show, check this first
|
|
30
|
+
- Never write `<script>` tags for CreateJS or the published `.js` in a project using this package
|
|
31
|
+
|
|
32
|
+
## Type definition files
|
|
33
|
+
|
|
34
|
+
**Before writing code that uses a class, method, or property of this package, check the corresponding type definition file** in the installed package (`node_modules/@tawaship/pixi-animate-runtime/`). That is the single source of truth.
|
|
35
|
+
|
|
36
|
+
| What | Type definition file |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Everything the player exports | `types/player/index.d.ts` |
|
|
39
|
+
| `loadContentAsync`, `IContentTarget` (the load options) | `types/player/loader.d.ts` |
|
|
40
|
+
| `IContent` (`create`, `lib`, `properties`, `id`), `tick` | `types/player/content.d.ts` |
|
|
41
|
+
| `AnimateContainer`, `AnimateController` | `types/player/animate-container.d.ts` |
|
|
42
|
+
| `MovieClip` (`play`, `stop`, `gotoAndPlay`, `labels`, ...) | `types/player/movieclip.d.ts` |
|
|
43
|
+
| `DisplayObject`, `Container` (the CreateJS-compatible base classes, `pixi`) | `types/player/display.d.ts` |
|
|
44
|
+
| `Shape`, `Sprite`, `Bitmap`, `Text`, `ButtonHelper`, `ColorFilter` | `types/player/objects.d.ts` |
|
|
45
|
+
| The generator (Node): `planGeneration`, `writeGeneration`, `generateFromPublishedFile`, `generate` | `types/generator/generator/index.d.ts` (the plan types in `types/generator/generator/plan.d.ts`) |
|
|
46
|
+
|
|
47
|
+
## Basic usage
|
|
48
|
+
|
|
49
|
+
### 1. Generate the runtime content (development time)
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
npx --no-install @tawaship/pixi-animate-runtime assets/animates
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Give it the directory Animate published into. It writes `assets/animates/generated/<same name>.js` for every published `.js`, and copies the images each content uses next to it (`generated/images/...`). Copy the `generated/` directory into the application's assets.
|
|
56
|
+
|
|
57
|
+
- `-o, --out-dir <dir>` writes there instead of `generated/`. `-r, --recursive` also converts the published files in the directories below (not `node_modules` or hidden ones), written below `-o` at the same relative paths, or next to each published file in `generated/`. `-h, --help` shows the usage. A published `.js` file instead of a directory converts only that file
|
|
58
|
+
- It first lists what it would write as a table (where from and where to, then for each published file its composition id shortened to 8 characters, the number of images, and new / replace / not written with the reason). For the whole composition id, read `lib.properties.id` in the published file or the comment at the top of the runtime content file. It writes only after the user answers `y`. `-y, --yes` asks nothing and writes; run from a script, an npm script in CI or anything that is not a terminal, **`-y` is needed** (without it, nothing is written and the command exits with `1`)
|
|
59
|
+
- Nothing is deleted. Leftover files in the output directory are only listed
|
|
60
|
+
- Always write the command as `npx --no-install @tawaship/pixi-animate-runtime` (in npm scripts, `pixi-animate-runtime` alone). A bare `npx pixi-animate-runtime` in a project where the package is not installed downloads and runs an unscoped package of that name from the npm registry, without asking in CI or scripts. `yes=false` in the project's `.npmrc` keeps `npx` from downloading anything
|
|
61
|
+
- From a Node script, `planGeneration(options)` (the same options as the command: `input`, `outDir`, `recursive`, `force`) makes everything and writes nothing, and `writeGeneration(plan)` writes it, so the script can show its own list or questions in between (or remove contents from the plan to write only some)
|
|
62
|
+
- A content using unsupported features (each one listed) is not written, and the command exits with `1`. Report the listed features to the user; do not reach for `--force`
|
|
63
|
+
- On Windows, `tools/pixi-animate-runtime.bat` in the installed package does the same (copy it into the project, drop the published directory on it)
|
|
64
|
+
- The command prints each content's **composition id**, needed below
|
|
65
|
+
|
|
66
|
+
### 2. Load and play (browser)
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<script src="pixi.js"></script>
|
|
70
|
+
<script src="pixi-animate-runtime.js"></script>
|
|
71
|
+
<script src="assets/animates/generated/game.js"></script><!-- runtime content file -->
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
const { loadContentAsync, AnimateContainer } = PIXI.animateRuntime;
|
|
76
|
+
|
|
77
|
+
loadContentAsync({ id: 'COMPOSITION_ID', basepath: 'assets/animates/generated/' })
|
|
78
|
+
.then((content) => {
|
|
79
|
+
const container = new AnimateContainer();
|
|
80
|
+
app.stage.addChild(container);
|
|
81
|
+
app.ticker.add(container.handleTick, container); // required: nothing plays without it
|
|
82
|
+
|
|
83
|
+
container.addCreatejs(content.create('game')); // the symbol the published HTML used as its root
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
- Runtime content files must be loaded (script tags, or script elements added at run time) **before** `loadContentAsync` is called. They register under their composition id
|
|
88
|
+
- `id`: the composition id (`lib.properties.id`; printed by the command, and written at the top of the runtime content file). When nothing is registered under it, the error lists what is
|
|
89
|
+
- `basepath`: the directory the runtime content file was written to, ending with `/`; images are loaded relative to it
|
|
90
|
+
- `options.crossOrigin: false` loads images without CORS. `options.handleManifest(manifest)` can change image `src` before loading
|
|
91
|
+
- An array of targets gives an array of contents
|
|
92
|
+
- With a bundler: `import { loadContentAsync, AnimateContainer } from '@tawaship/pixi-animate-runtime'`. Runtime content files are still loaded as scripts
|
|
93
|
+
|
|
94
|
+
### 3. Creating instances
|
|
95
|
+
|
|
96
|
+
- `content.create('symbolName')` creates an instance set up the way the published HTML sets up its root. Use it for every instance the application places
|
|
97
|
+
- `new content.lib.symbolName()` is what frame scripts do; it skips that setup
|
|
98
|
+
- `content.properties` holds the published `lib.properties` (`width`, `height`, `fps`, `color`, ...)
|
|
99
|
+
- Symbol names are the library names in Animate (non-ASCII names kept as they are)
|
|
100
|
+
|
|
101
|
+
### 4. AnimateContainer
|
|
102
|
+
|
|
103
|
+
- `addCreatejs(instance)` / `addCreatejsAt(instance, index)` put an instance on the container; a movie clip plays from its first frame. `removeCreatejs(instance)` takes it off and it stops
|
|
104
|
+
- Content plays at its published frame rate whatever the display's refresh rate
|
|
105
|
+
- `speed`: playback speed (`1` = published frame rate, `0` stops)
|
|
106
|
+
- `overSpeed` (default `true`): when the display runs slower than the content, one tick may play several frames. `false` plays at most one frame per tick
|
|
107
|
+
- `smooth` (default `true`): frames follow a steady clock, so small variations of the frame time do not make the playing uneven (no frame on one tick, two on the next); it still keeps to the real time. Leave it on unless the user asks for the pixi-animate-container behavior (`false`)
|
|
108
|
+
- To play on a container of another PixiJS framework, use `new AnimateController(container)`; it has the same `addCreatejs`, `handleTick`, `speed`, `overSpeed`, `smooth`
|
|
109
|
+
|
|
110
|
+
## Objects and their PixiJS nodes
|
|
111
|
+
|
|
112
|
+
Every instance is a CreateJS-compatible object (what frame scripts see as `this`), shown by a PixiJS node in its `pixi` property. Common values are stored once: `instance.x = 100` and `instance.pixi.x = 100` are the same write, and `instance.pixi` is always current.
|
|
113
|
+
|
|
114
|
+
Members whose meaning differs keep the CreateJS meaning on the instance and the PixiJS meaning on the node:
|
|
115
|
+
|
|
116
|
+
| Member | On the instance | On `instance.pixi` |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| `rotation` | Degrees | Radians (`angle` is degrees) |
|
|
119
|
+
| `skewX` / `skewY` | Degrees, CreateJS skew | `skew` in radians |
|
|
120
|
+
| `mask`, `filters`, `parent`, `children` | CreateJS-compatible objects | PixiJS objects |
|
|
121
|
+
|
|
122
|
+
- **Do not draw into a shape's `pixi` node** (`clear()`, `lineTo()`, ...): shapes showing the same drawing share one geometry, so the change shows everywhere
|
|
123
|
+
- Named instances placed in Animate (`this.button`, ...) exist at run time but are not in the types (`MovieClip` has no index signature)
|
|
124
|
+
- `addEventListener` / `dispatchEvent` follow CreateJS, so the usual pattern of dispatching an event from a frame script and listening in the application works
|
|
125
|
+
- Frame scripts run as published. They see `this`, `cjs` / `createjs` (the player's compatible classes, not real CreateJS) and `lib`. `exportRoot` and `stage` are undefined; `playSound()` plays nothing
|
|
126
|
+
|
|
127
|
+
## Current limits (tell the user instead of working around silently)
|
|
128
|
+
|
|
129
|
+
- Buttons do not react to the pointer and CreateJS mouse events (`click`, `mousedown`, `rollover`, ...) are never called. For input, listen to PixiJS events on `instance.pixi` (`pointertap`, ... with `interactive = true`)
|
|
130
|
+
- Sound is not played
|
|
131
|
+
- The Animate camera ("Advanced Layers") is not supported: delete the camera layer and publish again
|
|
132
|
+
- Dynamic text: lines break as in the published content; vertical position can differ slightly by font
|
|
133
|
+
|
|
134
|
+
## Coming from pixi-animate-container
|
|
135
|
+
|
|
136
|
+
| pixi-animate-container | pixi-animate-runtime |
|
|
137
|
+
|---|---|
|
|
138
|
+
| Script tags for CreateJS and the published `.js` | Script tag for the runtime content file only |
|
|
139
|
+
| `PIXI.animate` | `PIXI.animateRuntime` |
|
|
140
|
+
| `loadAssetAsync(targets)` → `lib` | `loadContentAsync(targets)` → content (`content.lib`) |
|
|
141
|
+
| `new lib.game()` | `content.create('game')` |
|
|
142
|
+
| `PIXI.animate.Container` | `AnimateContainer` |
|
|
143
|
+
| `createjsSpeed` / `createjsOverSpeed` | `speed` / `overSpeed` |
|
|
144
|
+
| `CreatejsMovieClip` etc. | `MovieClip` etc. |
|
|
145
|
+
|
|
146
|
+
Not available: `listenFrameEvents`, `useSound`, CreateJS mouse events.
|
package/package.json
CHANGED
|
@@ -1,6 +1,72 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tawaship/pixi-animate-runtime",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Plays Adobe Animate HTML5 Canvas content on PixiJS from definitions extracted by @tawaship/animate-data-converter.",
|
|
5
|
+
"main": "dist/pixi-animate-runtime.cjs.js",
|
|
6
|
+
"module": "dist/pixi-animate-runtime.esm.js",
|
|
7
|
+
"browser": "dist/pixi-animate-runtime.js",
|
|
8
|
+
"types": "types/player/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./types/player/index.d.ts",
|
|
12
|
+
"import": "./dist/pixi-animate-runtime.esm.js",
|
|
13
|
+
"require": "./dist/pixi-animate-runtime.cjs.js"
|
|
14
|
+
},
|
|
15
|
+
"./generator": {
|
|
16
|
+
"types": "./types/generator/generator/index.d.ts",
|
|
17
|
+
"require": "./dist/generator.cjs.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"bin": {
|
|
21
|
+
"pixi-animate-runtime": "bin/pixi-animate-runtime.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"types",
|
|
26
|
+
"bin",
|
|
27
|
+
"tools",
|
|
28
|
+
"dist-skills"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"rollup": "rollup -c --bundleConfigAsCjs",
|
|
32
|
+
"d": "tsc -p tsconfig.player.json --emitDeclarationOnly --declaration --outDir ./types/player && tsc -p tsconfig.generator.json --emitDeclarationOnly --declaration --outDir ./types/generator",
|
|
33
|
+
"build": "npm run rollup -- --environment PROD && npm run d && echo done.",
|
|
34
|
+
"docs": "typedoc",
|
|
35
|
+
"prepublishOnly": "node scripts/check-publish.js"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"pixi.js",
|
|
39
|
+
"adobe-animate",
|
|
40
|
+
"createjs"
|
|
41
|
+
],
|
|
42
|
+
"author": "tawaship",
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"repository": {
|
|
45
|
+
"type": "git",
|
|
46
|
+
"url": "git+https://github.com/tawaship/pixi-animate-runtime.git"
|
|
47
|
+
},
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/tawaship/pixi-animate-runtime/issues"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://tawaship.github.io/pixi-animate-runtime/",
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"pixi.js": "^5.3.2"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@tawaship/animate-data-converter": "^0.1.0"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@rollup/plugin-buble": "^1.0.3",
|
|
60
|
+
"@rollup/plugin-typescript": "^12.3.1",
|
|
61
|
+
"@types/node": "^20.19.43",
|
|
62
|
+
"del": "^8.0.1",
|
|
63
|
+
"pixi.js": "5.3.9",
|
|
64
|
+
"rollup": "^4.65.0",
|
|
65
|
+
"tslib": "^2.8.1",
|
|
66
|
+
"typedoc": "^0.28.20",
|
|
67
|
+
"typescript": "^6.0.3"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=18"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
rem Generates runtime content for pixi-animate-runtime.
|
|
3
|
+
rem Drop a directory of Animate published content (or a published .js file) on this file,
|
|
4
|
+
rem or double-click it to be asked for the directory.
|
|
5
|
+
rem Put this file in your project (where pixi-animate-runtime is installed).
|
|
6
|
+
cd /d "%~dp0"
|
|
7
|
+
call npx --no-install @tawaship/pixi-animate-runtime %*
|
|
8
|
+
pause
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ICliIO {
|
|
2
|
+
stdout(text: string): void;
|
|
3
|
+
stderr(text: string): void;
|
|
4
|
+
/** Asks a question and gives the answer; absent when nobody can answer (not a terminal) */
|
|
5
|
+
ask?(question: string): Promise<string>;
|
|
6
|
+
/** The directory relative paths are taken from */
|
|
7
|
+
cwd?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The command line tool: {@link planGeneration}, the plan listed (and, in a
|
|
11
|
+
* terminal, confirmed; without one, written only with -y), then
|
|
12
|
+
* {@link writeGeneration}. Returns the exit code: 0 when every content was
|
|
13
|
+
* written, 1 when some could not be (unsupported features without --force,
|
|
14
|
+
* images the content uses that are missing) or nothing was written for want of
|
|
15
|
+
* a "y", 2 for usage and loading errors.
|
|
16
|
+
*/
|
|
17
|
+
export declare function runCli(args: string[], io: ICliIO): Promise<number>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The animate-data-converter versions this generator reads definitions of:
|
|
3
|
+
* the range this package depends on, and the version it was built with
|
|
4
|
+
* (written in from package.json when the package is built).
|
|
5
|
+
*/
|
|
6
|
+
export declare const CONVERTER_RANGE: string;
|
|
7
|
+
export declare const CONVERTER_KNOWN: string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IDefinition, IIssue } from '@tawaship/animate-data-converter';
|
|
2
|
+
import type { IRuntimeData } from '../player/data';
|
|
3
|
+
export interface IGenerated {
|
|
4
|
+
/** The composition id the runtime content is registered under */
|
|
5
|
+
id: string;
|
|
6
|
+
/** The content's data (what the runtime content returns as `data`) */
|
|
7
|
+
data: IRuntimeData;
|
|
8
|
+
/** Frame script sources, by the index the data refers to them with */
|
|
9
|
+
scripts: string[];
|
|
10
|
+
/** Writer function sources, by the index the data refers to them with */
|
|
11
|
+
writers: string[];
|
|
12
|
+
/** Member writer function sources, by the index the data refers to them with */
|
|
13
|
+
memberWriters: string[];
|
|
14
|
+
/** The runtime content (JavaScript source) */
|
|
15
|
+
source: string;
|
|
16
|
+
/** Unsupported features the converter found */
|
|
17
|
+
issues: IIssue[];
|
|
18
|
+
/** Things to look at that did not stop the generation (a definition from a newer converter) */
|
|
19
|
+
warnings: string[];
|
|
20
|
+
}
|
|
21
|
+
/** The composition id of a content (lib.properties.id): the id its runtime content is registered and loaded under */
|
|
22
|
+
export declare function compositionId(definition: IDefinition): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generates the runtime content of a content from its extracted definition.
|
|
25
|
+
* It is registered under the content's composition id; `sourceName` (the
|
|
26
|
+
* published file it came from) is written into it to tell contents apart in
|
|
27
|
+
* messages.
|
|
28
|
+
*/
|
|
29
|
+
export declare function generate(definition: IDefinition, sourceName?: string): IGenerated;
|
|
30
|
+
/**
|
|
31
|
+
* Extracts a published file and generates its runtime content.
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateFromPublishedFile(publishedPath: string): Promise<IGenerated>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { compositionId, generate, generateFromPublishedFile } from './generate';
|
|
2
|
+
export type { IGenerated } from './generate';
|
|
3
|
+
export { planGeneration, writeGeneration } from './plan';
|
|
4
|
+
export type { IPlanOptions, IGenerationPlan, IPlannedContent, IPlannedImage, IWriteResult } from './plan';
|
|
5
|
+
export { runCli } from './cli';
|
|
6
|
+
export type { ICliIO } from './cli';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { IIssue } from '@tawaship/animate-data-converter';
|
|
2
|
+
export interface IPlanOptions {
|
|
3
|
+
/** A directory of published content (every published JavaScript file directly in it), or one published file */
|
|
4
|
+
input: string;
|
|
5
|
+
/**
|
|
6
|
+
* Where to write: each content below it, at the path of its published file
|
|
7
|
+
* from the input directory. Absent or null: generated/ next to each published file
|
|
8
|
+
*/
|
|
9
|
+
outDir?: string | null;
|
|
10
|
+
/** Also look in the directories below the input directory (not node_modules, nor directories whose name starts with ".") */
|
|
11
|
+
recursive?: boolean;
|
|
12
|
+
/** Write runtime content even when the content uses unsupported features */
|
|
13
|
+
force?: boolean;
|
|
14
|
+
/** The directory relative paths are taken from (default: the current directory) */
|
|
15
|
+
cwd?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface IPlannedImage {
|
|
18
|
+
/** The image file next to the published file */
|
|
19
|
+
from: string;
|
|
20
|
+
/** Where it is copied */
|
|
21
|
+
to: string;
|
|
22
|
+
}
|
|
23
|
+
export interface IPlannedContent {
|
|
24
|
+
/** The published file */
|
|
25
|
+
published: string;
|
|
26
|
+
/** Its path from the input directory ("/" separated) */
|
|
27
|
+
name: string;
|
|
28
|
+
/** The composition id it registers under; null when the published file could not be read */
|
|
29
|
+
id: string | null;
|
|
30
|
+
/** Where its runtime content is written */
|
|
31
|
+
out: string;
|
|
32
|
+
/** Whether a file is already there (writing replaces it) */
|
|
33
|
+
exists: boolean;
|
|
34
|
+
/** The images it uses, copied next to its runtime content at the same relative paths */
|
|
35
|
+
images: IPlannedImage[];
|
|
36
|
+
/** The runtime content (JavaScript source) that is written; null when it is not written */
|
|
37
|
+
source: string | null;
|
|
38
|
+
/** Unsupported features the content uses (written anyway only with force) */
|
|
39
|
+
issues: IIssue[];
|
|
40
|
+
/** Things to look at that did not stop the generation */
|
|
41
|
+
warnings: string[];
|
|
42
|
+
/** Why it is not written; null when it is */
|
|
43
|
+
problem: string | null;
|
|
44
|
+
}
|
|
45
|
+
export interface IGenerationPlan {
|
|
46
|
+
/** The directory the names are taken from: the input directory, or the directory of the input file */
|
|
47
|
+
root: string;
|
|
48
|
+
/** The output directory; null when each content goes into generated/ next to its published file */
|
|
49
|
+
outDir: string | null;
|
|
50
|
+
/** Every published file found, in order */
|
|
51
|
+
contents: IPlannedContent[];
|
|
52
|
+
/** Files already in the output directories; the ones the plan does not write are left as they are */
|
|
53
|
+
existing: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface IWriteResult {
|
|
56
|
+
/** The files written (runtime content and images) */
|
|
57
|
+
written: string[];
|
|
58
|
+
/** The files already in the output directories that were not written (nothing is deleted) */
|
|
59
|
+
left: string[];
|
|
60
|
+
}
|
|
61
|
+
/** A path from a directory, "/" separated */
|
|
62
|
+
export declare function relativePath(from: string, file: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* The published files an input names, and the directory their names are
|
|
65
|
+
* taken from. Only reads the files (nothing is run). Throws when the input
|
|
66
|
+
* does not exist or has no published file.
|
|
67
|
+
*/
|
|
68
|
+
export declare function findPublished(input: string, recursive?: boolean, cwd?: string): {
|
|
69
|
+
root: string;
|
|
70
|
+
files: string[];
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Finds the published files, makes their runtime content and works out where
|
|
74
|
+
* everything would be written, without writing anything. Each published file
|
|
75
|
+
* is run in a sandbox of its own, one after another. What cannot be written
|
|
76
|
+
* (a file that cannot be read, unsupported features without force, missing
|
|
77
|
+
* images) is in the plan with its problem. Throws when the input does not
|
|
78
|
+
* exist, has no published file, or the output would be a published directory.
|
|
79
|
+
* {@link writeGeneration} writes the plan.
|
|
80
|
+
*/
|
|
81
|
+
export declare function planGeneration(options: IPlanOptions): Promise<IGenerationPlan>;
|
|
82
|
+
/**
|
|
83
|
+
* Writes a plan made by {@link planGeneration}: the runtime content it made
|
|
84
|
+
* (as it was when the plan was made) and copies of the images. The contents
|
|
85
|
+
* with a problem are not written. Nothing is deleted.
|
|
86
|
+
*/
|
|
87
|
+
export declare function writeGeneration(plan: IGenerationPlan): IWriteResult;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The data of runtime content (what the generator writes and the player reads): the definition
|
|
3
|
+
* extracted by @tawaship/animate-data-converter, with every frame script
|
|
4
|
+
* taken out of the data and referenced by its index in the runtime content's
|
|
5
|
+
* script list (the scripts themselves are code in the runtime content), and with
|
|
6
|
+
* the writes of each tween and of each instance's initial values compiled
|
|
7
|
+
* into writer functions (code in the runtime content as well, referenced by index).
|
|
8
|
+
* Drawings are gathered into one table for the whole content, identical
|
|
9
|
+
* ones merged, and a symbol refers to them by index.
|
|
10
|
+
*/
|
|
11
|
+
import type { IMovieClipSymbolDef, ISpriteSymbolDef, IBitmapSymbolDef, ITweenDef, IPropMapDef, ISlotDef, IManifestEntryDef, ISpriteSheetDef, IGraphicsCommandDef, IStateEntryDef, TDataValue, TFrameValue } from '@tawaship/animate-data-converter';
|
|
12
|
+
import { TEase } from './ease';
|
|
13
|
+
/** A kind of drawing command: its type and the names of its props, in order */
|
|
14
|
+
export type TRuntimeCommandKind = [string, string[]];
|
|
15
|
+
/** A drawing command as written in runtime content: the index of its kind, then its props' values in the kind's order */
|
|
16
|
+
export type TRuntimeCommand = TDataValue[];
|
|
17
|
+
/** A drawing as written in runtime content */
|
|
18
|
+
export interface IRuntimeGraphicsData {
|
|
19
|
+
commands: TRuntimeCommand[];
|
|
20
|
+
}
|
|
21
|
+
/** A drawing's commands as the player draws them, from their written form */
|
|
22
|
+
export declare function commandsOf(kinds: TRuntimeCommandKind[], graphics: IRuntimeGraphicsData): IGraphicsCommandDef[];
|
|
23
|
+
export type { ISlotDef, ITweenDef, IStateEntryDef, IGraphicsDef, IGraphicsCommandDef, ISpriteDef, IBitmapDef, IFilterDef, ICacheDef, IButtonDef, IFilterCacheEntryDef, IRectDef, IDataMap, IPropMapDef, IManifestEntryDef, ISpriteSheetDef, ILabelDef, IMemberDef, TTargetDef, TFrameValue, TDataValue, ISpriteSymbolDef, IBitmapSymbolDef } from '@tawaship/animate-data-converter';
|
|
24
|
+
/**
|
|
25
|
+
* The pixi-animate-runtime versions whose runtime content this player plays
|
|
26
|
+
* (npm's range notation). Raised when the player stops playing runtime
|
|
27
|
+
* content older versions made.
|
|
28
|
+
*/
|
|
29
|
+
export declare const RUNTIME_CONTENT_RANGE = "0.x";
|
|
30
|
+
export interface IRuntimeActionDef {
|
|
31
|
+
/** Timeline position the action sits on */
|
|
32
|
+
position: number;
|
|
33
|
+
/** Index into the runtime content's script list */
|
|
34
|
+
script: number;
|
|
35
|
+
params: TFrameValue[] | null;
|
|
36
|
+
}
|
|
37
|
+
export interface IRuntimeTweenDef extends Omit<ITweenDef, 'actions' | 'frames'> {
|
|
38
|
+
actions: IRuntimeActionDef[];
|
|
39
|
+
/** The tween's distinct frame values (each the values of its props, in order) */
|
|
40
|
+
values: TFrameValue[][];
|
|
41
|
+
/** For every position, the index of its values in values (a position holding the same values as another shares them) */
|
|
42
|
+
frames: number[];
|
|
43
|
+
/**
|
|
44
|
+
* Index into the runtime content's writer list: the function that writes a frame's
|
|
45
|
+
* values (values[frames[position]]) to the target, one property after another by
|
|
46
|
+
* name (null when the tween writes no property)
|
|
47
|
+
*/
|
|
48
|
+
writer: number | null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A slot as the player uses it. Its initial values are in code only (the
|
|
52
|
+
* writer), not in the data.
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* A frame value as written in runtime content: a display list (`state`) may
|
|
56
|
+
* give an entry that places a slot as it is (no props) as the slot's index
|
|
57
|
+
*/
|
|
58
|
+
export type TRuntimeFrameValue = TFrameValue | Array<IStateEntryDef | number>;
|
|
59
|
+
/**
|
|
60
|
+
* A position, or a stretch of positions, of a tween as written in runtime
|
|
61
|
+
* content: the index of the position's values, or an interpolated stretch
|
|
62
|
+
* [from, to, length, ease] whose positions run from values[from] toward
|
|
63
|
+
* values[to] (the position after the stretch) as CreateJS interpolates a
|
|
64
|
+
* step with that ease (see interpolated)
|
|
65
|
+
*/
|
|
66
|
+
export type TRuntimeFrameRef = number | [number, number, number, string];
|
|
67
|
+
/** A tween as written in runtime content (tweenOf makes its values for every position) */
|
|
68
|
+
export interface IRuntimeTweenData extends Omit<IRuntimeTweenDef, 'values' | 'frames'> {
|
|
69
|
+
values: TRuntimeFrameValue[][];
|
|
70
|
+
frames: TRuntimeFrameRef[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The values at a position of a step, as CreateJS's Tween computes them: the
|
|
74
|
+
* ratio of the position in the step, eased, then each value from its start
|
|
75
|
+
* toward its end (a value that is not a number, or does not change, keeps its
|
|
76
|
+
* start until the eased ratio reaches 1).
|
|
77
|
+
*/
|
|
78
|
+
export declare function interpolated(from: TFrameValue[], to: TFrameValue[], position: number, length: number, ease: TEase | null): TFrameValue[];
|
|
79
|
+
/**
|
|
80
|
+
* A tween with the values of every position: its display lists (the values of
|
|
81
|
+
* its `state` prop) as entries, and its interpolated stretches computed (each
|
|
82
|
+
* position of a stretch gets values of its own)
|
|
83
|
+
*/
|
|
84
|
+
export declare function tweenOf(data: IRuntimeTweenData): IRuntimeTweenDef;
|
|
85
|
+
export interface IRuntimeSlotDef extends Omit<ISlotDef, 'init'> {
|
|
86
|
+
/** Index into the runtime content's writer list: the function that writes the slot's initial values (initValues) */
|
|
87
|
+
initWriter: number | null;
|
|
88
|
+
/** The slot's initial values, in the order its writer writes them */
|
|
89
|
+
initValues: TFrameValue[] | null;
|
|
90
|
+
}
|
|
91
|
+
/** The values a slot's fields have when runtime content leaves them out */
|
|
92
|
+
export declare const SLOT_DEFAULTS: Omit<IRuntimeSlotDef, 'kind'>;
|
|
93
|
+
/**
|
|
94
|
+
* A slot template as written in runtime content: its kind, and the fields not
|
|
95
|
+
* at their defaults (SLOT_DEFAULTS); its initial values are the slot's own
|
|
96
|
+
*/
|
|
97
|
+
export type TRuntimeSlotData = Pick<IRuntimeSlotDef, 'kind'> & Partial<Omit<IRuntimeSlotDef, 'kind' | 'initValues'>>;
|
|
98
|
+
/**
|
|
99
|
+
* A slot as written in a symbol: the index of its template in the content's
|
|
100
|
+
* slotTemplates, with its initial values when it has some
|
|
101
|
+
*/
|
|
102
|
+
export type TRuntimeSlotRef = number | [number, TFrameValue[]];
|
|
103
|
+
/** A slot from its template (the fields left out at their defaults) and its initial values */
|
|
104
|
+
export declare function slotOf(templates: TRuntimeSlotData[], ref: TRuntimeSlotRef): IRuntimeSlotDef;
|
|
105
|
+
export interface IRuntimeMovieClipDef extends Omit<IMovieClipSymbolDef, 'tweens' | 'slots' | 'graphics' | 'members'> {
|
|
106
|
+
/** The slots as written (templates and initial values; slotOf makes them whole) */
|
|
107
|
+
slots: TRuntimeSlotRef[];
|
|
108
|
+
/** The tweens as written (display lists with slot indexes; tweenOf turns them back into entries) */
|
|
109
|
+
tweens: IRuntimeTweenData[];
|
|
110
|
+
/**
|
|
111
|
+
* Index into the runtime content's member writer list: the function that
|
|
112
|
+
* gives an instance its named children (`this.instance = ...`), or null
|
|
113
|
+
* when it has none
|
|
114
|
+
*/
|
|
115
|
+
memberWriter: number | null;
|
|
116
|
+
/**
|
|
117
|
+
* The symbol's drawings as indexes into the content's drawing table
|
|
118
|
+
* (graphics[n] is the drawing the symbol's slots and tween values call n)
|
|
119
|
+
*/
|
|
120
|
+
graphics: number[];
|
|
121
|
+
}
|
|
122
|
+
export type TRuntimeSymbolDef = IRuntimeMovieClipDef | ISpriteSymbolDef | IBitmapSymbolDef;
|
|
123
|
+
export interface IRuntimeData {
|
|
124
|
+
/** The version of pixi-animate-runtime that generated the runtime content */
|
|
125
|
+
runtimeVersion: string;
|
|
126
|
+
/** Primitive entries of the published lib.properties (width, height, fps, color, ...) */
|
|
127
|
+
properties: IPropMapDef;
|
|
128
|
+
/** Images of the published manifest (sounds are left out) */
|
|
129
|
+
images: IManifestEntryDef[];
|
|
130
|
+
/** The published lib.ssMetadata */
|
|
131
|
+
spriteSheets: ISpriteSheetDef[];
|
|
132
|
+
/** Every drawing of the content, identical ones merged (shared by every symbol that shows them); commandsOf reads them */
|
|
133
|
+
graphics: IRuntimeGraphicsData[];
|
|
134
|
+
/** The kinds of the drawings' commands (a type and the names of its props) */
|
|
135
|
+
commandKinds: TRuntimeCommandKind[];
|
|
136
|
+
/** The slots of every symbol but their initial values, identical ones merged */
|
|
137
|
+
slotTemplates: TRuntimeSlotData[];
|
|
138
|
+
symbols: {
|
|
139
|
+
[id: string]: TRuntimeSymbolDef;
|
|
140
|
+
};
|
|
141
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The eases of CreateJS (createjs.Ease), computed as CreateJS computes them,
|
|
3
|
+
* by name. Runtime content names the ease of an interpolated stretch of a
|
|
4
|
+
* tween; the player computes the stretch's values with it once, when a symbol's
|
|
5
|
+
* class is made. `get:<amount>` is Ease.get(amount) (Animate's classic ease).
|
|
6
|
+
*/
|
|
7
|
+
export type TEase = (t: number) => number;
|
|
8
|
+
/** The ease runtime content names (null for a name the player does not know) */
|
|
9
|
+
export declare function easeOf(id: string): TEase | null;
|
|
10
|
+
/** The eases the generator tries for a stretch of a tween, by name: the named ones, then Ease.get(-1 .. 1) in hundredths */
|
|
11
|
+
export declare function easeIds(): string[];
|