Table of Contents generated with DocToc
- 12.4.2 (2025-12-26)
- 12.4.1 (2025-12-12)
- 12.3.3 (2025-08-13)
- 12.3.2 (2025-08-12)
- 12.3.1 (2025-08-11)
- 12.3.0 (2025-08-10)
- 12.2.2 (2025-07-06)
- 12.2.1 (2025-05-28)
- 12.2.0 (2025-05-27)
- 12.1.2 (2024-05-07)
- 12.1.1 (2024-04-28)
- 12.1.0 (2024-04-23)
- 12.0.0 (2025-04-12)
- 11.5.1 (2025-03-23)
- 11.5.0 (2025-03-16)
- 11.4.0 (2025-02-27)
- 11.3.0 (2025-01-26)
- 11.2.0 (2024-12-29)
- 11.1.2 (2024-12-08)
- 11.1.1 (2024-11-26)
- 11.1.0 (2024-11-17)
- 11.0.1 (2024-10-21)
- 11.0.0 (2024-10-20)
- 10.3.1 (2024-07-21)
- 10.3.0 (2024-06-26)
- 10.2.1 (2024-06-23)
- 10.2.0 (2024-06-02)
- 10.1.2 (2024-03-30)
- 10.1.1 (2024-03-03)
- 10.1.0 (2024-02-04)
- 10.0.1 (2023-12-10)
- 10.0.0 (2023-11-20)
- 9.5.1 (2023-11-11)
- 9.5.0 (2023-10-26)
- 9.4.0 (2023-10-15)
- 9.3.0 (2023-09-30)
- 9.2.2 (2023-09-27)
- 9.2.1 (2023-09-20)
- 9.2.0 (2023-09-10)
- 9.1.1 (2023-09-06)
- 9.1.0 (2023-09-04)
- 9.0.2 (2023-08-29)
- 9.0.1 (2023-08-27)
- 9.0.0 (2023-08-23)
- 8.4.0 (2023-07-20)
- 8.3.0 (2023-06-13)
- 8.2.3 (2023-06-11)
- 8.2.1 (2023-05-26)
- 8.2.0 (2023-05-24)
- 8.1.2 (2023-05-22)
- 8.1.1 (2023-05-13)
- 8.1.0 (2023-05-06)
- 8.0.1 (2023-04-29)
- 8.0.0 (2023-04-29)
- 7.3.0 (2023-04-01)
- 7.2.3 (2023-02-02)
- 7.2.2 (2023-01-16)
- 7.2.1 (2023-01-14)
- 7.2.0 (2023-01-07)
- 7.1.2 (2022-12-29)
- 7.1.1 (2022-11-13)
- 7.1.0 (2022-10-23)
- 7.0.1 (2022-10-14)
- 7.0.0 (2022-10-09)
- 6.0.3 (2022-10-08)
- 6.0.2 (2022-09-23)
- 6.0.1 (2022-08-27)
- 6.0.0 (2022-08-21)
- 5.1.1 (2022-06-16)
- 5.1.0 (2022-05-21)
- 5.0.0 (2022-01-10)
- 4.4.1 (2021-12-24)
- 4.4.0 (2021-12-21)
- 4.3.1 (2021-10-18)
- 4.3.0 (2021-10-15)
- 4.2.7 (2021-9-12)
- 4.2.6 (2021-7-11)
- 4.2.5 (2021-5-31)
- 4.2.4 (2021-5-29)
- 4.2.3 (2021-5-8)
- 4.2.2 (2021-4-23)
- 4.2.1 (2021-4-18)
- 4.2.0 (2021-4-11)
- 4.1.0 (2021-4-7)
- 4.0.3 (2021-3-28)
- 4.0.2 (2021-3-27)
- 4.0.1 (2021-3-20)
- 4.0.0 (2021-3-19)
- 3.3.0 (2021-2-2)
- 3.2.0 (2021-1-25)
- 3.1.5 (2021-1-23)
- 3.1.4 (2021-1-11)
- 3.1.3 (2021-1-2)
- 3.1.2 (2020-12-7)
- 3.1.0 (2020-12-4)
- 3.0.0 (2020-11-29)
- 2.2.0 (2020-11-7)
- 2.1.0 (2020-10-28)
- 2.0.2 (2020-10-05)
- 2.0.1 (2020-09-26)
- 2.0.0 (2020-09-07)
- 1.2.1 (2020-09-04)
- 1.2.0 (2020-08-01)
- 1.1.2 (2020-05-17)
- 1.1.1 (2020-03-17)
- 1.1.0 (2020-02-29)
- v1.0.0 (2020-02-23)
- v0.6.4 (2020-02-17)
- v0.6.3 (2020-02-05)
- v0.6.2 (2020-02-03)
- v0.6.1 (2020-02-02)
- v0.6.0 (2019-12-24)
- v0.5.5 (2019-11-27)
- v0.5.4 (2019-11-26)
- v0.5.3 (2019-11-20)
- v0.5.2 (2019-11-13)
- v0.5.1 (2019-11-07)
- v0.5.0 (2019-11-06)
- v0.4.0 (2018-05-11)
- v0.3.0 (2017-04-21)
- v0.2.6 (2016-08-17)
- v0.2.5 (2016-03-02)
- v0.2.4 (2016-02-15)
- v0.2.3 (2015-06-23)
- v0.2.2 (2014-12-23)
- v0.2.1 (2014-12-09)
- v0.2.0 (2014-11-30)
- v0.1.0 (2014-11-18)
- fix: #3237 updateOptions() fixes for columnOpts, maxRow. load() not cloning
- regression: #3214 touch device with real mouse event fix (caused by #3191 in last release)
- feat: #3104 Custom resize div element target - thank you Marvin Heilemann
- fix: #3181 re-initing from DOM missing x:0, y:0 messing layout
- fix: #3191 touch issue on Linux
- fix: #3194
updateOption()update lazyLoad - fix: #3201 updating higher column layout can cause negative values in
layoutsNodesChange()
- fix: #3139
Utils:removeInternalForSave()to skip arrays
- fix: #3136 more tweaks to save(columnCount) option.
- fix: #2493 added save(columnCount) option. Nested grid now use container saved column count.
- feat: #3047 added
.grid-stack-draggingto grid when child is being dragged so we can setcursor:grabbing. Updated demo. - feat: now using typedoc to generate doc (HTML and markup) from code. improved code examples and comments.
- fix: #3099 scroll take into account ScrollContainer position
- fix: #3102 React demo now support multiple grids
- fix: #3021 correctly reset widget back (to last known position) when released outside
- fix: #3070 incorrect property name 'sizeToContent' when cleaning up invalid attributes
- fix: #3077 incorrect node._id check
- fix: #3054 Avoid reflows via explicitly setting minRow
- fix: #3085
opts.minRowbeing updated
- fix: #3064 fix
GridStack.updateCB(w)crash
- feat: #3061 added
GridStack.updateCB(w)that gets called after a widget has been updated (eg: load() after initial layout) instead of created
- fix #3038
updateOptions()fix opts.minRow being undefined
- feat #2671 subgrid now propagate events to topmost grid. Use
el.gridstackNode.gridto know which (sub) grid. - fix #3028
updateOptions()no longer modifies passed in struct. only field we check are being handled too. - fix #3029
resizeToContent()fix for nested grid with content above - fix #3030
resizeToContentCheck()wasn't blocking _ignoreLayoutsNodeChange at end of the loop - rem #3022 removed ES5 support (IE doesn't support CSS vars needed now)
- rem #3027 remove legacy code support for disableOneColumnMode, oneColumnSize, oneColumnModeDomSort
- feat: #2854 Removed dynamic stylesheet and migrated to CSS vars. Thank you lmartorella
- feat: #3013 columns no longer require custom classes nor
gridstack-extra.cssas we now use CSS vars. - fix: #2978 Very slow operation in 11.2.0 and higher with large blocks
- fix: #2947 loading responsive
layout:'list'into smaller screen doesn't layout correctly.
- revert: #2981 Locked was incorrectly changed. fixed doc instead
- feat: #2975
prepareDragDrop(el, force)option to force re-creation of the drag&drop event binding - feat: #2989 new
updateOptions(o: GridStackOptions)to update PARTIAL list of options after grid as been created - fix: #2980 dd-touch circular dependency
- fix: #2667 sidebar items not honoring gs-w (enter-leave-re-enter)
- fix: #2987 gs-size-to-content to support numbers
- fix: #2981 Locked not working as expected
- fix: #2921 replace initMouseEvent with MouseEvent constructor and added composed: true
- fix: #2939 custom drag handle not working with LazyLoad
- fix: #2955 angular circular dependency
- fix: #2951 shadow DOM dragging re-appending fix
- fix: #2964 minW larger than column fix
- feat: #2965 internal
_prepareDragDropByNode(n)is now public asprepareDragDrop(el)so Angular, React, and others can call once the DOM content elements have been added (the outside grid item divs are always created before content) - break: #2959
Util.createWidgetDivs()has moved toGridStack.createWidgetDivs()to remove circular dependencies
- feat: added
isIgnoreChangeCB()if changeCB should be ignored due to column change, sizeToContent, loading, etc... - feat: added
responsive_none.htmldemo and fixed layout:'none' to bound check the layout (no-op unless it must change)
- feat: #2695 'Esc' to cancel now works on sidebar external items, also works dragging over trash.
- feat: #2852 better React example. Thank you CNine
- fix: #2852 grid in tabs correctly handles CSS. Thank you Luciano Martorella
- fix: #2900 use attr
data-gs-widgetinstead ofgridstacknode(supported as well for backward compatibility)
- fix: #2877 angular wrapper uses standalone, while now being compatible down to ng14. thanks to andre-steudel
- fix: #2886 added
gs-size-to-contentsupport - fix: #2887 mobile nested grid TypeError: e.currentTarget is null
- fix: #2878 make sure sub-grid inherit parent opts by default, with subgrid defaults.
- fix: #2879 sub-grid item
sizeToContent:truenow handle content above/below sub grid.
- feat: #2864 added
GridStackOptions.layoutfor nested grid reflow during resize. default to 'list'. - fix: #2859 re-enabled tests and fix numerous issues found (see CL). Also thank you Luciano Martorella for getting me going and starting it.
- fix: #2851 added support for custom max layout saving - Thank you Luciano Martorella
- fix: #2492 loading same layout with overlapping widget fix. v10.3.0 regression.
- feat: #2826 Lazy loading of widget content until visible (
GridStackOptions.lazyLoadandGridStackWidget.lazyLoad) - feat: #2818 support for Angular Component hosting true sub-grids (that size according to parent) without requring them to be only child of grid-item-content.
- fix: #2231,#1840,#2354 big overall to how we do sidepanel drag&drop helper. see release notes.
- fix: #2736 safe practices around GridStackWidget.content no longer setting innerHTML
- fix: #2734 rotate() JS error
- fix: #2741 resizeToContent JS error with nested grid
- fix: #2740 nested grid drag fix
- fix: #2730 resizing left from right most item works
- fix: #2327 remove dataTransfer mention as not supported
- fix: #2720 load() now creates widgets in order (used to be reverse due to old collision code)
- fix: #2683 check for fixed grid maxRow during resize
- fix: #2694 prevent 'r' rotation to items that can't resize (locked, noResize, fixed sizes)
- fix: #2709 support for multiple drag targets - Thank you nickfulcher
- fix: #2669 load() sometimes restore incorrectly
- feat: #2682 You can now press 'Esc' to cancel a move|resize, 'r' to rotate during a drag. added
GridStack.rotate()as well - Thank you John B. for this feature sponsor. - fix: #2672 dropping into full grid JS error
- fix: #2676 handle minW resizing when column count is less
- fix: #2677 allow button as handle dragging
- fix: #2628
removeAll()does not trigger Angular's ngOnDestroy - fix: #2503 Drag and drop a widget on top of a locked widget - Thank you JakubEleniuk
- fix: #2584 wrong sort order during 1 column resize - Thank you JakubEleniuk again.
- fix: #2639 load() with mix of new item without coordinates
- fix: #2633 Drop into full grid causes crash
- fix: #2559 changed angular demos (support 1 column)
- fix: #2453 recreated grid trash issue
- fix: #2620 allow resizing with sizeToContent:NUMBER is uses
- feat: #2574 Allow cell height in cm and mm units
- feat: #2578 allow different scaling between drag toolbar and grid
- fix: #2577 ui-resizable-s/-n style fix
- fix: #2576 column('none') now ignores layouts
- fix: #2560 nested grid fix (enter can call leave which can call enter again) - Thank you v1talii-dev
- fix: #2596 prevent SSR crash
- fix: #2610 using passive:true for mousemove events
- fix: #2612 restrict vertical resize if
sizeToContent:true - demo: nested.htm now has nested create and drag&drop example - Thank you fredericrous
- fix: #2552 DOM init doesn't sizeToContent
- fix: #2561 issues with sizeToContent animation, cleanup, etc...
- fix: #2427 sizeToContent supports rem/em cell height
- fix: #2558 remove style node in shadow root
- fix: #2556 make sure 'new GridStack(el)' set el.gridstack=this right away
- cleanup: #2550 Optimize resize arrow (~88% lighter from 1.82 KB to 225B)
- feat #2542 we now support much richer responsive behavior with
GridStackOptions.columnOptsincluding any breakpoint width:column pairs, or automatic column sizing. disableOneColumnMode,oneColumnSize,oneColumnModeDomSorthave been removed (see v10 migration doc)
- fix #2525 Fixed unhandled exception happening in _mouseMove handler
- fix potential crash in resizeToContentCheck() if grid gets deleted by the time the delay happens
- fix #2527 Incorrect layout on grid load in one column mode
- fix #2496 animation on init, introduced in 8.1.1
- feat #1275 div scale support - Thank you elmehdiamlou for implementing this teh right way (add scale to current code)
- fix #2489 moved the dropped event handler to after doing everything (no more setTimeout) - Thanks arnoudb for suggesting a fix.
- fix #2497 Utils.parseHeight() fix
- fix column(1) to not restore if disableOneColumnMode on size change
- revert #2263 div scale support - causing too many issues for now (#2498 #2491)
- fix #2492 calling load() allows overlapping widgets
- fix #1275 div scale support - Thank you VincentMolinie for implementing this
- fix - sub-grid styles now look for immediate correct parent, not any depth above.
- fix #2469 "Invalid height" error CSS minHeight
- fix #2394 nested grid size issue when sub-items moved up/down
- fix _updateContainerHeight() to use height rather than min-height again (apart for nested grids which need it) and partial getComputedStyle CSS minHeight support
- feat: nested grids now support
sizeToContentto size themselves to how many sub items they contain - Thank you @Helix for sponsoring this! - fix #2449 full grid maxRow fix
- fix #2435 directionCollideCoverage() tweaks
- fix resizeToContent() to handle node.h (using when cellHeight changes or we resize) vs DOM sizing (rest of the time)
- renamed fitToContent to sizeToContent (API BREAK)
- feat:
sizeToContentnow supports beingboolean|numberto limit the height but user can resize past that, unlike maxH. - feat:
resizeToContentParentnow on GridStackWidget for those widgets that need to resize differently.
- fix 'resizecontent' event fix not called.
- partial fix #2427 sizeToContent when calling cellHeight()/addWidget()/MakeWidget()
- fix #2413 support touchscreen+mouse devices. Thank you @Ruslan207
- tweak to
sizeToContentfrom #2412. Thank you @JonSohn
- feat #404 added
GridStackOptions.sizeToContentandGridStackWidget.sizeToContentto make gridItems size themselves to their content (no scroll bar), callingGridStack.resizeToContent(el)whenever the grid or item is resized. - also added new
'resizecontent'event, andresizeToContentCBandresizeToContentParentvars. - fix #2406 inf loop when autoPosition after loading into 1 column, then 2.
- feat #2378 attribute
DDRemoveOpt.declineto deny the removal of a specific class. - fix: dragging onto trash now calls removeWidget() and therefore
GridStack.addRemoveCB(for component cleanup) - feat:
load()support re-order loading without explicit coordinates (autoPositionor missingx,y) uses passed order.
- feat #2358 column(N, 'list'|'compact'|...) resizing now support reflowing content as list
- fix #2349 grid NoMove vs item NoMove support
- fix #2352 .ui-draggable-dragging z-index for modal dialogs
- fix #2357 NaN inf loop when using cellHeight rem/em
- fix #2354 max-w cloning issue fix
- fix: make sure
removeNode()uses internal _id (unique) and not node itself (since we clone those often) - fix: after calling
addRemoveCBmake sure we don't makeWidget() (incorrectly) a second time - break:
GridStackWidget.idis now string only (used to be numberOrString) as it causes usage to have to check and cast
- feat:
makeWidget()now take optionalGridStackWidgetfor sizing - fix: make sure
GridStack.saveCBis call inremoveWidget() - feat: angular wrapper: serialize custom data support, and making sure destroy() is called on ng components
- #2323 module for Angular wrapper
- fix: #2314 fix issue with having min-height/width instead of height/width for gs-h|x="1"
also further compressed CSS multi column rules (use
.gs-# > .grid-stack-iteminstead of.grid-stack-# > .grid-stack-item)
- break: remove
GridStackOptions.minWidthobsolete since 5.1, useoneColumnSizeinstead - optimize: CSS files now even 25% smaller (after being halfed in 8.0.0) by removing
.grid-stackprefix for anything already gs based, and 3 digit rounding. - fix: #2275
setupDragIn()signature tweaks (HTMLElement | Document) - feat: #2205 added
GridStackOptions.draggable.cancelfor list of selectors that should prevent item dragging
- feat: #2275
setupDragIn()now can take an array or elements (in addition to selector string) and optional parent root (for shadow DOM support) - fix: #2234
Utils.getElements('1')(called by removeWidget() and others) now checks for digit 'selector' (becomes an id). - fix: #2213
destroy()now removes event handlers too - feat: #2292 ne nw resize handle
- break: (meant to be in v8) removed
GridStackOptions.dragInOptionssinceGridStack.setupDragIn()has it replaced since 4.0
- package is now ES2020 (TS exported files), webpack all.js still umd (better than commonjs for browsers), still have es5/ files unchanged (for now)
- optimize #2243 removed
gs-min|max_w|hattribute generated in CSS or written out as they are never used for rendering, only for initial load. This reduce our column/row CSS in half! - optimize: removed
gs-w='1'andgs-h='1'dom attribute writing since we already have min-width/min-height set, no need to set more attributes. - optimize: remove
'ui-draggable'and'ui-resizable'since wasn't used in CSS and we have the-disabledversion when off (so we can usenot(xyz-disabled)). - add:
GridStack.saveCBglobal callback for each item during save so app can insert any custom data before serializing it.save()can now be passed optional callback - move:
GridStack.addRemoveCBis now global instead of grid option.load()can still be passed different optional callback - fix: addGrid() to handle passing an existing initialized grid already
- break:
GridStackOptions.subGrid->GridStackOptions.subGridOpts. We now haveGridStackWidget.subGridOptsvsGridStackNode.subGrid(subclass) rather than try to merge the two at runtime since very different types... - tons of improvements for Angular wrapper.
- feat #2229 support nonce for CSP. Thank you @jedwards1211
- feat: support nested grids with Angular component demo. Thank you R. Blanken for supporting this.
- fix #2206
load()with collision fix - fix #2232
autoPositionbug loading from DOM
- fix
addWidget()to handle passing just {el} which was needed for Angular HMTL template demo - add
opts.draggable.scrollback to disable scrolling. Thank you @VincentMolinie
- fix #2171
save()nested grid has extra nested children & options - regression for fix #2110: nested grids lost their styles causing wrong rendering when dragging to create sub nesting
- fix #2162 removing item from a grid (into another) will now call
changeif anything was also modified during the remove - fix #2110 custom
GridStackOptions.itemClassnow works when dragging from outside
- fix #1936 some styles left behind after a drag
- remove #1842 incorrect doc/partial code on widget resizeHandles
- doc #2033
resizestopis actually correct as we don't animate resize today - add -
init()|initAll()will now load any listed children (whataddGrid()already did) - add -
GridStackOptions.addRemoveCBwhich is use by frameworks (eg Angular) to dynamically create their gridItem components instead of regular div with class
- fix #939 'prototype' undefined error for dd-gridstack.js
- add #939 disable/enable are methods now recursive by default
- add better
GridStackEventHandlerCallbackspelled out types - add We now have support for Angular Component wrappers out of the box included in the build, with docs and demo! Need help to do that for React and Vue.
- back to MIT license in package.json
- add
GridStackEngine.findEmptyPosition() - fix #2081 removeWidget() after it's gone from DOM
- fix #1985 addWidget() or DOM read in single column mode will not adjust to multi column mode
- fix #1975 oneColumnModeDomSort not respected when loading in 1 column
- fix #2073 SSR (server side rendering) isTouch issue (regression in v6)
- fix - removing last item delete sub-grid that are not auto-generated (nested.html vs nested_advanced.html)
- add #1009 Create sub-grids on the fly,
by dragging items completely over others (nest) vs partially (push) using new flag
GridStackOptions.subGridDynamic=true. Thank you [StephanP] for sponsoring it.
See advance Nested - add - ability to pause drag&drop collision until the user stops moving - see
DDDragOpt.pause(used for creating nested grids on the fly based on gesture). - add #1943 you can now drag sub-grids into other sub-grids
- fix #2055 maxRow=1 resize outside (broke in 6.0.1)
- fix #2054 Can't enter text in textarea/input (broke in v6)
- fix #2034
removeWidget()breaking resize handle feedback - fix #2043 when swapping shapes in maxRow grid, make sure we still check for 50% coverage
- fix
float(val)to set on grid and engine, so save() will read it. - fix #2018 mouseover and React different behavior
- fix getting nested grid resize handles while dragging child
- converted previous HTML5
draggable=truebased code to simple Mouse Events and Touch mobile support for drag&Drop. - removed all jquery-ui related code, and D&D plugging as we only support native events now
alwaysShowResizeHandlenow support'mobile'which is the default, making it much easier (see doc)- changed
commit()to bebatchUpdate(false)to make it easier to turn batch on/off. updated doc. old API remains for now
- fix v5.1.0 regression #1973 DnD Snap to Animation
- add
GridStack.registerEngine()to let user use their own custom layout engine subclass. Thank you [Thomas] for sponsoring it. - grid option
minWidthis nowoneColumnSizeto make it clearer, but old field will still work (JS only) for a while - fix #1966 restore animation when dragging items
- updated jqueryui to latest v1.13.1
- add #992 support dragging into and out of nested grids from parents! Thank you @arclogos132 for sponsoring it.
- add #1910 new
column:'auto'option to size nested grids to their parent grid item column count, keeping items the same size inside and outside. Thank you @arclogos132 for also sponsoring it. - fix #1902 nested.html: dragging between sub-grids show items clipped
- fix #1558 dragging between vertical grids causes too much growth, not follow mouse.
- fix #1912 no longer force rows for min-height
- fix #1888 locks up with nested grid when 'column' is set to 1
- fix #1901 error regression for #1785 when re-loading with fewer objects
- add #1887 support for IE (new es5 folder) by @SmileLifeIven
- fix #1785 overlapping items when switching column() and making edits. Thank you @radovanobal for sponsoring it.
- fix #1890 unhandled exception when dragging fast between grids.
- fix #1868 prevent swap during resize
- fix #1849 #1816 save highest resolution in 1 column mode
- fix #1855 resize when padding is large vs cellHeight
- you can now swap items of different width if they are the same row/height. Thanks to spektrummedia for sponsoring it.
- fix #1860 nested grid save inf loop fix
- use latest
dart-sass, updated comments
- fix #1817 Enable passing of DragEvent to gridstack dropped event. Thanks @onepartsam
- fix #1835 Layout incorrectly restored when node has a minimum width. Thanks @hssm
- fix #1794 addGrid() does not recognize rem cellHeightUnit
- fix #1784
removable:trueworking by itself (without needingacceptWidgets:true) - fix #1791 removed drag flicker and scroll issue. Thanks @nelsieborja
- fix #1795
save(false)will no longer have.contentfield (removed existing one if present) - fix #1782
save(false, false)now correctly saves nested grids - fix #1793
save(false, true)followed by enable() throws error. we now have newUtils.cloneDeep()
- fix for website with JQ
droppable('destroy')giving error
- fix #1760
removable:trueworking again (broke in 4.x) - fix #1761
staticGrid(false)will now enable drag in behavior (if set) - fix #1767
lockeditem can be user moved/resized again, just not pushed by other nodes (broke in 1.1.1) - fix #1764
destroy(false)can now re-init properly (doesn't force static grid)
Utils.getScrollParent()->getScrollElement()rename- fix #1745 digression on scrolling in v4.2.1. Thanks @Manfred-on-github for fixing your prev change.
- fix #1684 #1550 mac Safari H5 draggable broken in 4.0.1. Thanks @wurambo
- fix #1562 mac Safari page scroll fix
- fix #1700 JQ nested grid drag fix broken in 4.0.3 (but much older underlying issue)
- fix #1678 item gs-x:0 not animating fix
- fix #1727 resize-scroll issue when grid is not at top of page. Thanks @Manfred-on-github
- fix #1728 fix sizing from top/left sides
- fix #1704 scrollbar fix broken in 4.x
- fix #1655
addWidget()while in 1 column now remembers original wanted width - add #1727
addWidget()now supports nested grids like init/addGrid() does.
- fix #219 fixing another 6 years old request we now automatically insert extra rows when dragging an item at the bottom below others to make it easier to insert below.
- fix #1687 more fix for drag between 2 grids with
row / maxRowbroken in 4.x - fix export symbols .d.ts for
gridstack-h5.js | gridstack-jq.js | gridstack-static.js - fix #1709 correct info for using JQ version and ES6 (tested in Angular app)
- fix #1693
loadafterinit()broken in 4.x - fix #1687 drag between 2 grids with
row / maxRowbroken in 4.x - fix #1676 drag edge case in/out single grid without acceptWidgets fix broken in 4.x
- fix #1679
Resizable: {handles:'w/sw'}broken in 4.x - fix #1658
enableMove(T/F)not working correctly - fix
helper: myFunctionnow working for H5 case fordragInOptions&setupDragIn()broken in 3.x - fix prevent
addGrid()from creating nested div grid if container already is a '.grid-stack' div
- fix #149 #1094 #1605 #1534 re-write of the collision code - fixing 6 years old most requested request
- you can now swap items of the same size (vertical/horizontal) when grid is full, and is the default in
float:false(top gravity) as it feels more natural. Could add Alt key for swap vs push behavior later. - Dragging up and down now behave the same (used to require push WAY down past to swap/append). Also much more efficient collision code.
- handle mid point of dragged over items (>50%) rather than just a new row/column and check for the most covered item when multiple collide.
- we now remove item when cursor leaves (
acceptWidgetscase usingdropoutevent) or shape is outside (re-using same method) and re-insert on cursor enter (since we only getdropoverevent). Should not be possible to have 2 placeholders which confuses the grids. - major re-write and cleanup of the drag in/out. Vars have been renamed and fully documented as I couldn't understand the legacy buggy code.
- removed any over trash delay feedback as I don't see the point and could introduce race conditions.
- fix 1617 FireFox DOM order issue. Thanks @marcel-necker
- fix changing column #
column(n)now resizescellHeight:'auto'to keep square - add 1616
drag | resizeevents while dragging. Thanks @MrCorba - add 1637
GridStack.setupDragIn()so user can update external draggable after the grid has been created
- big re-write on how
cellHeight()works. you can now call it at any time (not just grid init options) including switching to 'auto' or other modes on the fly. - fix
cellHeight:autonow keeps cell square as window resizes (regressing from 2.x TS conversion).Utils.throttle()works better too (guaranteed to be called last event) - new
cellHeight:initialwhich makes the cell squares initially, but doesn't change as windows resizes (better performance) - new grid option
cellHeightThrottle(100ms) to control throttle of auto sizing triggers - fix 1600 height too small with
cellHeight:autoloading in 1 column. Now detect we load at 1 column and size accordingly (default 'auto' could make big 700x700 cells, so explicit px might still be wanted) - fix 1538 loading nested into small size and sizing back up
- fix 1604 nested grid resizing fix
- fix 1599 resize from left side can move item right
- fix 1413 website & lib works on mobile. We now compile the latest v1.0.8
jquery.ui.touch-punchinto the JQ version (only 2k) so mobile devices (android, iphone, ipad, ms surface, etc...) are supported out of the box. HTML5 version will require re-write to plainmousemove& mobiletouchmoveinstead of drag events in a future release. - small optimizations (create placeholder content on the fly, moved more DD code into draggable class)
- fix 1572
column: Noption now sets CSS class - fix 1571 don't allow drop when grid is full
- fix 1570 easier to drag out/in from below
- fix 1579
cellHeight()not updating CSS correctly - fix 1581 H5 draggable by actual div handle rather than entire item (let content respond to drag as well)
- fix 1557 fix no-drop cursor on windows when dragging within a default grid (no external drag in)
- fix 1541 fix Safari H5 delay when dropping items
- fix 1540 Safari H5 drag&drop fix
- fix 1535 use batchUpdate() around grid init to make sure gs-y attributes are respected.
- fix 1545
disableMove()correctly prevents drag later (remove events and draggable attribute) - fix 1546 resize no longer delayed, which caused race conditions errors
- fix 1001 resizing near bottom/top needs to auto-scroll/. thanks @hbcarlos!
- fix 1419 dragging into a fixed row grid works better (check if it will fit, else try to append, else won't insert) -- possible BREAK (unlikely you use engine directly)
- engine constructor takes Options struct rather than spelling arguments (easier to extend/use)
canBePlacedWithRespectToHeight()->willItFit()like grid method
- fix 1330
maxWdoes not work as intended with resizable handle"w" - fix 1472 support all options for new dragged in widgets (read all
gs-xyzattributes) - fix 1511 dragging any grid item content works
- fix 1438 web-component fixes & grid with 0 size initially.
- add new
addGrid(parent, opts)to create a grid and load children instead ofinit() + load(), which is used byload()to supports nested grids creation. see nested.html demo. save()will now work on nested grids, recursively saving info. added flag to also allow saving the current grid options + children (needed for nested grids) so you can now call newadddGrid()to re-create everything from JSON.- fix 1505 don't call
movable()/resizable()on locked items error. thanks @infime - fix 1517 force typescript 3.6 as 3.7 has breaking change
- the big news is we finally have a native HTML5 drag&drop plugin (zero jquery)! Huge thanks to @rhlin for creating this in stealth mode. Read all about it in main doc.
- we now have a React example, in addition to Vue - Angular is next!. thanks @eloparco
- fix placeholder not having custom
GridStackOptions.itemClass. thanks @pablosichert - fix 1484 dragging between 2 grids and back (regression in 2.0.1)
- fix 1471
load()into 1 column mode doesn't resize back to 12 correctly - fix 1235
update(el, opts)re-write to take allGridStackWidgetoptions (not just x,y,width,height) and do everything efficiently. Hidinglocked(),move(),resize(),minWidth(), etc... as they just simply call update() which does all the constrain now as well! - del
ddPlugingrid option as we only have one drag&drop plugin at runtime, which is defined by the include you use (HTML5 vs jquery vs none) - change attribute
data-gs-min-widthis nowgs-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!) 1491 1492 - also
GridStackWidgetused in most APIwidth|height|minWidth|minHeight|maxWidth|maxHeightare now shorterw|h|minW|minH|maxW|maxHas well 1493 - **** see migrating to v3 ****
- add
marginoption now support multi values CSS format'5px 10px 0 20px'or'5em 10em' - add
data-gs-static-gridattribute - fix 1435
class="ui-draggable-disabled ui-resizable-disabled"have been added back to static grid items, so existing CSS rule to style continue working - fix 1439 getting DOM element by id with number works (api that uses
GridStackElementhandle more string formats) - fix 1442 setting
marginTop(or any 4 sides) to cause resize to break. Thanks @deadivan for suggested fix.
- fix grid
static: trueto no longer add any drag&drop (even disabled) which should speed things up, andsetStatic(T/F)will now correctly add it back/delete for items that need it only. Also fixed JQ draggable warning if not initialized first 858 - add
addWidget(opt)now handles just passing aGridStackWidgetwhich creates the default divs, simplifying your code. Old API still supported. - add
save(saveContent = true)now lets you optionally save the HTML content in the node property, with load() restoring it 1418 - add
GridStackWidget.contentnow lets you add any HTML content when callingload()/save()oraddWidget()1418 - add
ColumnOptionstocolumn(n, options)for multiple re-layout options, including 'none' that will preserve the x and width, until out of bound/overlap 1338 including a custom function for you to create the new layout 1332
- fix
animateto not re-create CSS style each time (should be faster too) and made it default now since so much nicer. pass{animate: false}grid options if you want instant again 937 - fix
resizable: { handles: ...}forcingalwaysShowResizeHandlebehavior 1373
- fix
minWidth(),minHeight(),maxHeight()to set node value as well 1359 - fix
GridStackOptionsspelling 1359 - fix remove window resize event when
grid.destroy()1369 - fix nested grid resize 1361
- fix resize with
cellHeight'6rem' '6em' not working 1356 - fix preserve attributes (min/max/id/etc...) when dragging between grids 1367
- fix 2 drop shadows when dragging between grids 393
- re-write to native Typescript, removing all JQuery from main code and API (drag&drop plugin still using jqueryui for now)
- add
getGridItems()to return list of HTML grid items - add
{dragIn | dragInOptions}grid attributes to handle external drag&drop items - add
save()andload()to serialize grids from JSON, saving all attributes (not just w,h,x,y) 1286 - add
marginto replaceverticalMarginwhich affects both dimensions in code, rather than one in code the other in CSS. You can now have perfect square cells (default) 723 - fix 1299 many columns round-off error
- fix 1102 loose functionality when they are moved to a new grid
- add optional params to
removeWidget()to have quiet mode (no callbacks) - drop support for IE11 due to more compact ES6 output and newer TS code
- fix 1341 Enable the UMD behavior for bundlers compatibility
- fix 1311 domAttr is not defined
- adds
styleInHeadoption to allow for selecting older behavior (adding STYLE element to HEAD element instead of parentNode) - update jquery to v3.5.1
- fix 1229
staticGridno longer disable oneColumnMode - fix 1195 options broken with ember hash helper - thanks @btecu
- fix 1250 don't remove item from another grid
- fix 1261
init()clones passed options so second doesn't affect first one - fix 1276
addWidget()ignores data attributes
- fix 1187 IE support for
CustomEventpolyfill - thanks @phil-blais - fix 1204 destroy drag&drop when removing node(s) instead of just disabling it.
- fix 1181 Locked widgets are still moveable by other widgets.
- fix 1217 If I set cellHeight to some vh, only first grid will take vh, rest will use px
- include SASS source files to npm package again 1193
- add
minRowandrowgrid options (which set minRow=maxRow=N) 1172 - thanks @RadoiAndrei - fix 1166 resize not taking margin height into account - thanks @awjae
- fix 1155
maxRownow limit initial item placement if out of bound, preventing broken drag behavior - fix 1171 added event support to call
grid.on('added removed change', callback)again even with native events.
- breaking: (1084) jquery was removed from the API and dependencies (initialize differently, and methods take/return
GridStackorHTMLElementinstead ofJQuery), so your code will need to change. See Migrating to v1.0.0 setColumn(N)is nowcolumn(N)(matches other set/get methods) andgetColumn()to get current column number- add
grid.on(eventName, callback)/grid.off(eventName)to hide native JQ events mix - add
grid.getRow()to get the current grid row number
- fix #540 WebComponent support: CSS file now insert before grid instead of 'head'
- fix #1143 nested grids with different
acceptWidgetsclass - fix #1142 add/remove widget will also trigger change events when it should.
- optimized
changecallback to save original x,y,w,h values and only call those that changed 1148 - delete
bowersince dead for a while now
- fix #1132 oneColumnMode missing CSS to do layout
- del
oneColumnModeClass/.grid-stack-one-column-modeand associated code. If you depended on this, use class.grid-stack-1instead since it is 1 column layout anyway 1134
- add
oneColumnModeDomSorttrue|false to let you specify a custom layout (use dom order instead of x,y) for oneColumnModecolumn(1)#713 - fix oneColumnMode to only restore if we auto went to it as window sizes up #1125
- editing in 1 column (or few columns) does a better job updating higher layout (track before and after and move items accordingly). Tracking item swap would be even better still. #1127
- fix #37 oneColumnMode (<768px by default) now simply calls
column(1)and remembers prev columns (so we can restore). This gives us full resize/re-order of items capabilities rather than a locked CSS only layout (see prev rev changes). #1120 - fix responsive.html demo #1121
- add
float(val)to set/get the grid float mode, which will relayout #1088 - add
compact()to reclaim any empty space and relayout grid items #1101 - add
options.dragOutto let user drag nested grid items out of a parent or not (default false) and jQuery UIdraggable.containmentcan now be specified in options. You can now drag&drop between 2 nested grids #1105 - add
%as a valid unit for height #1093. thank you @trevisanweb @aureality @ZoolWay - fix callbacks to get either
added, removed, changeor combination if adding a node require also to change its (x,y) for example. Also you can now callbatchUpdate()before calling a bunch ofaddWidget()and get a single event callback (more efficient). #1096 removeAll()is now much faster (no relayout) and callsremovedevent just once with a list #1097column()complete re-write and is no longer "Experimental". We now do a reasonable job at sizing/position the widgets (especially 1 column) and also now cache each column layout so you can go back to say 12 column and not loose original layout. #1098- fix
addWidget(el)(no data) would not render item at correct location, and overlap item at (0,0) #1098 - you can now pre-define size of dragable elements from a sidebar using standard
data-gs-widthanddata-gs-height- fix #413, #914, #918, #922, #933 thanks @ermcgrat and others for pointing out code issue.
- min files include rev number/license #1075
- npm package fix to exclude more temporary content #1078
- removed
jquery-ui/*requirements from AMD packing ingridstack.jQueryUI.jsas it was causing App compile missing errors now that we include a subset of jquery-ui
- fix for griditems with x=0 placement wrong order (regression by #1017) (#1054).
- fix
cellHeight(val)not working due to style change (regression by #937) (#1068). - add
gridstack-poly.jsfor IE and older browsers, removedcore-jslib from samples (<1k vs 85k), and all IE8 mentions (#1061). - add
jquery-ui.js(and min.js) as minimal subset we need (55k vs 248k), which is now part ofgridstack-h5.js. Include individual parts if you need your own lib instead of all.js (#1064). - changed jquery dependency to lowest we can use (>=1.8) (#629).
- add advance demo from web site (#1073).
- grid options
widthis nowcolumn,heightnowmaxRow, andsetGridWidth()nowcolumn()to match what they are. Old names are still supported (console warnings). Various fixes for custom # of column and re-wrote entire doc section (#1053). - fix widgets not animating when
animate: trueis used. on every move, styles were recreated-fix should slightly improve gridstack.js speed (#937). - fix moving widgets when having multiple grids. jquery-ui workaround (#1043).
- switch to eslint (#763) thanks @rwstoneback.
- fix null values
addWidget()options (#1042).
- fix undefined
x,yposition messes up grid (#1017). - changed code to 2 spaces.
- fix minHeight during
onStartMoving()(#999). - add
gridstack.d.tsTypeScript definition file now included - no need to include@types/gridstack, easier to update (#1036). - add
addWidget(el, options)to pass object so you don't have to spell 10 params. (#907).
- reduced npm package size from 672k to 324k (drop demo, src and extra files)
- emit
droppedevent when a widget is dropped from one grid into another (#823). - don't throw error if no bounding scroll element is found (#891).
- don't push locked widgets even if they are at the top of the grid (#882).
- RequireJS and CommonJS now export on the
exportsmodule fix (#643). - automatically scroll page when widget is moving beyond viewport (#827).
- removed lodash dependencies (#693).
- don't overwrite globals jQuery when in a modular environment (#974).
- removed z-index from
.grid-stack-item-contentcausing child modal dialog clipping (#984). - convert project to use yarn (#983).
- widgets can have their own resize handles. Use
data-gs-resize-handleselement attribute to use. For example,data-gs-resize-handles="e,w"will make the particular widget only resize west and east. (#494). - enable sidebar items to be duplicated properly. Pass
helper: 'clone'indraggableoptions. (#661, #396, #499). - fix
staticGridgrid option (#743) - preserve inline styles when moving/cloning items (thanks @silverwind)
- fix bug causing heights not to get set (#744)
- allow grid to have min-height, fixes (#628) thanks @adumesny
- widget x and y are now ints (thanks @DonnchaC)
- allow all droppable options (thanks @vigor-vlad)
- properly track mouse position in
getCellFromPixel(thanks @aletorrado) - remove instance of
!important(thanks @krilllind) - scroll when moving widget up or down out of viewport (#827)
- remove placeholder when dragging widget below grid (already worked when dragging left, above, and to the right of grid).
- prevent extra checks for removing widget when dragging off grid.
- trigger
addedwhen a widget is added via dropping from one grid to another. - trigger
removedwhen a widget is removed via dropping from one grid to another. - trigger
removedwhen a widget is removed via dropping on a removable zone (#607 and #550). - trigger custom event for
resizestopcalledgsresizestop(#577 and #398). - prevent dragging/resizing in
oneColumnMode(#593). - add
oneColumnModeClassoption to grid. - remove 768px CSS styles, moved to grid-stack-one-column-mode class.
- add max-width override on grid-stck-one-column-mode (#462).
- add internal function
isNodeChangedPosition, minor optimization to move/drag. - drag'n'drop plugin system. Move jQuery UI dependencies to separate plugin file.
- update requirements to the latest versions of jQuery (v3.1.0+) and jquery-ui (v1.12.0+).
- fix jQuery
size()(#486). - update
destroy([removeDOM])call (#422). - don't mutate options when calling
draggableandresizable. (#505). - update _notify to allow detach (#411).
- fix code that checks for jquery-ui (#481).
- fix
cellWidthcalculation on empty grid
- update names to respect js naming convention.
cellHeightandmargincan now be string (e.g. '3em', '20px') (Thanks to @jlowcs).- add
maxWidth/maxHeightmethods. - add
enableMove/enableResizemethods. - fix window resize issue #331).
- add options
disableDraganddisableResize. - fix
batchUpdate/commit(Thank to @radiolips) - remove dependency of FontAwesome
- RTL support
'auto'value forcellHeightoption- fix
setStaticmethod - add
setAnimationmethod to API - add
columnmethod (#227) - add
removable/removeTimeout(experimental) - add
removeDOMparameter todestroymethod (#216) (thanks @jhpedemonte) - add
useOffsetparameter togetCellFromPixelmethod (#237) - add
minWidth,maxWidth,minHeight,maxHeight,idparameters toaddWidget(#188) - add
addedandremovedevents for when a widget is added or removed, respectively. (#54) - add
acceptWidgetsparameter. Widgets can now be draggable between grids or from outside (experimental)
- fix closure compiler/linter warnings
- add
staticGridoption. - add
minWidth/minHeightmethods (Thanks to @cvillemure) - add
destroymethod (Thanks to @zspitzer) - add
placeholderTextoption (Thanks to @slauyama) - add
handleClassoption. - add
makeWidgetmethod. - lodash v 4.x support (Thanks to @andrewr88)
- gridstack-extra.css
- add support of lodash.js
- add
isAreaEmptymethod - nested grids
- add
batchUpdate/commitmethods - add
updatemethod - allow to override
resizable/draggableoptions - add
disable/enablemethods - add
getCellFromPixel(thanks to @juchi) - AMD support
- fix nodes sorting
- improved touch devices support
- add
alwaysShowResizeHandleoption - minor fixes and improvements
- fix grid initialization
- add
cellHeight/cellWidthAPI methods - fix boolean attributes (#31)
- add widgets locking (#19)
- add
willItFitAPI method - fix auto-positioning (#20)
- add animation (thanks to @ishields)
- fix
ycoordinate calculation when dragging (#18) - fix
removeWidget(#16) - minor fixes
- add
heightoption - auto-generate css rules (widgets
heightandtop) - add
GridStack.Utils.sortutility function - add
removeAllAPI method - add
resizeandmoveAPI methods - add
resizableandmovableAPI methods - add
data-gs-no-moveattribute - add
floatoption - fix default css rule for inner content
- minor fixes
Very first version.