gridstack 9.5.1 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -1
- package/angular/package.json +1 -1
- package/angular/projects/demo/src/app/app.component.ts +0 -2
- package/angular/projects/lib/package.json +1 -1
- package/angular/projects/lib/src/lib/base-widget.ts +1 -1
- package/angular/projects/lib/src/lib/gridstack-item.component.ts +1 -1
- package/angular/projects/lib/src/lib/gridstack.component.ts +1 -1
- package/angular/projects/lib/src/lib/gridstack.module.ts +1 -1
- package/dist/angular/esm2020/lib/base-widget.mjs +2 -2
- package/dist/angular/esm2020/lib/gridstack-item.component.mjs +2 -2
- package/dist/angular/esm2020/lib/gridstack.component.mjs +2 -2
- package/dist/angular/esm2020/lib/gridstack.module.mjs +2 -2
- package/dist/angular/fesm2015/gridstack-angular.mjs +4 -4
- package/dist/angular/fesm2015/gridstack-angular.mjs.map +1 -1
- package/dist/angular/fesm2020/gridstack-angular.mjs +4 -4
- package/dist/angular/fesm2020/gridstack-angular.mjs.map +1 -1
- package/dist/angular/lib/gridstack-item.component.d.ts +1 -1
- package/dist/angular/lib/gridstack.component.d.ts +1 -1
- package/dist/angular/package.json +1 -1
- package/dist/angular/src/base-widget.ts +1 -1
- package/dist/angular/src/gridstack-item.component.ts +1 -1
- package/dist/angular/src/gridstack.component.ts +1 -1
- package/dist/angular/src/gridstack.module.ts +1 -1
- package/dist/dd-base-impl.d.ts +1 -1
- package/dist/dd-base-impl.js +1 -1
- package/dist/dd-base-impl.js.map +1 -1
- package/dist/dd-draggable.d.ts +1 -1
- package/dist/dd-draggable.js +1 -1
- package/dist/dd-draggable.js.map +1 -1
- package/dist/dd-droppable.d.ts +1 -1
- package/dist/dd-droppable.js +1 -1
- package/dist/dd-droppable.js.map +1 -1
- package/dist/dd-element.d.ts +1 -1
- package/dist/dd-element.js +1 -1
- package/dist/dd-element.js.map +1 -1
- package/dist/dd-gridstack.d.ts +1 -1
- package/dist/dd-gridstack.js +1 -1
- package/dist/dd-gridstack.js.map +1 -1
- package/dist/dd-manager.d.ts +1 -1
- package/dist/dd-manager.js +1 -1
- package/dist/dd-manager.js.map +1 -1
- package/dist/dd-resizable-handle.d.ts +1 -1
- package/dist/dd-resizable-handle.js +1 -1
- package/dist/dd-resizable-handle.js.map +1 -1
- package/dist/dd-resizable.d.ts +1 -1
- package/dist/dd-resizable.js +1 -1
- package/dist/dd-resizable.js.map +1 -1
- package/dist/dd-touch.d.ts +1 -1
- package/dist/dd-touch.js +1 -1
- package/dist/dd-touch.js.map +1 -1
- package/dist/es5/dd-base-impl.d.ts +1 -1
- package/dist/es5/dd-base-impl.js +1 -1
- package/dist/es5/dd-base-impl.js.map +1 -1
- package/dist/es5/dd-draggable.d.ts +1 -1
- package/dist/es5/dd-draggable.js +1 -1
- package/dist/es5/dd-draggable.js.map +1 -1
- package/dist/es5/dd-droppable.d.ts +1 -1
- package/dist/es5/dd-droppable.js +1 -1
- package/dist/es5/dd-droppable.js.map +1 -1
- package/dist/es5/dd-element.d.ts +1 -1
- package/dist/es5/dd-element.js +1 -1
- package/dist/es5/dd-element.js.map +1 -1
- package/dist/es5/dd-gridstack.d.ts +1 -1
- package/dist/es5/dd-gridstack.js +1 -1
- package/dist/es5/dd-gridstack.js.map +1 -1
- package/dist/es5/dd-manager.d.ts +1 -1
- package/dist/es5/dd-manager.js +1 -1
- package/dist/es5/dd-manager.js.map +1 -1
- package/dist/es5/dd-resizable-handle.d.ts +1 -1
- package/dist/es5/dd-resizable-handle.js +1 -1
- package/dist/es5/dd-resizable-handle.js.map +1 -1
- package/dist/es5/dd-resizable.d.ts +1 -1
- package/dist/es5/dd-resizable.js +1 -1
- package/dist/es5/dd-resizable.js.map +1 -1
- package/dist/es5/dd-touch.d.ts +1 -1
- package/dist/es5/dd-touch.js +1 -1
- package/dist/es5/dd-touch.js.map +1 -1
- package/dist/es5/gridstack-all.js +1 -1
- package/dist/es5/gridstack-all.js.LICENSE.txt +1 -1
- package/dist/es5/gridstack-all.js.map +1 -1
- package/dist/es5/gridstack-engine.d.ts +1 -1
- package/dist/es5/gridstack-engine.js +1 -1
- package/dist/es5/gridstack-engine.js.map +1 -1
- package/dist/es5/gridstack-poly.js +1 -1
- package/dist/es5/gridstack.d.ts +5 -3
- package/dist/es5/gridstack.js +97 -62
- package/dist/es5/gridstack.js.map +1 -1
- package/dist/es5/types.d.ts +25 -11
- package/dist/es5/types.js +1 -4
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils.d.ts +1 -1
- package/dist/es5/utils.js +1 -1
- package/dist/es5/utils.js.map +1 -1
- package/dist/gridstack-all.js +1 -1
- package/dist/gridstack-all.js.LICENSE.txt +1 -1
- package/dist/gridstack-all.js.map +1 -1
- package/dist/gridstack-engine.d.ts +1 -1
- package/dist/gridstack-engine.js +1 -1
- package/dist/gridstack-engine.js.map +1 -1
- package/dist/gridstack.css +1 -1
- package/dist/gridstack.d.ts +5 -3
- package/dist/gridstack.js +91 -59
- package/dist/gridstack.js.map +1 -1
- package/dist/src/gridstack.scss +1 -1
- package/dist/types.d.ts +25 -11
- package/dist/types.js +1 -4
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/doc/CHANGES.md +5 -0
- package/doc/README.md +17 -4
- package/package.json +1 -1
package/dist/gridstack.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* GridStack
|
|
2
|
+
* GridStack 10.0.0
|
|
3
3
|
* https://gridstackjs.com/
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2021-2022 Alain Dumesny
|
|
@@ -17,7 +17,6 @@ import { gridDefaults, dragInDefaultOptions } from './types';
|
|
|
17
17
|
import { DDGridStack } from './dd-gridstack';
|
|
18
18
|
import { isTouch } from './dd-touch';
|
|
19
19
|
import { DDManager } from './dd-manager';
|
|
20
|
-
/** global instance */
|
|
21
20
|
const dd = new DDGridStack;
|
|
22
21
|
// export all dependent file as well to make it easier for users to just import the main file
|
|
23
22
|
export * from './types';
|
|
@@ -175,6 +174,41 @@ class GridStack {
|
|
|
175
174
|
if (opts.alwaysShowResizeHandle !== undefined) {
|
|
176
175
|
opts._alwaysShowResizeHandle = opts.alwaysShowResizeHandle;
|
|
177
176
|
}
|
|
177
|
+
let bk = opts.columnOpts?.breakpoints;
|
|
178
|
+
// LEGACY: oneColumnMode stuff changed in v10.x - check if user explicitly set something to convert over
|
|
179
|
+
const oldOpts = opts;
|
|
180
|
+
if (oldOpts.oneColumnModeDomSort) {
|
|
181
|
+
delete oldOpts.oneColumnModeDomSort;
|
|
182
|
+
console.log('Error: Gridstack oneColumnModeDomSort no longer supported. Check GridStackOptions.columnOpts instead.');
|
|
183
|
+
}
|
|
184
|
+
if (oldOpts.oneColumnSize || oldOpts.disableOneColumnMode === false) {
|
|
185
|
+
const oneSize = oldOpts.oneColumnSize || 768;
|
|
186
|
+
delete oldOpts.oneColumnSize;
|
|
187
|
+
delete oldOpts.disableOneColumnMode;
|
|
188
|
+
opts.columnOpts = opts.columnOpts || {};
|
|
189
|
+
bk = opts.columnOpts.breakpoints = opts.columnOpts.breakpoints || [];
|
|
190
|
+
let oneColumn = bk.find(b => b.c === 1);
|
|
191
|
+
if (!oneColumn) {
|
|
192
|
+
oneColumn = { c: 1, w: oneSize };
|
|
193
|
+
bk.push(oneColumn, { c: 12, w: oneSize + 1 });
|
|
194
|
+
}
|
|
195
|
+
else
|
|
196
|
+
oneColumn.w = oneSize;
|
|
197
|
+
}
|
|
198
|
+
//...end LEGACY
|
|
199
|
+
// cleanup responsive opts (must have columnWidth | breakpoints) then sort breakpoints by size (so we can match during resize)
|
|
200
|
+
const resp = opts.columnOpts;
|
|
201
|
+
if (resp) {
|
|
202
|
+
if (!resp.columnWidth && !resp.breakpoints?.length) {
|
|
203
|
+
delete opts.columnOpts;
|
|
204
|
+
bk = undefined;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
resp.columnMax = resp.columnMax || 12;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (bk?.length > 1)
|
|
211
|
+
bk.sort((a, b) => (b.w || 0) - (a.w || 0));
|
|
178
212
|
// elements DOM attributes override any passed options (like CSS style) - merge the two together
|
|
179
213
|
let defaults = { ...Utils.cloneDeep(gridDefaults),
|
|
180
214
|
column: Utils.toNumber(el.getAttribute('gs-column')) || gridDefaults.column,
|
|
@@ -196,10 +230,7 @@ class GridStack {
|
|
|
196
230
|
opts = null; // make sure we use this.opts instead
|
|
197
231
|
this._initMargin(); // part of settings defaults...
|
|
198
232
|
// Now check if we're loading into 1 column mode FIRST so we don't do un-necessary work (like cellHeight = width / 12 then go 1 column)
|
|
199
|
-
|
|
200
|
-
this._prevColumn = this.getColumn();
|
|
201
|
-
this.opts.column = 1;
|
|
202
|
-
}
|
|
233
|
+
this.checkDynamicColumn();
|
|
203
234
|
if (this.opts.rtl === 'auto') {
|
|
204
235
|
this.opts.rtl = (el.style.direction === 'rtl');
|
|
205
236
|
}
|
|
@@ -380,7 +411,7 @@ class GridStack {
|
|
|
380
411
|
if (ops.column === 'auto') {
|
|
381
412
|
autoColumn = true;
|
|
382
413
|
ops.column = Math.max(node.w || 1, nodeToAdd?.w || 1);
|
|
383
|
-
ops.
|
|
414
|
+
delete ops.columnOpts; // driven by parent
|
|
384
415
|
}
|
|
385
416
|
// if we're converting an existing full item, move over the content to be the first sub item in the new grid
|
|
386
417
|
let content = node.el.querySelector('.grid-stack-item-content');
|
|
@@ -516,7 +547,6 @@ class GridStack {
|
|
|
516
547
|
}
|
|
517
548
|
if (this._autoColumn) {
|
|
518
549
|
o.column = 'auto';
|
|
519
|
-
delete o.disableOneColumnMode;
|
|
520
550
|
}
|
|
521
551
|
const origShow = o._alwaysShowResizeHandle;
|
|
522
552
|
delete o._alwaysShowResizeHandle;
|
|
@@ -544,17 +574,17 @@ class GridStack {
|
|
|
544
574
|
*/
|
|
545
575
|
load(items, addRemove = GridStack.addRemoveCB || true) {
|
|
546
576
|
items = Utils.cloneDeep(items); // so we can mod
|
|
547
|
-
|
|
577
|
+
const column = this.getColumn();
|
|
578
|
+
// if passed list has coordinates, use them (insert from end to beginning for conflict resolution) else keep widget order
|
|
548
579
|
const haveCoord = items.some(w => w.x !== undefined || w.y !== undefined);
|
|
549
580
|
if (haveCoord)
|
|
550
|
-
items = Utils.sort(items, -1,
|
|
581
|
+
items = Utils.sort(items, -1, column);
|
|
551
582
|
this._insertNotAppend = haveCoord; // if we create in reverse order...
|
|
552
|
-
// if we're loading a layout into for example 1 column
|
|
583
|
+
// if we're loading a layout into for example 1 column and items don't fit, make sure to save
|
|
553
584
|
// the original wanted layout so we can scale back up correctly #1471
|
|
554
|
-
|
|
555
|
-
if (this._prevColumn && this._prevColumn !== column && items.some(n => ((n.x || 0) + n.w) > column)) {
|
|
585
|
+
if (items.some(n => ((n.x || 0) + (n.w || 1)) > column)) {
|
|
556
586
|
this._ignoreLayoutsNodeChange = true; // skip layout update
|
|
557
|
-
this.engine.cacheLayout(items,
|
|
587
|
+
this.engine.cacheLayout(items, 12, true); // TODO: 12 is arbitrary. use max value in layout ?
|
|
558
588
|
}
|
|
559
589
|
// if given a different callback, temporally set it as global option so creating will use it
|
|
560
590
|
const prevCB = GridStack.addRemoveCB;
|
|
@@ -708,11 +738,37 @@ class GridStack {
|
|
|
708
738
|
cellWidth() {
|
|
709
739
|
return this._widthOrContainer() / this.getColumn();
|
|
710
740
|
}
|
|
711
|
-
/** return our expected width (or parent) for
|
|
712
|
-
_widthOrContainer() {
|
|
741
|
+
/** return our expected width (or parent) , and optionally of window for dynamic column check */
|
|
742
|
+
_widthOrContainer(forBreakpoint = false) {
|
|
713
743
|
// use `offsetWidth` or `clientWidth` (no scrollbar) ?
|
|
714
744
|
// https://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively
|
|
715
|
-
return (this.el.clientWidth || this.el.parentElement.clientWidth || window.innerWidth);
|
|
745
|
+
return forBreakpoint && this.opts.columnOpts?.breakpointForWindow ? window.innerWidth : (this.el.clientWidth || this.el.parentElement.clientWidth || window.innerWidth);
|
|
746
|
+
}
|
|
747
|
+
/** checks for dynamic column count for our current size, returning true if changed */
|
|
748
|
+
checkDynamicColumn() {
|
|
749
|
+
const resp = this.opts.columnOpts;
|
|
750
|
+
if (!resp || (!resp.columnWidth && !resp.breakpoints?.length))
|
|
751
|
+
return false;
|
|
752
|
+
const column = this.getColumn();
|
|
753
|
+
let newColumn = column;
|
|
754
|
+
const w = this._widthOrContainer(true);
|
|
755
|
+
if (resp.columnWidth) {
|
|
756
|
+
newColumn = Math.min(Math.round(w / resp.columnWidth) || 1, resp.columnMax);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
// find the closest breakpoint (already sorted big to small) that matches
|
|
760
|
+
newColumn = resp.columnMax;
|
|
761
|
+
let i = 0;
|
|
762
|
+
while (i < resp.breakpoints.length && w <= resp.breakpoints[i].w) {
|
|
763
|
+
newColumn = resp.breakpoints[i++].c || column;
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
if (newColumn !== column) {
|
|
767
|
+
const bk = resp.breakpoints?.find(b => b.c === newColumn);
|
|
768
|
+
this.column(newColumn, bk?.layout || resp.layout);
|
|
769
|
+
return true;
|
|
770
|
+
}
|
|
771
|
+
return false;
|
|
716
772
|
}
|
|
717
773
|
/**
|
|
718
774
|
* re-layout grid items to reclaim any empty space. Options are:
|
|
@@ -739,31 +795,16 @@ class GridStack {
|
|
|
739
795
|
if (!column || column < 1 || this.opts.column === column)
|
|
740
796
|
return this;
|
|
741
797
|
let oldColumn = this.getColumn();
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
}
|
|
747
|
-
else {
|
|
748
|
-
delete this._prevColumn;
|
|
749
|
-
}
|
|
798
|
+
this.opts.column = column;
|
|
799
|
+
if (!this.engine)
|
|
800
|
+
return this; // called in constructor, noting else to do
|
|
801
|
+
this.engine.column = column;
|
|
750
802
|
this.el.classList.remove('gs-' + oldColumn);
|
|
751
803
|
this.el.classList.add('gs-' + column);
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
domNodes = [];
|
|
757
|
-
this.getGridItems().forEach(el => {
|
|
758
|
-
if (el.gridstackNode) {
|
|
759
|
-
domNodes.push(el.gridstackNode);
|
|
760
|
-
}
|
|
761
|
-
});
|
|
762
|
-
if (!domNodes.length) {
|
|
763
|
-
domNodes = undefined;
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
this.engine.columnChanged(oldColumn, column, domNodes, layout);
|
|
804
|
+
// update the items now, checking if we have a custom children layout
|
|
805
|
+
/*const newChildren = this.opts.columnOpts?.breakpoints?.find(r => r.c === column)?.children;
|
|
806
|
+
if (newChildren) this.load(newChildren);
|
|
807
|
+
else*/ this.engine.columnChanged(oldColumn, column, undefined, layout);
|
|
767
808
|
if (this._isAutoCellHeight)
|
|
768
809
|
this.cellHeight();
|
|
769
810
|
this.doContentResize();
|
|
@@ -776,9 +817,7 @@ class GridStack {
|
|
|
776
817
|
/**
|
|
777
818
|
* get the number of columns in the grid (default 12)
|
|
778
819
|
*/
|
|
779
|
-
getColumn() {
|
|
780
|
-
return this.opts.column;
|
|
781
|
-
}
|
|
820
|
+
getColumn() { return this.opts.column; }
|
|
782
821
|
/** returns an array of grid HTML elements (no placeholder) - used to iterate through our children in DOM order */
|
|
783
822
|
getGridItems() {
|
|
784
823
|
return Array.from(this.el.children)
|
|
@@ -895,9 +934,9 @@ class GridStack {
|
|
|
895
934
|
if (node.subGridOpts) {
|
|
896
935
|
this.makeSubGrid(el, node.subGridOpts, undefined, false); // node.subGrid will be used as option in method, no need to pass
|
|
897
936
|
}
|
|
898
|
-
// if we're adding an item into 1 column
|
|
937
|
+
// if we're adding an item into 1 column make sure
|
|
899
938
|
// we don't override the larger 12 column layout that was already saved. #1985
|
|
900
|
-
if (this.
|
|
939
|
+
if (this.opts.column === 1) {
|
|
901
940
|
this._ignoreLayoutsNodeChange = true;
|
|
902
941
|
}
|
|
903
942
|
this._triggerAddEvent();
|
|
@@ -928,8 +967,8 @@ class GridStack {
|
|
|
928
967
|
names.forEach(name => this.on(name, callback));
|
|
929
968
|
return this;
|
|
930
969
|
}
|
|
970
|
+
// native CustomEvent handlers - cash the generic handlers so we can easily remove
|
|
931
971
|
if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') {
|
|
932
|
-
// native CustomEvent handlers - cash the generic handlers so we can easily remove
|
|
933
972
|
let noData = (name === 'enable' || name === 'disable');
|
|
934
973
|
if (noData) {
|
|
935
974
|
this._gsEventHandler[name] = (event) => callback(event);
|
|
@@ -946,7 +985,7 @@ class GridStack {
|
|
|
946
985
|
this._gsEventHandler[name] = callback;
|
|
947
986
|
}
|
|
948
987
|
else {
|
|
949
|
-
console.log('GridStack.on(' + name + ') event not supported
|
|
988
|
+
console.log('GridStack.on(' + name + ') event not supported');
|
|
950
989
|
}
|
|
951
990
|
return this;
|
|
952
991
|
}
|
|
@@ -1528,15 +1567,8 @@ class GridStack {
|
|
|
1528
1567
|
}
|
|
1529
1568
|
}
|
|
1530
1569
|
else {
|
|
1531
|
-
// else check for
|
|
1532
|
-
|
|
1533
|
-
(this.opts.column === 1 && !this._prevColumn);
|
|
1534
|
-
if ((this.opts.column === 1) !== oneColumn) {
|
|
1535
|
-
// if (this.opts.animate) this.setAnimation(false); // 1 <-> 12 is too radical, turn off animation and we need it for sizeToContent
|
|
1536
|
-
this.column(oneColumn ? 1 : this._prevColumn);
|
|
1537
|
-
// if (this.opts.animate) setTimeout(() => this.setAnimation(true));
|
|
1538
|
-
columnChanged = true;
|
|
1539
|
-
}
|
|
1570
|
+
// else check for dynamic column
|
|
1571
|
+
columnChanged = this.checkDynamicColumn();
|
|
1540
1572
|
}
|
|
1541
1573
|
// make the cells content square again
|
|
1542
1574
|
if (this._isAutoCellHeight)
|
|
@@ -1578,9 +1610,9 @@ class GridStack {
|
|
|
1578
1610
|
}
|
|
1579
1611
|
/** add or remove the grid element size event handler */
|
|
1580
1612
|
_updateResizeEvent(forceRemove = false) {
|
|
1581
|
-
// only add event if we're not nested (parent will call us) and we're auto sizing cells or supporting
|
|
1613
|
+
// only add event if we're not nested (parent will call us) and we're auto sizing cells or supporting dynamic column (i.e. doing work)
|
|
1582
1614
|
// or supporting new sizeToContent option.
|
|
1583
|
-
const trackSize = !this.parentGridItem && (this._isAutoCellHeight || this.opts.sizeToContent ||
|
|
1615
|
+
const trackSize = !this.parentGridItem && (this._isAutoCellHeight || this.opts.sizeToContent || this.opts.columnOpts
|
|
1584
1616
|
|| this.engine.nodes.find(n => n.sizeToContent));
|
|
1585
1617
|
if (!forceRemove && trackSize && !this.resizeObserver) {
|
|
1586
1618
|
this._sizeThrottle = Utils.throttle(() => this.onResize(), this.opts.cellHeightThrottle);
|
|
@@ -2305,6 +2337,6 @@ GridStack.resizeToContentParent = '.grid-stack-item-content';
|
|
|
2305
2337
|
GridStack.Utils = Utils;
|
|
2306
2338
|
/** scoping so users can call new GridStack.Engine(12) for example */
|
|
2307
2339
|
GridStack.Engine = GridStackEngine;
|
|
2308
|
-
GridStack.GDRev = '
|
|
2340
|
+
GridStack.GDRev = '10.0.0';
|
|
2309
2341
|
export { GridStack };
|
|
2310
2342
|
//# sourceMappingURL=gridstack.js.map
|