zimporter-phaser 1.0.40

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.
Files changed (86) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +255 -0
  3. package/dist/SceneData.d.ts +218 -0
  4. package/dist/SceneData.d.ts.map +1 -0
  5. package/dist/SceneData.js +21 -0
  6. package/dist/SceneData.js.map +1 -0
  7. package/dist/ZBitmapTextField.d.ts +7 -0
  8. package/dist/ZBitmapTextField.d.ts.map +1 -0
  9. package/dist/ZBitmapTextField.js +18 -0
  10. package/dist/ZBitmapTextField.js.map +1 -0
  11. package/dist/ZButton.d.ts +45 -0
  12. package/dist/ZButton.d.ts.map +1 -0
  13. package/dist/ZButton.js +338 -0
  14. package/dist/ZButton.js.map +1 -0
  15. package/dist/ZContainer.d.ts +59 -0
  16. package/dist/ZContainer.d.ts.map +1 -0
  17. package/dist/ZContainer.js +404 -0
  18. package/dist/ZContainer.js.map +1 -0
  19. package/dist/ZCuePointsManager.d.ts +7 -0
  20. package/dist/ZCuePointsManager.d.ts.map +1 -0
  21. package/dist/ZCuePointsManager.js +32 -0
  22. package/dist/ZCuePointsManager.js.map +1 -0
  23. package/dist/ZNineSlice.d.ts +12 -0
  24. package/dist/ZNineSlice.d.ts.map +1 -0
  25. package/dist/ZNineSlice.js +26 -0
  26. package/dist/ZNineSlice.js.map +1 -0
  27. package/dist/ZPool.d.ts +11 -0
  28. package/dist/ZPool.d.ts.map +1 -0
  29. package/dist/ZPool.js +64 -0
  30. package/dist/ZPool.js.map +1 -0
  31. package/dist/ZResizeables.d.ts +7 -0
  32. package/dist/ZResizeables.d.ts.map +1 -0
  33. package/dist/ZResizeables.js +15 -0
  34. package/dist/ZResizeables.js.map +1 -0
  35. package/dist/ZScene.d.ts +82 -0
  36. package/dist/ZScene.d.ts.map +1 -0
  37. package/dist/ZScene.js +653 -0
  38. package/dist/ZScene.js.map +1 -0
  39. package/dist/ZSceneStack.d.ts +27 -0
  40. package/dist/ZSceneStack.d.ts.map +1 -0
  41. package/dist/ZSceneStack.js +62 -0
  42. package/dist/ZSceneStack.js.map +1 -0
  43. package/dist/ZScroll.d.ts +34 -0
  44. package/dist/ZScroll.d.ts.map +1 -0
  45. package/dist/ZScroll.js +176 -0
  46. package/dist/ZScroll.js.map +1 -0
  47. package/dist/ZSlider.d.ts +20 -0
  48. package/dist/ZSlider.d.ts.map +1 -0
  49. package/dist/ZSlider.js +88 -0
  50. package/dist/ZSlider.js.map +1 -0
  51. package/dist/ZSpine.d.ts +42 -0
  52. package/dist/ZSpine.d.ts.map +1 -0
  53. package/dist/ZSpine.js +221 -0
  54. package/dist/ZSpine.js.map +1 -0
  55. package/dist/ZState.d.ts +18 -0
  56. package/dist/ZState.d.ts.map +1 -0
  57. package/dist/ZState.js +64 -0
  58. package/dist/ZState.js.map +1 -0
  59. package/dist/ZTextInput.d.ts +33 -0
  60. package/dist/ZTextInput.d.ts.map +1 -0
  61. package/dist/ZTextInput.js +124 -0
  62. package/dist/ZTextInput.js.map +1 -0
  63. package/dist/ZTimeline.d.ts +42 -0
  64. package/dist/ZTimeline.d.ts.map +1 -0
  65. package/dist/ZTimeline.js +164 -0
  66. package/dist/ZTimeline.js.map +1 -0
  67. package/dist/ZToggle.d.ts +17 -0
  68. package/dist/ZToggle.d.ts.map +1 -0
  69. package/dist/ZToggle.js +68 -0
  70. package/dist/ZToggle.js.map +1 -0
  71. package/dist/ZUpdatables.d.ts +13 -0
  72. package/dist/ZUpdatables.d.ts.map +1 -0
  73. package/dist/ZUpdatables.js +30 -0
  74. package/dist/ZUpdatables.js.map +1 -0
  75. package/dist/index.d.ts +17 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +17 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/text-input.d.ts +98 -0
  80. package/dist/text-input.d.ts.map +1 -0
  81. package/dist/text-input.js +622 -0
  82. package/dist/text-input.js.map +1 -0
  83. package/dist/zimporter-phaser.min.js +3 -0
  84. package/dist/zimporter-phaser.min.js.LICENSE.txt +168 -0
  85. package/dist/zimporter-phaser.min.js.map +1 -0
  86. package/package.json +42 -0
