@pixi-ui-editor/runtime-pixi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/assets/fonts.d.ts +5 -0
  2. package/dist/assets/fonts.d.ts.map +1 -0
  3. package/dist/assets/fonts.js +50 -0
  4. package/dist/assets/fonts.js.map +1 -0
  5. package/dist/assets/sounds.d.ts +14 -0
  6. package/dist/assets/sounds.d.ts.map +1 -0
  7. package/dist/assets/sounds.js +156 -0
  8. package/dist/assets/sounds.js.map +1 -0
  9. package/dist/assets/spine.d.ts +18 -0
  10. package/dist/assets/spine.d.ts.map +1 -0
  11. package/dist/assets/spine.js +82 -0
  12. package/dist/assets/spine.js.map +1 -0
  13. package/dist/assets/textures.d.ts +15 -0
  14. package/dist/assets/textures.d.ts.map +1 -0
  15. package/dist/assets/textures.js +86 -0
  16. package/dist/assets/textures.js.map +1 -0
  17. package/dist/controls.d.ts +19 -0
  18. package/dist/controls.d.ts.map +1 -0
  19. package/dist/controls.js +55 -0
  20. package/dist/controls.js.map +1 -0
  21. package/dist/document.d.ts +8 -0
  22. package/dist/document.d.ts.map +1 -0
  23. package/dist/document.js +22 -0
  24. package/dist/document.js.map +1 -0
  25. package/dist/index.d.ts +22 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +19 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/index.test.d.ts +2 -0
  30. package/dist/index.test.d.ts.map +1 -0
  31. package/dist/index.test.js +315 -0
  32. package/dist/index.test.js.map +1 -0
  33. package/dist/layout.d.ts +32 -0
  34. package/dist/layout.d.ts.map +1 -0
  35. package/dist/layout.js +43 -0
  36. package/dist/layout.js.map +1 -0
  37. package/dist/layoutGroups.d.ts +31 -0
  38. package/dist/layoutGroups.d.ts.map +1 -0
  39. package/dist/layoutGroups.js +139 -0
  40. package/dist/layoutGroups.js.map +1 -0
  41. package/dist/particles.d.ts +139 -0
  42. package/dist/particles.d.ts.map +1 -0
  43. package/dist/particles.js +275 -0
  44. package/dist/particles.js.map +1 -0
  45. package/dist/particles.test.d.ts +2 -0
  46. package/dist/particles.test.d.ts.map +1 -0
  47. package/dist/particles.test.js +210 -0
  48. package/dist/particles.test.js.map +1 -0
  49. package/dist/scene.d.ts +41 -0
  50. package/dist/scene.d.ts.map +1 -0
  51. package/dist/scene.js +147 -0
  52. package/dist/scene.js.map +1 -0
  53. package/dist/scrollView.d.ts +28 -0
  54. package/dist/scrollView.d.ts.map +1 -0
  55. package/dist/scrollView.js +38 -0
  56. package/dist/scrollView.js.map +1 -0
  57. package/dist/test.setup.d.ts +2 -0
  58. package/dist/test.setup.d.ts.map +1 -0
  59. package/dist/test.setup.js +6 -0
  60. package/dist/test.setup.js.map +1 -0
  61. package/dist/views/ButtonNodeView.d.ts +36 -0
  62. package/dist/views/ButtonNodeView.d.ts.map +1 -0
  63. package/dist/views/ButtonNodeView.js +104 -0
  64. package/dist/views/ButtonNodeView.js.map +1 -0
  65. package/dist/views/InputNodeView.d.ts +36 -0
  66. package/dist/views/InputNodeView.d.ts.map +1 -0
  67. package/dist/views/InputNodeView.js +170 -0
  68. package/dist/views/InputNodeView.js.map +1 -0
  69. package/dist/views/NodeView.d.ts +53 -0
  70. package/dist/views/NodeView.d.ts.map +1 -0
  71. package/dist/views/NodeView.js +86 -0
  72. package/dist/views/NodeView.js.map +1 -0
  73. package/dist/views/ParticleEmitterNodeView.d.ts +26 -0
  74. package/dist/views/ParticleEmitterNodeView.d.ts.map +1 -0
  75. package/dist/views/ParticleEmitterNodeView.js +101 -0
  76. package/dist/views/ParticleEmitterNodeView.js.map +1 -0
  77. package/dist/views/ParticleEmitterNodeView.test.d.ts +2 -0
  78. package/dist/views/ParticleEmitterNodeView.test.d.ts.map +1 -0
  79. package/dist/views/ParticleEmitterNodeView.test.js +148 -0
  80. package/dist/views/ParticleEmitterNodeView.test.js.map +1 -0
  81. package/dist/views/ScrollViewNodeView.d.ts +29 -0
  82. package/dist/views/ScrollViewNodeView.d.ts.map +1 -0
  83. package/dist/views/ScrollViewNodeView.js +67 -0
  84. package/dist/views/ScrollViewNodeView.js.map +1 -0
  85. package/dist/views/SpineNodeView.d.ts +8 -0
  86. package/dist/views/SpineNodeView.d.ts.map +1 -0
  87. package/dist/views/SpineNodeView.js +30 -0
  88. package/dist/views/SpineNodeView.js.map +1 -0
  89. package/dist/views/ValueControlNodeViews.d.ts +37 -0
  90. package/dist/views/ValueControlNodeViews.d.ts.map +1 -0
  91. package/dist/views/ValueControlNodeViews.js +179 -0
  92. package/dist/views/ValueControlNodeViews.js.map +1 -0
  93. package/dist/views/basic.d.ts +29 -0
  94. package/dist/views/basic.d.ts.map +1 -0
  95. package/dist/views/basic.js +92 -0
  96. package/dist/views/basic.js.map +1 -0
  97. package/dist/views/createNodeView.d.ts +13 -0
  98. package/dist/views/createNodeView.d.ts.map +1 -0
  99. package/dist/views/createNodeView.js +89 -0
  100. package/dist/views/createNodeView.js.map +1 -0
  101. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParticleEmitterNodeView.test.d.ts","sourceRoot":"","sources":["../../src/views/ParticleEmitterNodeView.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { Texture } from "pixi.js";
