@needle-tools/engine 5.0.0-next.40cc839 → 5.1.0-experimental.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 (183) hide show
  1. package/components.needle.json +1 -1
  2. package/dist/generateMeshBVH.worker-DT9A2Hrc.js +1 -0
  3. package/dist/gltf-progressive-3BwW4ETO.min.js +10 -0
  4. package/dist/gltf-progressive-ByD1UX0A.umd.cjs +10 -0
  5. package/dist/{gltf-progressive-Cl167Vjx.js → gltf-progressive-DwWaVr0o.js} +412 -394
  6. package/dist/gltf-progressive.worker-DpfUjn1n.js +3 -0
  7. package/dist/{materialx-qPScBWhj.min.js → materialx-9KHBidZa.min.js} +1 -1
  8. package/dist/{materialx-4ApD6Vz5.js → materialx-BBDu8W5P.js} +1 -1
  9. package/dist/{materialx-D0XUnhBY.umd.cjs → materialx-hLP3E8AA.umd.cjs} +2 -2
  10. package/dist/{needle-engine.bundle-CAt_h_GH.umd.cjs → needle-engine.bundle-BOAJ6UPK.umd.cjs} +123 -123
  11. package/dist/{needle-engine.bundle-BLroQ2QT.min.js → needle-engine.bundle-CVsBkUR2.min.js} +110 -110
  12. package/dist/{needle-engine.bundle-DysB2Idj.js → needle-engine.bundle-TgPY0fGG.js} +2143 -2088
  13. package/dist/needle-engine.d.ts +102 -44
  14. package/dist/needle-engine.js +480 -476
  15. package/dist/needle-engine.min.js +1 -1
  16. package/dist/needle-engine.umd.cjs +1 -1
  17. package/dist/{postprocessing-B_9sKVU7.min.js → postprocessing-BZfyAdCY.min.js} +1 -1
  18. package/dist/{postprocessing-WDc9WwI3.js → postprocessing-CXlA3QA6.js} +1 -1
  19. package/dist/{postprocessing-B2wb6pzI.umd.cjs → postprocessing-Dwy7Hz_T.umd.cjs} +38 -38
  20. package/dist/three-examples.js +4760 -3641
  21. package/dist/three-examples.min.js +17 -35
  22. package/dist/three-examples.umd.cjs +16 -34
  23. package/dist/three.js +48533 -28562
  24. package/dist/three.min.js +716 -502
  25. package/dist/three.umd.cjs +720 -506
  26. package/dist/{vendor-CntUvmJu.umd.cjs → vendor-BI4TX0aC.umd.cjs} +9 -9
  27. package/dist/{vendor-DPbfJJ4d.min.js → vendor-BgzAK9of.min.js} +1 -1
  28. package/dist/{vendor-vHLk8sXu.js → vendor-CwL-uvVy.js} +1 -1
  29. package/lib/engine/engine_animation.js +1 -1
  30. package/lib/engine/engine_animation.js.map +1 -1
  31. package/lib/engine/engine_audio.js.map +1 -1
  32. package/lib/engine/engine_context.js +3 -6
  33. package/lib/engine/engine_context.js.map +1 -1
  34. package/lib/engine/engine_create_objects.js +0 -1
  35. package/lib/engine/engine_create_objects.js.map +1 -1
  36. package/lib/engine/engine_element.d.ts +113 -0
  37. package/lib/engine/engine_element.js +833 -0
  38. package/lib/engine/engine_element.js.map +1 -0
  39. package/lib/engine/engine_element_attributes.d.ts +72 -0
  40. package/lib/engine/engine_element_attributes.js +2 -0
  41. package/lib/engine/engine_element_attributes.js.map +1 -0
  42. package/lib/engine/engine_element_extras.d.ts +6 -0
  43. package/lib/engine/engine_element_extras.js +14 -0
  44. package/lib/engine/engine_element_extras.js.map +1 -0
  45. package/lib/engine/engine_element_loading.d.ts +44 -0
  46. package/lib/engine/engine_element_loading.js +350 -0
  47. package/lib/engine/engine_element_loading.js.map +1 -0
  48. package/lib/engine/engine_element_overlay.d.ts +21 -0
  49. package/lib/engine/engine_element_overlay.js +167 -0
  50. package/lib/engine/engine_element_overlay.js.map +1 -0
  51. package/lib/engine/engine_license.js.map +1 -1
  52. package/lib/engine/engine_pmrem.js +2 -2
  53. package/lib/engine/engine_pmrem.js.map +1 -1
  54. package/lib/engine/engine_scenetools.d.ts +62 -0
  55. package/lib/engine/engine_scenetools.js +337 -0
  56. package/lib/engine/engine_scenetools.js.map +1 -0
  57. package/lib/engine/engine_serialization_builtin_serializer.d.ts +1 -1
  58. package/lib/engine/engine_test_utils.d.ts +39 -0
  59. package/lib/engine/engine_test_utils.js +84 -0
  60. package/lib/engine/engine_test_utils.js.map +1 -0
  61. package/lib/engine/engine_three_utils.js.map +1 -1
  62. package/lib/engine/engine_time.js +4 -3
  63. package/lib/engine/engine_time.js.map +1 -1
  64. package/lib/engine/engine_ui.d.ts +25 -0
  65. package/lib/engine/engine_ui.dummy_canvas.d.ts +2 -0
  66. package/lib/engine/engine_ui.dummy_canvas.js +55 -0
  67. package/lib/engine/engine_ui.dummy_canvas.js.map +1 -0
  68. package/lib/engine/engine_ui.js +168 -0
  69. package/lib/engine/engine_ui.js.map +1 -0
  70. package/lib/engine/extensions/NEEDLE_lightmaps.js +2 -2
  71. package/lib/engine/extensions/NEEDLE_lightmaps.js.map +1 -1
  72. package/lib/engine/extensions/NEEDLE_pmrem.d.ts +1 -1
  73. package/lib/engine/webcomponents/icons.js +3 -2
  74. package/lib/engine/webcomponents/icons.js.map +1 -1
  75. package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -0
  76. package/lib/engine/webcomponents/needle-engine.attributes.js +2 -0
  77. package/lib/engine/webcomponents/needle-engine.attributes.js.map +1 -0
  78. package/lib/engine-components/AudioSource.js +1 -1
  79. package/lib/engine-components/AudioSource.js.map +1 -1
  80. package/lib/engine-components/Light.d.ts +3 -0
  81. package/lib/engine-components/Light.js +39 -31
  82. package/lib/engine-components/Light.js.map +1 -1
  83. package/lib/engine-components/OrbitControls.js +2 -1
  84. package/lib/engine-components/OrbitControls.js.map +1 -1
  85. package/lib/engine-components/SpriteRenderer.d.ts +1 -1
  86. package/lib/engine-components/VideoPlayer.d.ts +1 -1
  87. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -1
  88. package/lib/engine-components/export/usdz/extensions/Animation.js +1 -0
  89. package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -1
  90. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +1 -1
  91. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
  92. package/lib/engine-components/particlesystem/ParticleSystem.d.ts +1 -1
  93. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +1 -1
  94. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  95. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  96. package/lib/engine-components/ui/BaseUIComponent_Uikit.d.ts +54 -0
  97. package/lib/engine-components/ui/BaseUIComponent_Uikit.js +114 -0
  98. package/lib/engine-components/ui/BaseUIComponent_Uikit.js.map +1 -0
  99. package/lib/engine-components/ui/BaseUikitComponent.d.ts +54 -0
  100. package/lib/engine-components/ui/BaseUikitComponent.js +114 -0
  101. package/lib/engine-components/ui/BaseUikitComponent.js.map +1 -0
  102. package/lib/engine-components/ui/Button.legacy.d.ts +68 -0
  103. package/lib/engine-components/ui/Button.legacy.js +320 -0
  104. package/lib/engine-components/ui/Button.legacy.js.map +1 -0
  105. package/lib/engine-components/ui/ButtonUikit.d.ts +51 -0
  106. package/lib/engine-components/ui/ButtonUikit.js +187 -0
  107. package/lib/engine-components/ui/ButtonUikit.js.map +1 -0
  108. package/lib/engine-components/ui/Canvas.js +2 -2
  109. package/lib/engine-components/ui/Canvas.js.map +1 -1
  110. package/lib/engine-components/ui/Canvas.legacy.d.ts +76 -0
  111. package/lib/engine-components/ui/Canvas.legacy.js +409 -0
  112. package/lib/engine-components/ui/Canvas.legacy.js.map +1 -0
  113. package/lib/engine-components/ui/CanvasUikit.d.ts +68 -0
  114. package/lib/engine-components/ui/CanvasUikit.js +289 -0
  115. package/lib/engine-components/ui/CanvasUikit.js.map +1 -0
  116. package/lib/engine-components/ui/Graphic.d.ts +3 -3
  117. package/lib/engine-components/ui/Graphic.js +6 -2
  118. package/lib/engine-components/ui/Graphic.js.map +1 -1
  119. package/lib/engine-components/ui/Graphic.legacy.d.ts +55 -0
  120. package/lib/engine-components/ui/Graphic.legacy.js +268 -0
  121. package/lib/engine-components/ui/Graphic.legacy.js.map +1 -0
  122. package/lib/engine-components/ui/GraphicUikit.d.ts +21 -0
  123. package/lib/engine-components/ui/GraphicUikit.js +65 -0
  124. package/lib/engine-components/ui/GraphicUikit.js.map +1 -0
  125. package/lib/engine-components/ui/Image.js.map +1 -1
  126. package/lib/engine-components/ui/Image.legacy.d.ts +39 -0
  127. package/lib/engine-components/ui/Image.legacy.js +121 -0
  128. package/lib/engine-components/ui/Image.legacy.js.map +1 -0
  129. package/lib/engine-components/ui/ImageUikit.d.ts +22 -0
  130. package/lib/engine-components/ui/ImageUikit.js +97 -0
  131. package/lib/engine-components/ui/ImageUikit.js.map +1 -0
  132. package/lib/engine-components/ui/RenderMode.d.ts +14 -0
  133. package/lib/engine-components/ui/RenderMode.js +16 -0
  134. package/lib/engine-components/ui/RenderMode.js.map +1 -0
  135. package/lib/engine-components/ui/Text.d.ts +64 -11
  136. package/lib/engine-components/ui/Text.js +154 -45
  137. package/lib/engine-components/ui/Text.js.map +1 -1
  138. package/lib/engine-components/ui/Text.legacy.d.ts +81 -0
  139. package/lib/engine-components/ui/Text.legacy.js +548 -0
  140. package/lib/engine-components/ui/Text.legacy.js.map +1 -0
  141. package/lib/engine-components/ui/TextUikit.d.ts +42 -0
  142. package/lib/engine-components/ui/TextUikit.js +164 -0
  143. package/lib/engine-components/ui/TextUikit.js.map +1 -0
  144. package/lib/engine-components/ui/index.d.ts +1 -0
  145. package/lib/engine-components/ui/index.js +1 -0
  146. package/lib/engine-components/ui/index.js.map +1 -1
  147. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +1 -1
  148. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -0
  149. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +46 -0
  150. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js.map +1 -0
  151. package/package.json +5 -5
  152. package/plugins/common/buildinfo.d.ts +6 -0
  153. package/plugins/vite/ai.d.ts +7 -8
  154. package/plugins/vite/ai.js +95 -20
  155. package/plugins/vite/alias.js +6 -0
  156. package/plugins/vite/dependencies.js +7 -0
  157. package/src/engine/engine_animation.ts +1 -1
  158. package/src/engine/engine_audio.ts +1 -1
  159. package/src/engine/engine_context.ts +3 -6
  160. package/src/engine/engine_create_objects.ts +0 -1
  161. package/src/engine/engine_license.ts +0 -2
  162. package/src/engine/engine_pmrem.ts +3 -3
  163. package/src/engine/engine_three_utils.ts +2 -2
  164. package/src/engine/engine_time.ts +4 -3
  165. package/src/engine/extensions/NEEDLE_lightmaps.ts +3 -3
  166. package/src/engine/webcomponents/icons.ts +3 -2
  167. package/src/engine-components/AudioSource.ts +1 -1
  168. package/src/engine-components/Light.ts +39 -31
  169. package/src/engine-components/OrbitControls.ts +2 -2
  170. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2 -2
  171. package/src/engine-components/export/usdz/extensions/Animation.ts +6 -5
  172. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1 -1
  173. package/src/engine-components/postprocessing/PostProcessingHandler.ts +3 -3
  174. package/src/engine-components/timeline/TimelineTracks.ts +2 -2
  175. package/src/engine-components/ui/Canvas.ts +2 -2
  176. package/src/engine-components/ui/Graphic.ts +7 -3
  177. package/src/engine-components/ui/Image.ts +1 -1
  178. package/src/engine-components/ui/Text.ts +170 -52
  179. package/src/engine-components/ui/index.ts +2 -1
  180. package/dist/generateMeshBVH.worker-DiCnZlf3.js +0 -21
  181. package/dist/gltf-progressive-BryRjllq.min.js +0 -10
  182. package/dist/gltf-progressive-DJBMx-zB.umd.cjs +0 -10
  183. package/dist/gltf-progressive.worker-BqODMeeW.js +0 -23
