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.
Files changed (107) hide show
  1. package/dist/ai/llm/electron/index.js +2 -2
  2. package/dist/ai/llm/electron/index.js.map +1 -1
  3. package/dist/ai/llm/electron/index.mjs +2 -2
  4. package/dist/ai/llm/electron/index.mjs.map +1 -1
  5. package/dist/ai/llm/ui/electron/index.js +2 -2
  6. package/dist/ai/llm/ui/electron/index.js.map +1 -1
  7. package/dist/ai/llm/ui/electron/index.mjs +2 -2
  8. package/dist/ai/llm/ui/electron/index.mjs.map +1 -1
  9. package/dist/ai/llm/ui/web/index.js +2 -2
  10. package/dist/ai/llm/ui/web/index.js.map +1 -1
  11. package/dist/ai/llm/ui/web/index.mjs +2 -2
  12. package/dist/ai/llm/ui/web/index.mjs.map +1 -1
  13. package/dist/ai/llm/web/index.js +2 -2
  14. package/dist/ai/llm/web/index.js.map +1 -1
  15. package/dist/ai/llm/web/index.mjs +2 -2
  16. package/dist/ai/llm/web/index.mjs.map +1 -1
  17. package/dist/ar/index.d.mts +2 -2
  18. package/dist/ar/index.d.ts +2 -2
  19. package/dist/ar/index.js +43 -4
  20. package/dist/ar/index.js.map +1 -1
  21. package/dist/ar/index.mjs +43 -4
  22. package/dist/ar/index.mjs.map +1 -1
  23. package/dist/{booking-BX_0AXU6.d.mts → booking-473Db8Bo.d.mts} +6 -0
  24. package/dist/{booking-BX_0AXU6.d.ts → booking-473Db8Bo.d.ts} +6 -0
  25. package/dist/{bookingAdminService-ChzuoCUx.d.ts → bookingAdminService-DqQ7hEGw.d.ts} +1 -1
  26. package/dist/{bookingAdminService-B_D_Jq1W.d.mts → bookingAdminService-SBX4JA_U.d.mts} +1 -1
  27. package/dist/calendar/index.js +8 -4
  28. package/dist/calendar/index.js.map +1 -1
  29. package/dist/calendar/index.mjs +8 -4
  30. package/dist/calendar/index.mjs.map +1 -1
  31. package/dist/calendar/web/index.js +8 -4
  32. package/dist/calendar/web/index.js.map +1 -1
  33. package/dist/calendar/web/index.mjs +8 -4
  34. package/dist/calendar/web/index.mjs.map +1 -1
  35. package/dist/{client-B6JtOkEq.d.ts → client-Bkn6mRI7.d.ts} +1 -1
  36. package/dist/{client-DkSveTk-.d.mts → client-exYn2Qla.d.mts} +1 -1
  37. package/dist/components/index.d.mts +2 -0
  38. package/dist/components/index.d.ts +2 -0
  39. package/dist/components/index.js +8 -4
  40. package/dist/components/index.js.map +1 -1
  41. package/dist/components/index.mjs +8 -4
  42. package/dist/components/index.mjs.map +1 -1
  43. package/dist/{index-B9vIHUEv.d.ts → index-BJpxvH7X.d.ts} +1 -1
  44. package/dist/{index-C3_UPPdv.d.ts → index-CdTIsNsy.d.ts} +2 -2
  45. package/dist/{index-DDuTPOHu.d.mts → index-Cum2EknK.d.mts} +1 -1
  46. package/dist/{index-D6ZIkvt-.d.mts → index-DyxLpkmm.d.mts} +2 -2
  47. package/dist/{index-BjYZSfZa.d.ts → index-XTV6IU-M.d.ts} +2 -2
  48. package/dist/{index-3qQN9Lh_.d.mts → index-z15F7afa.d.mts} +2 -2
  49. package/dist/index.js +8 -4
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.mjs +8 -4
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/mmd/index.d.mts +9 -3
  54. package/dist/mmd/index.d.ts +9 -3
  55. package/dist/mmd/index.js +95 -13
  56. package/dist/mmd/index.js.map +1 -1
  57. package/dist/mmd/index.mjs +95 -13
  58. package/dist/mmd/index.mjs.map +1 -1
  59. package/dist/portfolio/index.js +2 -2
  60. package/dist/portfolio/index.js.map +1 -1
  61. package/dist/portfolio/index.mjs +2 -2
  62. package/dist/portfolio/index.mjs.map +1 -1
  63. package/dist/showmasterpiece/core.d.mts +3 -3
  64. package/dist/showmasterpiece/core.d.ts +3 -3
  65. package/dist/showmasterpiece/db.d.mts +25 -0
  66. package/dist/showmasterpiece/db.d.ts +25 -0
  67. package/dist/showmasterpiece/db.js +35 -0
  68. package/dist/showmasterpiece/db.js.map +1 -1
  69. package/dist/showmasterpiece/db.mjs +35 -0
  70. package/dist/showmasterpiece/db.mjs.map +1 -1
  71. package/dist/showmasterpiece/index.js +279 -226
  72. package/dist/showmasterpiece/index.js.map +1 -1
  73. package/dist/showmasterpiece/index.mjs +279 -226
  74. package/dist/showmasterpiece/index.mjs.map +1 -1
  75. package/dist/showmasterpiece/logic/index.d.mts +2 -2
  76. package/dist/showmasterpiece/logic/index.d.ts +2 -2
  77. package/dist/showmasterpiece/server/index.js +35 -0
  78. package/dist/showmasterpiece/server/index.js.map +1 -1
  79. package/dist/showmasterpiece/server/index.mjs +35 -0
  80. package/dist/showmasterpiece/server/index.mjs.map +1 -1
  81. package/dist/showmasterpiece/service/api/index.d.mts +1 -1
  82. package/dist/showmasterpiece/service/api/index.d.ts +1 -1
  83. package/dist/showmasterpiece/service/client-business/index.d.mts +3 -3
  84. package/dist/showmasterpiece/service/client-business/index.d.ts +3 -3
  85. package/dist/showmasterpiece/service/index.d.mts +6 -6
  86. package/dist/showmasterpiece/service/index.d.ts +6 -6
  87. package/dist/showmasterpiece/service/miniapp/index.d.mts +2 -2
  88. package/dist/showmasterpiece/service/miniapp/index.d.ts +2 -2
  89. package/dist/showmasterpiece/service/web/index.d.mts +4 -4
  90. package/dist/showmasterpiece/service/web/index.d.ts +4 -4
  91. package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -2
  92. package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -2
  93. package/dist/showmasterpiece/ui/miniapp/index.js +38 -8
  94. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
  95. package/dist/showmasterpiece/ui/miniapp/index.mjs +38 -8
  96. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
  97. package/dist/showmasterpiece/ui/web/index.js +279 -226
  98. package/dist/showmasterpiece/ui/web/index.js.map +1 -1
  99. package/dist/showmasterpiece/ui/web/index.mjs +279 -226
  100. package/dist/showmasterpiece/ui/web/index.mjs.map +1 -1
  101. package/dist/showmasterpiece/web/index.js +279 -226
  102. package/dist/showmasterpiece/web/index.js.map +1 -1
  103. package/dist/showmasterpiece/web/index.mjs +279 -226
  104. package/dist/showmasterpiece/web/index.mjs.map +1 -1
  105. package/dist/{types-CvKvpyN8.d.mts → types-D4vSK3AJ.d.mts} +2 -1
  106. package/dist/{types-CvKvpyN8.d.ts → types-D4vSK3AJ.d.ts} +2 -1
  107. package/package.json +1 -1
