From 6d022675a19f4aa444cf92a12767d7381b29ef03 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Fri, 19 Jan 2024 17:08:24 +0100 Subject: [PATCH 01/17] - Introduced default columns to avoid using the 12 value as default for non-12 scenarios --- src/gridstack-engine.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index e4d1569d7..07faf3cb0 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -31,6 +31,7 @@ export class GridStackEngine { public addedNodes: GridStackNode[] = []; public removedNodes: GridStackNode[] = []; public batchMode: boolean; + public defaultColumn = 12; /** @internal callback to update the DOM attributes */ protected onChange: OnChangeCB; /** @internal */ @@ -47,7 +48,7 @@ export class GridStackEngine { public static _idSeq = 0; public constructor(opts: GridStackEngineOptions = {}) { - this.column = opts.column || 12; + this.column = opts.column || this.defaultColumn; this.maxRow = opts.maxRow; this._float = opts.float; this.nodes = opts.nodes || []; @@ -390,12 +391,12 @@ export class GridStackEngine { // remember it's position & width so we can restore back (1 -> 12 column) #1655 #1985 // IFF we're not in the middle of column resizing! const saveOrig = (node.x || 0) + (node.w || 1) > this.column; - if (saveOrig && this.column < 12 && !this._inColumnResize && node._id && this.findCacheLayout(node, 12) === -1) { + if (saveOrig && this.column < this.defaultColumn && !this._inColumnResize && node._id && this.findCacheLayout(node, this.defaultColumn) === -1) { let copy = {...node}; // need _id + positions if (copy.autoPosition || copy.x === undefined) { delete copy.x; delete copy.y; } else copy.x = Math.min(11, copy.x); - copy.w = Math.min(12, copy.w || 1); - this.cacheOneLayout(copy, 12); + copy.w = Math.min(this.defaultColumn, copy.w || 1); + this.cacheOneLayout(copy, this.defaultColumn); } if (node.w > this.column) { From d7685393e583f805c8ecb9ef700316a39ebd92c0 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Fri, 19 Jan 2024 17:13:27 +0100 Subject: [PATCH 02/17] - Private npm --- angular/angular.json | 3 +++ package.json | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/angular/angular.json b/angular/angular.json index d44615a8c..8cb926bd0 100644 --- a/angular/angular.json +++ b/angular/angular.json @@ -128,5 +128,8 @@ } } } + }, + "cli": { + "analytics": false } } diff --git a/package.json b/package.json index dafad2124..50bd59b6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "gridstack", - "version": "10.0.1-dev", + "name": "@ionweb/gridstack", + "version": "10.0.1-ion1", "license": "MIT", "author": "Alain Dumesny (https://github.com/adumesny)", "contributors": [ From b0bb1cf2759b7ae5e8a6002fe984755719667d72 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Mon, 22 Jan 2024 17:29:31 +0100 Subject: [PATCH 03/17] - Fixed --- package.json | 5 ++--- src/gridstack-engine.ts | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 50bd59b6a..aacfe9dd6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ionweb/gridstack", - "version": "10.0.1-ion1", + "version": "10.0.1-ion2", "license": "MIT", "author": "Alain Dumesny (https://github.com/adumesny)", "contributors": [ @@ -34,8 +34,7 @@ "doc": "doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "test": "yarn lint && karma start karma.conf.js", "lint": "tsc --noEmit && eslint src/*.ts", - "reset": "rm -rf dist node_modules", - "prepublishOnly": "yarn build" + "reset": "rm -rf dist node_modules" }, "keywords": [ "Typescript", diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 07faf3cb0..b925029d7 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -394,7 +394,7 @@ export class GridStackEngine { if (saveOrig && this.column < this.defaultColumn && !this._inColumnResize && node._id && this.findCacheLayout(node, this.defaultColumn) === -1) { let copy = {...node}; // need _id + positions if (copy.autoPosition || copy.x === undefined) { delete copy.x; delete copy.y; } - else copy.x = Math.min(11, copy.x); + else copy.x = Math.min(this.defaultColumn - 1, copy.x); copy.w = Math.min(this.defaultColumn, copy.w || 1); this.cacheOneLayout(copy, this.defaultColumn); } From 435186ea6d2638a79b71fce64545d656275c02f1 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Fri, 16 Feb 2024 10:20:19 +0100 Subject: [PATCH 04/17] - Support gridstack element node reparenting without losing the stylesheets --- src/gridstack.ts | 4 ++-- src/utils.ts | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index 020625f4a..928e5cacd 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -48,7 +48,7 @@ export interface CellPosition { y: number; } -interface GridCSSStyleSheet extends CSSStyleSheet { +interface GridHTMLStyleElement extends HTMLStyleElement { _max?: number; // internal tracker of the max # of rows we created } @@ -246,7 +246,7 @@ export class GridStack { /** @internal */ public _gsEventHandler = {}; /** @internal */ - protected _styles: GridCSSStyleSheet; + protected _styles: GridHTMLStyleElement; /** @internal flag to keep cells square during resize */ protected _isAutoCellHeight: boolean; /** @internal limit auto cell resizing method */ diff --git a/src/utils.ts b/src/utils.ts index 46358d5ef..e16c5804f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -158,7 +158,7 @@ export class Utils { * @param parent to insert the stylesheet as first child, * if none supplied it will be appended to the document head instead. */ - static createStylesheet(id: string, parent?: HTMLElement, options?: { nonce?: string }): CSSStyleSheet { + static createStylesheet(id: string, parent?: HTMLElement, options?: { nonce?: string }): HTMLStyleElement { let style: HTMLStyleElement = document.createElement('style'); const nonce = options?.nonce if (nonce) style.nonce = nonce @@ -178,7 +178,7 @@ export class Utils { } else { parent.insertBefore(style, parent.firstChild); } - return style.sheet as CSSStyleSheet; + return style; } /** removed the given stylesheet id */ @@ -189,12 +189,10 @@ export class Utils { } /** inserts a CSS rule */ - static addCSSRule(sheet: CSSStyleSheet, selector: string, rules: string): void { - if (typeof sheet.addRule === 'function') { - sheet.addRule(selector, rules); - } else if (typeof sheet.insertRule === 'function') { - sheet.insertRule(`${selector}{${rules}}`); - } + static addCSSRule(sheet: HTMLStyleElement, selector: string, rules: string): void { + // Rather than using sheet.insertRule, use text since it supports + // gridstacj node reparenting around in the DOM + sheet.textContent += `${selector} { ${rules} } `; } // eslint-disable-next-line @typescript-eslint/no-explicit-any From aaf6e43c3aec055fa9404782ed06471c81c7f3f9 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Fri, 16 Feb 2024 10:20:43 +0100 Subject: [PATCH 05/17] - New tag --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aacfe9dd6..85f79f60a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ionweb/gridstack", - "version": "10.0.1-ion2", + "version": "10.0.1-ion3", "license": "MIT", "author": "Alain Dumesny (https://github.com/adumesny)", "contributors": [ From 4dd3abbffb43b78b82dcb346e6349c6351d7c22a Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Thu, 14 Nov 2024 14:54:19 +0100 Subject: [PATCH 06/17] - Test fixes (PR: 2850) --- karma.conf.js | 5 +- spec/gridstack-engine-spec.ts | 86 +++++++++++++++++------------------ spec/gridstack-spec.ts | 10 ++-- spec/utils-spec.ts | 4 +- src/gridstack-engine.ts | 6 ++- tsconfig.json | 3 -- 6 files changed, 59 insertions(+), 55 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 2dd23ade0..64b4e5c9d 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -14,7 +14,10 @@ module.exports = function(config) { // } // } // }, - exclude: ["demo", "dist/ng"] // ignore dummy demo .ts files + exclude: ["demo", "dist/ng"], // ignore dummy demo .ts files + include: [ + "./spec/**/*-spec.ts" + ] }, // base path that will be used to resolve all patterns (eg. files, exclude) diff --git a/spec/gridstack-engine-spec.ts b/spec/gridstack-engine-spec.ts index 990cbcb43..63158a0de 100644 --- a/spec/gridstack-engine-spec.ts +++ b/spec/gridstack-engine-spec.ts @@ -8,8 +8,8 @@ describe('gridstack engine', function() { let e: any = GridStackEngine; let w: any = window; - let findNode = function(engine, id) { - return engine.nodes.find((i) => i.id === id); + let findNode = function(engine: GridStackEngine, id: string) { + return engine.nodes.find(i => i.id === id); }; it('should exist setup function.', function() { @@ -23,9 +23,9 @@ describe('gridstack engine', function() { engine = new GridStackEngine(); expect(engine.column).toEqual(12); expect(engine.float).toEqual(false); - expect(engine.maxRow).toEqual(undefined); + expect(engine.maxRow).toEqual(undefined!); expect(engine.nodes).toEqual([]); - expect(engine.batchMode).toEqual(undefined); + expect(engine.batchMode).toEqual(undefined!); expect((engine as any).onChange).toEqual(undefined); }); @@ -146,21 +146,21 @@ describe('gridstack engine', function() { beforeAll(function() { engine = new GridStackEngine({float:true}); engine.nodes = [ - engine.prepareNode({x: 0, y: 0, id: 1, _dirty: true}), - engine.prepareNode({x: 3, y: 2, w: 3, h: 2, id: 2, _dirty: true}), - engine.prepareNode({x: 3, y: 7, w: 3, h: 2, id: 3}) + engine.prepareNode({x: 0, y: 0, id: "1", _dirty: true}), + engine.prepareNode({x: 3, y: 2, w: 3, h: 2, id: "2", _dirty: true}), + engine.prepareNode({x: 3, y: 7, w: 3, h: 2, id: "3"}) ]; }); beforeEach(function() { - delete engine.batchMode; + delete (engine as any).batchMode; }); it('should return all dirty nodes', function() { let nodes = engine.getDirtyNodes(); expect(nodes.length).toEqual(2); - expect(nodes[0].id).toEqual(1); - expect(nodes[1].id).toEqual(2); + expect(nodes[0].id).toEqual("1"); + expect(nodes[1].id).toEqual("2"); }); it('should\'n clean nodes if batchMode true', function() { @@ -230,9 +230,9 @@ describe('gridstack engine', function() { spyOn(spy, 'callback'); engine = new GridStackEngine({float:true, onChange: spy.callback}); engine.nodes = [ - engine.prepareNode({x: 0, y: 0, id: 1, _dirty: true}), - engine.prepareNode({x: 3, y: 2, w: 3, h: 2, id: 2, _dirty: true}), - engine.prepareNode({x: 3, y: 7, w: 3, h: 2, id: 3}) + engine.prepareNode({x: 0, y: 0, id: "1", _dirty: true}), + engine.prepareNode({x: 3, y: 2, w: 3, h: 2, id: "2", _dirty: true}), + engine.prepareNode({x: 3, y: 7, w: 3, h: 2, id: "3"}) ]; }); @@ -262,50 +262,50 @@ describe('gridstack engine', function() { it('shouldn\'t pack one node with y coord eq 0', function() { engine.nodes = [ - {x: 0, y: 0, w:1, h:1, id: 1}, + {x: 0, y: 0, w:1, h:1, id: "1"}, ]; (engine as any)._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(findNode(engine, 1)._dirty).toBeFalsy(); + expect(findNode(engine, "1")).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(findNode(engine, "1")!._dirty).toBeFalsy(); }); it('should pack one node correctly', function() { engine.nodes = [ - {x: 0, y: 1, w:1, h:1, id: 1}, + {x: 0, y: 1, w:1, h:1, id: "1"}, ]; (engine as any)._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode(engine, "1")).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); }); it('should pack nodes correctly', function() { engine.nodes = [ - {x: 0, y: 1, w:1, h:1, id: 1}, - {x: 0, y: 5, w:1, h:1, id: 2}, + {x: 0, y: 1, w:1, h:1, id: "1"}, + {x: 0, y: 5, w:1, h:1, id: "2"}, ]; (engine as any)._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); + expect(findNode(engine, "1")).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode(engine, "2")).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); }); it('should pack nodes correctly', function() { engine.nodes = [ - {x: 0, y: 5, w:1, h:1, id: 1}, - {x: 0, y: 1, w:1, h:1, id: 2}, + {x: 0, y: 5, w:1, h:1, id: "1"}, + {x: 0, y: 1, w:1, h:1, id: "2"}, ]; (engine as any)._packNodes(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); + expect(findNode(engine, "2")).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode(engine, "1")).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); }); it('should respect locked nodes', function() { engine.nodes = [ - {x: 0, y: 1, w:1, h:1, id: 1, locked: true}, - {x: 0, y: 5, w:1, h:1, id: 2}, + {x: 0, y: 1, w:1, h:1, id: "1", locked: true}, + {x: 0, y: 5, w:1, h:1, id: "2"}, ]; (engine as any)._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, h: 1})); - expect(findNode(engine, 1)._dirty).toBeFalsy(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, _dirty: true})); + expect(findNode(engine, "1")).toEqual(jasmine.objectContaining({x: 0, y: 1, h: 1})); + expect(findNode(engine, "1")!._dirty).toBeFalsy(); + expect(findNode(engine, "2")).toEqual(jasmine.objectContaining({x: 0, y: 2, _dirty: true})); }); }); }); @@ -342,31 +342,31 @@ describe('gridstack engine', function() { }); it('should add widgets around locked one', function() { let nodes: GridStackNode[] = [ - {x: 0, y: 1, w: 12, h: 1, locked: true, noMove: true, noResize: true, id: 0}, - {x: 1, y: 0, w: 2, h: 3, id: 1} + {x: 0, y: 1, w: 12, h: 1, locked: true, noMove: true, noResize: true, id: "0"}, + {x: 1, y: 0, w: 2, h: 3, id: "1"} ]; // add locked item engine.addNode(nodes[0]) - expect(findNode(engine, 0)).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); + expect(findNode(engine, "0")).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); // add item that moves past locked one engine.addNode(nodes[1]) - expect(findNode(engine, 0)).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 1, y: 2, h: 3})); + expect(findNode(engine, "0")).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); + expect(findNode(engine, "1")).toEqual(jasmine.objectContaining({x: 1, y: 2, h: 3})); // locked item can still be moved directly (what user does) - let node0 = findNode(engine, 0); - expect(engine.moveNode(node0, {y:6})).toEqual(true); - expect(findNode(engine, 0)).toEqual(jasmine.objectContaining({x: 0, y: 6, h: 1, locked: true})); + let node0 = findNode(engine, "0"); + expect(engine.moveNode(node0!, {y:6})).toEqual(true); + expect(findNode(engine, "0")).toEqual(jasmine.objectContaining({x: 0, y: 6, h: 1, locked: true})); // but moves regular one past it - let node1 = findNode(engine, 1); - expect(engine.moveNode(node1, {x:6, y:6})).toEqual(true); + let node1 = findNode(engine, "1"); + expect(engine.moveNode(node1!, {x:6, y:6})).toEqual(true); expect(node1).toEqual(jasmine.objectContaining({x: 6, y: 7, w: 2, h: 3})); // but moves regular one before (gravity ON) engine.float = false; - expect(engine.moveNode(node1, {x:7, y:3})).toEqual(true); + expect(engine.moveNode(node1!, {x:7, y:3})).toEqual(true); expect(node1).toEqual(jasmine.objectContaining({x: 7, y: 0, w: 2, h: 3})); // but moves regular one before (gravity OFF) engine.float = true; - expect(engine.moveNode(node1, {x:7, y:3})).toEqual(true); + expect(engine.moveNode(node1!, {x:7, y:3})).toEqual(true); expect(node1).toEqual(jasmine.objectContaining({x: 7, y: 3, w: 2, h: 3})); }); }); diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 534ebe6db..76455aef3 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -330,7 +330,7 @@ describe('gridstack', function() { expect(parseInt(el2.getAttribute('gs-h'))).toBe(4); // add default 1x1 item to the end (1 column) - let el3 = grid.addWidget(); + let el3 = grid.addWidget({ }); expect(el3).not.toBe(null); expect(parseInt(el3.getAttribute('gs-x'))).toBe(0); expect(parseInt(el3.getAttribute('gs-y'))).toBe(6); @@ -747,7 +747,7 @@ describe('gridstack', function() { expect(grid.engine.nodes.length).toEqual(0); expect(document.getElementById('item2')).toBe(null); - let el3 = grid.addWidget(widgetHTML); + let el3 = grid.makeWidget(widgetHTML); expect(el3).not.toBe(null); grid.removeWidget(el3, false); expect(grid.engine.nodes.length).toEqual(0); @@ -903,7 +903,7 @@ describe('gridstack', function() { }); it('should autoPosition (empty options)', function() { let grid = GridStack.init(); - let widget = grid.addWidget(); + let widget = grid.addWidget({ }); expect(parseInt(widget.getAttribute('gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('gs-y'), 10)).toBe(0); @@ -933,7 +933,7 @@ describe('gridstack', function() { it('null options should clear x position', function() { let grid = GridStack.init({float: true}); let HTML = '
'; - let widget = grid.addWidget(HTML, {x:null, y:null, w:undefined}); + let widget = grid.makeWidget(HTML, {x:null, y:null, w:undefined}); expect(parseInt(widget.getAttribute('gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('gs-y'), 10)).toBe(0); @@ -941,7 +941,7 @@ describe('gridstack', function() { it('width attr should be retained', function() { // #1276 let grid = GridStack.init({float: true}); let HTML = '
'; - let widget = grid.addWidget(HTML, {x: 1, y: 5}); + let widget = grid.makeWidget(HTML, {x: 1, y: 5}); expect(parseInt(widget.getAttribute('gs-x'), 10)).toBe(1); expect(parseInt(widget.getAttribute('gs-y'), 10)).toBe(5); expect(parseInt(widget.getAttribute('gs-w'), 10)).toBe(3); diff --git a/spec/utils-spec.ts b/spec/utils-spec.ts index f3590e815..27d324b5a 100644 --- a/spec/utils-spec.ts +++ b/spec/utils-spec.ts @@ -79,7 +79,7 @@ describe('gridstack utils', function() { expect(Utils.parseHeight('12.5cm')).toEqual(jasmine.objectContaining({h: 12.5, unit: 'cm'})); expect(Utils.parseHeight('12.5mm')).toEqual(jasmine.objectContaining({h: 12.5, unit: 'mm'})); expect(Utils.parseHeight('12.5')).toEqual(jasmine.objectContaining({h: 12.5, unit: 'px'})); - expect(function() { Utils.parseHeight('12.5 df'); }).toThrowError('Invalid height'); + expect(function() { Utils.parseHeight('12.5 df'); }).toThrowError('Invalid height val = 12.5 df'); }); it('should parse negative height value', function() { @@ -94,7 +94,7 @@ describe('gridstack utils', function() { expect(Utils.parseHeight('-12.3cm')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'cm'})); expect(Utils.parseHeight('-12.3mm')).toEqual(jasmine.objectContaining({h: -12.3, unit: 'mm'})); expect(Utils.parseHeight('-12.5')).toEqual(jasmine.objectContaining({h: -12.5, unit: 'px'})); - expect(function() { Utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height'); + expect(function() { Utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height val = -12.5 df'); }); }); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index b925029d7..f6ab614a8 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -98,8 +98,12 @@ export class GridStackEngine { } let didMove = false; - let newOpt: GridStackMoveOpts = {nested: true, pack: false}; + const newOpt: GridStackMoveOpts = {nested: true, pack: false}; + let counter = 0; while (collide = collide || this.collide(node, area, opt.skip)) { // could collide with more than 1 item... so repeat for each + if (counter++ > this.nodes.length * 2) { + throw new Error("Infinite collide check"); + } let moved: boolean; // if colliding with a locked item OR moving down with top gravity (and collide could move up) -> skip past the collide, // but remember that skip down so we only do this once (and push others otherwise). diff --git a/tsconfig.json b/tsconfig.json index 5737f75f4..4b5c75da6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,9 +15,6 @@ "strict": false, "target": "ES2020" }, - "exclude": [ - "./src/**/*.spec.ts", - ], "include": [ "./src/**/*.ts" ], From 373692a71d9bc0d5992b8939eb0f68262125bd59 Mon Sep 17 00:00:00 2001 From: Luciano Martorella Date: Thu, 14 Nov 2024 12:32:44 +0100 Subject: [PATCH 07/17] - Removed dynamic stylesheet and migrated to vars --- doc/README.md | 1 - spec/gridstack-spec.ts | 33 +++-------- src/dd-resizable.ts | 3 +- src/gridstack.scss | 45 +++++++++++++++ src/gridstack.ts | 121 +++++++++++++---------------------------- src/types.ts | 5 +- 6 files changed, 95 insertions(+), 113 deletions(-) diff --git a/doc/README.md b/doc/README.md index 76a7f1b5c..16f13beed 100644 --- a/doc/README.md +++ b/doc/README.md @@ -126,7 +126,6 @@ GridStack will add it to the `