@@ -0,0 +1,81 @@
1
+ import { Graphic } from './Graphic.js';
2
+ import { type ICanvas, type ICanvasEventReceiver, type IHasAlphaFactor } from './Interfaces.js';
3
+ export declare enum TextAnchor {
4
+ UpperLeft = 0,
5
+ UpperCenter = 1,
6
+ UpperRight = 2,
7
+ MiddleLeft = 3,
8
+ MiddleCenter = 4,
9
+ MiddleRight = 5,
10
+ LowerLeft = 6,
11
+ LowerCenter = 7,
12
+ LowerRight = 8
13
+ }
14
+ export declare enum VerticalWrapMode {
15
+ Truncate = 0,
16
+ Overflow = 1
17
+ }
18
+ declare enum HorizontalWrapMode {
19
+ Wrap = 0,
20
+ Overflow = 1
21
+ }
22
+ export declare enum FontStyle {
23
+ Normal = 0,
24
+ Bold = 1,
25
+ Italic = 2,
26
+ BoldAndItalic = 3
27
+ }
28
+ /**
29
+ * Text is a UI component that displays text in the user interface.
30
+ *
31
+ * @summary Display text in the UI
32
+ * @category User Interface
33
+ * @group Components
34
+ */
35
+ export declare class Text extends Graphic implements IHasAlphaFactor, ICanvasEventReceiver {
36
+ alignment: TextAnchor;
37
+ verticalOverflow: VerticalWrapMode;
38
+ horizontalOverflow: HorizontalWrapMode;
39
+ lineSpacing: number;
40
+ supportRichText: boolean;
41
+ font?: string;
42
+ fontStyle: FontStyle;
43
+ setAlphaFactor(factor: number): void;
44
+ get text(): string;
45
+ set text(val: string);
46
+ private set_text;
47
+ get fontSize(): number;
48
+ set fontSize(val: number);
49
+ private sRGBTextColor;
50
+ protected onColorChanged(): void;
51
+ onParentRectTransformChanged(): void;
52
+ onBeforeCanvasRender(_canvas: ICanvas): void;
53
+ private updateOverflow;
54
+ protected onCreate(_opts: any): void;
55
+ onAfterAddedToScene(): void;
56
+ private _text;
57
+ private _fontSize;
58
+ private _textMeshUi;
59
+ private getTextOpts;
60
+ onEnable(): void;
61
+ onDisable(): void;
62
+ private getAlignment;
63
+ private feedText;
64
+ private _didHandleTextRenderOnTop;
65
+ private handleTextRenderOnTop;
66
+ private renderOnTopCoroutine;
67
+ private handleTag;
68
+ private getText;
69
+ private getNextTag;
70
+ /**
71
+ * Update provided opts to have a proper fontDefinition : family+weight+style
72
+ * Ensure Family and Variant are registered in FontLibrary
73
+ *
74
+ * @param opts
75
+ * @param fontStyle
76
+ * @private
77
+ */
78
+ private setFont;
79
+ private getFamilyNameWithCorrectSuffix;
80
+ }
81
+ export {};
@@ -0,0 +1,548 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Color } from 'three';
8
+ import * as ThreeMeshUI from 'three-mesh-ui';
9
+ import { serializable } from '../../engine/engine_serialization_decorator.js';
10
+ import { getParam } from '../../engine/engine_utils.js';
11
+ import { Graphic } from './Graphic.js';
12
+ import { updateRenderSettings } from './Utils.js';
13
+ const debug = getParam("debugtext");
14
+ export var TextAnchor;
15
+ (function (TextAnchor) {
16
+ TextAnchor[TextAnchor["UpperLeft"] = 0] = "UpperLeft";
17
+ TextAnchor[TextAnchor["UpperCenter"] = 1] = "UpperCenter";
18
+ TextAnchor[TextAnchor["UpperRight"] = 2] = "UpperRight";
19
+ TextAnchor[TextAnchor["MiddleLeft"] = 3] = "MiddleLeft";
20
+ TextAnchor[TextAnchor["MiddleCenter"] = 4] = "MiddleCenter";
21
+ TextAnchor[TextAnchor["MiddleRight"] = 5] = "MiddleRight";
22
+ TextAnchor[TextAnchor["LowerLeft"] = 6] = "LowerLeft";
23
+ TextAnchor[TextAnchor["LowerCenter"] = 7] = "LowerCenter";
24
+ TextAnchor[TextAnchor["LowerRight"] = 8] = "LowerRight";
25
+ })(TextAnchor || (TextAnchor = {}));
26
+ export var VerticalWrapMode;
27
+ (function (VerticalWrapMode) {
28
+ VerticalWrapMode[VerticalWrapMode["Truncate"] = 0] = "Truncate";
29
+ VerticalWrapMode[VerticalWrapMode["Overflow"] = 1] = "Overflow";
30
+ })(VerticalWrapMode || (VerticalWrapMode = {}));
31
+ var HorizontalWrapMode;
32
+ (function (HorizontalWrapMode) {
33
+ HorizontalWrapMode[HorizontalWrapMode["Wrap"] = 0] = "Wrap";
34
+ HorizontalWrapMode[HorizontalWrapMode["Overflow"] = 1] = "Overflow";
35
+ })(HorizontalWrapMode || (HorizontalWrapMode = {}));
36
+ export var FontStyle;
37
+ (function (FontStyle) {
38
+ FontStyle[FontStyle["Normal"] = 0] = "Normal";
39
+ FontStyle[FontStyle["Bold"] = 1] = "Bold";
40
+ FontStyle[FontStyle["Italic"] = 2] = "Italic";
41
+ FontStyle[FontStyle["BoldAndItalic"] = 3] = "BoldAndItalic";
42
+ })(FontStyle || (FontStyle = {}));
43
+ /**
44
+ * Text is a UI component that displays text in the user interface.
45
+ *
46
+ * @summary Display text in the UI
47
+ * @category User Interface
48
+ * @group Components
49
+ */
50
+ export class Text extends Graphic {
51
+ alignment = TextAnchor.UpperLeft;
52
+ verticalOverflow = VerticalWrapMode.Truncate;
53
+ horizontalOverflow = HorizontalWrapMode.Wrap;
54
+ lineSpacing = 1;
55
+ supportRichText = false;
56
+ font;
57
+ fontStyle = FontStyle.Normal;
58
+ // private _alphaFactor : number = 1;
59
+ setAlphaFactor(factor) {
60
+ super.setAlphaFactor(factor);
61
+ this.uiObject?.set({ fontOpacity: this.color.alpha * this.alphaFactor });
62
+ this.markDirty();
63
+ }
64
+ get text() {
65
+ return this._text;
66
+ }
67
+ set text(val) {
68
+ if (val !== this._text) {
69
+ this._text = val;
70
+ this.feedText(this.text, this.supportRichText);
71
+ this.markDirty();
72
+ }
73
+ }
74
+ set_text(val) {
75
+ this.text = val;
76
+ }
77
+ get fontSize() {
78
+ return this._fontSize;
79
+ }
80
+ set fontSize(val) {
81
+ // Setting that kind of property in a parent, would cascade to each 'non-overrided' children.
82
+ this._fontSize = val;
83
+ this.uiObject?.set({ fontSize: val });
84
+ }
85
+ sRGBTextColor = new Color(1, 0, 1);
86
+ onColorChanged() {
87
+ this.sRGBTextColor.copy(this.color);
88
+ this.sRGBTextColor.convertLinearToSRGB();
89
+ this.uiObject?.set({ color: this.sRGBTextColor, fontOpacity: this.color.alpha });
90
+ }
91
+ onParentRectTransformChanged() {
92
+ super.onParentRectTransformChanged();
93
+ if (this.uiObject) {
94
+ this.updateOverflow();
95
+ }
96
+ }
97
+ // onBeforeRender(): void {
98
+ // // TODO TMUI @swingingtom this is so we don't have text clipping
99
+ // if (this.uiObject && (this.Canvas?.screenspace || this.context.isInVR)) {
100
+ // this.updateOverflow();
101
+ // }
102
+ // }
103
+ onBeforeCanvasRender(_canvas) {
104
+ // ensure the text clipping matrix is updated (this was a problem with multiple screenspace canvases due to canvas reparenting)
105
+ this.updateOverflow();
106
+ }
107
+ updateOverflow() {
108
+ // HACK: force the text overflow to update
109
+ const overflow = this.uiObject?._overflow;
110
+ if (overflow) {
111
+ overflow._needsUpdate = true;
112
+ // the screenspace canvas does force an update, no need to mark dirty here
113
+ }
114
+ }
115
+ onCreate(_opts) {
116
+ if (debug)
117
+ console.log(this);
118
+ if (this.horizontalOverflow == HorizontalWrapMode.Overflow) {
119
+ // Only line characters in the textContent (\n,\r\t) would be able to multiline the text
120
+ _opts.whiteSpace = 'pre';
121
+ }
122
+ if (this.verticalOverflow == VerticalWrapMode.Truncate) {
123
+ this.context.renderer.localClippingEnabled = true;
124
+ _opts.overflow = 'hidden';
125
+ }
126
+ // @marwie : this combination is currently KO. See sample "Overflow Overview"
127
+ if (this.horizontalOverflow == HorizontalWrapMode.Overflow && this.verticalOverflow == VerticalWrapMode.Truncate) {
128
+ // This could fix this combination, but would require anchors updates to replace element
129
+ // _opts.width = 'auto';
130
+ }
131
+ _opts.lineHeight = this.lineSpacing;
132
+ // @marwie : Should be fixed. Currently _opts are always fed with :
133
+ // backgroundOpacity : color.opacity
134
+ // backgroundColor : color
135
+ delete _opts.backgroundOpacity;
136
+ delete _opts.backgroundColor;
137
+ // helper to show bounds of text element
138
+ if (debug) {
139
+ _opts.backgroundColor = 0xff9900;
140
+ _opts.backgroundOpacity = 0.5;
141
+ }
142
+ const rt = this.rectTransform;
143
+ // Texts now support both options, block and inline, and inline has all default to inherit
144
+ _opts = { ..._opts, ...this.getTextOpts() };
145
+ this.getAlignment(_opts);
146
+ if (debug) {
147
+ _opts.backgroundColor = Math.random() * 0xffffff;
148
+ _opts.backgroundOpacity = 0.1;
149
+ }
150
+ this.uiObject = rt.createNewText(_opts);
151
+ this.feedText(this.text, this.supportRichText);
152
+ }
153
+ onAfterAddedToScene() {
154
+ super.onAfterAddedToScene();
155
+ this.handleTextRenderOnTop();
156
+ }
157
+ _text = "";
158
+ _fontSize = 12;
159
+ _textMeshUi = null;
160
+ getTextOpts() {
161
+ const fontSize = this.fontSize;
162
+ // if (this.canvas) {
163
+ // fontSize /= this.canvas?.scaleFactor;
164
+ // }
165
+ const textOpts = {
166
+ color: this.color,
167
+ fontOpacity: this.color.alpha,
168
+ fontSize: fontSize,
169
+ fontKerning: "normal",
170
+ };
171
+ this.setFont(textOpts, this.fontStyle);
172
+ return textOpts;
173
+ }
174
+ onEnable() {
175
+ super.onEnable();
176
+ this._didHandleTextRenderOnTop = false;
177
+ if (this.uiObject) {
178
+ // @ts-ignore
179
+ // @TODO : Evaluate the need of keeping it anonymous.
180
+ // From v7.x afterUpdate can be removed but requires a reference
181
+ this.uiObject.addAfterUpdate(() => {
182
+ // We need to update the shadow owner when the text updates
183
+ // because once the font has loaded we get new children (a new mesh)
184
+ // which is the text, it needs to be linked back to this component
185
+ // to be properly handled by the EventSystem
186
+ // since the EventSystem looks for shadow component owners to handle events
187
+ this.setShadowComponentOwner(this.uiObject);
188
+ this.markDirty();
189
+ });
190
+ }
191
+ setTimeout(() => this.markDirty(), 10);
192
+ this.canvas?.registerEventReceiver(this);
193
+ }
194
+ onDisable() {
195
+ super.onDisable();
196
+ this.canvas?.unregisterEventReceiver(this);
197
+ }
198
+ getAlignment(opts) {
199
+ opts.flexDirection = "column";
200
+ switch (this.alignment) {
201
+ case TextAnchor.UpperLeft:
202
+ case TextAnchor.MiddleLeft:
203
+ case TextAnchor.LowerLeft:
204
+ opts.textAlign = "left";
205
+ break;
206
+ case TextAnchor.UpperCenter:
207
+ case TextAnchor.MiddleCenter:
208
+ case TextAnchor.LowerCenter:
209
+ opts.textAlign = "center";
210
+ break;
211
+ case TextAnchor.UpperRight:
212
+ case TextAnchor.MiddleRight:
213
+ case TextAnchor.LowerRight:
214
+ opts.textAlign = "right";
215
+ break;
216
+ }
217
+ switch (this.alignment) {
218
+ default:
219
+ case TextAnchor.UpperLeft:
220
+ case TextAnchor.UpperCenter:
221
+ case TextAnchor.UpperRight:
222
+ opts.alignItems = "start";
223
+ break;
224
+ case TextAnchor.MiddleLeft:
225
+ case TextAnchor.MiddleCenter:
226
+ case TextAnchor.MiddleRight:
227
+ opts.alignItems = "center";
228
+ break;
229
+ case TextAnchor.LowerLeft:
230
+ case TextAnchor.LowerCenter:
231
+ case TextAnchor.LowerRight:
232
+ opts.alignItems = "end";
233
+ break;
234
+ }
235
+ return opts;
236
+ }
237
+ feedText(text, richText) {
238
+ // if (!text || text.length <= 0) return;
239
+ // if (!text ) return;
240
+ if (debug)
241
+ console.log("feedText", this.uiObject, text, richText);
242
+ if (!this.uiObject)
243
+ return;
244
+ if (!this._textMeshUi)
245
+ this._textMeshUi = [];
246
+ // this doesnt work and produces errors when length is 0:
247
+ // this.uiObject.textContent = " ";
248
+ // reset the current text (e.g. when switching from "Hello" to "Hello <b>World</b>")
249
+ // @TODO swingingtom: this is a hack to reset the text content, not sure how to do that right
250
+ this.uiObject.children.length = 0;
251
+ if (!richText || text.length === 0) {
252
+ //@TODO: @swingingtom how would the text content be set?
253
+ //@ts-ignore
254
+ this.uiObject.textContent = text;
255
+ }
256
+ else {
257
+ let currentTag = this.getNextTag(text);
258
+ if (!currentTag) {
259
+ //@ts-ignore
260
+ // we have to set it to empty string, otherwise TMUI won't update it @swingingtom
261
+ this.uiObject.textContent = ""; // <
262
+ this.setOptions({ textContent: text });
263
+ return;
264
+ }
265
+ else if (currentTag.startIndex > 0) {
266
+ // First segment should also clear children inlines
267
+ for (let i = this.uiObject.children.length - 1; i >= 0; i--) {
268
+ const child = this.uiObject.children[i];
269
+ // @ts-ignore
270
+ if (child.isUI) {
271
+ this.uiObject.remove(child);
272
+ child.clear();
273
+ }
274
+ }
275
+ const el = new ThreeMeshUI.Inline({ textContent: text.substring(0, currentTag.startIndex), color: 'inherit' });
276
+ this.uiObject.add(el);
277
+ }
278
+ const stackArray = [];
279
+ while (currentTag) {
280
+ const next = this.getNextTag(text, currentTag.endIndex);
281
+ const opts = {
282
+ fontFamily: this.uiObject?.get('fontFamily'),
283
+ color: 'inherit',
284
+ textContent: ""
285
+ };
286
+ if (next) {
287
+ opts.textContent = this.getText(text, currentTag, next);
288
+ this.handleTag(currentTag, opts, stackArray);
289
+ const el = new ThreeMeshUI.Inline(opts);
290
+ this.uiObject?.add(el);
291
+ }
292
+ else {
293
+ opts.textContent = text.substring(currentTag.endIndex);
294
+ this.handleTag(currentTag, opts, stackArray);
295
+ const el = new ThreeMeshUI.Inline(opts);
296
+ this.uiObject?.add(el);
297
+ }
298
+ currentTag = next;
299
+ }
300
+ }
301
+ }
302
+ _didHandleTextRenderOnTop = false;
303
+ handleTextRenderOnTop() {
304
+ if (this._didHandleTextRenderOnTop)
305
+ return;
306
+ this._didHandleTextRenderOnTop = true;
307
+ this.startCoroutine(this.renderOnTopCoroutine());
308
+ }
309
+ // waits for all the text objects to be ready to set the render on top setting
310
+ // @THH : this isn't true anymore. We can set mesh and material properties before their counterparts are created.
311
+ // Values would automatically be passed when created. Not sure for depthWrite but it can be added;
312
+ *renderOnTopCoroutine() {
313
+ if (!this.canvas)
314
+ return;
315
+ const updatedRendering = [];
316
+ const canvas = this.canvas;
317
+ const settings = {
318
+ renderOnTop: canvas.renderOnTop,
319
+ depthWrite: canvas.depthWrite,
320
+ doubleSided: canvas.doubleSided
321
+ };
322
+ while (true) {
323
+ let isWaitingForElementToUpdate = false;
324
+ if (this._textMeshUi) {
325
+ for (let i = 0; i < this._textMeshUi.length; i++) {
326
+ if (updatedRendering[i] === true)
327
+ continue;
328
+ isWaitingForElementToUpdate = true;
329
+ const textMeshObject = this._textMeshUi[i];
330
+ // text objects have this textContent which is the mesh
331
+ // it is not ready immediately so we have to check if it exists
332
+ // and only then setting the render on top property works
333
+ if (!textMeshObject["textContent"])
334
+ continue;
335
+ updateRenderSettings(textMeshObject, settings);
336
+ updatedRendering[i] = true;
337
+ // console.log(textMeshObject);
338
+ }
339
+ }
340
+ if (!isWaitingForElementToUpdate)
341
+ break;
342
+ yield;
343
+ }
344
+ }
345
+ handleTag(tag, opts, stackArray) {
346
+ // console.log(tag);
347
+ if (!tag.isEndTag) {
348
+ if (tag.type.includes("color")) {
349
+ const stackEntry = new TagStackEntry(tag, { color: opts.color });
350
+ stackArray.push(stackEntry);
351
+ if (tag.type.length > 6) // color=
352
+ {
353
+ const col = parseInt("0x" + tag.type.substring(7));
354
+ opts.color = col;
355
+ }
356
+ else {
357
+ // if it does not contain a color it is white
358
+ opts.color = new Color(1, 1, 1);
359
+ }
360
+ }
361
+ else if (tag.type == "b") {
362
+ this.setFont(opts, FontStyle.Bold);
363
+ const stackEntry = new TagStackEntry(tag, {
364
+ fontWeight: 700,
365
+ });
366
+ stackArray.push(stackEntry);
367
+ }
368
+ else if (tag.type == "i") {
369
+ this.setFont(opts, FontStyle.Italic);
370
+ const stackEntry = new TagStackEntry(tag, {
371
+ fontStyle: 'italic'
372
+ });
373
+ stackArray.push(stackEntry);
374
+ }
375
+ }
376
+ }
377
+ getText(text, start, end) {
378
+ return text.substring(start.endIndex, end.startIndex);
379
+ }
380
+ getNextTag(text, startIndex = 0) {
381
+ const start = text.indexOf("<", startIndex);
382
+ const end = text.indexOf(">", start);
383
+ if (start >= 0 && end >= 0) {
384
+ const tag = text.substring(start + 1, end);
385
+ return { type: tag, startIndex: start, endIndex: end + 1, isEndTag: tag.startsWith("/") };
386
+ }
387
+ return null;
388
+ }
389
+ /**
390
+ * Update provided opts to have a proper fontDefinition : family+weight+style
391
+ * Ensure Family and Variant are registered in FontLibrary
392
+ *
393
+ * @param opts
394
+ * @param fontStyle
395
+ * @private
396
+ */
397
+ setFont(opts, fontStyle) {
398
+ // @TODO : THH could be useful to uniformize font family name :
399
+ // This would ease possible html/vr matching
400
+ // - Arial instead of assets/arial
401
+ // - Arial should stay Arial instead of arial
402
+ if (!this.font)
403
+ return;
404
+ const fontName = this.font;
405
+ const familyName = this.getFamilyNameWithCorrectSuffix(fontName, fontStyle);
406
+ if (debug)
407
+ console.log("Selected font family:" + familyName);
408
+ // ensure a font family is register under this name
409
+ let fontFamily = ThreeMeshUI.FontLibrary.getFontFamily(familyName);
410
+ if (!fontFamily)
411
+ fontFamily = ThreeMeshUI.FontLibrary.addFontFamily(familyName);
412
+ // @TODO: @swingingtom how should the font be set?
413
+ //@ts-ignore
414
+ opts.fontFamily = fontFamily;
415
+ switch (fontStyle) {
416
+ default:
417
+ case FontStyle.Normal:
418
+ opts.fontWeight = 400;
419
+ opts.fontStyle = "normal";
420
+ break;
421
+ case FontStyle.Bold:
422
+ opts.fontWeight = 700;
423
+ opts.fontStyle = "normal";
424
+ break;
425
+ case FontStyle.Italic:
426
+ opts.fontWeight = 400;
427
+ opts.fontStyle = "italic";
428
+ break;
429
+ case FontStyle.BoldAndItalic:
430
+ opts.fontStyle = 'italic';
431
+ opts.fontWeight = 400;
432
+ }
433
+ // Ensure a fontVariant is registered
434
+ //@TODO: @swingingtom add type for fontWeight
435
+ let fontVariant = fontFamily.getVariant(opts.fontWeight, opts.fontStyle);
436
+ if (!fontVariant) {
437
+ let jsonPath = familyName;
438
+ if (!jsonPath?.endsWith("-msdf.json"))
439
+ jsonPath += "-msdf.json";
440
+ let texturePath = familyName;
441
+ if (!texturePath?.endsWith(".png"))
442
+ texturePath += ".png";
443
+ //@TODO: @swingingtom add type for fontWeight
444
+ //@TODO: @swingingtom addVariant return type is wrong (should be FontVariant)
445
+ fontVariant = fontFamily.addVariant(opts.fontWeight, opts.fontStyle, jsonPath, texturePath);
446
+ /** @ts-ignore */
447
+ fontVariant?.addEventListener('ready', () => {
448
+ this.markDirty();
449
+ });
450
+ }
451
+ }
452
+ getFamilyNameWithCorrectSuffix(familyName, style) {
453
+ // the URL decorator resolves the URL to absolute URLs - we need to remove the domain part since we're only interested in the path
454
+ if (familyName.startsWith("https:") || familyName.startsWith("http:")) {
455
+ const url = new URL(familyName);
456
+ familyName = url.pathname;
457
+ }
458
+ // we can only change the style for the family if the name has a suffix (e.g. Arial-Bold)
459
+ const styleSeparator = familyName.lastIndexOf('-');
460
+ if (styleSeparator < 0)
461
+ return familyName;
462
+ // Check if the font name contains a style that we don't support in the enum
463
+ // e.g. -Medium, -Black, -Thin...
464
+ const styleName = familyName.substring(styleSeparator + 1)?.toLowerCase();
465
+ if (unsupportedStyleNames.includes(styleName)) {
466
+ if (debug)
467
+ console.warn("Unsupported font style: " + styleName);
468
+ return familyName;
469
+ }
470
+ // Try find a suffix that matches the style
471
+ // We assume that if the font name is "Arial-Regular" then the bold version is "Arial-Bold"
472
+ // and if the font name is "arial-regular" then the bold version is "arial-bold"
473
+ const pathSeparatorIndex = familyName.lastIndexOf("/");
474
+ let fontBaseName = familyName;
475
+ if (pathSeparatorIndex >= 0) {
476
+ fontBaseName = fontBaseName.substring(pathSeparatorIndex + 1);
477
+ }
478
+ const isUpperCase = fontBaseName[0] === fontBaseName[0].toUpperCase();
479
+ const fontNameWithoutSuffix = familyName.substring(0, styleSeparator > pathSeparatorIndex ? styleSeparator : familyName.length);
480
+ if (debug)
481
+ console.log("Select font: ", familyName, FontStyle[style], fontBaseName, isUpperCase, fontNameWithoutSuffix);
482
+ switch (style) {
483
+ case FontStyle.Normal:
484
+ if (isUpperCase)
485
+ return fontNameWithoutSuffix + "-Regular";
486
+ else
487
+ return fontNameWithoutSuffix + "-regular";
488
+ case FontStyle.Bold:
489
+ if (isUpperCase)
490
+ return fontNameWithoutSuffix + "-Bold";
491
+ else
492
+ return fontNameWithoutSuffix + "-bold";
493
+ case FontStyle.Italic:
494
+ if (isUpperCase)
495
+ return fontNameWithoutSuffix + "-Italic";
496
+ else
497
+ return fontNameWithoutSuffix + "-italic";
498
+ case FontStyle.BoldAndItalic:
499
+ if (isUpperCase)
500
+ return fontNameWithoutSuffix + "-BoldItalic";
501
+ else
502
+ return fontNameWithoutSuffix + "-bolditalic";
503
+ default:
504
+ return familyName;
505
+ }
506
+ }
507
+ }
508
+ __decorate([
509
+ serializable()
510
+ ], Text.prototype, "alignment", void 0);
511
+ __decorate([
512
+ serializable()
513
+ ], Text.prototype, "verticalOverflow", void 0);
514
+ __decorate([
515
+ serializable()
516
+ ], Text.prototype, "horizontalOverflow", void 0);
517
+ __decorate([
518
+ serializable()
519
+ ], Text.prototype, "lineSpacing", void 0);
520
+ __decorate([
521
+ serializable()
522
+ ], Text.prototype, "supportRichText", void 0);
523
+ __decorate([
524
+ serializable(URL)
525
+ ], Text.prototype, "font", void 0);
526
+ __decorate([
527
+ serializable()
528
+ ], Text.prototype, "fontStyle", void 0);
529
+ __decorate([
530
+ serializable()
531
+ ], Text.prototype, "text", null);
532
+ __decorate([
533
+ serializable()
534
+ ], Text.prototype, "fontSize", null);
535
+ class TagStackEntry {
536
+ tag;
537
+ previousValues;
538
+ constructor(tag, previousValues) {
539
+ this.tag = tag;
540
+ this.previousValues = previousValues;
541
+ }
542
+ }
543
+ // const anyTag = new RegExp('<.+?>', 'g');
544
+ // const regex = new RegExp('<(?<type>.+?)>(?<text>.+?)<\/.+?>', 'g');
545
+ const unsupportedStyleNames = [
546
+ "medium", "mediumitalic", "black", "blackitalic", "thin", "thinitalic", "extrabold", "light", "lightitalic", "semibold"
547
+ ];
548
+ //# sourceMappingURL=Text.legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Text.legacy.js","sourceRoot":"","sources":["../../../src/engine-components/ui/Text.legacy.ts"],"names":[],"mappings":"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"}