ice-render 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.mjs +2 -2
- package/dist/index.umd.js +2 -2
- package/dist/types/FrameManager.d.mts +16 -1
- package/dist/types/FrameManager.d.ts +16 -1
- package/dist/types/ICE.d.mts +93 -0
- package/dist/types/ICE.d.ts +93 -0
- package/dist/types/animation/AnimationManager.d.mts +117 -16
- package/dist/types/animation/AnimationManager.d.ts +117 -16
- package/dist/types/animation/AnimationTimeline.d.mts +77 -0
- package/dist/types/animation/AnimationTimeline.d.ts +77 -0
- package/dist/types/animation/easing-registry.d.mts +37 -0
- package/dist/types/animation/easing-registry.d.ts +37 -0
- package/dist/types/animation/interpolators.d.mts +34 -0
- package/dist/types/animation/interpolators.d.ts +34 -0
- package/dist/types/animation/validate-animations.d.mts +55 -0
- package/dist/types/animation/validate-animations.d.ts +55 -0
- package/dist/types/event/DOMEventDispatcher.d.mts +10 -0
- package/dist/types/event/DOMEventDispatcher.d.ts +10 -0
- package/dist/types/export/SvgExporter.d.mts +9 -2
- package/dist/types/export/SvgExporter.d.ts +9 -2
- package/dist/types/export/compose-layers.d.mts +30 -0
- package/dist/types/export/compose-layers.d.ts +30 -0
- package/dist/types/graphic/ICEComponent.d.mts +37 -1
- package/dist/types/graphic/ICEComponent.d.ts +37 -1
- package/dist/types/graphic/container/ICEGroup.d.mts +3 -1
- package/dist/types/graphic/container/ICEGroup.d.ts +3 -1
- package/dist/types/graphic/link/ICEPolyLine.d.mts +9 -1
- package/dist/types/graphic/link/ICEPolyLine.d.ts +9 -1
- package/dist/types/graphic/shape/ICEEllipse.d.mts +3 -1
- package/dist/types/graphic/shape/ICEEllipse.d.ts +3 -1
- package/dist/types/graphic/shape/ICEIsogon.d.mts +3 -1
- package/dist/types/graphic/shape/ICEIsogon.d.ts +3 -1
- package/dist/types/graphic/shape/ICERose.d.mts +3 -1
- package/dist/types/graphic/shape/ICERose.d.ts +3 -1
- package/dist/types/graphic/shape/ICEStar.d.mts +3 -1
- package/dist/types/graphic/shape/ICEStar.d.ts +3 -1
- package/dist/types/graphic/text/ICEText.d.mts +6 -0
- package/dist/types/graphic/text/ICEText.d.ts +6 -0
- package/dist/types/index.d.mts +9 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/util/data-util.d.mts +10 -0
- package/dist/types/util/data-util.d.ts +10 -0
- package/dist/types/util/errors.d.mts +4 -0
- package/dist/types/util/errors.d.ts +4 -0
- package/package.json +4 -2
|
@@ -97,7 +97,9 @@ declare class ICEGroup extends ICERect {
|
|
|
97
97
|
* setState 仅仅修改参数,不会立即导致重新渲染,需要等待 FrameManager 调度,最小延迟时间约为 1/60=16.67 ms 。
|
|
98
98
|
* @param newState
|
|
99
99
|
*/
|
|
100
|
-
setState(newState: any
|
|
100
|
+
setState(newState: any, options?: {
|
|
101
|
+
paramsDirty?: boolean;
|
|
102
|
+
}): void;
|
|
101
103
|
/**
|
|
102
104
|
* @overwrite
|
|
103
105
|
* @method destory
|
|
@@ -97,7 +97,9 @@ declare class ICEGroup extends ICERect {
|
|
|
97
97
|
* setState 仅仅修改参数,不会立即导致重新渲染,需要等待 FrameManager 调度,最小延迟时间约为 1/60=16.67 ms 。
|
|
98
98
|
* @param newState
|
|
99
99
|
*/
|
|
100
|
-
setState(newState: any
|
|
100
|
+
setState(newState: any, options?: {
|
|
101
|
+
paramsDirty?: boolean;
|
|
102
|
+
}): void;
|
|
101
103
|
/**
|
|
102
104
|
* @overwrite
|
|
103
105
|
* @method destory
|
|
@@ -15,6 +15,12 @@ import ICEDotPath from '../ICEDotPath.mjs';
|
|
|
15
15
|
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
16
16
|
*/
|
|
17
17
|
declare class ICEPolyLine extends ICEDotPath {
|
|
18
|
+
/**
|
|
19
|
+
* 折线的「动画安全键」**不能**沿用基类那套:`setState({left})` 会就地平移 `points`,
|
|
20
|
+
* 而折线的 width/height 是从点集推出来的 —— 位置对它来说是**几何**,必须走 `paramsDirty`。
|
|
21
|
+
* 这里只放行纯绘制/容器语义的键。
|
|
22
|
+
*/
|
|
23
|
+
static readonly ANIMATION_SAFE_KEYS: readonly string[];
|
|
18
24
|
/**
|
|
19
25
|
* 类型标识
|
|
20
26
|
* 用来解决 TypeScript 的 instanceof 兼容性问题, https://github.com/microsoft/TypeScript/issues/22585
|
|
@@ -209,7 +215,9 @@ declare class ICEPolyLine extends ICEDotPath {
|
|
|
209
215
|
* @overwrite
|
|
210
216
|
* @param newState 新的状态
|
|
211
217
|
*/
|
|
212
|
-
setState(newState: any
|
|
218
|
+
setState(newState: any, options?: {
|
|
219
|
+
paramsDirty?: boolean;
|
|
220
|
+
}): void;
|
|
213
221
|
/**
|
|
214
222
|
* 插槽方向 → 单位方向向量(T=上/B=下/L=左/R=右,其余为无方向)。
|
|
215
223
|
*
|
|
@@ -15,6 +15,12 @@ import ICEDotPath from '../ICEDotPath';
|
|
|
15
15
|
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
16
16
|
*/
|
|
17
17
|
declare class ICEPolyLine extends ICEDotPath {
|
|
18
|
+
/**
|
|
19
|
+
* 折线的「动画安全键」**不能**沿用基类那套:`setState({left})` 会就地平移 `points`,
|
|
20
|
+
* 而折线的 width/height 是从点集推出来的 —— 位置对它来说是**几何**,必须走 `paramsDirty`。
|
|
21
|
+
* 这里只放行纯绘制/容器语义的键。
|
|
22
|
+
*/
|
|
23
|
+
static readonly ANIMATION_SAFE_KEYS: readonly string[];
|
|
18
24
|
/**
|
|
19
25
|
* 类型标识
|
|
20
26
|
* 用来解决 TypeScript 的 instanceof 兼容性问题, https://github.com/microsoft/TypeScript/issues/22585
|
|
@@ -209,7 +215,9 @@ declare class ICEPolyLine extends ICEDotPath {
|
|
|
209
215
|
* @overwrite
|
|
210
216
|
* @param newState 新的状态
|
|
211
217
|
*/
|
|
212
|
-
setState(newState: any
|
|
218
|
+
setState(newState: any, options?: {
|
|
219
|
+
paramsDirty?: boolean;
|
|
220
|
+
}): void;
|
|
213
221
|
/**
|
|
214
222
|
* 插槽方向 → 单位方向向量(T=上/B=下/L=左/R=右,其余为无方向)。
|
|
215
223
|
*
|
|
@@ -47,6 +47,8 @@ declare class ICEIsogon extends ICEDotPath {
|
|
|
47
47
|
* - 如果 setState 时仅仅指定 width 参数,则 radius 会被重新计算,如果仅仅指定了 height 参数,则 radius 会被重新计算。
|
|
48
48
|
* @param newState
|
|
49
49
|
*/
|
|
50
|
-
setState(newState: any
|
|
50
|
+
setState(newState: any, options?: {
|
|
51
|
+
paramsDirty?: boolean;
|
|
52
|
+
}): void;
|
|
51
53
|
}
|
|
52
54
|
export default ICEIsogon;
|
|
@@ -47,6 +47,8 @@ declare class ICEIsogon extends ICEDotPath {
|
|
|
47
47
|
* - 如果 setState 时仅仅指定 width 参数,则 radius 会被重新计算,如果仅仅指定了 height 参数,则 radius 会被重新计算。
|
|
48
48
|
* @param newState
|
|
49
49
|
*/
|
|
50
|
-
setState(newState: any
|
|
50
|
+
setState(newState: any, options?: {
|
|
51
|
+
paramsDirty?: boolean;
|
|
52
|
+
}): void;
|
|
51
53
|
}
|
|
52
54
|
export default ICEIsogon;
|
|
@@ -36,6 +36,8 @@ declare class ICERose extends ICEDotPath {
|
|
|
36
36
|
* - 如果 setState 时仅仅指定 width 参数,则 radius 会被重新计算,如果仅仅指定了 height 参数,则 radius 会被重新计算。
|
|
37
37
|
* @param newState
|
|
38
38
|
*/
|
|
39
|
-
setState(newState: any
|
|
39
|
+
setState(newState: any, options?: {
|
|
40
|
+
paramsDirty?: boolean;
|
|
41
|
+
}): void;
|
|
40
42
|
}
|
|
41
43
|
export default ICERose;
|
|
@@ -36,6 +36,8 @@ declare class ICERose extends ICEDotPath {
|
|
|
36
36
|
* - 如果 setState 时仅仅指定 width 参数,则 radius 会被重新计算,如果仅仅指定了 height 参数,则 radius 会被重新计算。
|
|
37
37
|
* @param newState
|
|
38
38
|
*/
|
|
39
|
-
setState(newState: any
|
|
39
|
+
setState(newState: any, options?: {
|
|
40
|
+
paramsDirty?: boolean;
|
|
41
|
+
}): void;
|
|
40
42
|
}
|
|
41
43
|
export default ICERose;
|
|
@@ -40,6 +40,8 @@ declare class ICEStar extends ICEDotPath {
|
|
|
40
40
|
* - 如果 setState 时仅仅指定 width 参数,则 radius 会被重新计算,如果仅仅指定了 height 参数,则 radius 会被重新计算。
|
|
41
41
|
* @param newState
|
|
42
42
|
*/
|
|
43
|
-
setState(newState: any
|
|
43
|
+
setState(newState: any, options?: {
|
|
44
|
+
paramsDirty?: boolean;
|
|
45
|
+
}): void;
|
|
44
46
|
}
|
|
45
47
|
export default ICEStar;
|
|
@@ -40,6 +40,8 @@ declare class ICEStar extends ICEDotPath {
|
|
|
40
40
|
* - 如果 setState 时仅仅指定 width 参数,则 radius 会被重新计算,如果仅仅指定了 height 参数,则 radius 会被重新计算。
|
|
41
41
|
* @param newState
|
|
42
42
|
*/
|
|
43
|
-
setState(newState: any
|
|
43
|
+
setState(newState: any, options?: {
|
|
44
|
+
paramsDirty?: boolean;
|
|
45
|
+
}): void;
|
|
44
46
|
}
|
|
45
47
|
export default ICEStar;
|
|
@@ -5,6 +5,12 @@ import ICEComponent from '../ICEComponent.mjs';
|
|
|
5
5
|
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
6
6
|
*/
|
|
7
7
|
declare class ICEText extends ICEComponent {
|
|
8
|
+
/**
|
|
9
|
+
* 文本的「动画安全键」:基类那批(位置/变换/透明度/显示/zIndex)之外,再放行**不参与量测**的
|
|
10
|
+
* 绘制类与编辑类键;字号/字间距/行高/内边距/`font*`/文本内容/换行参数一概**不在**白名单里
|
|
11
|
+
* (它们都会改变盒子尺寸或换行结果 → 必须走 `paramsDirty`)。
|
|
12
|
+
*/
|
|
13
|
+
static readonly ANIMATION_SAFE_KEYS: readonly string[];
|
|
8
14
|
/**
|
|
9
15
|
* @cfg
|
|
10
16
|
* {
|
|
@@ -5,6 +5,12 @@ import ICEComponent from '../ICEComponent';
|
|
|
5
5
|
* @author 大漠穷秋<damoqiongqiu@126.com>
|
|
6
6
|
*/
|
|
7
7
|
declare class ICEText extends ICEComponent {
|
|
8
|
+
/**
|
|
9
|
+
* 文本的「动画安全键」:基类那批(位置/变换/透明度/显示/zIndex)之外,再放行**不参与量测**的
|
|
10
|
+
* 绘制类与编辑类键;字号/字间距/行高/内边距/`font*`/文本内容/换行参数一概**不在**白名单里
|
|
11
|
+
* (它们都会改变盒子尺寸或换行结果 → 必须走 `paramsDirty`)。
|
|
12
|
+
*/
|
|
13
|
+
static readonly ANIMATION_SAFE_KEYS: readonly string[];
|
|
8
14
|
/**
|
|
9
15
|
* @cfg
|
|
10
16
|
* {
|
package/dist/types/index.d.mts
CHANGED
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
export { default as AnimationManager } from './animation/AnimationManager.mjs';
|
|
9
|
+
export { validateAnimations, classifyAnimationValue, isInterpolatablePair, ICE_ANIMATION_DIAGNOSTIC_CODES, } from './animation/validate-animations.mjs';
|
|
10
|
+
export { registerEasing, unregisterEasing, resolveEasing, easingNames, customEasingNames, } from './animation/easing-registry.mjs';
|
|
11
|
+
export { default as AnimationTimeline } from './animation/AnimationTimeline.mjs';
|
|
12
|
+
export type { TimelineOptions } from './animation/AnimationTimeline.mjs';
|
|
13
|
+
export { EasingProgress } from './animation/Easing.mjs';
|
|
14
|
+
export { classifyValue as classifyAnimationValueKind, interpolateValue as interpolateAnimationValue, isInterpolatable as isAnimationValueInterpolatable, parseColor, parseNumberWithUnit, } from './animation/interpolators.mjs';
|
|
15
|
+
export type { ICEAnimationDiagnostic, ICEAnimationDiagnosticCode, ValidateAnimationsOptions, } from './animation/validate-animations.mjs';
|
|
9
16
|
export { default as ICEControlPanel } from './control-panel/ICEControlPanel.mjs';
|
|
10
17
|
export { default as ICEControlPanelManager } from './control-panel/ICEControlPanelManager.mjs';
|
|
11
18
|
export { default as AlignmentGuideManager } from './control-panel/AlignmentGuideManager.mjs';
|
|
@@ -51,6 +58,8 @@ export { default as ICE } from './ICE.mjs';
|
|
|
51
58
|
export { default as CanvasRenderer } from './renderer/CanvasRenderer.mjs';
|
|
52
59
|
export { exportSvg, exportSvgResult } from './export/SvgExporter.mjs';
|
|
53
60
|
export type { SvgExportOptions, SvgExportResult } from './export/SvgExporter.mjs';
|
|
61
|
+
export { composeLayersToCanvas, composeLayersDataURL } from './export/compose-layers.mjs';
|
|
62
|
+
export type { ComposeLayersOptions } from './export/compose-layers.mjs';
|
|
54
63
|
export { default as PluginHost } from './plugin/PluginHost.mjs';
|
|
55
64
|
export type { ICEPlugin, ICEPluginTool, ICERenderHook, ICERenderFrame } from './plugin/PluginHost.mjs';
|
|
56
65
|
export { default as Serializer, SERIALIZATION_VERSION } from './persistence/Serializer.mjs';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
export { default as AnimationManager } from './animation/AnimationManager';
|
|
9
|
+
export { validateAnimations, classifyAnimationValue, isInterpolatablePair, ICE_ANIMATION_DIAGNOSTIC_CODES, } from './animation/validate-animations';
|
|
10
|
+
export { registerEasing, unregisterEasing, resolveEasing, easingNames, customEasingNames, } from './animation/easing-registry';
|
|
11
|
+
export { default as AnimationTimeline } from './animation/AnimationTimeline';
|
|
12
|
+
export type { TimelineOptions } from './animation/AnimationTimeline';
|
|
13
|
+
export { EasingProgress } from './animation/Easing';
|
|
14
|
+
export { classifyValue as classifyAnimationValueKind, interpolateValue as interpolateAnimationValue, isInterpolatable as isAnimationValueInterpolatable, parseColor, parseNumberWithUnit, } from './animation/interpolators';
|
|
15
|
+
export type { ICEAnimationDiagnostic, ICEAnimationDiagnosticCode, ValidateAnimationsOptions, } from './animation/validate-animations';
|
|
9
16
|
export { default as ICEControlPanel } from './control-panel/ICEControlPanel';
|
|
10
17
|
export { default as ICEControlPanelManager } from './control-panel/ICEControlPanelManager';
|
|
11
18
|
export { default as AlignmentGuideManager } from './control-panel/AlignmentGuideManager';
|
|
@@ -51,6 +58,8 @@ export { default as ICE } from './ICE';
|
|
|
51
58
|
export { default as CanvasRenderer } from './renderer/CanvasRenderer';
|
|
52
59
|
export { exportSvg, exportSvgResult } from './export/SvgExporter';
|
|
53
60
|
export type { SvgExportOptions, SvgExportResult } from './export/SvgExporter';
|
|
61
|
+
export { composeLayersToCanvas, composeLayersDataURL } from './export/compose-layers';
|
|
62
|
+
export type { ComposeLayersOptions } from './export/compose-layers';
|
|
54
63
|
export { default as PluginHost } from './plugin/PluginHost';
|
|
55
64
|
export type { ICEPlugin, ICEPluginTool, ICERenderHook, ICERenderFrame } from './plugin/PluginHost';
|
|
56
65
|
export { default as Serializer, SERIALIZATION_VERSION } from './persistence/Serializer';
|
|
@@ -41,3 +41,13 @@ export declare function flattenAllComponents(ice: any, result?: any[]): any[];
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function hitTestComponents(ice: any, wx: number, wy: number, tolerance: number): any;
|
|
43
43
|
export declare function flattenTree(result?: any[], childNodes?: any[], level?: number, pid?: any): any[];
|
|
44
|
+
/**
|
|
45
|
+
* 把组件**连同整棵子树**重新绑定到指定 `ICE` 实例(`ice/ctx/evtBus/root`)。
|
|
46
|
+
*
|
|
47
|
+
* 为什么需要单独一个工具:`ICEGroup` 的子树同步钩子是 `once(AFTER_ADD, afterAddHandler)` ——
|
|
48
|
+
* 只在**首次挂载**时同步一次;跨实例迁移 / 嵌套重父级(`moveComponentTo` / `adoptChild`)时,
|
|
49
|
+
* 已经添加过的容器不会再触发它,后代就会把事件发到旧实例上(表现为"搬过去之后点不动/动画不动")。
|
|
50
|
+
*
|
|
51
|
+
* 迭代实现(不用递归,深树也不会爆栈);幂等,可安全重复调用。
|
|
52
|
+
*/
|
|
53
|
+
export declare function rebindComponentTree(component: any, ice: any): void;
|
|
@@ -41,3 +41,13 @@ export declare function flattenAllComponents(ice: any, result?: any[]): any[];
|
|
|
41
41
|
*/
|
|
42
42
|
export declare function hitTestComponents(ice: any, wx: number, wy: number, tolerance: number): any;
|
|
43
43
|
export declare function flattenTree(result?: any[], childNodes?: any[], level?: number, pid?: any): any[];
|
|
44
|
+
/**
|
|
45
|
+
* 把组件**连同整棵子树**重新绑定到指定 `ICE` 实例(`ice/ctx/evtBus/root`)。
|
|
46
|
+
*
|
|
47
|
+
* 为什么需要单独一个工具:`ICEGroup` 的子树同步钩子是 `once(AFTER_ADD, afterAddHandler)` ——
|
|
48
|
+
* 只在**首次挂载**时同步一次;跨实例迁移 / 嵌套重父级(`moveComponentTo` / `adoptChild`)时,
|
|
49
|
+
* 已经添加过的容器不会再触发它,后代就会把事件发到旧实例上(表现为"搬过去之后点不动/动画不动")。
|
|
50
|
+
*
|
|
51
|
+
* 迭代实现(不用递归,深树也不会爆栈);幂等,可安全重复调用。
|
|
52
|
+
*/
|
|
53
|
+
export declare function rebindComponentTree(component: any, ice: any): void;
|
|
@@ -45,6 +45,10 @@ export declare const ICE_ERROR_CODES: {
|
|
|
45
45
|
readonly OFFSCREEN_CONTEXT_UNSUPPORTED: "ICE_OFFSCREEN_CONTEXT_UNSUPPORTED";
|
|
46
46
|
/** 当前运行时没有可用的离屏 canvas。 */
|
|
47
47
|
readonly OFFSCREEN_CANVAS_UNSUPPORTED: "ICE_OFFSCREEN_CANVAS_UNSUPPORTED";
|
|
48
|
+
/** `registerEasing()` 的名字/函数非法。 */
|
|
49
|
+
readonly ANIM_EASING_INVALID: "ICE_ANIM_EASING_INVALID";
|
|
50
|
+
/** `registerEasing()` 的名字已被内置缓动占用,或重复注册。 */
|
|
51
|
+
readonly ANIM_EASING_NAME_CONFLICT: "ICE_ANIM_EASING_NAME_CONFLICT";
|
|
48
52
|
};
|
|
49
53
|
export type ICEErrorCode = (typeof ICE_ERROR_CODES)[keyof typeof ICE_ERROR_CODES];
|
|
50
54
|
export interface ICEErrorDetails {
|
|
@@ -45,6 +45,10 @@ export declare const ICE_ERROR_CODES: {
|
|
|
45
45
|
readonly OFFSCREEN_CONTEXT_UNSUPPORTED: "ICE_OFFSCREEN_CONTEXT_UNSUPPORTED";
|
|
46
46
|
/** 当前运行时没有可用的离屏 canvas。 */
|
|
47
47
|
readonly OFFSCREEN_CANVAS_UNSUPPORTED: "ICE_OFFSCREEN_CANVAS_UNSUPPORTED";
|
|
48
|
+
/** `registerEasing()` 的名字/函数非法。 */
|
|
49
|
+
readonly ANIM_EASING_INVALID: "ICE_ANIM_EASING_INVALID";
|
|
50
|
+
/** `registerEasing()` 的名字已被内置缓动占用,或重复注册。 */
|
|
51
|
+
readonly ANIM_EASING_NAME_CONFLICT: "ICE_ANIM_EASING_NAME_CONFLICT";
|
|
48
52
|
};
|
|
49
53
|
export type ICEErrorCode = (typeof ICE_ERROR_CODES)[keyof typeof ICE_ERROR_CODES];
|
|
50
54
|
export interface ICEErrorDetails {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "大漠穷秋",
|
|
3
3
|
"name": "ice-render",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.1",
|
|
5
5
|
"description": "A canvas engine for interactive graphics.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
"pkg:check": "npm run pkg:lint && npm run pkg:types",
|
|
52
52
|
"test:visual:ci": "playwright test e2e/visual/examples-smoke.spec.ts e2e/visual/interaction.spec.ts e2e/visual/dirty-rect-pixel.spec.ts e2e/visual/viewport.spec.ts e2e/visual/alignment.spec.ts e2e/visual/hidpi.spec.ts e2e/visual/worker-perf.spec.ts e2e/visual/svg-parity.spec.ts",
|
|
53
53
|
"verify": "npm run lint && npm run types:check && npm run build && npm test -- --runInBand && npm run bench 2000 && npm run pkg:check",
|
|
54
|
-
"verify:full": "npm run verify && npm run test:visual"
|
|
54
|
+
"verify:full": "npm run verify && npm run test:visual && npm run bench:anim -- --check && npm run bench:layers -- --check",
|
|
55
|
+
"bench:anim": "node bench/anim/animation-bench.mjs",
|
|
56
|
+
"bench:layers": "node bench/layers/layering-bench.mjs"
|
|
55
57
|
},
|
|
56
58
|
"devDependencies": {
|
|
57
59
|
"@arethetypeswrong/cli": "^0.18.5",
|