@egjs/flicking 4.2.4 → 4.4.0

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 (86) hide show
  1. package/README.md +1 -1
  2. package/declaration/Flicking.d.ts +24 -11
  3. package/declaration/camera/Camera.d.ts +5 -4
  4. package/declaration/camera/CircularCamera.d.ts +3 -2
  5. package/declaration/const/error.d.ts +3 -1
  6. package/declaration/const/external.d.ts +5 -0
  7. package/declaration/control/Control.d.ts +2 -2
  8. package/declaration/control/FreeControl.d.ts +1 -1
  9. package/declaration/control/StrictControl.d.ts +1 -1
  10. package/declaration/control/states/State.d.ts +2 -1
  11. package/declaration/core/AutoResizer.d.ts +13 -0
  12. package/declaration/core/VirtualManager.d.ts +37 -0
  13. package/declaration/core/index.d.ts +2 -1
  14. package/declaration/core/panel/ExternalPanel.d.ts +9 -5
  15. package/declaration/core/panel/Panel.d.ts +17 -10
  16. package/declaration/core/panel/VirtualPanel.d.ts +19 -0
  17. package/declaration/core/panel/index.d.ts +4 -3
  18. package/declaration/core/panel/provider/ElementProvider.d.ts +7 -0
  19. package/declaration/core/panel/provider/ExternalElementProvider.d.ts +8 -0
  20. package/declaration/core/panel/provider/VanillaElementProvider.d.ts +10 -0
  21. package/declaration/core/panel/provider/VirtualElementProvider.d.ts +13 -0
  22. package/declaration/core/panel/provider/index.d.ts +6 -0
  23. package/declaration/index.d.ts +11 -1
  24. package/declaration/renderer/ExternalRenderer.d.ts +1 -0
  25. package/declaration/renderer/Renderer.d.ts +18 -13
  26. package/declaration/renderer/VanillaRenderer.d.ts +2 -7
  27. package/declaration/renderer/index.d.ts +1 -0
  28. package/declaration/renderer/strategy/NormalRenderingStrategy.d.ts +25 -0
  29. package/declaration/renderer/strategy/RenderingStrategy.d.ts +15 -0
  30. package/declaration/renderer/strategy/VirtualRenderingStrategy.d.ts +17 -0
  31. package/declaration/renderer/strategy/index.d.ts +5 -0
  32. package/declaration/utils.d.ts +7 -1
  33. package/dist/flicking.esm.js +4649 -3767
  34. package/dist/flicking.esm.js.map +1 -1
  35. package/dist/flicking.js +4689 -3783
  36. package/dist/flicking.js.map +1 -1
  37. package/dist/flicking.min.js +2 -2
  38. package/dist/flicking.min.js.map +1 -1
  39. package/dist/flicking.pkgd.js +4359 -2062
  40. package/dist/flicking.pkgd.js.map +1 -1
  41. package/dist/flicking.pkgd.min.js +2 -2
  42. package/dist/flicking.pkgd.min.js.map +1 -1
  43. package/package.json +2 -1
  44. package/src/Flicking.ts +148 -30
  45. package/src/camera/BoundCamera.ts +2 -2
  46. package/src/camera/Camera.ts +59 -36
  47. package/src/camera/CircularCamera.ts +54 -29
  48. package/src/camera/LinearCamera.ts +1 -1
  49. package/src/cfc/getRenderingPanels.ts +6 -1
  50. package/src/cfc/sync.ts +2 -2
  51. package/src/const/error.ts +6 -3
  52. package/src/const/external.ts +6 -0
  53. package/src/control/AxesController.ts +17 -9
  54. package/src/control/Control.ts +37 -39
  55. package/src/control/FreeControl.ts +4 -4
  56. package/src/control/SnapControl.ts +3 -3
  57. package/src/control/StrictControl.ts +4 -4
  58. package/src/control/states/AnimatingState.ts +6 -3
  59. package/src/control/states/State.ts +4 -2
  60. package/src/core/AutoResizer.ts +81 -0
  61. package/src/core/VirtualManager.ts +188 -0
  62. package/src/core/index.ts +3 -1
  63. package/src/core/panel/ExternalPanel.ts +23 -15
  64. package/src/core/panel/Panel.ts +68 -60
  65. package/src/core/panel/VirtualPanel.ts +110 -0
  66. package/src/core/panel/index.ts +5 -4
  67. package/src/core/panel/provider/ElementProvider.ts +13 -0
  68. package/src/core/panel/provider/ExternalElementProvider.ts +15 -0
  69. package/src/core/panel/provider/VanillaElementProvider.ts +40 -0
  70. package/src/core/panel/provider/VirtualElementProvider.ts +45 -0
  71. package/src/core/panel/provider/index.ts +18 -0
  72. package/src/index.ts +12 -1
  73. package/src/index.umd.ts +2 -0
  74. package/src/renderer/ExternalRenderer.ts +36 -4
  75. package/src/renderer/Renderer.ts +174 -69
  76. package/src/renderer/VanillaRenderer.ts +28 -86
  77. package/src/renderer/index.ts +2 -0
  78. package/src/renderer/strategy/NormalRenderingStrategy.ts +109 -0
  79. package/src/renderer/strategy/RenderingStrategy.ts +21 -0
  80. package/src/renderer/strategy/VirtualRenderingStrategy.ts +110 -0
  81. package/src/renderer/strategy/index.ts +17 -0
  82. package/src/utils.ts +36 -2
  83. package/declaration/core/panel/ElementPanel.d.ts +0 -14
  84. package/declaration/exports.d.ts +0 -10
  85. package/src/core/panel/ElementPanel.ts +0 -52
  86. package/src/exports.ts +0 -16
