@egjs/react-flicking 4.15.0 → 4.16.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dev/archive/App.css +32 -0
  2. package/dev/archive/App.tsx +52 -0
  3. package/dev/archive/DebugPage.css +21 -0
  4. package/dev/archive/DebugPage.tsx +93 -0
  5. package/dev/archive/Header.tsx +52 -0
  6. package/dev/archive/StatePage.css +21 -0
  7. package/dev/archive/StatePage.tsx +107 -0
  8. package/dev/archive/css/align.css +79 -0
  9. package/dev/archive/css/bound.css +88 -0
  10. package/dev/archive/css/common.css +76 -0
  11. package/dev/archive/css/cross.css +21 -0
  12. package/dev/archive/css/features.css +49 -0
  13. package/dev/archive/css/gap.css +13 -0
  14. package/dev/archive/css/highlight.css +96 -0
  15. package/dev/archive/css/infinite.css +35 -0
  16. package/dev/archive/css/parallax.css +3 -0
  17. package/dev/archive/css/plugins.css +46 -0
  18. package/dev/archive/css/progress.css +16 -0
  19. package/dev/archive/css/variable-size.css +15 -0
  20. package/dev/archive/features/Align.tsx +149 -0
  21. package/dev/archive/features/Bound.tsx +83 -0
  22. package/dev/archive/features/CrossFlicking.tsx +74 -0
  23. package/dev/archive/features/FreeScroll.tsx +66 -0
  24. package/dev/archive/features/InfiniteFlicking.tsx +192 -0
  25. package/dev/archive/features/PlaceHolderItem.tsx +36 -0
  26. package/dev/archive/features/Progress.tsx +241 -0
  27. package/dev/archive/features/PropChange.tsx +171 -0
  28. package/dev/archive/features/Snap.tsx +95 -0
  29. package/dev/archive/features/VariableSize.tsx +42 -0
  30. package/dev/archive/features/Virtual.tsx +45 -0
  31. package/dev/archive/plugins/Arrow.tsx +25 -0
  32. package/dev/archive/plugins/AutoPlay.tsx +70 -0
  33. package/dev/archive/plugins/Fade.tsx +69 -0
  34. package/dev/archive/plugins/Parallax.tsx +70 -0
  35. package/dev/archive/utils.ts +3 -0
  36. package/dev/basic-sample/App.tsx +36 -0
  37. package/dev/basic-sample/index.html +12 -0
  38. package/dev/basic-sample/main.tsx +10 -0
  39. package/dev/index.html +18 -0
  40. package/dev/plugin-check/App.tsx +341 -0
  41. package/dev/plugin-check/index.html +15 -0
  42. package/dev/plugin-check/main.tsx +6 -0
  43. package/dev/scratch/App.tsx +34 -0
  44. package/dev/scratch/index.html +15 -0
  45. package/dev/scratch/main.tsx +13 -0
  46. package/dev/tsconfig.json +12 -0
  47. package/dev/vite-env.d.ts +3 -0
  48. package/{declaration → dist}/CrossFlicking.d.ts +3 -5
  49. package/{declaration → dist}/CrossGroup.d.ts +1 -1
  50. package/{declaration → dist}/Flicking.d.ts +8 -8
  51. package/{declaration → dist}/NonStrictPanel.d.ts +1 -1
  52. package/{declaration → dist}/ReactRenderer.d.ts +1 -1
  53. package/{declaration → dist}/StrictPanel.d.ts +1 -1
  54. package/{declaration → dist}/ViewportSlot.d.ts +1 -1
  55. package/dist/flicking.cjs.js +1514 -579
  56. package/dist/flicking.cjs.js.map +1 -1
  57. package/dist/flicking.esm.js +1573 -651
  58. package/dist/flicking.esm.js.map +1 -1
  59. package/dist/flicking.js +1634 -0
  60. package/dist/flicking.js.map +1 -0
  61. package/{declaration → dist}/index.d.ts +3 -3
  62. package/{declaration → dist}/types.d.ts +1 -2
  63. package/package.json +18 -33
  64. package/src/react-flicking/CrossFlicking.tsx +28 -37
  65. package/src/react-flicking/CrossGroup.tsx +6 -8
  66. package/src/react-flicking/Flicking.tsx +81 -69
  67. package/src/react-flicking/NonStrictPanel.tsx +15 -7
  68. package/src/react-flicking/ReactElementProvider.ts +6 -4
  69. package/src/react-flicking/ReactRenderer.ts +1 -2
  70. package/src/react-flicking/StrictPanel.tsx +10 -6
  71. package/src/react-flicking/consts.ts +14 -14
  72. package/src/react-flicking/index.ts +4 -7
  73. package/src/react-flicking/index.umd.ts +1 -1
  74. package/src/react-flicking/reactive.ts +3 -3
  75. package/src/react-flicking/types.ts +17 -17
  76. package/tsconfig.json +2 -9
  77. package/vite.config.ts +38 -0
  78. package/vite.dev.config.ts +58 -0
  79. package/dist/flicking.umd.js +0 -699
  80. package/dist/flicking.umd.js.map +0 -1
  81. /package/{declaration → dist}/ReactElementProvider.d.ts +0 -0
  82. /package/{declaration → dist}/consts.d.ts +0 -0
  83. /package/{declaration → dist}/index.umd.d.ts +0 -0
  84. /package/{declaration → dist}/reactive.d.ts +0 -0
