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,16 @@
.v-messages {
flex: 1 1 auto;
font-size: 12px;
min-height: 14px;
min-width: 1px;
opacity: var(--v-medium-emphasis-opacity);
position: relative;
}
.v-messages__message {
line-height: 12px;
word-break: break-word;
overflow-wrap: break-word;
word-wrap: break-word;
hyphens: auto;
transition-duration: 150ms;
}

View File

@ -0,0 +1,58 @@
import { createVNode as _createVNode } from "vue";
// Styles
import "./VMessages.css";
// Components
import { VSlideYTransition } from "../transitions/index.mjs"; // Composables
import { useTextColor } from "../../composables/color.mjs";
import { makeComponentProps } from "../../composables/component.mjs";
import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs"; // Utilities
import { computed } from 'vue';
import { genericComponent, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
export const makeVMessagesProps = propsFactory({
active: Boolean,
color: String,
messages: {
type: [Array, String],
default: () => []
},
...makeComponentProps(),
...makeTransitionProps({
transition: {
component: VSlideYTransition,
leaveAbsolute: true,
group: true
}
})
}, 'VMessages');
export const VMessages = genericComponent()({
name: 'VMessages',
props: makeVMessagesProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const messages = computed(() => wrapInArray(props.messages));
const {
textColorClasses,
textColorStyles
} = useTextColor(computed(() => props.color));
useRender(() => _createVNode(MaybeTransition, {
"transition": props.transition,
"tag": "div",
"class": ['v-messages', textColorClasses.value, props.class],
"style": [textColorStyles.value, props.style],
"role": "alert",
"aria-live": "polite"
}, {
default: () => [props.active && messages.value.map((message, i) => _createVNode("div", {
"class": "v-messages__message",
"key": `${i}-${messages.value}`
}, [slots.message ? slots.message({
message
}) : message]))]
}));
return {};
}
});
//# sourceMappingURL=VMessages.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"VMessages.mjs","names":["VSlideYTransition","useTextColor","makeComponentProps","makeTransitionProps","MaybeTransition","computed","genericComponent","propsFactory","useRender","wrapInArray","makeVMessagesProps","active","Boolean","color","String","messages","type","Array","default","transition","component","leaveAbsolute","group","VMessages","name","props","setup","_ref","slots","textColorClasses","textColorStyles","_createVNode","value","class","style","map","message","i"],"sources":["../../../src/components/VMessages/VMessages.tsx"],"sourcesContent":["// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { Component, PropType } from 'vue'\n\nexport type VMessageSlot = {\n message: string\n}\n\nexport type VMessagesSlots = {\n message: VMessageSlot\n}\n\nexport const makeVMessagesProps = propsFactory({\n active: Boolean,\n color: String,\n messages: {\n type: [Array, String] as PropType<string | readonly string[]>,\n default: () => ([]),\n },\n\n ...makeComponentProps(),\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition as Component,\n leaveAbsolute: true,\n group: true,\n },\n }),\n}, 'VMessages')\n\nexport const VMessages = genericComponent<VMessagesSlots>()({\n name: 'VMessages',\n\n props: makeVMessagesProps(),\n\n setup (props, { slots }) {\n const messages = computed(() => wrapInArray(props.messages))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => props.color))\n\n useRender(() => (\n <MaybeTransition\n transition={ props.transition }\n tag=\"div\"\n class={[\n 'v-messages',\n textColorClasses.value,\n props.class,\n ]}\n style={[\n textColorStyles.value,\n props.style,\n ]}\n role=\"alert\"\n aria-live=\"polite\"\n >\n { props.active && (\n messages.value.map((message, i) => (\n <div\n class=\"v-messages__message\"\n key={ `${i}-${messages.value}` }\n >\n { slots.message ? slots.message({ message }) : message }\n </div>\n ))\n )}\n </MaybeTransition>\n ))\n\n return {}\n },\n})\n\nexport type VMessages = InstanceType<typeof VMessages>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,iBAAiB,oCAE1B;AAAA,SACSC,YAAY;AAAA,SACZC,kBAAkB;AAAA,SAClBC,mBAAmB,EAAEC,eAAe,4CAE7C;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,EAAEC,WAAW,gCAE/D;AAWA,OAAO,MAAMC,kBAAkB,GAAGH,YAAY,CAAC;EAC7CI,MAAM,EAAEC,OAAO;EACfC,KAAK,EAAEC,MAAM;EACbC,QAAQ,EAAE;IACRC,IAAI,EAAE,CAACC,KAAK,EAAEH,MAAM,CAAyC;IAC7DI,OAAO,EAAEA,CAAA,KAAO;EAClB,CAAC;EAED,GAAGhB,kBAAkB,CAAC,CAAC;EACvB,GAAGC,mBAAmB,CAAC;IACrBgB,UAAU,EAAE;MACVC,SAAS,EAAEpB,iBAA8B;MACzCqB,aAAa,EAAE,IAAI;MACnBC,KAAK,EAAE;IACT;EACF,CAAC;AACH,CAAC,EAAE,WAAW,CAAC;AAEf,OAAO,MAAMC,SAAS,GAAGjB,gBAAgB,CAAiB,CAAC,CAAC;EAC1DkB,IAAI,EAAE,WAAW;EAEjBC,KAAK,EAAEf,kBAAkB,CAAC,CAAC;EAE3BgB,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAMZ,QAAQ,GAAGV,QAAQ,CAAC,MAAMI,WAAW,CAACgB,KAAK,CAACV,QAAQ,CAAC,CAAC;IAC5D,MAAM;MAAEc,gBAAgB;MAAEC;IAAgB,CAAC,GAAG7B,YAAY,CAACI,QAAQ,CAAC,MAAMoB,KAAK,CAACZ,KAAK,CAAC,CAAC;IAEvFL,SAAS,CAAC,MAAAuB,YAAA,CAAA3B,eAAA;MAAA,cAEOqB,KAAK,CAACN,UAAU;MAAA;MAAA,SAEtB,CACL,YAAY,EACZU,gBAAgB,CAACG,KAAK,EACtBP,KAAK,CAACQ,KAAK,CACZ;MAAA,SACM,CACLH,eAAe,CAACE,KAAK,EACrBP,KAAK,CAACS,KAAK,CACZ;MAAA;MAAA;IAAA;MAAAhB,OAAA,EAAAA,CAAA,MAICO,KAAK,CAACd,MAAM,IACZI,QAAQ,CAACiB,KAAK,CAACG,GAAG,CAAC,CAACC,OAAO,EAAEC,CAAC,KAAAN,YAAA;QAAA;QAAA,OAGnB,GAAEM,CAAE,IAAGtB,QAAQ,CAACiB,KAAM;MAAC,IAE5BJ,KAAK,CAACQ,OAAO,GAAGR,KAAK,CAACQ,OAAO,CAAC;QAAEA;MAAQ,CAAC,CAAC,GAAGA,OAAO,EAEzD,CACF;IAAA,EAEJ,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}

