@themarioga/grid-editor 7.2.0 → 8.0.0-beta.2

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.
Files changed (97) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +96 -30
  3. package/UPGRADING.md +86 -0
  4. package/dist/grideditor.bundle.min.js +3 -3
  5. package/dist/grideditor.css +149 -6
  6. package/dist/grideditor.d.ts +18 -0
  7. package/dist/grideditor.esm.js +257 -48
  8. package/dist/grideditor.jquery.js +0 -13
  9. package/dist/grideditor.jquery.min.js +1 -1
  10. package/dist/grideditor.jquery.min.js.map +3 -3
  11. package/dist/grideditor.js +257 -48
  12. package/dist/grideditor.min.css +1 -1
  13. package/dist/grideditor.min.css.map +1 -1
  14. package/dist/grideditor.min.js +2 -2
  15. package/dist/grideditor.min.js.map +3 -3
  16. package/dist/locales/grideditor.es.esm.js +80 -6
  17. package/dist/locales/grideditor.es.js +80 -6
  18. package/dist/locales/grideditor.es.min.js +1 -1
  19. package/dist/locales/grideditor.es.min.js.map +2 -2
  20. package/dist/plugins/grideditor.accordion.min.js.map +2 -2
  21. package/dist/plugins/grideditor.alignment.esm.js +11 -38
  22. package/dist/plugins/grideditor.alignment.js +11 -38
  23. package/dist/plugins/grideditor.alignment.min.js +1 -1
  24. package/dist/plugins/grideditor.alignment.min.js.map +3 -3
  25. package/dist/plugins/grideditor.card.min.js.map +1 -1
  26. package/dist/plugins/grideditor.ckeditor.esm.js +0 -5
  27. package/dist/plugins/grideditor.ckeditor.js +0 -5
  28. package/dist/plugins/grideditor.ckeditor.min.js +1 -1
  29. package/dist/plugins/grideditor.ckeditor.min.js.map +3 -3
  30. package/dist/plugins/grideditor.clipboard.min.js.map +1 -1
  31. package/dist/plugins/grideditor.codemirror-inline.min.js.map +1 -1
  32. package/dist/plugins/grideditor.codemirror.min.js.map +1 -1
  33. package/dist/plugins/grideditor.elements.min.js.map +2 -2
  34. package/dist/plugins/grideditor.gutters.min.js.map +1 -1
  35. package/dist/plugins/grideditor.order.min.js.map +1 -1
  36. package/dist/plugins/grideditor.popup.min.js.map +1 -1
  37. package/dist/plugins/grideditor.sections.min.js.map +2 -2
  38. package/dist/plugins/grideditor.style.esm.js +1926 -0
  39. package/dist/plugins/grideditor.style.js +1923 -0
  40. package/dist/plugins/grideditor.style.min.js +4 -0
  41. package/dist/plugins/grideditor.style.min.js.map +7 -0
  42. package/dist/plugins/grideditor.summernote.min.js.map +2 -2
  43. package/dist/plugins/grideditor.tabs.min.js.map +2 -2
  44. package/dist/plugins/grideditor.tinymce.esm.js +1 -8
  45. package/dist/plugins/grideditor.tinymce.js +1 -8
  46. package/dist/plugins/grideditor.tinymce.min.js +1 -1
  47. package/dist/plugins/grideditor.tinymce.min.js.map +3 -3
  48. package/docs/events.md +4 -6
  49. package/docs/locale-keys.md +99 -15
  50. package/docs/plugins.md +47 -23
  51. package/example/ckeditor.html +0 -5
  52. package/example/index.html +17 -2
  53. package/example/style.html +163 -0
  54. package/example/utilities.html +21 -16
  55. package/package.json +1 -1
  56. package/src/js/dom.js +1 -2
  57. package/src/js/grideditor.jquery.js +7 -28
  58. package/src/js/grideditor.js +336 -67
  59. package/src/js/locales/grideditor.es.js +80 -6
  60. package/src/js/plugins/grideditor.alignment.js +21 -50
  61. package/src/js/plugins/grideditor.ckeditor.js +10 -23
  62. package/src/js/plugins/grideditor.style.js +185 -0
  63. package/src/js/plugins/grideditor.summernote.js +4 -5
  64. package/src/js/plugins/grideditor.tinymce.js +4 -17
  65. package/src/js/style/accordion.js +168 -0
  66. package/src/js/style/catalog.js +76 -0
  67. package/src/js/style/custom.js +84 -0
  68. package/src/js/style/display.js +229 -0
  69. package/src/js/style/drawerflow.js +118 -0
  70. package/src/js/style/fields.js +382 -0
  71. package/src/js/style/flex.js +156 -0
  72. package/src/js/{plugins/grideditor.float.js → style/float.js} +6 -16
  73. package/src/js/style/options.js +60 -0
  74. package/src/js/style/sections.js +298 -0
  75. package/src/js/{plugins/grideditor.spacing.js → style/spacing.js} +7 -19
  76. package/src/js/style/sticky.js +39 -0
  77. package/src/js/{plugins/grideditor.textalign.js → style/textalign.js} +6 -14
  78. package/src/js/text/grideditor.text.js +1 -1
  79. package/src/less/grideditor.less +151 -10
  80. package/types/grideditor.d.ts +18 -0
  81. package/dist/plugins/grideditor.float.esm.js +0 -34
  82. package/dist/plugins/grideditor.float.js +0 -41
  83. package/dist/plugins/grideditor.float.min.js +0 -1
  84. package/dist/plugins/grideditor.float.min.js.map +0 -7
  85. package/dist/plugins/grideditor.spacing.esm.js +0 -318
  86. package/dist/plugins/grideditor.spacing.js +0 -323
  87. package/dist/plugins/grideditor.spacing.min.js +0 -1
  88. package/dist/plugins/grideditor.spacing.min.js.map +0 -7
  89. package/dist/plugins/grideditor.textalign.esm.js +0 -40
  90. package/dist/plugins/grideditor.textalign.js +0 -47
  91. package/dist/plugins/grideditor.textalign.min.js +0 -1
  92. package/dist/plugins/grideditor.textalign.min.js.map +0 -7
  93. package/dist/plugins/grideditor.visibility.esm.js +0 -158
  94. package/dist/plugins/grideditor.visibility.js +0 -163
  95. package/dist/plugins/grideditor.visibility.min.js +0 -1
  96. package/dist/plugins/grideditor.visibility.min.js.map +0 -7
  97. package/src/js/plugins/grideditor.visibility.js +0 -171
