@files-preview-app/preview-file 1.3.17 → 1.3.19

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/vue.cjs CHANGED
@@ -6173,7 +6173,7 @@ var ThreeDPlugin = class {
6173
6173
  {
6174
6174
  id: "fit-page",
6175
6175
  icon: "fit-page",
6176
- label: "Reset Camera View",
6176
+ label: "Fit to Page",
6177
6177
  type: "button",
6178
6178
  group: "zoom",
6179
6179
  execute: () => instance.fitToPage?.()
@@ -6186,6 +6186,14 @@ var ThreeDPlugin = class {
6186
6186
  group: "zoom",
6187
6187
  execute: () => instance.resetZoom?.()
6188
6188
  },
6189
+ {
6190
+ id: "fit-width",
6191
+ icon: "fit-width",
6192
+ label: "Fit to Width",
6193
+ type: "button",
6194
+ group: "zoom",
6195
+ execute: () => instance.fitToWidth?.()
6196
+ },
6189
6197
  {
6190
6198
  id: "rotate-cw",
6191
6199
  icon: "rotate-cw",
@@ -6217,21 +6225,49 @@ var ThreeDPlugin = class {
6217
6225
  async render(ctx) {
6218
6226
  const container = ctx.container;
6219
6227
  container.innerHTML = "";
6220
- container.style.overflow = "hidden";
6228
+ container.style.overflow = "auto";
6221
6229
  container.style.position = "relative";
6222
6230
  container.style.width = "100%";
6223
6231
  container.style.height = "100%";
6232
+ container.style.padding = "0";
6224
6233
  container.style.background = "#1a1a1a";
6225
- const width = container.clientWidth || 800;
6226
- const height = container.clientHeight || 600;
6234
+ let currentZoom = 1;
6235
+ let isUserZoomed = false;
6236
+ let baseW = Math.max(100, container.clientWidth || 800);
6237
+ let baseH = Math.max(100, container.clientHeight || 600);
6238
+ const updateBaseDimensions = () => {
6239
+ baseW = Math.max(100, container.clientWidth || 800);
6240
+ baseH = Math.max(100, container.clientHeight || 600);
6241
+ };
6242
+ const scrollWrapper = document.createElement("div");
6243
+ scrollWrapper.className = "fp-3d-scroll-wrapper";
6244
+ scrollWrapper.style.minWidth = "100%";
6245
+ scrollWrapper.style.minHeight = "100%";
6246
+ scrollWrapper.style.width = "max-content";
6247
+ scrollWrapper.style.height = "max-content";
6248
+ scrollWrapper.style.display = "flex";
6249
+ scrollWrapper.style.flexDirection = "column";
6250
+ scrollWrapper.style.alignItems = "center";
6251
+ scrollWrapper.style.justifyContent = "flex-start";
6252
+ scrollWrapper.style.boxSizing = "border-box";
6253
+ const sizer = document.createElement("div");
6254
+ sizer.className = "fp-3d-sizer";
6255
+ sizer.style.position = "relative";
6256
+ sizer.style.flexShrink = "0";
6257
+ sizer.style.display = "flex";
6258
+ sizer.style.justifyContent = "center";
6259
+ sizer.style.alignItems = "center";
6260
+ sizer.style.margin = "auto 0";
6227
6261
  const scene = new THREE__namespace.Scene();
6228
6262
  scene.background = new THREE__namespace.Color(1973796);
6229
- const camera = new THREE__namespace.PerspectiveCamera(45, width / height, 0.1, 2e3);
6263
+ const camera = new THREE__namespace.PerspectiveCamera(45, baseW / baseH, 0.1, 2e3);
6230
6264
  const renderer = new THREE__namespace.WebGLRenderer({ antialias: true });
6231
- renderer.setSize(width, height);
6232
- renderer.setPixelRatio(window.devicePixelRatio);
6265
+ renderer.setSize(baseW, baseH);
6266
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
6233
6267
  renderer.shadowMap.enabled = true;
6234
- container.appendChild(renderer.domElement);
6268
+ sizer.appendChild(renderer.domElement);
6269
+ scrollWrapper.appendChild(sizer);
6270
+ container.appendChild(scrollWrapper);
6235
6271
  const controls = new OrbitControls_js.OrbitControls(camera, renderer.domElement);
6236
6272
  controls.enableDamping = true;
6237
6273
  controls.dampingFactor = 0.05;
@@ -6245,7 +6281,7 @@ var ThreeDPlugin = class {
6245
6281
  scene.add(dirLight2);
6246
6282
  const grid = new THREE__namespace.GridHelper(200, 20, 4473924, 2236962);
6247
6283
  scene.add(grid);
6248
- let meshGroup = new THREE__namespace.Group();
6284
+ const meshGroup = new THREE__namespace.Group();
6249
6285
  let isWireframe = false;
6250
6286
  const ext = ctx.metadata.extension?.toLowerCase();
6251
6287
  const materials = [];
@@ -6301,6 +6337,24 @@ var ThreeDPlugin = class {
6301
6337
  controls.update();
6302
6338
  };
6303
6339
  fitCamera();
6340
+ const applyZoom = () => {
6341
+ if (!isUserZoomed) {
6342
+ updateBaseDimensions();
6343
+ }
6344
+ const boxW = Math.round(baseW * currentZoom);
6345
+ const boxH = Math.round(baseH * currentZoom);
6346
+ sizer.style.width = `${boxW}px`;
6347
+ sizer.style.height = `${boxH}px`;
6348
+ sizer.style.margin = boxH < container.clientHeight ? "auto 0" : "0";
6349
+ renderer.domElement.style.width = `${boxW}px`;
6350
+ renderer.domElement.style.height = `${boxH}px`;
6351
+ renderer.domElement.style.maxWidth = "none";
6352
+ renderer.domElement.style.maxHeight = "none";
6353
+ renderer.setSize(boxW, boxH, false);
6354
+ camera.aspect = boxW / boxH;
6355
+ camera.updateProjectionMatrix();
6356
+ };
6357
+ applyZoom();
6304
6358
  let animId;
6305
6359
  const animate = () => {
6306
6360
  animId = requestAnimationFrame(animate);
@@ -6309,11 +6363,10 @@ var ThreeDPlugin = class {
6309
6363
  };
6310
6364
  animate();
6311
6365
  const resizeObserver = new ResizeObserver(() => {
6312
- const newWidth = container.clientWidth || 800;
6313
- const newHeight = container.clientHeight || 600;
6314
- camera.aspect = newWidth / newHeight;
6315
- camera.updateProjectionMatrix();
6316
- renderer.setSize(newWidth, newHeight);
6366
+ if (!isUserZoomed && currentZoom === 1) {
6367
+ updateBaseDimensions();
6368
+ applyZoom();
6369
+ }
6317
6370
  });
6318
6371
  resizeObserver.observe(container);
6319
6372
  const cleanup = () => {
@@ -6327,22 +6380,51 @@ var ThreeDPlugin = class {
6327
6380
  child.geometry.dispose();
6328
6381
  }
6329
6382
  });
6383
+ scrollWrapper.remove();
6330
6384
  container.innerHTML = "";
6331
6385
  };
6332
6386
  ctx.signal.addEventListener("abort", cleanup);
6333
6387
  return {
6334
6388
  destroy: cleanup,
6335
6389
  zoomIn: () => {
6336
- camera.position.multiplyScalar(0.85);
6337
- controls.update();
6390
+ isUserZoomed = true;
6391
+ currentZoom = Math.min(5, Number((currentZoom * 1.25).toFixed(2)));
6392
+ applyZoom();
6338
6393
  },
6339
6394
  zoomOut: () => {
6340
- camera.position.multiplyScalar(1.15);
6341
- controls.update();
6395
+ currentZoom = Math.max(0.2, Number((currentZoom / 1.25).toFixed(2)));
6396
+ if (currentZoom <= 1) {
6397
+ isUserZoomed = false;
6398
+ }
6399
+ applyZoom();
6400
+ },
6401
+ fitToPage: () => {
6402
+ isUserZoomed = false;
6403
+ currentZoom = 1;
6404
+ updateBaseDimensions();
6405
+ applyZoom();
6406
+ container.scrollTop = 0;
6407
+ container.scrollLeft = 0;
6408
+ fitCamera();
6409
+ },
6410
+ fitToWidth: () => {
6411
+ isUserZoomed = false;
6412
+ currentZoom = 1;
6413
+ updateBaseDimensions();
6414
+ applyZoom();
6415
+ container.scrollTop = 0;
6416
+ container.scrollLeft = 0;
6417
+ fitCamera();
6418
+ },
6419
+ resetZoom: () => {
6420
+ isUserZoomed = false;
6421
+ currentZoom = 1;
6422
+ updateBaseDimensions();
6423
+ applyZoom();
6424
+ container.scrollTop = 0;
6425
+ container.scrollLeft = 0;
6426
+ fitCamera();
6342
6427
  },
6343
- fitToPage: fitCamera,
6344
- fitToWidth: fitCamera,
6345
- resetZoom: fitCamera,
6346
6428
  rotateCW: () => {
6347
6429
  isWireframe = !isWireframe;
6348
6430
  materials.forEach((m) => {