@yoursurprise/slider 0.0.1 → 0.0.3

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.
package/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # React slider
2
+
3
+ This package contains a basic modern slider. The purpose of this slider is to provide a simple React component
4
+ which can be controlled in a userfriendly way on mobile, tablet and desktop.
5
+
6
+ This slider has the following features:
7
+
8
+ - Free scroll on mobile with native CSS scroll snapping
9
+ - Drag to scroll on devices with a mouse
10
+ - Buttons to navigate on devices with a mouse
11
+ - Support for multiple variable width slides
12
+
13
+ Before using this slider, please consider the following:
14
+ - The slider only contains styling to make it functional
15
+ - There is no configuration of aforementioned features (yet)
16
+
17
+ All browsers with [IntersectionObserver](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) are supported.
18
+
19
+ ## Installation
20
+
21
+ ### npm
22
+
23
+ `npm install @yoursurprisecom/slider --save`
24
+
25
+ ### yarn
26
+
27
+ `yarn add @yoursurprisecom/slider`
28
+
29
+ ### Import the CSS files
30
+
31
+ `import "@yoursurprisecom/slider/dist/index.css";`
32
+
33
+ ### Implement the Slider
34
+
35
+ ```
36
+ import Slider from '@yoursurprisecom/slider';
37
+ import '@yoursurprisecom/slider/dist/index.css';
38
+
39
+ export default function YourComponent() {
40
+ return (
41
+ <Slider>
42
+ <div>1</div>
43
+ <div>2</div>
44
+ <div>3</div>
45
+ <div>4</div>
46
+ </Slider>
47
+ );
48
+ }
49
+ ```
50
+
51
+
52
+
53
+
File without changes
@@ -1,2 +1,2 @@
1
1
  import { Slider } from './Slider';
