react-scroll-snap-anime-slider 1.0.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 (73) hide show
  1. package/.env +1 -0
  2. package/README.md +53 -0
  3. package/demo/src/asset/favicon.ico +0 -0
  4. package/demo/src/asset/logo.svg +1 -0
  5. package/demo/src/asset/logo192.png +0 -0
  6. package/demo/src/asset/logo512.png +0 -0
  7. package/demo/src/asset/manifest.json +25 -0
  8. package/demo/src/index.html +38 -0
  9. package/demo/src/index.tsx +46 -0
  10. package/demo/src/robots.txt +3 -0
  11. package/demo/src/style/App.css +38 -0
  12. package/demo/src/style/index.css +13 -0
  13. package/dist/index.css +15 -0
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.module.css +15 -0
  18. package/dist/index.module.js +2 -0
  19. package/dist/index.module.js.map +1 -0
  20. package/dist/lib/Slide.d.ts +11 -0
  21. package/dist/lib/Slider.d.ts +16 -0
  22. package/dist/lib/Utility.d.ts +1 -0
  23. package/dist/types.d.ts +16 -0
  24. package/docs/README.md +41 -0
  25. package/docs/babel.config.js +3 -0
  26. package/docs/docs/intro.md +47 -0
  27. package/docs/docs/tutorial-basics/_category_.json +8 -0
  28. package/docs/docs/tutorial-basics/congratulations.md +23 -0
  29. package/docs/docs/tutorial-basics/create-a-blog-post.md +34 -0
  30. package/docs/docs/tutorial-basics/create-a-document.md +57 -0
  31. package/docs/docs/tutorial-basics/create-a-page.md +43 -0
  32. package/docs/docs/tutorial-basics/deploy-your-site.md +31 -0
  33. package/docs/docs/tutorial-basics/markdown-features.mdx +150 -0
  34. package/docs/docs/tutorial-extras/_category_.json +7 -0
  35. package/docs/docs/tutorial-extras/img/docsVersionDropdown.png +0 -0
  36. package/docs/docs/tutorial-extras/img/localeDropdown.png +0 -0
  37. package/docs/docs/tutorial-extras/manage-docs-versions.md +55 -0
  38. package/docs/docs/tutorial-extras/translate-your-site.md +88 -0
  39. package/docs/docusaurus.config.js +151 -0
  40. package/docs/package.json +49 -0
  41. package/docs/sidebars.js +33 -0
  42. package/docs/src/components/HomepageFeatures/index.tsx +205 -0
  43. package/docs/src/components/HomepageFeatures/styles.module.css +35 -0
  44. package/docs/src/css/custom.css +87 -0
  45. package/docs/src/pages/index.module.css +34 -0
  46. package/docs/src/pages/index.tsx +47 -0
  47. package/docs/src/pages/markdown-page.md +7 -0
  48. package/docs/static/img/favicon.ico +0 -0
  49. package/docs/static/img/logo-karanokara.png +0 -0
  50. package/docs/static/img/logo-slider.png +0 -0
  51. package/docs/static/img/social-card.png +0 -0
  52. package/docs/tsconfig.json +17 -0
  53. package/index.d.ts +3 -0
  54. package/package.json +79 -0
  55. package/rollup.config.mjs +82 -0
  56. package/src/css/style.scss +105 -0
  57. package/src/index.ts +18 -0
  58. package/src/lib/ButtonBack.tsx +20 -0
  59. package/src/lib/ButtonNext.tsx +22 -0
  60. package/src/lib/Carousel.tsx +132 -0
  61. package/src/lib/CarouselContext.tsx +30 -0
  62. package/src/lib/DotGroupRenderDotsUtil.tsx +97 -0
  63. package/src/lib/Slide.tsx +84 -0
  64. package/src/lib/Slider.tsx +537 -0
  65. package/src/lib/SliderBar.tsx +95 -0
  66. package/src/lib/SliderBarDotGroup.tsx +130 -0
  67. package/src/lib/SliderBarLine.tsx +69 -0
  68. package/src/lib/SliderButton.tsx +82 -0
  69. package/src/lib/Types.tsx +74 -0
  70. package/src/lib/Utility.ts +130 -0
  71. package/tests/App.test.tsx +9 -0
  72. package/tsconfig.build.json +6 -0
  73. package/tsconfig.json +42 -0
