@egjs/vue3-flicking 4.3.0 → 4.4.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"flicking.esm.js","sources":["../src/VuePanel.ts","../src/VueRenderer.ts","../src/VuePanelComponent.ts","../src/Flicking.ts"],"sourcesContent":["import { ExternalPanel } from \"@egjs/flicking\";\n\nimport VuePanelComponent from \"./VuePanelComponent\";\n\nclass VuePanel extends ExternalPanel<VuePanelComponent> {\n public get element() {\n return (this._externalComponent.$.subTree.children as any)[0].el as HTMLElement;\n }\n\n public get rendered() { return !this._externalComponent.hide; }\n\n public markForShow() {\n this._externalComponent.hide = false;\n }\n\n public markForHide() {\n this._externalComponent.hide = true;\n }\n}\n\nexport default VuePanel;\n","import { ExternalRenderer, PanelOptions, RendererOptions } from \"@egjs/flicking\";\n\nimport VueFlicking from \"./Flicking\";\nimport VuePanel from \"./VuePanel\";\nimport VuePanelComponent from \"./VuePanelComponent\";\n\nexport interface VueRendererOptions extends RendererOptions {\n vueFlicking: VueFlicking;\n}\n\nclass VueRenderer extends ExternalRenderer {\n // Internal States\n protected _vueFlicking: VueFlicking;\n\n public constructor(options: VueRendererOptions) {\n super(options);\n\n this._vueFlicking = options.vueFlicking;\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async render() {\n const flicking = this._flicking;\n\n if (!flicking) return;\n\n this._updateRenderingPanels();\n this._vueFlicking.$forceUpdate();\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n public async forceRenderAllPanels() {\n this._panels.forEach(panel => panel.markForShow());\n this._vueFlicking.$forceUpdate();\n }\n\n protected _collectPanels() {\n const align = this._getPanelAlign();\n const childRefs = this._vueFlicking.$refs;\n const children: any[] = Object.keys(childRefs).map(refKey => childRefs[refKey]);\n\n this._panels = children.map((panelComponent, index) => new VuePanel({\n flicking: this._flicking!,\n index,\n align,\n externalComponent: panelComponent\n }));\n }\n\n protected _createPanel(externalComponent: VuePanelComponent, options: PanelOptions) {\n return new VuePanel({ externalComponent, ...options });\n }\n}\n\nexport default VueRenderer;\n","\nimport { Vue } from \"vue-class-component\";\n\nclass VuePanelComponent extends Vue {\n public hide: boolean = false;\n\n public render() {\n if (this.hide || !this.$slots.default) return;\n\n return this.$slots.default() as any;\n }\n}\n\nexport default VuePanelComponent;\n","/**\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n/* eslint-disable max-classes-per-file */\n/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Vue, Options, prop, VueConstructor } from \"vue-class-component\";\nimport ListDiffer, { DiffResult } from \"@egjs/list-differ\";\nimport { h, VNode, resolveComponent, Fragment } from \"vue\";\nimport VanillaFlicking, {\n EVENTS,\n FlickingOptions,\n withFlickingMethods,\n sync,\n Plugin,\n Status,\n getRenderingPanels,\n getDefaultCameraTransform\n} from \"@egjs/flicking\";\n\nimport VueRenderer from \"./VueRenderer\";\nimport VuePanelComponent from \"./VuePanelComponent\";\n\nclass FlickingProps {\n viewportTag = prop<string>({ required: false, default: \"div\" });\n cameraTag = prop<string>({ required: false, default: \"div\" });\n hideBeforeInit = prop<boolean>({ required: false, default: false });\n firstPanelSize = prop<string>({ required: false });\n options = prop<Partial<FlickingOptions>>({ required: false, default: {} });\n plugins = prop<Plugin[]>({ required: false, default: [] });\n status = prop<Status>({ required: false });\n}\n\n@Options({\n components: {\n Panel: VuePanelComponent\n }\n})\nclass Flicking extends Vue.with(FlickingProps) {\n @withFlickingMethods private vanillaFlicking: VanillaFlicking | null = null;\n private pluginsDiffer!: ListDiffer<Plugin>;\n private slotDiffer!: ListDiffer<VNode>;\n private diffResult?: DiffResult<VNode> = undefined;\n\n public mounted() {\n const viewportEl = this.$el as HTMLElement;\n const flicking = new VanillaFlicking(viewportEl, {\n ...this.options,\n ...{ renderExternal: {\n renderer: VueRenderer,\n rendererOptions: { vueFlicking: this }\n }}\n });\n this.vanillaFlicking = flicking;\n\n flicking.once(EVENTS.READY, () => {\n this.$forceUpdate();\n });\n\n const slots = this.getSlots();\n this.slotDiffer = new ListDiffer<VNode>(slots, vnode => vnode.key! as string | number);\n this.pluginsDiffer = new ListDiffer<Plugin>();\n\n this._bindEvents();\n this._checkPlugins();\n if (this.status) {\n flicking.setStatus(this.status);\n }\n }\n\n public beforeDestroy() {\n this.vanillaFlicking?.destroy();\n }\n\n public beforeMount() {\n this._fillKeys();\n }\n\n public beforeUpdate() {\n this._fillKeys();\n }\n\n public updated() {\n const flicking = this.vanillaFlicking;\n const diffResult = this.diffResult;\n\n if (!diffResult) return;\n\n const children = (this.$.subTree as any).children[0].children.map((c: any) => c.component.ctx);\n\n sync(flicking!, diffResult, children);\n\n this._checkPlugins();\n\n if (diffResult.added.length > 0 || diffResult.removed.length > 0) {\n this.$forceUpdate();\n }\n }\n\n public render() {\n const flicking = this.vanillaFlicking;\n const initialized = flicking && flicking.initialized;\n const isHorizontal = flicking\n ? flicking.horizontal\n : this.options.horizontal ?? true;\n\n const viewportData = {\n class: {\n \"flicking-viewport\": true,\n \"vertical\": !isHorizontal,\n \"flicking-hidden\": this.hideBeforeInit && !initialized\n }\n };\n const cameraData = {\n class: {\n \"flicking-camera\": true\n },\n style: !initialized && this.firstPanelSize\n ? { transform: getDefaultCameraTransform(this.options.align, this.options.horizontal, this.firstPanelSize) }\n : {}\n };\n\n const getPanels = () => {\n const defaultSlots = this.getSlots();\n this.diffResult = initialized\n ? this.slotDiffer.update(defaultSlots)\n : undefined;\n\n const slots = this.diffResult\n ? getRenderingPanels(flicking!, this.diffResult)\n : defaultSlots;\n const panelComponent = resolveComponent(\"Panel\");\n const panels = slots.map((slot, idx) => h(panelComponent as any, {\n key: slot.key!,\n ref: idx.toString()\n }, () => slot));\n\n return panels;\n };\n\n const viewportSlots = this.$slots.viewport\n ? this.$slots.viewport()\n : [];\n\n return h(this.viewportTag, viewportData,\n [h(this.cameraTag, cameraData, { default: getPanels }), ...viewportSlots]\n );\n }\n\n public getSlots() {\n const slots = this.$slots.default\n ? this.$slots.default()\n : [];\n\n return slots.reduce((elementSlots, slot) => [...elementSlots, ...this.getElementVNodes(slot)], [] as VNode[]);\n }\n\n public getElementVNodes(slot: VNode, childSlots: VNode[] = []): VNode[] {\n if (slot.type === Fragment && Array.isArray(slot.children)) {\n slot.children\n .filter(child => child && typeof child === \"object\")\n .forEach(child => this.getElementVNodes(child as VNode, childSlots));\n } else {\n childSlots.push(slot);\n }\n\n return childSlots;\n }\n\n private _bindEvents() {\n const flicking = this.vanillaFlicking;\n const events = (Object.keys(EVENTS) as Array<keyof typeof EVENTS>)\n .map(key => EVENTS[key]);\n\n events.forEach(eventName => {\n flicking!.on(eventName, (e: any) => {\n e.currentTarget = this;\n // Make events from camelCase to kebab-case\n this.$emit(eventName.replace(/([A-Z])/g, \"-$1\").toLowerCase(), e);\n });\n });\n }\n\n private _checkPlugins() {\n const { list, added, removed, prevList } = this.pluginsDiffer.update(this.plugins);\n\n this.vanillaFlicking!.addPlugins(...added.map(index => list[index]));\n this.vanillaFlicking!.removePlugins(...removed.map(index => prevList[index]));\n }\n\n private _fillKeys() {\n const vnodes = this.getSlots();\n\n vnodes.forEach((node, idx) => {\n if (node.key == null) {\n node.key = `$_${idx}`;\n }\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface Flicking extends VanillaFlicking, VueConstructor<Vue & FlickingProps> {}\nexport default Flicking;\n"],"names":["__extends","Object","_externalComponent","$","subTree","children","el","hide","ExternalPanel","options","_super","_this","_vueFlicking","vueFlicking","flicking","_flicking","_updateRenderingPanels","$forceUpdate","_panels","forEach","panel","markForShow","align","_getPanelAlign","childRefs","$refs","keys","map","refKey","panelComponent","index","VuePanel","externalComponent","ExternalRenderer","$slots","default","Vue","prop","required","undefined","viewportEl","$el","VanillaFlicking","renderExternal","renderer","VueRenderer","rendererOptions","vanillaFlicking","once","EVENTS","READY","slots","getSlots","slotDiffer","ListDiffer","vnode","key","pluginsDiffer","_bindEvents","_checkPlugins","status","setStatus","destroy","_fillKeys","diffResult","c","component","ctx","sync","added","length","removed","initialized","isHorizontal","horizontal","viewportData","class","hideBeforeInit","cameraData","style","firstPanelSize","transform","getDefaultCameraTransform","getPanels","defaultSlots","update","getRenderingPanels","resolveComponent","panels","slot","idx","h","ref","toString","viewportSlots","viewport","viewportTag","cameraTag","reduce","elementSlots","getElementVNodes","childSlots","type","Fragment","Array","isArray","filter","child","push","events","eventName","on","e","currentTarget","$emit","replace","toLowerCase","_c","plugins","list","prevList","_a","addPlugins","_b","removePlugins","vnodes","node","__decorate","withFlickingMethods","Flicking","Options","components","Panel","VuePanelComponent","with","FlickingProps"],"mappings":"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"}
1
+ {"version":3,"file":"flicking.esm.js","sources":["../src/FlickingProps.ts","../src/VueRenderer.ts","../src/VuePanel.ts","../src/VueElementProvider.ts","../src/Flicking.ts"],"sourcesContent":["/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { PropType } from \"vue\";\nimport { FlickingOptions, Plugin, Status } from \"@egjs/flicking\";\n\nexport default {\n viewportTag: {\n type: String,\n default: \"div\",\n required: false\n },\n cameraTag: {\n type: String,\n default: \"div\",\n required: false\n },\n hideBeforeInit: {\n type: Boolean,\n default: false,\n required: false\n },\n firstPanelSize: {\n type: String,\n required: false\n },\n options: {\n type: Object as unknown as () => Partial<FlickingOptions>,\n default: () => ({}),\n required: false\n },\n plugins: {\n type: Array as PropType<Plugin[]>,\n default: () => ([]),\n required: false\n },\n status: {\n type: Object as PropType<Status>,\n required: false\n }\n};\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport {\n ExternalRenderer,\n getFlickingAttached,\n PanelOptions,\n RendererOptions\n} from \"@egjs/flicking\";\n\nimport VueFlicking from \"./Flicking\";\nimport VuePanel from \"./VuePanel\";\n\nexport interface VueRendererOptions extends RendererOptions {\n vueFlicking: VueFlicking;\n}\n\nclass VueRenderer extends ExternalRenderer {\n // Internal States\n private _vueFlicking: VueFlicking;\n\n public constructor(options: VueRendererOptions) {\n super(options);\n\n this._vueFlicking = options.vueFlicking;\n }\n\n public async render() {\n const flicking = getFlickingAttached(this._flicking);\n const vueFlicking = this._vueFlicking;\n const strategy = this._strategy;\n\n strategy.updateRenderingPanels(flicking);\n strategy.renderPanels(flicking);\n\n return new Promise<void>((resolve) => {\n vueFlicking.renderEmitter.once(\"render\", resolve);\n vueFlicking.$forceUpdate();\n });\n }\n\n public async forceRenderAllPanels() {\n const vueFlicking = this._vueFlicking;\n\n await super.forceRenderAllPanels();\n\n return new Promise<void>((resolve) => {\n vueFlicking.renderEmitter.once(\"render\", resolve);\n vueFlicking.$forceUpdate();\n });\n }\n\n protected _collectPanels() {\n const flicking = getFlickingAttached(this._flicking);\n const vueFlicking = this._vueFlicking;\n const childRefs = vueFlicking.$refs;\n const vuePanels: any[] = Object.keys(childRefs).map(refKey => childRefs[refKey]);\n\n this._panels = this._strategy.collectPanels(flicking, vuePanels);\n }\n\n protected _createPanel(externalComponent: VuePanel, options: PanelOptions) {\n return this._strategy.createPanel(externalComponent, options);\n }\n}\n\nexport default VueRenderer;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { defineComponent } from \"vue\";\n\nconst VuePanel = defineComponent({\n data() {\n return {\n hide: false\n };\n },\n render() {\n if (this.hide || !this.$slots.default) return;\n\n return this.$slots.default();\n }\n});\n\ntype VuePanelType = InstanceType<typeof VuePanel>;\n\ninterface VuePanel extends VuePanelType {}\nexport default VuePanel;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { ElementProvider } from \"@egjs/flicking\";\n\nimport VuePanel from \"./VuePanel\";\n\nclass VueElementProvider implements ElementProvider {\n private _el: VuePanel;\n private _cachedElement: HTMLElement;\n\n public get rendered() { return !this._el.hide; }\n public get element() {\n const el = this._el.$el.nextSibling as HTMLElement;\n\n if (el && el.nodeType === Node.ELEMENT_NODE) {\n this._cachedElement = el;\n }\n\n return this._cachedElement;\n }\n\n public constructor(el: VuePanel) {\n this._el = el;\n }\n\n public show() {\n this._el.hide = false;\n }\n\n public hide() {\n this._el.hide = true;\n }\n}\n\nexport default VueElementProvider;\n","/*\n * Copyright (c) 2015 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport { h, defineComponent, VNode, resolveComponent, Fragment, getCurrentInstance } from \"vue\";\nimport ListDiffer, { DiffResult } from \"@egjs/list-differ\";\nimport Component from \"@egjs/component\";\nimport VanillaFlicking, {\n EVENTS,\n withFlickingMethods,\n sync,\n Plugin,\n getRenderingPanels,\n getDefaultCameraTransform,\n range,\n VirtualRenderingStrategy,\n NormalRenderingStrategy\n} from \"@egjs/flicking\";\n\nimport FlickingProps from \"./FlickingProps\";\nimport VueRenderer, { VueRendererOptions } from \"./VueRenderer\";\nimport VuePanel from \"./VuePanel\";\nimport VueElementProvider from \"./VueElementProvider\";\nimport { VueFlicking } from \"./types\";\n\nconst Flicking = defineComponent({\n props: FlickingProps,\n components: {\n Panel: VuePanel\n },\n data() {\n return {} as {\n renderEmitter: Component<{ render: void }>;\n vanillaFlicking: VanillaFlicking;\n pluginsDiffer: ListDiffer<Plugin>;\n slotDiffer: ListDiffer<VNode>;\n diffResult: DiffResult<VNode> | null;\n };\n },\n created() {\n this.vanillaFlicking = null;\n this.renderEmitter = new Component();\n this.diffResult = null;\n\n this.getPanels = () => {\n const componentInstance = getCurrentInstance() as unknown as { ctx: Flicking } | null;\n const vueFlicking = componentInstance?.ctx;\n const flicking = this.vanillaFlicking;\n const defaultSlots = this.getSlots();\n const diffResult = vueFlicking?.diffResult;\n\n const slots = diffResult\n ? getRenderingPanels(flicking, diffResult)\n : defaultSlots;\n\n const panelComponent = resolveComponent(\"Panel\");\n const panels = slots.map((slot, idx) => h(panelComponent as any, {\n key: slot.key!,\n ref: idx.toString()\n }, () => slot));\n\n return panels;\n };\n this.getVirtualPanels = () => {\n const options = this.options;\n const {\n panelClass = \"flicking-panel\"\n } = options.virtual!;\n const panelsPerView = options.panelsPerView as number;\n const flicking = this.vanillaFlicking;\n const initialized = flicking && flicking.initialized;\n\n const renderingIndexes = initialized\n ? flicking.renderer.strategy.getRenderingIndexesByOrder(flicking)\n : range(panelsPerView + 1);\n\n const firstPanel = initialized && flicking.panels[0];\n const size = firstPanel\n ? flicking.horizontal\n ? { width: firstPanel.size }\n : { height: firstPanel.size }\n : {};\n\n return renderingIndexes.map(idx => h(\"div\", {\n key: idx,\n ref: idx.toString(),\n class: panelClass,\n style: size,\n \"data-element-index\": idx\n }));\n };\n\n withFlickingMethods(this, \"vanillaFlicking\");\n },\n mounted() {\n const options = this.options;\n const viewportEl = this.$el as HTMLElement;\n const rendererOptions: VueRendererOptions = {\n vueFlicking: this,\n align: options.align,\n strategy: options.virtual && (options.panelsPerView ?? -1) > 0\n ? new VirtualRenderingStrategy()\n : new NormalRenderingStrategy({\n providerCtor: VueElementProvider\n })\n };\n\n const flicking = new VanillaFlicking(viewportEl, {\n ...options,\n externalRenderer: new VueRenderer(rendererOptions)\n });\n this.vanillaFlicking = flicking;\n\n flicking.once(EVENTS.READY, () => {\n this.$forceUpdate();\n });\n\n const slots = this.getSlots();\n this.slotDiffer = new ListDiffer<VNode>(slots, vnode => vnode.key! as string | number);\n this.pluginsDiffer = new ListDiffer<Plugin>();\n\n this.bindEvents();\n this.checkPlugins();\n\n if (this.status) {\n flicking.setStatus(this.status);\n }\n },\n beforeUnmount() {\n this.vanillaFlicking?.destroy();\n },\n beforeMount() {\n this.fillKeys();\n },\n beforeUpdate() {\n this.fillKeys();\n\n this.diffResult = this.slotDiffer.update(this.getSlots());\n },\n updated() {\n const flicking = this.vanillaFlicking;\n const diffResult = this.diffResult;\n\n this.checkPlugins();\n this.renderEmitter.trigger(\"render\");\n\n if (!diffResult || !flicking?.initialized) return;\n\n const children = this.getChildren();\n\n sync(flicking, diffResult, children);\n\n if (diffResult.added.length > 0 || diffResult.removed.length > 0) {\n this.$forceUpdate();\n }\n\n this.diffResult = undefined;\n },\n render() {\n const flicking = this.vanillaFlicking;\n const options = this.options;\n const initialized = flicking && flicking.initialized;\n const isHorizontal = flicking\n ? flicking.horizontal\n : this.options.horizontal ?? true;\n\n const viewportData = {\n class: {\n \"flicking-viewport\": true,\n \"vertical\": !isHorizontal,\n \"flicking-hidden\": this.hideBeforeInit && !initialized\n }\n };\n const cameraData = {\n class: {\n \"flicking-camera\": true\n },\n style: !initialized && this.firstPanelSize\n ? { transform: getDefaultCameraTransform(this.options.align, this.options.horizontal, this.firstPanelSize) }\n : {}\n };\n\n const panels = options.virtual && options.panelsPerView && options.panelsPerView > 0\n ? this.getVirtualPanels\n : this.getPanels;\n\n const viewportSlots = this.$slots.viewport\n ? this.$slots.viewport()\n : [];\n\n return h(this.viewportTag, viewportData,\n [h(this.cameraTag, cameraData, { default: panels }), ...viewportSlots]\n );\n },\n methods: {\n getSlots() {\n const slots = this.$slots.default\n ? this.$slots.default()\n : [];\n\n return slots.reduce((elementSlots, slot) => [...elementSlots, ...this.getElementVNodes(slot)], [] as VNode[]);\n },\n getElementVNodes(slot: VNode, childSlots: VNode[] = []): VNode[] {\n if (slot.type === Fragment && Array.isArray(slot.children)) {\n slot.children\n .filter(child => child && typeof child === \"object\")\n .forEach(child => this.getElementVNodes(child as VNode, childSlots));\n } else {\n childSlots.push(slot);\n }\n\n return childSlots;\n },\n bindEvents() {\n const flicking = this.vanillaFlicking;\n const events = (Object.keys(EVENTS) as Array<keyof typeof EVENTS>)\n .map(key => EVENTS[key]);\n\n events.forEach(eventName => {\n flicking.on(eventName, (e: any) => {\n e.currentTarget = this;\n // Make events from camelCase to kebab-case\n this.$emit(eventName.replace(/([A-Z])/g, \"-$1\").toLowerCase(), e);\n });\n });\n },\n checkPlugins() {\n const { list, added, removed, prevList } = this.pluginsDiffer.update(this.plugins);\n\n this.vanillaFlicking!.addPlugins(...added.map(index => list[index]));\n this.vanillaFlicking!.removePlugins(...removed.map(index => prevList[index]));\n },\n fillKeys() {\n const vnodes = this.getSlots();\n\n vnodes.forEach((node, idx) => {\n if (node.key == null) {\n node.key = `$_${idx}`;\n }\n });\n },\n getChildren() {\n const childRefs = this.$refs;\n\n return Object.keys(childRefs).map(refKey => childRefs[refKey]);\n }\n }\n}) as unknown as VueFlicking;\n\ninterface Flicking extends VueFlicking, VanillaFlicking {}\nexport default Flicking;\n"],"names":["viewportTag","type","String","default","required","cameraTag","hideBeforeInit","Boolean","firstPanelSize","options","Object","plugins","Array","status","__extends","_super","_this","_vueFlicking","vueFlicking","flicking","getFlickingAttached","_flicking","strategy","_strategy","updateRenderingPanels","renderPanels","Promise","resolve","renderEmitter","once","$forceUpdate","forceRenderAllPanels","_a","childRefs","$refs","vuePanels","keys","map","refKey","_panels","collectPanels","externalComponent","createPanel","ExternalRenderer","VuePanel","defineComponent","data","hide","render","$slots","el","_el","$el","nextSibling","nodeType","Node","ELEMENT_NODE","_cachedElement","Flicking","props","FlickingProps","components","Panel","created","vanillaFlicking","Component","diffResult","getPanels","componentInstance","getCurrentInstance","ctx","defaultSlots","getSlots","slots","getRenderingPanels","panelComponent","resolveComponent","panels","slot","idx","h","key","ref","toString","getVirtualPanels","virtual","panelClass","panelsPerView","initialized","renderingIndexes","renderer","getRenderingIndexesByOrder","range","firstPanel","size","horizontal","width","height","class","style","withFlickingMethods","mounted","viewportEl","rendererOptions","align","VirtualRenderingStrategy","NormalRenderingStrategy","providerCtor","VueElementProvider","VanillaFlicking","externalRenderer","VueRenderer","EVENTS","READY","slotDiffer","ListDiffer","vnode","pluginsDiffer","bindEvents","checkPlugins","setStatus","beforeUnmount","destroy","beforeMount","fillKeys","beforeUpdate","update","updated","trigger","children","getChildren","sync","added","length","removed","undefined","isHorizontal","viewportData","cameraData","transform","getDefaultCameraTransform","viewportSlots","viewport","methods","reduce","elementSlots","getElementVNodes","childSlots","Fragment","isArray","filter","child","forEach","push","events","eventName","on","e","currentTarget","$emit","replace","toLowerCase","_c","list","prevList","addPlugins","index","_b","removePlugins","vnodes","node"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@egjs/vue3-flicking",
3
- "version": "4.3.0",
3
+ "version": "4.4.2",
4
4
  "description": "Everyday 30 million people experience. It's reliable, flexible and extendable carousel.",
5
5
  "main": "dist/flicking.cjs.js",
6
6
  "module": "dist/flicking.esm.js",
@@ -30,15 +30,14 @@
30
30
  "not op_mini all"
31
31
  ],
32
32
  "dependencies": {
33
- "@egjs/flicking": "^4.3.0",
34
- "vue-class-component": "^8.0.0-rc.1"
33
+ "@egjs/flicking": "^4.4.1"
35
34
  },
36
35
  "peerDependencies": {
37
36
  "vue": "^3.0.0"
38
37
  },
39
38
  "devDependencies": {
40
39
  "@egjs/build-helper": "^0.1.2",
41
- "@egjs/flicking-plugins": "^4.2.1",
40
+ "@egjs/flicking-plugins": "^4.2.2",
42
41
  "@rollup/plugin-commonjs": "^19.0.2",
43
42
  "@vue/cli-plugin-typescript": "~4.5.0",
44
43
  "@vue/cli-service": "~4.5.0",
@@ -46,7 +45,7 @@
46
45
  "cpx": "^1.5.0",
47
46
  "rollup-plugin-vue": "^6.0.0",
48
47
  "tslib": "^2.3.1",
49
- "typescript": "^4.1.6",
50
- "vue": "^3.2.6"
48
+ "typescript": "^4.2.3",
49
+ "vue": "^3.2.22"
51
50
  }
52
51
  }