@@ -342,7 +342,6 @@
342
342
  var VIEW_KEYS = [ALL_VIEW].concat(BREAKPOINTS.map(function(tier) {
343
343
  return tier.key;
344
344
  }));
345
- var LEGACY_VIEW_INDEXES = ["lg", "sm", "xs"];
346
345
  var MAX_COL_SIZE = 12;
347
346
  var MAX_COL_OFFSET = 11;
348
347
  var FLEX_SIZES = ["equal", "auto"];
@@ -415,10 +414,6 @@
415
414
  // Scroll the page when a drag reaches its edge
416
415
  }
417
416
  };
418
- var REMOVED_SETTINGS = {
419
- sortable_options: "drag",
420
- resizable_options: "resize"
421
- };
422
417
  var warned = {};
423
418
  var editorCounter = 0;
424
419
  var instances = /* @__PURE__ */ new WeakMap();
@@ -572,7 +567,7 @@
572
567
  "element_classes": [],
573
568
  // Preset class toggles on an element's settings panel
574
569
  // content_types, text_tools and text_classes are the text editor
575
- // plugins' settings since 6.0: see grideditor.text.js
570
+ // plugins' settings: see grideditor.text.js
576
571
  "container_classes": [],
577
572
  // The same, on a container's panel
578
573
  "pane_classes": [],
@@ -620,14 +615,6 @@
620
615
  Object.keys(NESTED_SETTINGS).forEach(function(name) {
621
616
  settings[name] = Object.assign({}, NESTED_SETTINGS[name], settings[name]);
622
617
  });
623
- Object.keys(REMOVED_SETTINGS).forEach(function(name) {
624
- if (optionsOrMethod && optionsOrMethod[name] !== void 0) {
625
- warn(translate(settings, "warning.setting_removed", {
626
- setting: name,
627
- replacement: REMOVED_SETTINGS[name]
628
- }));
629
- }
630
- });
631
618
  var canvas, mainControls, wrapper, addRowGroup, addContainerGroup, layoutDropdown, htmlTextArea;
