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,88 @@
.v-avatar {
flex: none;
align-items: center;
display: inline-flex;
justify-content: center;
line-height: normal;
overflow: hidden;
position: relative;
text-align: center;
transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
transition-property: width, height;
vertical-align: middle;
border-radius: 50%;
}
.v-avatar.v-avatar--size-x-small {
--v-avatar-height: 24px;
}
.v-avatar.v-avatar--size-small {
--v-avatar-height: 32px;
}
.v-avatar.v-avatar--size-default {
--v-avatar-height: 40px;
}
.v-avatar.v-avatar--size-large {
--v-avatar-height: 48px;
}
.v-avatar.v-avatar--size-x-large {
--v-avatar-height: 56px;
}
.v-avatar.v-avatar--density-default {
height: calc(var(--v-avatar-height) + 0px);
width: calc(var(--v-avatar-height) + 0px);
}
.v-avatar.v-avatar--density-comfortable {
height: calc(var(--v-avatar-height) + -4px);
width: calc(var(--v-avatar-height) + -4px);
}
.v-avatar.v-avatar--density-compact {
height: calc(var(--v-avatar-height) + -8px);
width: calc(var(--v-avatar-height) + -8px);
}
.v-avatar--variant-plain, .v-avatar--variant-outlined, .v-avatar--variant-text, .v-avatar--variant-tonal {
background: transparent;
color: inherit;
}
.v-avatar--variant-plain {
opacity: 0.62;
}
.v-avatar--variant-plain:focus, .v-avatar--variant-plain:hover {
opacity: 1;
}
.v-avatar--variant-plain .v-avatar__overlay {
display: none;
}
.v-avatar--variant-elevated, .v-avatar--variant-flat {
background: var(--v-theme-surface);
color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity));
}
.v-avatar--variant-elevated {
box-shadow: 0px 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 1px 1px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 3px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
}
.v-avatar--variant-flat {
box-shadow: 0px 0px 0px 0px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 0px 0px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 0px 0px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
}
.v-avatar--variant-outlined {
border: thin solid currentColor;
}
.v-avatar--variant-text .v-avatar__overlay {
background: currentColor;
}
.v-avatar--variant-tonal .v-avatar__underlay {
background: currentColor;
opacity: var(--v-activated-opacity);
border-radius: inherit;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
pointer-events: none;
}
.v-avatar--rounded {
border-radius: 4px;
}
.v-avatar .v-img {
height: 100%;
width: 100%;
}

View File

@ -0,0 +1,92 @@
import { createVNode as _createVNode } from "vue";
// Styles
import "./VAvatar.css";
// Components
import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
import { VIcon } from "../VIcon/index.mjs";
import { VImg } from "../VImg/index.mjs"; // Composables
import { makeComponentProps } from "../../composables/component.mjs";
import { makeDensityProps, useDensity } from "../../composables/density.mjs";
import { IconValue } from "../../composables/icons.mjs";
import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
import { makeSizeProps, useSize } from "../../composables/size.mjs";
import { makeTagProps } from "../../composables/tag.mjs";
import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
import { genOverlays, makeVariantProps, useVariant } from "../../composables/variant.mjs"; // Utilities
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs";
export const makeVAvatarProps = propsFactory({
start: Boolean,
end: Boolean,
icon: IconValue,
image: String,
text: String,
...makeComponentProps(),
...makeDensityProps(),
...makeRoundedProps(),
...makeSizeProps(),
...makeTagProps(),
...makeThemeProps(),
...makeVariantProps({
variant: 'flat'
})
}, 'VAvatar');
export const VAvatar = genericComponent()({
name: 'VAvatar',
props: makeVAvatarProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
themeClasses
} = provideTheme(props);
const {
colorClasses,
colorStyles,
variantClasses
} = useVariant(props);
const {
densityClasses
} = useDensity(props);
const {
roundedClasses
} = useRounded(props);
const {
sizeClasses,
sizeStyles
} = useSize(props);
useRender(() => _createVNode(props.tag, {
"class": ['v-avatar', {
'v-avatar--start': props.start,
'v-avatar--end': props.end
}, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
"style": [colorStyles.value, sizeStyles.value, props.style]
}, {
default: () => [!slots.default ? props.image ? _createVNode(VImg, {
"key": "image",
"src": props.image,
"alt": "",
"cover": true
}, null) : props.icon ? _createVNode(VIcon, {
"key": "icon",
"icon": props.icon
}, null) : props.text : _createVNode(VDefaultsProvider, {
"key": "content-defaults",
"defaults": {
VImg: {
cover: true,
image: props.image
},
VIcon: {
icon: props.icon
}
}
}, {
default: () => [slots.default()]
}), genOverlays(false, 'v-avatar')]
}));
return {};
}
});
//# sourceMappingURL=VAvatar.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
@use '../../styles/settings'
@use '../../styles/tools'
@use './mixins' as *
@use './variables' as *
.v-avatar
flex: none
align-items: center
display: inline-flex
justify-content: center
line-height: $avatar-line-height
overflow: hidden
position: relative
text-align: center
transition: 0.2s settings.$standard-easing
transition-property: width, height
vertical-align: $avatar-vertical-align
@include avatar-sizes($avatar-sizes)
@include avatar-density(('height', 'width'), $avatar-density)
@include tools.rounded($avatar-border-radius)
@include tools.variant($avatar-variants...)
&--rounded
@include tools.rounded($avatar-rounded-border-radius)
.v-img
height: 100%
width: 100%

