From 06a93022784d6c133694cc59a5166f6f086d6bcd Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 2 Jul 2021 00:21:50 +0300 Subject: [PATCH 01/31] #31 : Add ProgressManager --- src/utils/ProgressManager.js | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/utils/ProgressManager.js diff --git a/src/utils/ProgressManager.js b/src/utils/ProgressManager.js new file mode 100644 index 0000000..260252d --- /dev/null +++ b/src/utils/ProgressManager.js @@ -0,0 +1,44 @@ +const PROGRESS_STEPS_COUNT = 100 + +export class ProgressManager { + #autoplayDuration + #onValueChange + + #interval + #paused = false + + constructor({ + autoplayDuration, + onValueChange, + }) { + this.#autoplayDuration = autoplayDuration + this.#onValueChange = onValueChange + } + + start() { + let value = 0 + let progress = 0 + const stepMs = this.#autoplayDuration / PROGRESS_STEPS_COUNT + + this.#interval = setInterval(() => { + if (this.#paused) { + return + } + progress += stepMs + value = progress / this.#autoplayDuration + this.#onValueChange(value) + }, stepMs) + } + + pause() { + this.#paused = true + } + + resume() { + this.#paused = false + } + + reset() { + clearInterval(this.#interval) + } +} From 9d00b1bc6ca9e11b6c9ed8a370f2a1ec8bbb7cbe Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 2 Jul 2021 00:24:04 +0300 Subject: [PATCH 02/31] #31 : Add ProgressManager to carousel component --- src/components/Carousel/Carousel.svelte | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index 7189513..36a3656 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -12,6 +12,7 @@ } from '../../utils/event' import { getAdjacentIndexes } from '../../utils/page' import { get } from '../../utils/object' + import { ProgressManager } from '../../utils/ProgressManager.js' const dispatch = createEventDispatcher() @@ -107,12 +108,22 @@ let pagesElement let focused = false + let progressValue + const progressManager = new ProgressManager({ + autoplayDuration, + onValueChange: (value) => { + progressValue = value + } + }) + let autoplayInterval = null $: { if (pauseOnFocus) { if (focused) { + progressManager.pause() clearAutoplay() } else { + progressManager.resume() applyAutoplay() } } @@ -156,11 +167,17 @@ } let cleanupFns = [] + onMount(() => { (async () => { await tick() cleanupFns.push(store.subscribe(value => { currentPageIndex = value.currentPageIndex + + progressManager.reset() // clear interval out of condition in case autoplay was changed reactively + if (autoplay) { + progressManager.start() + } })) if (pagesElement && pageWindowElement) { // load first and last child to clone them From 53a6a94f50339f58da0e2bd41991f22178ce2802 Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 2 Jul 2021 00:24:27 +0300 Subject: [PATCH 03/31] #31 : Add Progress component --- src/components/Progress/Progress.svelte | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/components/Progress/Progress.svelte diff --git a/src/components/Progress/Progress.svelte b/src/components/Progress/Progress.svelte new file mode 100644 index 0000000..bdc1caf --- /dev/null +++ b/src/components/Progress/Progress.svelte @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file From 9d4c624f6eacd36a28d77ca3f638a5b00a1df21a Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 2 Jul 2021 00:24:59 +0300 Subject: [PATCH 04/31] #31 : Add Progress to carousel --- src/components/Carousel/Carousel.svelte | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index 36a3656..cf0d74d 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -3,6 +3,7 @@ import { createStore } from '../../store' import Dots from '../Dots/Dots.svelte' import Arrow from '../Arrow/Arrow.svelte' + import Progress from '../Progress/Progress.svelte' import { NEXT, PREV } from '../../direction' import { swipeable } from '../../actions/swipeable' import { focusable } from '../../actions/focusable' @@ -332,6 +333,7 @@ > {/if} + \ No newline at end of file diff --git a/src/components/Progress/Progress.svelte b/src/components/Progress/Progress.svelte index bdc1caf..ce9fcf2 100644 --- a/src/components/Progress/Progress.svelte +++ b/src/components/Progress/Progress.svelte @@ -12,21 +12,14 @@ $: width = Math.min(value * MAX_PERCENT, MAX_PERCENT) - + \ No newline at end of file + From a9515edcfd6d72912edebba19d32ca023bd864b6 Mon Sep 17 00:00:00 2001 From: Vadim Date: Sat, 3 Jul 2021 00:34:25 +0300 Subject: [PATCH 15/31] #31 : Fix non infinite case --- src/components/Carousel/Carousel.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Carousel/Carousel.svelte b/src/components/Carousel/Carousel.svelte index e275205..21f7193 100644 --- a/src/components/Carousel/Carousel.svelte +++ b/src/components/Carousel/Carousel.svelte @@ -174,7 +174,10 @@ } function applyAutoplay() { - console.log('autoplay', autoplay) + if (!infinite && currentPageIndex === pagesCount - 1) { + progressManager.reset() + return + } if (autoplay) { autoplayDirectionFnDescription[autoplayDirection]() } From 17e2e6009881d447241921dcc4b576d452a0e39c Mon Sep 17 00:00:00 2001 From: Vadim Date: Sat, 3 Jul 2021 00:59:25 +0300 Subject: [PATCH 16/31] #31 : Update colors, set reversed progress indicator --- src/components/Arrow/Arrow.svelte | 16 +++++++++------- src/components/Carousel/Carousel.svelte | 10 +++++++--- src/components/Dots/Dots.svelte | 6 +++--- src/components/Progress/Progress.svelte | 9 ++++++--- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/components/Arrow/Arrow.svelte b/src/components/Arrow/Arrow.svelte index 895dd06..d5e244e 100644 --- a/src/components/Arrow/Arrow.svelte +++ b/src/components/Arrow/Arrow.svelte @@ -26,13 +26,15 @@ From a6a73d54bbc7719cf04dec2d8e8e6c4089f5d996 Mon Sep 17 00:00:00 2001 From: Vadim Date: Sat, 3 Jul 2021 13:59:43 +0300 Subject: [PATCH 17/31] #31 : Fix storybook autoplayDirection --- src/components/Carousel/stories/CarouselView.svelte | 5 ++--- .../Carousel/stories/CarouselViewCustomArrows.svelte | 5 ++--- .../Carousel/stories/CarouselViewCustomDots.svelte | 5 ++--- src/utils/ProgressManager.js | 1 - 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/components/Carousel/stories/CarouselView.svelte b/src/components/Carousel/stories/CarouselView.svelte index 4782fb7..e83d470 100644 --- a/src/components/Carousel/stories/CarouselView.svelte +++ b/src/components/Carousel/stories/CarouselView.svelte @@ -1,11 +1,10 @@
Date: Sat, 3 Jul 2021 14:03:25 +0300 Subject: [PATCH 20/31] #31 : Add progress storybook --- .../Progress/stories/Progress.stories.js | 13 +++++++++++ .../Progress/stories/ProgressView.svelte | 23 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/components/Progress/stories/Progress.stories.js create mode 100644 src/components/Progress/stories/ProgressView.svelte diff --git a/src/components/Progress/stories/Progress.stories.js b/src/components/Progress/stories/Progress.stories.js new file mode 100644 index 0000000..be1d74d --- /dev/null +++ b/src/components/Progress/stories/Progress.stories.js @@ -0,0 +1,13 @@ +import ProgressView from './ProgressView.svelte'; + +export default { + title: 'Default Components/Progress', + component: ProgressView +}; + +const Template = ({ ...args }) => ({ + Component: ProgressView, + props: args +}); + +export const Primary = Template.bind({}); diff --git a/src/components/Progress/stories/ProgressView.svelte b/src/components/Progress/stories/ProgressView.svelte new file mode 100644 index 0000000..25f2d86 --- /dev/null +++ b/src/components/Progress/stories/ProgressView.svelte @@ -0,0 +1,23 @@ + + +
+ + +
+ + From 1cca2162ac78f166889e8b0d7649c19539969b7c Mon Sep 17 00:00:00 2001 From: Vadim Date: Sat, 3 Jul 2021 22:27:42 +0300 Subject: [PATCH 21/31] #31 : Move shared css vars to parent component --- src/components/Arrow/Arrow.svelte | 2 -- src/components/Carousel/Carousel.svelte | 6 +++++- src/components/Progress/Progress.svelte | 3 --- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/Arrow/Arrow.svelte b/src/components/Arrow/Arrow.svelte index d5e244e..b11105d 100644 --- a/src/components/Arrow/Arrow.svelte +++ b/src/components/Arrow/Arrow.svelte @@ -27,8 +27,6 @@ \ No newline at end of file + diff --git a/src/components/Progress/Progress.svelte b/src/components/Progress/Progress.svelte index d865445..0e2efbd 100644 --- a/src/components/Progress/Progress.svelte +++ b/src/components/Progress/Progress.svelte @@ -20,9 +20,6 @@ >