{"version":3,"file":"layout-8925a146.js","sources":["../../../../../web/bootstrap-aunoa/node_modules/packery/js/rect.js","../../../../../web/bootstrap-aunoa/node_modules/packery/js/packer.js","../../../../../web/bootstrap-aunoa/node_modules/packery/js/item.js","../../../../../web/bootstrap-aunoa/node_modules/packery/js/packery.js"],"sourcesContent":["/**\n * Rect\n * low-level utility class for basic geometry\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Packery = window.Packery || {};\n window.Packery.Rect = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\n// -------------------------- Rect -------------------------- //\n\nfunction Rect( props ) {\n // extend properties from defaults\n for ( var prop in Rect.defaults ) {\n this[ prop ] = Rect.defaults[ prop ];\n }\n\n for ( prop in props ) {\n this[ prop ] = props[ prop ];\n }\n\n}\n\nRect.defaults = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n};\n\nvar proto = Rect.prototype;\n\n/**\n * Determines whether or not this rectangle wholly encloses another rectangle or point.\n * @param {Rect} rect\n * @returns {Boolean}\n**/\nproto.contains = function( rect ) {\n // points don't have width or height\n var otherWidth = rect.width || 0;\n var otherHeight = rect.height || 0;\n return this.x <= rect.x &&\n this.y <= rect.y &&\n this.x + this.width >= rect.x + otherWidth &&\n this.y + this.height >= rect.y + otherHeight;\n};\n\n/**\n * Determines whether or not the rectangle intersects with another.\n * @param {Rect} rect\n * @returns {Boolean}\n**/\nproto.overlaps = function( rect ) {\n var thisRight = this.x + this.width;\n var thisBottom = this.y + this.height;\n var rectRight = rect.x + rect.width;\n var rectBottom = rect.y + rect.height;\n\n // http://stackoverflow.com/a/306332\n return this.x < rectRight &&\n thisRight > rect.x &&\n this.y < rectBottom &&\n thisBottom > rect.y;\n};\n\n/**\n * @param {Rect} rect - the overlapping rect\n * @returns {Array} freeRects - rects representing the area around the rect\n**/\nproto.getMaximalFreeRects = function( rect ) {\n\n // if no intersection, return false\n if ( !this.overlaps( rect ) ) {\n return false;\n }\n\n var freeRects = [];\n var freeRect;\n\n var thisRight = this.x + this.width;\n var thisBottom = this.y + this.height;\n var rectRight = rect.x + rect.width;\n var rectBottom = rect.y + rect.height;\n\n // top\n if ( this.y < rect.y ) {\n freeRect = new Rect({\n x: this.x,\n y: this.y,\n width: this.width,\n height: rect.y - this.y\n });\n freeRects.push( freeRect );\n }\n\n // right\n if ( thisRight > rectRight ) {\n freeRect = new Rect({\n x: rectRight,\n y: this.y,\n width: thisRight - rectRight,\n height: this.height\n });\n freeRects.push( freeRect );\n }\n\n // bottom\n if ( thisBottom > rectBottom ) {\n freeRect = new Rect({\n x: this.x,\n y: rectBottom,\n width: this.width,\n height: thisBottom - rectBottom\n });\n freeRects.push( freeRect );\n }\n\n // left\n if ( this.x < rect.x ) {\n freeRect = new Rect({\n x: this.x,\n y: this.y,\n width: rect.x - this.x,\n height: this.height\n });\n freeRects.push( freeRect );\n }\n\n return freeRects;\n};\n\nproto.canFit = function( rect ) {\n return this.width >= rect.width && this.height >= rect.height;\n};\n\nreturn Rect;\n\n}));\n","/**\n * Packer\n * bin-packing algorithm\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [ './rect' ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./rect')\n );\n } else {\n // browser global\n var Packery = window.Packery = window.Packery || {};\n Packery.Packer = factory( Packery.Rect );\n }\n\n}( window, function factory( Rect ) {\n'use strict';\n\n// -------------------------- Packer -------------------------- //\n\n/**\n * @param {Number} width\n * @param {Number} height\n * @param {String} sortDirection\n * topLeft for vertical, leftTop for horizontal\n */\nfunction Packer( width, height, sortDirection ) {\n this.width = width || 0;\n this.height = height || 0;\n this.sortDirection = sortDirection || 'downwardLeftToRight';\n\n this.reset();\n}\n\nvar proto = Packer.prototype;\n\nproto.reset = function() {\n this.spaces = [];\n\n var initialSpace = new Rect({\n x: 0,\n y: 0,\n width: this.width,\n height: this.height\n });\n\n this.spaces.push( initialSpace );\n // set sorter\n this.sorter = sorters[ this.sortDirection ] || sorters.downwardLeftToRight;\n};\n\n// change x and y of rect to fit with in Packer's available spaces\nproto.pack = function( rect ) {\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n if ( space.canFit( rect ) ) {\n this.placeInSpace( rect, space );\n break;\n }\n }\n};\n\nproto.columnPack = function( rect ) {\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n var canFitInSpaceColumn = space.x <= rect.x &&\n space.x + space.width >= rect.x + rect.width &&\n space.height >= rect.height - 0.01; // fudge number for rounding error\n if ( canFitInSpaceColumn ) {\n rect.y = space.y;\n this.placed( rect );\n break;\n }\n }\n};\n\nproto.rowPack = function( rect ) {\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n var canFitInSpaceRow = space.y <= rect.y &&\n space.y + space.height >= rect.y + rect.height &&\n space.width >= rect.width - 0.01; // fudge number for rounding error\n if ( canFitInSpaceRow ) {\n rect.x = space.x;\n this.placed( rect );\n break;\n }\n }\n};\n\nproto.placeInSpace = function( rect, space ) {\n // place rect in space\n rect.x = space.x;\n rect.y = space.y;\n\n this.placed( rect );\n};\n\n// update spaces with placed rect\nproto.placed = function( rect ) {\n // update spaces\n var revisedSpaces = [];\n for ( var i=0; i < this.spaces.length; i++ ) {\n var space = this.spaces[i];\n var newSpaces = space.getMaximalFreeRects( rect );\n // add either the original space or the new spaces to the revised spaces\n if ( newSpaces ) {\n revisedSpaces.push.apply( revisedSpaces, newSpaces );\n } else {\n revisedSpaces.push( space );\n }\n }\n\n this.spaces = revisedSpaces;\n\n this.mergeSortSpaces();\n};\n\nproto.mergeSortSpaces = function() {\n // remove redundant spaces\n Packer.mergeRects( this.spaces );\n this.spaces.sort( this.sorter );\n};\n\n// add a space back\nproto.addSpace = function( rect ) {\n this.spaces.push( rect );\n this.mergeSortSpaces();\n};\n\n// -------------------------- utility functions -------------------------- //\n\n/**\n * Remove redundant rectangle from array of rectangles\n * @param {Array} rects: an array of Rects\n * @returns {Array} rects: an array of Rects\n**/\nPacker.mergeRects = function( rects ) {\n var i = 0;\n var rect = rects[i];\n\n rectLoop:\n while ( rect ) {\n var j = 0;\n var compareRect = rects[ i + j ];\n\n while ( compareRect ) {\n if ( compareRect == rect ) {\n j++; // next\n } else if ( compareRect.contains( rect ) ) {\n // remove rect\n rects.splice( i, 1 );\n rect = rects[i]; // set next rect\n continue rectLoop; // bail on compareLoop\n } else if ( rect.contains( compareRect ) ) {\n // remove compareRect\n rects.splice( i + j, 1 );\n } else {\n j++;\n }\n compareRect = rects[ i + j ]; // set next compareRect\n }\n i++;\n rect = rects[i];\n }\n\n return rects;\n};\n\n\n// -------------------------- sorters -------------------------- //\n\n// functions for sorting rects in order\nvar sorters = {\n // top down, then left to right\n downwardLeftToRight: function( a, b ) {\n return a.y - b.y || a.x - b.x;\n },\n // left to right, then top down\n rightwardTopToBottom: function( a, b ) {\n return a.x - b.x || a.y - b.y;\n }\n};\n\n\n// -------------------------- -------------------------- //\n\nreturn Packer;\n\n}));\n","/**\n * Packery Item Element\n**/\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n './rect'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('./rect')\n );\n } else {\n // browser global\n window.Packery.Item = factory(\n window.Outlayer,\n window.Packery.Rect\n );\n }\n\n}( window, function factory( Outlayer, Rect ) {\n'use strict';\n\n// -------------------------- Item -------------------------- //\n\nvar docElemStyle = document.documentElement.style;\n\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\n// sub-class Item\nvar Item = function PackeryItem() {\n Outlayer.Item.apply( this, arguments );\n};\n\nvar proto = Item.prototype = Object.create( Outlayer.Item.prototype );\n\nvar __create = proto._create;\nproto._create = function() {\n // call default _create logic\n __create.call( this );\n this.rect = new Rect();\n};\n\nvar _moveTo = proto.moveTo;\nproto.moveTo = function( x, y ) {\n // don't shift 1px while dragging\n var dx = Math.abs( this.position.x - x );\n var dy = Math.abs( this.position.y - y );\n\n var canHackGoTo = this.layout.dragItemCount && !this.isPlacing &&\n !this.isTransitioning && dx < 1 && dy < 1;\n if ( canHackGoTo ) {\n this.goTo( x, y );\n return;\n }\n _moveTo.apply( this, arguments );\n};\n\n// -------------------------- placing -------------------------- //\n\nproto.enablePlacing = function() {\n this.removeTransitionStyles();\n // remove transform property from transition\n if ( this.isTransitioning && transformProperty ) {\n this.element.style[ transformProperty ] = 'none';\n }\n this.isTransitioning = false;\n this.getSize();\n this.layout._setRectSize( this.element, this.rect );\n this.isPlacing = true;\n};\n\nproto.disablePlacing = function() {\n this.isPlacing = false;\n};\n\n// ----- ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n var parent = this.element.parentNode;\n if ( parent ) {\n parent.removeChild( this.element );\n }\n // add space back to packer\n this.layout.packer.addSpace( this.rect );\n this.emitEvent( 'remove', [ this ] );\n};\n\n// ----- dropPlaceholder ----- //\n\nproto.showDropPlaceholder = function() {\n var dropPlaceholder = this.dropPlaceholder;\n if ( !dropPlaceholder ) {\n // create dropPlaceholder\n dropPlaceholder = this.dropPlaceholder = document.createElement('div');\n dropPlaceholder.className = 'packery-drop-placeholder';\n dropPlaceholder.style.position = 'absolute';\n }\n\n dropPlaceholder.style.width = this.size.width + 'px';\n dropPlaceholder.style.height = this.size.height + 'px';\n this.positionDropPlaceholder();\n this.layout.element.appendChild( dropPlaceholder );\n};\n\nproto.positionDropPlaceholder = function() {\n this.dropPlaceholder.style[ transformProperty ] = 'translate(' +\n this.rect.x + 'px, ' + this.rect.y + 'px)';\n};\n\nproto.hideDropPlaceholder = function() {\n // only remove once, #333\n var parent = this.dropPlaceholder.parentNode;\n if ( parent ) {\n parent.removeChild( this.dropPlaceholder );\n }\n};\n\n// ----- ----- //\n\nreturn Item;\n\n}));\n","/*!\n * Packery v2.1.2\n * Gapless, draggable grid layouts\n *\n * Licensed GPLv3 for open source use\n * or Packery Commercial License for commercial use\n *\n * http://packery.metafizzy.co\n * Copyright 2013-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n 'outlayer/outlayer',\n './rect',\n './packer',\n './item'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('get-size'),\n require('outlayer'),\n require('./rect'),\n require('./packer'),\n require('./item')\n );\n } else {\n // browser global\n window.Packery = factory(\n window.getSize,\n window.Outlayer,\n window.Packery.Rect,\n window.Packery.Packer,\n window.Packery.Item\n );\n }\n\n}( window, function factory( getSize, Outlayer, Rect, Packer, Item ) {\n'use strict';\n\n// ----- Rect ----- //\n\n// allow for pixel rounding errors IE8-IE11 & Firefox; #227\nRect.prototype.canFit = function( rect ) {\n return this.width >= rect.width - 1 && this.height >= rect.height - 1;\n};\n\n// -------------------------- Packery -------------------------- //\n\n// create an Outlayer layout class\nvar Packery = Outlayer.create('packery');\nPackery.Item = Item;\n\nvar proto = Packery.prototype;\n\nproto._create = function() {\n // call super\n Outlayer.prototype._create.call( this );\n\n // initial properties\n this.packer = new Packer();\n // packer for drop targets\n this.shiftPacker = new Packer();\n this.isEnabled = true;\n\n this.dragItemCount = 0;\n\n // create drag handlers\n var _this = this;\n this.handleDraggabilly = {\n dragStart: function() {\n _this.itemDragStart( this.element );\n },\n dragMove: function() {\n _this.itemDragMove( this.element, this.position.x, this.position.y );\n },\n dragEnd: function() {\n _this.itemDragEnd( this.element );\n }\n };\n\n this.handleUIDraggable = {\n start: function handleUIDraggableStart( event, ui ) {\n // HTML5 may trigger dragstart, dismiss HTML5 dragging\n if ( !ui ) {\n return;\n }\n _this.itemDragStart( event.currentTarget );\n },\n drag: function handleUIDraggableDrag( event, ui ) {\n if ( !ui ) {\n return;\n }\n _this.itemDragMove( event.currentTarget, ui.position.left, ui.position.top );\n },\n stop: function handleUIDraggableStop( event, ui ) {\n if ( !ui ) {\n return;\n }\n _this.itemDragEnd( event.currentTarget );\n }\n };\n\n};\n\n\n// ----- init & layout ----- //\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n\n this._getMeasurements();\n\n // reset packer\n var width, height, sortDirection;\n // packer settings, if horizontal or vertical\n if ( this._getOption('horizontal') ) {\n width = Infinity;\n height = this.size.innerHeight + this.gutter;\n sortDirection = 'rightwardTopToBottom';\n } else {\n width = this.size.innerWidth + this.gutter;\n height = Infinity;\n sortDirection = 'downwardLeftToRight';\n }\n\n this.packer.width = this.shiftPacker.width = width;\n this.packer.height = this.shiftPacker.height = height;\n this.packer.sortDirection = this.shiftPacker.sortDirection = sortDirection;\n\n this.packer.reset();\n\n // layout\n this.maxY = 0;\n this.maxX = 0;\n};\n\n/**\n * update columnWidth, rowHeight, & gutter\n * @private\n */\nproto._getMeasurements = function() {\n this._getMeasurement( 'columnWidth', 'width' );\n this._getMeasurement( 'rowHeight', 'height' );\n this._getMeasurement( 'gutter', 'width' );\n};\n\nproto._getItemLayoutPosition = function( item ) {\n this._setRectSize( item.element, item.rect );\n if ( this.isShifting || this.dragItemCount > 0 ) {\n var packMethod = this._getPackMethod();\n this.packer[ packMethod ]( item.rect );\n } else {\n this.packer.pack( item.rect );\n }\n\n this._setMaxXY( item.rect );\n return item.rect;\n};\n\nproto.shiftLayout = function() {\n this.isShifting = true;\n this.layout();\n delete this.isShifting;\n};\n\nproto._getPackMethod = function() {\n return this._getOption('horizontal') ? 'rowPack' : 'columnPack';\n};\n\n\n/**\n * set max X and Y value, for size of container\n * @param {Packery.Rect} rect\n * @private\n */\nproto._setMaxXY = function( rect ) {\n this.maxX = Math.max( rect.x + rect.width, this.maxX );\n this.maxY = Math.max( rect.y + rect.height, this.maxY );\n};\n\n/**\n * set the width and height of a rect, applying columnWidth and rowHeight\n * @param {Element} elem\n * @param {Packery.Rect} rect\n */\nproto._setRectSize = function( elem, rect ) {\n var size = getSize( elem );\n var w = size.outerWidth;\n var h = size.outerHeight;\n // size for columnWidth and rowHeight, if available\n // only check if size is non-zero, #177\n if ( w || h ) {\n w = this._applyGridGutter( w, this.columnWidth );\n h = this._applyGridGutter( h, this.rowHeight );\n }\n // rect must fit in packer\n rect.width = Math.min( w, this.packer.width );\n rect.height = Math.min( h, this.packer.height );\n};\n\n/**\n * fits item to columnWidth/rowHeight and adds gutter\n * @param {Number} measurement - item width or height\n * @param {Number} gridSize - columnWidth or rowHeight\n * @returns measurement\n */\nproto._applyGridGutter = function( measurement, gridSize ) {\n // just add gutter if no gridSize\n if ( !gridSize ) {\n return measurement + this.gutter;\n }\n gridSize += this.gutter;\n // fit item to columnWidth/rowHeight\n var remainder = measurement % gridSize;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n measurement = Math[ mathMethod ]( measurement / gridSize ) * gridSize;\n return measurement;\n};\n\nproto._getContainerSize = function() {\n if ( this._getOption('horizontal') ) {\n return {\n width: this.maxX - this.gutter\n };\n } else {\n return {\n height: this.maxY - this.gutter\n };\n }\n};\n\n\n// -------------------------- stamp -------------------------- //\n\n/**\n * makes space for element\n * @param {Element} elem\n */\nproto._manageStamp = function( elem ) {\n\n var item = this.getItem( elem );\n var rect;\n if ( item && item.isPlacing ) {\n rect = item.rect;\n } else {\n var offset = this._getElementOffset( elem );\n rect = new Rect({\n x: this._getOption('originLeft') ? offset.left : offset.right,\n y: this._getOption('originTop') ? offset.top : offset.bottom\n });\n }\n\n this._setRectSize( elem, rect );\n // save its space in the packer\n this.packer.placed( rect );\n this._setMaxXY( rect );\n};\n\n// -------------------------- methods -------------------------- //\n\nfunction verticalSorter( a, b ) {\n return a.position.y - b.position.y || a.position.x - b.position.x;\n}\n\nfunction horizontalSorter( a, b ) {\n return a.position.x - b.position.x || a.position.y - b.position.y;\n}\n\nproto.sortItemsByPosition = function() {\n var sorter = this._getOption('horizontal') ? horizontalSorter : verticalSorter;\n this.items.sort( sorter );\n};\n\n/**\n * Fit item element in its current position\n * Packery will position elements around it\n * useful for expanding elements\n *\n * @param {Element} elem\n * @param {Number} x - horizontal destination position, optional\n * @param {Number} y - vertical destination position, optional\n */\nproto.fit = function( elem, x, y ) {\n var item = this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n // stamp item to get it out of layout\n this.stamp( item.element );\n // set placing flag\n item.enablePlacing();\n this.updateShiftTargets( item );\n // fall back to current position for fitting\n x = x === undefined ? item.rect.x: x;\n y = y === undefined ? item.rect.y: y;\n // position it best at its destination\n this.shift( item, x, y );\n this._bindFitEvents( item );\n item.moveTo( item.rect.x, item.rect.y );\n // layout everything else\n this.shiftLayout();\n // return back to regularly scheduled programming\n this.unstamp( item.element );\n this.sortItemsByPosition();\n item.disablePlacing();\n};\n\n/**\n * emit event when item is fit and other items are laid out\n * @param {Packery.Item} item\n * @private\n */\nproto._bindFitEvents = function( item ) {\n var _this = this;\n var ticks = 0;\n function onLayout() {\n ticks++;\n if ( ticks != 2 ) {\n return;\n }\n _this.dispatchEvent( 'fitComplete', null, [ item ] );\n }\n // when item is laid out\n item.once( 'layout', onLayout );\n // when all items are laid out\n this.once( 'layoutComplete', onLayout );\n};\n\n// -------------------------- resize -------------------------- //\n\n// debounced, layout on resize\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #285, outlayer#9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n if ( this.options.shiftPercentResize ) {\n this.resizeShiftPercentLayout();\n } else {\n this.layout();\n }\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n var innerSize = this._getOption('horizontal') ? 'innerHeight' : 'innerWidth';\n return size[ innerSize ] != this.size[ innerSize ];\n};\n\nproto.resizeShiftPercentLayout = function() {\n var items = this._getItemsForLayout( this.items );\n\n var isHorizontal = this._getOption('horizontal');\n var coord = isHorizontal ? 'y' : 'x';\n var measure = isHorizontal ? 'height' : 'width';\n var segmentName = isHorizontal ? 'rowHeight' : 'columnWidth';\n var innerSize = isHorizontal ? 'innerHeight' : 'innerWidth';\n\n // proportional re-align items\n var previousSegment = this[ segmentName ];\n previousSegment = previousSegment && previousSegment + this.gutter;\n\n if ( previousSegment ) {\n this._getMeasurements();\n var currentSegment = this[ segmentName ] + this.gutter;\n items.forEach( function( item ) {\n var seg = Math.round( item.rect[ coord ] / previousSegment );\n item.rect[ coord ] = seg * currentSegment;\n });\n } else {\n var currentSize = getSize( this.element )[ innerSize ] + this.gutter;\n var previousSize = this.packer[ measure ];\n items.forEach( function( item ) {\n item.rect[ coord ] = ( item.rect[ coord ] / previousSize ) * currentSize;\n });\n }\n\n this.shiftLayout();\n};\n\n// -------------------------- drag -------------------------- //\n\n/**\n * handle an item drag start event\n * @param {Element} elem\n */\nproto.itemDragStart = function( elem ) {\n if ( !this.isEnabled ) {\n return;\n }\n this.stamp( elem );\n // this.ignore( elem );\n var item = this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n item.enablePlacing();\n item.showDropPlaceholder();\n this.dragItemCount++;\n this.updateShiftTargets( item );\n};\n\nproto.updateShiftTargets = function( dropItem ) {\n this.shiftPacker.reset();\n\n // pack stamps\n this._getBoundingRect();\n var isOriginLeft = this._getOption('originLeft');\n var isOriginTop = this._getOption('originTop');\n this.stamps.forEach( function( stamp ) {\n // ignore dragged item\n var item = this.getItem( stamp );\n if ( item && item.isPlacing ) {\n return;\n }\n var offset = this._getElementOffset( stamp );\n var rect = new Rect({\n x: isOriginLeft ? offset.left : offset.right,\n y: isOriginTop ? offset.top : offset.bottom\n });\n this._setRectSize( stamp, rect );\n // save its space in the packer\n this.shiftPacker.placed( rect );\n }, this );\n\n // reset shiftTargets\n var isHorizontal = this._getOption('horizontal');\n var segmentName = isHorizontal ? 'rowHeight' : 'columnWidth';\n var measure = isHorizontal ? 'height' : 'width';\n\n this.shiftTargetKeys = [];\n this.shiftTargets = [];\n var boundsSize;\n var segment = this[ segmentName ];\n segment = segment && segment + this.gutter;\n\n if ( segment ) {\n var segmentSpan = Math.ceil( dropItem.rect[ measure ] / segment );\n var segs = Math.floor( ( this.shiftPacker[ measure ] + this.gutter ) / segment );\n boundsSize = ( segs - segmentSpan ) * segment;\n // add targets on top\n for ( var i=0; i < segs; i++ ) {\n var initialX = isHorizontal ? 0 : i * segment;\n var initialY = isHorizontal ? i * segment : 0;\n this._addShiftTarget( initialX, initialY, boundsSize );\n }\n } else {\n boundsSize = ( this.shiftPacker[ measure ] + this.gutter ) - dropItem.rect[ measure ];\n this._addShiftTarget( 0, 0, boundsSize );\n }\n\n // pack each item to measure where shiftTargets are\n var items = this._getItemsForLayout( this.items );\n var packMethod = this._getPackMethod();\n items.forEach( function( item ) {\n var rect = item.rect;\n this._setRectSize( item.element, rect );\n this.shiftPacker[ packMethod ]( rect );\n\n // add top left corner\n this._addShiftTarget( rect.x, rect.y, boundsSize );\n // add bottom left / top right corner\n var cornerX = isHorizontal ? rect.x + rect.width : rect.x;\n var cornerY = isHorizontal ? rect.y : rect.y + rect.height;\n this._addShiftTarget( cornerX, cornerY, boundsSize );\n\n if ( segment ) {\n // add targets for each column on bottom / row on right\n var segSpan = Math.round( rect[ measure ] / segment );\n for ( var i=1; i < segSpan; i++ ) {\n var segX = isHorizontal ? cornerX : rect.x + segment * i;\n var segY = isHorizontal ? rect.y + segment * i : cornerY;\n this._addShiftTarget( segX, segY, boundsSize );\n }\n }\n }, this );\n\n};\n\nproto._addShiftTarget = function( x, y, boundsSize ) {\n var checkCoord = this._getOption('horizontal') ? y : x;\n if ( checkCoord !== 0 && checkCoord > boundsSize ) {\n return;\n }\n // create string for a key, easier to keep track of what targets\n var key = x + ',' + y;\n var hasKey = this.shiftTargetKeys.indexOf( key ) != -1;\n if ( hasKey ) {\n return;\n }\n this.shiftTargetKeys.push( key );\n this.shiftTargets.push({ x: x, y: y });\n};\n\n// -------------------------- drop -------------------------- //\n\nproto.shift = function( item, x, y ) {\n var shiftPosition;\n var minDistance = Infinity;\n var position = { x: x, y: y };\n this.shiftTargets.forEach( function( target ) {\n var distance = getDistance( target, position );\n if ( distance < minDistance ) {\n shiftPosition = target;\n minDistance = distance;\n }\n });\n item.rect.x = shiftPosition.x;\n item.rect.y = shiftPosition.y;\n};\n\nfunction getDistance( a, b ) {\n var dx = b.x - a.x;\n var dy = b.y - a.y;\n return Math.sqrt( dx * dx + dy * dy );\n}\n\n// -------------------------- drag move -------------------------- //\n\nvar DRAG_THROTTLE_TIME = 120;\n\n/**\n * handle an item drag move event\n * @param {Element} elem\n * @param {Number} x - horizontal change in position\n * @param {Number} y - vertical change in position\n */\nproto.itemDragMove = function( elem, x, y ) {\n var item = this.isEnabled && this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n x -= this.size.paddingLeft;\n y -= this.size.paddingTop;\n\n var _this = this;\n function onDrag() {\n _this.shift( item, x, y );\n item.positionDropPlaceholder();\n _this.layout();\n }\n\n // throttle\n var now = new Date();\n var isThrottled = this._itemDragTime && now - this._itemDragTime < DRAG_THROTTLE_TIME;\n if ( isThrottled ) {\n clearTimeout( this.dragTimeout );\n this.dragTimeout = setTimeout( onDrag, DRAG_THROTTLE_TIME );\n } else {\n onDrag();\n this._itemDragTime = now;\n }\n};\n\n// -------------------------- drag end -------------------------- //\n\n/**\n * handle an item drag end event\n * @param {Element} elem\n */\nproto.itemDragEnd = function( elem ) {\n var item = this.isEnabled && this.getItem( elem );\n if ( !item ) {\n return;\n }\n\n clearTimeout( this.dragTimeout );\n item.element.classList.add('is-positioning-post-drag');\n\n var completeCount = 0;\n var _this = this;\n function onDragEndLayoutComplete() {\n completeCount++;\n if ( completeCount != 2 ) {\n return;\n }\n // reset drag item\n item.element.classList.remove('is-positioning-post-drag');\n item.hideDropPlaceholder();\n _this.dispatchEvent( 'dragItemPositioned', null, [ item ] );\n }\n\n item.once( 'layout', onDragEndLayoutComplete );\n this.once( 'layoutComplete', onDragEndLayoutComplete );\n item.moveTo( item.rect.x, item.rect.y );\n this.layout();\n this.dragItemCount = Math.max( 0, this.dragItemCount - 1 );\n this.sortItemsByPosition();\n item.disablePlacing();\n this.unstamp( item.element );\n};\n\n/**\n * binds Draggabilly events\n * @param {Draggabilly} draggie\n */\nproto.bindDraggabillyEvents = function( draggie ) {\n this._bindDraggabillyEvents( draggie, 'on' );\n};\n\nproto.unbindDraggabillyEvents = function( draggie ) {\n this._bindDraggabillyEvents( draggie, 'off' );\n};\n\nproto._bindDraggabillyEvents = function( draggie, method ) {\n var handlers = this.handleDraggabilly;\n draggie[ method ]( 'dragStart', handlers.dragStart );\n draggie[ method ]( 'dragMove', handlers.dragMove );\n draggie[ method ]( 'dragEnd', handlers.dragEnd );\n};\n\n/**\n * binds jQuery UI Draggable events\n * @param {jQuery} $elems\n */\nproto.bindUIDraggableEvents = function( $elems ) {\n this._bindUIDraggableEvents( $elems, 'on' );\n};\n\nproto.unbindUIDraggableEvents = function( $elems ) {\n this._bindUIDraggableEvents( $elems, 'off' );\n};\n\nproto._bindUIDraggableEvents = function( $elems, method ) {\n var handlers = this.handleUIDraggable;\n $elems\n [ method ]( 'dragstart', handlers.start )\n [ method ]( 'drag', handlers.drag )\n [ method ]( 'dragstop', handlers.stop );\n};\n\n// ----- destroy ----- //\n\nvar _destroy = proto.destroy;\nproto.destroy = function() {\n _destroy.apply( this, arguments );\n // disable flag; prevent drag events from triggering. #72\n this.isEnabled = false;\n};\n\n// ----- ----- //\n\nPackery.Rect = Rect;\nPackery.Packer = Packer;\n\nreturn Packery;\n\n}));\n"],"names":["window","factory","module","Rect","props","prop","proto","rect","otherWidth","otherHeight","thisRight","thisBottom","rectRight","rectBottom","freeRects","freeRect","require$$0","Packery","Packer","width","height","sortDirection","initialSpace","sorters","i","space","canFitInSpaceColumn","canFitInSpaceRow","revisedSpaces","newSpaces","rects","rectLoop","j","compareRect","a","b","require$$1","Outlayer","docElemStyle","transformProperty","Item","__create","_moveTo","x","y","dx","dy","canHackGoTo","parent","dropPlaceholder","require$$2","require$$3","require$$4","getSize","_this","event","ui","item","packMethod","elem","size","w","h","measurement","gridSize","remainder","mathMethod","offset","verticalSorter","horizontalSorter","sorter","ticks","onLayout","innerSize","items","isHorizontal","coord","measure","segmentName","previousSegment","currentSegment","seg","currentSize","previousSize","dropItem","isOriginLeft","isOriginTop","stamp","boundsSize","segment","segmentSpan","segs","initialX","initialY","cornerX","cornerY","segSpan","segX","segY","checkCoord","key","hasKey","shiftPosition","minDistance","position","target","distance","getDistance","DRAG_THROTTLE_TIME","onDrag","now","isThrottled","completeCount","onDragEndLayoutComplete","draggie","method","handlers","$elems","_destroy"],"mappings":"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"}