Private
Public Access
1
0

feat: Fluent UI Outlook Lite + connections mockup

This commit is contained in:
2026-04-14 18:52:25 +00:00
parent 1199eff6c3
commit dfa4010406
34820 changed files with 1003813 additions and 205 deletions

View File

@@ -0,0 +1,197 @@
'use strict';
const defaultOptions = {
active: true,
breakpoints: {},
delay: 4000,
jump: false,
playOnInit: true,
stopOnFocusIn: true,
stopOnInteraction: true,
stopOnMouseEnter: false,
stopOnLastSnap: false,
rootNode: null
};
function normalizeDelay(emblaApi, delay) {
const scrollSnaps = emblaApi.scrollSnapList();
if (typeof delay === 'number') {
return scrollSnaps.map(() => delay);
}
return delay(scrollSnaps, emblaApi);
}
function getAutoplayRootNode(emblaApi, rootNode) {
const emblaRootNode = emblaApi.rootNode();
return rootNode && rootNode(emblaRootNode) || emblaRootNode;
}
function Autoplay(userOptions = {}) {
let options;
let emblaApi;
let destroyed;
let delay;
let timerStartTime = null;
let timerId = 0;
let autoplayActive = false;
let mouseIsOver = false;
let playOnDocumentVisible = false;
let jump = false;
function init(emblaApiInstance, optionsHandler) {
emblaApi = emblaApiInstance;
const {
mergeOptions,
optionsAtMedia
} = optionsHandler;
const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions);
const allOptions = mergeOptions(optionsBase, userOptions);
options = optionsAtMedia(allOptions);
if (emblaApi.scrollSnapList().length <= 1) return;
jump = options.jump;
destroyed = false;
delay = normalizeDelay(emblaApi, options.delay);
const {
eventStore,
ownerDocument
} = emblaApi.internalEngine();
const isDraggable = !!emblaApi.internalEngine().options.watchDrag;
const root = getAutoplayRootNode(emblaApi, options.rootNode);
eventStore.add(ownerDocument, 'visibilitychange', visibilityChange);
if (isDraggable) {
emblaApi.on('pointerDown', pointerDown);
}
if (isDraggable && !options.stopOnInteraction) {
emblaApi.on('pointerUp', pointerUp);
}
if (options.stopOnMouseEnter) {
eventStore.add(root, 'mouseenter', mouseEnter);
}
if (options.stopOnMouseEnter && !options.stopOnInteraction) {
eventStore.add(root, 'mouseleave', mouseLeave);
}
if (options.stopOnFocusIn) {
emblaApi.on('slideFocusStart', stopAutoplay);
}
if (options.stopOnFocusIn && !options.stopOnInteraction) {
eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay);
}
if (options.playOnInit) startAutoplay();
}
function destroy() {
emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay);
stopAutoplay();
destroyed = true;
autoplayActive = false;
}
function setTimer() {
const {
ownerWindow
} = emblaApi.internalEngine();
ownerWindow.clearTimeout(timerId);
timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]);
timerStartTime = new Date().getTime();
emblaApi.emit('autoplay:timerset');
}
function clearTimer() {
const {
ownerWindow
} = emblaApi.internalEngine();
ownerWindow.clearTimeout(timerId);
timerId = 0;
timerStartTime = null;
emblaApi.emit('autoplay:timerstopped');
}
function startAutoplay() {
if (destroyed) return;
if (documentIsHidden()) {
playOnDocumentVisible = true;
return;
}
if (!autoplayActive) emblaApi.emit('autoplay:play');
setTimer();
autoplayActive = true;
}
function stopAutoplay() {
if (destroyed) return;
if (autoplayActive) emblaApi.emit('autoplay:stop');
clearTimer();
autoplayActive = false;
}
function visibilityChange() {
if (documentIsHidden()) {
playOnDocumentVisible = autoplayActive;
return stopAutoplay();
}
if (playOnDocumentVisible) startAutoplay();
}
function documentIsHidden() {
const {
ownerDocument
} = emblaApi.internalEngine();
return ownerDocument.visibilityState === 'hidden';
}
function pointerDown() {
if (!mouseIsOver) stopAutoplay();
}
function pointerUp() {
if (!mouseIsOver) startAutoplay();
}
function mouseEnter() {
mouseIsOver = true;
stopAutoplay();
}
function mouseLeave() {
mouseIsOver = false;
startAutoplay();
}
function play(jumpOverride) {
if (typeof jumpOverride !== 'undefined') jump = jumpOverride;
startAutoplay();
}
function stop() {
if (autoplayActive) stopAutoplay();
}
function reset() {
if (autoplayActive) startAutoplay();
}
function isPlaying() {
return autoplayActive;
}
function next() {
const {
index
} = emblaApi.internalEngine();
const nextIndex = index.clone().add(1).get();
const lastIndex = emblaApi.scrollSnapList().length - 1;
const kill = options.stopOnLastSnap && nextIndex === lastIndex;
if (emblaApi.canScrollNext()) {
emblaApi.scrollNext(jump);
} else {
emblaApi.scrollTo(0, jump);
}
emblaApi.emit('autoplay:select');
if (kill) return stopAutoplay();
startAutoplay();
}
function timeUntilNext() {
if (!timerStartTime) return null;
const currentDelay = delay[emblaApi.selectedScrollSnap()];
const timePastSinceStart = new Date().getTime() - timerStartTime;
return currentDelay - timePastSinceStart;
}
const self = {
name: 'autoplay',
options: userOptions,
init,
destroy,
play,
stop,
reset,
isPlaying,
timeUntilNext
};
return self;
}
Autoplay.globalOptions = undefined;
module.exports = Autoplay;
//# sourceMappingURL=embla-carousel-autoplay.cjs.js.map