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,417 @@
.v-timeline .v-timeline-divider__dot {
background: rgb(var(--v-theme-surface-light));
}
.v-timeline .v-timeline-divider__inner-dot {
background: rgb(var(--v-theme-on-surface));
}
.v-timeline {
display: grid;
grid-auto-flow: dense;
position: relative;
}
.v-timeline--horizontal.v-timeline {
grid-column-gap: 24px;
width: 100%;
}
.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__body {
grid-row: 3;
padding-block-start: 24px;
}
.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__opposite {
grid-row: 1;
padding-block-end: 24px;
align-self: flex-end;
}
.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n+1) .v-timeline-item__body {
grid-row: 1;
padding-block-end: 24px;
align-self: flex-end;
}
.v-timeline--horizontal.v-timeline .v-timeline-item:nth-child(2n+1) .v-timeline-item__opposite {
grid-row: 3;
padding-block-start: 24px;
}
.v-timeline--vertical.v-timeline {
row-gap: 24px;
height: 100%;
}
.v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-divider, .v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-item__body, .v-timeline--vertical.v-timeline .v-timeline-item:first-child .v-timeline-item__opposite {
padding-block-start: 24px;
}
.v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-divider, .v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-item__body, .v-timeline--vertical.v-timeline .v-timeline-item:last-child .v-timeline-item__opposite {
padding-block-end: 24px;
}
.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__body {
grid-column: 1;
padding-inline-end: 24px;
}
.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n) .v-timeline-item__opposite {
grid-column: 3;
padding-inline-start: 24px;
}
.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n+1) .v-timeline-item__body {
grid-column: 3;
padding-inline-start: 24px;
}
.v-timeline--vertical.v-timeline .v-timeline-item:nth-child(2n+1) .v-timeline-item__opposite {
grid-column: 1;
justify-self: flex-end;
padding-inline-end: 24px;
}
.v-timeline-item {
display: contents;
}
.v-timeline-divider {
position: relative;
display: flex;
align-items: center;
}
.v-timeline--horizontal .v-timeline-divider {
flex-direction: row;
grid-row: 2;
width: 100%;
}
.v-timeline--vertical .v-timeline-divider {
height: 100%;
flex-direction: column;
grid-column: 2;
}
.v-timeline-divider__before {
background: rgba(var(--v-border-color), var(--v-border-opacity));
position: absolute;
}
.v-timeline--horizontal .v-timeline-divider__before {
height: var(--v-timeline-line-thickness);
width: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
inset-inline-start: -12px;
inset-inline-end: initial;
}
.v-timeline--vertical .v-timeline-divider__before {
height: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
width: var(--v-timeline-line-thickness);
top: -12px;
}
.v-timeline-divider__after {
background: rgba(var(--v-border-color), var(--v-border-opacity));
position: absolute;
}
.v-timeline--horizontal .v-timeline-divider__after {
height: var(--v-timeline-line-thickness);
width: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
inset-inline-end: -12px;
inset-inline-start: initial;
}
.v-timeline--vertical .v-timeline-divider__after {
height: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
width: var(--v-timeline-line-thickness);
bottom: -12px;
}
.v-timeline--vertical .v-timeline-item:first-child .v-timeline-divider__before {
height: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
top: 0;
}
.v-timeline--horizontal .v-timeline-item:first-child .v-timeline-divider__before {
width: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
inset-inline-start: 0;
inset-inline-end: initial;
}
.v-timeline--vertical .v-timeline-item:first-child .v-timeline-divider__after {
height: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset));
}
.v-timeline--horizontal .v-timeline-item:first-child .v-timeline-divider__after {
width: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset));
inset-inline-end: -12px;
inset-inline-start: initial;
}
.v-timeline--vertical .v-timeline-item:last-child .v-timeline-divider__before {
height: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset));
}
.v-timeline--horizontal .v-timeline-item:last-child .v-timeline-divider__before {
width: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset));
}
.v-timeline--vertical .v-timeline-item:last-child .v-timeline-divider__after {
height: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
bottom: 0;
}
.v-timeline--horizontal .v-timeline-item:last-child .v-timeline-divider__after {
width: calc(var(--v-timeline-line-size-base) + 12px - var(--v-timeline-line-inset));
inset-inline-end: 0;
inset-inline-start: initial;
}
.v-timeline--vertical .v-timeline-item:only-child .v-timeline-divider__after {
height: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset));
}
.v-timeline-divider__dot {
z-index: 1;
flex-shrink: 0;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
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-timeline-divider__dot--size-x-small {
height: 22px;
width: 22px;
}
.v-timeline-divider__dot--size-x-small .v-timeline-divider__inner-dot {
height: calc(100% - 6px);
width: calc(100% - 6px);
}
.v-timeline-divider__dot--size-small {
height: 30px;
width: 30px;
}
.v-timeline-divider__dot--size-small .v-timeline-divider__inner-dot {
height: calc(100% - 8px);
width: calc(100% - 8px);
}
.v-timeline-divider__dot--size-default {
height: 38px;
width: 38px;
}
.v-timeline-divider__dot--size-default .v-timeline-divider__inner-dot {
height: calc(100% - 8px);
width: calc(100% - 8px);
}
.v-timeline-divider__dot--size-large {
height: 46px;
width: 46px;
}
.v-timeline-divider__dot--size-large .v-timeline-divider__inner-dot {
height: calc(100% - 8px);
width: calc(100% - 8px);
}
.v-timeline-divider__dot--size-x-large {
height: 54px;
width: 54px;
}
.v-timeline-divider__dot--size-x-large .v-timeline-divider__inner-dot {
height: calc(100% - 10px);
width: calc(100% - 10px);
}
.v-timeline-divider__inner-dot {
align-items: center;
border-radius: 50%;
display: flex;
justify-content: center;
}
/** Modifiers **/
.v-timeline--horizontal.v-timeline--justify-center {
grid-template-rows: minmax(auto, 50%) min-content minmax(auto, 50%);
}
.v-timeline--vertical.v-timeline--justify-center {
grid-template-columns: minmax(auto, 50%) min-content minmax(auto, 50%);
}
.v-timeline--horizontal.v-timeline--justify-auto {
grid-template-rows: auto min-content auto;
}
.v-timeline--vertical.v-timeline--justify-auto {
grid-template-columns: auto min-content auto;
}
.v-timeline--horizontal.v-timeline--density-comfortable {
height: 100%;
}
.v-timeline--horizontal.v-timeline--density-comfortable.v-timeline--side-end {
grid-template-rows: min-content min-content auto;
}
.v-timeline--horizontal.v-timeline--density-comfortable.v-timeline--side-start {
grid-template-rows: auto min-content min-content;
}
.v-timeline--vertical.v-timeline--density-comfortable {
width: 100%;
}
.v-timeline--vertical.v-timeline--density-comfortable.v-timeline--side-end {
grid-template-columns: min-content min-content auto;
}
.v-timeline--vertical.v-timeline--density-comfortable.v-timeline--side-start {
grid-template-columns: auto min-content min-content;
}
.v-timeline--horizontal.v-timeline--density-compact.v-timeline--side-end {
grid-template-rows: 0 min-content auto;
}
.v-timeline--horizontal.v-timeline--density-compact.v-timeline--side-start {
grid-template-rows: auto min-content 0;
}
.v-timeline--horizontal.v-timeline--density-compact .v-timeline-item__body {
grid-row: 1;
}
.v-timeline--vertical.v-timeline--density-compact.v-timeline--side-end {
grid-template-columns: 0 min-content auto;
}
.v-timeline--vertical.v-timeline--density-compact.v-timeline--side-start {
grid-template-columns: auto min-content 0;
}
.v-timeline--vertical.v-timeline--density-compact .v-timeline-item__body {
grid-column: 3;
}
.v-timeline--horizontal.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__body {
grid-row: 3;
padding-block-end: initial;
padding-block-start: 24px;
}
.v-timeline--horizontal.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__opposite {
grid-row: 1;
padding-block-end: 24px;
padding-block-start: initial;
}
.v-timeline--vertical.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__body {
grid-column: 3;
padding-inline-start: 24px;
padding-inline-end: initial;
justify-self: flex-start;
}
.v-timeline--vertical.v-timeline.v-timeline--side-end .v-timeline-item .v-timeline-item__opposite {
grid-column: 1;
justify-self: flex-end;
padding-inline-end: 24px;
padding-inline-start: initial;
}
.v-timeline--horizontal.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__body {
grid-row: 1;
padding-block-end: 24px;
padding-block-start: initial;
}
.v-timeline--horizontal.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__opposite {
grid-row: 3;
padding-block-end: initial;
padding-block-start: 24px;
}
.v-timeline--vertical.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__body {
grid-column: 1;
justify-self: flex-end;
padding-inline-end: 24px;
}
.v-timeline--vertical.v-timeline.v-timeline--side-start .v-timeline-item .v-timeline-item__opposite {
grid-column: 3;
padding-inline-start: 24px;
justify-self: flex-start;
}
.v-timeline-divider--fill-dot .v-timeline-divider__inner-dot {
height: inherit;
width: inherit;
}
.v-timeline--align-center {
--v-timeline-line-size-base: 50%;
--v-timeline-line-size-offset: 0px;
}
.v-timeline--horizontal.v-timeline--align-center {
justify-items: center;
}
.v-timeline--horizontal.v-timeline--align-center .v-timeline-item__body {
padding-inline: 12px;
}
.v-timeline--horizontal.v-timeline--align-center .v-timeline-item__opposite {
padding-inline: 12px;
}
.v-timeline--horizontal.v-timeline--align-center .v-timeline-divider {
justify-content: center;
}
.v-timeline--vertical.v-timeline--align-center {
align-items: center;
}
.v-timeline--vertical.v-timeline--align-center .v-timeline-divider {
justify-content: center;
}
.v-timeline--align-start {
--v-timeline-line-size-base: 100%;
--v-timeline-line-size-offset: 12px;
}
.v-timeline--align-start .v-timeline-item:first-child .v-timeline-divider__before {
--v-timeline-line-size-offset: 24px;
}
.v-timeline--align-start .v-timeline-item:first-child .v-timeline-divider__after {
--v-timeline-line-size-offset: -12px;
}
.v-timeline--align-start .v-timeline-item:last-child .v-timeline-divider__after {
--v-timeline-line-size-offset: 0px;
}
.v-timeline--horizontal.v-timeline--align-start {
justify-items: flex-start;
}
.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider {
justify-content: flex-start;
}
.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider .v-timeline-divider__before {
width: calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset));
}
.v-timeline--horizontal.v-timeline--align-start .v-timeline-divider .v-timeline-divider__after {
width: calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset));
}
.v-timeline--vertical.v-timeline--align-start {
align-items: flex-start;
}
.v-timeline--vertical.v-timeline--align-start .v-timeline-divider {
justify-content: flex-start;
}
.v-timeline--vertical.v-timeline--align-start .v-timeline-divider .v-timeline-divider__before {
height: calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset));
}
.v-timeline--vertical.v-timeline--align-start .v-timeline-divider .v-timeline-divider__after {
height: calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset));
}
.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider__before {
display: none;
}
.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider__after {
--v-timeline-line-size-offset: 12px;
}
.v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider, .v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__body, .v-timeline--vertical.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__opposite {
padding-block-start: 0;
}
.v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-divider, .v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__body, .v-timeline--horizontal.v-timeline--truncate-line-start .v-timeline-item:first-child .v-timeline-item__opposite {
padding-inline-start: 0;
}
.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider__after {
display: none;
}
.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider__before {
--v-timeline-line-size-offset: 12px;
}
.v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider, .v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__body, .v-timeline--vertical.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__opposite {
padding-block-end: 0;
}
.v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-divider, .v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__body, .v-timeline--horizontal.v-timeline--truncate-line-end .v-timeline-item:last-child .v-timeline-item__opposite {
padding-inline-end: 0;
}

