diff --git a/README.md b/README.md index 2b3927707..f34f35911 100644 --- a/README.md +++ b/README.md @@ -1,598 +1,6 @@ # gridstack.js -[![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) -[![Coverage Status](https://coveralls.io/repos/github/gridstack/gridstack.js/badge.svg?branch=develop)](https://coveralls.io/github/gridstack/gridstack.js?branch=develop) -[![downloads](https://img.shields.io/npm/dm/gridstack.svg)](https://www.npmjs.com/package/gridstack) +[![NPM version](https://img.s -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 [Angular](./angular/README.md) (included), [React](./react/README.md) (included), [Vue](./vue/README.md) (included), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others (see [frameworks](#specific-frameworks) section). - -Inspired by no-longer maintained gridster, built with love. - -Check http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/). - -If you find this lib useful, please donate [PayPal](https://www.paypal.me/alaind831) (use **“send to a friend”** to avoid 3% fee) or [Venmo](https://www.venmo.com/adumesny) (adumesny) and help support it! - -[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/alaind831) -[![Donate](https://img.shields.io/badge/Donate-Venmo-g.svg)](https://www.venmo.com/adumesny) - -Join us on Slack: [https://gridstackjs.slack.com](https://join.slack.com/t/gridstackjs/shared_invite/zt-3978nsff6-HDNE_N45DydP36NBSV9JFQ) - - - - -**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - -- [Demo and API Documentation](#demo-and-api-documentation) -- [Usage](#usage) - - [Install](#install) - - [Include](#include) - - [Basic usage](#basic-usage) - - [Requirements](#requirements) - - [Specific frameworks](#specific-frameworks) - - [Extend Library](#extend-library) - - [Extend Engine](#extend-engine) - - [Change grid columns](#change-grid-columns) - - [Custom columns CSS (OLD, not needed with v12+)](#custom-columns-css-old-not-needed-with-v12) - - [Override resizable/draggable options](#override-resizabledraggable-options) - - [Touch devices support](#touch-devices-support) - - [Printing Support](#printing-support) -- [Migrating](#migrating) - - [Migrating to v0.6](#migrating-to-v06) - - [Migrating to v1](#migrating-to-v1) - - [Migrating to v2](#migrating-to-v2) - - [Migrating to v3](#migrating-to-v3) - - [Migrating to v4](#migrating-to-v4) - - [Migrating to v5](#migrating-to-v5) - - [Migrating to v6](#migrating-to-v6) - - [Migrating to v7](#migrating-to-v7) - - [Migrating to v8](#migrating-to-v8) - - [Migrating to v9](#migrating-to-v9) - - [Migrating to v10](#migrating-to-v10) - - [Migrating to v11](#migrating-to-v11) - - [Migrating to v12](#migrating-to-v12) - - [Migrating to v13](#migrating-to-v13) -- [jQuery Application](#jquery-application) -- [Changes](#changes) -- [Usage Trend](#usage-trend) -- [The Team](#the-team) - - - - -# Demo and API Documentation - -Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/), and complete [API documentation](https://gridstack.github.io/gridstack.js/doc/html/) ([markdown](https://github.com/gridstack/gridstack.js/tree/master/doc/API.md)) - -# Usage - -## Install -[![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) - -```js -yarn add gridstack -// or -npm install --save gridstack -``` - -## Include - -ES6 or Typescript - -```js -import 'gridstack/dist/gridstack.min.css'; -import { GridStack } from 'gridstack'; -``` - -Alternatively (single combined file, notice the -all.js) in html - -```html - - -``` - -**Note**: IE support was dropped in v2, but restored in v4.4 by an external contributor (I have no interest in testing+supporting obsolete browser so this likely will break again in the future) and DROPPED again in v12 (css variable needed). -You can use the es5 files and polyfill (larger) for older browser instead. For example: -```html - - - -``` - - -## Basic usage - -creating items dynamically... - -```js -// ...in your HTML -
- -// ...in your script -var grid = GridStack.init(); -grid.addWidget({w: 2, content: 'item 1'}); -``` - -... or creating from list - -```js -// using serialize data instead of .addWidget() -const serializedData = [ - {x: 0, y: 0, w: 2, h: 2}, - {x: 2, y: 3, w: 3, content: 'item 2'}, - {x: 1, y: 3} -]; - -grid.load(serializedData); -``` - -... or DOM created items - -```js -// ...in your HTML -
-
-
Item 1
-
-
-
Item 2 wider
-
-
- -// ...in your script -GridStack.init(); -``` - -...or see list of all [API and options](https://github.com/gridstack/gridstack.js/tree/master/doc) available. - -see [stackblitz sample](https://stackblitz.com/edit/gridstack-demo) as running example too. - -## Requirements - -GridStack no longer requires external dependencies as of v1 (lodash was removed in v0.5 and jquery API in v1). v3 is a complete HTML5 re-write removing need for jquery. v6 is native mouse and touch event for mobile support, and no longer have jquery-ui version. All you need to include now is `gridstack-all.js` and `gridstack.min.css` (layouts are done using CSS column based %). - -## Specific frameworks - -search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... - -- **Angular**: we ship out of the box an Angular wrapper - see Angular Component. -- **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**. Code has **not been vented** at as I use components. -- **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**: we ship out of the box a React wrapper - see React Component. -- **Vue**: we ship out of the box a Vue 3 wrapper - see Vue Component. -- **Aurelia**: [aurelia-gridstack](https://github.com/aurelia-ui-toolkits/aurelia-gridstack), see [demo](https://aurelia-ui-toolkits.github.io/aurelia-gridstack/) - -## Extend Library - -You can easily extend or patch gridstack with code like this: - -```js -// extend gridstack with our own custom method -GridStack.prototype.printCount = function() { - console.log('grid has ' + this.engine.nodes.length + ' items'); -}; - -let grid = GridStack.init(); - -// you can now call -grid.printCount(); -``` - -## Extend Engine - -You can now (5.1+) easily create your own layout engine to further customize your usage. Here is a typescript example - -```ts -import { GridStack, GridStackEngine, GridStackNode, GridStackMoveOpts } from 'gridstack'; - -class CustomEngine extends GridStackEngine { - - /** refined this to move the node to the given new location */ - public override moveNode(node: GridStackNode, o: GridStackMoveOpts): boolean { - // keep the same original X and Width and let base do it all... - o.x = node.x; - o.w = node.w; - return super.moveNode(node, o); - } -} - -GridStack.registerEngine(CustomEngine); // globally set our custom class -``` - -## Change grid columns - -GridStack makes it very easy if you need [1-12] columns out of the box (default is 12), but you always need **2 things** if you need to customize this: - -1) Change the `column` grid option when creating a grid to your number N -```js -GridStack.init( {column: N} ); -``` - -NOTE: step 2 is OLD and not needed with v12+ which uses CSS variables instead of classes - -2) also include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. -```html - - - -
...
-``` - -Note: class `.grid-stack-N` will automatically be added and we include `gridstack-extra.min.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next). - -See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) with 6 columns - -## Custom columns CSS (OLD, not needed with v12+) - -NOTE: step is OLD and not needed with v12+ which uses CSS variables instead of classes - -If you need > 12 columns or want to generate the CSS manually you will need to generate CSS rules for `.grid-stack-item[gs-w="X"]` and `.grid-stack-item[gs-x="X"]`. - -For instance for 4-column grid you need CSS to be: - -```css -.gs-4 > .grid-stack-item[gs-x="1"] { left: 25% } -.gs-4 > .grid-stack-item[gs-x="2"] { left: 50% } -.gs-4 > .grid-stack-item[gs-x="3"] { left: 75% } - -.gs-4 > .grid-stack-item { width: 25% } -.gs-4 > .grid-stack-item[gs-w="2"] { width: 50% } -.gs-4 > .grid-stack-item[gs-w="3"] { width: 75% } -.gs-4 > .grid-stack-item[gs-w="4"] { width: 100% } -``` - -Better yet, here is a SCSS code snippet, you can use sites like [sassmeister.com](https://www.sassmeister.com/) to generate the CSS for you instead: - -```scss -$columns: 20; -@function fixed($float) { - @return round($float * 1000) / 1000; // total 2+3 digits being % -} -.gs-#{$columns} > .grid-stack-item { - - width: fixed(100% / $columns); - - @for $i from 1 through $columns - 1 { - &[gs-x='#{$i}'] { left: fixed((100% / $columns) * $i); } - &[gs-w='#{$i+1}'] { width: fixed((100% / $columns) * ($i+1)); } - } -} -``` - -you can also use the SCSS [src/gridstack-extra.scss](https://github.com/gridstack/gridstack.js/tree/master/src/gridstack-extra.scss) included in NPM package and modify to add more columns. - -Sample gulp command for 30 columns: -```js -gulp.src('node_modules/gridstack/dist/src/gridstack-extra.scss') - .pipe(replace('$start: 2 !default;','$start: 30;')) - .pipe(replace('$end: 11 !default;','$end: 30;')) - .pipe(sass({outputStyle: 'compressed'})) - .pipe(rename({extname: '.min.css'})) - .pipe(gulp.dest('dist/css')) -``` - -## Override resizable/draggable options - -You can override default `resizable`/`draggable` options. For instance to enable other then bottom right resizing handle -you can init gridstack like: - -```js -GridStack.init({ - resizable: { - handles: 'e,se,s,sw,w' - } -}); -``` - -## Touch devices support - -gridstack v6+ now support mobile out of the box, with the addition of native touch event (along with mouse event) for drag&drop and resize. -Older versions (3.2+) required the jq version with added touch punch, but doesn't work well with nested grids. - -This option is now the default: - -```js -let options = { - alwaysShowResizeHandle: 'mobile' // true if we're on mobile devices -}; -GridStack.init(options); -``` - -See [example](http://gridstack.github.io/gridstack.js/demo/mobile.html). - -## Printing Support - -GridStack v13.1+ introduces native printing support with two distinct layout modes to handle the complexities of browser print engines (like Chrome's Flexbox/Grid pagination bug). - -- **Flow Mode (Default):** Items auto-size their height and flow naturally across pages without slicing. Best for dashboards with tall widgets that span multiple pages. -- **Exact Mode (`printMode: 'exact'`):** Uses CSS Grid to perfectly respect visual coordinates and dimensions, but may slice tall items or push entire rows to the next page. Best for single-page dashboards. - -See [print_README.md](./print_README.md) for full details, examples, and how to use widget `PrintOptions` (like `pageBreak` and `orientation`). - -# Migrating -## Migrating to v0.6 - -starting in 0.6.x `change` event are no longer sent (for pretty much most nodes!) when an item is just added/deleted unless it also changes other nodes (was incorrect and causing inefficiencies). You may need to track `added|removed` [events](https://github.com/gridstack/gridstack.js/tree/master/doc#events) if you didn't and relied on the old broken behavior. - -## Migrating to v1 - -v1.0.0 removed Jquery from the API and external dependencies, which will require some code changes. Here is a list of the changes: - -0. see previous step if not on v0.6 already - -1. your code only needs to `import GridStack from 'gridstack'` or include `gridstack.all.js` and `gristack.css` (don't include other JS) and is recommended you do that as internal dependencies will change over time. If you are jquery based, see [jquery app](#jquery-application) section. - -2. code change: - -**OLD** initializing code + adding a widget + adding an event: -```js -// initialization returned Jquery element, requiring second call to get GridStack var -var grid = $('.grid-stack').gridstack(opts?).data('gridstack'); - -// returned Jquery element -grid.addWidget($('
test
'), undefined, undefined, 2, undefined, true); - -// jquery event handler -$('.grid-stack').on('added', function(e, items) {/* items contains info */}); - -// grid access after init -var grid = $('.grid-stack').data('gridstack'); -``` -**NEW** -```js -// element identifier defaults to '.grid-stack', returns the grid -// Note: for Typescript use window.GridStack.init() until next native 2.x TS version -var grid = GridStack.init(opts?, element?); - -// returns DOM element -grid.addWidget('
test
', {width: 2}); -// Note: in 3.x it's ever simpler -// grid.addWidget({w:2, content: 'test'}) - -// event handler -grid.on('added', function(e, items) {/* items contains info */}); - -// grid access after init -var grid = el.gridstack; // where el = document.querySelector('.grid-stack') or other ways... -``` -Other rename changes - -```js -`GridStackUI` --> `GridStack` -`GridStackUI.GridStackEngine` --> `GridStack.Engine` -`grid.container` (jquery grid wrapper) --> `grid.el` // (grid DOM element) -`grid.grid` (GridStackEngine) --> `grid.engine` -`grid.setColumn(N)` --> `grid.column(N)` and `grid.column()` // to get value, old API still supported though -``` - -Recommend looking at the [many samples](./demo) for more code examples. - -## Migrating to v2 - -make sure to read v1 migration first! - -v2 is a Typescript rewrite of 1.x, removing all jquery events, using classes and overall code cleanup to support ES6 modules. Your code might need to change from 1.x - -1. In general methods that used no args (getter) vs setter can't be used in TS when the arguments differ (set/get are also not function calls so API would have changed). Instead we decided to have all set methods return `GridStack` to they can be chain-able (ex: `grid.float(true).cellHeight(10).column(6)`). Also legacy methods that used to take many parameters will now take a single object (typically `GridStackOptions` or `GridStackWidget`). - -```js -`addWidget(el, x, y, width, height)` --> `addWidget(el, {with: 2})` -// Note: in 2.1.x you can now just do addWidget({with: 2, content: "text"}) -`float()` --> `getFloat()` // to get value -`cellHeight()` --> `getCellHeight()` // to get value -`verticalMargin` --> `margin` // grid options and API that applies to all 4 sides. -`verticalMargin()` --> `getMargin()` // to get value -``` - -2. event signatures are generic and not jquery-ui dependent anymore. `gsresizestop` has been removed as `resizestop|dragstop` are now called **after** the DOM attributes have been updated. - -3. `oneColumnMode` would trigger when `window.width` < 768px by default. We now check for grid width instead (more correct and supports nesting). You might need to adjust grid `oneColumnSize` or `disableOneColumnMode`. - -**Note:** 2.x no longer support legacy IE11 and older due to using more compact ES6 output and typecsript native code. You will need to stay at 1.x - -## Migrating to v3 - -make sure to read v2 migration first! - -v3 has a new HTML5 drag&drop plugging (63k total, all native code), while still allowing you to use the legacy jquery-ui version instead (188k), or a new static grid version (34k, no user drag&drop but full API support). You will need to decide which version to use as `gridstack.all.js` no longer exist (same is now `gridstack-jq.js`) - see [include info](#include). - -**NOTE**: HTML5 version is almost on parity with the old jquery-ui based drag&drop. the `containment` (prevent a child from being dragged outside it's parent) and `revert` (not clear what it is for yet) are not yet implemented in initial release of v3.0.0.
-Also mobile devices don't support h5 `drag` events (will need to handle `touch`) whereas v3.2 jq version now now supports out of the box (see [v3.2 release](https://github.com/gridstack/gridstack.js/releases/tag/v3.2.0)) - -Breaking changes: - -1. include (as mentioned) need to change - -2. `GridStack.update(el, opt)` now takes single `GridStackWidget` options instead of only supporting (x,y,w,h) BUT legacy call in JS will continue working the same for now. That method is a complete re-write and does the right constrain and updates now for all the available params. - -3. `locked()`, `move()`, `resize()`, `minWidth()`, `minHeight()`, `maxWidth()`, `maxHeight()` methods are hidden from Typescript (JS can still call for now) as they are just 1 liner wrapper around `update(el, opt)` anyway and will go away soon. (ex: `move(el, x, y)` => `update(el, {x, y})`) - -4. item attribute like `data-gs-min-width` is now `gs-min-w`. We removed 'data-' from all attributes, and shorten 'width|height' to just 'w|h' to require less typing and more efficient (2k saved in .js alone!). - -5. `GridStackWidget` used in most API `width|height|minWidth|minHeight|maxWidth|maxHeight` are now shorter `w|h|minW|minH|maxW|maxH` as well - -## Migrating to v4 - -make sure to read v3 migration first! - -v4 is a complete re-write of the collision and drag in/out heuristics to fix some very long standing request & bugs. It also greatly improved usability. Read the release notes for more detail. - -**Unlikely** Breaking Changes (internal usage): - -1. `removeTimeout` was removed (feedback over trash will be immediate - actual removal still on mouse up) - -2. the following `GridStackEngine` methods changed (used internally, doesn't affect `GridStack` public API) - -```js -// moved to 3 methods with new option params to support new code and pixel coverage check -`collision()` -> `collide(), collideAll(), collideCoverage()` -`moveNodeCheck(node, x, y, w, h)` -> `moveNodeCheck(node, opt: GridStackMoveOpts)` -`isNodeChangedPosition(node, x, y, w, h)` -> `changedPosConstrain(node, opt: GridStackMoveOpts)` -`moveNode(node, x, y, w, h, noPack)` -> `moveNode(node, opt: GridStackMoveOpts)` -``` - -3. removed old obsolete (v0.6-v1 methods/attrs) `getGridHeight()`, `verticalMargin`, `data-gs-current-height`, -`locked()`, `maxWidth()`, `minWidth()`, `maxHeight()`, `minHeight()`, `move()`, `resize()` - - -## Migrating to v5 - -make sure to read v4 migration first! - -v5 does not have any breaking changes from v4, but a focus on nested grids in h5 mode: -You can now drag in/out of parent into nested child, with new API parameters values. See the release notes. - -## Migrating to v6 - -the API did not really change from v5, but a complete re-write of Drag&Drop to use native `mouseevent` (instead of HTML draggable=true which is buggy on Mac Safari, and doesn't work on mobile devices) and `touchevent` (mobile), and we no longer have jquery ui option (wasn't working well for nested grids, didn't want to maintain legacy lib). - -The main difference is you only need to include gridstack.js and get D&D (desktop and mobile) out of the box for the same size as h5 version. - -## Migrating to v7 - -New addition, no API breakage per say. See release notes about creating sub-grids on the fly. - -## Migrating to v8 - -Possible breaking change if you use nested grid JSON format, or original Angular wrapper, or relied on specific CSS paths. Also target is now ES2020 (see release notes). -* `GridStackOptions.subGrid` -> `GridStackOptions.subGridOpts` rename. We now have `GridStackWidget.subGridOpts` vs `GridStackNode.subGrid` (was both types which is error prone) -* `GridStackOptions.addRemoveCB` -> `GridStack.addRemoveCB` is now global instead of grid option -* removed `GridStackOptions.dragInOptions` since `GridStack.setupDragIn()` has it replaced since 4.0 -* remove `GridStackOptions.minWidth` obsolete since 5.1, use `oneColumnSize` instead -* CSS rules removed `.grid-stack` prefix for anything already gs based, 12 column (default) now uses `.gs-12`, extra.css is less than 1/4th it original size!, `gs-min|max_w|h` attribute no longer written (but read) - -## Migrating to v9 - -New addition - see release notes about `sizeToContent` feature. -Possible break: -* `GridStack.onParentResize()` is now called `onResize()` as grid now directly track size change, no longer involving parent per say to tell us anything. Note sure why it was public. - -## Migrating to v10 - -we now support much richer responsive behavior with `GridStackOptions.columnOpts` including any breakpoint width:column pairs, or automatic column sizing. - -breaking change: -* `disableOneColumnMode`, `oneColumnSize` have been removed (thought we temporary convert if you have them). use `columnOpts: { breakpoints: [{w:768, c:1}] }` for the same behavior. -* 1 column mode switch is no longer by default (`columnOpts` is not defined) as too many new users had issues. Instead set it explicitly (see above). -* `oneColumnModeDomSort` has been removed. Planning to support per column layouts at some future times. TBD - -## Migrating to v11 - -* All instances of `el.innerHTML = 'some content'` have been removed for security reason as it opens up some potential for accidental XSS. - -* Side panel drag&drop complete rewrite. - -* new lazy loading option - -**Breaking change:** - -* V11 add new `GridStack.renderCB` that is called for you to create the widget content (entire GridStackWidget is passed so you can use id or some other field as logic) while GS creates the 2 needed parent divs + classes, unlike `GridStack.addRemoveCB` which doesn't create anything for you. Both can be handy for Angular/React/Vue frameworks. -* `addWidget(w: GridStackWidget)` is now the only supported format, no more string content passing. You will need to create content yourself as shown below, OR use `GridStack.createWidgetDivs()` to create parent divs, do the innerHtml, then call `makeWidget(el)` instead. -* if your code relies on `GridStackWidget.content` with real HTML (like a few demos) it is up to you to do this: -```ts -// NOTE: REAL apps would sanitize-html or DOMPurify before blinding setting innerHTML. see #2736 -GridStack.renderCB = function(el: HTMLElement, w: GridStackNode) { - el.innerHTML = w.content; -}; - -// now you can create widgets like this again -let gridWidget = grid.addWidget({x, y, w, h, content: '
My html content
'}); -``` - -**Potential breaking change:** - -* BIG overall to how sidepanel helper drag&drop is done: -1. `clone()` helper is now passed full HTML element dragged, not an event on `grid-stack-item-content` so you can clone or set attr at the top. -2. use any class/structure you want for side panel items (see two.html) -3. `GridStack.setupDragIn()` now support associating a `GridStackWidget` for each sidepanel that will be used to define what to create on drop! -4. if no `GridStackWidget` is defined, the helper will now be inserted as is, and NOT original sidepanel item. -5. support DOM gs- attr as well as gridstacknode JSON (see two.html) alternatives. - -## Migrating to v12 - -* column and cell height code has been re-writen to use browser CSS variables, and we no longer need a tons of custom CSS classes! -this fixes a long standing issue where people forget to include the right CSS for non 12 columns layouts, and a big speedup in many cases (many columns, or small cellHeight values). - -**Potential breaking change:** -* `gridstack-extra.min.css` no longer exist, nor is custom column CSS classes needed. API/options hasn't changed. -* (v12.1) `ES5` folder content has been removed - was for IE support, which has been dropped. -* (v12.1) nested grid events are now sent to the main grid. You might have to adjust your workaround of this missing feature. nested.html demo has been adjusted. - -## Migrating to v13 - -No breaking changes in the base library, but NEW React and Vue wrapper now being shipped! - -**Breaking changes: Angular wrapper only** (`gridstack/dist/angular`) - -Widget JSON fields are renamed to match the React/Vue convention, making layouts portable across all three frameworks: - -```diff -- { selector: 'app-chart', input: { title: 'Revenue' } } -+ { component: 'app-chart', props: { title: 'Revenue' } } -``` - -The registration call is also renamed: - -```diff -- GridstackComponent.addComponentToSelectorType([ChartComponent, TableComponent]); -+ GridstackComponent.registerComponents([ChartComponent, TableComponent]); -``` - -The static map and its type are renamed accordingly (`selectorToType` → `componentMap`, `SelectorToType` → `ComponentMap`). If you subclass `BaseWidget` and override `deserialize()`, replace any direct reads of `w.input` with `w.props`. - -# jQuery Application - -This is **old and no longer apply to v6+**. You'll need to use v5.1.1 and before - -```js -import 'gridstack/dist/gridstack.min.css'; -import { GridStack } from 'gridstack'; -import 'gridstack/dist/jq/gridstack-dd-jqueryui'; -``` -**Note**: `jquery` & `jquery-ui` are imported by name, so you will have to specify their location in your webpack (or equivalent) config file, -which means you can possibly bring your own version -```js - alias: { - 'jquery': 'gridstack/dist/jq/jquery.js', - 'jquery-ui': 'gridstack/dist/jq/jquery-ui.js', - 'jquery.ui': 'gridstack/dist/jq/jquery-ui.js', - 'jquery.ui.touch-punch': 'gridstack/dist/jq/jquery.ui.touch-punch.js', - }, -``` -Alternatively (single combined file) in html - -```html - - - - - - - -``` - -We have a native HTML5 drag'n'drop through the plugin system (default), but the jquery-ui version can be used instead. It will bundle `jquery` (3.5.1) + `jquery-ui` (1.13.1 minimal drag|drop|resize) + `jquery-ui-touch-punch` (1.0.8 for mobile support) in `gridstack-jq.js`. - -**NOTE: in v4, v3**: we ES6 module import jquery & jquery-ui by name, so you need to specify location of those .js files, which means you might be able to bring your own version as well. See the include instructions. - -**NOTE: in v1.x** IFF you want to use gridstack-jq instead and your app needs to bring your own JQ version, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` after you import your JQ libs. But note that there are issue with jQuery and ES6 import (see [1306](https://github.com/gridstack/gridstack.js/issues/1306)). - -As for events, you can still use `$(".grid-stack").on(...)` for the version that uses jquery-ui for things we don't support. - -# Changes - -View our change log [here](https://github.com/gridstack/gridstack.js/tree/master/doc/CHANGES.md). - -# Usage Trend - -[Usage Trend of gridstack](https://npm-compare.com/gridstack#timeRange=THREE_YEARS) - - - NPM Usage Trend of gridstack - - -# The Team - -gridstack.js is currently maintained by [Alain Dumesny](https://github.com/adumesny), before that [Dylan Weiss](https://github.com/radiolips), originally created by [Pavel Reznikov](https://github.com/troolee). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. +--- +* 🤖 PR by Hermes Agent: Revert animation is no longer available after migrating from GridStack v3 to v12*