@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,92 @@
1
+ import { Container, Graphics, Sprite, Text } from "pixi.js";
2
+ import { NodeView } from "./NodeView.js";
3
+ export class ContainerNodeView extends NodeView {
4
+ syncContent() { }
5
+ }
6
+ /** Layout groups may optionally paint one image behind their managed children. No asset means no content/view at all. */
7
+ export class LayoutGroupNodeView extends NodeView {
8
+ layoutContent = new Container();
9
+ background;
10
+ constructor(textures) {
11
+ super(textures);
12
+ // Yoga owns this inner container only. The NodeView itself retains the authored transform,
13
+ // pivot and grab rectangle used by both editor gizmos and runtime interaction.
14
+ super.addChild(this.layoutContent);
15
+ }
16
+ get layoutTarget() { return this.layoutContent; }
17
+ addLayoutChild(...children) {
18
+ return this.layoutContent.addChild(...children);
19
+ }
20
+ syncContent(node, transform) {
21
+ if (node.type !== "horizontal-layout" && node.type !== "vertical-layout" && node.type !== "grid-layout")
22
+ return;
23
+ const texture = node.backgroundAssetId === undefined ? undefined : this.textureFor(node.backgroundAssetId);
24
+ if (texture === undefined) {
25
+ if (this.background !== undefined) {
26
+ super.removeChild(this.background);
27
+ this.background.destroy();
28
+ this.background = undefined;
29
+ }
30
+ return;
31
+ }
32
+ if (this.background === undefined) {
33
+ this.background = new Sprite(texture);
34
+ super.addChildAt(this.background, 0);
35
+ }
36
+ else if (this.background.texture !== texture)
37
+ this.background.texture = texture;
38
+ this.background.setSize(transform.width, transform.height);
39
+ }
40
+ }
41
+ export class ImageNodeView extends NodeView {
42
+ constructor(assetId, textures) {
43
+ super(textures);
44
+ const texture = this.textureFor(assetId);
45
+ this.setContent(texture !== undefined ? new Sprite(texture) : new Graphics());
46
+ }
47
+ syncContent(node, transform) {
48
+ const texture = node.type === "image" ? this.textureFor(node.assetId) : undefined;
49
+ // Keep the Sprite and its layout rectangle stable when its image asset changes.
50
+ if (this.content instanceof Sprite && texture !== undefined && this.content.texture !== texture)
51
+ this.content.texture = texture;
52
+ if (this.content instanceof Sprite)
53
+ this.content.setSize(transform.width, transform.height);
54
+ else if (this.content instanceof Graphics)
55
+ this.content.clear().rect(0, 0, transform.width, transform.height).fill(0x4a5568).stroke({ width: 1, color: 0x94a3b8 });
56
+ if (this.content !== undefined)
57
+ this.content.alpha = node.type === "image" ? node.opacity ?? 1 : 1;
58
+ }
59
+ }
60
+ export class TextNodeView extends NodeView {
61
+ fonts;
62
+ constructor(text, fonts) {
63
+ super();
64
+ this.fonts = fonts;
65
+ this.setContent(new Text({ text, style: { fontFamily: "Arial", fontSize: 24, fill: 0xffffff } }));
66
+ }
67
+ syncContent(node, transform) {
68
+ if (node.type !== "text" || !(this.content instanceof Text))
69
+ return;
70
+ this.content.text = node.text;
71
+ const style = node.style;
72
+ if (style === undefined)
73
+ return;
74
+ this.content.style = { fontFamily: style.fontAssetId === undefined ? style.fontFamily : this.fonts?.get(style.fontAssetId) ?? style.fontFamily, fontSize: style.fontSize, fontWeight: style.fontWeight, fontStyle: style.fontStyle, fill: style.fill, align: style.align, wordWrap: style.wordWrap, breakWords: style.breakWords, wordWrapWidth: transform.width, lineHeight: style.lineHeight, letterSpacing: style.letterSpacing, stroke: style.stroke === undefined ? undefined : { color: style.stroke.color, width: style.stroke.width } };
75
+ // Headless loaders and schema tests intentionally have no browser canvas. In that boundary
76
+ // text still owns its authored rectangle; browser rendering keeps the precise measurement.
77
+ const bounds = typeof globalThis.document === "undefined" ? { x: 0, y: 0, width: 0, height: 0 } : this.content.getLocalBounds();
78
+ this.content.x = style.align === "center" ? (transform.width - bounds.width) / 2 - bounds.x : style.align === "right" ? transform.width - bounds.width - bounds.x : -bounds.x;
79
+ this.content.y = style.verticalAlign === "middle" ? (transform.height - bounds.height) / 2 - bounds.y : style.verticalAlign === "bottom" ? transform.height - bounds.height - bounds.y : -bounds.y;
80
+ }
81
+ }
82
+ export class PrefabInstanceNodeView extends NodeView {
83
+ constructor(expanded) {
84
+ super();
85
+ this.setContent(expanded ?? new Graphics());
86
+ }
87
+ syncContent(_node, transform) {
88
+ if (this.content instanceof Graphics)
89
+ this.content.clear().rect(0, 0, transform.width, transform.height).fill(0xff00ff);
90
+ }
91
+ }
92
+ //# sourceMappingURL=basic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/views/basic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type ParticleEffectDefinition, type UINode } from "@pixi-ui-editor/schema";
2
+ import { type SkeletonData } from "@esotericsoftware/spine-pixi-v8";
3
+ import type { Sound } from "@pixi/sound";
4
+ import { Container, Texture } from "pixi.js";
5
+ import { NodeView, type SceneInteractionMode } from "./NodeView.js";
6
+ export declare function createNodeView(node: UINode, interaction: SceneInteractionMode, textures?: ReadonlyMap<string, Texture>, spines?: ReadonlyMap<string, SkeletonData>, expandPrefab?: (prefabId: string) => Container | undefined, fonts?: ReadonlyMap<string, string>, sounds?: ReadonlyMap<string, Sound>, effect?: ParticleEffectDefinition): NodeView;
7
+ /**
8
+ * Every asset a node references: the image, the Spine data, or each of a button's state images.
9
+ * Single source of truth for "which assets does this node use" — texture loading and the editor's
10
+ * usage count both read it, so a new node type can never silently drop out of one of them.
11
+ */
12
+ export declare function collectNodeAssetIds(node: UINode): string[];
13
+ //# sourceMappingURL=createNodeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeView.d.ts","sourceRoot":"","sources":["../../src/views/createNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,wBAAwB,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAI7C,OAAO,EAAE,QAAQ,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAMpE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,QAAQ,CA6BtV;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAyC1D"}
@@ -0,0 +1,89 @@
1
+ import { BUTTON_STATE_KEYS } from "@pixi-ui-editor/schema";
2
+ import { ButtonNodeView } from "./ButtonNodeView.js";
3
+ import { ContainerNodeView, ImageNodeView, LayoutGroupNodeView, PrefabInstanceNodeView, TextNodeView } from "./basic.js";
4
+ import { InputNodeView } from "./InputNodeView.js";
5
+ import { ScrollViewNodeView } from "./ScrollViewNodeView.js";
6
+ import { SpineNodeView } from "./SpineNodeView.js";
7
+ import { ProgressBarNodeView, SliderNodeView } from "./ValueControlNodeViews.js";
8
+ import { ParticleEmitterNodeView } from "./ParticleEmitterNodeView.js";
9
+ export function createNodeView(node, interaction, textures, spines, expandPrefab, fonts, sounds, effect) {
10
+ switch (node.type) {
11
+ case "container":
12
+ return new ContainerNodeView();
13
+ case "horizontal-layout":
14
+ case "vertical-layout":
15
+ case "grid-layout":
16
+ return new LayoutGroupNodeView(textures);
17
+ case "scroll-view":
18
+ return new ScrollViewNodeView(node, textures, interaction);
19
+ case "image":
20
+ return new ImageNodeView(node.assetId, textures);
21
+ case "text":
22
+ return new TextNodeView(node.text, fonts);
23
+ case "spine":
24
+ return new SpineNodeView(spines?.get(node.assetId), node.animation, node.loop ?? true);
25
+ case "button":
26
+ return new ButtonNodeView(node, textures, interaction, sounds);
27
+ case "input":
28
+ return new InputNodeView(node, textures, interaction, fonts);
29
+ case "slider":
30
+ return new SliderNodeView(node, textures, interaction, fonts);
31
+ case "progress-bar":
32
+ return new ProgressBarNodeView(node, textures);
33
+ case "particle-emitter":
34
+ return effect === undefined ? new ContainerNodeView() : new ParticleEmitterNodeView(effect, textures);
35
+ case "prefab-instance":
36
+ return new PrefabInstanceNodeView(expandPrefab?.(node.prefabId));
37
+ }
38
+ }
39
+ /**
40
+ * Every asset a node references: the image, the Spine data, or each of a button's state images.
41
+ * Single source of truth for "which assets does this node use" — texture loading and the editor's
42
+ * usage count both read it, so a new node type can never silently drop out of one of them.
43
+ */
44
+ export function collectNodeAssetIds(node) {
45
+ switch (node.type) {
46
+ case "image":
47
+ case "spine":
48
+ return [node.assetId];
49
+ case "button":
50
+ return [
51
+ ...BUTTON_STATE_KEYS
52
+ .map((state) => node.states[`${state}AssetId`])
53
+ .filter((assetId) => assetId !== undefined),
54
+ ...[node.sounds?.pressAssetId, node.sounds?.hoverAssetId].filter((assetId) => assetId !== undefined),
55
+ ];
56
+ case "container":
57
+ case "prefab-instance":
58
+ return [];
59
+ case "horizontal-layout":
60
+ case "vertical-layout":
61
+ case "grid-layout": {
62
+ const backgroundAssetId = node.backgroundAssetId;
63
+ return backgroundAssetId === undefined ? [] : [backgroundAssetId];
64
+ }
65
+ case "scroll-view":
66
+ return [];
67
+ case "text":
68
+ return node.style?.fontAssetId === undefined ? [] : [node.style.fontAssetId];
69
+ case "input": {
70
+ const ids = [];
71
+ if (node.backgroundAssetId !== undefined)
72
+ ids.push(node.backgroundAssetId);
73
+ if (node.textStyle.fontAssetId !== undefined)
74
+ ids.push(node.textStyle.fontAssetId);
75
+ return ids;
76
+ }
77
+ case "slider": {
78
+ const ids = [node.backgroundAssetId, node.fillAssetId, node.handleAssetId];
79
+ if (node.valueTextStyle?.fontAssetId !== undefined)
80
+ ids.push(node.valueTextStyle.fontAssetId);
81
+ return ids;
82
+ }
83
+ case "progress-bar":
84
+ return [node.backgroundAssetId, node.fillAssetId];
85
+ case "particle-emitter":
86
+ return [];
87
+ }
88
+ }
89
+ //# sourceMappingURL=createNodeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createNodeView.js","sourceRoot":"","sources":["../../src/views/createNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA8C,MAAM,wBAAwB,CAAC;AAIvG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,WAAiC,EAAE,QAAuC,EAAE,MAA0C,EAAE,YAA0D,EAAE,KAAmC,EAAE,MAAmC,EAAE,MAAiC;IAC1U,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,KAAK,mBAAmB,CAAC;QACzB,KAAK,iBAAiB,CAAC;QACvB,KAAK,aAAa;YAChB,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,aAAa;YAChB,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC7D,KAAK,OAAO;YACV,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,KAAK,MAAM;YACT,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,KAAK,OAAO;YACV,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACzF,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACjE,KAAK,OAAO;YACV,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAC/D,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAChE,KAAK,cAAc;YACjB,OAAO,IAAI,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjD,KAAK,kBAAkB;YACrB,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxG,KAAK,iBAAiB;YACpB,OAAO,IAAI,sBAAsB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO;gBACL,GAAG,iBAAiB;qBACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;qBAC9C,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC;gBAC9D,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC;aACxH,CAAC;QACJ,KAAK,WAAW,CAAC;QACjB,KAAK,iBAAiB;YACpB,OAAO,EAAE,CAAC;QACZ,KAAK,mBAAmB,CAAC;QACzB,KAAK,iBAAiB,CAAC;QACvB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACjD,OAAO,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACpE,CAAC;QACD,KAAK,aAAa;YAChB,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/E,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC3E,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACnF,OAAO,GAAG,CAAC;QACb,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3E,IAAI,IAAI,CAAC,cAAc,EAAE,WAAW,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAC9F,OAAO,GAAG,CAAC;QACb,CAAC;QACD,KAAK,cAAc;YACjB,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,KAAK,kBAAkB;YACrB,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@pixi-ui-editor/runtime-pixi",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/AlexMariacho/pixi-ui-editor.git",
8
+ "directory": "packages/runtime-pixi"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "exports": {
17
+ ".": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "@esotericsoftware/spine-pixi-v8": "^4.3.10",
24
+ "@pixi/layout": "3.2.1",
25
+ "@pixi/sound": "^6.0.1",
26
+ "@pixi/ui": "2.3.2",
27
+ "pixi.js": "^8.19.0",
28
+ "yoga-layout": "^3.2.1",
29
+ "@pixi-ui-editor/schema": "0.1.0"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc -p tsconfig.json",
33
+ "typecheck": "tsc --noEmit -p tsconfig.json",
34
+ "test": "vitest run"
35
+ }
36
+ }