{"version":3,"file":"infinitegrid.js","sources":["../src/browser.ts","../src/consts.ts","../src/utils.ts","../src/ItemManager.ts","../src/DOMRenderer.ts","../src/Infinite.ts","../src/RenderManager.ts","../src/Watcher.ts","../src/InfiniteGrid.ts","../src/layouts/GridLayout.ts","../src/layouts/FrameLayout.ts","../src/layouts/SquareLayout.ts","../src/layouts/lib/BoxModel.ts","../src/layouts/PackingLayout.ts","../src/layouts/lib/dijkstra.ts","../src/layouts/JustifiedLayout.ts","../src/index.umd.ts"],"sourcesContent":["let win: Window;\n\nif (typeof window === \"undefined\") {\n\t// window is undefined in node.js\n\twin = {\n\t\tdocument: {},\n\t\tnavigator: {\n\t\t\tuserAgent: \"\",\n\t\t},\n\t} as Window;\n} else {\n\twin = window;\n}\n\nexport { win as window };\nexport const document = win.document;\n","import { window, document } from \"./browser\";\nimport { IAlign, InfiniteGridMethodsKeys } from \"./types\";\n\nconst ua = window.navigator.userAgent;\n\nexport const SUPPORT_COMPUTEDSTYLE = !!(\"getComputedStyle\" in window);\nexport const SUPPORT_ADDEVENTLISTENER = !!(\"addEventListener\" in document);\nexport const SUPPORT_PASSIVE = (() => {\n\tlet supportsPassiveOption = false;\n\n\ttry {\n\t\tif (SUPPORT_ADDEVENTLISTENER && Object.defineProperty) {\n\t\t\t// tslint:disable-next-line: no-empty\n\t\t\tdocument.addEventListener(\"test\", () => { }, Object.defineProperty({},\n\t\t\t\t\"passive\", {\n\t\t\t\tget() {\n\t\t\t\t\tsupportsPassiveOption = true;\n\t\t\t\t},\n\t\t\t}));\n\t\t}\n\t} catch (e) {\n\t\t//\n\t}\n\treturn supportsPassiveOption;\n})();\n\nexport const IS_IE = /MSIE|Trident|Windows Phone|Edge/.test(ua);\nexport const IS_IOS = /iPhone|iPad/.test(ua);\nexport const IS_ANDROID2 = /Android 2\\./.test(ua);\nexport const CONTAINER_CLASSNAME = \"_eg-infinitegrid-container_\";\nexport const IGNORE_CLASSNAME = \"_eg-infinitegrid-ignore_\";\nexport const TRANSITION_NAME = \"_INFINITEGRID_TRANSITION\";\n\nexport const VERTICAL = \"vertical\";\nexport const HORIZONTAL = \"horizontal\";\n\nexport const DUMMY_POSITION = -100000;\nexport const GROUPKEY_ATT = \"data-groupkey\";\n\nexport const DEFAULT_OPTIONS = {\n\titemSelector: \"*\",\n\tisOverflowScroll: false,\n\tthreshold: 100,\n\tisEqualSize: false,\n\tisConstantSize: false,\n\tuseRecycle: true,\n\thorizontal: false,\n\ttransitionDuration: 0,\n\tuseFit: true,\n\tattributePrefix: \"data-\",\n\trenderExternal: false,\n};\n\nexport const DEFAULT_LAYOUT_OPTIONS = {\n\thorizontal: false,\n\tmargin: 0,\n};\n\nexport const agent = ua.toLowerCase();\nexport const isMobile = /mobi|ios|android/.test(agent);\n\nexport const ALIGN: IAlign = {\n\tSTART: \"start\",\n\tCENTER: \"center\",\n\tEND: \"end\",\n\tJUSTIFY: \"justify\",\n};\n\nexport const IDLE = 0;\nexport const LOADING_APPEND = 1;\nexport const LOADING_PREPEND = 2;\nexport const PROCESSING = 4;\n\nconst webkit = /applewebkit\\/([\\d|.]*)/g.exec(agent);\n\nexport const WEBKIT_VERSION = (webkit && parseInt(webkit[1], 10)) || 0;\nexport const DEFENSE_BROWSER = (WEBKIT_VERSION && WEBKIT_VERSION < 537);\n\nexport const ITEM_KEYS = [\"content\", \"groupKey\", \"itemKey\", \"orgSize\", \"mounted\", \"prevRect\", \"rect\", \"size\"];\ninterface ITransitionEnd {\n\ttransitionend: string;\n\twebkitTransitionEnd: string;\n\tMSTransitionEnd: string;\n\toTransitionEnd: string;\n\tmozTransitionEnd: string;\n}\n\nexport const [TRANSFORM, TRANSITION, TRANSITION_END] = (() => {\n\tconst properties: ITransitionEnd = {\n\t\ttransitionend: \"\",\n\t\twebkitTransitionEnd: \"-webkit-\",\n\t\tMSTransitionEnd: \"-ms-\",\n\t\toTransitionEnd: \"-o-\",\n\t\tmozTransitionEnd: \"-moz-\",\n\t};\n\n\tfor (const property in properties) {\n\t\tconst prefix = properties[property as keyof ITransitionEnd];\n\n\t\tif (`on${property.toLowerCase()}` in window) {\n\t\t\treturn [`${prefix}transform`, `${prefix}transition`, property];\n\t\t}\n\t}\n\treturn [];\n})() as [\"transform\", \"transition\", \"transitionend\"];\n\nexport const INFINITEGRID_EVENTS = [\"append\", \"prepend\", \"imageError\", \"change\", \"layoutComplete\"];\n\n// It's for making mistakes.\n// Whenever you add a public method, you must add the corresponding method name to an array or object.\n// An additional error may occur if not added.\nexport const INFINITEGRID_METHODS: { [key in InfiniteGridMethodsKeys]: true } = {\n\tgetLoadingBar: true,\n\tgetItem: true,\n\tgetItems: true,\n\tlayout: true,\n\tgetGroupKeys: true,\n\tgetStatus: true,\n\tsetStatus: true,\n\tisProcessing: true,\n\tstartLoading: true,\n\tendLoading: true,\n\tisLoading: true,\n\tupdateItem: true,\n\tupdateItems: true,\n\tmoveTo: true,\n};\n","\nimport { window, document } from \"./browser\";\nimport {\n\tSUPPORT_COMPUTEDSTYLE,\n\tSUPPORT_ADDEVENTLISTENER,\n\tSUPPORT_PASSIVE,\n\tVERTICAL,\n\tHORIZONTAL,\n\tDEFAULT_LAYOUT_OPTIONS,\n\tDUMMY_POSITION,\n\tINFINITEGRID_METHODS,\n} from \"./consts\";\nimport InfiniteGrid from \"./InfiniteGrid\";\nimport { IJQuery, IRectlProperties, InnerSizeType, ClientSizeType, ScrollSizeType, OffsetSizeType, IItem, IGroup, IArrayFormat, IInfiniteGridItem } from \"./types\";\nexport function toArray(nodes: HTMLCollection): HTMLElement[];\nexport function toArray<T extends Node>(nodes: IArrayFormat<T>): T[];\nexport function toArray<T extends Node>(nodes: IArrayFormat<T>): T[] {\n\t// SCRIPT5014 in IE8\n\tconst array: T[] = [];\n\n\tif (nodes) {\n\t\tconst length = nodes.length;\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tarray.push(nodes[i]);\n\t\t}\n\t}\n\treturn array;\n}\nexport function matchHTML(html: string) {\n\treturn html.match(/^<([A-z]+)\\s*([^>]*)>/);\n}\n/**\n * Select or create element\n * @param {String|HTMLElement|jQuery} param\n * when string given is as HTML tag, then create element\n * otherwise it returns selected elements\n * @param {Boolean} multi\n * @returns {HTMLElement}\n */\nexport function $(param: Window, multi?: false): Window;\nexport function $(\n\tparam: string | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti: true,\n): HTMLElement[];\nexport function $(\n\tparam: string | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti?: false,\n): HTMLElement;\nexport function $(\n\tparam: string | HTMLElement | Window | IJQuery,\n\tmulti?: false,\n): HTMLElement | Window;\nexport function $(\n\tparam: string | Window | HTMLElement | Array<string | HTMLElement> | IJQuery,\n\tmulti = false,\n): HTMLElement | Window | HTMLElement[] {\n\tlet el: Window | HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | undefined;\n\n\tif (typeof param === \"string\") { // String (HTML, Selector)\n\t\t// check if string is HTML tag format\n\t\tconst match = matchHTML(param);\n\n\t\t// creating element\n\t\tif (match) { // HTML\n\t\t\tconst dummy = document.createElement(\"div\");\n\n\t\t\tdummy.innerHTML = param;\n\t\t\tel = dummy.childNodes as NodeListOf<HTMLElement>;\n\t\t} else { // Selector\n\t\t\tel = document.querySelectorAll<HTMLElement>(param);\n\t\t}\n\t\tif (multi) {\n\t\t\treturn toArray(el as NodeListOf<HTMLElement>);\n\t\t} else {\n\t\t\treturn el && (el as NodeListOf<HTMLElement>)[0];\n\t\t}\n\t} else if (isWindow(param)) { // window\n\t\tel = param;\n\t} else if (isJQuery(param)) { // jQuery\n\t\tel = multi ? $(param.toArray(), true) :\n\t\t\t$(param.get(0), false);\n\t} else if (Array.isArray(param)) {\n\t\tel = param.map(v => $(v));\n\t\tif (!multi) {\n\t\t\tel = el.length >= 1 ? (el as HTMLElement[])[0] : undefined;\n\t\t}\n\t} else if (param.nodeName &&\n\t\t(param.nodeType === 1 || param.nodeType === 9)) { // HTMLElement, Document\n\t\tel = param;\n\t} else {\n\t\tel = [].slice.call(el);\n\t}\n\treturn el as Window | HTMLElement | HTMLElement[];\n}\nexport function addEvent(\n\telement: Element | Window,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n\teventListenerOptions?: boolean | { [key: string]: any },\n) {\n\tif (SUPPORT_ADDEVENTLISTENER) {\n\t\tlet options = eventListenerOptions || false;\n\n\t\tif (typeof eventListenerOptions === \"object\") {\n\t\t\toptions = SUPPORT_PASSIVE ? eventListenerOptions : false;\n\t\t}\n\t\telement.addEventListener(type, handler, options);\n\t} else if ((element as any).attachEvent) {\n\t\t(element as any).attachEvent(`on${type}`, handler);\n\t} else {\n\t\t(element as any)[`on${type}`] = handler;\n\t}\n}\nexport function removeEvent(\n\telement: Element | Window,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n) {\n\tif (element.removeEventListener) {\n\t\telement.removeEventListener(type, handler, false);\n\t} else if ((element as any).detachEvent) {\n\t\t(element as any).detachEvent(`on${type}`, handler);\n\t} else {\n\t\t(element as any)[`on${type}`] = null;\n\t}\n}\nexport function addOnceEvent(\n\telement: Element,\n\ttype: string,\n\thandler: (...args: any[]) => any,\n\teventListenerOptions?: boolean | { [key: string]: any },\n) {\n\tconst callback = (e: any) => {\n\t\tremoveEvent(element, type, callback);\n\t\thandler(e);\n\t};\n\n\taddEvent(element, type, callback, eventListenerOptions);\n}\nexport function scroll(el: HTMLElement | Window, horizontal = false) {\n\tconst prop = `scroll${horizontal ? \"Left\" : \"Top\"}` as \"scrollLeft\" | \"scrollTop\";\n\n\tif (isWindow(el)) {\n\t\treturn window[horizontal ? \"pageXOffset\" : \"pageYOffset\"] || document.body[prop] || document.documentElement[prop];\n\t} else {\n\t\treturn el[prop];\n\t}\n}\nexport function scrollTo(el: Window | Element, x: number, y: number) {\n\tif (isWindow(el)) {\n\t\tel.scroll(x, y);\n\t} else {\n\t\tel.scrollLeft = x;\n\t\tel.scrollTop = y;\n\t}\n}\nexport function scrollBy(el: Window | Element, x: number, y: number) {\n\tif (isWindow(el)) {\n\t\tel.scrollBy(x, y);\n\t} else {\n\t\tel.scrollLeft += x;\n\t\tel.scrollTop += y;\n\t}\n}\nexport function getStyles(el: Element) {\n\treturn (SUPPORT_COMPUTEDSTYLE ?\n\t\twindow.getComputedStyle(el) : (el as any).currentStyle) || {};\n}\nfunction _getSize(el: Window | Document | HTMLElement, name: \"Width\" | \"Height\", isOffset?: boolean) {\n\tif (isWindow(el)) { // WINDOW\n\t\treturn window[`inner${name}` as InnerSizeType] || document.body[`client${name}` as ClientSizeType];\n\t} else if (isDocument(el)) { // DOCUMENT_NODE\n\t\tconst doc = (el as Document).documentElement;\n\t\tconst body = (el as Document).body;\n\n\t\treturn Math.max(\n\t\t\tbody[`scroll${name}` as ScrollSizeType], doc[`scroll${name}` as ScrollSizeType],\n\t\t\tbody[`offset${name}` as OffsetSizeType], doc[`offset${name}` as OffsetSizeType],\n\t\t\tdoc[`client${name}` as ClientSizeType],\n\t\t);\n\t} else { // NODE\n\t\tlet size = 0;\n\n\t\tif (isOffset) {\n\t\t\tconst clientRect = el.getBoundingClientRect();\n\n\t\t\tsize = name === \"Width\" ? clientRect.right - clientRect.left : clientRect.bottom - clientRect.top;\n\t\t} else {\n\t\t\tsize = el[`client${name}` as ClientSizeType] || el[`offset${name}` as OffsetSizeType];\n\t\t}\n\t\tif (size) {\n\t\t\treturn size;\n\t\t}\n\t\tconst cssSize = getStyles(el)[name.toLowerCase()];\n\n\t\treturn (~cssSize.indexOf(\"px\") && parseFloat(cssSize)) || 0;\n\t}\n}\n\nexport function innerWidth(el: Window | Document | HTMLElement) {\n\treturn _getSize(el, \"Width\", false);\n}\nexport function innerHeight(el: Window | Document | HTMLElement) {\n\treturn _getSize(el, \"Height\", false);\n}\nexport function outerWidth(el: Window | Document | HTMLElement) {\n\treturn _getSize(el, \"Width\", true);\n}\nexport function outerHeight(el: Window | Document | HTMLElement) {\n\treturn _getSize(el, \"Height\", true);\n}\nexport function getSize(el: HTMLElement) {\n\treturn {\n\t\twidth: outerWidth(el),\n\t\theight: outerHeight(el),\n\t};\n}\nexport const STYLE: {\n\tvertical: IRectlProperties,\n\thorizontal: IRectlProperties,\n} = {\n\tvertical: {\n\t\tstartPos1: \"top\",\n\t\tendPos1: \"bottom\",\n\t\tsize1: \"height\",\n\t\tstartPos2: \"left\",\n\t\tendPos2: \"right\",\n\t\tsize2: \"width\",\n\t},\n\thorizontal: {\n\t\tstartPos1: \"left\",\n\t\tendPos1: \"right\",\n\t\tsize1: \"width\",\n\t\tstartPos2: \"top\",\n\t\tendPos2: \"bottom\",\n\t\tsize2: \"height\",\n\t},\n};\n\nexport function getStyleNames(isHorizontal: boolean): IRectlProperties {\n\treturn STYLE[isHorizontal ? HORIZONTAL : VERTICAL];\n}\nexport function assign<A, B>(target: A, source: B): A & B;\nexport function assign<A, B, C>(target: A, source1: B, source2: C): A & B & C;\nexport function assign<A, B, C, D>(target: A, source1: B, source2: C, source3: D): A & B & C & D;\nexport function assign(target: { [key: string]: any }, ...sources: Array<{ [key: string]: any }>): { [key: string]: any };\nexport function assign(target: { [key: string]: any }, ...sources: Array<{ [key: string]: any }>) {\n\tsources.forEach(source => {\n\t\tfor (const key in source) {\n\t\t\ttarget[key] = source[key];\n\t\t}\n\t});\n\treturn target;\n}\nexport function assignOptions<A extends { [key: string]: any }, B extends { [key: string]: any }>(\n\tdefaultOptions: A, options: B): typeof DEFAULT_LAYOUT_OPTIONS & A & B {\n\treturn assign({},\n\t\tDEFAULT_LAYOUT_OPTIONS,\n\t\tdefaultOptions,\n\t\toptions);\n}\n\nexport function toZeroArray(outline?: number[]) {\n\tif (!outline || !outline.length) {\n\t\treturn [0];\n\t}\n\treturn outline;\n}\nexport function cloneItems<T extends { [key: string]: any }>(items: T[]) {\n\treturn items.map(item => assign({}, item));\n}\nexport function isJQuery(el: any): el is IJQuery {\n\treturn (typeof (window as any).jQuery === \"function\" && el instanceof (window as any).jQuery) ||\n\t\tel.constructor.prototype.jquery && el.toArray;\n}\nexport function isWindow(el: any): el is Window {\n\treturn el === window;\n}\nexport function isDocument(el: Node): el is Document {\n\treturn el.nodeType === 9;\n}\n\nexport function fill<T>(arr: T[], value: T) {\n\tconst length = arr.length;\n\n\tfor (let i = length - 1; i >= 0; --i) {\n\t\tarr[i] = value;\n\t}\n\n\treturn arr;\n}\n\nexport function isUndefined(target: any): target is undefined {\n\treturn typeof target === \"undefined\";\n}\n\nexport function find<T>(arr: T[], callback: (target: T) => any) {\n\tconst length = arr.length;\n\n\tfor (let i = 0; i < length; ++i) {\n\t\tif (callback(arr[i])) {\n\t\t\treturn arr[i];\n\t\t}\n\t}\n\treturn null;\n}\nexport function findLast<T>(arr: T[], callback: (target: T) => any) {\n\tconst length = arr.length;\n\n\tfor (let i = length - 1; i >= 0; --i) {\n\t\tif (callback(arr[i])) {\n\t\t\treturn arr[i];\n\t\t}\n\t}\n\treturn null;\n}\nexport function categorize(newItems: IItem[]) {\n\tconst newGroups: IGroup[] = [];\n\tconst groupKeys: { [key: string]: IGroup } = {};\n\n\tnewItems.forEach(item => {\n\t\tconst { groupKey } = item;\n\t\tlet group = groupKeys[groupKey];\n\n\t\tif (!group) {\n\t\t\tgroup = {\n\t\t\t\tgroupKey,\n\t\t\t\titems: [],\n\t\t\t};\n\t\t\tgroupKeys[groupKey] = group;\n\t\t\tnewGroups.push(group);\n\t\t}\n\n\t\tgroup.items.push(item);\n\t});\n\n\treturn newGroups;\n}\n\nexport function resetSize(item: IInfiniteGridItem) {\n\titem.orgSize = null;\n\titem.size = null;\n}\n\nexport function makeItem(groupKey: string | number, el?: HTMLElement) {\n\treturn {\n\t\tel,\n\t\tgroupKey,\n\t\tmounted: false,\n\t\tcontent: el ? el.outerHTML : \"\",\n\t\trect: {\n\t\t\ttop: DUMMY_POSITION,\n\t\t\tleft: DUMMY_POSITION,\n\t\t},\n\t};\n}\n\n/**\n * Decorator that makes the method of infinitegrid available in the framework.\n * @ko í”„ë ˆìž„ì›Œí¬ì—ì„œ ì¸í”¼ë‹ˆíŠ¸ê·¸ë¦¬ë“œì˜ 메소드를 ì‚¬ìš©í• ìˆ˜ 있게 하는 ë°ì½”ë ˆì´í„°.\n * @memberof eg.InfiniteGrid\n * @private\n * @example\n * ```js\n * import NativeInfiniteGrid, { withInfiniteGridMethods } from \"@egjs/infinitegrid\";\n *\n * class InfiniteGrid extends React.Component<Partial<InfiniteGridProps & InfiniteGridOptions>> {\n * @withInfiniteGridMethods\n * private infinitegrid: NativeInfiniteGrid;\n * }\n * ```\n */\nexport function withInfiniteGridMethods(prototype: any, infinitegridName: string) {\n\tObject.keys(INFINITEGRID_METHODS).forEach((name: keyof InfiniteGrid) => {\n\t\tif (prototype[name]) {\n\t\t\treturn;\n\t\t}\n\t\tprototype[name] = function(...args) {\n\t\t\tconst result = this[infinitegridName][name](...args);\n\n\t\t\t// fix `this` type to return your own `infinitegrid` instance to the instance using the decorator.\n\t\t\tif (result === this[infinitegridName]) {\n\t\t\t\treturn this;\n\t\t\t} else {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t};\n\t});\n}\n\nexport function hasClass(element: HTMLElement, className: string) {\n\tif (element.classList) {\n\t\treturn element.classList.contains(className);\n\t}\n\treturn !!element.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`));\n}\n\nexport function addClass(element: HTMLElement, className: string) {\n\tif (element.classList) {\n\t\telement.classList.add(className);\n\t} else {\n\t\telement.className += ` ${className}`;\n\t}\n}\n","import { diff, DiffResult } from \"@egjs/list-differ\";\nimport { GROUPKEY_ATT, DUMMY_POSITION, ITEM_KEYS } from \"./consts\";\nimport { isUndefined, assign, categorize, makeItem } from \"./utils\";\nimport { CursorType, IInfiniteGridGroup, IInfiniteGridItem, IItemManagerStatus, IItem, IGroup } from \"./types\";\n\nexport default class ItemManager {\n\tpublic static toItems(elements: HTMLElement[], groupKey: string | number): IInfiniteGridItem[] {\n\t\treturn elements.map(el => makeItem(groupKey, el));\n\t}\n\tpublic static pluck<A extends { [key: string]: any }, B extends keyof A>(data: A[], property: B):\n\t\tA[B] extends any[] ? A[B] : Array<A[B]> {\n\t\treturn data.reduce((acc, v) => acc.concat(v[property]), []) as any;\n\t}\n\t// groups\n\tprivate _groups: IInfiniteGridGroup[] = [];\n\t// group keys\n\tprivate _groupKeys: { [key: string]: IInfiniteGridGroup } = {};\n\n\tpublic clear() {\n\t\tthis._groups = [];\n\t\tthis._groupKeys = {};\n\t}\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IItemManagerStatus {\n\t\tconst datas = this._groups;\n\t\tconst startIndex = Math.max(this.indexOf(startKey), 0);\n\t\tconst endIndex = this.indexOf(endKey) + 1 || datas.length;\n\n\t\treturn {\n\t\t\t_data: datas.slice(startIndex, endIndex).map(data => {\n\t\t\t\tconst items = data.items.map(item => {\n\t\t\t\t\tconst item2 = {} as IInfiniteGridItem;\n\n\t\t\t\t\tITEM_KEYS.forEach(key => {\n\t\t\t\t\t\tif (key in item) {\n\t\t\t\t\t\t\titem2[key] = item[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn item2;\n\t\t\t\t});\n\t\t\t\tconst data2 = assign({}, data);\n\n\t\t\t\tdata2.items = items;\n\t\t\t\treturn data2;\n\t\t\t}),\n\t\t};\n\t}\n\tpublic setStatus(status: IItemManagerStatus) {\n\t\tconst data = status._data;\n\n\t\tthis.clear();\n\n\t\tdata.forEach((group, i) => {\n\t\t\tthis.insertGroup(group, i);\n\t\t});\n\t}\n\tpublic size() {\n\t\treturn this._groups.length;\n\t}\n\tpublic fit(base: number, horizontal: boolean) {\n\t\tconst groups = this._groups;\n\t\tif (!groups.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst property = horizontal ? \"left\" : \"top\";\n\n\t\tif (base !== 0) {\n\t\t\tgroups.forEach(group => {\n\t\t\t\tconst { items, outlines } = group;\n\n\t\t\t\titems.forEach(item => {\n\t\t\t\t\titem.rect[property] -= base;\n\t\t\t\t});\n\t\t\t\toutlines.start = outlines.start.map(start => start - base);\n\t\t\t\toutlines.end = outlines.end.map(end => end - base);\n\t\t\t});\n\t\t}\n\t}\n\tpublic pluck<T extends keyof IInfiniteGridGroup>(property: T, start?: number, end?: number) {\n\t\tconst data = isUndefined(start) ? this._groups : this.sliceGroups(start, (isUndefined(end) ? start : end) + 1);\n\n\t\treturn ItemManager.pluck(data, property);\n\t}\n\tpublic getOutline(index: number, property: keyof IInfiniteGridGroup[\"outlines\"]) {\n\t\tconst data = this._groups[index];\n\n\t\treturn data ? data.outlines[property] : [];\n\t}\n\tpublic getEdgeIndex(cursor: CursorType, start: number, end: number) {\n\t\tconst prop = cursor === \"start\" ? \"min\" : \"max\";\n\t\tlet index = -1;\n\t\tlet targetValue = cursor === \"start\" ? Infinity : -Infinity;\n\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tconst value = Math[prop](...this.getOutline(i, cursor));\n\n\t\t\tif ((cursor === \"start\" && targetValue > value) ||\n\t\t\t\t(cursor === \"end\" && targetValue < value)) {\n\t\t\t\ttargetValue = value;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\tpublic getEdgeValue(cursor: CursorType, start: number, end: number) {\n\t\tconst group = this.getGroup(this.getEdgeIndex(cursor, start, end));\n\n\t\tif (group) {\n\t\t\tconst outlines = group.outlines[cursor];\n\n\t\t\tif (outlines.length) {\n\t\t\t\treturn Math[cursor === \"start\" ? \"min\" : \"max\"](...outlines);\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tpublic clearOutlines(startCursor = -1, endCursor = -1) {\n\t\tconst datas = this.getGroups();\n\n\t\tdatas.forEach((group, cursor) => {\n\t\t\tif (startCursor <= cursor && cursor <= endCursor) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgroup.items.forEach(item => {\n\t\t\t\titem.rect.top = DUMMY_POSITION;\n\t\t\t\titem.rect.left = DUMMY_POSITION;\n\t\t\t});\n\t\t\tgroup.outlines.start = [];\n\t\t\tgroup.outlines.end = [];\n\t\t});\n\t}\n\tpublic getMaxEdgeValue() {\n\t\tconst groups = this._groups;\n\t\tconst length = groups.length;\n\n\t\tfor (let i = length - 1; i >= 0; --i) {\n\t\t\tconst end = groups[i].outlines.end;\n\n\t\t\tif (end.length) {\n\t\t\t\tconst pos = Math.max(...end);\n\n\t\t\t\treturn pos;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t}\n\tpublic prependGroup(group: IGroup): IInfiniteGridGroup | null {\n\t\treturn this.insertGroup(group, 0);\n\t}\n\tpublic appendGroup(group: IGroup): IInfiniteGridGroup | null {\n\t\treturn this.insertGroup(group, this._groups.length);\n\t}\n\tpublic insertGroup(group: IGroup, groupIndex: number): IInfiniteGridGroup | null {\n\t\tif (groupIndex < 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst prevItems: IItem[] = group.items || [];\n\t\tconst newGroup: IInfiniteGridGroup = {\n\t\t\toutlines: {\n\t\t\t\tstart: [],\n\t\t\t\tend: [],\n\t\t\t},\n\t\t\t...group,\n\t\t\titems: [],\n\t\t};\n\t\tthis._groups.splice(groupIndex, 0, newGroup);\n\t\tthis._groupKeys[newGroup.groupKey] = newGroup;\n\n\t\tprevItems.forEach((item, i) => {\n\t\t\tthis.insert(item, groupIndex, i);\n\t\t});\n\t\treturn newGroup;\n\t}\n\tpublic sync(items: IItem[]): DiffResult<IGroup> {\n\t\tconst groups = this._groups;\n\t\tconst groupKeys = this._groupKeys;\n\t\tconst newGroups = categorize(items);\n\t\tconst result = diff(groups, newGroups, group => group.groupKey);\n\t\tconst {\n\t\t\tremoved,\n\t\t\tadded,\n\t\t\tmaintained,\n\t\t} = result;\n\n\t\tremoved.forEach(removedIndex => {\n\t\t\tconst group = groups[removedIndex];\n\n\t\t\tif (!group) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdelete groupKeys[group.groupKey];\n\t\t});\n\t\tconst nextGroups: IInfiniteGridGroup[] = [];\n\t\tmaintained.forEach(([fromIndex]) => {\n\t\t\tnextGroups.push(groups[fromIndex]);\n\t\t});\n\t\tthis._groups = nextGroups;\n\n\t\tadded.forEach(addedIndex => {\n\t\t\tthis.insertGroup(newGroups[addedIndex], addedIndex);\n\t\t});\n\t\tmaintained.reverse().forEach(([, toIndex]) => {\n\t\t\tthis.syncItems(toIndex, newGroups[toIndex].items);\n\t\t});\n\t\treturn result;\n\t}\n\tpublic insert(newItem: IItem, groupIndex = -1, itemIndex = -1): IInfiniteGridItem | null {\n\t\tconst { groupKey } = newItem;\n\t\tconst groups = this._groups;\n\t\tconst groupKeys = this._groupKeys;\n\t\tconst group = (groupIndex > -1 ? groups[groupIndex] : groupKeys[groupKey])\n\t\t\t|| this.insertGroup({ groupKey }, groupIndex);\n\n\t\tif (!group) {\n\t\t\treturn null;\n\t\t}\n\t\tconst groupItem: IInfiniteGridItem = {\n\t\t\tcontent: \"\",\n\t\t\tmounted: false,\n\t\t\trect: {\n\t\t\t\ttop: DUMMY_POSITION,\n\t\t\t\tleft: DUMMY_POSITION,\n\t\t\t},\n\t\t\t...newItem,\n\t\t};\n\t\tconst groupItems = group.items;\n\n\t\tif (itemIndex === -1) {\n\t\t\tgroupItems.push(groupItem);\n\t\t} else {\n\t\t\tgroupItems.splice(itemIndex, 0, groupItem);\n\t\t}\n\n\t\treturn groupItem;\n\t}\n\tpublic removeGroup(groupIndex: number): IInfiniteGridGroup | null {\n\t\tconst group = this._groups.splice(groupIndex, 1)[0];\n\n\t\tif (!group) {\n\t\t\treturn null;\n\t\t}\n\t\tdelete this._groupKeys[group.groupKey];\n\n\t\treturn group;\n\t}\n\tpublic remove(groupIndex: number, itemIndex: number) {\n\t\tconst data = this.getGroup(groupIndex);\n\t\tlet group: IInfiniteGridGroup | null = null;\n\t\tlet items: IInfiniteGridItem[] = [];\n\n\t\tif (!data) {\n\t\t\treturn { items, group };\n\t\t}\n\t\t// remove item information\n\t\titems = data.items.splice(itemIndex, 1);\n\n\t\tif (!data.items.length) {\n\t\t\tgroup = this.removeGroup(groupIndex);\n\t\t}\n\t\treturn { items, group };\n\t}\n\tpublic indexOf(data: { groupKey: string | number } | string | number | undefined) {\n\t\tif (typeof data === \"undefined\") {\n\t\t\treturn -1;\n\t\t}\n\t\tconst groupKey = `${typeof data === \"object\" ? data.groupKey : data}`;\n\t\tconst datas = this._groups;\n\t\tconst length = datas.length;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tif (groupKey === `${datas[i].groupKey}`) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tpublic indexesOfElement(element: HTMLElement) {\n\t\tconst groupKey = element.getAttribute(GROUPKEY_ATT)!;\n\t\tconst groupIndex = this.indexOf({ groupKey });\n\t\tlet itemIndex = -1;\n\n\t\tif (groupIndex > -1) {\n\t\t\tconst data = this.getGroup(groupIndex);\n\n\t\t\tconst length = data.items.length;\n\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tif (data.items[i].el === element) {\n\t\t\t\t\titemIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { groupIndex, itemIndex };\n\t}\n\tpublic sliceGroups(start?: number, end?: number) {\n\t\treturn this._groups.slice(start, end);\n\t}\n\tpublic getGroups() {\n\t\treturn this._groups;\n\t}\n\tpublic getGroupByKey(key: number | string) {\n\t\treturn this._groupKeys[key];\n\t}\n\tpublic getGroup(index: number) {\n\t\treturn this._groups[index];\n\t}\n\tprivate syncItems(groupIndex: number, newItems: IItem[]) {\n\t\tif (!newItems.length) {\n\t\t\tthis.removeGroup(groupIndex);\n\t\t\treturn;\n\t\t}\n\t\tconst items = this.getGroup(groupIndex).items;\n\t\tconst {\n\t\t\tadded,\n\t\t\tmaintained,\n\t\t} = diff(items, newItems, item => item.itemKey);\n\n\t\tconst group = this._groups[groupIndex];\n\t\tconst nextItems: IInfiniteGridItem[] = [];\n\t\tmaintained.forEach(([fromIndex, nextIndex]) => {\n\t\t\tconst item = items[fromIndex];\n\t\t\tconst newItem = newItems[nextIndex];\n\n\t\t\tassign(item, newItem);\n\t\t\tnextItems.push(item);\n\t\t});\n\n\t\tgroup.items = nextItems;\n\t\tadded.forEach(addedIndex => {\n\t\t\tthis.insert(newItems[addedIndex], groupIndex, addedIndex);\n\t\t});\n\n\t}\n}\n","import {\n\tDUMMY_POSITION,\n\tGROUPKEY_ATT,\n\tCONTAINER_CLASSNAME,\n\tTRANSITION_NAME,\n\tTRANSITION,\n\tTRANSITION_END,\n\tTRANSFORM,\n} from \"./consts\";\nimport { window, document } from \"./browser\";\nimport {\n\t$,\n\tinnerHeight,\n\tinnerWidth,\n\tgetSize,\n\tgetStyles,\n\taddOnceEvent,\n\tassign,\n} from \"./utils\";\nimport { RectType, IPosition, IJQuery, IInfiniteGridItem, IDOMRendererStatus, IDOMRendererSize, IDOMRendererOptions, IDOMRendererOrgStyle } from \"./types\";\n\nfunction removeTransition(styles: HTMLElement[\"style\"]) {\n\tstyles[`${TRANSITION}-property`] = \"\";\n\tstyles[`${TRANSITION}-duration`] = \"\";\n\tstyles[TRANSFORM] = \"\";\n}\nfunction setTransition(styles: HTMLElement[\"style\"], transitionDuration: number, pos1: IPosition, pos2: IPosition) {\n\tif (!transitionDuration) {\n\t\tremoveTransition(styles);\n\t\treturn false;\n\t}\n\tif (pos1.left === pos2.left && pos1.top === pos2.top) {\n\t\treturn false;\n\t}\n\tstyles[`${TRANSITION}-property`] = `${TRANSFORM},width,height`;\n\tstyles[`${TRANSITION}-duration`] = `${transitionDuration}s`;\n\tstyles[TRANSFORM] = `translate(${pos1.left - pos2.left}px,${pos1.top - pos2.top}px)`;\n\treturn true;\n}\n\nfunction createContainer(element: HTMLElement) {\n\tconst selectContainer = element.querySelector<HTMLElement>(`.${CONTAINER_CLASSNAME}`);\n\n\tif (selectContainer) {\n\t\tselectContainer.style.position = \"relative\";\n\t\tselectContainer.style.height = \"100%\";\n\n\t\treturn selectContainer;\n\t}\n\tconst container = document.createElement(\"div\");\n\n\tcontainer.className = CONTAINER_CLASSNAME;\n\tcontainer.style.position = \"relative\";\n\tcontainer.style.height = \"100%\";\n\n\tconst children = element.children;\n\tconst length = children.length;\t// for IE8\n\n\tfor (let i = 0; i < length; i++) {\n\t\tcontainer.appendChild(children[0]);\n\t}\n\telement.appendChild(container);\n\treturn container;\n}\nfunction render(properties: RectType[], rect: IInfiniteGridItem[\"rect\"], styles: HTMLElement[\"style\"]) {\n\tproperties.forEach(p => {\n\t\t(p in rect) && (styles[p] = `${rect[p]}px`);\n\t});\n}\n\nexport default class DOMRenderer {\n\tpublic static renderItem(item: IInfiniteGridItem, rect: IInfiniteGridItem[\"rect\"], transitionDuration?: number) {\n\t\tif (!item.el) {\n\t\t\treturn;\n\t\t}\n\t\tconst { el, prevRect } = item;\n\t\tconst styles = el.style;\n\n\t\t// for debugging\n\t\tel.setAttribute(GROUPKEY_ATT, `${item.groupKey}`);\n\t\tstyles.position = \"absolute\";\n\t\trender([\"width\", \"height\"], rect, styles);\n\t\tif (transitionDuration && TRANSITION && prevRect) {\n\t\t\tsetTransition(styles, transitionDuration, rect, prevRect);\n\t\t\tif ((el as any)[TRANSITION_NAME]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tel[TRANSITION_NAME] = true;\n\t\t\taddOnceEvent(el, TRANSITION_END, () => {\n\t\t\t\tconst itemRect = item.rect;\n\n\t\t\t\tremoveTransition(styles);\n\t\t\t\trender([\"left\", \"top\"], itemRect, styles);\n\t\t\t\titem.prevRect = itemRect;\n\t\t\t\tel[TRANSITION_NAME] = false;\n\t\t\t});\n\t\t} else {\n\t\t\trender([\"left\", \"top\"], rect, styles);\n\t\t\titem.prevRect = rect;\n\t\t}\n\t}\n\tpublic static renderItems(items: IInfiniteGridItem[], transitionDuration?: number) {\n\t\titems.forEach(item => {\n\t\t\tDOMRenderer.renderItem(item, item.rect, transitionDuration);\n\t\t});\n\t}\n\tpublic static removeItems(items: IInfiniteGridItem[]) {\n\t\titems.forEach(item => {\n\t\t\tif (item.el) {\n\t\t\t\tDOMRenderer.removeElement(item.el);\n\t\t\t\titem.el = null;\n\t\t\t}\n\t\t});\n\t}\n\tpublic static removeElement(element: HTMLElement) {\n\t\tconst parentNode = element && element.parentNode;\n\n\t\tif (!parentNode) {\n\t\t\treturn;\n\t\t}\n\t\tparentNode.removeChild(element);\n\t}\n\tpublic static createElements(items: IInfiniteGridItem[]) {\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst noElementItems = items.filter(item => !item.el);\n\n\t\tif (!noElementItems.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst elements = $(\n\t\t\tnoElementItems.map(({ content }) => content.replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, \"\")).join(\"\"),\n\t\t\ttrue,\n\t\t);\n\n\t\tnoElementItems.forEach((item, index) => {\n\t\t\titem.el = elements[index];\n\t\t});\n\t}\n\tpublic container: HTMLElement;\n\tpublic view: Window | HTMLElement;\n\tpublic options: IDOMRendererOptions = {\n\t\tisEqualSize: false,\n\t\tisConstantSize: false,\n\t\thorizontal: false,\n\t\tcontainer: false,\n\t};\n\tpublic _size: IDOMRendererSize = {\n\t\tcontainer: -1,\n\t\tview: -1,\n\t\tviewport: -1,\n\t\titem: null,\n\t};\n\tpublic _orgStyle: IDOMRendererOrgStyle = {};\n\tconstructor(element: string | HTMLElement | IJQuery, options: IDOMRendererOptions) {\n\t\tassign(this.options, options);\n\t\tthis._init(element);\n\t\tthis.resize();\n\t}\n\tpublic getStatus() {\n\t\treturn {\n\t\t\tcssText: this.container.style.cssText,\n\t\t\t_size: assign({}, this._size),\n\t\t};\n\t}\n\tpublic setStatus(status: IDOMRendererStatus) {\n\t\tthis.container.style.cssText = status.cssText;\n\t\tassign(this._size, status._size);\n\t}\n\tpublic updateSize(items: IInfiniteGridItem[]) {\n\t\tconst { isEqualSize, isConstantSize } = this.options;\n\t\tconst size = this._size;\n\n\t\treturn items.map(item => {\n\t\t\tif (!item.el) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t\tif (isEqualSize && !size.item) {\n\t\t\t\tsize.item = getSize(item.el);\n\t\t\t}\n\t\t\titem.size = (isEqualSize && assign({}, size.item)) ||\n\t\t\t\t(isConstantSize && item.orgSize && item.orgSize.width && assign({}, item.orgSize)) ||\n\t\t\t\tgetSize(item.el);\n\t\t\tif (!item.orgSize || !item.orgSize.width || !item.orgSize.height) {\n\t\t\t\titem.orgSize = assign({}, item.size);\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t}\n\tpublic createAndInsert(items: IInfiniteGridItem[], isAppend?: boolean) {\n\t\tDOMRenderer.createElements(items);\n\n\t\tDOMRenderer.renderItems(items);\n\t\tthis._insert(items, isAppend);\n\t}\n\tpublic getViewSize() {\n\t\treturn this._size.view;\n\t}\n\tpublic getViewportSize() {\n\t\treturn this._size.viewport;\n\t}\n\tpublic getContainerSize() {\n\t\treturn this._size.container;\n\t}\n\tpublic setContainerSize(size: number) {\n\t\tthis._size.container = size;\n\t\tthis.container.style[this.options.horizontal ? \"width\" : \"height\"] = `${size}px`;\n\t}\n\tpublic resize() {\n\t\tconst horizontal = this.options.horizontal;\n\t\tconst view = this.view;\n\t\tconst size = this._calcSize();\n\n\t\tif (size === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst isResize = size !== this._size.viewport;\n\n\t\tif (isResize) {\n\t\t\tthis._size = {\n\t\t\t\tview: -1,\n\t\t\t\tcontainer: -1,\n\t\t\t\tviewport: size,\n\t\t\t\titem: null,\n\t\t\t};\n\t\t}\n\t\tthis._size.view = horizontal ? innerWidth(view) : innerHeight(view);\n\t\treturn isResize;\n\t}\n\tpublic isNeededResize() {\n\t\treturn this._calcSize() !== this._size.viewport;\n\t}\n\tpublic clear() {\n\t\tthis.container.innerHTML = \"\";\n\t\tthis.container.style[this.options.horizontal ? \"width\" : \"height\"] = \"\";\n\n\t\tthis._size = {\n\t\t\titem: null,\n\t\t\tviewport: -1,\n\t\t\tcontainer: -1,\n\t\t\tview: -1,\n\t\t};\n\t}\n\tpublic destroy() {\n\t\tthis.clear();\n\t\tconst container = this.options.container;\n\t\tlet property: keyof IDOMRendererOrgStyle;\n\n\t\tfor (property in this._orgStyle) {\n\t\t\t(this[container ? \"view\" : \"container\"] as HTMLElement).style[property] = this._orgStyle[property]!;\n\t\t}\n\t\tcontainer && this.container.parentNode!.removeChild(this.container);\n\t}\n\tprivate _init(el: HTMLElement | IJQuery | string) {\n\t\tconst element = $(el);\n\t\tconst style = getStyles(element);\n\t\tconst { container, horizontal } = this.options;\n\n\t\tif (style.position === \"static\") {\n\t\t\tthis._orgStyle.position = element.style.position;\n\t\t\telement.style.position = \"relative\";\n\t\t}\n\t\tif (container) {\n\t\t\tconst target = horizontal ? [\"X\", \"Y\"] : [\"Y\", \"X\"];\n\n\t\t\tthis._orgStyle.overflowX = element.style.overflowX;\n\t\t\tthis._orgStyle.overflowY = element.style.overflowY;\n\t\t\telement.style[`overflow${target[0]}` as \"overflowX\" | \"overflowY\"] = \"scroll\";\n\t\t\telement.style[`overflow${target[1]}` as \"overflowX\" | \"overflowY\"] = \"hidden\";\n\t\t\tthis.view = element;\n\t\t\tthis.container = container === true ? createContainer(this.view as HTMLElement) : container;\n\t\t} else {\n\t\t\tthis.view = window;\n\t\t\tthis.container = element;\n\t\t}\n\t}\n\tprivate _insert(items: IInfiniteGridItem[], isAppend?: boolean, styles?: IInfiniteGridItem[\"rect\"]) {\n\t\tconst container = this.container;\n\t\tconst df = document.createDocumentFragment();\n\n\t\titems.forEach(item => {\n\t\t\tstyles && DOMRenderer.renderItem(item, styles);\n\t\t\tisAppend ? df.appendChild(item.el!) : df.insertBefore(item.el!, df.firstChild);\n\t\t});\n\t\tisAppend ?\n\t\t\tcontainer.appendChild(df) :\n\t\t\tcontainer.insertBefore(df, container.firstChild);\n\t}\n\tprivate _calcSize() {\n\t\treturn this.options.horizontal ?\n\t\t\tinnerHeight(this.container) : innerWidth(this.container);\n\t}\n}\n","import ItemManager from \"./ItemManager\";\nimport { assign, find, findLast } from \"./utils\";\nimport { CursorType, IInfiniteGridGroup, IInfiniteStatus, IRemoveResult, IItem, IInfiniteOptions, IInfiniteGridItem } from \"./types\";\nimport { diff } from \"@egjs/list-differ\";\n\nfunction isVisible(group: IInfiniteGridGroup, threshold: number, scrollPos: number, endScrollPos: number) {\n\tconst { items, outlines } = group;\n\tconst start = outlines.start;\n\tconst end = outlines.end;\n\n\tif (start.length === 0 || end.length === 0 || !items.length || !items[0].el) {\n\t\treturn 2;\n\t}\n\tconst min = Math.min(...start);\n\tconst max = Math.max(...end);\n\n\tif ((endScrollPos + threshold < min)) {\n\t\treturn +1;\n\t} else if ((scrollPos - threshold > max)) {\n\t\treturn -1;\n\t}\n\treturn 0;\n}\n\nclass Infinite {\n\tpublic options: Required<IInfiniteOptions>;\n\tprivate _itemManager: ItemManager;\n\tprivate _status: IInfiniteStatus;\n\tconstructor(itemManger: ItemManager, options: IInfiniteOptions) {\n\t\tthis.options = assign({\n\t\t\tuseRecycle: true,\n\t\t\tthreshold: 100,\n\t\t\tappend: () => void 0,\n\t\t\tprepend: () => void 0,\n\t\t\trecycle: () => void 0,\n\t\t}, options);\n\n\t\tthis._itemManager = itemManger;\n\t\tthis.clear();\n\t}\n\tpublic setSize(size: number) {\n\t\tthis._status.size = size;\n\t}\n\tpublic sync(items: IItem[]) {\n\t\tconst status = this._status;\n\t\tconst { startCursor, endCursor } = status;\n\t\tconst itemManager = this._itemManager;\n\t\tconst prevVisisbleGroups = itemManager.sliceGroups(startCursor, endCursor + 1);\n\t\tconst prevVisibleItems = ItemManager.pluck(prevVisisbleGroups, \"items\");\n\t\tconst result = itemManager.sync(items);\n\t\tconst startGroup = find(\n\t\t\tprevVisisbleGroups,\n\t\t\t({ groupKey }) => itemManager.getGroupByKey(groupKey),\n\t\t);\n\t\tconst endGroup = findLast(\n\t\t\tprevVisisbleGroups,\n\t\t\t({ groupKey }) => itemManager.getGroupByKey(groupKey),\n\t\t);\n\t\tlet nextStartCursor = startGroup ? itemManager.indexOf(startGroup) : -1;\n\t\tlet nextEndCursor = endGroup ? itemManager.indexOf(endGroup) : -1;\n\n\t\tif (nextStartCursor > -1 && nextEndCursor > -1) {\n\t\t\t// This is when the arrangement is inverted.\n\t\t\t// prevVisisbleGroups is [0, 1, 2, 3]\n\t\t\t// but currentGroups is [3, 2, 1, 0]\n\t\t\t// so, nextStartCursor is 3, and nextEndCursor is 0\n\t\t\tconst minCursor = Math.min(nextStartCursor, nextEndCursor);\n\t\t\tconst maxCursor = Math.max(nextStartCursor, nextEndCursor);\n\n\t\t\tnextStartCursor = minCursor;\n\t\t\tnextEndCursor = maxCursor;\n\t\t} else if (nextEndCursor > -1) {\n\t\t\tnextStartCursor = nextEndCursor;\n\t\t} else if (nextStartCursor > -1) {\n\t\t\tnextEndCursor = nextStartCursor;\n\t\t}\n\n\t\tstatus.startCursor = nextStartCursor;\n\t\tstatus.endCursor = nextEndCursor;\n\n\t\tif (result.removed.length > 0) {\n\t\t\treturn \"relayout\";\n\t\t} else {\n\t\t\tconst nextVisibleItems = itemManager.pluck(\"items\", startCursor, endCursor);\n\t\t\tconst visibleDiffResult = diff(prevVisibleItems, nextVisibleItems, ({ itemKey }) => itemKey);\n\n\t\t\tif (visibleDiffResult.removed.length > 0) {\n\t\t\t\treturn \"layout\";\n\t\t\t} else {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\t}\n\tpublic recycle(scrollPos: number | null, isForward?: boolean) {\n\t\tif (!this.options.useRecycle || typeof scrollPos !== \"number\") {\n\t\t\treturn;\n\t\t}\n\t\tconst { startCursor, endCursor, size } = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn;\n\t\t}\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst { threshold, recycle } = this.options;\n\t\tconst visibles = this._itemManager.sliceGroups(startCursor, endCursor + 1)\n\t\t\t.map(group => isVisible(group, threshold, scrollPos, endScrollPos));\n\t\tconst length = visibles.length;\n\t\tlet start = isForward ? 0 : visibles.lastIndexOf(0);\n\t\tlet end = isForward ? visibles.indexOf(0) - 1 : visibles.length - 1;\n\n\t\tif (!isForward && start !== -1) {\n\t\t\tstart += 1;\n\t\t}\n\t\tif (start < 0 || end < 0 || start > end || end - start + 1 >= length) {\n\t\t\treturn;\n\t\t}\n\t\tstart = startCursor + start;\n\t\tend = startCursor + end;\n\n\t\tif (isForward) {\n\t\t\tthis.setCursor(\"start\", end + 1);\n\t\t} else {\n\t\t\tthis.setCursor(\"end\", start - 1);\n\t\t}\n\t\trecycle({ start, end });\n\t}\n\tpublic scroll(scrollPos: number | null) {\n\t\tconst [startCursor, endCursor] = this.getCursors();\n\t\tconst items = this._itemManager;\n\n\t\tif (typeof scrollPos !== \"number\" || startCursor === -1 ||\n\t\t\tendCursor === -1 || !items.size()) {\n\t\t\treturn;\n\t\t}\n\t\tconst size = this._status.size;\n\t\tconst { threshold, append, prepend } = this.options;\n\t\tconst datas = items.getGroups();\n\t\tconst endScrollPos = scrollPos + size;\n\t\tconst startEdgePos = Math.max(...datas[startCursor].outlines.start);\n\t\tconst endEdgePos = Math.min(...datas[endCursor].outlines.end);\n\t\tconst visibles = datas.map((group, i) => {\n\t\t\tconst { start, end } = group.outlines;\n\n\t\t\tif (!start.length || !end.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst startPos = Math.min(...start);\n\t\t\tconst endPos = Math.max(...end);\n\n\t\t\tif (startPos - threshold <= endScrollPos && scrollPos <= endPos + threshold) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\tconst startIndex = visibles.indexOf(true);\n\t\tconst endIndex = visibles.lastIndexOf(true);\n\n\t\tif (~startIndex && startIndex < startCursor) {\n\t\t\tprepend({ cache: datas.slice(startIndex, Math.min(startCursor, endIndex + 1)) });\n\t\t} else if (endCursor < endIndex) {\n\t\t\tappend({ cache: datas.slice(Math.max(startIndex, endCursor + 1), endIndex + 1) });\n\t\t} else {\n\t\t\t// if you have data(no cachedAppendData, has cachedPrependData) to pepend, request it.\n\t\t\tconst cachedAppendData = datas.slice(endCursor + 1, endCursor + 2);\n\t\t\tconst cachedPrependData = datas.slice(startCursor - 1, startCursor);\n\t\t\tconst isPrepend = scrollPos <= startEdgePos + threshold;\n\n\t\t\tif (\n\t\t\t\tendScrollPos >= endEdgePos - threshold\n\t\t\t\t&& (!isPrepend || cachedAppendData.length || !cachedPrependData.length)\n\t\t\t) {\n\t\t\t\tappend({ cache: cachedAppendData });\n\t\t\t} else if (isPrepend) {\n\t\t\t\tprepend({ cache: cachedPrependData });\n\t\t\t}\n\t\t}\n\t}\n\tpublic setCursor(cursor: CursorType, index: number) {\n\t\tconst status = this._status;\n\t\tconst items = this._itemManager;\n\t\tconst size = items.size();\n\n\t\tif (!this.options.useRecycle) {\n\t\t\tstatus.startCursor = 0;\n\t\t\tif (items.getOutline(size - 1, \"end\").length) {\n\t\t\t\tstatus.endCursor = size - 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cursor !== \"end\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (cursor === \"start\") {\n\t\t\tstatus.startCursor = index;\n\t\t} else {\n\t\t\tstatus.endCursor = Math.min(size - 1, index);\n\t\t}\n\t\tstatus.startCursor = Math.max(0, status.startCursor);\n\t}\n\tpublic setStatus(status: IInfiniteStatus) {\n\t\tthis._status = assign(this._status, status);\n\t}\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IInfiniteStatus {\n\t\tconst { startCursor, endCursor, size } = this._status;\n\t\tconst startIndex = Math.max(this._itemManager.indexOf(startKey), 0);\n\t\tconst endIndex = (this._itemManager.indexOf(endKey) + 1 || this._itemManager.size()) - 1;\n\t\tconst start = Math.max(startCursor - startIndex, ~startCursor ? 0 : -1);\n\t\tconst end = Math.max(Math.min(endCursor - startIndex, endIndex - startIndex), start);\n\n\t\treturn {\n\t\t\tstartCursor: start,\n\t\t\tendCursor: end,\n\t\t\tsize,\n\t\t};\n\t}\n\tpublic getEdgeOutline(cursor: CursorType) {\n\t\tconst { startCursor, endCursor } = this._status;\n\n\t\tif (startCursor === -1 || endCursor === -1) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._itemManager.getOutline(cursor === \"start\" ? startCursor : endCursor, cursor);\n\t}\n\tpublic getEdgeValue(cursor: CursorType) {\n\t\tconst outlines = this.getEdgeOutline(cursor);\n\n\t\treturn outlines.length ? Math[cursor === \"start\" ? \"min\" : \"max\"](...outlines) : 0;\n\t}\n\tpublic getVisibleItems(): IInfiniteGridItem[] {\n\t\tconst { startCursor, endCursor } = this._status;\n\n\t\treturn this._itemManager.pluck(\"items\", startCursor, endCursor);\n\t}\n\tpublic getCursors() {\n\t\tconst status = this._status;\n\n\t\treturn [\n\t\t\tstatus.startCursor,\n\t\t\tstatus.endCursor,\n\t\t];\n\t}\n\tpublic getCursor(cursor: CursorType) {\n\t\treturn this._status[cursor === \"start\" ? \"startCursor\" : \"endCursor\"];\n\t}\n\tpublic getVisibleData() {\n\t\tconst { startCursor, endCursor } = this._status;\n\n\t\treturn this._itemManager.sliceGroups(startCursor, endCursor + 1);\n\t}\n\n\tpublic remove(groupIndex: number, itemIndex: number): IRemoveResult {\n\t\tconst status = this._status;\n\t\tconst items = this._itemManager;\n\t\tconst { startCursor, endCursor } = status;\n\t\tconst result = items.remove(groupIndex, itemIndex);\n\n\t\tif (result.group) {\n\t\t\tif (groupIndex < startCursor) {\n\t\t\t\tthis.setCursor(\"start\", startCursor - 1);\n\t\t\t}\n\t\t\tif (groupIndex <= endCursor) {\n\t\t\t\tthis.setCursor(\"end\", endCursor - 1);\n\t\t\t}\n\t\t}\n\t\tif (!items.size()) {\n\t\t\tstatus.startCursor = -1;\n\t\t\tstatus.endCursor = -1;\n\t\t}\n\t\treturn result;\n\t}\n\tpublic clear() {\n\t\tthis._status = {\n\t\t\tstartCursor: -1,\n\t\t\tendCursor: -1,\n\t\t\tsize: -1,\n\t\t};\n\t}\n}\n\nexport default Infinite;\n","import ItemManager from \"./ItemManager\";\nimport { matchHTML, $, assign } from \"./utils\";\nimport DOMRenderer from \"./DOMRenderer\";\nimport { ILayout, IInfiniteGridItem, IInfiniteGridGroup } from \"./types\";\nimport { check, removeAutoSizer } from \"@egjs/lazyloaded\";\nimport Infinite from \"./Infinite\";\nimport Component from \"@egjs/component\";\n\nfunction hasTarget<T>(target: T[], value: T) {\n\treturn ~target.indexOf(value);\n}\n\nexport default class RenderManager {\n\tprivate _layout: ILayout;\n\tconstructor(\n\t\tprivate _infinite: Infinite,\n\t\tprivate _itemManager: ItemManager,\n\t\tprivate _renderer: DOMRenderer,\n\t\tprivate options: {\n\t\t\tattributePrefix: string;\n\t\t\tisEqualSize: boolean;\n\t\t\tisConstantSize: boolean;\n\t\t\thorizontal: boolean;\n\t\t},\n\t) { }\n\tpublic setLayout(layout: ILayout) {\n\t\tthis._layout = layout;\n\t}\n\tpublic render(\n\t\tcallbackComponent: Component,\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems = ItemManager.pluck(groups, \"items\"),\n\t\tisAppend?: boolean,\n\t) {\n\t\tconst checkGroups = isAppend ? groups : groups.reverse();\n\t\tconst replaceTarget: number[] = [];\n\t\tconst removeTarget: HTMLElement[] = [];\n\t\tconst elements = items.map(item => item.el!);\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\tcheck(\n\t\t\telements,\n\t\t\tprefix,\n\t\t).on(\"ready\", () => {\n\t\t\tif (!this._itemManager) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._complete(callbackComponent, checkGroups, items, isAppend);\n\t\t}).on(\"error\", ({\n\t\t\ttarget,\n\t\t\titemIndex,\n\t\t}) => {\n\t\t\tif (!this._itemManager) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._error(callbackComponent, removeTarget, replaceTarget, target, items, itemIndex);\n\t\t}).on(\"finish\", () => {\n\t\t\tif (!this._itemManager) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._end(callbackComponent, removeTarget, replaceTarget, items);\n\t\t});\n\n\t\treturn callbackComponent;\n\t}\n\tprivate _complete(\n\t\tcallbackComponent: Component,\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend?: boolean,\n\t) {\n\t\tconst infinite = this._infinite;\n\t\tconst layout = this._layout;\n\t\tconst itemManager = this._itemManager;\n\t\tconst cursor = isAppend ? \"end\" : \"start\";\n\t\tconst groupIndex = itemManager.indexOf(groups[0]);\n\t\tconst prevGroup = itemManager.getGroup(groupIndex + (isAppend ? -1 : 1));\n\t\tlet outline = prevGroup ? prevGroup.outlines[cursor] : [0];\n\n\t\tthis._renderer.updateSize(items);\n\t\tgroups.forEach(group => {\n\t\t\tconst groupOutline = group.outlines[isAppend ? \"start\" : \"end\"];\n\t\t\tconst isRelayout = !outline.length || (outline.length === groupOutline.length ?\n\t\t\t\t!outline.every((v, index) => v === groupOutline[index]) : true);\n\n\t\t\tif (!isRelayout) {\n\t\t\t\toutline = group.outlines[isAppend ? \"end\" : \"start\"];\n\t\t\t\tDOMRenderer.renderItems(group.items);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst groupItems = group.items;\n\t\t\tconst groupInfo = layout[isAppend ? \"append\" : \"prepend\"](groupItems, outline, true);\n\n\t\t\tassign(group, groupInfo);\n\t\t\tDOMRenderer.renderItems(groupInfo.items);\n\t\t\toutline = groupInfo.outlines[isAppend ? \"end\" : \"start\"];\n\t\t});\n\n\t\tconst startCursor = Math.max(infinite.getCursor(\"start\"), 0);\n\t\tconst endCursor = Math.max(infinite.getCursor(\"end\"), 0);\n\t\tlet requestStartCursor = itemManager.indexOf(groups[0].groupKey);\n\t\tlet requestEndCursor = itemManager.indexOf(groups[groups.length - 1].groupKey);\n\t\tlet isInCursor = true;\n\n\t\tif (requestStartCursor > endCursor + 1 || requestEndCursor < startCursor - 1) {\n\t\t\tisInCursor = false;\n\t\t}\n\t\tif (isInCursor) {\n\t\t\tif (isAppend) {\n\t\t\t\trequestStartCursor = startCursor;\n\t\t\t\trequestEndCursor = Math.max(endCursor, requestEndCursor);\n\t\t\t} else {\n\t\t\t\trequestStartCursor = Math.max(Math.min(startCursor, requestStartCursor), 0);\n\t\t\t\trequestEndCursor = endCursor;\n\t\t\t}\n\t\t}\n\t\tif (requestStartCursor > requestEndCursor) {\n\t\t\tconst tempCursor = requestStartCursor;\n\n\t\t\trequestStartCursor = requestEndCursor;\n\t\t\trequestEndCursor = tempCursor;\n\t\t}\n\t\tcallbackComponent.trigger(\"renderComplete\", {\n\t\t\tstart: requestStartCursor,\n\t\t\tend: requestEndCursor,\n\t\t});\n\t\tcallbackComponent.trigger(\"layoutComplete\", {\n\t\t\titems: ItemManager.pluck(groups, \"items\"),\n\t\t\tisAppend,\n\t\t});\n\t}\n\tprivate _error(\n\t\tcallbackComponent: Component,\n\t\tremoveTarget: HTMLElement[],\n\t\treplaceTarget: number[],\n\t\ttarget: HTMLImageElement,\n\t\titems: IInfiniteGridItem[],\n\t\terrorIndex: number,\n\t) {\n\t\tconst itemManager = this._itemManager;\n\t\tconst item = items[errorIndex];\n\t\tconst element = item.el!;\n\t\tconst prefix = this.options.attributePrefix;\n\n\t\t// remove item\n\t\tconst removeItem = () => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tremoveTarget.push(element);\n\t\t\tconst index = replaceTarget.indexOf(errorIndex);\n\n\t\t\tindex !== -1 && replaceTarget.splice(index, 1);\n\t\t};\n\t\t// remove image\n\t\tconst remove = () => {\n\t\t\tif (target === element) {\n\t\t\t\tremoveItem();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttarget.parentNode!.removeChild(target);\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace image\n\t\tconst replace = (src: string) => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (src) {\n\t\t\t\tif (matchHTML(src) || typeof src === \"object\") {\n\t\t\t\t\tconst parentNode = target.parentNode!;\n\n\t\t\t\t\tparentNode.insertBefore($(src), target);\n\t\t\t\t\tparentNode.removeChild(target);\n\t\t\t\t\titem.content = element.outerHTML;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.src = src;\n\t\t\t\t\tif (target.getAttribute(`${prefix}width`)) {\n\t\t\t\t\t\tremoveAutoSizer(target, prefix);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}width`);\n\t\t\t\t\t\ttarget.removeAttribute(`${prefix}height`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\t// replace item\n\t\tconst replaceItem = (content: string) => {\n\t\t\tif (hasTarget(removeTarget, element)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telement.innerHTML = content;\n\t\t\titem.content = element.outerHTML;\n\t\t\tif (hasTarget(replaceTarget, errorIndex)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treplaceTarget.push(errorIndex);\n\t\t};\n\t\tconst totalIndex = itemManager.pluck(\"items\").indexOf(item);\n\n\t\tcallbackComponent.trigger(\"imageError\", {\n\t\t\ttarget,\n\t\t\telement,\n\t\t\titems,\n\t\t\titem,\n\t\t\titemIndex: errorIndex,\n\t\t\treplace,\n\t\t\treplaceItem,\n\t\t\tremove,\n\t\t\tremoveItem,\n\t\t\ttotalIndex,\n\t\t});\n\t}\n\tprivate _end(\n\t\tcallbackComponent: Component,\n\t\tremoveTarget: HTMLElement[],\n\t\treplaceTarget: number[],\n\t\titems: IInfiniteGridItem[],\n\t) {\n\t\tconst { attributePrefix } = this.options;\n\t\tconst removeTargetLength = removeTarget.length;\n\t\tconst replaceTargetLength = replaceTarget.length;\n\n\t\tif (!removeTargetLength && !replaceTargetLength) {\n\t\t\tcallbackComponent.trigger(\"finish\", { remove: [] });\n\t\t\treturn;\n\t\t}\n\t\tconst layoutedItems = replaceTarget.map(itemIndex => items[itemIndex]);\n\n\t\tif (!replaceTargetLength) {\n\t\t\tcallbackComponent.trigger(\"finish\", { remove: removeTarget, layout: true });\n\t\t\treturn;\n\t\t}\n\t\t// wait layoutComplete beacause of error event.\n\t\tcheck(layoutedItems.map(v => v.el!), attributePrefix).on(\"ready\", () => {\n\t\t\tthis._renderer.updateSize(layoutedItems);\n\t\t\tcallbackComponent.trigger(\"finish\", { remove: removeTarget, layout: true });\n\t\t});\n\t}\n}\n","import {\n\tIS_IOS,\n} from \"./consts\";\nimport {\n\twindow,\n} from \"./browser\";\nimport {\n\taddEvent,\n\tremoveEvent,\n\tscroll,\n\tscrollTo,\n\tscrollBy,\n\tassign,\n} from \"./utils\";\nimport { IWatchStatus, IWatcherOptions } from \"./types\";\n\nexport default class Watcher {\n\tpublic options: IWatcherOptions;\n\tprivate _timer: {\n\t\tresize: any;\n\t};\n\tprivate _containerOffset: number = 0;\n\tprivate _view: Window | HTMLElement;\n\tprivate _isScrollIssue: boolean = IS_IOS;\n\t// When InfiniteGrid is initialized.\n\t// The initial value is null to block the scroll event when returning from browser behavior.\n\tprivate _prevPos: number | null = null;\n\tconstructor(view: Window | HTMLElement, options: Partial<IWatcherOptions> = {}) {\n\t\tassign(this.options = {\n\t\t\tcontainer: view as HTMLElement,\n\t\t\tresize: () => void 0,\n\t\t\tcheck: () => void 0,\n\t\t\tisOverflowScroll: false,\n\t\t\thorizontal: false,\n\t\t}, options);\n\t\tthis._timer = {\n\t\t\tresize: null,\n\t\t};\n\t\tthis._view = view;\n\t\tthis.attachEvent();\n\t\tthis.resize();\n\t\tthis.setScrollPos();\n\t}\n\tpublic getStatus(): IWatchStatus {\n\t\treturn {\n\t\t\t_prevPos: this._prevPos,\n\t\t\tscrollPos: this.getOrgScrollPos(),\n\t\t};\n\t}\n\tpublic setStatus(status: IWatchStatus, applyScrollPos = true) {\n\t\tthis._prevPos = status._prevPos;\n\t\tapplyScrollPos && this.scrollTo(status.scrollPos);\n\t}\n\tpublic scrollBy(pos: number) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollBy(this._view, arrPos[0], arrPos[1]);\n\t\tthis.setScrollPos();\n\t}\n\tpublic scrollTo(pos: number) {\n\t\tconst arrPos = this.options.horizontal ? [pos, 0] : [0, pos];\n\n\t\tscrollTo(this._view, arrPos[0], arrPos[1]);\n\t}\n\tpublic getScrollPos() {\n\t\treturn this._prevPos;\n\t}\n\tpublic setScrollPos(pos = this.getOrgScrollPos()) {\n\t\tthis._prevPos = pos - this.getContainerOffset();\n\t}\n\tpublic attachEvent() {\n\t\taddEvent(this._view, \"scroll\", this._onCheck);\n\t\taddEvent(window, \"resize\", this._onResize);\n\t}\n\tpublic getOrgScrollPos() {\n\t\treturn scroll(this._view, this.options.horizontal);\n\t}\n\tpublic reset() {\n\t\tthis._prevPos = null;\n\t}\n\tpublic getContainerOffset() {\n\t\treturn this._containerOffset;\n\t}\n\tpublic resize() {\n\t\tthis._containerOffset = this.options.isOverflowScroll ? 0 : this._getOffset();\n\t}\n\tpublic detachEvent() {\n\t\tremoveEvent(this._view, \"scroll\", this._onCheck);\n\t\tremoveEvent(window, \"resize\", this._onResize);\n\t}\n\tpublic destroy() {\n\t\tthis.detachEvent();\n\t\tthis.reset();\n\t}\n\tprivate _getOffset() {\n\t\tconst { container, horizontal } = this.options;\n\t\tconst rect = container.getBoundingClientRect();\n\n\t\treturn rect[horizontal ? \"left\" : \"top\"] + this.getOrgScrollPos();\n\t}\n\tprivate _onCheck = () => {\n\t\tconst prevPos = this.getScrollPos();\n\t\tconst orgScrollPos = this.getOrgScrollPos();\n\n\t\tthis.setScrollPos(orgScrollPos);\n\t\tconst scrollPos = this.getScrollPos()!;\n\n\t\tif (prevPos === null || (this._isScrollIssue && orgScrollPos === 0) || prevPos === scrollPos) {\n\t\t\torgScrollPos && (this._isScrollIssue = false);\n\t\t\treturn;\n\t\t}\n\t\tthis._isScrollIssue = false;\n\t\tthis.options.check({\n\t\t\tisForward: prevPos < scrollPos,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t\thorizontal: this.options.horizontal,\n\t\t});\n\t}\n\tprivate _onResize = () => {\n\t\tif (this._timer.resize) {\n\t\t\tclearTimeout(this._timer.resize);\n\t\t}\n\t\tthis._timer.resize = setTimeout(() => {\n\t\t\tthis.resize();\n\t\t\tthis.options.resize();\n\t\t\tthis._timer.resize = null;\n\t\t}, 100);\n\t}\n}\n","/**\n * Copyright (c) 2017 NAVER Corp.\n * egjs projects are licensed under the MIT license\n*/\nimport Component from \"@egjs/component\";\nimport ItemManager from \"./ItemManager\";\nimport DOMRenderer from \"./DOMRenderer\";\nimport {\n\tIS_ANDROID2,\n\tIDLE,\n\tLOADING_APPEND,\n\tLOADING_PREPEND,\n\tPROCESSING,\n\tDEFENSE_BROWSER,\n\tIGNORE_CLASSNAME,\n\tDUMMY_POSITION,\n\tIS_IOS,\n\tDEFAULT_OPTIONS,\n} from \"./consts\";\nimport Infinite from \"./Infinite\";\nimport { toArray, $, outerHeight, outerWidth, assign, resetSize, hasClass, addClass } from \"./utils\";\nimport {\n\tIJQuery, ILayout,\n\tCursorType, StyleType,\n\tIInfiniteGridItem,\n\tIInfiniteGridGroup, IInfiniteGridStatus, IItem, IArrayFormat, IInfiniteGridOptions\n} from \"./types\";\nimport RenderManager from \"./RenderManager\";\nimport Watcher from \"./Watcher\";\n\n// IE8\n// https://stackoverflow.com/questions/43216659/babel-ie8-inherit-issue-with-object-create\n/* eslint-disable */\n// if (typeof Object.create !== \"function\") {\n// // tslint:disable\n// Object.create = (o: any, properties: any) => {\n// if (typeof o !== \"object\" && typeof o !== \"function\") {\n// throw new TypeError(\"Object prototype may only be an Object: \" + o);\n// } else if (o === null) {\n// throw new Error(\"This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.\");\n// }\n// function F() { }\n// F.prototype = o;\n// return new F();\n// };\n// // tslint:enable\n// }\n/* eslint-enable */\n\n/**\n * A module used to arrange card elements including content infinitely according to layout type. With this module, you can implement various layouts composed of different card elements whose sizes vary. It guarantees performance by maintaining the number of DOMs the module is handling under any circumstance\n * @ko 콘í…ì¸ ê°€ 있는 ì¹´ë“œ 엘리먼트를 ë ˆì´ì•„웃 íƒ€ìž…ì— ë”°ë¼ ë¬´í•œìœ¼ë¡œ 배치하는 모듈. 다양한 í¬ê¸°ì˜ ì¹´ë“œ 엘리먼트를 다양한 ë ˆì´ì•„웃으로 ë°°ì¹˜í• ìˆ˜ 있다. ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì˜ ê°œìˆ˜ê°€ ê³„ì† ëŠ˜ì–´ë‚˜ë„ ëª¨ë“ˆì´ ì²˜ë¦¬í•˜ëŠ” DOMì˜ ê°œìˆ˜ë¥¼ ì¼ì •í•˜ê²Œ ìœ ì§€í•´ 최ì ì˜ ì„±ëŠ¥ì„ ë³´ìž¥í•œë‹¤\n * @alias eg.InfiniteGrid\n * @extends eg.Component\n *\n * @example\n```\n<ul id=\"grid\">\n <li class=\"card\">\n <div>test1</div>\n </li>\n <li class=\"card\">\n <div>test2</div>\n </li>\n <li class=\"card\">\n <div>test3</div>\n </li>\n <li class=\"card\">\n <div>test4</div>\n </li>\n <li class=\"card\">\n <div>test5</div>\n </li>\n <li class=\"card\">\n <div>test6</div>\n </li>\n</ul>\n<script>\nvar some = new eg.InfiniteGrid(\"#grid\").on(\"layoutComplete\", function(e) {\n // ...\n});\n\n// If you already have items in the container, call \"layout\" method.\nsome.layout();\n</script>\n```\n *\n * @support {\"ie\": \"8+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.1+ (except 3.x)\"}\n **/\nclass InfiniteGrid extends Component {\n\t/**\n\t * Version info string\n\t * @ko ë²„ì „ì •ë³´ 문ìžì—´\n\t * @name VERSION\n\t * @static\n\t * @type {String}\n\t * @example\n\t * eg.InfiniteGrid.VERSION; // ex) 3.3.3\n\t * @memberof eg.InfiniteGrid\n\t */\n\tpublic static VERSION = \"#__VERSION__#\";\n\n\tpublic options: IInfiniteGridOptions;\n\tprivate _loadingBar: {\n\t\tappend?: HTMLElement,\n\t\tprepend?: HTMLElement,\n\t} = {};\n\tprivate _itemManager: ItemManager;\n\tprivate _renderer: DOMRenderer;\n\tprivate _renderManager: RenderManager;\n\tprivate _layout: ILayout;\n\tprivate _watcher: Watcher;\n\tprivate _infinite: Infinite;\n\tprivate _status: IInfiniteGridStatus[\"_status\"];\n\tprivate _requestGroups: IInfiniteGridGroup[] = [];\n\n\t/**\n\t * @param {HTMLElement|String|jQuery} element A base element for a module <ko>ëª¨ë“ˆì„ ì ìš©í• ê¸°ì¤€ 엘리먼트</ko>\n\t * @param {Object} [options] The option object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n\t * @param {String} [options.itemSelector] A selector to select card elements that make up the layout<ko>ë ˆì´ì•„ì›ƒì„ êµ¬ì„±í•˜ëŠ” ì¹´ë“œ 엘리먼트를 ì„ íƒí• ì„ íƒìž(selector)</ko>\n\t * @param {Boolean} [options.useRecycle=true] Indicates whether keep the number of DOMs is maintained. If the useRecycle value is 'true', keep the number of DOMs is maintained. If the useRecycle value is 'false', the number of DOMs will increase as card elements are added. <ko>DOMì˜ ìˆ˜ë¥¼ ìœ ì§€í• ì§€ 여부를 나타낸다. useRecycle ê°’ì´ 'true'ì´ë©´ DOM 개수를 ì¼ì •í•˜ê²Œ ìœ ì§€í•œë‹¤. useRecycle ê°’ì´ 'false' ì´ë©´ ì¹´ë“œ 엘리먼트가 추가ë ìˆ˜ë¡ DOM 개수가 ê³„ì† ì¦ê°€í•œë‹¤.</ko>\n\t * @param {Boolean} [options.isOverflowScroll=false] Indicates whether overflow:scroll is applied<ko>overflow:scroll ì 용여부를 ê²°ì •í•œë‹¤.</ko>\n\t * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (true: horizontal, false: vertical) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (true 가로방향, false 세로방향)</ko>\n\t * @param {Boolean} [options.useFit=true] The useFit option scrolls upwards so that no space is visible until an item is added <ko>위로 스í¬ë¡¤í• ì‹œ ì•„ì´í…œì„ 추가하는 ë™ì•ˆ ë³´ì´ëŠ” 빈 ê³µê°„ì„ ì•ˆë³´ì´ê²Œ 한다.</ko>\n\t * @param {Boolean} [options.isEqualSize=false] Indicates whether sizes of all card elements are equal to one another. If sizes of card elements to be arranged are all equal and this option is set to \"true\", the performance of layout arrangement can be improved. <ko>ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì˜ í¬ê¸°ê°€ ë™ì¼í•œì§€ 여부. 배치ë ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì˜ í¬ê¸°ê°€ ëª¨ë‘ ë™ì¼í• ë•Œ ì´ ì˜µì…˜ì„ 'true'ë¡œ ì„¤ì •í•˜ë©´ ë ˆì´ì•„웃 배치 ì„±ëŠ¥ì„ ë†’ì¼ ìˆ˜ 있다</ko>\n\t * @param {Boolean} [options.isConstantSize=false] Indicates whether sizes of all card elements does not change, the performance of layout arrangement can be improved. <ko>ëª¨ë“ ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì˜ í¬ê¸°ê°€ ë¶ˆë³€ì¼ ë•Œ ì´ ì˜µì…˜ì„ 'true'ë¡œ ì„¤ì •í•˜ë©´ ë ˆì´ì•„웃 배치 ì„±ëŠ¥ì„ ë†’ì¼ ìˆ˜ 있다</ko>\n\t * @param {Number} [options.transitionDruation=0] Indicates how many seconds a transition effect takes to complete. <ko>트랜지션 효과를 ì™„ë£Œí•˜ëŠ”ë° ê±¸ë¦¬ëŠ” ì‹œê°„ì„ ë‚˜íƒ€ë‚¸ë‹¤.</ko>\n\t * @param {Number} [options.threshold=100] The threshold size of an event area where card elements are added to a layout.<ko>ë ˆì´ì•„ì›ƒì— ì¹´ë“œ 엘리먼트를 추가하는 ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ëŠ” 기준 ì˜ì—ì˜ í¬ê¸°.</ko>\n\t * @param {String} [options.attributePrefix=\"data-\"] The prefix to use element's data attribute.<ko>ì—˜ë¦¬ë¨¼íŠ¸ì˜ ë°ì´íƒ€ ì†ì„±ì— ì‚¬ìš©í• ì ‘ë‘사.</ko>\n\t * @param {boolean} [options.renderExternal=false] Whether to use external rendering. It will delegate DOM manipulation and can synchronize the rendered state by calling `sync()` method. You can use this option to use in frameworks like React, Vue, Angular, which has its states and rendering methods.<ko>외부 ë Œë”ë§ì„ ì‚¬ìš©í• ì§€ì˜ ì—¬ë¶€. ì´ ì˜µì…˜ì„ ì‚¬ìš©ì‹œ ë Œë”ë§ì„ ì™¸ë¶€ì— ìœ„ìž„í• ìˆ˜ ìžˆê³ , `sync()`를 호출하여 ê·¸ ìƒíƒœë¥¼ ë™ê¸°í™”í• ìˆ˜ 있다. ì´ ì˜µì…˜ì„ ì‚¬ìš©í•˜ì—¬, React, Vue, Angular 등 ìžì²´ì ì¸ ìƒíƒœì™€ ë Œë”ë§ ë°©ë²•ì„ ê°–ëŠ” í”„ë ˆìž„ì›Œí¬ì— 대ì‘í• ìˆ˜ 있다.</ko>\n\t */\n\tconstructor(element: HTMLElement | string | IJQuery, options?: Partial<IInfiniteGridOptions>) {\n\t\tsuper();\n\t\tassign(this.options = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t}, options);\n\t\tDEFENSE_BROWSER && (this.options.useFit = false);\n\t\tIS_ANDROID2 && (this.options.isOverflowScroll = false);\n\t\tthis._reset();\n\n\t\tconst {\n\t\t\tisOverflowScroll,\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tthreshold,\n\t\t\tuseRecycle,\n\t\t\tattributePrefix,\n\t\t} = this.options;\n\n\t\tthis._itemManager = new ItemManager();\n\t\tthis._renderer = new DOMRenderer(element, {\n\t\t\tisEqualSize,\n\t\t\tisConstantSize,\n\t\t\thorizontal,\n\t\t\tcontainer: isOverflowScroll,\n\t\t});\n\t\tthis._watcher = new Watcher(\n\t\t\tthis._renderer.view,\n\t\t\t{\n\t\t\t\tisOverflowScroll,\n\t\t\t\thorizontal,\n\t\t\t\tcontainer: this._renderer.container,\n\t\t\t\tresize: () => this._onResize(),\n\t\t\t\tcheck: param => this._onCheck(param),\n\t\t\t});\n\n\t\tthis._infinite = new Infinite(this._itemManager, {\n\t\t\tuseRecycle,\n\t\t\tthreshold,\n\t\t\tappend: param => this._requestAppend(param),\n\t\t\tprepend: param => this._requestPrepend(param),\n\t\t\trecycle: param => this._recycle([param]),\n\t\t});\n\n\t\tthis._renderManager = new RenderManager(\n\t\t\tthis._infinite,\n\t\t\tthis._itemManager,\n\t\t\tthis._renderer,\n\t\t\t{\n\t\t\t\tattributePrefix,\n\t\t\t\tisEqualSize,\n\t\t\t\tisConstantSize,\n\t\t\t\thorizontal,\n\t\t\t},\n\t\t);\n\t}\n\t/**\n\t * Adds a card element at the bottom of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko ì¹´ë“œ 엘리먼트를 ë ˆì´ì•„웃 ì•„ëž˜ì— ì¶”ê°€í•œë‹¤. isProcessing() ë©”ì„œë“œì˜ ë°˜í™˜ê°’ì´ 'false'ì¼ ë•Œë§Œ ì´ ë©”ì„œë“œë¥¼ ì‚¬ìš©í• ìˆ˜ 있다\n\t * ì´ ë©”ì†Œë“œëŠ” isProcessing()ì˜ ë°˜í™˜ê°’ì´ falseì¼ ê²½ìš°ì—만 사용 가능하다.\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>ì¶”ê°€í• ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì˜ ë°°ì—´</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>ì¶”ê°€í• ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * infinitegrid.append(\"<div class='item'>test1</div><div class='item'>test2</div>\");\n\t * infinitegrid.append([\"<div class='item'>test1</div>\", \"<div class='item'>test2</div>\"]);\n\t * infinitegrid.append([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.append(jQuery([\"<div class='item'>test1</div>\", \"<div class='item'>test2</div>\"]));\n\t */\n\tpublic append(elements: HTMLElement[] | IJQuery | string[] | string, groupKey?: string | number) {\n\t\tthis._layout && this._insert({\n\t\t\telements,\n\t\t\tisAppend: true,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Adds a card element at the top of a layout. This method is available only if the isProcessing() method returns false.\n\t * @ko ì¹´ë“œ 엘리먼트를 ë ˆì´ì•„ì›ƒì˜ ìœ„ì— ì¶”ê°€í•œë‹¤. isProcessing() ë©”ì„œë“œì˜ ë°˜í™˜ê°’ì´ 'false'ì¼ ë•Œë§Œ ì´ ë©”ì„œë“œë¥¼ ì‚¬ìš©í• ìˆ˜ 있다\n\t * @param {Array|jQuery} elements Array of the card elements to be added <ko>ì¶”ê°€í• ì¹´ë“œ 엘리먼트 ë°°ì—´</ko>\n\t * @param {Number|String} [groupKey] The group key to be configured in a card element. It is automatically generated by default.\n\t * <ko>ì¶”ê°€í• ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * infinitegrid.prepend(\"<div class='item'>test1</div><div class='item'>test2</div>\");\n\t * infinitegrid.prepend([\"<div class='item'>test1</div>\", \"<div class='item'>test2</div>\"]);\n\t * infinitegrid.prepend([HTMLElement1, HTMLElement2]);\n\t * infinitegrid.prepend(jQuery([\"<div class='item'>test1</div>\", \"<div class='item'>test2</div>\"]));\n\t */\n\tpublic prepend(elements: HTMLElement[] | IJQuery | string[] | string, groupKey?: string | number) {\n\t\tthis._layout && this._insert({\n\t\t\telements,\n\t\t\tisAppend: false,\n\t\t\tgroupKey,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Layout class to use.\n\t * @ko ì‚¬ìš©í• Layout í´ëž˜ìŠ¤ë¥¼ ì§€ì •í•œë‹¤.\n\t * @param {Class|Object} LayoutKlass The Layout class to use or an instance of a layout moudle<ko>ì‚¬ìš©í• Layout í´ëž˜ìŠ¤ ë˜ëŠ” ë ˆì´ì•„웃 ëª¨ë“ˆì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @param {Object} options Options to apply to the Layout.<ko>Layoutì— ì ìš©í• ì˜µì…˜</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * infinitegrid.setLayout(eg.InfiniteGrid.GridLayout, {\n\t * margin: 10,\n\t * align: \"start\"\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n\t * margin: 10,\n\t * minSize: 100,\n\t * maxSize: 200\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.SquareLayout, {\n\t * margin: 10,\n\t * column: 2\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.FrameLayout, {\n\t * margin: 10,\n\t * frame: [\n\t * [1, 2],\n\t * [4, 3],\n\t * ]\n\t * });\n\t * infinitegrid.setLayout(eg.InfiniteGrid.PackingLayout, {\n\t * margin: 10,\n\t * aspectRatio: 1.5\n\t * });\n\t * var layout = new eg.InfiniteGrid.GridLayout({\n\t * margin: 10,\n\t * align: \"start\"\n\t * });\n\t * infinitegrid.setLayout(layout);\n\t */\n\tpublic setLayout(LayoutKlass: ILayout | (new (...args: any[]) => ILayout), options = {}) {\n\t\tconst { horizontal } = this.options;\n\n\t\tif (typeof LayoutKlass === \"function\") {\n\t\t\tthis._layout = new LayoutKlass(assign(options, {\n\t\t\t\thorizontal,\n\t\t\t}));\n\t\t} else {\n\t\t\tLayoutKlass.options.horizontal = horizontal;\n\t\t\tthis._layout = LayoutKlass;\n\t\t}\n\n\t\tthis._renderManager.setLayout(this._layout);\n\t\tthis._renderer.resize();\n\t\tthis._setSize(this._renderer.getViewportSize());\n\t\treturn this;\n\t}\n\t/**\n\t * Returns the layouted items.\n\t * @ko ë ˆì´ì•„ì›ƒëœ ì•„ì´í…œë“¤ì„ 반환한다.\n\t * @param {Boolean} includeCached Indicates whether to include the cached items. <ko>ìºì‹±ëœ ì•„ì´í…œì„ í¬í•¨í• 지 여부를 나타낸다.</ko>\n\t * @returns List of items <ko>ì•„ì´í…œì˜ 목ë¡</ko>\n\t */\n\tpublic getItems(includeCached = false): IInfiniteGridItem[] {\n\t\treturn includeCached ? this._itemManager.pluck(\"items\") : this._infinite.getVisibleItems();\n\t}\n\t/**\n\t * @param - Get items to render on screen.\n * @ko í™”ë©´ì— ë Œë”ë ì•„ì´í…œë“¤ ê°€ì ¸ì˜¨ë‹¤.\n * @private\n\t * @param - The groups currently being added by request.<ko>ìš”ì²ì— ì˜í•´ 지금 ì¶”ê°€ì¤‘ì¸ ê·¸ë£¹ë“¤.</ko>\n\t * @return - The items to be rendered on screen. <ko>í™”ë©´ë ˆ ë Œë”ë ì•„ì´í…œë“¤.</ko>\n */\n\tpublic getRenderingItems(): IInfiniteGridItem[] {\n\t\tconst items = this.getItems();\n\t\tconst itemKeys: { [key: string]: any } = {};\n\n\t\titems.forEach(item => {\n\t\t\titemKeys[item.itemKey!] = true;\n\t\t});\n\t\tconst nextVisisbleItems = ItemManager.pluck(this._requestGroups, \"items\").filter(item => {\n\t\t\tif (itemKeys[item.itemKey!]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\titemKeys[item.itemKey!] = true;\n\t\t\treturn true;\n\t\t});\n\n\t\treturn items.concat(nextVisisbleItems);\n\t}\n\t/**\n * Synchronize info of items with info given by external rendering.\n * @ko 외부 ë Œë”ë§ ë°©ì‹ì— ì˜í•´ ì•„ì´í…œì˜ ì •ë³´ë“¤ì„ ë™ê¸°í™”한다.\n * @private\n * @param - all item infos to synchronize <ko>ë™ê¸°í™”í• ì „ì²´ ì•„ì´í…œ ì •ë³´ë“¤.</ko>\n */\n\tpublic beforeSync(items: IItem[]) {\n\t\treturn this._infinite.sync(items);\n\t}\n\t/**\n\t * Synchronize info of items with DOM info given by external rendering.\n\t * @ko 외부 ë Œë”ë§ ë°©ì‹ì— ì˜í•´ ìž…ë ¥ë°›ì€ DOMì˜ ì •ë³´ì™€ 현재 ì•„ì´í…œ ì •ë³´ë¥¼ ë™ê¸°í™” 한다.\n\t * @private\n\t * @param - The DOM elements that are currently visible.<ko>현재 ë³´ì—¬ì§€ê³ ìžˆëŠ” DOM 엘리먼트들.</ko>\n\t * @param - The groups currently being added by request.<ko>ìš”ì²ì— ì˜í•´ 지금 ì¶”ê°€ì¤‘ì¸ ê·¸ë£¹ë“¤.</ko>\n\t */\n\tpublic sync(elements: IArrayFormat<HTMLElement>) {\n\t\tconst itemManager = this._itemManager;\n\t\tconst infinite = this._infinite;\n\t\tconst items = this.getRenderingItems();\n\n\t\titems.forEach((item, i) => {\n\t\t\tconst isChange = item.el !== elements[i];\n\t\t\titem.el = elements[i];\n\n\t\t\tif (isChange) {\n\t\t\t\tDOMRenderer.renderItem(item, item.rect);\n\t\t\t}\n\t\t});\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tconst newItems = items.filter(item => !item.orgSize || !item.orgSize.width);\n\n\t\tif (newItems.length) {\n\t\t\tthis._postLayout({\n\t\t\t\tfromCache: false,\n\t\t\t\tgroups: infinite.getVisibleData(),\n\t\t\t\tnewItems,\n\t\t\t\tisAppend: true,\n\t\t\t\tisTrusted: false,\n\t\t\t});\n\t\t} else {\n\t\t\tconst size = itemManager.size();\n\n\t\t\tif (!size) {\n\t\t\t\tthis._requestAppend({});\n\t\t\t} else if (infinite.getCursor(\"start\") < 0) {\n\t\t\t\tconst firstGroup = itemManager.getGroup(0);\n\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tgroups: [firstGroup],\n\t\t\t\t\thasChildren: false,\n\t\t\t\t\tfromCache: false,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._infinite.scroll(this._watcher.getScrollPos());\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * Rearranges a layout.\n\t * @ko ë ˆì´ì•„ì›ƒì„ ë‹¤ì‹œ 배치한다.\n\t * @param {Boolean} [isRelayout=true] Indicates whether a card element is being relayouted <ko>ì¹´ë“œ 엘리먼트 재배치 여부</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic layout(isRelayout = true) {\n\t\tif (!this._layout) {\n\t\t\treturn this;\n\t\t}\n\t\tconst renderer = this._renderer;\n\t\tconst itemManager = this._itemManager;\n\t\tconst infinite = this._infinite;\n\t\tconst isResize = renderer.resize();\n\t\tconst items = this.getItems();\n\t\tconst { isEqualSize, isConstantSize, transitionDuration } = this.options;\n\t\tconst isLayoutAll = isRelayout && (isEqualSize || isConstantSize);\n\t\tconst size = itemManager.size();\n\n\t\tthis._watcher.resize();\n\n\t\tif (isRelayout) {\n\t\t\tif (isResize) {\n\t\t\t\tthis._setSize(renderer.getViewportSize());\n\t\t\t}\n\t\t}\n\t\t// check childElement\n\t\tif (!items.length) {\n\t\t\tconst children = toArray(renderer.container.children).filter(el => {\n\t\t\t\treturn el.className.indexOf(IGNORE_CLASSNAME) === -1;\n\t\t\t});\n\t\t\tconst hasChildren = children.length > 0;\n\n\t\t\tif (size) {\n\t\t\t\tconst firstGroup = itemManager.getGroup(0);\n\n\t\t\t\tif (hasChildren) {\n\t\t\t\t\tfirstGroup.items.forEach((item, i) => {\n\t\t\t\t\t\titem.el = children[i];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// has items, no visible items\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tgroups: [firstGroup],\n\t\t\t\t\thasChildren,\n\t\t\t\t\tfromCache: false,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// no items, no visible items\n\t\t\t\tif (hasChildren) {\n\t\t\t\t\tlet groupKey: string | null | undefined = children[0].getAttribute(\"data-groupkey\");\n\n\t\t\t\t\tif (typeof groupKey !== \"string\") {\n\t\t\t\t\t\tgroupKey = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis._insert({\n\t\t\t\t\t\telements: children,\n\t\t\t\t\t\tisAppend: true,\n\t\t\t\t\t\thasChildren: true,\n\t\t\t\t\t\tgroupKey,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (renderer.getContainerSize()) {\n\t\t\t\t\t\trenderer.setContainerSize(0);\n\t\t\t\t\t}\n\t\t\t\t\tthis._requestAppend({});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\t// layout datas\n\t\tconst [startCursor, endCursor] = infinite.getCursors();\n\t\tconst data = isLayoutAll || !(isRelayout && isResize) ? itemManager.getGroups() :\n\t\t\titemManager.sliceGroups(startCursor, endCursor + 1);\n\n\t\t// LayoutManger interface\n\t\tthis._relayout(isRelayout, data, isResize ? items : []);\n\n\t\tif (isLayoutAll) {\n\t\t\tthis._fit();\n\t\t} else if (isRelayout && isResize) {\n\t\t\titemManager.clearOutlines(startCursor, endCursor);\n\t\t}\n\t\tDOMRenderer.renderItems(items, transitionDuration);\n\t\tisRelayout && this._watcher.setScrollPos();\n\t\tthis._onLayoutComplete({\n\t\t\titems,\n\t\t\tisAppend: true,\n\t\t\tfromCache: true,\n\t\t\tisTrusted: false,\n\t\t\tuseRecycle: false,\n\t\t\tisLayout: true,\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t * Removes a item corresponding to an index on a grid layout.\n\t * @ko 그리드 ë ˆì´ì•„웃ì—ì„œ ì¸ë±ìŠ¤ì— 해당하는 ì•„ì´í…œ ì‚ì œí•œë‹¤.\n\t * @param - Index of group corresponding to item to remove <ko>ì‚ì œí• ì•„ì´í…œì— 해당하는 ê·¸ë£¹ì˜ ì¸ë±ìŠ¤</ko>\n\t * @param - Index of item to remove on group <ko>그룹ì—ì„œ ì‚ì œí• ì•„ì´í…œì˜ ì¸ë±ìŠ¤</ko>\n\t * @return {Object} Removed items information <ko>ì‚ì œëœ ì•„ì´í…œë“¤ ì •ë³´</ko>\n\t */\n\tpublic removeByIndex(groupIndex: number, itemIndex: number, isLayout = true) {\n\t\tconst { items, group } = this._infinite.remove(groupIndex, itemIndex);\n\n\t\titems.forEach(item => {\n\t\t\tDOMRenderer.removeElement(item.el!);\n\t\t});\n\n\t\tif (items.length) {\n\t\t\tisLayout && this.layout(!!group);\n\n\t\t\treturn items;\n\t\t}\n\t\treturn [];\n\t}\n\t/**\n\t * Removes a item element on a grid layout.\n\t * @ko 그리드 ë ˆì´ì•„ì›ƒì˜ ì¹´ë“œ 엘리먼트를 ì‚ì œí•œë‹¤.\n\t * @param {HTMLElement} item element to be removed <ko>ì‚ì œë ì•„ì´í…œ 엘리먼트</ko>\n\t * @return {Object} Removed items information <ko>ì‚ì œëœ ì•„ì´í…œë“¤ ì •ë³´</ko>\n\t */\n\tpublic remove(element: HTMLElement, isLayout = true) {\n\t\tconst { groupIndex, itemIndex } = this._itemManager.indexesOfElement(element);\n\n\t\treturn this.removeByIndex(groupIndex, itemIndex, isLayout);\n\t}\n\t/**\n\t * Returns the list of group keys which belongs to card elements currently being maintained. You can use the append() or prepend() method to configure group keys so that multiple card elements can be managed at once. If you do not use these methods to configure group keys, groupkey is automatically generated.\n\t * @ko 현재 ìœ ì§€í•˜ê³ ìžˆëŠ” ì¹´ë“œ ì—˜ë¦¬ë¨¼íŠ¸ì˜ ê·¸ë£¹ 키 목ë¡ì„ 반환한다. 여러 ê°œì˜ ì¹´ë“œ 엘리먼트를 묶어서 ê´€ë¦¬í• ìˆ˜ 있ë„ë¡ append() 메서드나 prepend() 메서드ì—ì„œ 그룹 키를 ì§€ì •í• ìˆ˜ 있다. append() 메서드나 prepend() 메서드ì—ì„œ 그룹 키를 ì§€ì •í•˜ì§€ 않았다면 ìžë™ìœ¼ë¡œ 그룹키가 ìƒì„±ëœë‹¤.\n\t * @param {Boolean} includeCached Indicates whether to include the cached groups. <ko>ìºì‹±ëœ ê·¸ë£¹ì„ í¬í•¨í• 지 여부를 나타낸다.</ko>\n\t * @return {Array} List of group keys <ko>그룹 í‚¤ì˜ ëª©ë¡</ko>\n\t */\n\tpublic getGroupKeys(includeCached?: boolean) {\n\t\tconst data = includeCached ?\n\t\t\tthis._itemManager.getGroups() : this._infinite.getVisibleData();\n\n\t\treturn data.map(v => v.groupKey);\n\t}\n\t/**\n\t * Returns the current state of a module such as location information. You can use the setStatus() method to restore the information returned through a call to this method.\n\t * @ko ì¹´ë“œì˜ ìœ„ì¹˜ ì •ë³´ 등 ëª¨ë“ˆì˜ í˜„ìž¬ ìƒíƒœ ì •ë³´ë¥¼ 반환한다. ì´ ë©”ì„œë“œê°€ 반환한 ì •ë³´ë¥¼ ì €ìž¥í•´ ë‘었다가 setStatus() 메서드로 ë³µì›í• 수 있다\n\t * @return {Object} State object of the eg.InfiniteGrid module<ko>eg.InfiniteGrid ëª¨ë“ˆì˜ ìƒíƒœ ê°ì²´</ko>\n\t */\n\tpublic getStatus(startKey?: string | number, endKey?: string | number): IInfiniteGridStatus {\n\t\treturn {\n\t\t\t_status: assign({}, this._status),\n\t\t\t_itemManager: this._itemManager.getStatus(startKey, endKey),\n\t\t\t_renderer: this._renderer.getStatus(),\n\t\t\t_watcher: this._watcher.getStatus(),\n\t\t\t_infinite: this._infinite.getStatus(startKey, endKey),\n\t\t};\n\t}\n\t/**\n\t * Sets the state of the eg.InfiniteGrid module with the information returned through a call to the getStatue() method.\n\t * @ko getStatue() 메서드가 ì €ìž¥í•œ ì •ë³´ë¡œ eg.InfiniteGrid ëª¨ë“ˆì˜ ìƒíƒœë¥¼ ì„¤ì •í•œë‹¤.\n\t * @param {Object} status State object of the eg.InfiniteGrid module <ko>eg.InfiniteGrid ëª¨ë“ˆì˜ ìƒíƒœ ê°ì²´</ko>\n\t * @param {boolean} [applyScrollPos=true] Checks whether to scroll<ko>스í¬ë¡¤ì˜ 위치를 ë³µì›í• 지 ê²°ì •í•œë‹¤.</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic setStatus(status: IInfiniteGridStatus, applyScrollPos = true, syncElements?: HTMLElement[]) {\n\t\tif (!status) {\n\t\t\treturn this;\n\t\t}\n\t\tconst { _status, _renderer, _itemManager, _watcher, _infinite } = status;\n\n\t\tif (!_status ||\n\t\t\t!_renderer || !_itemManager || !_watcher || !_infinite) {\n\t\t\treturn this;\n\t\t}\n\t\tconst renderExternal = this.options.renderExternal;\n\t\tconst items = this._itemManager;\n\t\tconst renderer = this._renderer;\n\t\tconst watcher = this._watcher;\n\t\tconst infinite = this._infinite;\n\n\t\twatcher.detachEvent();\n\t\tassign(this._status, _status);\n\t\tthis._status.processingStatus = IDLE;\n\t\titems.setStatus(_itemManager);\n\t\trenderer.setStatus(_renderer);\n\t\tinfinite.setStatus(_infinite);\n\n\t\tconst visibleItems = this.getItems();\n\t\tconst length = visibleItems.length;\n\n\t\tif (renderExternal) {\n\t\t\tvisibleItems.forEach((item, i) => {\n\t\t\t\titem.el = syncElements![i];\n\t\t\t});\n\t\t\tDOMRenderer.renderItems(visibleItems);\n\t\t} else {\n\t\t\trenderer.createAndInsert(visibleItems, true);\n\t\t}\n\t\tconst isReLayout = renderer.isNeededResize();\n\n\t\twatcher.setStatus(_watcher, applyScrollPos);\n\t\twatcher.attachEvent();\n\n\t\tconst { isConstantSize, isEqualSize } = this.options;\n\n\t\tif (!length) {\n\t\t\tthis._requestAppend({ cache: [] });\n\t\t} else if (isReLayout) {\n\t\t\trenderer.resize();\n\t\t\tthis._setSize(renderer.getViewportSize());\n\n\t\t\tif (isConstantSize) {\n\t\t\t\tthis.layout(true);\n\t\t\t} else {\n\t\t\t\tthis._itemManager.clearOutlines();\n\t\t\t\tthis._postLayout({\n\t\t\t\t\tfromCache: true,\n\t\t\t\t\tgroups: isEqualSize ? items.getGroups() : infinite.getVisibleData(),\n\t\t\t\t\titems: visibleItems,\n\t\t\t\t\tnewItems: visibleItems,\n\t\t\t\t\tisAppend: true,\n\t\t\t\t\tisTrusted: false,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.layout(false);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Clears added card elements and data.\n\t * @ko ì¶”ê°€ëœ ì¹´ë“œ 엘리먼트와 ë°ì´í„°ë¥¼ ëª¨ë‘ ì§€ìš´ë‹¤.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic clear() {\n\t\tthis._itemManager.clear();\n\t\tthis._renderer.clear();\n\t\tthis._infinite.clear();\n\t\tthis._reset();\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Specifies the Loading Bar to use for append or prepend items.\n\t * @ko ì•„ì´í…œì„ append ë˜ëŠ” prepend 하기 위해 ì‚¬ìš©í• ë¡œë”© 바를 ì§€ì •í•œë‹¤.\n\t * @param {String|Object} [userLoadingBar={}] The loading bar HTML markup or element or element selector <ko> 로딩 ë°” HTML ë˜ëŠ” element ë˜ëŠ” selector </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic setLoadingBar(userLoadingBar: {\n\t\tappend?: string | HTMLElement,\n\t\tprepend?: string | HTMLElement,\n\t} | string = {}) {\n\t\tconst loadingBarObj: {\n\t\t\tappend?: string | HTMLElement,\n\t\t\tprepend?: string | HTMLElement,\n\t\t} = typeof userLoadingBar === \"object\" ? userLoadingBar : {\n\t\t\tappend: userLoadingBar,\n\t\t\tprepend: userLoadingBar,\n\t\t};\n\n\t\tthis._status.loadingSize = 0;\n\t\tthis._status.loadingStyle = {};\n\t\tconst loadingBar = this._loadingBar;\n\n\t\tlet isChangeLoadingBar = false;\n\n\t\tfor (const type in loadingBarObj) {\n\t\t\tconst loadingElement = $(loadingBarObj[type as \"append\" | \"prepend\"]!);\n\n\t\t\tif (loadingBar[type as \"append\" | \"prepend\"] !== loadingElement) {\n\t\t\t\tloadingBar[type as \"append\" | \"prepend\"] = loadingElement;\n\t\t\t\tisChangeLoadingBar = true;\n\t\t\t}\n\n\t\t\tif (!hasClass(loadingElement, IGNORE_CLASSNAME)) {\n\t\t\t\taddClass(loadingElement, IGNORE_CLASSNAME);\n\t\t\t}\n\t\t}\n\t\tif (isChangeLoadingBar) {\n\t\t\tthis._renderLoading();\n\t\t}\n\t\tthis._appendLoadingBar();\n\t\treturn this;\n\t}\n\t/**\n\t * Checks whether a card element or data is being added.\n\t * @ko ì¹´ë“œ 엘리먼트 추가 ë˜ëŠ” ë°ì´í„° ë¡œë”©ì´ ì§„í–‰ 중ì¸ì§€ 확ì¸í•œë‹¤\n\t * @return {Boolean} Indicates whether a card element or data is being added <ko>ì¹´ë“œ 엘리먼트 추가 ë˜ëŠ” ë°ì´í„° 로딩 진행 중 여부</ko>\n\t */\n\tpublic isProcessing() {\n\t\treturn this._isProcessing() || this.isLoading();\n\t}\n\t/**\n\t * Checks whether data is loading.\n\t * @ko ë°ì´í„° 로딩 중ì¸ì§€ 확ì¸í•œë‹¤\n\t * @return {Boolean} Indicates whether data is loading <ko>ë°ì´í„° 로딩 진행 중 여부</ko>\n\t */\n\tpublic isLoading() {\n\t\treturn this._getLoadingStatus() > 0;\n\t}\n\t/**\n\t * Returns the element of loading bar.\n\t * @ko 로딩 ë°”ì˜ element를 반환한다.\n\t * @param {Boolean} [isAppend=currentLoadingBar|true] Checks whether the card element is added to the append () method. <ko>ì¹´ë“œ 엘리먼트가 append() 메서드로 추가 í• ê²ƒì¸ì§€ 확ì¸í•œë‹¤.</ko>\n\t * @return {Element} The element of loading bar. <ko>로딩 ë°”ì˜ element</ko>\n\t */\n\tpublic getLoadingBar(isAppend = this._getLoadingStatus() !== LOADING_PREPEND) {\n\t\treturn this._loadingBar[isAppend ? \"append\" : \"prepend\"];\n\t}\n\t/**\n\t * Start loading for append/prepend during loading data.\n\t * @ko ë°ì´í„°ê°€ 로딩ë˜ëŠ” ë™ì•ˆ append/prepend하길 위해 ë¡œë”©ì„ ì‹œìž‘í•œë‹¤.\n\t * @param {Boolean} [isAppend=true] Checks whether the card element is added to the append () method. <ko>ì¹´ë“œ 엘리먼트가 append() 메서드로 추가 í• ê²ƒì¸ì§€ 확ì¸í•œë‹¤.</ko>\n\t * @param {Object} [userStyle = {display: \"block\"}] custom style to apply to this loading bar for start. <ko> 로딩 ì‹œìž‘ì„ ìœ„í•œ 로딩 ë°”ì— ì ìš©í• ì»¤ìŠ¤í…€ ìŠ¤íƒ€ì¼ </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic startLoading(isAppend?: boolean, userStyle: StyleType = { display: \"block\" }) {\n\t\tif (this.isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst type = isAppend ? \"append\" : \"prepend\";\n\n\t\tthis._process(isAppend ? LOADING_APPEND : LOADING_PREPEND);\n\t\tif (!this._loadingBar[type]) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst next = () => {\n\t\t\tthis._renderLoading(userStyle);\n\t\t\tthis._status.loadingStyle = userStyle;\n\t\t\tif (!isAppend) {\n\t\t\t\tthis._fit();\n\t\t\t} else {\n\t\t\t\tthis._setContainerSize(this._getEdgeValue(\"end\") + this._status.loadingSize);\n\t\t\t}\n\t\t};\n\t\tif (this.options.renderExternal) {\n\t\t\tthis.trigger(\"render\", {\n\t\t\t\tnext,\n\t\t\t});\n\t\t} else {\n\t\t\tnext();\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * End loading after startLoading() for append/prepend\n\t * @ko append/prepend하길 위해 startLoading() í˜¸ì¶œí•´ì„ ê±¸ì—ˆë˜ ë¡œë”©ì„ ë낸다.\n\t * @param {Object} [userStyle = {display: \"none\"}] custom style to apply to this loading bar for end <ko> 로딩 ì‹œìž‘ì„ ìœ„í•œ 로딩 ë°”ì— ì ìš©í• ì»¤ìŠ¤í…€ ìŠ¤íƒ€ì¼ </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic endLoading(userStyle: StyleType = { display: \"none\" }) {\n\t\tif (!this.isLoading()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst type = isAppend ? \"append\" : \"prepend\";\n\t\tconst el = this._loadingBar[type];\n\t\tconst status = this._status;\n\t\tconst size = status.loadingSize;\n\n\t\tthis._process(LOADING_APPEND | LOADING_PREPEND, false);\n\t\tstatus.loadingSize = 0;\n\t\tstatus.loadingStyle = {};\n\t\tif (el) {\n\t\t\tconst style: StyleType = assign({\n\t\t\t\t[this.options.horizontal ? \"left\" : \"top\"]: `${-size}px`,\n\t\t\t}, userStyle);\n\n\t\t\tfor (const property in style) {\n\t\t\t\tel.style[property as keyof StyleType] = style[property as keyof StyleType];\n\t\t\t}\n\t\t\tif (!isAppend) {\n\t\t\t\tthis._fitItems(size);\n\t\t\t} else {\n\t\t\t\tthis._setContainerSize(this._getEdgeValue(\"end\"));\n\t\t\t}\n\t\t\tif (this.options.renderExternal) {\n\t\t\t\tthis.trigger(\"render\", {\n\t\t\t\t\tnext: () => { },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (this.options.useRecycle && !this.isProcessing()) {\n\t\t\tthis._infinite.recycle(this._watcher.getScrollPos(), isAppend);\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Retrieves the item via index or the element.\n\t * @ko index ë˜ëŠ” element를 통해 ì•„ì´í…œì„ ê°€ì ¸ì˜¨ë‹¤.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> itemì— í•´ë‹¹í•˜ëŠ” element ë˜ëŠ” 해당 itemì´ ìžˆëŠ” groupì˜ index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 ì‚¬ìš©í• ê²½ìš° 해당 groupì— ìžˆëŠ” Itemì˜ index </ko>\n\t * @return The item containing the content, size and position,etc<ko>content, size, position ë“±ì´ ë‹´ê²¨ìžˆëŠ” item ì •ë³´</ko>\n\t * @example\n\n\t ig.getItem(0, 0);\n\t ig.getItem(element);\n\n\t {\n\t el: HTMLElement,\n\t content: \"<div>...</div>\",\n\t size: {width: ..., height: ...},\n\t rect: {top: ..., left: ..., width: ..., height: ...},\n\t }\n\t */\n\tpublic getItem(groupIndex: HTMLElement | number = 0, itemIndex?: number): IInfiniteGridItem | undefined {\n\t\tif (typeof groupIndex === \"object\") {\n\t\t\tif (!groupIndex) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst items = this.getItems();\n\t\t\tconst length = items.length;\n\n\t\t\tfor (let i = 0; i < length; ++i) {\n\t\t\t\tif (items[i].el === groupIndex) {\n\t\t\t\t\treturn items[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst group = this._itemManager.getGroup(groupIndex);\n\n\t\t\treturn group && group.items[itemIndex || 0];\n\t\t}\n\t}\n\t/**\n\t * Updates the item via index or the element.\n\t * @ko index ë˜ëŠ” element를 통해 ì•„ì´í…œì„ ì—…ë°ì´íŠ¸í•œë‹¤.\n\t * @param {number | HTMLElement} [groupIndex=0] The element corresponding to item or the index of the group where the item is in position <ko> itemì— í•´ë‹¹í•˜ëŠ” element ë˜ëŠ” 해당 itemì´ ìžˆëŠ” groupì˜ index</ko>\n\t * @param {number} [itemIndex] If groupIndex is used, the index of the item in the group <ko> groupIndex를 ì‚¬ìš©í• ê²½ìš° 해당 groupì— ìžˆëŠ” Itemì˜ index </ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\telement.innerHTML = \"2\";\n\telement.style.height = \"400px\";\n\tig.updateItem(element);\n\tig.updateItem(0, 0);\n\t */\n\tpublic updateItem(groupIndex?: number, itemIndex?: number) {\n\t\tconst item = this.getItem(groupIndex, itemIndex);\n\n\t\tthis._updateItem(item) && this.layout(false);\n\n\t\treturn this;\n\t}\n\t/**\n\t * Update the currently displayed items.\n\t * @ko 현재보여주는 ì•„ì´í…œë“¤ì„ ì—…ë°ì´íŠ¸í•œë‹¤.\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\telement.innerHTML = \"2\";\n\telement.style.height = \"400px\";\n\n\telement2.innerHTML = \"2\";\n\telement2.style.height = \"400px\";\n\n\tig.updateItems();\n\t */\n\tpublic updateItems() {\n\t\tthis.getItems().forEach(item => {\n\t\t\tthis._updateItem(item);\n\t\t});\n\t\tthis.layout(false);\n\t\treturn this;\n\t}\n\t/**\n\t * Move to some group or item position.\n\t * @ko 해당하는 그룹 ë˜ëŠ” ì•„ì´í…œì˜ 위치로 ì´ë™í•œë‹¤.\n\t * @param {Number} [index] group's index <ko> ê·¸ë£¹ì˜ index</ko>\n\t * @param {Number} [itemIndex=-1] item's index <ko> ê·¸ë£¹ì˜ index</ko>\n\t * @return {eg.InfiniteGrid} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t */\n\tpublic moveTo(index: number, itemIndex = 0) {\n\t\tif (this.isProcessing()) {\n\t\t\treturn this;\n\t\t}\n\t\tconst data = this._itemManager.getGroup(index);\n\n\t\tif (!data) {\n\t\t\treturn this;\n\t\t}\n\t\tconst infinite = this._infinite;\n\t\tconst outlines = data.outlines;\n\t\tconst items = data.items;\n\t\tconst item = items[itemIndex];\n\t\tconst isResize = outlines.start && (outlines.start.length === 0);\n\t\tconst [startCursor, endCursor] = infinite.getCursors();\n\t\tconst isInCursor = startCursor <= index && index <= endCursor;\n\t\tconst { useRecycle, horizontal } = this.options;\n\n\t\tif (isInCursor || !useRecycle || !isResize) {\n\t\t\tlet pos = item ? item.rect[horizontal ? \"left\" : \"top\"] : Math.max(...outlines.start);\n\t\t\tconst fit = Math.min(...outlines.start);\n\n\t\t\tif (fit < 0) {\n\t\t\t\t// base < 0\n\t\t\t\tthis._fitItems(fit, 0);\n\t\t\t\tpos -= fit;\n\t\t\t}\n\t\t\tconst isAppend = index > startCursor;\n\n\t\t\tif (isInCursor || isAppend) {\n\t\t\t\tthis._scrollTo(pos);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis._postLayout({\n\t\t\t\tfromCache: true,\n\t\t\t\tgroups: [data],\n\t\t\t\titems,\n\t\t\t\tnewItems: [],\n\t\t\t\tisAppend,\n\t\t\t\tisTrusted: false,\n\t\t\t})!.on(\"renderComplete\", ({ start, end }) => {\n\t\t\t\tconst itemManager = this._itemManager;\n\n\t\t\t\tif (!itemManager) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst scrollPos = items[itemIndex].rect[horizontal ? \"left\" : \"top\"];\n\n\t\t\t\tif (!isInCursor) {\n\t\t\t\t\titemManager.clearOutlines(start, end);\n\t\t\t\t}\n\t\t\t\tthis._scrollTo(scrollPos);\n\t\t\t\tthis._setScrollPos(scrollPos);\n\t\t\t});\n\t\t\treturn this;\n\t\t} else {\n\t\t\tconst isAppend = index > endCursor || index < startCursor - 1;\n\n\t\t\tthis._postCache({\n\t\t\t\tisAppend,\n\t\t\t\tcache: [data],\n\t\t\t\tisTrusted: false,\n\t\t\t})!.on(\"renderComplete\", ({ start, end }) => {\n\t\t\t\tconst itemManager = this._itemManager;\n\n\t\t\t\tif (!itemManager) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pos = items[itemIndex].rect[horizontal ? \"left\" : \"top\"];\n\n\t\t\t\titemManager.clearOutlines(start, end);\n\t\t\t\tthis._scrollTo(pos);\n\t\t\t\tthis._setScrollPos(pos);\n\t\t\t});\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n * Destroys elements, properties, and events used on a grid layout.\n * @ko 그리드 ë ˆì´ì•„ì›ƒì— ì‚¬ìš©í•œ 엘리먼트와 ì†ì„±, ì´ë²¤íŠ¸ë¥¼ í•´ì œí•œë‹¤\n */\n\tpublic destroy() {\n\t\tthis._infinite.clear();\n\t\tthis._watcher.destroy();\n\t\tthis._reset();\n\t\tthis._itemManager.clear();\n\t\tthis._renderer.destroy();\n\t}\n\tprivate _relayout(isRelayout: boolean, groups: IInfiniteGridGroup[], items: IInfiniteGridItem[]) {\n\t\tconst renderer = this._renderer;\n\t\tconst { isEqualSize, isConstantSize } = renderer.options;\n\t\tconst layoutGroups = groups.filter(group => {\n\t\t\tconst item = group.items[0];\n\n\t\t\treturn item.orgSize && item.rect.top > DUMMY_POSITION / 10;\n\t\t});\n\n\t\tif (!layoutGroups.length) {\n\t\t\treturn [];\n\t\t}\n\t\tlet outline = layoutGroups[0].outlines.start;\n\n\t\tif (isRelayout) {\n\t\t\toutline = [outline.length ? Math.min(...outline) : 0];\n\t\t\tif (!isConstantSize && items.length) {\n\t\t\t\trenderer.updateSize(items);\n\n\t\t\t\t// update invisible items' size\n\t\t\t\tif (isEqualSize && items[0].size) {\n\t\t\t\t\tItemManager.pluck(layoutGroups, \"items\").forEach(item => {\n\t\t\t\t\t\titem.size = assign({}, items[0].size);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._layout.layout(layoutGroups, outline);\n\t}\n\tprivate _setContainerSize(size: number) {\n\t\tthis._renderer.setContainerSize(Math.max(this._itemManager.getMaxEdgeValue(), size));\n\t}\n\tprivate _appendLoadingBar() {\n\t\tif (!this.options.renderExternal) {\n\t\t\tconst loadingBar = this._loadingBar;\n\t\t\tconst container = this._renderer.container;\n\n\t\t\tfor (const type in loadingBar) {\n\t\t\t\tcontainer.appendChild(loadingBar[type as \"append\" | \"prepend\"]!);\n\t\t\t}\n\t\t}\n\t}\n\tprivate _setSize(size: number) {\n\t\tthis._infinite.setSize(this._renderer.getViewSize());\n\t\tthis._layout.setSize(size);\n\t}\n\tprivate _fitItems(base: number, margin = 0) {\n\t\tbase > 0 && this._watcher.scrollBy(-base);\n\t\tthis._itemManager.fit(base, this.options.horizontal);\n\t\tDOMRenderer.renderItems(this.getItems());\n\t\tthis._setContainerSize(this._getEdgeValue(\"end\") || margin);\n\t\tbase < 0 && this._watcher.scrollBy(-base);\n\t}\n\t// called by visible\n\tprivate _fit(useFit = this.options.useFit) {\n\t\tlet base = this._getEdgeValue(\"start\");\n\t\tconst margin = (this._getLoadingStatus() === LOADING_PREPEND && this._status.loadingSize) || 0;\n\t\tconst { isConstantSize, isEqualSize, useRecycle } = this.options;\n\n\t\tif (!useRecycle || !useFit || isConstantSize || isEqualSize) {\n\t\t\tif (base < margin) {\n\t\t\t\tthis._fitItems(base - margin, margin);\n\t\t\t}\n\t\t\tbase = 0;\n\t\t} else if (base !== 0 || margin) {\n\t\t\tthis._fitItems(base - margin, margin);\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t\tthis.isLoading() && this._renderLoading();\n\t\treturn base;\n\t}\n\tprivate _getEdgeValue(cursor: CursorType) {\n\t\treturn this._infinite.getEdgeValue(cursor);\n\t}\n\tprivate _isProcessing() {\n\t\treturn (this._status.processingStatus & PROCESSING) > 0;\n\t}\n\tprivate _getLoadingStatus() {\n\t\treturn this._status.processingStatus & (LOADING_APPEND | LOADING_PREPEND);\n\t}\n\tprivate _process(status: number, isAdd = true) {\n\t\tif (isAdd) {\n\t\t\tthis._status.processingStatus |= status;\n\t\t} else {\n\t\t\tthis._status.processingStatus -= this._status.processingStatus & status;\n\t\t}\n\t}\n\tprivate _insert({\n\t\telements,\n\t\tisAppend,\n\t\thasChildren,\n\t\tgroupKey = new Date().getTime() + Math.floor(Math.random() * 1000),\n\t}: {\n\t\telements: string | string[] | HTMLElement[] | IJQuery,\n\t\tisAppend?: boolean,\n\t\thasChildren?: boolean,\n\t\tgroupKey?: string | number,\n\t}) {\n\t\tif (this._isProcessing() || elements.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tconst items = ItemManager.toItems($(elements, true), groupKey);\n\n\t\tthis._insertItems({\n\t\t\titems,\n\t\t\tisAppend,\n\t\t\thasChildren,\n\t\t\tgroupKey,\n\t\t});\n\t}\n\tprivate _insertItems({\n\t\titems,\n\t\tisAppend,\n\t\thasChildren,\n\t\tgroupKey = new Date().getTime() + Math.floor(Math.random() * 1000),\n\t}: {\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend?: boolean,\n\t\thasChildren?: boolean,\n\t\tgroupKey?: string | number,\n\t}) {\n\t\tif (!items.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst group = this._itemManager[isAppend ? \"appendGroup\" : \"prependGroup\"]({\n\t\t\tgroupKey,\n\t\t\titems,\n\t\t})!;\n\t\tif (!isAppend) {\n\t\t\tconst infinite = this._infinite;\n\t\t\tconst [startCursor, endCursor] = infinite.getCursors();\n\n\t\t\tinfinite.setCursor(\"start\", startCursor + 1);\n\t\t\tinfinite.setCursor(\"end\", endCursor + 1);\n\t\t}\n\t\tthis._postLayout({\n\t\t\tfromCache: false,\n\t\t\tgroups: [group],\n\t\t\titems: group.items,\n\t\t\tnewItems: group.items,\n\t\t\tisAppend,\n\t\t\thasChildren,\n\t\t\tisTrusted: false,\n\t\t});\n\t}\n\t// add items, and remove items for recycling\n\tprivate _recycle(ranges: Array<{ start: number, end: number }>) {\n\t\tconst { useRecycle, renderExternal } = this.options;\n\t\tif (!useRecycle) {\n\t\t\treturn false;\n\t\t}\n\t\tlet isRecycle = false;\n\t\tranges.forEach(({ start, end }) => {\n\t\t\tif (start === -1 || end === -1 || end < start) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst items = this._itemManager.pluck(\"items\", start, end);\n\n\t\t\tisRecycle = isRecycle || items.some(item => item.mounted);\n\t\t\titems.forEach(item => {\n\t\t\t\titem.mounted = false;\n\t\t\t});\n\t\t\tif (!renderExternal) {\n\t\t\t\tDOMRenderer.removeItems(items);\n\t\t\t}\n\t\t});\n\t\tif (isRecycle) {\n\t\t\tthis._requestGroups = [];\n\t\t\tthis.trigger(\"render\", {\n\t\t\t\tnext: () => { },\n\t\t\t});\n\t\t}\n\t\treturn isRecycle;\n\t}\n\tprivate _renderLoading(userStyle = this._status.loadingStyle) {\n\t\tif (!this.isLoading()) {\n\t\t\treturn;\n\t\t}\n\t\tconst isAppend = this._getLoadingStatus() === LOADING_APPEND;\n\t\tconst el = this._loadingBar[isAppend ? \"append\" : \"prepend\"];\n\n\t\tif (!el) {\n\t\t\treturn;\n\t\t}\n\t\tconst style = assign({\n\t\t\tposition: \"absolute\",\n\t\t}, userStyle);\n\n\t\tfor (const property in style) {\n\t\t\tel.style[property as keyof StyleType] = style[property as keyof StyleType];\n\t\t}\n\t\tthis._status.loadingSize = this.options.horizontal ? outerWidth(el) : outerHeight(el);\n\t\tconst posName = this.options.horizontal ? \"left\" : \"top\";\n\n\t\tif (!(posName in style)) {\n\t\t\tconst pos = isAppend ? this._getEdgeValue(\"end\") : this._getEdgeValue(\"start\") - this._status.loadingSize;\n\n\t\t\tel.style[posName] = `${pos}px`;\n\t\t}\n\t}\n\tprivate _updateItem(item?: IInfiniteGridItem) {\n\t\tif (item && item.el) {\n\t\t\titem.content = item.el.outerHTML;\n\n\t\t\t!this.options.isEqualSize && resetSize(item);\n\t\t\tthis._renderer.updateSize([item]);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprivate _setScrollPos(pos: number) {\n\t\tthis._watcher.setScrollPos(this._watcher.getContainerOffset() + pos);\n\t}\n\tprivate _scrollTo(pos: number) {\n\t\tthis._watcher.scrollTo(this._watcher.getContainerOffset() + pos);\n\t}\n\tprivate _postCache({\n\t\tcache,\n\t\tisAppend,\n\t\tisTrusted = true,\n\t}: {\n\t\tcache: IInfiniteGridGroup[],\n\t\tisAppend?: boolean,\n\t\tisTrusted?: boolean,\n\t}) {\n\t\tconst { isConstantSize } = this.options;\n\t\tconst items = ItemManager.pluck(cache, \"items\");\n\t\tlet fromCache = true;\n\t\tconst newItems = items.filter(item => {\n\t\t\tif (!item.orgSize || !item.orgSize.width) {\n\t\t\t\tfromCache = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !isConstantSize && item.rect.top < DUMMY_POSITION / 10;\n\t\t});\n\n\t\treturn this._postLayout({\n\t\t\tfromCache,\n\t\t\tgroups: cache,\n\t\t\titems,\n\t\t\tnewItems,\n\t\t\tisAppend,\n\t\t\tisTrusted,\n\t\t});\n\t}\n\tprivate _postLayout({\n\t\tfromCache,\n\t\tgroups,\n\t\titems = ItemManager.pluck(groups, \"items\"),\n\t\tnewItems,\n\t\tisAppend,\n\t\thasChildren,\n\t\tisTrusted,\n\t}: {\n\t\tfromCache: boolean,\n\t\tgroups: IInfiniteGridGroup[],\n\t\titems?: IInfiniteGridItem[],\n\t\tnewItems?: IInfiniteGridItem[],\n\t\tisAppend?: boolean,\n\t\thasChildren?: boolean,\n\t\tisTrusted?: boolean,\n\t}) {\n\t\tthis._process(PROCESSING);\n\n\t\tif (!groups.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst renderExternal = this.options.renderExternal;\n\t\tconst renderer = this._renderer;\n\t\tconst callbackComponent = new Component();\n\n\t\tconst next = () => {\n\t\t\titems.forEach(item => {\n\t\t\t\titem.mounted = true;\n\t\t\t});\n\t\t\tthis._renderManager\n\t\t\t\t.render(callbackComponent, groups, newItems, isAppend)\n\t\t\t\t.on(\"renderComplete\", ({ start, end }) => {\n\t\t\t\t\tthis._setCursor(start, end);\n\t\t\t\t}).on(\"imageError\", e => {\n\t\t\t\t\t/**\n\t\t\t\t\t * This event is fired when an error occurs in the image.\n\t\t\t\t\t * @ko ì´ë¯¸ì§€ ë¡œë“œì— ì—러가 ë‚ ë•Œ ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸.\n\t\t\t\t\t * @event eg.InfiniteGrid#imageError\n\t\t\t\t\t * @param {eg.InfiniteGrid.IErrorCallbackOptions} e The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n\t\t\t\t\t * @example\n\t\t\t\t\tig.on(\"imageError\", e => {\n\t\t\t\t\te.remove();\n\t\t\t\t\te.removeItem();\n\t\t\t\t\te.replace(\"http://...jpg\");\n\t\t\t\t\te.replace(imageElement);\n\t\t\t\t\te.replaceItem(\"item html\");\n\t\t\t\t\t});\n\t\t\t\t\t*/\n\t\t\t\t\tthis.trigger(\"imageError\", assign(e, { element: e.item.el }));\n\t\t\t\t}).on(\"layoutComplete\", ({\n\t\t\t\t\titems: layoutItems,\n\t\t\t\t}) => {\n\t\t\t\t\tthis._process(PROCESSING, false);\n\t\t\t\t\tthis._onLayoutComplete({\n\t\t\t\t\t\titems: layoutItems,\n\t\t\t\t\t\tisAppend,\n\t\t\t\t\t\tfromCache,\n\t\t\t\t\t\tisTrusted,\n\t\t\t\t\t\tuseRecycle: false,\n\t\t\t\t\t});\n\t\t\t\t}).on(\"finish\", ({ remove, layout }) => {\n\t\t\t\t\tremove.forEach(el => this.remove(el, false));\n\t\t\t\t\tif (layout) {\n\t\t\t\t\t\tthis.layout(false);\n\t\t\t\t\t} else if (!this.isProcessing() && this.options.useRecycle) {\n\t\t\t\t\t\tconst scroller = this._watcher;\n\t\t\t\t\t\tconst scrollPos = scroller.getScrollPos();\n\n\t\t\t\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t};\n\n\t\tif (!hasChildren) {\n\t\t\tif (renderExternal) {\n\t\t\t\tif (items.every(item => item.mounted)) {\n\t\t\t\t\tnext();\n\t\t\t\t} else {\n\t\t\t\t\tthis._requestGroups = groups;\n\t\t\t\t\tthis.trigger(\"render\", {\n\t\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t\t!hasChildren && DOMRenderer.renderItems(items);\n\t\t\t\t\t\t\tnext();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn callbackComponent;\n\t\t\t} else {\n\t\t\t\t// If container has children, it does not render first.\n\t\t\t\trenderer.createAndInsert(items, isAppend);\n\t\t\t}\n\t\t}\n\t\tnext();\n\n\t\treturn callbackComponent;\n\t}\n\t// called by visible\n\tprivate _requestAppend({ cache }: { cache?: IInfiniteGridGroup[] }) {\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({ cache, isAppend: true });\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the bottom or right of a layout because there is no card to be displayed on screen when a user scrolls near bottom or right.\n\t\t\t * @ko ì¹´ë“œ 엘리먼트가 ë ˆì´ì•„ì›ƒì˜ ì•„ëž˜ë‚˜ ì˜¤ë¥¸ìª½ì— ì¶”ê°€ë¼ì•¼ í• ë•Œ ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸. 사용ìžê°€ 아래나 오른쪽으로 스í¬ë¡¤í•´ì„œ í™”ë©´ì— í‘œì‹œë 카드가 ì—†ì„ ë•Œ ë°œìƒí•œë‹¤\n\t\t\t * @event eg.InfiniteGrid#append\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>í™”ë©´ì— ë³´ì—¬ì§€ëŠ” 마지막 ê·¸ë£¹ì˜ ê·¸ë£¹í‚¤</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용ìžì˜ ì•¡ì…˜ì— ì˜í•´ ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ì˜€ìœ¼ë©´ true, 스í¬ë¦½íŠ¸ë‚˜ APIí˜¸ì¶œì— ì˜í•´ ë°œìƒí•˜ì˜€ì„ 경우ì—는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for append loading data. <ko> ë’·ìª½ì— ì¶”ê°€ë˜ëŠ” ë°ì´í„° ë¡œë”©ì„ ì‹œìž‘í•œë‹¤. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> ë¡œë”©ì„ ì‹œìž‘í• ë•Œ 로딩 ë°”ì— ì ìš©ë ì‚¬ìš©ìž ìŠ¤íƒ€ì¼ </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>ë°ì´í„° ë¡œë”©ì„ ìœ„í•´ append/prepend startLoading() 호출 ì´í›„ ë¡œë”©ì„ ë낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> ë¡œë”©ì´ ëë‚ ë•Œ 로딩 ë°”ì— ì ìš©ë ì‚¬ìš©ìž ìŠ¤íƒ€ì¼ </ko>\n\t\t\t */\n\t\t\tthis.trigger(\"append\", {\n\t\t\t\tisTrusted: true,\n\t\t\t\tgroupKey: this.getGroupKeys().pop() || \"\",\n\t\t\t\tstartLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.startLoading(true, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\t// called by visible\n\tprivate _requestPrepend({ cache }: { cache?: IInfiniteGridGroup[] }) {\n\t\tthis._fit(this.options.useFit || !cache || !cache.length);\n\t\tif (this._isProcessing()) {\n\t\t\treturn;\n\t\t}\n\t\tif (cache && cache.length) {\n\t\t\tthis._postCache({ cache, isAppend: false });\n\t\t} else {\n\t\t\t/**\n\t\t\t * This event is fired when a card element must be added at the top or left of a layout because there is no card to be displayed on screen when a user scrolls near top or left.\n\t\t\t * @ko 카드가 ë ˆì´ì•„ì›ƒì˜ ìœ„ë‚˜ ì™¼ìª½ì— ì¶”ê°€ë¼ì•¼ í• ë•Œ ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸. 사용ìžê°€ 위나 왼쪽으로 스í¬ë¡¤í•´ì„œ í™”ë©´ì— í‘œì‹œë 카드가 ì—†ì„ ë•Œ ë°œìƒí•œë‹¤.\n\t\t\t * @event eg.InfiniteGrid#prepend\n\t\t\t * @param {Object} param The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n\t\t\t * @param {String|Number} groupKey The group key of the first group visible on the screen <ko>í™”ë©´ì— ë³´ì—¬ì§€ëŠ” 첫번째 ê·¸ë£¹ì˜ ê·¸ë£¹í‚¤</ko>\n\t\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용ìžì˜ ì•¡ì…˜ì— ì˜í•´ ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ì˜€ìœ¼ë©´ true, 스í¬ë¦½íŠ¸ë‚˜ APIí˜¸ì¶œì— ì˜í•´ ë°œìƒí•˜ì˜€ì„ 경우ì—는 false를 반환한다.</ko>\n\t\t\t * @param {Function} param.startLoading Start loading for prepend loading data. <ko> ì•žìª½ì— ì¶”ê°€ë˜ëŠ” ë°ì´í„° ë¡œë”©ì„ ì‹œìž‘í•œë‹¤. </ko>\n\t\t\t * @param {Object} param.startLoading.userStyle The custom style to apply to this loading bar for start. <ko> ë¡œë”©ì„ ì‹œìž‘í• ë•Œ 로딩 ë°”ì— ì ìš©ë ì‚¬ìš©ìž ìŠ¤íƒ€ì¼ </ko>\n\t\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>ë°ì´í„° ë¡œë”©ì„ ìœ„í•´ append/prepend startLoading() 호출 ì´í›„ ë¡œë”©ì„ ë낸다.</ko>\n\t\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> ë¡œë”©ì´ ëë‚ ë•Œ 로딩 ë°”ì— ì ìš©ë ì‚¬ìš©ìž ìŠ¤íƒ€ì¼ </ko>\n\t\t\t */\n\t\t\tthis.trigger(\"prepend\", {\n\t\t\t\tisTrusted: true,\n\t\t\t\tgroupKey: this.getGroupKeys().shift(),\n\t\t\t\tstartLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.startLoading(false, userStyle);\n\t\t\t\t},\n\t\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\t\tthis.endLoading(userStyle);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\tprivate _onResize() {\n\t\tthis.layout(true);\n\t}\n\tprivate _setCursor(start: number, end: number) {\n\t\tconst infinite = this._infinite;\n\t\tconst [startCursor, endCursor] = infinite.getCursors();\n\t\tinfinite.setCursor(\"start\", start);\n\t\tinfinite.setCursor(\"end\", end);\n\n\t\tconst isRecycle = this._recycle([\n\t\t\t{ start: startCursor, end: start - 1 },\n\t\t\t{ start: end + 1, end: endCursor },\n\t\t]);\n\t\tif (!isRecycle) {\n\t\t\tthis._requestGroups = [];\n\t\t\tthis.trigger(\"render\", {\n\t\t\t\tnext: () => { },\n\t\t\t});\n\t\t}\n\t}\n\tprivate _onCheck({\n\t\tisForward,\n\t\tscrollPos,\n\t\thorizontal,\n\t\torgScrollPos,\n\t}: {\n\t\tisForward: boolean,\n\t\tscrollPos: number,\n\t\thorizontal: boolean,\n\t\torgScrollPos: number,\n\t}) {\n\t\t/**\n\t\t * This event is fired when the user scrolls.\n\t\t * @ko 사용ìžê°€ 스í¬ë¡¤ í• ê²½ìš° ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸.\n\t\t * @event eg.InfiniteGrid#change\n\t\t * @param {Object} param The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n\t\t * @param {Boolean} param.isForward Indicates whether the scroll progression direction is forward or backword. <ko>스í¬ë¡¤ ì§„í–‰ë°©í–¥ì´ ì•žìª½ìœ¼ë¡œ 진행하는 지, 뒤쪽으로 진행하는지를 나타낸다.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테ì´ë„ˆ 엘리먼트 ê¸°ì¤€ì˜ í˜„ìž¬ 스í¬ë¡¤ 위치값</ko>\n\t\t * @param {Boolean} param.orgScrollPos Current position of the scroll <ko>현재 스í¬ë¡¤ 위치값</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용ìžì˜ ì•¡ì…˜ì— ì˜í•´ ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ì˜€ìœ¼ë©´ true, 스í¬ë¦½íŠ¸ë‚˜ APIí˜¸ì¶œì— ì˜í•´ ë°œìƒí•˜ì˜€ì„ 경우ì—는 false를 반환한다.</ko>\n\t\t * @param {Boolean} options.horizontal Direction of the scroll movement (true: horizontal, false: vertical) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (true 가로방향, false 세로방향</ko>\n\t\t */\n\t\tthis.trigger(\"change\", {\n\t\t\tisForward,\n\t\t\thorizontal,\n\t\t\tscrollPos,\n\t\t\torgScrollPos,\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\tprivate _onLayoutComplete({\n\t\titems,\n\t\tisAppend,\n\t\tisTrusted = false,\n\t\tuseRecycle = this.options.useRecycle,\n\t\tfromCache = false,\n\t\tisLayout = false,\n\t}: {\n\t\titems: IInfiniteGridItem[],\n\t\tisAppend?: boolean,\n\t\tisTrusted?: boolean,\n\t\tuseRecycle: boolean,\n\t\tfromCache: boolean,\n\t\tisLayout?: boolean,\n\t}) {\n\t\tconst viewSize = this._renderer.getViewSize();\n\n\t\tif (!isAppend) {\n\t\t\tthis._fit();\n\t\t} else {\n\t\t\tthis.isLoading() && this._renderLoading();\n\t\t}\n\n\t\tconst watcher = this._watcher;\n\t\tconst scrollPos = watcher.getScrollPos();\n\n\t\t// recycle after _fit beacause prepend and append are occured simultaneously by scroll.\n\t\tif (!isLayout && useRecycle && !this.isLoading()) {\n\t\t\tthis._infinite.recycle(scrollPos, isAppend);\n\t\t}\n\n\t\tconst size = this._getEdgeValue(\"end\");\n\n\t\tif (isAppend) {\n\t\t\tthis._setContainerSize(size + this._status.loadingSize || 0);\n\t\t\tif (typeof scrollPos === \"number\" && scrollPos > 0) {\n\t\t\t\t!IS_IOS && this._scrollTo(scrollPos);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * This event is fired when layout is successfully arranged through a call to the append(), prepend(), or layout() method.\n\t\t * @ko ë ˆì´ì•„웃 배치가 완료ëì„ ë•Œ ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸. append() 메서드나 prepend() 메서드, layout() 메서드 호출 후 ì¹´ë“œì˜ ë°°ì¹˜ê°€ 완료ëì„ ë•Œ ë°œìƒí•œë‹¤\n\t\t * @event eg.InfiniteGrid#layoutComplete\n\t\t *\n\t\t * @param {Object} param The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n\t\t * @param {Array} param.target Rearranged card elements<ko>ìž¬ë°°ì¹˜ëœ ì¹´ë“œ 엘리먼트들</ko>\n\t\t * @param {Boolean} param.fromCache Check whether these items are cache or not <ko>해당 ì•„ì´í…œë“¤ì´ ìºì‹œì¸ì§€ 아닌지 확ì¸í•œë‹¤.</ko>\n\t\t * @param {Boolean} param.isLayout Returns true if this is an event called by resize event or layout method. Returns false if this is an event called by adding an item. <ko>해당 ì´ë²¤íŠ¸ê°€ 리사ì´ì¦ˆ ì´ë²¤íŠ¸ ë˜ëŠ” layout() 메서드를 통해 호출ë으면 true, ì•„ì´í…œ 추가로 호출ë으면 false를 반환한다.</ko>\n\t\t * @param {Boolean} param.isAppend Checks whether the append() method is used to add a card element. It returns true even though the layoutComplete event is fired after the layout() method is called. <ko>ì¹´ë“œ 엘리먼트가 append() 메서드로 추가ë는지 확ì¸í•œë‹¤. layout() 메서드가 í˜¸ì¶œëœ í›„ layoutComplete ì´ë²¤íŠ¸ê°€ ë°œìƒí•´ë„ 'true'를 반환한다.</ko>\n\t\t * @param {Boolean} param.isScroll Checks whether scrolling has occurred after the append(), prepend(), ..., etc method is called <ko>append, prend 등 호출 후 스í¬ë¡¤ì´ ìƒê²¼ëŠ”지 확ì¸í•œë‹¤.</ko>\n\t\t * @param {Number} param.scrollPos Current scroll position value relative to the infiniteGrid container element. <ko>infiniteGrid 컨테ì´ë„ˆ 엘리먼트 ê¸°ì¤€ì˜ í˜„ìž¬ 스í¬ë¡¤ 위치값</ko>\n\t\t * @param {Number} param.orgScrollPos Current position of the scroll <ko>현재 스í¬ë¡¤ 위치값</ko>\n\t\t * @param {Number} param.size The size of container element <ko>컨테ì´ë„ˆ ì—˜ë¦¬ë¨¼íŠ¸ì˜ í¬ê¸°</ko>\n\t\t * @param {Boolean} param.isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call <ko>사용ìžì˜ ì•¡ì…˜ì— ì˜í•´ ì´ë²¤íŠ¸ê°€ ë°œìƒí•˜ì˜€ìœ¼ë©´ true, 스í¬ë¦½íŠ¸ë‚˜ APIí˜¸ì¶œì— ì˜í•´ ë°œìƒí•˜ì˜€ì„ 경우ì—는 false를 반환한다.</ko>\n\t\t * @param {Function} param.endLoading End loading after startLoading() for append/prepend loading data. <ko>ë°ì´í„° ë¡œë”©ì„ ìœ„í•´ append/prepend startLoading() 호출 ì´í›„ ë¡œë”©ì„ ë낸다.</ko>\n\t\t * @param {Object} param.endLoading.userStyle The custom style to apply to this loading bar for start. <ko> ë¡œë”©ì´ ëë‚ ë•Œ 로딩 ë°”ì— ì ìš©ë ì‚¬ìš©ìž ìŠ¤íƒ€ì¼ </ko>\n\t\t */\n\t\tthis.trigger(\"layoutComplete\", {\n\t\t\ttarget: items.concat(),\n\t\t\tisAppend: !!isAppend,\n\t\t\tisTrusted,\n\t\t\tfromCache,\n\t\t\tisLayout,\n\t\t\tisScroll: viewSize < watcher.getContainerOffset() + size,\n\t\t\tscrollPos,\n\t\t\torgScrollPos: watcher.getOrgScrollPos(),\n\t\t\tsize,\n\t\t\tendLoading: (userStyle: StyleType) => {\n\t\t\t\tthis.endLoading(userStyle);\n\t\t\t},\n\t\t});\n\t\tthis._infinite.scroll(scrollPos);\n\t}\n\tprivate _reset() {\n\t\tthis._status = {\n\t\t\tprocessingStatus: IDLE,\n\t\t\tloadingSize: 0,\n\t\t\tloadingStyle: {},\n\t\t};\n\t}\n}\n\nexport default InfiniteGrid;\n","import { ALIGN } from \"../consts\";\nimport { getStyleNames, assignOptions, fill, cloneItems } from \"../utils\";\nimport { ILayout, IAlign, IRectlProperties, IInfiniteGridItem, IInfiniteGridGroup } from \"../types\";\n\n// ALIGN\nconst { START, CENTER, END, JUSTIFY } = ALIGN;\n\n/**\n * @classdesc The GridLayout is a layout that stacks cards with the same width as a stack of bricks. Adjust the width of all images to the same size, find the lowest height column, and insert a new card.\n * @ko GridLayout는 ë²½ëŒì„ 쌓아 올린 모양처럼 ë™ì¼í•œ 너비를 가진 카드를 쌓는 ë ˆì´ì•„웃ì´ë‹¤. ëª¨ë“ ì´ë¯¸ì§€ì˜ 너비를 ë™ì¼í•œ í¬ê¸°ë¡œ ì¡°ì •í•˜ê³ , 가장 높ì´ê°€ ë‚®ì€ ì—´ì„ ì°¾ì•„ 새로운 ì´ë¯¸ì§€ë¥¼ 삽입한다. ë”°ë¼ì„œ ë°°ì¹˜ëœ ì¹´ë“œ 사ì´ì— 빈 ê³µê°„ì´ ìƒê¸°ì§€ëŠ” 않지만 ë°°ì¹˜ëœ ë ˆì´ì•„ì›ƒì˜ ì•„ëž˜ìª½ì€ ìš¸í‰ë¶ˆí‰í•´ì§„다.\n * @class eg.InfiniteGrid.GridLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.GridLayout module <ko>eg.InfiniteGrid.GridLayout ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>ì•„ì´í…œë“¤ 사ì´ì˜ 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.align=START] Align of the position of the items (START, CENTER, END, JUSTIFY) <ko>ì•„ì´í…œë“¤ì˜ ìœ„ì¹˜ì˜ ì •ë ¬ (START, CENTER, END, JUSTIFY)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> ì•„ì´í…œì˜ 사ì´ì¦ˆ. 만약 ì•„ì´í…œ 사ì´ì¦ˆê°€ 0ì´ë©´, ì•„ì´í…œë“¤ì˜ 첫번째 ì•„ì´í…œì˜ 사ì´ì¦ˆë¡œ ê³„ì‚°ì´ ëœë‹¤. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\"#grid\". {\n horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.GridLayout, {\n margin: 10,\n align: \"start\",\n itemSize: 200\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.GridLayout({\n margin: 10,\n align: \"center\",\n itemSize: 200,\n horizontal: true,\n});\n\n</script>\n```\n **/\nclass GridLayout implements ILayout {\n\tpublic options: {\n\t\thorizontal: boolean,\n\t\tmargin: number,\n\t\talign: IAlign[keyof IAlign],\n\t\titemSize: number,\n\t};\n\tprivate _size: number;\n\tprivate _columnSize: number;\n\tprivate _columnLength: number;\n\tprivate _style: IRectlProperties;\n\tconstructor(options: Partial<GridLayout[\"options\"]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\talign: START,\n\t\t\titemSize: 0,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._columnSize = 0;\n\t\tthis._columnLength = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.GridLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, true, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko ì•„ì´í…œì„ 아웃ë¼ì¸ ìœ„ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.GridLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100, 200, 300, 400]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, false, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko ê·¸ë£¹ë“¤ì˜ ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.GridLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>ë ˆì´ì•„ì›ƒí• ê·¸ë£¹ë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst firstItem = (groups.length && groups[0].items.length && groups[0].items[0]) as IInfiniteGridItem;\n\n\t\tthis.checkColumn(firstItem);\n\n\t\t// if outlines' length and columns' length are now same, re-caculate outlines.\n\t\tlet startOutline: number[];\n\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tconst pos = outline.length === 0 ? 0 : Math.min(...outline);\n\n\t\t\t// re-layout items.\n\t\t\tstartOutline = fill(new Array(this._columnLength), pos);\n\t\t} else {\n\t\t\tstartOutline = outline.slice();\n\t\t}\n\t\tgroups.forEach(group => {\n\t\t\tconst items = group.items;\n\t\t\tconst result = this._layout(items, startOutline, true);\n\n\t\t\tgroup.outlines = result;\n\t\t\tstartOutline = result.end;\n\t\t});\n\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko ë ˆì´ì•„ì›ƒì˜ ê°€ì‹œ 사ì´ì¦ˆë¥¼ ì„¤ì •í•œë‹¤.\n\t * @method eg.InfiniteGrid.GridLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>ë ˆì´ì•„ì›ƒì— ì•„ì´í…œì„ 추가하는 컨테ì´ë„ˆ ì˜ì—ì˜ ê°€ì‹œ 사ì´ì¦ˆ</ko>\n\t * @return {eg.InfiniteGrid.GridLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\tprivate checkColumn(item: IInfiniteGridItem) {\n\t\tconst { itemSize, margin, horizontal } = this.options;\n\t\tconst sizeName = horizontal ? \"height\" : \"width\";\n\t\tconst columnSize = Math.floor(itemSize || (item && item.size![sizeName]) || 0) || 0;\n\n\t\tthis._columnSize = columnSize;\n\t\tif (!columnSize) {\n\t\t\tthis._columnLength = 1;\n\t\t\treturn;\n\t\t}\n\t\tthis._columnLength = Math.max(Math.floor((this._size + margin) / (columnSize + margin)), 1);\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[], isAppend?: boolean) {\n\t\tconst length = items.length;\n\t\tconst margin = this.options.margin;\n\t\tconst align = this.options.align;\n\t\tconst style = this._style;\n\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst columnSize = this._columnSize;\n\t\tconst columnLength = this._columnLength;\n\n\t\tconst size = this._size;\n\t\tconst viewDist = (size - (columnSize + margin) * columnLength + margin);\n\n\t\tconst pointCaculateName = isAppend ? \"min\" : \"max\";\n\t\tconst indexCaculateName = isAppend ? \"indexOf\" : \"lastIndexOf\";\n\t\tconst startOutline = outline.slice();\n\t\tconst endOutline = outline.slice();\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline) || 0;\n\t\t\tlet index = endOutline[indexCaculateName](point);\n\t\t\tconst item = items[isAppend ? i : length - 1 - i];\n\t\t\tconst itemSize = item.size;\n\n\t\t\tif (!itemSize) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst size1 = itemSize[size1Name];\n\t\t\tconst size2 = itemSize[size2Name];\n\t\t\tconst pos1 = isAppend ? point : point - margin - size1;\n\t\t\tconst endPos1 = pos1 + size1 + margin;\n\n\t\t\tif (index === -1) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tlet pos2 = (columnSize + margin) * index;\n\n\t\t\t// ALIGN\n\t\t\tif (align === CENTER) {\n\t\t\t\tpos2 += viewDist / 2;\n\t\t\t} else if (align === END) {\n\t\t\t\tpos2 += viewDist + columnSize - size2;\n\t\t\t} else if (align === JUSTIFY) {\n\t\t\t\tif (columnLength <= 1) {\n\t\t\t\t\tpos2 += viewDist / 2;\n\t\t\t\t} else {\n\t\t\t\t\tpos2 = (size - columnSize) / (columnLength - 1) * index;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// tetris\n\t\t\titem.rect = {\n\t\t\t\t[pos1Name as \"top\"]: pos1,\n\t\t\t\t[pos2Name as \"left\"]: pos2,\n\t\t\t};\n\t\t\titem.column = index;\n\t\t\tendOutline[index] = isAppend ? endPos1 : pos1;\n\t\t}\n\t\tif (!isAppend) {\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\t// if append items, startOutline is low, endOutline is high\n\t\t// if prepend items, startOutline is high, endOutline is low\n\t\treturn {\n\t\t\tstart: isAppend ? startOutline : endOutline,\n\t\t\tend: isAppend ? endOutline : startOutline,\n\t\t};\n\t}\n\tprivate _insert(\n\t\titems: IInfiniteGridItem[] = [],\n\t\toutline: number[] = [],\n\t\tisAppend?: boolean,\n\t\tcache?: boolean,\n\t) {\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\tlet startOutline = outline;\n\n\t\tif (!this._columnLength) {\n\t\t\tthis.checkColumn(items[0]);\n\t\t}\n\t\tif (outline.length !== this._columnLength) {\n\t\t\tstartOutline = fill(new Array(this._columnLength), outline.length ? (Math[isAppend ? \"min\" : \"max\"](...outline) || 0) : 0);\n\t\t}\n\n\t\tconst result = this._layout(clone, startOutline, isAppend);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: result,\n\t\t};\n\t}\n}\n\nexport default GridLayout;\n","import { DUMMY_POSITION } from \"../consts\";\nimport { getStyleNames, assignOptions, fill, cloneItems } from \"../utils\";\nimport { ILayout, IRectlProperties, ISize, IInfiniteGridGroup, IInfiniteGridItem } from \"../types\";\n\nexport type FrameType = number[][];\nexport interface IFrameShape {\n\tleft?: number;\n\ttop?: number;\n\ttype: any;\n\twidth: number;\n\theight: number;\n\tindex?: number;\n}\nexport interface IFrameLayoutInterface {\n\thorizontal: boolean;\n\tmargin: number;\n\tframe: FrameType;\n\tframeFill: boolean;\n\titemSize: number | ISize;\n\t[key: string]: any;\n}\n/*\nFrame\n[\n[1, 1, 1, 1, 1],\n[0, 0, 2, 2, 2],\n[0, 0, 2, 2, 2],\n[3, 4, 5, 5, 5],\n]\n*/\nfunction disableFrame(\n\tframe: FrameType,\n\ttype: number,\n\ttop: number,\n\tleft: number,\n\twidth: number,\n\theight: number,\n) {\n\tfor (let i = top; i < top + height; ++i) {\n\t\tfor (let j = left; j < left + width; ++j) {\n\t\t\tif (type !== frame[i][j]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tframe[i][j] = 0;\n\t\t}\n\t}\n}\nfunction searchShapeInFrame(\n\tframe: FrameType,\n\ttype: number,\n\ttop: number,\n\tleft: number,\n\twidth: number,\n\theight: number,\n) {\n\tconst size: IFrameShape = {\n\t\tleft,\n\t\ttop,\n\t\ttype,\n\t\twidth: 1,\n\t\theight: 1,\n\t};\n\n\tfor (let i = left; i < width; ++i) {\n\t\tif (frame[top][i] === type) {\n\t\t\tsize.width = i - left + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\tfor (let i = top; i < height; ++i) {\n\t\tif (frame[i][left] === type) {\n\t\t\tsize.height = i - top + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tbreak;\n\t}\n\t// After finding the shape, it will not find again.\n\tdisableFrame(frame, type, top, left, size.width, size.height);\n\treturn size;\n}\nfunction getShapes(frame: FrameType) {\n\tconst height = frame.length;\n\tconst width = height ? frame[0].length : 0;\n\tconst shapes: IFrameShape[] = [];\n\n\tfor (let i = 0; i < height; ++i) {\n\t\tfor (let j = 0; j < width; ++j) {\n\t\t\tconst type = frame[i][j];\n\n\t\t\tif (!type) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Separate shapes with other numbers.\n\t\t\tshapes.push(searchShapeInFrame(frame, type, i, j, width, height));\n\t\t}\n\t}\n\tshapes.sort((a, b) => (a.type < b.type ? -1 : 1));\n\treturn {\n\t\tshapes,\n\t\twidth,\n\t\theight,\n\t};\n}\n/**\n * @classdesc FrameLayout is a layout that allows you to place cards in a given frame. It is a layout that corresponds to a level intermediate between the placement of the image directly by the designer and the layout using the algorithm.\n * @ko FrameLayoutì€ ì£¼ì–´ì§„ í”„ë ˆìž„ì— ë§žì¶° 카드를 배치하는 ë ˆì´ì•„웃입니다. ë””ìžì´ë„ˆê°€ ì§ì ‘ ì´ë¯¸ì§€ë¥¼ 배치하는 것과 ì•Œê³ ë¦¬ì¦˜ì„ ì‚¬ìš©í•œ ë°°ì¹˜ì˜ ì¤‘ê°„ ì •ë„ ìˆ˜ì¤€ì— í•´ë‹¹í•˜ëŠ” ë ˆì´ì•„웃ì´ë‹¤.\n * @class eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.FrameLayout module <ko>eg.InfiniteGrid.FrameLayout ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>ì•„ì´í…œë“¤ 사ì´ì˜ 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> ì•„ì´í…œì˜ 사ì´ì¦ˆ. 만약 ì•„ì´í…œ 사ì´ì¦ˆê°€ 0ì´ë©´, ì•„ì´í…œë“¤ì˜ 첫번째 ì•„ì´í…œì˜ 사ì´ì¦ˆë¡œ ê³„ì‚°ì´ ëœë‹¤. </ko>\n * @param {Boolean} [options.frame=[]] The size of the items. If it is 0, it is calculated as the size of the first item in items. <ko> ì•„ì´í…œì˜ 사ì´ì¦ˆ. 만약 ì•„ì´í…œ 사ì´ì¦ˆê°€ 0ì´ë©´, ì•„ì´í…œë“¤ì˜ 첫번째 ì•„ì´í…œì˜ 사ì´ì¦ˆë¡œ ê³„ì‚°ì´ ëœë‹¤. </ko>\n * @param {Boolean} [options.frameFill=true] Make sure that the frame can be attached after the previous frame. <ko> ë‹¤ìŒ í”„ë ˆìž„ì´ ì „ í”„ë ˆìž„ì— ì´ì–´ ë¶™ì¼ ìˆ˜ 있는지 있는지 확ì¸í•œë‹¤. </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\"#grid\". {\n horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.FrameLayout, {\n margin: 10,\n itemSize: 200,\n frame: [\n [1, 1, 1, 1, 1],\n [0, 0, 2, 2, 2],\n [0, 0, 2, 2, 2],\n [3, 4, 5, 5, 5],\n ],\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.FrameLayout({\n margin: 10,\n itemSize: 200,\n horizontal: true,\n frame: [\n [1, 1, 1, 1, 1],\n [0, 0, 2, 2, 2],\n [0, 0, 2, 2, 2],\n [3, 4, 5, 5, 5],\n ],\n});\n\n</script>\n```\n **/\nclass FrameLayout implements ILayout {\n\tpublic options: IFrameLayoutInterface;\n\tprotected _itemSize: number | ISize;\n\tprotected _shapes: {\n\t\tshapes: IFrameShape[],\n\t\twidth?: number,\n\t\theight?: number,\n\t};\n\tprotected _size: number;\n\tprotected _style: IRectlProperties;\n\n\tconstructor(options: Partial<IFrameLayoutInterface> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\titemSize: 0,\n\t\t\tframe: [],\n\t\t\tframeFill: true,\n\t\t}, options);\n\t\tconst frame = this.options.frame.map(row => row.slice());\n\n\t\tthis._itemSize = this.options.itemSize || 0;\n\t\t// divide frame into shapes.\n\t\tthis._shapes = getShapes(frame);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko ê·¸ë£¹ë“¤ì˜ ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.FrameLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>ë ˆì´ì•„ì›ƒí• ê·¸ë£¹ë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\t\t\tconst outlines = this._layout(group.items, point, true);\n\n\t\t\tgroup.outlines = outlines;\n\t\t\tpoint = outlines.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko ë ˆì´ì•„ì›ƒì˜ ê°€ì‹œ 사ì´ì¦ˆë¥¼ ì„¤ì •í•œë‹¤.\n\t * @method eg.InfiniteGrid.FrameLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>ë ˆì´ì•„ì›ƒì— ì•„ì´í…œì„ 추가하는 컨테ì´ë„ˆ ì˜ì—ì˜ ê°€ì‹œ 사ì´ì¦ˆ</ko>\n\t * @return {eg.InfiniteGrid.FrameLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.FrameLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, true, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko ì•„ì´í…œì„ 아웃ë¼ì¸ ìœ„ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.FrameLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, false, cache);\n\t}\n\tprotected _getItemSize() {\n\t\tthis._checkItemSize();\n\n\t\treturn this._itemSize;\n\t}\n\tprotected _checkItemSize() {\n\t\tif (this.options.itemSize) {\n\t\t\tthis._itemSize = this.options.itemSize;\n\t\t\treturn;\n\t\t}\n\t\tconst style = this._style;\n\t\tconst size = style.size2;\n\t\tconst margin = this.options.margin;\n\n\t\t// if itemSize is not in options, caculate itemSize from size.\n\t\tthis._itemSize = (this._size + margin) / this._shapes[size]! - margin;\n\t}\n\tprotected _layout(items: IInfiniteGridItem[], outline: number[] = [], isAppend?: boolean) {\n\t\tconst length = items.length;\n\t\tconst style = this._style;\n\t\tconst { margin, frameFill } = this.options;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst itemSize = this._getItemSize();\n\t\tconst isItemObject = typeof itemSize === \"object\";\n\t\tconst itemSize2 = isItemObject ? (itemSize as ISize)[size2Name] : itemSize as number;\n\t\tconst itemSize1 = isItemObject ? (itemSize as ISize)[size1Name] : itemSize as number;\n\t\tconst shapesSize = this._shapes[size2Name]!;\n\t\tconst shapes = this._shapes.shapes;\n\t\tconst shapesLength = shapes.length;\n\t\tconst startOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tconst endOutline = fill(new Array(shapesSize), DUMMY_POSITION);\n\t\tlet dist = 0;\n\t\tlet end = 0;\n\n\t\tif (!shapesLength) {\n\t\t\treturn { start: outline, end: outline };\n\t\t}\n\t\tfor (let i = 0; i < length; i += shapesLength) {\n\t\t\tfor (let j = 0; j < shapesLength && i + j < length; ++j) {\n\t\t\t\tconst item = items[i + j];\n\t\t\t\tconst shape = shapes[j];\n\t\t\t\tconst shapePos1 = shape[pos1Name]!;\n\t\t\t\tconst shapePos2 = shape[pos2Name]!;\n\t\t\t\tconst shapeSize1 = shape[size1Name]!;\n\t\t\t\tconst shapeSize2 = shape[size2Name]!;\n\t\t\t\tconst pos1 = end - dist + shapePos1 * (itemSize1 + margin);\n\t\t\t\tconst pos2 = shapePos2 * (itemSize2 + margin);\n\t\t\t\tconst size1 = shapeSize1 * (itemSize1 + margin) - margin;\n\t\t\t\tconst size2 = shapeSize2 * (itemSize2 + margin) - margin;\n\n\t\t\t\tfor (let k = shapePos2; k < shapePos2 + shapeSize2 && k < shapesSize; ++k) {\n\t\t\t\t\tif (startOutline[k] === DUMMY_POSITION) {\n\t\t\t\t\t\tstartOutline[k] = pos1;\n\t\t\t\t\t}\n\t\t\t\t\tstartOutline[k] = Math.min(startOutline[k], pos1);\n\t\t\t\t\tendOutline[k] = Math.max(endOutline[k], pos1 + size1 + margin);\n\t\t\t\t}\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t} as any;\n\t\t\t}\n\t\t\tend = Math.max(...endOutline);\n\t\t\t// check dist once\n\t\t\tif (i !== 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// find & fill empty block\n\t\t\tif (!frameFill) {\n\t\t\t\tdist = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdist = end;\n\n\t\t\tfor (let j = 0; j < shapesSize; ++j) {\n\t\t\t\tif (startOutline[j] === DUMMY_POSITION) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// the dist between frame's end outline and next frame's start outline\n\t\t\t\t// expect that next frame's start outline is startOutline[j] + end\n\t\t\t\tdist = Math.min(startOutline[j] + end - endOutline[j], dist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tif (startOutline[i] !== DUMMY_POSITION) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstartOutline[i] = Math.max(...startOutline);\n\t\t\tendOutline[i] = startOutline[i];\n\t\t}\n\t\t// The target outline is start outline when type is appending\n\t\tconst targetOutline = isAppend ? startOutline : endOutline;\n\t\tconst prevOutlineEnd = outline.length === 0 ? 0 : Math[isAppend ? \"max\" : \"min\"](...outline);\n\t\tlet prevOutlineDist = isAppend ? 0 : end;\n\n\t\tif (frameFill && outline.length === shapesSize) {\n\t\t\tprevOutlineDist = -DUMMY_POSITION;\n\t\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\t\tif (startOutline[i] === endOutline[i]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// if appending type is prepend(false), subtract dist from appending group's height.\n\n\t\t\t\tprevOutlineDist = Math.min(targetOutline[i] + prevOutlineEnd - outline[i], prevOutlineDist);\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < shapesSize; ++i) {\n\t\t\tstartOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t\tendOutline[i] += prevOutlineEnd - prevOutlineDist;\n\t\t}\n\t\titems.forEach(item => {\n\t\t\titem.rect[pos1Name] += prevOutlineEnd - prevOutlineDist;\n\t\t});\n\t\treturn {\n\t\t\tstart: startOutline.map(point => parseInt(point, 10)),\n\t\t\tend: endOutline.map(point => parseInt(point, 10)),\n\t\t};\n\t}\n\tprivate _insert(items: IInfiniteGridItem[] = [], outline: number[] = [], isAppend?: boolean, cache?: boolean) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, isAppend),\n\t\t};\n\t}\n}\n\nexport default FrameLayout;\n","import FrameLayout, { IFrameLayoutInterface, IFrameShape } from \"./FrameLayout\";\nimport { fill } from \"../utils\";\nimport { IInfiniteGridItem } from \"../types\";\n\nfunction makeShapeOutline(\n\toutline: number[],\n\titemSize: number,\n\tcolumnLength: number,\n\tisAppend?: boolean,\n) {\n\tconst point = Math[isAppend ? \"min\" : \"max\"](...outline) || 0;\n\n\tif (outline.length !== columnLength) {\n\t\treturn fill(new Array(columnLength), 0);\n\t}\n\treturn outline.map(l => Math.floor((l - point) / itemSize));\n}\nfunction getColumn(item: IInfiniteGridItem) {\n\tif (item.column) {\n\t\treturn item.column;\n\t}\n\tlet column = 1;\n\n\tif (item.el) {\n\t\tcolumn = parseInt(item.el.getAttribute(\"data-column\")!, 10) || 1;\n\t}\n\titem.column = column;\n\treturn column;\n}\nexport interface ISquareLayoutOptions extends IFrameLayoutInterface {\n\tcolumn: number;\n}\n/**\n * @classdesc SquareLayout is a layout that places all cards like squares on a checkerboard, and important cards are n times larger. The main card can be enlarged, and then a small card can be placed to naturally show the relationship of the card.\n * @ko SquareLayoutì€ ë°”ë‘‘íŒì²˜ëŸ¼ ëª¨ë“ ì¹´ë“œë¥¼ ì •ì‚¬ê°í˜•ìœ¼ë¡œ ë°°ì¹˜í•˜ê³ ì¤‘ìš”í•œ 카드는 í¬ê¸°ë¥¼ Në°°ë¡œ 키워서 보여주는 ë ˆì´ì•„웃ì´ë‹¤. 주요 카드를 í¬ê²Œ í‘œì‹œí•˜ê³ , ê·¸ 다ìŒì— ìž‘ì€ ì¹´ë“œë¥¼ 배치해 ìžì—°ìŠ¤ëŸ½ê²Œ ì¹´ë“œì˜ ê´€ê³„ë¥¼ 나타낼 수 있습니다.\n * @class eg.InfiniteGrid.SquareLayout\n * @extends eg.InfiniteGrid.FrameLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.SquareLayout module <ko>eg.InfiniteGrid.SquareLayout ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>ì•„ì´í…œë“¤ 사ì´ì˜ 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.itemSize=0] The size of the items. If it is 0, it is calculated as the size of the first item in items. (priority: `column` > `itemSize` > element's size)<ko> ì•„ì´í…œì˜ 사ì´ì¦ˆ. 만약 ì•„ì´í…œ 사ì´ì¦ˆê°€ 0ì´ë©´, ì•„ì´í…œë“¤ì˜ 첫번째 ì•„ì´í…œì˜ 사ì´ì¦ˆë¡œ ê³„ì‚°ì´ ëœë‹¤. (ìš°ì„ ìˆœìœ„: `column` > `itemSize` > ì—˜ë¦¬ë¨¼íŠ¸ì˜ ì‚¬ì´ì¦ˆ) </ko>\n * @param {Boolean} [options.column=0] The number of columns in the layout. If it is 0, the column is returned by `itemSize`. (priority: `column` > `itemSize` > element's size)<ko> ë ˆì´ì•„ì›ƒì˜ ì—´ì˜ ê°œìˆ˜. 만약 columnì´ 0ì´ë©´, `itemSize`ë¡œ ì—´ì„ êµ¬í•©ë‹ˆë‹¤. (ìš°ì„ ìˆœìœ„: `column` > `itemSize` > ì—˜ë¦¬ë¨¼íŠ¸ì˜ ì‚¬ì´ì¦ˆ) </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\"#grid\". {\n\thorizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.SquareLayout, {\n\tmargin: 10,\n\titemSize: 200,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.SquareLayout({\n\tmargin: 10,\n\titemSize: 200,\n\thorizontal: true,\n});\n\nvar item1 = '<div data-column=\"2\"></div>';\nvar item2 = \"<div></div>\"\nlayout.append([item1, item2]);\n</script>\n```\n **/\nexport default class SquareLayout extends FrameLayout {\n\tpublic options: ISquareLayoutOptions;\n\n\tconstructor(options: Partial<ISquareLayoutOptions> = {}) {\n\t\tsuper(options);\n\t}\n\tprotected _layout(\n\t\titems: IInfiniteGridItem[],\n\t\toutline: number[] = [],\n\t\tisAppend: boolean = false,\n\t) {\n\t\tconst itemSize = this._getSquareSize(items[0]) as number;\n\t\tconst margin = this.options.margin;\n\t\tconst columnLength = this.options.column ||\n\t\t\tMath.floor((this._size + margin) / (itemSize + margin)) || 1;\n\t\tconst length = items.length;\n\t\tconst endOutline = makeShapeOutline(outline, Math.floor(itemSize), columnLength, isAppend);\n\t\tconst pointCaculateName = isAppend ? \"min\" : \"max\";\n\t\tconst shapes: IFrameShape[] = [];\n\t\tconst sign = isAppend ? 1 : -1;\n\t\tconst style = this._style;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst pos2Name = style.startPos2;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst point = Math[pointCaculateName](...endOutline);\n\t\t\tlet index = endOutline[isAppend ? \"indexOf\" : \"lastIndexOf\"](point);\n\t\t\tconst item = items[i];\n\t\t\tconst columnWidth = item.columnWidth;\n\t\t\tconst column = (columnWidth && columnWidth[0] === columnLength &&\n\t\t\t\tcolumnWidth[1]) || getColumn(item);\n\t\t\tlet columnCount = 1;\n\n\t\t\tif (column > 1) {\n\t\t\t\tfor (let j = 1; j < column &&\n\t\t\t\t\t((isAppend && index + j < columnLength) || (!isAppend && index - j >= 0)); ++j) {\n\t\t\t\t\tif ((isAppend && endOutline[index + sign * j] <= point) ||\n\t\t\t\t\t\t(!isAppend && endOutline[index + sign * j] >= point)) {\n\t\t\t\t\t\t++columnCount;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!isAppend) {\n\t\t\t\t\tindex -= columnCount - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.columnWidth = [columnLength, columnCount];\n\t\t\tshapes.push({\n\t\t\t\twidth: columnCount,\n\t\t\t\theight: columnCount,\n\t\t\t\t[pos1Name]: point - (!isAppend ? columnCount : 0),\n\t\t\t\t[pos2Name]: index,\n\t\t\t\ttype: i + 1,\n\t\t\t\tindex: i,\n\t\t\t});\n\t\t\tfor (let j = 0; j < columnCount; ++j) {\n\t\t\t\tendOutline[index + j] = point + sign * columnCount;\n\t\t\t}\n\t\t}\n\t\tthis._shapes = {\n\t\t\tshapes,\n\t\t\t[style.size2]: columnLength,\n\t\t};\n\n\t\tconst result = super._layout(items, outline, isAppend);\n\n\t\tif (!isAppend) {\n\t\t\tshapes.sort((shape1, shape2) => {\n\t\t\t\tconst item1pos1 = shape1[pos1Name]!;\n\t\t\t\tconst item1pos2 = shape1[pos2Name]!;\n\t\t\t\tconst item2pos1 = shape2[pos1Name]!;\n\t\t\t\tconst item2pos2 = shape2[pos2Name]!;\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t\titems.sort((a, b) => {\n\t\t\t\tconst item1pos1 = a.rect[pos1Name];\n\t\t\t\tconst item1pos2 = a.rect[pos2Name];\n\t\t\t\tconst item2pos1 = b.rect[pos1Name];\n\t\t\t\tconst item2pos2 = b.rect[pos2Name];\n\n\t\t\t\tif (item1pos1 - item2pos1) {\n\t\t\t\t\treturn item1pos1 - item2pos1;\n\t\t\t\t}\n\t\t\t\treturn item1pos2 - item2pos2;\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\tprivate _getSquareSize(item: IInfiniteGridItem) {\n\t\tconst { column, margin, itemSize } = this.options;\n\n\t\tif (column) {\n\t\t\t// if column is in options, caculate itemSize from column.\n\t\t\tthis._itemSize = (this._size + margin) / column - margin;\n\t\t} else if (itemSize) {\n\t\t\tthis._itemSize = this.options.itemSize;\n\t\t} else {\n\t\t\tconst sizeName = this._style.size2;\n\t\t\t// if frameSize is 0, caculate frameSize from item.size.\n\t\t\tconst frameSize\n\t\t\t\t= this._shapes[sizeName]\n\t\t\t\t|| Math.floor((this._size + margin) / (item.size![sizeName]! + margin) / getColumn(item));\n\t\t\tthis._itemSize = (this._size + margin) / frameSize - margin;\n\t\t}\n\t\treturn this._itemSize;\n\t}\n}\n","import { assign } from \"../../utils\";\n\nexport interface IBoxModel {\n\toriginWidth: number;\n\toriginHeight: number;\n\twidth: number;\n\theight: number;\n\tleft: number;\n\ttop: number;\n\titems: BoxModel[];\n}\n\nexport default class BoxModel implements IBoxModel {\n\tpublic originWidth: number;\n\tpublic originHeight: number;\n\tpublic width: number;\n\tpublic height: number;\n\tpublic left: number;\n\tpublic top: number;\n\tpublic items: BoxModel[];\n\tconstructor(options: Partial<IBoxModel>) {\n\t\tassign(this, {\n\t\t\toriginWidth: 0,\n\t\t\toriginHeight: 0,\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0,\n\t\t\titems: [],\n\t\t}, options);\n\t}\n\tpublic scaleTo(width: number, height: number) {\n\t\tconst scaleX = this.width ? width / this.width : 0;\n\t\tconst scaleY = this.height ? height / this.height : 0;\n\n\t\tthis.items.forEach(v => {\n\t\t\tif (scaleX !== 0) {\n\t\t\t\tv.left *= scaleX;\n\t\t\t\tv.width *= scaleX;\n\t\t\t}\n\t\t\tif (scaleY !== 0) {\n\t\t\t\tv.top *= scaleY;\n\t\t\t\tv.height *= scaleY;\n\t\t\t}\n\t\t});\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\tpublic push(item: BoxModel) {\n\t\tthis.items.push(item);\n\t}\n\tpublic getOriginSize() {\n\t\treturn this.originWidth * this.originHeight;\n\t}\n\tpublic getSize() {\n\t\treturn this.width * this.height;\n\t}\n\tpublic getOriginRatio() {\n\t\treturn (this.originHeight === 0) ? 0 : this.originWidth / this.originHeight;\n\t}\n\tpublic getRatio() {\n\t\treturn (this.height === 0) ? 0 : this.width / this.height;\n\t}\n}\n","import BoxModel from \"./lib/BoxModel\";\nimport { getStyleNames, assignOptions, toZeroArray, cloneItems } from \"../utils\";\nimport { ILayout, IRectlProperties, ISize, IInfiniteGridItem, IInfiniteGridGroup } from \"../types\";\n\nfunction getCost(originLength: number, length: number) {\n\tlet cost = originLength / length;\n\n\tif (cost < 1) {\n\t\tcost = 1 / cost;\n\t}\n\n\treturn cost - 1;\n}\nfunction fitArea(\n\titem: BoxModel,\n\tbestFitArea: BoxModel,\n\titemFitSize: ISize,\n\tcontainerFitSize: ISize,\n\tlayoutVertical: boolean,\n) {\n\titem.height = itemFitSize.height;\n\titem.width = itemFitSize.width;\n\tbestFitArea.height = containerFitSize.height;\n\tbestFitArea.width = containerFitSize.width;\n\n\tif (layoutVertical) {\n\t\titem.top = bestFitArea.top + bestFitArea.height;\n\t\titem.left = bestFitArea.left;\n\t} else {\n\t\titem.left = bestFitArea.left + bestFitArea.width;\n\t\titem.top = bestFitArea.top;\n\t}\n}\n\n/**\n * @classdesc The PackingLayout is a layout that shows the important cards bigger without sacrificing the weight of the cards. Rows and columns are separated so that cards are dynamically placed within the horizontal and vertical space rather than arranged in an orderly fashion.\n * @ko PackingLayoutì€ ì¹´ë“œì˜ ë³¸ëž˜ í¬ê¸°ì— 따른 ë¹„ì¤‘ì„ í•´ì¹˜ì§€ 않으면서 중요한 카드는 ë” í¬ê²Œ ë³´ì—¬ 주는 ë ˆì´ì•„웃ì´ë‹¤. 행과 ì—´ì´ êµ¬ë¶„ë¼ ì´ë¯¸ì§€ë¥¼ ì •ëˆë˜ê²Œ 배치하는 ëŒ€ì‹ ê°€ë¡œì„¸ë¡œ ì¼ì • 공간 ë‚´ì—ì„œ ë™ì 으로 카드를 배치한다.\n * @class eg.InfiniteGrid.PackingLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.PackingLayout module <ko>eg.InfiniteGrid.PackingLayout ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>ì•„ì´í…œë“¤ 사ì´ì˜ 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (false: 세로방향, true: 가로방향)</ko>\n * @param {Boolean} [options.aspectRatio=1] The aspect ratio of the group <ko> ê·¸ë£¹ì˜ ê°€ë¡œ 세로 비 </ko>\n * @param {Boolean} [options.sizeWeight=1] The size weight when placing an image <ko> ì´ë¯¸ì§€ë¥¼ ë°°ì¹˜í• ë•Œ 사ì´ì¦ˆ 가중치 </ko>\n * @param {Boolean} [options.ratioWeight=1] The ratio weight when placing an image <ko> ì´ë¯¸ì§€ë¥¼ ë°°ì¹˜í• ë•Œ 비율 가중치 </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\"#grid\". {\n horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.PackingLayout, {\n margin: 10,\n aspectRatio: 1,\n sizeWeight: 1,\n ratioWeight: 2,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.PackingLayout({\n horizontal: true,\n margin: 10,\n aspectRatio: 1,\n sizeWeight: 1,\n ratioWeight: 2,\n});\n\n</script>\n```\n **/\nclass PackingLayout implements ILayout {\n\tpublic options: {\n\t\thorizontal: boolean,\n\t\tmargin: number,\n\t\taspectRatio: number,\n\t\tsizeWeight: number,\n\t\tratioWeight: number,\n\t};\n\tprivate _size: number;\n\tprivate _style: IRectlProperties;\n\tconstructor(options: Partial<PackingLayout[\"options\"]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\taspectRatio: 1,\n\t\t\tsizeWeight: 1,\n\t\t\tratioWeight: 1,\n\t\t}, options);\n\t\tthis._size = 0;\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.PackingLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, true, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko ì•„ì´í…œì„ 아웃ë¼ì¸ ìœ„ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.PackingLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, false, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko ê·¸ë£¹ë“¤ì˜ ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.PackingLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>ë ˆì´ì•„ì›ƒí• ê·¸ë£¹ë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {eg.InfiniteGrid.PackingLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.layout(groups, [100, 200, 300, 400]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\t\t\tconst outlines = this._layout(group.items, point, true);\n\n\t\t\tgroup.outlines = outlines;\n\t\t\tpoint = outlines.end;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko ë ˆì´ì•„ì›ƒì˜ ê°€ì‹œ 사ì´ì¦ˆë¥¼ ì„¤ì •í•œë‹¤.\n\t * @method eg.InfiniteGrid.PackingLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>ë ˆì´ì•„ì›ƒì— ì•„ì´í…œì„ 추가하는 컨테ì´ë„ˆ ì˜ì—ì˜ ê°€ì‹œ 사ì´ì¦ˆ</ko>\n\t * @return {eg.InfiniteGrid.PackingLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\tprivate _findBestFitArea(container: BoxModel, item: BoxModel) {\n\t\tif (container.getRatio() === 0) { // ì•„ì´í…œ 최초 삽입시 ì „ì²´ì˜ì— ì§€ì •\n\t\t\tcontainer.originWidth = item.width;\n\t\t\tcontainer.originHeight = item.height;\n\t\t\tcontainer.width = item.width;\n\t\t\tcontainer.height = item.height;\n\t\t\treturn;\n\t\t}\n\n\t\tlet bestFitArea!: BoxModel;\n\t\tlet minCost = 10000000;\n\t\tlet layoutVertical = false;\n\t\tconst itemFitSize: ISize = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\t\tconst containerFitSize: ISize = {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t};\n\t\tconst { sizeWeight, ratioWeight } = this.options;\n\n\t\tcontainer.items.forEach(v => {\n\t\t\tconst containerSizeCost = getCost(v.getOriginSize(), v.getSize()) * sizeWeight;\n\t\t\tconst containerRatioCost = getCost(v.getOriginRatio(), v.getRatio()) * ratioWeight;\n\t\t\tconst width = v.width;\n\t\t\tconst height = v.height;\n\t\t\tlet cost;\n\n\t\t\tfor (let i = 0; i < 2; ++i) {\n\t\t\t\tlet itemWidth;\n\t\t\t\tlet itemHeight;\n\t\t\t\tlet containerWidth;\n\t\t\t\tlet containerHeight;\n\n\t\t\t\tif (i === 0) {\n\t\t\t\t\t// ìƒí•˜ì— ì•„ì´í…œ 추가\n\t\t\t\t\titemWidth = width;\n\t\t\t\t\titemHeight = height * (item.height / (v.originHeight + item.height));\n\t\t\t\t\tcontainerWidth = width;\n\t\t\t\t\tcontainerHeight = height - itemHeight;\n\t\t\t\t} else {\n\t\t\t\t\t// ì¢Œìš°ì— ì•„ì´í…œ 추가\n\t\t\t\t\titemHeight = height;\n\t\t\t\t\titemWidth = width * (item.width / (v.originWidth + item.width));\n\t\t\t\t\tcontainerHeight = height;\n\t\t\t\t\tcontainerWidth = width - itemWidth;\n\t\t\t\t}\n\n\t\t\t\tconst itemSize = itemWidth * itemHeight;\n\t\t\t\tconst itemRatio = itemWidth / itemHeight;\n\t\t\t\tconst containerSize = containerWidth * containerHeight;\n\t\t\t\tconst containerRatio = containerHeight / containerHeight;\n\n\t\t\t\tcost = getCost(item.getSize(), itemSize) * sizeWeight;\n\t\t\t\tcost += getCost(item.getRatio(), itemRatio) * ratioWeight;\n\t\t\t\tcost += getCost(v.getOriginSize(), containerSize) * sizeWeight - containerSizeCost;\n\t\t\t\tcost += getCost(v.getOriginRatio(), containerRatio) * ratioWeight - containerRatioCost;\n\n\t\t\t\tif (cost === Math.min(cost, minCost)) {\n\t\t\t\t\tminCost = cost;\n\t\t\t\t\tbestFitArea = v;\n\t\t\t\t\tlayoutVertical = (i === 0);\n\t\t\t\t\titemFitSize.width = itemWidth;\n\t\t\t\t\titemFitSize.height = itemHeight;\n\t\t\t\t\tcontainerFitSize.width = containerWidth;\n\t\t\t\t\tcontainerFitSize.height = containerHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tfitArea(item, bestFitArea, itemFitSize, containerFitSize, layoutVertical);\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[] = [], isAppend?: boolean) {\n\t\tconst style = this._style;\n\t\tconst { horizontal, aspectRatio, margin } = this.options;\n\t\tconst pos1Name = style.startPos1;\n\t\tconst containerWidth = this._size * (horizontal ? aspectRatio : 1);\n\t\tconst containerHeight = this._size / (horizontal ? 1 : aspectRatio);\n\t\tconst containerSize1 = horizontal ? containerWidth : containerHeight;\n\t\tconst prevOutline = toZeroArray(outline);\n\t\tconst start = isAppend ? Math.max(...prevOutline) :\n\t\t\tMath.min(...prevOutline) - containerSize1 - margin;\n\t\tconst end = start + containerSize1 + margin;\n\t\tconst container = new BoxModel({});\n\n\t\titems.forEach(item => {\n\t\t\tconst { width, height } = item.orgSize!;\n\t\t\tconst model = new BoxModel({\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\toriginWidth: width,\n\t\t\t\toriginHeight: height,\n\t\t\t});\n\n\t\t\tthis._findBestFitArea(container, model);\n\t\t\tcontainer.push(model);\n\t\t\tcontainer.scaleTo(containerWidth + margin, containerHeight + margin);\n\t\t});\n\t\titems.forEach((item, i) => {\n\t\t\tconst boxItem = container.items[i];\n\t\t\tconst width = boxItem.width;\n\t\t\tconst height = boxItem.height;\n\t\t\tconst top = boxItem.top;\n\t\t\tconst left = boxItem.left;\n\n\t\t\titem.rect = { top, left, width: width - margin, height: height - margin };\n\t\t\titem.rect[pos1Name] += start;\n\t\t});\n\n\t\treturn {\n\t\t\tstart: [start],\n\t\t\tend: [end],\n\t\t};\n\t}\n\tprivate _insert(items: IInfiniteGridItem[] = [], outline: number[] = [], isAppend?: boolean, cache?: boolean) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, isAppend),\n\t\t};\n\t}\n}\n\nexport default PackingLayout;\n","/* eslint-disable */\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin <self@wyattbaldwin.com>\n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nfunction single_source_shortest_paths(\n\tgraph: (x: string) => ({ [key: string]: number }),\n\ts: string,\n\td: string,\n) {\n\t// Predecessor map for each node that has been encountered.\n\t// node ID => predecessor node ID\n\tconst predecessors: { [key: string]: string } = {};\n\t// Costs of shortest paths from s to all nodes encountered.\n\t// node ID => cost\n\tconst costs: { [key: string]: number } = {};\n\tcosts[s] = 0;\n\n\t// Costs of shortest paths from s to all nodes encountered; differs from\n\t// `costs` in that it provides easy access to the node that currently has\n\t// the known shortest path from s.\n\t// XXX: Do we actually need both `costs` and `open`?\n\tconst open = new BinaryHeap<{ value: string, cost: number }>(x => x.cost);\n\topen.push({ value: s, cost: 0 });\n\n\tlet closest;\n\tlet u;\n\tlet cost_of_s_to_u;\n\tlet adjacent_nodes;\n\tlet cost_of_e;\n\tlet cost_of_s_to_u_plus_cost_of_e;\n\tlet cost_of_s_to_v;\n\tlet first_visit: boolean;\n\n\twhile (open.size()) {\n\t\t// In the nodes remaining in graph that have a known cost from s,\n\t\t// find the node, u, that currently has the shortest path from s.\n\t\tclosest = open.pop();\n\t\tu = closest.value;\n\t\tcost_of_s_to_u = closest.cost;\n\n\t\t// Get nodes adjacent to u...\n\t\tadjacent_nodes = graph(u) || {};\n\n\t\t// ...and explore the edges that connect u to those nodes, updating\n\t\t// the cost of the shortest paths to any or all of those nodes as\n\t\t// necessary. v is the node across the current edge from u.\n\t\tfor (const v in adjacent_nodes) {\n\t\t\t// Get the cost of the edge running from u to v.\n\t\t\tcost_of_e = adjacent_nodes[v];\n\n\t\t\t// Cost of s to u plus the cost of u to v across e--this is *a*\n\t\t\t// cost from s to v that may or may not be less than the current\n\t\t\t// known cost to v.\n\t\t\tcost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n\t\t\t// If we haven't visited v yet OR if the current known cost from s to\n\t\t\t// v is greater than the new cost we just found (cost of s to u plus\n\t\t\t// cost of u to v across e), update v's cost in the cost list and\n\t\t\t// update v's predecessor in the predecessor list (it's now u).\n\t\t\tcost_of_s_to_v = costs[v];\n\t\t\tfirst_visit = (typeof costs[v] === \"undefined\");\n\t\t\tif (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n\t\t\t\tcosts[v] = cost_of_s_to_u_plus_cost_of_e;\n\t\t\t\topen.push({ value: v, cost: cost_of_s_to_u_plus_cost_of_e });\n\t\t\t\tpredecessors[v] = u;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof costs[d] === \"undefined\") {\n\t\tconst msg = [\"Could not find a path from \", s, \" to \", d, \".\"].join(\"\");\n\t\tthrow new Error(msg);\n\t}\n\n\treturn predecessors;\n}\nfunction extract_shortest_path_from_predecessor_list(\n\tpredecessors: { [key: string]: string },\n\td: string,\n) {\n\tconst nodes: string[] = [];\n\tlet u = d;\n\n\twhile (u) {\n\t\tnodes.push(u);\n\t\tu = predecessors[u];\n\t}\n\tnodes.reverse();\n\treturn nodes;\n}\nfunction find_path(\n\tgraph: (x: string) => ({ [key: string]: number }),\n\ts: string,\n\td: string,\n) {\n\tconst predecessors = single_source_shortest_paths(graph, s, d);\n\n\treturn extract_shortest_path_from_predecessor_list(predecessors, d);\n}\n\nclass BinaryHeap<T> {\n\tprivate content: T[];\n\tprivate scoreFunction: (x: T) => number;\n\n\tconstructor(scoreFunction: (x: T) => number) {\n\t\tthis.content = [];\n\t\tthis.scoreFunction = scoreFunction;\n\t}\n\tpublic push(element: T) {\n\t\t// Add the new element to the end of the array.\n\t\tthis.content.push(element);\n\t\t// Allow it to bubble up.\n\t\tthis.bubbleUp(this.content.length - 1);\n\t}\n\tpublic pop() {\n\t\t// Store the first element so we can return it later.\n\t\tconst result = this.content[0];\n\t\t// Get the element at the end of the array.\n\t\tconst end = this.content.pop()!;\n\t\t// If there are any elements left, put the end element at the\n\t\t// start, and let it sink down.\n\t\tif (this.content.length > 0) {\n\t\t\tthis.content[0] = end;\n\t\t\tthis.sinkDown(0);\n\t\t}\n\t\treturn result;\n\t}\n\tpublic size() {\n\t\treturn this.content.length;\n\t}\n\tpublic bubbleUp(_n: number) {\n\t\tlet n = _n;\n\t\t// Fetch the element that has to be moved.\n\t\tconst element = this.content[n];\n\t\t// When at 0, an element can not go up any further.\n\t\twhile (n > 0) {\n\t\t\t// Compute the parent element's index, and fetch it.\n\t\t\tconst parentN = Math.floor((n + 1) / 2) - 1;\n\t\t\tconst parent = this.content[parentN];\n\n\t\t\t// Swap the elements if the parent is greater.\n\t\t\tif (this.scoreFunction(element) < this.scoreFunction(parent)) {\n\t\t\t\tthis.content[parentN] = element;\n\t\t\t\tthis.content[n] = parent;\n\t\t\t\t// Update 'n' to continue at the new position.\n\t\t\t\tn = parentN;\n\t\t\t} else {\n\t\t\t\t// Found a parent that is less, no need to move it further.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tpublic sinkDown(n: number) {\n\t\t// Look up the target element and its score.\n\t\tconst length = this.content.length;\n\t\tconst element = this.content[n];\n\t\tconst elemScore = this.scoreFunction(element);\n\t\tlet child1Score;\n\n\t\twhile (true) {\n\t\t\t// Compute the indices of the child elements.\n\t\t\tconst child2N = (n + 1) * 2;\n\t\t\tconst child1N = child2N - 1;\n\t\t\t// This is used to store the new position of the element,\n\t\t\t// if any.\n\t\t\tlet swap: number | null = null;\n\t\t\t// If the first child exists (is inside the array)...\n\t\t\tif (child1N < length) {\n\t\t\t\t// Look it up and compute its score.\n\t\t\t\tconst child1 = this.content[child1N];\n\t\t\t\tchild1Score = this.scoreFunction(child1);\n\t\t\t\t// If the score is less than our element's, we need to swap.\n\t\t\t\tif (child1Score < elemScore) {\n\t\t\t\t\tswap = child1N;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Do the same checks for the other child.\n\t\t\tif (child2N < length) {\n\t\t\t\tconst child2 = this.content[child2N];\n\t\t\t\tconst child2Score = this.scoreFunction(child2);\n\n\t\t\t\tif (child2Score < (swap == null ? elemScore : child1Score)) {\n\t\t\t\t\tswap = child2N;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the element needs to be moved, swap it, and continue.\n\t\t\tif (swap !== null) {\n\t\t\t\tthis.content[n] = this.content[swap];\n\t\t\t\tthis.content[swap] = element;\n\t\t\t\tn = swap;\n\t\t\t} else {\n\t\t\t\t// Otherwise, we are done.\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport { find_path };\n","import { find_path } from \"./lib/dijkstra\";\nimport { getStyleNames, assignOptions, cloneItems } from \"../utils\";\nimport { ILayout, IRectlProperties, SizeType, IInfiniteGridItem, IInfiniteGridGroup } from \"../types\";\n\n/**\n * @classdesc 'justified' is a printing term with the meaning that 'it fits in one row wide'. JustifiedLayout is a layout that the card is filled up on the basis of a line given a size.\n * @ko 'justified'는 '1í–‰ì˜ ë„ˆë¹„ì— ë§žê²Œ ê¼ ë“¤ì–´ì°¬'ì´ë¼ëŠ” ì˜ë¯¸ë¥¼ 가진 ì¸ì‡„ 용어다. ìš©ì–´ì˜ ì˜ë¯¸ëŒ€ë¡œ 너비가 주어진 사ì´ì¦ˆë¥¼ 기준으로 카드가 ê°€ë“ ì°¨ë„ë¡ ë°°ì¹˜í•˜ëŠ” ë ˆì´ì•„웃ì´ë‹¤.\n * @class eg.InfiniteGrid.JustifiedLayout\n * @param {Object} [options] The option object of eg.InfiniteGrid.JustifiedLayout module <ko>eg.InfiniteGrid.JustifiedLayout ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n * @param {String} [options.margin=0] Margin used to create space around items <ko>ì•„ì´í…œë“¤ 사ì´ì˜ 공간</ko>\n * @param {Boolean} [options.horizontal=false] Direction of the scroll movement (false: vertical, true: horizontal) <ko>스í¬ë¡¤ ì´ë™ ë°©í–¥ (false: 세로방향, true: 가로방향)</ko>\n * @param {Number} [options.minSize=0] Minimum size of item to be resized <ko> ì•„ì´í…œì´ ì¡°ì •ë˜ëŠ” 최소 í¬ê¸° </ko>\n * @param {Number} [options.maxSize=0] Maximum size of item to be resized <ko> ì•„ì´í…œì´ ì¡°ì •ë˜ëŠ” 최대 í¬ê¸° </ko>\n * @param {Array|Number} [options.column=[1, 8]] The number of items in a line <ko> í•œ ì¤„ì— ë“¤ì–´ê°€ëŠ” ì•„ì´í…œì˜ 개수 </ko>\n * @example\n```\n<script>\nvar ig = new eg.InfiniteGrid(\"#grid\". {\n horizontal: true,\n});\n\nig.setLayout(eg.InfiniteGrid.JustifiedLayout, {\n margin: 10,\n minSize: 100,\n maxSize: 300,\n});\n\n// or\n\nvar layout = new eg.InfiniteGrid.JustifiedLayout({\n margin: 10,\n minSize: 100,\n maxSize: 300,\n column: 5,\n horizontal: true,\n});\n\n</script>\n```\n **/\nclass JustifiedLayout implements ILayout {\n\tpublic options: {\n\t\tmargin: number;\n\t\tminSize: number;\n\t\tmaxSize: number;\n\t\tcolumn: number | number[];\n\t\thorizontal: boolean;\n\t};\n\tprivate _style: IRectlProperties;\n\tprivate _size: number;\n\n\tconstructor(options: Partial<JustifiedLayout[\"options\"]> = {}) {\n\t\tthis.options = assignOptions({\n\t\t\tmargin: 0,\n\t\t\thorizontal: false,\n\t\t\tminSize: 0,\n\t\t\tmaxSize: 0,\n\t\t\tcolumn: [1, 8],\n\t\t}, options);\n\n\t\tthis._style = getStyleNames(this.options.horizontal);\n\t\tthis._size = 0;\n\t}\n\t/**\n\t * Set the viewport size of the layout.\n\t * @ko ë ˆì´ì•„ì›ƒì˜ ê°€ì‹œ 사ì´ì¦ˆë¥¼ ì„¤ì •í•œë‹¤.\n\t * @method eg.InfiniteGrid.JustifiedLayout#setSize\n\t * @param {Number} size The viewport size of container area where items are added to a layout <ko>ë ˆì´ì•„ì›ƒì— ì•„ì´í…œì„ 추가하는 컨테ì´ë„ˆ ì˜ì—ì˜ ê°€ì‹œ 사ì´ì¦ˆ</ko>\n\t * @return {eg.InfiniteGrid.JustifiedLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.setSize(800);\n\t */\n\tpublic setSize(size: number) {\n\t\tthis._size = size;\n\t\treturn this;\n\t}\n\t/**\n\t * Adds items at the bottom of a outline.\n\t * @ko ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.JustifiedLayout#append\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic append(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, true, cache);\n\t}\n\t/**\n\t * Adds items at the top of a outline.\n\t * @ko ì•„ì´í…œì„ 아웃ë¼ì¸ ìœ„ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.JustifiedLayout#prepend\n\t * @param {Array} items Array of items to be layouted <ko>ë ˆì´ì•„ì›ƒí• ì•„ì´í…œë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} [outline=[]] Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {Object} Layouted items and outline of start and end <ko> ë ˆì´ì•„ì›ƒì´ ëœ ì•„ì´í…œê³¼ 시작과 ëì˜ ì•„ì›ƒë¼ì¸ì´ 담긴 ì •ë³´</ko>\n\t * @example\n\t * layout.prepend(items, [100]);\n\t */\n\tpublic prepend(items: IInfiniteGridItem[], outline?: number[], cache?: boolean) {\n\t\treturn this._insert(items, outline, false, cache);\n\t}\n\t/**\n\t * Adds items of groups at the bottom of a outline.\n\t * @ko ê·¸ë£¹ë“¤ì˜ ì•„ì´í…œë“¤ì„ 아웃ë¼ì¸ ì•„ëž˜ì— ì¶”ê°€í•œë‹¤.\n\t * @method eg.InfiniteGrid.JustifiedLayout#layout\n\t * @param {Array} groups Array of groups to be layouted <ko>ë ˆì´ì•„ì›ƒí• ê·¸ë£¹ë“¤ì˜ ë°°ì—´</ko>\n\t * @param {Array} outline Array of outline points to be reference points <ko>기준ì ì´ ë˜ëŠ” 아웃ë¼ì¸ ì ë“¤ì˜ ë°°ì—´</ko>\n\t * @return {eg.InfiniteGrid.JustifiedLayout} An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n\t * @example\n\t * layout.layout(groups, [100]);\n\t */\n\tpublic layout(groups: IInfiniteGridGroup[] = [], outline: number[] = []) {\n\t\tconst length = groups.length;\n\t\tlet point = outline;\n\n\t\tfor (let i = 0; i < length; ++i) {\n\t\t\tconst group = groups[i];\n\t\t\tconst outlines = this._layout(group.items, point, true);\n\n\t\t\tgroup.outlines = outlines;\n\t\t\tpoint = outlines.end;\n\t\t}\n\t\treturn this;\n\t}\n\tprivate _layout(items: IInfiniteGridItem[], outline: number[], isAppend?: boolean) {\n\t\tconst style = this._style;\n\t\tconst size1Name = style.size1;\n\t\tconst size2Name = style.size2;\n\t\tconst startIndex = 0;\n\t\tconst endIndex = items.length;\n\t\tconst column = this.options.column;\n\t\tconst columns: number[] = (typeof column === \"object\") ? column : [column, column];\n\n\t\tconst graph = (_start: string) => {\n\t\t\tconst results: { [key: string]: number } = {};\n\t\t\tconst start = +_start.replace(/[^0-9]/g, \"\");\n\t\t\tconst length = endIndex + 1;\n\n\t\t\tfor (let i = Math.min(start + columns[0], length - 1); i < length; ++i) {\n\t\t\t\tif (i - start > columns[1]) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlet cost = this._getCost(items, start, i, size1Name, size2Name);\n\n\t\t\t\tif (cost === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cost < 0 && i === length - 1) {\n\t\t\t\t\tcost = 0;\n\t\t\t\t}\n\t\t\t\tresults[`${i}`] = Math.pow(cost, 2);\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\t\t// shortest path for items' total height.\n\t\tconst path = find_path(graph, `${startIndex}`, `${endIndex}`);\n\n\t\treturn this._setStyle(items, path, outline, isAppend);\n\t}\n\tprivate _getSize(items: IInfiniteGridItem[], size1Name: SizeType, size2Name: SizeType) {\n\t\tconst margin = this.options.margin;\n\t\tconst size = items.reduce((sum, item) => sum +\n\t\t\t(item.orgSize![size2Name]) / item.orgSize![size1Name], 0);\n\n\t\treturn (this._size - margin * (items.length - 1)) / size;\n\t}\n\tprivate _getCost(\n\t\titems: IInfiniteGridItem[],\n\t\ti: number,\n\t\tj: number,\n\t\tsize1Name: SizeType,\n\t\tsize2Name: SizeType,\n\t) {\n\t\tconst size = this._getSize(items.slice(i, j), size1Name, size2Name);\n\t\tconst min = this.options.minSize || 0;\n\t\tconst max = this.options.maxSize || Infinity;\n\n\t\tif (isFinite(max)) {\n\t\t\t// if this size is not in range, the cost increases sharply.\n\t\t\tif (size < min) {\n\t\t\t\treturn Math.pow(size - min, 2) + Math.pow(max, 2);\n\t\t\t} else if (size > max) {\n\t\t\t\treturn Math.pow(size - max, 2) + Math.pow(max, 2);\n\t\t\t} else {\n\t\t\t\t// if this size in range, the cost is negative or low.\n\t\t\t\treturn Math.min(size - max, min - size);\n\t\t\t}\n\t\t}\n\t\t// if max is infinite type, caculate cost only with \"min\".\n\t\tif (size < min) {\n\t\t\treturn Math.max(Math.pow(min, 2), Math.pow(size, 2));\n\t\t}\n\t\treturn size - min;\n\t}\n\tprivate _setStyle(\n\t\titems: IInfiniteGridItem[],\n\t\tpath: string[],\n\t\toutline: number[] = [],\n\t\tisAppend?: boolean,\n\t) {\n\t\tconst style = this._style;\n\t\t// if direction is vertical\n\t\t// startPos1 : top, endPos1 : bottom\n\t\t// size1 : height\n\t\t// startPos2 : left, endPos2 : right\n\t\t// size2 : width\n\n\t\t// if direction is horizontal\n\t\t// startPos1 : left, endPos1 : right\n\t\t// size1 : width\n\t\t// startPos2 : top, endPos2 : bottom\n\t\t// size2 : height\n\t\tconst pos1Name = style.startPos1;\n\t\tconst size1Name = style.size1;\n\t\tconst pos2Name = style.startPos2;\n\t\tconst size2Name = style.size2;\n\t\tconst length = path.length;\n\t\tconst margin = this.options.margin;\n\t\tconst startPoint = outline[0] || 0;\n\t\tlet endPoint = startPoint;\n\t\tlet height = 0;\n\n\t\tfor (let i = 0; i < length - 1; ++i) {\n\t\t\tconst path1 = parseInt(path[i], 10);\n\t\t\tconst path2 = parseInt(path[i + 1], 10);\n\t\t\t// pathItems(path1 to path2) are in 1 line.\n\t\t\tconst pathItems = items.slice(path1, path2);\n\t\t\tconst pathItemsLength = pathItems.length;\n\t\t\tconst size1 = this._getSize(pathItems, size1Name, size2Name);\n\t\t\tconst pos1 = endPoint;\n\n\t\t\tfor (let j = 0; j < pathItemsLength; ++j) {\n\t\t\t\tconst item = pathItems[j];\n\t\t\t\tconst size2 = item.orgSize![size2Name] / item.orgSize![size1Name] * size1;\n\t\t\t\t// item has margin bottom and right.\n\t\t\t\t// first item has not margin.\n\t\t\t\tconst prevItemRect = j === 0 ? 0 : pathItems[j - 1].rect;\n\t\t\t\tconst pos2 = (prevItemRect ? prevItemRect[pos2Name] + prevItemRect[size2Name]! + margin : 0);\n\n\t\t\t\titem.rect = {\n\t\t\t\t\t[pos1Name]: pos1,\n\t\t\t\t\t[pos2Name]: pos2,\n\t\t\t\t\t[size1Name]: size1,\n\t\t\t\t\t[size2Name]: size2,\n\t\t\t\t} as any;\n\t\t\t}\n\t\t\theight += margin + size1;\n\t\t\tendPoint = startPoint + height;\n\t\t}\n\t\tconst itemsLength = items.length;\n\n\t\tif (isAppend) {\n\t\t\t// previous group's end outline is current group's start outline\n\t\t\treturn {\n\t\t\t\tstart: [startPoint],\n\t\t\t\tend: [endPoint],\n\t\t\t};\n\t\t}\n\t\t// for prepend, only substract height from position.\n\t\t// always start is lower than end.\n\n\t\tfor (let i = 0; i < itemsLength; ++i) {\n\t\t\tconst item = items[i];\n\n\t\t\t// move items as long as height for prepend\n\t\t\titem.rect[pos1Name] -= height;\n\t\t}\n\t\treturn {\n\t\t\tstart: [startPoint - height],\n\t\t\tend: [startPoint], // endPoint - height = startPoint\n\t\t};\n\t}\n\tprivate _insert(items: IInfiniteGridItem[] = [], outline: number[] = [], isAppend?: boolean, cache?: boolean) {\n\t\t// this only needs the size of the item.\n\t\tconst clone = cache ? items : cloneItems(items);\n\n\t\treturn {\n\t\t\titems: clone,\n\t\t\toutlines: this._layout(clone, outline, isAppend),\n\t\t};\n\t}\n}\n\nexport default JustifiedLayout;\n","/**\n * Copyright (c) NAVER Corp.\n * egjs-infinitegrid projects are licensed under the MIT license\n */\nimport InfiniteGrid from \"./InfiniteGrid\";\nimport GridLayout from \"./layouts/GridLayout\";\nimport FrameLayout from \"./layouts/FrameLayout\";\nimport SquareLayout from \"./layouts/SquareLayout\";\nimport PackingLayout from \"./layouts/PackingLayout\";\nimport JustifiedLayout from \"./layouts/JustifiedLayout\";\nimport DOMRenderer from \"./DOMRenderer\";\nimport ItemManager from \"./ItemManager\";\nimport Infinite from \"./Infinite\";\nimport {\n\tCONTAINER_CLASSNAME, IGNORE_CLASSNAME,\n\tDEFAULT_OPTIONS, INFINITEGRID_METHODS,\n\tINFINITEGRID_EVENTS,\n} from \"./consts\";\nimport { categorize, withInfiniteGridMethods } from \"./utils\";\n\n// fix for IE8\n(InfiniteGrid as any).categorize = categorize;\n(InfiniteGrid as any).INFINITEGRID_METHODS = INFINITEGRID_METHODS;\n(InfiniteGrid as any).INFINITEGRID_EVENTS = INFINITEGRID_EVENTS;\n(InfiniteGrid as any).withInfiniteGridMethods = withInfiniteGridMethods;\n(InfiniteGrid as any).CONTAINER_CLASSNAME = CONTAINER_CLASSNAME;\n(InfiniteGrid as any).IGNORE_CLASSNAME = IGNORE_CLASSNAME;\n(InfiniteGrid as any).DEFAULT_OPTIONS = DEFAULT_OPTIONS;\n(InfiniteGrid as any).GridLayout = GridLayout;\n(InfiniteGrid as any).FrameLayout = FrameLayout;\n(InfiniteGrid as any).SquareLayout = SquareLayout;\n(InfiniteGrid as any).PackingLayout = PackingLayout;\n(InfiniteGrid as any).JustifiedLayout = JustifiedLayout;\n(InfiniteGrid as any).ItemManager = ItemManager;\n(InfiniteGrid as any).Infinite = Infinite;\n(InfiniteGrid as any).DOMRenderer = DOMRenderer;\n(InfiniteGrid as any).default = InfiniteGrid;\n\nexport default InfiniteGrid;\n"],"names":["win","window","document","navigator","userAgent","ua","SUPPORT_COMPUTEDSTYLE","SUPPORT_ADDEVENTLISTENER","SUPPORT_PASSIVE","supportsPassiveOption","Object","defineProperty","addEventListener","get","e","IS_IE","test","IS_IOS","IS_ANDROID2","CONTAINER_CLASSNAME","IGNORE_CLASSNAME","TRANSITION_NAME","VERTICAL","HORIZONTAL","DUMMY_POSITION","GROUPKEY_ATT","DEFAULT_OPTIONS","itemSelector","isOverflowScroll","threshold","isEqualSize","isConstantSize","useRecycle","horizontal","transitionDuration","useFit","attributePrefix","renderExternal","DEFAULT_LAYOUT_OPTIONS","margin","agent","toLowerCase","isMobile","ALIGN","START","CENTER","END","JUSTIFY","IDLE","LOADING_APPEND","LOADING_PREPEND","PROCESSING","webkit","exec","WEBKIT_VERSION","parseInt","DEFENSE_BROWSER","ITEM_KEYS","TRANSFORM","TRANSITION","TRANSITION_END","INFINITEGRID_EVENTS","INFINITEGRID_METHODS","getLoadingBar","getItem","getItems","layout","getGroupKeys","getStatus","setStatus","isProcessing","startLoading","endLoading","isLoading","updateItem","updateItems","moveTo","nodes","array","length","i","push","html","match","param","multi","el","matchHTML","dummy","createElement","innerHTML","childNodes","querySelectorAll","toArray","isWindow","isJQuery","$","Array","isArray","map","v","undefined","nodeName","nodeType","slice","call","element","type","handler","eventListenerOptions","options","attachEvent","removeEventListener","detachEvent","callback","removeEvent","addEvent","prop","body","documentElement","x","y","scroll","scrollLeft","scrollTop","scrollBy","getComputedStyle","currentStyle","name","isOffset","isDocument","doc","Math","max","size","clientRect","getBoundingClientRect","right","left","bottom","top","cssSize","getStyles","indexOf","parseFloat","_getSize","width","outerWidth","height","outerHeight","STYLE","vertical","startPos1","endPos1","size1","startPos2","endPos2","size2","isHorizontal","target","_i","sources","forEach","source","key","defaultOptions","assign","outline","items","item","jQuery","constructor","prototype","jquery","arr","value","newItems","newGroups","groupKeys","groupKey","group","orgSize","mounted","content","outerHTML","rect","infinitegridName","keys","args","result","_a","className","classList","contains","RegExp","add","ItemManager","elements","makeItem","data","property","reduce","acc","concat","_groups","_groupKeys","startKey","endKey","datas","startIndex","endIndex","_data","item2","data2","status","clear","_this","insertGroup","base","groups","outlines","start","end","isUndefined","sliceGroups","pluck","index","cursor","targetValue","Infinity","getOutline","getGroup","getEdgeIndex","startCursor","endCursor","getGroups","pos","groupIndex","prevItems","newGroup","splice","insert","categorize","diff","removed","added","maintained","removedIndex","nextGroups","fromIndex","addedIndex","reverse","toIndex","syncItems","newItem","itemIndex","groupItem","groupItems","removeGroup","getAttribute","nextItems","nextIndex","styles","pos1","pos2","removeTransition","selectContainer","querySelector","style","position","container","children","appendChild","properties","p","view","viewport","_init","resize","DOMRenderer","prevRect","setAttribute","render","setTransition","addOnceEvent","itemRect","renderItem","removeElement","parentNode","removeChild","noElementItems","filter","replace","join","cssText","_size","getSize","isAppend","createElements","renderItems","_insert","_calcSize","isResize","innerWidth","innerHeight","_orgStyle","overflowX","overflowY","createContainer","df","createDocumentFragment","insertBefore","firstChild","scrollPos","endScrollPos","min","itemManger","append","prepend","recycle","_itemManager","_status","itemManager","prevVisisbleGroups","prevVisibleItems","sync","startGroup","find","getGroupByKey","endGroup","findLast","nextStartCursor","nextEndCursor","minCursor","maxCursor","nextVisibleItems","visibleDiffResult","itemKey","isForward","_b","visibles","isVisible","lastIndexOf","setCursor","startEdgePos","endEdgePos","startPos","endPos","cache","cachedAppendData","cachedPrependData","isPrepend","getEdgeOutline","remove","_infinite","_renderer","_layout","callbackComponent","checkGroups","replaceTarget","removeTarget","prefix","check","on","_complete","_error","_end","infinite","prevGroup","updateSize","groupOutline","isRelayout","every","groupInfo","getCursor","requestStartCursor","requestEndCursor","isInCursor","tempCursor","trigger","errorIndex","removeItem","hasTarget","src","removeAutoSizer","removeAttribute","replaceItem","totalIndex","removeTargetLength","replaceTargetLength","layoutedItems","prevPos","getScrollPos","orgScrollPos","getOrgScrollPos","setScrollPos","_isScrollIssue","_timer","clearTimeout","setTimeout","_view","_prevPos","applyScrollPos","scrollTo","arrPos","getContainerOffset","_onCheck","_onResize","_containerOffset","_getOffset","reset","tslib_1","_super","_reset","_watcher","Watcher","Infinite","_requestAppend","_requestPrepend","_recycle","_renderManager","RenderManager","LayoutKlass","setLayout","_setSize","getViewportSize","includeCached","getVisibleItems","itemKeys","nextVisisbleItems","_requestGroups","getRenderingItems","isChange","_isProcessing","_postLayout","fromCache","getVisibleData","isTrusted","firstGroup","hasChildren","renderer","isLayoutAll","children_1","getContainerSize","setContainerSize","_relayout","_fit","clearOutlines","_onLayoutComplete","isLayout","removeByIndex","syncElements","watcher","processingStatus","visibleItems","createAndInsert","isReLayout","isNeededResize","_appendLoadingBar","userLoadingBar","loadingBarObj","loadingSize","loadingStyle","loadingBar","_loadingBar","isChangeLoadingBar","loadingElement","hasClass","addClass","_renderLoading","_getLoadingStatus","userStyle","display","_process","next","_setContainerSize","_getEdgeValue","_fitItems","_updateItem","fit","_scrollTo","_setScrollPos","_postCache","destroy","layoutGroups","getMaxEdgeValue","setSize","getViewSize","getEdgeValue","isAdd","toItems","_insertItems","_c","ranges","isRecycle","some","removeItems","posName","resetSize","Component","_setCursor","layoutItems","scroller","pop","shift","_d","_e","viewSize","isScroll","InfiniteGrid","assignOptions","align","itemSize","_columnSize","_columnLength","_style","getStyleNames","firstItem","checkColumn","startOutline","fill","sizeName","columnSize","floor","size1Name","size2Name","pos1Name","pos2Name","columnLength","viewDist","pointCaculateName","indexCaculateName","endOutline","point","column","sort","a","b","item1pos1","item1pos2","item2pos1","item2pos2","clone","cloneItems","frame","j","disableFrame","shapes","searchShapeInFrame","frameFill","row","_itemSize","_shapes","getShapes","_checkItemSize","_getItemSize","isItemObject","itemSize2","itemSize1","shapesSize","shapesLength","dist","shape","shapePos1","shapePos2","shapeSize1","shapeSize2","k","targetOutline","prevOutlineEnd","prevOutlineDist","l","_getSquareSize","makeShapeOutline","sign","columnWidth","getColumn","columnCount","shape1","shape2","frameSize","FrameLayout","originWidth","originHeight","scaleX","scaleY","originLength","cost","bestFitArea","itemFitSize","containerFitSize","layoutVertical","aspectRatio","sizeWeight","ratioWeight","getRatio","minCost","containerSizeCost","getCost","getOriginSize","containerRatioCost","getOriginRatio","itemWidth","itemHeight","containerWidth","containerHeight","itemRatio","containerSize","containerRatio","fitArea","containerSize1","prevOutline","toZeroArray","BoxModel","model","_findBestFitArea","scaleTo","boxItem","graph","s","d","predecessors","costs","open","BinaryHeap","closest","u","cost_of_s_to_u","adjacent_nodes","cost_of_e","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","first_visit","msg","Error","single_source_shortest_paths","extract_shortest_path_from_predecessor_list","scoreFunction","bubbleUp","sinkDown","_n","n","parentN","parent","elemScore","child1Score","child2N","child1N","swap","child1","child2","child2Score","minSize","maxSize","columns","_start","results","_getCost","pow","path","find_path","_setStyle","sum","isFinite","startPoint","endPoint","path1","path2","pathItems","pathItemsLength","prevItemRect","itemsLength","withInfiniteGridMethods","GridLayout","SquareLayout","PackingLayout","JustifiedLayout","default"],"mappings":"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"}