package/README.md CHANGED
@@ -131,7 +131,7 @@ var flicking = new Flicking("#my-flicking", { circular: true });
131
131
  |[**@egjs/vue-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/vue-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/vue-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/vue-flicking.svg?style=flat-square&color=42b883&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/img/icons/vue.svg" valign="middle" alt="Vue.js" /> [Vue.js@2](https://vuejs.org/v2/guide/index.html) port of @egjs/flicking|
132
132
  |[**@egjs/vue3-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/vue3-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/vue3-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/vue3-flicking.svg?style=flat-square&color=42b883&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/img/icons/vue.svg" valign="middle" alt="Vue.js" /> [Vue.js@3](https://v3.vuejs.org/) port of @egjs/flicking|
133
133
  |[**@egjs/preact-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/preact-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/preact-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/preact-flicking.svg?style=flat-square&color=673ab8&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/img/icons/preact.svg" valign="middle" alt="Preact" /> [Preact](https://preactjs.com/guide/v10/getting-started) port of @egjs/flicking|
134
- |[**@egjs/svelte-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/svelte-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/svelte-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/svelte-flicking.svg?style=flat-square&color=FF3E00&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/images/svelte.svg" valign="middle" alt="Svelte" /> [Svelte](https://svelte.dev/) port of @egjs/flicking|
134
+ |[**@egjs/svelte-flicking**](https://github.com/naver/egjs-flicking/blob/master/packages/svelte-flicking/README.md)|<a href="https://www.npmjs.com/package/@egjs/svelte-flicking" target="_blank"><img src="https://img.shields.io/npm/v/@egjs/svelte-flicking.svg?style=flat-square&color=FF3E00&label=%F0%9F%94%96" alt="version" /></a>|<img width="15" src="https://naver.github.io/egjs-flicking/img/icons/svelte.svg" valign="middle" alt="Svelte" /> [Svelte](https://svelte.dev/) port of @egjs/flicking|
135
135
 
136
136
  ## 🌐 Supported Browsers
137
137
  |<img width="20" src="https://simpleicons.org/icons/internetexplorer.svg" alt="IE" />|<img width="20" src="https://simpleicons.org/icons/googlechrome.svg" alt="Chrome" />|<img width="20" src="https://simpleicons.org/icons/firefoxbrowser.svg" alt="Firefox" />|<img width="20" src="https://simpleicons.org/icons/safari.svg" alt="Safari" />|<img width="20" src="https://simpleicons.org/icons/apple.svg" alt="iOS" />|<img width="20" src="https://simpleicons.org/icons/android.svg" alt="Android" />|
@@ -1,9 +1,10 @@
1
1
  import Component from "@egjs/component";
2
2
  import Viewport from "./core/Viewport";
3
3
  import { Panel } from "./core/panel";
4
+ import VirtualManager, { VirtualOptions } from "./core/VirtualManager";
4
5
  import { Control } from "./control";
5
6
  import { Camera } from "./camera";
6
- import { Renderer, ExternalRenderer } from "./renderer";
7
+ import { Renderer, ExternalRenderer, RendererOptions } from "./renderer";
7
8
  import { EVENTS, ALIGN, MOVE_TYPE, DIRECTION } from "./const/external";
8
9
  import { HoldStartEvent, HoldEndEvent, MoveStartEvent, SelectEvent, MoveEvent, MoveEndEvent, WillChangeEvent, WillRestoreEvent, NeedPanelEvent, VisibleChangeEvent, ReachEdgeEvent, ReadyEvent, AfterResizeEvent, BeforeResizeEvent, ChangedEvent, RestoredEvent, PanelChangeEvent } from "./type/event";
9
10
  import { LiteralUnion, ValueOf } from "./type/internal";
@@ -39,6 +40,7 @@ export interface FlickingOptions {
39
40
  adaptive: boolean;
40
41
  panelsPerView: number;
41
42
  noPanelStyleOverride: boolean;
43
+ resizeOnContentsReady: boolean;
42
44
  needPanelThreshold: number;
43
45
  preventEventsBeforeInit: boolean;
44
46
  deceleration: number;
@@ -53,21 +55,23 @@ export interface FlickingOptions {
53
55
  preventClickOnDrag: boolean;
54
56
  disableOnInit: boolean;
55
57
  renderOnlyVisible: boolean;
58
+ virtual: VirtualOptions | null;
56
59
  autoInit: boolean;
57
60
  autoResize: boolean;
61
+ useResizeObserver: boolean;
58
62
  renderExternal: {
59
- renderer: typeof ExternalRenderer;
60
- rendererOptions: {
61
- [key: string]: any;
62
- };
63
+ renderer: new (options: RendererOptions) => ExternalRenderer;
64
+ rendererOptions: RendererOptions;
63
65
  } | null;
64
66
  }
65
67
  declare class Flicking extends Component<FlickingEvents> {
66
68
  static VERSION: string;
67
69
  private _viewport;
70
+ private _autoResizer;
68
71
  private _camera;
69
72
  private _control;
70
73
  private _renderer;
74
+ private _virtualManager;
71
75
  private _align;
72
76
  private _defaultIndex;
73
77
  private _horizontal;
@@ -76,6 +80,8 @@ declare class Flicking extends Component<FlickingEvents> {
76
80
  private _adaptive;
77
81
  private _panelsPerView;
78
82
  private _noPanelStyleOverride;
83
+ private _resizeOnContentsReady;
84
+ private _virtual;
79
85
  private _needPanelThreshold;
80
86
  private _preventEventsBeforeInit;
81
87
  private _deceleration;
@@ -90,8 +96,9 @@ declare class Flicking extends Component<FlickingEvents> {
90
96
  private _preventClickOnDrag;
91
97
  private _disableOnInit;
92
98
  private _renderOnlyVisible;
93
- private _autoResize;
94
99
  private _autoInit;
100
+ private _autoResize;
101
+ private _useResizeObserver;
95
102
  private _renderExternal;
96
103
  private _initialized;
97
104
  private _plugins;
@@ -101,6 +108,7 @@ declare class Flicking extends Component<FlickingEvents> {
101
108
  get viewport(): Viewport;
102
109
  get initialized(): boolean;
103
110
  get circularEnabled(): boolean;
111
+ get virtualEnabled(): boolean;
104
112
  get index(): number;
105
113
  get element(): HTMLElement;
106
114
  get currentPanel(): Panel;
@@ -118,6 +126,7 @@ declare class Flicking extends Component<FlickingEvents> {
118
126
  get adaptive(): FlickingOptions["adaptive"];
119
127
  get panelsPerView(): FlickingOptions["panelsPerView"];
120
128
  get noPanelStyleOverride(): FlickingOptions["noPanelStyleOverride"];
129
+ get resizeOnContentsReady(): FlickingOptions["resizeOnContentsReady"];
121
130
  get needPanelThreshold(): FlickingOptions["needPanelThreshold"];
122
131
  get preventEventsBeforeInit(): FlickingOptions["preventEventsBeforeInit"];
123
132
  get deceleration(): FlickingOptions["deceleration"];
@@ -132,13 +141,13 @@ declare class Flicking extends Component<FlickingEvents> {
132
141
  get preventClickOnDrag(): FlickingOptions["preventClickOnDrag"];
133
142
  get disableOnInit(): FlickingOptions["disableOnInit"];
134
143
  get renderOnlyVisible(): FlickingOptions["renderOnlyVisible"];
144
+ get virtual(): VirtualManager;
135
145
  get autoInit(): boolean;
136
146
  get autoResize(): FlickingOptions["autoResize"];
147
+ get useResizeObserver(): FlickingOptions["useResizeObserver"];
137
148
  get renderExternal(): {
138
- renderer: typeof ExternalRenderer;
139
- rendererOptions: {
140
- [key: string]: any;
141
- };
149
+ renderer: new (options: RendererOptions) => ExternalRenderer;
150
+ rendererOptions: RendererOptions;
142
151
  };
143
152
  set align(val: FlickingOptions["align"]);
144
153
  set defaultIndex(val: FlickingOptions["defaultIndex"]);
@@ -148,6 +157,7 @@ declare class Flicking extends Component<FlickingEvents> {
148
157
  set adaptive(val: FlickingOptions["adaptive"]);
149
158
  set panelsPerView(val: FlickingOptions["panelsPerView"]);
150
159
  set noPanelStyleOverride(val: FlickingOptions["noPanelStyleOverride"]);
160
+ set resizeOnContentsReady(val: FlickingOptions["resizeOnContentsReady"]);
151
161
  set needPanelThreshold(val: FlickingOptions["needPanelThreshold"]);
152
162
  set preventEventsBeforeInit(val: FlickingOptions["preventEventsBeforeInit"]);
153
163
  set deceleration(val: FlickingOptions["deceleration"]);
@@ -163,7 +173,8 @@ declare class Flicking extends Component<FlickingEvents> {
163
173
  set disableOnInit(val: FlickingOptions["disableOnInit"]);
164
174
  set renderOnlyVisible(val: FlickingOptions["renderOnlyVisible"]);
165
175
  set autoResize(val: FlickingOptions["autoResize"]);
166
- constructor(root: HTMLElement | string, { align, defaultIndex, horizontal, circular, bound, adaptive, panelsPerView, noPanelStyleOverride, needPanelThreshold, preventEventsBeforeInit, deceleration, duration, easing, inputType, moveType, threshold, interruptable, bounce, iOSEdgeSwipeThreshold, preventClickOnDrag, disableOnInit, renderOnlyVisible, autoInit, autoResize, renderExternal }?: Partial<FlickingOptions>);
176
+ set useResizeObserver(val: FlickingOptions["useResizeObserver"]);
177
+ constructor(root: HTMLElement | string, { align, defaultIndex, horizontal, circular, bound, adaptive, panelsPerView, noPanelStyleOverride, resizeOnContentsReady, needPanelThreshold, preventEventsBeforeInit, deceleration, duration, easing, inputType, moveType, threshold, interruptable, bounce, iOSEdgeSwipeThreshold, preventClickOnDrag, disableOnInit, renderOnlyVisible, virtual, autoInit, autoResize, useResizeObserver, renderExternal }?: Partial<FlickingOptions>);
167
178
  init(): Promise<void>;
168
179
  destroy(): void;
169
180
  prev(duration?: number): Promise<void>;
@@ -189,6 +200,8 @@ declare class Flicking extends Component<FlickingEvents> {
189
200
  private _createControl;
190
201
  private _createCamera;
191
202
  private _createRenderer;
203
+ private _createVanillaRenderer;
204
+ private _createExternalRenderer;
192
205
  private _moveToInitialPanel;
193
206
  }
194
207
  export default Flicking;
@@ -23,6 +23,7 @@ declare abstract class Camera {
23
23
  next: boolean;
24
24
  };
25
25
  get element(): HTMLElement;
26
+ get children(): HTMLElement[];
26
27
  get position(): number;
27
28
  get alignPosition(): number;
28
29
  get offset(): number;
@@ -54,7 +55,7 @@ declare abstract class Camera {
54
55
  abstract updateRange(): this;
55
56
  init(flicking: Flicking): this;
56
57
  destroy(): this;
57
- lookAt(pos: number): Promise<void>;
58
+ lookAt(pos: number): void;
58
59
  getPrevAnchor(anchor: AnchorPoint): AnchorPoint | null;
59
60
  getNextAnchor(anchor: AnchorPoint): AnchorPoint | null;
60
61
  getProgressInPanel(panel: Panel): number;
@@ -67,13 +68,13 @@ declare abstract class Camera {
67
68
  updateAlignPos(): this;
68
69
  updateAnchors(): this;
69
70
  updateAdaptiveHeight(): void;
70
- updateOffset(): void;
71
+ updateOffset(): this;
71
72
  resetNeedPanelHistory(): this;
73
+ applyTransform(): this;
72
74
  protected _resetInternalValues(): void;
73
- protected _refreshVisiblePanels(): Promise<void>;
75
+ protected _refreshVisiblePanels(): void;
74
76
  protected _checkNeedPanel(): void;
75
77
  protected _checkReachEnd(prevPos: number, newPos: number): void;
76
- protected _applyTransform(): void;
77
78
  protected _checkTranslateSupport: () => void;
78
79
  }
79
80
  export default Camera;
@@ -27,8 +27,9 @@ declare class CircularCamera extends Camera {
27
27
  canReach(panel: Panel): boolean;
28
28
  canSee(panel: Panel): boolean;
29
29
  updateRange(): this;
30
- lookAt(pos: number): Promise<void>;
31
- protected _applyTransform(): void;
30
+ updateOffset(): this;
31
+ lookAt(pos: number): void;
32
+ applyTransform(): this;
32
33
  protected _resetInternalValues(): void;
33
34
  private _calcPanelAreaSum;
34
35
  private _updateCircularOffset;
@@ -13,12 +13,13 @@ export declare const CODE: {
13
13
  readonly NOT_ALLOWED_IN_FRAMEWORK: 11;
14
14
  readonly NOT_INITIALIZED: 12;
15
15
  readonly NO_ACTIVE: 13;
16
+ readonly NOT_ALLOWED_IN_VIRTUAL: 14;
16
17
  };
17
18
  export declare const MESSAGE: {
18
19
  readonly WRONG_TYPE: (wrongVal: any, correctTypes: string[]) => string;
19
20
  readonly ELEMENT_NOT_FOUND: (selector: string) => string;
20
21
  readonly VAL_MUST_NOT_NULL: (val: any, name: string) => string;
21
- readonly NOT_ATTACHED_TO_FLICKING: (name: string) => string;
22
+ readonly NOT_ATTACHED_TO_FLICKING: "This module is not attached to the Flicking instance. \"init()\" should be called first.";
22
23
  readonly WRONG_OPTION: (optionName: string, val: any) => string;
23
24
  readonly INDEX_OUT_OF_RANGE: (val: number, min: number, max: number) => string;
24
25
  readonly POSITION_NOT_REACHABLE: (position: number) => string;
@@ -29,4 +30,5 @@ export declare const MESSAGE: {
29
30
  readonly NOT_ALLOWED_IN_FRAMEWORK: "This behavior is not allowed in the frameworks like React, Vue, or Angular.";
30
31
  readonly NOT_INITIALIZED: "Flicking is not initialized yet, call init() first.";
31
32
  readonly NO_ACTIVE: "There's no active panel that Flicking has selected. This may be due to the absence of any panels.";
33
+ readonly NOT_ALLOWED_IN_VIRTUAL: "This behavior is not allowed when the virtual option is enabled";
32
34
  };
@@ -33,3 +33,8 @@ export declare const MOVE_TYPE: {
33
33
  readonly FREE_SCROLL: "freeScroll";
34
34
  readonly STRICT: "strict";
35
35
  };
36
+ export declare const CLASS: {
37
+ VERTICAL: string;
38
+ HIDDEN: string;
39
+ DEFAULT_VIRTUAL: string;
40
+ };
@@ -19,7 +19,7 @@ declare abstract class Control {
19
19
  destroy(): void;
20
20
  enable(): this;
21
21
  disable(): this;
22
- updatePosition(_progressInPanel: number): Promise<void>;
22
+ updatePosition(_progressInPanel: number): void;
23
23
  updateInput(): this;
24
24
  resetActive(): this;
25
25
  moveToPanel(panel: Panel, { duration, direction, axesEvent }: {
@@ -27,6 +27,7 @@ declare abstract class Control {
27
27
  direction?: ValueOf<typeof DIRECTION>;
28
28
  axesEvent?: OnRelease;
29
29
  }): Promise<void>;
30
+ setActive(newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean): void;
30
31
  protected _triggerIndexChangeEvent(panel: Panel, position: number, axesEvent?: OnRelease): void;
31
32
  protected _animateToPosition({ position, duration, newActivePanel, axesEvent }: {
32
33
  position: number;
@@ -34,6 +35,5 @@ declare abstract class Control {
34
35
  newActivePanel: Panel;
35
36
  axesEvent?: OnRelease;
36
37
  }): Promise<void>;
37
- protected _setActive(newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean): void;
38
38
  }
39
39
  export default Control;
@@ -8,7 +8,7 @@ declare class FreeControl extends Control {
8
8
  get stopAtEdge(): FreeControlOptions["stopAtEdge"];
9
9
  set stopAtEdge(val: FreeControlOptions["stopAtEdge"]);
10
10
  constructor({ stopAtEdge }?: Partial<FreeControlOptions>);
11
- updatePosition(progressInPanel: number): Promise<void>;
11
+ updatePosition(progressInPanel: number): void;
12
12
  moveToPosition(position: number, duration: number, axesEvent?: OnRelease): Promise<void>;
13
13
  }
14
14
  export default FreeControl;
@@ -13,7 +13,7 @@ declare class StrictControl extends Control {
13
13
  destroy(): void;
14
14
  updateInput(): this;
15
15
  moveToPosition(position: number, duration: number, axesEvent?: OnRelease): Promise<void>;
16
- protected _setActive: (newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean) => void;
16
+ setActive: (newActivePanel: Panel, prevActivePanel: Panel | null, isTrusted: boolean) => void;
17
17
  private _resetIndexRange;
18
18
  }
19
19
  export default StrictControl;
@@ -14,7 +14,8 @@ declare abstract class State {
14
14
  protected _delta: number;
15
15
  protected _targetPanel: Panel | null;
16
16
  get delta(): number;
17
- get targetPanel(): Panel;
17
+ get targetPanel(): Panel | null;
18
+ set targetPanel(val: Panel | null);
18
19
  onEnter(prevState: State): void;
19
20
  onHold(ctx: {
20
21
  flicking: Flicking;
@@ -0,0 +1,13 @@
1
+ import Flicking from "../Flicking";
2
+ declare class AutoResizer {
3
+ private _flicking;
4
+ private _enabled;
5
+ private _resizeObserver;
6
+ get enabled(): boolean;
7
+ constructor(flicking: Flicking);
8
+ enable(): this;
9
+ disable(): this;
10
+ private _onResize;
11
+ private _skipFirstResize;
12
+ }
13
+ export default AutoResizer;
@@ -0,0 +1,37 @@
1
+ import Flicking from "../Flicking";
2
+ import VirtualPanel from "./panel/VirtualPanel";
3
+ export interface VirtualOptions {
4
+ renderPanel: (panel: VirtualPanel, index: number) => string;
5
+ initialPanelCount: number;
6
+ cache?: boolean;
7
+ panelClass?: string;
8
+ }
9
+ declare class VirtualManager {
10
+ private _flicking;
11
+ private _renderPanel;
12
+ private _initialPanelCount;
13
+ private _cache;
14
+ private _panelClass;
15
+ private _elements;
16
+ get elements(): {
17
+ nativeElement: HTMLElement;
18
+ visible: boolean;
19
+ }[];
20
+ get renderPanel(): VirtualOptions["renderPanel"];
21
+ get initialPanelCount(): number;
22
+ get cache(): NonNullable<VirtualOptions["cache"]>;
23
+ get panelClass(): NonNullable<VirtualOptions["panelClass"]>;
24
+ set renderPanel(val: VirtualOptions["renderPanel"]);
25
+ set cache(val: NonNullable<VirtualOptions["cache"]>);
26
+ set panelClass(val: NonNullable<VirtualOptions["panelClass"]>);
27
+ constructor(flicking: Flicking, options: VirtualOptions | null);
28
+ init(): void;
29
+ show(index: number): void;
30
+ hide(index: number): void;
31
+ append(count?: number): VirtualPanel[];
32
+ prepend(count?: number): VirtualPanel[];
33
+ insert(index: number, count?: number): VirtualPanel[];
34
+ remove(index: number, count: number): VirtualPanel[];
35
+ private _initVirtualElements;
36
+ }
37
+ export default VirtualManager;
@@ -1,5 +1,6 @@
1
1
  import Viewport from "./Viewport";
2
2
  import FlickingError from "./FlickingError";
3
3
  import AnchorPoint from "./AnchorPoint";
4
- export { Viewport, FlickingError, AnchorPoint };
4
+ import VirtualManager from "./VirtualManager";
5
+ export { Viewport, FlickingError, AnchorPoint, VirtualManager };
5
6
  export * from "./panel";
@@ -1,9 +1,13 @@
1
1
  import Panel, { PanelOptions } from "./Panel";
2
- export interface ExternalPanelOptions<T> extends PanelOptions {
3
- externalComponent: T;
2
+ import ExternalElementProvider from "./provider/ExternalElementProvider";
3
+ export interface ExternalPanelOptions extends PanelOptions {
4
+ elementProvider: ExternalElementProvider;
4
5
  }
5
- declare abstract class ExternalPanel<T = any> extends Panel {
6
- protected _externalComponent: T;
7
- constructor(options: ExternalPanelOptions<T>);
6
+ declare class ExternalPanel extends Panel {
7
+ protected _elProvider: ExternalElementProvider;
8
+ get rendered(): boolean;
9
+ constructor(options: ExternalPanelOptions);
10
+ markForShow(): void;
11
+ markForHide(): void;
8
12
  }
9
13
  export default ExternalPanel;
@@ -1,13 +1,16 @@
1
1
  import Flicking from "../../Flicking";
2
2
  import { ALIGN, DIRECTION } from "../../const/external";
3
3
  import { LiteralUnion, ValueOf } from "../../type/internal";
4
+ import ElementProvider from "./provider/ElementProvider";
4
5
  export interface PanelOptions {
5
6
  index: number;
6
7
  align: LiteralUnion<ValueOf<typeof ALIGN>> | number;
7
8
  flicking: Flicking;
9
+ elementProvider: ElementProvider;
8
10
  }
9
- declare abstract class Panel {
11
+ declare class Panel {
10
12
  protected _flicking: Flicking;
13
+ protected _elProvider: ElementProvider;
11
14
  protected _index: number;
12
15
  protected _pos: number;
13
16
  protected _size: number;
@@ -17,12 +20,15 @@ declare abstract class Panel {
17
20
  next: number;
18
21
  };
19
22
  protected _alignPos: number;
23
+ protected _rendered: boolean;
20
24
  protected _removed: boolean;
25
+ protected _loading: boolean;
21
26
  protected _toggleDirection: ValueOf<typeof DIRECTION>;
22
27
  protected _toggled: boolean;
23
28
  protected _togglePosition: number;
24
29
  protected _align: PanelOptions["align"];
25
- abstract get element(): HTMLElement;
30
+ get element(): HTMLElement;
31
+ get elementProvider(): ElementProvider;
26
32
  get index(): number;
27
33
  get position(): number;
28
34
  get size(): number;
@@ -34,7 +40,8 @@ declare abstract class Panel {
34
40
  };
35
41
  get alignPosition(): number;
36
42
  get removed(): boolean;
37
- abstract get rendered(): any;
43
+ get rendered(): boolean;
44
+ get loading(): boolean;
38
45
  get range(): {
39
46
  min: number;
40
47
  max: number;
@@ -45,11 +52,12 @@ declare abstract class Panel {
45
52
  get progress(): number;
46
53
  get outsetProgress(): number;
47
54
  get visibleRatio(): number;
55
+ set loading(val: boolean);
48
56
  get align(): PanelOptions["align"];
49
57
  set align(val: PanelOptions["align"]);
50
- constructor({ index, align, flicking }: PanelOptions);
51
- abstract markForShow(): any;
52
- abstract markForHide(): any;
58
+ constructor({ index, align, flicking, elementProvider }: PanelOptions);
59
+ markForShow(): void;
60
+ markForHide(): void;
53
61
  resize(cached?: {
54
62
  size: number;
55
63
  height: number;
@@ -58,7 +66,7 @@ declare abstract class Panel {
58
66
  next: number;
59
67
  };
60
68
  }): this;
61
- setSize({ width, height }: Partial<{
69
+ setSize(size: Partial<{
62
70
  width: number | string;
63
71
  height: number | string;
64
72
  }>): this;
@@ -66,16 +74,15 @@ declare abstract class Panel {
66
74
  destroy(): void;
67
75
  includePosition(pos: number, includeMargin?: boolean): boolean;
68
76
  includeRange(min: number, max: number, includeMargin?: boolean): boolean;
77
+ isVisibleOnRange(min: number, max: number): boolean;
69
78
  focus(duration?: number): Promise<void>;
70
79
  prev(): Panel | null;
71
80
  next(): Panel | null;
72
81
  increaseIndex(val: number): this;
73
82
  decreaseIndex(val: number): this;
74
- increasePosition(val: number): this;
75
- decreasePosition(val: number): this;
83
+ updatePosition(): this;
76
84
  toggle(prevPos: number, newPos: number): boolean;
77
85
  updateCircularToggleDirection(): this;
78
- private _moveBy;
79
86
  private _updateAlignPos;
80
87
  private _resetInternalStates;
81
88
  }
@@ -0,0 +1,19 @@
1
+ import Panel, { PanelOptions } from "./Panel";
2
+ import VirtualElementProvider from "./provider/VirtualElementProvider";
3
+ interface VirtualPanelOptions extends PanelOptions {
4
+ elementProvider: VirtualElementProvider;
5
+ }
6
+ declare class VirtualPanel extends Panel {
7
+ protected _elProvider: VirtualElementProvider;
8
+ protected _cachedInnerHTML: string | null;
9
+ get element(): HTMLElement;
10
+ get cachedInnerHTML(): string;
11
+ get elementIndex(): number;
12
+ constructor(options: VirtualPanelOptions);
13
+ cacheRenderResult(result: string): void;
14
+ uncacheRenderResult(): void;
15
+ render(): void;
16
+ increaseIndex(val: number): this;
17
+ decreaseIndex(val: number): this;
18
+ }
19
+ export default VirtualPanel;
@@ -1,5 +1,6 @@
1
1
  import Panel, { PanelOptions } from "./Panel";
2
- import ElementPanel, { ElementPanelOptions } from "./ElementPanel";
3
2
  import ExternalPanel, { ExternalPanelOptions } from "./ExternalPanel";
4
- export { Panel, ElementPanel, ExternalPanel };
5
- export type { PanelOptions, ElementPanelOptions, ExternalPanelOptions };
3
+ import VirtualPanel from "./VirtualPanel";
4
+ export * from "./provider";
5
+ export { Panel, ExternalPanel, VirtualPanel };
6
+ export type { PanelOptions, ExternalPanelOptions };
@@ -0,0 +1,7 @@
1
+ import Flicking from "../../../Flicking";
2
+ interface ElementProvider {
3
+ element: HTMLElement;
4
+ show(flicking: Flicking): void;
5
+ hide(flicking: Flicking): void;
6
+ }
7
+ export default ElementProvider;
@@ -0,0 +1,8 @@
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;
@@ -0,0 +1,10 @@
1
+ import Flicking from "../../../Flicking";
2
+ import ElementProvider from "./ElementProvider";
3
+ declare class VanillaElementProvider implements ElementProvider {
4
+ private _element;
5
+ get element(): HTMLElement;
6
+ constructor(element: HTMLElement);
7
+ show(flicking: Flicking): void;
8
+ hide(flicking: Flicking): void;
9
+ }
10
+ export default VanillaElementProvider;
@@ -0,0 +1,13 @@
1
+ import Flicking from "../../../Flicking";
2
+ import VirtualPanel from "../VirtualPanel";
3
+ import ElementProvider from "./ElementProvider";
4
+ declare class VirtualElementProvider implements ElementProvider {
5
+ private _flicking;
6
+ private _panel;
7
+ get element(): HTMLElement;
8
+ constructor(flicking: Flicking);
9
+ init(panel: VirtualPanel): void;
10
+ show(): void;
11
+ hide(): void;
12
+ }
13
+ export default VirtualElementProvider;
@@ -0,0 +1,6 @@
1
+ import ElementProvider from "./ElementProvider";
2
+ import ExternalElementProvider from "./ExternalElementProvider";
3
+ import VanillaElementProvider from "./VanillaElementProvider";
4
+ import VirtualElementProvider from "./VirtualElementProvider";
5
+ export { VanillaElementProvider, VirtualElementProvider };
6
+ export type { ElementProvider, ExternalElementProvider };
@@ -1,3 +1,13 @@
1
1
  import Flicking from "./Flicking";
2
- export * from "./exports";
2
+ import type { FlickingOptions, FlickingEvents } from "./Flicking";
3
+ export * from "./core";
4
+ export * from "./camera";
5
+ export * from "./control";
6
+ export * from "./renderer";
7
+ export * from "./const/external";
8
+ export * from "./cfc";
9
+ export * from "./utils";
10
+ export * from "./type/event";
11
+ export * from "./type/external";
12
+ export type { FlickingOptions, FlickingEvents };
3
13
  export default Flicking;
@@ -3,5 +3,6 @@ import Renderer from "./Renderer";
3
3
  declare abstract class ExternalRenderer extends Renderer {
4
4
  protected _insertPanelElements(panels: Panel[], nextSibling: Panel | null): void;
5
5
  protected _removePanelElements(panels: Panel[]): void;
6
+ protected _removeAllChildsFromCamera(): void;
6
7
  }
7
8
  export default ExternalRenderer;
@@ -1,40 +1,45 @@
1
1
  import Flicking, { FlickingOptions } from "../Flicking";
2
2
  import Panel, { PanelOptions } from "../core/panel/Panel";
3
+ import RenderingStrategy from "./strategy/RenderingStrategy";
3
4
  export interface RendererOptions {
4
- align: FlickingOptions["align"];
5
+ align?: FlickingOptions["align"];
6
+ strategy: RenderingStrategy;
5
7
  }
6
8
  declare abstract class Renderer {
7
9
  protected _flicking: Flicking | null;
8
10
  protected _panels: Panel[];
9
- protected _align: RendererOptions["align"];
11
+ protected _align: NonNullable<RendererOptions["align"]>;
12
+ protected _strategy: RendererOptions["strategy"];
10
13
  get panels(): Panel[];
11
14
  get panelCount(): number;
12
- get align(): RendererOptions["align"];
13
- set align(val: RendererOptions["align"]);
14
- constructor({ align }?: Partial<RendererOptions>);
15
+ get strategy(): RenderingStrategy;
16
+ get align(): NonNullable<RendererOptions["align"]>;
17
+ set align(val: NonNullable<RendererOptions["align"]>);
18
+ constructor({ align, strategy }: RendererOptions);
15
19
  abstract render(): Promise<void>;
16
- abstract forceRenderAllPanels(): Promise<void>;
17
20
  protected abstract _collectPanels(): void;
18
- protected abstract _createPanel(el: any, options: PanelOptions): Panel;
19
- protected abstract _insertPanelElements(panels: Panel[], nextSibling: Panel | null): void;
20
- protected abstract _removePanelElements(panels: Panel[]): void;
21
+ protected abstract _createPanel(el: any, options: Omit<PanelOptions, "elementProvider">): Panel;
21
22
  init(flicking: Flicking): this;
22
23
  destroy(): void;
23
24
  getPanel(index: number): Panel | null;
25
+ forceRenderAllPanels(): Promise<void>;
24
26
  updatePanelSize(): this;
25
27
  batchInsert(...items: Array<{
26
28
  index: number;
27
29
  elements: any[];
30
+ hasDOMInElements: boolean;
28
31
  }>): Panel[];
29
32
  batchRemove(...items: Array<{
30
33
  index: number;
31
34
  deleteCount: number;
35
+ hasDOMInElements: boolean;
32
36
  }>): Panel[];
33
- protected _getPanelAlign(): string | number;
34
- protected _getPanelSizeSum(panels: Panel[]): number;
37
+ checkPanelContentsReady(checkingPanels: Panel[]): void;
35
38
  protected _updateCameraAndControl(): void;
36
- protected _updateRenderingPanels(): void;
37
39
  protected _showOnlyVisiblePanels(flicking: Flicking): void;
38
- protected _updatePanelSizeByGrid(flicking: Flicking): void;
40
+ protected _updatePanelSizeByGrid(referencePanel: Panel, panels: Panel[]): void;
41
+ protected _removeAllChildsFromCamera(): void;
42
+ protected _insertPanelElements(panels: Panel[], nextSibling?: Panel | null): void;
43
+ protected _removePanelElements(panels: Panel[]): void;
39
44
  }
40
45
  export default Renderer;
@@ -1,15 +1,10 @@
1
1
  import Panel, { PanelOptions } from "../core/panel/Panel";
2
- import ElementPanel from "../core/panel/ElementPanel";
3
2
  import Renderer from "./Renderer";
4
3
  declare class VanillaRenderer extends Renderer {
5
4
  render(): Promise<void>;
6
- forceRenderAllPanels(): Promise<void>;
7
5
  protected _collectPanels(): void;
8
- protected _createPanel(el: HTMLElement, options: PanelOptions): ElementPanel;
9
- protected _insertPanelElements(panels: Panel[], nextSibling: Panel | null): this;
10
- protected _removePanelElements(panels: Panel[]): this;
6
+ protected _createPanel(el: HTMLElement, options: Omit<PanelOptions, "elementProvider">): Panel;
11
7
  private _resetPanelElementOrder;
12
- private _removeAllChildsFromCamera;
13
- private _getRenderingPanelsByOrder;
8
+ private _removeAllTextNodes;
14
9
  }
15
10
  export default VanillaRenderer;
@@ -1,5 +1,6 @@
1
1
  import Renderer, { RendererOptions } from "./Renderer";
2
2
  import VanillaRenderer from "./VanillaRenderer";
3
3
  import ExternalRenderer from "./ExternalRenderer";
4
+ export * from "./strategy";
4
5
  export { Renderer, VanillaRenderer, ExternalRenderer };
5
6
  export type { RendererOptions };