sa2kit 1.6.78 → 1.6.80
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/dist/ai/llm/electron/index.js +2 -2
- package/dist/ai/llm/electron/index.js.map +1 -1
- package/dist/ai/llm/electron/index.mjs +2 -2
- package/dist/ai/llm/electron/index.mjs.map +1 -1
- package/dist/ai/llm/ui/electron/index.js +2 -2
- package/dist/ai/llm/ui/electron/index.js.map +1 -1
- package/dist/ai/llm/ui/electron/index.mjs +2 -2
- package/dist/ai/llm/ui/electron/index.mjs.map +1 -1
- package/dist/ai/llm/ui/web/index.js +2 -2
- package/dist/ai/llm/ui/web/index.js.map +1 -1
- package/dist/ai/llm/ui/web/index.mjs +2 -2
- package/dist/ai/llm/ui/web/index.mjs.map +1 -1
- package/dist/ai/llm/web/index.js +2 -2
- package/dist/ai/llm/web/index.js.map +1 -1
- package/dist/ai/llm/web/index.mjs +2 -2
- package/dist/ai/llm/web/index.mjs.map +1 -1
- package/dist/ar/index.d.mts +2 -2
- package/dist/ar/index.d.ts +2 -2
- package/dist/ar/index.js +43 -4
- package/dist/ar/index.js.map +1 -1
- package/dist/ar/index.mjs +43 -4
- package/dist/ar/index.mjs.map +1 -1
- package/dist/{booking-BX_0AXU6.d.mts → booking-473Db8Bo.d.mts} +6 -0
- package/dist/{booking-BX_0AXU6.d.ts → booking-473Db8Bo.d.ts} +6 -0
- package/dist/{bookingAdminService-ChzuoCUx.d.ts → bookingAdminService-DqQ7hEGw.d.ts} +1 -1
- package/dist/{bookingAdminService-B_D_Jq1W.d.mts → bookingAdminService-SBX4JA_U.d.mts} +1 -1
- package/dist/calendar/index.js +8 -4
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +8 -4
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/web/index.js +8 -4
- package/dist/calendar/web/index.js.map +1 -1
- package/dist/calendar/web/index.mjs +8 -4
- package/dist/calendar/web/index.mjs.map +1 -1
- package/dist/{client-B6JtOkEq.d.ts → client-Bkn6mRI7.d.ts} +1 -1
- package/dist/{client-DkSveTk-.d.mts → client-exYn2Qla.d.mts} +1 -1
- package/dist/components/index.d.mts +2 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +8 -4
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +8 -4
- package/dist/components/index.mjs.map +1 -1
- package/dist/{index-B9vIHUEv.d.ts → index-BJpxvH7X.d.ts} +1 -1
- package/dist/{index-C3_UPPdv.d.ts → index-CdTIsNsy.d.ts} +2 -2
- package/dist/{index-DDuTPOHu.d.mts → index-Cum2EknK.d.mts} +1 -1
- package/dist/{index-D6ZIkvt-.d.mts → index-DyxLpkmm.d.mts} +2 -2
- package/dist/{index-BjYZSfZa.d.ts → index-XTV6IU-M.d.ts} +2 -2
- package/dist/{index-3qQN9Lh_.d.mts → index-z15F7afa.d.mts} +2 -2
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -4
- package/dist/index.mjs.map +1 -1
- package/dist/mmd/index.d.mts +9 -3
- package/dist/mmd/index.d.ts +9 -3
- package/dist/mmd/index.js +95 -13
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +95 -13
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/portfolio/index.js +2 -2
- package/dist/portfolio/index.js.map +1 -1
- package/dist/portfolio/index.mjs +2 -2
- package/dist/portfolio/index.mjs.map +1 -1
- package/dist/showmasterpiece/core.d.mts +3 -3
- package/dist/showmasterpiece/core.d.ts +3 -3
- package/dist/showmasterpiece/db.d.mts +25 -0
- package/dist/showmasterpiece/db.d.ts +25 -0
- package/dist/showmasterpiece/db.js +35 -0
- package/dist/showmasterpiece/db.js.map +1 -1
- package/dist/showmasterpiece/db.mjs +35 -0
- package/dist/showmasterpiece/db.mjs.map +1 -1
- package/dist/showmasterpiece/index.js +279 -226
- package/dist/showmasterpiece/index.js.map +1 -1
- package/dist/showmasterpiece/index.mjs +279 -226
- package/dist/showmasterpiece/index.mjs.map +1 -1
- package/dist/showmasterpiece/logic/index.d.mts +2 -2
- package/dist/showmasterpiece/logic/index.d.ts +2 -2
- package/dist/showmasterpiece/server/index.js +35 -0
- package/dist/showmasterpiece/server/index.js.map +1 -1
- package/dist/showmasterpiece/server/index.mjs +35 -0
- package/dist/showmasterpiece/server/index.mjs.map +1 -1
- package/dist/showmasterpiece/service/api/index.d.mts +1 -1
- package/dist/showmasterpiece/service/api/index.d.ts +1 -1
- package/dist/showmasterpiece/service/client-business/index.d.mts +3 -3
- package/dist/showmasterpiece/service/client-business/index.d.ts +3 -3
- package/dist/showmasterpiece/service/index.d.mts +6 -6
- package/dist/showmasterpiece/service/index.d.ts +6 -6
- package/dist/showmasterpiece/service/miniapp/index.d.mts +2 -2
- package/dist/showmasterpiece/service/miniapp/index.d.ts +2 -2
- package/dist/showmasterpiece/service/web/index.d.mts +4 -4
- package/dist/showmasterpiece/service/web/index.d.ts +4 -4
- package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -2
- package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -2
- package/dist/showmasterpiece/ui/miniapp/index.js +38 -8
- package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
- package/dist/showmasterpiece/ui/miniapp/index.mjs +38 -8
- package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
- package/dist/showmasterpiece/ui/web/index.js +279 -226
- package/dist/showmasterpiece/ui/web/index.js.map +1 -1
- package/dist/showmasterpiece/ui/web/index.mjs +279 -226
- package/dist/showmasterpiece/ui/web/index.mjs.map +1 -1
- package/dist/showmasterpiece/web/index.js +279 -226
- package/dist/showmasterpiece/web/index.js.map +1 -1
- package/dist/showmasterpiece/web/index.mjs +279 -226
- package/dist/showmasterpiece/web/index.mjs.map +1 -1
- package/dist/{types-CvKvpyN8.d.mts → types-D4vSK3AJ.d.mts} +2 -1
- package/dist/{types-CvKvpyN8.d.ts → types-D4vSK3AJ.d.ts} +2 -1
- package/package.json +1 -1
package/dist/mmd/index.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { e as MMDPlayerBaseProps, f as MMDPlayerBaseRef, g as MMDPlayerEnhancedProps, h as MMDPlaylistProps, b as MMDPlaylistNode, d as MMDResources, i as MMDStage, j as MobileOptimization } from '../types-HorDyIRv.mjs';
|
|
2
2
|
export { M as MMDPlaylistConfig, a as MMDResourceItem, c as MMDResourceOptions, O as OutlineOptions, R as ResourceOption } from '../types-HorDyIRv.mjs';
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
|
-
import React__default from 'react';
|
|
4
|
+
import React__default, { CSSProperties } from 'react';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
6
|
import { a as UploadFileInfo, c as UploadProgress, F as FileMetadata, A as AccessPermission } from '../types-CK4We_aI.mjs';
|
|
7
|
-
import { d as ARMarkerConfig } from '../types-
|
|
7
|
+
import { d as ARMarkerConfig } from '../types-D4vSK3AJ.mjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* PMX模型解析器类型定义
|
|
@@ -1562,6 +1562,12 @@ interface MMDARPlayerProps {
|
|
|
1562
1562
|
cameraParametersUrl?: string;
|
|
1563
1563
|
/** Marker 配置 */
|
|
1564
1564
|
markerConfig?: ARMarkerConfig;
|
|
1565
|
+
/**
|
|
1566
|
+
* Marker 放置模式
|
|
1567
|
+
* - manual: 识别到 marker 后仍需点击按钮手动放置(默认)
|
|
1568
|
+
* - follow-marker: 识别到 marker 自动显示并跟随 marker
|
|
1569
|
+
*/
|
|
1570
|
+
markerPlacementMode?: 'manual' | 'follow-marker';
|
|
1565
1571
|
/** 是否开启镜像显示 (通常前置摄像头需要开启) */
|
|
1566
1572
|
mirrored?: boolean;
|
|
1567
1573
|
/** 是否显示设置按钮 */
|
|
@@ -1611,7 +1617,7 @@ interface MMDARPlayerProps {
|
|
|
1611
1617
|
onError?: (error: Error) => void;
|
|
1612
1618
|
/** 样式 */
|
|
1613
1619
|
className?: string;
|
|
1614
|
-
style?:
|
|
1620
|
+
style?: CSSProperties;
|
|
1615
1621
|
}
|
|
1616
1622
|
interface MMDARPlayerRef {
|
|
1617
1623
|
/** 开启摄像头 */
|
package/dist/mmd/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { e as MMDPlayerBaseProps, f as MMDPlayerBaseRef, g as MMDPlayerEnhancedProps, h as MMDPlaylistProps, b as MMDPlaylistNode, d as MMDResources, i as MMDStage, j as MobileOptimization } from '../types-HorDyIRv.js';
|
|
2
2
|
export { M as MMDPlaylistConfig, a as MMDResourceItem, c as MMDResourceOptions, O as OutlineOptions, R as ResourceOption } from '../types-HorDyIRv.js';
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
|
-
import React__default from 'react';
|
|
4
|
+
import React__default, { CSSProperties } from 'react';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
6
|
import { a as UploadFileInfo, c as UploadProgress, F as FileMetadata, A as AccessPermission } from '../types-CK4We_aI.js';
|
|
7
|
-
import { d as ARMarkerConfig } from '../types-
|
|
7
|
+
import { d as ARMarkerConfig } from '../types-D4vSK3AJ.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* PMX模型解析器类型定义
|
|
@@ -1562,6 +1562,12 @@ interface MMDARPlayerProps {
|
|
|
1562
1562
|
cameraParametersUrl?: string;
|
|
1563
1563
|
/** Marker 配置 */
|
|
1564
1564
|
markerConfig?: ARMarkerConfig;
|
|
1565
|
+
/**
|
|
1566
|
+
* Marker 放置模式
|
|
1567
|
+
* - manual: 识别到 marker 后仍需点击按钮手动放置(默认)
|
|
1568
|
+
* - follow-marker: 识别到 marker 自动显示并跟随 marker
|
|
1569
|
+
*/
|
|
1570
|
+
markerPlacementMode?: 'manual' | 'follow-marker';
|
|
1565
1571
|
/** 是否开启镜像显示 (通常前置摄像头需要开启) */
|
|
1566
1572
|
mirrored?: boolean;
|
|
1567
1573
|
/** 是否显示设置按钮 */
|
|
@@ -1611,7 +1617,7 @@ interface MMDARPlayerProps {
|
|
|
1611
1617
|
onError?: (error: Error) => void;
|
|
1612
1618
|
/** 样式 */
|
|
1613
1619
|
className?: string;
|
|
1614
|
-
style?:
|
|
1620
|
+
style?: CSSProperties;
|
|
1615
1621
|
}
|
|
1616
1622
|
interface MMDARPlayerRef {
|
|
1617
1623
|
/** 开启摄像头 */
|
package/dist/mmd/index.js
CHANGED
|
@@ -7132,6 +7132,42 @@ var DEFAULT_AR_ASSETS = {
|
|
|
7132
7132
|
|
|
7133
7133
|
// src/ar/load-arjs.ts
|
|
7134
7134
|
var loadPromise = null;
|
|
7135
|
+
function isTHREExNamespace(value) {
|
|
7136
|
+
if (!value || typeof value !== "object") return false;
|
|
7137
|
+
const candidate = value;
|
|
7138
|
+
return typeof candidate.ArToolkitSource === "function" && typeof candidate.ArToolkitContext === "function" && typeof candidate.ArMarkerControls === "function";
|
|
7139
|
+
}
|
|
7140
|
+
function resolveTHREExNamespace(moduleExports) {
|
|
7141
|
+
const arWindow = window;
|
|
7142
|
+
const globalTHREEx = arWindow.THREEx;
|
|
7143
|
+
if (isTHREExNamespace(globalTHREEx)) {
|
|
7144
|
+
return globalTHREEx;
|
|
7145
|
+
}
|
|
7146
|
+
if (isTHREExNamespace(moduleExports)) {
|
|
7147
|
+
return moduleExports;
|
|
7148
|
+
}
|
|
7149
|
+
const record = moduleExports;
|
|
7150
|
+
const defaultExport = record?.default;
|
|
7151
|
+
if (isTHREExNamespace(defaultExport)) {
|
|
7152
|
+
return defaultExport;
|
|
7153
|
+
}
|
|
7154
|
+
if (isTHREExNamespace(record?.THREEx)) {
|
|
7155
|
+
return record?.THREEx;
|
|
7156
|
+
}
|
|
7157
|
+
const arjsCandidate = record?.ARjs ?? defaultExport ?? record ?? arWindow.ARjs;
|
|
7158
|
+
const arjsRecord = arjsCandidate;
|
|
7159
|
+
const source = arjsRecord?.Source;
|
|
7160
|
+
const context = arjsRecord?.Context;
|
|
7161
|
+
const markerControls = arjsRecord?.MarkerControls;
|
|
7162
|
+
if (typeof source === "function" && typeof context === "function" && typeof markerControls === "function") {
|
|
7163
|
+
return {
|
|
7164
|
+
ArToolkitSource: source,
|
|
7165
|
+
ArToolkitContext: context,
|
|
7166
|
+
ArMarkerControls: markerControls
|
|
7167
|
+
};
|
|
7168
|
+
}
|
|
7169
|
+
return void 0;
|
|
7170
|
+
}
|
|
7135
7171
|
async function loadARJS(options = {}) {
|
|
7136
7172
|
if (typeof window === "undefined") {
|
|
7137
7173
|
throw new Error("AR.js can only be loaded in a browser environment.");
|
|
@@ -7141,15 +7177,18 @@ async function loadARJS(options = {}) {
|
|
|
7141
7177
|
}
|
|
7142
7178
|
const existing = window.THREEx;
|
|
7143
7179
|
if (existing && !options.forceReload) {
|
|
7144
|
-
|
|
7180
|
+
if (isTHREExNamespace(existing)) {
|
|
7181
|
+
return existing;
|
|
7182
|
+
}
|
|
7145
7183
|
}
|
|
7146
7184
|
if (!loadPromise || options.forceReload) {
|
|
7147
7185
|
const importPromise = options.locationOnly ? import('@ar-js-org/ar.js/three.js/build/ar-threex-location-only.js') : import('@ar-js-org/ar.js/three.js/build/ar-threex.js');
|
|
7148
|
-
loadPromise = importPromise.then(() => {
|
|
7149
|
-
const THREEx =
|
|
7186
|
+
loadPromise = importPromise.then((loadedModule) => {
|
|
7187
|
+
const THREEx = resolveTHREExNamespace(loadedModule);
|
|
7150
7188
|
if (!THREEx) {
|
|
7151
|
-
throw new Error("AR.js loaded, but THREEx namespace was not found.");
|
|
7189
|
+
throw new Error("AR.js loaded, but THREEx namespace was not found in module exports or window.");
|
|
7152
7190
|
}
|
|
7191
|
+
window.THREEx = THREEx;
|
|
7153
7192
|
return THREEx;
|
|
7154
7193
|
});
|
|
7155
7194
|
}
|
|
@@ -7192,6 +7231,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7192
7231
|
cameraConfig,
|
|
7193
7232
|
cameraParametersUrl,
|
|
7194
7233
|
markerConfig,
|
|
7234
|
+
markerPlacementMode = "manual",
|
|
7195
7235
|
mirrored = false,
|
|
7196
7236
|
showSettings,
|
|
7197
7237
|
modelPresets,
|
|
@@ -7233,6 +7273,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7233
7273
|
const mmdMeshRef = React10.useRef(null);
|
|
7234
7274
|
const animationFrameRef = React10.useRef(null);
|
|
7235
7275
|
const markerDetectedRef = React10.useRef(false);
|
|
7276
|
+
const markerPlacedOnceRef = React10.useRef(false);
|
|
7236
7277
|
const audioRef = React10.useRef(null);
|
|
7237
7278
|
const autoPlayRef = React10.useRef(autoPlay);
|
|
7238
7279
|
const [isLoading, setIsLoading] = React10.useState(true);
|
|
@@ -7263,6 +7304,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7263
7304
|
return {
|
|
7264
7305
|
type: markerConfig?.type ?? "pattern",
|
|
7265
7306
|
patternUrl: markerConfig?.patternUrl ?? DEFAULT_AR_ASSETS.patternUrl,
|
|
7307
|
+
descriptorsUrl: markerConfig?.descriptorsUrl,
|
|
7266
7308
|
barcodeValue: markerConfig?.barcodeValue ?? 0,
|
|
7267
7309
|
changeMatrixMode: markerConfig?.changeMatrixMode ?? "modelViewMatrix"
|
|
7268
7310
|
};
|
|
@@ -7335,14 +7377,24 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7335
7377
|
modelRootRef.current.quaternion.identity();
|
|
7336
7378
|
updateModelPlacement(true);
|
|
7337
7379
|
} else {
|
|
7338
|
-
if (
|
|
7339
|
-
modelRootRef.current.parent
|
|
7340
|
-
|
|
7380
|
+
if (markerPlacementMode === "follow-marker" && markerRootRef.current) {
|
|
7381
|
+
if (modelRootRef.current.parent !== markerRootRef.current) {
|
|
7382
|
+
modelRootRef.current.parent?.remove(modelRootRef.current);
|
|
7383
|
+
markerRootRef.current.add(modelRootRef.current);
|
|
7384
|
+
}
|
|
7385
|
+
modelRootRef.current.position.set(0, 0, 0);
|
|
7386
|
+
modelRootRef.current.quaternion.identity();
|
|
7387
|
+
updateModelPlacement(markerDetectedRef.current);
|
|
7388
|
+
} else {
|
|
7389
|
+
if (modelRootRef.current.parent !== sceneRef.current) {
|
|
7390
|
+
modelRootRef.current.parent?.remove(modelRootRef.current);
|
|
7391
|
+
sceneRef.current.add(modelRootRef.current);
|
|
7392
|
+
}
|
|
7393
|
+
updateModelPlacement(initialModelVisible);
|
|
7341
7394
|
}
|
|
7342
|
-
updateModelPlacement(initialModelVisible);
|
|
7343
7395
|
}
|
|
7344
7396
|
},
|
|
7345
|
-
[initialModelVisible, updateModelPlacement]
|
|
7397
|
+
[initialModelVisible, markerPlacementMode, updateModelPlacement]
|
|
7346
7398
|
);
|
|
7347
7399
|
const stopCameraStream = React10.useCallback(() => {
|
|
7348
7400
|
const source = arToolkitSourceRef.current;
|
|
@@ -7369,6 +7421,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7369
7421
|
arToolkitSourceRef.current = null;
|
|
7370
7422
|
arToolkitContextRef.current = null;
|
|
7371
7423
|
markerDetectedRef.current = false;
|
|
7424
|
+
markerPlacedOnceRef.current = false;
|
|
7372
7425
|
setMarkerDetected(false);
|
|
7373
7426
|
setCameraReady(false);
|
|
7374
7427
|
setArReady(false);
|
|
@@ -7444,6 +7497,13 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7444
7497
|
if (isVisible !== markerDetectedRef.current) {
|
|
7445
7498
|
markerDetectedRef.current = isVisible;
|
|
7446
7499
|
setMarkerDetected(isVisible);
|
|
7500
|
+
if (resolvedARMode !== "overlay" /* Overlay */ && markerPlacementMode === "follow-marker") {
|
|
7501
|
+
updateModelPlacement(isVisible);
|
|
7502
|
+
if (isVisible && !markerPlacedOnceRef.current) {
|
|
7503
|
+
markerPlacedOnceRef.current = true;
|
|
7504
|
+
onModelPlaced?.();
|
|
7505
|
+
}
|
|
7506
|
+
}
|
|
7447
7507
|
}
|
|
7448
7508
|
}
|
|
7449
7509
|
}
|
|
@@ -7454,10 +7514,15 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7454
7514
|
renderer.render(scene, camera);
|
|
7455
7515
|
};
|
|
7456
7516
|
render();
|
|
7457
|
-
}, []);
|
|
7517
|
+
}, [markerPlacementMode, onModelPlaced, resolvedARMode, updateModelPlacement]);
|
|
7458
7518
|
const setupAR = React10.useCallback(async (facingOverride) => {
|
|
7459
7519
|
if (!sceneRef.current || !cameraRef.current) return;
|
|
7460
7520
|
const THREEx = await loadARJS({ three: THREE2__namespace });
|
|
7521
|
+
if (resolvedMarkerConfig.type === "nft" && !resolvedMarkerConfig.descriptorsUrl) {
|
|
7522
|
+
throw new Error(
|
|
7523
|
+
'markerConfig.descriptorsUrl is required when markerConfig.type is "nft".'
|
|
7524
|
+
);
|
|
7525
|
+
}
|
|
7461
7526
|
const facingMode = facingOverride ?? cameraFacing;
|
|
7462
7527
|
const sourceWidth = typeof cameraConfig?.width === "number" ? cameraConfig.width : cameraConfig?.width?.ideal;
|
|
7463
7528
|
const sourceHeight = typeof cameraConfig?.height === "number" ? cameraConfig.height : cameraConfig?.height?.ideal;
|
|
@@ -7477,6 +7542,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7477
7542
|
const markerRoot = new THREE2__namespace.Group();
|
|
7478
7543
|
markerRootRef.current = markerRoot;
|
|
7479
7544
|
sceneRef.current.add(markerRoot);
|
|
7545
|
+
attachModelRoot(resolvedARMode);
|
|
7480
7546
|
markerControlsRef.current = new THREEx.ArMarkerControls(
|
|
7481
7547
|
arToolkitContext,
|
|
7482
7548
|
markerRoot,
|
|
@@ -7517,6 +7583,8 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7517
7583
|
mirrored,
|
|
7518
7584
|
onCameraReady,
|
|
7519
7585
|
resize,
|
|
7586
|
+
attachModelRoot,
|
|
7587
|
+
resolvedARMode,
|
|
7520
7588
|
resolvedMarkerConfig
|
|
7521
7589
|
]);
|
|
7522
7590
|
const loadMMDResources = React10.useCallback(async () => {
|
|
@@ -7610,12 +7678,19 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7610
7678
|
onModelPlaced?.();
|
|
7611
7679
|
return;
|
|
7612
7680
|
}
|
|
7681
|
+
if (markerPlacementMode === "follow-marker") {
|
|
7682
|
+
updateModelPlacement(markerDetectedRef.current);
|
|
7683
|
+
if (markerDetectedRef.current) {
|
|
7684
|
+
onModelPlaced?.();
|
|
7685
|
+
}
|
|
7686
|
+
return;
|
|
7687
|
+
}
|
|
7613
7688
|
if (!markerRootRef.current) return;
|
|
7614
7689
|
modelRootRef.current.position.copy(markerRootRef.current.position);
|
|
7615
7690
|
modelRootRef.current.quaternion.copy(markerRootRef.current.quaternion);
|
|
7616
7691
|
updateModelPlacement(true);
|
|
7617
7692
|
onModelPlaced?.();
|
|
7618
|
-
}, [onModelPlaced, resolvedARMode, updateModelPlacement]);
|
|
7693
|
+
}, [markerPlacementMode, onModelPlaced, resolvedARMode, updateModelPlacement]);
|
|
7619
7694
|
const removeModel = React10.useCallback(() => {
|
|
7620
7695
|
updateModelPlacement(false);
|
|
7621
7696
|
}, [updateModelPlacement]);
|
|
@@ -7768,7 +7843,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7768
7843
|
/* @__PURE__ */ React10__default.default.createElement("canvas", { ref: canvasRef, className: "absolute inset-0 w-full h-full", style: mirroredStyle }),
|
|
7769
7844
|
isLoading && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-black/70 text-white z-20" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-b-2 border-white mx-auto mb-3" }), /* @__PURE__ */ React10__default.default.createElement("div", null, "Initializing AR..."))),
|
|
7770
7845
|
error && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-red-950/80 text-white z-20" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-center max-w-sm px-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-lg font-semibold mb-2" }, "AR Error"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-sm text-red-200" }, error))),
|
|
7771
|
-
arReady && !error && /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, resolvedARMode !== "overlay" /* Overlay */ && !modelPlaced && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute top-4 left-4 right-4 bg-black/70 text-white p-3 rounded-lg text-sm z-10" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "font-semibold mb-1" }, "Marker Placement"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-200" },
|
|
7846
|
+
arReady && !error && /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, resolvedARMode !== "overlay" /* Overlay */ && !modelPlaced && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute top-4 left-4 right-4 bg-black/70 text-white p-3 rounded-lg text-sm z-10" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "font-semibold mb-1" }, "Marker Placement"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-200" }, markerPlacementMode === "follow-marker" ? "Align the marker in view, model will be placed automatically." : `Align the marker in view, then tap "${placementText}" to place the model.`), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-2" }, markerDetected ? /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-green-400" }, "Marker detected") : /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-yellow-400" }, "Waiting for marker..."))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute top-4 right-4 flex items-center space-x-2 z-10" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
7772
7847
|
"span",
|
|
7773
7848
|
{
|
|
7774
7849
|
className: clsx.clsx("h-2.5 w-2.5 rounded-full", cameraReady ? "bg-green-400" : "bg-red-400"),
|
|
@@ -7793,7 +7868,7 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7793
7868
|
className: "px-4 py-2 rounded-lg bg-gray-700 text-white hover:bg-gray-600"
|
|
7794
7869
|
},
|
|
7795
7870
|
"Settings"
|
|
7796
|
-
), resolvedARMode !== "overlay" /* Overlay */ && !modelPlaced && /* @__PURE__ */ React10__default.default.createElement(
|
|
7871
|
+
), resolvedARMode !== "overlay" /* Overlay */ && markerPlacementMode === "manual" && !modelPlaced && /* @__PURE__ */ React10__default.default.createElement(
|
|
7797
7872
|
"button",
|
|
7798
7873
|
{
|
|
7799
7874
|
onClick: placeModel,
|
|
@@ -7860,6 +7935,13 @@ var MMDARApp = React10.forwardRef((props, ref) => {
|
|
|
7860
7935
|
},
|
|
7861
7936
|
/* @__PURE__ */ React10__default.default.createElement("option", { value: "overlay" /* Overlay */ }, "Overlay"),
|
|
7862
7937
|
/* @__PURE__ */ React10__default.default.createElement("option", { value: "world-fixed" /* WorldFixed */ }, "World Fixed")
|
|
7938
|
+
)), /* @__PURE__ */ React10__default.default.createElement("label", { className: "block text-xs text-gray-300" }, "Marker Placement", /* @__PURE__ */ React10__default.default.createElement(
|
|
7939
|
+
"input",
|
|
7940
|
+
{
|
|
7941
|
+
value: markerPlacementMode === "follow-marker" ? "Auto Follow" : "Manual Place",
|
|
7942
|
+
readOnly: true,
|
|
7943
|
+
className: "mt-1 w-full bg-gray-700 text-white text-sm rounded px-2 py-1 opacity-70"
|
|
7944
|
+
}
|
|
7863
7945
|
)), /* @__PURE__ */ React10__default.default.createElement("label", { className: "block text-xs text-gray-300" }, "Camera", /* @__PURE__ */ React10__default.default.createElement(
|
|
7864
7946
|
"select",
|
|
7865
7947
|
{
|