632
619
  var curView = settings.default_view;
633
620
  var confirmDialog = null;
@@ -660,6 +647,7 @@
660
647
  instance.settings = settingsCopy();
661
648
  removeConfirmModal();
662
649
  removeSettingsPanels();
650
+ removeDialog();
663
651
  mainControls.remove();
664
652
  createMainControls();
665
653
  reset();
@@ -1610,6 +1598,9 @@
1610
1598
  if (openSettingsState && !attached(openSettingsState.node)) {
1611
1599
  closeSettings();
1612
1600
  }
1601
+ if (dialogState && dialogState.home && !attached(dialogState.home)) {
1602
+ closeDialog();
1603
+ }
1613
1604
  runFilter(true);
1614
1605
  addClass(canvas, "ge-editing");
1615
1606
  toggleClass(canvas, "ge-drag-drawer", settings.drag_handle === "drawer");
@@ -1633,9 +1624,11 @@
1633
1624
  plugins("onBeforeDeinit");
1634
1625
  closeSizePicker();
1635
1626
  hideDropMarker();
1627
+ closeDialog();
1636
1628
  all(canvas, ".ge-tools-drawer").forEach(function(drawer) {
1637
1629
  drawer.remove();
1638
1630
  });
1631
+ pluginFields.clear();
1639
1632
  unwrapTexts();
1640
1633
  plugins("onDeinit");
1641
1634
  clearPreviews(canvas);
@@ -1671,6 +1664,7 @@
1671
1664
  deinit();
1672
1665
  removeConfirmModal();
1673
1666
  removeSettingsPanels();
1667
+ removeDialog();
1674
1668
  mainControls.remove();
1675
1669
  htmlTextArea.remove();
1676
1670
  lifetime.abort();
@@ -1767,6 +1761,12 @@
1767
1761
  setUtility,
1768
1762
  utilityField,
1769
1763
  bareStyle,
1764
+ // The host's own style, under the preview
1765
+ hostStyle,
1766
+ setHostStyle,
1767
+ // A modal of the editor's own, over the settings
1768
+ openDialog,
1769
+ closeDialog,
1770
1770
  rowFromLayout: rowFromLayoutValue,
1771
1771
  nodeHtml,
1772
1772
  // A text editor has rewritten a content area, so whatever the
@@ -2003,6 +2003,7 @@
2003
2003
  renderUtilities(section);
2004
2004
  });
2005
2005
  }
2006
+ renderPluginFields(node);
2006
2007
  refreshPreviews(node);
2007
2008
  }
2008
2009
  function utilityNodes(scope) {
@@ -2069,6 +2070,61 @@
2069
2070
  dropEmptyStyle(node);
2070
2071
  });
2071
2072
  }
