{"version":3,"file":"infinitegrid.cjs.js","sources":["../src/consts.ts","../src/InfiniteGridItem.ts","../src/LoadingGrid.ts","../src/utils.ts","../src/GroupManager.ts","../src/Infinite.ts","../src/Renderer/Renderer.ts","../src/Renderer/VanillaRenderer.ts","../src/Renderer/VanillaGridRenderer.ts","../src/ScrollManager.ts","../src/InfiniteGrid.ts","../src/grids/MasonryInfiniteGrid.ts","../src/grids/JustifiedInfiniteGrid.ts","../src/grids/FrameInfiniteGrid.ts","../src/grids/PackingInfiniteGrid.ts","../src/index.umd.ts"],"sourcesContent":["import { GRID_PROPERTY_TYPES } from \"@egjs/grid\";\n\nconst ua = typeof window !== \"undefined\" ? window.navigator.userAgent : \"\";\n\nexport const IS_IOS = /iPhone|iPad/.test(ua);\nexport const CONTAINER_CLASS_NAME = \"infinitegrid-container\";\nexport const IGNORE_PROPERITES_MAP = {\n renderOnPropertyChange: true,\n useFit: true,\n autoResize: true,\n} as const;\n\n\nexport const INFINITEGRID_PROPERTY_TYPES = {\n ...GRID_PROPERTY_TYPES,\n};\n\nexport const DIRECTION = {\n START: \"start\",\n END: \"end\",\n NONE: \"\",\n} as const;\n\nexport const INFINITEGRID_EVENTS = {\n CHANGE_SCROLL: \"changeScroll\",\n REQUEST_APPEND: \"requestAppend\",\n REQUEST_PREPEND: \"requestPrepend\",\n RENDER_COMPLETE: \"renderComplete\",\n CONTENT_ERROR: \"contentError\",\n} as const;\n\n// type?: ITEM_TYPE;\n// groupKey?: string | number;\n// key?: string | number;\n// element?: HTMLElement | null;\n// html?: string;\n// data?: Record<string, any>;\nexport const ITEM_INFO_PROPERTIES = {\n type: true,\n groupKey: true,\n key: true,\n element: true,\n html: true,\n data: true,\n};\n\n\nexport const INFINITEGRID_METHODS = [\n \"updateItems\",\n \"getItems\",\n \"getVisibleItems\",\n \"getGroups\",\n \"getVisibleGroups\",\n \"renderItems\",\n \"getContainerElement\",\n \"getScrollContainerElement\",\n \"getWrapperElement\",\n \"setStatus\",\n \"getStatus\",\n \"removePlaceholders\",\n \"prependPlaceholders\",\n \"appendPlaceholders\",\n \"getStartCursor\",\n \"getEndCursor\",\n \"setCursors\",\n] as const;\n\n\nexport enum GROUP_TYPE {\n NORMAL = 0,\n VIRTUAL = 1,\n LOADING = 2,\n}\n\nexport enum ITEM_TYPE {\n NORMAL = 0,\n VIRTUAL = 1,\n LOADING = 2,\n}\n\nexport enum STATUS_TYPE {\n // does not remove anything.\n NOT_REMOVE = 0,\n // Minimize information on invisible items\n MINIMIZE_INVISIBLE_ITEMS = 1,\n // Minimize information on invisible groups\n MINIMIZE_INVISIBLE_GROUPS = 2,\n // remove invisible groups\n REMOVE_INVISIBLE_GROUPS = 3,\n}\n\n\nexport const INVISIBLE_POS = -9999;\n","import { GridItem, GridItemStatus, MOUNT_STATE } from \"@egjs/grid\";\nimport { INVISIBLE_POS, ITEM_TYPE } from \"./consts\";\nimport { InfiniteGridItemInfo } from \"./types\";\n\n\nexport interface InfiniteGridItemStatus extends GridItemStatus {\n type?: ITEM_TYPE;\n groupKey?: string | number;\n key?: string | number;\n html?: string;\n}\n\n/**\n * @extends Grid.GridItem\n */\nexport class InfiniteGridItem extends GridItem implements Required<InfiniteGridItemInfo> {\n public groupKey: string | number;\n public readonly html: string;\n constructor(horizontal: boolean, itemStatus?: Partial<InfiniteGridItemStatus>) {\n super(horizontal, {\n html: \"\",\n type: ITEM_TYPE.NORMAL,\n cssRect: { top: INVISIBLE_POS, left: INVISIBLE_POS },\n ...itemStatus,\n } as GridItemStatus);\n\n if (this.type === ITEM_TYPE.VIRTUAL) {\n if (this.rect.width || this.rect.height) {\n this.mountState = MOUNT_STATE.UNMOUNTED;\n }\n const orgRect = this.orgRect;\n const rect = this.rect;\n const cssRect = this.cssRect;\n\n if (cssRect.width) {\n rect.width = cssRect.width;\n } else if (orgRect.width) {\n rect.width = orgRect.width;\n }\n if (cssRect.height) {\n rect.height = cssRect.height;\n } else if (orgRect.height) {\n rect.height = orgRect.height;\n }\n }\n }\n public getVirtualStatus(): Partial<InfiniteGridItemStatus> {\n return {\n type: ITEM_TYPE.VIRTUAL,\n groupKey: this.groupKey,\n key: this.key,\n orgRect: this.orgRect,\n rect: this.rect,\n cssRect: this.cssRect,\n attributes: this.attributes,\n };\n }\n public getMinimizedStatus(): Partial<InfiniteGridItemStatus> {\n const status: Partial<InfiniteGridItemStatus> = {\n ...super.getMinimizedStatus(),\n type: ITEM_TYPE.NORMAL,\n groupKey: this.groupKey,\n };\n if (this.html) {\n status.html = this.html;\n }\n return status;\n }\n}\n\nexport interface InfiniteGridItem extends Required<InfiniteGridItemStatus> {}\n","import Grid, { GridItem, GridOutlines } from \"@egjs/grid\";\nimport { ITEM_TYPE } from \"./consts\";\nimport { InfiniteGridItem, InfiniteGridItemStatus } from \"./InfiniteGridItem\";\n\nexport const LOADING_GROUP_KEY = \"__INFINITEGRID__LOADING_GRID\";\nexport const LOADING_ITEM_KEY = \"__INFINITEGRID__LOADING_ITEM\";\n\nexport class LoadingGrid extends Grid {\n public type: \"start\" | \"end\" | \"\" = \"\";\n public getLoadingItem(): InfiniteGridItem | null {\n return this.items[0] as InfiniteGridItem || null;\n }\n public setLoadingItem(item: Partial<InfiniteGridItemStatus> | null) {\n if (item) {\n const loadingItem = this.getLoadingItem();\n\n if (!loadingItem) {\n this.items = [new InfiniteGridItem(this.options.horizontal, {\n ...item,\n type: ITEM_TYPE.LOADING,\n key: LOADING_ITEM_KEY,\n })];\n } else {\n for (const name in item) {\n loadingItem[name] = item[name];\n }\n }\n } else {\n this.items = [];\n }\n }\n public applyGrid(items: GridItem[], direction: \"start\" | \"end\", outline: number[]): GridOutlines {\n if (!items.length) {\n return {\n start: outline,\n end: outline,\n };\n }\n const nextOutline = outline.length ? [...outline] : [0];\n const item = items[0];\n const offset = item.contentSize + this.gap;\n\n item.cssInlinePos = this.getContainerInlineSize() / 2 - item.inlineSize / 2;\n\n if (direction === \"end\") {\n const maxPos = Math.max(...nextOutline);\n\n item.cssContentPos = maxPos;\n\n return {\n start: nextOutline,\n end: nextOutline.map((pos) => pos + offset),\n };\n } else {\n const minPos = Math.min(...nextOutline);\n\n item.cssContentPos = minPos - offset;\n\n return {\n start: nextOutline.map((pos) => pos - offset),\n end: nextOutline,\n };\n }\n }\n}\n","import Grid, { GRID_PROPERTY_TYPES, withMethods } from \"@egjs/grid\";\nimport { diff } from \"@egjs/list-differ\";\nimport { GROUP_TYPE, IGNORE_PROPERITES_MAP, INFINITEGRID_METHODS, ITEM_INFO_PROPERTIES, ITEM_TYPE } from \"./consts\";\nimport { GroupManagerStatus, InfiniteGridGroupStatus } from \"./GroupManager\";\nimport InfiniteGrid from \"./InfiniteGrid\";\nimport { InfiniteGridItem, InfiniteGridItemStatus } from \"./InfiniteGridItem\";\nimport {\n CategorizedGroup, InfiniteGridGroup, InfiniteGridInsertedItems,\n InfiniteGridItemInfo,\n RenderingOptions,\n} from \"./types\";\n\nexport function isWindow(el: Window | Element): el is Window {\n return el === window;\n}\n\nexport function isNumber(val: any): val is number {\n return typeof val === \"number\";\n}\n\nexport function isString(val: any): val is string {\n return typeof val === \"string\";\n}\nexport function isObject(val: any): val is object {\n return typeof val === \"object\";\n}\n\nexport function flat<T>(arr: T[][]): T[] {\n return arr.reduce((prev, cur) => {\n return [...prev, ...cur];\n }, []);\n}\nexport function splitOptions(options: Record<string, any>) {\n const {\n gridOptions,\n ...otherOptions\n } = options;\n\n return {\n ...splitGridOptions(gridOptions),\n ...otherOptions,\n };\n}\nexport function splitGridOptions(options: Record<string, any>) {\n const nextOptions: Record<string, any> = {};\n const gridOptions: Record<string, any> = {};\n const defaultOptions = Grid.defaultOptions;\n\n for (const name in options) {\n const value = options[name];\n\n if (!(name in IGNORE_PROPERITES_MAP)) {\n gridOptions[name] = value;\n }\n\n if (name in defaultOptions) {\n nextOptions[name] = value;\n }\n }\n return {\n ...nextOptions,\n gridOptions,\n };\n}\n\nexport function categorize<Item extends InfiniteGridItemInfo = InfiniteGridItem>(items: Item[]) {\n const groups: Array<CategorizedGroup<Item>> = [];\n const groupKeys: Record<string | number, CategorizedGroup<Item>> = {};\n const registeredGroupKeys: Record<string | number, boolean> = {};\n\n items.filter((item) => item.groupKey != null).forEach(({ groupKey }) => {\n registeredGroupKeys[groupKey!] = true;\n });\n\n let generatedGroupKey: number | string;\n let isContinuousGroupKey = false;\n\n items.forEach((item) => {\n if (item.groupKey != null) {\n isContinuousGroupKey = false;\n } else {\n if (!isContinuousGroupKey) {\n generatedGroupKey = makeKey(registeredGroupKeys);\n isContinuousGroupKey = true;\n registeredGroupKeys[generatedGroupKey] = true;\n }\n item.groupKey = generatedGroupKey;\n }\n\n const groupKey = item.groupKey;\n let group = groupKeys[groupKey];\n\n if (!group) {\n group = {\n groupKey,\n items: [],\n };\n groupKeys[groupKey] = group;\n groups.push(group);\n }\n\n group.items.push(item);\n });\n return groups;\n}\n\nexport function getNextCursors(\n prevKeys: Array<string | number>,\n nextKeys: Array<string | number>,\n prevStartCursor: number,\n prevEndCursor: number,\n) {\n const result = diff(prevKeys, nextKeys, (key) => key);\n let nextStartCursor = -1;\n let nextEndCursor = -1;\n\n // sync cursors\n result.maintained.forEach(([prevIndex, nextIndex]) => {\n if (prevStartCursor <= prevIndex && prevIndex <= prevEndCursor) {\n if (nextStartCursor === -1) {\n nextStartCursor = nextIndex;\n nextEndCursor = nextIndex;\n } else {\n nextStartCursor = Math.min(nextStartCursor, nextIndex);\n nextEndCursor = Math.max(nextEndCursor, nextIndex);\n }\n }\n });\n return {\n startCursor: nextStartCursor,\n endCursor: nextEndCursor,\n };\n}\nexport function splitVirtualGroups<Group extends { type: GROUP_TYPE, groupKey: string | number }>(\n groups: Group[],\n direction: \"start\" | \"end\",\n nextGroups: CategorizedGroup<InfiniteGridItemStatus>[],\n) {\n let virtualGroups: Group[] = [];\n\n if (direction === \"start\") {\n const index = findIndex(groups, (group) => group.type === GROUP_TYPE.NORMAL);\n\n if (index === -1) {\n return [];\n }\n virtualGroups = groups.slice(0, index);\n } else {\n const index = findLastIndex(groups, (group) => group.type === GROUP_TYPE.NORMAL);\n\n if (index === -1) {\n return [];\n }\n virtualGroups = groups.slice(index + 1);\n }\n\n const nextVirtualGroups = diff<{ groupKey: string | number }>(\n virtualGroups, nextGroups, ({ groupKey }) => groupKey,\n ).removed.map((index) => {\n return virtualGroups[index];\n }).reverse();\n\n return nextVirtualGroups;\n}\n\nexport function getFirstRenderingItems(\n nextItems: InfiniteGridItemStatus[],\n horizontal: boolean,\n) {\n const groups = categorize(nextItems);\n\n if (!groups[0]) {\n return [];\n }\n return groups[0].items.map((item) => {\n return new InfiniteGridItem(horizontal, {\n ...item,\n });\n });\n}\nexport function getRenderingItemsByStatus(\n groupManagerStatus: GroupManagerStatus,\n nextItems: InfiniteGridItemStatus[],\n usePlaceholder: boolean,\n horizontal: boolean,\n) {\n const prevGroups = groupManagerStatus.groups;\n const groups = categorize(nextItems);\n\n const startVirtualGroups = splitVirtualGroups(prevGroups, \"start\", groups);\n const endVirtualGroups = splitVirtualGroups(prevGroups, \"end\", groups);\n const nextGroups = [\n ...startVirtualGroups,\n ...groups,\n ...endVirtualGroups,\n ] as Array<InfiniteGridGroupStatus | CategorizedGroup<InfiniteGridItemStatus>>;\n const {\n startCursor,\n endCursor,\n } = getNextCursors(\n prevGroups.map((group) => group.groupKey),\n nextGroups.map((group) => group.groupKey),\n groupManagerStatus.cursors[0],\n groupManagerStatus.cursors[1],\n );\n\n let nextVisibleItems = flat(nextGroups.slice(startCursor, endCursor + 1).map((group) => {\n return group.items.map((item) => {\n return new InfiniteGridItem(horizontal, { ...item });\n });\n }));\n\n if (!usePlaceholder) {\n nextVisibleItems = nextVisibleItems.filter((item) => {\n return item.type !== ITEM_TYPE.VIRTUAL;\n });\n }\n\n return nextVisibleItems;\n}\n\nexport function mountRenderingItems(items: InfiniteGridItemInfo[], options: RenderingOptions) {\n const {\n grid,\n usePlaceholder,\n useLoading,\n useFirstRender,\n status,\n } = options;\n if (!grid) {\n return;\n }\n if (usePlaceholder) {\n grid.setPlaceholder({});\n }\n if (useLoading) {\n grid.setLoading({});\n }\n if (status) {\n grid.setStatus(status, true);\n }\n\n grid.syncItems(items);\n\n if (useFirstRender && !status && grid.getGroups().length) {\n grid.setCursors(0, 0, true);\n }\n}\nexport function getRenderingItems(items: InfiniteGridItemInfo[], options: RenderingOptions) {\n const {\n status,\n usePlaceholder,\n useLoading,\n horizontal,\n useFirstRender,\n grid,\n } = options;\n let visibleItems: InfiniteGridItem[] = [];\n\n if (grid) {\n grid.setPlaceholder(usePlaceholder ? {} : null);\n grid.setLoading(useLoading ? {} : null);\n grid.syncItems(items);\n\n visibleItems = grid.getRenderingItems();\n } else if (status) {\n visibleItems = getRenderingItemsByStatus(status.groupManager, items, !!usePlaceholder, !!horizontal);\n } else if (useFirstRender) {\n visibleItems = getFirstRenderingItems(items, !!horizontal);\n }\n\n return visibleItems;\n}\n\n/* Class Decorator */\nexport function InfiniteGridGetterSetter(component: {\n prototype: InfiniteGrid<any>,\n propertyTypes: typeof GRID_PROPERTY_TYPES,\n}) {\n const {\n prototype,\n propertyTypes,\n } = component;\n for (const name in propertyTypes) {\n const attributes: Record<string, any> = {\n enumerable: true,\n configurable: true,\n get(this: InfiniteGrid) {\n const options = this.groupManager.options;\n if (name in options) {\n return options[name];\n } else {\n return options.gridOptions[name];\n }\n },\n set(this: InfiniteGrid, value: any) {\n const prevValue = this.groupManager[name];\n\n if (prevValue === value) {\n return;\n }\n this.groupManager.gridOptions = {\n [name]: value,\n };\n },\n };\n Object.defineProperty(prototype, name, attributes);\n }\n}\n\nexport function makeKey(registeredKeys: Record<string, any>) {\n let index = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const key = `infinitegrid_${index++}`;\n\n if (!(key in registeredKeys)) {\n return key;\n }\n }\n}\n\nexport function convertHTMLtoElement(html: string) {\n const dummy = document.createElement(\"div\");\n\n dummy.innerHTML = html;\n return toArray(dummy.children);\n}\n\nexport function convertInsertedItems(\n items: InfiniteGridInsertedItems,\n groupKey?: string | number,\n): InfiniteGridItemInfo[] {\n let insertedItems: Array<string | HTMLElement | InfiniteGridItemInfo>;\n\n if (isString(items)) {\n insertedItems = convertHTMLtoElement(items);\n } else {\n insertedItems = items;\n }\n return insertedItems.map((item) => {\n let element!: HTMLElement;\n let html = \"\";\n let key!: string | number;\n\n if (isString(item)) {\n html = item;\n } else if (\"parentNode\" in item) {\n element = item;\n html = item.outerHTML;\n } else {\n return { groupKey, ...item };\n }\n\n return {\n key,\n groupKey,\n html,\n element,\n };\n });\n}\nexport function toArray(nodes: HTMLCollection): HTMLElement[];\nexport function toArray<T>(nodes: { length: number, [key: number]: T }): T[];\nexport function toArray<T>(nodes: { length: number, [key: number]: T }): T[] {\n const array: T[] = [];\n\n if (nodes) {\n const length = nodes.length;\n\n for (let i = 0; i < length; i++) {\n array.push(nodes[i]);\n }\n }\n return array;\n}\n\n\nexport function findIndex<T>(arr: T[], callback: (value: T, index: number) => boolean) {\n const length = arr.length;\n for (let i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return i;\n }\n }\n\n return -1;\n}\n\nexport function findLastIndex<T>(arr: T[], callback: (value: T, index: number) => boolean) {\n const length = arr.length;\n for (let i = length - 1; i >= 0; --i) {\n if (callback(arr[i], i)) {\n return i;\n }\n }\n\n return -1;\n}\n\nexport function getItemInfo(info: InfiniteGridItemInfo) {\n const nextInfo: InfiniteGridItemInfo = {};\n\n for (const name in info) {\n if (name in ITEM_INFO_PROPERTIES) {\n nextInfo[name] = info[name];\n }\n }\n\n return nextInfo;\n}\n\nexport function setPlaceholder(item: InfiniteGridItem, info: InfiniteGridItemStatus) {\n for (const name in info) {\n const value = info[name];\n\n if (isObject(value)) {\n item[name] = {\n ...item[name],\n ...value,\n };\n } else {\n item[name] = info[name];\n }\n }\n}\n\nexport function isFlatOutline(start: number[], end: number[]) {\n return start.length === end.length && start.every((pos, i) => end[i] === pos);\n}\n\nexport function range(length: number): number[] {\n const arr: number[] = [];\n for (let i = 0; i < length; ++i) {\n arr.push(i);\n }\n return arr;\n}\n\nexport function flatGroups(groups: InfiniteGridGroup[]) {\n return flat(groups.map(({ grid }) => grid.getItems() as InfiniteGridItem[]));\n}\n\n\nexport function filterVirtuals<T extends InfiniteGridItem | InfiniteGridGroup>(\n items: T[],\n includePlaceholders?: boolean\n): T[] {\n if (includePlaceholders) {\n return items;\n } else {\n return items.filter((item) => item.type !== ITEM_TYPE.VIRTUAL);\n }\n}\n\n/**\n * Decorator that makes the method of InfiniteGrid available in the framework.\n * @ko í”„ë ˆìž„ì›Œí¬ì—ì„œ InfiniteGridì˜ ë©”ì†Œë“œë¥¼ ì‚¬ìš©í• ìˆ˜ 있게 하는 ë°ì½”ë ˆì´í„°.\n * @private\n * @example\n * ```js\n * import { withInfiniteGridMethods } from \"@egjs/infinitegrid\";\n *\n * class Grid extends React.Component<Partial<InfiniteGridProps & InfiniteGridOptions>> {\n * @withInfiniteGridMethods\n * private grid: NativeGrid;\n * }\n * ```\n */\nexport const withInfiniteGridMethods = withMethods(INFINITEGRID_METHODS);\n\n","import Grid, {\n GetterSetter,\n GridFunction, GridOptions,\n GridOutlines, MOUNT_STATE, Properties, PROPERTY_TYPE,\n RenderOptions, UPDATE_STATE,\n} from \"@egjs/grid\";\nimport { GROUP_TYPE, ITEM_TYPE, STATUS_TYPE } from \"./consts\";\nimport { InfiniteGridItem, InfiniteGridItemStatus } from \"./InfiniteGridItem\";\nimport { LoadingGrid, LOADING_GROUP_KEY } from \"./LoadingGrid\";\nimport { CategorizedGroup, InfiniteGridGroup, InfiniteGridItemInfo } from \"./types\";\nimport {\n categorize, filterVirtuals, findIndex, findLastIndex,\n flat,\n flatGroups, getItemInfo, isNumber, makeKey,\n range,\n setPlaceholder,\n splitGridOptions, splitOptions, splitVirtualGroups,\n} from \"./utils\";\n\nexport interface InfiniteGridGroupStatus {\n type: GROUP_TYPE;\n groupKey: string | number;\n items: InfiniteGridItemStatus[];\n outlines: GridOutlines;\n}\n\nexport interface GroupManagerOptions extends GridOptions {\n gridConstructor: GridFunction | null;\n gridOptions: Record<string, any>;\n}\n\nexport interface GroupManagerStatus {\n cursors: [number, number];\n orgCursors: [number, number];\n itemCursors: [number, number];\n startGroupKey: number | string;\n endGroupKey: number | string;\n groups: InfiniteGridGroupStatus[];\n outlines: GridOutlines;\n}\n\n@GetterSetter\nexport class GroupManager extends Grid<GroupManagerOptions> {\n public static defaultOptions: Required<GroupManagerOptions> = {\n ...Grid.defaultOptions,\n gridConstructor: null,\n gridOptions: {},\n };\n public static propertyTypes = {\n ...Grid.propertyTypes,\n gridConstructor: PROPERTY_TYPE.PROPERTY,\n gridOptions: PROPERTY_TYPE.PROPERTY,\n } as const;\n protected items: InfiniteGridItem[];\n protected groupItems: InfiniteGridItem[] = [];\n protected groups: InfiniteGridGroup[] = [];\n protected itemKeys: Record<string | number, InfiniteGridItem> = {};\n protected groupKeys: Record<string | number, InfiniteGridGroup> = {};\n protected startCursor = 0;\n protected endCursor = 0;\n private _placeholder: Partial<InfiniteGridItemStatus> | null = null;\n private _loadingGrid!: LoadingGrid;\n private _mainGrid!: Grid;\n\n constructor(container: HTMLElement, options: GroupManagerOptions) {\n super(container, splitOptions(options));\n\n this._loadingGrid = new LoadingGrid(container, {\n externalContainerManager: this.containerManager,\n useFit: false,\n autoResize: false,\n renderOnPropertyChange: false,\n gap: this.gap,\n });\n this._mainGrid = this._makeGrid();\n }\n public set gridOptions(options: Record<string, any>) {\n const {\n gridOptions,\n ...otherOptions\n } = splitGridOptions(options);\n\n const shouldRender = this._checkShouldRender(options);\n this.options.gridOptions = {\n ...this.options.gridOptions,\n ...gridOptions,\n };\n [this._mainGrid, ...this.groups.map(({ grid }) => grid)].forEach((grid) => {\n for (const name in options) {\n (grid as any)[name] = options[name];\n }\n });\n for (const name in otherOptions) {\n this[name] = otherOptions[name];\n }\n\n this._loadingGrid.gap = this.gap;\n if (shouldRender) {\n this.scheduleRender();\n }\n }\n\n public getItemByKey(key: string | number): InfiniteGridItem | null {\n return this.itemKeys[key] || null;\n }\n\n public getGroupItems(includePlaceholders?: boolean) {\n return filterVirtuals(this.groupItems, includePlaceholders);\n }\n public getVisibleItems(includePlaceholders?: boolean) {\n return filterVirtuals(this.items, includePlaceholders);\n }\n\n public getRenderingItems() {\n if (this.hasPlaceholder()) {\n return this.items;\n } else {\n return this.items.filter((item) => item.type !== ITEM_TYPE.VIRTUAL);\n }\n }\n\n public getGroups(includePlaceholders?: boolean): InfiniteGridGroup[] {\n return filterVirtuals(this.groups, includePlaceholders);\n }\n\n public hasVisibleVirtualGroups() {\n return this.getVisibleGroups(true).some((group) => group.type === GROUP_TYPE.VIRTUAL);\n }\n public hasPlaceholder() {\n return !!this._placeholder;\n }\n public hasLoadingItem() {\n return !!this._getLoadingItem();\n }\n\n public setPlaceholder(placeholder: Partial<InfiniteGridItemStatus> | null) {\n this._placeholder = placeholder;\n this._updatePlaceholder();\n }\n\n public getLoadingType() {\n return this._loadingGrid.type;\n }\n\n public startLoading(type: \"start\" | \"end\") {\n this._loadingGrid.type = type;\n this.items = this._getRenderingItems();\n\n return true;\n }\n\n public endLoading() {\n const prevType = this._loadingGrid.type;\n\n this._loadingGrid.type = \"\";\n this.items = this._getRenderingItems();\n return !!prevType;\n }\n\n public setLoading(loading: Partial<InfiniteGridItemStatus> | null) {\n this._loadingGrid.setLoadingItem(loading);\n this.items = this._getRenderingItems();\n }\n\n public getVisibleGroups(includePlaceholders?: boolean): InfiniteGridGroup[] {\n const groups = this.groups.slice(this.startCursor, this.endCursor + 1);\n\n return filterVirtuals(groups, includePlaceholders);\n }\n\n public getComputedOutlineLength(items = this.items) {\n return this._mainGrid.getComputedOutlineLength(items);\n }\n public getComputedOutlineSize(items = this.items) {\n return this._mainGrid.getComputedOutlineSize(items);\n }\n\n public applyGrid(items: InfiniteGridItem[], direction: \"end\" | \"start\", outline: number[]): GridOutlines {\n items.forEach((item) => {\n item.mountState = MOUNT_STATE.MOUNTED;\n });\n\n const renderingGroups = this.groups.slice();\n\n if (!renderingGroups.length) {\n return {\n start: [],\n end: [],\n };\n }\n\n\n const loadingGrid = this._loadingGrid;\n\n if (loadingGrid.getLoadingItem()) {\n if (loadingGrid.type === \"start\") {\n renderingGroups.unshift(this._getLoadingGroup());\n } else if (loadingGrid.type === \"end\") {\n renderingGroups.push(this._getLoadingGroup());\n }\n }\n\n const groups = renderingGroups.slice();\n\n let nextOutline = outline;\n\n if (direction === \"start\") {\n groups.reverse();\n }\n\n const outlineLength = this.getComputedOutlineLength(items);\n const outlineSize = this.getComputedOutlineSize(items);\n\n groups.forEach((group) => {\n const grid = group.grid;\n const gridItems = grid.getItems();\n const isVirtual = group.type === GROUP_TYPE.VIRTUAL && !gridItems[0];\n const appliedItems = gridItems.filter((item) => item.mountState !== MOUNT_STATE.UNCHECKED && item.rect.width);\n let gridOutlines: GridOutlines;\n\n grid.outlineLength = outlineLength;\n grid.outlineSize = outlineSize;\n\n if (isVirtual) {\n gridOutlines = this._applyVirtualGrid(grid, direction, nextOutline);\n } else if (appliedItems.length) {\n gridOutlines = grid.applyGrid(appliedItems, direction, nextOutline);\n } else {\n gridOutlines = {\n start: [...nextOutline],\n end: [...nextOutline],\n };\n }\n grid.setOutlines(gridOutlines);\n nextOutline = gridOutlines[direction];\n });\n\n return {\n start: renderingGroups[0].grid.getOutlines().start,\n end: renderingGroups[renderingGroups.length - 1].grid.getOutlines().end,\n };\n }\n\n public syncItems(nextItemInfos: InfiniteGridItemInfo[]) {\n const prevItemKeys = this.itemKeys;\n\n this.itemKeys = {};\n const nextItems = this._syncItemInfos(nextItemInfos.map((info) => getItemInfo(info)), prevItemKeys);\n const prevGroupKeys = this.groupKeys;\n let nextManagerGroups = categorize(nextItems);\n\n const startVirtualGroups = this._splitVirtualGroups(\"start\", nextManagerGroups);\n const endVirtualGroups = this._splitVirtualGroups(\"end\", nextManagerGroups);\n nextManagerGroups = [...startVirtualGroups, ...this._mergeVirtualGroups(nextManagerGroups), ...endVirtualGroups];\n\n const nextGroups: InfiniteGridGroup[] = nextManagerGroups.map(({ groupKey, items }) => {\n const isVirtual = !items[0] || items[0].type === ITEM_TYPE.VIRTUAL;\n const grid = prevGroupKeys[groupKey]?.grid ?? this._makeGrid();\n const gridItems = isVirtual ? items : items.filter(({ type }) => type === ITEM_TYPE.NORMAL);\n\n grid.setItems(gridItems);\n\n return {\n type: isVirtual ? GROUP_TYPE.VIRTUAL : GROUP_TYPE.NORMAL,\n groupKey,\n grid,\n items: gridItems,\n renderItems: items,\n };\n });\n\n this._registerGroups(nextGroups);\n }\n\n public renderItems(options: RenderOptions = {}) {\n if (options.useResize) {\n this.groupItems.forEach((item) => {\n item.updateState = UPDATE_STATE.NEED_UPDATE;\n });\n const loadingItem = this._getLoadingItem();\n\n if (loadingItem) {\n loadingItem.updateState = UPDATE_STATE.NEED_UPDATE;\n }\n }\n return super.renderItems(options);\n }\n\n public setCursors(startCursor: number, endCursor: number) {\n this.startCursor = startCursor;\n this.endCursor = endCursor;\n this.items = this._getRenderingItems();\n }\n\n public getStartCursor() {\n return this.startCursor;\n }\n\n public getEndCursor() {\n return this.endCursor;\n }\n\n public getGroupStatus(type?: STATUS_TYPE): GroupManagerStatus {\n const orgStartCursor = this.startCursor;\n const orgEndCursor = this.endCursor;\n const orgGroups = this.groups;\n\n let startCursor = orgStartCursor;\n let endCursor = orgEndCursor;\n\n const isMinimizeItems = type === STATUS_TYPE.MINIMIZE_INVISIBLE_ITEMS;\n const isMinimizeGroups = type === STATUS_TYPE.MINIMIZE_INVISIBLE_GROUPS;\n let groups: InfiniteGridGroup[];\n\n if (type === STATUS_TYPE.REMOVE_INVISIBLE_GROUPS) {\n groups = this.getVisibleGroups();\n endCursor -= startCursor;\n startCursor = 0;\n } else {\n groups = this.getGroups();\n }\n\n const groupStatus: InfiniteGridGroupStatus[] = groups.map(({ grid, groupKey }, i) => {\n const isOutsideCursor = i < startCursor || endCursor < i;\n const isVirtualItems = isMinimizeItems && isOutsideCursor;\n const isVirtualGroup = isMinimizeGroups && isOutsideCursor;\n const gridItems = grid.getItems() as InfiniteGridItem[];\n const items = isVirtualGroup\n ? []\n : gridItems.map((item) => isVirtualItems ? item.getVirtualStatus() : item.getMinimizedStatus());\n\n return {\n type: isVirtualGroup || isVirtualItems ? GROUP_TYPE.VIRTUAL : GROUP_TYPE.NORMAL,\n groupKey: groupKey,\n outlines: grid.getOutlines(),\n items,\n };\n });\n\n const startGroup = orgGroups[orgStartCursor];\n const endGroup = orgGroups[orgEndCursor];\n const totalItems = this.getGroupItems();\n\n const itemStartCursor = totalItems.indexOf(startGroup?.items[0]);\n const itemEndCursor = totalItems.indexOf(endGroup?.items.slice().reverse()[0]);\n\n return {\n cursors: [startCursor, endCursor],\n orgCursors: [orgStartCursor, orgEndCursor],\n itemCursors: [itemStartCursor, itemEndCursor],\n startGroupKey: startGroup?.groupKey,\n endGroupKey: endGroup?.groupKey,\n groups: groupStatus,\n outlines: this.outlines,\n };\n }\n\n public setGroupStatus(status: GroupManagerStatus) {\n this.itemKeys = {};\n this.groupItems = [];\n this.items = [];\n const prevGroupKeys = this.groupKeys;\n\n const nextGroups: InfiniteGridGroup[] = status.groups.map(({\n type,\n groupKey,\n items,\n outlines,\n }) => {\n const nextItems = this._syncItemInfos(items);\n const grid = prevGroupKeys[groupKey]?.grid ?? this._makeGrid();\n\n grid.setOutlines(outlines);\n grid.setItems(nextItems);\n\n return {\n type,\n groupKey,\n grid,\n items: nextItems,\n renderItems: nextItems,\n };\n });\n\n this.setOutlines(status.outlines);\n this._registerGroups(nextGroups);\n this._updatePlaceholder();\n this.setCursors(status.cursors[0], status.cursors[1]);\n }\n public appendPlaceholders(items: number | InfiniteGridItemStatus[], groupKey?: string | number) {\n return this.insertPlaceholders(\"end\", items, groupKey);\n }\n public prependPlaceholders(items: number | InfiniteGridItemStatus[], groupKey?: string | number) {\n return this.insertPlaceholders(\"start\", items, groupKey);\n }\n public removePlaceholders(type: \"start\" | \"end\" | { groupKey: string | number }) {\n const groups = this.groups;\n const length = groups.length;\n\n if (type === \"start\") {\n const index = findIndex(groups, (group) => group.type === GROUP_TYPE.NORMAL);\n\n groups.splice(0, index);\n\n } else if (type === \"end\") {\n const index = findLastIndex(groups, (group) => group.type === GROUP_TYPE.NORMAL);\n\n groups.splice(index + 1, length - index - 1);\n } else {\n const groupKey = type.groupKey;\n\n const index = findIndex(groups, (group) => group.groupKey === groupKey);\n\n if (index > -1) {\n groups.splice(index, 1);\n }\n }\n\n this.syncItems(flatGroups(this.getGroups()));\n }\n public insertPlaceholders(\n direction: \"start\" | \"end\",\n items: number | InfiniteGridItemStatus[],\n groupKey: string | number = makeKey(this.groupKeys),\n ) {\n\n let infos: InfiniteGridItemInfo[] = [];\n\n if (isNumber(items)) {\n infos = range(items).map(() => ({ type: ITEM_TYPE.VIRTUAL, groupKey }));\n } else if (Array.isArray(items)) {\n infos = items.map((status) => ({\n groupKey,\n ...status,\n type: ITEM_TYPE.VIRTUAL,\n }));\n }\n const grid = this._makeGrid();\n const nextItems = this._syncItemInfos(infos, this.itemKeys);\n\n this._updatePlaceholder(nextItems);\n grid.setItems(nextItems);\n\n const group = {\n type: GROUP_TYPE.VIRTUAL,\n groupKey,\n grid,\n items: nextItems,\n renderItems: nextItems,\n };\n\n this.groupKeys[groupKey] = group;\n\n if (direction === \"end\") {\n this.groups.push(group);\n this.groupItems.push(...nextItems);\n } else {\n this.groups.splice(0, 0, group);\n this.groupItems.splice(0, 0, ...nextItems);\n if (this.startCursor > -1) {\n ++this.startCursor;\n ++this.endCursor;\n }\n }\n\n\n return {\n group,\n items: nextItems,\n };\n }\n\n public shouldRerenderItems() {\n let isRerender = false;\n\n this.getVisibleGroups().forEach((group) => {\n const items = group.items;\n\n if (\n items.length === group.renderItems.length\n || items.every((item) => item.mountState === MOUNT_STATE.UNCHECKED)\n ) {\n return;\n }\n isRerender = true;\n group.renderItems = [...items];\n });\n if (isRerender) {\n this.items = this._getRenderingItems();\n }\n return isRerender;\n }\n\n private _getGroupItems() {\n return flatGroups(this.getGroups(true));\n }\n\n private _getRenderingItems() {\n const items = flat(this.getVisibleGroups(true).map((item) => item.renderItems));\n\n\n const loadingGrid = this._loadingGrid;\n const loadingItem = loadingGrid.getLoadingItem();\n\n if (loadingItem) {\n if (loadingGrid.type === \"end\") {\n items.push(loadingItem);\n } else if (loadingGrid.type === \"start\") {\n items.unshift(loadingItem);\n }\n }\n\n return items;\n }\n\n private _checkShouldRender(options: Record<string, any>) {\n const GridConstructor = this.options.gridConstructor!;\n const prevOptions = this.gridOptions;\n const propertyTypes = GridConstructor.propertyTypes;\n\n for (const name in prevOptions) {\n if (!(name in options) && propertyTypes[name] === PROPERTY_TYPE.RENDER_PROPERTY) {\n return true;\n }\n }\n for (const name in options) {\n if (prevOptions[name] !== options[name] && propertyTypes[name] === PROPERTY_TYPE.RENDER_PROPERTY) {\n return true;\n }\n }\n return false;\n }\n private _applyVirtualGrid(grid: Grid, direction: \"start\" | \"end\", outline: number[]) {\n const startOutline = outline.length ? [...outline] : [0];\n const prevOutlines = grid.getOutlines();\n const prevOutline = prevOutlines[direction === \"end\" ? \"start\" : \"end\"];\n\n if (\n prevOutline.length !== startOutline.length\n || prevOutline.some((value, i) => value !== startOutline[i])\n ) {\n return {\n start: [...startOutline],\n end: [...startOutline],\n };\n }\n return prevOutlines;\n }\n private _syncItemInfos(\n nextItemInfos: InfiniteGridItemStatus[],\n prevItemKeys: Record<string | number, InfiniteGridItem> = {},\n ) {\n const horizontal = this.options.horizontal;\n const nextItemKeys = this.itemKeys;\n\n nextItemInfos.filter((info) => info.key != null).forEach((info) => {\n const key = info.key!;\n const prevItem = prevItemKeys[key];\n\n if (!prevItem) {\n nextItemKeys[key] = new InfiniteGridItem(horizontal, {\n ...info,\n });\n } else if (prevItem.type === ITEM_TYPE.VIRTUAL && info.type !== ITEM_TYPE.VIRTUAL) {\n nextItemKeys[key] = new InfiniteGridItem(horizontal, {\n orgRect: prevItem.orgRect,\n rect: prevItem.rect,\n ...info,\n });\n } else {\n if (info.data) {\n prevItem.data = info.data;\n }\n nextItemKeys[key] = prevItem;\n }\n });\n const nextItems = nextItemInfos.map((info) => {\n let key = info.key!;\n\n if (info.key == null) {\n key = makeKey(nextItemKeys);\n }\n let item = nextItemKeys[key];\n\n if (!item) {\n const prevItem = prevItemKeys[key];\n\n if (prevItem) {\n item = prevItem;\n\n if (info.data) {\n item.data = info.data;\n }\n } else {\n item = new InfiniteGridItem(horizontal, {\n ...info,\n key,\n });\n }\n nextItemKeys[key] = item;\n }\n return item;\n });\n return nextItems;\n }\n private _registerGroups(groups: InfiniteGridGroup[]) {\n const nextGroupKeys: Record<string | number, InfiniteGridGroup> = {};\n\n groups.forEach((group) => {\n nextGroupKeys[group.groupKey] = group;\n });\n\n this.groups = groups;\n this.groupKeys = nextGroupKeys;\n this.groupItems = this._getGroupItems();\n }\n private _splitVirtualGroups(direction: \"start\" | \"end\", nextGroups: CategorizedGroup[]) {\n const groups = splitVirtualGroups(this.groups, direction, nextGroups);\n const itemKeys = this.itemKeys;\n\n groups.forEach(({ renderItems }) => {\n renderItems.forEach((item) => {\n itemKeys[item.key] = item;\n });\n });\n\n return groups;\n }\n private _mergeVirtualGroups(groups: Array<CategorizedGroup<InfiniteGridItem>>) {\n const itemKeys = this.itemKeys;\n const groupKeys = this.groupKeys;\n\n groups.forEach((group) => {\n const prevGroup = groupKeys[group.groupKey];\n\n if (!prevGroup) {\n return;\n }\n const items = group.items;\n\n if (items.every((item) => item.mountState === MOUNT_STATE.UNCHECKED)) {\n prevGroup.renderItems.forEach((item) => {\n if (item.type === ITEM_TYPE.VIRTUAL && !itemKeys[item.key]) {\n items.push(item);\n itemKeys[item.key] = item;\n }\n });\n }\n });\n return groups;\n }\n\n private _updatePlaceholder(items = this.groupItems) {\n const placeholder = this._placeholder;\n\n if (!placeholder) {\n return;\n }\n\n items.filter((item) => item.type === ITEM_TYPE.VIRTUAL).forEach((item) => {\n setPlaceholder(item, placeholder);\n });\n }\n private _makeGrid() {\n const GridConstructor = this.options.gridConstructor!;\n const gridOptions = this.gridOptions;\n const container = this.containerElement;\n\n return new GridConstructor(container, {\n ...gridOptions,\n useFit: false,\n autoResize: false,\n renderOnPropertyChange: false,\n externalContainerManager: this.containerManager,\n externalItemRenderer: this.itemRenderer,\n });\n }\n private _getLoadingGroup(): InfiniteGridGroup {\n const loadingGrid = this._loadingGrid;\n const items = loadingGrid.getItems() as InfiniteGridItem[];\n\n return {\n groupKey: LOADING_GROUP_KEY,\n type: GROUP_TYPE.NORMAL,\n grid: loadingGrid,\n items,\n renderItems: items,\n };\n }\n private _getLoadingItem() {\n return this._loadingGrid.getLoadingItem();\n }\n}\n\nexport interface GroupManager extends Properties<typeof GroupManager> {\n getItems(): InfiniteGridItem[];\n}\n","import Component from \"@egjs/component\";\nimport { diff } from \"@egjs/list-differ\";\nimport { DIRECTION } from \"./consts\";\nimport { findIndex, getNextCursors, isFlatOutline } from \"./utils\";\n\nexport interface OnInfiniteRequestAppend {\n key?: string | number | undefined;\n nextKey?: string | number | undefined;\n isVirtual: boolean;\n}\n\nexport interface OnInfiniteRequestPrepend {\n key?: string | number;\n nextKey?: string | number;\n isVirtual: boolean;\n}\n\nexport interface OnInfiniteChange {\n prevStartCursor: number;\n prevEndCursor: number;\n nextStartCursor: number;\n nextEndCursor: number;\n}\n\nexport interface InfiniteEvents {\n requestAppend: OnInfiniteRequestAppend;\n requestPrepend: OnInfiniteRequestPrepend;\n change: OnInfiniteChange;\n}\n\nexport interface InfiniteOptions {\n useRecycle?: boolean;\n threshold?: number;\n defaultDirection?: \"start\" | \"end\";\n}\n\nexport interface InfiniteItem {\n key: string | number;\n startOutline: number[];\n endOutline: number[];\n isVirtual?: boolean;\n}\n\nexport class Infinite extends Component<InfiniteEvents> {\n public options: Required<InfiniteOptions>;\n protected startCursor = -1;\n protected endCursor = -1;\n protected size = 0;\n protected items: InfiniteItem[] = [];\n protected itemKeys: Record<string | number, InfiniteItem> = {};\n constructor(options: InfiniteOptions) {\n super();\n this.options = {\n threshold: 0,\n useRecycle: true,\n defaultDirection: \"end\",\n ...options,\n };\n }\n public scroll(scrollPos: number) {\n const prevStartCursor = this.startCursor;\n const prevEndCursor = this.endCursor;\n const items = this.items;\n const length = items.length;\n const size = this.size;\n const {\n defaultDirection,\n threshold,\n useRecycle,\n } = this.options;\n const isDirectionEnd = defaultDirection === \"end\";\n\n if (!length) {\n this.trigger(isDirectionEnd ? \"requestAppend\" : \"requestPrepend\", {\n key: undefined,\n isVirtual: false,\n });\n return;\n } else if (prevStartCursor === -1 || prevEndCursor === -1) {\n const nextCursor = isDirectionEnd ? 0 : length - 1;\n this.trigger(\"change\", {\n prevStartCursor,\n prevEndCursor,\n nextStartCursor: nextCursor,\n nextEndCursor: nextCursor,\n });\n return;\n }\n\n const endScrollPos = scrollPos + size;\n const startEdgePos = Math.max(...items[prevStartCursor].startOutline);\n const endEdgePos = Math.min(...items[prevEndCursor].endOutline);\n const visibles = items.map((item) => {\n const {\n startOutline,\n endOutline,\n } = item;\n\n if (!startOutline.length || !endOutline.length) {\n return false;\n }\n const startPos = Math.min(...startOutline);\n const endPos = Math.max(...endOutline);\n\n if (startPos - threshold <= endScrollPos && scrollPos <= endPos + threshold) {\n return true;\n }\n return false;\n });\n const hasStartItems = 0 < prevStartCursor;\n const hasEndItems = prevEndCursor < length - 1;\n const isStart = scrollPos <= startEdgePos + threshold;\n const isEnd = endScrollPos >= endEdgePos - threshold;\n let nextStartCursor = visibles.indexOf(true);\n let nextEndCursor = visibles.lastIndexOf(true);\n\n if (nextStartCursor === -1) {\n nextStartCursor = prevStartCursor;\n nextEndCursor = prevEndCursor;\n }\n\n if (!useRecycle) {\n nextStartCursor = Math.min(nextStartCursor, prevStartCursor);\n nextEndCursor = Math.max(nextEndCursor, prevEndCursor);\n }\n if (nextStartCursor === prevStartCursor && hasStartItems && isStart) {\n nextStartCursor -= 1;\n }\n if (nextEndCursor === prevEndCursor && hasEndItems && isEnd) {\n nextEndCursor += 1;\n }\n if (prevStartCursor !== nextStartCursor || prevEndCursor !== nextEndCursor) {\n this.trigger(\"change\", {\n prevStartCursor,\n prevEndCursor,\n nextStartCursor,\n nextEndCursor,\n });\n return;\n } else if (this._requestVirtualItems()) {\n return;\n } else if ((!isDirectionEnd || !isEnd) && isStart) {\n this.trigger(\"requestPrepend\", {\n key: items[prevStartCursor].key,\n isVirtual: false,\n });\n } else if ((isDirectionEnd || !isStart) && isEnd) {\n this.trigger(\"requestAppend\", {\n key: items[prevEndCursor].key,\n isVirtual: false,\n });\n }\n }\n\n /**\n * @private\n * Call the requestAppend or requestPrepend event to fill the virtual items.\n * @ko virtual itemì„ ì±„ìš°ê¸° 위해 requestAppend ë˜ëŠ” requestPrepend ì´ë²¤íŠ¸ë¥¼ 호출합니다.\n * @return - Whether the event is called. <ko>ì´ë²¤íŠ¸ë¥¼ 호출했는지 여부.</ko>\n */\n public _requestVirtualItems() {\n const isDirectionEnd = this.options.defaultDirection === \"end\";\n const items = this.items;\n const totalVisibleItems = this.getVisibleItems();\n const visibleItems = totalVisibleItems.filter((item) => !item.isVirtual);\n const totalVisibleLength = totalVisibleItems.length;\n const visibleLength = visibleItems.length;\n const startCursor = this.getStartCursor();\n const endCursor = this.getEndCursor();\n\n\n if (visibleLength === totalVisibleLength) {\n return false;\n } else if (visibleLength) {\n const startKey = visibleItems[0].key;\n const endKey = visibleItems[visibleLength - 1].key;\n const startIndex = findIndex(items, (item) => item.key === startKey) - 1;\n const endIndex = findIndex(items, (item) => item.key === endKey) + 1;\n\n const isEnd = endIndex <= endCursor;\n const isStart = startIndex >= startCursor;\n\n // Fill the placeholder with the original item.\n if ((isDirectionEnd || !isStart) && isEnd) {\n this.trigger(\"requestAppend\", {\n key: endKey,\n nextKey: items[endIndex].key,\n isVirtual: true,\n });\n return true;\n } else if ((!isDirectionEnd || !isEnd) && isStart) {\n this.trigger(\"requestPrepend\", {\n key: startKey,\n nextKey: items[startIndex].key,\n isVirtual: true,\n });\n return true;\n }\n } else if (totalVisibleLength) {\n const lastItem = totalVisibleItems[totalVisibleLength - 1];\n\n if (isDirectionEnd) {\n this.trigger(\"requestAppend\", {\n nextKey: totalVisibleItems[0].key,\n isVirtual: true,\n });\n } else {\n this.trigger(\"requestPrepend\", {\n nextKey: lastItem.key,\n isVirtual: true,\n });\n }\n return true;\n }\n return false;\n }\n public setCursors(startCursor: number, endCursor: number) {\n this.startCursor = startCursor;\n this.endCursor = endCursor;\n }\n public setSize(size: number) {\n this.size = size;\n }\n public getStartCursor() {\n return this.startCursor;\n }\n public getEndCursor() {\n return this.endCursor;\n }\n public isLoading(direction: \"start\" | \"end\") {\n const startCursor = this.startCursor;\n const endCursor = this.endCursor;\n const items = this.items;\n const firstItem = items[startCursor]!;\n const lastItem = items[endCursor]!;\n const length = items.length;\n\n if (\n direction === DIRECTION.END\n && endCursor > -1\n && endCursor < length - 1\n && !lastItem.isVirtual\n && !isFlatOutline(lastItem.startOutline, lastItem.endOutline)\n ) {\n return false;\n }\n if (\n direction === DIRECTION.START\n && startCursor > 0\n && !firstItem.isVirtual\n && !isFlatOutline(firstItem.startOutline, firstItem.endOutline)\n ) {\n return false;\n }\n return true;\n }\n public setItems(nextItems: InfiniteItem[]) {\n this.items = nextItems;\n\n const itemKeys: Record<string | number, InfiniteItem> = {};\n\n nextItems.forEach((item) => {\n itemKeys[item.key] = item;\n });\n this.itemKeys = itemKeys;\n }\n public syncItems(nextItems: InfiniteItem[]) {\n const prevItems = this.items;\n const prevStartCursor = this.startCursor;\n const prevEndCursor = this.endCursor;\n const {\n startCursor: nextStartCursor,\n endCursor: nextEndCursor,\n } = getNextCursors(\n this.items.map((item) => item.key),\n nextItems.map((item) => item.key),\n prevStartCursor,\n prevEndCursor,\n );\n // sync items between cursors\n let isChange = nextEndCursor - nextStartCursor !== prevEndCursor - prevStartCursor\n || (prevStartCursor === -1 || nextStartCursor === -1);\n\n if (!isChange) {\n const prevVisibleItems = prevItems.slice(prevStartCursor, prevEndCursor + 1);\n const nextVisibleItems = nextItems.slice(nextStartCursor, nextEndCursor + 1);\n const visibleResult = diff(prevVisibleItems, nextVisibleItems, (item) => item.key);\n\n isChange = visibleResult.added.length > 0\n || visibleResult.removed.length > 0\n || visibleResult.changed.length > 0;\n }\n this.setItems(nextItems);\n this.setCursors(nextStartCursor, nextEndCursor);\n return isChange;\n }\n public getItems() {\n return this.items;\n }\n public getVisibleItems() {\n const startCursor = this.startCursor;\n const endCursor = this.endCursor;\n\n if (startCursor === -1) {\n return [];\n }\n return this.items.slice(startCursor, endCursor + 1);\n }\n public getItemByKey(key: string | number) {\n return this.itemKeys[key];\n }\n public getRenderedVisibleItems() {\n const items = this.getVisibleItems();\n const rendered = items.map(({ startOutline, endOutline }) => {\n const length = startOutline.length;\n\n if (length === 0 || length !== endOutline.length) {\n return false;\n }\n return startOutline.some((pos, i) => endOutline[i] !== pos);\n });\n const startIndex = rendered.indexOf(true);\n const endIndex = rendered.lastIndexOf(true);\n\n return endIndex === -1 ? [] : items.slice(startIndex, endIndex + 1);\n }\n public destroy() {\n this.off();\n this.startCursor = -1;\n this.endCursor = -1;\n this.items = [];\n this.size = 0;\n }\n}\n","import Component from \"@egjs/component\";\nimport { diff, DiffResult } from \"@egjs/list-differ\";\nimport { toArray } from \"../utils\";\n\nexport interface RendererItem {\n key: string | number;\n renderKey?: string;\n element?: Element | null;\n}\n\nexport interface OnRendererUpdated<T extends RendererItem = RendererItem> {\n items: T[];\n elements: Element[];\n isChanged: boolean;\n isItemChanged: boolean;\n state: Record<string, any>;\n diffResult: DiffResult<T>;\n}\n\nexport interface OnRendererUpdate {\n state: Record<string, any>;\n}\nexport interface RendererEvents<T extends RendererItem = RendererItem> {\n update: OnRendererUpdate;\n updated: OnRendererUpdated<T>;\n requestUpdate: OnRendererUpdate;\n}\n\nexport class Renderer<Item extends RendererItem = RendererItem> extends Component<RendererEvents> {\n protected items: Item[] = [];\n protected container: Element | null = null;\n protected rendererKey = 0;\n private _diffResult: DiffResult<Item>;\n private _updateTimer = 0;\n private _state: Record<string, any> = {};\n private _isItemChanged = false;\n\n public updateKey() {\n this.rendererKey = Date.now();\n }\n\n public getItems() {\n return this.items;\n }\n public setContainer(container: Element) {\n this.container = container;\n }\n public render(nextItems: Item[], state?: Record<string, any>) {\n return this.syncItems(nextItems, state);\n }\n public update(state: Record<string, any> = {}) {\n this._state = { ...this._state, ...state };\n this.trigger(\"update\", {\n state,\n });\n\n clearTimeout(this._updateTimer);\n this._updateTimer = window.setTimeout(() => {\n this.trigger(\"requestUpdate\", {\n state,\n });\n });\n }\n public updated(nextElements: ArrayLike<Element> = this.container?.children ?? []) {\n const diffResult = this._diffResult;\n const isChanged = !!(diffResult.added.length || diffResult.removed.length || diffResult.changed.length);\n const state = this._state;\n const isItemChanged = this._isItemChanged;\n const nextItems = diffResult.list;\n\n\n this._isItemChanged = false;\n this._state = {};\n this.items = nextItems;\n nextItems.forEach((item, i) => {\n item.element = nextElements[i];\n });\n\n\n this.trigger(\"updated\", {\n items: nextItems,\n elements: toArray(nextElements),\n diffResult: this._diffResult,\n state,\n isItemChanged,\n isChanged,\n });\n\n return isChanged;\n }\n public syncItems(items: Item[], state: Record<string, any> = {}) {\n const rendererKey = this.rendererKey;\n const prevItems = this.items;\n const nextItems = items.map((item) => ({\n ...item,\n renderKey: `${rendererKey}_${item.key}`,\n }));\n const result = diff(prevItems, nextItems, (item) => item.renderKey!);\n\n this._isItemChanged = !!result.added.length || !!result.removed.length || !!result.changed.length;\n this._state = { ...this._state, ...state };\n this._diffResult = result;\n\n return result;\n }\n public destroy() {\n this.off();\n }\n}\n","import { Renderer, RendererItem } from \"./Renderer\";\n\nexport class VanillaRenderer<Item extends RendererItem = RendererItem> extends Renderer<Item> {\n public render(nextItems: Item[], state?: Record<string, any>) {\n const container = this.container!;\n const result = super.render(nextItems, state);\n const {\n prevList,\n removed,\n ordered,\n added,\n list,\n } = result;\n const diffList = [...prevList];\n\n\n removed.forEach((index) => {\n diffList.splice(index, 1);\n container.removeChild(prevList[index].element!);\n });\n ordered.forEach(([prevIndex, nextIndex]) => {\n const item = diffList.splice(prevIndex, 1)[0];\n\n diffList.splice(nextIndex, 0, item);\n container.insertBefore(item.element!, diffList[nextIndex + 1]?.element ?? null);\n });\n added.forEach((index) => {\n const item = list[index];\n\n diffList.splice(index, 0, item);\n container.insertBefore(item.element!, diffList[index + 1]?.element ?? null);\n });\n\n this.updated(container.children);\n return result;\n }\n}\n","import { InfiniteGridItem } from \"../InfiniteGridItem\";\nimport { convertHTMLtoElement } from \"../utils\";\nimport { RendererItem } from \"./Renderer\";\nimport { VanillaRenderer } from \"./VanillaRenderer\";\n\nexport interface GridRendererItem extends RendererItem {\n orgItem: InfiniteGridItem;\n}\n\nexport class VanillaGridRenderer extends VanillaRenderer<GridRendererItem> {\n public syncItems(nextItems: GridRendererItem[]) {\n const result = super.syncItems(nextItems);\n const {\n added,\n list,\n } = result;\n added.forEach((index) => {\n const orgItem = nextItems[index].orgItem;\n\n if (orgItem.html && !orgItem.element) {\n orgItem.element = convertHTMLtoElement(orgItem.html)[0];\n }\n list[index].element = orgItem.element!;\n });\n\n return result;\n }\n}\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport { CONTAINER_CLASS_NAME, IS_IOS } from \"./consts\";\nimport { OnChangeScroll } from \"./types\";\nimport { isWindow, toArray } from \"./utils\";\n\nexport interface ScrollManagerOptions {\n container?: HTMLElement | boolean | string;\n containerTag?: string;\n horizontal?: boolean;\n}\n\nexport interface ScrollManagerStatus {\n contentSize: number;\n scrollOffset: number;\n prevScrollPos: number;\n}\n\n\nexport interface ScrollManagerEvents {\n scroll: OnChangeScroll;\n}\n\nexport class ScrollManager extends Component<ScrollManagerEvents> {\n public options: Required<ScrollManagerOptions>;\n protected prevScrollPos: number | null = null;\n protected eventTarget: HTMLElement | Window;\n protected scrollOffset = 0;\n protected contentSize = 0;\n protected container: HTMLElement;\n protected scrollContainer: HTMLElement;\n private _orgCSSText: string;\n private _isScrollIssue = IS_IOS;\n private _isCreateElement: boolean;\n\n constructor(\n protected wrapper: HTMLElement,\n options: ScrollManagerOptions,\n ) {\n super();\n this.options = {\n container: false,\n containerTag: \"div\",\n horizontal: false,\n ...options,\n };\n\n this._init();\n }\n public getWrapper() {\n return this.wrapper;\n }\n public getContainer() {\n return this.container;\n }\n public getScrollContainer() {\n return this.scrollContainer;\n }\n public getScrollOffset() {\n return this.scrollOffset;\n }\n public getContentSize() {\n return this.contentSize;\n }\n public getRelativeScrollPos() {\n return (this.prevScrollPos || 0) - this.scrollOffset;\n }\n public getScrollPos() {\n return this.prevScrollPos;\n }\n public setScrollPos(pos: number) {\n this.prevScrollPos = pos;\n }\n public getOrgScrollPos() {\n const eventTarget = this.eventTarget;\n const horizontal = this.options.horizontal;\n\n const prop = `scroll${horizontal ? \"Left\" : \"Top\"}` as \"scrollLeft\" | \"scrollTop\";\n\n if (isWindow(eventTarget)) {\n return window[horizontal ? \"pageXOffset\" : \"pageYOffset\"]\n || document.documentElement[prop] || document.body[prop];\n } else {\n return eventTarget[prop];\n }\n }\n public setStatus(status: ScrollManagerStatus) {\n this.contentSize = status.contentSize;\n this.scrollOffset = status.scrollOffset;\n this.prevScrollPos = status.prevScrollPos;\n\n this.scrollTo(this.prevScrollPos);\n }\n public getStatus(): ScrollManagerStatus {\n return {\n contentSize: this.contentSize,\n scrollOffset: this.scrollOffset,\n prevScrollPos: this.prevScrollPos!,\n };\n }\n public scrollTo(pos: number) {\n const eventTarget = this.eventTarget;\n const horizontal = this.options.horizontal;\n const [x, y] = horizontal ? [pos, 0] : [0, pos];\n\n if (isWindow(eventTarget)) {\n eventTarget.scroll(x, y);\n } else {\n eventTarget.scrollLeft = x;\n eventTarget.scrollTop = y;\n }\n }\n public scrollBy(pos: number) {\n if (!pos) {\n return;\n }\n const eventTarget = this.eventTarget;\n const horizontal = this.options.horizontal;\n const [x, y] = horizontal ? [pos, 0] : [0, pos];\n\n\n this.prevScrollPos! += pos;\n\n if (isWindow(eventTarget)) {\n eventTarget.scrollBy(x, y);\n } else {\n eventTarget.scrollLeft += x;\n eventTarget.scrollTop += y;\n }\n }\n public resize() {\n const scrollContainer = this.scrollContainer;\n const horizontal = this.options.horizontal;\n const scrollContainerRect = scrollContainer === document.body\n ? { top: 0, left: 0 }\n : scrollContainer.getBoundingClientRect();\n const containerRect = this.container.getBoundingClientRect();\n\n this.scrollOffset = (this.prevScrollPos! || 0) + (horizontal\n ? containerRect.left - scrollContainerRect.left\n : containerRect.top - scrollContainerRect.top);\n this.contentSize = horizontal ? scrollContainer.offsetWidth : scrollContainer.offsetHeight;\n }\n public destroy() {\n const container = this.container;\n\n this.eventTarget.removeEventListener(\"scroll\", this._onCheck);\n\n if (this._isCreateElement) {\n const scrollContainer = this.scrollContainer;\n\n const fragment = document.createDocumentFragment();\n const childNodes = toArray(container.childNodes);\n\n scrollContainer.removeChild(container);\n childNodes.forEach((childNode) => {\n fragment.appendChild(childNode);\n });\n scrollContainer.appendChild(fragment);\n } else if (this.options.container) {\n container.style.cssText = this._orgCSSText;\n }\n }\n private _init() {\n const {\n container: containerOption,\n containerTag,\n horizontal,\n } = this.options;\n const wrapper = this.wrapper;\n let scrollContainer = wrapper;\n let container = wrapper;\n let containerCSSText = \"\";\n\n if (!containerOption) {\n scrollContainer = document.body;\n containerCSSText = container.style.cssText;\n } else {\n if (containerOption instanceof HTMLElement) {\n // Container that already exists\n container = containerOption;\n } else if (containerOption === true) {\n // Create Container\n container = document.createElement(containerTag) as HTMLElement;\n\n container.style.position = \"relative\";\n container.className = CONTAINER_CLASS_NAME;\n const childNodes = toArray(scrollContainer.childNodes);\n\n childNodes.forEach((childNode) => {\n container.appendChild(childNode);\n });\n scrollContainer.appendChild(container);\n\n this._isCreateElement = true;\n } else {\n // Find Container by Selector\n container = scrollContainer.querySelector(containerOption) as HTMLElement;\n }\n containerCSSText = container.style.cssText;\n\n const style = scrollContainer.style;\n\n [style.overflowX, style.overflowY] = horizontal ? [\"scroll\", \"hidden\"] : [\"hidden\", \"scroll\"];\n\n if (horizontal) {\n container.style.height = \"100%\";\n }\n }\n const eventTarget = scrollContainer === document.body ? window : scrollContainer;\n\n eventTarget.addEventListener(\"scroll\", this._onCheck);\n this._orgCSSText = containerCSSText;\n this.container = container;\n this.scrollContainer = scrollContainer;\n this.eventTarget = eventTarget;\n this.resize();\n this.setScrollPos(this.getOrgScrollPos());\n }\n private _onCheck = () => {\n const prevScrollPos = this.getScrollPos();\n const nextScrollPos = this.getOrgScrollPos();\n\n this.setScrollPos(nextScrollPos);\n\n if (prevScrollPos === null || (this._isScrollIssue && nextScrollPos === 0) || prevScrollPos === nextScrollPos) {\n nextScrollPos && (this._isScrollIssue = false);\n return;\n }\n this._isScrollIssue = false;\n this.trigger(new ComponentEvent(\"scroll\", {\n direction: prevScrollPos < nextScrollPos ? \"end\" : \"start\",\n scrollPos: nextScrollPos,\n relativeScrollPos: this.getRelativeScrollPos(),\n }));\n }\n}\n","import Component, { ComponentEvent } from \"@egjs/component\";\nimport {\n ContainerManager,\n DEFAULT_GRID_OPTIONS,\n Properties,\n RenderOptions,\n MOUNT_STATE,\n OnContentError,\n ItemRenderer,\n GridItem,\n ResizeWatcher,\n} from \"@egjs/grid\";\nimport {\n DIRECTION,\n GROUP_TYPE,\n INFINITEGRID_EVENTS, INFINITEGRID_PROPERTY_TYPES,\n ITEM_TYPE, STATUS_TYPE,\n} from \"./consts\";\nimport { GroupManager } from \"./GroupManager\";\nimport {\n Infinite,\n OnInfiniteChange,\n OnInfiniteRequestAppend,\n OnInfiniteRequestPrepend,\n} from \"./Infinite\";\nimport { InfiniteGridItem, InfiniteGridItemStatus } from \"./InfiniteGridItem\";\nimport { OnRendererUpdated } from \"./Renderer/Renderer\";\nimport { GridRendererItem, VanillaGridRenderer } from \"./Renderer/VanillaGridRenderer\";\nimport { ScrollManager } from \"./ScrollManager\";\nimport {\n InfiniteGridEvents, InfiniteGridGroup,\n InfiniteGridInsertedItems, InfiniteGridItemInfo,\n InfiniteGridOptions,\n InfiniteGridStatus,\n InsertedPlaceholdersResult,\n OnPickedRenderComplete,\n OnRequestInsert,\n OnChangeScroll,\n} from \"./types\";\nimport {\n InfiniteGridGetterSetter, toArray, convertInsertedItems, findIndex,\n findLastIndex, isString,\n} from \"./utils\";\n\n\n/**\n * A module used to arrange items including content infinitely according to layout type. With this module, you can implement various layouts composed of different items whose sizes vary. It guarantees performance by maintaining the number of DOMs the module is handling under any circumstance\n * @ko 콘í…ì¸ ê°€ 있는 ì•„ì´í…œì„ ë ˆì´ì•„웃 íƒ€ìž…ì— ë”°ë¼ ë¬´í•œìœ¼ë¡œ 배치하는 모듈. 다양한 í¬ê¸°ì˜ ì•„ì´í…œì„ 다양한 ë ˆì´ì•„웃으로 ë°°ì¹˜í• ìˆ˜ 있다. ì•„ì´í…œì˜ 개수가 ê³„ì† ëŠ˜ì–´ë‚˜ë„ ëª¨ë“ˆì´ ì²˜ë¦¬í•˜ëŠ” DOMì˜ ê°œìˆ˜ë¥¼ ì¼ì •í•˜ê²Œ ìœ ì§€í•´ 최ì ì˜ ì„±ëŠ¥ì„ ë³´ìž¥í•œë‹¤\n * @extends Component\n * @support {\"ie\": \"9+(with polyfill)\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"4.X+\"}\n * @example\n```html\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>\nimport { MasonryInfiniteGrid } from \"@egjs/infinitegrid\";\nvar some = new MasonryInfiniteGrid(\"#grid\").on(\"renderComplete\", function(e) {\n // ...\n});\n// If you already have items in the container, call \"layout\" method.\nsome.renderItems();\n</script>\n```\n */\n@InfiniteGridGetterSetter\nclass InfiniteGrid<Options extends InfiniteGridOptions = InfiniteGridOptions> extends Component<InfiniteGridEvents> {\n public static defaultOptions = {\n ...DEFAULT_GRID_OPTIONS,\n container: false,\n containerTag: \"div\",\n renderer: null,\n threshold: 100,\n useRecycle: true,\n } as Required<InfiniteGridOptions>;\n public static propertyTypes = INFINITEGRID_PROPERTY_TYPES;\n protected wrapperElement: HTMLElement;\n protected scrollManager: ScrollManager;\n protected itemRenderer: ItemRenderer;\n protected containerManager: ContainerManager;\n protected watcher: ResizeWatcher;\n protected infinite: Infinite;\n protected groupManager: GroupManager;\n protected options: Required<Options>;\n private _waitType: \"\" | \"start\" | \"end\" = \"\";\n /**\n * @param - A base element for a module <ko>ëª¨ë“ˆì„ ì ìš©í• ê¸°ì¤€ 엘리먼트</ko>\n * @param - The option object of the InfiniteGrid module <ko>eg.InfiniteGrid ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n */\n constructor(wrapper: HTMLElement | string, options: Options) {\n super();\n this.options = {\n ...((this.constructor as typeof InfiniteGrid).defaultOptions as Required<Options>),\n renderer: new VanillaGridRenderer().on(\"requestUpdate\", () => this._render()),\n ...options,\n };\n\n const {\n gridConstructor,\n containerTag,\n container,\n renderer,\n threshold,\n useRecycle,\n ...gridOptions\n } = this.options;\n // options.container === false, wrapper = container, scrollContainer = document.body\n // options.container === true, wrapper = scrollContainer, container = wrapper's child\n // options.container === string,\n const {\n horizontal,\n attributePrefix,\n useTransform,\n percentage,\n isConstantSize,\n isEqualSize,\n autoResize,\n useResizeObserver,\n resizeDebounce,\n maxResizeDebounce,\n } = gridOptions;\n const wrapperElement = isString(wrapper) ? document.querySelector(wrapper) as HTMLElement : wrapper;\n const scrollManager = new ScrollManager(wrapperElement, {\n container,\n containerTag,\n horizontal,\n }).on({\n scroll: this._onScroll,\n });\n const containerElement = scrollManager.getContainer();\n const containerManager = new ContainerManager(containerElement, {\n horizontal,\n autoResize: false,\n });\n const watcher = new ResizeWatcher(wrapperElement, {\n resizeDebounce,\n maxResizeDebounce,\n useWindowResize: autoResize,\n useResizeObserver: autoResize && useResizeObserver,\n watchChangedRect: useResizeObserver ? (horizontal ? \"height\" : \"width\") : false,\n }).listen(this._onResize);\n const itemRenderer = new ItemRenderer({\n attributePrefix,\n horizontal,\n useTransform,\n percentage,\n isEqualSize,\n isConstantSize,\n });\n const infinite = new Infinite({\n useRecycle,\n threshold,\n }).on({\n \"change\": this._onChange,\n \"requestAppend\": this._onRequestAppend,\n \"requestPrepend\": this._onRequestPrepend,\n });\n\n infinite.setSize(scrollManager.getContentSize());\n const groupManager = new GroupManager(containerElement, {\n gridConstructor: gridConstructor!,\n externalItemRenderer: itemRenderer,\n externalContainerManager: containerManager,\n gridOptions,\n });\n\n groupManager.on({\n \"renderComplete\": this._onRenderComplete,\n \"contentError\": this._onContentError,\n });\n\n renderer!.setContainer(containerElement);\n renderer!.on(\"updated\", this._onRendererUpdated);\n\n this.watcher = watcher;\n this.itemRenderer = itemRenderer;\n this.groupManager = groupManager;\n this.wrapperElement = wrapperElement;\n this.scrollManager = scrollManager;\n this.containerManager = containerManager;\n this.infinite = infinite;\n\n this.containerManager.resize();\n }\n /**\n * Rearrange items to fit the grid and render them. When rearrange is complete, the `renderComplete` event is fired.\n * @ko gridì— ë§žê²Œ ì•„ì´í…œì„ ìž¬ë°°ì¹˜í•˜ê³ ë Œë”ë§ì„ 한다. 배치가 완료ë˜ë©´ `renderComplete` ì´ë²¤íŠ¸ê°€ ë°œìƒí•œë‹¤.\n * @param - Options for rendering. <ko>ë Œë”ë§ì„ 하기 위한 옵션.</ko>\n * @example\n * ```ts\n * import { MasonryInfiniteGrid } from \"@egjs/infinitegrid\";\n * const grid = new MasonryInfiniteGrid();\n *\n * grid.on(\"renderComplete\", e => {\n * console.log(e);\n * });\n * grid.renderItems();\n * ```\n */\n public renderItems(options: RenderOptions = {}) {\n this._renderItems(options);\n return this;\n }\n /**\n * Returns the wrapper element specified by the user.\n * @ko 컨테ì´ë„ˆ 엘리먼트를 반환한다.\n */\n public getWrapperElement() {\n return this.scrollManager.getWrapper();\n }\n /**\n * Returns the container element corresponding to the scroll area.\n * @ko 스í¬ë¡¤ ì˜ì—ì— í•´ë‹¹í•˜ëŠ” 컨테ì´ë„ˆ 엘리먼트를 반환한다.\n */\n public getScrollContainerElement() {\n return this.scrollManager.getScrollContainer();\n }\n /**\n * Returns the container element containing item elements.\n * @ko ì•„ì´í…œ ì—˜ë¦¬ë¨¼íŠ¸ë“¤ì„ ë‹´ê¸´ 컨테ì´ë„ˆ 엘리먼트를 반환한다.\n */\n public getContainerElement() {\n return this.scrollManager.getContainer();\n }\n /**\n * When items change, it synchronizes and renders items.\n * @ko itemsê°€ ë°”ë€ ê²½ìš° ë™ê¸°í™”를 í•˜ê³ ë Œë”ë§ì„ 한다.\n * @param - Options for rendering. <ko>ë Œë”ë§ì„ 하기 위한 옵션.</ko>\n */\n public syncItems(items: InfiniteGridItemInfo[]): this {\n this.groupManager.syncItems(items);\n this._syncGroups();\n\n return this;\n }\n /**\n * Change the currently visible groups.\n * @ko 현재 ë³´ì´ëŠ” ê·¸ë£¹ë“¤ì„ ë°”ê¾¼ë‹¤.\n * @param - first index of visible groups. <ko>ë³´ì´ëŠ” ê·¸ë£¹ì˜ ì²«ë²ˆì§¸ index.</ko>\n * @param - last index of visible groups. <ko>ë³´ì´ëŠ” ê·¸ë£¹ì˜ ë§ˆì§€ë§‰ index.</ko>\n * @param - Whether the first rendering has already been done. <ko>첫 ë Œë”ë§ì´ ì´ë¯¸ ë˜ì–´ìžˆëŠ”지 여부.</ko>\n */\n public setCursors(startCursor: number, endCursor: number, useFirstRender?: boolean): this {\n this.groupManager.setCursors(startCursor, endCursor);\n this.infinite.setCursors(startCursor, endCursor);\n\n if (useFirstRender) {\n this._syncItems();\n } else {\n this._update();\n this._checkEndLoading();\n }\n return this;\n }\n /**\n * Returns the first index of visible groups.\n * @ko ë³´ì´ëŠ” ê·¸ë£¹ë“¤ì˜ ì²«ë²ˆì§¸ index를 반환한다.\n */\n public getStartCursor(): number {\n return this.infinite.getStartCursor();\n }\n /**\n * Returns the last index of visible groups.\n * @ko ë³´ì´ëŠ” ê·¸ë£¹ë“¤ì˜ ë§ˆì§€ë§‰ index를 반환한다.\n */\n public getEndCursor(): number {\n return this.infinite.getEndCursor();\n }\n /**\n * Add items at the bottom(right) of the grid.\n * @ko ì•„ì´í…œë“¤ì„ grid 아래(오른쪽)ì— ì¶”ê°€í•œë‹¤.\n * @param - items to be added <ko>ì¶”ê°€í• ì•„ì´í…œë“¤</ko>\n * @param - The group key to be configured in items. It is automatically generated by default. <ko>ì¶”ê°€í• ì•„ì´í…œì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n * @return - An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n * @example\n * ```js\n * ig.append(`<div class=\"item\">test1</div><div class=\"item\">test2</div>`);\n * ig.append([`<div class=\"item\">test1</div>`, `<div class=\"item\">test2</div>`]);\n * ig.append([HTMLElement1, HTMLElement2]);\n * ```\n */\n public append(items: InfiniteGridInsertedItems, groupKey?: string | number): this {\n return this.insert(-1, items, groupKey);\n }\n /**\n * Add items at the top(left) of the grid.\n * @ko ì•„ì´í…œë“¤ì„ grid 위(왼쪽)ì— ì¶”ê°€í•œë‹¤.\n * @param - items to be added <ko>ì¶”ê°€í• ì•„ì´í…œë“¤</ko>\n * @param - The group key to be configured in items. It is automatically generated by default. <ko>ì¶”ê°€í• ì•„ì´í…œì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n * @return - An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n * @example\n * ```ts\n * ig.prepend(`<div class=\"item\">test1</div><div class=\"item\">test2</div>`);\n * ig.prepend([`<div class=\"item\">test1</div>`, `<div class=\"item\">test2</div>`]);\n * ig.prepend([HTMLElement1, HTMLElement2]);\n * ```\n */\n public prepend(items: InfiniteGridInsertedItems, groupKey?: string | number): this {\n return this.insert(0, items, groupKey);\n }\n /**\n * Add items to a specific index.\n * @ko ì•„ì´í…œë“¤ì„ íŠ¹ì • indexì— ì¶”ê°€í•œë‹¤.\n * @param - index to add <ko>추가하기 위한 index</ko>\n * @param - items to be added <ko>ì¶”ê°€í• ì•„ì´í…œë“¤</ko>\n * @param - The group key to be configured in items. It is automatically generated by default. <ko>ì¶”ê°€í• ì•„ì´í…œì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n * @return - An instance of a module itself<ko>모듈 ìžì‹ ì˜ ì¸ìŠ¤í„´ìŠ¤</ko>\n * @example\n * ```ts\n * ig.insert(2, `<div class=\"item\">test1</div><div class=\"item\">test2</div>`);\n * ig.insert(3, [`<div class=\"item\">test1</div>`, `<div class=\"item\">test2</div>`]);\n * ig.insert(4, [HTMLElement1, HTMLElement2]);\n * ```\n */\n public insert(index: number, items: InfiniteGridInsertedItems, groupKey?: string | number): this {\n const nextItemInfos: InfiniteGridItemInfo[] = this.groupManager.getGroupItems();\n const itemInfos = convertInsertedItems(items, groupKey);\n\n if (index === -1) {\n nextItemInfos.push(...itemInfos);\n } else {\n nextItemInfos.splice(index, 0, ...itemInfos);\n }\n return this.syncItems(nextItemInfos);\n }\n /**\n * 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 * @ko ì•„ì´í…œì˜ 위치 ì •ë³´ 등 ëª¨ë“ˆì˜ í˜„ìž¬ ìƒíƒœ ì •ë³´ë¥¼ 반환한다. ì´ ë©”ì„œë“œê°€ 반환한 ì •ë³´ë¥¼ ì €ìž¥í•´ ë‘었다가 setStatus() 메서드로 ë³µì›í• 수 있다\n * @param - STATUS_TYPE.NOT_REMOVE = Get all information about items. STATUS_TYPE.REMOVE_INVISIBLE_ITEMS = Get information on visible items only. STATUS_TYPE.MINIMIZE_INVISIBLE_ITEMS = Compress invisible items. You can replace it with a placeholder. STATUS_TYPE.MINIMIZE_INVISIBLE_GROUPS = Compress invisible groups. <ko> STATUS_TYPE.NOT_REMOVE = ëª¨ë“ ì•„ì´í…œë“¤ì˜ ì •ë³´ë¥¼ ê°€ì ¸ì˜¨ë‹¤. STATUS_TYPE.REMOVE_INVISIBLE_ITEMS = ë³´ì´ëŠ” ì•„ì´í…œë“¤ì˜ ì •ë³´ë§Œ ê°€ì ¸ì˜¨ë‹¤. STATUS_TYPE.MINIMIZE_INVISIBLE_ITEMS = 안보ì´ëŠ” ì•„ì´í…œë“¤ì„ 압축한다. placeholderë¡œ 대체가 가능하다. STATUS_TYPE.MINIMIZE_INVISIBLE_GROUPS = 안보ì´ëŠ” ê·¸ë£¹ì„ ì••ì¶•í•œë‹¤.</ko>\n */\n public getStatus(type?: STATUS_TYPE): InfiniteGridStatus {\n return {\n containerManager: this.containerManager.getStatus(),\n itemRenderer: this.itemRenderer.getStatus(),\n groupManager: this.groupManager.getGroupStatus(type),\n scrollManager: this.scrollManager.getStatus(),\n };\n }\n\n /**\n * You can set placeholders to restore status or wait for items to be added.\n * @ko status 복구 ë˜ëŠ” ì•„ì´í…œ 추가 대기를 위한 placeholder를 ì„¤ì •í• ìˆ˜ 있다.\n * @param - The placeholder status. <ko>placeholderì˜ status</ko>\n */\n public setPlaceholder(info: Partial<InfiniteGridItemStatus> | null): this {\n this.groupManager.setPlaceholder(info);\n return this;\n }\n /**\n * You can set placeholders to restore status or wait for items to be added.\n * @ko status 복구 ë˜ëŠ” ì•„ì´í…œ 추가 대기를 위한 placeholder를 ì„¤ì •í• ìˆ˜ 있다.\n * @param - The placeholder status. <ko>placeholderì˜ status</ko>\n */\n public setLoading(info: Partial<InfiniteGridItemStatus> | null): this {\n this.groupManager.setLoading(info);\n return this;\n }\n /**\n * Add the placeholder at the end.\n * @ko placeholderë“¤ì„ ë§ˆì§€ë§‰ì— ì¶”ê°€í•œë‹¤.\n * @param - Items that correspond to placeholders. If it is a number, it duplicates the number of copies. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œë“¤. 숫ìžë©´ ê°¯ìˆ˜ë§Œí¼ ë³µì œë¥¼ 한다.</ko>\n * @param - The group key to be configured in items. It is automatically generated by default. <ko>ì¶”ê°€í• ì•„ì´í…œì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n */\n public appendPlaceholders(\n items: number | InfiniteGridItemStatus[],\n groupKey?: string | number,\n ): InsertedPlaceholdersResult {\n const result = this.groupManager.appendPlaceholders(items, groupKey);\n\n this._syncGroups(true);\n return {\n ...result,\n remove: () => {\n this.removePlaceholders({ groupKey: result.group.groupKey });\n },\n };\n }\n /**\n * Add the placeholder at the start.\n * @ko placeholderë“¤ì„ ì²˜ìŒì— 추가한다.\n * @param - Items that correspond to placeholders. If it is a number, it duplicates the number of copies. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œë“¤. 숫ìžë©´ ê°¯ìˆ˜ë§Œí¼ ë³µì œë¥¼ 한다.</ko>\n * @param - The group key to be configured in items. It is automatically generated by default. <ko>ì¶”ê°€í• ì•„ì´í…œì— ì„¤ì •í• ê·¸ë£¹ 키. ìƒëžµí•˜ë©´ ê°’ì´ ìžë™ìœ¼ë¡œ ìƒì„±ëœë‹¤.</ko>\n */\n public prependPlaceholders(\n items: number | InfiniteGridItemStatus[],\n groupKey?: string | number,\n ): InsertedPlaceholdersResult {\n const result = this.groupManager.prependPlaceholders(items, groupKey);\n\n this._syncGroups(true);\n return {\n ...result,\n remove: () => {\n this.removePlaceholders({ groupKey: result.group.groupKey });\n },\n };\n }\n\n /**\n * Remove placeholders\n * @ko placeholderë“¤ì„ ì‚ì œí•œë‹¤.\n * @param type - Remove the placeholders corresponding to the groupkey. When \"start\" or \"end\", remove all placeholders in that direction. <ko>groupkeyì— í•´ë‹¹í•˜ëŠ” placeholderë“¤ì„ ì‚ì œí•œë‹¤. \"start\" ë˜ëŠ” \"end\" ì¼ ë•Œ 해당 ë°©í–¥ì˜ ëª¨ë“ placeholderë“¤ì„ ì‚ì œí•œë‹¤.</ko>\n */\n public removePlaceholders(type: \"start\" | \"end\" | { groupKey: string | number }) {\n this.groupManager.removePlaceholders(type);\n this._syncGroups(true);\n }\n\n /**\n * Sets the status of the InfiniteGrid module with the information returned through a call to the getStatus() method.\n * @ko getStatus() 메서드가 ì €ìž¥í•œ ì •ë³´ë¡œ InfiniteGrid ëª¨ë“ˆì˜ ìƒíƒœë¥¼ ì„¤ì •í•œë‹¤.\n * @param - status object of the InfiniteGrid module. <ko>InfiniteGrid ëª¨ë“ˆì˜ status ê°ì²´.</ko>\n * @param - Whether the first rendering has already been done. <ko>첫 ë Œë”ë§ì´ ì´ë¯¸ ë˜ì–´ìžˆëŠ”지 여부.</ko>\n */\n public setStatus(status: InfiniteGridStatus, useFirstRender?: boolean): this {\n this.itemRenderer.setStatus(status.itemRenderer);\n this.containerManager.setStatus(status.containerManager);\n this.scrollManager.setStatus(status.scrollManager);\n const groupManager = this.groupManager;\n const prevInlineSize = this.containerManager.getInlineSize();\n\n groupManager.setGroupStatus(status.groupManager);\n this._syncInfinite();\n this.infinite.setCursors(groupManager.getStartCursor(), groupManager.getEndCursor());\n\n this._getRenderer().updateKey();\n\n const state = {\n isResize: this.containerManager.getInlineSize() !== prevInlineSize,\n isRestore: true,\n };\n\n if (useFirstRender) {\n this._syncItems(state);\n } else {\n this._update(state);\n }\n return this;\n }\n /**\n * Removes the group corresponding to index.\n * @ko indexì— í•´ë‹¹í•˜ëŠ” ê·¸ë£¹ì„ ì œê±° 한다.\n */\n public removeGroupByIndex(index: number): this {\n const nextGroups = this.groupManager.getGroups();\n\n return this.removeGroupByKey(nextGroups[index].groupKey);\n }\n /**\n * Removes the group corresponding to key.\n * @ko keyì— í•´ë‹¹í•˜ëŠ” ê·¸ë£¹ì„ ì œê±° 한다.\n */\n public removeGroupByKey(key: number | string): this {\n const nextItemInfos = this.groupManager.getItems();\n\n const firstIndex = findIndex(nextItemInfos, (item) => item.groupKey === key);\n const lastIndex = findLastIndex(nextItemInfos, (item) => item.groupKey === key);\n\n if (firstIndex === -1) {\n return this;\n }\n nextItemInfos.splice(firstIndex, lastIndex - firstIndex + 1);\n return this.syncItems(nextItemInfos);\n }\n /**\n * Removes the item corresponding to index.\n * @ko indexì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œì„ ì œê±° 한다.\n */\n public removeByIndex(index: number): this {\n const nextItemInfos = this.getItems(true);\n\n nextItemInfos.splice(index, 1);\n\n return this.syncItems(nextItemInfos);\n }\n /**\n * Removes the item corresponding to key.\n * @ko keyì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œì„ ì œê±° 한다.\n */\n public removeByKey(key: string | number): this {\n const nextItemInfos = this.getItems(true);\n const index = findIndex(nextItemInfos, (item) => item.key === key);\n\n return this.removeByIndex(index);\n }\n /**\n * Update the size of the items and render them.\n * @ko ì•„ì´í…œë“¤ì˜ 사ì´ì¦ˆë¥¼ ì—…ë°ì´íŠ¸í•˜ê³ ë Œë”ë§ì„ 한다.\n * @param - Items to be updated. <ko>ì—…ë°ì´íŠ¸í• ì•„ì´í…œë“¤.</ko>\n * @param - Options for rendering. <ko>ë Œë”ë§ì„ 하기 위한 옵션.</ko>\n */\n public updateItems(items?: InfiniteGridItem[], options: RenderOptions = {}) {\n this.groupManager.updateItems(items, options);\n return this;\n }\n /**\n * Return all items of InfiniteGrid.\n * @ko InfiniteGridì˜ ëª¨ë“ ì•„ì´í…œë“¤ì„ 반환한다.\n * @param - Whether to include items corresponding to placeholders. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œë“¤ì„ í¬í•¨í• 지 여부.</ko>\n */\n public getItems(includePlaceholders?: boolean): InfiniteGridItem[] {\n return this.groupManager.getGroupItems(includePlaceholders);\n }\n /**\n * Return visible items of InfiniteGrid.\n * @ko InfiniteGridì˜ ë³´ì´ëŠ” ì•„ì´í…œë“¤ì„ 반환한다.\n * @param - Whether to include items corresponding to placeholders. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œë“¤ì„ í¬í•¨í• 지 여부.</ko>\n */\n public getVisibleItems(includePlaceholders?: boolean): InfiniteGridItem[] {\n return this.groupManager.getVisibleItems(includePlaceholders);\n }\n\n /**\n * Return rendering items of InfiniteGrid.\n * @ko InfiniteGridì˜ ë Œë”ë§ ì•„ì´í…œë“¤ì„ 반환한다.\n */\n public getRenderingItems(): InfiniteGridItem[] {\n return this.groupManager.getRenderingItems();\n }\n /**\n * Return all groups of InfiniteGrid.\n * @ko InfiniteGridì˜ ëª¨ë“ ê·¸ë£¹ë“¤ì„ ë°˜í™˜í•œë‹¤.\n * @param - Whether to include groups corresponding to placeholders. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ê·¸ë£¹ë“¤ì„ í¬í•¨í• 지 여부.</ko>\n */\n public getGroups(includePlaceholders?: boolean): InfiniteGridGroup[] {\n return this.groupManager.getGroups(includePlaceholders);\n }\n /**\n * Return visible groups of InfiniteGrid.\n * @ko InfiniteGridì˜ ë³´ì´ëŠ” ê·¸ë£¹ë“¤ì„ ë°˜í™˜í•œë‹¤.\n * @param - Whether to include groups corresponding to placeholders. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ê·¸ë£¹ë“¤ì„ í¬í•¨í• 지 여부.</ko>\n */\n public getVisibleGroups(includePlaceholders?: boolean): InfiniteGridGroup[] {\n return this.groupManager.getVisibleGroups(includePlaceholders);\n }\n /**\n * Set to wait to request data.\n * @ko ë°ì´í„°ë¥¼ ìš”ì²í•˜ê¸° 위해 대기 ìƒíƒœë¡œ ì„¤ì •í•œë‹¤.\n * @param direction - direction in which data will be added. <ko>ë°ì´í„°ë¥¼ 추가하기 위한 ë°©í–¥.</ko>\n */\n public wait(direction: \"start\" | \"end\" = DIRECTION.END) {\n this._waitType = direction;\n this._checkStartLoading(direction);\n }\n /**\n * When the data request is complete, it is set to ready state.\n * @ko ë°ì´í„° ìš”ì²ì´ ë났다면 준비 ìƒíƒœë¡œ ì„¤ì •í•œë‹¤.\n */\n public ready() {\n this._waitType = \"\";\n }\n /**\n * Returns whether it is set to wait to request data.\n * @ko ë°ì´í„°ë¥¼ ìš”ì²í•˜ê¸° 위해 대기 ìƒíƒœë¡œ ì„¤ì •ë˜ì–´ 있는지 여부를 반환한다.\n */\n public isWait() {\n return !!this._waitType;\n }\n /**\n * Releases the instnace and events and returns the CSS of the container and elements.\n * @ko ì¸ìŠ¤í„´ìŠ¤ì™€ ì´ë²¤íŠ¸ë¥¼ í•´ì œí•˜ê³ ì»¨í…Œì´ë„ˆì™€ ì—˜ë¦¬ë¨¼íŠ¸ë“¤ì˜ CSS를 ë˜ëŒë¦°ë‹¤.\n */\n public destroy(): void {\n this.off();\n this.groupManager.destroy();\n this.scrollManager.destroy();\n this.infinite.destroy();\n }\n\n private _getRenderer() {\n return this.options.renderer!;\n }\n private _getRendererItems() {\n return this.getRenderingItems().map((item) => {\n return {\n element: item.element,\n key: `${item.type}_${item.key}`,\n orgItem: item,\n };\n });\n }\n private _syncItems(state?: Record<string, any>): void {\n this._getRenderer().syncItems(this._getRendererItems(), state);\n }\n private _render(state?: Record<string, any>): void {\n this._getRenderer().render(this._getRendererItems(), state);\n }\n private _update(state: Record<string, any> = {}): void {\n this._getRenderer().update(state);\n }\n private _resizeScroll() {\n const scrollManager = this.scrollManager;\n\n scrollManager.resize();\n\n this.infinite.setSize(scrollManager.getContentSize());\n }\n private _syncGroups(isUpdate?: boolean) {\n const infinite = this.infinite;\n\n this._syncInfinite();\n this.groupManager.setCursors(infinite.getStartCursor(), infinite.getEndCursor());\n if (isUpdate) {\n this._update();\n } else {\n this._render();\n }\n }\n private _syncInfinite() {\n this.infinite.syncItems(this.getGroups(true).map(({ groupKey, grid, type }) => {\n const outlines = grid.getOutlines();\n\n return {\n key: groupKey,\n isVirtual: type === GROUP_TYPE.VIRTUAL,\n startOutline: outlines.start,\n endOutline: outlines.end,\n };\n }));\n }\n private _scroll() {\n this.infinite.scroll(this.scrollManager.getRelativeScrollPos());\n }\n private _onScroll = ({ direction, scrollPos, relativeScrollPos }: OnChangeScroll): void => {\n this._scroll();\n /**\n * This event is fired when scrolling.\n * @ko 스í¬ë¡¤í•˜ë©´ ë°œìƒí•˜ëŠ” ì´ë²¤íŠ¸ì´ë‹¤.\n * @event InfiniteGrid#changeScroll\n * @param {InfiniteGrid.OnChangeScroll} e - The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n */\n this.trigger(new ComponentEvent(INFINITEGRID_EVENTS.CHANGE_SCROLL, {\n direction,\n scrollPos,\n relativeScrollPos,\n }));\n }\n\n private _onChange = (e: OnInfiniteChange): void => {\n this.setCursors(e.nextStartCursor, e.nextEndCursor);\n }\n private _onRendererUpdated = (e: OnRendererUpdated<GridRendererItem>): void => {\n if (!e.isChanged) {\n this._checkEndLoading();\n this._scroll();\n return;\n }\n const renderedItems = e.items;\n\n const {\n added,\n removed,\n prevList,\n list,\n } = e.diffResult;\n\n removed.forEach((index) => {\n const orgItem = prevList[index].orgItem;\n\n if (orgItem.mountState !== MOUNT_STATE.UNCHECKED) {\n orgItem.mountState = MOUNT_STATE.UNMOUNTED;\n }\n });\n\n renderedItems.forEach((item) => {\n // set grid element\n const gridItem = item.orgItem;\n\n gridItem.element = item.element as HTMLElement;\n });\n\n const horizontal = this.options.horizontal;\n const addedItems = added.map((index) => {\n const gridItem = list[index].orgItem;\n const element = gridItem.element!;\n\n if (gridItem.type === ITEM_TYPE.VIRTUAL) {\n const cssRect = { ...gridItem.cssRect };\n const rect = gridItem.rect;\n\n if (!cssRect.width && rect.width) {\n cssRect.width = rect.width;\n }\n if (!cssRect.height && rect.height) {\n cssRect.height = rect.height;\n }\n // virtual item\n return new GridItem(horizontal!, {\n element,\n cssRect,\n });\n }\n return gridItem;\n });\n\n const {\n isRestore,\n isResize,\n } = e.state;\n\n this.itemRenderer.renderItems(addedItems);\n\n if (isRestore) {\n this._onRenderComplete({\n mounted: added.map((index) => list[index].orgItem),\n updated: [],\n isResize: false,\n direction: this.defaultDirection,\n });\n }\n if (!isRestore || isResize || e.isItemChanged) {\n this.groupManager.renderItems();\n }\n }\n\n private _onResize = () => {\n this.containerManager.resize();\n this._renderItems({ useResize: true }, true);\n }\n\n private _onRequestAppend = (e: OnRequestInsert): void => {\n /**\n * The event is fired when scrolling reaches the end or when data for a virtual group is required.\n * @ko 스í¬ë¡¤ì´ ëì— ë„달하거나 virtual ê·¸ë£¹ì— ëŒ€í•œ ë°ì´í„°ê°€ 필요한 경우 ì´ë²¤íŠ¸ê°€ ë°œìƒí•œë‹¤.\n * @event InfiniteGrid#requestAppend\n * @param {InfiniteGrid.OnRequestAppend} e - The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n */\n this._onRequestInsert(DIRECTION.END, INFINITEGRID_EVENTS.REQUEST_APPEND, e);\n }\n\n private _onRequestPrepend = (e: OnInfiniteRequestPrepend): void => {\n /**\n * The event is fired when scrolling reaches the start or when data for a virtual group is required.\n * @ko 스í¬ë¡¤ì´ ëì— ë„달하거나 virtual ê·¸ë£¹ì— ëŒ€í•œ ë°ì´í„°ê°€ 필요한 경우 ì´ë²¤íŠ¸ê°€ ë°œìƒí•œë‹¤.\n * @event InfiniteGrid#requestPrepend\n * @param {InfiniteGrid.OnRequestPrepend} e - The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n */\n this._onRequestInsert(DIRECTION.START, INFINITEGRID_EVENTS.REQUEST_PREPEND, e);\n }\n\n private _onRequestInsert(\n direction: \"start\" | \"end\",\n eventType: \"requestAppend\" | \"requestPrepend\",\n e: OnInfiniteRequestAppend | OnInfiniteRequestPrepend,\n ) {\n\n if (this._waitType) {\n this._checkStartLoading(this._waitType);\n return;\n }\n this.trigger(new ComponentEvent(eventType, {\n groupKey: e.key,\n nextGroupKey: e.nextKey,\n isVirtual: e.isVirtual,\n wait: () => {\n this.wait(direction);\n },\n ready: () => {\n this.ready();\n },\n }));\n }\n\n private _onContentError = ({ element, target, item, update }: OnContentError): void => {\n /**\n * The event is fired when scrolling reaches the start or when data for a virtual group is required.\n * @ko 스í¬ë¡¤ì´ ëì— ë„달하거나 virtual ê·¸ë£¹ì— ëŒ€í•œ ë°ì´í„°ê°€ 필요한 경우 ì´ë²¤íŠ¸ê°€ ë°œìƒí•œë‹¤.\n * @event InfiniteGrid#contentError\n * @param {InfiniteGrid.OnContentError} e - The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n */\n this.trigger(new ComponentEvent(INFINITEGRID_EVENTS.CONTENT_ERROR, {\n element,\n target,\n item: item as InfiniteGridItem,\n update,\n remove: () => {\n this.removeByKey(item.key!);\n },\n }));\n }\n\n private _onRenderComplete = ({ isResize, mounted, updated, direction }: OnPickedRenderComplete): void => {\n const infinite = this.infinite;\n const prevRenderedGroups = infinite.getRenderedVisibleItems();\n const length = prevRenderedGroups.length;\n const isDirectionEnd = direction === DIRECTION.END;\n\n this._syncInfinite();\n\n if (length) {\n const prevStandardGroup = prevRenderedGroups[isDirectionEnd ? 0 : length - 1];\n const nextStandardGroup = infinite.getItemByKey(prevStandardGroup.key);\n const offset = isDirectionEnd\n ? Math.min(...nextStandardGroup.startOutline) - Math.min(...prevStandardGroup.startOutline)\n : Math.max(...nextStandardGroup.endOutline) - Math.max(...prevStandardGroup.endOutline);\n\n this.scrollManager.scrollBy(offset);\n }\n\n /**\n * This event is fired when the InfiniteGrid has completed rendering.\n * @ko InfiniteGridê°€ ë Œë”ë§ì´ 완료ëì„ ë•Œ ì´ë²¤íŠ¸ê°€ ë°œìƒí•œë‹¤.\n * @event InfiniteGrid#renderComplete\n * @param {InfiniteGrid.OnRenderComplete} e - The object of data to be sent to an event <ko>ì´ë²¤íŠ¸ì— ì „ë‹¬ë˜ëŠ” ë°ì´í„° ê°ì²´</ko>\n */\n this.trigger(new ComponentEvent(INFINITEGRID_EVENTS.RENDER_COMPLETE, {\n isResize,\n direction,\n mounted: (mounted as InfiniteGridItem[]).filter((item) => item.type !== ITEM_TYPE.LOADING),\n updated: (updated as InfiniteGridItem[]).filter((item) => item.type !== ITEM_TYPE.LOADING),\n startCursor: this.getStartCursor(),\n endCursor: this.getEndCursor(),\n items: this.getVisibleItems(true),\n groups: this.getVisibleGroups(true),\n }));\n\n if (this.groupManager.shouldRerenderItems()) {\n this._update();\n } else {\n this._checkEndLoading();\n this._scroll();\n }\n }\n private _renderItems(options: RenderOptions = {}, isTrusted?: boolean) {\n if (!isTrusted && options.useResize) {\n this.watcher.resize();\n this.containerManager.resize();\n }\n this._resizeScroll();\n if (!this.getRenderingItems().length) {\n const children = toArray(this.getContainerElement().children);\n if (children.length > 0) {\n // no items, but has children\n this.groupManager.syncItems(convertInsertedItems(children));\n this._syncInfinite();\n this.setCursors(0, 0, true);\n this._getRenderer().updated();\n } else {\n this.infinite.scroll(0);\n }\n return this;\n }\n if (!this.getVisibleGroups(true).length) {\n this.setCursors(0, 0);\n } else {\n this.groupManager.renderItems(options);\n }\n return this;\n }\n private _checkStartLoading(direction: \"start\" | \"end\") {\n const groupManager = this.groupManager;\n const infinite = this.infinite;\n\n if (\n !groupManager.getLoadingType()\n && infinite.isLoading(direction)\n && groupManager.startLoading(direction)\n && groupManager.hasLoadingItem()\n ) {\n this._update();\n }\n }\n private _checkEndLoading() {\n const groupManager = this.groupManager;\n const loadingType = this.groupManager.getLoadingType();\n\n if (\n loadingType\n && (!this._waitType || !this.infinite.isLoading(loadingType))\n && groupManager.endLoading()\n && groupManager.hasLoadingItem()\n ) {\n this._update();\n }\n }\n}\n\ninterface InfiniteGrid extends Properties<typeof InfiniteGrid> { }\n\nexport default InfiniteGrid;\n","import { MasonryGrid, MasonryGridOptions } from \"@egjs/grid\";\nimport InfiniteGrid from \"../InfiniteGrid\";\nimport { InfiniteGridOptions } from \"../types\";\nimport { InfiniteGridGetterSetter } from \"../utils\";\n\n/**\n * @typedef\n * @extends InfiniteGridOptions\n * @extends Grid.MasonryGrid.MasonryGridOptions\n */\nexport interface MasonryInfiniteGridOptions extends MasonryGridOptions, InfiniteGridOptions {\n}\n\n/**\n * MasonryInfiniteGrid is a grid that stacks items 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 item.\n * @ko MasonryInfiniteGrid는 ë²½ëŒì„ 쌓아 올린 모양처럼 ë™ì¼í•œ 너비를 가진 ì•„ì´í…œì„ 쌓는 ë ˆì´ì•„웃ì´ë‹¤. ëª¨ë“ ì´ë¯¸ì§€ì˜ 너비를 ë™ì¼í•œ í¬ê¸°ë¡œ ì¡°ì •í•˜ê³ , 가장 높ì´ê°€ ë‚®ì€ ì—´ì„ ì°¾ì•„ 새로운 ì´ë¯¸ì§€ë¥¼ 삽입한다. ë”°ë¼ì„œ ë°°ì¹˜ëœ ì•„ì´í…œ 사ì´ì— 빈 ê³µê°„ì´ ìƒê¸°ì§€ëŠ” 않지만 ë°°ì¹˜ëœ ë ˆì´ì•„ì›ƒì˜ ì•„ëž˜ìª½ì€ ìš¸í‰ë¶ˆí‰í•´ì§„다.\n * @param {HTMLElement | string} container - A base element for a module <ko>ëª¨ë“ˆì„ ì ìš©í• ê¸°ì¤€ 엘리먼트</ko>\n * @param {MasonryInfiniteGridOptions} options - The option object of the MasonryInfiniteGrid module <ko>MasonryInfiniteGrid ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n */\n@InfiniteGridGetterSetter\nexport class MasonryInfiniteGrid extends InfiniteGrid<MasonryInfiniteGridOptions> {\n public static propertyTypes = {\n ...InfiniteGrid.propertyTypes,\n ...MasonryGrid.propertyTypes,\n };\n public static defaultOptions: Required<MasonryInfiniteGridOptions> = {\n ...InfiniteGrid.defaultOptions,\n ...MasonryGrid.defaultOptions,\n gridConstructor: MasonryGrid,\n } as const;\n}\n","import { JustifiedGrid, JustifiedGridOptions } from \"@egjs/grid\";\nimport InfiniteGrid from \"../InfiniteGrid\";\nimport { InfiniteGridOptions } from \"../types\";\nimport { InfiniteGridGetterSetter } from \"../utils\";\n\n/**\n * @typedef\n * @extends InfiniteGridOptions\n * @extends Grid.JustifiedGrid.JustifiedGridOptions\n */\nexport interface JustifiedInfiniteGridOptions extends JustifiedGridOptions, InfiniteGridOptions {\n}\n\n/**\n * 'justified' is a printing term with the meaning that 'it fits in one row wide'. JustifiedInfiniteGrid is a grid that the item is filled up on the basis of a line given a size.\n * If 'data-grid-inline-offset' or 'data-grid-content-offset' are set for item element, the ratio is maintained except for the offset value.\n * If 'data-grid-maintained-target' is set for an element whose ratio is to be maintained, the item is rendered while maintaining the ratio of the element.\n * @ko 'justified'는 '1í–‰ì˜ ë„ˆë¹„ì— ë§žê²Œ ê¼ ë“¤ì–´ì°¬'ì´ë¼ëŠ” ì˜ë¯¸ë¥¼ 가진 ì¸ì‡„ 용어다. JustifiedInfiniteGrid는 ìš©ì–´ì˜ ì˜ë¯¸ëŒ€ë¡œ 너비가 주어진 사ì´ì¦ˆë¥¼ 기준으로 ì•„ì´í…œê°€ ê°€ë“ ì°¨ë„ë¡ ë°°ì¹˜í•˜ëŠ” Grid다.\n * ì•„ì´í…œ ì—˜ë¦¬ë¨¼íŠ¸ì— 'data-grid-inline-offset' ë˜ëŠ” 'data-grid-content-offset'를 ì„¤ì •í•˜ë©´ offset ê°’ì„ ì œì™¸í•˜ê³ ë¹„ìœ¨ì„ ìœ ì§€í•œë‹¤.\n * ë¹„ìœ¨ì„ ìœ ì§€í•˜ê³ ì‹¶ì€ ì—˜ë¦¬ë¨¼íŠ¸ì— 'data-grid-maintained-target'ì„ ì„¤ì •í•œë‹¤ë©´ 해당 ì—˜ë¦¬ë¨¼íŠ¸ì˜ ë¹„ìœ¨ì„ ìœ ì§€í•˜ë©´ì„œ ì•„ì´í…œì´ ë Œë”ë§ì´ ëœë‹¤.\n * @param {HTMLElement | string} container - A base element for a module <ko>ëª¨ë“ˆì„ ì ìš©í• ê¸°ì¤€ 엘리먼트</ko>\n * @param {JustifiedInfiniteGridOptions} options - The option object of the JustifiedInfiniteGrid module <ko>JustifiedInfiniteGrid ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n */\n@InfiniteGridGetterSetter\nexport class JustifiedInfiniteGrid extends InfiniteGrid<JustifiedInfiniteGridOptions> {\n public static propertyTypes = {\n ...InfiniteGrid.propertyTypes,\n ...JustifiedGrid.propertyTypes,\n };\n public static defaultOptions: Required<JustifiedInfiniteGridOptions> = {\n ...InfiniteGrid.defaultOptions,\n ...JustifiedGrid.defaultOptions,\n gridConstructor: JustifiedGrid,\n } as const;\n}\n","import { FrameGrid, FrameGridOptions } from \"@egjs/grid\";\nimport InfiniteGrid from \"../InfiniteGrid\";\nimport { InfiniteGridOptions } from \"../types\";\nimport { InfiniteGridGetterSetter } from \"../utils\";\n\n/**\n * @typedef\n * @extends InfiniteGridOptions\n * @extends Grid.FrameGrid.FrameGridOptions\n */\nexport interface FrameInfiniteGridOptions extends FrameGridOptions, InfiniteGridOptions {\n}\n\n/**\n * 'Frame' is a printing term with the meaning that 'it fits in one row wide'. FrameInfiniteGrid is a grid that the item is filled up on the basis of a line given a size.\n * @ko 'Frame'는 '1í–‰ì˜ ë„ˆë¹„ì— ë§žê²Œ ê¼ ë“¤ì–´ì°¬'ì´ë¼ëŠ” ì˜ë¯¸ë¥¼ 가진 ì¸ì‡„ 용어다. FrameInfiniteGrid는 ìš©ì–´ì˜ ì˜ë¯¸ëŒ€ë¡œ 너비가 주어진 사ì´ì¦ˆë¥¼ 기준으로 ì•„ì´í…œì´ ê°€ë“ ì°¨ë„ë¡ ë°°ì¹˜í•˜ëŠ” Grid다.\n * @param {HTMLElement | string} container - A base element for a module <ko>ëª¨ë“ˆì„ ì ìš©í• ê¸°ì¤€ 엘리먼트</ko>\n * @param {FrameInfiniteGridOptions} options - The option object of the FrameInfiniteGrid module <ko>FrameGrid ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n */\n@InfiniteGridGetterSetter\nexport class FrameInfiniteGrid extends InfiniteGrid<FrameInfiniteGridOptions> {\n public static propertyTypes = {\n ...InfiniteGrid.propertyTypes,\n ...FrameGrid.propertyTypes,\n };\n public static defaultOptions: Required<FrameInfiniteGridOptions> = {\n ...InfiniteGrid.defaultOptions,\n ...FrameGrid.defaultOptions,\n gridConstructor: FrameGrid,\n } as const;\n}\n","import { PackingGrid, PackingGridOptions } from \"@egjs/grid\";\nimport InfiniteGrid from \"../InfiniteGrid\";\nimport { InfiniteGridOptions } from \"../types\";\nimport { InfiniteGridGetterSetter } from \"../utils\";\n\n/**\n * @typedef\n * @extends InfiniteGridOptions\n * @extends Grid.PackingGrid.PackingGridOptions\n */\nexport interface PackingInfiniteGridOptions extends PackingGridOptions, InfiniteGridOptions {\n}\n\n/**\n * The PackingInfiniteGrid is a grid that shows the important items bigger without sacrificing the weight of the items.\n * Rows and columns are separated so that items are dynamically placed within the horizontal and vertical space rather than arranged in an orderly fashion.\n * If `sizeWeight` is higher than `ratioWeight`, the size of items is preserved as much as possible.\n * Conversely, if `ratioWeight` is higher than `sizeWeight`, the ratio of items is preserved as much as possible.\n * @ko PackingInfiniteGrid는 ì•„ì´í…œì˜ 본래 í¬ê¸°ì— 따른 ë¹„ì¤‘ì„ í•´ì¹˜ì§€ 않으면서 중요한 카드는 ë” í¬ê²Œ ë³´ì—¬ 주는 ë ˆì´ì•„웃ì´ë‹¤.\n * 행과 ì—´ì´ êµ¬ë¶„ë¼ ì•„ì´í…œì„ ì •ëˆë˜ê²Œ 배치하는 ëŒ€ì‹ ê°€ë¡œì„¸ë¡œ ì¼ì • 공간 ë‚´ì—ì„œ ë™ì 으로 ì•„ì´í…œì„ 배치한다.\n * `sizeWeight`ê°€ `ratioWeight`보다 높으면 ì•„ì´í…œë“¤ì˜ sizeê°€ 최대한 ë³´ì¡´ì´ ëœë‹¤.\n * 반대로 `ratioWeight`ê°€ `sizeWeight`보다 높으면 ì•„ì´í…œë“¤ì˜ ë¹„ìœ¨ì´ ìµœëŒ€í•œ ë³´ì¡´ì´ ëœë‹¤.\n * @param {HTMLElement | string} container - A base element for a module <ko>ëª¨ë“ˆì„ ì ìš©í• ê¸°ì¤€ 엘리먼트</ko>\n * @param {PackingInfiniteGridOptions} options - The option object of the PackingInfiniteGrid module <ko>PackingInfiniteGrid ëª¨ë“ˆì˜ ì˜µì…˜ ê°ì²´</ko>\n */\n@InfiniteGridGetterSetter\nexport class PackingInfiniteGrid extends InfiniteGrid<PackingInfiniteGridOptions> {\n public static propertyTypes = {\n ...InfiniteGrid.propertyTypes,\n ...PackingGrid.propertyTypes,\n };\n public static defaultOptions: Required<PackingInfiniteGridOptions> = {\n ...InfiniteGrid.defaultOptions,\n ...PackingGrid.defaultOptions,\n gridConstructor: PackingGrid,\n };\n}\n","import InfiniteGrid, * as modules from \"./index\";\n\nfor (const name in modules) {\n (InfiniteGrid as any)[name] = (modules as any)[name];\n}\n\nexport default InfiniteGrid;\n"],"names":["ua","window","navigator","userAgent","IS_IOS","test","CONTAINER_CLASS_NAME","IGNORE_PROPERITES_MAP","renderOnPropertyChange","useFit","autoResize","INFINITEGRID_PROPERTY_TYPES","GRID_PROPERTY_TYPES","DIRECTION","START","END","NONE","INFINITEGRID_EVENTS","CHANGE_SCROLL","REQUEST_APPEND","REQUEST_PREPEND","RENDER_COMPLETE","CONTENT_ERROR","ITEM_INFO_PROPERTIES","type","groupKey","key","element","html","data","INFINITEGRID_METHODS","GROUP_TYPE","ITEM_TYPE","STATUS_TYPE","INVISIBLE_POS","__extends","horizontal","itemStatus","_super","__assign","NORMAL","cssRect","top","left","_this","VIRTUAL","rect","width","height","mountState","MOUNT_STATE","UNMOUNTED","orgRect","attributes","status","getMinimizedStatus","GridItem","LOADING_GROUP_KEY","LOADING_ITEM_KEY","items","item","loadingItem","getLoadingItem","InfiniteGridItem","options","LOADING","name","direction","outline","length","start","end","nextOutline","offset","contentSize","gap","cssInlinePos","getContainerInlineSize","inlineSize","maxPos","Math","max","cssContentPos","map","pos","minPos","min","Grid","isWindow","el","isNumber","val","isString","isObject","flat","arr","reduce","prev","cur","splitOptions","gridOptions","otherOptions","splitGridOptions","nextOptions","defaultOptions","value","categorize","groups","groupKeys","registeredGroupKeys","filter","forEach","_a","generatedGroupKey","isContinuousGroupKey","makeKey","group","push","getNextCursors","prevKeys","nextKeys","prevStartCursor","prevEndCursor","result","diff","nextStartCursor","nextEndCursor","maintained","prevIndex","nextIndex","startCursor","endCursor","splitVirtualGroups","nextGroups","virtualGroups","index","findIndex","slice","findLastIndex","nextVirtualGroups","removed","reverse","getFirstRenderingItems","nextItems","getRenderingItemsByStatus","groupManagerStatus","usePlaceholder","prevGroups","startVirtualGroups","endVirtualGroups","__spreadArrays","cursors","nextVisibleItems","mountRenderingItems","grid","useLoading","useFirstRender","setPlaceholder","setLoading","setStatus","syncItems","getGroups","setCursors","getRenderingItems","visibleItems","groupManager","InfiniteGridGetterSetter","component","prototype","propertyTypes","enumerable","configurable","get","set","prevValue","Object","defineProperty","registeredKeys","convertHTMLtoElement","dummy","document","createElement","innerHTML","toArray","children","convertInsertedItems","insertedItems","outerHTML","nodes","array","i","callback","getItemInfo","info","nextInfo","isFlatOutline","every","range","flatGroups","getItems","filterVirtuals","includePlaceholders","withInfiniteGridMethods","withMethods","container","_loadingGrid","LoadingGrid","externalContainerManager","containerManager","_mainGrid","_makeGrid","shouldRender","_checkShouldRender","scheduleRender","itemKeys","groupItems","hasPlaceholder","getVisibleGroups","some","_placeholder","_getLoadingItem","placeholder","_updatePlaceholder","_getRenderingItems","prevType","loading","setLoadingItem","getComputedOutlineLength","getComputedOutlineSize","MOUNTED","renderingGroups","loadingGrid","unshift","_getLoadingGroup","outlineLength","outlineSize","gridItems","isVirtual","appliedItems","UNCHECKED","gridOutlines","_applyVirtualGrid","applyGrid","setOutlines","getOutlines","nextItemInfos","prevItemKeys","_syncItemInfos","prevGroupKeys","nextManagerGroups","_splitVirtualGroups","_mergeVirtualGroups","setItems","renderItems","_registerGroups","useResize","updateState","UPDATE_STATE","NEED_UPDATE","orgStartCursor","orgEndCursor","orgGroups","isMinimizeItems","MINIMIZE_INVISIBLE_ITEMS","isMinimizeGroups","MINIMIZE_INVISIBLE_GROUPS","REMOVE_INVISIBLE_GROUPS","groupStatus","isOutsideCursor","isVirtualItems","isVirtualGroup","getVirtualStatus","outlines","startGroup","endGroup","totalItems","getGroupItems","itemStartCursor","indexOf","itemEndCursor","orgCursors","itemCursors","startGroupKey","endGroupKey","insertPlaceholders","splice","groupKey_1","infos","Array","isArray","_b","isRerender","GridConstructor","gridConstructor","prevOptions","PROPERTY_TYPE","RENDER_PROPERTY","startOutline","prevOutlines","prevOutline","nextItemKeys","prevItem","nextGroupKeys","_getGroupItems","prevGroup","containerElement","externalItemRenderer","itemRenderer","GroupManager","PROPERTY","GetterSetter","threshold","useRecycle","defaultDirection","scrollPos","size","isDirectionEnd","trigger","undefined","nextCursor","endScrollPos","startEdgePos","endEdgePos","endOutline","visibles","startPos","endPos","hasStartItems","hasEndItems","isStart","isEnd","lastIndexOf","_requestVirtualItems","totalVisibleItems","getVisibleItems","totalVisibleLength","visibleLength","getStartCursor","getEndCursor","startKey_1","endKey_1","startIndex","endIndex","nextKey","lastItem","firstItem","prevItems","isChange","prevVisibleItems","visibleResult","added","changed","rendered","off","Component","rendererKey","Date","now","state","_state","clearTimeout","_updateTimer","setTimeout","nextElements","diffResult","_diffResult","isChanged","isItemChanged","_isItemChanged","list","elements","renderKey","render","prevList","ordered","diffList","removeChild","insertBefore","updated","Renderer","orgItem","VanillaRenderer","wrapper","prevScrollPos","getScrollPos","nextScrollPos","getOrgScrollPos","setScrollPos","_isScrollIssue","ComponentEvent","relativeScrollPos","getRelativeScrollPos","containerTag","_init","scrollContainer","scrollOffset","eventTarget","prop","documentElement","body","scrollTo","x","y","scroll","scrollLeft","scrollTop","scrollBy","scrollContainerRect","getBoundingClientRect","containerRect","offsetWidth","offsetHeight","removeEventListener","_onCheck","_isCreateElement","fragment_1","createDocumentFragment","childNodes","childNode","appendChild","style","cssText","_orgCSSText","containerOption","containerCSSText","HTMLElement","position","className","querySelector","overflowX","overflowY","addEventListener","resize","_scroll","e","_checkEndLoading","renderedItems","gridItem","addedItems","isRestore","isResize","_onRenderComplete","mounted","_renderItems","_onRequestInsert","target","update","remove","removeByKey","infinite","prevRenderedGroups","getRenderedVisibleItems","_syncInfinite","prevStandardGroup","nextStandardGroup","getItemByKey","scrollManager","shouldRerenderItems","_update","constructor","renderer","VanillaGridRenderer","on","_render","attributePrefix","useTransform","percentage","isConstantSize","isEqualSize","useResizeObserver","resizeDebounce","maxResizeDebounce","wrapperElement","ScrollManager","_onScroll","getContainer","ContainerManager","watcher","ResizeWatcher","useWindowResize","watchChangedRect","listen","_onResize","ItemRenderer","Infinite","_onChange","_onRequestAppend","_onRequestPrepend","setSize","getContentSize","_onContentError","setContainer","_onRendererUpdated","InfiniteGrid","getWrapper","getScrollContainer","_syncGroups","_syncItems","insert","itemInfos","getStatus","getGroupStatus","appendPlaceholders","removePlaceholders","prependPlaceholders","prevInlineSize","getInlineSize","setGroupStatus","_getRenderer","updateKey","removeGroupByKey","firstIndex","lastIndex","removeByIndex","updateItems","_waitType","_checkStartLoading","destroy","_getRendererItems","isUpdate","eventType","nextGroupKey","wait","ready","isTrusted","_resizeScroll","getContainerElement","getLoadingType","isLoading","startLoading","hasLoadingItem","loadingType","endLoading","DEFAULT_GRID_OPTIONS","MasonryInfiniteGrid","MasonryGrid","JustifiedInfiniteGrid","JustifiedGrid","FrameInfiniteGrid","FrameGrid","PackingInfiniteGrid","PackingGrid","modules"],"mappings":"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"}