{"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.cjs.ts"],"sourcesContent":["import { GRID_PROPERTY_TYPES } from \"@egjs/grid\";\nimport { InfiniteGridItemInfo } from \"./types\";\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\nexport const ITEM_INFO_PROPERTIES: Record<keyof InfiniteGridItemInfo, true> = {\n type: true,\n groupKey: true,\n key: true,\n element: true,\n html: true,\n data: true,\n inserted: true,\n attributes: true,\n};\n\n\nexport const INFINITEGRID_METHODS = [\n \"insertByGroupIndex\",\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 inserted: boolean;\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 isWaitEnd = false;\n public initialDisplay: string | null = null;\n public getLoadingItem(): InfiniteGridItem | null {\n return this.items[0] as InfiniteGridItem || null;\n }\n public startLoading() {\n const element = this.items[0].element;\n\n if (element) {\n if (this.initialDisplay != null) {\n this.initialDisplay = element.style.display || \"\";\n } else if (this.initialDisplay) {\n element.style.display = this.initialDisplay;\n } else {\n element.style.removeProperty(\"display\");\n }\n }\n }\n public endLoading() {\n if (this.type) {\n const element = this.items[0].element;\n\n if (element) {\n element.style.display = \"none\";\n }\n }\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 { withClassMethods } from \"@cfcs/core\";\nimport Grid, { GRID_PROPERTY_TYPES } 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, i) => {\n if (item.groupKey != null) {\n isContinuousGroupKey = false;\n } else if (!item.inserted && items[i - 1]) {\n // In case of framework, inserted is false.\n // If groupKey is not set, the group key of the previous item is followed.\n item.groupKey = items[i - 1].groupKey!;\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 // Get the virtual group maintained in the group from the next group.\n const endMaintainedIndex = findIndex(groups, (group) => {\n return findIndex(nextGroups, (nextGroup) => nextGroup.groupKey === group.groupKey) >= 0;\n });\n const endIndex = endMaintainedIndex >= 0 ? Math.min(index, endMaintainedIndex) : index;\n\n virtualGroups = groups.slice(0, endIndex);\n } else {\n const index = findLastIndex(groups, (group) => group.type === GROUP_TYPE.NORMAL);\n\n if (index === -1) {\n return [];\n }\n const startMaintainedIndex = findLastIndex(groups, (group) => {\n return findIndex(nextGroups, (nextGroup) => nextGroup.groupKey === group.groupKey) >= 0;\n });\n const startIndex = startMaintainedIndex >= 0 ? Math.max(index, startMaintainedIndex) : index;\n\n virtualGroups = groups.slice(startIndex + 1);\n }\n\n return virtualGroups;\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(\n registeredKeys: Record<string, any>,\n prefix = \"\",\n) {\n let index = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const key = `infinitegrid_${prefix}${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 // inserted is true when adding via a method.\n return { groupKey, inserted: true, ...item };\n }\n\n // inserted is true when adding via a method.\n return {\n key,\n groupKey,\n html,\n element,\n inserted: true,\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 find<T>(arr: T[], callback: (value: T, index: number) => boolean): T | null {\n const length = arr.length;\n\n for (let i = 0; i < length; ++i) {\n const value = arr[i];\n\n if (callback(value, i)) {\n return value;\n }\n }\n\n return null;\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 = withClassMethods(INFINITEGRID_METHODS);\n\n","import Grid, {\n GetterSetter,\n GridFunction, GridItem, 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 appliedItemChecker?: (item: InfiniteGridItem, grid: Grid) => boolean;\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 appliedItemChecker: () => false,\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 updateItems(items = this.groupItems, options?: RenderOptions) {\n return super.updateItems(items, options);\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 waitEndLoading() {\n if (this._loadingGrid.type) {\n this._loadingGrid.isWaitEnd = true;\n return true;\n }\n return false;\n }\n\n public endLoading() {\n if (this._loadingGrid.isWaitEnd) {\n const prevType = this._loadingGrid.type;\n\n this._loadingGrid.type = \"\";\n this._loadingGrid.endLoading();\n this.items = this._getRenderingItems();\n return !!prevType;\n }\n return false;\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 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 appliedItemChecker = this.options.appliedItemChecker;\n const groupItems = this.groupItems;\n const outlineLength = this.getComputedOutlineLength(groupItems);\n const outlineSize = this.getComputedOutlineSize(groupItems);\n const itemRenderer = this.itemRenderer;\n let passedItems: InfiniteGridItem[] = [];\n\n groups.forEach((group) => {\n const grid = group.grid;\n const gridItems = grid.getItems() as InfiniteGridItem[];\n const isVirtual = group.type === GROUP_TYPE.VIRTUAL && !gridItems[0];\n\n passedItems = direction === \"end\" ? [...passedItems, ...gridItems] : [...gridItems, ...passedItems];\n grid.outlineLength = outlineLength;\n grid.outlineSize = outlineSize;\n\n const appliedItems = passedItems.filter((item) => {\n if (item.mountState === MOUNT_STATE.UNCHECKED || !item.rect.width) {\n itemRenderer.updateItem(item, true);\n }\n return (item.orgRect.width && item.rect.width) || appliedItemChecker(item, grid);\n });\n let gridOutlines: GridOutlines;\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\n grid.setOutlines(gridOutlines);\n nextOutline = gridOutlines.passed || gridOutlines[direction];\n passedItems = gridOutlines.passedItems?.map((index) => passedItems[index]) ?? [];\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, includePlaceholders?: boolean): GroupManagerStatus {\n const orgStartCursor = this.startCursor;\n const orgEndCursor = this.endCursor;\n const orgGroups = this.groups;\n const startGroup = orgGroups[orgStartCursor];\n const endGroup = orgGroups[orgEndCursor];\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(includePlaceholders);\n endCursor = groups.length - 1;\n startCursor = 0;\n } else {\n groups = this.getGroups(includePlaceholders);\n\n if (!includePlaceholders) {\n startCursor = -1;\n endCursor = -1;\n\n for (let orgIndex = orgStartCursor; orgIndex <= orgEndCursor; ++orgIndex) {\n const orgGroup = orgGroups[orgIndex];\n\n if (orgGroup && orgGroup.type !== GROUP_TYPE.VIRTUAL) {\n startCursor = groups.indexOf(orgGroup);\n break;\n }\n }\n for (let orgIndex = orgEndCursor; orgIndex >= orgStartCursor; --orgIndex) {\n const orgGroup = orgGroups[orgIndex];\n\n if (orgGroup && orgGroup.type !== GROUP_TYPE.VIRTUAL) {\n endCursor = groups.lastIndexOf(orgGroup);\n break;\n }\n }\n }\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\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 protected fitOutlines(useFit = this.useFit) {\n const groups = this.groups;\n\n if (!groups[0]) {\n return;\n }\n const outlines = this.outlines;\n const startOutline = outlines.start;\n const outlineOffset = startOutline.length ? Math.min(...startOutline) : 0;\n\n // If the outline is less than 0, a fit occurs forcibly.\n if (!useFit && outlineOffset > 0) {\n return;\n }\n\n groups.forEach(({ grid }) => {\n const { start, end } = grid.getOutlines();\n\n grid.setOutlines({\n start: start.map((point) => point - outlineOffset),\n end: end.map((point) => point - outlineOffset),\n });\n });\n\n this.groupItems.forEach((item) => {\n const contentPos = item.cssContentPos;\n\n if (!isNumber(contentPos)) {\n return;\n }\n item.cssContentPos = contentPos - outlineOffset;\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, \"virtual_\"),\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 // protected checkReady(options: RenderOptions = {}) {\n // const items = this.items;\n // const updated = items.filter((item) => item.element?.parentNode && item.updateState !== UPDATE_STATE.UPDATED);\n // const mounted = items.filter((item) => item.element?.parentNode && item.mountState !== MOUNT_STATE.MOUNTED);\n\n\n // if (updated.length && updated.every((item) => item.type != ITEM_TYPE.NORMAL)) {\n // this._updateItems(updated);\n // this.readyItems(mounted, updated, options);\n // } else {\n // super.checkReady(options);\n // }\n // }\n protected _updateItems(items: GridItem[]): void {\n this.itemRenderer.updateEqualSizeItems(items, this.groupItems);\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 if (info.groupKey != null) {\n prevItem.groupKey = info.groupKey!;\n }\n if (info.element) {\n prevItem.element = info.element;\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, info.type === ITEM_TYPE.VIRTUAL ? \"virtual_\" : \"\");\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 if (info.element) {\n item.element = info.element;\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 useResizeObserver: false,\n observeChildren: 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, findLastIndex, getNextCursors, isFlatOutline } from \"./utils\";\n\nexport interface OnInfiniteRequestAppend {\n key?: string | number | undefined;\n nextKey?: string | number | undefined;\n nextKeys?: Array<string | number>;\n isVirtual: boolean;\n}\n\nexport interface OnInfiniteRequestPrepend {\n key?: string | number;\n nextKey?: string | number;\n nextKeys?: Array<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 InfiniteItemPart {\n key: string | number;\n pos: number;\n size: number;\n}\nexport interface InfiniteItem {\n key: string | number;\n startOutline: number[];\n endOutline: number[];\n parts?: InfiniteItemPart[];\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 || isFlatOutline(startOutline, endOutline)) {\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 let nextVisibleItems = items.slice(nextStartCursor, nextEndCursor + 1);\n\n // It must contain no virtual items.\n if (nextVisibleItems.every((item) => item.isVirtual === true)) {\n // The real item can be in either the start or end direction.\n let hasRealItem = false;\n\n for (let i = nextStartCursor - 1; i >= 0; --i) {\n if (!items[i].isVirtual) {\n nextStartCursor = i;\n hasRealItem = true;\n break;\n }\n }\n if (!hasRealItem) {\n for (let i = nextEndCursor + 1; i < length; ++i) {\n if (!items[i].isVirtual) {\n nextEndCursor = i;\n hasRealItem = true;\n break;\n }\n }\n }\n if (hasRealItem) {\n nextVisibleItems = items.slice(nextStartCursor, nextEndCursor + 1);\n }\n }\n\n const hasVirtualItems = nextVisibleItems.some((item) => item.isVirtual === true);\n\n if (prevStartCursor !== nextStartCursor || prevEndCursor !== nextEndCursor) {\n this.trigger(\"change\", {\n prevStartCursor,\n prevEndCursor,\n nextStartCursor,\n nextEndCursor,\n });\n\n if (!hasVirtualItems) {\n return;\n }\n }\n\n // If a virtual item is included, a requestPrepend (or requestAppend) event is triggered.\n if (hasVirtualItems) {\n const isStartVirtual = nextVisibleItems[0]?.isVirtual;\n const isEndVirtual = nextVisibleItems[nextVisibleItems.length - 1]?.isVirtual;\n\n if ((!isDirectionEnd || !isEnd) && isStartVirtual) {\n const realItemIndex = findIndex(nextVisibleItems, (item) => !item.isVirtual);\n const endVirtualItemIndex = (realItemIndex === -1 ? nextVisibleItems.length : realItemIndex) - 1;\n\n if (nextVisibleItems[endVirtualItemIndex]) {\n this.trigger(\"requestPrepend\", {\n key: realItemIndex > -1 ? nextVisibleItems[realItemIndex].key : undefined,\n nextKey: nextVisibleItems[endVirtualItemIndex].key,\n nextKeys: nextVisibleItems.slice(0, endVirtualItemIndex + 1).map((item) => item.key),\n isVirtual: true,\n });\n }\n } else if ((isDirectionEnd || !isStart) && isEndVirtual) {\n const realItemIndex = findLastIndex(nextVisibleItems, (item) => !item.isVirtual);\n const startVirtualItemIndex = realItemIndex + 1;\n\n if (nextVisibleItems[startVirtualItemIndex]) {\n this.trigger(\"requestAppend\", {\n key: realItemIndex > -1 ? nextVisibleItems[realItemIndex].key : undefined,\n nextKey: nextVisibleItems[startVirtualItemIndex].key,\n nextKeys: nextVisibleItems.slice(startVirtualItemIndex).map((item) => item.key),\n isVirtual: true,\n });\n }\n }\n } else if (!this._requestVirtualItems()) {\n 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 /**\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 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 getItemPartByKey(partKey: string | number) {\n let itemPart!: InfiniteItemPart;\n\n this.items.forEach((item) => {\n item.parts?.forEach((part) => {\n if (part.key === partKey) {\n itemPart = part;\n }\n });\n });\n\n return itemPart;\n }\n public getVisibleArea(scrollPos: number, direction = this.options.defaultDirection) {\n const isDirectionEnd = direction === DIRECTION.END;\n const visibleItems = this.getRenderedVisibleItems();\n\n if (!visibleItems.length) {\n return null;\n }\n const visibleItem = visibleItems[isDirectionEnd ? 0 : length - 1];\n let pos = isDirectionEnd\n ? Math.min(...visibleItem.startOutline)\n : Math.max(...visibleItem.endOutline);\n let itemPart!: InfiniteItemPart;\n\n if (isDirectionEnd) {\n visibleItems.forEach((item) => {\n item.parts?.forEach((part) => {\n if (itemPart && itemPart.pos >= part.pos) {\n return;\n }\n if (pos < part.pos && part.pos <= scrollPos) {\n itemPart = part;\n pos = part.pos;\n }\n });\n });\n } else {\n visibleItems.forEach((item) => {\n item.parts?.forEach((part) => {\n const endPos = part.pos + part.size;\n\n if (itemPart && itemPart.pos + itemPart.size <= endPos) {\n return;\n }\n\n if (pos > endPos && endPos >= scrollPos) {\n itemPart = part;\n pos = endPos;\n }\n });\n });\n }\n\n return {\n pos,\n item: visibleItem,\n part: itemPart,\n };\n }\n public getRenderedVisibleItems() {\n const items = this.getVisibleItems();\n\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 { findTarget, Ref } from \"@cfcs/core\";\nimport 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 scrollContainer?: HTMLElement | string | Ref<HTMLElement> | null;\n container?: boolean | HTMLElement | string | Ref<HTMLElement>;\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 scrollContainer: null,\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 isBody = scrollContainer === document.body;\n const scrollContainerRect = isBody\n ? { top: 0, left: 0 }\n : scrollContainer.getBoundingClientRect();\n const containerRect = this.container.getBoundingClientRect();\n\n this.scrollOffset = (this.getOrgScrollPos()! || 0) + (horizontal\n ? containerRect.left - scrollContainerRect.left\n : containerRect.top - scrollContainerRect.top);\n\n if (isBody) {\n this.contentSize = horizontal ? window.innerWidth : window.innerHeight;\n } else {\n this.contentSize = horizontal ? scrollContainer.offsetWidth : scrollContainer.offsetHeight;\n }\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 scrollContainer: scrollContainerOption,\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 = findTarget(scrollContainerOption) || document.body;\n containerCSSText = container.style.cssText;\n } else {\n 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\n container = findTarget(containerOption)!;\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 Grid, {\n ContainerManager,\n DEFAULT_GRID_OPTIONS,\n Properties,\n RenderOptions,\n MOUNT_STATE,\n OnContentError,\n ItemRenderer,\n GridItem,\n ResizeWatcherResizeEvent,\n getUpdatedItems,\n} from \"@egjs/grid\";\nimport {\n DIRECTION,\n GROUP_TYPE,\n INFINITEGRID_EVENTS, INFINITEGRID_PROPERTY_TYPES,\n INVISIBLE_POS,\n ITEM_TYPE, STATUS_TYPE,\n} from \"./consts\";\nimport { GroupManager } from \"./GroupManager\";\nimport {\n Infinite,\n InfiniteItem,\n InfiniteItemPart,\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 scrollContainer: null,\n appliedItemChecker: (() => false) as (item: InfiniteGridItem, grid: Grid) => boolean,\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 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 scrollContainer,\n appliedItemChecker,\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 defaultDirection,\n useRoundedSize,\n } = gridOptions;\n const wrapperElement = isString(wrapper) ? document.querySelector(wrapper) as HTMLElement : wrapper;\n const scrollManager = new ScrollManager(wrapperElement, {\n scrollContainer,\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,\n resizeDebounce,\n maxResizeDebounce,\n useResizeObserver,\n }).on(\"resize\", this._onResize);\n const itemRenderer = new ItemRenderer({\n attributePrefix,\n horizontal,\n useTransform,\n percentage,\n isEqualSize,\n isConstantSize,\n useRoundedSize,\n });\n const infinite = new Infinite({\n defaultDirection,\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 appliedItemChecker: appliedItemChecker!,\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.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.getVisibleItems().forEach((item) => {\n if (item.cssRect.top === INVISIBLE_POS) {\n item.cssRect = {};\n }\n });\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 * Add items based on group index.\n * @ko groupì˜ index 기준으로 itemë“¤ì„ ì¶”ê°€í•œë‹¤.\n * @param - group index to add <ko>추가하기 위한 groupì˜ 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.insertByGroupIndex(2, `<div class=\"item\">test1</div><div class=\"item\">test2</div>`);\n * ig.insertByGroupIndex(3, [`<div class=\"item\">test1</div>`, `<div class=\"item\">test2</div>`]);\n * ig.insertByGroupIndex(4, [HTMLElement1, HTMLElement2]);\n * ```\n */\n public insertByGroupIndex(groupIndex: number, items: InfiniteGridInsertedItems, groupKey?: string | number): this {\n const nextGroupInfos: InfiniteGridGroup[] = this.groupManager.getGroups();\n const rightGroup = nextGroupInfos[groupIndex];\n\n if (!rightGroup) {\n return this.append(items, groupKey);\n }\n const nextItemInfos: InfiniteGridItemInfo[] = this.groupManager.getGroupItems();\n const rightGroupKey = rightGroup.groupKey;\n const rightItemIndex = findIndex(nextItemInfos, (item) => item.groupKey === rightGroupKey);\n\n return this.insert(rightItemIndex, items, groupKey);\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 * @param - Whether to include items corresponding to placeholders. <ko>placeholderì— í•´ë‹¹í•˜ëŠ” ì•„ì´í…œë“¤ì„ í¬í•¨í• 지 여부.</ko>\n */\n public getStatus(type?: STATUS_TYPE, includePlaceholders?: boolean): InfiniteGridStatus {\n return {\n containerManager: this.containerManager.getStatus(),\n itemRenderer: this.itemRenderer.getStatus(),\n groupManager: this.groupManager.getGroupStatus(type, includePlaceholders),\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 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.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.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 * @param - <ko>ë°ì´í„°ê°€ 존재하지 않으면 loading bar를 즉시 ì œê±° 한다.</ko>\n */\n public ready(hasNoData?: boolean) {\n this._waitType = \"\";\n\n if (hasNoData) {\n this.groupManager.waitEndLoading();\n\n if (this.groupManager.endLoading()) {\n this._update();\n }\n }\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._getRenderer().destroy();\n this.containerManager.destroy();\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 const scrollManager = this.scrollManager;\n\n if (!scrollManager.getContentSize()) {\n this._resizeScroll();\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 parts: grid.getItems().map((item) => {\n return {\n key: item.key,\n pos: item.computedContentPos,\n size: item.computedContentSize,\n };\n }),\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 const renderedItems = e.items;\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 if (!e.isChanged) {\n this._checkEndLoading();\n this._scroll();\n return;\n }\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\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 containerManager = this.containerManager;\n if (this.options.observeChildren) {\n containerManager.unobserveChildren(removed.map((index) => prevList[index].element!));\n containerManager.observeChildren(added.map((index) => list[index].element!));\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 = (e: ResizeWatcherResizeEvent) => {\n if (e.isResizeContainer) {\n this._renderItems({ useResize: true }, true);\n } else {\n const updatedItems = getUpdatedItems(this.getVisibleItems(), e.childEntries) as InfiniteGridItem[];\n\n if (updatedItems.length > 0) {\n this.updateItems(updatedItems);\n }\n }\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 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 nextGroupKeys: e.nextKeys || [],\n isVirtual: e.isVirtual,\n wait: () => {\n this.wait(direction);\n },\n ready: (hasNoData?: boolean) => {\n this.ready(hasNoData);\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 prevVisibleArea = infinite.getVisibleArea(this.scrollManager.getScrollPos()!, direction);\n const isDirectionEnd = direction === DIRECTION.END;\n\n this._syncInfinite();\n\n if (prevVisibleArea) {\n let nextPart!: InfiniteItemPart;\n let nextItem!: InfiniteItem;\n\n if (prevVisibleArea.part) {\n nextPart = infinite.getItemPartByKey(prevVisibleArea.part.key);\n }\n if (prevVisibleArea.item) {\n nextItem = infinite.getItemByKey(prevVisibleArea.item.key);\n }\n\n if (nextPart || nextItem) {\n let nextPos = 0;\n\n if (nextPart) {\n nextPos = nextPart.pos + (isDirectionEnd ? 0 : nextPart.size);\n } else {\n nextPos = isDirectionEnd ? Math.min(...nextItem.startOutline) : Math.max(...nextItem.endOutline);\n }\n const offset = nextPos - prevVisibleArea.pos;\n\n this.scrollManager.scrollBy(offset);\n }\n }\n\n const completeMounted = (mounted as InfiniteGridItem[]).filter((item) => item.type !== ITEM_TYPE.LOADING);\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: completeMounted,\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 let isUpdate = this.groupManager.shouldRerenderItems();\n\n if (completeMounted.length || updated.length) {\n isUpdate ||= !!this.groupManager.endLoading();\n }\n\n if (isUpdate) {\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.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.waitEndLoading()\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 appliedItemChecker: (item, grid) => {\n const column = parseFloat(item.attributes.column) || 0;\n\n return column >= grid.outlineLength;\n },\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\ndeclare const module: any;\nmodule.exports = InfiniteGrid;\nexport default InfiniteGrid;\nexport * from \"./index\";\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","inserted","attributes","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","__proto","InfiniteGridItem","prototype","status","getMinimizedStatus","GridItem","LOADING_GROUP_KEY","LOADING_ITEM_KEY","LoadingGrid","items","initialDisplay","style","display","removeProperty","item","loadingItem","getLoadingItem","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","i","makeKey","group","push","getNextCursors","prevKeys","nextKeys","prevStartCursor","prevEndCursor","result","diff","nextStartCursor","nextEndCursor","maintained","prevIndex","nextIndex","startCursor","endCursor","splitVirtualGroups","nextGroups","virtualGroups","index","findIndex","endMaintainedIndex","nextGroup","endIndex","slice","findLastIndex","startMaintainedIndex","startIndex","getFirstRenderingItems","nextItems","getRenderingItemsByStatus","groupManagerStatus","usePlaceholder","prevGroups","startVirtualGroups","endVirtualGroups","__spreadArray","cursors","nextVisibleItems","mountRenderingItems","grid","useLoading","useFirstRender","setPlaceholder","setLoading","setStatus","syncItems","getGroups","setCursors","getRenderingItems","visibleItems","groupManager","InfiniteGridGetterSetter","component","propertyTypes","enumerable","configurable","get","set","prevValue","Object","defineProperty","registeredKeys","prefix","convertHTMLtoElement","dummy","document","createElement","innerHTML","toArray","children","convertInsertedItems","insertedItems","outerHTML","nodes","array","callback","getItemInfo","info","nextInfo","isFlatOutline","every","range","flatGroups","getItems","filterVirtuals","includePlaceholders","withInfiniteGridMethods","withClassMethods","container","_loadingGrid","externalContainerManager","containerManager","_mainGrid","_makeGrid","GroupManager","shouldRender","_checkShouldRender","scheduleRender","itemKeys","groupItems","hasPlaceholder","getVisibleGroups","some","_placeholder","_getLoadingItem","updateItems","placeholder","_updatePlaceholder","_getRenderingItems","isWaitEnd","prevType","endLoading","loading","setLoadingItem","getComputedOutlineLength","getComputedOutlineSize","renderingGroups","loadingGrid","unshift","_getLoadingGroup","reverse","appliedItemChecker","outlineLength","outlineSize","itemRenderer","passedItems","gridItems","isVirtual","appliedItems","UNCHECKED","updateItem","gridOutlines","_applyVirtualGrid","applyGrid","setOutlines","passed","getOutlines","nextItemInfos","prevItemKeys","_syncItemInfos","prevGroupKeys","nextManagerGroups","_splitVirtualGroups","_mergeVirtualGroups","setItems","renderItems","_registerGroups","useResize","updateState","UPDATE_STATE","NEED_UPDATE","orgStartCursor","orgEndCursor","orgGroups","startGroup","endGroup","isMinimizeItems","MINIMIZE_INVISIBLE_ITEMS","isMinimizeGroups","MINIMIZE_INVISIBLE_GROUPS","REMOVE_INVISIBLE_GROUPS","orgIndex","orgGroup","indexOf","lastIndexOf","groupStatus","isOutsideCursor","isVirtualItems","isVirtualGroup","getVirtualStatus","outlines","totalItems","getGroupItems","itemStartCursor","itemEndCursor","orgCursors","itemCursors","startGroupKey","endGroupKey","startOutline","outlineOffset","_b","point","contentPos","insertPlaceholders","splice","groupKey_1","infos","Array","isArray","isRerender","updateEqualSizeItems","GridConstructor","gridConstructor","prevOptions","PROPERTY_TYPE","RENDER_PROPERTY","prevOutlines","prevOutline","nextItemKeys","prevItem","nextGroupKeys","_getGroupItems","prevGroup","containerElement","useResizeObserver","observeChildren","externalItemRenderer","PROPERTY","GetterSetter","threshold","useRecycle","defaultDirection","Infinite","scrollPos","size","_c","isDirectionEnd","trigger","undefined","nextCursor","endScrollPos","startEdgePos","endEdgePos","endOutline","visibles","startPos","endPos","hasStartItems","hasEndItems","isStart","isEnd","hasRealItem","hasVirtualItems","isStartVirtual","isEndVirtual","realItemIndex","endVirtualItemIndex","nextKey","startVirtualItemIndex","_requestVirtualItems","totalVisibleItems","getVisibleItems","totalVisibleLength","visibleLength","getStartCursor","getEndCursor","startKey_1","endKey_1","lastItem","firstItem","prevItems","isChange","prevVisibleItems","visibleResult","added","removed","changed","partKey","itemPart","parts","part","getRenderedVisibleItems","visibleItem","rendered","off","Component","Renderer","rendererKey","Date","now","state","_state","clearTimeout","_updateTimer","setTimeout","nextElements","diffResult","_diffResult","isChanged","isItemChanged","_isItemChanged","list","elements","renderKey","VanillaRenderer","render","prevList","ordered","diffList","removeChild","insertBefore","updated","VanillaGridRenderer","orgItem","wrapper","prevScrollPos","getScrollPos","nextScrollPos","getOrgScrollPos","setScrollPos","_isScrollIssue","ComponentEvent","relativeScrollPos","getRelativeScrollPos","containerTag","scrollContainer","_init","ScrollManager","scrollOffset","eventTarget","prop","documentElement","body","scrollTo","x","y","scroll","scrollLeft","scrollTop","scrollBy","isBody","scrollContainerRect","getBoundingClientRect","containerRect","innerWidth","innerHeight","offsetWidth","offsetHeight","removeEventListener","_onCheck","_isCreateElement","fragment_1","createDocumentFragment","childNodes","childNode","appendChild","cssText","_orgCSSText","containerOption","scrollContainerOption","containerCSSText","findTarget","position","className","overflowX","overflowY","addEventListener","resize","_scroll","e","renderedItems","gridItem","_checkEndLoading","addedItems","unobserveChildren","isRestore","isResize","_onRenderComplete","mounted","isResizeContainer","_renderItems","updatedItems","getUpdatedItems","childEntries","_onRequestInsert","target","update","remove","removeByKey","infinite","prevVisibleArea","getVisibleArea","scrollManager","_syncInfinite","nextPart","nextItem","getItemPartByKey","getItemByKey","nextPos","completeMounted","isUpdate","shouldRerenderItems","_update","constructor","renderer","on","_render","attributePrefix","useTransform","percentage","isConstantSize","isEqualSize","resizeDebounce","maxResizeDebounce","useRoundedSize","wrapperElement","querySelector","_onScroll","getContainer","ContainerManager","_onResize","ItemRenderer","_onChange","_onRequestAppend","_onRequestPrepend","setSize","getContentSize","_onContentError","setContainer","_onRendererUpdated","InfiniteGrid","getWrapper","getScrollContainer","_syncGroups","_syncItems","insert","itemInfos","groupIndex","nextGroupInfos","rightGroup","append","rightGroupKey","rightItemIndex","getStatus","getGroupStatus","appendPlaceholders","removePlaceholders","prependPlaceholders","prevInlineSize","getInlineSize","setGroupStatus","_getRenderer","updateKey","removeGroupByKey","firstIndex","lastIndex","removeByIndex","_waitType","_checkStartLoading","hasNoData","waitEndLoading","destroy","_getRendererItems","_resizeScroll","computedContentPos","computedContentSize","eventType","nextGroupKey","wait","ready","isTrusted","getContainerElement","getLoadingType","isLoading","startLoading","hasLoadingItem","loadingType","DEFAULT_GRID_OPTIONS","MasonryInfiniteGrid","MasonryGrid","column","parseFloat","JustifiedInfiniteGrid","JustifiedGrid","FrameInfiniteGrid","FrameGrid","PackingInfiniteGrid","PackingGrid","modules","module","exports"],"mappings":"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"}