@innovastudio/contentbuilder 1.5.193 → 1.5.195

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbuilder",
3
3
  "type": "module",
4
- "version": "1.5.193",
4
+ "version": "1.5.195",
5
5
  "description": "",
6
6
  "main": "public/contentbuilder/contentbuilder.esm.js",
7
7
  "types": "index.d.ts",
@@ -46991,11 +46991,17 @@ class Image$1 {
46991
46991
  }
46992
46992
  const newPos = util.getElementPosition(elm);
46993
46993
  let scaleX = newPos.scaleX;
46994
+ let extraScaleX = this.getScale(elm).scaleX;
46995
+ let extraScaleY = this.getScale(elm).scaleX;
46994
46996
  imageTool.style.display = 'flex';
46995
46997
  let _toolwidth = imageTool.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
46996
46998
 
46997
- let w = elm.offsetWidth * scaleX * this.builder.opts.zoom;
46998
- let top = newPos.top + window.pageYOffset;
46999
+ let w = elm.offsetWidth * extraScaleX * scaleX * this.builder.opts.zoom;
47000
+ let h = elm.offsetHeight * extraScaleY * scaleX * this.builder.opts.zoom;
47001
+
47002
+ // Compensate for the vertical shift caused by scaling
47003
+ let scaleShiftY = (h - elm.offsetHeight * scaleX * this.builder.opts.zoom) / 2;
47004
+ let top = newPos.top + window.pageYOffset + scaleShiftY;
46999
47005
  let left = newPos.left + window.pageXOffset;
47000
47006
  let toolLeft = left + (w / 2 - _toolwidth / 2);
47001
47007
 
@@ -47009,7 +47015,10 @@ class Image$1 {
47009
47015
  }
47010
47016
  imageTool.style.top = top + 'px';
47011
47017
  imageTool.style.left = toolLeft + 'px';
