@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/angular.cjs CHANGED
@@ -6221,7 +6221,7 @@ var ThreeDPlugin = class {
6221
6221
  {
6222
6222
  id: "fit-page",
6223
6223
  icon: "fit-page",
6224
- label: "Reset Camera View",
6224
+ label: "Fit to Page",
6225
6225
  type: "button",
6226
6226
  group: "zoom",
6227
6227
  execute: () => instance.fitToPage?.()
@@ -6234,6 +6234,14 @@ var ThreeDPlugin = class {
6234
6234
  group: "zoom",
6235
6235
  execute: () => instance.resetZoom?.()
6236
6236
  },
6237
+ {
6238
+ id: "fit-width",
6239
+ icon: "fit-width",
6240
+ label: "Fit to Width",
6241
+ type: "button",
6242
+ group: "zoom",
6243
+ execute: () => instance.fitToWidth?.()
6244
+ },
6237
6245
  {
6238
6246
  id: "rotate-cw",
6239
6247
  icon: "rotate-cw",
@@ -6265,21 +6273,49 @@ var ThreeDPlugin = class {
6265
6273
  async render(ctx) {
6266
6274
  const container = ctx.container;
6267
6275
  container.innerHTML = "";
6268
- container.style.overflow = "hidden";
6276
+ container.style.overflow = "auto";
6269
6277
  container.style.position = "relative";
6270
6278
  container.style.width = "100%";
6271
6279
  container.style.height = "100%";
6280
+ container.style.padding = "0";
6272
6281
  container.style.background = "#1a1a1a";
6273
- const width = container.clientWidth || 800;
6274
- const height = container.clientHeight || 600;
6282
+ let currentZoom = 1;
6283
+ let isUserZoomed = false;
6284
+ let baseW = Math.max(100, container.clientWidth || 800);
6285
+ let baseH = Math.max(100, container.clientHeight || 600);
6286
+ const updateBaseDimensions = () => {
6287
+ baseW = Math.max(100, container.clientWidth || 800);
6288
+ baseH = Math.max(100, container.clientHeight || 600);
6289
+ };
6290
+ const scrollWrapper = document.createElement("div");
6291
+ scrollWrapper.className = "fp-3d-scroll-wrapper";
6292
+ scrollWrapper.style.minWidth = "100%";
6293
+ scrollWrapper.style.minHeight = "100%";
6294
+ scrollWrapper.style.width = "max-content";
6295
+ scrollWrapper.style.height = "max-content";
6296
+ scrollWrapper.style.display = "flex";
6297
+ scrollWrapper.style.flexDirection = "column";
6298
+ scrollWrapper.style.alignItems = "center";
6299
+ scrollWrapper.style.justifyContent = "flex-start";
6300
+ scrollWrapper.style.boxSizing = "border-box";
6301
+ const sizer = document.createElement("div");
6302
+ sizer.className = "fp-3d-sizer";
6303
+ sizer.style.position = "relative";
6304
+ sizer.style.flexShrink = "0";
6305
+ sizer.style.display = "flex";
6306
+ sizer.style.justifyContent = "center";
6307
+ sizer.style.alignItems = "center";
6308
+ sizer.style.margin = "auto 0";
6275
6309
  const scene = new THREE__namespace.Scene();
6276
6310
  scene.background = new THREE__namespace.Color(1973796);
6277
- const camera = new THREE__namespace.PerspectiveCamera(45, width / height, 0.1, 2e3);
6311
+ const camera = new THREE__namespace.PerspectiveCamera(45, baseW / baseH, 0.1, 2e3);
6278
6312
  const renderer = new THREE__namespace.WebGLRenderer({ antialias: true });
6279
- renderer.setSize(width, height);
6280
- renderer.setPixelRatio(window.devicePixelRatio);
6313
+ renderer.setSize(baseW, baseH);
6314
+ renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
6281
6315
  renderer.shadowMap.enabled = true;
6282
- container.appendChild(renderer.domElement);
6316
+ sizer.appendChild(renderer.domElement);
6317
+ scrollWrapper.appendChild(sizer);
6318
+ container.appendChild(scrollWrapper);
6283
6319
  const controls = new OrbitControls_js.OrbitControls(camera, renderer.domElement);
6284
6320
  controls.enableDamping = true;
6285
6321
  controls.dampingFactor = 0.05;
@@ -6293,7 +6329,7 @@ var ThreeDPlugin = class {
6293
6329
  scene.add(dirLight2);
6294
6330
  const grid = new THREE__namespace.GridHelper(200, 20, 4473924, 2236962);
6295
6331
  scene.add(grid);
6296
- let meshGroup = new THREE__namespace.Group();
6332
+ const meshGroup = new THREE__namespace.Group();
6297
6333
  let isWireframe = false;
6298
6334
  const ext = ctx.metadata.extension?.toLowerCase();
6299
6335
  const materials = [];
@@ -6349,6 +6385,24 @@ var ThreeDPlugin = class {
6349
6385
  controls.update();
6350
6386
  };
6351
6387
  fitCamera();
6388
+ const applyZoom = () => {
6389
+ if (!isUserZoomed) {
6390
+ updateBaseDimensions();
6391
+ }
6392
+ const boxW = Math.round(baseW * currentZoom);
6393
+ const boxH = Math.round(baseH * currentZoom);
6394
+ sizer.style.width = `${boxW}px`;
6395
+ sizer.style.height = `${boxH}px`;
6396
+ sizer.style.margin = boxH < container.clientHeight ? "auto 0" : "0";
6397
+ renderer.domElement.style.width = `${boxW}px`;
6398
+ renderer.domElement.style.height = `${boxH}px`;
6399
+ renderer.domElement.style.maxWidth = "none";
6400
+ renderer.domElement.style.maxHeight = "none";
6401
+ renderer.setSize(boxW, boxH, false);
6402
+ camera.aspect = boxW / boxH;
6403
+ camera.updateProjectionMatrix();
6404
+ };
6405
+ applyZoom();
6352
6406
  let animId;
6353
6407
  const animate = () => {
6354
6408
  animId = requestAnimationFrame(animate);
@@ -6357,11 +6411,10 @@ var ThreeDPlugin = class {
6357
6411
  };
6358
6412
  animate();
6359
6413
  const resizeObserver = new ResizeObserver(() => {
6360
- const newWidth = container.clientWidth || 800;
6361
- const newHeight = container.clientHeight || 600;
6362
- camera.aspect = newWidth / newHeight;
6363
- camera.updateProjectionMatrix();
6364
- renderer.setSize(newWidth, newHeight);
6414
+ if (!isUserZoomed && currentZoom === 1) {
6415
+ updateBaseDimensions();
6416
+ applyZoom();
6417
+ }
6365
6418
  });
6366
6419
  resizeObserver.observe(container);
6367
6420
  const cleanup = () => {
@@ -6375,22 +6428,51 @@ var ThreeDPlugin = class {
6375
6428
  child.geometry.dispose();
6376
6429
  }
6377
6430
  });
6431
+ scrollWrapper.remove();
6378
6432
  container.innerHTML = "";
6379
6433
  };
6380
6434
  ctx.signal.addEventListener("abort", cleanup);
6381
6435
  return {
6382
6436
  destroy: cleanup,
6383
6437
  zoomIn: () => {
6384
- camera.position.multiplyScalar(0.85);
6385
- controls.update();
6438
+ isUserZoomed = true;
6439
+ currentZoom = Math.min(5, Number((currentZoom * 1.25).toFixed(2)));
6440
+ applyZoom();
6386
6441
  },
6387
6442
  zoomOut: () => {
6388
- camera.position.multiplyScalar(1.15);
6389
- controls.update();
6443
+ currentZoom = Math.max(0.2, Number((currentZoom / 1.25).toFixed(2)));
6444
+ if (currentZoom <= 1) {
6445
+ isUserZoomed = false;
6446
+ }
6447
+ applyZoom();
6448
+ },
6449
+ fitToPage: () => {
6450
+ isUserZoomed = false;
6451
+ currentZoom = 1;
6452
+ updateBaseDimensions();
6453
+ applyZoom();
6454
+ container.scrollTop = 0;
6455
+ container.scrollLeft = 0;
6456
+ fitCamera();
6457
+ },
6458
+ fitToWidth: () => {
6459
+ isUserZoomed = false;
6460
+ currentZoom = 1;
6461
+ updateBaseDimensions();
6462
+ applyZoom();
6463
+ container.scrollTop = 0;
6464
+ container.scrollLeft = 0;
6465
+ fitCamera();
6466
+ },
6467
+ resetZoom: () => {
6468
+ isUserZoomed = false;
6469
+ currentZoom = 1;
6470
+ updateBaseDimensions();
6471
+ applyZoom();
6472
+ container.scrollTop = 0;
6473
+ container.scrollLeft = 0;
6474
+ fitCamera();
6390
6475
  },
6391
- fitToPage: fitCamera,
6392
- fitToWidth: fitCamera,
6393
- resetZoom: fitCamera,
6394
6476
  rotateCW: () => {
6395
6477
  isWireframe = !isWireframe;
6396
6478
  materials.forEach((m) => {