Tracking de l'application VApp (IHM du jeu)

This commit is contained in:
2025-05-11 18:04:12 +02:00
commit 89e9db9b62
17763 changed files with 3718499 additions and 0 deletions

View File

@ -0,0 +1,67 @@
import { withDirectives as _withDirectives, resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
// Composables
import { makeComponentProps } from "../../composables/component.mjs";
import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
import { useProxiedModel } from "../../composables/proxiedModel.mjs";
import { makeTagProps } from "../../composables/tag.mjs";
import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs"; // Directives
import intersect from "../../directives/intersect/index.mjs"; // Utilities
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
export const makeVLazyProps = propsFactory({
modelValue: Boolean,
options: {
type: Object,
// For more information on types, navigate to:
// https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
default: () => ({
root: undefined,
rootMargin: undefined,
threshold: undefined
})
},
...makeComponentProps(),
...makeDimensionProps(),
...makeTagProps(),
...makeTransitionProps({
transition: 'fade-transition'
})
}, 'VLazy');
export const VLazy = genericComponent()({
name: 'VLazy',
directives: {
intersect
},
props: makeVLazyProps(),
emits: {
'update:modelValue': value => true
},
setup(props, _ref) {
let {
slots
} = _ref;
const {
dimensionStyles
} = useDimension(props);
const isActive = useProxiedModel(props, 'modelValue');
function onIntersect(isIntersecting) {
if (isActive.value) return;
isActive.value = isIntersecting;
}
useRender(() => _withDirectives(_createVNode(props.tag, {
"class": ['v-lazy', props.class],
"style": [dimensionStyles.value, props.style]
}, {
default: () => [isActive.value && _createVNode(MaybeTransition, {
"transition": props.transition,
"appear": true
}, {
default: () => [slots.default?.()]
})]
}), [[_resolveDirective("intersect"), {
handler: onIntersect,
options: props.options
}, null]]));
return {};
}
});
//# sourceMappingURL=VLazy.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"VLazy.mjs","names":["makeComponentProps","makeDimensionProps","useDimension","useProxiedModel","makeTagProps","makeTransitionProps","MaybeTransition","intersect","genericComponent","propsFactory","useRender","makeVLazyProps","modelValue","Boolean","options","type","Object","default","root","undefined","rootMargin","threshold","transition","VLazy","name","directives","props","emits","value","setup","_ref","slots","dimensionStyles","isActive","onIntersect","isIntersecting","_withDirectives","_createVNode","tag","class","style","_resolveDirective","handler"],"sources":["../../../src/components/VLazy/VLazy.tsx"],"sourcesContent":["// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport intersect from '@/directives/intersect'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVLazyProps = propsFactory({\n modelValue: Boolean,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeTagProps(),\n ...makeTransitionProps({ transition: 'fade-transition' }),\n}, 'VLazy')\n\nexport const VLazy = genericComponent()({\n name: 'VLazy',\n\n directives: { intersect },\n\n props: makeVLazyProps(),\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { dimensionStyles } = useDimension(props)\n\n const isActive = useProxiedModel(props, 'modelValue')\n\n function onIntersect (isIntersecting: boolean) {\n if (isActive.value) return\n\n isActive.value = isIntersecting\n }\n\n useRender(() => (\n <props.tag\n class={[\n 'v-lazy',\n props.class,\n ]}\n v-intersect={[\n {\n handler: onIntersect,\n options: props.options,\n },\n null,\n isActive.value ? [] : ['once'],\n ]}\n style={[\n dimensionStyles.value,\n props.style,\n ]}\n >\n { isActive.value && (\n <MaybeTransition transition={ props.transition } appear>\n { slots.default?.() }\n </MaybeTransition>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VLazy = InstanceType<typeof VLazy>\n"],"mappings":";AAAA;AAAA,SACSA,kBAAkB;AAAA,SAClBC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,eAAe;AAAA,SACfC,YAAY;AAAA,SACZC,mBAAmB,EAAEC,eAAe,4CAE7C;AAAA,OACOC,SAAS,8CAEhB;AAAA,SACSC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAElD;AAGA,OAAO,MAAMC,cAAc,GAAGF,YAAY,CAAC;EACzCG,UAAU,EAAEC,OAAO;EACnBC,OAAO,EAAE;IACPC,IAAI,EAAEC,MAA4C;IAClD;IACA;IACAC,OAAO,EAAEA,CAAA,MAAO;MACdC,IAAI,EAAEC,SAAS;MACfC,UAAU,EAAED,SAAS;MACrBE,SAAS,EAAEF;IACb,CAAC;EACH,CAAC;EAED,GAAGnB,kBAAkB,CAAC,CAAC;EACvB,GAAGC,kBAAkB,CAAC,CAAC;EACvB,GAAGG,YAAY,CAAC,CAAC;EACjB,GAAGC,mBAAmB,CAAC;IAAEiB,UAAU,EAAE;EAAkB,CAAC;AAC1D,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,MAAMC,KAAK,GAAGf,gBAAgB,CAAC,CAAC,CAAC;EACtCgB,IAAI,EAAE,OAAO;EAEbC,UAAU,EAAE;IAAElB;EAAU,CAAC;EAEzBmB,KAAK,EAAEf,cAAc,CAAC,CAAC;EAEvBgB,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAc,IAAK;EAC3C,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAgB,CAAC,GAAG9B,YAAY,CAACwB,KAAK,CAAC;IAE/C,MAAMO,QAAQ,GAAG9B,eAAe,CAACuB,KAAK,EAAE,YAAY,CAAC;IAErD,SAASQ,WAAWA,CAAEC,cAAuB,EAAE;MAC7C,IAAIF,QAAQ,CAACL,KAAK,EAAE;MAEpBK,QAAQ,CAACL,KAAK,GAAGO,cAAc;IACjC;IAEAzB,SAAS,CAAC,MAAA0B,eAAA,CAAAC,YAAA,CAAAX,KAAA,CAAAY,GAAA;MAAA,SAEC,CACL,QAAQ,EACRZ,KAAK,CAACa,KAAK,CACZ;MAAA,SASM,CACLP,eAAe,CAACJ,KAAK,EACrBF,KAAK,CAACc,KAAK;IACZ;MAAAvB,OAAA,EAAAA,CAAA,MAECgB,QAAQ,CAACL,KAAK,IAAAS,YAAA,CAAA/B,eAAA;QAAA,cACgBoB,KAAK,CAACJ,UAAU;QAAA;MAAA;QAAAL,OAAA,EAAAA,CAAA,MAC1Cc,KAAK,CAACd,OAAO,GAAG,CAAC;MAAA,EAEtB;IAAA,MAAAwB,iBAAA,eAhBC;MACEC,OAAO,EAAER,WAAW;MACpBpB,OAAO,EAAEY,KAAK,CAACZ;IACjB,CAAC,EACD,IAAI,GAcT,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}

View File

@ -0,0 +1,245 @@
import * as vue from 'vue';
import { ComponentPropsOptions, ExtractPropTypes, PropType } from 'vue';
interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions>, Props = ExtractPropTypes<PropsOptions>> {
filterProps<T extends Partial<Props>, U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>>(props: T): Partial<Pick<T, U>>;
}
declare const VLazy: {
new (...args: any[]): vue.CreateComponentPublicInstance<{
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
} & {
height?: string | number | undefined;
width?: string | number | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
class?: any;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
'update:modelValue': (value: boolean) => boolean;
}, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
} & {
height?: string | number | undefined;
width?: string | number | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
class?: any;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
}, {
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
}, true, {}, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
} & {
height?: string | number | undefined;
width?: string | number | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
class?: any;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
}, {}, {}, {}, {}, {
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
}>;
__isFragment?: undefined;
__isTeleport?: undefined;
__isSuspense?: undefined;
} & vue.ComponentOptionsBase<{
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
} & {
height?: string | number | undefined;
width?: string | number | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
class?: any;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
'update:modelValue': (value: boolean) => boolean;
}, string, {
transition: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
style: vue.StyleValue;
options: IntersectionObserverInit;
tag: string;
modelValue: boolean;
}, {}, string, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & FilterPropsOptions<{
transition: Omit<{
type: PropType<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
default: string;
validator: (val: unknown) => boolean;
}, "type" | "default"> & {
type: PropType<NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>>;
default: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
};
tag: {
type: StringConstructor;
default: string;
};
height: (StringConstructor | NumberConstructor)[];
maxHeight: (StringConstructor | NumberConstructor)[];
maxWidth: (StringConstructor | NumberConstructor)[];
minHeight: (StringConstructor | NumberConstructor)[];
minWidth: (StringConstructor | NumberConstructor)[];
width: (StringConstructor | NumberConstructor)[];
class: PropType<any>;
style: {
type: PropType<vue.StyleValue>;
default: null;
};
modelValue: BooleanConstructor;
options: {
type: PropType<IntersectionObserverInit>;
default: () => {
root: undefined;
rootMargin: undefined;
threshold: undefined;
};
};
}, vue.ExtractPropTypes<{
transition: Omit<{
type: PropType<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
default: string;
validator: (val: unknown) => boolean;
}, "type" | "default"> & {
type: PropType<NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>>;
default: NonNullable<string | boolean | (vue.TransitionProps & {
component?: vue.Component | undefined;
})>;
};
tag: {
type: StringConstructor;
default: string;
};
height: (StringConstructor | NumberConstructor)[];
maxHeight: (StringConstructor | NumberConstructor)[];
maxWidth: (StringConstructor | NumberConstructor)[];
minHeight: (StringConstructor | NumberConstructor)[];
minWidth: (StringConstructor | NumberConstructor)[];
width: (StringConstructor | NumberConstructor)[];
class: PropType<any>;
style: {
type: PropType<vue.StyleValue>;
default: null;
};
modelValue: BooleanConstructor;
options: {
type: PropType<IntersectionObserverInit>;
default: () => {
root: undefined;
rootMargin: undefined;
threshold: undefined;
};
};
}>>;
type VLazy = InstanceType<typeof VLazy>;
export { VLazy };

View File

@ -0,0 +1,2 @@
export { VLazy } from "./VLazy.mjs";
//# sourceMappingURL=index.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"index.mjs","names":["VLazy"],"sources":["../../../src/components/VLazy/index.ts"],"sourcesContent":["export { VLazy } from './VLazy'\n"],"mappings":"SAASA,KAAK"}