@@ -0,0 +1,95 @@
1
+ import Flicking from "@dev/react-flicking";
2
+ import * as React from "react";
3
+ import { insertCode } from "../utils";
4
+ import "../css/align.css";
5
+
6
+ export default class Snap extends React.Component<{}> {
7
+ public render() {
8
+ return (
9
+ <div id="snap" className="container">
10
+ <h1>Snap</h1>
11
+ <ul className="extra">
12
+ <li>You can decide how many panels can be passed on a single snap.</li>
13
+ </ul>
14
+ <h2>Default (count: 1)</h2>
15
+ <Flicking className="flicking flicking0" gap={10} circular={true} moveType={["snap", { count: 1 }]}>
16
+ <div className="panel panel0"></div>
17
+ <div className="panel panel1"></div>
18
+ <div className="panel panel2"></div>
19
+ <div className="panel panel3"></div>
20
+ <div className="panel panel4"></div>
21
+ </Flicking>
22
+ <div className="pagination pagination0"></div>
23
+ <pre>
24
+ <code className="hljs html" data-script="flicking0"></code>
25
+ </pre>
26
+ <h2>count: 3</h2>
27
+ <Flicking className="flicking flicking1" gap={10} circular={true} moveType={["snap", { count: 3 }]}>
28
+ <div className="panel panel0"></div>
29
+ <div className="panel panel1"></div>
30
+ <div className="panel panel2"></div>
31
+ <div className="panel panel3"></div>
32
+ <div className="panel panel4"></div>
33
+ </Flicking>
34
+ <div className="pagination pagination1"></div>
35
+ <pre>
36
+ <code className="hljs html" data-script="flicking1"></code>
37
+ </pre>
38
+ <h2>count: Infinity</h2>
39
+ <Flicking className="flicking flicking2" gap={10} circular={true} moveType={["snap", { count: Infinity }]}>
40
+ <div className="panel panel0"></div>
41
+ <div className="panel panel1"></div>
42
+ <div className="panel panel2"></div>
43
+ <div className="panel panel3"></div>
44
+ <div className="panel panel4"></div>
45
+ </Flicking>
46
+ <div className="pagination pagination2"></div>
47
+ <pre>
48
+ <code className="hljs html" data-script="flicking2"></code>
49
+ </pre>
50
+ </div>
51
+ );
52
+ }
53
+ public componentDidMount() {
54
+ insertCode(
55
+ "snap",
56
+ 0,
57
+ `
58
+ <Flicking className="flicking flicking0" gap={10} circular={true}>
59
+ <div className="panel"></div>
60
+ <div className="panel"></div>
61
+ <div className="panel"></div>
62
+ <div className="panel"></div>
63
+ <div className="panel"></div>
64
+ </Flicking>`
65
+ );
66
+ insertCode(
67
+ "snap",
68
+ 1,
69
+ `
70
+ <Flicking
71
+ className="flicking flicking1" gap={10} circular={true}
72
+ moveType={{ type: "snap", count: 3 }}>
73
+ <div className="panel"></div>
74
+ <div className="panel"></div>
75
+ <div className="panel"></div>
76
+ <div className="panel"></div>
77
+ <div className="panel"></div>
78
+ </Flicking>`
79
+ );
80
+ insertCode(
81
+ "snap",
82
+ 2,
83
+ `
84
+ <Flicking
85
+ className="flicking flicking2" gap={10} circular={true}
86
+ moveType={{ type: "snap", count: Infinity }}>
87
+ <div className="panel"></div>
88
+ <div className="panel"></div>
89
+ <div className="panel"></div>
90
+ <div className="panel"></div>
91
+ <div className="panel"></div>
92
+ </Flicking>`
93
+ );
94
+ }
95
+ }
@@ -0,0 +1,42 @@
1
+ import Flicking from "@dev/react-flicking";
2
+ import * as React from "react";
3
+ import { insertCode } from "../utils";
4
+ import "../css/variable-size.css";
5
+
6
+ export default class VariableSize extends React.Component<{}> {
7
+ public render() {
8
+ return (
9
+ <div id="variable-size" className="container">
10
+ <h1>Multiple Panel &amp; Variable Size</h1>
11
+ <ul className="extra">
12
+ <li>You can place multiple panels in the flicking area.</li>
13
+ <li>You can specify various sizes for each panel.</li>
14
+ </ul>
15
+ <Flicking className="flicking flicking0" circular={true} gap={10}>
16
+ <div className="panel panel0"></div>
17
+ <div className="panel panel1"></div>
18
+ <div className="panel panel2"></div>
19
+ <div className="panel panel3"></div>
20
+ <div className="panel panel4"></div>
21
+ </Flicking>
22
+ <pre>
23
+ <code className="hljs html" data-script="flicking0"></code>
24
+ </pre>
25
+ </div>
26
+ );
27
+ }
28
+ public componentDidMount() {
29
+ insertCode(
30
+ "variable-size",
31
+ 0,
32
+ `
33
+ <Flicking className="flicking flicking0" circular={true} gap={10}>
34
+ <div className="panel"></div>
35
+ <div className="panel"></div>
36
+ <div className="panel"></div>
37
+ <div className="panel"></div>
38
+ <div className="panel"></div>
39
+ </Flicking>`
40
+ );
41
+ }
42
+ }
@@ -0,0 +1,45 @@
1
+ import Flicking from "@dev/react-flicking";
2
+ import * as React from "react";
3
+
4
+ // eslint-disable-next-line import/no-anonymous-default-export
5
+ export default () => {
6
+ const [num, setNum] = React.useState(1);
7
+ const flicking = React.useRef<Flicking>();
8
+ const virtual = React.useMemo(
9
+ () => ({
10
+ cache: true,
11
+ panelClass: "panel",
12
+ renderPanel: panel => `<span>Panel ${panel.index}</span>`,
13
+ initialPanelCount: 100
14
+ }),
15
+ []
16
+ );
17
+
18
+ return (
19
+ <div className="container">
20
+ <h1>virtual</h1>
21
+ <button onClick={() => setNum(num + 1)}>{num}</button>
22
+ <Flicking
23
+ ref={flicking as any}
24
+ className="flicking flicking0"
25
+ panelsPerView={5}
26
+ circular={true}
27
+ virtual={virtual}
28
+ />
29
+ <button
30
+ onClick={() => {
31
+ flicking.current?.virtual.prepend(100);
32
+ }}
33
+ >
34
+ PREPEND
35
+ </button>
36
+ <button
37
+ onClick={() => {
38
+ flicking.current?.virtual.append(100);
39
+ }}
40
+ >
41
+ APPEND
42
+ </button>
43
+ </div>
44
+ );
45
+ };
@@ -0,0 +1,25 @@
1
+ import { Arrow } from "@dev/plugins";
2
+ import Flicking, { ViewportSlot } from "@dev/react-flicking";
3
+ import * as React from "react";
4
+ import "../css/plugins.css";
5
+
6
+ export default class ArrowDemo extends React.Component<{}> {
7
+ private plugins = [new Arrow()];
8
+ public render() {
9
+ return (
10
+ <div id="arrow" className="container">
11
+ <Flicking className="flicking" circular={true} gap={10} duration={500} plugins={this.plugins}>
12
+ <div className="panel panel0"></div>
13
+ <div className="panel panel1"></div>
14
+ <div className="panel panel2"></div>
15
+ <div className="panel panel3"></div>
16
+ <div className="panel panel4"></div>
17
+ <ViewportSlot>
18
+ <span slot="viewport" className="flicking-arrow-prev"></span>
19
+ <span slot="viewport" className="flicking-arrow-next"></span>
20
+ </ViewportSlot>
21
+ </Flicking>
22
+ </div>
23
+ );
24
+ }
25
+ }
@@ -0,0 +1,70 @@
1
+ import { AutoPlay, Fade } from "@dev/plugins";
2
+ import Flicking from "@dev/react-flicking";
3
+ import * as React from "react";
4
+ import { insertCode } from "../utils";
5
+ import "../css/plugins.css";
6
+
7
+ export default class AutoPlayDemo extends React.Component<{}> {
8
+ private plugins = [new Fade(), new AutoPlay({ duration: 2000, direction: "NEXT" })];
9
+ public render() {
10
+ return (
11
+ <div id="autoplay" className="plugins container">
12
+ <h1>
13
+ AutoPlay
14
+ <a
15
+ href="https://naver.github.io/egjs-flicking-plugins/release/latest/doc/eg.Flicking.plugins.AutoPlay.html"
16
+ target="_blank"
17
+ rel="noopener noreferrer"
18
+ >
19
+ API
20
+ </a>
21
+ </h1>
22
+ <ul className="extra">
23
+ <li>You can set flicking to move to the next/previous panel periodically.</li>
24
+ </ul>
25
+ <Flicking className="flicking" circular={true} gap={10} duration={500} plugins={this.plugins}>
26
+ <div className="panel">
27
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg01.jpg" />
28
+ </div>
29
+ <div className="panel">
30
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg02.jpg" />
31
+ </div>
32
+ <div className="panel">
33
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg03.jpg" />
34
+ </div>
35
+ </Flicking>
36
+ <div className="pagination"></div>
37
+ <pre>
38
+ <code className="hljs html" data-script="flicking0"></code>
39
+ </pre>
40
+ </div>
41
+ );
42
+ }
43
+ public componentDidMount() {
44
+ insertCode(
45
+ "autoplay",
46
+ 0,
47
+ `
48
+ import { Fade, AutoPlay } from "@egjs/flicking-plugins";
49
+ this.plugins = [new Fade(), new AutoPlay(2000, "NEXT")];
50
+
51
+ <Flicking
52
+ className="flicking"
53
+ circular={true}
54
+ gap={10}
55
+ duration={500}
56
+ plugins={this.plugins}
57
+ >
58
+ <div className="panel">
59
+ <img src="https://naver.github.io/egjs-flicking/images/bg01.jpg" />
60
+ </div>
61
+ <div className="panel">
62
+ <img src="https://naver.github.io/egjs-flicking/images/bg02.jpg" />
63
+ </div>
64
+ <div className="panel">
65
+ <img src="https://naver.github.io/egjs-flicking/images/bg03.jpg" />
66
+ </div>
67
+ </Flicking>`
68
+ );
69
+ }
70
+ }
@@ -0,0 +1,69 @@
1
+ import { Fade } from "@dev/plugins";
2
+ import Flicking from "@dev/react-flicking";
3
+ import * as React from "react";
4
+ import { insertCode } from "../utils";
5
+ import "../css/plugins.css";
6
+
7
+ export default class FadeDemo extends React.Component<{}> {
8
+ private plugins = [new Fade()];
9
+ public render() {
10
+ return (
11
+ <div id="fade" className="plugins container">
12
+ <h1>
13
+ Fade
14
+ <a
15
+ href="https://naver.github.io/egjs-flicking-plugins/release/latest/doc/eg.Flicking.plugins.Fade.html"
16
+ target="_blank"
17
+ rel="noopener noreferrer"
18
+ >
19
+ API
20
+ </a>
21
+ </h1>
22
+ <ul className="extra">
23
+ <li>You can give fade in / out effect while moving panels. </li>
24
+ </ul>
25
+ <Flicking className="flicking" circular={true} gap={10} plugins={this.plugins}>
26
+ <div className="panel">
27
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg01.jpg" />
28
+ </div>
29
+ <div className="panel">
30
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg02.jpg" />
31
+ </div>
32
+ <div className="panel">
33
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg03.jpg" />
34
+ </div>
35
+ </Flicking>
36
+ <div className="pagination"></div>
37
+ <pre>
38
+ <code className="hljs html" data-script="flicking0"></code>
39
+ </pre>
40
+ </div>
41
+ );
42
+ }
43
+ public componentDidMount() {
44
+ insertCode(
45
+ "fade",
46
+ 0,
47
+ `
48
+ import { Fade } from "@egjs/flicking-plugins";
49
+ this.plugins = [new Fade()];
50
+
51
+ <Flicking
52
+ className="flicking"
53
+ gap={10}
54
+ circular={true}
55
+ plugins={this.plugins}
56
+ >
57
+ <div className="panel">
58
+ <img src="https://naver.github.io/egjs-flicking/images/bg01.jpg" />
59
+ </div>
60
+ <div className="panel">
61
+ <img src="https://naver.github.io/egjs-flicking/images/bg02.jpg" />
62
+ </div>
63
+ <div className="panel">
64
+ <img src="https://naver.github.io/egjs-flicking/images/bg03.jpg" />
65
+ </div>
66
+ </Flicking>`
67
+ );
68
+ }
69
+ }
@@ -0,0 +1,70 @@
1
+ import { Parallax } from "@dev/plugins";
2
+ import Flicking from "@dev/react-flicking";
3
+ import * as React from "react";
4
+ import { insertCode } from "../utils";
5
+ import "../css/plugins.css";
6
+ import "../css/parallax.css";
7
+
8
+ export default class ParallaxDemo extends React.Component<{}> {
9
+ private plugins = [new Parallax("img", 4)];
10
+ public render() {
11
+ return (
12
+ <div id="parallax" className="plugins container">
13
+ <h1>
14
+ Parallax{" "}
15
+ <a
16
+ href="https://naver.github.io/egjs-flicking-plugins/release/latest/doc/eg.Flicking.plugins.Parallax.html"
17
+ target="_blank"
18
+ rel="noopener noreferrer"
19
+ >
20
+ API
21
+ </a>
22
+ </h1>
23
+ <ul className="extra">
24
+ <li>Parallax effect will be applied to each panel while moving.</li>
25
+ </ul>
26
+ <Flicking className="flicking" gap={10} circular={true} plugins={this.plugins}>
27
+ <div className="panel">
28
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg01.jpg" />
29
+ </div>
30
+ <div className="panel">
31
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg02.jpg" />
32
+ </div>
33
+ <div className="panel">
34
+ <img alt="img" src="https://naver.github.io/egjs-flicking/images/bg03.jpg" />
35
+ </div>
36
+ </Flicking>
37
+ <div className="pagination"></div>
38
+ <pre>
39
+ <code className="hljs html" data-script="flicking0"></code>
40
+ </pre>
41
+ </div>
42
+ );
43
+ }
44
+ public componentDidMount() {
45
+ insertCode(
46
+ "parallax",
47
+ 0,
48
+ `
49
+ import { Parallax } from "@egjs/flicking-plugins";
50
+ this.plugins = [new Parallax("img", 4)];
51
+
52
+ <Flicking
53
+ className="flicking"
54
+ gap={10}
55
+ circular={true}
56
+ plugins={this.plugins}
57
+ >
58
+ <div className="panel">
59
+ <img src="https://naver.github.io/egjs-flicking/images/bg01.jpg" />
60
+ </div>
61
+ <div className="panel">
62
+ <img src="https://naver.github.io/egjs-flicking/images/bg02.jpg" />
63
+ </div>
64
+ <div className="panel">
65
+ <img src="https://naver.github.io/egjs-flicking/images/bg03.jpg" />
66
+ </div>
67
+ </Flicking>`
68
+ );
69
+ }
70
+ }
@@ -0,0 +1,3 @@
1
+ export function insertCode(id: string, index: string | number, code: string) {
2
+ document.querySelector<HTMLElement>(`#${id} [data-script=flicking${index}]`)!.innerText = code.trim();
3
+ }
@@ -0,0 +1,36 @@
1
+ import Flicking from "@dev/react-flicking";
2
+
3
+ const css: Record<string, React.CSSProperties> = {
4
+ container: {
5
+ maxWidth: 800,
6
+ margin: "0 auto",
7
+ padding: 20
8
+ },
9
+ panel: {
10
+ minWidth: 200,
11
+ height: 200,
12
+ margin: "0 5px",
13
+ background: "#e0e7ff",
14
+ borderRadius: 8,
15
+ display: "flex",
16
+ alignItems: "center",
17
+ justifyContent: "center",
18
+ fontSize: 24,
19
+ fontWeight: "bold"
20
+ }
21
+ };
22
+
23
+ export default function App() {
24
+ return (
25
+ <div style={css.container}>
26
+ <h1>Basic Sample</h1>
27
+ <Flicking align="prev" circular={true}>
28
+ <div style={css.panel}>1</div>
29
+ <div style={css.panel}>2</div>
30
+ <div style={css.panel}>3</div>
31
+ <div style={css.panel}>4</div>
32
+ <div style={css.panel}>5</div>
33
+ </Flicking>
34
+ </div>
35
+ );
36
+ }
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Basic Sample - React Flicking</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="./main.tsx"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,10 @@
1
+ import { StrictMode } from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import "@dev/flicking-css";
4
+ import App from "./App";
5
+
6
+ createRoot(document.getElementById("root")!).render(
7
+ <StrictMode>
8
+ <App />
9
+ </StrictMode>
10
+ );
package/dev/index.html ADDED
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>React Flicking - Dev</title>
7
+ <style>
8
+ body { margin: 0; padding: 40px; font-family: sans-serif; }
9
+ a { display: block; margin: 8px 0; font-size: 18px; }
10
+ </style>
11
+ </head>
12
+ <body>
13
+ <h1>React Flicking Dev</h1>
14
+ <a href="/basic-sample/">Basic Sample</a>
15
+ <a href="/plugin-check/">Plugin Check (마이그레이션 검증용)</a>
16
+ <a href="/scratch/">Scratch (이슈 재현)</a>
17
+ </body>
18
+ </html>