@number10/jsx-core 5.0.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 +667 -0
- package/README.md +38 -0
- package/dist/animation/animated-signal.cjs +19 -0
- package/dist/animation/animated-signal.cjs.map +1 -0
- package/dist/animation/animated-signal.d.ts +35 -0
- package/dist/animation/animated-signal.d.ts.map +1 -0
- package/dist/animation/animated-signal.js +19 -0
- package/dist/animation/animated-signal.js.map +1 -0
- package/dist/animation/create-spring.cjs +80 -0
- package/dist/animation/create-spring.cjs.map +1 -0
- package/dist/animation/create-spring.d.ts +56 -0
- package/dist/animation/create-spring.d.ts.map +1 -0
- package/dist/animation/create-spring.js +80 -0
- package/dist/animation/create-spring.js.map +1 -0
- package/dist/animation/easing.cjs +76 -0
- package/dist/animation/easing.cjs.map +1 -0
- package/dist/animation/easing.d.ts +45 -0
- package/dist/animation/easing.d.ts.map +1 -0
- package/dist/animation/easing.js +76 -0
- package/dist/animation/easing.js.map +1 -0
- package/dist/animation/effect-definitions.cjs +441 -0
- package/dist/animation/effect-definitions.cjs.map +1 -0
- package/dist/animation/effect-definitions.d.ts +60 -0
- package/dist/animation/effect-definitions.d.ts.map +1 -0
- package/dist/animation/effect-definitions.js +441 -0
- package/dist/animation/effect-definitions.js.map +1 -0
- package/dist/animation/effect-engine.cjs +189 -0
- package/dist/animation/effect-engine.cjs.map +1 -0
- package/dist/animation/effect-engine.d.ts +70 -0
- package/dist/animation/effect-engine.d.ts.map +1 -0
- package/dist/animation/effect-engine.js +189 -0
- package/dist/animation/effect-engine.js.map +1 -0
- package/dist/animation/index.d.ts +24 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/animation/spring-physics.cjs +94 -0
- package/dist/animation/spring-physics.cjs.map +1 -0
- package/dist/animation/spring-physics.d.ts +145 -0
- package/dist/animation/spring-physics.d.ts.map +1 -0
- package/dist/animation/spring-physics.js +94 -0
- package/dist/animation/spring-physics.js.map +1 -0
- package/dist/animation/tween.cjs +67 -0
- package/dist/animation/tween.cjs.map +1 -0
- package/dist/animation/tween.d.ts +60 -0
- package/dist/animation/tween.d.ts.map +1 -0
- package/dist/animation/tween.js +67 -0
- package/dist/animation/tween.js.map +1 -0
- package/dist/animation/types.d.ts +31 -0
- package/dist/animation/types.d.ts.map +1 -0
- package/dist/animation/useSpring.cjs +152 -0
- package/dist/animation/useSpring.cjs.map +1 -0
- package/dist/animation/useSpring.d.ts +55 -0
- package/dist/animation/useSpring.d.ts.map +1 -0
- package/dist/animation/useSpring.js +149 -0
- package/dist/animation/useSpring.js.map +1 -0
- package/dist/animation/useTween.cjs +208 -0
- package/dist/animation/useTween.cjs.map +1 -0
- package/dist/animation/useTween.d.ts +116 -0
- package/dist/animation/useTween.d.ts.map +1 -0
- package/dist/animation/useTween.js +208 -0
- package/dist/animation/useTween.js.map +1 -0
- package/dist/border-geometry.cjs +447 -0
- package/dist/border-geometry.cjs.map +1 -0
- package/dist/border-geometry.d.ts +114 -0
- package/dist/border-geometry.d.ts.map +1 -0
- package/dist/border-geometry.js +447 -0
- package/dist/border-geometry.js.map +1 -0
- package/dist/colors/color-presets.cjs +236 -0
- package/dist/colors/color-presets.cjs.map +1 -0
- package/dist/colors/color-presets.d.ts +89 -0
- package/dist/colors/color-presets.d.ts.map +1 -0
- package/dist/colors/color-presets.js +236 -0
- package/dist/colors/color-presets.js.map +1 -0
- package/dist/colors/color-theme-helpers.cjs +32 -0
- package/dist/colors/color-theme-helpers.cjs.map +1 -0
- package/dist/colors/color-theme-helpers.d.ts +65 -0
- package/dist/colors/color-theme-helpers.d.ts.map +1 -0
- package/dist/colors/color-theme-helpers.js +32 -0
- package/dist/colors/color-theme-helpers.js.map +1 -0
- package/dist/colors/color-types.cjs +38 -0
- package/dist/colors/color-types.cjs.map +1 -0
- package/dist/colors/color-types.d.ts +112 -0
- package/dist/colors/color-types.d.ts.map +1 -0
- package/dist/colors/color-types.js +38 -0
- package/dist/colors/color-types.js.map +1 -0
- package/dist/colors/color-utils.cjs +197 -0
- package/dist/colors/color-utils.cjs.map +1 -0
- package/dist/colors/color-utils.d.ts +216 -0
- package/dist/colors/color-utils.d.ts.map +1 -0
- package/dist/colors/color-utils.js +197 -0
- package/dist/colors/color-utils.js.map +1 -0
- package/dist/colors/contrast-contracts.cjs +265 -0
- package/dist/colors/contrast-contracts.cjs.map +1 -0
- package/dist/colors/contrast-contracts.d.ts +289 -0
- package/dist/colors/contrast-contracts.d.ts.map +1 -0
- package/dist/colors/contrast-contracts.js +265 -0
- package/dist/colors/contrast-contracts.js.map +1 -0
- package/dist/colors/index.cjs +55 -0
- package/dist/colors/index.cjs.map +1 -0
- package/dist/colors/index.d.ts +16 -0
- package/dist/colors/index.d.ts.map +1 -0
- package/dist/colors/index.js +55 -0
- package/dist/colors/index.js.map +1 -0
- package/dist/core-props.cjs +66 -0
- package/dist/core-props.cjs.map +1 -0
- package/dist/core-props.d.ts +395 -0
- package/dist/core-props.d.ts.map +1 -0
- package/dist/core-props.js +66 -0
- package/dist/core-props.js.map +1 -0
- package/dist/design-tokens/design-token-presets.cjs +91 -0
- package/dist/design-tokens/design-token-presets.cjs.map +1 -0
- package/dist/design-tokens/design-token-presets.d.ts +34 -0
- package/dist/design-tokens/design-token-presets.d.ts.map +1 -0
- package/dist/design-tokens/design-token-presets.js +91 -0
- package/dist/design-tokens/design-token-presets.js.map +1 -0
- package/dist/design-tokens/design-token-types.d.ts +97 -0
- package/dist/design-tokens/design-token-types.d.ts.map +1 -0
- package/dist/design-tokens/index.cjs +10 -0
- package/dist/design-tokens/index.cjs.map +1 -0
- package/dist/design-tokens/index.d.ts +9 -0
- package/dist/design-tokens/index.d.ts.map +1 -0
- package/dist/design-tokens/index.js +10 -0
- package/dist/design-tokens/index.js.map +1 -0
- package/dist/dev-config.cjs +296 -0
- package/dist/dev-config.cjs.map +1 -0
- package/dist/dev-config.d.ts +238 -0
- package/dist/dev-config.d.ts.map +1 -0
- package/dist/dev-config.js +296 -0
- package/dist/dev-config.js.map +1 -0
- package/dist/effects.cjs +69 -0
- package/dist/effects.cjs.map +1 -0
- package/dist/effects.d.ts +152 -0
- package/dist/effects.d.ts.map +1 -0
- package/dist/effects.js +69 -0
- package/dist/effects.js.map +1 -0
- package/dist/global-registry.cjs +25 -0
- package/dist/global-registry.cjs.map +1 -0
- package/dist/global-registry.d.ts +19 -0
- package/dist/global-registry.d.ts.map +1 -0
- package/dist/global-registry.js +25 -0
- package/dist/global-registry.js.map +1 -0
- package/dist/hooks.cjs +378 -0
- package/dist/hooks.cjs.map +1 -0
- package/dist/hooks.d.ts +322 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +378 -0
- package/dist/hooks.js.map +1 -0
- package/dist/host-adapter.d.ts +414 -0
- package/dist/host-adapter.d.ts.map +1 -0
- package/dist/index.cjs +229 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +226 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx-dev-runtime.cjs +10 -0
- package/dist/jsx-dev-runtime.cjs.map +1 -0
- package/dist/jsx-dev-runtime.d.ts +5 -0
- package/dist/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/jsx-dev-runtime.js +11 -0
- package/dist/jsx-dev-runtime.js.map +1 -0
- package/dist/jsx-runtime.cjs +44 -0
- package/dist/jsx-runtime.cjs.map +1 -0
- package/dist/jsx-runtime.d.ts +24 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +44 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/jsx-types.d.ts +25 -0
- package/dist/jsx-types.d.ts.map +1 -0
- package/dist/layout/appliers/container-applier.cjs +20 -0
- package/dist/layout/appliers/container-applier.cjs.map +1 -0
- package/dist/layout/appliers/container-applier.d.ts +9 -0
- package/dist/layout/appliers/container-applier.d.ts.map +1 -0
- package/dist/layout/appliers/container-applier.js +20 -0
- package/dist/layout/appliers/container-applier.js.map +1 -0
- package/dist/layout/appliers/position-applier.cjs +31 -0
- package/dist/layout/appliers/position-applier.cjs.map +1 -0
- package/dist/layout/appliers/position-applier.d.ts +8 -0
- package/dist/layout/appliers/position-applier.d.ts.map +1 -0
- package/dist/layout/appliers/position-applier.js +31 -0
- package/dist/layout/appliers/position-applier.js.map +1 -0
- package/dist/layout/layout-engine-test-utils.d.ts +26 -0
- package/dist/layout/layout-engine-test-utils.d.ts.map +1 -0
- package/dist/layout/layout-engine.cjs +628 -0
- package/dist/layout/layout-engine.cjs.map +1 -0
- package/dist/layout/layout-engine.d.ts +140 -0
- package/dist/layout/layout-engine.d.ts.map +1 -0
- package/dist/layout/layout-engine.js +628 -0
- package/dist/layout/layout-engine.js.map +1 -0
- package/dist/layout/strategies/base-strategy.cjs +31 -0
- package/dist/layout/strategies/base-strategy.cjs.map +1 -0
- package/dist/layout/strategies/base-strategy.d.ts +59 -0
- package/dist/layout/strategies/base-strategy.d.ts.map +1 -0
- package/dist/layout/strategies/base-strategy.js +31 -0
- package/dist/layout/strategies/base-strategy.js.map +1 -0
- package/dist/layout/strategies/column-layout.cjs +145 -0
- package/dist/layout/strategies/column-layout.cjs.map +1 -0
- package/dist/layout/strategies/column-layout.d.ts +38 -0
- package/dist/layout/strategies/column-layout.d.ts.map +1 -0
- package/dist/layout/strategies/column-layout.js +145 -0
- package/dist/layout/strategies/column-layout.js.map +1 -0
- package/dist/layout/strategies/row-layout.cjs +145 -0
- package/dist/layout/strategies/row-layout.cjs.map +1 -0
- package/dist/layout/strategies/row-layout.d.ts +38 -0
- package/dist/layout/strategies/row-layout.d.ts.map +1 -0
- package/dist/layout/strategies/row-layout.js +145 -0
- package/dist/layout/strategies/row-layout.js.map +1 -0
- package/dist/layout/strategies/stack-layout.cjs +94 -0
- package/dist/layout/strategies/stack-layout.cjs.map +1 -0
- package/dist/layout/strategies/stack-layout.d.ts +30 -0
- package/dist/layout/strategies/stack-layout.d.ts.map +1 -0
- package/dist/layout/strategies/stack-layout.js +94 -0
- package/dist/layout/strategies/stack-layout.js.map +1 -0
- package/dist/layout/types.d.ts +134 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/layout/utils/child-utils.cjs +129 -0
- package/dist/layout/utils/child-utils.cjs.map +1 -0
- package/dist/layout/utils/child-utils.d.ts +54 -0
- package/dist/layout/utils/child-utils.d.ts.map +1 -0
- package/dist/layout/utils/child-utils.js +129 -0
- package/dist/layout/utils/child-utils.js.map +1 -0
- package/dist/layout/utils/dimension-calculator.cjs +109 -0
- package/dist/layout/utils/dimension-calculator.cjs.map +1 -0
- package/dist/layout/utils/dimension-calculator.d.ts +59 -0
- package/dist/layout/utils/dimension-calculator.d.ts.map +1 -0
- package/dist/layout/utils/dimension-calculator.js +109 -0
- package/dist/layout/utils/dimension-calculator.js.map +1 -0
- package/dist/layout/utils/flex-distributor.cjs +173 -0
- package/dist/layout/utils/flex-distributor.cjs.map +1 -0
- package/dist/layout/utils/flex-distributor.d.ts +18 -0
- package/dist/layout/utils/flex-distributor.d.ts.map +1 -0
- package/dist/layout/utils/flex-distributor.js +173 -0
- package/dist/layout/utils/flex-distributor.js.map +1 -0
- package/dist/layout/utils/size-resolver.cjs +280 -0
- package/dist/layout/utils/size-resolver.cjs.map +1 -0
- package/dist/layout/utils/size-resolver.d.ts +84 -0
- package/dist/layout/utils/size-resolver.d.ts.map +1 -0
- package/dist/layout/utils/size-resolver.js +280 -0
- package/dist/layout/utils/size-resolver.js.map +1 -0
- package/dist/layout/utils/spacing-calculator.cjs +50 -0
- package/dist/layout/utils/spacing-calculator.cjs.map +1 -0
- package/dist/layout/utils/spacing-calculator.d.ts +27 -0
- package/dist/layout/utils/spacing-calculator.d.ts.map +1 -0
- package/dist/layout/utils/spacing-calculator.js +50 -0
- package/dist/layout/utils/spacing-calculator.js.map +1 -0
- package/dist/memo.cjs +18 -0
- package/dist/memo.cjs.map +1 -0
- package/dist/memo.d.ts +29 -0
- package/dist/memo.d.ts.map +1 -0
- package/dist/memo.js +18 -0
- package/dist/memo.js.map +1 -0
- package/dist/nineslice-contract.cjs +60 -0
- package/dist/nineslice-contract.cjs.map +1 -0
- package/dist/nineslice-contract.d.ts +107 -0
- package/dist/nineslice-contract.d.ts.map +1 -0
- package/dist/nineslice-contract.js +60 -0
- package/dist/nineslice-contract.js.map +1 -0
- package/dist/placeholder.cjs +12 -0
- package/dist/placeholder.cjs.map +1 -0
- package/dist/placeholder.d.ts +44 -0
- package/dist/placeholder.d.ts.map +1 -0
- package/dist/placeholder.js +12 -0
- package/dist/placeholder.js.map +1 -0
- package/dist/portal.cjs +89 -0
- package/dist/portal.cjs.map +1 -0
- package/dist/portal.d.ts +62 -0
- package/dist/portal.d.ts.map +1 -0
- package/dist/portal.js +89 -0
- package/dist/portal.js.map +1 -0
- package/dist/primitive-contracts.cjs +12 -0
- package/dist/primitive-contracts.cjs.map +1 -0
- package/dist/primitive-contracts.d.ts +186 -0
- package/dist/primitive-contracts.d.ts.map +1 -0
- package/dist/primitive-contracts.js +12 -0
- package/dist/primitive-contracts.js.map +1 -0
- package/dist/theme.cjs +332 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.ts +204 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +332 -0
- package/dist/theme.js.map +1 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/vdom/create-runtime.cjs +79 -0
- package/dist/vdom/create-runtime.cjs.map +1 -0
- package/dist/vdom/create-runtime.d.ts +7 -0
- package/dist/vdom/create-runtime.d.ts.map +1 -0
- package/dist/vdom/create-runtime.js +79 -0
- package/dist/vdom/create-runtime.js.map +1 -0
- package/dist/vdom/index.cjs +8 -0
- package/dist/vdom/index.cjs.map +1 -0
- package/dist/vdom/index.d.ts +4 -0
- package/dist/vdom/index.d.ts.map +1 -0
- package/dist/vdom/index.js +8 -0
- package/dist/vdom/index.js.map +1 -0
- package/dist/vdom/mount.cjs +161 -0
- package/dist/vdom/mount.cjs.map +1 -0
- package/dist/vdom/mount.d.ts +6 -0
- package/dist/vdom/mount.d.ts.map +1 -0
- package/dist/vdom/mount.js +161 -0
- package/dist/vdom/mount.js.map +1 -0
- package/dist/vdom/patch.cjs +163 -0
- package/dist/vdom/patch.cjs.map +1 -0
- package/dist/vdom/patch.d.ts +3 -0
- package/dist/vdom/patch.d.ts.map +1 -0
- package/dist/vdom/patch.js +163 -0
- package/dist/vdom/patch.js.map +1 -0
- package/dist/vdom/registry.cjs +85 -0
- package/dist/vdom/registry.cjs.map +1 -0
- package/dist/vdom/registry.d.ts +28 -0
- package/dist/vdom/registry.d.ts.map +1 -0
- package/dist/vdom/registry.js +85 -0
- package/dist/vdom/registry.js.map +1 -0
- package/dist/vdom/runtime-helpers.cjs +23 -0
- package/dist/vdom/runtime-helpers.cjs.map +1 -0
- package/dist/vdom/runtime-helpers.d.ts +8 -0
- package/dist/vdom/runtime-helpers.d.ts.map +1 -0
- package/dist/vdom/runtime-helpers.js +23 -0
- package/dist/vdom/runtime-helpers.js.map +1 -0
- package/dist/vdom/surface.cjs +107 -0
- package/dist/vdom/surface.cjs.map +1 -0
- package/dist/vdom/surface.d.ts +9 -0
- package/dist/vdom/surface.d.ts.map +1 -0
- package/dist/vdom/surface.js +107 -0
- package/dist/vdom/surface.js.map +1 -0
- package/dist/vdom/types.d.ts +104 -0
- package/dist/vdom/types.d.ts.map +1 -0
- package/dist/vdom/utils.cjs +146 -0
- package/dist/vdom/utils.cjs.map +1 -0
- package/dist/vdom/utils.d.ts +24 -0
- package/dist/vdom/utils.d.ts.map +1 -0
- package/dist/vdom/utils.js +146 -0
- package/dist/vdom/utils.js.map +1 -0
- package/dist/vdom.d.ts +4 -0
- package/dist/vdom.d.ts.map +1 -0
- package/dist/vector-draw-context.d.ts +63 -0
- package/dist/vector-draw-context.d.ts.map +1 -0
- package/package.json +161 -0
- package/vdom/index.cjs +1 -0
- package/vdom/index.d.ts +1 -0
- package/vdom/index.js +1 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development and debugging configuration
|
|
3
|
+
* Runtime-configurable settings for debugging and development
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Development configuration object
|
|
7
|
+
* Can be modified at runtime from user code for debugging
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { DevConfig } from '@number10/phaserjsx'
|
|
12
|
+
*
|
|
13
|
+
* // Enable specific debug categories
|
|
14
|
+
* DevConfig.debug.enabled = true
|
|
15
|
+
* DevConfig.debug.layout = true
|
|
16
|
+
*
|
|
17
|
+
* // Customize visual debugging
|
|
18
|
+
* DevConfig.visual.maskFillColor = 0xff00ff // Pink
|
|
19
|
+
* DevConfig.visual.maskAlpha = 0.3 // Semi-transparent
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare const DevConfig: {
|
|
23
|
+
/**
|
|
24
|
+
* Debug logging configuration
|
|
25
|
+
* Controls console output for different subsystems
|
|
26
|
+
*/
|
|
27
|
+
debug: {
|
|
28
|
+
/**
|
|
29
|
+
* Master switch - disables all debug output when false
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Detailed layout calculation logs
|
|
35
|
+
* Shows container sizing, positioning, and flex distribution
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
layout: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Overflow mask positioning logs
|
|
41
|
+
* Shows world coordinate calculations and mask updates
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
overflowMask: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Flex distribution calculations
|
|
47
|
+
* Shows flex space allocation across children
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
50
|
+
flex: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Child sizing and positioning
|
|
53
|
+
* Shows individual child dimension calculations
|
|
54
|
+
* @default false
|
|
55
|
+
*/
|
|
56
|
+
positioning: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* VDOM mount/patch/unmount operations
|
|
59
|
+
* Shows virtual DOM updates and reconciliation
|
|
60
|
+
* @default false
|
|
61
|
+
*/
|
|
62
|
+
vdom: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Performance timing measurements
|
|
65
|
+
* Shows execution time for layout operations
|
|
66
|
+
* @default false
|
|
67
|
+
*/
|
|
68
|
+
performance: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Theme system logs
|
|
71
|
+
* Shows theme registry updates and prop merging
|
|
72
|
+
* @default false
|
|
73
|
+
*/
|
|
74
|
+
theme: boolean;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* VDOM warnings and development checks
|
|
78
|
+
* These help catch common mistakes that lead to performance issues
|
|
79
|
+
*/
|
|
80
|
+
warnings: {
|
|
81
|
+
/**
|
|
82
|
+
* Warn when list items (siblings) don't have key props
|
|
83
|
+
* Similar to React's "Each child in a list should have a unique key prop" warning
|
|
84
|
+
* @default true (in development)
|
|
85
|
+
*/
|
|
86
|
+
missingKeys: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Warn when props change causes full remount instead of update
|
|
89
|
+
* Detects JSX/callback recreation that prevents VDOM optimization
|
|
90
|
+
* @default true (in development)
|
|
91
|
+
*/
|
|
92
|
+
unnecessaryRemounts: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Warn when VNodes are frozen/sealed and need copying
|
|
95
|
+
* Happens in production builds or with certain bundler optimizations
|
|
96
|
+
* @default false (usually only relevant in production)
|
|
97
|
+
*/
|
|
98
|
+
frozenVNodes: boolean;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Visual debugging aids
|
|
102
|
+
* Runtime-configurable visual settings
|
|
103
|
+
*/
|
|
104
|
+
visual: {
|
|
105
|
+
/**
|
|
106
|
+
* Show overflow mask areas
|
|
107
|
+
* When true, masks are visible (alpha > 0) for debugging
|
|
108
|
+
* @default false
|
|
109
|
+
*/
|
|
110
|
+
showOverflowMasks: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Mask fill color
|
|
113
|
+
* @default 0xffffff (white, invisible with alpha=0)
|
|
114
|
+
* @example 0xff00ff (pink for debugging)
|
|
115
|
+
*/
|
|
116
|
+
maskFillColor: number;
|
|
117
|
+
/**
|
|
118
|
+
* Mask alpha transparency
|
|
119
|
+
* @default 0.0 (invisible)
|
|
120
|
+
* @example 0.3 (semi-transparent for debugging)
|
|
121
|
+
*/
|
|
122
|
+
maskAlpha: number;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Performance tuning
|
|
126
|
+
*/
|
|
127
|
+
performance: {
|
|
128
|
+
/**
|
|
129
|
+
* Enable deferred layout queue batching
|
|
130
|
+
* When false, deferred updates execute immediately (not batched)
|
|
131
|
+
* @default true
|
|
132
|
+
*/
|
|
133
|
+
useDeferredQueue: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Log deferred queue statistics
|
|
136
|
+
* Shows number of batched callbacks per frame
|
|
137
|
+
* @default false
|
|
138
|
+
*/
|
|
139
|
+
logQueueStats: boolean;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Debug logger with category support
|
|
144
|
+
* Only logs when global debug is enabled AND category is enabled
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* DebugLogger.log('layout', 'Container size:', { width: 100, height: 200 })
|
|
149
|
+
* // Only logs if DevConfig.debug.enabled && DevConfig.debug.layout
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export declare class DebugLogger {
|
|
153
|
+
/**
|
|
154
|
+
* Debounced console.log instances per category-message combination
|
|
155
|
+
*/
|
|
156
|
+
private static debouncedLoggers;
|
|
157
|
+
/**
|
|
158
|
+
* Log a message with category filtering and debouncing
|
|
159
|
+
* @param category - Debug category to check
|
|
160
|
+
* @param message - Message to log
|
|
161
|
+
* @param args - Additional arguments to log (only first element is used)
|
|
162
|
+
*/
|
|
163
|
+
static log(category: keyof typeof DevConfig.debug, message: string, ...args: unknown[]): void;
|
|
164
|
+
/**
|
|
165
|
+
* Log a warning message (always shown, even if debug disabled)
|
|
166
|
+
* @param category - Category for context
|
|
167
|
+
* @param message - Warning message
|
|
168
|
+
* @param args - Additional arguments
|
|
169
|
+
*/
|
|
170
|
+
static warn(category: string, message: string, ...args: unknown[]): void;
|
|
171
|
+
/**
|
|
172
|
+
* Log an error message (always shown, even if debug disabled)
|
|
173
|
+
* @param category - Category for context
|
|
174
|
+
* @param message - Error message
|
|
175
|
+
* @param args - Additional arguments
|
|
176
|
+
*/
|
|
177
|
+
static error(category: string, message: string, ...args: unknown[]): void;
|
|
178
|
+
/**
|
|
179
|
+
* Start a performance timer
|
|
180
|
+
* @param category - Debug category to check
|
|
181
|
+
* @param label - Timer label
|
|
182
|
+
*/
|
|
183
|
+
static time(category: keyof typeof DevConfig.debug, label: string): void;
|
|
184
|
+
/**
|
|
185
|
+
* End a performance timer
|
|
186
|
+
* @param category - Debug category to check
|
|
187
|
+
* @param label - Timer label
|
|
188
|
+
*/
|
|
189
|
+
static timeEnd(category: keyof typeof DevConfig.debug, label: string): void;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Predefined configuration presets for common debugging scenarios
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* import { DevPresets } from '@number10/phaserjsx'
|
|
197
|
+
*
|
|
198
|
+
* // Quick activation of overflow debugging
|
|
199
|
+
* DevPresets.debugOverflow()
|
|
200
|
+
*
|
|
201
|
+
* // Revert to production settings
|
|
202
|
+
* DevPresets.production()
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
export declare const DevPresets: {
|
|
206
|
+
/**
|
|
207
|
+
* Production configuration
|
|
208
|
+
* All debugging disabled, optimal performance
|
|
209
|
+
*/
|
|
210
|
+
production: () => void;
|
|
211
|
+
/**
|
|
212
|
+
* Debug layout issues
|
|
213
|
+
* Enables layout, positioning, and flex logs
|
|
214
|
+
*/
|
|
215
|
+
debugLayout: () => void;
|
|
216
|
+
/**
|
|
217
|
+
* Debug overflow masking
|
|
218
|
+
* Enables overflow logs and makes masks visible
|
|
219
|
+
*/
|
|
220
|
+
debugOverflow: () => void;
|
|
221
|
+
/**
|
|
222
|
+
* Performance profiling
|
|
223
|
+
* Enables performance timing and queue statistics
|
|
224
|
+
*/
|
|
225
|
+
profilePerformance: () => void;
|
|
226
|
+
/**
|
|
227
|
+
* Debug VDOM operations
|
|
228
|
+
* Enables virtual DOM mount/patch/unmount logs
|
|
229
|
+
*/
|
|
230
|
+
debugVDOM: () => void;
|
|
231
|
+
debugTheme: () => void;
|
|
232
|
+
/**
|
|
233
|
+
* Enable all debug categories (verbose!)
|
|
234
|
+
* Use with caution - produces lots of console output
|
|
235
|
+
*/
|
|
236
|
+
debugAll: () => void;
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=dev-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-config.d.ts","sourceRoot":"","sources":["../src/dev-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS;IACpB;;;OAGG;;QAED;;;WAGG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;;IAIL;;;OAGG;;QAED;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;;IAIL;;;OAGG;;QAED;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;;IAIL;;OAEG;;QAED;;;;WAIG;;QAGH;;;;WAIG;;;CAGN,CAAA;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAkD;IAEjF;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAmB7F;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIxE;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIzE;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOxE;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAM5E;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU;IACrB;;;OAGG;sBACa,IAAI;IAQpB;;;OAGG;uBACc,IAAI;IAWrB;;;OAGG;yBACgB,IAAI;IAcvB;;;OAGG;8BACqB,IAAI;IAY5B;;;OAGG;qBACY,IAAI;sBAWH,IAAI;IAYpB;;;OAGG;oBACW,IAAI;CAanB,CAAA"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
function debounce(fn, delay) {
|
|
2
|
+
let timeoutId;
|
|
3
|
+
return (...args) => {
|
|
4
|
+
if (timeoutId !== void 0) clearTimeout(timeoutId);
|
|
5
|
+
timeoutId = setTimeout(() => {
|
|
6
|
+
timeoutId = void 0;
|
|
7
|
+
fn(...args);
|
|
8
|
+
}, delay);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const DevConfig = {
|
|
12
|
+
/**
|
|
13
|
+
* Debug logging configuration
|
|
14
|
+
* Controls console output for different subsystems
|
|
15
|
+
*/
|
|
16
|
+
debug: {
|
|
17
|
+
/**
|
|
18
|
+
* Master switch - disables all debug output when false
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
enabled: false,
|
|
22
|
+
/**
|
|
23
|
+
* Detailed layout calculation logs
|
|
24
|
+
* Shows container sizing, positioning, and flex distribution
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
layout: false,
|
|
28
|
+
/**
|
|
29
|
+
* Overflow mask positioning logs
|
|
30
|
+
* Shows world coordinate calculations and mask updates
|
|
31
|
+
* @default false
|
|
32
|
+
*/
|
|
33
|
+
overflowMask: false,
|
|
34
|
+
/**
|
|
35
|
+
* Flex distribution calculations
|
|
36
|
+
* Shows flex space allocation across children
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
flex: false,
|
|
40
|
+
/**
|
|
41
|
+
* Child sizing and positioning
|
|
42
|
+
* Shows individual child dimension calculations
|
|
43
|
+
* @default false
|
|
44
|
+
*/
|
|
45
|
+
positioning: false,
|
|
46
|
+
/**
|
|
47
|
+
* VDOM mount/patch/unmount operations
|
|
48
|
+
* Shows virtual DOM updates and reconciliation
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
51
|
+
vdom: false,
|
|
52
|
+
/**
|
|
53
|
+
* Performance timing measurements
|
|
54
|
+
* Shows execution time for layout operations
|
|
55
|
+
* @default false
|
|
56
|
+
*/
|
|
57
|
+
performance: false,
|
|
58
|
+
/**
|
|
59
|
+
* Theme system logs
|
|
60
|
+
* Shows theme registry updates and prop merging
|
|
61
|
+
* @default false
|
|
62
|
+
*/
|
|
63
|
+
theme: false
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* VDOM warnings and development checks
|
|
67
|
+
* These help catch common mistakes that lead to performance issues
|
|
68
|
+
*/
|
|
69
|
+
warnings: {
|
|
70
|
+
/**
|
|
71
|
+
* Warn when list items (siblings) don't have key props
|
|
72
|
+
* Similar to React's "Each child in a list should have a unique key prop" warning
|
|
73
|
+
* @default true (in development)
|
|
74
|
+
*/
|
|
75
|
+
missingKeys: false,
|
|
76
|
+
// temp disable because of detection issues, will re-enable later
|
|
77
|
+
/**
|
|
78
|
+
* Warn when props change causes full remount instead of update
|
|
79
|
+
* Detects JSX/callback recreation that prevents VDOM optimization
|
|
80
|
+
* @default true (in development)
|
|
81
|
+
*/
|
|
82
|
+
unnecessaryRemounts: false,
|
|
83
|
+
/**
|
|
84
|
+
* Warn when VNodes are frozen/sealed and need copying
|
|
85
|
+
* Happens in production builds or with certain bundler optimizations
|
|
86
|
+
* @default false (usually only relevant in production)
|
|
87
|
+
*/
|
|
88
|
+
frozenVNodes: false
|
|
89
|
+
},
|
|
90
|
+
/**
|
|
91
|
+
* Visual debugging aids
|
|
92
|
+
* Runtime-configurable visual settings
|
|
93
|
+
*/
|
|
94
|
+
visual: {
|
|
95
|
+
/**
|
|
96
|
+
* Show overflow mask areas
|
|
97
|
+
* When true, masks are visible (alpha > 0) for debugging
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
showOverflowMasks: false,
|
|
101
|
+
/**
|
|
102
|
+
* Mask fill color
|
|
103
|
+
* @default 0xffffff (white, invisible with alpha=0)
|
|
104
|
+
* @example 0xff00ff (pink for debugging)
|
|
105
|
+
*/
|
|
106
|
+
maskFillColor: 16777215,
|
|
107
|
+
/**
|
|
108
|
+
* Mask alpha transparency
|
|
109
|
+
* @default 0.0 (invisible)
|
|
110
|
+
* @example 0.3 (semi-transparent for debugging)
|
|
111
|
+
*/
|
|
112
|
+
maskAlpha: 0
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* Performance tuning
|
|
116
|
+
*/
|
|
117
|
+
performance: {
|
|
118
|
+
/**
|
|
119
|
+
* Enable deferred layout queue batching
|
|
120
|
+
* When false, deferred updates execute immediately (not batched)
|
|
121
|
+
* @default true
|
|
122
|
+
*/
|
|
123
|
+
useDeferredQueue: true,
|
|
124
|
+
/**
|
|
125
|
+
* Log deferred queue statistics
|
|
126
|
+
* Shows number of batched callbacks per frame
|
|
127
|
+
* @default false
|
|
128
|
+
*/
|
|
129
|
+
logQueueStats: false
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
class DebugLogger {
|
|
133
|
+
/**
|
|
134
|
+
* Debounced console.log instances per category-message combination
|
|
135
|
+
*/
|
|
136
|
+
static debouncedLoggers = /* @__PURE__ */ new Map();
|
|
137
|
+
/**
|
|
138
|
+
* Log a message with category filtering and debouncing
|
|
139
|
+
* @param category - Debug category to check
|
|
140
|
+
* @param message - Message to log
|
|
141
|
+
* @param args - Additional arguments to log (only first element is used)
|
|
142
|
+
*/
|
|
143
|
+
static log(category, message, ...args) {
|
|
144
|
+
if (!DevConfig.debug.enabled) return;
|
|
145
|
+
if (category !== "enabled" && !DevConfig.debug[category]) return;
|
|
146
|
+
const key = `${String(category)}:${message}`;
|
|
147
|
+
let debouncedLog = this.debouncedLoggers.get(key);
|
|
148
|
+
if (!debouncedLog) {
|
|
149
|
+
debouncedLog = debounce(() => {
|
|
150
|
+
console.log(`[${category}] ${message}`, args[0]);
|
|
151
|
+
}, 300);
|
|
152
|
+
this.debouncedLoggers.set(key, debouncedLog);
|
|
153
|
+
}
|
|
154
|
+
debouncedLog();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Log a warning message (always shown, even if debug disabled)
|
|
158
|
+
* @param category - Category for context
|
|
159
|
+
* @param message - Warning message
|
|
160
|
+
* @param args - Additional arguments
|
|
161
|
+
*/
|
|
162
|
+
static warn(category, message, ...args) {
|
|
163
|
+
console.warn(`[${category}] ${message}`, ...args);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Log an error message (always shown, even if debug disabled)
|
|
167
|
+
* @param category - Category for context
|
|
168
|
+
* @param message - Error message
|
|
169
|
+
* @param args - Additional arguments
|
|
170
|
+
*/
|
|
171
|
+
static error(category, message, ...args) {
|
|
172
|
+
console.error(`[${category}] ${message}`, ...args);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Start a performance timer
|
|
176
|
+
* @param category - Debug category to check
|
|
177
|
+
* @param label - Timer label
|
|
178
|
+
*/
|
|
179
|
+
static time(category, label) {
|
|
180
|
+
if (!DevConfig.debug.enabled) return;
|
|
181
|
+
if (category !== "enabled" && !DevConfig.debug[category]) return;
|
|
182
|
+
console.time(`[${category}] ${label}`);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* End a performance timer
|
|
186
|
+
* @param category - Debug category to check
|
|
187
|
+
* @param label - Timer label
|
|
188
|
+
*/
|
|
189
|
+
static timeEnd(category, label) {
|
|
190
|
+
if (!DevConfig.debug.enabled) return;
|
|
191
|
+
if (category !== "enabled" && !DevConfig.debug[category]) return;
|
|
192
|
+
console.timeEnd(`[${category}] ${label}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const DevPresets = {
|
|
196
|
+
/**
|
|
197
|
+
* Production configuration
|
|
198
|
+
* All debugging disabled, optimal performance
|
|
199
|
+
*/
|
|
200
|
+
production: () => {
|
|
201
|
+
DevConfig.debug.enabled = false;
|
|
202
|
+
DevConfig.visual.showOverflowMasks = false;
|
|
203
|
+
DevConfig.visual.maskAlpha = 0;
|
|
204
|
+
DevConfig.visual.maskFillColor = 16777215;
|
|
205
|
+
DevConfig.performance.logQueueStats = false;
|
|
206
|
+
},
|
|
207
|
+
/**
|
|
208
|
+
* Debug layout issues
|
|
209
|
+
* Enables layout, positioning, and flex logs
|
|
210
|
+
*/
|
|
211
|
+
debugLayout: () => {
|
|
212
|
+
DevConfig.debug.enabled = true;
|
|
213
|
+
DevConfig.debug.layout = true;
|
|
214
|
+
DevConfig.debug.positioning = true;
|
|
215
|
+
DevConfig.debug.flex = true;
|
|
216
|
+
DevConfig.debug.overflowMask = false;
|
|
217
|
+
DevConfig.debug.vdom = false;
|
|
218
|
+
DevConfig.debug.performance = false;
|
|
219
|
+
},
|
|
220
|
+
/**
|
|
221
|
+
* Debug overflow masking
|
|
222
|
+
* Enables overflow logs and makes masks visible
|
|
223
|
+
*/
|
|
224
|
+
debugOverflow: () => {
|
|
225
|
+
DevConfig.debug.enabled = true;
|
|
226
|
+
DevConfig.debug.overflowMask = true;
|
|
227
|
+
DevConfig.visual.showOverflowMasks = true;
|
|
228
|
+
DevConfig.visual.maskFillColor = 16711935;
|
|
229
|
+
DevConfig.visual.maskAlpha = 0.3;
|
|
230
|
+
DevConfig.debug.layout = false;
|
|
231
|
+
DevConfig.debug.positioning = false;
|
|
232
|
+
DevConfig.debug.flex = false;
|
|
233
|
+
DevConfig.debug.vdom = false;
|
|
234
|
+
DevConfig.debug.performance = false;
|
|
235
|
+
},
|
|
236
|
+
/**
|
|
237
|
+
* Performance profiling
|
|
238
|
+
* Enables performance timing and queue statistics
|
|
239
|
+
*/
|
|
240
|
+
profilePerformance: () => {
|
|
241
|
+
DevConfig.debug.enabled = true;
|
|
242
|
+
DevConfig.debug.performance = true;
|
|
243
|
+
DevConfig.performance.logQueueStats = true;
|
|
244
|
+
DevConfig.debug.layout = false;
|
|
245
|
+
DevConfig.debug.overflowMask = false;
|
|
246
|
+
DevConfig.debug.positioning = false;
|
|
247
|
+
DevConfig.debug.flex = false;
|
|
248
|
+
DevConfig.debug.vdom = false;
|
|
249
|
+
},
|
|
250
|
+
/**
|
|
251
|
+
* Debug VDOM operations
|
|
252
|
+
* Enables virtual DOM mount/patch/unmount logs
|
|
253
|
+
*/
|
|
254
|
+
debugVDOM: () => {
|
|
255
|
+
DevConfig.debug.enabled = true;
|
|
256
|
+
DevConfig.debug.vdom = true;
|
|
257
|
+
DevConfig.debug.layout = false;
|
|
258
|
+
DevConfig.debug.overflowMask = false;
|
|
259
|
+
DevConfig.debug.positioning = false;
|
|
260
|
+
DevConfig.debug.flex = false;
|
|
261
|
+
DevConfig.debug.performance = false;
|
|
262
|
+
},
|
|
263
|
+
debugTheme: () => {
|
|
264
|
+
DevConfig.debug.enabled = true;
|
|
265
|
+
DevConfig.debug.theme = true;
|
|
266
|
+
DevConfig.debug.layout = false;
|
|
267
|
+
DevConfig.debug.overflowMask = false;
|
|
268
|
+
DevConfig.debug.positioning = false;
|
|
269
|
+
DevConfig.debug.flex = false;
|
|
270
|
+
DevConfig.debug.performance = false;
|
|
271
|
+
DevConfig.debug.vdom = false;
|
|
272
|
+
},
|
|
273
|
+
/**
|
|
274
|
+
* Enable all debug categories (verbose!)
|
|
275
|
+
* Use with caution - produces lots of console output
|
|
276
|
+
*/
|
|
277
|
+
debugAll: () => {
|
|
278
|
+
DevConfig.debug.enabled = true;
|
|
279
|
+
DevConfig.debug.layout = true;
|
|
280
|
+
DevConfig.debug.overflowMask = true;
|
|
281
|
+
DevConfig.debug.flex = true;
|
|
282
|
+
DevConfig.debug.positioning = true;
|
|
283
|
+
DevConfig.debug.vdom = true;
|
|
284
|
+
DevConfig.debug.performance = true;
|
|
285
|
+
DevConfig.visual.showOverflowMasks = true;
|
|
286
|
+
DevConfig.visual.maskFillColor = 16711935;
|
|
287
|
+
DevConfig.visual.maskAlpha = 0.3;
|
|
288
|
+
DevConfig.performance.logQueueStats = true;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
export {
|
|
292
|
+
DebugLogger,
|
|
293
|
+
DevConfig,
|
|
294
|
+
DevPresets
|
|
295
|
+
};
|
|
296
|
+
//# sourceMappingURL=dev-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-config.js","sources":["../src/dev-config.ts"],"sourcesContent":["/**\n * Development and debugging configuration\n * Runtime-configurable settings for debugging and development\n */\n\n/**\n * Simple debounce implementation — avoids pulling in ~1.1 MB of lodash\n * @internal\n */\nfunction debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n delay: number\n): (...args: unknown[]) => void {\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n return (...args: unknown[]) => {\n if (timeoutId !== undefined) clearTimeout(timeoutId)\n timeoutId = setTimeout(() => {\n timeoutId = undefined\n fn(...args)\n }, delay)\n }\n}\n\n/**\n * Development configuration object\n * Can be modified at runtime from user code for debugging\n *\n * @example\n * ```typescript\n * import { DevConfig } from '@number10/phaserjsx'\n *\n * // Enable specific debug categories\n * DevConfig.debug.enabled = true\n * DevConfig.debug.layout = true\n *\n * // Customize visual debugging\n * DevConfig.visual.maskFillColor = 0xff00ff // Pink\n * DevConfig.visual.maskAlpha = 0.3 // Semi-transparent\n * ```\n */\nexport const DevConfig = {\n /**\n * Debug logging configuration\n * Controls console output for different subsystems\n */\n debug: {\n /**\n * Master switch - disables all debug output when false\n * @default false\n */\n enabled: false,\n\n /**\n * Detailed layout calculation logs\n * Shows container sizing, positioning, and flex distribution\n * @default false\n */\n layout: false,\n\n /**\n * Overflow mask positioning logs\n * Shows world coordinate calculations and mask updates\n * @default false\n */\n overflowMask: false,\n\n /**\n * Flex distribution calculations\n * Shows flex space allocation across children\n * @default false\n */\n flex: false,\n\n /**\n * Child sizing and positioning\n * Shows individual child dimension calculations\n * @default false\n */\n positioning: false,\n\n /**\n * VDOM mount/patch/unmount operations\n * Shows virtual DOM updates and reconciliation\n * @default false\n */\n vdom: false,\n\n /**\n * Performance timing measurements\n * Shows execution time for layout operations\n * @default false\n */\n performance: false,\n\n /**\n * Theme system logs\n * Shows theme registry updates and prop merging\n * @default false\n */\n theme: false,\n },\n\n /**\n * VDOM warnings and development checks\n * These help catch common mistakes that lead to performance issues\n */\n warnings: {\n /**\n * Warn when list items (siblings) don't have key props\n * Similar to React's \"Each child in a list should have a unique key prop\" warning\n * @default true (in development)\n */\n missingKeys: false, // temp disable because of detection issues, will re-enable later\n\n /**\n * Warn when props change causes full remount instead of update\n * Detects JSX/callback recreation that prevents VDOM optimization\n * @default true (in development)\n */\n unnecessaryRemounts: false,\n\n /**\n * Warn when VNodes are frozen/sealed and need copying\n * Happens in production builds or with certain bundler optimizations\n * @default false (usually only relevant in production)\n */\n frozenVNodes: false,\n },\n\n /**\n * Visual debugging aids\n * Runtime-configurable visual settings\n */\n visual: {\n /**\n * Show overflow mask areas\n * When true, masks are visible (alpha > 0) for debugging\n * @default false\n */\n showOverflowMasks: false,\n\n /**\n * Mask fill color\n * @default 0xffffff (white, invisible with alpha=0)\n * @example 0xff00ff (pink for debugging)\n */\n maskFillColor: 0xffffff,\n\n /**\n * Mask alpha transparency\n * @default 0.0 (invisible)\n * @example 0.3 (semi-transparent for debugging)\n */\n maskAlpha: 0.0,\n },\n\n /**\n * Performance tuning\n */\n performance: {\n /**\n * Enable deferred layout queue batching\n * When false, deferred updates execute immediately (not batched)\n * @default true\n */\n useDeferredQueue: true,\n\n /**\n * Log deferred queue statistics\n * Shows number of batched callbacks per frame\n * @default false\n */\n logQueueStats: false,\n },\n}\n\n/**\n * Debug logger with category support\n * Only logs when global debug is enabled AND category is enabled\n *\n * @example\n * ```typescript\n * DebugLogger.log('layout', 'Container size:', { width: 100, height: 200 })\n * // Only logs if DevConfig.debug.enabled && DevConfig.debug.layout\n * ```\n */\nexport class DebugLogger {\n /**\n * Debounced console.log instances per category-message combination\n */\n private static debouncedLoggers = new Map<string, (...args: unknown[]) => void>()\n\n /**\n * Log a message with category filtering and debouncing\n * @param category - Debug category to check\n * @param message - Message to log\n * @param args - Additional arguments to log (only first element is used)\n */\n static log(category: keyof typeof DevConfig.debug, message: string, ...args: unknown[]): void {\n if (!DevConfig.debug.enabled) return\n if (category !== 'enabled' && !DevConfig.debug[category]) return\n\n const key = `${String(category)}:${message}`\n let debouncedLog = this.debouncedLoggers.get(key)\n\n // console.log(`[${category}] ${message}`, args[0])\n\n if (!debouncedLog) {\n debouncedLog = debounce(() => {\n console.log(`[${category}] ${message}`, args[0])\n }, 300)\n this.debouncedLoggers.set(key, debouncedLog)\n }\n\n debouncedLog()\n }\n\n /**\n * Log a warning message (always shown, even if debug disabled)\n * @param category - Category for context\n * @param message - Warning message\n * @param args - Additional arguments\n */\n static warn(category: string, message: string, ...args: unknown[]): void {\n console.warn(`[${category}] ${message}`, ...args)\n }\n\n /**\n * Log an error message (always shown, even if debug disabled)\n * @param category - Category for context\n * @param message - Error message\n * @param args - Additional arguments\n */\n static error(category: string, message: string, ...args: unknown[]): void {\n console.error(`[${category}] ${message}`, ...args)\n }\n\n /**\n * Start a performance timer\n * @param category - Debug category to check\n * @param label - Timer label\n */\n static time(category: keyof typeof DevConfig.debug, label: string): void {\n if (!DevConfig.debug.enabled) return\n if (category !== 'enabled' && !DevConfig.debug[category]) return\n\n console.time(`[${category}] ${label}`)\n }\n\n /**\n * End a performance timer\n * @param category - Debug category to check\n * @param label - Timer label\n */\n static timeEnd(category: keyof typeof DevConfig.debug, label: string): void {\n if (!DevConfig.debug.enabled) return\n if (category !== 'enabled' && !DevConfig.debug[category]) return\n\n console.timeEnd(`[${category}] ${label}`)\n }\n}\n\n/**\n * Predefined configuration presets for common debugging scenarios\n *\n * @example\n * ```typescript\n * import { DevPresets } from '@number10/phaserjsx'\n *\n * // Quick activation of overflow debugging\n * DevPresets.debugOverflow()\n *\n * // Revert to production settings\n * DevPresets.production()\n * ```\n */\nexport const DevPresets = {\n /**\n * Production configuration\n * All debugging disabled, optimal performance\n */\n production: (): void => {\n DevConfig.debug.enabled = false\n DevConfig.visual.showOverflowMasks = false\n DevConfig.visual.maskAlpha = 0.0\n DevConfig.visual.maskFillColor = 0xffffff\n DevConfig.performance.logQueueStats = false\n },\n\n /**\n * Debug layout issues\n * Enables layout, positioning, and flex logs\n */\n debugLayout: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.layout = true\n DevConfig.debug.positioning = true\n DevConfig.debug.flex = true\n // Keep other categories off\n DevConfig.debug.overflowMask = false\n DevConfig.debug.vdom = false\n DevConfig.debug.performance = false\n },\n\n /**\n * Debug overflow masking\n * Enables overflow logs and makes masks visible\n */\n debugOverflow: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.overflowMask = true\n DevConfig.visual.showOverflowMasks = true\n DevConfig.visual.maskFillColor = 0xff00ff // Pink\n DevConfig.visual.maskAlpha = 0.3 // Semi-transparent\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.vdom = false\n DevConfig.debug.performance = false\n },\n\n /**\n * Performance profiling\n * Enables performance timing and queue statistics\n */\n profilePerformance: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.performance = true\n DevConfig.performance.logQueueStats = true\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.overflowMask = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.vdom = false\n },\n\n /**\n * Debug VDOM operations\n * Enables virtual DOM mount/patch/unmount logs\n */\n debugVDOM: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.vdom = true\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.overflowMask = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.performance = false\n },\n\n debugTheme: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.theme = true\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.overflowMask = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.performance = false\n DevConfig.debug.vdom = false\n },\n\n /**\n * Enable all debug categories (verbose!)\n * Use with caution - produces lots of console output\n */\n debugAll: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.layout = true\n DevConfig.debug.overflowMask = true\n DevConfig.debug.flex = true\n DevConfig.debug.positioning = true\n DevConfig.debug.vdom = true\n DevConfig.debug.performance = true\n DevConfig.visual.showOverflowMasks = true\n DevConfig.visual.maskFillColor = 0xff00ff\n DevConfig.visual.maskAlpha = 0.3\n DevConfig.performance.logQueueStats = true\n },\n}\n"],"names":[],"mappings":"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"}
|
package/dist/effects.cjs
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const effectDefinitions = require("./animation/effect-definitions.cjs");
|
|
4
|
+
const effectEngine = require("./animation/effect-engine.cjs");
|
|
5
|
+
function resolveEffect(props, theme) {
|
|
6
|
+
return {
|
|
7
|
+
effect: props.effect ?? theme.effect,
|
|
8
|
+
effectConfig: props.effectConfig ?? theme.effectConfig
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const DEFAULT_EFFECT = {
|
|
12
|
+
effect: "pulse",
|
|
13
|
+
effectConfig: { intensity: 1.1, time: 100 }
|
|
14
|
+
};
|
|
15
|
+
function applyEffectByName(applyFn, effectName, effectConfig) {
|
|
16
|
+
const name = effectName ?? DEFAULT_EFFECT.effect;
|
|
17
|
+
const config = effectConfig ?? DEFAULT_EFFECT.effectConfig;
|
|
18
|
+
applyFn(name, config);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
function resolveEffectTransformOrigin(effect) {
|
|
22
|
+
return effectDefinitions.resolveEffectTransformOrigin(effect);
|
|
23
|
+
}
|
|
24
|
+
function registerEffect(name, definition) {
|
|
25
|
+
effectDefinitions.EFFECT_DEFINITIONS[name] = definition;
|
|
26
|
+
}
|
|
27
|
+
const _effectRunners = [];
|
|
28
|
+
const _effectStopRunners = [];
|
|
29
|
+
function registerEffectRunner(runner) {
|
|
30
|
+
_effectRunners.push(runner);
|
|
31
|
+
}
|
|
32
|
+
function registerEffectStopRunner(runner) {
|
|
33
|
+
_effectStopRunners.push(runner);
|
|
34
|
+
}
|
|
35
|
+
function applyEffect(a, b, c, d) {
|
|
36
|
+
if (arguments.length === 4 && b && typeof b === "object" && "onUpdate" in b) {
|
|
37
|
+
const targetKey = a;
|
|
38
|
+
const target = b;
|
|
39
|
+
const effect2 = c;
|
|
40
|
+
const config2 = d ?? {};
|
|
41
|
+
if (!effect2 || effect2 === "none") return null;
|
|
42
|
+
const def = effectDefinitions.EFFECT_DEFINITIONS[effect2];
|
|
43
|
+
if (!def) return null;
|
|
44
|
+
return effectEngine.runEffect(targetKey, target, def, config2);
|
|
45
|
+
}
|
|
46
|
+
const node = a;
|
|
47
|
+
const effect = b;
|
|
48
|
+
const config = c ?? {};
|
|
49
|
+
if (!effect || effect === "none") return;
|
|
50
|
+
for (const runner of _effectRunners) {
|
|
51
|
+
runner(node, effect, config);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function stopEffect(key) {
|
|
55
|
+
effectEngine.stopEffect(key);
|
|
56
|
+
for (const runner of _effectStopRunners) {
|
|
57
|
+
runner(key);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.DEFAULT_EFFECT = DEFAULT_EFFECT;
|
|
61
|
+
exports.applyEffect = applyEffect;
|
|
62
|
+
exports.applyEffectByName = applyEffectByName;
|
|
63
|
+
exports.registerEffect = registerEffect;
|
|
64
|
+
exports.registerEffectRunner = registerEffectRunner;
|
|
65
|
+
exports.registerEffectStopRunner = registerEffectStopRunner;
|
|
66
|
+
exports.resolveEffect = resolveEffect;
|
|
67
|
+
exports.resolveEffectTransformOrigin = resolveEffectTransformOrigin;
|
|
68
|
+
exports.stopEffect = stopEffect;
|
|
69
|
+
//# sourceMappingURL=effects.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.cjs","sources":["../src/effects.ts"],"sourcesContent":["/**\n * Portable effect system — renderer-agnostic effect contracts.\n *\n * Components declare their effect intent via props/theme. The central\n * effect engine (animation/effect-engine.ts) handles all effect execution.\n *\n * ## Portable usage (recommended for new components)\n *\n * Portable components implement `EffectTarget` to connect their node to\n * the central engine. Use the 4-arg `applyEffect()` overload directly:\n *\n * ```typescript\n * import { applyEffect, type EffectTarget } from '@number10/jsx-core'\n *\n * // Inside a portable component:\n * const target: EffectTarget = {\n * onUpdate: (values) => {\n * // Apply animated values to the renderer node\n * node.setPosition(values.x ?? node.x, values.y ?? node.y)\n * node.alpha = values.alpha ?? node.alpha\n * },\n * getSnapshot: () => ({\n * x: node.x, y: node.y, alpha: node.alpha,\n * scaleX: node.scaleX, scaleY: node.scaleY,\n * rotation: node.rotation,\n * }),\n * getScheduler: () => surface.scheduler,\n * getSize: () => ({ width: node.width, height: node.height }),\n * }\n *\n * applyEffect(node, target, 'pulse', { duration: 300 })\n * ```\n *\n * ## Legacy API (transitional)\n *\n * Renderer bridges (Pixi/Phaser) use the 3-arg `applyEffect(node, effect, config)`\n * which dispatches via a runner registry. New components should prefer the\n * direct 4-arg overload above.\n *\n * @migration Transitional architecture — two paths coexist:\n * 1. Legacy: `applyEffect(node, effect, config)` — dispatches via runner registry\n * (Pixi/Phaser bridges register runners that internally create EffectTargets)\n * 2. Direct: `applyEffect(targetKey, target, effect, config)` — skips runners,\n * calls the engine directly. Used by portable components that have an EffectTarget.\n */\n\nimport {\n EFFECT_DEFINITIONS,\n resolveEffectTransformOrigin as resolveOrigin,\n type EffectDefinition as EngineEffectDefinition,\n} from './animation/effect-definitions'\nimport {\n runEffect,\n stopEffect as stopEngineEffect,\n type EffectHandle,\n type EffectTarget,\n} from './animation/effect-engine'\nimport type { EffectConfig as EngineEffectConfig } from './animation/types'\n\n// ---------------------------------------------------------------------------\n// Effect name types — extensible via declaration merging\n// ---------------------------------------------------------------------------\n\n/**\n * Built-in effect names available in all renderers.\n */\nexport type BuiltInEffectName =\n | 'none'\n | 'pulse'\n | 'shake'\n | 'bounce'\n | 'press'\n | 'flash'\n | 'jello'\n | 'fade'\n | 'fadeIn'\n | 'fadeOut'\n | 'wobble'\n | 'tada'\n | 'swing'\n | 'wiggle'\n | 'slideIn'\n | 'slideOut'\n | 'zoomIn'\n | 'zoomOut'\n | 'flipIn'\n | 'flipOut'\n | 'float'\n | 'breathe'\n | 'spin'\n\n/**\n * Extension point for custom effect names.\n * Use declaration merging to add custom effects:\n *\n * @example\n * ```typescript\n * declare module '@number10/jsx-core' {\n * interface EffectNameExtensions {\n * squash: 'squash'\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface EffectNameExtensions {}\n\n/**\n * Known effect names (built-in + custom extensions).\n */\nexport type EffectName =\n | BuiltInEffectName\n | (keyof EffectNameExtensions extends never ? never : keyof EffectNameExtensions)\n\n/** Configuration for an effect (duration, intensity, direction, etc.). */\nexport type EffectConfig = EngineEffectConfig\n\n/** Canonical transform origin used by built-in effects across renderers. */\nexport type EffectTransformOrigin = import('./animation/effect-definitions').EffectTransformOrigin\n\n/**\n * Props that any component can extend to declare effects.\n */\nexport interface EffectDefinition {\n /** Effect to apply on interaction (e.g., 'press', 'pulse') */\n effect?: EffectName | undefined\n /** Configuration for the effect */\n effectConfig?: EffectConfig | undefined\n}\n\n/**\n * Resolve which effect to use from props vs theme.\n * @param props - Explicit component props\n * @param theme - Resolved theme (with effect/effectConfig)\n * @returns The resolved effect name and config\n */\nexport function resolveEffect(\n props: EffectDefinition,\n theme: Record<string, unknown>\n): { effect?: EffectName | undefined; effectConfig?: EffectConfig | undefined } {\n return {\n effect: props.effect ?? (theme.effect as EffectName | undefined),\n effectConfig: props.effectConfig ?? (theme.effectConfig as EffectConfig | undefined),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Default effect + convenience helper\n// ---------------------------------------------------------------------------\n\n/**\n * Default effect configuration used as fallback when no effect is specified.\n */\nexport const DEFAULT_EFFECT = {\n effect: 'pulse' as EffectName,\n effectConfig: { intensity: 1.1, time: 100 } as EffectConfig,\n}\n\n/**\n * Apply an effect by name with automatic DEFAULT_EFFECT fallback.\n *\n * Convenience wrapper around a renderer's applyEffect function that fills in\n * defaults when effect name or config are omitted.\n *\n * @param applyFn - Renderer-specific applyEffect function\n * @param effectName - Name of the effect to apply (defaults to 'pulse')\n * @param effectConfig - Optional configuration for the effect\n * @returns true if effect was applied, false otherwise\n */\nexport function applyEffectByName(\n applyFn: (name: EffectName, config?: EffectConfig) => void,\n effectName?: EffectName,\n effectConfig?: EffectConfig\n): boolean {\n const name = effectName ?? DEFAULT_EFFECT.effect\n const config = effectConfig ?? DEFAULT_EFFECT.effectConfig\n\n applyFn(name, config)\n return true\n}\n\n/**\n * Resolve the canonical transform origin for a built-in effect.\n * Delegates to the central effect-definitions registry.\n */\nexport function resolveEffectTransformOrigin(\n effect: EffectName | undefined\n): EffectTransformOrigin {\n return resolveOrigin(effect)\n}\n\n// ---------------------------------------------------------------------------\n// Custom effect registration\n// ---------------------------------------------------------------------------\n\n/**\n * Register a custom effect definition so it becomes available via\n * `applyEffect()` and `effect=\"customName\"` in components.\n *\n * Combine with declaration merging on `EffectNameExtensions` to maintain\n * type safety:\n *\n * @example\n * ```typescript\n * declare module '@number10/jsx-core' {\n * interface EffectNameExtensions { squash: 'squash' }\n * }\n * registerEffect('squash', {\n * name: 'squash',\n * steps: (base, config) => [\n * { type: 'tween', to: { scaleX: base.scaleX * 1.5, scaleY: base.scaleY / 1.5 },\n * duration: config.time ?? 200, ease: 'Sine.easeInOut' },\n * { type: 'tween', to: { scaleX: base.scaleX, scaleY: base.scaleY },\n * duration: config.time ?? 200 },\n * ],\n * loop: false,\n * origin: 'center',\n * })\n * ```\n *\n * @param name - Unique effect name\n * @param definition - Effect definition (steps, loop, origin)\n */\nexport function registerEffect(name: string, definition: EngineEffectDefinition): void {\n EFFECT_DEFINITIONS[name] = definition\n}\n\n// ---------------------------------------------------------------------------\n// Transitional: Runner registry (used by Pixi/Phaser bridges)\n// ---------------------------------------------------------------------------\n\n/** Legacy runner signature — receives a renderer node, effect name, and config */\nexport type EffectRunner = (node: unknown, effect: EffectName, config?: EffectConfig) => void\nexport type EffectStopRunner = (node: unknown) => void\n\nconst _effectRunners: EffectRunner[] = []\nconst _effectStopRunners: EffectStopRunner[] = []\n\n/**\n * Register a renderer-specific effect runner (transitional).\n *\n * During migration, Pixi/Phaser bridges register runners that create\n * an EffectTarget internally and delegate to the central engine.\n * After full migration, this pattern is replaced by direct EffectTarget usage.\n */\nexport function registerEffectRunner(runner: EffectRunner): void {\n _effectRunners.push(runner)\n}\n\n/**\n * Register a renderer-specific effect stop runner (transitional).\n */\nexport function registerEffectStopRunner(runner: EffectStopRunner): void {\n _effectStopRunners.push(runner)\n}\n\n// ---------------------------------------------------------------------------\n// Legacy API: applyEffect(node, effect, config) — dispatches via runners\n// ---------------------------------------------------------------------------\n\n/**\n * Apply an effect using the legacy runner-registry dispatch.\n *\n * Renderer bridges (Pixi, Phaser) register runners that create an EffectTarget\n * and delegate to the central engine internally.\n *\n * @param node - Renderer-native node (PIXI.Container, Phaser.GameObjects.Container, ...)\n * @param effect - Effect name to apply\n * @param config - Effect configuration\n */\nexport function applyEffect(\n node: unknown,\n effect: EffectName | undefined,\n config?: EffectConfig\n): void\n\n/**\n * Apply an effect directly using the central engine.\n *\n * Portable components that have an EffectTarget can use this overload\n * to skip the runner-registry dispatch.\n *\n * @param targetKey - Object used as animation state key (typically the renderer node)\n * @param target - EffectTarget implementation for this renderer\n * @param effect - Effect name to apply\n * @param config - Effect configuration\n * @returns EffectHandle or null if effect is unknown\n */\nexport function applyEffect(\n targetKey: object,\n target: EffectTarget,\n effect: EffectName | undefined,\n config?: EffectConfig\n): EffectHandle | null\n\n/** Implementation — supports both 3-arg (legacy) and 4-arg (direct) signatures */\nexport function applyEffect(\n a: unknown | object,\n b: EffectTarget | EffectName | undefined,\n c?: EffectName | EffectConfig | undefined,\n d?: EffectConfig\n): void | EffectHandle | null {\n // 4-arg overload: applyEffect(targetKey, target, effect, config)\n if (arguments.length === 4 && b && typeof b === 'object' && 'onUpdate' in b) {\n const targetKey = a as object\n const target = b as EffectTarget\n const effect = c as EffectName | undefined\n const config = (d ?? {}) as EffectConfig\n if (!effect || effect === 'none') return null\n const def = EFFECT_DEFINITIONS[effect]\n if (!def) return null\n return runEffect(targetKey, target, def, config)\n }\n\n // 3-arg overload: applyEffect(node, effect, config) — dispatches via runners\n const node = a\n const effect = b as EffectName | undefined\n const config = (c ?? {}) as EffectConfig\n if (!effect || effect === 'none') return\n for (const runner of _effectRunners) {\n runner(node, effect, config)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Legacy API: stopEffect(node) — dispatches via runners\n// ---------------------------------------------------------------------------\n\n/**\n * Stop effects using the legacy runner-registry dispatch.\n * @param node - Renderer-native node\n */\nexport function stopEffect(node: unknown): void\n\n/**\n * Stop effects directly via the central engine.\n * @param targetKey - Object used as animation state key\n */\nexport function stopEffect(targetKey: object): void\n\n/** Implementation */\nexport function stopEffect(key: unknown | object): void {\n // Check if we should use the engine directly (only if it's likely an engine-tracked key)\n // The engine tracks via WeakMap, so calling with any object is safe\n stopEngineEffect(key as object)\n\n // Also dispatch via legacy stop runners for backward compatibility\n for (const runner of _effectStopRunners) {\n runner(key)\n }\n}\n"],"names":["resolveOrigin","EFFECT_DEFINITIONS","effect","config","runEffect","stopEngineEffect"],"mappings":";;;;AAwIO,SAAS,cACd,OACA,OAC8E;AAC9E,SAAO;AAAA,IACL,QAAQ,MAAM,UAAW,MAAM;AAAA,IAC/B,cAAc,MAAM,gBAAiB,MAAM;AAAA,EAAA;AAE/C;AASO,MAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,cAAc,EAAE,WAAW,KAAK,MAAM,IAAA;AACxC;AAaO,SAAS,kBACd,SACA,YACA,cACS;AACT,QAAM,OAAO,cAAc,eAAe;AAC1C,QAAM,SAAS,gBAAgB,eAAe;AAE9C,UAAQ,MAAM,MAAM;AACpB,SAAO;AACT;AAMO,SAAS,6BACd,QACuB;AACvB,SAAOA,kBAAAA,6BAAc,MAAM;AAC7B;AAkCO,SAAS,eAAe,MAAc,YAA0C;AACrFC,oBAAAA,mBAAmB,IAAI,IAAI;AAC7B;AAUA,MAAM,iBAAiC,CAAA;AACvC,MAAM,qBAAyC,CAAA;AASxC,SAAS,qBAAqB,QAA4B;AAC/D,iBAAe,KAAK,MAAM;AAC5B;AAKO,SAAS,yBAAyB,QAAgC;AACvE,qBAAmB,KAAK,MAAM;AAChC;AA0CO,SAAS,YACd,GACA,GACA,GACA,GAC4B;AAE5B,MAAI,UAAU,WAAW,KAAK,KAAK,OAAO,MAAM,YAAY,cAAc,GAAG;AAC3E,UAAM,YAAY;AAClB,UAAM,SAAS;AACf,UAAMC,UAAS;AACf,UAAMC,UAAU,KAAK,CAAA;AACrB,QAAI,CAACD,WAAUA,YAAW,OAAQ,QAAO;AACzC,UAAM,MAAMD,kBAAAA,mBAAmBC,OAAM;AACrC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAOE,aAAAA,UAAU,WAAW,QAAQ,KAAKD,OAAM;AAAA,EACjD;AAGA,QAAM,OAAO;AACb,QAAM,SAAS;AACf,QAAM,SAAU,KAAK,CAAA;AACrB,MAAI,CAAC,UAAU,WAAW,OAAQ;AAClC,aAAW,UAAU,gBAAgB;AACnC,WAAO,MAAM,QAAQ,MAAM;AAAA,EAC7B;AACF;AAmBO,SAAS,WAAW,KAA6B;AAGtDE,eAAAA,WAAiB,GAAa;AAG9B,aAAW,UAAU,oBAAoB;AACvC,WAAO,GAAG;AAAA,EACZ;AACF;;;;;;;;;;"}
|