@needle-tools/engine 4.11.3 → 4.11.4-next.a568de7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/generateMeshBVH.worker-B9bjdr6J.js +25 -0
- package/dist/{needle-engine.bundle-B_aGaFmh.js → needle-engine.bundle-DpWrB4yf.js} +5306 -5268
- package/dist/{needle-engine.bundle-TscA1IdQ.min.js → needle-engine.bundle-lEVjhicZ.min.js} +133 -133
- package/dist/{needle-engine.bundle-YQ3I1QD8.umd.cjs → needle-engine.bundle-nX51yB5a.umd.cjs} +132 -132
- package/dist/needle-engine.js +2 -2
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{vendor-H-9KkM5B.umd.cjs → vendor-6kAXU6fm.umd.cjs} +39 -39
- package/dist/{vendor-BahM12Xj.min.js → vendor-CsyK1CFs.min.js} +46 -46
- package/dist/{vendor-Becub4o1.js → vendor-petGQl0N.js} +3130 -3069
- package/lib/engine/api.d.ts +1 -0
- package/lib/engine/api.js +1 -0
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_addressables.d.ts +74 -11
- package/lib/engine/engine_addressables.js +74 -11
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_camera.fit.d.ts +48 -3
- package/lib/engine/engine_camera.fit.js +29 -0
- package/lib/engine/engine_camera.fit.js.map +1 -1
- package/lib/engine/engine_context.d.ts +18 -3
- package/lib/engine/engine_context.js +18 -3
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_utils.d.ts +0 -23
- package/lib/engine/engine_utils.js +0 -202
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/engine_utils_attributes.d.ts +48 -0
- package/lib/engine/engine_utils_attributes.js +70 -0
- package/lib/engine/engine_utils_attributes.js.map +1 -0
- package/lib/engine/engine_utils_qrcode.d.ts +23 -0
- package/lib/engine/engine_utils_qrcode.js +234 -0
- package/lib/engine/engine_utils_qrcode.js.map +1 -0
- package/lib/engine/extensions/NEEDLE_components.d.ts +4 -4
- package/lib/engine/extensions/NEEDLE_components.js +36 -17
- package/lib/engine/extensions/NEEDLE_components.js.map +1 -1
- package/lib/engine/webcomponents/buttons.js +1 -1
- package/lib/engine/webcomponents/buttons.js.map +1 -1
- package/lib/engine-components/Animation.d.ts +1 -1
- package/lib/engine-components/Animation.js +1 -1
- package/lib/engine-components/AnimationCurve.d.ts +3 -0
- package/lib/engine-components/AnimationCurve.js +3 -0
- package/lib/engine-components/AnimationCurve.js.map +1 -1
- package/lib/engine-components/Animator.d.ts +2 -1
- package/lib/engine-components/Animator.js +2 -1
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.d.ts +3 -0
- package/lib/engine-components/AnimatorController.js +3 -0
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/LookAtConstraint.d.ts +4 -0
- package/lib/engine-components/LookAtConstraint.js +4 -0
- package/lib/engine-components/LookAtConstraint.js.map +1 -1
- package/lib/engine-components/NeedleMenu.d.ts +1 -0
- package/lib/engine-components/NeedleMenu.js +1 -0
- package/lib/engine-components/NeedleMenu.js.map +1 -1
- package/lib/engine-components/NestedGltf.d.ts +3 -0
- package/lib/engine-components/NestedGltf.js +3 -0
- package/lib/engine-components/NestedGltf.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.d.ts +4 -0
- package/lib/engine-components/ReflectionProbe.js +4 -0
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/Renderer.js +14 -40
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/RendererLightmap.d.ts +7 -0
- package/lib/engine-components/RendererLightmap.js +30 -21
- package/lib/engine-components/RendererLightmap.js.map +1 -1
- package/lib/engine-components/SeeThrough.d.ts +3 -0
- package/lib/engine-components/SeeThrough.js +3 -0
- package/lib/engine-components/SeeThrough.js.map +1 -1
- package/lib/engine-components/Skybox.d.ts +3 -0
- package/lib/engine-components/Skybox.js +3 -0
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/SpriteRenderer.d.ts +14 -1
- package/lib/engine-components/SpriteRenderer.js +17 -1
- package/lib/engine-components/SpriteRenderer.js.map +1 -1
- package/lib/engine-components/splines/Spline.d.ts +3 -0
- package/lib/engine-components/splines/Spline.js +3 -0
- package/lib/engine-components/splines/Spline.js.map +1 -1
- package/lib/engine-components/splines/SplineUtils.d.ts +3 -0
- package/lib/engine-components/splines/SplineUtils.js +3 -0
- package/lib/engine-components/splines/SplineUtils.js.map +1 -1
- package/lib/engine-components/splines/SplineWalker.d.ts +3 -0
- package/lib/engine-components/splines/SplineWalker.js +3 -0
- package/lib/engine-components/splines/SplineWalker.js.map +1 -1
- package/lib/engine-components/timeline/PlayableDirector.d.ts +2 -1
- package/lib/engine-components/timeline/PlayableDirector.js +16 -9
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/timeline/SignalAsset.d.ts +11 -1
- package/lib/engine-components/timeline/SignalAsset.js +11 -1
- package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
- package/lib/engine-components/ui/Raycaster.d.ts +18 -0
- package/lib/engine-components/ui/Raycaster.js +18 -0
- package/lib/engine-components/ui/Raycaster.js.map +1 -1
- package/package.json +2 -2
- package/src/engine/api.ts +1 -0
- package/src/engine/engine_addressables.ts +76 -11
- package/src/engine/engine_camera.fit.ts +50 -4
- package/src/engine/engine_context.ts +18 -3
- package/src/engine/engine_utils.ts +0 -229
- package/src/engine/engine_utils_attributes.ts +72 -0
- package/src/engine/engine_utils_qrcode.ts +266 -0
- package/src/engine/extensions/NEEDLE_components.ts +47 -26
- package/src/engine/webcomponents/buttons.ts +1 -1
- package/src/engine-components/Animation.ts +1 -1
- package/src/engine-components/AnimationCurve.ts +4 -1
- package/src/engine-components/Animator.ts +3 -2
- package/src/engine-components/AnimatorController.ts +3 -0
- package/src/engine-components/LookAtConstraint.ts +6 -1
- package/src/engine-components/NeedleMenu.ts +1 -0
- package/src/engine-components/NestedGltf.ts +3 -0
- package/src/engine-components/ReflectionProbe.ts +4 -0
- package/src/engine-components/Renderer.ts +14 -42
- package/src/engine-components/RendererLightmap.ts +34 -20
- package/src/engine-components/SeeThrough.ts +3 -0
- package/src/engine-components/Skybox.ts +3 -0
- package/src/engine-components/SpriteRenderer.ts +18 -2
- package/src/engine-components/splines/Spline.ts +3 -0
- package/src/engine-components/splines/SplineUtils.ts +3 -1
- package/src/engine-components/splines/SplineWalker.ts +3 -0
- package/src/engine-components/timeline/PlayableDirector.ts +16 -10
- package/src/engine-components/timeline/SignalAsset.ts +13 -2
- package/src/engine-components/ui/Raycaster.ts +19 -0
- package/dist/generateMeshBVH.worker-2qGLkQjg.js +0 -25
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
export declare namespace InternalAttributeUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Checks if the given value is considered "falsey" in the context of HTML attributes.
|
|
7
|
+
* A value is considered falsey if it is "0" or "false" (case-insensitive).
|
|
8
|
+
*
|
|
9
|
+
* @param value - The attribute value to check.
|
|
10
|
+
* @returns True if the value is falsey, otherwise false.
|
|
11
|
+
*/
|
|
12
|
+
function isFalsey(value: string | null): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Retrieves the value of the specified attribute from the given element.
|
|
15
|
+
* If the attribute value is considered falsey, it returns null.
|
|
16
|
+
* @returns The attribute value or null if falsey.
|
|
17
|
+
*/
|
|
18
|
+
function getAttributeValueIfNotFalsey(element: Element, attributeName: string, opts?: {
|
|
19
|
+
onAttribute: (value: string) => void;
|
|
20
|
+
}): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Retrieves the value of the specified attribute from the given element.
|
|
23
|
+
* If the attribute value is considered falsey, it returns false.
|
|
24
|
+
* If the attribute is not set at all, it returns null.
|
|
25
|
+
* @returns The attribute value, false if falsey, or null if not set.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const result = HTMLAttributeUtils.getAttributeAndCheckFalsey(element, 'data-example', {
|
|
30
|
+
* onAttribute: (value, falsey) => {
|
|
31
|
+
* console.log(`Attribute value: ${value}
|
|
32
|
+
* , Is falsey: ${falsey}`);
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* if (result === false) {
|
|
37
|
+
* console.log('The attribute is set to a falsey value.');
|
|
38
|
+
* } else if (result === null) {
|
|
39
|
+
* console.log('The attribute is not set.');
|
|
40
|
+
* } else {
|
|
41
|
+
* console.log(`The attribute value is: ${result}`);
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
function getAttributeAndCheckFalsey(element: Element, attributeName: string, opts?: {
|
|
46
|
+
onAttribute: (value: string, falsey: boolean) => void;
|
|
47
|
+
}): false | string | null;
|
|
48
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal
|
|
3
|
+
*/
|
|
4
|
+
export var InternalAttributeUtils;
|
|
5
|
+
(function (InternalAttributeUtils) {
|
|
6
|
+
/**
|
|
7
|
+
* Checks if the given value is considered "falsey" in the context of HTML attributes.
|
|
8
|
+
* A value is considered falsey if it is "0" or "false" (case-insensitive).
|
|
9
|
+
*
|
|
10
|
+
* @param value - The attribute value to check.
|
|
11
|
+
* @returns True if the value is falsey, otherwise false.
|
|
12
|
+
*/
|
|
13
|
+
function isFalsey(value) {
|
|
14
|
+
return value === "0" || value?.toLowerCase() === "false";
|
|
15
|
+
}
|
|
16
|
+
InternalAttributeUtils.isFalsey = isFalsey;
|
|
17
|
+
/**
|
|
18
|
+
* Retrieves the value of the specified attribute from the given element.
|
|
19
|
+
* If the attribute value is considered falsey, it returns null.
|
|
20
|
+
* @returns The attribute value or null if falsey.
|
|
21
|
+
*/
|
|
22
|
+
function getAttributeValueIfNotFalsey(element, attributeName, opts) {
|
|
23
|
+
const attrValue = element.getAttribute(attributeName);
|
|
24
|
+
if (isFalsey(attrValue)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
opts?.onAttribute?.call(null, attrValue);
|
|
28
|
+
return attrValue;
|
|
29
|
+
}
|
|
30
|
+
InternalAttributeUtils.getAttributeValueIfNotFalsey = getAttributeValueIfNotFalsey;
|
|
31
|
+
/**
|
|
32
|
+
* Retrieves the value of the specified attribute from the given element.
|
|
33
|
+
* If the attribute value is considered falsey, it returns false.
|
|
34
|
+
* If the attribute is not set at all, it returns null.
|
|
35
|
+
* @returns The attribute value, false if falsey, or null if not set.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const result = HTMLAttributeUtils.getAttributeAndCheckFalsey(element, 'data-example', {
|
|
40
|
+
* onAttribute: (value, falsey) => {
|
|
41
|
+
* console.log(`Attribute value: ${value}
|
|
42
|
+
* , Is falsey: ${falsey}`);
|
|
43
|
+
* }
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* if (result === false) {
|
|
47
|
+
* console.log('The attribute is set to a falsey value.');
|
|
48
|
+
* } else if (result === null) {
|
|
49
|
+
* console.log('The attribute is not set.');
|
|
50
|
+
* } else {
|
|
51
|
+
* console.log(`The attribute value is: ${result}`);
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
function getAttributeAndCheckFalsey(element, attributeName, opts) {
|
|
56
|
+
const attrValue = element.getAttribute(attributeName);
|
|
57
|
+
// If the attribute is not set at all we just return
|
|
58
|
+
if (attrValue === null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
if (isFalsey(attrValue)) {
|
|
62
|
+
opts?.onAttribute?.call(null, attrValue, true);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
opts?.onAttribute?.call(null, attrValue, false);
|
|
66
|
+
return attrValue;
|
|
67
|
+
}
|
|
68
|
+
InternalAttributeUtils.getAttributeAndCheckFalsey = getAttributeAndCheckFalsey;
|
|
69
|
+
})(InternalAttributeUtils || (InternalAttributeUtils = {}));
|
|
70
|
+
//# sourceMappingURL=engine_utils_attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_utils_attributes.js","sourceRoot":"","sources":["../../src/engine/engine_utils_attributes.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,KAAW,sBAAsB,CAiEtC;AAjED,WAAiB,sBAAsB;IAEnC;;;;;;OAMG;IACH,SAAgB,QAAQ,CAAC,KAAoB;QACzC,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC;IAC7D,CAAC;IAFe,+BAAQ,WAEvB,CAAA;IAED;;;;OAIG;IACH,SAAgB,4BAA4B,CAAC,OAAgB,EAAE,aAAqB,EAAE,IAA+C;QACjI,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;YACrB,OAAO,IAAI,CAAC;SACf;QACD,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,SAAU,CAAC,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IAPe,mDAA4B,+BAO3C,CAAA;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,SAAgB,0BAA0B,CAAC,OAAgB,EAAE,aAAqB,EAAE,IAA+D;QAC/I,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACtD,oDAAoD;QACpD,IAAG,SAAS,KAAK,IAAI,EAAE;YACnB,OAAO,IAAI,CAAC;SACf;QACD,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE;YACrB,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,SAAU,EAAE,IAAI,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,SAAU,EAAE,KAAK,CAAC,CAAC;QACjD,OAAO,SAAS,CAAC;IACrB,CAAC;IAZe,iDAA0B,6BAYzC,CAAA;AAEL,CAAC,EAjEgB,sBAAsB,KAAtB,sBAAsB,QAiEtC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Generates a QR code HTML image using https://github.com/davidshimjs/qrcodejs
|
|
2
|
+
* @param args.text The text to encode
|
|
3
|
+
* @param args.width The width of the QR code
|
|
4
|
+
* @param args.height The height of the QR code
|
|
5
|
+
* @param args.colorDark The color of the dark squares
|
|
6
|
+
* @param args.colorLight The color of the light squares
|
|
7
|
+
* @param args.correctLevel The error correction level to use
|
|
8
|
+
* @param args.showLogo If true, the logo will be shown in the center of the QR code. By default the Needle Logo will be used. You can override which logo is being used by setting the `needle-engine` web component's `qr-logo-src` attribute. The logo can also be disabled by setting that attribute to a falsey value (e.g. "0" or "false")
|
|
9
|
+
* @param args.showUrl If true, the URL will be shown below the QR code
|
|
10
|
+
* @param args.domElement The dom element to append the QR code to. If not provided a new div will be created and returned
|
|
11
|
+
* @returns The dom element containing the QR code
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateQRCode(args: {
|
|
14
|
+
domElement?: HTMLElement;
|
|
15
|
+
text: string;
|
|
16
|
+
width?: number;
|
|
17
|
+
height?: number;
|
|
18
|
+
colorDark?: string;
|
|
19
|
+
colorLight?: string;
|
|
20
|
+
correctLevel?: any;
|
|
21
|
+
showLogo?: boolean;
|
|
22
|
+
showUrl?: boolean;
|
|
23
|
+
}): Promise<HTMLElement>;
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { needleLogoOnlySVG } from "./assets/index.js";
|
|
2
|
+
import { isDevEnvironment } from "./debug/debug.js";
|
|
3
|
+
import { hasCommercialLicense } from "./engine_license.js";
|
|
4
|
+
import { InternalAttributeUtils } from "./engine_utils_attributes.js";
|
|
5
|
+
/** Generates a QR code HTML image using https://github.com/davidshimjs/qrcodejs
|
|
6
|
+
* @param args.text The text to encode
|
|
7
|
+
* @param args.width The width of the QR code
|
|
8
|
+
* @param args.height The height of the QR code
|
|
9
|
+
* @param args.colorDark The color of the dark squares
|
|
10
|
+
* @param args.colorLight The color of the light squares
|
|
11
|
+
* @param args.correctLevel The error correction level to use
|
|
12
|
+
* @param args.showLogo If true, the logo will be shown in the center of the QR code. By default the Needle Logo will be used. You can override which logo is being used by setting the `needle-engine` web component's `qr-logo-src` attribute. The logo can also be disabled by setting that attribute to a falsey value (e.g. "0" or "false")
|
|
13
|
+
* @param args.showUrl If true, the URL will be shown below the QR code
|
|
14
|
+
* @param args.domElement The dom element to append the QR code to. If not provided a new div will be created and returned
|
|
15
|
+
* @returns The dom element containing the QR code
|
|
16
|
+
*/
|
|
17
|
+
export async function generateQRCode(args) {
|
|
18
|
+
// Ensure that the QRCode library is loaded
|
|
19
|
+
if (!globalThis["QRCode"]) {
|
|
20
|
+
const url = "https://cdn.jsdelivr.net/gh/davidshimjs/qrcodejs@gh-pages/qrcode.min.js";
|
|
21
|
+
let script = document.head.querySelector(`script[src="${url}"]`);
|
|
22
|
+
if (!script) {
|
|
23
|
+
script = document.createElement("script");
|
|
24
|
+
script.src = url;
|
|
25
|
+
document.head.appendChild(script);
|
|
26
|
+
}
|
|
27
|
+
await new Promise((resolve, _reject) => {
|
|
28
|
+
script.addEventListener("load", () => {
|
|
29
|
+
resolve(true);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const QRCODE = globalThis["QRCode"];
|
|
34
|
+
const target = args.domElement ?? document.createElement("div");
|
|
35
|
+
const qrCode = new QRCODE(target, {
|
|
36
|
+
width: args.width ?? 256,
|
|
37
|
+
height: args.height ?? 256,
|
|
38
|
+
colorDark: "#000000",
|
|
39
|
+
colorLight: "#ffffff",
|
|
40
|
+
correctLevel: args.showLogo ? QRCODE.CorrectionLevel.H : QRCODE.CorrectLevel.M,
|
|
41
|
+
...args,
|
|
42
|
+
});
|
|
43
|
+
// Number of rows/columns of the generated QR code
|
|
44
|
+
const moduleCount = qrCode?._oQRCode.moduleCount || 0;
|
|
45
|
+
const canvas = qrCode?._oDrawing?._elCanvas;
|
|
46
|
+
let sizePercentage = 0.25;
|
|
47
|
+
if (moduleCount < 40)
|
|
48
|
+
sizePercentage = Math.floor(moduleCount / 4) / moduleCount;
|
|
49
|
+
else
|
|
50
|
+
sizePercentage = Math.floor(moduleCount / 6) / moduleCount;
|
|
51
|
+
const paddingPercentage = Math.floor(moduleCount / 20) / moduleCount;
|
|
52
|
+
try {
|
|
53
|
+
const img = await internalRenderQRCodeOverlays(canvas, { showLogo: args.showLogo, logoSize: sizePercentage, logoPadding: paddingPercentage }).catch(_e => { });
|
|
54
|
+
if (img) {
|
|
55
|
+
target.innerHTML = "";
|
|
56
|
+
target.append(img);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch { } // Ignore
|
|
60
|
+
if (args.showUrl !== false && args.text) {
|
|
61
|
+
// Add link label below the QR code
|
|
62
|
+
// Clean up the text. If it's a URL: remove the protocol, www. part, trailing slashes or trailing question marks
|
|
63
|
+
const existingLabel = target.querySelector(".qr-code-link-label");
|
|
64
|
+
let displayText = args.text.replace(/^(https?:\/\/)?(www\.)?/, "").replace(/\/+$/, "").replace(/\?+$/, "");
|
|
65
|
+
displayText = "Scan to visit " + displayText;
|
|
66
|
+
if (existingLabel) {
|
|
67
|
+
existingLabel.textContent = displayText;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Create a new label
|
|
71
|
+
const linkLabel = document.createElement("div");
|
|
72
|
+
linkLabel.classList.add("qr-code-link-label");
|
|
73
|
+
args.text = displayText;
|
|
74
|
+
linkLabel.textContent = args.text;
|
|
75
|
+
linkLabel.addEventListener("click", (ev) => {
|
|
76
|
+
// Prevent the QR panel from closing
|
|
77
|
+
ev.stopImmediatePropagation();
|
|
78
|
+
});
|
|
79
|
+
linkLabel.style.textAlign = "center";
|
|
80
|
+
linkLabel.style.fontSize = "0.8em";
|
|
81
|
+
linkLabel.style.marginTop = "0.1em";
|
|
82
|
+
linkLabel.style.color = "#000000";
|
|
83
|
+
linkLabel.style.fontFamily = "'Roboto Flex', sans-serif";
|
|
84
|
+
linkLabel.style.opacity = "0.5";
|
|
85
|
+
linkLabel.style.wordBreak = "break-all";
|
|
86
|
+
linkLabel.style.wordWrap = "break-word";
|
|
87
|
+
linkLabel.style.marginBottom = "0.3em";
|
|
88
|
+
// Ensure max. width
|
|
89
|
+
target.style.width = "calc(210px + 20px)";
|
|
90
|
+
target.appendChild(linkLabel);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return target;
|
|
94
|
+
}
|
|
95
|
+
async function internalRenderQRCodeOverlays(canvas, args) {
|
|
96
|
+
if (!canvas)
|
|
97
|
+
return;
|
|
98
|
+
// Internal settings
|
|
99
|
+
const canvasPadding = 8;
|
|
100
|
+
const shadowBlur = 20;
|
|
101
|
+
const rectanglePadding = args.logoPadding || 1. / 32;
|
|
102
|
+
// With dropshadow under the logo
|
|
103
|
+
/*
|
|
104
|
+
const shadowColor = "#00000099";
|
|
105
|
+
const rectangleRadius = 0.4 * 16;
|
|
106
|
+
*/
|
|
107
|
+
// Without dropshadow under the logo
|
|
108
|
+
const shadowColor = "transparent";
|
|
109
|
+
const rectangleRadius = 0;
|
|
110
|
+
// Draw the website's icon in the center of the QR code
|
|
111
|
+
const image = new Image();
|
|
112
|
+
const element = document.querySelector("needle-engine");
|
|
113
|
+
if (!element) {
|
|
114
|
+
console.debug("[QR Code] No web component found");
|
|
115
|
+
}
|
|
116
|
+
const canUseCustomLogo = hasCommercialLicense();
|
|
117
|
+
// Query logo src from needle-engine attribute.
|
|
118
|
+
// For any supported attribute it's possible to use "falsey" values (e.g. "0" or "false" to disable the logo in the QR code)
|
|
119
|
+
let logoSrc = null;
|
|
120
|
+
logoSrc = InternalAttributeUtils.getAttributeAndCheckFalsey(element, "qrcode-logo-src");
|
|
121
|
+
if (canUseCustomLogo && args.showLogo !== true && logoSrc === false)
|
|
122
|
+
return; // Explictly disabled
|
|
123
|
+
logoSrc ||= InternalAttributeUtils.getAttributeAndCheckFalsey(element, "logo-src");
|
|
124
|
+
if (canUseCustomLogo && args.showLogo !== true && logoSrc === false)
|
|
125
|
+
return; // Explicitly disabled
|
|
126
|
+
logoSrc ||= InternalAttributeUtils.getAttributeAndCheckFalsey(element, "loading-logo-src", {
|
|
127
|
+
onAttribute: () => {
|
|
128
|
+
if (isDevEnvironment())
|
|
129
|
+
console.warn("[QR Code] 'loading-logo-src' is deprecated, please use 'logo-src' or 'qrcode-logo-src' instead.");
|
|
130
|
+
else
|
|
131
|
+
console.debug("[QR Code] 'loading-logo-src' is deprecated.");
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
if (canUseCustomLogo && args.showLogo !== true && logoSrc === false)
|
|
135
|
+
return; // Explicitly disabled
|
|
136
|
+
if (logoSrc && !canUseCustomLogo) {
|
|
137
|
+
console.warn("[QR Code] Custom logo is only available with a commercial license. Using default Needle logo. Please get a commercial license at https://needle.tools/pricing.");
|
|
138
|
+
logoSrc = null;
|
|
139
|
+
}
|
|
140
|
+
logoSrc ||= needleLogoOnlySVG;
|
|
141
|
+
if (!logoSrc)
|
|
142
|
+
return;
|
|
143
|
+
let haveLogo = false;
|
|
144
|
+
if (args.showLogo !== false) {
|
|
145
|
+
image.src = logoSrc;
|
|
146
|
+
haveLogo = await new Promise((resolve, _reject) => {
|
|
147
|
+
image.onload = () => resolve(true);
|
|
148
|
+
image.onerror = (err) => {
|
|
149
|
+
const errorUrl = logoSrc !== needleLogoOnlySVG ? "'" + logoSrc + "'" : null;
|
|
150
|
+
console.error("[QR Code] Error loading logo image for QR code", errorUrl, isDevEnvironment() ? err : "");
|
|
151
|
+
resolve(false);
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Add some padding around the canvas – we need to copy the QR code image to a larger canvas
|
|
156
|
+
const paddedCanvas = document.createElement("canvas");
|
|
157
|
+
paddedCanvas.width = canvas.width + canvasPadding;
|
|
158
|
+
paddedCanvas.height = canvas.height + canvasPadding;
|
|
159
|
+
const paddedContext = paddedCanvas.getContext("2d");
|
|
160
|
+
if (!paddedContext) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Clear with white
|
|
164
|
+
paddedContext.fillStyle = "#ffffff";
|
|
165
|
+
paddedContext.fillRect(0, 0, paddedCanvas.width, paddedCanvas.height);
|
|
166
|
+
paddedContext.drawImage(canvas, canvasPadding / 2, canvasPadding / 2);
|
|
167
|
+
// Enable anti-aliasing
|
|
168
|
+
paddedContext.imageSmoothingEnabled = true;
|
|
169
|
+
paddedContext.imageSmoothingQuality = "high";
|
|
170
|
+
// @ts-ignore
|
|
171
|
+
paddedContext.mozImageSmoothingEnabled = true;
|
|
172
|
+
// @ts-ignore
|
|
173
|
+
paddedContext.webkitImageSmoothingEnabled = true;
|
|
174
|
+
// Draw a slight gradient background with 10% opacity and "lighten" composite operation
|
|
175
|
+
paddedContext.globalCompositeOperation = "lighten";
|
|
176
|
+
const gradient = paddedContext.createLinearGradient(0, 0, 0, paddedCanvas.height);
|
|
177
|
+
gradient.addColorStop(0, "rgb(45, 45, 45)");
|
|
178
|
+
gradient.addColorStop(1, "rgb(45, 45, 45)");
|
|
179
|
+
paddedContext.fillStyle = gradient;
|
|
180
|
+
paddedContext.fillRect(0, 0, paddedCanvas.width, paddedCanvas.height);
|
|
181
|
+
paddedContext.globalCompositeOperation = "source-over";
|
|
182
|
+
let sizeX = Math.min(canvas.width, canvas.height) * (args.logoSize || 0.25);
|
|
183
|
+
let sizeY = sizeX;
|
|
184
|
+
if (haveLogo) {
|
|
185
|
+
// Get aspect of image
|
|
186
|
+
const aspect = image.width / image.height;
|
|
187
|
+
if (aspect > 1)
|
|
188
|
+
sizeY = sizeX / aspect;
|
|
189
|
+
else
|
|
190
|
+
sizeX = sizeY * aspect;
|
|
191
|
+
const rectanglePaddingPx = rectanglePadding * canvas.width;
|
|
192
|
+
// Apply padding
|
|
193
|
+
const sizeForBackground = Math.max(sizeX, sizeY);
|
|
194
|
+
const sizeXPadded = Math.round(sizeForBackground + rectanglePaddingPx);
|
|
195
|
+
const sizeYPadded = Math.round(sizeForBackground + rectanglePaddingPx);
|
|
196
|
+
const x = (paddedCanvas.width - sizeForBackground) / 2;
|
|
197
|
+
const y = (paddedCanvas.height - sizeForBackground) / 2;
|
|
198
|
+
// Draw shape with blurred shadow
|
|
199
|
+
paddedContext.shadowColor = shadowColor;
|
|
200
|
+
paddedContext.shadowBlur = shadowBlur;
|
|
201
|
+
// Draw rounded rectangle with radius
|
|
202
|
+
// Convert 0.4rem to pixels, taking DPI into account
|
|
203
|
+
const radius = rectangleRadius;
|
|
204
|
+
const xPadded = Math.round(x - rectanglePaddingPx / 2);
|
|
205
|
+
const yPadded = Math.round(y - rectanglePaddingPx / 2);
|
|
206
|
+
paddedContext.beginPath();
|
|
207
|
+
paddedContext.moveTo(xPadded + radius, yPadded);
|
|
208
|
+
paddedContext.lineTo(xPadded + sizeXPadded - radius, yPadded);
|
|
209
|
+
paddedContext.quadraticCurveTo(xPadded + sizeXPadded, yPadded, xPadded + sizeXPadded, yPadded + radius);
|
|
210
|
+
paddedContext.lineTo(xPadded + sizeXPadded, yPadded + sizeYPadded - radius);
|
|
211
|
+
paddedContext.quadraticCurveTo(xPadded + sizeXPadded, yPadded + sizeYPadded, xPadded + sizeXPadded - radius, yPadded + sizeYPadded);
|
|
212
|
+
paddedContext.lineTo(xPadded + radius, yPadded + sizeYPadded);
|
|
213
|
+
paddedContext.quadraticCurveTo(xPadded, yPadded + sizeYPadded, xPadded, yPadded + sizeYPadded - radius);
|
|
214
|
+
paddedContext.lineTo(xPadded, yPadded + radius);
|
|
215
|
+
paddedContext.quadraticCurveTo(xPadded, yPadded, xPadded + radius, yPadded);
|
|
216
|
+
paddedContext.fillStyle = "#ffffff";
|
|
217
|
+
paddedContext.closePath();
|
|
218
|
+
paddedContext.fill();
|
|
219
|
+
paddedContext.clip();
|
|
220
|
+
// Reset shadow and draw favicon
|
|
221
|
+
paddedContext.shadowColor = "transparent";
|
|
222
|
+
const logoX = (paddedCanvas.width - sizeX) / 2;
|
|
223
|
+
const logoY = (paddedCanvas.height - sizeY) / 2;
|
|
224
|
+
paddedContext.drawImage(image, logoX, logoY, sizeX, sizeY);
|
|
225
|
+
}
|
|
226
|
+
// Replace the canvas with the padded one
|
|
227
|
+
const paddedImage = paddedCanvas.toDataURL("image/png");
|
|
228
|
+
const img = document.createElement("img");
|
|
229
|
+
img.src = paddedImage;
|
|
230
|
+
img.style.width = "100%";
|
|
231
|
+
img.style.height = "auto";
|
|
232
|
+
return img;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=engine_utils_qrcode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine_utils_qrcode.js","sourceRoot":"","sources":["../../src/engine/engine_utils_qrcode.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,6 @@ declare class ExportData {
|
|
|
12
12
|
}
|
|
13
13
|
export declare class NEEDLE_components implements GLTFLoaderPlugin {
|
|
14
14
|
get name(): string;
|
|
15
|
-
parser?: GLTFParser;
|
|
16
|
-
nodeToObjectMap: NodeToObjectMap;
|
|
17
|
-
/** The loaded gltf */
|
|
18
|
-
gltf: GLTF | null;
|
|
19
15
|
exportContext: {
|
|
20
16
|
[nodeIndex: number]: ExportData;
|
|
21
17
|
};
|
|
@@ -28,6 +24,10 @@ export declare class NEEDLE_components implements GLTFLoaderPlugin {
|
|
|
28
24
|
afterSerializeUserData(node: Object3D, _nodeDef: any): void;
|
|
29
25
|
writeNode(node: Object3D, nodeDef: any): void;
|
|
30
26
|
afterParse(input: any): void;
|
|
27
|
+
parser?: GLTFParser;
|
|
28
|
+
nodeToObjectMap: NodeToObjectMap;
|
|
29
|
+
/** The loaded gltf */
|
|
30
|
+
gltf: GLTF | null;
|
|
31
31
|
beforeRoot(): null;
|
|
32
32
|
afterRoot(result: GLTF): Promise<void>;
|
|
33
33
|
private createComponents;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDevEnvironment } from "../debug/debug.js";
|
|
1
2
|
import { builtinComponentKeyName } from "../engine_constants.js";
|
|
2
3
|
import { debugExtension } from "../engine_default_parameters.js";
|
|
3
4
|
import { getLoader } from "../engine_gltf.js";
|
|
@@ -23,12 +24,7 @@ export class NEEDLE_components {
|
|
|
23
24
|
get name() {
|
|
24
25
|
return EXTENSION_NAME;
|
|
25
26
|
}
|
|
26
|
-
//
|
|
27
|
-
parser;
|
|
28
|
-
nodeToObjectMap = {};
|
|
29
|
-
/** The loaded gltf */
|
|
30
|
-
gltf = null;
|
|
31
|
-
// export
|
|
27
|
+
// #region export
|
|
32
28
|
exportContext;
|
|
33
29
|
objectToNodeMap = {};
|
|
34
30
|
context;
|
|
@@ -136,15 +132,17 @@ export class NEEDLE_components {
|
|
|
136
132
|
}
|
|
137
133
|
}
|
|
138
134
|
// -------------------------------------
|
|
139
|
-
//
|
|
140
|
-
|
|
135
|
+
// #region import
|
|
136
|
+
parser;
|
|
137
|
+
nodeToObjectMap = {};
|
|
138
|
+
/** The loaded gltf */
|
|
139
|
+
gltf = null;
|
|
141
140
|
beforeRoot() {
|
|
142
141
|
if (debug)
|
|
143
142
|
console.log("BEGIN LOAD");
|
|
144
143
|
this.nodeToObjectMap = {};
|
|
145
144
|
return null;
|
|
146
145
|
}
|
|
147
|
-
// called by GLTFLoader
|
|
148
146
|
async afterRoot(result) {
|
|
149
147
|
this.gltf = result;
|
|
150
148
|
const parser = result.parser;
|
|
@@ -179,7 +177,7 @@ export class NEEDLE_components {
|
|
|
179
177
|
continue;
|
|
180
178
|
}
|
|
181
179
|
apply(obj);
|
|
182
|
-
loadComponents.push(this.createComponents(obj, data));
|
|
180
|
+
loadComponents.push(this.createComponents(result, node, obj, data));
|
|
183
181
|
}
|
|
184
182
|
}
|
|
185
183
|
}
|
|
@@ -192,7 +190,7 @@ export class NEEDLE_components {
|
|
|
192
190
|
}
|
|
193
191
|
}
|
|
194
192
|
}
|
|
195
|
-
async createComponents(obj, data) {
|
|
193
|
+
async createComponents(result, node, obj, data) {
|
|
196
194
|
if (!data)
|
|
197
195
|
return;
|
|
198
196
|
const componentData = data[builtinComponentKeyName];
|
|
@@ -201,16 +199,37 @@ export class NEEDLE_components {
|
|
|
201
199
|
if (debug)
|
|
202
200
|
console.log(obj.name, componentData);
|
|
203
201
|
for (const i in componentData) {
|
|
204
|
-
const
|
|
202
|
+
const data = componentData[i];
|
|
205
203
|
if (debug)
|
|
206
|
-
console.log("Serialized data", JSON.parse(JSON.stringify(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
204
|
+
console.log("Serialized data", JSON.parse(JSON.stringify(data)));
|
|
205
|
+
// Fix for https://linear.app/needle/issue/NE-6779/blender-export-has-missing-sharedmaterials
|
|
206
|
+
if (data?.name === "MeshRenderer" || data?.name === "SkinnedMeshRenderer") {
|
|
207
|
+
if (!data.sharedMaterials) {
|
|
208
|
+
let success = false;
|
|
209
|
+
if ("mesh" in node) {
|
|
210
|
+
const meshIndex = node.mesh;
|
|
211
|
+
if (typeof meshIndex === "number" && result.parser) {
|
|
212
|
+
const meshDef = result.parser.json.meshes?.[meshIndex];
|
|
213
|
+
if (meshDef?.primitives) {
|
|
214
|
+
data.sharedMaterials = meshDef.primitives.map(prim => {
|
|
215
|
+
return "/materials/" + (prim.material ?? 0);
|
|
216
|
+
});
|
|
217
|
+
success = true;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (!success && (debug || isDevEnvironment())) {
|
|
222
|
+
console.warn(`[NEEDLE_components] Component '${data.name}' on object '${obj.name}' is not added to a mesh or failed to retrieve materials from glTF.`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (data && this.parser) {
|
|
227
|
+
tasks.push(resolveReferences(this.parser, data)
|
|
228
|
+
.catch(e => console.error(`Error while resolving references (see console for details)\n`, e, obj, data)));
|
|
210
229
|
}
|
|
211
230
|
obj.userData = obj.userData || {};
|
|
212
231
|
obj.userData[builtinComponentKeyName] = obj.userData[builtinComponentKeyName] || [];
|
|
213
|
-
obj.userData[builtinComponentKeyName].push(
|
|
232
|
+
obj.userData[builtinComponentKeyName].push(data);
|
|
214
233
|
}
|
|
215
234
|
await Promise.all(tasks).catch((e) => {
|
|
216
235
|
console.error("Error while loading components", e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NEEDLE_components.js","sourceRoot":"","sources":["../../../src/engine/extensions/NEEDLE_components.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NEEDLE_components.js","sourceRoot":"","sources":["../../../src/engine/extensions/NEEDLE_components.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,MAAM,CAAC,MAAM,KAAK,GAAG,cAAc,CAAA;AACnC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAEzD,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAElD,MAAM,aAAa;IACf,CAAC,uBAAuB,CAAC,CAAoC;CAChE;AAED,MAAM,UAAU;IACZ,IAAI,CAAW;IACf,SAAS,CAAS;IAClB,OAAO,CAAM;IAEb,YAAY,IAAc,EAAE,SAAiB,EAAE,OAAY;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ;AAED,MAAM,OAAO,iBAAiB;IAE1B,IAAI,IAAI;QACJ,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD,iBAAiB;IACjB,aAAa,CAAuC;IACpD,eAAe,GAAoB,EAAE,CAAC;IACtC,OAAO,CAAwB;IAC/B,MAAM,CAAO;IAEb,cAAc,CAAC,GAAiB;QAC5B,YAAY;QACZ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAClB,mDAAmD;YACnD,sEAAsE;YACtE,4CAA4C;YAC5C,kEAAkE;YAClE,wEAAwE;YACxE,4DAA4D;YAC5D,IAAI,mBAAmB,IAAI,MAAM,EAAE;gBAC/B,YAAY;gBACZ,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,YAAY;gBACZ,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;oBAClC,IAAI;wBACA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACnD,IAAI,WAAW;4BACX,YAAY;4BACZ,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC5C,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;qBAC5B;4BACO;wBACJ,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;qBACvC;gBACL,CAAC,CAAA;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,WAAW;QACP,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,+HAA+H;IAC/H,iBAAiB,CAAC,IAAc,EAAE,QAAa;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC7C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxD,8EAA8E;QAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,wBAAwB,CAAC,GAAG,UAAU,CAAC;QAC5C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,sBAAsB,CAAC,IAAc,EAAE,QAAQ;QAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACvB,IAAI,KAAK;gBACL,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrD;QACD,iBAAiB;QACjB,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,SAAS;YAAE,OAAO;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;SACzC;QAED,wCAAwC;IAC5C,CAAC;IAED,SAAS,CAAC,IAAc,EAAE,OAAO;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAChD,IAAI,KAAK;YACL,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACxC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAChD,CAAC;IAAA,CAAC;IAEF,UAAU,CAAC,KAAK;QACZ,IAAI,KAAK;YACL,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAChC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC7C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBAAE,SAAS;YACpD,wBAAwB;YACxB,MAAM,IAAI,GAAkB,IAAI,aAAa,EAAE,CAAC;YAChD,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC;YAEjD,MAAM,uBAAuB,GAAyB,EAAE,CAAC;YACzD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC3B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtE,IAAI,GAAG,KAAK,IAAI,EAAE;oBACd,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClC,qFAAqF;iBACxF;aACJ;YACD,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpC,IAAI,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;gBACxD,IAAI,KAAK;oBACL,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;aACvF;SACJ;IACL,CAAC;IAID,wCAAwC;IACxC,kBAAkB;IAClB,MAAM,CAAc;IACpB,eAAe,GAAoB,EAAE,CAAC;IACtC,sBAAsB;IACtB,IAAI,GAAgB,IAAI,CAAC;IAGzB,UAAU;QACN,IAAI,KAAK;YACL,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAY;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;QAEnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,EAAE,UAAU,CAAC;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE/D,MAAM,cAAc,GAAyB,EAAE,CAAC;QAChD,IAAI,YAAY,KAAK,IAAI,EAAE;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,KAAK,EAAE;gBACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAClD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;iBACjC;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAA,aAAa;oBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC5B,IAAI,CAAC,GAAG;wBAAE,SAAS;oBACnB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,IAAI,KAAK;wBACL,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBACxC,IAAI,CAAC,GAAG,EAAE;wBACN,OAAO,CAAC,KAAK,CAAC,wCAAwC,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;wBAC9E,SAAS;qBACZ;oBAED,KAAK,CAAC,GAAG,CAAC,CAAC;oBAEX,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;iBACvE;aACJ;SACJ;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAGlC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE,SAAS,IAAI,SAAS,EAAE;gBAC/B,MAAM,GAAG,GAAG,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC5C,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;aACtC;SACJ;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAY,EAAE,IAAU,EAAE,GAAa,EAAE,IAAmB;QACvF,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpD,IAAI,aAAa,EAAE;YACf,MAAM,KAAK,GAAG,IAAI,KAAK,EAAgB,CAAC;YACxC,IAAI,KAAK;gBACL,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;gBAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAE5E,6FAA6F;gBAC7F,IAAI,IAAI,EAAE,IAAI,KAAK,cAAc,IAAI,IAAI,EAAE,IAAI,KAAK,qBAAqB,EAAE;oBACvE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBACvB,IAAI,OAAO,GAAG,KAAK,CAAC;wBACpB,IAAI,MAAM,IAAI,IAAI,EAAE;4BAChB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;4BAC5B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;gCAChD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;gCACvD,IAAI,OAAO,EAAE,UAAU,EAAE;oCACrB,IAAI,CAAC,eAAe,GAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wCAClD,OAAO,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;oCAChD,CAAC,CAAC,CAAC;oCACH,OAAO,GAAG,IAAI,CAAC;iCAClB;6BACJ;yBACJ;wBACD,IAAG,CAAC,OAAO,IAAI,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC,EAAE;4BAC1C,OAAO,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,IAAI,gBAAgB,GAAG,CAAC,IAAI,qEAAqE,CAAC,CAAC;yBAC1J;qBACJ;iBACJ;gBAED,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;oBACrB,KAAK,CAAC,IAAI,CACN,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;yBAC/B,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,8DAA8D,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAC/G,CAAC;iBACL;gBAED,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAClC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;gBACpF,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpD;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;SACN;IACL,CAAC;CAmBJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isDevEnvironment, showBalloonWarning } from "../debug/debug.js";
|
|
2
|
-
import { generateQRCode } from "../
|
|
2
|
+
import { generateQRCode } from "../engine_utils_qrcode.js";
|
|
3
3
|
import { onXRSessionEnd, onXRSessionStart } from "../xr/events.js";
|
|
4
4
|
import { getIconElement } from "./icons.js";
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../../src/engine/webcomponents/buttons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../../src/engine/webcomponents/buttons.ts"],"names":[],"mappings":"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"}
|