View File

@ -0,0 +1,105 @@
import { createVNode as _createVNode, resolveDirective as _resolveDirective } from "vue";
// Styles
import "./VTimeline.css";
// Composables
import { makeComponentProps } from "../../composables/component.mjs";
import { provideDefaults } from "../../composables/defaults.mjs";
import { makeDensityProps, useDensity } from "../../composables/density.mjs";
import { useRtl } from "../../composables/locale.mjs";
import { makeTagProps } from "../../composables/tag.mjs";
import { makeThemeProps, provideTheme } from "../../composables/theme.mjs"; // Utilities
import { computed, toRef } from 'vue';
import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
export const makeVTimelineProps = propsFactory({
align: {
type: String,
default: 'center',
validator: v => ['center', 'start'].includes(v)
},
direction: {
type: String,
default: 'vertical',
validator: v => ['vertical', 'horizontal'].includes(v)
},
justify: {
type: String,
default: 'auto',
validator: v => ['auto', 'center'].includes(v)
},
side: {
type: String,
validator: v => v == null || ['start', 'end'].includes(v)
},
lineInset: {
type: [String, Number],
default: 0
},
lineThickness: {
type: [String, Number],
default: 2
},
lineColor: String,
truncateLine: {
type: String,
validator: v => ['start', 'end', 'both'].includes(v)
},
...makeComponentProps(),
...makeDensityProps(),
...makeTagProps(),
...makeThemeProps()
}, 'VTimeline');
export const VTimeline = genericComponent()({
name: 'VTimeline',
props: makeVTimelineProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
themeClasses
} = provideTheme(props);
const {
densityClasses
} = useDensity(props);
const {
rtlClasses
} = useRtl();
provideDefaults({
VTimelineDivider: {
lineColor: toRef(props, 'lineColor')
},
VTimelineItem: {
density: toRef(props, 'density'),
lineInset: toRef(props, 'lineInset')
}
});
const sideClasses = computed(() => {
const side = props.side ? props.side : props.density !== 'default' ? 'end' : null;
return side && `v-timeline--side-${side}`;
});
const truncateClasses = computed(() => {
const classes = ['v-timeline--truncate-line-start', 'v-timeline--truncate-line-end'];
switch (props.truncateLine) {
case 'both':
return classes;
case 'start':
return classes[0];
case 'end':
return classes[1];
default:
return null;
}
});
useRender(() => _createVNode(props.tag, {
"class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
'v-timeline--inset-line': !!props.lineInset
}, themeClasses.value, densityClasses.value, sideClasses.value, rtlClasses.value, props.class],
"style": [{
'--v-timeline-line-thickness': convertToUnit(props.lineThickness)
}, props.style]
}, slots));
return {};
}
});
//# sourceMappingURL=VTimeline.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,410 @@
@use 'sass:map'
@use 'sass:math'
@use '../../styles/settings'
@use '../../styles/tools'
@use './variables' as *
@use './mixins' as *
// VTimeline
.v-timeline
.v-timeline-divider__dot
background: $timeline-dot-divider-background
.v-timeline-divider__inner-dot
background: $timeline-inner-dot-divider-background
.v-timeline
display: grid
grid-auto-flow: dense
position: relative
@include horizontal(true)
grid-column-gap: $timeline-item-padding
width: 100%
.v-timeline-item:nth-child(2n)
.v-timeline-item__body
grid-row: 3
padding-block-start: $timeline-item-padding
.v-timeline-item__opposite
grid-row: 1
padding-block-end: $timeline-item-padding
align-self: flex-end
.v-timeline-item:nth-child(2n+1)
.v-timeline-item__body
grid-row: 1
padding-block-end: $timeline-item-padding
align-self: flex-end
.v-timeline-item__opposite
grid-row: 3
padding-block-start: $timeline-item-padding
@include vertical(true)
row-gap: $timeline-item-padding
height: 100%
@include timeline-first-item()
padding-block-start: $timeline-item-padding
@include timeline-last-item()
padding-block-end: $timeline-item-padding
.v-timeline-item:nth-child(2n)
.v-timeline-item__body
grid-column: 1
padding-inline-end: $timeline-item-padding
.v-timeline-item__opposite
grid-column: 3
padding-inline-start: $timeline-item-padding
.v-timeline-item:nth-child(2n+1)
.v-timeline-item__body
grid-column: 3
padding-inline-start: $timeline-item-padding
.v-timeline-item__opposite
grid-column: 1
justify-self: flex-end
padding-inline-end: $timeline-item-padding
// VTimelineItem
.v-timeline-item
display: contents
// VTimelineDivider
.v-timeline-divider
position: relative
display: flex
align-items: center
@include horizontal
flex-direction: row
grid-row: 2
width: 100%
@include vertical
height: 100%
flex-direction: column
grid-column: 2
$timeline-line-size: calc(var(--v-timeline-line-size-base) + #{math.div($timeline-item-padding, 2)} - var(--v-timeline-line-inset))
$timeline-line-start: math.div(-$timeline-item-padding, 2)
$timeline-line-size-first-last: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset) + var(--v-timeline-line-size-offset))
.v-timeline-divider__before
background: $timeline-divider-line-background
position: absolute
@include horizontal
height: $timeline-divider-line-thickness
width: $timeline-line-size
inset-inline-start: $timeline-line-start
inset-inline-end: initial
@include vertical
height: $timeline-line-size
width: $timeline-divider-line-thickness
top: $timeline-line-start
.v-timeline-divider__after
background: $timeline-divider-line-background
position: absolute
@include horizontal
height: $timeline-divider-line-thickness
width: $timeline-line-size
inset-inline-end: $timeline-line-start
inset-inline-start: initial
@include vertical
height: $timeline-line-size
width: $timeline-divider-line-thickness
bottom: $timeline-line-start
.v-timeline-item:first-child
.v-timeline-divider__before
@include vertical
height: $timeline-line-size
top: 0
@include horizontal
width: $timeline-line-size
inset-inline-start: 0
inset-inline-end: initial
.v-timeline-divider__after
@include vertical
height: $timeline-line-size-first-last
@include horizontal
width: $timeline-line-size-first-last
inset-inline-end: $timeline-line-start
inset-inline-start: initial
.v-timeline-item:last-child
.v-timeline-divider__before
@include vertical
height: $timeline-line-size-first-last
@include horizontal
width: $timeline-line-size-first-last
.v-timeline-divider__after
@include vertical
height: calc(var(--v-timeline-line-size-base) + #{math.div($timeline-item-padding, 2)} - var(--v-timeline-line-inset))
bottom: 0
@include horizontal
width: calc(var(--v-timeline-line-size-base) + #{math.div($timeline-item-padding, 2)} - var(--v-timeline-line-inset))
inset-inline-end: 0
inset-inline-start: initial
.v-timeline-item:only-child
.v-timeline-divider__after
@include vertical
height: calc(var(--v-timeline-line-size-base) - var(--v-timeline-line-inset))
.v-timeline-divider__dot
z-index: 1
flex-shrink: 0
border-radius: $timeline-dot-border-radius
display: flex
justify-content: center
align-items: center
@include tools.elevation($timeline-divider-dot-elevation)
@each $name, $multiplier in settings.$size-scales
$size: $timeline-dot-size + (8 * $multiplier)
&--size-#{$name}
height: $size
width: $size
.v-timeline-divider__inner-dot
height: calc(100% - #{map.get($timeline-dot-border-sizes, $name)})
width: calc(100% - #{map.get($timeline-dot-border-sizes, $name)})
.v-timeline-divider__inner-dot
align-items: center
border-radius: $timeline-dot-border-radius
display: flex
justify-content: center
/** Modifiers **/
// Justify
.v-timeline--justify-center
@include horizontal(true)
grid-template-rows: $timeline-item-grid-template-center
@include vertical(true)
grid-template-columns: $timeline-item-grid-template-center
.v-timeline--justify-auto
@include horizontal(true)
grid-template-rows: $timeline-item-grid-template-auto
@include vertical(true)
grid-template-columns: $timeline-item-grid-template-auto
// Density
.v-timeline--density-comfortable
@include horizontal(true)
height: 100%
&.v-timeline--side-end
grid-template-rows: $timeline-density-comfortable-grid-template-end
&.v-timeline--side-start
grid-template-rows: $timeline-density-comfortable-grid-template-start
@include vertical(true)
width: 100%
&.v-timeline--side-end
grid-template-columns: $timeline-density-comfortable-grid-template-end
&.v-timeline--side-start
grid-template-columns: $timeline-density-comfortable-grid-template-start
.v-timeline--density-compact
@include horizontal(true)
&.v-timeline--side-end
grid-template-rows: $timeline-density-compact-grid-template-end
&.v-timeline--side-start
grid-template-rows: $timeline-density-compact-grid-template-start
.v-timeline-item__body
grid-row: 1
@include vertical(true)
&.v-timeline--side-end
grid-template-columns: $timeline-density-compact-grid-template-end
&.v-timeline--side-start
grid-template-columns: $timeline-density-compact-grid-template-start
.v-timeline-item__body
grid-column: 3
// Side
.v-timeline.v-timeline--side-end
.v-timeline-item
@include horizontal(true)
.v-timeline-item__body
grid-row: 3
padding-block-end: initial
padding-block-start: $timeline-item-padding
.v-timeline-item__opposite
grid-row: 1
padding-block-end: $timeline-item-padding
padding-block-start: initial
@include vertical(true)
.v-timeline-item__body
grid-column: 3
padding-inline-start: $timeline-item-padding
padding-inline-end: initial
justify-self: flex-start
.v-timeline-item__opposite
grid-column: 1
justify-self: flex-end
padding-inline-end: $timeline-item-padding
padding-inline-start: initial
.v-timeline.v-timeline--side-start
.v-timeline-item
@include horizontal(true)
.v-timeline-item__body
grid-row: 1
padding-block-end: $timeline-item-padding
padding-block-start: initial
.v-timeline-item__opposite
grid-row: 3
padding-block-end: initial
padding-block-start: $timeline-item-padding
@include vertical(true)
.v-timeline-item__body
grid-column: 1
justify-self: flex-end
padding-inline-end: $timeline-item-padding
.v-timeline-item__opposite
grid-column: 3
padding-inline-start: $timeline-item-padding
justify-self: flex-start
// Fill dot
.v-timeline-divider--fill-dot
.v-timeline-divider__inner-dot
height: inherit
width: inherit
// Alignment
.v-timeline--align-center
--v-timeline-line-size-base: 50%
--v-timeline-line-size-offset: 0px
@include horizontal(true)
justify-items: center
.v-timeline-item__body
padding-inline: math.div($timeline-item-padding, 2)
.v-timeline-item__opposite
padding-inline: math.div($timeline-item-padding, 2)
.v-timeline-divider
justify-content: center
@include vertical(true)
align-items: center
.v-timeline-divider
justify-content: center
.v-timeline--align-start
--v-timeline-line-size-base: 100%
--v-timeline-line-size-offset: #{math.div($timeline-item-padding, 2)}
$timeline-line-size-before: calc(var(--v-timeline-line-size-offset) + var(--v-timeline-dot-size) / 2 - var(--v-timeline-line-inset))
$timeline-line-size-after: calc(var(--v-timeline-line-size-base) - var(--v-timeline-dot-size) / 2 + var(--v-timeline-line-size-offset) - var(--v-timeline-line-inset))
.v-timeline-item:first-child
.v-timeline-divider__before
--v-timeline-line-size-offset: #{$timeline-item-padding}
.v-timeline-divider__after
--v-timeline-line-size-offset: -#{math.div($timeline-item-padding, 2)}
.v-timeline-item:last-child
.v-timeline-divider__after
--v-timeline-line-size-offset: 0px
@include horizontal(true)
justify-items: flex-start
.v-timeline-divider
justify-content: flex-start
.v-timeline-divider__before
width: $timeline-line-size-before
.v-timeline-divider__after
width: $timeline-line-size-after
@include vertical(true)
align-items: flex-start
.v-timeline-divider
justify-content: flex-start
.v-timeline-divider__before
height: $timeline-line-size-before
.v-timeline-divider__after
height: $timeline-line-size-after
// Truncate start
.v-timeline--truncate-line-start
.v-timeline-item:first-child
.v-timeline-divider__before
display: none
.v-timeline-divider__after
--v-timeline-line-size-offset: #{math.div($timeline-item-padding, 2)}
@include vertical(true)
@include timeline-first-item()
padding-block-start: 0
@include horizontal(true)
@include timeline-first-item()
padding-inline-start: 0
// Truncate end
.v-timeline--truncate-line-end
.v-timeline-item:last-child
.v-timeline-divider__after
display: none
.v-timeline-divider__before
--v-timeline-line-size-offset: #{math.div($timeline-item-padding, 2)}
@include vertical(true)
@include timeline-last-item()
padding-block-end: 0
@include horizontal(true)
@include timeline-last-item()
padding-inline-end: 0

View File

@ -0,0 +1,87 @@
import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
// Components
import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
import { VIcon } from "../VIcon/index.mjs"; // Composables
import { useBackgroundColor } from "../../composables/color.mjs";
import { makeComponentProps } from "../../composables/component.mjs";
import { makeElevationProps, useElevation } from "../../composables/elevation.mjs";
import { IconValue } from "../../composables/icons.mjs";
import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
import { makeSizeProps, useSize } from "../../composables/size.mjs"; // Utilities
import { toRef } from 'vue';
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs";
export const makeVTimelineDividerProps = propsFactory({
dotColor: String,
fillDot: Boolean,
hideDot: Boolean,
icon: IconValue,
iconColor: String,
lineColor: String,
...makeComponentProps(),
...makeRoundedProps(),
...makeSizeProps(),
...makeElevationProps()
}, 'VTimelineDivider');
export const VTimelineDivider = genericComponent()({
name: 'VTimelineDivider',
props: makeVTimelineDividerProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
sizeClasses,
sizeStyles
} = useSize(props, 'v-timeline-divider__dot');
const {
backgroundColorStyles,
backgroundColorClasses
} = useBackgroundColor(toRef(props, 'dotColor'));
const {
roundedClasses
} = useRounded(props, 'v-timeline-divider__dot');
const {
elevationClasses
} = useElevation(props);
const {
backgroundColorClasses: lineColorClasses,
backgroundColorStyles: lineColorStyles
} = useBackgroundColor(toRef(props, 'lineColor'));
useRender(() => _createVNode("div", {
"class": ['v-timeline-divider', {
'v-timeline-divider--fill-dot': props.fillDot
}, props.class],
"style": props.style
}, [_createVNode("div", {
"class": ['v-timeline-divider__before', lineColorClasses.value],
"style": lineColorStyles.value
}, null), !props.hideDot && _createVNode("div", {
"key": "dot",
"class": ['v-timeline-divider__dot', elevationClasses.value, roundedClasses.value, sizeClasses.value],
"style": sizeStyles.value
}, [_createVNode("div", {
"class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
"style": backgroundColorStyles.value
}, [!slots.default ? _createVNode(VIcon, {
"key": "icon",
"color": props.iconColor,
"icon": props.icon,
"size": props.size
}, null) : _createVNode(VDefaultsProvider, {
"key": "icon-defaults",
"disabled": !props.icon,
"defaults": {
VIcon: {
color: props.iconColor,
icon: props.icon,
size: props.size
}
}
}, slots.default)])]), _createVNode("div", {
"class": ['v-timeline-divider__after', lineColorClasses.value],
"style": lineColorStyles.value
}, null)]));
return {};
}
});
//# sourceMappingURL=VTimelineDivider.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,80 @@
import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
// Components
import { VTimelineDivider } from "./VTimelineDivider.mjs"; // Composables
import { makeComponentProps } from "../../composables/component.mjs";
import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
import { makeElevationProps } from "../../composables/elevation.mjs";
import { IconValue } from "../../composables/icons.mjs";
import { makeRoundedProps } from "../../composables/rounded.mjs";
import { makeSizeProps } from "../../composables/size.mjs";
import { makeTagProps } from "../../composables/tag.mjs"; // Utilities
import { ref, shallowRef, watch } from 'vue';
import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
// Types
export const makeVTimelineItemProps = propsFactory({
density: String,
dotColor: String,
fillDot: Boolean,
hideDot: Boolean,
hideOpposite: {
type: Boolean,
default: undefined
},
icon: IconValue,
iconColor: String,
lineInset: [Number, String],
...makeComponentProps(),
...makeDimensionProps(),
...makeElevationProps(),
...makeRoundedProps(),
...makeSizeProps(),
...makeTagProps()
}, 'VTimelineItem');
export const VTimelineItem = genericComponent()({
name: 'VTimelineItem',
props: makeVTimelineItemProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
dimensionStyles
} = useDimension(props);
const dotSize = shallowRef(0);
const dotRef = ref();
watch(dotRef, newValue => {
if (!newValue) return;
dotSize.value = newValue.$el.querySelector('.v-timeline-divider__dot')?.getBoundingClientRect().width ?? 0;
}, {
flush: 'post'
});
useRender(() => _createVNode("div", {
"class": ['v-timeline-item', {
'v-timeline-item--fill-dot': props.fillDot
}, props.class],
"style": [{
'--v-timeline-dot-size': convertToUnit(dotSize.value),
'--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
}, props.style]
}, [_createVNode("div", {
"class": "v-timeline-item__body",
"style": dimensionStyles.value
}, [slots.default?.()]), _createVNode(VTimelineDivider, {
"ref": dotRef,
"hideDot": props.hideDot,
"icon": props.icon,
"iconColor": props.iconColor,
"size": props.size,
"elevation": props.elevation,
"dotColor": props.dotColor,
"fillDot": props.fillDot,
"rounded": props.rounded
}, {
default: slots.icon
}), props.density !== 'compact' && _createVNode("div", {
"class": "v-timeline-item__opposite"
}, [!props.hideOpposite && slots.opposite?.()])]));
return {};
}
});
//# sourceMappingURL=VTimelineItem.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,17 @@
@mixin vertical($immediate: false)
@at-root .v-timeline--vertical#{if($immediate, &, ' &')}
@content
@mixin horizontal($immediate: false)
@at-root .v-timeline--horizontal#{if($immediate, &, ' &')}
@content
@mixin timeline-first-item()
.v-timeline-item:first-child
.v-timeline-divider, .v-timeline-item__body, .v-timeline-item__opposite
@content
@mixin timeline-last-item()
.v-timeline-item:last-child
.v-timeline-divider, .v-timeline-item__body, .v-timeline-item__opposite
@content

