feat(web): configure slideshow (#7219)

* feat: configure slideshow delay

* feat: show/hide progressbar

* fix: slider

* refactor: use grid instead of flex

* fix: default delay

* refactor: progress bar props

* refactor: slideshow settings

* fix: enforce min/max value

* chore: linting

---------

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
This commit is contained in:
martin 2024-02-23 06:01:19 +01:00 committed by GitHub
parent 6bb30291de
commit b3b6426695
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 183 additions and 119 deletions

View file

@ -15,20 +15,29 @@
*/
export let autoplay = false;
/**
* Duration in milliseconds
* @default 5000
*/
export let duration = 5000;
/**
* Progress bar status
*/
export let status: ProgressBarStatus = ProgressBarStatus.Paused;
let progress = tweened<number>(0, {
duration: (from: number, to: number) => (to ? duration * (to - from) : 0),
});
export let hidden = false;
export let duration = 5;
const onChange = () => {
progress = setDuration(duration);
play();
};
let progress = setDuration(duration);
$: duration, onChange();
$: {
if ($progress === 1) {
dispatch('done');
}
}
const dispatch = createEventDispatcher<{
done: void;
@ -67,17 +76,13 @@
progress.set(0);
};
export const setDuration = (newDuration: number) => {
progress = tweened<number>(0, {
duration: (from: number, to: number) => (to ? newDuration * (to - from) : 0),
function setDuration(newDuration: number) {
return tweened<number>(0, {
duration: (from: number, to: number) => (to ? newDuration * 1000 * (to - from) : 0),
});
};
progress.subscribe((value) => {
if (value === 1) {
dispatch('done');
}
});
}
</script>
<span class="absolute left-0 h-[3px] bg-immich-primary shadow-2xl" style:width={`${$progress * 100}%`} />
{#if !hidden}
<span class="absolute left-0 h-[3px] bg-immich-primary shadow-2xl" style:width={`${$progress * 100}%`} />
{/if}