View File

@ -0,0 +1,19 @@
@use '../../styles/settings'
@use './variables' as *
.v-messages
flex: 1 1 auto
font-size: $messages-font-size
min-height: $messages-min-height
min-width: 1px // Ensure takes up space with no messages and inside of flex
opacity: var(--v-medium-emphasis-opacity)
position: relative
&__message
line-height: $messages-line-height
word-break: break-word
overflow-wrap: break-word
word-wrap: break-word
hyphens: auto
transition-duration: $messages-transition-duration

View File

@ -0,0 +1,6 @@
// VMessages
$messages-color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)) !default;
$messages-font-size: 12px !default;
$messages-line-height: $messages-font-size !default;
$messages-min-height: 14px !default;
$messages-transition-duration: 150ms !default;

View File

@ -0,0 +1,227 @@
import * as vue from 'vue';
import { ComponentPropsOptions, ExtractPropTypes, Component, 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>>;
}
type VMessageSlot = {
message: string;
};
declare const VMessages: {
new (...args: any[]): vue.CreateComponentPublicInstance<{
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
} & {
color?: string | undefined;
class?: any;
} & {
$children?: {} | vue.VNodeChild | {
message?: ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
};
'v-slots'?: {
message?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:message"?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
} & {
color?: string | undefined;
class?: any;
} & {
$children?: {} | vue.VNodeChild | {
message?: ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
};
'v-slots'?: {
message?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:message"?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
}, {
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
}, true, {}, vue.SlotsType<Partial<{
message: (arg: VMessageSlot) => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
} & {
color?: string | undefined;
class?: any;
} & {
$children?: {} | vue.VNodeChild | {
message?: ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
};
'v-slots'?: {
message?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:message"?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
}, {}, {}, {}, {}, {
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
}>;
__isFragment?: undefined;
__isTeleport?: undefined;
__isSuspense?: undefined;
} & vue.ComponentOptionsBase<{
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
} & {
color?: string | undefined;
class?: any;
} & {
$children?: {} | vue.VNodeChild | {
message?: ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
};
'v-slots'?: {
message?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:message"?: false | ((arg: VMessageSlot) => vue.VNodeChild) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, string, {
active: boolean;
transition: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
style: vue.StyleValue;
messages: string | readonly string[];
}, {}, string, vue.SlotsType<Partial<{
message: (arg: VMessageSlot) => 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?: Component | undefined;
})>;
default: string;
validator: (val: unknown) => boolean;
}, "type" | "default"> & {
type: PropType<{
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>>;
default: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
};
class: PropType<any>;
style: {
type: PropType<vue.StyleValue>;
default: null;
};
active: BooleanConstructor;
color: StringConstructor;
messages: {
type: PropType<string | readonly string[]>;
default: () => never[];
};
}, vue.ExtractPropTypes<{
transition: Omit<{
type: PropType<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
default: string;
validator: (val: unknown) => boolean;
}, "type" | "default"> & {
type: PropType<{
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>>;
default: {
component: Component;
leaveAbsolute: boolean;
group: boolean;
} | NonNullable<string | boolean | (vue.TransitionProps & {
component?: Component | undefined;
})>;
};
class: PropType<any>;
style: {
type: PropType<vue.StyleValue>;
default: null;
};
active: BooleanConstructor;
color: StringConstructor;
messages: {
type: PropType<string | readonly string[]>;
default: () => never[];
};
}>>;
type VMessages = InstanceType<typeof VMessages>;
export { VMessages };

View File

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

View File

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