View File

@ -0,0 +1,37 @@
@use '../../styles/tools';
// VTimeline
$timeline-density-comfortable-grid-template-end: min-content min-content auto !default;
$timeline-density-comfortable-grid-template-start: auto min-content min-content !default;
$timeline-density-compact-grid-template-end: 0 min-content auto !default;
$timeline-density-compact-grid-template-start: auto min-content 0 !default;
$timeline-dot-border-radius: 50% !default;
$timeline-dot-divider-background: rgb(var(--v-theme-surface-light)) !default;
$timeline-dot-size: 38px !default;
$timeline-inner-dot-divider-background: rgb(var(--v-theme-on-surface)) !default;
$timeline-inset-divider-line: var(--v-timeline-line-inset) !default;
$timeline-inset-line-size: 4px !default;
// VTimelineDivider
$timeline-divider-dot-elevation: 0 !default;
$timeline-divider-line-background: rgba(var(--v-border-color), var(--v-border-opacity)) !default;
$timeline-divider-line-horizontal-width: var(--v-timeline-line-inset, 0px) !default;
$timeline-divider-line-thickness: var(--v-timeline-line-thickness) !default;
// VTimelineItem
$timeline-item-grid-template-center: minmax(auto, 50%) min-content minmax(auto, 50%) !default;
$timeline-item-grid-template-auto: auto min-content auto !default;
$timeline-item-padding: 24px !default;
// Lists
$timeline-dot-border-sizes: () !default;
$timeline-dot-border-sizes: tools.map-deep-merge(
(
'x-small': 6px,
'small': 8px,
'default': 8px,
'large': 8px,
'x-large': 10px,
),
$timeline-dot-border-sizes
);

