@innovastudio/contentbuilder 1.5.163 → 1.5.165
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
    
    
| @@ -8,11 +8,6 @@ | |
| 8 8 | 
             
              font-weight: 300;
         | 
| 9 9 | 
             
              line-height: 1.4;
         | 
| 10 10 | 
             
              /* Default Elements */
         | 
| 11 | 
            -
              /* Built-in Grid */
         | 
| 12 | 
            -
              margin: 0 auto;
         | 
| 13 | 
            -
              width: 100%;
         | 
| 14 | 
            -
              padding: 0 20px;
         | 
| 15 | 
            -
              box-sizing: border-box;
         | 
| 16 11 | 
             
            }
         | 
| 17 12 | 
             
            .is-container h1, .is-container h2, .is-container h3, .is-container h4, .is-container h5, .is-container h6 {
         | 
| 18 13 | 
             
              font-weight: 500;
         | 
| @@ -122,72 +117,100 @@ | |
| 122 117 | 
             
            .is-container a {
         | 
| 123 118 | 
             
              box-sizing: border-box;
         | 
| 124 119 | 
             
            }
         | 
| 125 | 
            -
             | 
| 120 | 
            +
             | 
| 121 | 
            +
            /* Built-in Grid */
         | 
| 122 | 
            +
            .is-container {
         | 
| 123 | 
            +
              margin: 0 auto;
         | 
| 124 | 
            +
              width: 100%;
         | 
| 125 | 
            +
              padding: 0 20px;
         | 
| 126 | 
            +
              box-sizing: border-box;
         | 
| 127 | 
            +
            }
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            .column {
         | 
| 126 130 | 
             
              position: relative;
         | 
| 127 131 | 
             
              box-sizing: border-box;
         | 
| 128 132 | 
             
              width: 100%;
         | 
| 129 133 | 
             
            }
         | 
| 134 | 
            +
             | 
| 130 135 | 
             
            @media (min-width: 761px) {
         | 
| 131 | 
            -
              . | 
| 136 | 
            +
              .row {
         | 
| 132 137 | 
             
                display: flex;
         | 
| 133 138 | 
             
              }
         | 
| 134 | 
            -
             | 
| 139 | 
            +
             | 
| 140 | 
            +
              .column {
         | 
| 135 141 | 
             
                padding-left: 1rem;
         | 
| 136 142 | 
             
                padding-right: 1rem;
         | 
| 137 143 | 
             
              }
         | 
| 138 | 
            -
             | 
| 144 | 
            +
             | 
| 145 | 
            +
              .column.full {
         | 
| 139 146 | 
             
                width: 100%;
         | 
| 140 147 | 
             
              }
         | 
| 141 | 
            -
             | 
| 148 | 
            +
             | 
| 149 | 
            +
              .column.two-third {
         | 
| 142 150 | 
             
                width: 66.7%;
         | 
| 143 151 | 
             
              }
         | 
| 144 | 
            -
             | 
| 152 | 
            +
             | 
| 153 | 
            +
              .column.two-fourth {
         | 
| 145 154 | 
             
                width: 75%;
         | 
| 146 155 | 
             
              }
         | 
| 147 | 
            -
             | 
| 156 | 
            +
             | 
| 157 | 
            +
              .column.two-fifth {
         | 
| 148 158 | 
             
                width: 80%;
         | 
| 149 159 | 
             
              }
         | 
| 150 | 
            -
             | 
| 160 | 
            +
             | 
| 161 | 
            +
              .column.two-sixth {
         | 
| 151 162 | 
             
                width: 83.3%;
         | 
| 152 163 | 
             
              }
         | 
| 153 | 
            -
             | 
| 164 | 
            +
             | 
| 165 | 
            +
              .column.half {
         | 
| 154 166 | 
             
                width: 50%;
         | 
| 155 167 | 
             
              }
         | 
| 156 | 
            -
             | 
| 168 | 
            +
             | 
| 169 | 
            +
              .column.third {
         | 
| 157 170 | 
             
                width: 33.3%;
         | 
| 158 171 | 
             
              }
         | 
| 159 | 
            -
             | 
| 172 | 
            +
             | 
| 173 | 
            +
              .column.fourth {
         | 
| 160 174 | 
             
                width: 25%;
         | 
| 161 175 | 
             
              }
         | 
| 162 | 
            -
             | 
| 176 | 
            +
             | 
| 177 | 
            +
              .column.fifth {
         | 
| 163 178 | 
             
                width: 20%;
         | 
| 164 179 | 
             
              }
         | 
| 165 | 
            -
             | 
| 180 | 
            +
             | 
| 181 | 
            +
              .column.sixth {
         | 
| 166 182 | 
             
                width: 16.6%;
         | 
| 167 183 | 
             
              }
         | 
| 168 | 
            -
             | 
| 184 | 
            +
             | 
| 185 | 
            +
              .column.seventh {
         | 
| 169 186 | 
             
                width: 14.2857142857%;
         | 
| 170 187 | 
             
              }
         | 
| 171 | 
            -
             | 
| 188 | 
            +
             | 
| 189 | 
            +
              .column.eighth {
         | 
| 172 190 | 
             
                width: 12.5%;
         | 
| 173 191 | 
             
              }
         | 
| 174 | 
            -
             | 
| 192 | 
            +
             | 
| 193 | 
            +
              .column.ninth {
         | 
| 175 194 | 
             
                width: 11.1111111111%;
         | 
| 176 195 | 
             
              }
         | 
| 177 | 
            -
             | 
| 196 | 
            +
             | 
| 197 | 
            +
              .column.tenth {
         | 
| 178 198 | 
             
                width: 10%;
         | 
| 179 199 | 
             
              }
         | 
| 180 | 
            -
             | 
| 200 | 
            +
             | 
| 201 | 
            +
              .column.eleventh {
         | 
| 181 202 | 
             
                width: 9.0909090909%;
         | 
| 182 203 | 
             
              }
         | 
| 183 | 
            -
             | 
| 204 | 
            +
             | 
| 205 | 
            +
              .column.twelfth {
         | 
| 184 206 | 
             
                width: 8.3333333333%;
         | 
| 185 207 | 
             
              }
         | 
| 186 | 
            -
             | 
| 208 | 
            +
             | 
| 209 | 
            +
              .column.flow-opposite {
         | 
| 187 210 | 
             
                float: right;
         | 
| 188 211 | 
             
              }
         | 
| 189 212 | 
             
            }
         | 
| 190 | 
            -
            .is- | 
| 213 | 
            +
            .is-row-overlay {
         | 
| 191 214 | 
             
              position: absolute;
         | 
| 192 215 | 
             
              top: 0;
         | 
| 193 216 | 
             
              left: 0;
         | 
| @@ -2359,7 +2359,7 @@ button:focus-visible { | |
| 2359 2359 | 
             
            .is-ui .is-modal.is-modal-content,
         | 
| 2360 2360 | 
             
            .is-ui .is-modal .is-modal-content {
         | 
| 2361 2361 | 
             
              background: #fff;
         | 
| 2362 | 
            -
              border: 1px solid # | 
| 2362 | 
            +
              border: 1px solid #dadada;
         | 
| 2363 2363 | 
             
              box-shadow: 6px 14px 20px 0px rgba(95, 95, 95, 0.11);
         | 
| 2364 2364 | 
             
              border-radius: 11px;
         | 
| 2365 2365 | 
             
              overflow: hidden;
         | 
| @@ -2375,7 +2375,7 @@ button:focus-visible { | |
| 2375 2375 | 
             
            #_cbhtml .is-modal:not(.is-modal-content) > div:not(.is-modal-overlay),
         | 
| 2376 2376 | 
             
            .is-ui .is-modal:not(.is-modal-content) > div:not(.is-modal-overlay) {
         | 
| 2377 2377 | 
             
              background: #fff;
         | 
| 2378 | 
            -
              border: 1px solid # | 
| 2378 | 
            +
              border: 1px solid #dadada;
         | 
| 2379 2379 | 
             
              box-shadow: 6px 14px 20px 0px rgba(95, 95, 95, 0.11);
         | 
| 2380 2380 | 
             
              position: relative;
         | 
| 2381 2381 | 
             
              width: 100%;
         | 
| @@ -2416,9 +2416,10 @@ button:focus-visible { | |
| 2416 2416 | 
             
              box-sizing: border-box;
         | 
| 2417 2417 | 
             
              text-align: center;
         | 
| 2418 2418 | 
             
              font-family: sans-serif;
         | 
| 2419 | 
            -
              font-size:  | 
| 2419 | 
            +
              font-size: 14px;
         | 
| 2420 | 
            +
              font-weight: 500;
         | 
| 2420 2421 | 
             
              letter-spacing: 1px;
         | 
| 2421 | 
            -
              color: # | 
| 2422 | 
            +
              color: #828282;
         | 
| 2422 2423 | 
             
              touch-action: none;
         | 
| 2423 2424 | 
             
              user-select: none;
         | 
| 2424 2425 | 
             
              z-index: 1;
         | 
| @@ -2431,17 +2432,17 @@ button:focus-visible { | |
| 2431 2432 | 
             
              width: 32px;
         | 
| 2432 2433 | 
             
              height: 32px;
         | 
| 2433 2434 | 
             
              position: absolute;
         | 
| 2434 | 
            -
              top:  | 
| 2435 | 
            -
              right:  | 
| 2435 | 
            +
              top: 0px;
         | 
| 2436 | 
            +
              right: 0px;
         | 
| 2436 2437 | 
             
              box-sizing: border-box;
         | 
| 2437 2438 | 
             
              padding: 0;
         | 
| 2438 2439 | 
             
              line-height: 32px;
         | 
| 2439 2440 | 
             
              font-size: 12px;
         | 
| 2440 | 
            -
              color: # | 
| 2441 | 
            +
              color: #828282;
         | 
| 2441 2442 | 
             
              text-align: center;
         | 
| 2442 2443 | 
             
              cursor: pointer;
         | 
| 2443 2444 | 
             
              box-shadow: none;
         | 
| 2444 | 
            -
              background: transparent;
         | 
| 2445 | 
            +
              background-color: transparent !important;
         | 
| 2445 2446 | 
             
              border: none;
         | 
| 2446 2447 | 
             
            }
         | 
| 2447 2448 | 
             
            #_cbhtml .is-modal div.is-modal-footer button,
         | 
| @@ -2640,19 +2641,6 @@ button:focus-visible { | |
| 2640 2641 | 
             
              flex-direction: row;
         | 
| 2641 2642 | 
             
              align-items: flex-start;
         | 
| 2642 2643 | 
             
            }
         | 
| 2643 | 
            -
            #_cbhtml .is-modal.pluginsettings .is-modal-bar,
         | 
| 2644 | 
            -
            .is-ui .is-modal.pluginsettings .is-modal-bar {
         | 
| 2645 | 
            -
              line-height: 30px;
         | 
| 2646 | 
            -
              height: 30px;
         | 
| 2647 | 
            -
              background-color: #fafafa;
         | 
| 2648 | 
            -
            }
         | 
| 2649 | 
            -
            #_cbhtml .is-modal.pluginsettings .is-modal-bar .is-modal-close,
         | 
| 2650 | 
            -
            .is-ui .is-modal.pluginsettings .is-modal-bar .is-modal-close {
         | 
| 2651 | 
            -
              width: 20px;
         | 
| 2652 | 
            -
              height: 20px;
         | 
| 2653 | 
            -
              line-height: 20px;
         | 
| 2654 | 
            -
              font-size: 10px;
         | 
| 2655 | 
            -
            }
         | 
| 2656 2644 | 
             
            #_cbhtml .is-modal.pluginsettings.active,
         | 
| 2657 2645 | 
             
            .is-ui .is-modal.pluginsettings.active {
         | 
| 2658 2646 | 
             
              display: flex;
         | 
| @@ -2683,17 +2671,8 @@ button:focus-visible { | |
| 2683 2671 | 
             
            }
         | 
| 2684 2672 | 
             
            #_cbhtml .is-modal.edittable .is-modal-bar,
         | 
| 2685 2673 | 
             
            .is-ui .is-modal.edittable .is-modal-bar {
         | 
| 2686 | 
            -
              line-height: 30px;
         | 
| 2687 | 
            -
              height: 30px;
         | 
| 2688 2674 | 
             
              background-color: #fafafa;
         | 
| 2689 2675 | 
             
            }
         | 
| 2690 | 
            -
            #_cbhtml .is-modal.edittable .is-modal-bar .is-modal-close,
         | 
| 2691 | 
            -
            .is-ui .is-modal.edittable .is-modal-bar .is-modal-close {
         | 
| 2692 | 
            -
              width: 20px;
         | 
| 2693 | 
            -
              height: 20px;
         | 
| 2694 | 
            -
              line-height: 20px;
         | 
| 2695 | 
            -
              font-size: 10px;
         | 
| 2696 | 
            -
            }
         | 
| 2697 2676 | 
             
            #_cbhtml .is-modal.edittable.active,
         | 
| 2698 2677 | 
             
            .is-ui .is-modal.edittable.active {
         | 
| 2699 2678 | 
             
              display: flex;
         | 
| @@ -2738,18 +2717,6 @@ button:focus-visible { | |
| 2738 2717 | 
             
              flex-direction: row;
         | 
| 2739 2718 | 
             
              align-items: flex-start;
         | 
| 2740 2719 | 
             
            }
         | 
| 2741 | 
            -
            #_cbhtml .is-modal.editblock .is-modal-bar,
         | 
| 2742 | 
            -
            .is-ui .is-modal.editblock .is-modal-bar {
         | 
| 2743 | 
            -
              line-height: 30px;
         | 
| 2744 | 
            -
              height: 30px;
         | 
| 2745 | 
            -
            }
         | 
| 2746 | 
            -
            #_cbhtml .is-modal.editblock .is-modal-bar .is-modal-close,
         | 
| 2747 | 
            -
            .is-ui .is-modal.editblock .is-modal-bar .is-modal-close {
         | 
| 2748 | 
            -
              width: 20px;
         | 
| 2749 | 
            -
              height: 20px;
         | 
| 2750 | 
            -
              line-height: 20px;
         | 
| 2751 | 
            -
              font-size: 10px;
         | 
| 2752 | 
            -
            }
         | 
| 2753 2720 | 
             
            #_cbhtml .is-modal.editblock.active,
         | 
| 2754 2721 | 
             
            .is-ui .is-modal.editblock.active {
         | 
| 2755 2722 | 
             
              display: flex;
         | 
| @@ -2959,19 +2926,6 @@ button:focus-visible { | |
| 2959 2926 | 
             
            .is-ui .is-modal.buttoneditor .is-modal-overlay {
         | 
| 2960 2927 | 
             
              display: none !important;
         | 
| 2961 2928 | 
             
            }
         | 
| 2962 | 
            -
            #_cbhtml .is-modal.buttoneditor .is-modal-bar,
         | 
| 2963 | 
            -
            .is-ui .is-modal.buttoneditor .is-modal-bar {
         | 
| 2964 | 
            -
              line-height: 30px;
         | 
| 2965 | 
            -
              height: 30px;
         | 
| 2966 | 
            -
              background-color: #fafafa;
         | 
| 2967 | 
            -
            }
         | 
| 2968 | 
            -
            #_cbhtml .is-modal.buttoneditor .is-modal-bar .is-modal-close,
         | 
| 2969 | 
            -
            .is-ui .is-modal.buttoneditor .is-modal-bar .is-modal-close {
         | 
| 2970 | 
            -
              width: 20px;
         | 
| 2971 | 
            -
              height: 20px;
         | 
| 2972 | 
            -
              line-height: 20px;
         | 
| 2973 | 
            -
              font-size: 10px;
         | 
| 2974 | 
            -
            }
         | 
| 2975 2929 | 
             
            #_cbhtml .is-modal.buttoneditor.active,
         | 
| 2976 2930 | 
             
            .is-ui .is-modal.buttoneditor.active {
         | 
| 2977 2931 | 
             
              display: flex;
         | 
| @@ -5469,18 +5469,21 @@ class Util { | |
| 5469 5469 | 
             
                  let builderActive = this.builder.doc.querySelector('.builder-active');
         | 
| 5470 5470 | 
             
                  if (builderActive) this.builder.applyBehaviorOn(builderActive);
         | 
| 5471 5471 | 
             
                  this.fixLayout(row);
         | 
| 5472 | 
            -
             | 
| 5473 | 
            -
             | 
| 5474 | 
            -
             | 
| 5475 | 
            -
             | 
| 5472 | 
            +
                  try {
         | 
| 5473 | 
            +
                    // cellElement.click(); //change active block to the newly created
         | 
| 5474 | 
            +
                    if (element && element.tagName.toLowerCase() === 'img') {
         | 
| 5475 | 
            +
                      element.onload = () => {
         | 
| 5476 | 
            +
                        element.click();
         | 
| 5477 | 
            +
                        element.onload = null;
         | 
| 5478 | 
            +
                        setTimeout(() => {
         | 
| 5479 | 
            +
                          this.builder.element.image.repositionImageTool();
         | 
| 5480 | 
            +
                        }, 100);
         | 
| 5481 | 
            +
                      };
         | 
| 5482 | 
            +
                    } else if (element) {
         | 
| 5476 5483 | 
             
                      element.click();
         | 
| 5477 | 
            -
             | 
| 5478 | 
            -
             | 
| 5479 | 
            -
             | 
| 5480 | 
            -
                      }, 100);
         | 
| 5481 | 
            -
                    };
         | 
| 5482 | 
            -
                  } else if (element) {
         | 
| 5483 | 
            -
                    element.click();
         | 
| 5484 | 
            +
                    }
         | 
| 5485 | 
            +
                  } catch (e) {
         | 
| 5486 | 
            +
                    // Do Nothing
         | 
| 5484 5487 | 
             
                  }
         | 
| 5485 5488 | 
             
                }
         | 
| 5486 5489 | 
             
                if (mode === 'row') {
         | 
| @@ -5598,6 +5601,12 @@ class Util { | |
| 5598 5601 |  | 
| 5599 5602 | 
             
                //Trigger Render event
         | 
| 5600 5603 | 
             
                this.builder.opts.onRender();
         | 
| 5604 | 
            +
             | 
| 5605 | 
            +
                // Reinit after drag drop block
         | 
| 5606 | 
            +
                if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize();
         | 
| 5607 | 
            +
                setTimeout(() => {
         | 
| 5608 | 
            +
                  this.builder.makeSortable(this.builder.doc);
         | 
| 5609 | 
            +
                }, 400);
         | 
| 5601 5610 | 
             
              }
         | 
| 5602 5611 |  | 
| 5603 5612 | 
             
              // https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro
         | 
| @@ -5690,6 +5699,11 @@ class Util { | |
| 5690 5699 |  | 
| 5691 5700 | 
             
                  //Hide Column tool (new!)
         | 
| 5692 5701 | 
             
                  this.builder.util.hideColumnTool();
         | 
| 5702 | 
            +
             | 
| 5703 | 
            +
                  // this.builder.makeSortable(rowElement); // cause other sortable not working
         | 
| 5704 | 
            +
                  setTimeout(() => {
         | 
| 5705 | 
            +
                    this.builder.makeSortable(this.builder.doc);
         | 
| 5706 | 
            +
                  }, 400);
         | 
| 5693 5707 | 
             
                } else if (bSnippet) {
         | 
| 5694 5708 | 
             
                  if (noedit) {
         | 
| 5695 5709 | 
             
                    this.addContent(html, mode, 'data-noedit');
         | 
| @@ -5863,6 +5877,9 @@ class Util { | |
| 5863 5877 | 
             
                  this.builder.doc.querySelectorAll('.dummy-module').forEach(module => {
         | 
| 5864 5878 | 
             
                    module.classList.remove('dummy-module');
         | 
| 5865 5879 | 
             
                  });
         | 
| 5880 | 
            +
                  setTimeout(() => {
         | 
| 5881 | 
            +
                    this.builder.makeSortable(this.builder.doc);
         | 
| 5882 | 
            +
                  }, 400);
         | 
| 5866 5883 |  | 
| 5867 5884 | 
             
                  // Change to row selection
         | 
| 5868 5885 | 
             
                  rowElement.className = rowElement.className.replace('row-outline', '');
         | 
| @@ -6080,6 +6097,11 @@ class Util { | |
| 6080 6097 | 
             
                }
         | 
| 6081 6098 | 
             
              }
         | 
| 6082 6099 |  | 
| 6100 | 
            +
              clearModals() {
         | 
| 6101 | 
            +
                const builderStuff = this.builder.builderStuff;
         | 
| 6102 | 
            +
                let modal = builderStuff.querySelector('.pluginsettings.active');
         | 
| 6103 | 
            +
                this.hideModal(modal);
         | 
| 6104 | 
            +
              }
         | 
| 6083 6105 | 
             
              clearControls() {
         | 
| 6084 6106 | 
             
                const dom = this.dom;
         | 
| 6085 6107 | 
             
                const builderStuff = this.builder.builderStuff;
         | 
| @@ -14489,6 +14511,7 @@ class HtmlUtil { | |
| 14489 14511 | 
             
                // Re-init plugins
         | 
| 14490 14512 | 
             
                if (this.builder.win.builderRuntime) await this.builder.win.builderRuntime.reinitialize();
         | 
| 14491 14513 | 
             
                this.builder.hideModal(modal);
         | 
| 14514 | 
            +
                this.builder.makeSortable(this.builder.doc);
         | 
| 14492 14515 | 
             
              }
         | 
| 14493 14516 | 
             
              viewHtmlExternal() {
         | 
| 14494 14517 | 
             
                const util = this.builder.util;
         | 
| @@ -15061,6 +15084,25 @@ class HtmlUtil { | |
| 15061 15084 | 
             
                    element.classList.remove(`cb-${type}`);
         | 
| 15062 15085 | 
             
                  }
         | 
| 15063 15086 | 
             
                  element.removeAttribute('data-cb-loaded');
         | 
| 15087 | 
            +
                  let grid;
         | 
| 15088 | 
            +
                  if (element.classList.contains('grid-sortable')) {
         | 
| 15089 | 
            +
                    grid = element;
         | 
| 15090 | 
            +
                  }
         | 
| 15091 | 
            +
                  if (element.querySelector('.grid-sortable')) {
         | 
| 15092 | 
            +
                    grid = element.querySelector('.grid-sortable');
         | 
| 15093 | 
            +
                  }
         | 
| 15094 | 
            +
                  element.removeAttribute('id');
         | 
| 15095 | 
            +
                  if (grid) {
         | 
| 15096 | 
            +
                    Array.from(grid.children).forEach(elm => {
         | 
| 15097 | 
            +
                      elm.removeAttribute('data-index');
         | 
| 15098 | 
            +
                      elm.removeAttribute('data-item-id');
         | 
| 15099 | 
            +
                    });
         | 
| 15100 | 
            +
                  }
         | 
| 15101 | 
            +
                  const elms = element.querySelectorAll('[data-scroll], [data-scroll-once]');
         | 
| 15102 | 
            +
                  elms.forEach(elm => {
         | 
| 15103 | 
            +
                    elm.removeAttribute('data-scroll');
         | 
| 15104 | 
            +
                    elm.removeAttribute('data-scroll-once');
         | 
| 15105 | 
            +
                  });
         | 
| 15064 15106 | 
             
                });
         | 
| 15065 15107 | 
             
                html = '';
         | 
| 15066 15108 | 
             
                if (multiple) {
         | 
| @@ -16193,6 +16235,9 @@ class Grid { | |
| 16193 16235 | 
             
                  this.builder.hideTools();
         | 
| 16194 16236 | 
             
                  cell.parentElement.insertBefore(cell, cell.previousElementSibling);
         | 
| 16195 16237 | 
             
                  this.builder.opts.onChange(true);
         | 
| 16238 | 
            +
             | 
| 16239 | 
            +
                  // Re-init plugins
         | 
| 16240 | 
            +
                  if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(cell);
         | 
| 16196 16241 | 
             
                }
         | 
| 16197 16242 | 
             
              }
         | 
| 16198 16243 | 
             
              moveColumnNext() {
         | 
| @@ -16205,6 +16250,9 @@ class Grid { | |
| 16205 16250 | 
             
                  this.builder.hideTools();
         | 
| 16206 16251 | 
             
                  cell.parentElement.insertBefore(cellnext, cell);
         | 
| 16207 16252 | 
             
                  this.builder.opts.onChange(true);
         | 
| 16253 | 
            +
             | 
| 16254 | 
            +
                  // Re-init plugins
         | 
| 16255 | 
            +
                  if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(cell);
         | 
| 16208 16256 | 
             
                }
         | 
| 16209 16257 | 
             
              }
         | 
| 16210 16258 | 
             
              moveColumnUp() {
         | 
| @@ -16234,6 +16282,9 @@ class Grid { | |
| 16234 16282 | 
             
                      //Move row up
         | 
| 16235 16283 | 
             
                      row.parentNode.insertBefore(row, row.previousElementSibling);
         | 
| 16236 16284 | 
             
                      this.builder.opts.onChange(true);
         | 
| 16285 | 
            +
             | 
| 16286 | 
            +
                      // Re-init plugins
         | 
| 16287 | 
            +
                      if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(row);
         | 
| 16237 16288 | 
             
                      return;
         | 
| 16238 16289 | 
             
                    } else {
         | 
| 16239 16290 | 
             
                      this.builder.uo.saveForUndo();
         | 
| @@ -16284,6 +16335,9 @@ class Grid { | |
| 16284 16335 | 
             
                row = cell.parentNode; //update active row
         | 
| 16285 16336 | 
             
                util.fixLayout(row);
         | 
| 16286 16337 | 
             
                if (row.nextElementSibling) util.fixLayout(row.nextElementSibling);
         | 
| 16338 | 
            +
             | 
| 16339 | 
            +
                // Re-init plugins
         | 
| 16340 | 
            +
                if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(row);
         | 
| 16287 16341 | 
             
              }
         | 
| 16288 16342 | 
             
              moveColumnDown() {
         | 
| 16289 16343 | 
             
                let builder = this.builder;
         | 
| @@ -16314,6 +16368,9 @@ class Grid { | |
| 16314 16368 | 
             
                      //Move row down
         | 
| 16315 16369 | 
             
                      row.parentNode.insertBefore(row.nextElementSibling, row);
         | 
| 16316 16370 | 
             
                      this.builder.opts.onChange(true);
         | 
| 16371 | 
            +
             | 
| 16372 | 
            +
                      // Re-init plugins
         | 
| 16373 | 
            +
                      if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(row);
         | 
| 16317 16374 | 
             
                      return;
         | 
| 16318 16375 | 
             
                    } else {
         | 
| 16319 16376 | 
             
                      this.builder.uo.saveForUndo();
         | 
| @@ -16364,6 +16421,9 @@ class Grid { | |
| 16364 16421 | 
             
                row = cell.parentNode; //update active row
         | 
| 16365 16422 | 
             
                util.fixLayout(row);
         | 
| 16366 16423 | 
             
                if (row.previousElementSibling) util.fixLayout(row.previousElementSibling);
         | 
| 16424 | 
            +
             | 
| 16425 | 
            +
                // Re-init plugins
         | 
| 16426 | 
            +
                if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(row);
         | 
| 16367 16427 | 
             
              }
         | 
| 16368 16428 | 
             
              duplicateColumn() {
         | 
| 16369 16429 | 
             
                let builder = this.builder;
         | 
| @@ -16405,6 +16465,7 @@ class Grid { | |
| 16405 16465 |  | 
| 16406 16466 | 
             
                // Re-init plugins
         | 
| 16407 16467 | 
             
                if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(cellElement);
         | 
| 16468 | 
            +
                this.builder.makeSortable(cellElement);
         | 
| 16408 16469 | 
             
              }
         | 
| 16409 16470 | 
             
              removeColumn() {
         | 
| 16410 16471 | 
             
                let util = this.util;
         | 
| @@ -17067,6 +17128,9 @@ class Grid { | |
| 17067 17128 | 
             
                  row.parentNode.insertBefore(row, row.previousElementSibling);
         | 
| 17068 17129 | 
             
                  this.rowTool.position(row);
         | 
| 17069 17130 | 
             
                  this.builder.opts.onChange();
         | 
| 17131 | 
            +
             | 
| 17132 | 
            +
                  // Re-init plugins
         | 
| 17133 | 
            +
                  if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(row);
         | 
| 17070 17134 | 
             
                } else {
         | 
| 17071 17135 | 
             
                  // Move to previous container
         | 
| 17072 17136 |  | 
| @@ -17111,6 +17175,9 @@ class Grid { | |
| 17111 17175 | 
             
                  row.parentNode.insertBefore(row.nextElementSibling, row);
         | 
| 17112 17176 | 
             
                  this.rowTool.position(row);
         | 
| 17113 17177 | 
             
                  this.builder.opts.onChange();
         | 
| 17178 | 
            +
             | 
| 17179 | 
            +
                  // Re-init plugins
         | 
| 17180 | 
            +
                  if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(row);
         | 
| 17114 17181 | 
             
                } else {
         | 
| 17115 17182 | 
             
                  // Move to next container
         | 
| 17116 17183 |  | 
| @@ -17181,6 +17248,7 @@ class Grid { | |
| 17181 17248 |  | 
| 17182 17249 | 
             
                // Re-init plugins
         | 
| 17183 17250 | 
             
                if (this.builder.win.builderRuntime) this.builder.win.builderRuntime.reinitialize(rowElement);
         | 
| 17251 | 
            +
                this.builder.makeSortable(rowElement);
         | 
| 17184 17252 | 
             
              }
         | 
| 17185 17253 | 
             
            }
         | 
| 17186 17254 | 
             
            class RowTool$1 {
         | 
| @@ -53899,6 +53967,7 @@ class RowTool { | |
| 53899 53967 | 
             
                    const grid = new Grid(this.builder);
         | 
| 53900 53968 | 
             
                    grid.removeColumn();
         | 
| 53901 53969 | 
             
                    util.clearControls();
         | 
| 53970 | 
            +
                    util.clearModals();
         | 
| 53902 53971 | 
             
                    if (this.builder.onSelectChange) this.builder.onSelectChange();
         | 
| 53903 53972 | 
             
                  });
         | 
| 53904 53973 | 
             
                  let btnGridEditor = rowtool.querySelector('.row-grideditor');
         | 
| @@ -54009,6 +54078,7 @@ class RowTool { | |
| 54009 54078 | 
             
                  if (elm) dom.addEventListener(elm, 'click', () => {
         | 
| 54010 54079 | 
             
                    this.grid.removeRow();
         | 
| 54011 54080 | 
             
                    util.clearControls();
         | 
| 54081 | 
            +
                    util.clearModals();
         | 
| 54012 54082 | 
             
                    if (this.builder.onSelectChange) this.builder.onSelectChange();
         | 
| 54013 54083 | 
             
                  });
         | 
| 54014 54084 | 
             
                }
         | 
| @@ -93406,6 +93476,9 @@ class BlockModal { | |
| 93406 93476 | 
             
                new Tabs({
         | 
| 93407 93477 | 
             
                  element: modal
         | 
| 93408 93478 | 
             
                });
         | 
| 93479 | 
            +
                new Draggable$2({
         | 
| 93480 | 
            +
                  selector: '.is-modal.editblock .is-draggable'
         | 
| 93481 | 
            +
                });
         | 
| 93409 93482 | 
             
              } // constructor
         | 
| 93410 93483 |  | 
| 93411 93484 | 
             
              getPage() {
         | 
| @@ -96014,6 +96087,7 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler | |
| 96014 96087 | 
             
                      }
         | 
| 96015 96088 | 
             
                    });
         | 
| 96016 96089 | 
             
                  });
         | 
| 96090 | 
            +
                  this.makeSortable(this.doc);
         | 
| 96017 96091 | 
             
                }
         | 
| 96018 96092 |  | 
| 96019 96093 | 
             
                // Load plugins
         | 
| @@ -97889,8 +97963,16 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler | |
| 97889 97963 | 
             
                          let newRow = newRows[0]; // get first added row
         | 
| 97890 97964 | 
             
                          if (newRow.children.length > 0) {
         | 
| 97891 97965 | 
             
                            const newCol = newRow.children[0];
         | 
| 97966 | 
            +
                            const isPlugin = newCol.querySelector('[data-cb-type]');
         | 
| 97892 97967 | 
             
                            if (newCol.children.length > 0) {
         | 
| 97893 | 
            -
                               | 
| 97968 | 
            +
                              if (isPlugin) {
         | 
| 97969 | 
            +
                                setTimeout(() => {
         | 
| 97970 | 
            +
                                  // give time for plugin to render (apply style) => for correct elm tool position
         | 
| 97971 | 
            +
                                  newCol.children[0].click();
         | 
| 97972 | 
            +
                                }, 400);
         | 
| 97973 | 
            +
                              } else {
         | 
| 97974 | 
            +
                                newCol.children[0].click(); // Focus on first element
         | 
| 97975 | 
            +
                              }
         | 
| 97894 97976 | 
             
                            }
         | 
| 97895 97977 | 
             
                          }
         | 
| 97896 97978 | 
             
                        }
         | 
| @@ -97991,6 +98073,9 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler | |
| 97991 98073 | 
             
                    });
         | 
| 97992 98074 | 
             
                  });
         | 
| 97993 98075 | 
             
                });
         | 
| 98076 | 
            +
                setTimeout(() => {
         | 
| 98077 | 
            +
                  this.makeSortable(this.doc);
         | 
| 98078 | 
            +
                }, 400);
         | 
| 97994 98079 | 
             
                this.doc.querySelectorAll('.dummy-module').forEach(module => {
         | 
| 97995 98080 | 
             
                  module.classList.remove('dummy-module');
         | 
| 97996 98081 | 
             
                });
         | 
| @@ -99655,6 +99740,7 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler | |
| 99655 99740 | 
             
                this.rte.viewZoom();
         | 
| 99656 99741 | 
             
              }
         | 
| 99657 99742 | 
             
              async loadSnippets(source, snippetOpen) {
         | 
| 99743 | 
            +
                this.snippetUrl = source;
         | 
| 99658 99744 | 
             
                if (this.preview) return;
         | 
| 99659 99745 | 
             
                if (this.opts.snippetList === '#divSnippetList') {
         | 
| 99660 99746 | 
             
                  let snippetPanel = document.querySelector(this.opts.snippetList);
         | 
| @@ -99778,24 +99864,7 @@ Please obtain a license at: https://innovastudio.com/contentbox`); | |
| 99778 99864 | 
             
                  });
         | 
| 99779 99865 |  | 
| 99780 99866 | 
             
                  // On Load HTML
         | 
| 99781 | 
            -
                   | 
| 99782 | 
            -
                  grids.forEach(grid => {
         | 
| 99783 | 
            -
                    if (grid.closest('.is-builder')) new Sortable(grid, {
         | 
| 99784 | 
            -
                      animation: 600,
         | 
| 99785 | 
            -
                      dragClass: 'hide-drag-class',
         | 
| 99786 | 
            -
                      onStart: () => {
         | 
| 99787 | 
            -
                        this.uo.saveForUndo(true);
         | 
| 99788 | 
            -
                      },
         | 
| 99789 | 
            -
                      onSort: () => {
         | 
| 99790 | 
            -
                        if (grid.closest('[data-html]')) {
         | 
| 99791 | 
            -
                          const moduleElm = grid.closest('[data-html]');
         | 
| 99792 | 
            -
                          const encodedHtml = encodeURIComponent(moduleElm.innerHTML);
         | 
| 99793 | 
            -
                          moduleElm.setAttribute('data-html', encodedHtml);
         | 
| 99794 | 
            -
                          this.opts.onChange();
         | 
| 99795 | 
            -
                        }
         | 
| 99796 | 
            -
                      }
         | 
| 99797 | 
            -
                    });
         | 
| 99798 | 
            -
                  });
         | 
| 99867 | 
            +
                  this.makeSortable(this.doc, true);
         | 
| 99799 99868 | 
             
                  this.refresh();
         | 
| 99800 99869 | 
             
                  if (this.win.Block) {
         | 
| 99801 99870 | 
             
                    this.win.Block.render();
         | 
| @@ -99835,24 +99904,7 @@ Please obtain a license at: https://innovastudio.com/contentbox`); | |
| 99835 99904 | 
             
                this.applyBehavior();
         | 
| 99836 99905 |  | 
| 99837 99906 | 
             
                // On Load HTML
         | 
| 99838 | 
            -
                 | 
| 99839 | 
            -
                grids.forEach(grid => {
         | 
| 99840 | 
            -
                  if (grid.closest('.is-builder')) new Sortable(grid, {
         | 
| 99841 | 
            -
                    animation: 600,
         | 
| 99842 | 
            -
                    dragClass: 'hide-drag-class',
         | 
| 99843 | 
            -
                    onStart: () => {
         | 
| 99844 | 
            -
                      this.uo.saveForUndo(true);
         | 
| 99845 | 
            -
                    },
         | 
| 99846 | 
            -
                    onSort: () => {
         | 
| 99847 | 
            -
                      if (grid.closest('[data-html]')) {
         | 
| 99848 | 
            -
                        const moduleElm = grid.closest('[data-html]');
         | 
| 99849 | 
            -
                        const encodedHtml = encodeURIComponent(moduleElm.innerHTML);
         | 
| 99850 | 
            -
                        moduleElm.setAttribute('data-html', encodedHtml);
         | 
| 99851 | 
            -
                        this.opts.onChange();
         | 
| 99852 | 
            -
                      }
         | 
| 99853 | 
            -
                    }
         | 
| 99854 | 
            -
                  });
         | 
| 99855 | 
            -
                });
         | 
| 99907 | 
            +
                this.makeSortable(this.doc, true);
         | 
| 99856 99908 |  | 
| 99857 99909 | 
             
                // this.uo.saveForUndo(); //First time
         | 
| 99858 99910 |  | 
| @@ -102451,6 +102503,86 @@ Please obtain a license at: https://innovastudio.com/contentbox`); | |
| 102451 102503 | 
             
                // this.doc.querySelectorAll('.elm-inspected').forEach(elm => elm.classList.remove('elm-inspected'));
         | 
| 102452 102504 | 
             
                // this.doc.querySelectorAll('.elm-active').forEach(elm => elm.classList.remove('elm-active'));
         | 
| 102453 102505 | 
             
              }
         | 
| 102506 | 
            +
             | 
| 102507 | 
            +
              // Make list inside plugin element sortable
         | 
| 102508 | 
            +
              makeSortable(container, module) {
         | 
| 102509 | 
            +
                const grids = container.querySelectorAll('.grid-sortable');
         | 
| 102510 | 
            +
                grids.forEach(grid => {
         | 
| 102511 | 
            +
                  const sortable = new Sortable(grid, {
         | 
| 102512 | 
            +
                    animation: 600,
         | 
| 102513 | 
            +
                    onStart: () => {
         | 
| 102514 | 
            +
                      this.uo.saveForUndo(true);
         | 
| 102515 | 
            +
                    },
         | 
| 102516 | 
            +
                    onSort: async () => {
         | 
| 102517 | 
            +
                      if (module) if (grid.closest('[data-html]')) {
         | 
| 102518 | 
            +
                        const moduleElm = grid.closest('[data-html]');
         | 
| 102519 | 
            +
                        const encodedHtml = encodeURIComponent(moduleElm.innerHTML);
         | 
| 102520 | 
            +
                        moduleElm.setAttribute('data-html', encodedHtml);
         | 
| 102521 | 
            +
                        this.onChange();
         | 
| 102522 | 
            +
                      }
         | 
| 102523 | 
            +
                      let plugin = grid.closest('[data-cb-original-content]');
         | 
| 102524 | 
            +
                      if (plugin) {
         | 
| 102525 | 
            +
                        // grid.setAttribute('data-cb-original-content', plugin.innerHTML); // don't do this!
         | 
| 102526 | 
            +
                        this.updateCleanContentOrder(grid); // use this!
         | 
| 102527 | 
            +
             | 
| 102528 | 
            +
                        this.onChange();
         | 
| 102529 | 
            +
                        grid.click();
         | 
| 102530 | 
            +
                      }
         | 
| 102531 | 
            +
                    }
         | 
| 102532 | 
            +
                  });
         | 
| 102533 | 
            +
                  // Store instance for later access
         | 
| 102534 | 
            +
                  grid._sortable = sortable;
         | 
| 102535 | 
            +
                });
         | 
| 102536 | 
            +
              }
         | 
| 102537 | 
            +
              async updateCleanContentOrder(grid) {
         | 
| 102538 | 
            +
                if (!grid) return;
         | 
| 102539 | 
            +
                const plugin = grid.closest('[data-cb-original-content]');
         | 
| 102540 | 
            +
                if (!plugin) return;
         | 
| 102541 | 
            +
             | 
| 102542 | 
            +
                // 1. Get the current visual order of data-index from the actual DOM
         | 
| 102543 | 
            +
                const newIndexOrder = Array.from(grid.children).map(child => child.dataset.index).filter(index => index !== undefined); // in case some lack data-index
         | 
| 102544 | 
            +
             | 
| 102545 | 
            +
                // 2. Parse the *original clean* HTML
         | 
| 102546 | 
            +
                const cleanHtml = plugin.dataset.cbOriginalContent;
         | 
| 102547 | 
            +
                const parser = new DOMParser();
         | 
| 102548 | 
            +
                const doc = parser.parseFromString(cleanHtml, 'text/html');
         | 
| 102549 | 
            +
                let cleanGrid = doc.querySelector('.grid-sortable');
         | 
| 102550 | 
            +
                let pluginIsSortableRoot = false;
         | 
| 102551 | 
            +
                if (!cleanGrid) {
         | 
| 102552 | 
            +
                  // console.log('[step] .grid-sortable not found inside parsed clean HTML — creating wrapper from body children');
         | 
| 102553 | 
            +
                  cleanGrid = doc.createElement('div');
         | 
| 102554 | 
            +
                  cleanGrid.classList.add('grid-sortable');
         | 
| 102555 | 
            +
                  Array.from(doc.body.children).forEach(child => {
         | 
| 102556 | 
            +
                    if (child.nodeType === 1) cleanGrid.appendChild(child);
         | 
| 102557 | 
            +
                  });
         | 
| 102558 | 
            +
                  doc.body.innerHTML = '';
         | 
| 102559 | 
            +
                  doc.body.appendChild(cleanGrid);
         | 
| 102560 | 
            +
                  pluginIsSortableRoot = true;
         | 
| 102561 | 
            +
                }
         | 
| 102562 | 
            +
                const cleanItems = Array.from(cleanGrid.children).filter(el => el.nodeType === 1);
         | 
| 102563 | 
            +
             | 
| 102564 | 
            +
                // 3. Build a map: data-index → clean node
         | 
| 102565 | 
            +
                const cleanItemMap = new Map();
         | 
| 102566 | 
            +
                cleanItems.forEach(item => {
         | 
| 102567 | 
            +
                  const idx = item.dataset.index;
         | 
| 102568 | 
            +
                  if (idx !== undefined) cleanItemMap.set(idx, item);
         | 
| 102569 | 
            +
                });
         | 
| 102570 | 
            +
             | 
| 102571 | 
            +
                // 4. Reorder clean items to match newIndexOrder
         | 
| 102572 | 
            +
                const reorderedCleanItems = newIndexOrder.map(idx => cleanItemMap.get(idx)).filter(Boolean); // skip missing
         | 
| 102573 | 
            +
             | 
| 102574 | 
            +
                // 5. Serialize back to HTML string
         | 
| 102575 | 
            +
                const newCleanHtml = reorderedCleanItems.map(item => item.outerHTML).join('');
         | 
| 102576 | 
            +
             | 
| 102577 | 
            +
                // 6. Update the clean source
         | 
| 102578 | 
            +
                if (pluginIsSortableRoot) {
         | 
| 102579 | 
            +
                  plugin.setAttribute('data-cb-original-content', newCleanHtml);
         | 
| 102580 | 
            +
                } else {
         | 
| 102581 | 
            +
                  cleanGrid.innerHTML = newCleanHtml;
         | 
| 102582 | 
            +
                  const newHTML = doc.body.innerHTML;
         | 
| 102583 | 
            +
                  plugin.setAttribute('data-cb-original-content', newHTML);
         | 
| 102584 | 
            +
                }
         | 
| 102585 | 
            +
              }
         | 
| 102454 102586 | 
             
            }
         | 
| 102455 102587 |  | 
| 102456 102588 | 
             
            export { ContentBuilder as default };
         |