@@ -0,0 +1,205 @@
1
+ import React, { useState } from 'react';
2
+ import { clsx } from 'clsx';
3
+ import styles from './styles.module.css';
4
+ import { random, colord } from "colord";
5
+ import { ButtonBack, ButtonNext, Carousel, Slide, Slider, SliderBarLine, SliderBarDotGroup, renderDotsDynamicCircle, renderDotsDynamicPill } from "../../../../src";
6
+
7
+ type SlideItem = {
8
+ title: string;
9
+ background: string;
10
+ color: string;
11
+ };
12
+
13
+ function Feature(props: SlideItem) {
14
+ const [count, setCount] = useState(0);
15
+ return (
16
+ <div
17
+ style={{
18
+ display: "flex",
19
+ width: "100%",
20
+ height: "100%",
21
+ backgroundColor: props.background,
22
+ color: props.color,
23
+ alignItems: "center",
24
+ }}
25
+ >
26
+ <div className="text--center" style={{ width: "100%" }}>
27
+ <h3>{props.title}</h3>
28
+ <div><button className="button button--sm button--secondary" type="button" onClick={() => setCount(count + 1)} >Add Count</button></div>
29
+ <div>{count}</div>
30
+ </div>
31
+ </div>
32
+ );
33
+ }
34
+
35
+ export default function HomepageFeatures(): JSX.Element {
36
+ const [slideCount, setSlideCount] = useState(20);
37
+ const [visibleSlides, setVisibleSlides] = useState(3);
38
+ const [step, setStep] = useState(1);
39
+ const [height, setHeight] = useState(1);
40
+ const [width, setWidth] = useState(1.2);
41
+ const [margin, setMargin] = useState(0);
42
+ const [freeScroll, setFreeScroll] = useState(false);
43
+ const [buttons, setButtons] = useState(true);
44
+ const [scrollbar, setScrollbar] = useState(true);
45
+ const [dotGroup, setDotGroup] = useState(true);
46
+ const [dotGroupType, setDotGroupType] = useState(1);
47
+
48
+ let slides: SlideItem[] = [];
49
+
50
+ for (let i = 0; i < slideCount; ++i) {
51
+ let c = random();
52
+ let color = c.isLight() ? "#000" : "#fff";
53
+
54
+ slides.push({
55
+ title: "Slide #" + (i + 1),
56
+ background: c.toHex(),
57
+ color,
58
+ });
59
+ }
60
+
61
+ return (
62
+ <section >
63
+ <div className="container">
64
+ <div className="padding-bottom--md">
65
+ <Carousel
66
+ totalSlides={slides.length}
67
+ visibleSlides={visibleSlides}
68
+ step={step}
69
+ slideHeight={height}
70
+ slideWidth={width}
71
+ freeScroll={freeScroll}
72
+ currentSlide={0}
73
+ margin={margin / 2 + "px"}
74
+ >
75
+ <Slider
76
+ aria-label="my slider"
77
+ style={{ borderRadius: "1rem", overflow: "hidden" }}
78
+ >
79
+ {slides.map((props, i) => (
80
+ <Slide
81
+ key={i}
82
+ aria-label="my slide"
83
+ >
84
+ <Feature {...props} />
85
+ </Slide>
86
+ ))}
87
+ </Slider>
88
+
89
+ {scrollbar &&
90
+ <SliderBarLine
91
+ id="my-slider-bar"
92
+ className="margin-top--md"
93
+ aria-label="slider bar"
94
+ trackProps={{
95
+ id: "my-slider-bar-track",
96
+ "aria-label": "slider track",
97
+ style: { borderRadius: "1rem" }
98
+ }}
99
+ thumbProps={{
100
+ id: "my-slider-bar-thumb",
101
+ "aria-label": "slider thumb",
102
+ style: { borderRadius: "1rem" }
103
+ }}
104
+ />
105
+ }
106
+
107
+ {dotGroup &&
108
+ <SliderBarDotGroup
109
+ id="my-slider-dot-group"
110
+ className="margin-top--md"
111
+ aria-label="slider bar"
112
+ dotGroupProps={{
113
+ id: "my-slider-bar-dot-track",
114
+ "aria-label": "slider track"
115
+ }}
116
+ renderDots={dotGroupType === 1
117
+ ? renderDotsDynamicCircle
118
+ : ((dotGroupType === 2)
119
+ ? renderDotsDynamicPill
120
+ : undefined)
121
+ }
122
+ />
123
+ }
124
+
125
+ {buttons &&
126
+ <div className="margin-top--md" style={{ textAlign: "center" }}>
127
+ <ButtonBack className="button button--primary">&lt;</ButtonBack>
128
+
129
+ <ButtonNext className="button button--primary margin-left--md">&gt;</ButtonNext>
130
+ </div>
131
+ }
132
+
133
+ </Carousel>
134
+ </div>
135
+ </div>
136
+
137
+ <hr />
138
+
139
+ <div className={styles.featureSettingContainer} >
140
+
141
+ <div className="padding--md">
142
+ <div className="">
143
+ Slide count: <input className="site-input" type="number" value={slideCount} onChange={(e) => setSlideCount(Number(e.target.value))} />
144
+ </div>
145
+ <div className="padding-top--xs">
146
+ Visible slides: <input className="site-input" type="number" value={visibleSlides} onChange={(e) => setVisibleSlides(Number(e.target.value))} />
147
+ </div>
148
+ <div className="padding-top--xs">
149
+ Slides per step: <input className="site-input" type="number" value={step} onChange={(e) => setStep(Number(e.target.value))} />
150
+ </div>
151
+ </div>
152
+
153
+ <div className="padding--md">
154
+
155
+ <div className="">
156
+ Slide gap: <input className="site-input" type="number" value={margin} onChange={(e) => setMargin(Number(e.target.value))} step="1" /> px
157
+ </div>
158
+
159
+ <div className="padding-top--xs">
160
+ Slide height: <input className="site-input" type="number" value={height} onChange={(e) => setHeight(Number(e.target.value))} step="0.1" />
161
+ </div>
162
+ <div className="padding-top--xs">
163
+ Slide width: <input className="site-input" type="number" value={width} onChange={(e) => setWidth(Number(e.target.value))} step="0.1" />
164
+ </div>
165
+
166
+ <div className="padding-top--xs" style={{ "color": " var(--ifm-color-secondary-darkest)", fontSize: "12px" }}>Height will become auto if set to 0</div>
167
+
168
+ </div>
169
+
170
+ <div className="padding--md">
171
+ <div className="">
172
+ Free Scroll?: <input className="" type="checkbox" checked={freeScroll} onChange={() => setFreeScroll(!freeScroll)} />
173
+ </div>
174
+
175
+ <div className="padding-top--xs">
176
+ Show scrollbar?: <input className="" type="checkbox" checked={scrollbar} onChange={() => setScrollbar(!scrollbar)} />
177
+ </div>
178
+
179
+ <div className="padding-top--xs">
180
+ Show buttons?: <input className="" type="checkbox" checked={buttons} onChange={() => setButtons(!buttons)} />
181
+ </div>
182
+ </div>
183
+
184
+ <div className="padding--md">
185
+
186
+ <div className="">
187
+ Show dot group?: <input className="" type="checkbox" checked={dotGroup} onChange={() => setDotGroup(!dotGroup)} />
188
+ </div>
189
+
190
+ <div className="padding-top--xs">
191
+ Normal: <input className="" type="radio" name="dot-type" checked={dotGroupType === 0} onChange={() => setDotGroupType(0)} disabled={!dotGroup} />
192
+ </div>
193
+
194
+ <div className="">
195
+ Dynamic circle: <input className="" type="radio" name="dot-type" checked={dotGroupType === 1} onChange={() => setDotGroupType(1)} disabled={!dotGroup} />
196
+ </div>
197
+
198
+ <div className="">
199
+ Dynamic pill: <input className="" type="radio" name="dot-type" checked={dotGroupType === 2} onChange={() => setDotGroupType(2)} disabled={!dotGroup} />
200
+ </div>
201
+ </div>
202
+ </div>
203
+ </section>
204
+ );
205
+ }
@@ -0,0 +1,35 @@
1
+ .features {
2
+ display: flex;
3
+ align-items: center;
4
+ /* padding: 2rem 0; */
5
+ width: 100%;
6
+ }
7
+
8
+ .featureSvg {
9
+ height: 200px;
10
+ width: 200px;
11
+ }
12
+
13
+ .featureSettingContainer {
14
+ display: flex;
15
+ width: 100%;
16
+ overflow-x: auto;
17
+ }
18
+
19
+ .featureSettingContainer::-webkit-scrollbar {
20
+ display: none;
21
+ }
22
+
23
+ .featureSettingContainer > div {
24
+ flex-shrink: 0;
25
+ }
26
+ .featureSettingContainer > div:not(:first-child) {
27
+ border-left: 1px solid var(--ifm-hr-background-color);
28
+ }
29
+
30
+ .demoBox {
31
+ /* box-shadow: 0px 0px 12px 0px var(--ifm-hr-background-color); */
32
+ border-radius: 1rem;
33
+ border: 1px solid var(--ifm-hr-background-color);
34
+ padding: 1rem 0;
35
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Any CSS included here will be global. The classic template
3
+ * bundles Infima by default. Infima is a CSS framework designed to
4
+ * work well for content-centric websites.
5
+ *
6
+ * https://infima.dev/docs/components/avatar
7
+ */
8
+
9
+ /* You can override the default Infima variables here. */
10
+ :root {
11
+ --ifm-color-primary-lightest: #aae3fc;
12
+ --ifm-color-primary-lighter: #6dd0fa;
13
+ --ifm-color-primary-light: #00bef8;
14
+ --ifm-color-primary: #00b0f9;
15
+ --ifm-color-primary-dark: #00a2f6;
16
+ --ifm-color-primary-darker: #0095e7;
17
+ --ifm-color-primary-darkest: #0082d4;
18
+ --ifm-code-font-size: 95%;
19
+ --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
20
+ --ifm-hr-background-color: #e0e5eb;
21
+ }
22
+
23
+ /* For readability concerns, you should choose a lighter palette in dark mode. */
24
+ [data-theme="dark"] {
25
+ --ifm-color-primary-lightest: #e1f6ff;
26
+ --ifm-color-primary-lighter: #b3e7ff;
27
+ --ifm-color-primary-light: #80d8ff;
28
+ --ifm-color-primary: #47c8ff;
29
+ --ifm-color-primary-dark: #10bbff;
30
+ --ifm-color-primary-darker: #00afff;
31
+ --ifm-color-primary-darkest: #00a0fb;
32
+ --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
33
+ --ifm-hr-background-color: #565c62;
34
+ }
35
+
36
+ hr {
37
+ margin: 0;
38
+ }
39
+
40
+ .header-github-link:before {
41
+ -webkit-mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");
42
+ mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E");
43
+ background-color: var(--ifm-navbar-link-color);
44
+ content: "";
45
+ display: flex;
46
+ height: 24px;
47
+ width: 24px;
48
+ }
49
+
50
+ .site-input {
51
+ appearance: none; /* Algolia will add type="search" to the input in Safari and Safari's styling will override the styling here. */
52
+ background: var(--ifm-navbar-search-input-background-color);
53
+ border: none;
54
+ border-radius: 2rem;
55
+ color: var(--ifm-navbar-search-input-color);
56
+ cursor: text;
57
+ display: inline-block;
58
+ font-size: 0.9rem;
59
+ height: 2rem;
60
+ padding: 0 1rem;
61
+ width: 5rem;
62
+ /* min-width: 5rem; */
63
+ /* max-width: 10rem; */
64
+ }
65
+
66
+ .site-input::placeholder {
67
+ color: var(--ifm-navbar-search-input-placeholder-color);
68
+ }
69
+
70
+ .flex-shrink-0 {
71
+ flex-shrink: 0;
72
+ }
73
+
74
+ .footer {
75
+ background-color: unset;
76
+ border-top: 1px solid var(--ifm-hr-background-color);
77
+ }
78
+
79
+ .footer__item {
80
+ text-align: center;
81
+ }
82
+
83
+ @media (max-width: 996px) {
84
+ .footer__col {
85
+ margin-bottom: 0;
86
+ }
87
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * CSS files with the .module.css suffix will be treated as CSS modules
3
+ * and scoped locally.
4
+ */
5
+
6
+ .heroBanner {
7
+ padding: 4rem 0;
8
+ text-align: center;
9
+ position: relative;
10
+ overflow: hidden;
11
+ }
12
+
13
+ .heroBannerBg {
14
+ background: url(/img/logo-slider.png) no-repeat right center/300px 300px;
15
+ position: absolute;
16
+ left: 0;
17
+ top: 0;
18
+ width: 100%;
19
+ height: 100%;
20
+ z-index: 0;
21
+ opacity: 0.2;
22
+ }
23
+
24
+ @media screen and (max-width: 996px) {
25
+ .heroBanner {
26
+ padding: 2rem 0;
27
+ }
28
+ }
29
+
30
+ .buttons {
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ }
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+ import { clsx } from 'clsx';
3
+ import Link from '@docusaurus/Link';
4
+ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
5
+ import Layout from '@theme/Layout';
6
+ import HomepageFeatures from '@site/src/components/HomepageFeatures';
7
+ import styles from './index.module.css';
8
+
9
+ function HomepageHeader() {
10
+ const { siteConfig } = useDocusaurusContext();
11
+ return (
12
+ <header className={clsx('', styles.heroBanner)}>
13
+ <div className={styles.heroBannerBg}></div>
14
+ <div className="container" style={{ position: "relative" }}>
15
+ <h1 className="hero__title">{siteConfig.title}</h1>
16
+ <h5 className="hero__subtitle">
17
+ A simple slider using css style scroll-snap and <a className="" style={{ color: "#FA196C", fontStyle: "italic" }} href="https://popmotion.io/" target="_blank">Popmotion</a>
18
+ </h5>
19
+ <div className={styles.buttons}>
20
+ {/* <Link
21
+ className="button button--secondary button--lg"
22
+ to="/docs/intro">
23
+ Docusaurus Tutorial - 5minfffffff ⏱️
24
+ </Link> */}
25
+ </div>
26
+ </div>
27
+ </header>
28
+ );
29
+ }
30
+
31
+ export default function Home(): JSX.Element {
32
+ const { siteConfig } = useDocusaurusContext();
33
+ return (
34
+ <Layout
35
+ // page title shown on document title
36
+ // title={`A Simple React Anime Slider`}
37
+ // Description will go into a meta tag in <head />
38
+ description="A Simple React Anime Slider">
39
+ <HomepageHeader />
40
+
41
+ <main style={{ position: "relative" }}>
42
+ <HomepageFeatures />
43
+ </main>
44
+
45
+ </Layout>
46
+ );
47
+ }
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: Markdown page example
3
+ ---
4
+
5
+ # Markdown page example
6
+
7
+ You don't need React to write simple standalone pages.
Binary file
Binary file
Binary file
@@ -0,0 +1,17 @@
1
+ {
2
+ // This file is not used in compilation. It is here just for a nice editor experience.
3
+ "extends": "@tsconfig/docusaurus/tsconfig.json",
4
+ "compilerOptions": {
5
+ "baseUrl": "."
6
+ },
7
+ "module": "CommonJS", // Forces CommonJS
8
+ "moduleResolution": "node16", // `node16` allows the `import()`
9
+ "allowJs": true,
10
+ "jsx": "react",
11
+ "exclude": [
12
+ "node_modules"
13
+ ],
14
+ "include": [
15
+ "./src/**/*",
16
+ ]
17
+ }
package/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ declare module "*.png";
2
+ declare module "*.jpg";
3
+ declare module "*.svg";
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "react-scroll-snap-anime-slider",
3
+ "version": "1.0.0",
4
+ "private": false,
5
+ "description": "A simple slider/carousel using css style scroll-snap and Popmotion.",
6
+ "source": "src/index.ts",
7
+ "main": "dist/index.js",
8
+ "module": "dist/index.module.js",
9
+ "types": "dist/index.d.ts",
10
+ "keywords": [
11
+ "react",
12
+ "carousel",
13
+ "scroll snapping",
14
+ "scroll snap",
15
+ "scroll",
16
+ "slider",
17
+ "react slider",
18
+ "popmotion",
19
+ "inertia slider",
20
+ "anime slider",
21
+ "animate slider"
22
+ ],
23
+ "author": "karanokara <karawakara@gmail.com> (https://github.com/karanokara)",
24
+ "license": "MIT",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/karanokara/react-scroll-snap-anime-slider.git"
28
+ },
29
+ "devDependencies": {
30
+ "@parcel/packager-raw-url": "^2.8.3",
31
+ "@parcel/transformer-typescript-types": "^2.8.3",
32
+ "@parcel/transformer-webmanifest": "^2.8.3",
33
+ "@rollup/plugin-commonjs": "^24.1.0",
34
+ "@rollup/plugin-node-resolve": "^15.0.2",
35
+ "@rollup/plugin-terser": "^0.4.1",
36
+ "@rollup/plugin-typescript": "^11.1.0",
37
+ "@testing-library/jest-dom": "^5.16.2",
38
+ "@testing-library/react": "^9.5.0",
39
+ "@testing-library/user-event": "^7.2.1",
40
+ "@types/animejs": "^3.1.7",
41
+ "@types/jest": "^27.5.2",
42
+ "@types/node": "^16.18.23",
43
+ "@types/react": "^18.0.34",
44
+ "@types/react-dom": "^18.0.11",
45
+ "node-sass": "^8.0.0",
46
+ "parcel": "^2.8.3",
47
+ "process": "^0.11.10",
48
+ "react": "^16.14.0",
49
+ "react-dom": "^16.14.0",
50
+ "rollup": "^3.20.2",
51
+ "rollup-plugin-peer-deps-external": "^2.2.4",
52
+ "typescript": "^4.9.5"
53
+ },
54
+ "dependencies": {
55
+ "popmotion": "8.7.1",
56
+ "rollup-plugin-import-css": "^3.2.1"
57
+ },
58
+ "peerDependencies": {
59
+ "react": ">=16.8",
60
+ "react-dom": ">=16.8"
61
+ },
62
+ "scripts": {
63
+ "build": "rm -rf ./dist && rollup -c",
64
+ "start": "parcel demo/src/index.html --dist-dir demo/dist --port 5001 --open",
65
+ "docs": "cd ./docs && npm start"
66
+ },
67
+ "browserslist": {
68
+ "production": [
69
+ ">0.2%",
70
+ "not dead",
71
+ "not op_mini all"
72
+ ],
73
+ "development": [
74
+ "last 1 chrome version",
75
+ "last 1 firefox version",
76
+ "last 1 safari version"
77
+ ]
78
+ }
79
+ }
@@ -0,0 +1,82 @@
1
+ import resolve from "@rollup/plugin-node-resolve";
2
+ import commonjs from "@rollup/plugin-commonjs";
3
+ import typescript from "@rollup/plugin-typescript";
4
+ import terser from '@rollup/plugin-terser';
5
+ import external from "rollup-plugin-peer-deps-external";
6
+ import css from "rollup-plugin-import-css";
7
+ // import json from '@rollup/plugin-json';
8
+ // import dts from "rollup-plugin-dts";
9
+ import packageJson from "./package.json" assert { type: 'json' };
10
+
11
+ /**
12
+ * Using rollup: ES module bundler
13
+ * - add "type": "module" to package.json for this file to work in ES style
14
+ * - or change extension to .mjs
15
+ * - run with -config: rollup -c
16
+ */
17
+ export default [
18
+ {
19
+ input: packageJson.source,
20
+ output: [
21
+ // compile to those file formats
22
+ {
23
+ // CommonJS module, suitable for Node
24
+ file: packageJson.main, // file name to use
25
+ format: "cjs",
26
+ sourcemap: true,
27
+ },
28
+
29
+ // compile to an ES module, can be used for <script type=module>
30
+ {
31
+ file: packageJson.module,
32
+ format: "es",
33
+ sourcemap: true,
34
+ },
35
+
36
+ // A self-executing function, suitable for <script> tag browser format
37
+ // {
38
+ // file: 'dist/bundle.js',
39
+ // format: 'iife', //immediately-invoked Function Expression
40
+ // name: "MyBundle",
41
+ // sourcemap: true,
42
+ // globals: {
43
+ // react: 'React',
44
+ // animejs: 'animejs'
45
+ // }
46
+ // }
47
+
48
+ // amd – Asynchronous Module Definition, used with module loaders like RequireJS
49
+ // system – Native format of the SystemJS loader (alias: systemjs)
50
+ // umd – Universal Module Definition, works as amd, cjs and iife all in one
51
+ ],
52
+
53
+ // indicate which modules should be treated as external
54
+ external: ['popmotion'],
55
+
56
+ plugins: [
57
+ // bring external modules source code to the output, not necessary for this library
58
+ // resolve(),
59
+
60
+ // convert CommonJS to ES2015 before Rollup can process them.
61
+ commonjs(),
62
+
63
+ typescript({ tsconfig: "./tsconfig.build.json" }),
64
+
65
+ terser(), // minify output
66
+
67
+ css(),
68
+ // automatically add a library's peerDependencies to its bundle's external config
69
+ external(),
70
+
71
+ // json(), // source code have json files import
72
+
73
+ ],
74
+ },
75
+
76
+ // defines how our libraries types are distributed and uses the dts plugin to do so
77
+ // {
78
+ // input: "dist/types/index.d.ts",
79
+ // output: [{ file: "dist/index.d.ts", format: "esm" }],
80
+ // plugins: [dts()],
81
+ // },
82
+ ];