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