Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

gridstack

Package Overview
Dependencies
Maintainers
3
Versions
111
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gridstack - npm Package Compare versions

Comparing version 7.2.2 to 7.2.3

4

dist/angular/gridstack-item.component.ts
/**
* gridstack-item.component.ts 7.2.2
* gridstack-item.component.ts 7.2.3
* Copyright (c) 2022 Alain Dumesny - see GridStack root license

@@ -39,3 +39,3 @@ */

public get options(): GridStackNode {
return this.el.gridstackNode || this._options || {};
return this.el.gridstackNode || this._options || {el: this.el};
}

@@ -42,0 +42,0 @@

/**
* gridstack.component.ts 7.2.2
* gridstack.component.ts 7.2.3
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
*/
import { AfterContentInit, ChangeDetectionStrategy, Component, ComponentFactoryResolver, ContentChildren, ElementRef, EventEmitter, Input,
import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, Input,
NgZone, OnDestroy, OnInit, Output, QueryList, ViewChild, ViewContainerRef } from '@angular/core';

@@ -27,3 +27,3 @@ import { Subject } from 'rxjs';

<!-- content to show when when grid is empty, like instructions on how to add widgets -->
<ng-content select="[no-item-content]" *ngIf="showEmpty"></ng-content>
<ng-content select="[empty-content]" *ngIf="isEmpty"></ng-content>
<!-- where dynamic items go -->

@@ -52,3 +52,3 @@ <ng-template #container></ng-template>

/** true while ng-content with 'no-item-content' should be shown when last item is removed from a grid */
@Input() public showEmpty?: boolean;
@Input() public isEmpty?: boolean;

@@ -58,15 +58,18 @@ /** individual list of GridStackEvent callbacks handlers as output

* see https://github.com/gridstack/gridstack.js/blob/master/demo/events.js#L4
*
* Note: camel casing and 'CB' added at the end to prevent @angular-eslint/no-output-native
* eg: 'change' would trigger the raw CustomEvent so use different name.
*/
@Output() public added = new EventEmitter<nodesCB>();
@Output() public changeGS = new EventEmitter<nodesCB>(); // 'change' would trigger the raw CustomEvent so use different name
@Output() public disable = new EventEmitter<eventCB>();
@Output() public drag = new EventEmitter<elementCB>();
@Output() public dragstart = new EventEmitter<elementCB>();
@Output() public dragstop = new EventEmitter<elementCB>();
@Output() public dropped = new EventEmitter<droppedCB>();
@Output() public enable = new EventEmitter<eventCB>();
@Output() public removed = new EventEmitter<nodesCB>();
@Output() public resize = new EventEmitter<elementCB>();
@Output() public resizestart = new EventEmitter<elementCB>();
@Output() public resizestop = new EventEmitter<elementCB>();
@Output() public addedCB = new EventEmitter<nodesCB>();
@Output() public changeCB = new EventEmitter<nodesCB>();
@Output() public disableCB = new EventEmitter<eventCB>();
@Output() public dragCB = new EventEmitter<elementCB>();
@Output() public dragStartCB = new EventEmitter<elementCB>();
@Output() public dragStopCB = new EventEmitter<elementCB>();
@Output() public droppedCB = new EventEmitter<droppedCB>();
@Output() public enableCB = new EventEmitter<eventCB>();
@Output() public removedCB = new EventEmitter<nodesCB>();
@Output() public resizeCB = new EventEmitter<elementCB>();
@Output() public resizeStartCB = new EventEmitter<elementCB>();
@Output() public resizeStopCB = new EventEmitter<elementCB>();

@@ -88,3 +91,2 @@ /** return the native element that contains grid specific fields as well */

private readonly elementRef: ElementRef<GridHTMLElement>,
private readonly resolver: ComponentFactoryResolver,
) {

@@ -142,3 +144,3 @@ }

if (!this.grid) return;
this.showEmpty = !this.grid.engine.nodes.length;
this.isEmpty = !this.grid.engine.nodes.length;
}

@@ -150,14 +152,14 @@