3
+ import { ParticleEmitterNodeView } from "./ParticleEmitterNodeView.js";
4
+ const assetIds = { a: "10000000-0000-4000-8000-000000000001", b: "10000000-0000-4000-8000-000000000002" };
5
+ const textures = new Map([[assetIds.a, Texture.WHITE], [assetIds.b, Texture.EMPTY]]);
6
+ function effect(overrides = {}) {
7
+ return {
8
+ id: "effect-1", name: "Effect", type: "particles", maxParticles: 30, seed: 7,
9
+ emission: { delay: 0, duration: 10, loop: true, rate: 0, bursts: [{ time: 0, count: 24 }] },
10
+ particle: {
11
+ lifetime: { min: 100, max: 100 },
12
+ spawnShape: { type: "point" },
13
+ movement: { speed: { min: 0, max: 0 }, directionDegrees: 0, spreadDegrees: 0, accelerationX: 0, accelerationY: 0, drag: 0 },
14
+ visual: {
15
+ source: { type: "single", assetId: assetIds.a },
16
+ alpha: { start: 1, end: 0 },
17
+ scale: { start: { min: 2, max: 2 }, end: { min: 0.5, max: 0.5 } },
18
+ tint: { start: "#FFFFFF", end: "#FFFFFF" },
19
+ rotation: { initialDegrees: { min: 0, max: 0 }, angularVelocityDegrees: { min: 0, max: 0 } },
20
+ blendMode: "normal",
21
+ },
22
+ },
23
+ ...overrides,
24
+ };
25
+ }
26
+ function emitterNode(overrides = {}) {
27
+ return {
28
+ id: "node-1", name: "Emitter", parentId: null, children: [], visible: true,
29
+ transform: { x: 0, y: 0, width: 100, height: 60, scaleX: 1, scaleY: 1, rotation: 0 },
30
+ type: "particle-emitter", effectId: "effect-1", autoplay: true, simulationSpace: "local",
31
+ ...overrides,
32
+ };
33
+ }
34
+ function spawnedSprites(view) {
35
+ const contentRoot = view.children[0];
36
+ return contentRoot.children.filter((sprite) => sprite.visible);
37
+ }
38
+ function build(def, node, size = { width: 1000, height: 1000 }) {
39
+ const view = new ParticleEmitterNodeView(def, textures);
40
+ view.update(node, "desktop", size);
41
+ return view;
42
+ }
43
+ describe("ParticleEmitterNodeView spawn shapes and appearance", () => {
44
+ it("samples rectangle spawn points inside the node's logical rect", () => {
45
+ const view = build(effect({ particle: { ...effect().particle, spawnShape: { type: "rectangle" } } }), emitterNode());
46
+ view.step();
47
+ const sprites = spawnedSprites(view);
48
+ expect(sprites).toHaveLength(24);
49
+ for (const sprite of sprites) {
50
+ expect(sprite.position.x).toBeGreaterThanOrEqual(0);
51
+ expect(sprite.position.x).toBeLessThanOrEqual(100);
52
+ expect(sprite.position.y).toBeGreaterThanOrEqual(0);
53
+ expect(sprite.position.y).toBeLessThanOrEqual(60);
54
+ }
55
+ });
56
+ it("samples circle spawn points inside the ellipse inscribed in the rect", () => {
57
+ const view = build(effect({ particle: { ...effect().particle, spawnShape: { type: "circle" } } }), emitterNode());
58
+ view.step();
59
+ for (const sprite of spawnedSprites(view)) {
60
+ const nx = (sprite.position.x - 50) / 50, ny = (sprite.position.y - 30) / 30;
61
+ expect(nx * nx + ny * ny).toBeLessThanOrEqual(1 + 1e-9);
62
+ }
63
+ });
64
+ it("picks among random source assets and interpolates alpha/scale toward their end values by the particle's last frame", () => {
65
+ const random = effect({
66
+ particle: { ...effect().particle, lifetime: { min: 1, max: 1 }, visual: { ...effect().particle.visual, source: { type: "random", assetIds: [assetIds.a, assetIds.b] } } },
67
+ });
68
+ const view = build(random, emitterNode());
69
+ view.step();
70
+ const seen = new Set(spawnedSprites(view).map((sprite) => sprite.texture));
71
+ expect(seen.has(Texture.WHITE)).toBe(true);
72
+ expect(seen.has(Texture.EMPTY)).toBe(true);
73
+ // Advance by fixed steps (update()'s per-call catch-up cap would otherwise clip a large single
74
+ // delta) to 60% through the 1s lifetime, and check the interpolated end values from above.
75
+ for (let i = 0; i < 36; i++)
76
+ view.step();
77
+ const [sprite] = spawnedSprites(view);
78
+ expect(sprite.alpha).toBeCloseTo(0.4, 5); // 60% through life: lerp(1, 0, 0.6) = 0.4
79
+ expect(sprite.scale.x).toBeCloseTo(1.1, 5); // lerp(2, 0.5, 0.6) = 1.1
80
+ });
81
+ it("keeps a non-loop sequence on its last frame once the sequence has fully played", () => {
82
+ const sequence = effect({
83
+ emission: { delay: 0, duration: 10, loop: true, rate: 0, bursts: [{ time: 0, count: 1 }] },
84
+ particle: { ...effect().particle, visual: { ...effect().particle.visual, source: { type: "sequence", assetIds: [assetIds.a, assetIds.b], fps: 10, loop: false, randomStartFrame: false } } },
85
+ });
86
+ const view = build(sequence, emitterNode());
87
+ view.step();
88
+ for (let i = 0; i < 30; i++)
89
+ view.updateParticles(1 / 10); // far more than 2 frames at 10fps
90
+ const [sprite] = spawnedSprites(view);
91
+ expect(sprite.texture).toBe(Texture.EMPTY); // stays on the last frame (assetIds[1])
92
+ });
93
+ });
94
+ describe("ParticleEmitterNodeView local/world space", () => {
95
+ it("keeps a local particle following the emitter, while a world particle keeps its world trajectory", () => {
96
+ const def = effect({ emission: { delay: 0, duration: 10, loop: true, rate: 0, bursts: [{ time: 0, count: 1 }] } });
97
+ const localView = build(def, emitterNode({ simulationSpace: "local" }));
98
+ localView.step();
99
+ const worldView = build(def, emitterNode({ simulationSpace: "world" }));
100
+ worldView.step();
101
+ const worldPositionOf = (view) => {
102
+ const [sprite] = spawnedSprites(view);
103
+ return view.worldTransform.apply({ x: sprite.position.x, y: sprite.position.y });
104
+ };
105
+ const localPositionOf = (view) => {
106
+ const [sprite] = spawnedSprites(view);
107
+ return { x: sprite.position.x, y: sprite.position.y };
108
+ };
109
+ const localBefore = localPositionOf(localView);
110
+ const worldBefore = worldPositionOf(worldView);
111
+ // Move both emitters, then resync render (a zero-delta tick just re-projects, it doesn't age).
112
+ localView.update(emitterNode({ simulationSpace: "local", transform: { x: 400, y: 250, width: 100, height: 60, scaleX: 1, scaleY: 1, rotation: 0 } }), "desktop", { width: 1000, height: 1000 });
113
+ worldView.update(emitterNode({ simulationSpace: "world", transform: { x: 400, y: 250, width: 100, height: 60, scaleX: 1, scaleY: 1, rotation: 0 } }), "desktop", { width: 1000, height: 1000 });
114
+ localView.updateParticles(0);
115
+ worldView.updateParticles(0);
116
+ // Local: the particle's own local coordinates are untouched by the emitter's move.
117
+ expect(localPositionOf(localView)).toEqual(localBefore);
118
+ // World: local coordinates are recomputed so the particle's world position stays put.
119
+ const worldAfter = worldPositionOf(worldView);
120
+ expect(worldAfter.x).toBeCloseTo(worldBefore.x, 5);
121
+ expect(worldAfter.y).toBeCloseTo(worldBefore.y, 5);
122
+ });
123
+ });
124
+ describe("ParticleEmitterNodeView incremental sync and disposal", () => {
125
+ it("does not restart on an unrelated definition clone and adopts a new maxParticles live", () => {
126
+ const def = effect({ maxParticles: 2, emission: { delay: 0, duration: 10, loop: true, rate: 0, bursts: [{ time: 0, count: 2 }] } });
127
+ const view = build(def, emitterNode());
128
+ view.step();
129
+ expect(spawnedSprites(view)).toHaveLength(2);
130
+ const renamed = structuredClone(def);
131
+ renamed.name = "Renamed";
132
+ view.syncEffect(renamed);
133
+ expect(spawnedSprites(view)).toHaveLength(2); // untouched by the sync
134
+ expect(view.getDiagnostics()).toMatchObject({ active: 2, dropped: 0 });
135
+ });
136
+ it("dispose() removes every prewarmed sprite from the render tree and is safe to call from destroy()", () => {
137
+ const def = effect({ maxParticles: 4 });
138
+ const view = build(def, emitterNode());
139
+ view.step();
140
+ expect(spawnedSprites(view)).toHaveLength(24 > 4 ? 4 : 24); // burst count clamps to maxParticles
141
+ const contentRoot = view.children[0];
142
+ expect(contentRoot.children.length).toBeGreaterThan(0);
143
+ view.destroy();
144
+ expect(contentRoot.children).toHaveLength(0);
145
+ expect(view.getDiagnostics()).toMatchObject({ active: 0, disposed: true });
146
+ });
147
+ });
148
+ //# sourceMappingURL=ParticleEmitterNodeView.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParticleEmitterNodeView.test.js","sourceRoot":"","sources":["../../src/views/ParticleEmitterNodeView.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type ScrollViewNode, type UINode } from "@pixi-ui-editor/schema";
2
+ import { ScrollBox } from "@pixi/ui";
3
+ import { Container, Texture } from "pixi.js";
4
+ import { NodeView, type SceneInteractionMode } from "./NodeView.js";
5
+ /**
6
+ * Adapts a scroll-view node to `@pixi/ui`'s `ScrollBox`, which already implements the
7
+ * viewport/content/mask contract on its own: `scrollBox.list` is the content container that moves,
8
+ * and its own mask clips overflow — this class never reimplements clipping or drag/wheel scrolling.
9
+ * `direction`, `cornerRadius`, `easingEnabled` and `shiftWheelHorizontal` have no safe public API for
10
+ * live updates in `@pixi/ui` 2.3.2 (they live on a protected `options` field, and `easingEnabled` is
11
+ * captured once into an internal `Trackpad`), so changing them rebuilds the scene like Spine's
12
+ * `animation`/`loop` do; padding, item spacing, background color and the view's own size stay
13
+ * incremental through `syncContent`.
14
+ */
15
+ export declare class ScrollViewNodeView extends NodeView {
16
+ private readonly scrollBox;
17
+ constructor(node: ScrollViewNode, textures: ReadonlyMap<string, Texture> | undefined, interaction: SceneInteractionMode);
18
+ addScrollItem<T extends Container[]>(...children: T): T[0];
19
+ protected syncContent(node: UINode, transform: UINode["transform"]): void;
20
+ get scrollX(): number;
21
+ set scrollX(value: number);
22
+ get scrollY(): number;
23
+ set scrollY(value: number);
24
+ scrollTo(elementId: number): void;
25
+ scrollTop(): void;
26
+ scrollBottom(): void;
27
+ get onScroll(): ScrollBox["onScroll"];
28
+ }
29
+ //# sourceMappingURL=ScrollViewNodeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollViewNodeView.d.ts","sourceRoot":"","sources":["../../src/views/ScrollViewNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEpE;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;gBAE1B,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,oBAAoB;IAwBvH,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAI1D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAezE,IAAI,OAAO,IAAI,MAAM,CAAmC;IACxD,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAqC;IAC9D,IAAI,OAAO,IAAI,MAAM,CAAmC;IACxD,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAqC;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IACjC,SAAS,IAAI,IAAI;IACjB,YAAY,IAAI,IAAI;IACpB,IAAI,QAAQ,IAAI,SAAS,CAAC,UAAU,CAAC,CAAoC;CAC1E"}
@@ -0,0 +1,67 @@
1
+ import { ScrollBox } from "@pixi/ui";
2
+ import { SCROLL_DIRECTION_TO_LIST_TYPE } from "../scrollView.js";
3
+ import { NodeView } from "./NodeView.js";
4
+ /**
5
+ * Adapts a scroll-view node to `@pixi/ui`'s `ScrollBox`, which already implements the
6
+ * viewport/content/mask contract on its own: `scrollBox.list` is the content container that moves,
7
+ * and its own mask clips overflow — this class never reimplements clipping or drag/wheel scrolling.
8
+ * `direction`, `cornerRadius`, `easingEnabled` and `shiftWheelHorizontal` have no safe public API for
9
+ * live updates in `@pixi/ui` 2.3.2 (they live on a protected `options` field, and `easingEnabled` is
10
+ * captured once into an internal `Trackpad`), so changing them rebuilds the scene like Spine's
11
+ * `animation`/`loop` do; padding, item spacing, background color and the view's own size stay
12
+ * incremental through `syncContent`.
13
+ */
14
+ export class ScrollViewNodeView extends NodeView {
15
+ scrollBox;
16
+ constructor(node, textures, interaction) {
17
+ super(textures);
18
+ const settings = node.scrollView;
19
+ this.scrollBox = new ScrollBox({
20
+ width: node.transform.width,
21
+ height: node.transform.height,
22
+ type: SCROLL_DIRECTION_TO_LIST_TYPE[settings.direction],
23
+ background: settings.backgroundColor,
24
+ radius: settings.cornerRadius,
25
+ disableEasing: !settings.easingEnabled,
26
+ // Зафиксировано решением: скролл никогда не перехватывает wheel вне компонента.
27
+ globalScroll: false,
28
+ shiftScroll: settings.shiftWheelHorizontal ?? false,
29
+ leftPadding: settings.padding.left,
30
+ rightPadding: settings.padding.right,
31
+ topPadding: settings.padding.top,
32
+ bottomPadding: settings.padding.bottom,
33
+ elementsMargin: settings.itemSpacing,
34
+ });
35
+ // Authoring-канвас инертен: selection и drag идут через grab-прямоугольник базового NodeView.
36
+ if (interaction === "authoring")
37
+ this.scrollBox.eventMode = "none";
38
+ this.setContent(this.scrollBox);
39
+ }
40
+ addScrollItem(...children) {
41
+ return this.scrollBox.addItem(...children);
42
+ }
43
+ syncContent(node, transform) {
44
+ if (node.type !== "scroll-view")
45
+ return;
46
+ this.scrollBox.setSize(transform.width, transform.height);
47
+ this.scrollBox.setBackground(node.scrollView.backgroundColor);
48
+ const list = this.scrollBox.list;
49
+ if (list !== undefined) {
50
+ list.leftPadding = node.scrollView.padding.left;
51
+ list.rightPadding = node.scrollView.padding.right;
52
+ list.topPadding = node.scrollView.padding.top;
53
+ list.bottomPadding = node.scrollView.padding.bottom;
54
+ list.elementsMargin = node.scrollView.itemSpacing;
55
+ }
56
+ this.scrollBox.resize(true);
57
+ }
58
+ get scrollX() { return this.scrollBox.scrollX; }
59
+ set scrollX(value) { this.scrollBox.scrollX = value; }
60
+ get scrollY() { return this.scrollBox.scrollY; }
61
+ set scrollY(value) { this.scrollBox.scrollY = value; }
62
+ scrollTo(elementId) { this.scrollBox.scrollTo(elementId); }
63
+ scrollTop() { this.scrollBox.scrollTop(); }
64
+ scrollBottom() { this.scrollBox.scrollBottom(); }
65
+ get onScroll() { return this.scrollBox.onScroll; }
66
+ }
67
+ //# sourceMappingURL=ScrollViewNodeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollViewNodeView.js","sourceRoot":"","sources":["../../src/views/ScrollViewNodeView.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAA6B,MAAM,eAAe,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC7B,SAAS,CAAY;IAEtC,YAAY,IAAoB,EAAE,QAAkD,EAAE,WAAiC;QACrH,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK;YAC3B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM;YAC7B,IAAI,EAAE,6BAA6B,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvD,UAAU,EAAE,QAAQ,CAAC,eAAe;YACpC,MAAM,EAAE,QAAQ,CAAC,YAAY;YAC7B,aAAa,EAAE,CAAC,QAAQ,CAAC,aAAa;YACtC,gFAAgF;YAChF,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,QAAQ,CAAC,oBAAoB,IAAI,KAAK;YACnD,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;YAClC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;YACpC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG;YAChC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;YACtC,cAAc,EAAE,QAAQ,CAAC,WAAW;SACrC,CAAC,CAAC;QACH,8FAA8F;QAC9F,IAAI,WAAW,KAAK,WAAW;YAAE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC;QACnE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,aAAa,CAAwB,GAAG,QAAW;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAES,WAAW,CAAC,IAAY,EAAE,SAA8B;QAChE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO;QACxC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,KAAa,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,KAAa,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,SAAiB,IAAU,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzE,SAAS,KAAW,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACjD,YAAY,KAAW,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,QAAQ,KAA4B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC1E"}
@@ -0,0 +1,8 @@
1
+ import { type SkeletonData } from "@esotericsoftware/spine-pixi-v8";
2
+ import { type UINode } from "@pixi-ui-editor/schema";
3
+ import { NodeView } from "./NodeView.js";
4
+ export declare class SpineNodeView extends NodeView {
5
+ constructor(skeletonData: SkeletonData | undefined, animation: string | undefined, loop: boolean);
6
+ protected syncContent(_node: UINode, transform: UINode["transform"]): void;
7
+ }
8
+ //# sourceMappingURL=SpineNodeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpineNodeView.d.ts","sourceRoot":"","sources":["../../src/views/SpineNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,YAAY,EAAE,YAAY,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO;IAWhG,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAW3E"}
@@ -0,0 +1,30 @@
1
+ import { Spine } from "@esotericsoftware/spine-pixi-v8";
2
+ import { Graphics } from "pixi.js";
3
+ import { fitSpineToTransform } from "../layout.js";
4
+ import { NodeView } from "./NodeView.js";
5
+ export class SpineNodeView extends NodeView {
6
+ constructor(skeletonData, animation, loop) {
7
+ super();
8
+ if (skeletonData === undefined) {
9
+ this.setContent(new Graphics());
10
+ return;
11
+ }
12
+ const spine = new Spine(skeletonData);
13
+ if (animation !== undefined && skeletonData.findAnimation(animation) !== null)
14
+ spine.state.setAnimation(0, animation, loop);
15
+ this.setContent(spine);
16
+ }
17
+ syncContent(_node, transform) {
18
+ if (this.content instanceof Spine) {
19
+ const fit = fitSpineToTransform(this.content.skeleton.data, transform);
20
+ if (fit !== undefined) {
21
+ this.content.scale.set(fit.scaleX, fit.scaleY);
22
+ this.content.position.set(fit.x, fit.y);
23
+ }
24
+ }
25
+ else if (this.content instanceof Graphics) {
26
+ this.content.clear().rect(0, 0, transform.width, transform.height).fill(0xff00ff);
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=SpineNodeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpineNodeView.js","sourceRoot":"","sources":["../../src/views/SpineNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,YAAsC,EAAE,SAA6B,EAAE,IAAa;QAC9F,KAAK,EAAE,CAAC;QACR,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,IAAI,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5H,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAES,WAAW,CAAC,KAAa,EAAE,SAA8B;QACjE,IAAI,IAAI,CAAC,OAAO,YAAY,KAAK,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACvE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,YAAY,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ import { type ProgressBarNode, type SliderNode, type UINode } from "@pixi-ui-editor/schema";
2
+ import { Slider } from "@pixi/ui";
3
+ import { Texture } from "pixi.js";
4
+ import { NodeView, type SceneInteractionMode } from "./NodeView.js";
5
+ /** Horizontal live-value control backed by `@pixi/ui` Slider. */
6
+ export declare class SliderNodeView extends NodeView {
7
+ private readonly control;
8
+ private readonly fonts;
9
+ private backgroundTexture;
10
+ private fillTexture;
11
+ private handleTexture;
12
+ private paddingKey;
13
+ constructor(node: SliderNode, textures: ReadonlyMap<string, Texture> | undefined, interaction: SceneInteractionMode, fonts: ReadonlyMap<string, string> | undefined);
14
+ protected syncContent(node: UINode, transform: UINode["transform"]): void;
15
+ get value(): number;
16
+ set value(value: number);
17
+ get min(): number;
18
+ set min(value: number);
19
+ get max(): number;
20
+ set max(value: number);
21
+ get step(): number;
22
+ set step(value: number);
23
+ get onUpdate(): Slider["onUpdate"];
24
+ get onChange(): Slider["onChange"];
25
+ }
26
+ /** Left-to-right runtime progress backed by `@pixi/ui` ProgressBar. */
27
+ export declare class ProgressBarNodeView extends NodeView {
28
+ private readonly control;
29
+ private backgroundTexture;
30
+ private fillTexture;
31
+ private paddingKey;
32
+ constructor(node: ProgressBarNode, textures: ReadonlyMap<string, Texture> | undefined);
33
+ protected syncContent(node: UINode, transform: UINode["transform"]): void;
34
+ get progress(): number;
35
+ set progress(value: number);
36
+ }
37
+ //# sourceMappingURL=ValueControlNodeViews.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueControlNodeViews.d.ts","sourceRoot":"","sources":["../../src/views/ValueControlNodeViews.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,KAAK,UAAU,EAA4B,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC1I,OAAO,EAAe,MAAM,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAU,OAAO,EAAqD,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAyEpE,iEAAiE;AACjE,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAM;gBAEZ,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAwBnK,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAkBzE,IAAI,KAAK,IAAI,MAAM,CAA+B;IAClD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAiC;IACxD,IAAI,GAAG,IAAI,MAAM,CAA6B;IAC9C,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAwE;IAC7F,IAAI,GAAG,IAAI,MAAM,CAA6B;IAC9C,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAAwE;IAC7F,IAAI,IAAI,IAAI,MAAM,CAA8B;IAChD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAyE;IAC/F,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,CAAkC;IACpE,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,CAAkC;CACrE;AAED,uEAAuE;AACvE,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,UAAU,CAAM;gBAEZ,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAcrF,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IAUzE,IAAI,QAAQ,IAAI,MAAM,CAAkC;IACxD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAoC;CAC/D"}
@@ -0,0 +1,179 @@
1
+ import { ProgressBar, Slider } from "@pixi/ui";
2
+ import { Sprite, Texture } from "pixi.js";
3
+ import { NodeView } from "./NodeView.js";
4
+ const ZERO_NINE_SLICE = { bg: [0, 0, 0, 0], fill: [0, 0, 0, 0] };
5
+ function textStyle(style, fonts) {
6
+ const resolved = style ?? { fontFamily: "Arial", fontSize: 18, fontWeight: "normal", fontStyle: "normal", fill: "#FFFFFF", align: "center", verticalAlign: "middle", wordWrap: false, breakWords: false, letterSpacing: 0 };
7
+ return {
8
+ fontFamily: resolved.fontAssetId === undefined ? resolved.fontFamily : fonts?.get(resolved.fontAssetId) ?? resolved.fontFamily,
9
+ fontSize: resolved.fontSize,
10
+ fontWeight: resolved.fontWeight,
11
+ fontStyle: resolved.fontStyle,
12
+ fill: resolved.fill,
13
+ align: resolved.align,
14
+ wordWrap: resolved.wordWrap,
15
+ breakWords: resolved.breakWords,
16
+ lineHeight: resolved.lineHeight,
17
+ letterSpacing: resolved.letterSpacing,
18
+ stroke: resolved.stroke === undefined ? undefined : { color: resolved.stroke.color, width: resolved.stroke.width },
19
+ };
20
+ }
21
+ class SliderControl extends Slider {
22
+ get value() { return super.value; }
23
+ set value(value) {
24
+ const clamped = Math.min(this.max, Math.max(this.min, value));
25
+ const steps = Math.round((clamped - this.min) / this.step);
26
+ const snapped = this.min + steps * this.step;
27
+ // Floating-point steps such as 0.1 should not leak 0.30000000000000004 to game code.
28
+ const precision = Math.max(0, (String(this.step).split(".")[1]?.length ?? 0));
29
+ super.value = Number(Math.min(this.max, Math.max(this.min, snapped)).toFixed(precision));
30
+ }
31
+ /** `@pixi/ui` snaps around zero; authored steps are anchored at min (min, min + step, ...). */
32
+ update(event) {
33
+ if (!this.dragging)
34
+ return;
35
+ const target = event.currentTarget;
36
+ if (target.parent === null)
37
+ return;
38
+ const localX = target.parent.worldTransform.applyInverse(event.global).x;
39
+ const ratio = localX / (this.bg?.width || 1);
40
+ this.value = this.min + ratio * (this.max - this.min);
41
+ }
42
+ setValueLabel(show, style) {
43
+ if (this.value1Text === undefined)
44
+ return;
45
+ this.value1Text.visible = show;
46
+ this.value1Text.style = style;
47
+ this.updateSlider();
48
+ }
49
+ setHandle(texture) {
50
+ this.slider = new Sprite(texture);
51
+ }
52
+ setFillConfig(texture, padding) {
53
+ this.options.fillPaddings = padding;
54
+ this.setFill(texture, padding);
55
+ }
56
+ sizeHandle(height) {
57
+ const handle = this.slider1?.children[0];
58
+ if (handle instanceof Sprite)
59
+ handle.setSize(height, height);
60
+ this.updateSlider();
61
+ }
62
+ }
63
+ class ProgressControl extends ProgressBar {
64
+ setFillConfig(texture, padding) {
65
+ this.options.fillPaddings = padding;
66
+ this.setFill(texture, padding);
67
+ }
68
+ }
69
+ /** Horizontal live-value control backed by `@pixi/ui` Slider. */
70
+ export class SliderNodeView extends NodeView {
71
+ control;
72
+ fonts;
73
+ backgroundTexture;
74
+ fillTexture;
75
+ handleTexture;
76
+ paddingKey = "";
77
+ constructor(node, textures, interaction, fonts) {
78
+ super(textures);
79
+ this.fonts = fonts;
80
+ this.backgroundTexture = this.textureFor(node.backgroundAssetId) ?? Texture.WHITE;
81
+ this.fillTexture = this.textureFor(node.fillAssetId) ?? Texture.WHITE;
82
+ this.handleTexture = this.textureFor(node.handleAssetId) ?? Texture.WHITE;
83
+ this.control = new SliderControl({
84
+ bg: this.backgroundTexture,
85
+ fill: this.fillTexture,
86
+ slider: new Sprite(this.handleTexture),
87
+ fillPaddings: node.fillPadding,
88
+ nineSliceSprite: ZERO_NINE_SLICE,
89
+ min: node.min,
90
+ max: node.max,
91
+ step: node.step,
92
+ value: node.defaultValue,
93
+ // Keep the library label allocated so show/style can change incrementally.
94
+ showValue: true,
95
+ valueTextStyle: textStyle(node.valueTextStyle, fonts),
96
+ });
97
+ if (interaction === "authoring")
98
+ this.control.eventMode = "none";
99
+ this.setContent(this.control);
100
+ }
101
+ syncContent(node, transform) {
102
+ if (node.type !== "slider")
103
+ return;
104
+ const background = this.textureFor(node.backgroundAssetId) ?? Texture.WHITE;
105
+ const fill = this.textureFor(node.fillAssetId) ?? Texture.WHITE;
106
+ const handle = this.textureFor(node.handleAssetId) ?? Texture.WHITE;
107
+ const paddingKey = `${node.fillPadding.left}/${node.fillPadding.right}/${node.fillPadding.top}/${node.fillPadding.bottom}`;
108
+ if (background !== this.backgroundTexture) {
109
+ this.backgroundTexture = background;
110
+ this.control.setBackground(background);
111
+ }
112
+ if (fill !== this.fillTexture || paddingKey !== this.paddingKey) {
113
+ this.fillTexture = fill;
114
+ this.paddingKey = paddingKey;
115
+ this.control.setFillConfig(fill, node.fillPadding);
116
+ }
117
+ if (handle !== this.handleTexture) {
118
+ this.handleTexture = handle;
119
+ this.control.setHandle(handle);
120
+ }
121
+ this.control.min = node.min;
122
+ this.control.max = node.max;
123
+ this.control.step = node.step;
124
+ this.control.value = this.control.value;
125
+ this.control.setSize(transform.width, transform.height);
126
+ this.control.sizeHandle(transform.height);
127
+ this.control.setValueLabel(node.showValue ?? false, textStyle(node.valueTextStyle, this.fonts));
128
+ }
129
+ get value() { return this.control.value; }
130
+ set value(value) { this.control.value = value; }
131
+ get min() { return this.control.min; }
132
+ set min(value) { this.control.min = value; this.control.value = this.control.value; }
133
+ get max() { return this.control.max; }
134
+ set max(value) { this.control.max = value; this.control.value = this.control.value; }
135
+ get step() { return this.control.step; }
136
+ set step(value) { this.control.step = value; this.control.value = this.control.value; }
137
+ get onUpdate() { return this.control.onUpdate; }
138
+ get onChange() { return this.control.onChange; }
139
+ }
140
+ /** Left-to-right runtime progress backed by `@pixi/ui` ProgressBar. */
141
+ export class ProgressBarNodeView extends NodeView {
142
+ control;
143
+ backgroundTexture;
144
+ fillTexture;
145
+ paddingKey = "";
146
+ constructor(node, textures) {
147
+ super(textures);
148
+ this.backgroundTexture = this.textureFor(node.backgroundAssetId) ?? Texture.WHITE;
149
+ this.fillTexture = this.textureFor(node.fillAssetId) ?? Texture.WHITE;
150
+ this.control = new ProgressControl({
151
+ bg: this.backgroundTexture,
152
+ fill: this.fillTexture,
153
+ fillPaddings: node.fillPadding,
154
+ nineSliceSprite: ZERO_NINE_SLICE,
155
+ progress: node.defaultProgress,
156
+ });
157
+ this.setContent(this.control);
158
+ }
159
+ syncContent(node, transform) {
160
+ if (node.type !== "progress-bar")
161
+ return;
162
+ const background = this.textureFor(node.backgroundAssetId) ?? Texture.WHITE;
163
+ const fill = this.textureFor(node.fillAssetId) ?? Texture.WHITE;
164
+ const paddingKey = `${node.fillPadding.left}/${node.fillPadding.right}/${node.fillPadding.top}/${node.fillPadding.bottom}`;
165
+ if (background !== this.backgroundTexture) {
166
+ this.backgroundTexture = background;
167
+ this.control.setBackground(background);
168
+ }
169
+ if (fill !== this.fillTexture || paddingKey !== this.paddingKey) {
170
+ this.fillTexture = fill;
171
+ this.paddingKey = paddingKey;
172
+ this.control.setFillConfig(fill, node.fillPadding);
173
+ }
174
+ this.control.setSize(transform.width, transform.height);
175
+ }
176
+ get progress() { return this.control.progress; }
177
+ set progress(value) { this.control.progress = value; }
178
+ }
179
+ //# sourceMappingURL=ValueControlNodeViews.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueControlNodeViews.js","sourceRoot":"","sources":["../../src/views/ValueControlNodeViews.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type UINode } from "@pixi-ui-editor/schema";
2
+ import { Container, Texture } from "pixi.js";
3
+ import { NodeView } from "./NodeView.js";
4
+ export declare class ContainerNodeView extends NodeView {
5
+ protected syncContent(): void;
6
+ }
7
+ /** Layout groups may optionally paint one image behind their managed children. No asset means no content/view at all. */
8
+ export declare class LayoutGroupNodeView extends NodeView {
9
+ private readonly layoutContent;
10
+ private background?;
11
+ constructor(textures: ReadonlyMap<string, Texture> | undefined);
12
+ get layoutTarget(): Container;
13
+ addLayoutChild<T extends Container[]>(...children: T): T[0];
14
+ protected syncContent(node: UINode, transform: UINode["transform"]): void;
15
+ }
16
+ export declare class ImageNodeView extends NodeView {
17
+ constructor(assetId: string, textures: ReadonlyMap<string, Texture> | undefined);
18
+ protected syncContent(node: UINode, transform: UINode["transform"]): void;
19
+ }
20
+ export declare class TextNodeView extends NodeView {
21
+ private readonly fonts?;
22
+ constructor(text: string, fonts?: ReadonlyMap<string, string> | undefined);
23
+ protected syncContent(node: UINode, transform: UINode["transform"]): void;
24
+ }
25
+ export declare class PrefabInstanceNodeView extends NodeView {
26
+ constructor(expanded: Container | undefined);
27
+ protected syncContent(_node: UINode, transform: UINode["transform"]): void;
28
+ }
29
+ //# sourceMappingURL=basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/views/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAA0B,OAAO,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,iBAAkB,SAAQ,QAAQ;IAC7C,SAAS,CAAC,WAAW,IAAI,IAAI;CAC9B;AAED,yHAAyH;AACzH,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAO9D,IAAI,YAAY,IAAI,SAAS,CAA+B;IAE5D,cAAc,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAI3D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAW1E;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAM/E,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAQ1E;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACd,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAArC,IAAI,EAAE,MAAM,EAAmB,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,YAAA;IAK9E,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAY1E;AAED,qBAAa,sBAAuB,SAAQ,QAAQ;gBACtC,QAAQ,EAAE,SAAS,GAAG,SAAS;IAK3C,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;CAG3E"}