package/src/Flicking.ts CHANGED
@@ -1,56 +1,113 @@
1
- /**
1
+ /*
2
2
  * Copyright (c) 2015 NAVER Corp.
3
3
  * egjs projects are licensed under the MIT license
4
4
  */
5
- /* eslint-disable max-classes-per-file */
6
- /* eslint-disable @typescript-eslint/explicit-member-accessibility */
7
- /* eslint-disable @typescript-eslint/naming-convention */
8
- import { Vue, Options, prop, VueConstructor } from "vue-class-component";
5
+ import { h, defineComponent, VNode, resolveComponent, Fragment, getCurrentInstance } from "vue";
9
6
  import ListDiffer, { DiffResult } from "@egjs/list-differ";
10
- import { h, VNode, resolveComponent, Fragment } from "vue";
7
+ import Component from "@egjs/component";
11
8
  import VanillaFlicking, {
12
9
  EVENTS,
13
- FlickingOptions,
14
10
  withFlickingMethods,
15
11
  sync,
16
12
  Plugin,
17
- Status,
18
13
  getRenderingPanels,
19
- getDefaultCameraTransform
14
+ getDefaultCameraTransform,
15
+ range,
16
+ VirtualRenderingStrategy,
17
+ NormalRenderingStrategy
20
18
  } from "@egjs/flicking";
