@egjs/flicking 4.4.0 → 4.4.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.
Files changed (33) hide show
  1. package/declaration/Flicking.d.ts +5 -2
  2. package/declaration/core/panel/index.d.ts +2 -3
  3. package/declaration/core/panel/provider/ElementProvider.d.ts +1 -0
  4. package/declaration/core/panel/provider/VanillaElementProvider.d.ts +2 -0
  5. package/declaration/core/panel/provider/VirtualElementProvider.d.ts +2 -0
  6. package/declaration/core/panel/provider/index.d.ts +1 -2
  7. package/declaration/renderer/ExternalRenderer.d.ts +0 -1
  8. package/declaration/renderer/strategy/NormalRenderingStrategy.d.ts +1 -3
  9. package/dist/flicking.esm.js +4061 -4003
  10. package/dist/flicking.esm.js.map +1 -1
  11. package/dist/flicking.js +4181 -4124
  12. package/dist/flicking.js.map +1 -1
  13. package/dist/flicking.min.js +2 -2
  14. package/dist/flicking.min.js.map +1 -1
  15. package/dist/flicking.pkgd.js +4703 -5028
  16. package/dist/flicking.pkgd.js.map +1 -1
  17. package/dist/flicking.pkgd.min.js +2 -2
  18. package/dist/flicking.pkgd.min.js.map +1 -1
  19. package/package.json +9 -22
  20. package/src/Flicking.ts +31 -18
  21. package/src/core/Viewport.ts +4 -4
  22. package/src/core/VirtualManager.ts +1 -1
  23. package/src/core/panel/index.ts +1 -4
  24. package/src/core/panel/provider/ElementProvider.ts +1 -0
  25. package/src/core/panel/provider/VanillaElementProvider.ts +5 -0
  26. package/src/core/panel/provider/VirtualElementProvider.ts +5 -2
  27. package/src/core/panel/provider/index.ts +1 -3
  28. package/src/renderer/ExternalRenderer.ts +1 -33
  29. package/src/renderer/strategy/NormalRenderingStrategy.ts +3 -6
  30. package/declaration/core/panel/ExternalPanel.d.ts +0 -13
  31. package/declaration/core/panel/provider/ExternalElementProvider.d.ts +0 -8
  32. package/src/core/panel/ExternalPanel.ts +0 -40
  33. package/src/core/panel/provider/ExternalElementProvider.ts +0 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@egjs/flicking",
3
- "version": "4.4.0",
3
+ "version": "4.4.1",
4
4
  "description": "Everyday 30 million people experience. It's reliable, flexible and extendable carousel.",
5
5
  "main": "dist/flicking.js",
6
6
  "module": "dist/flicking.esm.js",
@@ -13,9 +13,9 @@
13
13
  "declaration": "rm -rf declaration && tsc -p tsconfig.declaration.json",
14
14
  "css": "postcss css/*.css --use autoprefixer postcss-clean -d dist/ -m",
15
15
  "printsizes": "print-sizes ./dist --exclude=\\.map",
16
- "test": "karma start",
17
- "test:chrome": "karma start --chrome",
18
- "coverage": "karma start --coverage && print-coveralls --sort=desc",
16
+ "test": "npm run test --prefix test/unit",
17
+ "test:chrome": "npm run test:chrome --prefix test/unit",
18
+ "test:cfc": "npm run test --prefix test/cfc",
19
19
  "lint": "eslint 'src/**/*.ts'",
20
20
  "lint:test": "eslint 'test/unit/**/*.ts'",
21
21
  "jsdoc": "jsdoc -c jsdoc.json",
@@ -69,26 +69,22 @@
69
69
  "egjs"
70
70
  ],