View File

@ -0,0 +1,510 @@
import * as vue from 'vue';
import { ComponentPropsOptions, ExtractPropTypes, Prop, 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 TimelineDirection = 'vertical' | 'horizontal';
type TimelineSide = 'start' | 'end' | undefined;
type TimelineAlign = 'center' | 'start';
type TimelineTruncateLine = 'start' | 'end' | 'both' | undefined;
declare const VTimeline: {
new (...args: any[]): vue.CreateComponentPublicInstance<{
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
} & {
direction?: TimelineDirection | undefined;
class?: any;
align?: TimelineAlign | undefined;
side?: TimelineSide;
theme?: string | undefined;
lineColor?: string | undefined;
truncateLine?: TimelineTruncateLine;
} & {
$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 & {
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
} & {
direction?: TimelineDirection | undefined;
class?: any;
align?: TimelineAlign | undefined;
side?: TimelineSide;
theme?: string | undefined;
lineColor?: string | undefined;
truncateLine?: TimelineTruncateLine;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
}, {
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
}, true, {}, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
} & {
direction?: TimelineDirection | undefined;
class?: any;
align?: TimelineAlign | undefined;
side?: TimelineSide;
theme?: string | undefined;
lineColor?: string | undefined;
truncateLine?: TimelineTruncateLine;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
}, {}, {}, {}, {}, {
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
}>;
__isFragment?: undefined;
__isTeleport?: undefined;
__isSuspense?: undefined;
} & vue.ComponentOptionsBase<{
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
} & {
direction?: TimelineDirection | undefined;
class?: any;
align?: TimelineAlign | undefined;
side?: TimelineSide;
theme?: string | undefined;
lineColor?: string | undefined;
truncateLine?: TimelineTruncateLine;
} & {
$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, {
style: vue.StyleValue;
tag: string;
justify: string;
density: Density;
lineInset: string | number;
lineThickness: string | number;
}, {}, string, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & FilterPropsOptions<{
theme: StringConstructor;
tag: {
type: StringConstructor;
default: string;
};
density: {
type: vue.PropType<Density>;
default: string;
validator: (v: any) => boolean;
};
class: vue.PropType<any>;
style: {
type: vue.PropType<vue.StyleValue>;
default: null;
};
align: Prop<TimelineAlign>;
direction: Prop<TimelineDirection>;
justify: {
type: StringConstructor;
default: string;
validator: (v: any) => boolean;
};
side: Prop<TimelineSide>;
lineInset: {
type: (StringConstructor | NumberConstructor)[];
default: number;
};
lineThickness: {
type: (StringConstructor | NumberConstructor)[];
default: number;
};
lineColor: StringConstructor;
truncateLine: Prop<TimelineTruncateLine>;
}, vue.ExtractPropTypes<{
theme: StringConstructor;
tag: {
type: StringConstructor;
default: string;
};
density: {
type: vue.PropType<Density>;
default: string;
validator: (v: any) => boolean;
};
class: vue.PropType<any>;
style: {
type: vue.PropType<vue.StyleValue>;
default: null;
};
align: Prop<TimelineAlign>;
direction: Prop<TimelineDirection>;
justify: {
type: StringConstructor;
default: string;
validator: (v: any) => boolean;
};
side: Prop<TimelineSide>;
lineInset: {
type: (StringConstructor | NumberConstructor)[];
default: number;
};
lineThickness: {
type: (StringConstructor | NumberConstructor)[];
default: number;
};
lineColor: StringConstructor;
truncateLine: Prop<TimelineTruncateLine>;
}>>;
type VTimeline = InstanceType<typeof VTimeline>;
type IconValue = string | (string | [path: string, opacity: number])[] | JSXComponent;
declare const IconValue: PropType<IconValue>;
declare const VTimelineItem: {
new (...args: any[]): vue.CreateComponentPublicInstance<{
style: vue.StyleValue;
size: string | number;
tag: string;
fillDot: boolean;
hideDot: 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;
icon?: IconValue | undefined;
elevation?: string | number | undefined;
rounded?: string | number | boolean | undefined;
density?: "default" | "compact" | undefined;
lineInset?: string | number | undefined;
dotColor?: string | undefined;
iconColor?: string | undefined;
hideOpposite?: boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
icon?: (() => vue.VNodeChild) | undefined;
opposite?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
icon?: false | (() => vue.VNodeChild) | undefined;
opposite?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:icon"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:opposite"?: false | (() => vue.VNodeChild) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
style: vue.StyleValue;
size: string | number;
tag: string;
fillDot: boolean;
hideDot: 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;
icon?: IconValue | undefined;
elevation?: string | number | undefined;
rounded?: string | number | boolean | undefined;
density?: "default" | "compact" | undefined;
lineInset?: string | number | undefined;
dotColor?: string | undefined;
iconColor?: string | undefined;
hideOpposite?: boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
icon?: (() => vue.VNodeChild) | undefined;
opposite?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
icon?: false | (() => vue.VNodeChild) | undefined;
opposite?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:icon"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:opposite"?: false | (() => vue.VNodeChild) | undefined;
}, {
style: vue.StyleValue;
size: string | number;
tag: string;
rounded: string | number | boolean;
fillDot: boolean;
hideDot: boolean;
hideOpposite: boolean;
}, true, {}, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
icon: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
opposite: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
style: vue.StyleValue;
size: string | number;
tag: string;
fillDot: boolean;
hideDot: 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;
icon?: IconValue | undefined;
elevation?: string | number | undefined;
rounded?: string | number | boolean | undefined;
density?: "default" | "compact" | undefined;
lineInset?: string | number | undefined;
dotColor?: string | undefined;
iconColor?: string | undefined;
hideOpposite?: boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
icon?: (() => vue.VNodeChild) | undefined;
opposite?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
icon?: false | (() => vue.VNodeChild) | undefined;
opposite?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:icon"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:opposite"?: false | (() => vue.VNodeChild) | undefined;
}, {}, {}, {}, {}, {
style: vue.StyleValue;
size: string | number;
tag: string;
rounded: string | number | boolean;
fillDot: boolean;
hideDot: boolean;
hideOpposite: boolean;
}>;
__isFragment?: undefined;
__isTeleport?: undefined;
__isSuspense?: undefined;
} & vue.ComponentOptionsBase<{
style: vue.StyleValue;
size: string | number;
tag: string;
fillDot: boolean;
hideDot: 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;
icon?: IconValue | undefined;
elevation?: string | number | undefined;
rounded?: string | number | boolean | undefined;
density?: "default" | "compact" | undefined;
lineInset?: string | number | undefined;
dotColor?: string | undefined;
iconColor?: string | undefined;
hideOpposite?: boolean | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
icon?: (() => vue.VNodeChild) | undefined;
opposite?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
icon?: false | (() => vue.VNodeChild) | undefined;
opposite?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:icon"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:opposite"?: false | (() => vue.VNodeChild) | undefined;
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Record<string, any>, string, {
style: vue.StyleValue;
size: string | number;
tag: string;
rounded: string | number | boolean;
fillDot: boolean;
hideDot: boolean;
hideOpposite: boolean;
}, {}, string, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
icon: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
opposite: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & FilterPropsOptions<{
tag: {
type: StringConstructor;
default: string;
};
size: {
type: (StringConstructor | NumberConstructor)[];
default: string;
};
rounded: {
type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
default: undefined;
};
elevation: {
type: (StringConstructor | NumberConstructor)[];
validator(v: any): boolean;
};
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;
};
density: PropType<"default" | "compact">;
dotColor: StringConstructor;
fillDot: BooleanConstructor;
hideDot: BooleanConstructor;
hideOpposite: {
type: BooleanConstructor;
default: undefined;
};
icon: PropType<IconValue>;
iconColor: StringConstructor;
lineInset: (StringConstructor | NumberConstructor)[];
}, vue.ExtractPropTypes<{
tag: {
type: StringConstructor;
default: string;
};
size: {
type: (StringConstructor | NumberConstructor)[];
default: string;
};
rounded: {
type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
default: undefined;
};
elevation: {
type: (StringConstructor | NumberConstructor)[];
validator(v: any): boolean;
};
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;
};
density: PropType<"default" | "compact">;
dotColor: StringConstructor;
fillDot: BooleanConstructor;
hideDot: BooleanConstructor;
hideOpposite: {
type: BooleanConstructor;
default: undefined;
};
icon: PropType<IconValue>;
iconColor: StringConstructor;
lineInset: (StringConstructor | NumberConstructor)[];
}>>;
type VTimelineItem = InstanceType<typeof VTimelineItem>;
export { VTimeline, VTimelineItem };

View File

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

View File

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