21
19
 
22
- import VueRenderer from "./VueRenderer";
23
- import VuePanelComponent from "./VuePanelComponent";
20
+ import FlickingProps from "./FlickingProps";
21
+ import VueRenderer, { VueRendererOptions } from "./VueRenderer";
22
+ import VuePanel from "./VuePanel";
23
+ import VueElementProvider from "./VueElementProvider";
24
+ import { VueFlicking } from "./types";
24
25
 
25
- class FlickingProps {
26
- viewportTag = prop<string>({ required: false, default: "div" });
27
- cameraTag = prop<string>({ required: false, default: "div" });
28
- hideBeforeInit = prop<boolean>({ required: false, default: false });
29
- firstPanelSize = prop<string>({ required: false });
30
- options = prop<Partial<FlickingOptions>>({ required: false, default: {} });
31
- plugins = prop<Plugin[]>({ required: false, default: [] });
32
- status = prop<Status>({ required: false });
33
- }
34
-
35
- @Options({
26
+ const Flicking = defineComponent({
27
+ props: FlickingProps,
36
28
  components: {
37
- Panel: VuePanelComponent
38
- }
39
- })
40
- class Flicking extends Vue.with(FlickingProps) {
41
- @withFlickingMethods private vanillaFlicking: VanillaFlicking | null = null;
42
- private pluginsDiffer!: ListDiffer<Plugin>;
43
- private slotDiffer!: ListDiffer<VNode>;
44
- private diffResult?: DiffResult<VNode> = undefined;
45
-
46
- public mounted() {
29
+ Panel: VuePanel
30
+ },
31
+ data() {
32
+ return {} as {
33
+ renderEmitter: Component<{ render: void }>;
34
+ vanillaFlicking: VanillaFlicking;
35
+ pluginsDiffer: ListDiffer<Plugin>;
36
+ slotDiffer: ListDiffer<VNode>;
37
+ diffResult: DiffResult<VNode> | null;
38
+ };
39
+ },
40
+ created() {
41
+ this.vanillaFlicking = null;
42
+ this.renderEmitter = new Component();
43
+ this.diffResult = null;
44
+
45
+ this.getPanels = () => {
46
+ const componentInstance = getCurrentInstance() as unknown as { ctx: Flicking } | null;
47
+ const vueFlicking = componentInstance?.ctx;
48
+ const flicking = this.vanillaFlicking;
49
+ const defaultSlots = this.getSlots();
50
+ const diffResult = vueFlicking?.diffResult;
51
+
52
+ const slots = diffResult
53
+ ? getRenderingPanels(flicking, diffResult)
54
+ : defaultSlots;
55
+
56
+ const panelComponent = resolveComponent("Panel");
57
+ const panels = slots.map((slot, idx) => h(panelComponent as any, {
58
+ key: slot.key!,
59
+ ref: idx.toString()
60
+ }, () => slot));
61
+
62
+ return panels;
63
+ };
64
+ this.getVirtualPanels = () => {
65
+ const options = this.options;
66
+ const {
67
+ panelClass = "flicking-panel"
68
+ } = options.virtual!;
69
+ const panelsPerView = options.panelsPerView as number;
70
+ const flicking = this.vanillaFlicking;
71
+ const initialized = flicking && flicking.initialized;
72
+
73
+ const renderingIndexes = initialized
74
+ ? flicking.renderer.strategy.getRenderingIndexesByOrder(flicking)
75
+ : range(panelsPerView + 1);
76
+
77
+ const firstPanel = initialized && flicking.panels[0];
78
+ const size = firstPanel
79
+ ? flicking.horizontal
80
+ ? { width: firstPanel.size }
81
+ : { height: firstPanel.size }
82
+ : {};
83
+
84
+ return renderingIndexes.map(idx => h("div", {
85
+ key: idx,
86
+ ref: idx.toString(),
87
+ class: panelClass,
88
+ style: size,
89
+ "data-element-index": idx
90
+ }));
91
+ };
92
+
93
+ withFlickingMethods(this, "vanillaFlicking");
94
+ },
95
+ mounted() {
96
+ const options = this.options;
47
97
  const viewportEl = this.$el as HTMLElement;
98
+ const rendererOptions: VueRendererOptions = {
99
+ vueFlicking: this,
100
+ align: options.align,
101
+ strategy: options.virtual && (options.panelsPerView ?? -1) > 0
102
+ ? new VirtualRenderingStrategy()
103
+ : new NormalRenderingStrategy({
104
+ providerCtor: VueElementProvider
105
+ })
106
+ };
107
+
48
108
  const flicking = new VanillaFlicking(viewportEl, {
49
- ...this.options,
50
- ...{ renderExternal: {
51
- renderer: VueRenderer,
52
- rendererOptions: { vueFlicking: this }
53
- }}
109
+ ...options,
110
+ externalRenderer: new VueRenderer(rendererOptions)
54
111
  });
55
112
  this.vanillaFlicking = flicking;
56
113
 
@@ -62,44 +119,46 @@ class Flicking extends Vue.with(FlickingProps) {
62
119
  this.slotDiffer = new ListDiffer<VNode>(slots, vnode => vnode.key! as string | number);
63
120
  this.pluginsDiffer = new ListDiffer<Plugin>();
64
121
 
65
- this._bindEvents();
66
- this._checkPlugins();
122
+ this.bindEvents();
123
+ this.checkPlugins();
124
+
67
125
  if (this.status) {
68
126
  flicking.setStatus(this.status);
69
127
  }
70
- }
71
-
72
- public beforeDestroy() {
128
+ },
129
+ beforeUnmount() {
73
130
  this.vanillaFlicking?.destroy();
74
- }
75
-
76
- public beforeMount() {
77
- this._fillKeys();
78
- }
79
-
80
- public beforeUpdate() {
81
- this._fillKeys();
82
- }
83
-
84
- public updated() {
131
+ },
132
+ beforeMount() {
133
+ this.fillKeys();
134
+ },
135
+ beforeUpdate() {
136
+ this.fillKeys();
137
+
138
+ this.diffResult = this.slotDiffer.update(this.getSlots());
139
+ },
140
+ updated() {
85
141
  const flicking = this.vanillaFlicking;
86
142
  const diffResult = this.diffResult;
87
143
 
88
- if (!diffResult) return;
144
+ this.checkPlugins();
145
+ this.renderEmitter.trigger("render");
89
146
 
90
- const children = (this.$.subTree as any).children[0].children.map((c: any) => c.component.ctx);
147
+ if (!diffResult || !flicking?.initialized) return;
91
148
 
92
- sync(flicking!, diffResult, children);
149
+ const children = this.getChildren();
93
150
 
94
- this._checkPlugins();
151
+ sync(flicking, diffResult, children);
95
152
 
96
153
  if (diffResult.added.length > 0 || diffResult.removed.length > 0) {
97
154
  this.$forceUpdate();
98
155
  }
99
- }
100
156
 
101
- public render() {
157
+ this.diffResult = undefined;
158
+ },
159
+ render() {
102
160
  const flicking = this.vanillaFlicking;
161
+ const options = this.options;
103
162
  const initialized = flicking && flicking.initialized;
104
163
  const isHorizontal = flicking
105
164
  ? flicking.horizontal
@@ -121,85 +180,72 @@ class Flicking extends Vue.with(FlickingProps) {
121
180
  : {}
122
181
  };
123
182
 
124
- const getPanels = () => {
125
- const defaultSlots = this.getSlots();
126
- this.diffResult = initialized
127
- ? this.slotDiffer.update(defaultSlots)
128
- : undefined;
129
-
130
- const slots = this.diffResult
131
- ? getRenderingPanels(flicking!, this.diffResult)
132
- : defaultSlots;
133
- const panelComponent = resolveComponent("Panel");
134
- const panels = slots.map((slot, idx) => h(panelComponent as any, {
135
- key: slot.key!,
136
- ref: idx.toString()
137
- }, () => slot));
138
-
139
- return panels;
140
- };
183
+ const panels = options.virtual && options.panelsPerView && options.panelsPerView > 0
184
+ ? this.getVirtualPanels
185
+ : this.getPanels;
141
186
 
142
187
  const viewportSlots = this.$slots.viewport
143
188
  ? this.$slots.viewport()
144
189
  : [];
145
190
 
146
191
  return h(this.viewportTag, viewportData,
147
- [h(this.cameraTag, cameraData, { default: getPanels }), ...viewportSlots]
192
+ [h(this.cameraTag, cameraData, { default: panels }), ...viewportSlots]
148
193
  );
149
- }
150
-
151
- public getSlots() {
152
- const slots = this.$slots.default
153
- ? this.$slots.default()
154
- : [];
155
-
156
- return slots.reduce((elementSlots, slot) => [...elementSlots, ...this.getElementVNodes(slot)], [] as VNode[]);
157
- }
158
-
159
- public getElementVNodes(slot: VNode, childSlots: VNode[] = []): VNode[] {
160
- if (slot.type === Fragment && Array.isArray(slot.children)) {
161
- slot.children
162
- .filter(child => child && typeof child === "object")
163
- .forEach(child => this.getElementVNodes(child as VNode, childSlots));
164
- } else {
165
- childSlots.push(slot);
166
- }
167
-
168
- return childSlots;
169
- }
194
+ },
195
+ methods: {
196
+ getSlots() {
197
+ const slots = this.$slots.default
198
+ ? this.$slots.default()
199
+ : [];
200
+
201
+ return slots.reduce((elementSlots, slot) => [...elementSlots, ...this.getElementVNodes(slot)], [] as VNode[]);
202
+ },
203
+ getElementVNodes(slot: VNode, childSlots: VNode[] = []): VNode[] {
204
+ if (slot.type === Fragment && Array.isArray(slot.children)) {
205
+ slot.children
206
+ .filter(child => child && typeof child === "object")
207
+ .forEach(child => this.getElementVNodes(child as VNode, childSlots));
208
+ } else {
209
+ childSlots.push(slot);
210
+ }
170
211
 
171
- private _bindEvents() {
172
- const flicking = this.vanillaFlicking;
173
- const events = (Object.keys(EVENTS) as Array<keyof typeof EVENTS>)
174
- .map(key => EVENTS[key]);
175
-
176
- events.forEach(eventName => {
177
- flicking!.on(eventName, (e: any) => {
178
- e.currentTarget = this;
179
- // Make events from camelCase to kebab-case
180
- this.$emit(eventName.replace(/([A-Z])/g, "-$1").toLowerCase(), e);
212
+ return childSlots;
213
+ },
214
+ bindEvents() {
215
+ const flicking = this.vanillaFlicking;
216
+ const events = (Object.keys(EVENTS) as Array<keyof typeof EVENTS>)
217
+ .map(key => EVENTS[key]);
218
+
219
+ events.forEach(eventName => {
220
+ flicking.on(eventName, (e: any) => {
221
+ e.currentTarget = this;
222
+ // Make events from camelCase to kebab-case
223
+ this.$emit(eventName.replace(/([A-Z])/g, "-$1").toLowerCase(), e);
224
+ });
181
225
  });
182
- });
183
- }
184
-
185
- private _checkPlugins() {
186
- const { list, added, removed, prevList } = this.pluginsDiffer.update(this.plugins);
187
-
188
- this.vanillaFlicking!.addPlugins(...added.map(index => list[index]));
189
- this.vanillaFlicking!.removePlugins(...removed.map(index => prevList[index]));
190
- }
191
-
192
- private _fillKeys() {
193
- const vnodes = this.getSlots();
226
+ },
227
+ checkPlugins() {
228
+ const { list, added, removed, prevList } = this.pluginsDiffer.update(this.plugins);
229
+
230
+ this.vanillaFlicking!.addPlugins(...added.map(index => list[index]));
231
+ this.vanillaFlicking!.removePlugins(...removed.map(index => prevList[index]));
232
+ },
233
+ fillKeys() {
234
+ const vnodes = this.getSlots();
235
+
236
+ vnodes.forEach((node, idx) => {
237
+ if (node.key == null) {
238
+ node.key = `$_${idx}`;
239
+ }
240
+ });
241
+ },
242
+ getChildren() {
243
+ const childRefs = this.$refs;
194
244
 
195
- vnodes.forEach((node, idx) => {
196
- if (node.key == null) {
197
- node.key = `$_${idx}`;
198
- }
199
- });
245
+ return Object.keys(childRefs).map(refKey => childRefs[refKey]);
246
+ }
200
247
  }
201
- }
248
+ }) as unknown as VueFlicking;
202
249
 
203
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
204
- interface Flicking extends VanillaFlicking, VueConstructor<Vue & FlickingProps> {}
250
+ interface Flicking extends VueFlicking, VanillaFlicking {}
205
251
  export default Flicking;
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright (c) 2015 NAVER Corp.
3
+ * egjs projects are licensed under the MIT license
4
+ */
5
+ import { PropType } from "vue";
6
+ import { FlickingOptions, Plugin, Status } from "@egjs/flicking";
7
+
8
+ export default {
9
+ viewportTag: {
10
+ type: String,
11
+ default: "div",
12
+ required: false
13
+ },
14
+ cameraTag: {
15
+ type: String,
16
+ default: "div",
17
+ required: false
18
+ },
19
+ hideBeforeInit: {
20
+ type: Boolean,
21
+ default: false,
22
+ required: false
23
+ },
24
+ firstPanelSize: {
25
+ type: String,
26
+ required: false
27
+ },
28
+ options: {
29
+ type: Object as unknown as () => Partial<FlickingOptions>,
30
+ default: () => ({}),
31
+ required: false
32
+ },
33
+ plugins: {
34
+ type: Array as PropType<Plugin[]>,
35
+ default: () => ([]),
36
+ required: false
37
+ },
38
+ status: {
39
+ type: Object as PropType<Status>,
40
+ required: false
41
+ }
42
+ };
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright (c) 2015 NAVER Corp.
3
+ * egjs projects are licensed under the MIT license
4
+ */
5
+ import { ElementProvider } from "@egjs/flicking";
6
+
7
+ import VuePanel from "./VuePanel";
8
+
9
+ class VueElementProvider implements ElementProvider {
10
+ private _el: VuePanel;
11
+ private _cachedElement: HTMLElement;
12
+
13
+ public get rendered() { return !this._el.hide; }
14
+ public get element() {
15
+ const el = this._el.$el.nextSibling as HTMLElement;
16
+
17
+ if (el && el.nodeType === Node.ELEMENT_NODE) {
18
+ this._cachedElement = el;
19
+ }
20
+
21
+ return this._cachedElement;
22
+ }
23
+
24
+ public constructor(el: VuePanel) {
25
+ this._el = el;
26
+ }
27
+
28
+ public show() {
29
+ this._el.hide = false;
30
+ }
31
+
32
+ public hide() {
33
+ this._el.hide = true;
34
+ }
35
+ }
36
+
37
+ export default VueElementProvider;
package/src/VuePanel.ts CHANGED
@@ -1,21 +1,24 @@
1
- import { ExternalPanel } from "@egjs/flicking";
1
+ /*
2
+ * Copyright (c) 2015 NAVER Corp.
3
+ * egjs projects are licensed under the MIT license
4
+ */
2
5
 
3
- import VuePanelComponent from "./VuePanelComponent";
6
+ import { defineComponent } from "vue";
4
7
 
5
- class VuePanel extends ExternalPanel<VuePanelComponent> {
6
- public get element() {
7
- return (this._externalComponent.$.subTree.children as any)[0].el as HTMLElement;
8
- }
9
-
10
- public get rendered() { return !this._externalComponent.hide; }
8
+ const VuePanel = defineComponent({
9
+ data() {
10
+ return {
11
+ hide: false
12
+ };
13
+ },
14
+ render() {
15
+ if (this.hide || !this.$slots.default) return;
11
16
 
12
- public markForShow() {
13
- this._externalComponent.hide = false;
17
+ return this.$slots.default();
14
18
  }
19
+ });
15
20
 
16
- public markForHide() {
17
- this._externalComponent.hide = true;
18
- }
19
- }
21
+ type VuePanelType = InstanceType<typeof VuePanel>;
20
22
 
23
+ interface VuePanel extends VuePanelType {}
21
24
  export default VuePanel;