@egjs/svelte-infinitegrid 3.2.5 → 4.0.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.js +32 -0
- package/.storybook/manager.js +5 -0
- package/.storybook/preview.js +25 -0
- package/README.md +79 -155
- package/dist/infinitegrid.cjs.js +203 -533
- package/dist/infinitegrid.cjs.js.map +1 -1
- package/dist/infinitegrid.esm.js +198 -522
- package/dist/infinitegrid.esm.js.map +1 -1
- package/global.d.ts +8 -0
- package/package.json +41 -50
- package/public/global.css +6 -5
- package/public/index.html +3 -3
- package/rollup.config.js +7 -6
- package/src/InfiniteGrid.js +23 -16
- package/src/InfiniteGrid.svelte +91 -138
- package/src/consts.js +8 -13
- package/src/grids/FrameInfiniteGrid.js +17 -0
- package/src/grids/JustifiedInfiniteGrid.js +17 -0
- package/src/grids/MasonryInfiniteGrid.js +17 -0
- package/src/grids/PackingInfiniteGrid.js +17 -0
- package/src/index.d.ts +14 -27
- package/src/index.js +5 -13
- package/src/index.umd.js +2 -6
- package/src/{demo/main.js → main.ts} +1 -1
- package/stories/1-MasonryInfiniteGrid/0-MasonryInfiniteGrid.stories.ts +4 -0
- package/stories/1-MasonryInfiniteGrid/1-MasonryInfiniteGrid.stories.ts +27 -0
- package/stories/1-MasonryInfiniteGrid/apps/SvelteMasonryInfiniteGridApp.svelte +42 -0
- package/stories/2-JustifiedInfiniteGrid/0-JustifiedInfiniteGrid.stories.ts +5 -0
- package/stories/2-JustifiedInfiniteGrid/1-JustifiedInfiniteGrid.stories.ts +10 -0
- package/stories/2-JustifiedInfiniteGrid/apps/SvelteJustifiedInfiniteGridApp.svelte +43 -0
- package/stories/3-FrameInfiniteGrid/0-FrameInfiniteGrid.stories.ts +5 -0
- package/stories/3-FrameInfiniteGrid/1-FrameInfiniteGrid.stories.ts +10 -0
- package/stories/3-FrameInfiniteGrid/apps/SvelteFrameInfiniteGridApp.svelte +44 -0
- package/stories/4-PackingInfiniteGrid/0-PackingInfiniteGrid.stories.ts +5 -0
- package/stories/4-PackingInfiniteGrid/1-PackingInfiniteGrid.stories.ts +10 -0
- package/stories/4-PackingInfiniteGrid/apps/SveltePackingInfiniteGridApp.svelte +40 -0
- package/stories/5-DataLoading/0-DataLoading.stories.ts +7 -0
- package/stories/5-DataLoading/1-WaitNReady.stories.ts +10 -0
- package/stories/5-DataLoading/2-Placeholder.stories.ts +10 -0
- package/stories/5-DataLoading/3-Loading.stories.ts +10 -0
- package/stories/5-DataLoading/apps/SvelteLoadingApp.svelte +54 -0
- package/stories/5-DataLoading/apps/SveltePlaceholderApp.svelte +54 -0
- package/stories/5-DataLoading/apps/SvelteWaitNReadyApp.svelte +47 -0
- package/tsconfig.json +4 -61
- package/.editorconfig +0 -3
- package/LICENSE +0 -19
- package/babel.config.js +0 -10
- package/jest.config.js +0 -14
- package/rollup_start_dev.js +0 -12
- package/src/LoadingChecker.svelte +0 -9
- package/src/demo/App.svelte +0 -86
- package/src/demo/useFirstRender.svelte +0 -67
- package/src/layouts/FrameLayout.js +0 -9
- package/src/layouts/GridLayout.js +0 -9
- package/src/layouts/JustifiedLayout.js +0 -9
- package/src/layouts/PackingLayout.js +0 -9
- package/src/layouts/SquareLayout.js +0 -9
- package/svelte.config.js +0 -5
- package/test/unit/demo.spec.ts +0 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infinitegrid.esm.js","sources":["../src/LoadingChecker.svelte","../src/consts.js","../src/InfiniteGrid.svelte","../src/InfiniteGrid.js","../src/layouts/GridLayout.js","../src/layouts/JustifiedLayout.js","../src/layouts/FrameLayout.js","../src/layouts/SquareLayout.js","../src/layouts/PackingLayout.js"],"sourcesContent":["<script>\nimport { onMount, onDestroy } from \"svelte\";\n\nexport let hasLoading = true;\n\nonMount(() => {\n hasLoading = false;\n});\n</script>\n","export const PROP_NAMES = [\n\t\"groupBy\",\n\t\"itemBy\",\n\t\"items\",\n\t\"useFirstRender\",\n\t\"loading\",\n\t\"status\",\n\t\"layoutType\",\n\t\"options\",\n\t\"layoutOptions\",\n\t\"_forceCount\",\n\t\"viewer\",\n\t\"container\"\n];\n","<script lang=\"ts\">\n import {\n onMount,\n onDestroy,\n beforeUpdate,\n afterUpdate,\n createEventDispatcher\n } from \"svelte\";\n import VanillaInfiniteGrid, {\n INFINITEGRID_EVENTS,\n GridLayout,\n categorize,\n ItemManager,\n CONTAINER_CLASSNAME\n } from \"@egjs/infinitegrid\";\n import type {\n IInfiniteGridOptions,\n ILayout,\n IInfiniteGridStatus,\n IInfiniteGridItem,\n } from \"@egjs/infinitegrid\";\n import LoadingChecker from \"./LoadingChecker.svelte\";\n import { PROP_NAMES } from \"./consts\";\n\n export let groupBy = (item, index) => item.groupKey;\n export let itemBy = (item, index) => item.key;\n export let items: any[] = [];\n export let useFirstRender = false;\n export let status: IInfiniteGridStatus | null = null;\n export let layoutType: new () => ILayout = GridLayout;\n export let options: Partial<IInfiniteGridOptions> = {};\n export let layoutOptions: { [key: string]: any } = {};\n export let _forceCount = 0;\n\n const dispatch = createEventDispatcher();\n let viewer: HTMLElement;\n let container: HTMLElement;\n let nextFunction = () => {};\n let layoutState;\n let visibleItems: any[] = [];\n let ig: VanillaInfiniteGrid;\n let hasLoadingElement = true;\n let attributes = {};\n let isFirstMount = true;\n\n function toItems(items) {\n return items.map((item, i) => ({\n groupKey: groupBy(item, i),\n itemKey: itemBy(item, i),\n data: item\n }));\n }\n function beforeSync(items) {\n return ig.beforeSync(toItems(items));\n }\n function getLoadingElement() {\n if (hasLoadingElement) {\n const el = container || viewer;\n\n return el!.lastElementChild;\n }\n }\n function getElements() {\n const el = container || viewer;\n const elements = [].slice.call(el!.children);\n\n if (hasLoadingElement) {\n return elements.slice(0, -1);\n }\n return elements;\n }\n function updateAttributes() {\n attributes = { ...$$props };\n\n PROP_NAMES.forEach(name => {\n delete attributes[name];\n });\n }\n\n const groups = categorize(items);\n\n if (status) {\n const { startCursor, endCursor } = status._infinite;\n visibleItems = ItemManager.pluck(\n groups.slice(startCursor, endCursor + 1),\n \"items\"\n ).map(item => item.data);\n } else if (useFirstRender) {\n visibleItems = items;\n }\n beforeUpdate(() => {\n updateAttributes();\n if (!ig) {\n return;\n }\n const result = beforeSync(items);\n\n layoutState = result === \"relayout\" ? result : layoutState || result;\n visibleItems = ig.getRenderingItems().map(item => item.data);\n\n const loadingElement = getLoadingElement();\n\n if (loadingElement) {\n ig.setLoadingBar({\n append: loadingElement,\n prepend: loadingElement\n });\n } else {\n ig.setLoadingBar();\n }\n });\n onMount(() => {\n ig = new VanillaInfiniteGrid(viewer!, {\n ...options,\n renderExternal: true\n }).on(\"render\", ({ next }) => {\n setTimeout(() => {\n nextFunction = next;\n ++_forceCount;\n });\n });\n INFINITEGRID_EVENTS.forEach(name => {\n ig.on(name as any, (e: any) => {\n dispatch(name, e);\n });\n });\n ig.setLayout(layoutType, layoutOptions);\n\n const loadingElement = getLoadingElement();\n\n if (loadingElement) {\n ig.setLoadingBar({\n append: loadingElement,\n prepend: loadingElement\n });\n }\n if (status) {\n setStatus(status, true);\n } else {\n beforeSync(items);\n ig.layout(true);\n }\n });\n afterUpdate(() => {\n if (isFirstMount) {\n isFirstMount = false;\n return;\n }\n const currentNextFunction = nextFunction;\n nextFunction = () => {};\n ig.sync(getElements());\n\n if (layoutState) {\n layoutState = \"\";\n ig.layout(layoutState === \"relayout\");\n }\n currentNextFunction();\n });\n onDestroy(() => {\n ig.destroy();\n });\n\n export function getInstance() {\n return ig;\n }\n export function setStatus(status: IInfiniteGridStatus, applyScrollPos?: boolean, syncElements: HTMLElement[] = getElements()) {\n ig.setStatus(status, applyScrollPos, syncElements);\n return ig;\n }\n</script>\n\n<div {...attributes} bind:this={viewer}>\n {#if options.isOverflowScroll}\n <div class={CONTAINER_CLASSNAME} bind:this={container}>\n <slot {visibleItems} />\n <slot name=\"loading\">\n <LoadingChecker bind:hasLoading={hasLoadingElement} />\n </slot>\n </div>\n {:else}\n <slot {visibleItems} />\n <slot name=\"loading\">\n <LoadingChecker bind:hasLoading={hasLoadingElement} />\n </slot>\n {/if}\n</div>\n","import InfiniteGrid from \"./InfiniteGrid.svelte\";\nimport { INFINITEGRID_METHODS } from \"@egjs/infinitegrid\";\n\nexport default /*#__PURE__*/ (() => {\n const prototype = InfiniteGrid.prototype;\n\n\tfor (const name in INFINITEGRID_METHODS) {\n\t\tif (name in prototype) {\n\t\t\tcontinue;\n\t\t}\n prototype[name] = function (...args) {\n const self = this.getInstance();\n const result = self[name](...args);\n\n if (result === self) {\n return this;\n } else {\n return result;\n }\n };\n\t}\n return InfiniteGrid;\n})();\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { GridLayout as layoutType } from \"@egjs/infinitegrid\";\n\nexport default class GridLayout extends InfiniteGrid {\n\tconstructor(options) {\n\t\toptions.props.layoutType = layoutType;\n\t\tsuper(options);\n\t}\n}\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { JustifiedLayout as layoutType } from \"@egjs/infinitegrid\";\n\nexport default class JustifiedLayout extends InfiniteGrid {\n\tconstructor(options) {\n\t\toptions.props.layoutType = layoutType;\n\t\tsuper(options);\n\t}\n}\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { FrameLayout as layoutType } from \"@egjs/infinitegrid\";\n\nexport default class FrameLayout extends InfiniteGrid {\n\tconstructor(options) {\n\t\toptions.props.layoutType = layoutType;\n\t\tsuper(options);\n\t}\n}\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { SquareLayout as layoutType } from \"@egjs/infinitegrid\";\n\nexport default class SquareLayout extends InfiniteGrid {\n\tconstructor(options) {\n\t\toptions.props.layoutType = layoutType;\n\t\tsuper(options);\n\t}\n}\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { PackingLayout as layoutType } from \"@egjs/infinitegrid\";\n\nexport default class PackingLayout extends InfiniteGrid {\n\tconstructor(options) {\n\t\toptions.props.layoutType = layoutType;\n\t\tsuper(options);\n\t}\n}\n"],"names":["hasLoading","onMount","PROP_NAMES","CONTAINER_CLASSNAME","ctx","isOverflowScroll","groupBy","item","index","groupKey","itemBy","key","items","useFirstRender","status","layoutType","GridLayout","options","layoutOptions","_forceCount","dispatch","createEventDispatcher","viewer","container","nextFunction","layoutState","visibleItems","ig","hasLoadingElement","attributes","isFirstMount","toItems","map","i","itemKey","data","beforeSync","getLoadingElement","el","lastElementChild","getElements","elements","slice","call","children","updateAttributes","$$props","forEach","name","groups","categorize","startCursor","endCursor","_infinite","ItemManager","pluck","beforeUpdate","result","getRenderingItems","loadingElement","setLoadingBar","append","prepend","VanillaInfiniteGrid","renderExternal","on","next","setTimeout","INFINITEGRID_EVENTS","e","setLayout","setStatus","layout","afterUpdate","currentNextFunction","sync","onDestroy","destroy","getInstance","applyScrollPos","syncElements","prototype","InfiniteGrid","INFINITEGRID_METHODS","args","self","constructor","props","JustifiedLayout","FrameLayout","SquareLayout","PackingLayout"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"infinitegrid.esm.js","sources":["../src/consts.js","../src/InfiniteGrid.svelte","../src/InfiniteGrid.js","../src/grids/MasonryInfiniteGrid.js","../src/grids/JustifiedInfiniteGrid.js","../src/grids/FrameInfiniteGrid.js","../src/grids/PackingInfiniteGrid.js"],"sourcesContent":["export const SVELTE_INFINITEGRID_PROPS = [\n \"status\",\n \"useFirstRender\",\n \"useLoading\",\n \"usePlaceholder\",\n \"items\",\n \"itemBy\",\n \"groupBy\",\n];\n","<script>\n /**\n * egjs-infinitegrid\n * Copyright (c) 2021-present NAVER Corp.\n * MIT license\n */\n import {\n onMount,\n beforeUpdate,\n createEventDispatcher,\n onDestroy,\n afterUpdate,\n } from \"svelte\";\n import VanillaInfiniteGrid, {\n INFINITEGRID_EVENTS,\n InfiniteGridOptions,\n Renderer,\n CONTAINER_CLASS_NAME,\n getRenderingItems,\n mountRenderingItems,\n } from \"@egjs/infinitegrid\";\n import { SVELTE_INFINITEGRID_PROPS } from \"./consts\";\n export let GridClass;\n\n const dispatch = createEventDispatcher();\n const renderer = new Renderer();\n let wrapper;\n let container;\n let grid;\n let isFirstMount = false;\n let attributes = {};\n let visibleItems = [];\n\n function updateAttributes() {\n attributes = { ...$$props };\n\n const defaultOptions = GridClass.defaultOptions;\n\n delete attributes[\"GridClass\"];\n for (const name in defaultOptions) {\n delete attributes[name];\n }\n SVELTE_INFINITEGRID_PROPS.forEach((name) => {\n delete attributes[name];\n });\n }\n function getItemInfos() {\n const items = $$props.items || [];\n const itemBy = $$props.itemBy || ((item) => item.key);\n const groupBy = $$props.groupBy || ((item) => item.groupKey);\n\n return items.map((item, i) => {\n return {\n groupKey: groupBy(item, i),\n key: itemBy(item, i),\n data: item,\n };\n });\n }\n function updateVisibleChildren() {\n visibleItems = getRenderingItems(getItemInfos(), {\n grid,\n status: $$props.status,\n usePlaceholder: $$props.usePlaceholder,\n useFirstRender: $$props.useFirstRender,\n useLoading: $$props.useLoading,\n horizontal: $$props.horizontal,\n });\n }\n\n beforeUpdate(() => {\n updateAttributes();\n updateVisibleChildren();\n });\n onMount(() => {\n const defaultOptions = GridClass.defaultOptions;\n const options = {};\n\n for (const name in defaultOptions) {\n if (name in $$props) {\n options[name] = $$props[name];\n }\n }\n if (container) {\n options.container = container;\n }\n options.renderer = renderer;\n grid = new GridClass(wrapper, options);\n\n for (const name in INFINITEGRID_EVENTS) {\n const eventName = INFINITEGRID_EVENTS[name];\n\n grid.on(eventName, (e) => {\n dispatch(eventName, e);\n });\n }\n renderer.on(\"requestUpdate\", () => {\n updateVisibleChildren();\n });\n mountRenderingItems(getItemInfos(), {\n grid,\n status: $$props.status,\n usePlaceholder: $$props.usePlaceholder,\n useFirstRender: $$props.useFirstRender,\n useLoading: $$props.useLoading,\n horizontal: $$props.horizontal,\n });\n renderer.updated();\n });\n afterUpdate(() => {\n if (isFirstMount) {\n isFirstMount = false;\n return;\n }\n const propertyTypes = GridClass.propertyTypes;\n\n for (const name in propertyTypes) {\n if (name in $$props) {\n grid[name] = $$props[name];\n }\n }\n renderer.updated();\n });\n onDestroy(() => {\n grid?.destroy();\n });\n export function getInstance() {\n return grid;\n }\n</script>\n\n<div bind:this={wrapper} {...attributes}>\n {#if $$props.container === true}\n <div class={CONTAINER_CLASS_NAME} bind:this={container}>\n <slot {visibleItems} />\n </div>\n {:else}\n <slot {visibleItems} />\n {/if}\n</div>\n","/**\n * egjs-infinitegrid\n * Copyright (c) 2021-present NAVER Corp.\n * MIT license\n */\nimport InfiniteGrid from \"./InfiniteGrid.svelte\";\nimport { INFINITEGRID_METHODS } from \"@egjs/infinitegrid\";\n\nexport default /*#__PURE__*/ (() => {\n const prototype = InfiniteGrid.prototype;\n\n if (prototype) {\n INFINITEGRID_METHODS.forEach(name => {\n if (name in prototype) {\n return;\n }\n prototype[name] = function (...args) {\n const self = this.getInstance();\n const result = self[name](...args);\n\n if (result === self) {\n return this;\n } else {\n return result;\n }\n };\n });\n }\n return InfiniteGrid;\n})();\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { MasonryInfiniteGrid as GridClass } from \"@egjs/infinitegrid\";\n\n\nlet MasonryInfiniteGrid;\n\nif (typeof InfiniteGrid === \"object\") {\n MasonryInfiniteGrid = InfiniteGrid;\n} else {\n MasonryInfiniteGrid = class MasonryInfiniteGrid extends InfiniteGrid {\n constructor(options) {\n options.props.GridClass = GridClass;\n super(options);\n }\n }\n}\nexport { MasonryInfiniteGrid };\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { JustifiedInfiniteGrid as GridClass } from \"@egjs/infinitegrid\";\n\n\nlet JustifiedInfiniteGrid;\n\nif (typeof InfiniteGrid === \"object\") {\n JustifiedInfiniteGrid = InfiniteGrid;\n} else {\n JustifiedInfiniteGrid = class JustifiedInfiniteGrid extends InfiniteGrid {\n constructor(options) {\n options.props.GridClass = GridClass;\n super(options);\n }\n }\n}\nexport { JustifiedInfiniteGrid };\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { FrameInfiniteGrid as GridClass } from \"@egjs/infinitegrid\";\n\n\nlet FrameInfiniteGrid;\n\nif (typeof InfiniteGrid === \"object\") {\n FrameInfiniteGrid = InfiniteGrid;\n} else {\n FrameInfiniteGrid = class FrameInfiniteGrid extends InfiniteGrid {\n constructor(options) {\n options.props.GridClass = GridClass;\n super(options);\n }\n }\n}\nexport { FrameInfiniteGrid };\n","import InfiniteGrid from \"../InfiniteGrid.svelte\";\nimport { PackingInfiniteGrid as GridClass } from \"@egjs/infinitegrid\";\n\n\nlet PackingInfiniteGrid;\n\nif (typeof InfiniteGrid === \"object\") {\n PackingInfiniteGrid = InfiniteGrid;\n} else {\n PackingInfiniteGrid = class PackingInfiniteGrid extends InfiniteGrid {\n constructor(options) {\n options.props.GridClass = GridClass;\n super(options);\n }\n }\n}\nexport { PackingInfiniteGrid };\n"],"names":["SVELTE_INFINITEGRID_PROPS","CONTAINER_CLASS_NAME","insert","ctx","container","GridClass","dispatch","createEventDispatcher","renderer","Renderer","wrapper","grid","attributes","visibleItems","updateAttributes","$$props","defaultOptions","name","forEach","getItemInfos","items","itemBy","item","key","groupBy","groupKey","map","i","data","updateVisibleChildren","getRenderingItems","status","usePlaceholder","useFirstRender","useLoading","horizontal","beforeUpdate","onMount","options","INFINITEGRID_EVENTS","eventName","on","e","mountRenderingItems","updated","afterUpdate","propertyTypes","onDestroy","destroy","getInstance","prototype","InfiniteGrid","INFINITEGRID_METHODS","args","self","result","MasonryInfiniteGrid","constructor","props","JustifiedInfiniteGrid","FrameInfiniteGrid","PackingInfiniteGrid"],"mappings":"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"}
|
package/global.d.ts
ADDED
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@egjs/svelte-infinitegrid",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "A Svelte component that can
|
|
3
|
+
"version": "4.0.1-beta.1",
|
|
4
|
+
"description": "A Svelte component that can arrange items infinitely according to the type of grids",
|
|
5
5
|
"sideEffects": false,
|
|
6
|
+
"svelte": "src/index.js",
|
|
6
7
|
"types": "src/index.d.ts",
|
|
7
8
|
"module": "dist/infinitegrid.esm.js",
|
|
8
9
|
"main": "dist/infinitegrid.cjs.js",
|
|
@@ -18,66 +19,56 @@
|
|
|
18
19
|
},
|
|
19
20
|
"license": "MIT",
|
|
20
21
|
"homepage": "https://github.com/naver/egjs-infinitegrid",
|
|
21
|
-
"peerDependencies": {
|
|
22
|
-
"react": "^15.4.2 || ^16.0.0 || ^17.0.0",
|
|
23
|
-
"react-dom": "^15.4.2 || ^16.0.0 || ^17.0.0"
|
|
24
|
-
},
|
|
25
22
|
"keywords": [
|
|
26
23
|
"svelte",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"virtual-scroll",
|
|
30
|
-
"virtual-list",
|
|
31
|
-
"infinitegrid",
|
|
32
|
-
"infinite",
|
|
33
|
-
"scroll",
|
|
34
|
-
"layout",
|
|
35
|
-
"DOM",
|
|
36
|
-
"html",
|
|
37
|
-
"gallery",
|
|
24
|
+
"lazyloading",
|
|
25
|
+
"ready",
|
|
38
26
|
"grid",
|
|
39
|
-
"
|
|
27
|
+
"image",
|
|
28
|
+
"video",
|
|
29
|
+
"egjs",
|
|
40
30
|
"masonry",
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"SquareLayout"
|
|
31
|
+
"justified",
|
|
32
|
+
"packing",
|
|
33
|
+
"frame",
|
|
34
|
+
"layout"
|
|
46
35
|
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "rollup -c rollup.build.config.js",
|
|
38
|
+
"storybook": "start-storybook -p 6010 -s public",
|
|
39
|
+
"build-storybook": "build-storybook -s public"
|
|
40
|
+
},
|
|
47
41
|
"devDependencies": {
|
|
48
42
|
"@babel/core": "^7.12.10",
|
|
49
|
-
"@
|
|
50
|
-
"@
|
|
51
|
-
"@
|
|
43
|
+
"@egjs/build-helper": "^0.1.2",
|
|
44
|
+
"@rollup/plugin-commonjs": "^17.0.0",
|
|
45
|
+
"@rollup/plugin-node-resolve": "^11.0.0",
|
|
46
|
+
"@rollup/plugin-typescript": "^8.0.0",
|
|
47
|
+
"@storybook/addon-actions": "^6.1.11",
|
|
48
|
+
"@storybook/addon-essentials": "^6.1.11",
|
|
49
|
+
"@storybook/addon-links": "^6.1.11",
|
|
50
|
+
"@storybook/svelte": "^6.1.11",
|
|
52
51
|
"@testing-library/jest-dom": "^5.11.8",
|
|
53
52
|
"@testing-library/svelte": "^3.0.3",
|
|
54
|
-
"@
|
|
55
|
-
"babel-
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"rollup": "^1.12.0",
|
|
53
|
+
"@tsconfig/svelte": "^1.0.0",
|
|
54
|
+
"babel-loader": "^8.2.2",
|
|
55
|
+
"raw-loader": "^4.0.2",
|
|
56
|
+
"rollup": "^2.3.4",
|
|
59
57
|
"rollup-plugin-css-only": "^3.1.0",
|
|
60
|
-
"rollup-plugin-livereload": "^
|
|
58
|
+
"rollup-plugin-livereload": "^2.0.0",
|
|
61
59
|
"rollup-plugin-svelte": "^7.0.0",
|
|
62
|
-
"rollup-plugin-terser": "^
|
|
63
|
-
"sirv-cli": "^0.
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"svelte
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
60
|
+
"rollup-plugin-terser": "^7.0.0",
|
|
61
|
+
"sirv-cli": "^1.0.0",
|
|
62
|
+
"storybook-addon-preview": "^2.1.1",
|
|
63
|
+
"storybook-dark-mode": "^1.0.7",
|
|
64
|
+
"svelte": "^3.0.0",
|
|
65
|
+
"svelte-check": "^1.0.0",
|
|
66
|
+
"svelte-loader": "^2.13.6",
|
|
67
|
+
"svelte-preprocess": "^4.0.0",
|
|
68
|
+
"tslib": "^2.0.0",
|
|
69
|
+
"typescript": "^4.0.0"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@egjs/infinitegrid": "~
|
|
73
|
-
},
|
|
74
|
-
"scripts": {
|
|
75
|
-
"build": "rollup -c rollup.build.config.js",
|
|
76
|
-
"dev": "rollup -c -w",
|
|
77
|
-
"start": "sirv public --single",
|
|
78
|
-
"start:dev": "sirv public --single --dev",
|
|
79
|
-
"build:dev": "rollup -c",
|
|
80
|
-
"test": "jest --watchAll",
|
|
81
|
-
"coverage": "jest --coverage && print-coveralls --sort=desc"
|
|
72
|
+
"@egjs/infinitegrid": "~4.0.0"
|
|
82
73
|
}
|
|
83
74
|
}
|
package/public/global.css
CHANGED
|
@@ -32,6 +32,7 @@ label {
|
|
|
32
32
|
input, button, select, textarea {
|
|
33
33
|
font-family: inherit;
|
|
34
34
|
font-size: inherit;
|
|
35
|
+
-webkit-padding: 0.4em 0;
|
|
35
36
|
padding: 0.4em;
|
|
36
37
|
margin: 0 0 0.5em 0;
|
|
37
38
|
box-sizing: border-box;
|
|
@@ -43,17 +44,17 @@ input:disabled {
|
|
|
43
44
|
color: #ccc;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
input[type="range"] {
|
|
47
|
-
height: 0;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
47
|
button {
|
|
51
48
|
color: #333;
|
|
52
49
|
background-color: #f4f4f4;
|
|
53
50
|
outline: none;
|
|
54
51
|
}
|
|
55
52
|
|
|
56
|
-
button:
|
|
53
|
+
button:disabled {
|
|
54
|
+
color: #999;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
button:not(:disabled):active {
|
|
57
58
|
background-color: #ddd;
|
|
58
59
|
}
|
|
59
60
|
|
package/public/index.html
CHANGED
package/rollup.config.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import svelte from 'rollup-plugin-svelte';
|
|
2
|
-
import commonjs from 'rollup
|
|
3
|
-
import resolve from 'rollup
|
|
2
|
+
import commonjs from '@rollup/plugin-commonjs';
|
|
3
|
+
import resolve from '@rollup/plugin-node-resolve';
|
|
4
4
|
import livereload from 'rollup-plugin-livereload';
|
|
5
5
|
import { terser } from 'rollup-plugin-terser';
|
|
6
6
|
import sveltePreprocess from 'svelte-preprocess';
|
|
7
|
-
import typescript from 'rollup
|
|
7
|
+
import typescript from '@rollup/plugin-typescript';
|
|
8
8
|
import css from 'rollup-plugin-css-only';
|
|
9
9
|
|
|
10
10
|
const production = !process.env.ROLLUP_WATCH;
|
|
@@ -31,7 +31,7 @@ function serve() {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export default {
|
|
34
|
-
input: 'src/
|
|
34
|
+
input: 'src/main.ts',
|
|
35
35
|
output: {
|
|
36
36
|
sourcemap: true,
|
|
37
37
|
format: 'iife',
|
|
@@ -40,10 +40,11 @@ export default {
|
|
|
40
40
|
},
|
|
41
41
|
plugins: [
|
|
42
42
|
svelte({
|
|
43
|
-
preprocess: sveltePreprocess(),
|
|
43
|
+
preprocess: sveltePreprocess({ sourceMap: !production }),
|
|
44
44
|
compilerOptions: {
|
|
45
45
|
// enable run-time checks when not in production
|
|
46
|
-
dev: !production
|
|
46
|
+
dev: !production,
|
|
47
|
+
generate: "ssr",
|
|
47
48
|
}
|
|
48
49
|
}),
|
|
49
50
|
// we'll extract any component CSS out into
|
package/src/InfiniteGrid.js
CHANGED
|
@@ -1,23 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* egjs-infinitegrid
|
|
3
|
+
* Copyright (c) 2021-present NAVER Corp.
|
|
4
|
+
* MIT license
|
|
5
|
+
*/
|
|
1
6
|
import InfiniteGrid from "./InfiniteGrid.svelte";
|
|
2
7
|
import { INFINITEGRID_METHODS } from "@egjs/infinitegrid";
|
|
3
8
|
|
|
4
9
|
export default /*#__PURE__*/ (() => {
|
|
5
|
-
|
|
10
|
+
const prototype = InfiniteGrid.prototype;
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
if (prototype) {
|
|
13
|
+
INFINITEGRID_METHODS.forEach(name => {
|
|
14
|
+
if (name in prototype) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
prototype[name] = function (...args) {
|
|
18
|
+
const self = this.getInstance();
|
|
19
|
+
const result = self[name](...args);
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
if (result === self) {
|
|
22
|
+
return this;
|
|
23
|
+
} else {
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return InfiniteGrid;
|
|
23
30
|
})();
|
package/src/InfiniteGrid.svelte
CHANGED
|
@@ -1,186 +1,139 @@
|
|
|
1
|
-
<script
|
|
1
|
+
<script>
|
|
2
|
+
/**
|
|
3
|
+
* egjs-infinitegrid
|
|
4
|
+
* Copyright (c) 2021-present NAVER Corp.
|
|
5
|
+
* MIT license
|
|
6
|
+
*/
|
|
2
7
|
import {
|
|
3
8
|
onMount,
|
|
4
|
-
onDestroy,
|
|
5
9
|
beforeUpdate,
|
|
10
|
+
createEventDispatcher,
|
|
11
|
+
onDestroy,
|
|
6
12
|
afterUpdate,
|
|
7
|
-
createEventDispatcher
|
|
8
13
|
} from "svelte";
|
|
9
|
-
import
|
|
14
|
+
import {
|
|
10
15
|
INFINITEGRID_EVENTS,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
Renderer,
|
|
17
|
+
CONTAINER_CLASS_NAME,
|
|
18
|
+
getRenderingItems,
|
|
19
|
+
mountRenderingItems,
|
|
15
20
|
} from "@egjs/infinitegrid";
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
ILayout,
|
|
19
|
-
IInfiniteGridStatus,
|
|
20
|
-
IInfiniteGridItem,
|
|
21
|
-
} from "@egjs/infinitegrid";
|
|
22
|
-
import LoadingChecker from "./LoadingChecker.svelte";
|
|
23
|
-
import { PROP_NAMES } from "./consts";
|
|
24
|
-
|
|
25
|
-
export let groupBy = (item, index) => item.groupKey;
|
|
26
|
-
export let itemBy = (item, index) => item.key;
|
|
27
|
-
export let items: any[] = [];
|
|
28
|
-
export let useFirstRender = false;
|
|
29
|
-
export let status: IInfiniteGridStatus | null = null;
|
|
30
|
-
export let layoutType: new () => ILayout = GridLayout;
|
|
31
|
-
export let options: Partial<IInfiniteGridOptions> = {};
|
|
32
|
-
export let layoutOptions: { [key: string]: any } = {};
|
|
33
|
-
export let _forceCount = 0;
|
|
21
|
+
import { SVELTE_INFINITEGRID_PROPS } from "./consts";
|
|
22
|
+
export let GridClass;
|
|
34
23
|
|
|
35
24
|
const dispatch = createEventDispatcher();
|
|
36
|
-
|
|
37
|
-
let
|
|
38
|
-
let
|
|
39
|
-
let
|
|
40
|
-
let
|
|
41
|
-
let ig: VanillaInfiniteGrid;
|
|
42
|
-
let hasLoadingElement = true;
|
|
25
|
+
const renderer = new Renderer();
|
|
26
|
+
let wrapper;
|
|
27
|
+
let container;
|
|
28
|
+
let grid;
|
|
29
|
+
let isFirstMount = false;
|
|
43
30
|
let attributes = {};
|
|
44
|
-
let
|
|
45
|
-
|
|
46
|
-
function toItems(items) {
|
|
47
|
-
return items.map((item, i) => ({
|
|
48
|
-
groupKey: groupBy(item, i),
|
|
49
|
-
itemKey: itemBy(item, i),
|
|
50
|
-
data: item
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
function beforeSync(items) {
|
|
54
|
-
return ig.beforeSync(toItems(items));
|
|
55
|
-
}
|
|
56
|
-
function getLoadingElement() {
|
|
57
|
-
if (hasLoadingElement) {
|
|
58
|
-
const el = container || viewer;
|
|
59
|
-
|
|
60
|
-
return el!.lastElementChild;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function getElements() {
|
|
64
|
-
const el = container || viewer;
|
|
65
|
-
const elements = [].slice.call(el!.children);
|
|
31
|
+
let visibleItems = [];
|
|
66
32
|
|
|
67
|
-
if (hasLoadingElement) {
|
|
68
|
-
return elements.slice(0, -1);
|
|
69
|
-
}
|
|
70
|
-
return elements;
|
|
71
|
-
}
|
|
72
33
|
function updateAttributes() {
|
|
73
34
|
attributes = { ...$$props };
|
|
74
35
|
|
|
75
|
-
|
|
36
|
+
const defaultOptions = GridClass.defaultOptions;
|
|
37
|
+
|
|
38
|
+
delete attributes["GridClass"];
|
|
39
|
+
for (const name in defaultOptions) {
|
|
40
|
+
delete attributes[name];
|
|
41
|
+
}
|
|
42
|
+
SVELTE_INFINITEGRID_PROPS.forEach((name) => {
|
|
76
43
|
delete attributes[name];
|
|
77
44
|
});
|
|
78
45
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
46
|
+
function getItemInfos() {
|
|
47
|
+
const items = $$props.items || [];
|
|
48
|
+
const itemBy = $$props.itemBy || ((item) => item.key);
|
|
49
|
+
const groupBy = $$props.groupBy || ((item) => item.groupKey);
|
|
50
|
+
|
|
51
|
+
return items.map((item, i) => {
|
|
52
|
+
return {
|
|
53
|
+
groupKey: groupBy(item, i),
|
|
54
|
+
key: itemBy(item, i),
|
|
55
|
+
data: item,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
90
58
|
}
|
|
59
|
+
function updateVisibleChildren() {
|
|
60
|
+
visibleItems = getRenderingItems(getItemInfos(), {
|
|
61
|
+
grid,
|
|
62
|
+
status: $$props.status,
|
|
63
|
+
usePlaceholder: $$props.usePlaceholder,
|
|
64
|
+
useFirstRender: $$props.useFirstRender,
|
|
65
|
+
useLoading: $$props.useLoading,
|
|
66
|
+
horizontal: $$props.horizontal,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
91
70
|
beforeUpdate(() => {
|
|
92
71
|
updateAttributes();
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
72
|
+
updateVisibleChildren();
|
|
73
|
+
});
|
|
74
|
+
onMount(() => {
|
|
75
|
+
const defaultOptions = GridClass.defaultOptions;
|
|
76
|
+
const options = {};
|
|
97
77
|
|
|
98
|
-
|
|
99
|
-
|
|
78
|
+
for (const name in defaultOptions) {
|
|
79
|
+
if (name in $$props) {
|
|
80
|
+
options[name] = $$props[name];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (container) {
|
|
84
|
+
options.container = container;
|
|
85
|
+
}
|
|
86
|
+
options.renderer = renderer;
|
|
87
|
+
grid = new GridClass(wrapper, options);
|
|
100
88
|
|
|
101
|
-
const
|
|
89
|
+
for (const name in INFINITEGRID_EVENTS) {
|
|
90
|
+
const eventName = INFINITEGRID_EVENTS[name];
|
|
102
91
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
append: loadingElement,
|
|
106
|
-
prepend: loadingElement
|
|
92
|
+
grid.on(eventName, (e) => {
|
|
93
|
+
dispatch(eventName, e);
|
|
107
94
|
});
|
|
108
|
-
} else {
|
|
109
|
-
ig.setLoadingBar();
|
|
110
95
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
ig = new VanillaInfiniteGrid(viewer!, {
|
|
114
|
-
...options,
|
|
115
|
-
renderExternal: true
|
|
116
|
-
}).on("render", ({ next }) => {
|
|
117
|
-
setTimeout(() => {
|
|
118
|
-
nextFunction = next;
|
|
119
|
-
++_forceCount;
|
|
120
|
-
});
|
|
96
|
+
renderer.on("requestUpdate", () => {
|
|
97
|
+
updateVisibleChildren();
|
|
121
98
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
99
|
+
mountRenderingItems(getItemInfos(), {
|
|
100
|
+
grid,
|
|
101
|
+
status: $$props.status,
|
|
102
|
+
usePlaceholder: $$props.usePlaceholder,
|
|
103
|
+
useFirstRender: $$props.useFirstRender,
|
|
104
|
+
useLoading: $$props.useLoading,
|
|
105
|
+
horizontal: $$props.horizontal,
|
|
126
106
|
});
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const loadingElement = getLoadingElement();
|
|
130
|
-
|
|
131
|
-
if (loadingElement) {
|
|
132
|
-
ig.setLoadingBar({
|
|
133
|
-
append: loadingElement,
|
|
134
|
-
prepend: loadingElement
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
if (status) {
|
|
138
|
-
setStatus(status, true);
|
|
139
|
-
} else {
|
|
140
|
-
beforeSync(items);
|
|
141
|
-
ig.layout(true);
|
|
142
|
-
}
|
|
107
|
+
renderer.updated();
|
|
143
108
|
});
|
|
144
109
|
afterUpdate(() => {
|
|
145
110
|
if (isFirstMount) {
|
|
146
111
|
isFirstMount = false;
|
|
147
112
|
return;
|
|
148
113
|
}
|
|
149
|
-
const
|
|
150
|
-
nextFunction = () => {};
|
|
151
|
-
ig.sync(getElements());
|
|
114
|
+
const propertyTypes = GridClass.propertyTypes;
|
|
152
115
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
116
|
+
for (const name in propertyTypes) {
|
|
117
|
+
if (name in $$props) {
|
|
118
|
+
grid[name] = $$props[name];
|
|
119
|
+
}
|
|
156
120
|
}
|
|
157
|
-
|
|
121
|
+
renderer.updated();
|
|
158
122
|
});
|
|
159
123
|
onDestroy(() => {
|
|
160
|
-
|
|
124
|
+
grid?.destroy();
|
|
161
125
|
});
|
|
162
|
-
|
|
163
126
|
export function getInstance() {
|
|
164
|
-
return
|
|
165
|
-
}
|
|
166
|
-
export function setStatus(status: IInfiniteGridStatus, applyScrollPos?: boolean, syncElements: HTMLElement[] = getElements()) {
|
|
167
|
-
ig.setStatus(status, applyScrollPos, syncElements);
|
|
168
|
-
return ig;
|
|
127
|
+
return grid;
|
|
169
128
|
}
|
|
170
129
|
</script>
|
|
171
130
|
|
|
172
|
-
<div
|
|
173
|
-
{#if
|
|
174
|
-
<div class={
|
|
131
|
+
<div bind:this={wrapper} {...attributes}>
|
|
132
|
+
{#if $$props.container === true}
|
|
133
|
+
<div class={CONTAINER_CLASS_NAME} bind:this={container}>
|
|
175
134
|
<slot {visibleItems} />
|
|
176
|
-
<slot name="loading">
|
|
177
|
-
<LoadingChecker bind:hasLoading={hasLoadingElement} />
|
|
178
|
-
</slot>
|
|
179
135
|
</div>
|
|
180
136
|
{:else}
|
|
181
137
|
<slot {visibleItems} />
|
|
182
|
-
<slot name="loading">
|
|
183
|
-
<LoadingChecker bind:hasLoading={hasLoadingElement} />
|
|
184
|
-
</slot>
|
|
185
138
|
{/if}
|
|
186
139
|
</div>
|
package/src/consts.js
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
export const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"options",
|
|
10
|
-
"layoutOptions",
|
|
11
|
-
"_forceCount",
|
|
12
|
-
"viewer",
|
|
13
|
-
"container"
|
|
1
|
+
export const SVELTE_INFINITEGRID_PROPS = [
|
|
2
|
+
"status",
|
|
3
|
+
"useFirstRender",
|
|
4
|
+
"useLoading",
|
|
5
|
+
"usePlaceholder",
|
|
6
|
+
"items",
|
|
7
|
+
"itemBy",
|
|
8
|
+
"groupBy",
|
|
14
9
|
];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import InfiniteGrid from "../InfiniteGrid.svelte";
|
|
2
|
+
import { FrameInfiniteGrid as GridClass } from "@egjs/infinitegrid";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
let FrameInfiniteGrid;
|
|
6
|
+
|
|
7
|
+
if (typeof InfiniteGrid === "object") {
|
|
8
|
+
FrameInfiniteGrid = InfiniteGrid;
|
|
9
|
+
} else {
|
|
10
|
+
FrameInfiniteGrid = class FrameInfiniteGrid extends InfiniteGrid {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
options.props.GridClass = GridClass;
|
|
13
|
+
super(options);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export { FrameInfiniteGrid };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import InfiniteGrid from "../InfiniteGrid.svelte";
|
|
2
|
+
import { JustifiedInfiniteGrid as GridClass } from "@egjs/infinitegrid";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
let JustifiedInfiniteGrid;
|
|
6
|
+
|
|
7
|
+
if (typeof InfiniteGrid === "object") {
|
|
8
|
+
JustifiedInfiniteGrid = InfiniteGrid;
|
|
9
|
+
} else {
|
|
10
|
+
JustifiedInfiniteGrid = class JustifiedInfiniteGrid extends InfiniteGrid {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
options.props.GridClass = GridClass;
|
|
13
|
+
super(options);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export { JustifiedInfiniteGrid };
|