package/dist/ZSpine.js ADDED
@@ -0,0 +1,221 @@
1
+ import { TextureAtlas, TextureAtlasPage, TextureAtlasRegion, TextureFilter, TextureWrap, } from "@esotericsoftware/spine-core";
2
+ /**
3
+ * ZSpine — loads a Spine 4.x skeleton using the @esotericsoftware/spine-phaser plugin.
4
+ *
5
+ * Supports both:
6
+ * - Standard path: spineJson + spineAtlas file via plugin loader
7
+ * - No-atlas path: spineJson + individual pngFiles
8
+ * PNGs are loaded as Phaser textures, then a TextureAtlas is built manually
9
+ * (mirroring the PIXI version) and injected into the plugin's atlasCache.
10
+ *
11
+ * Register SpinePlugin in your Phaser game config:
12
+ * plugins: { scene: [{ key: "SpinePlugin", plugin: SpinePlugin, mapping: "spine" }] }
13
+ */
14
+ export class ZSpine {
15
+ phaserScene;
16
+ spineData;
17
+ assetBasePath;
18
+ constructor(scene, spineData, assetBasePath) {
19
+ this.phaserScene = scene;
20
+ this.spineData = spineData;
21
+ this.assetBasePath = assetBasePath.endsWith("/") ? assetBasePath : assetBasePath + "/";
22
+ }
23
+ async load(callback) {
24
+ const scene = this.phaserScene;
25
+ const data = this.spineData;
26
+ const base = this.assetBasePath;
27
+ const spinePlugin = scene.spine;
28
+ if (!spinePlugin) {
29
+ console.warn(`ZSpine: SpinePlugin not registered on scene.\n` +
30
+ `Add to Phaser config: plugins: { scene: [{ key:"SpinePlugin", plugin: SpinePlugin, mapping:"spine" }] }\n` +
31
+ `Spine asset "${data.name}" will not be displayed.`);
32
+ callback(undefined);
33
+ return;
34
+ }
35
+ const uid = Math.random().toString(36).slice(2);
36
+ const jsonKey = `${data.name}_json_${uid}`;
37
+ const atlasKey = `${data.name}_atlas_${uid}`;
38
+ try {
39
+ if (data.spineAtlas && data.spineAtlas !== "") {
40
+ // Standard path: queue both files then wait for the loader to complete
41
+ scene.load.spineJson(jsonKey, base + data.spineJson);
42
+ scene.load.spineAtlas(atlasKey, base + data.spineAtlas);
43
+ await this.waitForLoader();
44
+ }
45
+ else if (data.pngFiles && data.pngFiles.length > 0) {
46
+ // No-atlas path: load PNGs + JSON, build atlas manually, inject into plugin cache
47
+ await this.loadImages(data.pngFiles, base);
48
+ await this.loadJsonFile(jsonKey, base + data.spineJson);
49
+ this.buildAndInjectAtlas(atlasKey, data.pngFiles, spinePlugin);
50
+ }
51
+ else {
52
+ console.warn(`ZSpine: No atlas or pngFiles for "${data.name}"`);
53
+ callback(undefined);
54
+ return;
55
+ }
56
+ const spineObj = scene.add.spine(0, 0, jsonKey, atlasKey);
57
+ if (!spineObj) {
58
+ console.error(`ZSpine: scene.add.spine returned null for "${data.name}"`);
59
+ callback(undefined);
60
+ return;
61
+ }
62
+ if (data.skin) {
63
+ try {
64
+ spineObj.skeleton.setSkinByName(data.skin);
65
+ spineObj.skeleton.setToSetupPose();
66
+ }
67
+ catch (_) { /* skin may not exist */ }
68
+ }
69
+ if (data.playOnStart?.value && data.playOnStart?.animation) {
70
+ try {
71
+ spineObj.animationState.setAnimation(0, data.playOnStart.animation, true);
72
+ }
73
+ catch (_) { /* animation may not exist */ }
74
+ }
75
+ callback(spineObj);
76
+ }
77
+ catch (err) {
78
+ console.error(`ZSpine: Error loading "${data.name}":`, err);
79
+ callback(undefined);
80
+ }
81
+ }
82
+ /**
83
+ * Builds a TextureAtlas directly from already-loaded Phaser textures,
84
+ * wires GLTexture (WebGL) or CanvasTexture wrappers, and injects into
85
+ * the SpinePlugin's atlasCache. getAtlas() checks atlasCache first —
86
+ * it returns the pre-built atlas directly without parsing any text file.
87
+ */
88
+ buildAndInjectAtlas(atlasKey, pngFiles, spinePlugin) {
89
+ const isWebGL = spinePlugin.isWebGL;
90
+ const gl = spinePlugin.gl;
91
+ // Pass empty string — we override pages/regions immediately after
92
+ const atlas = new TextureAtlas("");
93
+ atlas.pages = [];
94
+ atlas.regions = [];
95
+ for (const png of pngFiles) {
96
+ const texKey = this.texKey(png);
97
+ const phaserTex = this.phaserScene.textures.get(texKey);
98
+ const srcImage = phaserTex?.getSourceImage?.();
99
+ if (!srcImage) {
100
+ console.warn(`ZSpine: No loaded image for "${png}" (key: ${texKey})`);
101
+ continue;
102
+ }
103
+ const w = srcImage.naturalWidth || srcImage.width || 1;
104
+ const h = srcImage.naturalHeight || srcImage.height || 1;
105
+ const fileName = this.fileName(png); // "Spark.png"
106
+ const regionName = this.baseName(png); // "Spark"
107
+ // One page per PNG
108
+ const page = new TextureAtlasPage(fileName);
109
+ page.width = w;
110
+ page.height = h;
111
+ page.minFilter = TextureFilter.Linear;
112
+ page.magFilter = TextureFilter.Linear;
113
+ page.uWrap = TextureWrap.ClampToEdge;
114
+ page.vWrap = TextureWrap.ClampToEdge;
115
+ // Region: one per page, full image (constructor auto-pushes to page.regions)
116
+ const region = new TextureAtlasRegion(page, regionName);
117
+ region.x = 0;
118
+ region.y = 0;
119
+ region.width = w;
120
+ region.height = h;
121
+ region.originalWidth = w;
122
+ region.originalHeight = h;
123
+ region.offsetX = 0;
124
+ region.offsetY = 0;
125
+ region.degrees = 0;
126
+ region.index = -1;
127
+ region.u = 0;
128
+ region.v = 0;
129
+ region.u2 = 1;
130
+ region.v2 = 1;
131
+ // Wire the texture — page.setTexture() sets filters/wraps and assigns
132
+ // texture to every region in page.regions (region.texture is what the renderer uses)
133
+ if (isWebGL && gl) {
134
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
135
+ const { GLTexture } = require("@esotericsoftware/spine-webgl");
136
+ page.setTexture(new GLTexture(gl, srcImage, false));
137
+ }
138
+ else {
139
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
140
+ const { CanvasTexture } = require("@esotericsoftware/spine-canvas");
141
+ page.setTexture(new CanvasTexture(srcImage));
142
+ }
143
+ atlas.pages.push(page);
144
+ atlas.regions.push(region);
145
+ // Alias "Frame0" → "Frame" so attachments referencing the base name resolve
146
+ const seqMatch = regionName.match(/^(.*?)(\d+)$/);
147
+ if (seqMatch && parseInt(seqMatch[2], 10) === 0) {
148
+ const baseName = seqMatch[1];
149
+ if (!atlas.regions.find((r) => r.name === baseName)) {
150
+ const alias = new TextureAtlasRegion(page, baseName);
151
+ alias.x = region.x;
152
+ alias.y = region.y;
153
+ alias.width = region.width;
154
+ alias.height = region.height;
155
+ alias.originalWidth = region.originalWidth;
156
+ alias.originalHeight = region.originalHeight;
157
+ alias.offsetX = region.offsetX;
158
+ alias.offsetY = region.offsetY;
159
+ alias.degrees = region.degrees;
160
+ alias.index = region.index;
161
+ alias.u = region.u;
162
+ alias.v = region.v;
163
+ alias.u2 = region.u2;
164
+ alias.v2 = region.v2;
165
+ atlas.regions.push(alias);
166
+ }
167
+ }
168
+ }
169
+ const atlasCache = spinePlugin.atlasCache;
170
+ if (atlasCache) {
171
+ atlasCache.add(atlasKey, atlas);
172
+ }
173
+ else {
174
+ console.error("ZSpine: SpinePlugin.atlasCache not accessible");
175
+ }
176
+ }
177
+ /** Load all PNG files into Phaser's texture cache. */
178
+ loadImages(pngFiles, base) {
179
+ let queued = 0;
180
+ for (const png of pngFiles) {
181
+ const key = this.texKey(png);
182
+ if (!this.phaserScene.textures.exists(key)) {
183
+ this.phaserScene.load.image(key, base + png);
184
+ queued++;
185
+ }
186
+ }
187
+ if (queued === 0)
188
+ return Promise.resolve();
189
+ return this.waitForLoader();
190
+ }
191
+ /** Load a JSON file into Phaser's json cache. */
192
+ loadJsonFile(key, url) {
193
+ this.phaserScene.load.json(key, url);
194
+ return this.waitForLoader();
195
+ }
196
+ /** Wait for all currently queued loader files to finish. */
197
+ waitForLoader() {
198
+ return new Promise((resolve, reject) => {
199
+ if (!this.phaserScene.load.isLoading()) {
200
+ this.phaserScene.load.once("complete", () => resolve());
201
+ this.phaserScene.load.once("loaderror", (file) => reject(new Error(`ZSpine: Load error for ${file?.key}`)));
202
+ this.phaserScene.load.start();
203
+ }
204
+ else {
205
+ this.phaserScene.load.once("complete", () => resolve());
206
+ this.phaserScene.load.once("loaderror", (file) => reject(new Error(`ZSpine: Load error for ${file?.key}`)));
207
+ }
208
+ });
209
+ }
210
+ texKey(png) {
211
+ return `${this.spineData.name}_tex_${png.replace(/[^a-zA-Z0-9]/g, "_")}`;
212
+ }
213
+ fileName(png) {
214
+ return png.includes("/") ? png.substring(png.lastIndexOf("/") + 1) : png;
215
+ }
216
+ baseName(png) {
217
+ const file = this.fileName(png);
218
+ return file.includes(".") ? file.substring(0, file.lastIndexOf(".")) : file;
219
+ }
220
+ }
221
+ //# sourceMappingURL=ZSpine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZSpine.js","sourceRoot":"","sources":["../src/ZSpine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ZContainer } from "./ZContainer";
2
+ /**
3
+ * Stateful container for Phaser.
4
+ * Only one child is visible at a time; all others are hidden.
5
+ * Supports ZTimeline children (play/stop automatically on state switch).
6
+ */
7
+ export declare class ZState extends ZContainer {
8
+ currentState: ZContainer | null;
9
+ init(): void;
10
+ getCurrentState(): ZContainer | null;
11
+ hasState(str: string): boolean;
12
+ /** Alias for setViewState — matches PIXI ZState API */
13
+ setState(str: string | number): this;
14
+ setViewState(str: string): ZContainer | null;
15
+ getAllStateNames(): (string | null)[];
16
+ getType(): string;
17
+ }
18
+ //# sourceMappingURL=ZState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZState.d.ts","sourceRoot":"","sources":["../src/ZState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;;GAIG;AAEH,qBAAa,MAAO,SAAQ,UAAU;IAC3B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAQ;IAGvC,IAAI,IAAI,IAAI;IAIZ,eAAe,IAAI,UAAU,GAAG,IAAI;IAIpC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIrC,uDAAuD;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IA+B5C,gBAAgB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAIrC,OAAO,IAAI,MAAM;CAG3B"}
package/dist/ZState.js ADDED
@@ -0,0 +1,64 @@
1
+ import { ZContainer } from "./ZContainer";
2
+ import { ZTimeline } from "./ZTimeline";
3
+ /**
4
+ * Stateful container for Phaser.
5
+ * Only one child is visible at a time; all others are hidden.
6
+ * Supports ZTimeline children (play/stop automatically on state switch).
7
+ */
8
+ export class ZState extends ZContainer {
9
+ currentState = null;
10
+ // Called once all children are added to the container
11
+ init() {
12
+ this.setViewState("idle");
13
+ }
14
+ getCurrentState() {
15
+ return this.currentState;
16
+ }
17
+ hasState(str) {
18
+ return this.getChildByName(str) !== null;
19
+ }
20
+ /** Alias for setViewState — matches PIXI ZState API */
21
+ setState(str) {
22
+ if (typeof str === 'string') {
23
+ this.setViewState(str);
24
+ }
25
+ return this;
26
+ }
27
+ setViewState(str) {
28
+ let chosenChild = this.get(str);
29
+ if (!chosenChild) {
30
+ chosenChild = this.get("idle");
31
+ if (!chosenChild && this.list.length > 0) {
32
+ chosenChild = this.list[0];
33
+ }
34
+ }
35
+ if (this.list) {
36
+ for (let i = 0; i < this.list.length; i++) {
37
+ let child = this.list[i];
38
+ child.visible = false;
39
+ if (child instanceof ZTimeline) {
40
+ child.stop();
41
+ }
42
+ }
43
+ }
44
+ if (chosenChild) {
45
+ chosenChild.visible = true;
46
+ this.currentState = chosenChild;
47
+ if (chosenChild.parentContainer) {
48
+ chosenChild.parentContainer.bringToTop(chosenChild);
49
+ }
50
+ if (chosenChild instanceof ZTimeline) {
51
+ chosenChild.play();
52
+ }
53
+ return chosenChild;
54
+ }
55
+ return null;
56
+ }
57
+ getAllStateNames() {
58
+ return this.list.map((child) => child.name);
59
+ }
60
+ getType() {
61
+ return "ZState";
62
+ }
63
+ }
64
+ //# sourceMappingURL=ZState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZState.js","sourceRoot":"","sources":["../src/ZState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AAEH,MAAM,OAAO,MAAO,SAAQ,UAAU;IAC3B,YAAY,GAAsB,IAAI,CAAC;IAE9C,sDAAsD;IAC/C,IAAI;QACP,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEM,eAAe;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAEM,QAAQ,CAAC,GAAW;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,CAAC;IAED,uDAAuD;IAChD,QAAQ,CAAC,GAAoB;QAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,GAAW;QAC3B,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAe,CAAC;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAe,CAAC;YAC7C,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAe,CAAC;YAC7C,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAsC,CAAC,OAAO,GAAG,KAAK,CAAC;gBACxD,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;oBAC5B,KAAmB,CAAC,IAAI,EAAE,CAAC;gBAChC,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAChC,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;gBAC9B,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,WAAW,YAAY,SAAS,EAAE,CAAC;gBAClC,WAAyB,CAAC,IAAI,EAAE,CAAC;YACtC,CAAC;YACD,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAEM,OAAO;QACV,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ"}
@@ -0,0 +1,33 @@
1
+ import Phaser from "phaser";
2
+ import { TextInputData } from "./SceneData";
3
+ import { ZContainer } from "./ZContainer";
4
+ /**
5
+ * ZTextInput — Phaser equivalent of the PIXI ZTextInput.
6
+ *
7
+ * Renders an HTML <input> element positioned over the Phaser canvas using
8
+ * Phaser.GameObjects.DOMElement. This mirrors the behaviour of the PIXI
9
+ * text-input library which also uses a real DOM input.
10
+ *
11
+ * Styling is applied from the same TextInputObj config used by the PIXI
12
+ * version so that the same scene JSON works for both engines.
13
+ */
14
+ export declare class ZTextInput extends ZContainer {
15
+ private domElement;
16
+ private inputElement;
17
+ private props;
18
+ private _text;
19
+ constructor(scene: Phaser.Scene, data: TextInputData);
20
+ private createInput;
21
+ /** Get the current text value. */
22
+ getText(): string;
23
+ /** Set the text value. */
24
+ setValue(text: string): void;
25
+ /** Focus the input field. */
26
+ focus(): void;
27
+ /** Blur (unfocus) the input field. */
28
+ blur(): void;
29
+ /** Disable the input. */
30
+ setDisabled(disabled: boolean): void;
31
+ getType(): string;
32
+ }
33
+ //# sourceMappingURL=ZTextInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZTextInput.d.ts","sourceRoot":"","sources":["../src/ZTextInput.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACtC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,KAAK,CAAc;gBAEf,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa;IAOpD,OAAO,CAAC,WAAW;IAqFnB,kCAAkC;IAC3B,OAAO,IAAI,MAAM;IAIxB,0BAA0B;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOnC,6BAA6B;IACtB,KAAK,IAAI,IAAI;IAIpB,sCAAsC;IAC/B,IAAI,IAAI,IAAI;IAInB,yBAAyB;IAClB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAUpC,OAAO,IAAI,MAAM;CAG3B"}
@@ -0,0 +1,124 @@
1
+ import { ZContainer } from "./ZContainer";
2
+ /**
3
+ * ZTextInput — Phaser equivalent of the PIXI ZTextInput.
4
+ *
5
+ * Renders an HTML <input> element positioned over the Phaser canvas using
6
+ * Phaser.GameObjects.DOMElement. This mirrors the behaviour of the PIXI
7
+ * text-input library which also uses a real DOM input.
8
+ *
9
+ * Styling is applied from the same TextInputObj config used by the PIXI
10
+ * version so that the same scene JSON works for both engines.
11
+ */
12
+ export class ZTextInput extends ZContainer {
13
+ domElement = null;
14
+ inputElement = null;
15
+ props;
16
+ _text = "";
17
+ constructor(scene, data) {
18
+ super(scene, data.x ?? 0, data.y ?? 0);
19
+ this.props = data.props;
20
+ this._text = data.text || "";
21
+ this.createInput(scene, data);
22
+ }
23
+ createInput(scene, data) {
24
+ const input = document.createElement("input");
25
+ input.type = "text";
26
+ input.value = this._text;
27
+ // Apply styles from props.input
28
+ const inp = this.props?.input;
29
+ if (inp) {
30
+ if (inp.fontFamily)
31
+ input.style.fontFamily = inp.fontFamily;
32
+ if (inp.fontSize)
33
+ input.style.fontSize = inp.fontSize;
34
+ if (inp.padding)
35
+ input.style.padding = inp.padding;
36
+ if (inp.width)
37
+ input.style.width = inp.width;
38
+ if (inp.color)
39
+ input.style.color = typeof inp.color === "number"
40
+ ? "#" + inp.color.toString(16).padStart(6, "0")
41
+ : inp.color;
42
+ if (inp.fontWeight)
43
+ input.style.fontWeight = inp.fontWeight;
44
+ if (inp.textAlign)
45
+ input.style.textAlign = inp.textAlign;
46
+ if (inp.textIndent)
47
+ input.style.textIndent = inp.textIndent;
48
+ if (inp.lineHeight)
49
+ input.style.lineHeight = inp.lineHeight;
50
+ }
51
+ // Apply default box styles
52
+ const box = this.props?.box?.default;
53
+ if (box) {
54
+ if (box.fill !== undefined) {
55
+ input.style.backgroundColor = "#" + box.fill.toString(16).padStart(6, "0");
56
+ }
57
+ if (box.rounded !== undefined) {
58
+ input.style.borderRadius = box.rounded + "px";
59
+ }
60
+ if (box.stroke) {
61
+ const stroke = box.stroke;
62
+ const strokeColor = stroke.color !== undefined ? "#" + stroke.color.toString(16).padStart(6, "0") : "#000000";
63
+ const strokeWidth = stroke.width !== undefined ? stroke.width : 1;
64
+ const strokeAlpha = stroke.alpha !== undefined ? stroke.alpha : 1;
65
+ input.style.border = `${strokeWidth}px solid ${strokeColor}`;
66
+ input.style.opacity = String(strokeAlpha);
67
+ }
68
+ }
69
+ input.style.outline = "none";
70
+ input.style.boxSizing = "border-box";
71
+ // Listen for focus/blur to apply focused/disabled box styles
72
+ input.addEventListener("focus", () => {
73
+ const focused = this.props?.box?.focused;
74
+ if (focused?.fill !== undefined) {
75
+ input.style.backgroundColor = "#" + focused.fill.toString(16).padStart(6, "0");
76
+ }
77
+ });
78
+ input.addEventListener("blur", () => {
79
+ const def = this.props?.box?.default;
80
+ if (def?.fill !== undefined) {
81
+ input.style.backgroundColor = "#" + def.fill.toString(16).padStart(6, "0");
82
+ }
83
+ });
84
+ input.addEventListener("input", () => {
85
+ this._text = input.value;
86
+ });
87
+ this.domElement = scene.add.dom(0, 0, input);
88
+ this.add(this.domElement);
89
+ this.inputElement = input;
90
+ }
91
+ /** Get the current text value. */
92
+ getText() {
93
+ return this.inputElement?.value ?? this._text;
94
+ }
95
+ /** Set the text value. */
96
+ setValue(text) {
97
+ this._text = text;
98
+ if (this.inputElement) {
99
+ this.inputElement.value = text;
100
+ }
101
+ }
102
+ /** Focus the input field. */
103
+ focus() {
104
+ this.inputElement?.focus();
105
+ }
106
+ /** Blur (unfocus) the input field. */
107
+ blur() {
108
+ this.inputElement?.blur();
109
+ }
110
+ /** Disable the input. */
111
+ setDisabled(disabled) {
112
+ if (this.inputElement) {
113
+ this.inputElement.disabled = disabled;
114
+ const style = disabled ? this.props?.box?.disabled : this.props?.box?.default;
115
+ if (style?.fill !== undefined) {
116
+ this.inputElement.style.backgroundColor = "#" + style.fill.toString(16).padStart(6, "0");
117
+ }
118
+ }
119
+ }
120
+ getType() {
121
+ return "ZTextInput";
122
+ }
123
+ }
124
+ //# sourceMappingURL=ZTextInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZTextInput.js","sourceRoot":"","sources":["../src/ZTextInput.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { ZContainer } from "./ZContainer";
2
+ /**
3
+ * Represents a timeline container that manages frame-based animations for its children.
4
+ * Extends `ZContainer` and provides methods to control playback, frame navigation, and event listeners.
5
+ *
6
+ * @property {number | undefined} totalFrames - The total number of frames in the timeline, determined by the longest child timeline.
7
+ * @property {any} _frames - The frame data for all children with timelines.
8
+ * @property {number} currentFrame - The current frame index being displayed.
9
+ * @property {boolean} looping - Indicates whether the timeline should loop when it reaches the end.
10
+ * @property {(self: ZTimeline) => void | undefined} func - Optional callback function invoked when the timeline ends.
11
+ *
12
+ * @method getFrames - Returns the frame data for the timeline.
13
+ * @method setFrames - Sets the frame data and updates the total frame count based on the longest child timeline.
14
+ * @method removeStateEndEventListener - Removes the end-of-state event listener.
15
+ * @method addStateEndEventListener - Adds a callback to be invoked when the timeline ends.
16
+ * @method play - Starts playback of the timeline and all child timelines.
17
+ * @method stop - Stops playback of the timeline and all child timelines.
18
+ * @method gotoAndPlay - Jumps to a specific frame and starts playback.
19
+ * @method update - Advances the timeline by one frame, handles looping, and invokes the end event listener if present.
20
+ * @method gotoAndStop - Jumps to a specific frame and updates all child transforms to match that frame.
21
+ */
22
+ export declare class ZTimeline extends ZContainer {
23
+ [key: string]: any;
24
+ totalFrames: number | undefined;
25
+ _frames: any;
26
+ currentFrame: number;
27
+ looping: boolean;
28
+ cuePoints: Record<number, string>;
29
+ func: ((self: ZTimeline) => void) | undefined;
30
+ constructor(scene: Phaser.Scene, x?: number, y?: number, children?: Phaser.GameObjects.GameObject[]);
31
+ setCuePoints(cuePoints: Record<number, string>): void;
32
+ getFrames(): any;
33
+ setFrames(value: any): void;
34
+ removeStateEndEventListener(): void;
35
+ addStateEndEventListener(func: (self: ZTimeline) => void): void;
36
+ play(): void;
37
+ stop(): void;
38
+ gotoAndPlay(frameNum: number): void;
39
+ update(): void;
40
+ gotoAndStop(frameNum: number): void;
41
+ }
42
+ //# sourceMappingURL=ZTimeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZTimeline.d.ts","sourceRoot":"","sources":["../src/ZTimeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,GAAG,CAAC;IACb,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,OAAO,CAAQ;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IACvC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;gBAElC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE;IAQzF,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIrD,SAAS,IAAI,GAAG;IAMhB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAe3B,2BAA2B,IAAI,IAAI;IAInC,wBAAwB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAI/D,IAAI,IAAI,IAAI;IAUZ,IAAI,IAAI,IAAI;IAUZ,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOnC,MAAM,IAAI,IAAI;IAsBd,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAmDtC"}