@innovastudio/contentbuilder 1.5.80 → 1.5.81

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbuilder",
3
3
  "type": "module",
4
- "version": "1.5.80",
4
+ "version": "1.5.81",
5
5
  "description": "",
6
6
  "main": "public/contentbuilder/contentbuilder.esm.js",
7
7
  "types": "index.d.ts",
@@ -46402,28 +46402,33 @@ class Image$1 {
46402
46402
  if (this.builder.moveable) this.builder.moveable.updateRect();
46403
46403
  const movControlBox = document.querySelector('.moveable-control-box');
46404
46404
  if (movControlBox && !this.builder.hideImageResizer) movControlBox.style.display = 'block';
46405
- const handleImageToolClickOut = e => {
46406
- let elm = e.target;
46407
- if (!elm) return;
46408
- if (!elm.closest('#divImageResizer') && !elm.closest('#divImageTool') && !elm.closest('.is-modal') && !elm.closest('.keep-selection') && !elm.closest('.sl-wrapper') && !elm.closest('.sl-overlay') && !elm.closest('.sl-close') && !elm.closest('img')) {
46409
- // click outside
46410
-
46411
- // hide
46412
- this.hideImageTool();
46413
- document.removeEventListener('click', handleImageToolClickOut);
46414
- if (this.builder.iframeDocument) {
46415
- this.builder.doc.removeEventListener('click', handleImageToolClickOut);
46405
+
46406
+ /*
46407
+ const handleImageToolClickOut = e =>{
46408
+ let elm = e.target;
46409
+ if(!elm) return;
46410
+ if(!elm.closest('#divImageResizer') && !elm.closest('#divImageTool') &&
46411
+ !elm.closest('.is-modal') && !elm.closest('.keep-selection') &&
46412
+ !elm.closest('.sl-wrapper') && !elm.closest('.sl-overlay') && !elm.closest('.sl-close') &&
46413
+ !elm.closest('img')) { // click outside
46414
+
46415
+ // hide
46416
+ this.hideImageTool();
46417
+ document.removeEventListener('click', handleImageToolClickOut);
46418
+ if(this.builder.iframeDocument) {
46419
+ this.builder.doc.removeEventListener('click', handleImageToolClickOut);
46420
+ }
46421
+ this.builder.handleImageToolClickOut_=false;
46416
46422
  }
46417
- this.builder.handleImageToolClickOut_ = false;
46418
- }
46419
46423
  };
46420
- if (!this.builder.handleImageToolClickOut_) {
46421
- document.addEventListener('click', handleImageToolClickOut);
46422
- if (this.builder.iframeDocument) {
46423
- this.builder.doc.addEventListener('click', handleImageToolClickOut);
46424
- }
46425
- this.builder.handleImageToolClickOut_ = true;
46424
+ if(!this.builder.handleImageToolClickOut_) {
46425
+ document.addEventListener('click', handleImageToolClickOut);
46426
+ if(this.builder.iframeDocument) {
46427
+ this.builder.doc.addEventListener('click', handleImageToolClickOut);
46428
+ }
46429
+ this.builder.handleImageToolClickOut_=true;
46426
46430
  }
46431
+ */
46427
46432
  } else {
46428
46433
  let imageResizer = this.imageResizer;
46429
46434
  imageResizer.style.display = 'none';
@@ -46437,6 +46442,28 @@ class Image$1 {
46437
46442
  const movControlBox = document.querySelector('.moveable-control-box');
46438
46443
  if (movControlBox) movControlBox.style.display = 'none';
46439
46444
  }
46445
+ const handleImageToolClickOut = e => {
46446
+ let elm = e.target;
46447
+ if (!elm) return;
46448
+ if (!elm.closest('#divImageResizer') && !elm.closest('#divImageTool') && !elm.closest('.is-modal') && !elm.closest('.keep-selection') && !elm.closest('.sl-wrapper') && !elm.closest('.sl-overlay') && !elm.closest('.sl-close') && !elm.closest('img')) {
46449
+ // click outside
46450
+
46451
+ // hide
46452
+ this.hideImageTool();
46453
+ document.removeEventListener('click', handleImageToolClickOut);
46454
+ if (this.builder.iframeDocument) {
46455
+ this.builder.doc.removeEventListener('click', handleImageToolClickOut);
46456
+ }
46457
+ this.builder.handleImageToolClickOut_ = false;
46458
+ }
46459
+ };
46460
+ if (!this.builder.handleImageToolClickOut_) {
46461
+ document.addEventListener('click', handleImageToolClickOut);
46462
+ if (this.builder.iframeDocument) {
46463
+ this.builder.doc.addEventListener('click', handleImageToolClickOut);
46464
+ }
46465
+ this.builder.handleImageToolClickOut_ = true;
46466
+ }
46440
46467
  if (this.builder.canvas) ; else {
46441
46468
  let prog = false;
46442
46469
  if (e.screenX && e.screenX !== 0 && e.screenY && e.screenY !== 0) ; else {
@@ -51362,8 +51389,8 @@ class RowTool {
51362
51389
  const builderStuff = this.builder.builderStuff;
51363
51390
  let rowtool = row.querySelector('.is-row-tool');
51364
51391
  if (!rowtool) {
51365
- let html = `<div class="is-tool is-row-tool">
51366
- <div title="${util.out('Move')}" role="button" tabindex="-1" class="row-handle" style="width:100%;cursor:move;text-align:center;"><svg class="is-icon-flex"><use xlink:href="#ion-move"></use></svg></div>
51392
+ let html = `<div class="is-tool is-row-tool" style="${!this.builder.rowTool && this.builder.rowTool !== '' ? 'display:none;' : ''}">
51393
+ <div title="${util.out('Move')}" role="button" tabindex="-1" class="row-handle" style="${this.builder.rowHandle ? '' : 'display:none;'}width:100%;cursor:move;text-align:center;"><svg class="is-icon-flex"><use xlink:href="#ion-move"></use></svg></div>
51367
51394
  <button type="button" tabindex="-1" title="${util.out('More')}" class="row-more"><svg class="is-icon-flex"><use xlink:href="#ion-more"></use></svg></button>
51368
51395
  <button type="button" tabindex="-1" title="${util.out('Grid Editor')}" class="row-grideditor"><svg class="is-icon-flex"><use xlink:href="#ion-grid"></use></svg></button>
51369
51396
  <button type="button" tabindex="-1" title="${util.out('Delete')}" class="row-remove"><svg class="is-icon-flex"><use xlink:href="#ion-ios-close-empty"></use></svg></button>
@@ -82112,8 +82139,6 @@ Important: Do not change the 'div.is-container' element!
82112
82139
  }
82113
82140
  }
82114
82141
 
82115
- // import RecordRTC from 'recordrtc';
82116
- // import Recorder from 'opus-recorder'; // Using Recorder
82117
82142
  const dom = new Dom();
82118
82143
  class Dictation {
82119
82144
  constructor(opts = {}, builder) {
@@ -82461,6 +82486,9 @@ class Dictation {
82461
82486
  dom.appendHtml(builderStuff, html);
82462
82487
  const modalCommand = builderStuff.querySelector('.page-command');
82463
82488
  this.modalCommand = modalCommand;
82489
+ new Draggable$2({
82490
+ selector: '.is-modal.page-command .is-draggable'
82491
+ });
82464
82492
  const modalCommandList = builderStuff.querySelector('.commandlist');
82465
82493
  this.modalCommandList = modalCommandList;
82466
82494
  const modalConfig = builderStuff.querySelector('.commandconfig');
@@ -88942,6 +88970,8 @@ class Editable {
88942
88970
  this.handleEditStart = this.handleEditStart.bind(this);
88943
88971
  this.handleMouseClick = this.handleMouseClick.bind(this);
88944
88972
  this.handleTouchStart = this.handleTouchStart.bind(this);
88973
+ this.handleMouseDown = this.handleMouseDown.bind(this);
88974
+ this.handleMouseUp = this.handleMouseUp.bind(this);
88945
88975
  this.setup();
88946
88976
  }
88947
88977
  setup() {
@@ -88950,6 +88980,7 @@ class Editable {
88950
88980
  element.addEventListener('touchstart', this.handleTouchStart, {
88951
88981
  passive: false
88952
88982
  });
88983
+ element.addEventListener('mousedown', this.handleMouseDown);
88953
88984
  });
88954
88985
  }
88955
88986
  refresh() {
@@ -88957,23 +88988,49 @@ class Editable {
88957
88988
  this.elements.forEach(element => {
88958
88989
  element.removeEventListener('dblclick', this.handleEditStart);
88959
88990
  element.removeEventListener('touchstart', this.handleTouchStart);
88991
+ element.removeEventListener('mousedown', this.handleMouseDown);
88960
88992
  });
88961
88993
  this.elements.forEach(element => {
88962
88994
  element.addEventListener('dblclick', this.handleEditStart);
88963
88995
  element.addEventListener('touchstart', this.handleTouchStart, {
88964
88996
  passive: false
88965
88997
  });
88998
+ element.addEventListener('mousedown', this.handleMouseDown);
88966
88999
  });
88967
89000
  }
89001
+ handleMouseDown(event) {
89002
+ const currentTarget = event.currentTarget;
89003
+ this.lastClickTime = false;
89004
+ if (!currentTarget.classList.contains('active')) return;
89005
+ if (currentTarget.classList.contains('editable')) return;
89006
+ currentTarget.addEventListener('mouseup', this.handleMouseUp);
89007
+ const now = new Date().getTime();
89008
+ this.lastClickTime = now;
89009
+ }
89010
+ handleMouseUp(event) {
89011
+ if (!this.lastClickTime) return;
89012
+ const currentTarget = event.currentTarget;
89013
+ currentTarget.removeEventListener('mouseup', this.handleMouseUp);
89014
+ const now = new Date().getTime();
89015
+ const lastClickTime = this.lastClickTime || now;
89016
+ const timeDiff = now - lastClickTime;
89017
+ if (timeDiff < 300 && timeDiff > 0) {
89018
+ // Less than 300ms since the last touch, enable editing
89019
+ this.handleEditStart(event);
89020
+ }
89021
+ this.lastClickTime = now;
89022
+ }
88968
89023
  destroy(element) {
88969
89024
  if (element) {
88970
89025
  element.removeEventListener('dblclick', this.handleEditStart);
88971
89026
  element.removeEventListener('touchstart', this.handleTouchStart);
89027
+ element.removeEventListener('mousedown', this.handleMouseDown);
88972
89028
  } else {
88973
89029
  this.elements = this.doc.querySelectorAll(this.selector);
88974
89030
  this.elements.forEach(element => {
88975
89031
  element.removeEventListener('dblclick', this.handleEditStart);
88976
89032
  element.removeEventListener('touchstart', this.handleTouchStart);
89033
+ element.removeEventListener('mousedown', this.handleMouseDown);
88977
89034
  });
88978
89035
  }
88979
89036
  }
@@ -89286,6 +89343,8 @@ class EditableBlocks {
89286
89343
  target.style.zIndex = newZIndex;
89287
89344
  }
89288
89345
  selectStart(block) {
89346
+ if (block.classList.contains('editable')) return; // do not proceed if in editing mode
89347
+
89289
89348
  if (block.classList.contains('is-shape')) return; // do not clone if block is shape
89290
89349
 
89291
89350
  if (!this.clone) return;
@@ -91497,6 +91556,7 @@ class ContentBuilder {
91497
91556
  outlineMode: '',
91498
91557
  toolStyle: '',
91499
91558
  outlineStyle: '',
91559
+ rowHandle: true,
91500
91560
  snippetAddTool: true,
91501
91561
  elementTool: true,
91502
91562
  elementHighlight: true,
@@ -94270,7 +94330,118 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
94270
94330
  // let outlineStyle = localStorage.getItem('_outlinestyle');
94271
94331
  // this.preferences.setOutlineStyle(outlineStyle);
94272
94332
  // }
94273
- if (this.preferences) this.preferences.initBuilder(builder);
94333
+ if (this.preferences) this.preferences.initBuilder(builder);else {
94334
+ const setColumnTool = hidecolumntool => {
94335
+ const builders = this.doc.querySelectorAll(this.opts.container);
94336
+ if (hidecolumntool) {
94337
+ Array.prototype.forEach.call(builders, builder => {
94338
+ builder.setAttribute('hidecolumntool', '');
94339
+ });
94340
+ } else {
94341
+ Array.prototype.forEach.call(builders, builder => {
94342
+ builder.removeAttribute('hidecolumntool');
94343
+ });
94344
+ }
94345
+ };
94346
+ setColumnTool(!this.columnTool);
94347
+ const setElementTool = hideelementtool => {
94348
+ const builderStuff = this.builderStuff;
94349
+ if (hideelementtool) {
94350
+ builderStuff.setAttribute('hideelementtool', '');
94351
+ } else {
94352
+ builderStuff.removeAttribute('hideelementtool', '');
94353
+ }
94354
+ if (this.iframe) {
94355
+ const contentStuff = this.contentStuff;
94356
+ if (hideelementtool) {
94357
+ contentStuff.setAttribute('hideelementtool', '');
94358
+ } else {
94359
+ contentStuff.removeAttribute('hideelementtool', '');
94360
+ }
94361
+ }
94362
+ };
94363
+ setElementTool(!this.elementTool);
94364
+ const setOutline = hideoutline => {
94365
+ const builders = this.doc.querySelectorAll(this.opts.container);
94366
+ Array.prototype.forEach.call(builders, builder => {
94367
+ if (hideoutline) {
94368
+ builder.setAttribute('hideoutline', '');
94369
+ } else {
94370
+ builder.removeAttribute('hideoutline');
94371
+ }
94372
+ });
94373
+ };
94374
+ setOutline(!this.rowcolOutline);
94375
+ const setOutlineStyle = outlineStyle => {
94376
+ const builders = this.doc.querySelectorAll(this.opts.container);
94377
+ Array.prototype.forEach.call(builders, builder => {
94378
+ if (outlineStyle === 'grayoutline') {
94379
+ builder.setAttribute('grayoutline', '');
94380
+ } else {
94381
+ builder.removeAttribute('grayoutline');
94382
+ }
94383
+ });
94384
+ };
94385
+ setOutlineStyle(this.outlineStyle);
94386
+ const setElementHighlight = hideelementhighlight => {
94387
+ const builders = this.doc.querySelectorAll(this.opts.container);
94388
+ Array.prototype.forEach.call(builders, builder => {
94389
+ if (hideelementhighlight) {
94390
+ builder.setAttribute('hideelementhighlight', '');
94391
+ } else {
94392
+ builder.removeAttribute('hideelementhighlight', '');
94393
+ }
94394
+ });
94395
+ };
94396
+ setElementHighlight(!this.elementHighlight);
94397
+ const setToolStyle = toolStyle => {
94398
+ const builderStuff = this.builderStuff;
94399
+ if (toolStyle === 'gray') {
94400
+ builderStuff.setAttribute('gray', '');
94401
+ } else {
94402
+ builderStuff.removeAttribute('gray', '');
94403
+ }
94404
+ if (this.iframe) {
94405
+ const contentStuff = this.contentStuff;
94406
+ if (toolStyle === 'gray') {
94407
+ contentStuff.setAttribute('gray', '');
94408
+ } else {
94409
+ contentStuff.removeAttribute('gray', '');
94410
+ }
94411
+ }
94412
+ const builders = this.doc.querySelectorAll(this.opts.container);
94413
+ Array.prototype.forEach.call(builders, builder => {
94414
+ if (toolStyle === 'gray') {
94415
+ builder.setAttribute('gray', '');
94416
+ } else {
94417
+ builder.removeAttribute('gray');
94418
+ }
94419
+ });
94420
+ };
94421
+ setToolStyle(this.toolStyle);
94422
+ const setSnippetAddTool = hidesnippetaddtool => {
94423
+ const builders = this.doc.querySelectorAll(this.opts.container);
94424
+ Array.prototype.forEach.call(builders, builder => {
94425
+ if (hidesnippetaddtool) {
94426
+ builder.setAttribute('hidesnippetaddtool', '');
94427
+ } else {
94428
+ builder.removeAttribute('hidesnippetaddtool', '');
94429
+ }
94430
+ });
94431
+ };
94432
+ setSnippetAddTool(!this.snippetAddTool);
94433
+ const setRowToolPosition = rowTool => {
94434
+ const builders = this.doc.querySelectorAll(this.opts.container);
94435
+ Array.prototype.forEach.call(builders, builder => {
94436
+ if (rowTool === 'right') {
94437
+ builder.removeAttribute('leftrowtool');
94438
+ } else {
94439
+ builder.setAttribute('leftrowtool', '');
94440
+ }
94441
+ });
94442
+ };
94443
+ setRowToolPosition(this.rowTool);
94444
+ }
94274
94445
 
94275
94446
  // Apply behavior on each row
94276
94447
  const rows = this.dom.elementChildren(builder);
@@ -96539,8 +96710,8 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
96539
96710
  */
96540
96711
  src = this.viewFileUrl + '?url=' + src;
96541
96712
  }
96542
- const width = 768;
96543
- const height = 512;
96713
+ const width = this.ai_width; //768;
96714
+ const height = this.ai_height; //512;
96544
96715
  const img = new Image();
96545
96716
  img.src = src;
96546
96717
  img.crossOrigin = 'anonymous';
@@ -96572,6 +96743,47 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
96572
96743
  callback(result.url);
96573
96744
  };
96574
96745
  }
96746
+ getOrientation(width, height) {
96747
+ const aspectRatio = width / height;
96748
+ const predefinedRatios = [{
96749
+ ratio: '1:1',
96750
+ value: 1 / 1
96751
+ }, {
96752
+ ratio: '4:5',
96753
+ value: 4 / 5
96754
+ }, {
96755
+ ratio: '2:3',
96756
+ value: 2 / 3
96757
+ }, {
96758
+ ratio: '9:16',
96759
+ value: 9 / 16
96760
+ }, {
96761
+ ratio: '4:7',
96762
+ value: 4 / 7
96763
+ }, {
96764
+ ratio: '5:4',
96765
+ value: 5 / 4
96766
+ }, {
96767
+ ratio: '3:2',
96768
+ value: 3 / 2
96769
+ }, {
96770
+ ratio: '16:9',
96771
+ value: 16 / 9
96772
+ }, {
96773
+ ratio: '7:4',
96774
+ value: 7 / 4
96775
+ }];
96776
+ let closestRatio = predefinedRatios[0].ratio;
96777
+ let smallestDifference = Math.abs(aspectRatio - predefinedRatios[0].value);
96778
+ for (let i = 1; i < predefinedRatios.length; i++) {
96779
+ const difference = Math.abs(aspectRatio - predefinedRatios[i].value);
96780
+ if (difference < smallestDifference) {
96781
+ smallestDifference = difference;
96782
+ closestRatio = predefinedRatios[i].ratio;
96783
+ }
96784
+ }
96785
+ return closestRatio;
96786
+ }
96575
96787
  async generateImage(prompt, callback) {
96576
96788
  this.controller = new AbortController(); // Create a new AbortController
96577
96789
  this.signal = this.controller.signal; // Get a new signal object
@@ -96581,12 +96793,82 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
96581
96793
  let steps = this.imageSteps || 25;
96582
96794
  let guidance = this.imageGuidance || 7.5;
96583
96795
  let scheduler = this.imageScheduler || 'dpmsolver++';
96796
+ let width = 768;
96797
+ let height = 512;
96798
+ if (this.activeImage) {
96799
+ // check selected image dimension
96800
+ const activeImage = this.activeImage;
96801
+ const w = activeImage.offsetWidth;
96802
+ const h = activeImage.offsetHeight;
96803
+ const ratio = this.getOrientation(w, h);
96804
+ if (model === 'flux-schnell') {
96805
+ if (ratio === '1:1') {
96806
+ width = 1024;
96807
+ height = 1024;
96808
+ } else if (ratio === '4:5') {
96809
+ width = 768;
96810
+ height = 960;
96811
+ } else if (ratio === '2:3') {
96812
+ width = 768;
96813
+ height = 1152;
96814
+ } else if (ratio === '9:16') {
96815
+ width = 720;
96816
+ height = 1280;
96817
+ } else if (ratio === '4:7') {
96818
+ width = 512;
96819
+ height = 896;
96820
+ } else if (ratio === '5:4') {
96821
+ width = 960;
96822
+ height = 768;
96823
+ } else if (ratio === '3:2') {
96824
+ width = 1152;
96825
+ height = 768;
96826
+ } else if (ratio === '16:9') {
96827
+ width = 1280;
96828
+ height = 720;
96829
+ } else if (ratio === '7:4') {
96830
+ width = 896;
96831
+ height = 512;
96832
+ }
96833
+ } else {
96834
+ if (ratio === '1:1') {
96835
+ width = 512;
96836
+ height = 512;
96837
+ } else if (ratio === '4:5') {
96838
+ width = 512;
96839
+ height = 640;
96840
+ } else if (ratio === '2:3') {
96841
+ width = 512;
96842
+ height = 768;
96843
+ } else if (ratio === '9:16') {
96844
+ width = 576;
96845
+ height = 1024;
96846
+ } else if (ratio === '4:7') {
96847
+ width = 512;
96848
+ height = 896;
96849
+ } else if (ratio === '5:4') {
96850
+ width = 640;
96851
+ height = 512;
96852
+ } else if (ratio === '3:2') {
96853
+ width = 768;
96854
+ height = 512;
96855
+ } else if (ratio === '16:9') {
96856
+ width = 1024;
96857
+ height = 576;
96858
+ } else if (ratio === '7:4') {
96859
+ width = 896;
96860
+ height = 512;
96861
+ }
96862
+ }
96863
+ }
96864
+ this.ai_width = width;
96865
+ this.ai_height = height;
96584
96866
  const messages = {
96585
96867
  model,
96586
96868
  prompt: prompt,
96587
96869
  negative_prompt,
96588
- width: 768,
96589
- height: 512,
96870
+ width: this.ai_width,
96871
+ height: this.ai_height,
96590
96872
  steps,
96591
96873
  guidance,
96592
96874
  scheduler,
@@ -96612,10 +96894,15 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
96612
96894
  return;
96613
96895
  }
96614
96896
  const imageUrl = result.url;
96615
- if (this.imageAutoUpscale) {
96616
- this.upscaleImage(imageUrl, callback);
96617
- } else {
96897
+ if (this.activeImage) {
96898
+ // selectable image on content doesn't need tp be upscaled
96618
96899
  callback(imageUrl);
96900
+ } else {
96901
+ if (this.imageAutoUpscale) {
96902
+ this.upscaleImage(imageUrl, callback);
96903
+ } else {
96904
+ callback(imageUrl);
96905
+ }
96619
96906
  }
96620
96907
  } catch (error) {
96621
96908
  if (error.name === 'AbortError') ; else {