47012
- if (!this.builder.activeImage.hasAttribute('data-noresize') && (this.builder.imageResizeOnBlock || !this.builder.activeImage.closest('.is-block'))) {
47018
+ const parent = elm.parentNode;
47019
+ const grandparent = parent && parent.parentNode;
47020
+ const hasWrapper = parent && parent.classList.contains('overflow-hidden') || grandparent && grandparent.classList.contains('overflow-hidden');
47021
+ if (!hasWrapper && !this.builder.activeImage.hasAttribute('data-noresize') && (this.builder.imageResizeOnBlock || !this.builder.activeImage.closest('.is-block'))) {
47013
47022
  let imageResizer = this.imageResizer;
47014
47023
  imageResizer.style.top = top + 'px';
47015
47024
  imageResizer.style.left = left + 'px';
@@ -47045,6 +47054,21 @@ class Image$1 {
47045
47054
  if (imageTool) imageTool.style.display = '';
47046
47055
  this.hideImageResizer();
47047
47056
  }
47057
+ getScale(element) {
47058
+ const computedStyle = window.getComputedStyle(element);
47059
+ const transform = computedStyle.transform;
47060
+ if (!transform || transform === 'none') {
47061
+ return {
47062
+ scaleX: 1,
47063
+ scaleY: 1
47064
+ };
47065
+ }
47066
+ const matrix = new DOMMatrix(transform);
47067
+ return {
47068
+ scaleX: matrix.a,
47069
+ scaleY: matrix.d
47070
+ };
47071
+ }
47048
47072
  click(e) {
47049
47073
  const util = this.builder.util;
47050
47074
  const dom = this.builder.dom;
@@ -47070,13 +47094,19 @@ class Image$1 {
47070
47094
  }
47071
47095
  const newPos = util.getElementPosition(elm);
47072
47096
  let scaleX = newPos.scaleX;
47097
+ let extraScaleX = this.getScale(elm).scaleX;
47098
+ let extraScaleY = this.getScale(elm).scaleX;
47073
47099
  this.renderTool();
47074
47100
  let imageTool = this.imageTool;
47075
47101
  imageTool.style.display = 'flex';
47076
47102
  let _toolwidth = imageTool.offsetWidth; //to get value, element must not hidden (display:none). So set display:flex before this.
47077
47103
 
47078
- let w = elm.offsetWidth * scaleX * this.builder.opts.zoom;
47079
- let top = newPos.top + window.pageYOffset;
47104
+ let w = elm.offsetWidth * extraScaleX * scaleX * this.builder.opts.zoom;
47105
+ let h = elm.offsetHeight * extraScaleY * scaleX * this.builder.opts.zoom;
47106
+
47107
+ // Compensate for the vertical shift caused by scaling
47108
+ let scaleShiftY = (h - elm.offsetHeight * scaleX * this.builder.opts.zoom) / 2;
47109
+ let top = newPos.top + window.pageYOffset + scaleShiftY;
47080
47110
  let left = newPos.left + window.pageXOffset;
47081
47111
  let toolLeft = left + (w / 2 - _toolwidth / 2);
47082
47112
 
@@ -47090,9 +47120,12 @@ class Image$1 {
47090
47120
  }
47091
47121
  imageTool.style.top = top + 'px';
47092
47122
  imageTool.style.left = toolLeft + 'px';
47123
+ const parent = elm.parentNode;
47124
+ const grandparent = parent && parent.parentNode;
47125
+ const hasWrapper = parent && parent.classList.contains('overflow-hidden') || grandparent && grandparent.classList.contains('overflow-hidden');
47093
47126
 
47094
47127
  // Image Resizer
47095
- if (!elm.hasAttribute('data-noresize') && (this.builder.imageResizeOnBlock || !elm.closest('.is-block'))) {
47128
+ if (!hasWrapper && !elm.hasAttribute('data-noresize') && (this.builder.imageResizeOnBlock || !elm.closest('.is-block'))) {
47096
47129
  let imageResizer = this.imageResizer;
47097
47130
  const newPos = util.getElementPosition(elm);
47098
47131
  let top = newPos.top + window.pageYOffset;
@@ -47121,33 +47154,6 @@ class Image$1 {
47121
47154
  if (this.builder.moveable) this.builder.moveable.updateRect();
47122
47155
  const movControlBox = document.querySelector('.moveable-control-box');
47123
47156
  if (movControlBox && !this.builder.hideImageResizer) movControlBox.style.display = 'block';
47124
-
47125
- /*
47126
- const handleImageToolClickOut = e =>{
47127
- let elm = e.target;
47128
- if(!elm) return;
47129
- if(!elm.closest('#divImageResizer') && !elm.closest('#divImageTool') &&
47130
- !elm.closest('.is-modal') && !elm.closest('.keep-selection') &&
47131
- !elm.closest('.sl-wrapper') && !elm.closest('.sl-overlay') && !elm.closest('.sl-close') &&
47132
- !elm.closest('img')) { // click outside
47133
-
47134
- // hide
47135
- this.hideImageTool();
47136
- document.removeEventListener('click', handleImageToolClickOut);
47137
- if(this.builder.iframeDocument) {
47138
- this.builder.doc.removeEventListener('click', handleImageToolClickOut);
47139
- }
47140
- this.builder.handleImageToolClickOut_=false;
47141
- }
47142
- };
47143
- if(!this.builder.handleImageToolClickOut_) {
47144
- document.addEventListener('click', handleImageToolClickOut);
47145
- if(this.builder.iframeDocument) {
47146
- this.builder.doc.addEventListener('click', handleImageToolClickOut);
47147
- }
47148
- this.builder.handleImageToolClickOut_=true;
47149
- }
47150
- */
47151
47157
  } else {
47152
47158
  let imageResizer = this.imageResizer;
47153
47159
  imageResizer.style.display = 'none';
@@ -95440,6 +95446,7 @@ class ContentBuilder {
95440
95446
  if (e.target.closest('[data-html]')) return; // normal paste
95441
95447
 
95442
95448
  e.preventDefault();
95449
+ e.stopPropagation();
95443
95450
  let clipboardDataText = (e.clipboardData || window.clipboardData).getData('text');
95444
95451
  let clipboardDataHtml = (e.clipboardData || window.clipboardData).getData('text/html');
95445
95452
  if (clipboardDataHtml.trim() === '') clipboardDataHtml = clipboardDataText;