2073
+ function hostDeclaration(node) {
2074
+ var scratch = document.createElement("div");
2075
+ var was = {};
2076
+ scratch.style.cssText = node.style.cssText;
2077
+ try {
2078
+ was = JSON.parse(node.getAttribute(PREVIEW_ATTR)) || {};
2079
+ } catch (error) {
2080
+ }
2081
+ Object.keys(was).forEach(function(property) {
2082
+ var before = was[property];
2083
+ if (before && before[0]) {
2084
+ scratch.style.setProperty(property, before[0], before[1]);
2085
+ } else {
2086
+ scratch.style.removeProperty(property);
2087
+ }
2088
+ });
2089
+ return scratch.style;
2090
+ }
2091
+ function hostStyle(node, property) {
2092
+ var declaration = hostDeclaration(node);
2093
+ if (property === void 0) {
2094
+ return declaration.cssText;
2095
+ }
2096
+ return {
2097
+ value: declaration.getPropertyValue(property),
2098
+ priority: declaration.getPropertyPriority(property)
2099
+ };
2100
+ }
2101
+ function setHostStyle(node, property, value, priority) {
2102
+ value = value === null || value === void 0 ? "" : String(value).trim();
2103
+ if (priority === void 0) {
2104
+ priority = hostStyle(node, property).priority;
2105
+ }
2106
+ if (value !== "") {
2107
+ var check = document.createElement("div").style;
2108
+ check.setProperty(property, value, priority || "");
2109
+ if (check.getPropertyValue(property) === "") {
2110
+ return false;
2111
+ }
2112
+ }
2113
+ var previewed = node.hasAttribute(PREVIEW_ATTR);
2114
+ if (previewed) {
2115
+ clearPreviews(node);
2116
+ }
2117
+ if (value === "") {
2118
+ node.style.removeProperty(property);
2119
+ } else {
2120
+ node.style.setProperty(property, value, priority || "");
2121
+ }
2122
+ dropEmptyStyle(node);
2123
+ if (previewed) {
2124
+ refreshPreviews(node);
2125
+ }
2126
+ return true;
2127
+ }
2072
2128
  function createUtilitiesSection(node) {
2073
2129
  var kind = kindOf(node);
2074
2130
  var fields = familiesFor(kind).filter(function(family) {
@@ -2125,8 +2181,25 @@
2125
2181
  }
2126
2182
  var field = createField(node, family);
2127
2183
  renderField(field, node);
2184
+ pluginFields.set(field, node);
2128
2185
  return field;
2129
2186
  }
2187
+ var pluginFields = /* @__PURE__ */ new Map();
2188
+ function renderPluginFields(node) {
2189
+ pluginFields.forEach(function(fieldNode, field) {
2190
+ if (!field.isConnected) {
2191
+ pluginFields.delete(field);
2192
+ return;
2193
+ }
2194
+ if (node && fieldNode !== node) {
2195
+ return;
2196
+ }
2197
+ if (closest(field, ".ge-utilities")) {
2198
+ return;
2199
+ }
2200
+ renderField(field, fieldNode);
2201
+ });
2202
+ }
2130
2203
  function renderUtilities(section) {
2131
2204
  var node = sectionNodes.get(section);
2132
2205
  children(section, ".ge-utilities-toggle").forEach(function(toggle2) {
@@ -2670,12 +2743,50 @@
2670
2743
  });
2671
2744
  classGroup.appendChild(btn);
2672
2745
  });
2746
+ pluginSections(container).forEach(function(section) {
2747
+ detailsDiv.appendChild(section);
2748
+ });
2673
2749
  var utilities = createUtilitiesSection(container);
2674
2750
  if (utilities) {
2675
2751
  detailsDiv.appendChild(utilities);
2676
2752
  }
2677
2753
  return detailsDiv;
2678
2754
  }
2755
+ function pluginSections(node) {
2756
+ var kind = kindOf(node);
2757
+ var mode = panelMode();
2758
+ var sections = [];
2759
+ [CONTAINERS, FEATURES, UTILITIES].forEach(function(registry) {
2760
+ Object.keys(registry).forEach(function(name) {
2761
+ var plugin = registry[name];
2762
+ var section = plugin.panelSection ? plugin.panelSection(node, kind) : null;
2763
+ if (!section || !section.body) {
2764
+ return;
2765
+ }
2766
+ var holder = element("div", { "class": "ge-panel-section", "data-ge-plugin": name });
2767
+ if (mode === "offcanvas" || mode === "modal") {
2768
+ holder.appendChild(section.body);
2769
+ } else {
2770
+ var label = t(section.labelKey);
2771
+ var open = holder.appendChild(element("button", {
2772
+ type: "button",
2773
+ "class": "btn btn-sm btn-outline-secondary ge-panel-section-open"
2774
+ }, label));
2775
+ hide(section.body);
2776
+ holder.appendChild(section.body);
2777
+ open.addEventListener("click", function() {
2778
+ openDialog(
2779
+ section.titleKey ? t(section.titleKey, { kind: kindLabel(node) }) : label,
2780
+ section.body,
2781
+ open
2782
+ );
2783
+ });
2784
+ }
2785
+ sections.push(holder);
2786
+ });
2787
+ });
2788
+ return sections;
2789
+ }
2679
2790
  var PANEL_MODES = ["offcanvas", "popover", "modal", "inline"];
2680
2791
  var settingsPanels = {};
2681
2792
  var openSettingsState = null;
@@ -2723,7 +2834,7 @@
2723
2834
  addClass(node, "ge-settings-target");
2724
2835
  var signal = { signal: listening.signal };
2725
2836
  document.addEventListener("keydown", function(e) {
2726
- if (e.key === "Escape") {
2837
+ if (e.key === "Escape" && !dialogState) {
2727
2838
  closeSettings();
2728
2839
  }
2729
2840
  }, signal);
@@ -2746,15 +2857,20 @@
2746
2857
  openSettingsState.observer.observe(details);
2747
2858
  }
2748
2859
  on(document, "mousedown touchstart", function(e) {
2749
- if (!panel.contains(e.target) && !gear.contains(e.target)) {
2860
+ if (!dialogState && !panel.contains(e.target) && !gear.contains(e.target)) {
2750
2861
  closeSettings();
2751
2862
  }
2752
2863
  }, signal);
2753
2864
  } else {
2754
- showModal(panel);
2865
+ showModal(panel, function() {
2866
+ if (openSettingsState && openSettingsState.mode === "modal") {
2867
+ closeSettings();
2868
+ }
2869
+ });
2755
2870
  }
2756
2871
  }
2757
2872
  function closeSettings() {
2873
+ closeDialog();
2758
2874
  var open = openSettingsState;
2759
2875
  if (!open) {
2760
2876
  return;
@@ -2832,10 +2948,9 @@
2832
2948
  settingsPanels[mode].remove();
2833
2949
  }
2834
2950
  });
2835
- if (settingsBackdrop) {
2836
- settingsBackdrop.remove();
2837
- settingsBackdrop = null;
2838
- }
2951
+ Object.keys(settingsPanels).forEach(function(mode) {
2952
+ removeBackdrop(settingsPanels[mode]);
2953
+ });
2839
2954
  settingsPanels = {};
2840
2955
  }
2841
2956
  function placePopover(panel, gear) {
@@ -2866,25 +2981,30 @@
2866
2981
  left: Math.max(gap, Math.min(tool.left + tool.width / 2 - left - 8, width - 24))
2867
2982
  });
2868
2983
  }
2869
- var settingsBackdrop = null;
2870
- function showModal(panel) {
2984
+ function showModal(panel, dismissed) {
2871
2985
  var Modal = modalLibrary();
2986
+ var state = modalState.get(panel);
2987
+ if (!state) {
2988
+ state = { wanted: null, busy: false, backdrop: null, dismissed };
2989
+ modalState.set(panel, state);
2990
+ }
2991
+ state.dismissed = dismissed;
2872
2992
  if (!Modal) {
2873
- settingsBackdrop = element("div", { "class": "modal-backdrop fade show ge-settings-backdrop" });
2874
- settingsBackdrop.addEventListener("click", function() {
2875
- closeSettings();
2876
- });
2877
- document.body.appendChild(settingsBackdrop);
2993
+ if (!state.backdrop) {
2994
+ state.backdrop = element("div", { "class": "modal-backdrop fade show ge-settings-backdrop" });
2995
+ state.backdrop.addEventListener("click", function() {
2996
+ state.dismissed();
2997
+ });
2998
+ document.body.appendChild(state.backdrop);
2999
+ }
2878
3000
  addClass(panel, "show");
2879
3001
  panel.style.display = "block";
2880
3002
  panel.removeAttribute("aria-hidden");
2881
3003
  return;
2882
3004
  }
2883
3005
  var modal = Modal.getOrCreateInstance(panel);
2884
- var state = modalState.get(panel);
2885
- if (!state) {
2886
- state = { wanted: null, busy: false };
2887
- modalState.set(panel, state);
3006
+ if (!state.watched) {
3007
+ state.watched = true;
2888
3008
  trackModal(panel);
2889
3009
  panel.addEventListener("hide.bs.modal", function() {
2890
3010
  if (state.wanted === "open") {
@@ -2901,9 +3021,9 @@
2901
3021
  panel.addEventListener("hidden.bs.modal", function() {
2902
3022
  state.busy = false;
2903
3023
  if (state.wanted === "open") {
2904
- showModal(panel);
2905
- } else if (openSettingsState && openSettingsState.mode === "modal") {
2906
- closeSettings();
3024
+ showModal(panel, state.dismissed);
3025
+ } else {
3026
+ state.dismissed();
2907
3027
  }
2908
3028
  });
2909
3029
  }
@@ -2915,23 +3035,117 @@
2915
3035
  }
2916
3036
  function hideModal(panel) {
2917
3037
  var Modal = modalLibrary();
3038
+ var state = modalState.get(panel);
3039
+ if (!state) {
3040
+ return;
3041
+ }
3042
+ state.wanted = "closed";
2918
3043
  if (!Modal) {
2919
- if (settingsBackdrop) {
2920
- settingsBackdrop.remove();
2921
- settingsBackdrop = null;
3044
+ if (state.backdrop) {
3045
+ state.backdrop.remove();
3046
+ state.backdrop = null;
2922
3047
  }
2923
3048
  removeClass(panel, "show");
2924
3049
  panel.style.removeProperty("display");
2925
3050
  panel.setAttribute("aria-hidden", "true");
2926
3051
  return;
2927
3052
  }
2928
- var state = modalState.get(panel) || { wanted: null, busy: false };
2929
- state.wanted = "closed";
2930
3053
  if (!state.busy && hasClass(panel, "show")) {
2931
3054
  state.busy = true;
2932
3055
  Modal.getOrCreateInstance(panel).hide();
2933
3056
  }
2934
3057
  }
3058
+ function removeBackdrop(panel) {
3059
+ var state = modalState.get(panel);
3060
+ if (state && state.backdrop) {
3061
+ state.backdrop.remove();
3062
+ state.backdrop = null;
3063
+ }
3064
+ }
3065
+ var dialogPanel = null;
3066
+ var dialogState = null;
3067
+ function dialog() {
3068
+ if (dialogPanel) {
3069
+ return dialogPanel;
3070
+ }
3071
+ dialogPanel = create('<div class="modal fade ge-dialog" tabindex="-1" role="dialog" aria-hidden="true"><div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"><div class="modal-content"><div class="modal-header"><h5 class="modal-title ge-dialog-title"></h5></div><div class="modal-body ge-dialog-body"></div><div class="modal-footer"></div></div></div></div>');
3072
+ one(dialogPanel, ".modal-header").appendChild(element("button", {
3073
+ type: "button",
3074
+ "class": "btn-close ge-dialog-close",
3075
+ "aria-label": t("panel.close")
3076
+ }));
3077
+ one(dialogPanel, ".modal-footer").appendChild(element("button", {
3078
+ type: "button",
3079
+ "class": "btn btn-primary ge-dialog-close"
3080
+ }, t("panel.done")));
3081
+ delegate(dialogPanel, "click", ".ge-dialog-close", function(e) {
3082
+ e.preventDefault();
3083
+ closeDialog();
3084
+ });
3085
+ return document.body.appendChild(dialogPanel);
3086
+ }
3087
+ function openDialog(title, body, opener) {
3088
+ closeDialog();
3089
+ var panel = dialog();
3090
+ var listening = new AbortController();
3091
+ dialogState = {
3092
+ body,
3093
+ home: body.parentElement,
3094
+ next: body.nextElementSibling,
3095
+ opener: opener || document.activeElement,
3096
+ listening
3097
+ };
3098
+ one(panel, ".ge-dialog-title").textContent = title;
3099
+ one(panel, ".ge-dialog-body").appendChild(body);
3100
+ show(body);
3101
+ if (!modalLibrary()) {
3102
+ document.addEventListener("keydown", function(e) {
3103
+ if (e.key === "Escape") {
3104
+ closeDialog();
3105
+ }
3106
+ }, { signal: listening.signal });
3107
+ }
3108
+ Object.keys(settingsPanels).forEach(function(mode) {
3109
+ addClass(settingsPanels[mode], "ge-under-dialog");
3110
+ });
3111
+ showModal(panel, function() {
3112
+ closeDialog();
3113
+ });
3114
+ }
3115
+ function closeDialog() {
3116
+ var open = dialogState;
3117
+ if (!open) {
3118
+ return;
3119
+ }
3120
+ dialogState = null;
3121
+ open.listening.abort();
3122
+ hideModal(dialogPanel);
3123
+ Object.keys(settingsPanels).forEach(function(mode) {
3124
+ removeClass(settingsPanels[mode], "ge-under-dialog");
3125
+ });
3126
+ hide(open.body);
3127
+ if (open.home && attached(open.home)) {
3128
+ if (open.next && open.next.parentElement === open.home) {
3129
+ open.home.insertBefore(open.body, open.next);
3130
+ } else {
3131
+ open.home.appendChild(open.body);
3132
+ }
3133
+ } else {
3134
+ open.body.remove();
3135
+ }
3136
+ if (open.opener && attached(open.opener) && open.opener.focus) {
3137
+ open.opener.focus();
3138
+ }
3139
+ }
3140
+ function removeDialog() {
3141
+ closeDialog();
3142
+ if (!dialogPanel) {
3143
+ return;
3144
+ }
3145
+ removeBackdrop(dialogPanel);
3146
+ retireModal(dialogPanel);
3147
+ dialogPanel = null;
3148
+ }
2935
3149
  function kindLabel(node) {
2936
3150
  var kind = kindOf(node);
2937
3151
  if (CONTAINERS[kind] && CONTAINERS[kind].labelKey) {
@@ -3780,10 +3994,6 @@
3780
3994
  one(layoutDropdown, "button").textContent = t(labelKeyFor(view));
3781
3995
  }
3782
3996
  function viewKey(view) {
3783
- if (typeof view == "number") {
3784
- warnOnceHere("changeView-index", "changeView(" + view + "): layout modes are identified by breakpoint key now, so pass one of " + JSON.stringify(VIEW_KEYS) + ". Numeric indexes still work, but they mean what they meant in 2.x (" + LEGACY_VIEW_INDEXES.join(", ") + ") and will be dropped.");
3785
- return LEGACY_VIEW_INDEXES[view] || null;
3786
- }
3787
3997
  return VIEW_KEYS.indexOf(view) === -1 ? null : view;
3788
3998
  }
3789
3999
  function changeView(view) {
@@ -3802,6 +4012,7 @@
3802
4012
  renderUtilities(section);
3803
4013
  });
3804
4014
  });
4015
+ renderPluginFields(null);
3805
4016
  refreshPreviews(canvas);
3806
4017
  plugins("onViewChange", key);
3807
4018
  emit("view-change", { canvas, breakpoint: key, from, to: key });
@@ -3890,7 +4101,7 @@
3890
4101
  GridEditor._plainHtml = plainHtml;
3891
4102
  GridEditor.Sortable = null;
3892
4103
  GridEditor.bootstrap = null;
3893
- GridEditor.version = false ? "dev" : "7.2.0";
4104
+ GridEditor.version = false ? "dev" : "8.0.0-beta.2";
3894
4105
  GridEditor.locales = {
3895
4106
  en: {
3896
4107
  "tool.move": "Move",
@@ -3960,14 +4171,12 @@
3960
4171
  "utility.inherit": "Inherit: {value} (from {breakpoint})",
3961
4172
  "utility.varies": "Changes at {breakpoints}; choosing here replaces that",
3962
4173
  "error.sortable_missing": "SortableJS not available! Make sure you loaded the Sortable js file; dragging is off without it.",
3963
- "warning.setting_removed": "The {setting} setting was removed in 4.0. Use {replacement} instead.",
3964
4174
  "warning.already_editing": "This element already has an editor: that one is handed back, with the options it was made with.",
3965
4175
  "warning.destroyed": "{method}() was called on an editor that has been destroyed, and does nothing.",
3966
4176
  "warning.duplicate_build": "grideditor.js was loaded twice: the first GridEditor is kept.",
3967
- "warning.plugin_6x": 'The "{name}" plugin is written for grid-editor 6 and is not loaded. Plugins register on GridEditor since 7.0: see UPGRADING.md.',
3968
4177
  "warning.adapter_no_jquery": "grideditor.jquery.js needs jQuery 4, and there is no jQuery on the page: the jQuery API is not there.",
3969
4178
  "error.tinymce_missing": "tinyMCE not available! Make sure you loaded the tinyMCE js file.",
3970
- "error.ckeditor_missing": "CKEditor 5 not available! Make sure you loaded its ckeditor5.umd.js file: CKEditor 4 is no longer supported.",
4179
+ "error.ckeditor_missing": "CKEditor 5 not available! Make sure you loaded its ckeditor5.umd.js file.",
3971
4180
  "error.summernote_missing": "Summernote not available! Make sure you loaded jQuery and the Summernote js file."
3972
4181
  }
3973
4182
  };