71
71
  "devDependencies": {
72
+ "@babel/preset-env": "^7.16.0",
72
73
  "@daybrush/jsdoc": "^0.3.10",
73
- "@egjs/flicking-plugins": "^4.0.0-beta.1",
74
+ "@egjs/flicking-plugins": "^4.2.2",
74
75
  "@egjs/release-helper": "0.0.3",
75
76
  "@rollup/plugin-babel": "^5.3.0",
76
77
  "@rollup/plugin-commonjs": "^11.1.0",
77
78
  "@rollup/plugin-node-resolve": "^7.1.3",
78
79
  "@rollup/plugin-replace": "^2.4.1",
79
- "@types/chai": "^4.2.15",
80
80
  "@types/fs-extra": "^9.0.11",
81
- "@types/karma-chai": "^0.1.1",
82
- "@types/mocha": "^5.2.5",
83
81
  "@types/node": "^14.14.35",
84
- "@types/sinon": "^7.0.3",
85
82
  "@typescript-eslint/eslint-plugin": "^4.18.0",
86
83
  "@typescript-eslint/eslint-plugin-tslint": "^4.18.0",
87
84
  "@typescript-eslint/parser": "^4.18.0",
88
85
  "autoprefixer": "^9.8.5",
89
86
  "babel-loader": "^8.2.2",
90
- "chai": "^4.3.4",
91
- "chalk": "^2.4.2",
87
+ "babel-preset-env": "^1.7.0",
92
88
  "concurrently": "^6.0.0",
93
89
  "core-js": "^3.9.1",
94
90
  "coveralls": "^3.0.2",
@@ -105,15 +101,7 @@
105
101
  "http-serve": "^1.0.1",
106
102
  "husky": "^1.3.1",
107
103
  "jsdoc-to-mdx": "^1.0.5",
108
- "karma": "^3.1.4",
109
- "karma-chai": "^0.1.0",
110
- "karma-chrome-launcher": "^2.2.0",
111
- "karma-mocha": "^1.3.0",
112
- "karma-mocha-reporter": "^2.2.5",
113
- "karma-sinon": "^1.0.5",
114
- "karma-typescript-egjs": "^4.0.0",
115
- "karma-viewport": "^1.0.8",
116
- "mocha": "^5.2.0",
104
+ "karma-typescript-es6-transform": "^5.5.2",
117
105
  "postcss-clean": "^1.2.2",
118
106
  "postcss-cli": "^7.1.1",
119
107
  "print-coveralls": "^1.2.2",
@@ -124,10 +112,9 @@
124
112
  "rollup-plugin-postcss": "^3.1.3",
125
113
  "rollup-plugin-prototype-minify": "^1.1.0",
126
114
  "rollup-plugin-serve": "^1.1.0",
115
+ "rollup-plugin-terser": "^7.0.2",
127
116
  "rollup-plugin-typescript2": "^0.30.0",
128
- "rollup-plugin-uglify": "^6.0.4",
129
117
  "rollup-plugin-visualizer": "^4.2.1",
130
- "sinon": "^7.2.3",
131
118
  "sync-exec": "^0.6.2",
132
119
  "ts-mock-imports": "^1.3.3",
133
120
  "tsconfig-paths-webpack-plugin": "^3.5.1",
package/src/Flicking.ts CHANGED
@@ -80,6 +80,8 @@ export interface FlickingOptions {
80
80
  autoInit: boolean;
81
81
  autoResize: boolean;
82
82
  useResizeObserver: boolean;
83
+ externalRenderer: ExternalRenderer | null;
84
+ // @deprecated
83
85
  renderExternal: {
84
86
  renderer: new (options: RendererOptions) => ExternalRenderer;
85
87
  rendererOptions: RendererOptions;
@@ -146,6 +148,7 @@ class Flicking extends Component<FlickingEvents> {
146
148
  private _autoInit: FlickingOptions["autoInit"];
147
149
  private _autoResize: FlickingOptions["autoResize"];
148
150
  private _useResizeObserver: FlickingOptions["useResizeObserver"];
151
+ private _externalRenderer: FlickingOptions["externalRenderer"];
149
152
  private _renderExternal: FlickingOptions["renderExternal"];
150
153
 
151
154
  // Internal State
@@ -599,10 +602,18 @@ class Flicking extends Component<FlickingEvents> {
599
602
  /**
600
603
  * This is an option for the frameworks(React, Vue, Angular, ...). Don't set it as it's automatically managed by Flicking.
601
604
  * @ko 프레임워크(React, Vue, Angular, ...)에서만 사용하는 옵션으로, 자동으로 설정되므로 따로 사용하실 필요 없습니다!
602
- * @type {boolean}
603
- * @default false
605
+ * @default null
606
+ * @internal
607
+ * @readonly
608
+ */
609
+ public get externalRenderer() { return this._externalRenderer; }
610
+ /**
611
+ * This is an option for the frameworks(React, Vue, Angular, ...). Don't set it as it's automatically managed by Flicking.
612
+ * @ko 프레임워크(React, Vue, Angular, ...)에서만 사용하는 옵션으로, 자동으로 설정되므로 따로 사용하실 필요 없습니다!
613
+ * @default null
604
614
  * @internal
605
615
  * @readonly
616
+ * @deprecated
606
617
  */
607
618
  public get renderExternal() { return this._renderExternal; }
608
619
 
@@ -730,6 +741,7 @@ class Flicking extends Component<FlickingEvents> {
730
741
  autoInit = true,
731
742
  autoResize = true,
732
743
  useResizeObserver = true,
744
+ externalRenderer = null,
733
745
  renderExternal = null
734
746
  }: Partial<FlickingOptions> = {}) {
735
747
  super();
@@ -766,6 +778,7 @@ class Flicking extends Component<FlickingEvents> {
766
778
  this._autoInit = autoInit;
767
779
  this._autoResize = autoResize;
768
780
  this._useResizeObserver = useResizeObserver;
781
+ this._externalRenderer = externalRenderer;
769
782
  this._renderExternal = renderExternal;
770
783
 
771
784
  // Create core components
@@ -1361,16 +1374,26 @@ class Flicking extends Component<FlickingEvents> {
1361
1374
  }
1362
1375
 
1363
1376
  private _createRenderer(): Renderer {
1364
- const renderExternal = this._renderExternal;
1365
-
1377
+ const externalRenderer = this._externalRenderer;
1366
1378
  if (this._virtual && this._panelsPerView <= 0) {
1367
1379
  // eslint-disable-next-line no-console
1368
1380
  console.warn("\"virtual\" and \"panelsPerView\" option should be used together, ignoring virtual.");
1369
1381
  }
1370
1382
 
1371
- return renderExternal
1372
- ? this._createExternalRenderer()
1373
- : this._createVanillaRenderer();
1383
+ return externalRenderer
1384
+ ? externalRenderer
1385
+ : this._renderExternal
1386
+ ? this._createExternalRenderer()
1387
+ : this._createVanillaRenderer();
1388
+ }
1389
+
1390
+ private _createExternalRenderer(): ExternalRenderer {
1391
+ const {
1392
+ renderer,
1393
+ rendererOptions
1394
+ } = this._renderExternal!;
1395
+
1396
+ return new (renderer)({ align: this._align, ...rendererOptions });
1374
1397
  }
1375
1398
 
1376
1399
  private _createVanillaRenderer(): VanillaRenderer {
@@ -1381,21 +1404,11 @@ class Flicking extends Component<FlickingEvents> {
1381
1404
  strategy: virtual
1382
1405
  ? new VirtualRenderingStrategy()
1383
1406
  : new NormalRenderingStrategy({
1384
- providerCtor: VanillaElementProvider,
1385
- panelCtor: Panel
1407
+ providerCtor: VanillaElementProvider
1386
1408
  })
1387
1409
  });
1388
1410
  }
1389
1411
 
1390
- private _createExternalRenderer(): ExternalRenderer {
1391
- const {
1392
- renderer,
1393
- rendererOptions
1394
- } = this._renderExternal!;
1395
-
1396
- return new (renderer)({ align: this._align, ...rendererOptions });
1397
- }
1398
-
1399
1412
  private async _moveToInitialPanel(): Promise<void> {
1400
1413
  const renderer = this._renderer;
1401
1414
  const control = this._control;
@@ -124,10 +124,10 @@ class Viewport {
124
124
  this._width = el.clientWidth;
125
125
  this._height = el.clientHeight;
126
126
  this._padding = {
127
- left: parseFloat(elStyle.paddingLeft),
128
- right: parseFloat(elStyle.paddingRight),
129
- top: parseFloat(elStyle.paddingTop),
130
- bottom: parseFloat(elStyle.paddingBottom)
127
+ left: elStyle.paddingLeft ? parseFloat(elStyle.paddingLeft) : 0,
128
+ right: elStyle.paddingRight ? parseFloat(elStyle.paddingRight) : 0,
129
+ top: elStyle.paddingTop ? parseFloat(elStyle.paddingTop) : 0,
130
+ bottom: elStyle.paddingBottom ? parseFloat(elStyle.paddingBottom) : 0
131
131
  };
132
132
  this._isBorderBoxSizing = elStyle.boxSizing === "border-box";
133
133
  }
@@ -87,7 +87,7 @@ class VirtualManager {
87
87
 
88
88
  if (!flicking.virtualEnabled) return;
89
89
 
90
- if (!flicking.renderExternal) {
90
+ if (!flicking.externalRenderer && !flicking.renderExternal) {
91
91
  this._initVirtualElements();
92
92
  }
93
93
 
@@ -3,18 +3,15 @@
3
3
  * egjs projects are licensed under the MIT license
4
4
  */
5
5
  import Panel, { PanelOptions } from "./Panel";
6
- import ExternalPanel, { ExternalPanelOptions } from "./ExternalPanel";
7
6
  import VirtualPanel from "./VirtualPanel";
8
7
 
9
8
  export * from "./provider";
10
9
 
11
10
  export {
12
11
  Panel,
13
- ExternalPanel,
14
12
  VirtualPanel
15
13
  };
16
14
 
17
15
  export type {
18
- PanelOptions,
19
- ExternalPanelOptions
16
+ PanelOptions
20
17
  };
@@ -6,6 +6,7 @@ import Flicking from "../../../Flicking";
6
6
 
7
7
  interface ElementProvider {
8
8
  element: HTMLElement;
9
+ rendered: boolean;
9
10
  show(flicking: Flicking): void;
10
11
  hide(flicking: Flicking): void;
11
12
  }
@@ -11,11 +11,14 @@ import ElementProvider from "./ElementProvider";
11
11
  */
12
12
  class VanillaElementProvider implements ElementProvider {
13
13
  private _element: HTMLElement;
14
+ private _rendered: boolean;
14
15
 
15
16
  public get element() { return this._element; }
17
+ public get rendered() { return this._rendered; }
16
18
 
17
19
  public constructor(element: HTMLElement) {
18
20
  this._element = element;
21
+ this._rendered = true;
19
22
  }
20
23
 
21
24
  public show(flicking: Flicking): void {
@@ -24,6 +27,7 @@ class VanillaElementProvider implements ElementProvider {
24
27
 
25
28
  if (el.parentElement !== cameraEl) {
26
29
  cameraEl.appendChild(el);
30
+ this._rendered = true;
27
31
  }
28
32
  }
29
33
 
@@ -33,6 +37,7 @@ class VanillaElementProvider implements ElementProvider {
33
37
 
34
38
  if (el.parentElement === cameraEl) {
35
39
  cameraEl.removeChild(el);
40
+ this._rendered = false;
36
41
  }
37
42
  }
38
43
  }
@@ -15,12 +15,15 @@ class VirtualElementProvider implements ElementProvider {
15
15
  private _flicking: Flicking;
16
16
  private _panel: VirtualPanel;
17
17
 
18
- public get element() {
18
+ public get element() { return this._virtualElement.nativeElement; }
19
+ public get rendered() { return this._virtualElement.visible; }
20
+
21
+ private get _virtualElement() {
19
22
  const flicking = this._flicking;
20
23
  const elIndex = this._panel.elementIndex;
21
24
  const virtualElements = flicking.virtual.elements;
22
25
 
23
- return virtualElements[elIndex].nativeElement;
26
+ return virtualElements[elIndex];
24
27
  }
25
28
 
26
29
  public constructor(flicking: Flicking) {
@@ -3,7 +3,6 @@
3
3
  * egjs projects are licensed under the MIT license
4
4
  */
5
5
  import ElementProvider from "./ElementProvider";
6
- import ExternalElementProvider from "./ExternalElementProvider";
7
6
  import VanillaElementProvider from "./VanillaElementProvider";
8
7
  import VirtualElementProvider from "./VirtualElementProvider";
9
8
 
@@ -13,6 +12,5 @@ export {
13
12
  };
14
13
 
15
14
  export type {
16
- ElementProvider,
17
- ExternalElementProvider
15
+ ElementProvider
18
16
  };
@@ -7,14 +7,10 @@ import Panel from "../core/panel/Panel";
7
7
  import Renderer from "./Renderer";
8
8
 
9
9
  /**
10
- *
10
+ * @internal
11
11
  */
12
12
  abstract class ExternalRenderer extends Renderer {
13
13
  /* eslint-disable @typescript-eslint/no-unused-vars */
14
- protected _insertPanelElements(panels: Panel[], nextSibling: Panel | null): void {
15
- // DO NOTHING, overrided to prevent an unexpected error
16
- }
17
-
18
14
  protected _removePanelElements(panels: Panel[]): void {
19
15
  // DO NOTHING, overrided to prevent an unexpected error
20
16
  }
@@ -23,34 +19,6 @@ abstract class ExternalRenderer extends Renderer {
23
19
  // DO NOTHING, overrided to prevent an unexpected error
24
20
  }
25
21
  /* eslint-enable @typescript-eslint/no-unused-vars */
26
-
27
- // protected _renderVirtualPanels() {
28
- // const flicking = getFlickingAttached(this._flicking);
29
- // const virtualManager = this._virtualManager;
30
-
31
- // if (!virtualManager) return;
32
-
33
- // const elements = virtualManager.elements;
34
- // const visiblePanels = flicking.visiblePanels as VirtualPanel[];
35
- // const invisibles = elements.map((_, idx) => idx);
36
-
37
- // visiblePanels.forEach(panel => {
38
- // const virtualEl = panel.virtualElement;
39
-
40
- // invisibles[virtualEl.index] = -1;
41
- // virtualEl.renderingPanel = panel;
42
- // virtualEl.show();
43
- // panel.markForShow();
44
- // });
45
-
46
- // invisibles.filter(val => val >= 0)
47
- // .forEach(idx => {
48
- // const virtualEl = elements[idx];
49
- // virtualEl.hide();
50
- // virtualEl.renderingPanel?.markForHide();
51
- // virtualEl.renderingPanel = null;
52
- // });
53
- // }
54
22
  }
55
23
 
56
24
  export default ExternalRenderer;
@@ -12,17 +12,14 @@ import RenderingStrategy from "./RenderingStrategy";
12
12
 
13
13
  export interface NormalRenderingStrategyOptions {
14
14
  providerCtor: new (...args: any) => ElementProvider;
15
- panelCtor: new (options: PanelOptions) => Panel;
16
15
  }
17
16
 
18
17
 
19
18
  class NormalRenderingStrategy implements RenderingStrategy {
20
19
  private _providerCtor: NormalRenderingStrategyOptions["providerCtor"];
21
- private _panelCtor: NormalRenderingStrategyOptions["panelCtor"];
22
20
 
23
- public constructor({ providerCtor, panelCtor }: NormalRenderingStrategyOptions) {
21
+ public constructor({ providerCtor }: NormalRenderingStrategyOptions) {
24
22
  this._providerCtor = providerCtor;
25
- this._panelCtor = panelCtor;
26
23
  }
27
24
 
28
25
  public renderPanels() {
@@ -58,7 +55,7 @@ class NormalRenderingStrategy implements RenderingStrategy {
58
55
  ) {
59
56
  const align = parsePanelAlign(flicking.renderer.align);
60
57
 
61
- return elements.map((el, index) => new this._panelCtor({
58
+ return elements.map((el, index) => new Panel({
62
59
  index,
63
60
  elementProvider: new this._providerCtor(el),
64
61
  align,
@@ -70,7 +67,7 @@ class NormalRenderingStrategy implements RenderingStrategy {
70
67
  element: any,
71
68
  options: Omit<PanelOptions, "elementProvider">
72
69
  ) {
73
- return new this._panelCtor({
70
+ return new Panel({
74
71
  ...options,
75
72
  elementProvider: new this._providerCtor(element)
76
73
  });
@@ -1,13 +0,0 @@
1
- import Panel, { PanelOptions } from "./Panel";
2
- import ExternalElementProvider from "./provider/ExternalElementProvider";
3
- export interface ExternalPanelOptions extends PanelOptions {
4
- elementProvider: ExternalElementProvider;
5
- }
6
- declare class ExternalPanel extends Panel {
7
- protected _elProvider: ExternalElementProvider;
8
- get rendered(): boolean;
9
- constructor(options: ExternalPanelOptions);
10
- markForShow(): void;
11
- markForHide(): void;
12
- }
13
- export default ExternalPanel;
@@ -1,8 +0,0 @@
1
- import Flicking from "../../../Flicking";
2
- import ElementProvider from "./ElementProvider";
3
- interface ExternalElementProvider extends ElementProvider {
4
- rendered: boolean;
5
- show(flicking: Flicking): any;
6
- hide(flicking: Flicking): any;
7
- }
8
- export default ExternalElementProvider;
@@ -1,40 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 NAVER Corp.
3
- * egjs projects are licensed under the MIT license
4
- */
5
- import Panel, { PanelOptions } from "./Panel";
6
- import ExternalElementProvider from "./provider/ExternalElementProvider";
7
-
8
- export interface ExternalPanelOptions extends PanelOptions {
9
- elementProvider: ExternalElementProvider;
10
- }
11
-
12
- /**
13
- * A slide data component that holds information of a single HTMLElement
14
- * @ko 슬라이드 데이터 컴포넌트로, 단일 HTMLElement의 정보를 갖고 있습니다
15
- */
16
- class ExternalPanel extends Panel {
17
- protected _elProvider: ExternalElementProvider;
18
-
19
- public get rendered() { return this._elProvider.rendered; }
20
-
21
- public constructor(options: ExternalPanelOptions) {
22
- super(options);
23
-
24
- this._elProvider = options.elementProvider;
25
- }
26
-
27
- public markForShow() {
28
- this._elProvider.show(this._flicking);
29
-
30
- return super.markForShow();
31
- }
32
-
33
- public markForHide() {
34
- this._elProvider.hide(this._flicking);
35
-
36
- return super.markForHide();
37
- }
38
- }
39
-
40
- export default ExternalPanel;
@@ -1,15 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 NAVER Corp.
3
- * egjs projects are licensed under the MIT license
4
- */
5
- import Flicking from "../../../Flicking";
6
-
7
- import ElementProvider from "./ElementProvider";
8
-
9
- interface ExternalElementProvider extends ElementProvider {
10
- rendered: boolean;
11
- show(flicking: Flicking): any;
12
- hide(flicking: Flicking): any;
13
- }
14
-
15
- export default ExternalElementProvider;