grid
.on('added', (event: Event, nodes: GridStackNode[]) => this.ngZone.run(() => {this.added.emit({event, nodes}); this.checkEmpty(); }))
.on('change', (event: Event, nodes: GridStackNode[]) => this.ngZone.run(() => this.changeGS.emit({event, nodes})))
.on('disable', (event: Event) => this.ngZone.run(() => this.disable.emit({event})))
.on('drag', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.drag.emit({event, el})))
.on('dragstart', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.dragstart.emit({event, el})))
.on('dragstop', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.dragstop.emit({event, el})))
.on('dropped', (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => this.ngZone.run(() => this.dropped.emit({event, previousNode, newNode})))
.on('enable', (event: Event) => this.ngZone.run(() => this.enable.emit({event})))
.on('removed', (event: Event, nodes: GridStackNode[]) => this.ngZone.run(() => {this.removed.emit({event, nodes}); this.checkEmpty(); }))
.on('resize', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.resize.emit({event, el})))
.on('resizestart', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.resizestart.emit({event, el})))
.on('resizestop', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.resizestop.emit({event, el})))
.on('added', (event: Event, nodes: GridStackNode[]) => this.ngZone.run(() => { this.checkEmpty(); this.addedCB.emit({event, nodes}); }))
.on('change', (event: Event, nodes: GridStackNode[]) => this.ngZone.run(() => this.changeCB.emit({event, nodes})))
.on('disable', (event: Event) => this.ngZone.run(() => this.disableCB.emit({event})))
.on('drag', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.dragCB.emit({event, el})))
.on('dragstart', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.dragStartCB.emit({event, el})))
.on('dragstop', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.dragStopCB.emit({event, el})))
.on('dropped', (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => this.ngZone.run(() => this.droppedCB.emit({event, previousNode, newNode})))
.on('enable', (event: Event) => this.ngZone.run(() => this.enableCB.emit({event})))
.on('removed', (event: Event, nodes: GridStackNode[]) => this.ngZone.run(() => { this.checkEmpty(); this.removedCB.emit({event, nodes}); }))
.on('resize', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.resizeCB.emit({event, el})))
.on('resizestart', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.resizeStartCB.emit({event, el})))
.on('resizestop', (event: Event, el: GridItemHTMLElement) => this.ngZone.run(() => this.resizeStopCB.emit({event, el})))
}

@@ -170,10 +172,8 @@

// create the grid item dynamically - see https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
// and https://netbasal.com/dynamically-creating-components-with-angular-a7346f4a982d#.irxd1nulp
const factory = this.resolver.resolveComponentFactory(GridstackItemComponent);
const gridItem = this.container.createComponent(factory).instance;
return gridItem.el;
const gridItem = this.container.createComponent(GridstackItemComponent)?.instance;
return gridItem?.el;
}
// if (this.outsideAddRemove) this.outsideAddRemove(g, w, add);
// if (this.outsideAddRemove) this.outsideAddRemove(g, w, add); // TODO: ?
return;
}
}

@@ -12,3 +12,3 @@ # Angular wrapper

```typescript
```javascript
import { GridStackOptions, GridStackWidget } from 'gridstack';

@@ -34,4 +34,4 @@ import { GridstackComponent, nodesCB } from './gridstack.component';

HTML
```angular2html
<gridstack [options]="gridOptions" (changeGS)="onChange($event)">
```html
<gridstack [options]="gridOptions" (changeCB)="onChange($event)">
</gridstack>

