Tracking de l'application VApp (IHM du jeu)
This commit is contained in:
148
VApp/node_modules/vuetify/lib/composables/display.mjs
generated
vendored
Normal file
148
VApp/node_modules/vuetify/lib/composables/display.mjs
generated
vendored
Normal file
@ -0,0 +1,148 @@
|
||||
// Utilities
|
||||
import { computed, inject, reactive, shallowRef, toRefs, watchEffect } from 'vue';
|
||||
import { getCurrentInstanceName, mergeDeep, propsFactory } from "../util/index.mjs";
|
||||
import { IN_BROWSER, SUPPORTS_TOUCH } from "../util/globals.mjs"; // Types
|
||||
export const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
|
||||
|
||||
export const DisplaySymbol = Symbol.for('vuetify:display');
|
||||
const defaultDisplayOptions = {
|
||||
mobileBreakpoint: 'lg',
|
||||
thresholds: {
|
||||
xs: 0,
|
||||
sm: 600,
|
||||
md: 960,
|
||||
lg: 1280,
|
||||
xl: 1920,
|
||||
xxl: 2560
|
||||
}
|
||||
};
|
||||
const parseDisplayOptions = function () {
|
||||
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDisplayOptions;
|
||||
return mergeDeep(defaultDisplayOptions, options);
|
||||
};
|
||||
function getClientWidth(ssr) {
|
||||
return IN_BROWSER && !ssr ? window.innerWidth : typeof ssr === 'object' && ssr.clientWidth || 0;
|
||||
}
|
||||
function getClientHeight(ssr) {
|
||||
return IN_BROWSER && !ssr ? window.innerHeight : typeof ssr === 'object' && ssr.clientHeight || 0;
|
||||
}
|
||||
function getPlatform(ssr) {
|
||||
const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr';
|
||||
function match(regexp) {
|
||||
return Boolean(userAgent.match(regexp));
|
||||
}
|
||||
const android = match(/android/i);
|
||||
const ios = match(/iphone|ipad|ipod/i);
|
||||
const cordova = match(/cordova/i);
|
||||
const electron = match(/electron/i);
|
||||
const chrome = match(/chrome/i);
|
||||
const edge = match(/edge/i);
|
||||
const firefox = match(/firefox/i);
|
||||
const opera = match(/opera/i);
|
||||
const win = match(/win/i);
|
||||
const mac = match(/mac/i);
|
||||
const linux = match(/linux/i);
|
||||
return {
|
||||
android,
|
||||
ios,
|
||||
cordova,
|
||||
electron,
|
||||
chrome,
|
||||
edge,
|
||||
firefox,
|
||||
opera,
|
||||
win,
|
||||
mac,
|
||||
linux,
|
||||
touch: SUPPORTS_TOUCH,
|
||||
ssr: userAgent === 'ssr'
|
||||
};
|
||||
}
|
||||
export function createDisplay(options, ssr) {
|
||||
const {
|
||||
thresholds,
|
||||
mobileBreakpoint
|
||||
} = parseDisplayOptions(options);
|
||||
const height = shallowRef(getClientHeight(ssr));
|
||||
const platform = shallowRef(getPlatform(ssr));
|
||||
const state = reactive({});
|
||||
const width = shallowRef(getClientWidth(ssr));
|
||||
function updateSize() {
|
||||
height.value = getClientHeight();
|
||||
width.value = getClientWidth();
|
||||
}
|
||||
function update() {
|
||||
updateSize();
|
||||
platform.value = getPlatform();
|
||||
}
|
||||
|
||||
// eslint-disable-next-line max-statements
|
||||
watchEffect(() => {
|
||||
const xs = width.value < thresholds.sm;
|
||||
const sm = width.value < thresholds.md && !xs;
|
||||
const md = width.value < thresholds.lg && !(sm || xs);
|
||||
const lg = width.value < thresholds.xl && !(md || sm || xs);
|
||||
const xl = width.value < thresholds.xxl && !(lg || md || sm || xs);
|
||||
const xxl = width.value >= thresholds.xxl;
|
||||
const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';
|
||||
const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];
|
||||
const mobile = width.value < breakpointValue;
|
||||
state.xs = xs;
|
||||
state.sm = sm;
|
||||
state.md = md;
|
||||
state.lg = lg;
|
||||
state.xl = xl;
|
||||
state.xxl = xxl;
|
||||
state.smAndUp = !xs;
|
||||
state.mdAndUp = !(xs || sm);
|
||||
state.lgAndUp = !(xs || sm || md);
|
||||
state.xlAndUp = !(xs || sm || md || lg);
|
||||
state.smAndDown = !(md || lg || xl || xxl);
|
||||
state.mdAndDown = !(lg || xl || xxl);
|
||||
state.lgAndDown = !(xl || xxl);
|
||||
state.xlAndDown = !xxl;
|
||||
state.name = name;
|
||||
state.height = height.value;
|
||||
state.width = width.value;
|
||||
state.mobile = mobile;
|
||||
state.mobileBreakpoint = mobileBreakpoint;
|
||||
state.platform = platform.value;
|
||||
state.thresholds = thresholds;
|
||||
});
|
||||
if (IN_BROWSER) {
|
||||
window.addEventListener('resize', updateSize, {
|
||||
passive: true
|
||||
});
|
||||
}
|
||||
return {
|
||||
...toRefs(state),
|
||||
update,
|
||||
ssr: !!ssr
|
||||
};
|
||||
}
|
||||
export const makeDisplayProps = propsFactory({
|
||||
mobileBreakpoint: [Number, String]
|
||||
}, 'display');
|
||||
export function useDisplay() {
|
||||
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
|
||||
const display = inject(DisplaySymbol);
|
||||
if (!display) throw new Error('Could not find Vuetify display injection');
|
||||
const mobile = computed(() => {
|
||||
if (!props.mobileBreakpoint) return display.mobile.value;
|
||||
const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
|
||||
return display.width.value < breakpointValue;
|
||||
});
|
||||
const displayClasses = computed(() => {
|
||||
if (!name) return {};
|
||||
return {
|
||||
[`${name}--mobile`]: mobile.value
|
||||
};
|
||||
});
|
||||
return {
|
||||
...display,
|
||||
displayClasses,
|
||||
mobile
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=display.mjs.map
|
Reference in New Issue
Block a user