2
- export default Slider;
2
+ export { Slider };
package/dist/cjs/index.js CHANGED
@@ -1,2 +1,174 @@
1
- "use strict";var e,t,r=require("react/jsx-runtime"),n=require("react");!function(e){e[e.FULL=0]="FULL",e[e.PARTIAL=1]="PARTIAL",e[e.NONE=2]="NONE"}(e||(e={})),function(e){e[e.PREV=0]="PREV",e[e.NEXT=1]="NEXT"}(t||(t={}));module.exports=({children:s})=>{const c=n.useRef([]),i=n.useRef(null),l=n.useRef([]),o=n.useRef([]),[u,a]=n.useState(!1),[d,f]=n.useState(!1),[h,b]=n.useState(!1),[L,g]=n.useState({clientX:0,scrollX:0}),m=n.useRef(null),p=n.useRef(null);n.useEffect((()=>{const e=i.current;if(!e)return()=>{};const t=()=>a(e.classList.toggle("is-scrollable",e.scrollWidth>e.clientWidth));return window?.addEventListener("resize",t),t(),()=>{window?.removeEventListener("resize",t)}}),[i]),n.useEffect((()=>{i.current?.classList.toggle("is-scrollable",u)}),[u]),n.useEffect((()=>{i.current?.classList.toggle("is-dragging",d);const e=e=>{e.stopPropagation(),e.preventDefault(),b(!1),f(!1)};return d&&document?.addEventListener("mouseup",e),()=>{document?.removeEventListener("mouseup",e)}}),[d]);const E=()=>l.current[0]??o.current[0]??-1,v=()=>l.current[l.current.length-1]??o.current[o.current.length-1]??-1,N=n.useCallback((()=>{const e=v()+1===c.current.length,t=u&&!1===e,r=E()>0&&u;p.current&&m.current&&(p.current.classList.toggle("hidden",!1===t),p.current.ariaHidden=String(!1===t),m.current.classList.toggle("hidden",!1===r),m.current.ariaHidden=String(!1===r))}),[u]),R=t=>t>=.9?e.FULL:t>=.5?e.PARTIAL:e.NONE;n.useEffect((()=>{if(!i.current)return()=>{};N();const t=new IntersectionObserver((t=>{t.forEach((t=>{const r=t.target,n=Number(r.dataset.slideIndex);R(t.intersectionRatio)===e.FULL?l.current.push(n):l.current=l.current.filter((e=>e!==n)),R(t.intersectionRatio)===e.PARTIAL?o.current.push(n):o.current=o.current.filter((e=>e!==n))})),l.current=[...new Set(l.current)].sort(((e,t)=>e-t)),o.current=[...new Set(o.current)].sort(((e,t)=>e-t)),N()}),{root:i.current,threshold:[0,.5,.9]});return c.current.forEach((({element:e})=>t.observe(e))),()=>t.disconnect()}),[i,N]);const _=e=>{if(!i.current)return;const r=e===t.PREV?E()-1:v()+1,n=c.current[r];let s=0;n&&(s=e===t.PREV?n.element.offsetLeft-i.current.offsetLeft-i.current.clientWidth+n.element.clientWidth:n.element.offsetLeft-i.current.offsetLeft,i.current.scrollTo({behavior:"smooth",left:s,top:0}))};return r.jsxs("div",{className:"slider",children:[r.jsx("div",{className:"slider__wrapper",role:"list",ref:i,onMouseDown:e=>{g({...L,clientX:e.clientX,scrollX:i.current?.scrollLeft??0}),f(!0)},onMouseMove:e=>{i.current&&d&&(Math.abs(L.clientX-e.clientX)>5&&b(!0),i.current.scrollLeft=L.scrollX+L.clientX-e.clientX)},onMouseUp:()=>{f(!1)},onClickCapture:e=>{h&&(e.stopPropagation(),e.preventDefault()),b(!1)},children:n.Children.map(s,((t,n)=>r.jsx("div",{className:"slider__wrapper__slide",role:"listitem","data-slide-index":n,ref:t=>{t&&((t,r)=>{c.current[r]={element:t,visibility:e.NONE}})(t,n)},children:t},n)))}),r.jsx("button",{"aria-label":"Previous slide",type:"button",onClick:()=>_(t.PREV),ref:m,className:"slider__button slider__button--prev button button--ghost button--clean button--has-icon hidden",children:r.jsx("i",{className:"icon-chevron-left"})}),r.jsx("button",{"aria-label":"Next slide",type:"button",onClick:()=>_(t.NEXT),ref:p,className:"slider__button slider__button--next button button--ghost button--clean button--has-icon hidden",children:r.jsx("i",{className:"icon-chevron-right"})})]})};
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+
6
+ var Visbility;
7
+ (function (Visbility) {
8
+ Visbility[Visbility["FULL"] = 0] = "FULL";
9
+ Visbility[Visbility["PARTIAL"] = 1] = "PARTIAL";
10
+ Visbility[Visbility["NONE"] = 2] = "NONE";
11
+ })(Visbility || (Visbility = {}));
12
+ var NavigationDirection;
13
+ (function (NavigationDirection) {
14
+ NavigationDirection[NavigationDirection["PREV"] = 0] = "PREV";
15
+ NavigationDirection[NavigationDirection["NEXT"] = 1] = "NEXT";
16
+ })(NavigationDirection || (NavigationDirection = {}));
17
+ const Slider = ({ children }) => {
18
+ const slides = react.useRef([]);
19
+ const wrapper = react.useRef(null);
20
+ const visibleSlideIndices = react.useRef([]);
21
+ const partiallyVisibleSlideIndices = react.useRef([]);
22
+ const [isScrollable, setIsScrollable] = react.useState(false);
23
+ const [isDragging, setIsDragging] = react.useState(false);
24
+ const [isBlockingClicks, setIsBlockingClicks] = react.useState(false);
25
+ const [mousePosition, setMousePosition] = react.useState({
26
+ clientX: 0,
27
+ scrollX: 0,
28
+ });
29
+ const arrowPrevRef = react.useRef(null);
30
+ const arrowNextRef = react.useRef(null);
31
+ react.useEffect(() => {
32
+ const currentWrapper = wrapper.current;
33
+ if (!currentWrapper) {
34
+ return () => { };
35
+ }
36
+ const checkScrollable = () => setIsScrollable(currentWrapper.classList.toggle('is-scrollable', currentWrapper.scrollWidth > currentWrapper.clientWidth));
37
+ window?.addEventListener('resize', checkScrollable);
38
+ checkScrollable();
39
+ return () => {
40
+ window?.removeEventListener('resize', checkScrollable);
41
+ };
42
+ }, [wrapper]);
43
+ react.useEffect(() => {
44
+ wrapper.current?.classList.toggle('is-scrollable', isScrollable);
45
+ }, [isScrollable]);
46
+ react.useEffect(() => {
47
+ wrapper.current?.classList.toggle('is-dragging', isDragging);
48
+ const onDocumentMouseUp = (event) => {
49
+ event.stopPropagation();
50
+ event.preventDefault();
51
+ setIsBlockingClicks(false);
52
+ setIsDragging(false);
53
+ };
54
+ if (isDragging) {
55
+ document?.addEventListener('mouseup', onDocumentMouseUp);
56
+ }
57
+ return () => {
58
+ document?.removeEventListener('mouseup', onDocumentMouseUp);
59
+ };
60
+ }, [isDragging]);
61
+ const blockChildClickHandler = (event) => {
62
+ if (isBlockingClicks) {
63
+ event.stopPropagation();
64
+ event.preventDefault();
65
+ }
66
+ setIsBlockingClicks(false);
67
+ };
68
+ const mouseUpHandler = () => {
69
+ setIsDragging(false);
70
+ };
71
+ const mouseDownHandler = (event) => {
72
+ setMousePosition({
73
+ ...mousePosition,
74
+ clientX: event.clientX,
75
+ scrollX: wrapper.current?.scrollLeft ?? 0,
76
+ });
77
+ setIsDragging(true);
78
+ };
79
+ const mouseMoveHandler = (event) => {
80
+ if (!wrapper.current || !isDragging) {
81
+ return;
82
+ }
83
+ if (Math.abs(mousePosition.clientX - event.clientX) > 5) {
84
+ setIsBlockingClicks(true);
85
+ }
86
+ wrapper.current.scrollLeft = mousePosition.scrollX + mousePosition.clientX - event.clientX;
87
+ };
88
+ const addSlide = (node, index) => {
89
+ slides.current[index] = {
90
+ element: node,
91
+ visibility: Visbility.NONE,
92
+ };
93
+ };
94
+ const getFirstVisibleSlideIndex = () => visibleSlideIndices.current[0] ?? partiallyVisibleSlideIndices.current[0] ?? -1;
95
+ const getLastVisibleSlideIndex = () => visibleSlideIndices.current[visibleSlideIndices.current.length - 1]
96
+ ?? partiallyVisibleSlideIndices.current[partiallyVisibleSlideIndices.current.length - 1] ?? -1;
97
+ const setControlsVisibility = react.useCallback(() => {
98
+ const lastSlideFullyVisible = getLastVisibleSlideIndex() + 1 === slides.current.length;
99
+ const moreContentAvailable = isScrollable && lastSlideFullyVisible === false;
100
+ const previousContentAvailable = getFirstVisibleSlideIndex() > 0 && isScrollable;
101
+ if (arrowNextRef.current && arrowPrevRef.current) {
102
+ arrowNextRef.current.classList.toggle('hidden', moreContentAvailable === false);
103
+ arrowNextRef.current.ariaHidden = String(moreContentAvailable === false);
104
+ arrowPrevRef.current.classList.toggle('hidden', previousContentAvailable === false);
105
+ arrowPrevRef.current.ariaHidden = String(previousContentAvailable === false);
106
+ }
107
+ }, [isScrollable]);
108
+ const getVisibilityByIntersectionRatio = (intersectionRatio) => {
109
+ if (intersectionRatio >= 0.9) {
110
+ return Visbility.FULL;
111
+ }
112
+ if (intersectionRatio >= 0.5) {
113
+ return Visbility.PARTIAL;
114
+ }
115
+ return Visbility.NONE;
116
+ };
117
+ react.useEffect(() => {
118
+ if (!wrapper.current) {
119
+ return () => { };
120
+ }
121
+ setControlsVisibility();
122
+ const intersectionCallback = (entries) => {
123
+ entries.forEach((entry) => {
124
+ const target = entry.target;
125
+ const index = Number(target.dataset.slideIndex);
126
+ if (getVisibilityByIntersectionRatio(entry.intersectionRatio) === Visbility.FULL) {
127
+ visibleSlideIndices.current.push(index);
128
+ }
129
+ else {
130
+ visibleSlideIndices.current = visibleSlideIndices.current.filter((slideIndex) => slideIndex !== index);
131
+ }
132
+ if (getVisibilityByIntersectionRatio(entry.intersectionRatio) === Visbility.PARTIAL) {
133
+ partiallyVisibleSlideIndices.current.push(index);
134
+ }
135
+ else {
136
+ partiallyVisibleSlideIndices.current = partiallyVisibleSlideIndices.current.filter((slideIndex) => slideIndex !== index);
137
+ }
138
+ });
139
+ visibleSlideIndices.current = [...new Set(visibleSlideIndices.current)].sort((a, b) => a - b);
140
+ partiallyVisibleSlideIndices.current = [...new Set(partiallyVisibleSlideIndices.current)].sort((a, b) => a - b);
141
+ setControlsVisibility();
142
+ };
143
+ const intersectionObserver = new IntersectionObserver(intersectionCallback, {
144
+ root: wrapper.current,
145
+ threshold: [0, 0.5, 0.9],
146
+ });
147
+ slides.current.forEach(({ element }) => intersectionObserver.observe(element));
148
+ return () => intersectionObserver.disconnect();
149
+ }, [wrapper, setControlsVisibility]);
150
+ const navigate = (direction) => {
151
+ if (!wrapper.current) {
152
+ return;
153
+ }
154
+ const targetSlideIndex = direction === NavigationDirection.PREV ? getFirstVisibleSlideIndex() - 1 : getLastVisibleSlideIndex() + 1;
155
+ const targetSlide = slides.current[targetSlideIndex];
156
+ let scrollLeft = 0;
157
+ if (!targetSlide) {
158
+ return;
159
+ }
160
+ if (direction === NavigationDirection.PREV) {
161
+ scrollLeft = targetSlide.element.offsetLeft - wrapper.current.offsetLeft - wrapper.current.clientWidth + targetSlide.element.clientWidth;
162
+ }
163
+ else {
164
+ scrollLeft = targetSlide.element.offsetLeft - wrapper.current.offsetLeft;
165
+ }
166
+ wrapper.current.scrollTo({ behavior: 'smooth', left: scrollLeft, top: 0 });
167
+ };
168
+ return (jsxRuntime.jsxs("div", { className: "slider", children: [jsxRuntime.jsx("div", { className: "slider__wrapper", role: "list", ref: wrapper, onMouseDown: mouseDownHandler, onMouseMove: mouseMoveHandler, onMouseUp: mouseUpHandler, onClickCapture: blockChildClickHandler, children: react.Children.map(children, (child, index) => (jsxRuntime.jsx("div", { className: "slider__wrapper__slide", role: "listitem", "data-slide-index": index, ref: (node) => { if (node) {
169
+ addSlide(node, index);
170
+ } }, children: child }, index))) }), jsxRuntime.jsx("button", { "aria-label": "Previous slide", type: "button", onClick: () => navigate(NavigationDirection.PREV), ref: arrowPrevRef, className: "slider__button slider__button--prev button button--ghost button--clean button--has-icon hidden", children: jsxRuntime.jsx("i", { className: "icon-chevron-left" }) }), jsxRuntime.jsx("button", { "aria-label": "Next slide", type: "button", onClick: () => navigate(NavigationDirection.NEXT), ref: arrowNextRef, className: "slider__button slider__button--next button button--ghost button--clean button--has-icon hidden", children: jsxRuntime.jsx("i", { className: "icon-chevron-right" }) })] }));
171
+ };
172
+
173
+ exports.Slider = Slider;
2
174
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/src/src/Slider.tsx"],"sourcesContent":[null],"names":["Visbility","NavigationDirection","children","slides","useRef","wrapper","visibleSlideIndices","partiallyVisibleSlideIndices","isScrollable","setIsScrollable","useState","isDragging","setIsDragging","isBlockingClicks","setIsBlockingClicks","mousePosition","setMousePosition","clientX","scrollX","arrowPrevRef","arrowNextRef","useEffect","currentWrapper","current","checkScrollable","classList","toggle","scrollWidth","clientWidth","window","addEventListener","removeEventListener","onDocumentMouseUp","event","stopPropagation","preventDefault","document","getFirstVisibleSlideIndex","getLastVisibleSlideIndex","length","setControlsVisibility","useCallback","lastSlideFullyVisible","moreContentAvailable","previousContentAvailable","ariaHidden","String","getVisibilityByIntersectionRatio","intersectionRatio","FULL","PARTIAL","NONE","intersectionObserver","IntersectionObserver","entries","forEach","entry","target","index","Number","dataset","slideIndex","push","filter","Set","sort","a","b","root","threshold","element","observe","disconnect","navigate","direction","targetSlideIndex","PREV","targetSlide","scrollLeft","offsetLeft","scrollTo","behavior","left","top","_jsxs","jsxs","className","_jsx","role","ref","onMouseDown","onMouseMove","Math","abs","onMouseUp","onClickCapture","Children","map","child","node","visibility","addSlide","type","onClick","NEXT"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/Slider.tsx"],"sourcesContent":[null],"names":["useRef","useState","useEffect","useCallback","_jsxs","_jsx","Children"],"mappings":"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"}
File without changes
@@ -1,2 +1,2 @@
1
1
  import { Slider } from './Slider';