@@ -7105,6 +7105,42 @@ var DEFAULT_AR_ASSETS = {
7105
7105
 
7106
7106
  // src/ar/load-arjs.ts
7107
7107
  var loadPromise = null;
7108
+ function isTHREExNamespace(value) {
7109
+ if (!value || typeof value !== "object") return false;
7110
+ const candidate = value;
7111
+ return typeof candidate.ArToolkitSource === "function" && typeof candidate.ArToolkitContext === "function" && typeof candidate.ArMarkerControls === "function";
7112
+ }
7113
+ function resolveTHREExNamespace(moduleExports) {
7114
+ const arWindow = window;
7115
+ const globalTHREEx = arWindow.THREEx;
7116
+ if (isTHREExNamespace(globalTHREEx)) {
7117
+ return globalTHREEx;
7118
+ }
7119
+ if (isTHREExNamespace(moduleExports)) {
7120
+ return moduleExports;
7121
+ }
7122
+ const record = moduleExports;
7123
+ const defaultExport = record?.default;
7124
+ if (isTHREExNamespace(defaultExport)) {
7125
+ return defaultExport;
7126
+ }
7127
+ if (isTHREExNamespace(record?.THREEx)) {
7128
+ return record?.THREEx;
7129
+ }
7130
+ const arjsCandidate = record?.ARjs ?? defaultExport ?? record ?? arWindow.ARjs;
7131
+ const arjsRecord = arjsCandidate;
7132
+ const source = arjsRecord?.Source;
7133
+ const context = arjsRecord?.Context;
7134
+ const markerControls = arjsRecord?.MarkerControls;
7135
+ if (typeof source === "function" && typeof context === "function" && typeof markerControls === "function") {
7136
+ return {
7137
+ ArToolkitSource: source,
7138
+ ArToolkitContext: context,
7139
+ ArMarkerControls: markerControls
7140
+ };
7141
+ }
7142
+ return void 0;
7143
+ }
7108
7144
  async function loadARJS(options = {}) {
7109
7145
  if (typeof window === "undefined") {
7110
7146
  throw new Error("AR.js can only be loaded in a browser environment.");
@@ -7114,15 +7150,18 @@ async function loadARJS(options = {}) {
7114
7150
  }
7115
7151
  const existing = window.THREEx;
7116
7152
  if (existing && !options.forceReload) {
7117
- return existing;
7153
+ if (isTHREExNamespace(existing)) {
7154
+ return existing;
7155
+ }
7118
7156
  }
7119
7157
  if (!loadPromise || options.forceReload) {
7120
7158
  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');
7121
- loadPromise = importPromise.then(() => {
7122
- const THREEx = window.THREEx;
7159
+ loadPromise = importPromise.then((loadedModule) => {
7160
+ const THREEx = resolveTHREExNamespace(loadedModule);
7123
7161
  if (!THREEx) {
7124
- throw new Error("AR.js loaded, but THREEx namespace was not found.");
7162
+ throw new Error("AR.js loaded, but THREEx namespace was not found in module exports or window.");
7125
7163
  }
7164
+ window.THREEx = THREEx;
7126
7165
  return THREEx;
7127
7166
  });
7128
7167
  }
@@ -7165,6 +7204,7 @@ var MMDARApp = forwardRef((props, ref) => {
7165
7204
  cameraConfig,
7166
7205
  cameraParametersUrl,
7167
7206
  markerConfig,
7207
+ markerPlacementMode = "manual",
7168
7208
  mirrored = false,
7169
7209
  showSettings,
7170
7210
  modelPresets,
@@ -7206,6 +7246,7 @@ var MMDARApp = forwardRef((props, ref) => {
7206
7246
  const mmdMeshRef = useRef(null);
7207
7247
  const animationFrameRef = useRef(null);
7208
7248
  const markerDetectedRef = useRef(false);
7249
+ const markerPlacedOnceRef = useRef(false);
7209
7250
  const audioRef = useRef(null);
7210
7251
  const autoPlayRef = useRef(autoPlay);
7211
7252
  const [isLoading, setIsLoading] = useState(true);
@@ -7236,6 +7277,7 @@ var MMDARApp = forwardRef((props, ref) => {
7236
7277
  return {
7237
7278
  type: markerConfig?.type ?? "pattern",
7238
7279
  patternUrl: markerConfig?.patternUrl ?? DEFAULT_AR_ASSETS.patternUrl,
7280
+ descriptorsUrl: markerConfig?.descriptorsUrl,
7239
7281
  barcodeValue: markerConfig?.barcodeValue ?? 0,
7240
7282
  changeMatrixMode: markerConfig?.changeMatrixMode ?? "modelViewMatrix"
7241
7283
  };
@@ -7308,14 +7350,24 @@ var MMDARApp = forwardRef((props, ref) => {
7308
7350
  modelRootRef.current.quaternion.identity();
7309
7351
  updateModelPlacement(true);
7310
7352
  } else {
7311
- if (modelRootRef.current.parent !== sceneRef.current) {
7312
- modelRootRef.current.parent?.remove(modelRootRef.current);
7313
- sceneRef.current.add(modelRootRef.current);
7353
+ if (markerPlacementMode === "follow-marker" && markerRootRef.current) {
7354
+ if (modelRootRef.current.parent !== markerRootRef.current) {
7355
+ modelRootRef.current.parent?.remove(modelRootRef.current);
7356
+ markerRootRef.current.add(modelRootRef.current);
7357
+ }
7358
+ modelRootRef.current.position.set(0, 0, 0);
7359
+ modelRootRef.current.quaternion.identity();
7360
+ updateModelPlacement(markerDetectedRef.current);
7361
+ } else {
7362
+ if (modelRootRef.current.parent !== sceneRef.current) {
7363
+ modelRootRef.current.parent?.remove(modelRootRef.current);
7364
+ sceneRef.current.add(modelRootRef.current);
7365
+ }
7366
+ updateModelPlacement(initialModelVisible);
7314
7367
  }
7315
- updateModelPlacement(initialModelVisible);
7316
7368
  }
7317
7369
  },
7318
- [initialModelVisible, updateModelPlacement]
7370
+ [initialModelVisible, markerPlacementMode, updateModelPlacement]
7319
7371
  );
7320
7372
  const stopCameraStream = useCallback(() => {
7321
7373
  const source = arToolkitSourceRef.current;
@@ -7342,6 +7394,7 @@ var MMDARApp = forwardRef((props, ref) => {
7342
7394
  arToolkitSourceRef.current = null;
7343
7395
  arToolkitContextRef.current = null;
7344
7396
  markerDetectedRef.current = false;
7397
+ markerPlacedOnceRef.current = false;
7345
7398
  setMarkerDetected(false);
7346
7399
  setCameraReady(false);
7347
7400
  setArReady(false);
@@ -7417,6 +7470,13 @@ var MMDARApp = forwardRef((props, ref) => {
7417
7470
  if (isVisible !== markerDetectedRef.current) {
7418
7471
  markerDetectedRef.current = isVisible;
7419
7472
  setMarkerDetected(isVisible);
7473
+ if (resolvedARMode !== "overlay" /* Overlay */ && markerPlacementMode === "follow-marker") {
7474
+ updateModelPlacement(isVisible);
7475
+ if (isVisible && !markerPlacedOnceRef.current) {
7476
+ markerPlacedOnceRef.current = true;
7477
+ onModelPlaced?.();
7478
+ }
7479
+ }
7420
7480
  }
7421
7481
  }
7422
7482
  }
@@ -7427,10 +7487,15 @@ var MMDARApp = forwardRef((props, ref) => {
7427
7487
  renderer.render(scene, camera);
7428
7488
  };
7429
7489
  render();
7430
- }, []);
7490
+ }, [markerPlacementMode, onModelPlaced, resolvedARMode, updateModelPlacement]);
7431
7491
  const setupAR = useCallback(async (facingOverride) => {
7432
7492
  if (!sceneRef.current || !cameraRef.current) return;
7433
7493
  const THREEx = await loadARJS({ three: THREE2 });
7494
+ if (resolvedMarkerConfig.type === "nft" && !resolvedMarkerConfig.descriptorsUrl) {
7495
+ throw new Error(
7496
+ 'markerConfig.descriptorsUrl is required when markerConfig.type is "nft".'
7497
+ );
7498
+ }
7434
7499
  const facingMode = facingOverride ?? cameraFacing;
7435
7500
  const sourceWidth = typeof cameraConfig?.width === "number" ? cameraConfig.width : cameraConfig?.width?.ideal;
7436
7501
  const sourceHeight = typeof cameraConfig?.height === "number" ? cameraConfig.height : cameraConfig?.height?.ideal;
@@ -7450,6 +7515,7 @@ var MMDARApp = forwardRef((props, ref) => {
7450
7515
  const markerRoot = new THREE2.Group();
7451
7516
  markerRootRef.current = markerRoot;
7452
7517
  sceneRef.current.add(markerRoot);
7518
+ attachModelRoot(resolvedARMode);
7453
7519
  markerControlsRef.current = new THREEx.ArMarkerControls(
7454
7520
  arToolkitContext,
7455
7521
  markerRoot,
@@ -7490,6 +7556,8 @@ var MMDARApp = forwardRef((props, ref) => {
7490
7556
  mirrored,
7491
7557
  onCameraReady,
7492
7558
  resize,
7559
+ attachModelRoot,
7560
+ resolvedARMode,
7493
7561
  resolvedMarkerConfig
7494
7562
  ]);
7495
7563
  const loadMMDResources = useCallback(async () => {
@@ -7583,12 +7651,19 @@ var MMDARApp = forwardRef((props, ref) => {
7583
7651
  onModelPlaced?.();
7584
7652
  return;
7585
7653
  }
7654
+ if (markerPlacementMode === "follow-marker") {
7655
+ updateModelPlacement(markerDetectedRef.current);
7656
+ if (markerDetectedRef.current) {
7657
+ onModelPlaced?.();
7658
+ }
7659
+ return;
7660
+ }
7586
7661
  if (!markerRootRef.current) return;
7587
7662
  modelRootRef.current.position.copy(markerRootRef.current.position);
7588
7663
  modelRootRef.current.quaternion.copy(markerRootRef.current.quaternion);
7589
7664
  updateModelPlacement(true);
7590
7665
  onModelPlaced?.();
7591
- }, [onModelPlaced, resolvedARMode, updateModelPlacement]);
7666
+ }, [markerPlacementMode, onModelPlaced, resolvedARMode, updateModelPlacement]);
7592
7667
  const removeModel = useCallback(() => {
7593
7668
  updateModelPlacement(false);
7594
7669
  }, [updateModelPlacement]);
@@ -7741,7 +7816,7 @@ var MMDARApp = forwardRef((props, ref) => {
7741
7816
  /* @__PURE__ */ React10.createElement("canvas", { ref: canvasRef, className: "absolute inset-0 w-full h-full", style: mirroredStyle }),
7742
7817
  isLoading && /* @__PURE__ */ React10.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-black/70 text-white z-20" }, /* @__PURE__ */ React10.createElement("div", { className: "text-center" }, /* @__PURE__ */ React10.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-b-2 border-white mx-auto mb-3" }), /* @__PURE__ */ React10.createElement("div", null, "Initializing AR..."))),
7743
7818
  error && /* @__PURE__ */ React10.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-red-950/80 text-white z-20" }, /* @__PURE__ */ React10.createElement("div", { className: "text-center max-w-sm px-4" }, /* @__PURE__ */ React10.createElement("div", { className: "text-lg font-semibold mb-2" }, "AR Error"), /* @__PURE__ */ React10.createElement("div", { className: "text-sm text-red-200" }, error))),
7744
- arReady && !error && /* @__PURE__ */ React10.createElement(React10.Fragment, null, resolvedARMode !== "overlay" /* Overlay */ && !modelPlaced && /* @__PURE__ */ React10.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.createElement("div", { className: "font-semibold mb-1" }, "Marker Placement"), /* @__PURE__ */ React10.createElement("div", { className: "text-gray-200" }, 'Align the marker in view, then tap "', placementText, '" to place the model.'), /* @__PURE__ */ React10.createElement("div", { className: "mt-2" }, markerDetected ? /* @__PURE__ */ React10.createElement("span", { className: "text-green-400" }, "Marker detected") : /* @__PURE__ */ React10.createElement("span", { className: "text-yellow-400" }, "Waiting for marker..."))), /* @__PURE__ */ React10.createElement("div", { className: "absolute top-4 right-4 flex items-center space-x-2 z-10" }, /* @__PURE__ */ React10.createElement(
7819
+ arReady && !error && /* @__PURE__ */ React10.createElement(React10.Fragment, null, resolvedARMode !== "overlay" /* Overlay */ && !modelPlaced && /* @__PURE__ */ React10.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.createElement("div", { className: "font-semibold mb-1" }, "Marker Placement"), /* @__PURE__ */ React10.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.createElement("div", { className: "mt-2" }, markerDetected ? /* @__PURE__ */ React10.createElement("span", { className: "text-green-400" }, "Marker detected") : /* @__PURE__ */ React10.createElement("span", { className: "text-yellow-400" }, "Waiting for marker..."))), /* @__PURE__ */ React10.createElement("div", { className: "absolute top-4 right-4 flex items-center space-x-2 z-10" }, /* @__PURE__ */ React10.createElement(
7745
7820
  "span",
7746
7821
  {
7747
7822
  className: clsx("h-2.5 w-2.5 rounded-full", cameraReady ? "bg-green-400" : "bg-red-400"),
@@ -7766,7 +7841,7 @@ var MMDARApp = forwardRef((props, ref) => {
7766
7841
  className: "px-4 py-2 rounded-lg bg-gray-700 text-white hover:bg-gray-600"
7767
7842
  },
7768
7843
  "Settings"
7769
- ), resolvedARMode !== "overlay" /* Overlay */ && !modelPlaced && /* @__PURE__ */ React10.createElement(
7844
+ ), resolvedARMode !== "overlay" /* Overlay */ && markerPlacementMode === "manual" && !modelPlaced && /* @__PURE__ */ React10.createElement(
7770
7845
  "button",
7771
7846
  {
7772
7847
  onClick: placeModel,
@@ -7833,6 +7908,13 @@ var MMDARApp = forwardRef((props, ref) => {
7833
7908
  },
7834
7909
  /* @__PURE__ */ React10.createElement("option", { value: "overlay" /* Overlay */ }, "Overlay"),
7835
7910
  /* @__PURE__ */ React10.createElement("option", { value: "world-fixed" /* WorldFixed */ }, "World Fixed")
7911
+ )), /* @__PURE__ */ React10.createElement("label", { className: "block text-xs text-gray-300" }, "Marker Placement", /* @__PURE__ */ React10.createElement(
7912
+ "input",
7913
+ {
7914
+ value: markerPlacementMode === "follow-marker" ? "Auto Follow" : "Manual Place",
7915
+ readOnly: true,
7916
+ className: "mt-1 w-full bg-gray-700 text-white text-sm rounded px-2 py-1 opacity-70"
7917
+ }
7836
7918
  )), /* @__PURE__ */ React10.createElement("label", { className: "block text-xs text-gray-300" }, "Camera", /* @__PURE__ */ React10.createElement(
7837
7919
  "select",
7838
7920
  {