View File

@ -0,0 +1,31 @@
@use 'sass:map';
@use 'sass:meta';
@use '../../styles/settings';
@use './variables' as *;
@mixin avatar-sizes ($map: $avatar-sizes) {
@each $sizeName, $multiplier in settings.$size-scales {
$size: map.get($map, 'height') + (8 * $multiplier);
&.v-avatar--size-#{$sizeName} {
--v-avatar-height: #{$size};
}
}
}
@mixin avatar-density ($properties, $densities) {
@each $density, $multiplier in $densities {
$value: calc(var(--v-avatar-height) + #{$multiplier * settings.$spacer});
&.v-avatar--density-#{$density} {
@if meta.type-of($properties) == "list" {
@each $property in $properties {
#{$property}: $value;
}
}
@else {
#{$properties}: $value;
}
}
}
}

View File

@ -0,0 +1,33 @@
@use "sass:map";
@use "../../styles/settings/variables";
@use "../../styles/tools/functions";
// Defaults
$avatar-background: var(--v-theme-surface) !default;
$avatar-border-radius: map.get(variables.$rounded, 'circle') !default;
$avatar-color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)) !default;
$avatar-density: ('default': 0, 'comfortable': -1, 'compact': -2) !default;
$avatar-elevation: 1 !default;
$avatar-height: 40px !default;
$avatar-line-height: normal !default;
$avatar-plain-opacity: .62 !default;
$avatar-rounded-border-radius: variables.$border-radius-root !default;
$avatar-vertical-align: middle !default;
$avatar-width: 40px !default;
$avatar-sizes: () !default;
$avatar-sizes: functions.map-deep-merge(
(
'height': $avatar-height,
'width': $avatar-width
),
$avatar-sizes
);
$avatar-variants: (
$avatar-background,
$avatar-color,
$avatar-elevation,
$avatar-plain-opacity,
'v-avatar'
) !default;

View File

@ -0,0 +1,239 @@
import * as vue from 'vue';
import { ComponentPropsOptions, ExtractPropTypes, JSXComponent, 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 Density = null | 'default' | 'comfortable' | 'compact';
type IconValue = string | (string | [path: string, opacity: number])[] | JSXComponent;
declare const IconValue: PropType<IconValue>;
declare const VAvatar: {
new (...args: any[]): vue.CreateComponentPublicInstance<{
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
density: Density;
} & {
color?: string | undefined;
image?: string | undefined;
text?: string | undefined;
class?: any;
icon?: IconValue | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
density: Density;
} & {
color?: string | undefined;
image?: string | undefined;
text?: string | undefined;
class?: any;
icon?: IconValue | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
}, {
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
rounded: string | number | boolean;
density: Density;
}, true, {}, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
density: Density;
} & {
color?: string | undefined;
image?: string | undefined;
text?: string | undefined;
class?: any;
icon?: IconValue | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
}, {}, {}, {}, {}, {
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
rounded: string | number | boolean;
density: Density;
}>;
__isFragment?: undefined;
__isTeleport?: undefined;
__isSuspense?: undefined;
} & vue.ComponentOptionsBase<{
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
density: Density;
} & {
color?: string | undefined;
image?: string | undefined;
text?: string | undefined;
class?: any;
icon?: IconValue | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, string, {
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
end: boolean;
start: boolean;
style: vue.StyleValue;
size: string | number;
tag: string;
rounded: string | number | boolean;
density: Density;
}, {}, string, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & FilterPropsOptions<{
color: StringConstructor;
variant: Omit<{
type: vue.PropType<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
default: string;
validator: (v: any) => boolean;
}, "type" | "default"> & {
type: vue.PropType<NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">>;
default: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
};
theme: StringConstructor;
tag: {
type: StringConstructor;
default: string;
};
size: {
type: (StringConstructor | NumberConstructor)[];
default: string;
};
rounded: {
type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
default: undefined;
};
density: {
type: vue.PropType<Density>;
default: string;
validator: (v: any) => boolean;
};
class: vue.PropType<any>;
style: {
type: vue.PropType<vue.StyleValue>;
default: null;
};
start: BooleanConstructor;
end: BooleanConstructor;
icon: vue.PropType<IconValue>;
image: StringConstructor;
text: StringConstructor;
}, vue.ExtractPropTypes<{
color: StringConstructor;
variant: Omit<{
type: vue.PropType<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
default: string;
validator: (v: any) => boolean;
}, "type" | "default"> & {
type: vue.PropType<NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">>;
default: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
};
theme: StringConstructor;
tag: {
type: StringConstructor;
default: string;
};
size: {
type: (StringConstructor | NumberConstructor)[];
default: string;
};
rounded: {
type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
default: undefined;
};
density: {
type: vue.PropType<Density>;
default: string;
validator: (v: any) => boolean;
};
class: vue.PropType<any>;
style: {
type: vue.PropType<vue.StyleValue>;
default: null;
};
start: BooleanConstructor;
end: BooleanConstructor;
icon: vue.PropType<IconValue>;
image: StringConstructor;
text: StringConstructor;
}>>;
type VAvatar = InstanceType<typeof VAvatar>;
export { VAvatar };

View File

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

View File

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