2
- export default Slider;
2
+ export { Slider };
package/dist/esm/index.js CHANGED
@@ -1,2 +1,172 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useRef as r,useState as n,useEffect as c,useCallback as o,Children as s}from"react";var i,l;!function(e){e[e.FULL=0]="FULL",e[e.PARTIAL=1]="PARTIAL",e[e.NONE=2]="NONE"}(i||(i={})),function(e){e[e.PREV=0]="PREV",e[e.NEXT=1]="NEXT"}(l||(l={}));const u=({children:u})=>{const a=r([]),d=r(null),f=r([]),h=r([]),[m,L]=n(!1),[b,g]=n(!1),[p,v]=n(!1),[N,E]=n({clientX:0,scrollX:0}),_=r(null),X=r(null);c((()=>{const e=d.current;if(!e)return()=>{};const t=()=>L(e.classList.toggle("is-scrollable",e.scrollWidth>e.clientWidth));return window?.addEventListener("resize",t),t(),()=>{window?.removeEventListener("resize",t)}}),[d]),c((()=>{d.current?.classList.toggle("is-scrollable",m)}),[m]),c((()=>{d.current?.classList.toggle("is-dragging",b);const e=e=>{e.stopPropagation(),e.preventDefault(),v(!1),g(!1)};return b&&document?.addEventListener("mouseup",e),()=>{document?.removeEventListener("mouseup",e)}}),[b]);const P=()=>f.current[0]??h.current[0]??-1,R=()=>f.current[f.current.length-1]??h.current[h.current.length-1]??-1,w=o((()=>{const e=R()+1===a.current.length,t=m&&!1===e,r=P()>0&&m;X.current&&_.current&&(X.current.classList.toggle("hidden",!1===t),X.current.ariaHidden=String(!1===t),_.current.classList.toggle("hidden",!1===r),_.current.ariaHidden=String(!1===r))}),[m]),A=e=>e>=.9?i.FULL:e>=.5?i.PARTIAL:i.NONE;c((()=>{if(!d.current)return()=>{};w();const e=new IntersectionObserver((e=>{e.forEach((e=>{const t=e.target,r=Number(t.dataset.slideIndex);A(e.intersectionRatio)===i.FULL?f.current.push(r):f.current=f.current.filter((e=>e!==r)),A(e.intersectionRatio)===i.PARTIAL?h.current.push(r):h.current=h.current.filter((e=>e!==r))})),f.current=[...new Set(f.current)].sort(((e,t)=>e-t)),h.current=[...new Set(h.current)].sort(((e,t)=>e-t)),w()}),{root:d.current,threshold:[0,.5,.9]});return a.current.forEach((({element:t})=>e.observe(t))),()=>e.disconnect()}),[d,w]);const T=e=>{if(!d.current)return;const t=e===l.PREV?P()-1:R()+1,r=a.current[t];let n=0;r&&(n=e===l.PREV?r.element.offsetLeft-d.current.offsetLeft-d.current.clientWidth+r.element.clientWidth:r.element.offsetLeft-d.current.offsetLeft,d.current.scrollTo({behavior:"smooth",left:n,top:0}))};return e("div",{className:"slider",children:[t("div",{className:"slider__wrapper",role:"list",ref:d,onMouseDown:e=>{E({...N,clientX:e.clientX,scrollX:d.current?.scrollLeft??0}),g(!0)},onMouseMove:e=>{d.current&&b&&(Math.abs(N.clientX-e.clientX)>5&&v(!0),d.current.scrollLeft=N.scrollX+N.clientX-e.clientX)},onMouseUp:()=>{g(!1)},onClickCapture:e=>{p&&(e.stopPropagation(),e.preventDefault()),v(!1)},children:s.map(u,((e,r)=>t("div",{className:"slider__wrapper__slide",role:"listitem","data-slide-index":r,ref:e=>{e&&((e,t)=>{a.current[t]={element:e,visibility:i.NONE}})(e,r)},children:e},r)))}),t("button",{"aria-label":"Previous slide",type:"button",onClick:()=>T(l.PREV),ref:_,className:"slider__button slider__button--prev button button--ghost button--clean button--has-icon hidden",children:t("i",{className:"icon-chevron-left"})}),t("button",{"aria-label":"Next slide",type:"button",onClick:()=>T(l.NEXT),ref:X,className:"slider__button slider__button--next button button--ghost button--clean button--has-icon hidden",children:t("i",{className:"icon-chevron-right"})})]})};export{u as default};
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useRef, useState, useEffect, useCallback, Children } from 'react';
3
+
4
+ var Visbility;
5
+ (function (Visbility) {
6
+ Visbility[Visbility["FULL"] = 0] = "FULL";
7
+ Visbility[Visbility["PARTIAL"] = 1] = "PARTIAL";
8
+ Visbility[Visbility["NONE"] = 2] = "NONE";
9
+ })(Visbility || (Visbility = {}));
10
+ var NavigationDirection;
11
+ (function (NavigationDirection) {
12
+ NavigationDirection[NavigationDirection["PREV"] = 0] = "PREV";
13
+ NavigationDirection[NavigationDirection["NEXT"] = 1] = "NEXT";
14
+ })(NavigationDirection || (NavigationDirection = {}));
15
+ const Slider = ({ children }) => {
16
+ const slides = useRef([]);
17
+ const wrapper = useRef(null);
18
+ const visibleSlideIndices = useRef([]);
19
+ const partiallyVisibleSlideIndices = useRef([]);
20
+ const [isScrollable, setIsScrollable] = useState(false);
21
+ const [isDragging, setIsDragging] = useState(false);
22
+ const [isBlockingClicks, setIsBlockingClicks] = useState(false);
23
+ const [mousePosition, setMousePosition] = useState({
24
+ clientX: 0,
25
+ scrollX: 0,
26
+ });
27
+ const arrowPrevRef = useRef(null);
28
+ const arrowNextRef = useRef(null);
29
+ useEffect(() => {
30
+ const currentWrapper = wrapper.current;
31
+ if (!currentWrapper) {
32
+ return () => { };
33
+ }
34
+ const checkScrollable = () => setIsScrollable(currentWrapper.classList.toggle('is-scrollable', currentWrapper.scrollWidth > currentWrapper.clientWidth));
35
+ window?.addEventListener('resize', checkScrollable);
36
+ checkScrollable();
37
+ return () => {
38
+ window?.removeEventListener('resize', checkScrollable);
39
+ };
40
+ }, [wrapper]);
41
+ useEffect(() => {
42
+ wrapper.current?.classList.toggle('is-scrollable', isScrollable);
43
+ }, [isScrollable]);
44
+ useEffect(() => {
45
+ wrapper.current?.classList.toggle('is-dragging', isDragging);
46
+ const onDocumentMouseUp = (event) => {
47
+ event.stopPropagation();
48
+ event.preventDefault();
49
+ setIsBlockingClicks(false);
50
+ setIsDragging(false);
51
+ };
52
+ if (isDragging) {
53
+ document?.addEventListener('mouseup', onDocumentMouseUp);
54
+ }
55
+ return () => {
56
+ document?.removeEventListener('mouseup', onDocumentMouseUp);
57
+ };
58
+ }, [isDragging]);
59
+ const blockChildClickHandler = (event) => {
60
+ if (isBlockingClicks) {
61
+ event.stopPropagation();
62
+ event.preventDefault();
63
+ }
64
+ setIsBlockingClicks(false);
65
+ };
66
+ const mouseUpHandler = () => {
67
+ setIsDragging(false);
68
+ };
69
+ const mouseDownHandler = (event) => {
70
+ setMousePosition({
71
+ ...mousePosition,
72
+ clientX: event.clientX,
73
+ scrollX: wrapper.current?.scrollLeft ?? 0,
74
+ });
75
+ setIsDragging(true);
76
+ };
77
+ const mouseMoveHandler = (event) => {
78
+ if (!wrapper.current || !isDragging) {
79
+ return;
80
+ }
81
+ if (Math.abs(mousePosition.clientX - event.clientX) > 5) {
82
+ setIsBlockingClicks(true);
83
+ }
84
+ wrapper.current.scrollLeft = mousePosition.scrollX + mousePosition.clientX - event.clientX;
85
+ };
86
+ const addSlide = (node, index) => {
87
+ slides.current[index] = {
88
+ element: node,
89
+ visibility: Visbility.NONE,
90
+ };
91
+ };
92
+ const getFirstVisibleSlideIndex = () => visibleSlideIndices.current[0] ?? partiallyVisibleSlideIndices.current[0] ?? -1;
93
+ const getLastVisibleSlideIndex = () => visibleSlideIndices.current[visibleSlideIndices.current.length - 1]
94
+ ?? partiallyVisibleSlideIndices.current[partiallyVisibleSlideIndices.current.length - 1] ?? -1;
95
+ const setControlsVisibility = useCallback(() => {
96
+ const lastSlideFullyVisible = getLastVisibleSlideIndex() + 1 === slides.current.length;
97
+ const moreContentAvailable = isScrollable && lastSlideFullyVisible === false;
98
+ const previousContentAvailable = getFirstVisibleSlideIndex() > 0 && isScrollable;
99
+ if (arrowNextRef.current && arrowPrevRef.current) {
100
+ arrowNextRef.current.classList.toggle('hidden', moreContentAvailable === false);
101
+ arrowNextRef.current.ariaHidden = String(moreContentAvailable === false);
102
+ arrowPrevRef.current.classList.toggle('hidden', previousContentAvailable === false);
103
+ arrowPrevRef.current.ariaHidden = String(previousContentAvailable === false);
104
+ }
105
+ }, [isScrollable]);
106
+ const getVisibilityByIntersectionRatio = (intersectionRatio) => {
107
+ if (intersectionRatio >= 0.9) {
108
+ return Visbility.FULL;
109
+ }
110
+ if (intersectionRatio >= 0.5) {
111
+ return Visbility.PARTIAL;
112
+ }
113
+ return Visbility.NONE;
114
+ };
115
+ useEffect(() => {
116
+ if (!wrapper.current) {
117
+ return () => { };
118
+ }
119
+ setControlsVisibility();
120
+ const intersectionCallback = (entries) => {
121
+ entries.forEach((entry) => {
122
+ const target = entry.target;
123
+ const index = Number(target.dataset.slideIndex);
124
+ if (getVisibilityByIntersectionRatio(entry.intersectionRatio) === Visbility.FULL) {
125
+ visibleSlideIndices.current.push(index);
126
+ }
127
+ else {
128
+ visibleSlideIndices.current = visibleSlideIndices.current.filter((slideIndex) => slideIndex !== index);
129
+ }
130
+ if (getVisibilityByIntersectionRatio(entry.intersectionRatio) === Visbility.PARTIAL) {
131
+ partiallyVisibleSlideIndices.current.push(index);
132
+ }
133
+ else {
134
+ partiallyVisibleSlideIndices.current = partiallyVisibleSlideIndices.current.filter((slideIndex) => slideIndex !== index);
135
+ }
136
+ });
137
+ visibleSlideIndices.current = [...new Set(visibleSlideIndices.current)].sort((a, b) => a - b);
138
+ partiallyVisibleSlideIndices.current = [...new Set(partiallyVisibleSlideIndices.current)].sort((a, b) => a - b);
139
+ setControlsVisibility();
140
+ };
141
+ const intersectionObserver = new IntersectionObserver(intersectionCallback, {
142
+ root: wrapper.current,
143
+ threshold: [0, 0.5, 0.9],
144
+ });
145
+ slides.current.forEach(({ element }) => intersectionObserver.observe(element));
146
+ return () => intersectionObserver.disconnect();
147
+ }, [wrapper, setControlsVisibility]);
148
+ const navigate = (direction) => {
149
+ if (!wrapper.current) {
150
+ return;
151
+ }
152
+ const targetSlideIndex = direction === NavigationDirection.PREV ? getFirstVisibleSlideIndex() - 1 : getLastVisibleSlideIndex() + 1;
153
+ const targetSlide = slides.current[targetSlideIndex];
154
+ let scrollLeft = 0;
155
+ if (!targetSlide) {
156
+ return;
157
+ }
158
+ if (direction === NavigationDirection.PREV) {
159
+ scrollLeft = targetSlide.element.offsetLeft - wrapper.current.offsetLeft - wrapper.current.clientWidth + targetSlide.element.clientWidth;
160
+ }
161
+ else {
162
+ scrollLeft = targetSlide.element.offsetLeft - wrapper.current.offsetLeft;
163
+ }
164
+ wrapper.current.scrollTo({ behavior: 'smooth', left: scrollLeft, top: 0 });
165
+ };
166
+ return (jsxs("div", { className: "slider", children: [jsx("div", { className: "slider__wrapper", role: "list", ref: wrapper, onMouseDown: mouseDownHandler, onMouseMove: mouseMoveHandler, onMouseUp: mouseUpHandler, onClickCapture: blockChildClickHandler, children: Children.map(children, (child, index) => (jsx("div", { className: "slider__wrapper__slide", role: "listitem", "data-slide-index": index, ref: (node) => { if (node) {
167
+ addSlide(node, index);
168
+ } }, children: child }, index))) }), jsx("button", { "aria-label": "Previous slide", type: "button", onClick: () => navigate(NavigationDirection.PREV), ref: arrowPrevRef, className: "slider__button slider__button--prev button button--ghost button--clean button--has-icon hidden", children: jsx("i", { className: "icon-chevron-left" }) }), jsx("button", { "aria-label": "Next slide", type: "button", onClick: () => navigate(NavigationDirection.NEXT), ref: arrowNextRef, className: "slider__button slider__button--next button button--ghost button--clean button--has-icon hidden", children: jsx("i", { className: "icon-chevron-right" }) })] }));
169
+ };
170
+
171
+ export { Slider };
2
172
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/src/src/Slider.tsx"],"sourcesContent":[null],"names":["Visbility","NavigationDirection","Slider","children","slides","useRef","wrapper","visibleSlideIndices","partiallyVisibleSlideIndices","isScrollable","setIsScrollable","useState","isDragging","setIsDragging","isBlockingClicks","setIsBlockingClicks","mousePosition","setMousePosition","clientX","scrollX","arrowPrevRef","arrowNextRef","useEffect","currentWrapper","current","checkScrollable","classList","toggle","scrollWidth","clientWidth","window","addEventListener","removeEventListener","onDocumentMouseUp","event","stopPropagation","preventDefault","document","getFirstVisibleSlideIndex","getLastVisibleSlideIndex","length","setControlsVisibility","useCallback","lastSlideFullyVisible","moreContentAvailable","previousContentAvailable","ariaHidden","String","getVisibilityByIntersectionRatio","intersectionRatio","FULL","PARTIAL","NONE","intersectionObserver","IntersectionObserver","entries","forEach","entry","target","index","Number","dataset","slideIndex","push","filter","Set","sort","a","b","root","threshold","element","observe","disconnect","navigate","direction","targetSlideIndex","PREV","targetSlide","scrollLeft","offsetLeft","scrollTo","behavior","left","top","_jsxs","className","_jsx","role","ref","onMouseDown","onMouseMove","Math","abs","onMouseUp","onClickCapture","Children","map","child","node","visibility","addSlide","type","onClick","NEXT"],"mappings":"6IAKA,IAAKA,EAMAC,GANL,SAAKD,GACDA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,KAAA,GAAA,MACH,CAJD,CAAKA,IAAAA,EAIJ,CAAA,IAED,SAAKC,GACDA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,KAAA,GAAA,MACH,CAHD,CAAKA,IAAAA,EAGJ,CAAA,UAOYC,EAAsC,EAAGC,eAClD,MAAMC,EAASC,EAA+B,IACxCC,EAAUD,EAAuB,MACjCE,EAAsBF,EAAiB,IACvCG,EAA+BH,EAAiB,KAE/CI,EAAcC,GAAmBC,GAAkB,IACnDC,EAAYC,GAAiBF,GAAkB,IAC/CG,EAAkBC,GAAuBJ,GAAkB,IAC3DK,EAAeC,GAAoBN,EAA+C,CACrFO,QAAS,EACTC,QAAS,IAGPC,EAAef,EAA0B,MACzCgB,EAAehB,EAA0B,MAE/CiB,GAAU,KACN,MAAMC,EAAiBjB,EAAQkB,QAE/B,IAAKD,EACD,MAAO,OAGX,MAAME,EAAkB,IAAMf,EAAgBa,EAAeG,UAAUC,OAAO,gBAAiBJ,EAAeK,YAAcL,EAAeM,cAM3I,OAJAC,QAAQC,iBAAiB,SAAUN,GAEnCA,IAEO,KACHK,QAAQE,oBAAoB,SAAUP,EAAgB,CACzD,GACF,CAACnB,IAEJgB,GAAU,KACNhB,EAAQkB,SAASE,UAAUC,OAAO,gBAAiBlB,EAAa,GACjE,CAACA,IAEJa,GAAU,KACNhB,EAAQkB,SAASE,UAAUC,OAAO,cAAef,GAEjD,MAAMqB,EAAqBC,IACvBA,EAAMC,kBACND,EAAME,iBAENrB,GAAoB,GACpBF,GAAc,EAAM,EAOxB,OAJID,GACAyB,UAAUN,iBAAiB,UAAWE,GAGnC,KACHI,UAAUL,oBAAoB,UAAWC,EAAkB,CAC9D,GACF,CAACrB,IAEJ,MA0CM0B,EAA4B,IAAc/B,EAAoBiB,QAAQ,IAAMhB,EAA6BgB,QAAQ,KAAO,EAExHe,EAA2B,IAAchC,EAAoBiB,QAAQjB,EAAoBiB,QAAQgB,OAAS,IACzGhC,EAA6BgB,QAAQhB,EAA6BgB,QAAQgB,OAAS,KAAO,EAE3FC,EAAwBC,GAAY,KACtC,MAAMC,EAAwBJ,IAA6B,IAAMnC,EAAOoB,QAAQgB,OAC1EI,EAAuBnC,IAA0C,IAA1BkC,EACvCE,EAA2BP,IAA8B,GAAK7B,EAEhEY,EAAaG,SAAWJ,EAAaI,UACrCH,EAAaG,QAAQE,UAAUC,OAAO,UAAmC,IAAzBiB,GAChDvB,EAAaG,QAAQsB,WAAaC,QAAgC,IAAzBH,GAEzCxB,EAAaI,QAAQE,UAAUC,OAAO,UAAuC,IAA7BkB,GAChDzB,EAAaI,QAAQsB,WAAaC,QAAoC,IAA7BF,GAC5C,GACF,CAACpC,IAEEuC,EAAoCC,GAClCA,GAAqB,GACdjD,EAAUkD,KAGjBD,GAAqB,GACdjD,EAAUmD,QAGdnD,EAAUoD,KAGrB9B,GAAU,KACN,IAAKhB,EAAQkB,QACT,MAAO,OAGXiB,IAEA,MAyBMY,EAAuB,IAAIC,sBAzBHC,IAC1BA,EAAQC,SAASC,IACb,MAAMC,EAASD,EAAMC,OACfC,EAAQC,OAAOF,EAAOG,QAAQC,YAEhCd,EAAiCS,EAAMR,qBAAuBjD,EAAUkD,KACxE3C,EAAoBiB,QAAQuC,KAAKJ,GAEjCpD,EAAoBiB,QAAUjB,EAAoBiB,QAAQwC,QAAQF,GAAeA,IAAeH,IAGhGX,EAAiCS,EAAMR,qBAAuBjD,EAAUmD,QACxE3C,EAA6BgB,QAAQuC,KAAKJ,GAE1CnD,EAA6BgB,QAAUhB,EAA6BgB,QAAQwC,QAAQF,GAAeA,IAAeH,GACrH,IAILpD,EAAoBiB,QAAU,IAAI,IAAIyC,IAAI1D,EAAoBiB,UAAU0C,MAAK,CAACC,EAAGC,IAAMD,EAAIC,IAC3F5D,EAA6BgB,QAAU,IAAI,IAAIyC,IAAIzD,EAA6BgB,UAAU0C,MAAK,CAACC,EAAGC,IAAMD,EAAIC,IAE7G3B,GAAuB,GAGiD,CACxE4B,KAAM/D,EAAQkB,QACd8C,UAAW,CAAC,EAAG,GAAK,MAKxB,OAFAlE,EAAOoB,QAAQgC,SAAQ,EAAGe,aAAclB,EAAqBmB,QAAQD,KAE9D,IAAMlB,EAAqBoB,YAAY,GAC/C,CAACnE,EAASmC,IAEb,MAAMiC,EAAYC,IACd,IAAKrE,EAAQkB,QACT,OAGJ,MAAMoD,EAAmBD,IAAc1E,EAAoB4E,KAAOvC,IAA8B,EAAIC,IAA6B,EAE3HuC,EAAc1E,EAAOoB,QAAQoD,GACnC,IAAIG,EAAa,EAEZD,IAKDC,EADAJ,IAAc1E,EAAoB4E,KACrBC,EAAYP,QAAQS,WAAa1E,EAAQkB,QAAQwD,WAAa1E,EAAQkB,QAAQK,YAAciD,EAAYP,QAAQ1C,YAEhHiD,EAAYP,QAAQS,WAAa1E,EAAQkB,QAAQwD,WAGlE1E,EAAQkB,QAAQyD,SAAS,CAAEC,SAAU,SAAUC,KAAMJ,EAAYK,IAAK,IAAI,EAG9E,OACIC,EAAA,MAAA,CAAKC,UAAU,SACXnF,SAAA,CAAAoF,EAAA,MAAA,CAAKD,UAAU,kBAAkBE,KAAK,OAAOC,IAAKnF,EAC9CoF,YAhIcxD,IACtBjB,EAAiB,IACVD,EACHE,QAASgB,EAAMhB,QACfC,QAASb,EAAQkB,SAASuD,YAAc,IAG5ClE,GAAc,EAAK,EA0HX8E,YAvHczD,IACjB5B,EAAQkB,SAAYZ,IAIrBgF,KAAKC,IAAI7E,EAAcE,QAAUgB,EAAMhB,SAAW,GAClDH,GAAoB,GAGxBT,EAAQkB,QAAQuD,WAAa/D,EAAcG,QAAUH,EAAcE,QAAUgB,EAAMhB,QAAO,EA+GlF4E,UAtIW,KACnBjF,GAAc,EAAM,EAsIZkF,eAhJoB7D,IACxBpB,IACAoB,EAAMC,kBACND,EAAME,kBAGVrB,GAAoB,EAAM,EA4IjBZ,SAAA6F,EAASC,IAAI9F,GAAU,CAAC+F,EAAOvC,IAC5B4B,SAAKD,UAAU,yBAAyBE,KAAK,WAAU,mBAA+B7B,EAAO8B,IAAMU,IAAeA,GAhHjH,EAACA,EAAsBxC,KACpCvD,EAAOoB,QAAQmC,GAAS,CACpBY,QAAS4B,EACTC,WAAYpG,EAAUoD,KACzB,EA4GqIiD,CAASF,EAAMxC,EAAS,EAC7IxD,SAAA+F,GADwDvC,OAKrE4B,yBACe,iBACXe,KAAK,SACLC,QAAS,IAAM7B,EAASzE,EAAoB4E,MAC5CY,IAAKrE,EACLkE,UAAU,0GAEVC,EAAG,IAAA,CAAAD,UAAU,wBAEjBC,EACe,SAAA,CAAA,aAAA,aACXe,KAAK,SACLC,QAAS,IAAM7B,EAASzE,EAAoBuG,MAC5Cf,IAAKpE,EACLiE,UAAU,iGAEVnF,SAAAoF,EAAA,IAAA,CAAGD,UAAU,2BAGvB"}
1
+ {"version":3,"file":"index.js","sources":["../../src/Slider.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "name": "@yoursurprise/slider",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Basic React slider using modern Javascript and CSS",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
7
+ "type": "module",
8
+ "files": [
9
+ "src/*",
10
+ "dist/*"
11
+ ],
7
12
  "peerDependencies": {
8
13
  "react": "^18.2.0"
9
14
  },
@@ -59,7 +64,8 @@
59
64
  "slider",
60
65
  "scroll",
61
66
  "snap",
62
- "touch"
67
+ "touch",
68
+ "react"
63
69
  ],
64
70
  "author": "YourSurprise",
65
71
  "license": "ISC",
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { Slider } from './Slider';
2
2
 
3
- export default Slider;
3
+ export { Slider };
package/.eslintignore DELETED
@@ -1 +0,0 @@
1
- .eslintrc.js
package/.eslintrc.js DELETED
@@ -1,45 +0,0 @@
1
- module.exports = {
2
- extends: [
3
- 'eslint:recommended',
4
- 'airbnb-typescript',
5
- 'airbnb/hooks',
6
- 'plugin:import/recommended',
7
- ],
8
- rules: {
9
- 'react/jsx-indent': ['error', 4],
10
- 'react/jsx-indent-props': ['error', 4],
11
- 'react/jsx-props-no-spreading': ['error', { custom: 'ignore' }],
12
- 'react/prop-types': 'off',
13
- 'react/require-default-props': 'off',
14
- 'indent': ['error', 4, {SwitchCase: 1}],
15
- '@typescript-eslint/indent': ['error', 4],
16
- 'import/no-extraneous-dependencies': [
17
- 'error',
18
- {
19
- devDependencies: [
20
- '**/*.test.*',
21
- '**/rollup.config.js*',
22
- '**/babel.config.js*',
23
- '**/jest.config.js*',
24
- '**/[mM]ock[s?]/**'
25
- ]
26
- }
27
- ],
28
-
29
- },
30
- plugins: ['react', "testing-library"],
31
- env: {
32
- browser: true,
33
- es6: true,
34
- node: true,
35
- },
36
- parser: '@typescript-eslint/parser',
37
- parserOptions: {
38
- project: ['./tsconfig.json'],
39
- ecmaFeatures: {
40
- jsx: true,
41
- },
42
- ecmaVersion: 'latest',
43
- sourceType: 'module',
44
- },
45
- };
@@ -1,18 +0,0 @@
1
- name: Lint
2
- on:
3
- push:
4
- branches:
5
- - main
6
- pull_request:
7
- jobs:
8
- linting:
9
- runs-on: ubuntu-latest
10
- steps:
11
- - name: Check out repository code
12
- uses: actions/checkout@v3
13
- - name: Install
14
- run: npm ci
15
- - name: Lint
16
- run: npm run lint
17
- - name: Test
18
- run: npm run test -- --coverage
@@ -1,23 +0,0 @@
1
- name: Publish
2
- on:
3
- release:
4
- types: [created]
5
- jobs:
6
- publish:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - name: Check out repository code
10
- uses: actions/checkout@v3
11
- - name: Setup node
12
- uses: actions/setup-node@v3
13
- with:
14
- node-version: '16.x'
15
- registry-url: 'https://registry.npmjs.org'
16
- - name: Install
17
- run: npm ci
18
- - name: Build
19
- run: npm run build
20
- - name: Publish
21
- run: npm publish
22
- env:
23
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/babel.config.js DELETED
@@ -1,7 +0,0 @@
1
- module.exports = {
2
- presets: [
3
- '@babel/preset-env',
4
- ['@babel/preset-react', { runtime: 'automatic' }],
5
- '@babel/preset-typescript',
6
- ],
7
- };
@@ -1,3 +0,0 @@
1
- import type { Config } from '@jest/types';
2
- declare const config: Partial<Config.ConfigGlobals>;
3
- export default config;
@@ -1,3 +0,0 @@
1
- import type { Config } from '@jest/types';
2
- declare const config: Partial<Config.ConfigGlobals>;
3
- export default config;
package/jest.config.ts DELETED
@@ -1,54 +0,0 @@
1
- // For a detailed explanation regarding each configuration property, visit:
2
- // https://jestjs.io/docs/en/configuration.html
3
-
4
- import type { Config } from '@jest/types';
5
-
6
- const config: Partial<Config.ConfigGlobals> = {
7
- // Indicates whether the coverage information should be collected while executing the test
8
- collectCoverage: false,
9
-
10
- testEnvironment: 'jsdom',
11
-
12
- // An array of glob patterns indicating a set of files for which coverage information should be collected
13
- collectCoverageFrom: [
14
- 'src/**/*.{js,ts,tsx}',
15
- ],
16
-
17
- // The directory where Jest should output its coverage files
18
- coverageDirectory: 'coverage',
19
-
20
- // A list of reporter names that Jest uses when writing coverage reports
21
- coverageReporters: [
22
- 'cobertura',
23
- 'lcov',
24
- 'text',
25
- ],
26
-
27
- coverageThreshold: {
28
- global: {
29
- branches: 80,
30
- functions: 90,
31
- lines: 90,
32
- statements: 90,
33
- },
34
- },
35
-
36
- // An array of directory names to be searched recursively up from the requiring module's location
37
- moduleDirectories: [
38
- 'src',
39
- 'node_modules',
40
- ],
41
-
42
- // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
43
- moduleNameMapper: {
44
- '^.+\\.(css|scss|less|scss)$': '<rootDir>src/__mocks__/fileMock.js',
45
- '^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>src/__mocks__/fileMock.js',
46
- } as unknown as Config.ProjectConfig['moduleNameMapper'],
47
-
48
- // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
49
- testPathIgnorePatterns: [
50
- '/node_modules/',
51
- ],
52
- };
53
-
54
- export default config;
package/rollup.config.js DELETED
@@ -1,38 +0,0 @@
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 postcss from 'rollup-plugin-postcss';
7
-
8
- const packageJson = require('./package.json');
9
-
10
- export default {
11
- input: 'src/index.ts',
12
- output: [
13
- {
14
- file: packageJson.main,
15
- format: 'cjs',
16
- sourcemap: true,
17
- },
18
- {
19
- file: packageJson.module,
20
- format: 'esm',
21
- sourcemap: true,
22
- },
23
- ],
24
- plugins: [
25
- external(),
26
- resolve(),
27
- commonjs(),
28
- typescript({
29
- tsconfig: './tsconfig.json' }),
30
- postcss({
31
- extract: 'index.css',
32
- minimize: true,
33
- sourceMap: true,
34
- }),
35
- terser(),
36
- ],
37
- };
38
-
package/tsconfig.json DELETED
@@ -1,17 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "sourceRoot": "./src",
4
- "outDir": "dist",
5
- "target": "ESNext",
6
- "jsx": "react-jsx",
7
- "moduleResolution": "node",
8
- "module": "ESNext",
9
- "noImplicitAny": true,
10
- "removeComments": true,
11
- "preserveConstEnums": true,
12
- "sourceMap": true,
13
- "allowSyntheticDefaultImports": true,
14
- "emitDeclarationOnly": true,
15
- "declaration": true
16
- }
17
- }