@yoursurprise/slider 0.0.3 → 0.0.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoursurprise/slider",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
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",
@@ -1,4 +0,0 @@
1
- import type React from 'react';
2
- import type { PropsWithChildren } from 'react';
3
- import './Slider.scss';
4
- export declare const Slider: React.FC<PropsWithChildren>;
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';
@@ -1,2 +0,0 @@
1
- .slider{position:relative}.slider__button{bottom:0;display:none;height:48px;margin:auto 0;position:absolute;top:0;width:48px}@media (hover:hover){.slider__button{display:flex}}.slider__button--next{right:-8px}@media screen and (min-width:768px){.slider__button--next{right:0}}.slider__button--prev{left:-8px}@media screen and (min-width:768px){.slider__button--prev{left:0}}.slider__wrapper{-ms-overflow-style:none;display:flex;flex-direction:row;margin:16px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:none}.slider__wrapper::-webkit-scrollbar{display:none}@media screen and (min-width:768px){.slider__wrapper{margin:8px}}@media (hover:hover){.slider__wrapper{scroll-snap-type:none}}.slider__wrapper.is-scrollable{cursor:move}.slider__wrapper.is-dragging{cursor:grabbing;user-select:none}.slider__wrapper:not(.is-dragging){scroll-behavior:smooth}.slider__wrapper__slide{margin-right:8px;scroll-snap-align:start}@media screen and (min-width:768px){.slider__wrapper__slide{margin-left:0;margin-right:16px}}.slider__wrapper__slide:last-child{margin-right:0}
2
- /*# sourceMappingURL=index.css.map */
@@ -1 +0,0 @@
1
- {"version":3,"sources":["Slider.scss"],"names":[],"mappings":"AAAA,QACE,iBACF,CACA,gBAEE,QAAS,CAKT,YAAa,CAHb,WAAY,CADZ,aAAc,CAGd,iBAAkB,CALlB,KAAM,CAIN,UAGF,CACA,qBACE,gBACE,YACF,CACF,CACA,sBACE,UACF,CACA,oCACE,sBACE,OACF,CACF,CACA,sBACE,SACF,CACA,oCACE,sBACE,MACF,CACF,CACA,iBAEE,uBAAwB,CAExB,YAAa,CACb,kBAAmB,CAEnB,WAAY,CADZ,eAAgB,CALhB,6BAA8B,CAO9B,4BAA6B,CAL7B,oBAMF,CACA,oCACE,YACF,CACA,oCACE,iBACE,UACF,CACF,CACA,qBACE,iBACE,qBACF,CACF,CACA,+BACE,WACF,CACA,6BACE,eAAgB,CAChB,gBACF,CACA,mCACE,sBACF,CACA,wBAEE,gBAAiB,CADjB,uBAEF,CACA,oCACE,wBACE,aAAc,CACd,iBACF,CACF,CACA,mCACE,cACF","file":"index.css","sourcesContent":[".slider {\n position: relative;\n}\n.slider__button {\n top: 0;\n bottom: 0;\n margin: auto 0;\n height: 48px;\n width: 48px;\n position: absolute;\n display: none;\n}\n@media (hover: hover) {\n .slider__button {\n display: flex;\n }\n}\n.slider__button--next {\n right: -8px;\n}\n@media screen and (min-width: 768px) {\n .slider__button--next {\n right: 0;\n }\n}\n.slider__button--prev {\n left: -8px;\n}\n@media screen and (min-width: 768px) {\n .slider__button--prev {\n left: 0;\n }\n}\n.slider__wrapper {\n overscroll-behavior-x: contain;\n -ms-overflow-style: none;\n scrollbar-width: none;\n display: flex;\n flex-direction: row;\n overflow-x: auto;\n margin: 16px;\n scroll-snap-type: x proximity;\n}\n.slider__wrapper::-webkit-scrollbar {\n display: none;\n}\n@media screen and (min-width: 768px) {\n .slider__wrapper {\n margin: 8px;\n }\n}\n@media (hover: hover) {\n .slider__wrapper {\n scroll-snap-type: initial;\n }\n}\n.slider__wrapper.is-scrollable {\n cursor: move;\n}\n.slider__wrapper.is-dragging {\n cursor: grabbing;\n user-select: none;\n}\n.slider__wrapper:not(.is-dragging) {\n scroll-behavior: smooth;\n}\n.slider__wrapper__slide {\n scroll-snap-align: start;\n margin-right: 8px;\n}\n@media screen and (min-width: 768px) {\n .slider__wrapper__slide {\n margin-left: 0;\n margin-right: 16px;\n }\n}\n.slider__wrapper__slide:last-child {\n margin-right: 0;\n}"]}
@@ -1,2 +0,0 @@
1
- import { Slider } from './Slider';
2
- export { Slider };
package/dist/cjs/index.js DELETED
@@ -1,174 +0,0 @@
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;
174
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/Slider.tsx"],"sourcesContent":[null],"names":["useRef","useState","useEffect","useCallback","_jsxs","_jsx","Children"],"mappings":";;;;;AAKA,IAAK,SAIJ,CAAA;AAJD,CAAA,UAAK,SAAS,EAAA;AACV,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACP,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACR,CAAC,EAJI,SAAS,KAAT,SAAS,GAIb,EAAA,CAAA,CAAA,CAAA;AAED,IAAK,mBAGJ,CAAA;AAHD,CAAA,UAAK,mBAAmB,EAAA;AACpB,IAAA,mBAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,mBAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACR,CAAC,EAHI,mBAAmB,KAAnB,mBAAmB,GAGvB,EAAA,CAAA,CAAA,CAAA;MAOY,MAAM,GAAgC,CAAC,EAAE,QAAQ,EAAE,KAAI;AAChE,IAAA,MAAM,MAAM,GAAGA,YAAM,CAAyB,EAAE,CAAC,CAAC;AAClD,IAAA,MAAM,OAAO,GAAGA,YAAM,CAAiB,IAAI,CAAC,CAAC;AAC7C,IAAA,MAAM,mBAAmB,GAAGA,YAAM,CAAW,EAAE,CAAC,CAAC;AACjD,IAAA,MAAM,4BAA4B,GAAGA,YAAM,CAAW,EAAE,CAAC,CAAC;IAE1D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGC,cAAQ,CAAU,KAAK,CAAC,CAAC;IACjE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAU,KAAK,CAAC,CAAC;IAC7D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAGA,cAAQ,CAAU,KAAK,CAAC,CAAC;AACzE,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CAAuC;AACrF,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,OAAO,EAAE,CAAC;AACb,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,YAAY,GAAGD,YAAM,CAAoB,IAAI,CAAC,CAAC;AACrD,IAAA,MAAM,YAAY,GAAGA,YAAM,CAAoB,IAAI,CAAC,CAAC;IAErDE,eAAS,CAAC,MAAK;AACX,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,MAAO,GAAC,CAAC;AACnB,SAAA;QAED,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;AAEzJ,QAAA,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAEpD,QAAA,eAAe,EAAE,CAAC;AAElB,QAAA,OAAO,MAAK;AACR,YAAA,MAAM,EAAE,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC3D,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEdA,eAAS,CAAC,MAAK;QACX,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AACrE,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnBA,eAAS,CAAC,MAAK;QACX,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAE7D,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAiB,KAAI;YAC5C,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,aAAa,CAAC,KAAK,CAAC,CAAC;AACzB,SAAC,CAAC;AAEF,QAAA,IAAI,UAAU,EAAE;AACZ,YAAA,QAAQ,EAAE,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC5D,SAAA;AAED,QAAA,OAAO,MAAK;AACR,YAAA,QAAQ,EAAE,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAChE,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAEjB,IAAA,MAAM,sBAAsB,GAAG,CAAC,KAAsC,KAAI;AACtE,QAAA,IAAI,gBAAgB,EAAE;YAClB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1B,SAAA;QAED,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC/B,KAAC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAK;QACxB,aAAa,CAAC,KAAK,CAAC,CAAC;AACzB,KAAC,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAG,CAAC,KAAsC,KAAI;AAChE,QAAA,gBAAgB,CAAC;AACb,YAAA,GAAG,aAAa;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC;AAC5C,SAAA,CAAC,CAAC;QAEH,aAAa,CAAC,IAAI,CAAC,CAAC;AACxB,KAAC,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAG,CAAC,KAAsC,KAAI;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE;YACjC,OAAO;AACV,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrD,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;AAED,QAAA,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/F,KAAC,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAoB,EAAE,KAAa,KAAI;AACrD,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;AACpB,YAAA,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,SAAS,CAAC,IAAI;SAC7B,CAAC;AACN,KAAC,CAAC;IAEF,MAAM,yBAAyB,GAAG,MAAc,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEhI,IAAA,MAAM,wBAAwB,GAAG,MAAc,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3G,WAAA,4BAA4B,CAAC,OAAO,CAAC,4BAA4B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnG,IAAA,MAAM,qBAAqB,GAAGC,iBAAW,CAAC,MAAK;AAC3C,QAAA,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACvF,QAAA,MAAM,oBAAoB,GAAG,YAAY,IAAI,qBAAqB,KAAK,KAAK,CAAC;QAC7E,MAAM,wBAAwB,GAAG,yBAAyB,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC;AAEjF,QAAA,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE;AAC9C,YAAA,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,KAAK,KAAK,CAAC,CAAC;YAChF,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,oBAAoB,KAAK,KAAK,CAAC,CAAC;AAEzE,YAAA,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,wBAAwB,KAAK,KAAK,CAAC,CAAC;YACpF,YAAY,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,wBAAwB,KAAK,KAAK,CAAC,CAAC;AAChF,SAAA;AACL,KAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnB,IAAA,MAAM,gCAAgC,GAAG,CAAC,iBAAyB,KAAI;QACnE,IAAI,iBAAiB,IAAI,GAAG,EAAE;YAC1B,OAAO,SAAS,CAAC,IAAI,CAAC;AACzB,SAAA;QAED,IAAI,iBAAiB,IAAI,GAAG,EAAE;YAC1B,OAAO,SAAS,CAAC,OAAO,CAAC;AAC5B,SAAA;QAED,OAAO,SAAS,CAAC,IAAI,CAAC;AAC1B,KAAC,CAAC;IAEFD,eAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAClB,YAAA,OAAO,MAAO,GAAC,CAAC;AACnB,SAAA;AAED,QAAA,qBAAqB,EAAE,CAAC;AAExB,QAAA,MAAM,oBAAoB,GAAG,CAAC,OAAoC,KAAI;AAClE,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAgC,KAAI;AACjD,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAwB,CAAC;gBAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAEhD,IAAI,gCAAgC,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,SAAS,CAAC,IAAI,EAAE;AAC9E,oBAAA,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,iBAAA;AAAM,qBAAA;AACH,oBAAA,mBAAmB,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC;AAC1G,iBAAA;gBAED,IAAI,gCAAgC,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,SAAS,CAAC,OAAO,EAAE;AACjF,oBAAA,4BAA4B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,iBAAA;AAAM,qBAAA;AACH,oBAAA,4BAA4B,CAAC,OAAO,GAAG,4BAA4B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC;AAC5H,iBAAA;AACL,aAAC,CAAC,CAAC;YAGH,mBAAmB,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9F,4BAA4B,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhH,YAAA,qBAAqB,EAAE,CAAC;AAC5B,SAAC,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,oBAAoB,EAAE;YACxE,IAAI,EAAE,OAAO,CAAC,OAAO;AACrB,YAAA,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAC3B,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/E,QAAA,OAAO,MAAM,oBAAoB,CAAC,UAAU,EAAE,CAAC;AACnD,KAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAErC,IAAA,MAAM,QAAQ,GAAG,CAAC,SAA8B,KAAI;AAChD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAClB,OAAO;AACV,SAAA;QAED,MAAM,gBAAgB,GAAG,SAAS,KAAK,mBAAmB,CAAC,IAAI,GAAG,yBAAyB,EAAE,GAAG,CAAC,GAAG,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAEnI,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,CAAC,WAAW,EAAE;YACd,OAAO;AACV,SAAA;AAED,QAAA,IAAI,SAAS,KAAK,mBAAmB,CAAC,IAAI,EAAE;YACxC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;AAC5I,SAAA;AAAM,aAAA;AACH,YAAA,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;AAC5E,SAAA;AAED,QAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/E,KAAC,CAAC;AAEF,IAAA,QACIE,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,EACnB,QAAA,EAAA,CAAAC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAC,IAAI,EAAC,MAAM,EAAC,GAAG,EAAE,OAAO,EACrD,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,cAAc,EACzB,cAAc,EAAE,sBAAsB,EAErC,QAAA,EAAAC,cAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAa,MACzCD,wBAAK,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAC,UAAU,EAAA,kBAAA,EAA+B,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,KAAO,EAAA,IAAI,IAAI,EAAE;AAAE,wBAAA,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAAE,qBAAA,EAAE,EAC/I,QAAA,EAAA,KAAK,EADmD,EAAA,KAAK,CAE5D,CACT,CAAC,EACA,CAAA,EACNA,yCACe,gBAAgB,EAC3B,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,EACjD,GAAG,EAAE,YAAY,EACjB,SAAS,EAAC,gGAAgG,YAE1GA,cAAG,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,mBAAmB,GAAE,EAC7B,CAAA,EACTA,cACe,CAAA,QAAA,EAAA,EAAA,YAAA,EAAA,YAAY,EACvB,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,EACjD,GAAG,EAAE,YAAY,EACjB,SAAS,EAAC,gGAAgG,EAE1G,QAAA,EAAAA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,GAAE,EAC9B,CAAA,CAAA,EAAA,CACP,EACR;AACN;;;;"}