@@ -45,3 +45,3 @@ ```

```typescript
```javascript
import { GridStackOptions, GridStackWidget } from 'gridstack';

@@ -72,3 +72,3 @@ import { GridstackComponent, nodesCB } from './gridstack.component';

HTML
```angular2html
```html
<gridstack [options]="gridOptions" (changeCB)="onChange($event)">

@@ -90,2 +90,3 @@ <gridstack-item *ngFor="let n of items; trackBy: identify" [options]="n">

- Code isn't compiled into a lib YET. You'll need to copy those files. Let me know (slack) if you are using it...
- BUG: content doesn't appear on new widget until widget is moved around (or another created that pushes it). Need to force angular detection changes...

@@ -92,0 +93,0 @@ ## ngFor Caveats

/**
* dd-base-impl.ts 7.2.2
* dd-base-impl.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-base-impl.ts 7.2.2
* dd-base-impl.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-draggable.ts 7.2.2
* dd-draggable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-draggable.ts 7.2.2
* dd-draggable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-droppable.ts 7.2.2
* dd-droppable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-droppable.ts 7.2.2
* dd-droppable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-elements.ts 7.2.2
* dd-elements.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-elements.ts 7.2.2
* dd-elements.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-gridstack.ts 7.2.2
* dd-gridstack.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-gridstack.ts 7.2.2
* dd-gridstack.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-manager.ts 7.2.2
* dd-manager.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-manager.ts 7.2.2
* dd-manager.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-resizable-handle.ts 7.2.2
* dd-resizable-handle.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-resizable-handle.ts 7.2.2
* dd-resizable-handle.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-resizable.ts 7.2.2
* dd-resizable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-resizable.ts 7.2.2
* dd-resizable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* touch.ts 7.2.2
* touch.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* touch.ts 7.2.2
* touch.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-base-impl.ts 7.2.2
* dd-base-impl.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-base-impl.ts 7.2.2
* dd-base-impl.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-draggable.ts 7.2.2
* dd-draggable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-draggable.ts 7.2.2
* dd-draggable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-droppable.ts 7.2.2
* dd-droppable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-droppable.ts 7.2.2
* dd-droppable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-elements.ts 7.2.2
* dd-elements.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-elements.ts 7.2.2
* dd-elements.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-gridstack.ts 7.2.2
* dd-gridstack.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-gridstack.ts 7.2.2
* dd-gridstack.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-manager.ts 7.2.2
* dd-manager.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-manager.ts 7.2.2
* dd-manager.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-resizable-handle.ts 7.2.2
* dd-resizable-handle.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-resizable-handle.ts 7.2.2
* dd-resizable-handle.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* dd-resizable.ts 7.2.2
* dd-resizable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* dd-resizable.ts 7.2.2
* dd-resizable.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* touch.ts 7.2.2
* touch.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* touch.ts 7.2.2
* touch.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/*!
* GridStack 7.2.2
* GridStack 7.2.3
* https://gridstackjs.com/

@@ -4,0 +4,0 @@ *

/**
* gridstack-engine.ts 7.2.2
* gridstack-engine.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* gridstack-engine.ts 7.2.2
* gridstack-engine.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/**
* gridstack-poly.ts 7.2.2 used for IE and older browser support (not supported in v2-v4.3.1, but again in v4.4)
* gridstack-poly.ts 7.2.3 used for IE and older browser support (not supported in v2-v4.3.1, but again in v4.4)
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

/*!
* GridStack 7.2.2
* GridStack 7.2.3
* https://gridstackjs.com/

@@ -4,0 +4,0 @@ *

/**
* types.ts 7.2.2
* types.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -248,2 +248,4 @@ */

pause?: boolean | number;
/** default to `true` */
scroll?: boolean;
}

@@ -250,0 +252,0 @@ export interface DDDragInOpt extends DDDragOpt {

"use strict";
/**
* types.ts 7.2.2
* types.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -17,3 +17,3 @@ */

column: 12,
draggable: { handle: '.grid-stack-item-content', appendTo: 'body' },
draggable: { handle: '.grid-stack-item-content', appendTo: 'body', scroll: true },
handle: '.grid-stack-item-content',

@@ -20,0 +20,0 @@ itemClass: 'grid-stack-item',

/**
* utils.ts 7.2.2
* utils.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* utils.ts 7.2.2
* utils.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/*!
* GridStack 7.2.2
* GridStack 7.2.3
* https://gridstackjs.com/

@@ -4,0 +4,0 @@ *

/**
* gridstack-engine.ts 7.2.2
* gridstack-engine.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* gridstack-engine.ts 7.2.2
* gridstack-engine.ts 7.2.3
* Copyright (c) 2021-2022 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

/*!
* GridStack 7.2.2
* GridStack 7.2.3
* https://gridstackjs.com/

@@ -4,0 +4,0 @@ *

/**
* types.ts 7.2.2
* types.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -248,2 +248,4 @@ */

pause?: boolean | number;
/** default to `true` */
scroll?: boolean;
}

@@ -250,0 +252,0 @@ export interface DDDragInOpt extends DDDragOpt {

"use strict";
/**
* types.ts 7.2.2
* types.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -17,3 +17,3 @@ */

column: 12,
draggable: { handle: '.grid-stack-item-content', appendTo: 'body' },
draggable: { handle: '.grid-stack-item-content', appendTo: 'body', scroll: true },
handle: '.grid-stack-item-content',

@@ -20,0 +20,0 @@ itemClass: 'grid-stack-item',

/**
* utils.ts 7.2.2
* utils.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -4,0 +4,0 @@ */

"use strict";
/**
* utils.ts 7.2.2
* utils.ts 7.2.3
* Copyright (c) 2021 Alain Dumesny - see GridStack root license

@@ -5,0 +5,0 @@ */

@@ -8,2 +8,3 @@ Change log

- [7.2.3 (2023-02-02)](#723-2023-02-02)
- [7.2.2 (2023-01-16)](#722-2023-01-16)

@@ -84,2 +85,6 @@ - [7.2.1 (2023-01-14)](#721-2023-01-14)

## 7.2.3 (2023-02-02)
* fix `addWidget()` to handle passing just {el} which was needed for Angular HMTL template demo
* add `opts.draggable.scroll` back to disable scrolling. Thank you [@VincentMolinie](https://github.com/VincentMolinie)
## 7.2.2 (2023-01-16)

@@ -86,0 +91,0 @@ * fix [#2171](https://github.com/gridstack/gridstack.js/issues/2171) `save()` nested grid has extra nested children & options

@@ -105,3 +105,3 @@ gridstack.js API

* **Note2**: instead of 'clone' you can also pass your own function (get passed the event).
- `draggable` - allows to override draggable options - see `DDDragOpt`. (default: `{handle: '.grid-stack-item-content', appendTo: 'body'}`)
- `draggable` - allows to override draggable options - see `DDDragOpt`. (default: `{handle: '.grid-stack-item-content', appendTo: 'body', scroll: true}`)
- `dragOut` to let user drag nested grid items out of a parent or not (default false) See [example](http://gridstackjs.com/demo/nested.html)

@@ -138,2 +138,3 @@ - `engineClass` - the type of engine to create (so you can subclass) default to GridStackEngine

- `pause`?: boolean | number - if set (true | msec), dragging placement (collision) will only happen after a pause by the user. Note: this is Global
- `scroll`?: boolean - default to 'true', enable or disable the scroll when an element is dragged on bottom or top of the grid.

@@ -140,0 +141,0 @@ ### DDDragInOpt extends DDDragOpt

{
"name": "gridstack",
"version": "7.2.2",
"version": "7.2.3",
"license": "MIT",
"author": "Alain Dumesny <alaind831+github@gmail.com> (https://github.com/adumesny)",
"contributors": [
"Pavel Reznikov <pashka.reznikov@gmail.com>",
"Dylan Weiss <dylan.weiss@gmail.com> (https://dylandreams.com)"
],
"description": "TypeScript/JS lib for dashboard layout and creation, responsive, mobile support, no external dependencies, with many wrappers (React, Angular, Vue, Ember, knockout...)",

@@ -49,8 +55,2 @@ "main": "./dist/gridstack.js",

],
"author": "Alain Dumesny <alaind831+github@gmail.com> (https://github.com/adumesny)",
"contributors": [
"Pavel Reznikov <pashka.reznikov@gmail.com>",
"Dylan Weiss <dylan.weiss@gmail.com> (https://dylandreams.com)"
],
"license": "MIT",
"bugs": {

@@ -60,2 +60,3 @@ "url": "https://github.com/gridstack/gridstack.js/issues"

"homepage": "http://gridstackjs.com/",
"dependencies": {},
"devDependencies": {

@@ -88,3 +89,2 @@ "@types/jasmine": "^3.5.9",

"protractor": "^7.0.0",
"puppeteer": "^5.4.1",
"sass": "^1.42.1",

@@ -97,2 +97,2 @@ "serve-static": "^1.14.1",

}
}
}

@@ -7,3 +7,3 @@ # gridstack.js

Mobile-friendly modern Typescript library for dashboard layout and creation. Making a drag-and-drop, multi-column responsive dashboard has never been easier. Has multiple bindings and works great with [React](https://reactjs.org/), [Vue](https://vuejs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others (see [frameworks](#gridstackjs-for-specific-frameworks) section).
Mobile-friendly modern Typescript library for dashboard layout and creation. Making a drag-and-drop, multi-column responsive dashboard has never been easier. Has multiple bindings and works great with [React](https://reactjs.org/), [Vue](https://vuejs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others (see [frameworks](#specific-frameworks) section).

@@ -32,2 +32,3 @@ Inspired by no-longer maintained gridster, built with love.

- [Requirements](#requirements)
- [Specific frameworks](#specific-frameworks)
- [Extend Library](#extend-library)

@@ -39,3 +40,2 @@ - [Extend Engine](#extend-engine)

- [Touch devices support](#touch-devices-support)
- [gridstack.js for specific frameworks](#gridstackjs-for-specific-frameworks)
- [Migrating](#migrating)

@@ -148,2 +148,16 @@ - [Migrating to v0.6](#migrating-to-v06)

## Specific frameworks
search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come...
- **Angular**: we now ship out of the box with Angular wrapper components - see <a href="https://github.com/gridstack/gridstack.js/tree/master/demo/angular/src/app" target="_blank">Angular Demo</a>.
- **Angular9**: [lb-gridstack](https://github.com/pfms84/lb-gridstack) Note: very old v0.3 gridstack instance so recommend for **concept ONLY if you wish to use directive instead**.
- **AngularJS**: [gridstack-angular](https://github.com/kdietrich/gridstack-angular)
- **Ember**: [ember-gridstack](https://github.com/yahoo/ember-gridstack)
- **knockout**: see [demo](https://gridstackjs.com/demo/knockout.html) using component, but check [custom bindings ticket](https://github.com/gridstack/gridstack.js/issues/465) which is likely better approach.
- **Rails**: [gridstack-js-rails](https://github.com/randoum/gridstack-js-rails)
- **React**: see [demo](https://gridstackjs.com/demo/react.html) with [src](https://github.com/gridstack/gridstack.js/tree/master/demo/react.html), or [react-gridstack-example](https://github.com/Inder2108/react-gridstack-example/tree/master/src/App.js), or read on what [hooks to use](https://github.com/gridstack/gridstack.js/issues/735#issuecomment-329888796)
- **Vue**: see [demo](https://gridstackjs.com/demo/vue3js.html) with [v3 src](https://github.com/gridstack/gridstack.js/tree/master/demo/vue3js.html) or [v2 src](https://github.com/gridstack/gridstack.js/tree/master/demo/vue2js.html)
- **Aurelia**: [aurelia-gridstack](https://github.com/aurelia-ui-toolkits/aurelia-gridstack), see [demo](https://aurelia-ui-toolkits.github.io/aurelia-gridstack/)
## Extend Library

@@ -296,16 +310,2 @@

# gridstack.js for specific frameworks
search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come...
- **Angular**: we now ship out of the box with Angular wrapper components - see <a href="https://github.com/gridstack/gridstack.js/tree/master/demo/angular/src/app" target="_blank">Angular Demo</a>.
- **Angular9**: [lb-gridstack](https://github.com/pfms84/lb-gridstack) Note: very old v0.3 gridstack instance so recommend for **concept ONLY if you wish to use directive instead**.
- **AngularJS**: [gridstack-angular](https://github.com/kdietrich/gridstack-angular)
- **Ember**: [ember-gridstack](https://github.com/yahoo/ember-gridstack)
- **knockout**: see [demo](https://gridstackjs.com/demo/knockout.html) using component, but check [custom bindings ticket](https://github.com/gridstack/gridstack.js/issues/465) which is likely better approach.
- **Rails**: [gridstack-js-rails](https://github.com/randoum/gridstack-js-rails)
- **React**: see [demo](https://gridstackjs.com/demo/react.html) with [src](https://github.com/gridstack/gridstack.js/tree/master/demo/react.html), or [react-gridstack-example](https://github.com/Inder2108/react-gridstack-example/tree/master/src/App.js), or read on what [hooks to use](https://github.com/gridstack/gridstack.js/issues/735#issuecomment-329888796)
- **Vue**: see [demo](https://gridstackjs.com/demo/vue3js.html) with [v3 src](https://github.com/gridstack/gridstack.js/tree/master/demo/vue3js.html) or [v2 src](https://github.com/gridstack/gridstack.js/tree/master/demo/vue2js.html)
- **Aurelia**: [aurelia-gridstack](https://github.com/aurelia-ui-toolkits/aurelia-gridstack), see [demo](https://aurelia-ui-toolkits.github.io/aurelia-gridstack/)
# Migrating

@@ -312,0 +312,0 @@ ## Migrating to v0.6

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc