diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..99d4298ab
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,18 @@
+coverage
+dist
+dist_save
+*.tgz
+*.zip
+angular/
+react/
+
+!node_modules/
+node_modules/*
+!node_modules/gridstack/
+node_modules/gridstack/*
+!node_modules/gridstack/dist/
+node_modules/gridstack/dist/*
+!node_modules/gridstack/dist/gridstack-all.js
+!node_modules/gridstack/dist/gridstack-all.js.map
+!node_modules/gridstack/dist/gridstack.css
+!node_modules/gridstack/dist/gridstack.min.css
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 000000000..e69de29bb
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 000000000..c304efe30
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,4 @@
+./demo
+./freelancer
+./logo
+**/node_modules
\ No newline at end of file
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 000000000..66e7e941c
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,6 @@
+{
+ "trailingComma": "es5",
+ "tabWidth": 2,
+ "semi": false,
+ "singleQuote": true
+}
\ No newline at end of file
diff --git a/CNAME b/CNAME
new file mode 100644
index 000000000..3530eb4f0
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+gridstackjs.com
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 511ea0819..000000000
--- a/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Pavel Reznikov
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/README.md b/README.md
index e0460911b..a1b5993c1 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,34 @@
-gridstack.js
-============
+# Gridstack Website
-gridstack.js is a jQuery plugin for widget layout
+## Technos
+### Icons
+- Lucide Icons
+> We use Lucide Icons for the website, but we copy svg instead of using the lib directly. You can find them [here](https://lucide.dev/)
+- Dev icons
+(We use the link for now but will be replaced by svg)
+> We use Dev icons for the website, but we copy svg instead of using the lib directly. You can find them [here](https://devicon.dev/)
+### Gridstack
+(Of course 🙃)
+### Highlight.js
+For code highlighting, used in the homepage to have a beautiful code snippet `
...
`
+A custom theme is used, you can find it in the `src/styles/highlight.css` file
+### Dev dependencies
+- Prettier
+For code formatting
+
+
+> The tailwind.config.js file is useless but make code editor plugins works.
+### Roadmap
+
+- [ ] Create a beautiful examples/ page
+- [ ] Create a beautiful documentation/ page
+- [ ] Create a beautiful changes/ page
+- [ ] Improve demo.css to follow the same style as the website
+- [ ] Create a layout in the examples/[name.html] to switch easily between examples
+- [ ] Add micro-interactions to the website
+- [ ] Add animation to mobile navbar
+- [x] Add lucide icons to the website & in many sections
+- [ ] Improve SEO with meta tags on each page
+- [ ] Find a way to update automatically `Current version | v10.1.2`
+- [ ] Improve responsive design (mobile version) by changing grid to 6 columns instead of 12 for example and reduce padding on x, etc.
+- [ ] Fix advanced demo "Add widget" to not impact the background & fix margins when dropped in the grid
\ No newline at end of file
diff --git a/demo/anijs.html b/demo/anijs.html
new file mode 100644
index 000000000..53538feb6
--- /dev/null
+++ b/demo/anijs.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ AniJS demo
+
+
+
+
+
+
+
+
+
We now ship an Angular Component
+ to make it supper easy for that framework
+
React wrapper
+
React original examples are shown above, but upcoming and better TS based /react folder (working to make that official and ship it) should be looked at instead.
+
Old v5.1.1 Jquery Demos
+ Note: those are no longer supported, and use an old version of the lib to compare functionality.
+
This example shows v5.x dragging between nested grids (dark yellow) and parent grid (bright yellow.)
+ Use v9.2 sizeToContent:true on first subgrid item parent to grow/shrink as needed, while leaving leaf green items unchanged.
+ Uses v3.1 API to load the entire nested grid from JSON.
+ Nested grids uses v5 column:'auto' to keep items same size during resize.
Create sub-grids (darker background) on the fly, by dragging items completely over others (nest) vs partially (push) using
+ the new v7 API GridStackOptions.subGridDynamic=true
+
This will use the new delay drag&drop option DDDragOpt.pause to tell the gesture difference
+
+
+
+
diff --git a/demo/old_nested-jq.html b/demo/old_nested-jq.html
new file mode 100644
index 000000000..0bccb24cf
--- /dev/null
+++ b/demo/old_nested-jq.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+ Nested JQuery grids demo (old v5.1.1) which never worked fully
+
+
+
+
+
+
+
Nested JQuery grids demo
+
This is the same nested grid demo, but for Jquery which has additional work required, and options.
+ 1. dragOut is implemented (second subgrid cannot drag outside, only adding item).
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/react-hooks.html b/demo/react-hooks.html
new file mode 100644
index 000000000..5ceaaa744
--- /dev/null
+++ b/demo/react-hooks.html
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+ Gridstack.js React integration example
+
+
+
+
+
+
+
+
+
+
+
+
Using GridStack.js with React hooks
+
+ As with any virtual DOM based framework, you need to check if React has rendered the DOM (or any updates to it)
+ before you initialize GridStack or call its methods. This example shows how to make rendered
+ components widgets:
+
+
+
Render items, each with a reference
+
Convert each rendered item to a widget using the reference and the
+ makeWidget() function
+
+
+
+
Controlled stack
+
+
+
+
Uncontrolled stack
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/react.html b/demo/react.html
new file mode 100644
index 000000000..711986963
--- /dev/null
+++ b/demo/react.html
@@ -0,0 +1,104 @@
+
+
+
+
+
+ Gridstack.js React integration example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/responsive.html b/demo/responsive.html
new file mode 100644
index 000000000..a58f41cfa
--- /dev/null
+++ b/demo/responsive.html
@@ -0,0 +1,65 @@
+
+
+
+ Responsive column
+
+
+
+
+
+
+
Responsive: by column size
+
Using new v10 GridStackOptions.columnOpts: { columnWidth: x }
New 9.x feature that size the items to fit their content height as to not have scroll bars
+ case C: `sizeToContent:false` to turn off.
+ case E: has soft maxsize `sizeToContent:3`, shrinking to smaller content as needed
+ Defaulting to different initial size (see code) to show grow/shrink behavior
Two grids, one floating one not, showing drag&drop from sidebar and between grids.
+ New v10.2: use 'Esc' to cancel any move/resize. Use 'r' to rotate as you drag.
special care is needed to prevent top grid from growing and causing shifts while you are dragging (which is a know issue).
+ You can either set a fix row, or have enough padding on a parent div to allow for an extra row to be created as needed), or....
+ As with any virtual DOM based framework, you need to check if Vue has
+ rendered the DOM (or any updates to it) before you
+ initialize GridStack or call its methods. As a basic example, check this
+ component's mounted hook.
+
+
+ If your app requires more complex render logic than the inline template
+ in `addWidget`, consider
+ makeWidget
+ to let Vue deal with DOM rendering.
+
+ As with any virtual DOM based framework, you need to check if Vue has
+ rendered the DOM (or any updates to it) before you
+ initialize GridStack or call its methods. As a basic example, check this
+ component's mounted hook.
+
+
+ If your app requires more complex render logic than the inline template
+ in `addWidget`, consider
+ makeWidget
+ to let Vue deal with DOM rendering.
+
+ {{ info }}
+
+
+
+
+
diff --git a/demo/vue3js_dynamic-modern-renderCB.html b/demo/vue3js_dynamic-modern-renderCB.html
new file mode 100644
index 000000000..f796ce72a
--- /dev/null
+++ b/demo/vue3js_dynamic-modern-renderCB.html
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+ Vue3 Gridstack: Gridstack DOM with Vue Rendering
+
+
+
+
+
+
+ Back to All Demos
+
Vue3: Gridstack Controls Vue Rendering Grid Items
+
+ Use Vue3 render functions with GridStack.renderCB
+ GridStack handles widget creation and Vue handles rendering the content using the modern (since V11) GridStack.renderCB.
+
+
+ {{ info }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/vue3js_dynamic-render_grid-item-content.html b/demo/vue3js_dynamic-render_grid-item-content.html
new file mode 100644
index 000000000..441e742ef
--- /dev/null
+++ b/demo/vue3js_dynamic-render_grid-item-content.html
@@ -0,0 +1,161 @@
+
+
+
+
+
+ Vue3 Gridstack: Gridstack DOM with Vue Rendering
+
+
+
+
+
+ Back to All Demos
+
+ Use Vue3 render functions to dynamically render only the grid item content.
+ GridStack is handles when items are added/removed, rendering grid item element, and Vue handles rendering only the item content.
+
This implementation currently does not support nested grid
+
+
+ {{ info }}
+
+
+
+
+
diff --git a/demo/vue3js_dynamic-render_grid-item.html b/demo/vue3js_dynamic-render_grid-item.html
new file mode 100644
index 000000000..2f3567f41
--- /dev/null
+++ b/demo/vue3js_dynamic-render_grid-item.html
@@ -0,0 +1,168 @@
+
+
+
+
+
+ Vue3 Gridstack: Gridstack DOM with Vue Rendering
+
+
+
+
+
+ Back to All Demos
+
Vue3: Gridstack Controls Vue Rendering Grid Item
+
+ Use Vue3 render functions to dynamically render the entire Gridstack item (wrapper and contents)
+ GridStack is handles when items are added/removed, and Vue handles rendering of the entire item in GridStack.addRemoveCB.
+
+ As with any virtual DOM based framework, you need to check if Vue has
+ rendered the DOM (or any updates to it) before you
+ initialize GridStack or call its methods. As a basic example, check this
+ component's mounted hook.
+
+
+ If your app requires more complex render logic than the inline template
+ in `addWidget`, consider
+ makeWidget
+ to let Vue deal with DOM rendering.
+
+ gridstack.js is a modern Typescript library designed to help developers create
+ beautiful draggable, resizable, responsive layouts with just a few lines of code.
+ You can create more advanced grids: allow users to persist
+ changes, create a sidebar of widgets to drag into your grid, nested grids, and
+ much more.
+ Features:
+
+
+
pure TS can be used in any UI framework
+
mobile support
+
draggable, resizable items
+
drag'n'drop from sidebar to insert/delete
+
responsive layouts, column based
+
save/restore
+
drag between multiple grids
+
nested grids, including creation on the fly to any depth
+
Angular (included), demo and external Vue, React, Ember, Knockout.js bindings and more
+
+
+ If you find this lib useful, please donate
+ PayPal (use “send to a friend” to avoid 3% fee) or
+ Venmo (adumesny)
+ and help support it!
+
+
+
+
+
+
+
+
+
+
+
Basic Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Getting Started
+
+ Create your first interactive grid by copy-pasting the HTML+JS, as seen below...
+
+
+
Code
+
+npm install gridstack
+
then in html:
+<script src="http://github.com/node_modules/gridstack/dist/gridstack-all.js"></script>
+<link href="http://github.com/node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
+<style type="text/css">
+ .grid-stack { background: #FAFAD2; }
+ .grid-stack-item-content { background-color: #18BC9C; }
+</style>
+
+<div class="grid-stack"></div>
+
+<script type="text/javascript">
+ var items = [
+ {content: 'my first widget'}, // will default to location (0,0) and 1x1
+ {w: 2, content: 'another longer widget!'} // will be placed next at (1,0) and 2x1
+ ];
+ var grid = GridStack.init();
+ grid.load(items);
+</script>
+
+
+
+ ...and that's it! Drag, drop, and resize to your heart's content.
+ Looking for more complex examples? Check out the advanced example below, the links in the nav
+ bar, or our docs in GitHub
+
+ If you find this library useful, please donate via
+ PayPal
+ or
+ Venmo (adumesny)
+ and help support it!
+
+
+
+
+
+
+ Workflow
+
+
Framework Agnostic
+
+ Gridstack.js is a modern pure Typescript library, with no external
+ dependencies, that can work with any framework. It comes bundled with an
+ Angular wrapper, and include many React|Vue examples (wrapper coming
+ soon) as well as others.
+
+
+
+
+
Pure Typescript
+
+
+
+
Angular (included)
+
+
+
+
React
+
+
+
+
Vue
+
+
+
And many more...
+
+
+
+
+
+ Features
+
+
Advanced features
+
+ Gridstack.js is a modern Typescript library designed to help developers
+ create beautiful draggable, resizable, responsive layouts with just a
+ few lines of code.
+
+
+
+
Full Mobile Support
+
+ Craft responsive, mobile-friendly applications with ease.
+
+
+
+
+
Draggable & Resizable Elements
+
+ Intuitive interfaces with interactive components.
+
+
+
+
+
Effortless Drag-and-Drop
+
+ Manage content dynamically from a sidebar for insertions and
+ deletions.
+
+
+
+
+
Responsive, Column-Based Layouts
+
+ Design adaptable and visually appealing web layouts.
+
+
+
+
+
Save and Restore Feature
+
+ Easily preserve and revert to previous layouts.
+
+
+
+
+
Inter-grid Interactivity
+
+ Drag items across multiple grids for sophisticated layout
+ management.
+
+
+
+
+
Nested Grids
+
+ Create and manipulate nested grids dynamically to any depth.
+
+
+
+
+
Extensive Framework Support
+
+ Native Angular support, along with external bindings for Vue, React,
+ Ember, Knockout.js, and more.
+
+
+
+
+
+
+
+
+ Demonstration
+
+
Basic demo
+
+ Simple to use, configure, and customize. Drag and drop the items below
+ to try !
+
+
+
+
+
+
+
+
+ Code
+
+
Getting started
+
+ Create your first interactive grid by copy-pasting the HTML+JS, as
+ seen below...
+
+
npm install gridstack
+
+
+ Then, in your HTML file, include the following code...
+
+
+<script src="http://github.com/node_modules/gridstack/dist/gridstack-all.js"></script>
+<link href="http://github.com/node_modules/gridstack/dist/gridstack.min.css" rel="stylesheet"/>
+<style type="text/css">
+ .grid-stack { background: #FAFAD2; }
+ .grid-stack-item-content { background-color: #18BC9C; }
+</style>
+
+<div class="grid-stack"></div>
+
+<script type="text/javascript">
+ var items = [
+ {content: 'my first widget'}, // will default to location (0,0) and 1x1
+ {w: 2, content: 'another longer widget!'} // will be placed next at (1,0) and 2x1
+ ];
+ var grid = GridStack.init();
+ grid.load(items);
+</script>
+
+
+
+ ...and that's it! Drag, drop, and resize to your heart's content.
+ Looking for more complex examples? Check out the advanced example
+ below, the links in the nav bar, or our docs in
+ GitHub
+
+
+
+
+
+ Demonstration
+
+
Advanced demo
+
+ A full control example with a trash can to remove widgets and a drag
+ in widget.
+
+
+ More complex examples are available to demonstrate the full power of
+ gridstack.js.
+
+ Drag and drop the items below to try!
+
+
+
+
+
+ Drag me into the dashboard!
+
+
+
+
+
Drop here to remove widget!
+
+
+
+
+
+
+
+
+
+
+ Articles
+
+
Why use gridstack.js ?
+
+ Find out why developers everywhere are choosing gridstack.js for their
+ projects.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/logos/Flex-X-medium.png b/logos/Flex-X-medium.png
new file mode 100644
index 000000000..ff3eae0c6
Binary files /dev/null and b/logos/Flex-X-medium.png differ
diff --git a/logos/Guard-Logo-RGB.png b/logos/Guard-Logo-RGB.png
new file mode 100644
index 000000000..16d6cdbcf
Binary files /dev/null and b/logos/Guard-Logo-RGB.png differ
diff --git a/logos/VMW_09Q3_LOGO_Corp_Gray.png b/logos/VMW_09Q3_LOGO_Corp_Gray.png
new file mode 100644
index 000000000..09476bb01
Binary files /dev/null and b/logos/VMW_09Q3_LOGO_Corp_Gray.png differ
diff --git a/logos/df-logo-transparent-bg.png b/logos/df-logo-transparent-bg.png
new file mode 100644
index 000000000..7fe682101
Binary files /dev/null and b/logos/df-logo-transparent-bg.png differ
diff --git a/logos/gridstack-logo-large.png b/logos/gridstack-logo-large.png
new file mode 100644
index 000000000..14d57e711
Binary files /dev/null and b/logos/gridstack-logo-large.png differ
diff --git a/logos/gridstack-logo-small.png b/logos/gridstack-logo-small.png
new file mode 100644
index 000000000..66e108250
Binary files /dev/null and b/logos/gridstack-logo-small.png differ
diff --git a/logos/modul-large-logo.png b/logos/modul-large-logo.png
new file mode 100644
index 000000000..eb3711bb5
Binary files /dev/null and b/logos/modul-large-logo.png differ
diff --git a/logos/node-red-icon.png b/logos/node-red-icon.png
new file mode 100644
index 000000000..898c242b6
Binary files /dev/null and b/logos/node-red-icon.png differ
diff --git a/node_modules/gridstack/dist/gridstack-all.js b/node_modules/gridstack/dist/gridstack-all.js
new file mode 100644
index 000000000..f87af0ec3
--- /dev/null
+++ b/node_modules/gridstack/dist/gridstack-all.js
@@ -0,0 +1,3 @@
+/*! For license information please see gridstack-all.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.GridStack=t():e.GridStack=t()}(self,(()=>(()=>{"use strict";var e={d:(t,i)=>{for(var s in i)e.o(i,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:i[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{GridStack:()=>x});class i{static getElements(e,t=document){if("string"==typeof e){const i="getElementById"in t?t:void 0;if(i&&!isNaN(+e[0])){const t=i.getElementById(e);return t?[t]:[]}let s=t.querySelectorAll(e);return s.length||"."===e[0]||"#"===e[0]||(s=t.querySelectorAll("."+e),s.length||(s=t.querySelectorAll("#"+e))),Array.from(s)}return[e]}static getElement(e,t=document){if("string"==typeof e){const i="getElementById"in t?t:void 0;if(!e.length)return null;if(i&&"#"===e[0])return i.getElementById(e.substring(1));if("#"===e[0]||"."===e[0]||"["===e[0])return t.querySelector(e);if(i&&!isNaN(+e[0]))return i.getElementById(e);let s=t.querySelector(e);return i&&!s&&(s=i.getElementById(e)),s||(s=t.querySelector("."+e)),s}return e}static lazyLoad(e){return e.lazyLoad||e.grid?.opts?.lazyLoad&&!1!==e.lazyLoad}static createDiv(e,t){const i=document.createElement("div");return e.forEach((e=>{e&&i.classList.add(e)})),t?.appendChild(i),i}static shouldSizeToContent(e,t=!1){return e?.grid&&(t?!0===e.sizeToContent||!0===e.grid.opts.sizeToContent&&void 0===e.sizeToContent:!!e.sizeToContent||e.grid.opts.sizeToContent&&!1!==e.sizeToContent)}static isIntercepted(e,t){return!(e.y>=t.y+t.h||e.y+e.h<=t.y||e.x+e.w<=t.x||e.x>=t.x+t.w)}static isTouching(e,t){return i.isIntercepted(e,{x:t.x-.5,y:t.y-.5,w:t.w+1,h:t.h+1})}static areaIntercept(e,t){const i=e.x>t.x?e.x:t.x,s=e.x+e.wt.y?e.y:t.y,n=e.y+e.h{const o=t*((e.y??i)-(s.y??i));return 0===o?t*((e.x??i)-(s.x??i)):o}))}static find(e,t){return t?e.find((e=>e.id===t)):void 0}static toBool(e){return"boolean"==typeof e?e:"string"==typeof e?!(""===(e=e.toLowerCase())||"no"===e||"false"===e||"0"===e):Boolean(e)}static toNumber(e){return null===e||0===e.length?void 0:Number(e)}static parseHeight(e){let t,i="px";if("string"==typeof e)if("auto"===e||""===e)t=0;else{const s=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%|cm|mm)?$/);if(!s)throw new Error(`Invalid height val = ${e}`);i=s[2]||"px",t=parseFloat(s[1])}else t=e;return{h:t,unit:i}}static defaults(e,...t){return t.forEach((t=>{for(const i in t){if(!t.hasOwnProperty(i))return;null===e[i]||void 0===e[i]?e[i]=t[i]:"object"==typeof t[i]&&"object"==typeof e[i]&&this.defaults(e[i],t[i])}})),e}static same(e,t){if("object"!=typeof e)return e==t;if(typeof e!=typeof t)return!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const i in e)if(e[i]!==t[i])return!1;return!0}static copyPos(e,t,i=!1){return void 0!==t.x&&(e.x=t.x),void 0!==t.y&&(e.y=t.y),void 0!==t.w&&(e.w=t.w),void 0!==t.h&&(e.h=t.h),i&&(t.minW&&(e.minW=t.minW),t.minH&&(e.minH=t.minH),t.maxW&&(e.maxW=t.maxW),t.maxH&&(e.maxH=t.maxH)),e}static samePos(e,t){return e&&t&&e.x===t.x&&e.y===t.y&&(e.w||1)===(t.w||1)&&(e.h||1)===(t.h||1)}static sanitizeMinMax(e){e.minW||delete e.minW,e.minH||delete e.minH,e.maxW||delete e.maxW,e.maxH||delete e.maxH}static removeInternalAndSame(e,t){if("object"==typeof e&&"object"==typeof t)for(let s in e){const o=e[s],n=t[s];"_"===s[0]||o===n?delete e[s]:o&&"object"==typeof o&&void 0!==n&&(i.removeInternalAndSame(o,n),Object.keys(o).length||delete e[s])}}static removeInternalForSave(e,t=!0){for(let t in e)"_"!==t[0]&&null!==e[t]&&void 0!==e[t]||delete e[t];delete e.grid,t&&delete e.el,e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,e.locked||delete e.locked,1!==e.w&&e.w!==e.minW||delete e.w,1!==e.h&&e.h!==e.minH||delete e.h}static throttle(e,t){let i=!1;return(...s)=>{i||(i=!0,setTimeout((()=>{e(...s),i=!1}),t))}}static removePositioningStyles(e){const t=e.style;t.position&&t.removeProperty("position"),t.left&&t.removeProperty("left"),t.top&&t.removeProperty("top"),t.width&&t.removeProperty("width"),t.height&&t.removeProperty("height")}static getScrollElement(e){if(!e)return document.scrollingElement||document.documentElement;const t=getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowY)?e:this.getScrollElement(e.parentElement)}static updateScrollPosition(e,t,i){const s=e.getBoundingClientRect(),o=window.innerHeight||document.documentElement.clientHeight;if(s.top<0||s.bottom>o){const n=s.bottom-o,r=s.top,a=this.getScrollElement(e);if(null!==a){const h=a.scrollTop;s.top<0&&i<0?e.offsetHeight>o?a.scrollTop+=i:a.scrollTop+=Math.abs(r)>Math.abs(i)?i:r:i>0&&(e.offsetHeight>o?a.scrollTop+=i:a.scrollTop+=n>i?i:n),t.top+=a.scrollTop-h}}}static updateScrollResize(e,t,i){const s=this.getScrollElement(t),o=s.clientHeight,n=s===this.getScrollElement()?0:s.getBoundingClientRect().top,r=e.clientY-n,a=r>o-i;re===o))&&(s[o]=i.cloneDeep(e[o]));return s}static cloneNode(e){const t=e.cloneNode(!0);return t.removeAttribute("id"),t}static appendTo(e,t){let s;s="string"==typeof t?i.getElement(t):t,s&&s.appendChild(e)}static addElStyles(e,t){if(t instanceof Object)for(const i in t)t.hasOwnProperty(i)&&(Array.isArray(t[i])?t[i].forEach((t=>{e.style[i]=t})):e.style[i]=t[i])}static initEvent(e,t){const i={type:t.type},s={button:0,which:0,buttons:1,bubbles:!0,cancelable:!0,target:t.target?t.target:e.target};return["altKey","ctrlKey","metaKey","shiftKey"].forEach((t=>i[t]=e[t])),["pageX","pageY","clientX","clientY","screenX","screenY"].forEach((t=>i[t]=e[t])),{...i,...s}}static simulateMouseEvent(e,t,i){const s=e,o=new MouseEvent(t,{bubbles:!0,composed:!0,cancelable:!0,view:window,detail:1,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY,ctrlKey:s.ctrlKey??!1,altKey:s.altKey??!1,shiftKey:s.shiftKey??!1,metaKey:s.metaKey??!1,button:0,relatedTarget:e.target});(i||e.target).dispatchEvent(o)}static getValuesFromTransformedElement(e){const t=document.createElement("div");i.addElStyles(t,{opacity:"0",position:"fixed",top:"0px",left:"0px",width:"1px",height:"1px",zIndex:"-999999"}),e.appendChild(t);const s=t.getBoundingClientRect();return e.removeChild(t),t.remove(),{xScale:1/s.width,yScale:1/s.height,xOffset:s.left,yOffset:s.top}}static swap(e,t,i){if(!e)return;const s=e[t];e[t]=e[i],e[i]=s}static canBeRotated(e){return!(!e||e.w===e.h||e.locked||e.noResize||e.grid?.opts.disableResize||e.minW&&e.minW===e.maxW||e.minH&&e.minH===e.maxH)}}class s{constructor(e={}){this.addedNodes=[],this.removedNodes=[],this.defaultColumn=12,this.column=e.column||this.defaultColumn,this.column>this.defaultColumn&&(this.defaultColumn=this.column),this.maxRow=e.maxRow,this._float=e.float,this.nodes=e.nodes||[],this.onChange=e.onChange}batchUpdate(e=!0,t=!0){return!!this.batchMode===e||(this.batchMode=e,e?(this._prevFloat=this._float,this._float=!0,this.cleanNodes(),this.saveInitial()):(this._float=this._prevFloat,delete this._prevFloat,t&&this._packNodes(),this._notify())),this}_useEntireRowArea(e,t){return(!this.float||this.batchMode&&!this._prevFloat)&&!this._hasLocked&&(!e._moving||e._skipDown||t.y<=e.y)}_fixCollisions(e,t=e,s,o={}){if(this.sortNodes(-1),!(s=s||this.collide(e,t)))return!1;if(e._moving&&!o.nested&&!this.float&&this.swap(e,s))return!0;let n=t;!this._loading&&this._useEntireRowArea(e,t)&&(n={x:0,w:this.column,y:t.y,h:t.h},s=this.collide(e,n,o.skip));let r=!1;const a={nested:!0,pack:!1};let h=0;for(;s=s||this.collide(e,n,o.skip);){if(h++>2*this.nodes.length)throw new Error("Infinite collide check");let n;if(s.locked||this._loading||e._moving&&!e._skipDown&&t.y>e.y&&!this.float&&(!this.collide(s,{...s,y:e.y},e)||!this.collide(s,{...s,y:t.y-s.h},e))){e._skipDown=e._skipDown||t.y>e.y;const h={...t,y:s.y+s.h,...a};n=!(!this._loading||!i.samePos(e,h))||this.moveNode(e,h),(s.locked||this._loading)&&n?i.copyPos(t,e):!s.locked&&n&&o.pack&&(this._packNodes(),t.y=s.y+s.h,i.copyPos(e,t)),r=r||n}else n=this.moveNode(s,{...s,y:t.y+t.h,skip:e,...a});if(!n)return r;s=void 0}return r}collide(e,t=e,s){const o=e._id,n=s?._id;return this.nodes.find((e=>e._id!==o&&e._id!==n&&i.isIntercepted(e,t)))}collideAll(e,t=e,s){const o=e._id,n=s?._id;return this.nodes.filter((e=>e._id!==o&&e._id!==n&&i.isIntercepted(e,t)))}directionCollideCoverage(e,t,i){if(!t.rect||!e._rect)return;const s=e._rect,o={...t.rect};let n;o.y>s.y?(o.h+=o.y-s.y,o.y=s.y):o.h+=s.y-o.y,o.x>s.x?(o.w+=o.x-s.x,o.x=s.x):o.w+=s.x-o.x;let r=.5;for(let e of i){if(e.locked||!e._rect)break;const t=e._rect;let i=Number.MAX_VALUE,a=Number.MAX_VALUE;s.yt.y+t.h&&(i=(t.y+t.h-o.y)/t.h),s.xt.x+t.w&&(a=(t.x+t.w-o.x)/t.w);const h=Math.min(a,i);h>r&&(r=h,n=e)}return t.collide=n,n}cacheRects(e,t,i,s,o,n){return this.nodes.forEach((r=>r._rect={y:r.y*t+i,x:r.x*e+n,w:r.w*e-n-s,h:r.h*t-i-o})),this}swap(e,t){if(!t||t.locked||!e||e.locked)return!1;function s(){const i=t.x,s=t.y;return t.x=e.x,t.y=e.y,e.h!=t.h?(e.x=i,e.y=t.y+t.h):e.w!=t.w?(e.x=t.x+t.w,e.y=s):(e.x=i,e.y=s),e._dirty=t._dirty=!0,!0}let o;if(e.w===t.w&&e.h===t.h&&(e.x===t.x||e.y===t.y)&&(o=i.isTouching(e,t)))return s();if(!1!==o){if(e.w===t.w&&e.x===t.x&&(o||(o=i.isTouching(e,t)))){if(t.y{let o;t.locked||(t.autoPosition=!0,"list"===e&&i&&(o=s[i-1])),this.addNode(t,!1,o)})),s||delete this._inColumnResize,i||this.batchUpdate(!1),this}set float(e){this._float!==e&&(this._float=e||!1,e||this._packNodes()._notify())}get float(){return this._float||!1}sortNodes(e=1){return this.nodes=i.sort(this.nodes,e),this}_packNodes(){return this.batchMode||(this.sortNodes(),this.float?this.nodes.forEach((e=>{if(e._updating||void 0===e._orig||e.y===e._orig.y)return;let t=e.y;for(;t>e._orig.y;)--t,this.collide(e,{x:e.x,y:t,w:e.w,h:e.h})||(e._dirty=!0,e.y=t)})):this.nodes.forEach(((e,t)=>{if(!e.locked)for(;e.y>0;){const i=0===t?0:e.y-1;if(0!==t&&this.collide(e,{x:e.x,y:i,w:e.w,h:e.h}))break;e._dirty=e.y!==i,e.y=i}}))),this}prepareNode(e,t){e._id=e._id??s._idSeq++;const o=e.id;if(o){let t=1;for(;this.nodes.find((t=>t.id===e.id&&t!==e));)e.id=o+"_"+t++}void 0!==e.x&&void 0!==e.y&&null!==e.x&&null!==e.y||(e.autoPosition=!0);const n={x:0,y:0,w:1,h:1};return i.defaults(e,n),e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,i.sanitizeMinMax(e),"string"==typeof e.x&&(e.x=Number(e.x)),"string"==typeof e.y&&(e.y=Number(e.y)),"string"==typeof e.w&&(e.w=Number(e.w)),"string"==typeof e.h&&(e.h=Number(e.h)),isNaN(e.x)&&(e.x=n.x,e.autoPosition=!0),isNaN(e.y)&&(e.y=n.y,e.autoPosition=!0),isNaN(e.w)&&(e.w=n.w),isNaN(e.h)&&(e.h=n.h),this.nodeBoundFix(e,t),e}nodeBoundFix(e,t){const s=e._orig||i.copyPos({},e);if(e.maxW&&(e.w=Math.min(e.w||1,e.maxW)),e.maxH&&(e.h=Math.min(e.h||1,e.maxH)),e.minW&&(e.w=Math.max(e.w||1,e.minW)),e.minH&&(e.h=Math.max(e.h||1,e.minH)),(e.x||0)+(e.w||1)>this.column&&this.columnthis.column?e.w=this.column:e.w<1&&(e.w=1),this.maxRow&&e.h>this.maxRow?e.h=this.maxRow:e.h<1&&(e.h=1),e.x<0&&(e.x=0),e.y<0&&(e.y=0),e.x+e.w>this.column&&(t?e.w=this.column-e.x:e.x=this.column-e.w),this.maxRow&&e.y+e.h>this.maxRow&&(t?e.h=this.maxRow-e.y:e.y=this.maxRow-e.h),i.samePos(e,s)||(e._dirty=!0),this}getDirtyNodes(e){return e?this.nodes.filter((e=>e._dirty&&!i.samePos(e,e._orig))):this.nodes.filter((e=>e._dirty))}_notify(e){if(this.batchMode||!this.onChange)return this;const t=(e||[]).concat(this.getDirtyNodes());return this.onChange(t),this}cleanNodes(){return this.batchMode||this.nodes.forEach((e=>{delete e._dirty,delete e._lastTried})),this}saveInitial(){return this.nodes.forEach((e=>{e._orig=i.copyPos({},e),delete e._dirty})),this._hasLocked=this.nodes.some((e=>e.locked)),this}restoreInitial(){return this.nodes.forEach((e=>{e._orig&&!i.samePos(e,e._orig)&&(i.copyPos(e,e._orig),e._dirty=!0)})),this._notify(),this}findEmptyPosition(e,t=this.nodes,s=this.column,o){let n=!1;for(let r=o?o.y*s+(o.x+o.w):0;!n;++r){const o=r%s,a=Math.floor(r/s);if(o+e.w>s)continue;const h={x:o,y:a,w:e.w,h:e.h};t.find((e=>i.isIntercepted(h,e)))||(e.x===o&&e.y===a||(e._dirty=!0),e.x=o,e.y=a,delete e.autoPosition,n=!0)}return n}addNode(e,t=!1,i){const s=this.nodes.find((t=>t._id===e._id));if(s)return s;let o;return this._inColumnResize?this.nodeBoundFix(e):this.prepareNode(e),delete e._temporaryRemoved,delete e._removeDOM,e.autoPosition&&this.findEmptyPosition(e,this.nodes,this.column,i)&&(delete e.autoPosition,o=!0),this.nodes.push(e),t&&this.addedNodes.push(e),o||this._fixCollisions(e),this.batchMode||this._packNodes()._notify(),e}removeNode(e,t=!0,i=!1){return this.nodes.find((t=>t._id===e._id))?(i&&this.removedNodes.push(e),t&&(e._removeDOM=!0),this.nodes=this.nodes.filter((t=>t._id!==e._id)),e._isAboutToRemove||this._packNodes(),this._notify([e]),this):this}removeAll(e=!0,t=!0){if(delete this._layouts,!this.nodes.length)return this;e&&this.nodes.forEach((e=>e._removeDOM=!0));const i=this.nodes;return this.removedNodes=t?i:[],this.nodes=[],this._notify(i)}moveNodeCheck(e,t){if(!this.changedPosConstrain(e,t))return!1;if(t.pack=!0,!this.maxRow)return this.moveNode(e,t);let o;const n=new s({column:this.column,float:this.float,nodes:this.nodes.map((t=>t._id===e._id?(o={...t},o):{...t}))});if(!o)return!1;const r=n.moveNode(o,t)&&n.getRow()<=Math.max(this.getRow(),this.maxRow);if(!r&&!t.resizing&&t.collide){const i=t.collide.el.gridstackNode;if(this.swap(e,i))return this._notify(),!0}return!!r&&(n.nodes.filter((e=>e._dirty)).forEach((e=>{const t=this.nodes.find((t=>t._id===e._id));t&&(i.copyPos(t,e),t._dirty=!0)})),this._notify(),!0)}willItFit(e){if(delete e._willFitPos,!this.maxRow)return!0;const t=new s({column:this.column,float:this.float,nodes:this.nodes.map((e=>({...e})))}),o={...e};return this.cleanupNode(o),delete o.el,delete o._id,delete o.content,delete o.grid,t.addNode(o),t.getRow()<=this.maxRow&&(e._willFitPos=i.copyPos({},o),!0)}changedPosConstrain(e,t){return t.w=t.w||e.w,t.h=t.h||e.h,e.x!==t.x||e.y!==t.y||(e.maxW&&(t.w=Math.min(t.w,e.maxW)),e.maxH&&(t.h=Math.min(t.h,e.maxH)),e.minW&&(t.w=Math.max(t.w,e.minW)),e.minH&&(t.h=Math.max(t.h,e.minH)),e.w!==t.w||e.h!==t.h)}moveNode(e,t){if(!e||!t)return!1;let s;void 0!==t.pack||this.batchMode||(s=t.pack=!0),"number"!=typeof t.x&&(t.x=e.x),"number"!=typeof t.y&&(t.y=e.y),"number"!=typeof t.w&&(t.w=e.w),"number"!=typeof t.h&&(t.h=e.h);const o=e.w!==t.w||e.h!==t.h,n=i.copyPos({},e,!0);if(i.copyPos(n,t),this.nodeBoundFix(n,o),i.copyPos(t,n),!t.forceCollide&&i.samePos(e,t))return!1;const r=i.copyPos({},e),a=this.collideAll(e,n,t.skip);let h=!0;if(a.length){const o=e._moving&&!t.nested;let r=o?this.directionCollideCoverage(e,t,a):a[0];if(o&&r&&e.grid?.opts?.subGridDynamic&&!e.grid._isTemp){const s=i.areaIntercept(t.rect,r._rect),o=i.area(t.rect),n=i.area(r._rect);s/(o.8&&(r.grid.makeSubGrid(r.el,void 0,e),r=void 0)}r?h=!this._fixCollisions(e,n,r,t):(h=!1,s&&delete t.pack)}return h&&!i.samePos(e,n)&&(e._dirty=!0,i.copyPos(e,n)),t.pack&&this._packNodes()._notify(),!i.samePos(e,r)}getRow(){return this.nodes.reduce(((e,t)=>Math.max(e,t.y+t.h)),0)}beginUpdate(e){return e._updating||(e._updating=!0,delete e._skipDown,this.batchMode||this.saveInitial()),this}endUpdate(){const e=this.nodes.find((e=>e._updating));return e&&(delete e._updating,delete e._skipDown),this}save(e=!0,t){const s=this._layouts?.length,o=s&&this.column!==s-1?this._layouts[s-1]:null,n=[];return this.sortNodes(),this.nodes.forEach((s=>{const r=o?.find((e=>e._id===s._id)),a={...s,...r||{}};i.removeInternalForSave(a,!e),t&&t(s,a),n.push(a)})),n}layoutsNodesChange(e){return!this._layouts||this._inColumnResize||this._layouts.forEach(((t,i)=>{if(!t||i===this.column)return this;if(i{if(!e._orig)return;const i=t.find((t=>t._id===e._id));i&&(i.y>=0&&e.y!==e._orig.y&&(i.y+=e.y-e._orig.y),e.x!==e._orig.x&&(i.x=Math.round(e.x*s)),e.w!==e._orig.w&&(i.w=Math.round(e.w*s)))}))}})),this}columnChanged(e,t,s="moveScale"){if(!this.nodes.length||!t||e===t)return this;const o="compact"===s||"list"===s;o&&this.sortNodes(1),te&&this._layouts){const i=this._layouts[t]||[],s=this._layouts.length-1;!i.length&&e!==s&&this._layouts[s]?.length&&(e=s,this._layouts[s].forEach((e=>{const t=r.find((t=>t._id===e._id));t&&(o||e.autoPosition||(t.x=e.x??t.x,t.y=e.y??t.y),t.w=e.w??t.w,null!=e.x&&void 0!==e.y||(t.autoPosition=!0))}))),i.forEach((e=>{const t=r.findIndex((t=>t._id===e._id));if(-1!==t){const i=r[t];if(o)return void(i.w=e.w);(e.autoPosition||isNaN(e.x)||isNaN(e.y))&&this.findEmptyPosition(e,n),e.autoPosition||(i.x=e.x??i.x,i.y=e.y??i.y,i.w=e.w??i.w,n.push(i)),r.splice(t,1)}}))}if(o)this.compact(s,!1);else{if(r.length)if("function"==typeof s)s(t,e,n,r);else{const i=o||"none"===s?1:t/e,a="move"===s||"moveScale"===s,h="scale"===s||"moveScale"===s;r.forEach((s=>{s.x=1===t?0:a?Math.round(s.x*i):Math.min(s.x,t-1),s.w=1===t||1===e?1:h?Math.round(s.w*i)||1:Math.min(s.w,t),n.push(s)})),r=[]}n=i.sort(n,-1),this._inColumnResize=!0,this.nodes=[],n.forEach((e=>{this.addNode(e,!1),delete e._orig}))}return this.nodes.forEach((e=>delete e._orig)),this.batchUpdate(!1,!o),delete this._inColumnResize,this}cacheLayout(e,t,i=!1){const o=[];return e.forEach(((e,t)=>{if(void 0===e._id){const t=e.id?this.nodes.find((t=>t.id===e.id)):void 0;e._id=t?._id??s._idSeq++}o[t]={x:e.x,y:e.y,w:e.w,_id:e._id}})),this._layouts=i?[]:this._layouts||[],this._layouts[t]=o,this}cacheOneLayout(e,t){e._id=e._id??s._idSeq++;const i={x:e.x,y:e.y,w:e.w,_id:e._id};(e.autoPosition||void 0===e.x)&&(delete i.x,delete i.y,e.autoPosition&&(i.autoPosition=!0)),this._layouts=this._layouts||[],this._layouts[t]=this._layouts[t]||[];const o=this.findCacheLayout(e,t);return-1===o?this._layouts[t].push(i):this._layouts[t][o]=i,this}findCacheLayout(e,t){return this._layouts?.[t]?.findIndex((t=>t._id===e._id))??-1}removeNodeFromLayoutCache(e){if(this._layouts)for(let t=0;t0||navigator.msMaxTouchPoints>0);class a{}function h(e,t){e.touches.length>1||(e.cancelable&&e.preventDefault(),i.simulateMouseEvent(e.changedTouches[0],t))}function l(e,t){e.cancelable&&e.preventDefault(),i.simulateMouseEvent(e,t)}function d(e){a.touchHandled||(a.touchHandled=!0,h(e,"mousedown"))}function c(e){a.touchHandled&&h(e,"mousemove")}function g(e){if(!a.touchHandled)return;a.pointerLeaveTimeout&&(window.clearTimeout(a.pointerLeaveTimeout),delete a.pointerLeaveTimeout);const t=!!n.dragElement;h(e,"mouseup"),t||h(e,"click"),a.touchHandled=!1}function u(e){"mouse"!==e.pointerType&&e.target.releasePointerCapture(e.pointerId)}function p(e){n.dragElement&&"mouse"!==e.pointerType&&l(e,"mouseenter")}function m(e){n.dragElement&&"mouse"!==e.pointerType&&(a.pointerLeaveTimeout=window.setTimeout((()=>{delete a.pointerLeaveTimeout,l(e,"mouseleave")}),10))}class f{constructor(e,t,i){this.host=e,this.dir=t,this.option=i,this.moving=!1,this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._keyEvent=this._keyEvent.bind(this),this._init()}_init(){const e=this.el=document.createElement("div");return e.classList.add("ui-resizable-handle"),e.classList.add(`${f.prefix}${this.dir}`),e.style.zIndex="100",e.style.userSelect="none",this.host.appendChild(this.el),this.el.addEventListener("mousedown",this._mouseDown),r&&(this.el.addEventListener("touchstart",d),this.el.addEventListener("pointerdown",u)),this}destroy(){return this.moving&&this._mouseUp(this.mouseDownEvent),this.el.removeEventListener("mousedown",this._mouseDown),r&&(this.el.removeEventListener("touchstart",d),this.el.removeEventListener("pointerdown",u)),this.host.removeChild(this.el),delete this.el,delete this.host,this}_mouseDown(e){this.mouseDownEvent=e,document.addEventListener("mousemove",this._mouseMove,{capture:!0,passive:!0}),document.addEventListener("mouseup",this._mouseUp,!0),r&&(this.el.addEventListener("touchmove",c),this.el.addEventListener("touchend",g)),e.stopPropagation(),e.preventDefault()}_mouseMove(e){const t=this.mouseDownEvent;this.moving?this._triggerEvent("move",e):Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>2&&(this.moving=!0,this._triggerEvent("start",this.mouseDownEvent),this._triggerEvent("move",e),document.addEventListener("keydown",this._keyEvent)),e.stopPropagation()}_mouseUp(e){this.moving&&(this._triggerEvent("stop",e),document.removeEventListener("keydown",this._keyEvent)),document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),r&&(this.el.removeEventListener("touchmove",c),this.el.removeEventListener("touchend",g)),delete this.moving,delete this.mouseDownEvent,e.stopPropagation(),e.preventDefault()}_keyEvent(e){"Escape"===e.key&&(this.host.gridstackNode?.grid?.engine.restoreInitial(),this._mouseUp(this.mouseDownEvent))}_triggerEvent(e,t){return this.option[e]&&this.option[e](t),this}}f.prefix="ui-resizable-";class v{constructor(){this._eventRegister={}}get disabled(){return this._disabled}on(e,t){this._eventRegister[e]=t}off(e){delete this._eventRegister[e]}enable(){this._disabled=!1}disable(){this._disabled=!0}destroy(){delete this._eventRegister}triggerEvent(e,t){if(!this.disabled&&this._eventRegister&&this._eventRegister[e])return this._eventRegister[e](t)}}class _ extends v{constructor(e,t={}){super(),this.el=e,this.option=t,this.rectScale={x:1,y:1},this._ui=()=>{const e=this.el.parentElement.getBoundingClientRect(),t={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},i=this.temporalRect||t;return{position:{left:(i.left-e.left)*this.rectScale.x,top:(i.top-e.top)*this.rectScale.y},size:{width:i.width*this.rectScale.x,height:i.height*this.rectScale.y}}},this._mouseOver=this._mouseOver.bind(this),this._mouseOut=this._mouseOut.bind(this),this.enable(),this._setupAutoHide(this.option.autoHide),this._setupHandlers()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){super.enable(),this.el.classList.remove("ui-resizable-disabled"),this._setupAutoHide(this.option.autoHide)}disable(){super.disable(),this.el.classList.add("ui-resizable-disabled"),this._setupAutoHide(!1)}destroy(){this._removeHandlers(),this._setupAutoHide(!1),delete this.el,super.destroy()}updateOption(e){const t=e.handles&&e.handles!==this.option.handles,i=e.autoHide&&e.autoHide!==this.option.autoHide;return Object.keys(e).forEach((t=>this.option[t]=e[t])),t&&(this._removeHandlers(),this._setupHandlers()),i&&this._setupAutoHide(this.option.autoHide),this}_setupAutoHide(e){return e?(this.el.classList.add("ui-resizable-autohide"),this.el.addEventListener("mouseover",this._mouseOver),this.el.addEventListener("mouseout",this._mouseOut)):(this.el.classList.remove("ui-resizable-autohide"),this.el.removeEventListener("mouseover",this._mouseOver),this.el.removeEventListener("mouseout",this._mouseOut),n.overResizeElement===this&&delete n.overResizeElement),this}_mouseOver(e){n.overResizeElement||n.dragElement||(n.overResizeElement=this,this.el.classList.remove("ui-resizable-autohide"))}_mouseOut(e){n.overResizeElement===this&&(delete n.overResizeElement,this.el.classList.add("ui-resizable-autohide"))}_setupHandlers(){return this.handlers=this.option.handles.split(",").map((e=>e.trim())).map((e=>new f(this.el,e,{start:e=>{this._resizeStart(e)},stop:e=>{this._resizeStop(e)},move:t=>{this._resizing(t,e)}}))),this}_resizeStart(e){this.sizeToContent=i.shouldSizeToContent(this.el.gridstackNode,!0),this.originalRect=this.el.getBoundingClientRect(),this.scrollEl=i.getScrollElement(this.el),this.scrollY=this.scrollEl.scrollTop,this.scrolled=0,this.startEvent=e,this._setupHelper(),this._applyChange();const t=i.initEvent(e,{type:"resizestart",target:this.el});return this.option.start&&this.option.start(t,this._ui()),this.el.classList.add("ui-resizable-resizing"),this.triggerEvent("resizestart",t),this}_resizing(e,t){this.scrolled=this.scrollEl.scrollTop-this.scrollY,this.temporalRect=this._getChange(e,t),this._applyChange();const s=i.initEvent(e,{type:"resize",target:this.el});return this.option.resize&&this.option.resize(s,this._ui()),this.triggerEvent("resize",s),this}_resizeStop(e){const t=i.initEvent(e,{type:"resizestop",target:this.el});return this._cleanHelper(),this.option.stop&&this.option.stop(t),this.el.classList.remove("ui-resizable-resizing"),this.triggerEvent("resizestop",t),delete this.startEvent,delete this.originalRect,delete this.temporalRect,delete this.scrollY,delete this.scrolled,this}_setupHelper(){this.elOriginStyleVal=_._originStyleProp.map((e=>this.el.style[e])),this.parentOriginStylePosition=this.el.parentElement.style.position;const e=this.el.parentElement,t=i.getValuesFromTransformedElement(e);return this.rectScale={x:t.xScale,y:t.yScale},getComputedStyle(this.el.parentElement).position.match(/static/)&&(this.el.parentElement.style.position="relative"),this.el.style.position="absolute",this.el.style.opacity="0.8",this}_cleanHelper(){return _._originStyleProp.forEach(((e,t)=>{this.el.style[e]=this.elOriginStyleVal[t]||null})),this.el.parentElement.style.position=this.parentOriginStylePosition||null,this}_getChange(e,t){const i=this.startEvent,s={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},o=e.clientX-i.clientX,n=this.sizeToContent?0:e.clientY-i.clientY;let r,a;t.indexOf("e")>-1?s.width+=o:t.indexOf("w")>-1&&(s.width-=o,s.left+=o,r=!0),t.indexOf("s")>-1?s.height+=n:t.indexOf("n")>-1&&(s.height-=n,s.top+=n,a=!0);const h=this._constrainSize(s.width,s.height,r,a);return Math.round(s.width)!==Math.round(h.width)&&(t.indexOf("w")>-1&&(s.left+=s.width-h.width),s.width=h.width),Math.round(s.height)!==Math.round(h.height)&&(t.indexOf("n")>-1&&(s.top+=s.height-h.height),s.height=h.height),s}_constrainSize(e,t,i,s){const o=this.option,n=(i?o.maxWidthMoveLeft:o.maxWidth)||Number.MAX_SAFE_INTEGER,r=o.minWidth/this.rectScale.x||e,a=(s?o.maxHeightMoveUp:o.maxHeight)||Number.MAX_SAFE_INTEGER,h=o.minHeight/this.rectScale.y||t;return{width:Math.min(n,Math.max(r,e)),height:Math.min(a,Math.max(h,t))}}_applyChange(){let e={left:0,top:0,width:0,height:0};if("absolute"===this.el.style.position){const t=this.el.parentElement,{left:i,top:s}=t.getBoundingClientRect();e={left:i,top:s,width:0,height:0}}return this.temporalRect?(Object.keys(this.temporalRect).forEach((t=>{const i=this.temporalRect[t],s="width"===t||"left"===t?this.rectScale.x:"height"===t||"top"===t?this.rectScale.y:1;this.el.style[t]=(i-e[t])*s+"px"})),this):this}_removeHandlers(){return this.handlers.forEach((e=>e.destroy())),delete this.handlers,this}}_._originStyleProp=["width","height","position","left","top","opacity","zIndex"];class y extends v{constructor(e,t={}){super(),this.el=e,this.option=t,this.dragTransform={xScale:1,yScale:1,xOffset:0,yOffset:0};const i=t?.handle?.substring(1),s=e.gridstackNode;this.dragEls=!i||e.classList.contains(i)?[e]:s?.subGrid?[e.querySelector(t.handle)||e]:Array.from(e.querySelectorAll(t.handle)),0===this.dragEls.length&&(this.dragEls=[e]),this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._keyEvent=this._keyEvent.bind(this),this.enable()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){!1!==this.disabled&&(super.enable(),this.dragEls.forEach((e=>{e.addEventListener("mousedown",this._mouseDown),r&&(e.addEventListener("touchstart",d),e.addEventListener("pointerdown",u))})),this.el.classList.remove("ui-draggable-disabled"))}disable(e=!1){!0!==this.disabled&&(super.disable(),this.dragEls.forEach((e=>{e.removeEventListener("mousedown",this._mouseDown),r&&(e.removeEventListener("touchstart",d),e.removeEventListener("pointerdown",u))})),e||this.el.classList.add("ui-draggable-disabled"))}destroy(){this.dragTimeout&&window.clearTimeout(this.dragTimeout),delete this.dragTimeout,this.mouseDownEvent&&this._mouseUp(this.mouseDownEvent),this.disable(!0),delete this.el,delete this.helper,delete this.option,super.destroy()}updateOption(e){return Object.keys(e).forEach((t=>this.option[t]=e[t])),this}_mouseDown(e){if(!n.mouseHandled)return 0!==e.button||!this.dragEls.find((t=>t===e.target))&&e.target.closest('input,textarea,button,select,option,[contenteditable="true"],.ui-resizable-handle')||this.option.cancel&&e.target.closest(this.option.cancel)||(this.mouseDownEvent=e,delete this.dragging,delete n.dragElement,delete n.dropElement,document.addEventListener("mousemove",this._mouseMove,{capture:!0,passive:!0}),document.addEventListener("mouseup",this._mouseUp,!0),r&&(e.currentTarget.addEventListener("touchmove",c),e.currentTarget.addEventListener("touchend",g)),e.preventDefault(),document.activeElement&&document.activeElement.blur(),n.mouseHandled=!0),!0}_callDrag(e){if(!this.dragging)return;const t=i.initEvent(e,{target:this.el,type:"drag"});this.option.drag&&this.option.drag(t,this.ui()),this.triggerEvent("drag",t)}_mouseMove(e){const t=this.mouseDownEvent;if(this.lastDrag=e,this.dragging)if(this._dragFollow(e),n.pauseDrag){const t=Number.isInteger(n.pauseDrag)?n.pauseDrag:100;this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout((()=>this._callDrag(e)),t)}else this._callDrag(e);else if(Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>3){this.dragging=!0,n.dragElement=this;const t=this.el.gridstackNode?.grid;t?n.dropElement=t.el.ddElement.ddDroppable:delete n.dropElement,this.helper=this._createHelper(),this._setupHelperContainmentStyle(),this.dragTransform=i.getValuesFromTransformedElement(this.helperContainment),this.dragOffset=this._getDragOffset(e,this.el,this.helperContainment),this._setupHelperStyle(e);const s=i.initEvent(e,{target:this.el,type:"dragstart"});this.option.start&&this.option.start(s,this.ui()),this.triggerEvent("dragstart",s),document.addEventListener("keydown",this._keyEvent)}return!0}_mouseUp(e){if(document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),r&&e.currentTarget&&(e.currentTarget.removeEventListener("touchmove",c,!0),e.currentTarget.removeEventListener("touchend",g,!0)),this.dragging){delete this.dragging,delete this.el.gridstackNode?._origRotate,document.removeEventListener("keydown",this._keyEvent),n.dropElement?.el===this.el.parentElement&&delete n.dropElement,this.helperContainment.style.position=this.parentOriginStylePosition||null,this.helper!==this.el&&this.helper.remove(),this._removeHelperStyle();const t=i.initEvent(e,{target:this.el,type:"dragstop"});this.option.stop&&this.option.stop(t),this.triggerEvent("dragstop",t),n.dropElement&&n.dropElement.drop(e)}delete this.helper,delete this.mouseDownEvent,delete n.dragElement,delete n.dropElement,delete n.mouseHandled,e.preventDefault()}_keyEvent(e){const t=this.el.gridstackNode,s=t?.grid||n.dropElement?.el?.gridstack;if("Escape"===e.key)t&&t._origRotate&&(t._orig=t._origRotate,delete t._origRotate),s?.cancelDrag(),this._mouseUp(this.mouseDownEvent);else if(t&&s&&("r"===e.key||"R"===e.key)){if(!i.canBeRotated(t))return;t._origRotate=t._origRotate||{...t._orig},delete t._moving,s.setAnimation(!1).rotate(t.el,{top:-this.dragOffset.offsetTop,left:-this.dragOffset.offsetLeft}).setAnimation(),t._moving=!0,this.dragOffset=this._getDragOffset(this.lastDrag,t.el,this.helperContainment),this.helper.style.width=this.dragOffset.width+"px",this.helper.style.height=this.dragOffset.height+"px",i.swap(t._orig,"w","h"),delete t._rect,this._mouseMove(this.lastDrag)}}_createHelper(){let e=this.el;return"function"==typeof this.option.helper?e=this.option.helper(this.el):"clone"===this.option.helper&&(e=i.cloneNode(this.el)),e.parentElement||i.appendTo(e,"parent"===this.option.appendTo?this.el.parentElement:this.option.appendTo),this.dragElementOriginStyle=y.originStyleProp.map((e=>this.el.style[e])),e}_setupHelperStyle(e){this.helper.classList.add("ui-draggable-dragging");const t=this.helper.style;return t.pointerEvents="none",t.width=this.dragOffset.width+"px",t.height=this.dragOffset.height+"px",t.willChange="left, top",t.position="fixed",this._dragFollow(e),t.transition="none",setTimeout((()=>{this.helper&&(t.transition=null)}),0),this}_removeHelperStyle(){this.helper.classList.remove("ui-draggable-dragging");const e=this.helper?.gridstackNode;if(!e?._isAboutToRemove&&this.dragElementOriginStyle){const e=this.helper,t=this.dragElementOriginStyle.transition||null;e.style.transition=this.dragElementOriginStyle.transition="none",y.originStyleProp.forEach((t=>e.style[t]=this.dragElementOriginStyle[t]||null)),setTimeout((()=>e.style.transition=t),50)}return delete this.dragElementOriginStyle,this}_dragFollow(e){const t=this.helper.style,i=this.dragOffset;t.left=(e.clientX+i.offsetLeft-0)*this.dragTransform.xScale+"px",t.top=(e.clientY+i.offsetTop-0)*this.dragTransform.yScale+"px"}_setupHelperContainmentStyle(){return this.helperContainment=this.helper.parentElement,"fixed"!==this.helper.style.position&&(this.parentOriginStylePosition=this.helperContainment.style.position,getComputedStyle(this.helperContainment).position.match(/static/)&&(this.helperContainment.style.position="relative")),this}_getDragOffset(e,t,i){let s=0,o=0;i&&(s=this.dragTransform.xOffset,o=this.dragTransform.yOffset);const n=t.getBoundingClientRect();return{left:n.left,top:n.top,offsetLeft:-e.clientX+n.left-s,offsetTop:-e.clientY+n.top-o,width:n.width*this.dragTransform.xScale,height:n.height*this.dragTransform.yScale}}ui(){const e=this.el.parentElement.getBoundingClientRect(),t=this.helper.getBoundingClientRect();return{position:{top:(t.top-e.top)*this.dragTransform.yScale,left:(t.left-e.left)*this.dragTransform.xScale}}}}y.originStyleProp=["width","height","transform","transform-origin","transition","pointerEvents","position","left","top","minWidth","willChange"];class b extends v{constructor(e,t={}){super(),this.el=e,this.option=t,this._mouseEnter=this._mouseEnter.bind(this),this._mouseLeave=this._mouseLeave.bind(this),this.enable(),this._setupAccept()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){!1!==this.disabled&&(super.enable(),this.el.classList.add("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),this.el.addEventListener("mouseenter",this._mouseEnter),this.el.addEventListener("mouseleave",this._mouseLeave),r&&(this.el.addEventListener("pointerenter",p),this.el.addEventListener("pointerleave",m)))}disable(e=!1){!0!==this.disabled&&(super.disable(),this.el.classList.remove("ui-droppable"),e||this.el.classList.add("ui-droppable-disabled"),this.el.removeEventListener("mouseenter",this._mouseEnter),this.el.removeEventListener("mouseleave",this._mouseLeave),r&&(this.el.removeEventListener("pointerenter",p),this.el.removeEventListener("pointerleave",m)))}destroy(){this.disable(!0),this.el.classList.remove("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),super.destroy()}updateOption(e){return Object.keys(e).forEach((t=>this.option[t]=e[t])),this._setupAccept(),this}_mouseEnter(e){if(!n.dragElement)return;if(!this._canDrop(n.dragElement.el))return;e.preventDefault(),e.stopPropagation(),n.dropElement&&n.dropElement!==this&&n.dropElement._mouseLeave(e,!0),n.dropElement=this;const t=i.initEvent(e,{target:this.el,type:"dropover"});this.option.over&&this.option.over(t,this._ui(n.dragElement)),this.triggerEvent("dropover",t),this.el.classList.add("ui-droppable-over")}_mouseLeave(e,t=!1){if(!n.dragElement||n.dropElement!==this)return;e.preventDefault(),e.stopPropagation();const s=i.initEvent(e,{target:this.el,type:"dropout"});if(this.option.out&&this.option.out(s,this._ui(n.dragElement)),this.triggerEvent("dropout",s),n.dropElement===this&&(delete n.dropElement,!t)){let t,i=this.el.parentElement;for(;!t&&i;)t=i.ddElement?.ddDroppable,i=i.parentElement;t&&t._mouseEnter(e)}}drop(e){e.preventDefault();const t=i.initEvent(e,{target:this.el,type:"drop"});this.option.drop&&this.option.drop(t,this._ui(n.dragElement)),this.triggerEvent("drop",t)}_canDrop(e){return e&&(!this.accept||this.accept(e))}_setupAccept(){return this.option.accept?("string"==typeof this.option.accept?this.accept=e=>e.classList.contains(this.option.accept)||e.matches(this.option.accept):this.accept=this.option.accept,this):this}_ui(e){return{draggable:e.el,...e.ui()}}}class w{static init(e){return e.ddElement||(e.ddElement=new w(e)),e.ddElement}constructor(e){this.el=e}on(e,t){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.on(e,t):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.on(e,t):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.on(e,t),this}off(e){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.off(e):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.off(e):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.off(e),this}setupDraggable(e){return this.ddDraggable?this.ddDraggable.updateOption(e):this.ddDraggable=new y(this.el,e),this}cleanDraggable(){return this.ddDraggable&&(this.ddDraggable.destroy(),delete this.ddDraggable),this}setupResizable(e){return this.ddResizable?this.ddResizable.updateOption(e):this.ddResizable=new _(this.el,e),this}cleanResizable(){return this.ddResizable&&(this.ddResizable.destroy(),delete this.ddResizable),this}setupDroppable(e){return this.ddDroppable?this.ddDroppable.updateOption(e):this.ddDroppable=new b(this.el,e),this}cleanDroppable(){return this.ddDroppable&&(this.ddDroppable.destroy(),delete this.ddDroppable),this}}const E=new class{resizable(e,t,i,s){return this._getDDElements(e,t).forEach((e=>{if("disable"===t||"enable"===t)e.ddResizable&&e.ddResizable[t]();else if("destroy"===t)e.ddResizable&&e.cleanResizable();else if("option"===t)e.setupResizable({[i]:s});else{const i=e.el.gridstackNode.grid;let s=e.el.getAttribute("gs-resize-handles")||i.opts.resizable.handles||"e,s,se";"all"===s&&(s="n,e,s,w,se,sw,ne,nw");const o=!i.opts.alwaysShowResizeHandle;e.setupResizable({...i.opts.resizable,handles:s,autoHide:o,start:t.start,stop:t.stop,resize:t.resize})}})),this}draggable(e,t,i,s){return this._getDDElements(e,t).forEach((e=>{if("disable"===t||"enable"===t)e.ddDraggable&&e.ddDraggable[t]();else if("destroy"===t)e.ddDraggable&&e.cleanDraggable();else if("option"===t)e.setupDraggable({[i]:s});else{const i=e.el.gridstackNode.grid;e.setupDraggable({...i.opts.draggable,start:t.start,stop:t.stop,drag:t.drag})}})),this}dragIn(e,t){return this._getDDElements(e).forEach((e=>e.setupDraggable(t))),this}droppable(e,t,i,s){return"function"!=typeof t.accept||t._accept||(t._accept=t.accept,t.accept=e=>t._accept(e)),this._getDDElements(e,t).forEach((e=>{"disable"===t||"enable"===t?e.ddDroppable&&e.ddDroppable[t]():"destroy"===t?e.ddDroppable&&e.cleanDroppable():"option"===t?e.setupDroppable({[i]:s}):e.setupDroppable(t)})),this}isDroppable(e){return!(!e?.ddElement?.ddDroppable||e.ddElement.ddDroppable.disabled)}isDraggable(e){return!(!e?.ddElement?.ddDraggable||e.ddElement.ddDraggable.disabled)}isResizable(e){return!(!e?.ddElement?.ddResizable||e.ddElement.ddResizable.disabled)}on(e,t,i){return this._getDDElements(e).forEach((e=>e.on(t,(e=>{i(e,n.dragElement?n.dragElement.el:e.target,n.dragElement?n.dragElement.helper:null)})))),this}off(e,t){return this._getDDElements(e).forEach((e=>e.off(t))),this}_getDDElements(e,t){const s=e.gridstack||"destroy"!==t&&"disable"!==t,o=i.getElements(e);return o.length?o.map((e=>e.ddElement||(s?w.init(e):null))).filter((e=>e)):[]}};class x{static init(e={},t=".grid-stack"){if("undefined"==typeof document)return null;const s=x.getGridElement(t);return s?(s.gridstack||(s.gridstack=new x(s,i.cloneDeep(e))),s.gridstack):("string"==typeof t?console.error('GridStack.initAll() no grid was found with selector "'+t+'" - element missing or wrong selector ?\nNote: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.'):console.error("GridStack.init() no grid element was passed."),null)}static initAll(e={},t=".grid-stack"){const s=[];return"undefined"==typeof document||(x.getGridElements(t).forEach((t=>{t.gridstack||(t.gridstack=new x(t,i.cloneDeep(e))),s.push(t.gridstack)})),0===s.length&&console.error('GridStack.initAll() no grid was found with selector "'+t+'" - element missing or wrong selector ?\nNote: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.')),s}static addGrid(e,t={}){if(!e)return null;let s=e;if(s.gridstack){const e=s.gridstack;return t&&(e.opts={...e.opts,...t}),void 0!==t.children&&e.load(t.children),e}return e.classList.contains("grid-stack")&&!x.addRemoveCB||(s=x.addRemoveCB?x.addRemoveCB(e,t,!0,!0):i.createDiv(["grid-stack",t.class],e)),x.init(t,s)}static registerEngine(e){x.engineClass=e}get placeholder(){if(!this._placeholder){this._placeholder=i.createDiv([this.opts.placeholderClass,o.itemClass,this.opts.itemClass]);const e=i.createDiv(["placeholder-content"],this._placeholder);this.opts.placeholderText&&(e.textContent=this.opts.placeholderText)}return this._placeholder}constructor(e,t={}){this.el=e,this.opts=t,this.animationDelay=310,this._gsEventHandler={},this._extraDragRow=0,this.dragTransform={xScale:1,yScale:1,xOffset:0,yOffset:0},e.gridstack=this,this.opts=t=t||{},e.classList.contains("grid-stack")||this.el.classList.add("grid-stack"),t.row&&(t.minRow=t.maxRow=t.row,delete t.row);const a=i.toNumber(e.getAttribute("gs-row"));"auto"===t.column&&delete t.column,void 0!==t.alwaysShowResizeHandle&&(t._alwaysShowResizeHandle=t.alwaysShowResizeHandle);const h=t.columnOpts;if(h){const e=h.breakpoints;h.columnWidth||e?.length?(h.columnMax=h.columnMax||12,e?.length>1&&e.sort(((e,t)=>(t.w||0)-(e.w||0)))):delete t.columnOpts}const l={...i.cloneDeep(o),column:i.toNumber(e.getAttribute("gs-column"))||o.column,minRow:a||i.toNumber(e.getAttribute("gs-min-row"))||o.minRow,maxRow:a||i.toNumber(e.getAttribute("gs-max-row"))||o.maxRow,staticGrid:i.toBool(e.getAttribute("gs-static"))||o.staticGrid,sizeToContent:i.toBool(e.getAttribute("gs-size-to-content"))||void 0,draggable:{handle:(t.handleClass?"."+t.handleClass:t.handle?t.handle:"")||o.draggable.handle},removableOptions:{accept:t.itemClass||o.removableOptions.accept,decline:o.removableOptions.decline}};e.getAttribute("gs-animate")&&(l.animate=i.toBool(e.getAttribute("gs-animate"))),t=i.defaults(t,l),this._initMargin(),this.checkDynamicColumn(),this._updateColumnVar(t),"auto"===t.rtl&&(t.rtl="rtl"===e.style.direction),t.rtl&&this.el.classList.add("grid-stack-rtl");const d=this.el.closest("."+o.itemClass),c=d?.gridstackNode;if(c&&(c.subGrid=this,this.parentGridNode=c,this.el.classList.add("grid-stack-nested"),c.el.classList.add("grid-stack-sub-grid")),this._isAutoCellHeight="auto"===t.cellHeight,this._isAutoCellHeight||"initial"===t.cellHeight)this.cellHeight(void 0);else{"number"==typeof t.cellHeight&&t.cellHeightUnit&&t.cellHeightUnit!==o.cellHeightUnit&&(t.cellHeight=t.cellHeight+t.cellHeightUnit,delete t.cellHeightUnit);const e=t.cellHeight;delete t.cellHeight,this.cellHeight(e)}"mobile"===t.alwaysShowResizeHandle&&(t.alwaysShowResizeHandle=r),this._setStaticClass();const g=t.engineClass||x.engineClass||s;if(this.engine=new g({column:this.getColumn(),float:t.float,maxRow:t.maxRow,onChange:e=>{e.forEach((e=>{const t=e.el;t&&(e._removeDOM?(t&&t.remove(),delete e._removeDOM):this._writePosAttr(t,e))})),this._updateContainerHeight()}}),t.auto&&(this.batchUpdate(),this.engine._loading=!0,this.getGridItems().forEach((e=>this._prepareElement(e))),delete this.engine._loading,this.batchUpdate(!1)),t.children){const e=t.children;delete t.children,e.length&&this.load(e)}this.setAnimation(),t.subGridDynamic&&!n.pauseDrag&&(n.pauseDrag=!0),void 0!==t.draggable?.pause&&(n.pauseDrag=t.draggable.pause),this._setupRemoveDrop(),this._setupAcceptWidget(),this._updateResizeEvent()}_updateColumnVar(e=this.opts){this.el.classList.add("gs-"+e.column),"number"==typeof e.column&&this.el.style.setProperty("--gs-column-width",100/e.column+"%")}addWidget(e){if("string"==typeof e)return void console.error("V11: GridStack.addWidget() does not support string anymore. see #2736");if(e.ELEMENT_NODE)return console.error("V11: GridStack.addWidget() does not support HTMLElement anymore. use makeWidget()"),this.makeWidget(e);let t,s=e;if(s.grid=this,t=s?.el?s.el:x.addRemoveCB?x.addRemoveCB(this.el,e,!0,!1):this.createWidgetDivs(s),!t)return;if(s=t.gridstackNode,s&&t.parentElement===this.el&&this.engine.nodes.find((e=>e._id===s._id)))return t;const o=this._readAttr(t);return i.defaults(e,o),this.engine.prepareNode(e),this.el.appendChild(t),this.makeWidget(t,e),t}createWidgetDivs(e){const t=i.createDiv(["grid-stack-item",this.opts.itemClass]),s=i.createDiv(["grid-stack-item-content"],t);return i.lazyLoad(e)?e.visibleObservable||(e.visibleObservable=new IntersectionObserver((([t])=>{t.isIntersecting&&(e.visibleObservable?.disconnect(),delete e.visibleObservable,x.renderCB(s,e),e.grid?.prepareDragDrop(e.el))})),window.setTimeout((()=>e.visibleObservable?.observe(t)))):x.renderCB(s,e),t}makeSubGrid(e,t,s,o=!0){let n,r=e.gridstackNode;if(r||(r=this.makeWidget(e).gridstackNode),r.subGrid?.el)return r.subGrid;let a,h=this;for(;h&&!n;)n=h.opts?.subGridOpts,h=h.parentGridNode?.grid;t=i.cloneDeep({...this.opts,id:void 0,children:void 0,column:"auto",columnOpts:void 0,layout:"list",subGridOpts:void 0,...n||{},...t||r.subGridOpts||{}}),r.subGridOpts=t,"auto"===t.column&&(a=!0,t.column=Math.max(r.w||1,s?.w||1),delete t.columnOpts);let l,d,c=r.el.querySelector(".grid-stack-item-content");if(o&&(this._removeDD(r.el),d={...r,x:0,y:0},i.removeInternalForSave(d),delete d.subGridOpts,r.content&&(d.content=r.content,delete r.content),x.addRemoveCB?l=x.addRemoveCB(this.el,d,!0,!1):(l=i.createDiv(["grid-stack-item"]),l.appendChild(c),c=i.createDiv(["grid-stack-item-content"],r.el)),this.prepareDragDrop(r.el)),s){const e=a?t.column:r.w,i=r.h+s.h,o=r.el.style;o.transition="none",this.update(r.el,{w:e,h:i}),setTimeout((()=>o.transition=null))}const g=r.subGrid=x.addGrid(c,t);return s?._moving&&(g._isTemp=!0),a&&(g._autoColumn=!0),o&&g.makeWidget(l,d),s&&(s._moving?window.setTimeout((()=>i.simulateMouseEvent(s._event,"mouseenter",g.el)),0):g.makeWidget(r.el,r)),this.resizeToContentCheck(!1,r),g}removeAsSubGrid(e){const t=this.parentGridNode?.grid;t&&(t.batchUpdate(),t.removeWidget(this.parentGridNode.el,!0,!0),this.engine.nodes.forEach((e=>{e.x+=this.parentGridNode.x,e.y+=this.parentGridNode.y,t.makeWidget(e.el,e)})),t.batchUpdate(!1),this.parentGridNode&&delete this.parentGridNode.subGrid,delete this.parentGridNode,e&&window.setTimeout((()=>i.simulateMouseEvent(e._event,"mouseenter",t.el)),0))}save(e=!0,t=!1,s=x.saveCB){const n=this.engine.save(e,s);if(n.forEach((i=>{if(e&&i.el&&!i.subGrid&&!s){const e=i.el.querySelector(".grid-stack-item-content");i.content=e?.innerHTML,i.content||delete i.content}else if(e||s||delete i.content,i.subGrid?.el){const o=i.subGrid.save(e,t,s);i.subGridOpts=t?o:{children:o},delete i.subGrid}delete i.el})),t){const e=i.cloneDeep(this.opts);e.marginBottom===e.marginTop&&e.marginRight===e.marginLeft&&e.marginTop===e.marginRight&&(e.margin=e.marginTop,delete e.marginTop,delete e.marginRight,delete e.marginBottom,delete e.marginLeft),e.rtl===("rtl"===this.el.style.direction)&&(e.rtl="auto"),this._isAutoCellHeight&&(e.cellHeight="auto"),this._autoColumn&&(e.column="auto");const t=e._alwaysShowResizeHandle;return delete e._alwaysShowResizeHandle,void 0!==t?e.alwaysShowResizeHandle=t:delete e.alwaysShowResizeHandle,i.removeInternalAndSame(e,o),e.children=n,e}return n}load(e,t=x.addRemoveCB||!0){e=i.cloneDeep(e);const s=this.getColumn();e.forEach((e=>{e.w=e.w||1,e.h=e.h||1})),e=i.sort(e),this.engine.skipCacheUpdate=this._ignoreLayoutsNodeChange=!0;let o=0;e.forEach((e=>{o=Math.max(o,(e.x||0)+e.w)})),o>this.engine.defaultColumn&&(this.engine.defaultColumn=o),o>s&&(0===this.engine.nodes.length&&this.responseLayout?(this.engine.nodes=e,this.engine.columnChanged(o,s,this.responseLayout),e=this.engine.nodes,this.engine.nodes=[],delete this.responseLayout):this.engine.cacheLayout(e,o,!0));const n=x.addRemoveCB;"function"==typeof t&&(x.addRemoveCB=t);const r=[];this.batchUpdate();const a=!this.engine.nodes.length,h=a&&this.opts.animate;h&&this.setAnimation(!1),!a&&t&&[...this.engine.nodes].forEach((t=>{t.id&&(i.find(e,t.id)||(x.addRemoveCB&&x.addRemoveCB(this.el,t,!1,!1),r.push(t),this.removeWidget(t.el,!0,!1)))})),this.engine._loading=!0;const l=[];return this.engine.nodes=this.engine.nodes.filter((t=>!i.find(e,t.id)||(l.push(t),!1))),e.forEach((e=>{const s=i.find(l,e.id);if(s){if(i.shouldSizeToContent(s)&&(e.h=s.h),this.engine.nodeBoundFix(e),(e.autoPosition||void 0===e.x||void 0===e.y)&&(e.w=e.w||s.w,e.h=e.h||s.h,this.engine.findEmptyPosition(e)),this.engine.nodes.push(s),i.samePos(s,e)&&this.engine.nodes.length>1&&(this.moveNode(s,{...e,forceCollide:!0}),i.copyPos(e,s)),this.update(s.el,e),e.subGridOpts?.children){const t=s.el.querySelector(".grid-stack");t&&t.gridstack&&t.gridstack.load(e.subGridOpts.children)}}else t&&this.addWidget(e)})),delete this.engine._loading,this.engine.removedNodes=r,this.batchUpdate(!1),delete this._ignoreLayoutsNodeChange,delete this.engine.skipCacheUpdate,n?x.addRemoveCB=n:delete x.addRemoveCB,h&&this.setAnimation(!0,!0),this}batchUpdate(e=!0){return this.engine.batchUpdate(e),e||(this._updateContainerHeight(),this._triggerRemoveEvent(),this._triggerAddEvent(),this._triggerChangeEvent()),this}getCellHeight(e=!1){if(this.opts.cellHeight&&"auto"!==this.opts.cellHeight&&(!e||!this.opts.cellHeightUnit||"px"===this.opts.cellHeightUnit))return this.opts.cellHeight;if("rem"===this.opts.cellHeightUnit)return this.opts.cellHeight*parseFloat(getComputedStyle(document.documentElement).fontSize);if("em"===this.opts.cellHeightUnit)return this.opts.cellHeight*parseFloat(getComputedStyle(this.el).fontSize);if("cm"===this.opts.cellHeightUnit)return this.opts.cellHeight*(96/2.54);if("mm"===this.opts.cellHeightUnit)return this.opts.cellHeight*(96/2.54)/10;const t=this.el.querySelector("."+this.opts.itemClass);if(t){const e=i.toNumber(t.getAttribute("gs-h"))||1;return Math.round(t.offsetHeight/e)}const s=parseInt(this.el.getAttribute("gs-current-row"));return s?Math.round(this.el.getBoundingClientRect().height/s):this.opts.cellHeight}cellHeight(e){if(void 0!==e&&this._isAutoCellHeight!==("auto"===e)&&(this._isAutoCellHeight="auto"===e,this._updateResizeEvent()),"initial"!==e&&"auto"!==e||(e=void 0),void 0===e){const t=-this.opts.marginRight-this.opts.marginLeft+this.opts.marginTop+this.opts.marginBottom;e=this.cellWidth()+t}const t=i.parseHeight(e);return this.opts.cellHeightUnit===t.unit&&this.opts.cellHeight===t.h||(this.opts.cellHeightUnit=t.unit,this.opts.cellHeight=t.h,this.el.style.setProperty("--gs-cell-height",`${this.opts.cellHeight}${this.opts.cellHeightUnit}`),this._updateContainerHeight(),this.resizeToContentCheck()),this}cellWidth(){return this._widthOrContainer()/this.getColumn()}_widthOrContainer(e=!1){return e&&this.opts.columnOpts?.breakpointForWindow?window.innerWidth:this.el.clientWidth||this.el.parentElement.clientWidth||window.innerWidth}checkDynamicColumn(){const e=this.opts.columnOpts;if(!e||!e.columnWidth&&!e.breakpoints?.length)return!1;const t=this.getColumn();let i=t;const s=this._widthOrContainer(!0);if(e.columnWidth)i=Math.min(Math.round(s/e.columnWidth)||1,e.columnMax);else{i=e.columnMax;let o=0;for(;oe.c===i));return this.column(i,t?.layout||e.layout),!0}return!1}compact(e="compact",t=!0){return this.engine.compact(e,t),this._triggerChangeEvent(),this}column(e,t="moveScale"){if(!e||e<1||this.opts.column===e)return this;const i=this.getColumn();return this.opts.column=e,this.engine?(this.engine.column=e,this.el.classList.remove("gs-"+i),this._updateColumnVar(),this.engine.columnChanged(i,e,t),this._isAutoCellHeight&&this.cellHeight(),this.resizeToContentCheck(!0),this._ignoreLayoutsNodeChange=!0,this._triggerChangeEvent(),delete this._ignoreLayoutsNodeChange,this):(this.responseLayout=t,this)}getColumn(){return this.opts.column}getGridItems(){return Array.from(this.el.children).filter((e=>e.matches("."+this.opts.itemClass)&&!e.matches("."+this.opts.placeholderClass)))}isIgnoreChangeCB(){return this._ignoreLayoutsNodeChange}destroy(e=!0){if(this.el)return this.offAll(),this._updateResizeEvent(!0),this.setStatic(!0,!1),this.setAnimation(!1),e?this.el.parentNode.removeChild(this.el):(this.removeAll(e),this.el.removeAttribute("gs-current-row")),this.parentGridNode&&delete this.parentGridNode.subGrid,delete this.parentGridNode,delete this.opts,delete this._placeholder?.gridstackNode,delete this._placeholder,delete this.engine,delete this.el.gridstack,delete this.el,this}float(e){return this.opts.float!==e&&(this.opts.float=this.engine.float=e,this._triggerChangeEvent()),this}getFloat(){return this.engine.float}getCellFromPixel(e,t=!1){const i=this.el.getBoundingClientRect();let s;s=t?{top:i.top+document.documentElement.scrollTop,left:i.left}:{top:this.el.offsetTop,left:this.el.offsetLeft};const o=e.left-s.left,n=e.top-s.top,r=i.width/this.getColumn(),a=i.height/parseInt(this.el.getAttribute("gs-current-row"));return{x:Math.floor(o/r),y:Math.floor(n/a)}}getRow(){return Math.max(this.engine.getRow(),this.opts.minRow||0)}isAreaEmpty(e,t,i,s){return this.engine.isAreaEmpty(e,t,i,s)}makeWidget(e,t){const i=x.getElement(e);if(!i||i.gridstackNode)return i;i.parentElement||this.el.appendChild(i),this._prepareElement(i,!0,t);const s=i.gridstackNode;let o;return this._updateContainerHeight(),s.subGridOpts&&this.makeSubGrid(i,s.subGridOpts,void 0,!1),1!==this.opts.column||this._ignoreLayoutsNodeChange||(o=this._ignoreLayoutsNodeChange=!0),this._triggerAddEvent(),this._triggerChangeEvent(),o&&delete this._ignoreLayoutsNodeChange,i}on(e,t){if(-1!==e.indexOf(" "))return e.split(" ").forEach((e=>this.on(e,t))),this;if("change"===e||"added"===e||"removed"===e||"enable"===e||"disable"===e){const i="enable"===e||"disable"===e;this._gsEventHandler[e]=i?e=>t(e):e=>{e.detail&&t(e,e.detail)},this.el.addEventListener(e,this._gsEventHandler[e])}else"drag"===e||"dragstart"===e||"dragstop"===e||"resizestart"===e||"resize"===e||"resizestop"===e||"dropped"===e||"resizecontent"===e?this._gsEventHandler[e]=t:console.error("GridStack.on("+e+") event not supported");return this}off(e){return-1!==e.indexOf(" ")?(e.split(" ").forEach((e=>this.off(e))),this):("change"!==e&&"added"!==e&&"removed"!==e&&"enable"!==e&&"disable"!==e||this._gsEventHandler[e]&&this.el.removeEventListener(e,this._gsEventHandler[e]),delete this._gsEventHandler[e],this)}offAll(){return Object.keys(this._gsEventHandler).forEach((e=>this.off(e))),this}removeWidget(e,t=!0,i=!0){return e?(x.getElements(e).forEach((e=>{if(e.parentElement&&e.parentElement!==this.el)return;let s=e.gridstackNode;s||(s=this.engine.nodes.find((t=>e===t.el))),s&&(t&&x.addRemoveCB&&x.addRemoveCB(this.el,s,!1,!1),delete e.gridstackNode,this._removeDD(e),this.engine.removeNode(s,t,i),t&&e.parentElement&&e.remove())})),i&&(this._triggerRemoveEvent(),this._triggerChangeEvent()),this):(console.error("Error: GridStack.removeWidget(undefined) called"),this)}removeAll(e=!0,t=!0){return this.engine.nodes.forEach((t=>{e&&x.addRemoveCB&&x.addRemoveCB(this.el,t,!1,!1),delete t.el.gridstackNode,this.opts.staticGrid||this._removeDD(t.el)})),this.engine.removeAll(e,t),t&&this._triggerRemoveEvent(),this}setAnimation(e=this.opts.animate,t){return t?setTimeout((()=>{this.opts&&this.setAnimation(e)})):e?this.el.classList.add("grid-stack-animate"):this.el.classList.remove("grid-stack-animate"),this.opts.animate=e,this}hasAnimationCSS(){return this.el.classList.contains("grid-stack-animate")}setStatic(e,t=!0,i=!0){return!!this.opts.staticGrid===e||(e?this.opts.staticGrid=!0:delete this.opts.staticGrid,this._setupRemoveDrop(),this._setupAcceptWidget(),this.engine.nodes.forEach((s=>{this.prepareDragDrop(s.el),s.subGrid&&i&&s.subGrid.setStatic(e,t,i)})),t&&this._setStaticClass()),this}updateOptions(e){const t=this.opts;return e===t||(void 0!==e.acceptWidgets&&(t.acceptWidgets=e.acceptWidgets,this._setupAcceptWidget()),void 0!==e.animate&&this.setAnimation(e.animate),e.cellHeight&&this.cellHeight(e.cellHeight),void 0!==e.class&&e.class!==t.class&&(t.class&&this.el.classList.remove(t.class),e.class&&this.el.classList.add(e.class)),e.columnOpts?(this.opts.columnOpts=e.columnOpts,this.checkDynamicColumn()):null===e.columnOpts&&this.opts.columnOpts?(delete this.opts.columnOpts,this._updateResizeEvent()):"number"==typeof e.column&&this.column(e.column),void 0!==e.margin&&this.margin(e.margin),void 0!==e.staticGrid&&this.setStatic(e.staticGrid),void 0===e.disableDrag||e.staticGrid||this.enableMove(!e.disableDrag),void 0===e.disableResize||e.staticGrid||this.enableResize(!e.disableResize),void 0!==e.float&&this.float(e.float),void 0!==e.row?t.minRow=t.maxRow=t.row=e.row:(void 0!==e.minRow&&(t.minRow=e.minRow),void 0!==e.maxRow&&(t.maxRow=e.maxRow)),e.children?.length&&this.load(e.children)),this}update(e,t){return x.getElements(e).forEach((e=>{const s=e?.gridstackNode;if(!s)return;const o={...i.copyPos({},s),...i.cloneDeep(t)};this.engine.nodeBoundFix(o),delete o.autoPosition;const n=["x","y","w","h"];let r;if(n.some((e=>void 0!==o[e]&&o[e]!==s[e]))&&(r={},n.forEach((e=>{r[e]=void 0!==o[e]?o[e]:s[e],delete o[e]}))),!r&&(o.minW||o.minH||o.maxW||o.maxH)&&(r={}),void 0!==o.content){const t=e.querySelector(".grid-stack-item-content");t&&t.textContent!==o.content&&(s.content=o.content,x.renderCB(t,o),s.subGrid?.el&&(t.appendChild(s.subGrid.el),s.subGrid._updateContainerHeight())),delete o.content}let a=!1,h=!1;for(const e in o)"_"!==e[0]&&s[e]!==o[e]&&(s[e]=o[e],a=!0,h=h||!this.opts.staticGrid&&("noResize"===e||"noMove"===e||"locked"===e));if(i.sanitizeMinMax(s),r){const e=void 0!==r.w&&r.w!==s.w;this.moveNode(s,r),e&&s.subGrid?s.subGrid.onResize(this.hasAnimationCSS()?s.w:void 0):this.resizeToContentCheck(e,s),delete s._orig}(r||a)&&this._writeAttr(e,s),h&&this.prepareDragDrop(s.el)})),this}moveNode(e,t){const i=e._updating;i||this.engine.cleanNodes().beginUpdate(e),this.engine.moveNode(e,t),this._updateContainerHeight(),i||(this._triggerChangeEvent(),this.engine.endUpdate())}resizeToContent(e){if(!e)return;if(e.classList.remove("size-to-content-max"),!e.clientHeight)return;const t=e.gridstackNode;if(!t)return;const i=t.grid;if(!i||e.parentElement!==i.el)return;const s=i.getCellHeight(!0);if(!s)return;let o,n=t.h?t.h*s:e.clientHeight;if(t.resizeToContentParent&&(o=e.querySelector(t.resizeToContentParent)),o||(o=e.querySelector(x.resizeToContentParent)),!o)return;const r=e.clientHeight-o.clientHeight,a=t.h?t.h*s-r:o.clientHeight;let h;if(t.subGrid){h=t.subGrid.getRow()*t.subGrid.getCellHeight(!0);const i=t.subGrid.el.getBoundingClientRect(),s=e.getBoundingClientRect();h+=i.top-s.top}else{if(t.subGridOpts?.children?.length)return;{const e=o.firstElementChild;if(!e)return void console.error(`Error: GridStack.resizeToContent() widget id:${t.id} '${x.resizeToContentParent}'.firstElementChild is null, make sure to have a div like container. Skipping sizing.`);h=e.getBoundingClientRect().height||a}}if(a===h)return;n+=h-a;let l=Math.ceil(n/s);const d=Number.isInteger(t.sizeToContent)?t.sizeToContent:0;d&&l>d&&(l=d,e.classList.add("size-to-content-max")),t.minH&<.maxH&&(l=t.maxH),l!==t.h&&(i._ignoreLayoutsNodeChange=!0,i.moveNode(t,{h:l}),delete i._ignoreLayoutsNodeChange)}resizeToContentCBCheck(e){x.resizeToContentCB?x.resizeToContentCB(e):this.resizeToContent(e)}rotate(e,t){return x.getElements(e).forEach((e=>{const s=e.gridstackNode;if(!i.canBeRotated(s))return;const o={w:s.h,h:s.w,minH:s.minW,minW:s.minH,maxH:s.maxW,maxW:s.maxH};if(t){const e=t.left>0?Math.floor(t.left/this.cellWidth()):0,i=t.top>0?Math.floor(t.top/this.opts.cellHeight):0;o.x=s.x+e-(s.h-(i+1)),o.y=s.y+i-e}Object.keys(o).forEach((e=>{void 0===o[e]&&delete o[e]}));const n=s._orig;this.update(e,o),s._orig=n})),this}margin(e){if(!("string"==typeof e&&e.split(" ").length>1)){const t=i.parseHeight(e);if(this.opts.marginUnit===t.unit&&this.opts.margin===t.h)return}return this.opts.margin=e,this.opts.marginTop=this.opts.marginBottom=this.opts.marginLeft=this.opts.marginRight=void 0,this._initMargin(),this}getMargin(){return this.opts.margin}willItFit(e){if(arguments.length>1){console.warn("gridstack.ts: `willItFit(x,y,w,h,autoPosition)` is deprecated. Use `willItFit({x, y,...})`. It will be removed soon");const e=arguments;let t=0,i={x:e[t++],y:e[t++],w:e[t++],h:e[t++],autoPosition:e[t++]};return this.willItFit(i)}return this.engine.willItFit(e)}_triggerChangeEvent(){if(this.engine.batchMode)return this;const e=this.engine.getDirtyNodes(!0);return e&&e.length&&(this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(e),this._triggerEvent("change",e)),this.engine.saveInitial(),this}_triggerAddEvent(){if(this.engine.batchMode)return this;if(this.engine.addedNodes?.length){this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(this.engine.addedNodes),this.engine.addedNodes.forEach((e=>{delete e._dirty}));const e=[...this.engine.addedNodes];this.engine.addedNodes=[],this._triggerEvent("added",e)}return this}_triggerRemoveEvent(){if(this.engine.batchMode)return this;if(this.engine.removedNodes?.length){const e=[...this.engine.removedNodes];this.engine.removedNodes=[],this._triggerEvent("removed",e)}return this}_triggerEvent(e,t){const i=t?new CustomEvent(e,{bubbles:!1,detail:t}):new Event(e);let s=this;for(;s.parentGridNode;)s=s.parentGridNode.grid;return s.el.dispatchEvent(i),this}_updateContainerHeight(){if(!this.engine||this.engine.batchMode)return this;const e=this.parentGridNode;let t=this.getRow()+this._extraDragRow;const s=this.opts.cellHeight,o=this.opts.cellHeightUnit;if(!s)return this;if(!e){const e=i.parseHeight(getComputedStyle(this.el).minHeight);if(e.h>0&&e.unit===o){const i=Math.floor(e.h/s);t1?`calc(${t.w} * var(--gs-column-width))`:null,e.style.height=t.h>1?`calc(${t.h} * var(--gs-cell-height))`:null),t.x>0?e.setAttribute("gs-x",String(t.x)):e.removeAttribute("gs-x"),t.y>0?e.setAttribute("gs-y",String(t.y)):e.removeAttribute("gs-y"),t.w>1?e.setAttribute("gs-w",String(t.w)):e.removeAttribute("gs-w"),t.h>1?e.setAttribute("gs-h",String(t.h)):e.removeAttribute("gs-h"),this}_writeAttr(e,t){if(!t)return this;this._writePosAttr(e,t);const i={noResize:"gs-no-resize",noMove:"gs-no-move",locked:"gs-locked",id:"gs-id",sizeToContent:"gs-size-to-content"};for(const s in i)t[s]?e.setAttribute(i[s],String(t[s])):e.removeAttribute(i[s]);return this}_readAttr(e,t=!0){const s={};s.x=i.toNumber(e.getAttribute("gs-x")),s.y=i.toNumber(e.getAttribute("gs-y")),s.w=i.toNumber(e.getAttribute("gs-w")),s.h=i.toNumber(e.getAttribute("gs-h")),s.autoPosition=i.toBool(e.getAttribute("gs-auto-position")),s.noResize=i.toBool(e.getAttribute("gs-no-resize")),s.noMove=i.toBool(e.getAttribute("gs-no-move")),s.locked=i.toBool(e.getAttribute("gs-locked"));const o=e.getAttribute("gs-size-to-content");o&&(s.sizeToContent="true"===o||"false"===o?i.toBool(o):parseInt(o,10)),s.id=e.getAttribute("gs-id"),s.maxW=i.toNumber(e.getAttribute("gs-max-w")),s.minW=i.toNumber(e.getAttribute("gs-min-w")),s.maxH=i.toNumber(e.getAttribute("gs-max-h")),s.minH=i.toNumber(e.getAttribute("gs-min-h")),t&&(1===s.w&&e.removeAttribute("gs-w"),1===s.h&&e.removeAttribute("gs-h"),s.maxW&&e.removeAttribute("gs-max-w"),s.minW&&e.removeAttribute("gs-min-w"),s.maxH&&e.removeAttribute("gs-max-h"),s.minH&&e.removeAttribute("gs-min-h"));for(const e in s){if(!s.hasOwnProperty(e))return;s[e]||0===s[e]||"gs-size-to-content"===e||delete s[e]}return s}_setStaticClass(){const e=["grid-stack-static"];return this.opts.staticGrid?(this.el.classList.add(...e),this.el.setAttribute("gs-static","true")):(this.el.classList.remove(...e),this.el.removeAttribute("gs-static")),this}onResize(e=this.el?.clientWidth){if(!e)return;if(this.prevWidth===e)return;this.prevWidth=e,this.batchUpdate();let t=!1;return this._autoColumn&&this.parentGridNode?this.opts.column!==this.parentGridNode.w&&(this.column(this.parentGridNode.w,this.opts.layout||"list"),t=!0):t=this.checkDynamicColumn(),this._isAutoCellHeight&&this.cellHeight(),this.engine.nodes.forEach((e=>{e.subGrid&&e.subGrid.onResize()})),this._skipInitialResize||this.resizeToContentCheck(t),delete this._skipInitialResize,this.batchUpdate(!1),this}resizeToContentCheck(e=!1,t=void 0){if(this.engine){if(e&&this.hasAnimationCSS())return setTimeout((()=>this.resizeToContentCheck(!1,t)),this.animationDelay);if(t)i.shouldSizeToContent(t)&&this.resizeToContentCBCheck(t.el);else if(this.engine.nodes.some((e=>i.shouldSizeToContent(e)))){const e=[...this.engine.nodes];this.batchUpdate(),e.forEach((e=>{i.shouldSizeToContent(e)&&this.resizeToContentCBCheck(e.el)})),this._ignoreLayoutsNodeChange=!0,this.batchUpdate(!1),this._ignoreLayoutsNodeChange=!1}this._gsEventHandler.resizecontent&&this._gsEventHandler.resizecontent(null,t?[t]:this.engine.nodes)}}_updateResizeEvent(e=!1){const t=!this.parentGridNode&&(this._isAutoCellHeight||this.opts.sizeToContent||this.opts.columnOpts||this.engine.nodes.find((e=>e.sizeToContent)));return e||!t||this.resizeObserver?!e&&t||!this.resizeObserver||(this.resizeObserver.disconnect(),delete this.resizeObserver,delete this._sizeThrottle):(this._sizeThrottle=i.throttle((()=>this.onResize()),this.opts.cellHeightThrottle),this.resizeObserver=new ResizeObserver((()=>this._sizeThrottle())),this.resizeObserver.observe(this.el),this._skipInitialResize=!0),this}static getElement(e=".grid-stack-item"){return i.getElement(e)}static getElements(e=".grid-stack-item"){return i.getElements(e)}static getGridElement(e){return x.getElement(e)}static getGridElements(e){return i.getElements(e)}_initMargin(){let e,t=0,s=[];"string"==typeof this.opts.margin&&(s=this.opts.margin.split(" ")),2===s.length?(this.opts.marginTop=this.opts.marginBottom=s[0],this.opts.marginLeft=this.opts.marginRight=s[1]):4===s.length?(this.opts.marginTop=s[0],this.opts.marginRight=s[1],this.opts.marginBottom=s[2],this.opts.marginLeft=s[3]):(e=i.parseHeight(this.opts.margin),this.opts.marginUnit=e.unit,t=this.opts.margin=e.h),["marginTop","marginRight","marginBottom","marginLeft"].forEach((s=>{void 0===this.opts[s]?this.opts[s]=t:(e=i.parseHeight(this.opts[s]),this.opts[s]=e.h,delete this.opts.margin)})),this.opts.marginUnit=e.unit,this.opts.marginTop===this.opts.marginBottom&&this.opts.marginLeft===this.opts.marginRight&&this.opts.marginTop===this.opts.marginRight&&(this.opts.margin=this.opts.marginTop);const o=this.el.style;return o.setProperty("--gs-item-margin-top",`${this.opts.marginTop}${this.opts.marginUnit}`),o.setProperty("--gs-item-margin-bottom",`${this.opts.marginBottom}${this.opts.marginUnit}`),o.setProperty("--gs-item-margin-right",`${this.opts.marginRight}${this.opts.marginUnit}`),o.setProperty("--gs-item-margin-left",`${this.opts.marginLeft}${this.opts.marginUnit}`),this}static getDD(){return E}static setupDragIn(e,t,s,o=document){void 0!==t?.pause&&(n.pauseDrag=t.pause),t={appendTo:"body",helper:"clone",...t||{}},("string"==typeof e?i.getElements(e,o):e).forEach(((e,i)=>{E.isDraggable(e)||E.dragIn(e,t),s?.[i]&&(e.gridstackNode=s[i])}))}movable(e,t){return this.opts.staticGrid||x.getElements(e).forEach((e=>{const i=e.gridstackNode;i&&(t?delete i.noMove:i.noMove=!0,this.prepareDragDrop(i.el))})),this}resizable(e,t){return this.opts.staticGrid||x.getElements(e).forEach((e=>{const i=e.gridstackNode;i&&(t?delete i.noResize:i.noResize=!0,this.prepareDragDrop(i.el))})),this}disable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!1,e),this.enableResize(!1,e),this._triggerEvent("disable"),this}enable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!0,e),this.enableResize(!0,e),this._triggerEvent("enable"),this}enableMove(e,t=!0){return this.opts.staticGrid||(e?delete this.opts.disableDrag:this.opts.disableDrag=!0,this.engine.nodes.forEach((i=>{this.prepareDragDrop(i.el),i.subGrid&&t&&i.subGrid.enableMove(e,t)}))),this}enableResize(e,t=!0){return this.opts.staticGrid||(e?delete this.opts.disableResize:this.opts.disableResize=!0,this.engine.nodes.forEach((i=>{this.prepareDragDrop(i.el),i.subGrid&&t&&i.subGrid.enableResize(e,t)}))),this}cancelDrag(){const e=this._placeholder?.gridstackNode;e&&(e._isExternal?(e._isAboutToRemove=!0,this.engine.removeNode(e)):e._isAboutToRemove&&x._itemRemoving(e.el,!1),this.engine.restoreInitial())}_removeDD(e){return E.draggable(e,"destroy").resizable(e,"destroy"),e.gridstackNode&&delete e.gridstackNode._initDD,delete e.ddElement,this}_setupAcceptWidget(){if(this.opts.staticGrid||!this.opts.acceptWidgets&&!this.opts.removable)return E.droppable(this.el,"destroy"),this;let e,t;const s=(s,o,n)=>{const r=(n=n||o).gridstackNode;if(!r)return;if(!r.grid?.el){n.style.transform=`scale(${1/this.dragTransform.xScale},${1/this.dragTransform.yScale})`;const e=n.getBoundingClientRect();n.style.left=e.x+(this.dragTransform.xScale-1)*(s.clientX-e.x)/this.dragTransform.xScale+"px",n.style.top=e.y+(this.dragTransform.yScale-1)*(s.clientY-e.y)/this.dragTransform.yScale+"px",n.style.transformOrigin="0px 0px"}let{top:a,left:h}=n.getBoundingClientRect();const l=this.el.getBoundingClientRect();h-=l.left,a-=l.top;const d={position:{top:a*this.dragTransform.xScale,left:h*this.dragTransform.yScale}};if(r._temporaryRemoved){if(r.x=Math.max(0,Math.round(h/t)),r.y=Math.max(0,Math.round(a/e)),delete r.autoPosition,this.engine.nodeBoundFix(r),!this.engine.willItFit(r)){if(r.autoPosition=!0,!this.engine.willItFit(r))return void E.off(o,"drag");r._willFitPos&&(i.copyPos(r,r._willFitPos),delete r._willFitPos)}this._onStartMoving(n,s,d,r,t,e)}else this._dragOrResize(n,s,d,r,t,e)};return E.droppable(this.el,{accept:e=>{const t=e.gridstackNode||this._readAttr(e,!1);if(t?.grid===this)return!0;if(!this.opts.acceptWidgets)return!1;let i=!0;if("function"==typeof this.opts.acceptWidgets)i=this.opts.acceptWidgets(e);else{const t=!0===this.opts.acceptWidgets?".grid-stack-item":this.opts.acceptWidgets;i=e.matches(t)}if(i&&t&&this.opts.maxRow){const e={w:t.w,h:t.h,minW:t.minW,minH:t.minH};i=this.engine.willItFit(e)}return i}}).on(this.el,"dropover",((i,o,n)=>{let r=n?.gridstackNode||o.gridstackNode;if(r?.grid===this&&!r._temporaryRemoved)return!1;if(r?._sidebarOrig&&(r.w=r._sidebarOrig.w,r.h=r._sidebarOrig.h),r?.grid&&r.grid!==this&&!r._temporaryRemoved&&r.grid._leave(o,n),n=n||o,t=this.cellWidth(),e=this.getCellHeight(!0),!r){const e=n.getAttribute("data-gs-widget")||n.getAttribute("gridstacknode");if(e){try{r=JSON.parse(e)}catch(t){console.error("Gridstack dropover: Bad JSON format: ",e)}n.removeAttribute("data-gs-widget"),n.removeAttribute("gridstacknode")}r||(r=this._readAttr(n)),r._sidebarOrig={w:r.w,h:r.h}}r.grid||(r.el||(r={...r}),r._isExternal=!0,n.gridstackNode=r);const a=r.w||Math.round(n.offsetWidth/t)||1,h=r.h||Math.round(n.offsetHeight/e)||1;return r.grid&&r.grid!==this?(o._gridstackNodeOrig||(o._gridstackNodeOrig=r),o.gridstackNode=r={...r,w:a,h,grid:this},delete r.x,delete r.y,this.engine.cleanupNode(r).nodeBoundFix(r),r._initDD=r._isExternal=r._temporaryRemoved=!0):(r.w=a,r.h=h,r._temporaryRemoved=!0),x._itemRemoving(r.el,!1),E.on(o,"drag",s),s(i,o,n),!1})).on(this.el,"dropout",((e,t,i)=>{const s=i?.gridstackNode||t.gridstackNode;return!!s&&(s.grid&&s.grid!==this||(this._leave(t,i),this._isTemp&&this.removeAsSubGrid(s)),!1)})).on(this.el,"drop",((e,t,s)=>{const o=s?.gridstackNode||t.gridstackNode;if(o?.grid===this&&!o._isExternal)return!1;const n=!!this.placeholder.parentElement,r=t!==s;this.placeholder.remove(),delete this.placeholder.gridstackNode,n&&this.opts.animate&&(this.setAnimation(!1),this.setAnimation(!0,!0));const a=t._gridstackNodeOrig;if(delete t._gridstackNodeOrig,n&&a?.grid&&a.grid!==this){const e=a.grid;e.engine.removeNodeFromLayoutCache(a),e.engine.removedNodes.push(a),e._triggerRemoveEvent()._triggerChangeEvent(),e.parentGridNode&&!e.engine.nodes.length&&e.opts.subGridDynamic&&e.removeAsSubGrid()}if(!o)return!1;if(n&&(this.engine.cleanupNode(o),o.grid=this),delete o.grid?._isTemp,E.off(t,"drag"),s!==t?(s.remove(),t=s):t.remove(),this._removeDD(t),!n)return!1;const h=o.subGrid?.el?.gridstack;return i.copyPos(o,this._readAttr(this.placeholder)),i.removePositioningStyles(t),r&&(o.content||o.subGridOpts||x.addRemoveCB)?(delete o.el,t=this.addWidget(o)):(this._prepareElement(t,!0,o),this.el.appendChild(t),this.resizeToContentCheck(!1,o),h&&(h.parentGridNode=o),this._updateContainerHeight()),this.engine.addedNodes.push(o),this._triggerAddEvent(),this._triggerChangeEvent(),this.engine.endUpdate(),this._gsEventHandler.dropped&&this._gsEventHandler.dropped({...e,type:"dropped"},a&&a.grid?a:void 0,o),!1})),this}static _itemRemoving(e,t){if(!e)return;const i=e?e.gridstackNode:void 0;i?.grid&&!e.classList.contains(i.grid.opts.removableOptions.decline)&&(t?i._isAboutToRemove=!0:delete i._isAboutToRemove,t?e.classList.add("grid-stack-item-removing"):e.classList.remove("grid-stack-item-removing"))}_setupRemoveDrop(){if("string"!=typeof this.opts.removable)return this;const e=document.querySelector(this.opts.removable);return e?(this.opts.staticGrid||E.isDroppable(e)||E.droppable(e,this.opts.removableOptions).on(e,"dropover",((e,t)=>x._itemRemoving(t,!0))).on(e,"dropout",((e,t)=>x._itemRemoving(t,!1))),this):this}prepareDragDrop(e,t=!1){const s=e?.gridstackNode;if(!s)return;const o=s.noMove||this.opts.disableDrag,n=s.noResize||this.opts.disableResize,r=this.opts.staticGrid||o&&n;if((t||r)&&(s._initDD&&(this._removeDD(e),delete s._initDD),r&&e.classList.add("ui-draggable-disabled","ui-resizable-disabled"),!t))return this;if(!s._initDD){let t,o;const n=(i,n)=>{this.triggerEvent(i,i.target),t=this.cellWidth(),o=this.getCellHeight(!0),this._onStartMoving(e,i,n,s,t,o)},r=(i,n)=>{this._dragOrResize(e,i,n,s,t,o)},a=t=>{this.placeholder.remove(),delete this.placeholder.gridstackNode,delete s._moving,delete s._resizing,delete s._event,delete s._lastTried;const o=s.w!==s._orig.w,n=t.target;if(n.gridstackNode&&n.gridstackNode.grid===this){if(s.el=n,s._isAboutToRemove){const i=e.gridstackNode.grid;i._gsEventHandler[t.type]&&i._gsEventHandler[t.type](t,n),i.engine.nodes.push(s),i.removeWidget(e,!0,!0)}else i.removePositioningStyles(n),s._temporaryRemoved?(i.copyPos(s,s._orig),this._writePosAttr(n,s),this.engine.addNode(s)):this._writePosAttr(n,s),this.triggerEvent(t,n);this._extraDragRow=0,this._updateContainerHeight(),this._triggerChangeEvent(),this.engine.endUpdate(),"resizestop"===t.type&&(Number.isInteger(s.sizeToContent)&&(s.sizeToContent=s.h),this.resizeToContentCheck(o,s))}};E.draggable(e,{start:n,stop:a,drag:r}).resizable(e,{start:n,stop:a,resize:r}),s._initDD=!0}return E.draggable(e,o?"disable":"enable").resizable(e,n?"disable":"enable"),this}_onStartMoving(e,t,s,o,n,r){if(this.engine.cleanNodes().beginUpdate(o),this._writePosAttr(this.placeholder,o),this.el.appendChild(this.placeholder),this.placeholder.gridstackNode=o,o.grid?.el)this.dragTransform=i.getValuesFromTransformedElement(e);else if(this.placeholder&&this.placeholder.closest(".grid-stack")){const e=this.placeholder.closest(".grid-stack");this.dragTransform=i.getValuesFromTransformedElement(e)}else this.dragTransform={xScale:1,xOffset:0,yScale:1,yOffset:0};if(o.el=this.placeholder,o._lastUiPosition=s.position,o._prevYPix=s.position.top,o._moving="dragstart"===t.type,o._resizing="resizestart"===t.type,delete o._lastTried,"dropover"===t.type&&o._temporaryRemoved&&(this.engine.addNode(o),o._moving=!0),this.engine.cacheRects(n,r,this.opts.marginTop,this.opts.marginRight,this.opts.marginBottom,this.opts.marginLeft),"resizestart"===t.type){const t=this.getColumn()-o.x,i=(this.opts.maxRow||Number.MAX_SAFE_INTEGER)-o.y;E.resizable(e,"option","minWidth",n*Math.min(o.minW||1,t)).resizable(e,"option","minHeight",r*Math.min(o.minH||1,i)).resizable(e,"option","maxWidth",n*Math.min(o.maxW||Number.MAX_SAFE_INTEGER,t)).resizable(e,"option","maxWidthMoveLeft",n*Math.min(o.maxW||Number.MAX_SAFE_INTEGER,o.x+o.w)).resizable(e,"option","maxHeight",r*Math.min(o.maxH||Number.MAX_SAFE_INTEGER,i)).resizable(e,"option","maxHeightMoveUp",r*Math.min(o.maxH||Number.MAX_SAFE_INTEGER,o.y+o.h))}}_dragOrResize(e,t,s,o,n,r){const a={...o._orig};let h,l=this.opts.marginLeft,d=this.opts.marginRight,c=this.opts.marginTop,g=this.opts.marginBottom;const u=Math.round(.1*r),p=Math.round(.1*n);if(l=Math.min(l,p),d=Math.min(d,p),c=Math.min(c,u),g=Math.min(g,u),"drag"===t.type){if(o._temporaryRemoved)return;const t=s.position.top-o._prevYPix;o._prevYPix=s.position.top,!1!==this.opts.draggable.scroll&&i.updateScrollPosition(e,s.position,t);const h=s.position.left+(s.position.left>o._lastUiPosition.left?-d:l),u=s.position.top+(s.position.top>o._lastUiPosition.top?-g:c);a.x=Math.round(h/n),a.y=Math.round(u/r);const p=this._extraDragRow;if(this.engine.collide(o,a)){const e=this.getRow();let t=Math.max(0,a.y+o.h-e);this.opts.maxRow&&e+t>this.opts.maxRow&&(t=Math.max(0,this.opts.maxRow-e)),this._extraDragRow=t}else this._extraDragRow=0;if(this._extraDragRow!==p&&this._updateContainerHeight(),o.x===a.x&&o.y===a.y)return}else if("resize"===t.type){if(a.x<0)return;if(i.updateScrollResize(t,e,r),a.w=Math.round((s.size.width-l)/n),a.h=Math.round((s.size.height-c)/r),o.w===a.w&&o.h===a.h)return;if(o._lastTried&&o._lastTried.w===a.w&&o._lastTried.h===a.h)return;const d=s.position.left+l,g=s.position.top+c;a.x=Math.round(d/n),a.y=Math.round(g/r),h=!0}o._event=t,o._lastTried=a;const m={x:s.position.left+l,y:s.position.top+c,w:(s.size?s.size.width:o.w*n)-l-d,h:(s.size?s.size.height:o.h*r)-c-g};if(this.engine.moveNodeCheck(o,{...a,cellWidth:n,cellHeight:r,rect:m,resizing:h})){o._lastUiPosition=s.position,this.engine.cacheRects(n,r,c,d,g,l),delete o._skipDown,h&&o.subGrid&&o.subGrid.onResize(),this._extraDragRow=0,this._updateContainerHeight();const e=t.target;o._sidebarOrig||this._writePosAttr(e,o),this.triggerEvent(t,e)}}triggerEvent(e,t){let i=this;for(;i.parentGridNode;)i=i.parentGridNode.grid;i._gsEventHandler[e.type]&&i._gsEventHandler[e.type](e,t)}_leave(e,t){const i=(t=t||e).gridstackNode;if(!i)return;if(t.style.transform=t.style.transformOrigin=null,E.off(e,"drag"),i._temporaryRemoved)return;i._temporaryRemoved=!0,this.engine.removeNode(i),i.el=i._isExternal&&t?t:e;const s=i._sidebarOrig;i._isExternal&&this.engine.cleanupNode(i),i._sidebarOrig=s,!0===this.opts.removable&&x._itemRemoving(e,!0),e._gridstackNodeOrig?(e.gridstackNode=e._gridstackNodeOrig,delete e._gridstackNodeOrig):i._isExternal&&this.engine.restoreInitial()}commit(){return this.batchUpdate(!1).prototype,this}}return x.renderCB=(e,t)=>{e&&t?.content&&(e.textContent=t.content)},x.resizeToContentParent=".grid-stack-item-content",x.Utils=i,x.Engine=s,x.GDRev="12.1.2",t.GridStack})()));
+//# sourceMappingURL=gridstack-all.js.map
\ No newline at end of file
diff --git a/node_modules/gridstack/dist/gridstack-all.js.map b/node_modules/gridstack/dist/gridstack-all.js.map
new file mode 100644
index 000000000..6a74b4b96
--- /dev/null
+++ b/node_modules/gridstack/dist/gridstack-all.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"gridstack-all.js","mappings":"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","sources":["webpack://GridStack/webpack/universalModuleDefinition","webpack://GridStack/webpack/bootstrap","webpack://GridStack/webpack/runtime/define property getters","webpack://GridStack/webpack/runtime/hasOwnProperty shorthand","webpack://GridStack/./src/utils.ts","webpack://GridStack/./src/gridstack-engine.ts","webpack://GridStack/./src/types.ts","webpack://GridStack/./src/dd-manager.ts","webpack://GridStack/./src/dd-touch.ts","webpack://GridStack/./src/dd-resizable-handle.ts","webpack://GridStack/./src/dd-base-impl.ts","webpack://GridStack/./src/dd-resizable.ts","webpack://GridStack/./src/dd-draggable.ts","webpack://GridStack/./src/dd-droppable.ts","webpack://GridStack/./src/dd-element.ts","webpack://GridStack/./src/gridstack.ts","webpack://GridStack/./src/dd-gridstack.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"GridStack\"] = factory();\n\telse\n\t\troot[\"GridStack\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\r\n * utils.ts 12.1.2\r\n * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridStackElement, GridStackNode, GridStackOptions, numberOrString, GridStackPosition, GridStackWidget } from './types';\r\n\r\nexport interface HeightData {\r\n h: number;\r\n unit: string;\r\n}\r\n\r\nexport interface DragTransform {\r\n xScale: number;\r\n yScale: number;\r\n xOffset: number;\r\n yOffset: number;\r\n}\r\n\r\n/** checks for obsolete method names */\r\n// eslint-disable-next-line\r\nexport function obsolete(self, f, oldName: string, newName: string, rev: string): (...args: any[]) => any {\r\n const wrapper = (...args) => {\r\n console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' +\r\n 'with `' + newName + '`. It will be **removed** in a future release');\r\n return f.apply(self, args);\r\n }\r\n wrapper.prototype = f.prototype;\r\n return wrapper;\r\n}\r\n\r\n/** checks for obsolete grid options (can be used for any fields, but msg is about options) */\r\nexport function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: string, rev: string): void {\r\n if (opts[oldName] !== undefined) {\r\n opts[newName] = opts[oldName];\r\n console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' +\r\n newName + '`. It will be **removed** in a future release');\r\n }\r\n}\r\n\r\n/** checks for obsolete grid options which are gone */\r\nexport function obsoleteOptsDel(opts: GridStackOptions, oldName: string, rev: string, info: string): void {\r\n if (opts[oldName] !== undefined) {\r\n console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info);\r\n }\r\n}\r\n\r\n/** checks for obsolete Jquery element attributes */\r\nexport function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string): void {\r\n const oldAttr = el.getAttribute(oldName);\r\n if (oldAttr !== null) {\r\n el.setAttribute(newName, oldAttr);\r\n console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' +\r\n newName + '`. It will be **removed** in a future release');\r\n }\r\n}\r\n\r\n/**\r\n * Utility methods\r\n */\r\nexport class Utils {\r\n\r\n /** convert a potential selector into actual list of html elements. optional root which defaults to document (for shadow dom) */\r\n static getElements(els: GridStackElement, root: HTMLElement | Document = document): HTMLElement[] {\r\n if (typeof els === 'string') {\r\n const doc = ('getElementById' in root) ? root as Document : undefined;\r\n\r\n // Note: very common for people use to id='1,2,3' which is only legal as HTML5 id, but not CSS selectors\r\n // so if we start with a number, assume it's an id and just return that one item...\r\n // see https://github.com/gridstack/gridstack.js/issues/2234#issuecomment-1523796562\r\n if (doc && !isNaN(+els[0])) { // start with digit\r\n const el = doc.getElementById(els);\r\n return el ? [el] : [];\r\n }\r\n\r\n let list = root.querySelectorAll(els);\r\n if (!list.length && els[0] !== '.' && els[0] !== '#') {\r\n list = root.querySelectorAll('.' + els);\r\n if (!list.length) { list = root.querySelectorAll('#' + els) }\r\n }\r\n return Array.from(list) as HTMLElement[];\r\n }\r\n return [els];\r\n }\r\n\r\n /** convert a potential selector into actual single element. optional root which defaults to document (for shadow dom) */\r\n static getElement(els: GridStackElement, root: HTMLElement | Document = document): HTMLElement {\r\n if (typeof els === 'string') {\r\n const doc = ('getElementById' in root) ? root as Document : undefined;\r\n if (!els.length) return null;\r\n if (doc && els[0] === '#') {\r\n return doc.getElementById(els.substring(1));\r\n }\r\n if (els[0] === '#' || els[0] === '.' || els[0] === '[') {\r\n return root.querySelector(els);\r\n }\r\n\r\n // if we start with a digit, assume it's an id (error calling querySelector('#1')) as class are not valid CSS\r\n if (doc && !isNaN(+els[0])) { // start with digit\r\n return doc.getElementById(els);\r\n }\r\n\r\n // finally try string, then id, then class\r\n let el = root.querySelector(els);\r\n if (doc && !el) { el = doc.getElementById(els) }\r\n if (!el) { el = root.querySelector('.' + els) }\r\n return el as HTMLElement;\r\n }\r\n return els;\r\n }\r\n\r\n /** true if widget (or grid) makes this item lazyLoad */\r\n static lazyLoad(n: GridStackNode): boolean {\r\n return n.lazyLoad || n.grid?.opts?.lazyLoad && n.lazyLoad !== false;\r\n }\r\n\r\n /** create a div with the given classes */\r\n static createDiv(classes: string[], parent?: HTMLElement): HTMLElement {\r\n const el = document.createElement('div');\r\n classes.forEach(c => {if (c) el.classList.add(c)});\r\n parent?.appendChild(el);\r\n return el;\r\n }\r\n\r\n /** true if we should resize to content. strict=true when only 'sizeToContent:true' and not a number which lets user adjust */\r\n static shouldSizeToContent(n: GridStackNode | undefined, strict = false): boolean {\r\n return n?.grid && (strict ?\r\n (n.sizeToContent === true || (n.grid.opts.sizeToContent === true && n.sizeToContent === undefined)) :\r\n (!!n.sizeToContent || (n.grid.opts.sizeToContent && n.sizeToContent !== false)));\r\n }\r\n\r\n /** returns true if a and b overlap */\r\n static isIntercepted(a: GridStackPosition, b: GridStackPosition): boolean {\r\n return !(a.y >= b.y + b.h || a.y + a.h <= b.y || a.x + a.w <= b.x || a.x >= b.x + b.w);\r\n }\r\n\r\n /** returns true if a and b touch edges or corners */\r\n static isTouching(a: GridStackPosition, b: GridStackPosition): boolean {\r\n return Utils.isIntercepted(a, {x: b.x-0.5, y: b.y-0.5, w: b.w+1, h: b.h+1})\r\n }\r\n\r\n /** returns the area a and b overlap */\r\n static areaIntercept(a: GridStackPosition, b: GridStackPosition): number {\r\n const x0 = (a.x > b.x) ? a.x : b.x;\r\n const x1 = (a.x+a.w < b.x+b.w) ? a.x+a.w : b.x+b.w;\r\n if (x1 <= x0) return 0; // no overlap\r\n const y0 = (a.y > b.y) ? a.y : b.y;\r\n const y1 = (a.y+a.h < b.y+b.h) ? a.y+a.h : b.y+b.h;\r\n if (y1 <= y0) return 0; // no overlap\r\n return (x1-x0) * (y1-y0);\r\n }\r\n\r\n /** returns the area */\r\n static area(a: GridStackPosition): number {\r\n return a.w * a.h;\r\n }\r\n\r\n /**\r\n * Sorts array of nodes\r\n * @param nodes array to sort\r\n * @param dir 1 for ascending, -1 for descending (optional)\r\n **/\r\n static sort(nodes: GridStackNode[], dir: 1 | -1 = 1): GridStackNode[] {\r\n const und = 10000;\r\n return nodes.sort((a, b) => {\r\n const diffY = dir * ((a.y ?? und) - (b.y ?? und));\r\n if (diffY === 0) return dir * ((a.x ?? und) - (b.x ?? und));\r\n return diffY;\r\n });\r\n }\r\n\r\n /** find an item by id */\r\n static find(nodes: GridStackNode[], id: string): GridStackNode | undefined {\r\n return id ? nodes.find(n => n.id === id) : undefined;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static toBool(v: unknown): boolean {\r\n if (typeof v === 'boolean') {\r\n return v;\r\n }\r\n if (typeof v === 'string') {\r\n v = v.toLowerCase();\r\n return !(v === '' || v === 'no' || v === 'false' || v === '0');\r\n }\r\n return Boolean(v);\r\n }\r\n\r\n static toNumber(value: null | string): number {\r\n return (value === null || value.length === 0) ? undefined : Number(value);\r\n }\r\n\r\n static parseHeight(val: numberOrString): HeightData {\r\n let h: number;\r\n let unit = 'px';\r\n if (typeof val === 'string') {\r\n if (val === 'auto' || val === '') h = 0;\r\n else {\r\n const match = val.match(/^(-[0-9]+\\.[0-9]+|[0-9]*\\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%|cm|mm)?$/);\r\n if (!match) {\r\n throw new Error(`Invalid height val = ${val}`);\r\n }\r\n unit = match[2] || 'px';\r\n h = parseFloat(match[1]);\r\n }\r\n } else {\r\n h = val;\r\n }\r\n return { h, unit };\r\n }\r\n\r\n /** copies unset fields in target to use the given default sources values */\r\n // eslint-disable-next-line\r\n static defaults(target, ...sources): {} {\r\n\r\n sources.forEach(source => {\r\n for (const key in source) {\r\n if (!source.hasOwnProperty(key)) return;\r\n if (target[key] === null || target[key] === undefined) {\r\n target[key] = source[key];\r\n } else if (typeof source[key] === 'object' && typeof target[key] === 'object') {\r\n // property is an object, recursively add it's field over... #1373\r\n this.defaults(target[key], source[key]);\r\n }\r\n }\r\n });\r\n\r\n return target;\r\n }\r\n\r\n /** given 2 objects return true if they have the same values. Checks for Object {} having same fields and values (just 1 level down) */\r\n static same(a: unknown, b: unknown): boolean {\r\n if (typeof a !== 'object') return a == b;\r\n if (typeof a !== typeof b) return false;\r\n // else we have object, check just 1 level deep for being same things...\r\n if (Object.keys(a).length !== Object.keys(b).length) return false;\r\n for (const key in a) {\r\n if (a[key] !== b[key]) return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** copies over b size & position (GridStackPosition), and optionally min/max as well */\r\n static copyPos(a: GridStackWidget, b: GridStackWidget, doMinMax = false): GridStackWidget {\r\n if (b.x !== undefined) a.x = b.x;\r\n if (b.y !== undefined) a.y = b.y;\r\n if (b.w !== undefined) a.w = b.w;\r\n if (b.h !== undefined) a.h = b.h;\r\n if (doMinMax) {\r\n if (b.minW) a.minW = b.minW;\r\n if (b.minH) a.minH = b.minH;\r\n if (b.maxW) a.maxW = b.maxW;\r\n if (b.maxH) a.maxH = b.maxH;\r\n }\r\n return a;\r\n }\r\n\r\n /** true if a and b has same size & position */\r\n static samePos(a: GridStackPosition, b: GridStackPosition): boolean {\r\n return a && b && a.x === b.x && a.y === b.y && (a.w || 1) === (b.w || 1) && (a.h || 1) === (b.h || 1);\r\n }\r\n\r\n /** given a node, makes sure it's min/max are valid */\r\n static sanitizeMinMax(node: GridStackNode) {\r\n // remove 0, undefine, null\r\n if (!node.minW) { delete node.minW; }\r\n if (!node.minH) { delete node.minH; }\r\n if (!node.maxW) { delete node.maxW; }\r\n if (!node.maxH) { delete node.maxH; }\r\n }\r\n\r\n /** removes field from the first object if same as the second objects (like diffing) and internal '_' for saving */\r\n static removeInternalAndSame(a: unknown, b: unknown):void {\r\n if (typeof a !== 'object' || typeof b !== 'object') return;\r\n for (let key in a) {\r\n const aVal = a[key];\r\n const bVal = b[key];\r\n if (key[0] === '_' || aVal === bVal) {\r\n delete a[key]\r\n } else if (aVal && typeof aVal === 'object' && bVal !== undefined) {\r\n Utils.removeInternalAndSame(aVal, bVal);\r\n if (!Object.keys(aVal).length) { delete a[key] }\r\n }\r\n }\r\n }\r\n\r\n /** removes internal fields '_' and default values for saving */\r\n static removeInternalForSave(n: GridStackNode, removeEl = true): void {\r\n for (let key in n) { if (key[0] === '_' || n[key] === null || n[key] === undefined ) delete n[key]; }\r\n delete n.grid;\r\n if (removeEl) delete n.el;\r\n // delete default values (will be re-created on read)\r\n if (!n.autoPosition) delete n.autoPosition;\r\n if (!n.noResize) delete n.noResize;\r\n if (!n.noMove) delete n.noMove;\r\n if (!n.locked) delete n.locked;\r\n if (n.w === 1 || n.w === n.minW) delete n.w;\r\n if (n.h === 1 || n.h === n.minH) delete n.h;\r\n }\r\n\r\n /** return the closest parent (or itself) matching the given class */\r\n // static closestUpByClass(el: HTMLElement, name: string): HTMLElement {\r\n // while (el) {\r\n // if (el.classList.contains(name)) return el;\r\n // el = el.parentElement\r\n // }\r\n // return null;\r\n // }\r\n\r\n /** delay calling the given function for given delay, preventing new calls from happening while waiting */\r\n static throttle(func: () => void, delay: number): () => void {\r\n let isWaiting = false;\r\n return (...args) => {\r\n if (!isWaiting) {\r\n isWaiting = true;\r\n setTimeout(() => { func(...args); isWaiting = false; }, delay);\r\n }\r\n }\r\n }\r\n\r\n static removePositioningStyles(el: HTMLElement): void {\r\n const style = el.style;\r\n if (style.position) {\r\n style.removeProperty('position');\r\n }\r\n if (style.left) {\r\n style.removeProperty('left');\r\n }\r\n if (style.top) {\r\n style.removeProperty('top');\r\n }\r\n if (style.width) {\r\n style.removeProperty('width');\r\n }\r\n if (style.height) {\r\n style.removeProperty('height');\r\n }\r\n }\r\n\r\n /** @internal returns the passed element if scrollable, else the closest parent that will, up to the entire document scrolling element */\r\n static getScrollElement(el?: HTMLElement): HTMLElement {\r\n if (!el) return document.scrollingElement as HTMLElement || document.documentElement; // IE support\r\n const style = getComputedStyle(el);\r\n const overflowRegex = /(auto|scroll)/;\r\n\r\n if (overflowRegex.test(style.overflow + style.overflowY)) {\r\n return el;\r\n } else {\r\n return this.getScrollElement(el.parentElement);\r\n }\r\n }\r\n\r\n /** @internal */\r\n static updateScrollPosition(el: HTMLElement, position: {top: number}, distance: number): void {\r\n // is widget in view?\r\n const rect = el.getBoundingClientRect();\r\n const innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight);\r\n if (rect.top < 0 ||\r\n rect.bottom > innerHeightOrClientHeight\r\n ) {\r\n // set scrollTop of first parent that scrolls\r\n // if parent is larger than el, set as low as possible\r\n // to get entire widget on screen\r\n const offsetDiffDown = rect.bottom - innerHeightOrClientHeight;\r\n const offsetDiffUp = rect.top;\r\n const scrollEl = this.getScrollElement(el);\r\n if (scrollEl !== null) {\r\n const prevScroll = scrollEl.scrollTop;\r\n if (rect.top < 0 && distance < 0) {\r\n // moving up\r\n if (el.offsetHeight > innerHeightOrClientHeight) {\r\n scrollEl.scrollTop += distance;\r\n } else {\r\n scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp;\r\n }\r\n } else if (distance > 0) {\r\n // moving down\r\n if (el.offsetHeight > innerHeightOrClientHeight) {\r\n scrollEl.scrollTop += distance;\r\n } else {\r\n scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown;\r\n }\r\n }\r\n // move widget y by amount scrolled\r\n position.top += scrollEl.scrollTop - prevScroll;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal Function used to scroll the page.\r\n *\r\n * @param event `MouseEvent` that triggers the resize\r\n * @param el `HTMLElement` that's being resized\r\n * @param distance Distance from the V edges to start scrolling\r\n */\r\n static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void {\r\n const scrollEl = this.getScrollElement(el);\r\n const height = scrollEl.clientHeight;\r\n // #1727 event.clientY is relative to viewport, so must compare this against position of scrollEl getBoundingClientRect().top\r\n // #1745 Special situation if scrollEl is document 'html': here browser spec states that\r\n // clientHeight is height of viewport, but getBoundingClientRect() is rectangle of html element;\r\n // this discrepancy arises because in reality scrollbar is attached to viewport, not html element itself.\r\n const offsetTop = (scrollEl === this.getScrollElement()) ? 0 : scrollEl.getBoundingClientRect().top;\r\n const pointerPosY = event.clientY - offsetTop;\r\n const top = pointerPosY < distance;\r\n const bottom = pointerPosY > height - distance;\r\n\r\n if (top) {\r\n // This also can be done with a timeout to keep scrolling while the mouse is\r\n // in the scrolling zone. (will have smoother behavior)\r\n scrollEl.scrollBy({ behavior: 'smooth', top: pointerPosY - distance});\r\n } else if (bottom) {\r\n scrollEl.scrollBy({ behavior: 'smooth', top: distance - (height - pointerPosY)});\r\n }\r\n }\r\n\r\n /** single level clone, returning a new object with same top fields. This will share sub objects and arrays */\r\n static clone(obj: T): T {\r\n if (obj === null || obj === undefined || typeof(obj) !== 'object') {\r\n return obj;\r\n }\r\n // return Object.assign({}, obj);\r\n if (obj instanceof Array) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return [...obj] as any;\r\n }\r\n return {...obj};\r\n }\r\n\r\n /**\r\n * Recursive clone version that returns a full copy, checking for nested objects and arrays ONLY.\r\n * Note: this will use as-is any key starting with double __ (and not copy inside) some lib have circular dependencies.\r\n */\r\n static cloneDeep(obj: T): T {\r\n // list of fields we will skip during cloneDeep (nested objects, other internal)\r\n const skipFields = ['parentGrid', 'el', 'grid', 'subGrid', 'engine'];\r\n // return JSON.parse(JSON.stringify(obj)); // doesn't work with date format ?\r\n const ret = Utils.clone(obj);\r\n for (const key in ret) {\r\n // NOTE: we don't support function/circular dependencies so skip those properties for now...\r\n if (ret.hasOwnProperty(key) && typeof(ret[key]) === 'object' && key.substring(0, 2) !== '__' && !skipFields.find(k => k === key)) {\r\n ret[key] = Utils.cloneDeep(obj[key]);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /** deep clone the given HTML node, removing teh unique id field */\r\n public static cloneNode(el: HTMLElement): HTMLElement {\r\n const node = el.cloneNode(true) as HTMLElement;\r\n node.removeAttribute('id');\r\n return node;\r\n }\r\n\r\n public static appendTo(el: HTMLElement, parent: string | HTMLElement): void {\r\n let parentNode: HTMLElement;\r\n if (typeof parent === 'string') {\r\n parentNode = Utils.getElement(parent);\r\n } else {\r\n parentNode = parent;\r\n }\r\n if (parentNode) {\r\n parentNode.appendChild(el);\r\n }\r\n }\r\n\r\n // public static setPositionRelative(el: HTMLElement): void {\r\n // if (!(/^(?:r|a|f)/).test(getComputedStyle(el).position)) {\r\n // el.style.position = \"relative\";\r\n // }\r\n // }\r\n\r\n public static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }): void {\r\n if (styles instanceof Object) {\r\n for (const s in styles) {\r\n if (styles.hasOwnProperty(s)) {\r\n if (Array.isArray(styles[s])) {\r\n // support fallback value\r\n (styles[s] as string[]).forEach(val => {\r\n el.style[s] = val;\r\n });\r\n } else {\r\n el.style[s] = styles[s];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static initEvent(e: DragEvent | MouseEvent, info: { type: string; target?: EventTarget }): T {\r\n const evt = { type: info.type };\r\n const obj = {\r\n button: 0,\r\n which: 0,\r\n buttons: 1,\r\n bubbles: true,\r\n cancelable: true,\r\n target: info.target ? info.target : e.target\r\n };\r\n ['altKey','ctrlKey','metaKey','shiftKey'].forEach(p => evt[p] = e[p]); // keys\r\n ['pageX','pageY','clientX','clientY','screenX','screenY'].forEach(p => evt[p] = e[p]); // point info\r\n return {...evt, ...obj} as unknown as T;\r\n }\r\n\r\n /** copies the MouseEvent (or convert Touch) properties and sends it as another event to the given target */\r\n public static simulateMouseEvent(e: MouseEvent | Touch, simulatedType: string, target?: EventTarget): void {\r\n const me = e as MouseEvent;\r\n const simulatedEvent = new MouseEvent(simulatedType, {\r\n bubbles: true,\r\n composed: true,\r\n cancelable: true,\r\n view: window,\r\n detail: 1,\r\n screenX: e.screenX,\r\n screenY: e.screenY,\r\n clientX: e.clientX,\r\n clientY: e.clientY,\r\n ctrlKey: me.ctrlKey??false,\r\n altKey: me.altKey??false,\r\n shiftKey: me.shiftKey??false,\r\n metaKey: me.metaKey??false,\r\n button: 0,\r\n relatedTarget: e.target\r\n });\r\n\r\n (target || e.target).dispatchEvent(simulatedEvent);\r\n }\r\n\r\n /**\r\n * defines an element that is used to get the offset and scale from grid transforms\r\n * returns the scale and offsets from said element\r\n */\r\n public static getValuesFromTransformedElement(parent: HTMLElement): DragTransform {\r\n const transformReference = document.createElement('div');\r\n Utils.addElStyles(transformReference, {\r\n opacity: '0',\r\n position: 'fixed',\r\n top: 0 + 'px',\r\n left: 0 + 'px',\r\n width: '1px',\r\n height: '1px',\r\n zIndex: '-999999',\r\n });\r\n parent.appendChild(transformReference);\r\n const transformValues = transformReference.getBoundingClientRect();\r\n parent.removeChild(transformReference);\r\n transformReference.remove();\r\n return {\r\n xScale: 1 / transformValues.width,\r\n yScale: 1 / transformValues.height,\r\n xOffset: transformValues.left,\r\n yOffset: transformValues.top,\r\n }\r\n }\r\n\r\n /** swap the given object 2 field values */\r\n public static swap(o: unknown, a: string, b: string): void {\r\n if (!o) return;\r\n const tmp = o[a]; o[a] = o[b]; o[b] = tmp;\r\n }\r\n\r\n /** returns true if event is inside the given element rectangle */\r\n // Note: Safari Mac has null event.relatedTarget which causes #1684 so check if DragEvent is inside the coordinates instead\r\n // this.el.contains(event.relatedTarget as HTMLElement)\r\n // public static inside(e: MouseEvent, el: HTMLElement): boolean {\r\n // // srcElement, toElement, target: all set to placeholder when leaving simple grid, so we can't use that (Chrome)\r\n // const target: HTMLElement = e.relatedTarget || (e as any).fromElement;\r\n // if (!target) {\r\n // const { bottom, left, right, top } = el.getBoundingClientRect();\r\n // return (e.x < right && e.x > left && e.y < bottom && e.y > top);\r\n // }\r\n // return el.contains(target);\r\n // }\r\n\r\n /** true if the item can be rotated (checking for prop, not space available) */\r\n public static canBeRotated(n: GridStackNode): boolean {\r\n return !(!n || n.w === n.h || n.locked || n.noResize || n.grid?.opts.disableResize || (n.minW && n.minW === n.maxW) || (n.minH && n.minH === n.maxH));\r\n }\r\n}","/**\n * gridstack-engine.ts 12.1.2\n * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license\n */\n\nimport { Utils } from './utils';\nimport { GridStackNode, ColumnOptions, GridStackPosition, GridStackMoveOpts, SaveFcn, CompactOptions } from './types';\n\n/** callback to update the DOM attributes since this class is generic (no HTML or other info) for items that changed - see _notify() */\ntype OnChangeCB = (nodes: GridStackNode[]) => void;\n\n/** options used during creation - similar to GridStackOptions */\nexport interface GridStackEngineOptions {\n column?: number;\n maxRow?: number;\n float?: boolean;\n nodes?: GridStackNode[];\n onChange?: OnChangeCB;\n}\n\n/**\n * Defines the GridStack engine that does most no DOM grid manipulation.\n * See GridStack methods and vars for descriptions.\n *\n * NOTE: values should not be modified directly - call the main GridStack API instead\n */\nexport class GridStackEngine {\n public column: number;\n public maxRow: number;\n public nodes: GridStackNode[];\n public addedNodes: GridStackNode[] = [];\n public removedNodes: GridStackNode[] = [];\n public batchMode: boolean;\n public defaultColumn = 12;\n /** @internal callback to update the DOM attributes */\n protected onChange: OnChangeCB;\n /** @internal */\n protected _float: boolean;\n /** @internal */\n protected _prevFloat: boolean;\n /** @internal cached layouts of difference column count so we can restore back (eg 12 -> 1 -> 12) */\n protected _layouts?: GridStackNode[][]; // maps column # to array of values nodes\n /** @internal set during loading (which is sorted) so item gets added AFTER collision nodes */\n public _loading?: boolean\n /** @internal true while we are resizing widgets during column resize to skip certain parts */\n protected _inColumnResize?: boolean;\n /** true when grid.load() already cached the layout and can skip out of bound caching info */\n public skipCacheUpdate?: boolean;\n /** @internal true if we have some items locked */\n protected _hasLocked: boolean;\n /** @internal unique global internal _id counter */\n public static _idSeq = 0;\n\n public constructor(opts: GridStackEngineOptions = {}) {\n this.column = opts.column || this.defaultColumn;\n if (this.column > this.defaultColumn) this.defaultColumn = this.column;\n this.maxRow = opts.maxRow;\n this._float = opts.float;\n this.nodes = opts.nodes || [];\n this.onChange = opts.onChange;\n }\n\n public batchUpdate(flag = true, doPack = true): GridStackEngine {\n if (!!this.batchMode === flag) return this;\n this.batchMode = flag;\n if (flag) {\n this._prevFloat = this._float;\n this._float = true; // let things go anywhere for now... will restore and possibly reposition later\n this.cleanNodes();\n this.saveInitial(); // since begin update (which is called multiple times) won't do this\n } else {\n this._float = this._prevFloat;\n delete this._prevFloat;\n if (doPack) this._packNodes();\n this._notify();\n }\n return this;\n }\n\n // use entire row for hitting area (will use bottom reverse sorted first) if we not actively moving DOWN and didn't already skip\n protected _useEntireRowArea(node: GridStackNode, nn: GridStackPosition): boolean {\n return (!this.float || this.batchMode && !this._prevFloat) && !this._hasLocked && (!node._moving || node._skipDown || nn.y <= node.y);\n }\n\n /** @internal fix collision on given 'node', going to given new location 'nn', with optional 'collide' node already found.\n * return true if we moved. */\n protected _fixCollisions(node: GridStackNode, nn = node, collide?: GridStackNode, opt: GridStackMoveOpts = {}): boolean {\n this.sortNodes(-1); // from last to first, so recursive collision move items in the right order\n\n collide = collide || this.collide(node, nn); // REAL area collide for swap and skip if none...\n if (!collide) return false;\n\n // swap check: if we're actively moving in gravity mode, see if we collide with an object the same size\n if (node._moving && !opt.nested && !this.float) {\n if (this.swap(node, collide)) return true;\n }\n\n // during while() collisions MAKE SURE to check entire row so larger items don't leap frog small ones (push them all down starting last in grid)\n let area = nn;\n if (!this._loading && this._useEntireRowArea(node, nn)) {\n area = {x: 0, w: this.column, y: nn.y, h: nn.h};\n collide = this.collide(node, area, opt.skip); // force new hit\n }\n\n let didMove = false;\n const newOpt: GridStackMoveOpts = {nested: true, pack: false};\n let counter = 0;\n while (collide = collide || this.collide(node, area, opt.skip)) { // could collide with more than 1 item... so repeat for each\n if (counter++ > this.nodes.length * 2) {\n throw new Error(\"Infinite collide check\");\n }\n let moved: boolean;\n // if colliding with a locked item OR loading (move after) OR moving down with top gravity (and collide could move up) -> skip past the collide,\n // but remember that skip down so we only do this once (and push others otherwise).\n if (collide.locked || this._loading || node._moving && !node._skipDown && nn.y > node.y && !this.float &&\n // can take space we had, or before where we're going\n (!this.collide(collide, {...collide, y: node.y}, node) || !this.collide(collide, {...collide, y: nn.y - collide.h}, node))) {\n\n node._skipDown = (node._skipDown || nn.y > node.y);\n const newNN = {...nn, y: collide.y + collide.h, ...newOpt};\n // pretent we moved to where we are now so we can continue any collision checks #2492\n moved = this._loading && Utils.samePos(node, newNN) ? true : this.moveNode(node, newNN);\n\n if ((collide.locked || this._loading) && moved) {\n Utils.copyPos(nn, node); // moving after lock become our new desired location\n } else if (!collide.locked && moved && opt.pack) {\n // we moved after and will pack: do it now and keep the original drop location, but past the old collide to see what else we might push way\n this._packNodes();\n nn.y = collide.y + collide.h;\n Utils.copyPos(node, nn);\n }\n didMove = didMove || moved;\n } else {\n // move collide down *after* where we will be, ignoring where we are now (don't collide with us)\n moved = this.moveNode(collide, {...collide, y: nn.y + nn.h, skip: node, ...newOpt});\n }\n\n if (!moved) return didMove; // break inf loop if we couldn't move after all (ex: maxRow, fixed)\n\n collide = undefined;\n }\n return didMove;\n }\n\n /** return the nodes that intercept the given node. Optionally a different area can be used, as well as a second node to skip */\n public collide(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode | undefined {\n const skipId = skip._id;\n const skip2Id = skip2?._id;\n return this.nodes.find(n => n._id !== skipId && n._id !== skip2Id && Utils.isIntercepted(n, area));\n }\n public collideAll(skip: GridStackNode, area = skip, skip2?: GridStackNode): GridStackNode[] {\n const skipId = skip._id;\n const skip2Id = skip2?._id;\n return this.nodes.filter(n => n._id !== skipId && n._id !== skip2Id && Utils.isIntercepted(n, area));\n }\n\n /** does a pixel coverage collision based on where we started, returning the node that has the most coverage that is >50% mid line */\n protected directionCollideCoverage(node: GridStackNode, o: GridStackMoveOpts, collides: GridStackNode[]): GridStackNode | undefined {\n if (!o.rect || !node._rect) return;\n const r0 = node._rect; // where started\n const r = {...o.rect}; // where we are\n\n // update dragged rect to show where it's coming from (above or below, etc...)\n if (r.y > r0.y) {\n r.h += r.y - r0.y;\n r.y = r0.y;\n } else {\n r.h += r0.y - r.y;\n }\n if (r.x > r0.x) {\n r.w += r.x - r0.x;\n r.x = r0.x;\n } else {\n r.w += r0.x - r.x;\n }\n\n let collide: GridStackNode;\n let overMax = 0.5; // need >50%\n for (let n of collides) {\n if (n.locked || !n._rect) {\n break;\n }\n const r2 = n._rect; // overlapping target\n let yOver = Number.MAX_VALUE, xOver = Number.MAX_VALUE;\n // depending on which side we started from, compute the overlap % of coverage\n // (ex: from above/below we only compute the max horizontal line coverage)\n if (r0.y < r2.y) { // from above\n yOver = ((r.y + r.h) - r2.y) / r2.h;\n } else if (r0.y + r0.h > r2.y + r2.h) { // from below\n yOver = ((r2.y + r2.h) - r.y) / r2.h;\n }\n if (r0.x < r2.x) { // from the left\n xOver = ((r.x + r.w) - r2.x) / r2.w;\n } else if (r0.x + r0.w > r2.x + r2.w) { // from the right\n xOver = ((r2.x + r2.w) - r.x) / r2.w;\n }\n const over = Math.min(xOver, yOver);\n if (over > overMax) {\n overMax = over;\n collide = n;\n }\n }\n o.collide = collide; // save it so we don't have to find it again\n return collide;\n }\n\n /** does a pixel coverage returning the node that has the most coverage by area */\n /*\n protected collideCoverage(r: GridStackPosition, collides: GridStackNode[]): {collide: GridStackNode, over: number} {\n const collide: GridStackNode;\n const overMax = 0;\n collides.forEach(n => {\n if (n.locked || !n._rect) return;\n const over = Utils.areaIntercept(r, n._rect);\n if (over > overMax) {\n overMax = over;\n collide = n;\n }\n });\n return {collide, over: overMax};\n }\n */\n\n /** called to cache the nodes pixel rectangles used for collision detection during drag */\n public cacheRects(w: number, h: number, top: number, right: number, bottom: number, left: number): GridStackEngine\n {\n this.nodes.forEach(n =>\n n._rect = {\n y: n.y * h + top,\n x: n.x * w + left,\n w: n.w * w - left - right,\n h: n.h * h - top - bottom\n }\n );\n return this;\n }\n\n /** called to possibly swap between 2 nodes (same size or column, not locked, touching), returning true if successful */\n public swap(a: GridStackNode, b: GridStackNode): boolean | undefined {\n if (!b || b.locked || !a || a.locked) return false;\n\n function _doSwap(): true { // assumes a is before b IFF they have different height (put after rather than exact swap)\n const x = b.x, y = b.y;\n b.x = a.x; b.y = a.y; // b -> a position\n if (a.h != b.h) {\n a.x = x; a.y = b.y + b.h; // a -> goes after b\n } else if (a.w != b.w) {\n a.x = b.x + b.w; a.y = y; // a -> goes after b\n } else {\n a.x = x; a.y = y; // a -> old b position\n }\n a._dirty = b._dirty = true;\n return true;\n }\n let touching: boolean; // remember if we called it (vs undefined)\n\n // same size and same row or column, and touching\n if (a.w === b.w && a.h === b.h && (a.x === b.x || a.y === b.y) && (touching = Utils.isTouching(a, b)))\n return _doSwap();\n if (touching === false) return; // IFF ran test and fail, bail out\n\n // check for taking same columns (but different height) and touching\n if (a.w === b.w && a.x === b.x && (touching || (touching = Utils.isTouching(a, b)))) {\n if (b.y < a.y) { const t = a; a = b; b = t; } // swap a <-> b vars so a is first\n return _doSwap();\n }\n if (touching === false) return;\n\n // check if taking same row (but different width) and touching\n if (a.h === b.h && a.y === b.y && (touching || (touching = Utils.isTouching(a, b)))) {\n if (b.x < a.x) { const t = a; a = b; b = t; } // swap a <-> b vars so a is first\n return _doSwap();\n }\n return false;\n }\n\n public isAreaEmpty(x: number, y: number, w: number, h: number): boolean {\n const nn: GridStackNode = {x: x || 0, y: y || 0, w: w || 1, h: h || 1};\n return !this.collide(nn);\n }\n\n /** re-layout grid items to reclaim any empty space - optionally keeping the sort order exactly the same ('list' mode) vs truly finding an empty spaces */\n public compact(layout: CompactOptions = 'compact', doSort = true): GridStackEngine {\n if (this.nodes.length === 0) return this;\n if (doSort) this.sortNodes();\n const wasBatch = this.batchMode;\n if (!wasBatch) this.batchUpdate();\n const wasColumnResize = this._inColumnResize;\n if (!wasColumnResize) this._inColumnResize = true; // faster addNode()\n const copyNodes = this.nodes;\n this.nodes = []; // pretend we have no nodes to conflict layout to start with...\n copyNodes.forEach((n, index, list) => {\n let after: GridStackNode;\n if (!n.locked) {\n n.autoPosition = true;\n if (layout === 'list' && index) after = list[index - 1];\n }\n this.addNode(n, false, after); // 'false' for add event trigger\n });\n if (!wasColumnResize) delete this._inColumnResize;\n if (!wasBatch) this.batchUpdate(false);\n return this;\n }\n\n /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */\n public set float(val: boolean) {\n if (this._float === val) return;\n this._float = val || false;\n if (!val) {\n this._packNodes()._notify();\n }\n }\n\n /** float getter method */\n public get float(): boolean { return this._float || false; }\n\n /** sort the nodes array from first to last, or reverse. Called during collision/placement to force an order */\n public sortNodes(dir: 1 | -1 = 1): GridStackEngine {\n this.nodes = Utils.sort(this.nodes, dir);\n return this;\n }\n\n /** @internal called to top gravity pack the items back OR revert back to original Y positions when floating */\n protected _packNodes(): GridStackEngine {\n if (this.batchMode) { return this; }\n this.sortNodes(); // first to last\n\n if (this.float) {\n // restore original Y pos\n this.nodes.forEach(n => {\n if (n._updating || n._orig === undefined || n.y === n._orig.y) return;\n let newY = n.y;\n while (newY > n._orig.y) {\n --newY;\n const collide = this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n if (!collide) {\n n._dirty = true;\n n.y = newY;\n }\n }\n });\n } else {\n // top gravity pack\n this.nodes.forEach((n, i) => {\n if (n.locked) return;\n while (n.y > 0) {\n const newY = i === 0 ? 0 : n.y - 1;\n const canBeMoved = i === 0 || !this.collide(n, {x: n.x, y: newY, w: n.w, h: n.h});\n if (!canBeMoved) break;\n // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions\n // and move items back. The user 'change' CB should detect changes from the original\n // starting position instead.\n n._dirty = (n.y !== newY);\n n.y = newY;\n }\n });\n }\n return this;\n }\n\n /**\n * given a random node, makes sure it's coordinates/values are valid in the current grid\n * @param node to adjust\n * @param resizing if out of bound, resize down or move into the grid to fit ?\n */\n public prepareNode(node: GridStackNode, resizing?: boolean): GridStackNode {\n node._id = node._id ?? GridStackEngine._idSeq++;\n\n // make sure USER supplied id are unique in our list, else assign a new one as it will create issues during load/update/etc...\n const id = node.id;\n if (id) {\n let count = 1; // append nice _n rather than some random number\n while (this.nodes.find(n => n.id === node.id && n !== node)) {\n node.id = id + '_' + (count++);\n }\n }\n\n // if we're missing position, have the grid position us automatically (before we set them to 0,0)\n if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) {\n node.autoPosition = true;\n }\n\n // assign defaults for missing required fields\n const defaults: GridStackNode = { x: 0, y: 0, w: 1, h: 1};\n Utils.defaults(node, defaults);\n\n if (!node.autoPosition) { delete node.autoPosition; }\n if (!node.noResize) { delete node.noResize; }\n if (!node.noMove) { delete node.noMove; }\n Utils.sanitizeMinMax(node);\n\n // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #)\n if (typeof node.x == 'string') { node.x = Number(node.x); }\n if (typeof node.y == 'string') { node.y = Number(node.y); }\n if (typeof node.w == 'string') { node.w = Number(node.w); }\n if (typeof node.h == 'string') { node.h = Number(node.h); }\n if (isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; }\n if (isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; }\n if (isNaN(node.w)) { node.w = defaults.w; }\n if (isNaN(node.h)) { node.h = defaults.h; }\n\n this.nodeBoundFix(node, resizing);\n return node;\n }\n\n /** part2 of preparing a node to fit inside our grid - checks for x,y,w from grid dimensions */\n public nodeBoundFix(node: GridStackNode, resizing?: boolean): GridStackEngine {\n\n const before = node._orig || Utils.copyPos({}, node);\n\n if (node.maxW) { node.w = Math.min(node.w || 1, node.maxW); }\n if (node.maxH) { node.h = Math.min(node.h || 1, node.maxH); }\n if (node.minW) { node.w = Math.max(node.w || 1, node.minW); }\n if (node.minH) { node.h = Math.max(node.h || 1, node.minH); }\n\n // if user loaded a larger than allowed widget for current # of columns,\n // remember it's position & width so we can restore back (1 -> 12 column) #1655 #1985\n // IFF we're not in the middle of column resizing!\n const saveOrig = (node.x || 0) + (node.w || 1) > this.column;\n if (saveOrig && this.column < this.defaultColumn && !this._inColumnResize && !this.skipCacheUpdate && node._id && this.findCacheLayout(node, this.defaultColumn) === -1) {\n const copy = {...node}; // need _id + positions\n if (copy.autoPosition || copy.x === undefined) { delete copy.x; delete copy.y; }\n else copy.x = Math.min(this.defaultColumn - 1, copy.x);\n copy.w = Math.min(this.defaultColumn, copy.w || 1);\n this.cacheOneLayout(copy, this.defaultColumn);\n }\n\n if (node.w > this.column) {\n node.w = this.column;\n } else if (node.w < 1) {\n node.w = 1;\n }\n\n if (this.maxRow && node.h > this.maxRow) {\n node.h = this.maxRow;\n } else if (node.h < 1) {\n node.h = 1;\n }\n\n if (node.x < 0) {\n node.x = 0;\n }\n if (node.y < 0) {\n node.y = 0;\n }\n\n if (node.x + node.w > this.column) {\n if (resizing) {\n node.w = this.column - node.x;\n } else {\n node.x = this.column - node.w;\n }\n }\n if (this.maxRow && node.y + node.h > this.maxRow) {\n if (resizing) {\n node.h = this.maxRow - node.y;\n } else {\n node.y = this.maxRow - node.h;\n }\n }\n\n if (!Utils.samePos(node, before)) {\n node._dirty = true;\n }\n\n return this;\n }\n\n /** returns a list of modified nodes from their original values */\n public getDirtyNodes(verify?: boolean): GridStackNode[] {\n // compare original x,y,w,h instead as _dirty can be a temporary state\n if (verify) {\n return this.nodes.filter(n => n._dirty && !Utils.samePos(n, n._orig));\n }\n return this.nodes.filter(n => n._dirty);\n }\n\n /** @internal call this to call onChange callback with dirty nodes so DOM can be updated */\n protected _notify(removedNodes?: GridStackNode[]): GridStackEngine {\n if (this.batchMode || !this.onChange) return this;\n const dirtyNodes = (removedNodes || []).concat(this.getDirtyNodes());\n this.onChange(dirtyNodes);\n return this;\n }\n\n /** @internal remove dirty and last tried info */\n public cleanNodes(): GridStackEngine {\n if (this.batchMode) return this;\n this.nodes.forEach(n => {\n delete n._dirty;\n delete n._lastTried;\n });\n return this;\n }\n\n /** @internal called to save initial position/size to track real dirty state.\n * Note: should be called right after we call change event (so next API is can detect changes)\n * as well as right before we start move/resize/enter (so we can restore items to prev values) */\n public saveInitial(): GridStackEngine {\n this.nodes.forEach(n => {\n n._orig = Utils.copyPos({}, n);\n delete n._dirty;\n });\n this._hasLocked = this.nodes.some(n => n.locked);\n return this;\n }\n\n /** @internal restore all the nodes back to initial values (called when we leave) */\n public restoreInitial(): GridStackEngine {\n this.nodes.forEach(n => {\n if (!n._orig || Utils.samePos(n, n._orig)) return;\n Utils.copyPos(n, n._orig);\n n._dirty = true;\n });\n this._notify();\n return this;\n }\n\n /** find the first available empty spot for the given node width/height, updating the x,y attributes. return true if found.\n * optionally you can pass your own existing node list and column count, otherwise defaults to that engine data.\n * Optionally pass a widget to start search AFTER, meaning the order will remain the same but possibly have empty slots we skipped\n */\n public findEmptyPosition(node: GridStackNode, nodeList = this.nodes, column = this.column, after?: GridStackNode): boolean {\n const start = after ? after.y * column + (after.x + after.w) : 0;\n let found = false;\n for (let i = start; !found; ++i) {\n const x = i % column;\n const y = Math.floor(i / column);\n if (x + node.w > column) {\n continue;\n }\n const box = {x, y, w: node.w, h: node.h};\n if (!nodeList.find(n => Utils.isIntercepted(box, n))) {\n if (node.x !== x || node.y !== y) node._dirty = true;\n node.x = x;\n node.y = y;\n delete node.autoPosition;\n found = true;\n }\n }\n return found;\n }\n\n /** call to add the given node to our list, fixing collision and re-packing */\n public addNode(node: GridStackNode, triggerAddEvent = false, after?: GridStackNode): GridStackNode {\n const dup = this.nodes.find(n => n._id === node._id);\n if (dup) return dup; // prevent inserting twice! return it instead.\n\n // skip prepareNode if we're in middle of column resize (not new) but do check for bounds!\n this._inColumnResize ? this.nodeBoundFix(node) : this.prepareNode(node);\n delete node._temporaryRemoved;\n delete node._removeDOM;\n\n let skipCollision: boolean;\n if (node.autoPosition && this.findEmptyPosition(node, this.nodes, this.column, after)) {\n delete node.autoPosition; // found our slot\n skipCollision = true;\n }\n\n this.nodes.push(node);\n if (triggerAddEvent) { this.addedNodes.push(node); }\n\n if (!skipCollision) this._fixCollisions(node);\n if (!this.batchMode) { this._packNodes()._notify(); }\n return node;\n }\n\n public removeNode(node: GridStackNode, removeDOM = true, triggerEvent = false): GridStackEngine {\n if (!this.nodes.find(n => n._id === node._id)) {\n // TEST console.log(`Error: GridStackEngine.removeNode() node._id=${node._id} not found!`)\n return this;\n }\n if (triggerEvent) { // we wait until final drop to manually track removed items (rather than during drag)\n this.removedNodes.push(node);\n }\n if (removeDOM) node._removeDOM = true; // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n // don't use 'faster' .splice(findIndex(),1) in case node isn't in our list, or in multiple times.\n this.nodes = this.nodes.filter(n => n._id !== node._id);\n if (!node._isAboutToRemove) this._packNodes(); // if dragged out, no need to relayout as already done...\n this._notify([node]);\n return this;\n }\n\n public removeAll(removeDOM = true, triggerEvent = true): GridStackEngine {\n delete this._layouts;\n if (!this.nodes.length) return this;\n removeDOM && this.nodes.forEach(n => n._removeDOM = true); // let CB remove actual HTML (used to set _id to null, but then we loose layout info)\n const removedNodes = this.nodes;\n this.removedNodes = triggerEvent ? removedNodes : [];\n this.nodes = [];\n return this._notify(removedNodes);\n }\n\n /** checks if item can be moved (layout constrain) vs moveNode(), returning true if was able to move.\n * In more complicated cases (maxRow) it will attempt at moving the item and fixing\n * others in a clone first, then apply those changes if still within specs. */\n public moveNodeCheck(node: GridStackNode, o: GridStackMoveOpts): boolean {\n // if (node.locked) return false;\n if (!this.changedPosConstrain(node, o)) return false;\n o.pack = true;\n\n // simpler case: move item directly...\n if (!this.maxRow) {\n return this.moveNode(node, o);\n }\n\n // complex case: create a clone with NO maxRow (will check for out of bounds at the end)\n let clonedNode: GridStackNode;\n const clone = new GridStackEngine({\n column: this.column,\n float: this.float,\n nodes: this.nodes.map(n => {\n if (n._id === node._id) {\n clonedNode = {...n};\n return clonedNode;\n }\n return {...n};\n })\n });\n if (!clonedNode) return false;\n\n // check if we're covering 50% collision and could move, while still being under maxRow or at least not making it worse\n // (case where widget was somehow added past our max #2449)\n const canMove = clone.moveNode(clonedNode, o) && clone.getRow() <= Math.max(this.getRow(), this.maxRow);\n // else check if we can force a swap (float=true, or different shapes) on non-resize\n if (!canMove && !o.resizing && o.collide) {\n const collide = o.collide.el.gridstackNode; // find the source node the clone collided with at 50%\n if (this.swap(node, collide)) { // swaps and mark dirty\n this._notify();\n return true;\n }\n }\n if (!canMove) return false;\n\n // if clone was able to move, copy those mods over to us now instead of caller trying to do this all over!\n // Note: we can't use the list directly as elements and other parts point to actual node, so copy content\n clone.nodes.filter(n => n._dirty).forEach(c => {\n const n = this.nodes.find(a => a._id === c._id);\n if (!n) return;\n Utils.copyPos(n, c);\n n._dirty = true;\n });\n this._notify();\n return true;\n }\n\n /** return true if can fit in grid height constrain only (always true if no maxRow) */\n public willItFit(node: GridStackNode): boolean {\n delete node._willFitPos;\n if (!this.maxRow) return true;\n // create a clone with NO maxRow and check if still within size\n const clone = new GridStackEngine({\n column: this.column,\n float: this.float,\n nodes: this.nodes.map(n => {return {...n}})\n });\n const n = {...node}; // clone node so we don't mod any settings on it but have full autoPosition and min/max as well! #1687\n this.cleanupNode(n);\n delete n.el; delete n._id; delete n.content; delete n.grid;\n clone.addNode(n);\n if (clone.getRow() <= this.maxRow) {\n node._willFitPos = Utils.copyPos({}, n);\n return true;\n }\n return false;\n }\n\n /** true if x,y or w,h are different after clamping to min/max */\n public changedPosConstrain(node: GridStackNode, p: GridStackPosition): boolean {\n // first make sure w,h are set for caller\n p.w = p.w || node.w;\n p.h = p.h || node.h;\n if (node.x !== p.x || node.y !== p.y) return true;\n // check constrained w,h\n if (node.maxW) { p.w = Math.min(p.w, node.maxW); }\n if (node.maxH) { p.h = Math.min(p.h, node.maxH); }\n if (node.minW) { p.w = Math.max(p.w, node.minW); }\n if (node.minH) { p.h = Math.max(p.h, node.minH); }\n return (node.w !== p.w || node.h !== p.h);\n }\n\n /** return true if the passed in node was actually moved (checks for no-op and locked) */\n public moveNode(node: GridStackNode, o: GridStackMoveOpts): boolean {\n if (!node || /*node.locked ||*/ !o) return false;\n let wasUndefinedPack: boolean;\n if (o.pack === undefined && !this.batchMode) {\n wasUndefinedPack = o.pack = true;\n }\n\n // constrain the passed in values and check if we're still changing our node\n if (typeof o.x !== 'number') { o.x = node.x; }\n if (typeof o.y !== 'number') { o.y = node.y; }\n if (typeof o.w !== 'number') { o.w = node.w; }\n if (typeof o.h !== 'number') { o.h = node.h; }\n const resizing = (node.w !== o.w || node.h !== o.h);\n const nn: GridStackNode = Utils.copyPos({}, node, true); // get min/max out first, then opt positions next\n Utils.copyPos(nn, o);\n this.nodeBoundFix(nn, resizing);\n Utils.copyPos(o, nn);\n\n if (!o.forceCollide && Utils.samePos(node, o)) return false;\n const prevPos: GridStackPosition = Utils.copyPos({}, node);\n\n // check if we will need to fix collision at our new location\n const collides = this.collideAll(node, nn, o.skip);\n let needToMove = true;\n if (collides.length) {\n const activeDrag = node._moving && !o.nested;\n // check to make sure we actually collided over 50% surface area while dragging\n let collide = activeDrag ? this.directionCollideCoverage(node, o, collides) : collides[0];\n // if we're enabling creation of sub-grids on the fly, see if we're covering 80% of either one, if we didn't already do that\n if (activeDrag && collide && node.grid?.opts?.subGridDynamic && !node.grid._isTemp) {\n const over = Utils.areaIntercept(o.rect, collide._rect);\n const a1 = Utils.area(o.rect);\n const a2 = Utils.area(collide._rect);\n const perc = over / (a1 < a2 ? a1 : a2);\n if (perc > .8) {\n collide.grid.makeSubGrid(collide.el, undefined, node);\n collide = undefined;\n }\n }\n\n if (collide) {\n needToMove = !this._fixCollisions(node, nn, collide, o); // check if already moved...\n } else {\n needToMove = false; // we didn't cover >50% for a move, skip...\n if (wasUndefinedPack) delete o.pack;\n }\n }\n\n // now move (to the original ask vs the collision version which might differ) and repack things\n if (needToMove && !Utils.samePos(node, nn)) {\n node._dirty = true;\n Utils.copyPos(node, nn);\n }\n if (o.pack) {\n this._packNodes()\n ._notify();\n }\n return !Utils.samePos(node, prevPos); // pack might have moved things back\n }\n\n public getRow(): number {\n return this.nodes.reduce((row, n) => Math.max(row, n.y + n.h), 0);\n }\n\n public beginUpdate(node: GridStackNode): GridStackEngine {\n if (!node._updating) {\n node._updating = true;\n delete node._skipDown;\n if (!this.batchMode) this.saveInitial();\n }\n return this;\n }\n\n public endUpdate(): GridStackEngine {\n const n = this.nodes.find(n => n._updating);\n if (n) {\n delete n._updating;\n delete n._skipDown;\n }\n return this;\n }\n\n /** saves a copy of the largest column layout (eg 12 even when rendering oneColumnMode) so we don't loose orig layout,\n * returning a list of widgets for serialization */\n public save(saveElement = true, saveCB?: SaveFcn): GridStackNode[] {\n // use the highest layout for any saved info so we can have full detail on reload #1849\n const len = this._layouts?.length;\n const layout = len && this.column !== (len - 1) ? this._layouts[len - 1] : null;\n const list: GridStackNode[] = [];\n this.sortNodes();\n this.nodes.forEach(n => {\n const wl = layout?.find(l => l._id === n._id);\n // use layout info fields instead if set\n const w: GridStackNode = {...n, ...(wl || {})};\n Utils.removeInternalForSave(w, !saveElement);\n if (saveCB) saveCB(n, w);\n list.push(w);\n });\n return list;\n }\n\n /** @internal called whenever a node is added or moved - updates the cached layouts */\n public layoutsNodesChange(nodes: GridStackNode[]): GridStackEngine {\n if (!this._layouts || this._inColumnResize) return this;\n // remove smaller layouts - we will re-generate those on the fly... larger ones need to update\n this._layouts.forEach((layout, column) => {\n if (!layout || column === this.column) return this;\n if (column < this.column) {\n this._layouts[column] = undefined;\n }\n else {\n // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better.\n // NOTE: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. #1785\n const ratio = column / this.column;\n nodes.forEach(node => {\n if (!node._orig) return; // didn't change (newly added ?)\n const n = layout.find(l => l._id === node._id);\n if (!n) return; // no cache for new nodes. Will use those values.\n // Y changed, push down same amount\n // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode)\n if (n.y >= 0 && node.y !== node._orig.y) {\n n.y += (node.y - node._orig.y);\n }\n // X changed, scale from new position\n if (node.x !== node._orig.x) {\n n.x = Math.round(node.x * ratio);\n }\n // width changed, scale from new width\n if (node.w !== node._orig.w) {\n n.w = Math.round(node.w * ratio);\n }\n // ...height always carries over from cache\n });\n }\n });\n return this;\n }\n\n /**\n * @internal Called to scale the widget width & position up/down based on the column change.\n * Note we store previous layouts (especially original ones) to make it possible to go\n * from say 12 -> 1 -> 12 and get back to where we were.\n *\n * @param prevColumn previous number of columns\n * @param column new column number\n * @param layout specify the type of re-layout that will happen (position, size, etc...).\n * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column\n */\n public columnChanged(prevColumn: number, column: number, layout: ColumnOptions = 'moveScale'): GridStackEngine {\n if (!this.nodes.length || !column || prevColumn === column) return this;\n\n // simpler shortcuts layouts\n const doCompact = layout === 'compact' || layout === 'list';\n if (doCompact) {\n this.sortNodes(1); // sort with original layout once and only once (new column will affect order otherwise)\n }\n\n // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data IFF we're sizing down (see below)\n if (column < prevColumn) this.cacheLayout(this.nodes, prevColumn);\n this.batchUpdate(); // do this EARLY as it will call saveInitial() so we can detect where we started for _dirty and collision\n let newNodes: GridStackNode[] = [];\n let nodes = doCompact ? this.nodes : Utils.sort(this.nodes, -1); // current column reverse sorting so we can insert last to front (limit collision)\n\n // see if we have cached previous layout IFF we are going up in size (restore) otherwise always\n // generate next size down from where we are (looks more natural as you gradually size down).\n if (column > prevColumn && this._layouts) {\n const cacheNodes = this._layouts[column] || [];\n // ...if not, start with the largest layout (if not already there) as down-scaling is more accurate\n // by pretending we came from that larger column by assigning those values as starting point\n const lastIndex = this._layouts.length - 1;\n if (!cacheNodes.length && prevColumn !== lastIndex && this._layouts[lastIndex]?.length) {\n prevColumn = lastIndex;\n this._layouts[lastIndex].forEach(cacheNode => {\n const n = nodes.find(n => n._id === cacheNode._id);\n if (n) {\n // still current, use cache info positions\n if (!doCompact && !cacheNode.autoPosition) {\n n.x = cacheNode.x ?? n.x;\n n.y = cacheNode.y ?? n.y;\n }\n n.w = cacheNode.w ?? n.w;\n if (cacheNode.x == undefined || cacheNode.y === undefined) n.autoPosition = true;\n }\n });\n }\n\n // if we found cache re-use those nodes that are still current\n cacheNodes.forEach(cacheNode => {\n const j = nodes.findIndex(n => n._id === cacheNode._id);\n if (j !== -1) {\n const n = nodes[j];\n // still current, use cache info positions\n if (doCompact) {\n n.w = cacheNode.w; // only w is used, and don't trim the list\n return;\n }\n if (cacheNode.autoPosition || isNaN(cacheNode.x) || isNaN(cacheNode.y)) {\n this.findEmptyPosition(cacheNode, newNodes);\n }\n if (!cacheNode.autoPosition) {\n n.x = cacheNode.x ?? n.x;\n n.y = cacheNode.y ?? n.y;\n n.w = cacheNode.w ?? n.w;\n newNodes.push(n);\n }\n nodes.splice(j, 1);\n }\n });\n }\n\n // much simpler layout that just compacts\n if (doCompact) {\n this.compact(layout, false);\n } else {\n // ...and add any extra non-cached ones\n if (nodes.length) {\n if (typeof layout === 'function') {\n layout(column, prevColumn, newNodes, nodes);\n } else {\n const ratio = (doCompact || layout === 'none') ? 1 : column / prevColumn;\n const move = (layout === 'move' || layout === 'moveScale');\n const scale = (layout === 'scale' || layout === 'moveScale');\n nodes.forEach(node => {\n // NOTE: x + w could be outside of the grid, but addNode() below will handle that\n node.x = (column === 1 ? 0 : (move ? Math.round(node.x * ratio) : Math.min(node.x, column - 1)));\n node.w = ((column === 1 || prevColumn === 1) ? 1 : scale ? (Math.round(node.w * ratio) || 1) : (Math.min(node.w, column)));\n newNodes.push(node);\n });\n nodes = [];\n }\n }\n\n // finally re-layout them in reverse order (to get correct placement)\n newNodes = Utils.sort(newNodes, -1);\n this._inColumnResize = true; // prevent cache update\n this.nodes = []; // pretend we have no nodes to start with (add() will use same structures) to simplify layout\n newNodes.forEach(node => {\n this.addNode(node, false); // 'false' for add event trigger\n delete node._orig; // make sure the commit doesn't try to restore things back to original\n });\n }\n\n this.nodes.forEach(n => delete n._orig); // clear _orig before batch=false so it doesn't handle float=true restore\n this.batchUpdate(false, !doCompact);\n delete this._inColumnResize;\n return this;\n }\n\n /**\n * call to cache the given layout internally to the given location so we can restore back when column changes size\n * @param nodes list of nodes\n * @param column corresponding column index to save it under\n * @param clear if true, will force other caches to be removed (default false)\n */\n public cacheLayout(nodes: GridStackNode[], column: number, clear = false): GridStackEngine {\n const copy: GridStackNode[] = [];\n nodes.forEach((n, i) => {\n // make sure we have an id in case this is new layout, else re-use id already set\n if (n._id === undefined) {\n const existing = n.id ? this.nodes.find(n2 => n2.id === n.id) : undefined; // find existing node using users id\n n._id = existing?._id ?? GridStackEngine._idSeq++;\n }\n copy[i] = {x: n.x, y: n.y, w: n.w, _id: n._id} // only thing we change is x,y,w and id to find it back\n });\n this._layouts = clear ? [] : this._layouts || []; // use array to find larger quick\n this._layouts[column] = copy;\n return this;\n }\n\n /**\n * call to cache the given node layout internally to the given location so we can restore back when column changes size\n * @param node single node to cache\n * @param column corresponding column index to save it under\n */\n public cacheOneLayout(n: GridStackNode, column: number): GridStackEngine {\n n._id = n._id ?? GridStackEngine._idSeq++;\n const l: GridStackNode = {x: n.x, y: n.y, w: n.w, _id: n._id}\n if (n.autoPosition || n.x === undefined) { delete l.x; delete l.y; if (n.autoPosition) l.autoPosition = true; }\n this._layouts = this._layouts || [];\n this._layouts[column] = this._layouts[column] || [];\n const index = this.findCacheLayout(n, column);\n if (index === -1)\n this._layouts[column].push(l);\n else\n this._layouts[column][index] = l;\n return this;\n }\n\n protected findCacheLayout(n: GridStackNode, column: number): number | undefined {\n return this._layouts?.[column]?.findIndex(l => l._id === n._id) ?? -1;\n }\n\n public removeNodeFromLayoutCache(n: GridStackNode) {\n if (!this._layouts) {\n return;\n }\n for (let i = 0; i < this._layouts.length; i++) {\n const index = this.findCacheLayout(n, i);\n if (index !== -1) {\n this._layouts[i].splice(index, 1);\n }\n }\n }\n\n /** called to remove all internal values but the _id */\n public cleanupNode(node: GridStackNode): GridStackEngine {\n for (const prop in node) {\n if (prop[0] === '_' && prop !== '_id') delete node[prop];\n }\n return this;\n }\n}\n","/**\r\n * types.ts 12.1.2\r\n * Copyright (c) 2021-2024 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { GridStack } from './gridstack';\r\nimport { GridStackEngine } from './gridstack-engine';\r\n\r\n// default values for grid options - used during init and when saving out\r\nexport const gridDefaults: GridStackOptions = {\r\n alwaysShowResizeHandle: 'mobile',\r\n animate: true,\r\n auto: true,\r\n cellHeight: 'auto',\r\n cellHeightThrottle: 100,\r\n cellHeightUnit: 'px',\r\n column: 12,\r\n draggable: { handle: '.grid-stack-item-content', appendTo: 'body', scroll: true },\r\n handle: '.grid-stack-item-content',\r\n itemClass: 'grid-stack-item',\r\n margin: 10,\r\n marginUnit: 'px',\r\n maxRow: 0,\r\n minRow: 0,\r\n placeholderClass: 'grid-stack-placeholder',\r\n placeholderText: '',\r\n removableOptions: { accept: 'grid-stack-item', decline: 'grid-stack-non-removable'},\r\n resizable: { handles: 'se' },\r\n rtl: 'auto',\r\n\r\n // **** same as not being set ****\r\n // disableDrag: false,\r\n // disableResize: false,\r\n // float: false,\r\n // handleClass: null,\r\n // removable: false,\r\n // staticGrid: false,\r\n //removable\r\n};\r\n\r\n/**\r\n * different layout options when changing # of columns, including a custom function that takes new/old column count, and array of new/old positions\r\n * Note: new list may be partially already filled if we have a cache of the layout at that size and new items were added later.\r\n * Options are:\r\n * 'list' - treat items as sorted list, keeping items (un-sized unless too big for column count) sequentially reflowing them\r\n * 'compact' - similar to list, but using compact() method which will possibly re-order items if an empty slots are available due to a larger item needing to be pushed to next row\r\n * 'moveScale' - will scale and move items by the ratio new newColumnCount / oldColumnCount\r\n * 'move' | 'scale' - will only size or move items\r\n * 'none' will leave items unchanged, unless they don't fit in column count\r\n */\r\nexport type ColumnOptions = 'list' | 'compact' | 'moveScale' | 'move' | 'scale' | 'none' |\r\n ((column: number, oldColumn: number, nodes: GridStackNode[], oldNodes: GridStackNode[]) => void);\r\nexport type CompactOptions = 'list' | 'compact';\r\nexport type numberOrString = number | string;\r\nexport interface GridItemHTMLElement extends HTMLElement {\r\n /** pointer to grid node instance */\r\n gridstackNode?: GridStackNode;\r\n /** @internal */\r\n _gridstackNodeOrig?: GridStackNode;\r\n}\r\n\r\nexport type GridStackElement = string | HTMLElement | GridItemHTMLElement;\r\n\r\n/** specific and general event handlers for the .on() method */\r\nexport type GridStackEventHandler = (event: Event) => void;\r\nexport type GridStackElementHandler = (event: Event, el: GridItemHTMLElement) => void;\r\nexport type GridStackNodesHandler = (event: Event, nodes: GridStackNode[]) => void;\r\nexport type GridStackDroppedHandler = (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => void;\r\nexport type GridStackEventHandlerCallback = GridStackEventHandler | GridStackElementHandler | GridStackNodesHandler | GridStackDroppedHandler;\r\n\r\n/** optional function called during load() to callback the user on new added/remove grid items | grids */\r\nexport type AddRemoveFcn = (parent: HTMLElement, w: GridStackWidget, add: boolean, grid: boolean) => HTMLElement | undefined;\r\n\r\n/** optional function called during save() to let the caller add additional custom data to the GridStackWidget structure that will get returned */\r\nexport type SaveFcn = (node: GridStackNode, w: GridStackWidget) => void;\r\n\r\n/** optional function called during load()/addWidget() to let the caller create custom content other than plan text */\r\nexport type RenderFcn = (el: HTMLElement, w: GridStackWidget) => void;\r\n\r\nexport type ResizeToContentFcn = (el: GridItemHTMLElement) => void;\r\n\r\n/** describes the responsive nature of the grid. NOTE: make sure to have correct extra CSS to support this. */\r\nexport interface Responsive {\r\n /** wanted width to maintain (+-50%) to dynamically pick a column count. NOTE: make sure to have correct extra CSS to support this. */\r\n columnWidth?: number;\r\n /** maximum number of columns allowed (default: 12). NOTE: make sure to have correct extra CSS to support this. */\r\n columnMax?: number;\r\n /** explicit width:column breakpoints instead of automatic 'columnWidth'. NOTE: make sure to have correct extra CSS to support this. */\r\n breakpoints?: Breakpoint[];\r\n /** specify if breakpoints are for window size or grid size (default:false = grid) */\r\n breakpointForWindow?: boolean;\r\n /** global re-layout mode when changing columns */\r\n layout?: ColumnOptions;\r\n}\r\n\r\nexport interface Breakpoint {\r\n /** <= width for the breakpoint to trigger */\r\n w?: number;\r\n /** column count */\r\n c: number;\r\n /** re-layout mode if different from global one */\r\n layout?: ColumnOptions;\r\n /** TODO: children layout, which spells out exact locations and could omit/add some children */\r\n // children?: GridStackWidget[];\r\n}\r\n\r\n/**\r\n * Defines the options for a Grid\r\n */\r\nexport interface GridStackOptions {\r\n /**\r\n * accept widgets dragged from other grids or from outside (default: `false`). Can be:\r\n * `true` (uses `'.grid-stack-item'` class filter) or `false`,\r\n * string for explicit class name,\r\n * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html)\r\n */\r\n acceptWidgets?: boolean | string | ((element: Element) => boolean);\r\n\r\n /** possible values (default: `mobile`) - does not apply to non-resizable widgets\r\n * `false` the resizing handles are only shown while hovering over a widget\r\n * `true` the resizing handles are always shown\r\n * 'mobile' if running on a mobile device, default to `true` (since there is no hovering per say), else `false`.\r\n See [example](http://gridstack.github.io/gridstack.js/demo/mobile.html) */\r\n alwaysShowResizeHandle?: true | false | 'mobile';\r\n\r\n /** turns animation on (default?: true) */\r\n animate?: boolean;\r\n\r\n /** if false gridstack will not initialize existing items (default?: true) */\r\n auto?: boolean;\r\n\r\n /**\r\n * one cell height (default?: 'auto'). Can be:\r\n * an integer (px)\r\n * a string (ex: '100px', '10em', '10rem'). Note: % doesn't work right - see demo/cell-height.html\r\n * 0, in which case the library will not generate styles for rows. Everything must be defined in your own CSS files.\r\n * 'auto' - height will be calculated for square cells (width / column) and updated live as you resize the window - also see `cellHeightThrottle`\r\n * 'initial' - similar to 'auto' (start at square cells) but stay that size during window resizing.\r\n */\r\n cellHeight?: numberOrString;\r\n\r\n /** throttle time delay (in ms) used when cellHeight='auto' to improve performance vs usability (default?: 100).\r\n * A value of 0 will make it instant at a cost of re-creating the CSS file at ever window resize event!\r\n * */\r\n cellHeightThrottle?: number;\r\n\r\n /** (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem') */\r\n cellHeightUnit?: string;\r\n\r\n /** list of children item to create when calling load() or addGrid() */\r\n children?: GridStackWidget[];\r\n\r\n /** number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns.\r\n * Note: for nested grids, it is recommended to use 'auto' which will always match the container grid-item current width (in column) to keep inside and outside\r\n * items always the same. flag is NOT supported for regular non-nested grids.\r\n */\r\n column?: number | 'auto';\r\n\r\n /** responsive column layout for width:column behavior */\r\n columnOpts?: Responsive;\r\n\r\n /** additional class on top of '.grid-stack' (which is required for our CSS) to differentiate this instance.\r\n Note: only used by addGrid(), else your element should have the needed class */\r\n class?: string;\r\n\r\n /** disallows dragging of widgets (default?: false) */\r\n disableDrag?: boolean;\r\n\r\n /** disallows resizing of widgets (default?: false). */\r\n disableResize?: boolean;\r\n\r\n /** allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', appendTo?: 'body' }) */\r\n draggable?: DDDragOpt;\r\n\r\n /** let user drag nested grid items out of a parent or not (default true - not supported yet) */\r\n //dragOut?: boolean;\r\n\r\n /** the type of engine to create (so you can subclass) default to GridStackEngine */\r\n engineClass?: typeof GridStackEngine;\r\n\r\n /** enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) */\r\n float?: boolean;\r\n\r\n /** draggable handle selector (default?: '.grid-stack-item-content') */\r\n handle?: string;\r\n\r\n /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */\r\n handleClass?: string;\r\n\r\n /** additional widget class (default?: 'grid-stack-item') */\r\n itemClass?: string;\r\n\r\n /** re-layout mode when we're a subgrid and we are being resized. default to 'list' */\r\n layout?: ColumnOptions;\r\n\r\n /** true when widgets are only created when they scroll into view (visible) */\r\n lazyLoad?: boolean;\r\n\r\n /**\r\n * gap between grid item and content (default?: 10). This will set all 4 sides and support the CSS formats below\r\n * an integer (px)\r\n * a string with possible units (ex: '2em', '20px', '2rem')\r\n * string with space separated values (ex: '5px 10px 0 20px' for all 4 sides, or '5em 10em' for top/bottom and left/right pairs like CSS).\r\n * Note: all sides must have same units (last one wins, default px)\r\n */\r\n margin?: numberOrString;\r\n\r\n /** OLD way to optionally set each side - use margin: '5px 10px 0 20px' instead. Used internally to store each side. */\r\n marginTop?: numberOrString;\r\n marginRight?: numberOrString;\r\n marginBottom?: numberOrString;\r\n marginLeft?: numberOrString;\r\n\r\n /** (internal) unit for margin (default? 'px') set when `margin` is set as string with unit (ex: 2rem') */\r\n marginUnit?: string;\r\n\r\n /** maximum rows amount. Default? is 0 which means no maximum rows */\r\n maxRow?: number;\r\n\r\n /** minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute\r\n * on the grid div in pixels, which will round to the closest row.\r\n */\r\n minRow?: number;\r\n\r\n /** If you are using a nonce-based Content Security Policy, pass your nonce here and\r\n * GridStack will add it to the