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

403
VApp/node_modules/vuetify/lib/components/VBtn/VBtn.css generated vendored Normal file
View File

@ -0,0 +1,403 @@
.v-btn {
align-items: center;
border-radius: 4px;
display: inline-grid;
grid-template-areas: "prepend content append";
grid-template-columns: max-content auto max-content;
font-weight: 500;
justify-content: center;
letter-spacing: 0.0892857143em;
line-height: normal;
max-width: 100%;
outline: none;
position: relative;
text-decoration: none;
text-indent: 0.0892857143em;
text-transform: uppercase;
transition-property: box-shadow, transform, opacity, background;
transition-duration: 0.28s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
user-select: none;
vertical-align: middle;
flex-shrink: 0;
border-color: rgba(var(--v-border-color), var(--v-border-opacity));
border-style: solid;
border-width: 0;
}
.v-btn--size-x-small {
--v-btn-size: 0.625rem;
--v-btn-height: 20px;
font-size: var(--v-btn-size);
min-width: 36px;
padding: 0 8px;
}
.v-btn--size-small {
--v-btn-size: 0.75rem;
--v-btn-height: 28px;
font-size: var(--v-btn-size);
min-width: 50px;
padding: 0 12px;
}
.v-btn--size-default {
--v-btn-size: 0.875rem;
--v-btn-height: 36px;
font-size: var(--v-btn-size);
min-width: 64px;
padding: 0 16px;
}
.v-btn--size-large {
--v-btn-size: 1rem;
--v-btn-height: 44px;
font-size: var(--v-btn-size);
min-width: 78px;
padding: 0 20px;
}
.v-btn--size-x-large {
--v-btn-size: 1.125rem;
--v-btn-height: 52px;
font-size: var(--v-btn-size);
min-width: 92px;
padding: 0 24px;
}
.v-btn.v-btn--density-default {
height: calc(var(--v-btn-height) + 0px);
}
.v-btn.v-btn--density-comfortable {
height: calc(var(--v-btn-height) + -8px);
}
.v-btn.v-btn--density-compact {
height: calc(var(--v-btn-height) + -12px);
}
.v-btn--border {
border-width: thin;
box-shadow: none;
}
.v-btn--absolute {
position: absolute;
}
.v-btn--fixed {
position: fixed;
}
.v-btn:hover > .v-btn__overlay {
opacity: calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier));
}
.v-btn:focus-visible > .v-btn__overlay {
opacity: calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier));
}
@supports not selector(:focus-visible) {
.v-btn:focus > .v-btn__overlay {
opacity: calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier));
}
}
.v-btn--active > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true] > .v-btn__overlay {
opacity: calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier));
}
.v-btn--active:hover > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true]:hover > .v-btn__overlay {
opacity: calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier));
}
.v-btn--active:focus-visible > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true]:focus-visible > .v-btn__overlay {
opacity: calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier));
}
@supports not selector(:focus-visible) {
.v-btn--active:focus > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true]:focus > .v-btn__overlay {
opacity: calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier));
}
}
.v-btn--variant-plain, .v-btn--variant-outlined, .v-btn--variant-text, .v-btn--variant-tonal {
background: transparent;
color: inherit;
}
.v-btn--variant-plain {
opacity: 0.62;
}
.v-btn--variant-plain:focus, .v-btn--variant-plain:hover {
opacity: 1;
}
.v-btn--variant-plain .v-btn__overlay {
display: none;
}
.v-btn--variant-elevated, .v-btn--variant-flat {
background: rgb(var(--v-theme-surface));
color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));
}
.v-btn--variant-elevated {
box-shadow: 0px 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 2px 2px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 5px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
}
.v-btn--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-btn--variant-outlined {
border: thin solid currentColor;
}
.v-btn--variant-text .v-btn__overlay {
background: currentColor;
}
.v-btn--variant-tonal .v-btn__underlay {
background: currentColor;
opacity: var(--v-activated-opacity);
border-radius: inherit;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
pointer-events: none;
}
@supports selector(:focus-visible) {
.v-btn::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
border: 2px solid currentColor;
border-radius: inherit;
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
.v-btn:focus-visible::after {
opacity: calc(0.25 * var(--v-theme-overlay-multiplier));
}
}
.v-btn--icon {
border-radius: 50%;
min-width: 0;
padding: 0;
}
.v-btn--icon.v-btn--size-default {
--v-btn-size: 1rem;
}
.v-btn--icon.v-btn--density-default {
width: calc(var(--v-btn-height) + 12px);
height: calc(var(--v-btn-height) + 12px);
}
.v-btn--icon.v-btn--density-comfortable {
width: calc(var(--v-btn-height) + 0px);
height: calc(var(--v-btn-height) + 0px);
}
.v-btn--icon.v-btn--density-compact {
width: calc(var(--v-btn-height) + -8px);
height: calc(var(--v-btn-height) + -8px);
}
.v-btn--elevated:hover, .v-btn--elevated:focus {
box-shadow: 0px 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 4px 5px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 10px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
}
.v-btn--elevated:active {
box-shadow: 0px 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
}
.v-btn--flat {
box-shadow: none;
}
.v-btn--block {
display: flex;
flex: 1 0 auto;
min-width: 100%;
}
.v-btn--disabled {
pointer-events: none;
opacity: 0.26;
}
.v-btn--disabled:hover {
opacity: 0.26;
}
.v-btn--disabled.v-btn--variant-elevated, .v-btn--disabled.v-btn--variant-flat {
box-shadow: none;
opacity: 1;
color: rgba(var(--v-theme-on-surface), 0.26);
background: rgb(var(--v-theme-surface));
}
.v-btn--disabled.v-btn--variant-elevated .v-btn__overlay, .v-btn--disabled.v-btn--variant-flat .v-btn__overlay {
opacity: 0.4615384615;
}
.v-btn--loading {
pointer-events: none;
}
.v-btn--loading .v-btn__content,
.v-btn--loading .v-btn__prepend,
.v-btn--loading .v-btn__append {
opacity: 0;
}
.v-btn--stacked {
grid-template-areas: "prepend" "content" "append";
grid-template-columns: auto;
grid-template-rows: max-content max-content max-content;
justify-items: center;
align-content: center;
}
.v-btn--stacked .v-btn__content {
flex-direction: column;
line-height: 1.25;
}
.v-btn--stacked .v-btn__prepend,
.v-btn--stacked .v-btn__append,
.v-btn--stacked .v-btn__content > .v-icon--start,
.v-btn--stacked .v-btn__content > .v-icon--end {
margin-inline: 0;
}
.v-btn--stacked .v-btn__prepend,
.v-btn--stacked .v-btn__content > .v-icon--start {
margin-bottom: 4px;
}
.v-btn--stacked .v-btn__append,
.v-btn--stacked .v-btn__content > .v-icon--end {
margin-top: 4px;
}
.v-btn--stacked.v-btn--size-x-small {
--v-btn-size: 0.625rem;
--v-btn-height: 56px;
font-size: var(--v-btn-size);
min-width: 56px;
padding: 0 12px;
}
.v-btn--stacked.v-btn--size-small {
--v-btn-size: 0.75rem;
--v-btn-height: 64px;
font-size: var(--v-btn-size);
min-width: 64px;
padding: 0 14px;
}
.v-btn--stacked.v-btn--size-default {
--v-btn-size: 0.875rem;
--v-btn-height: 72px;
font-size: var(--v-btn-size);
min-width: 72px;
padding: 0 16px;
}
.v-btn--stacked.v-btn--size-large {
--v-btn-size: 1rem;
--v-btn-height: 80px;
font-size: var(--v-btn-size);
min-width: 80px;
padding: 0 18px;
}
.v-btn--stacked.v-btn--size-x-large {
--v-btn-size: 1.125rem;
--v-btn-height: 88px;
font-size: var(--v-btn-size);
min-width: 88px;
padding: 0 20px;
}
.v-btn--stacked.v-btn--density-default {
height: calc(var(--v-btn-height) + 0px);
}
.v-btn--stacked.v-btn--density-comfortable {
height: calc(var(--v-btn-height) + -16px);
}
.v-btn--stacked.v-btn--density-compact {
height: calc(var(--v-btn-height) + -24px);
}
.v-btn--slim {
padding: 0 8px;
}
.v-btn--rounded {
border-radius: 24px;
}
.v-btn--rounded.v-btn--icon {
border-radius: 4px;
}
.v-btn .v-icon {
--v-icon-size-multiplier: 0.8571428571;
}
.v-btn--icon .v-icon {
--v-icon-size-multiplier: 1;
}
.v-btn--stacked .v-icon {
--v-icon-size-multiplier: 1.1428571429;
}
.v-btn__loader {
align-items: center;
display: flex;
height: 100%;
justify-content: center;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.v-btn__content,
.v-btn__prepend,
.v-btn__append {
align-items: center;
display: flex;
transition: transform, opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.v-btn__prepend {
grid-area: prepend;
margin-inline: calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5);
}
.v-btn__append {
grid-area: append;
margin-inline: calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9);
}
.v-btn__content {
grid-area: content;
justify-content: center;
white-space: nowrap;
}
.v-btn__content > .v-icon--start {
margin-inline: calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5);
}
.v-btn__content > .v-icon--end {
margin-inline: calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9);
}
.v-btn--stacked .v-btn__content {
white-space: normal;
}
.v-btn__overlay {
background-color: currentColor;
border-radius: inherit;
opacity: 0;
transition: opacity 0.2s ease-in-out;
}
.v-btn__overlay,
.v-btn__underlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
}
.v-card-actions .v-btn ~ .v-btn:not(.v-btn-toggle .v-btn) {
margin-inline-start: 0.5rem;
}
.v-pagination .v-btn {
border-radius: 4px;
}
.v-pagination .v-btn--rounded {
border-radius: 50%;
}
.v-btn__overlay {
transition: none;
}
.v-pagination__item--is-active .v-btn__overlay {
opacity: var(--v-border-opacity);
}

231
VApp/node_modules/vuetify/lib/components/VBtn/VBtn.mjs generated vendored Normal file
View File

@ -0,0 +1,231 @@
import { withDirectives as _withDirectives, resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
// Styles
import "./VBtn.css";
// Components
import { VBtnToggleSymbol } from "../VBtnToggle/VBtnToggle.mjs";
import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
import { VIcon } from "../VIcon/index.mjs";
import { VProgressCircular } from "../VProgressCircular/index.mjs"; // Composables
import { makeBorderProps, useBorder } from "../../composables/border.mjs";
import { makeComponentProps } from "../../composables/component.mjs";
import { makeDensityProps, useDensity } from "../../composables/density.mjs";
import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
import { makeElevationProps, useElevation } from "../../composables/elevation.mjs";
import { makeGroupItemProps, useGroupItem } from "../../composables/group.mjs";
import { IconValue } from "../../composables/icons.mjs";
import { makeLoaderProps, useLoader } from "../../composables/loader.mjs";
import { makeLocationProps, useLocation } from "../../composables/location.mjs";
import { makePositionProps, usePosition } from "../../composables/position.mjs";
import { makeRoundedProps, useRounded } from "../../composables/rounded.mjs";
import { makeRouterProps, useLink } from "../../composables/router.mjs";
import { useSelectLink } from "../../composables/selectLink.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"; // Directives
import { Ripple } from "../../directives/ripple/index.mjs"; // Utilities
import { computed } from 'vue';
import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
export const makeVBtnProps = propsFactory({
active: {
type: Boolean,
default: undefined
},
symbol: {
type: null,
default: VBtnToggleSymbol
},
flat: Boolean,
icon: [Boolean, String, Function, Object],
prependIcon: IconValue,
appendIcon: IconValue,
block: Boolean,
slim: Boolean,
stacked: Boolean,
ripple: {
type: [Boolean, Object],
default: true
},
text: String,
...makeBorderProps(),
...makeComponentProps(),
...makeDensityProps(),
...makeDimensionProps(),
...makeElevationProps(),
...makeGroupItemProps(),
...makeLoaderProps(),
...makeLocationProps(),
...makePositionProps(),
...makeRoundedProps(),
...makeRouterProps(),
...makeSizeProps(),
...makeTagProps({
tag: 'button'
}),
...makeThemeProps(),
...makeVariantProps({
variant: 'elevated'
})
}, 'VBtn');
export const VBtn = genericComponent()({
name: 'VBtn',
directives: {
Ripple
},
props: makeVBtnProps(),
emits: {
'group:selected': val => true
},
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
themeClasses
} = provideTheme(props);
const {
borderClasses
} = useBorder(props);
const {
colorClasses,
colorStyles,
variantClasses
} = useVariant(props);
const {
densityClasses
} = useDensity(props);
const {
dimensionStyles
} = useDimension(props);
const {
elevationClasses
} = useElevation(props);
const {
loaderClasses
} = useLoader(props);
const {
locationStyles
} = useLocation(props);
const {
positionClasses
} = usePosition(props);
const {
roundedClasses
} = useRounded(props);
const {
sizeClasses,
sizeStyles
} = useSize(props);
const group = useGroupItem(props, props.symbol, false);
const link = useLink(props, attrs);
const isActive = computed(() => {
if (props.active !== undefined) {
return props.active;
}
if (link.isLink.value) {
return link.isActive?.value;
}
return group?.isSelected.value;
});
const isDisabled = computed(() => group?.disabled.value || props.disabled);
const isElevated = computed(() => {
return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
});
const valueAttr = computed(() => {
if (props.value === undefined || typeof props.value === 'symbol') return undefined;
return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
});
function onClick(e) {
if (isDisabled.value || link.isLink.value && (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0 || attrs.target === '_blank')) return;
link.navigate?.(e);
group?.toggle();
}
useSelectLink(link, group?.select);
useRender(() => {
const Tag = link.isLink.value ? 'a' : props.tag;
const hasPrepend = !!(props.prependIcon || slots.prepend);
const hasAppend = !!(props.appendIcon || slots.append);
const hasIcon = !!(props.icon && props.icon !== true);
const hasColor = group?.isSelected.value && (!link.isLink.value || link.isActive?.value) || !group || link.isActive?.value;
return _withDirectives(_createVNode(Tag, {
"type": Tag === 'a' ? undefined : 'button',
"class": ['v-btn', group?.selectedClass.value, {
'v-btn--active': isActive.value,
'v-btn--block': props.block,
'v-btn--disabled': isDisabled.value,
'v-btn--elevated': isElevated.value,
'v-btn--flat': props.flat,
'v-btn--icon': !!props.icon,
'v-btn--loading': props.loading,
'v-btn--slim': props.slim,
'v-btn--stacked': props.stacked
}, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
"style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
"disabled": isDisabled.value || undefined,
"href": link.href.value,
"onClick": onClick,
"value": valueAttr.value
}, {
default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && _createVNode("span", {
"key": "prepend",
"class": "v-btn__prepend"
}, [!slots.prepend ? _createVNode(VIcon, {
"key": "prepend-icon",
"icon": props.prependIcon
}, null) : _createVNode(VDefaultsProvider, {
"key": "prepend-defaults",
"disabled": !props.prependIcon,
"defaults": {
VIcon: {
icon: props.prependIcon
}
}
}, slots.prepend)]), _createVNode("span", {
"class": "v-btn__content",
"data-no-activator": ""
}, [!slots.default && hasIcon ? _createVNode(VIcon, {
"key": "content-icon",
"icon": props.icon
}, null) : _createVNode(VDefaultsProvider, {
"key": "content-defaults",
"disabled": !hasIcon,
"defaults": {
VIcon: {
icon: props.icon
}
}
}, {
default: () => [slots.default?.() ?? props.text]
})]), !props.icon && hasAppend && _createVNode("span", {
"key": "append",
"class": "v-btn__append"
}, [!slots.append ? _createVNode(VIcon, {
"key": "append-icon",
"icon": props.appendIcon
}, null) : _createVNode(VDefaultsProvider, {
"key": "append-defaults",
"disabled": !props.appendIcon,
"defaults": {
VIcon: {
icon: props.appendIcon
}
}
}, slots.append)]), !!props.loading && _createVNode("span", {
"key": "loader",
"class": "v-btn__loader"
}, [slots.loader?.() ?? _createVNode(VProgressCircular, {
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
"indeterminate": true,
"size": "23",
"width": "2"
}, null)])]
}), [[_resolveDirective("ripple"), !isDisabled.value && props.ripple, null]]);
});
return {
group
};
}
});
//# sourceMappingURL=VBtn.mjs.map

File diff suppressed because one or more lines are too long

236
VApp/node_modules/vuetify/lib/components/VBtn/VBtn.sass generated vendored Normal file
View File

@ -0,0 +1,236 @@
@use 'sass:math'
@use 'sass:map'
@use '../../styles/settings'
@use '../../styles/tools'
@use './mixins' as *
@use './variables' as *
.v-btn
align-items: center
border-radius: $button-border-radius
display: inline-grid
grid-template-areas: "prepend content append"
grid-template-columns: max-content auto max-content
font-weight: $button-font-weight
justify-content: center
letter-spacing: $button-text-letter-spacing
line-height: $button-line-height
max-width: $button-max-width
outline: none
position: relative
text-decoration: none
text-indent: $button-text-letter-spacing
text-transform: $button-text-transform
transition-property: $button-transition-property
transition-duration: 0.28s
transition-timing-function: settings.$standard-easing
user-select: none
vertical-align: $button-vertical-align
flex-shrink: 0
@at-root
@include button-sizes()
@include button-density('height', $button-density)
@include tools.border($button-border...)
@include tools.position($button-positions)
@include tools.states('.v-btn__overlay')
@include tools.variant($button-variants...)
@supports selector(:focus-visible)
&::after
@include tools.absolute(true)
pointer-events: none
border: 2px solid currentColor
border-radius: inherit
opacity: 0
transition: opacity .2s ease-in-out
&:focus-visible::after
opacity: calc(.25 * var(--v-theme-overlay-multiplier))
&--icon
border-radius: $button-icon-border-radius
min-width: 0
padding: 0
// ensure that default
// v-icon size is 24px
&.v-btn--size-default
--v-btn-size: #{$button-icon-font-size}
@at-root &
@include button-density(('width', 'height'), $button-icon-density)
&--elevated
&:hover,
&:focus
+tools.elevation(map.get($button-elevation, 'hover'))
&:active
+tools.elevation(map.get($button-elevation, 'active'))
&--flat
box-shadow: none
&--block
display: flex
flex: 1 0 auto
min-width: 100%
&--disabled
pointer-events: none
@if ($button-colored-disabled)
opacity: $button-disabled-opacity
&:hover
opacity: $button-disabled-opacity
@else
opacity: 1
&.v-btn
// specificity has to be higher to override theme !important
color: rgba(var(--v-theme-on-surface), $button-disabled-opacity) !important
&.v-btn--variant-elevated,
&.v-btn--variant-flat
box-shadow: none
@if ($button-colored-disabled)
opacity: 1
color: rgba(var(--v-theme-on-surface), $button-disabled-opacity)
background: rgb(var(--v-theme-surface))
@else
background: rgb(var(--v-theme-surface)) !important
.v-btn__overlay
// __overlay uses currentColor, so we need to divide
// by the text opacity to get the correct value
opacity: math.div($button-disabled-overlay, $button-disabled-opacity)
&--loading
pointer-events: none
.v-btn__content,
.v-btn__prepend,
.v-btn__append
opacity: 0
&--stacked
grid-template-areas: "prepend" "content" "append"
grid-template-columns: auto
grid-template-rows: max-content max-content max-content
justify-items: center
align-content: center
.v-btn__content
flex-direction: column
line-height: $button-stacked-line-height
.v-btn__prepend,
.v-btn__append,
.v-btn__content > .v-icon--start,
.v-btn__content > .v-icon--end
margin-inline: 0
.v-btn__prepend,
.v-btn__content > .v-icon--start
margin-bottom: $button-stacked-icon-margin
.v-btn__append,
.v-btn__content > .v-icon--end
margin-top: $button-stacked-icon-margin
@at-root
@include button-sizes($button-stacked-sizes, true)
@include button-density('height', $button-stacked-density)
&--slim
padding: $button-slim-padding
&--rounded
@include tools.rounded($button-rounded-border-radius)
&.v-btn--icon
@include tools.rounded($button-border-radius)
.v-icon
--v-icon-size-multiplier: #{calc(18/21)}
&--icon
.v-icon
--v-icon-size-multiplier: 1
&--stacked
.v-icon
--v-icon-size-multiplier: #{calc(24/21)}
.v-btn__loader
align-items: center
display: flex
height: 100%
justify-content: center
left: 0
position: absolute
top: 0
width: 100%
.v-btn__content,
.v-btn__prepend,
.v-btn__append
align-items: center
display: flex
transition: $button-content-transition
.v-btn__prepend
grid-area: prepend
margin-inline: $button-margin-start $button-margin-end
.v-btn__append
grid-area: append
margin-inline: $button-margin-end $button-margin-start
.v-btn__content
grid-area: content
justify-content: center
white-space: $button-white-space
> .v-icon--start
margin-inline: $button-margin-start $button-margin-end
> .v-icon--end
margin-inline: $button-margin-end $button-margin-start
.v-btn--stacked &
white-space: normal
.v-btn__overlay
background-color: currentColor
border-radius: inherit
opacity: 0
transition: opacity .2s ease-in-out
.v-btn__overlay,
.v-btn__underlay
@include tools.absolute()
pointer-events: none
// VCard
.v-btn
~ .v-btn:not(.v-btn-toggle .v-btn)
.v-card-actions &
margin-inline-start: $button-card-actions-margin
// VPagination
.v-btn
.v-pagination &
@include tools.rounded($button-pagination-border-radius)
&--rounded
.v-pagination &
@include tools.rounded($button-pagination-rounded-border-radius)
&__overlay
transition: none
.v-pagination__item--is-active &
opacity: $button-pagination-active-overlay-opacity

View File

@ -0,0 +1,38 @@
@use 'sass:math';
@use 'sass:map';
@use 'sass:meta';
@use '../../styles/settings';
@use '../../styles/tools';
@use './variables' as *;
@mixin button-sizes ($map: $button-sizes, $immediate: false) {
@each $sizeName, $multiplier in settings.$size-scales {
$size: map.get($map, 'font-size') + math.div(2 * $multiplier, 16);
$height: map.get($map, 'height') + (settings.$size-scale * $multiplier);
#{if($immediate, &, '')}.v-btn--size-#{$sizeName} {
--v-btn-size: #{$size};
--v-btn-height: #{$height};
font-size: var(--v-btn-size);
min-width: tools.roundEven($height * map.get($map, 'width-ratio'));
padding: 0 tools.roundEven(math.div($height, map.get($map, 'padding-ratio')));
}
}
}
@mixin button-density ($properties, $densities) {
@each $density, $multiplier in $densities {
$value: calc(var(--v-btn-height) + #{$multiplier * settings.$spacer});
&.v-btn--density-#{$density} {
@if meta.type-of($properties) == "list" {
@each $property in $properties {
#{$property}: $value;
}
}
@else {
#{$properties}: $value;
}
}
}
}

View File

@ -0,0 +1,95 @@
@use 'sass:math';
@use 'sass:map';
@use '../../styles/settings';
@use '../../styles/tools';
// Defaults
// if false, disabled buttons will be greyed out
$button-colored-disabled: true !default;
$button-background: rgb(var(--v-theme-surface)) !default;
$button-color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)) !default;
$button-banner-actions-padding: 0 8px !default; // @deprecated
$button-pagination-active-overlay-opacity: var(--v-border-opacity) !default;
$button-pagination-border-radius: settings.$border-radius-root !default;
$button-pagination-rounded-border-radius: map.get(settings.$rounded, 'circle') !default;
$button-border-color: settings.$border-color-root !default;
$button-border-radius: settings.$border-radius-root !default;
$button-border-style: settings.$border-style-root !default;
$button-border-thin-width: thin !default;
$button-border-width: 0 !default;
$button-card-actions-margin: .5rem !default;
$button-card-actions-padding: 0 8px !default; // @deprecated
$button-content-transition: transform, opacity .2s settings.$standard-easing !default;
$button-disabled-opacity: 0.26 !default;
$button-disabled-overlay: 0.12 !default;
$button-elevation: ('default': 2, 'hover': 4, 'active': 8) !default;
$button-font-size: tools.map-deep-get(settings.$typography, 'button', 'size') !default;
$button-font-weight: tools.map-deep-get(settings.$typography, 'button', 'weight') !default;
$button-height: 36px !default;
$button-stacked-height: 72px !default;
$button-stacked-icon-margin: 4px !default;
$button-icon-border-radius: map.get(settings.$rounded, 'circle') !default;
$button-icon-font-size: 1rem !default;
$button-line-height: normal !default;
$button-stacked-line-height: 1.25 !default;
$button-plain-opacity: .62 !default;
$button-padding-ratio: 2.25 !default;
$button-stacked-padding-ratio: 4.5 !default;
$button-margin-start-multiplier: -9 !default;
$button-margin-end-multiplier: 4.5 !default;
$button-margin-start: calc(var(--v-btn-height) / #{$button-margin-start-multiplier}) !default;
$button-margin-end: calc(var(--v-btn-height) / #{$button-margin-end-multiplier}) !default;
$button-max-width: 100% !default;
$button-positions: absolute fixed !default;
$button-text-letter-spacing: tools.map-deep-get(settings.$typography, 'button', 'letter-spacing') !default;
$button-text-transform: tools.map-deep-get(settings.$typography, 'button', 'text-transform') !default;
$button-transition-property: box-shadow, transform, opacity, background !default;
$button-vertical-align: middle !default;
$button-width-ratio: math.div(16, 9) !default;
$button-snackbar-action-padding: 0 8px !default; // @deprecated
$button-slim-padding: 0 8px !default;
$button-stacked-width-ratio: 1 !default;
$button-rounded-border-radius: map.get(settings.$rounded, 'xl') !default;
$button-white-space: nowrap !default;
$button-density: ('default': 0, 'comfortable': -2, 'compact': -3) !default;
$button-stacked-density: ('default': 0, 'comfortable': -4, 'compact': -6) !default;
$button-icon-density: ('default': 3, 'comfortable': 0, 'compact': -2) !default;
$button-border: (
$button-border-color,
$button-border-style,
$button-border-width,
$button-border-thin-width
) !default;
$button-sizes: () !default;
$button-sizes: map.merge(
(
'height': $button-height,
'font-size': $button-font-size,
'width-ratio': $button-width-ratio,
'padding-ratio': $button-padding-ratio
),
$button-sizes
);
$button-stacked-sizes: () !default;
$button-stacked-sizes: map.merge(
(
'height': $button-stacked-height,
'font-size': $button-font-size,
'width-ratio': $button-stacked-width-ratio,
'padding-ratio': $button-stacked-padding-ratio
),
$button-stacked-sizes
);
$button-variants: (
$button-background,
$button-color,
map.get($button-elevation, 'default'),
$button-plain-opacity,
'v-btn'
) !default;

View File

@ -0,0 +1,586 @@
import * as vue from 'vue';
import { ComponentPropsOptions, ExtractPropTypes, ComponentInternalInstance, Ref, ComputedRef, JSXComponent, PropType } from 'vue';
// @ts-ignore
import * as vue_router from 'vue-router';
declare const block: readonly ["top", "bottom"];
declare const inline: readonly ["start", "end", "left", "right"];
type Tblock = typeof block[number];
type Tinline = typeof inline[number];
type Anchor = Tblock | Tinline | 'center' | 'center center' | `${Tblock} ${Tinline | 'center'}` | `${Tinline} ${Tblock | 'center'}`;
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>>;
}
interface GroupItem {
id: number;
value: Ref<unknown>;
disabled: Ref<boolean | undefined>;
}
interface GroupProvide {
register: (item: GroupItem, cmp: ComponentInternalInstance) => void;
unregister: (id: number) => void;
select: (id: number, value: boolean) => void;
selected: Ref<Readonly<number[]>>;
isSelected: (id: number) => boolean;
prev: () => void;
next: () => void;
selectedClass: Ref<string | undefined>;
items: ComputedRef<{
id: number;
value: unknown;
disabled: boolean | undefined;
}[]>;
disabled: Ref<boolean | undefined>;
getItemIndex: (value: unknown) => number;
}
interface GroupItemProvide {
id: number;
isSelected: Ref<boolean>;
toggle: () => void;
select: (value: boolean) => void;
selectedClass: Ref<(string | undefined)[] | false>;
value: Ref<unknown>;
disabled: Ref<boolean | undefined>;
group: GroupProvide;
}
type Density = null | 'default' | 'comfortable' | 'compact';
type IconValue = string | (string | [path: string, opacity: number])[] | JSXComponent;
declare const IconValue: PropType<IconValue>;
declare const VBtn: {
new (...args: any[]): vue.CreateComponentPublicInstance<{
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
} & {
location?: Anchor | undefined;
height?: string | number | undefined;
width?: string | number | undefined;
active?: boolean | undefined;
border?: string | number | boolean | undefined;
color?: string | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
position?: "fixed" | "absolute" | "static" | "sticky" | "relative" | undefined;
value?: any;
loading?: string | boolean | undefined;
text?: string | undefined;
class?: any;
icon?: boolean | IconValue | undefined;
href?: string | undefined;
elevation?: string | number | undefined;
to?: vue_router.RouteLocationRaw | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
selectedClass?: string | undefined;
prependIcon?: IconValue | undefined;
appendIcon?: IconValue | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
prepend?: (() => vue.VNodeChild) | undefined;
append?: (() => vue.VNodeChild) | undefined;
loader?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
prepend?: false | (() => vue.VNodeChild) | undefined;
append?: false | (() => vue.VNodeChild) | undefined;
loader?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:prepend"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:append"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:loader"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onGroup:selected"?: ((val: {
value: boolean;
}) => any) | undefined;
}, {
group: GroupItemProvide | null;
}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
'group:selected': (val: {
value: boolean;
}) => true;
}, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & {
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
} & {
location?: Anchor | undefined;
height?: string | number | undefined;
width?: string | number | undefined;
active?: boolean | undefined;
border?: string | number | boolean | undefined;
color?: string | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
position?: "fixed" | "absolute" | "static" | "sticky" | "relative" | undefined;
value?: any;
loading?: string | boolean | undefined;
text?: string | undefined;
class?: any;
icon?: boolean | IconValue | undefined;
href?: string | undefined;
elevation?: string | number | undefined;
to?: vue_router.RouteLocationRaw | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
selectedClass?: string | undefined;
prependIcon?: IconValue | undefined;
appendIcon?: IconValue | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
prepend?: (() => vue.VNodeChild) | undefined;
append?: (() => vue.VNodeChild) | undefined;
loader?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
prepend?: false | (() => vue.VNodeChild) | undefined;
append?: false | (() => vue.VNodeChild) | undefined;
loader?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:prepend"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:append"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:loader"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onGroup:selected"?: ((val: {
value: boolean;
}) => any) | undefined;
}, {
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
active: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
rounded: string | number | boolean;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
}, true, {}, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
prepend: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
append: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
loader: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>, {
P: {};
B: {};
D: {};
C: {};
M: {};
Defaults: {};
}, {
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
} & {
location?: Anchor | undefined;
height?: string | number | undefined;
width?: string | number | undefined;
active?: boolean | undefined;
border?: string | number | boolean | undefined;
color?: string | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
position?: "fixed" | "absolute" | "static" | "sticky" | "relative" | undefined;
value?: any;
loading?: string | boolean | undefined;
text?: string | undefined;
class?: any;
icon?: boolean | IconValue | undefined;
href?: string | undefined;
elevation?: string | number | undefined;
to?: vue_router.RouteLocationRaw | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
selectedClass?: string | undefined;
prependIcon?: IconValue | undefined;
appendIcon?: IconValue | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
prepend?: (() => vue.VNodeChild) | undefined;
append?: (() => vue.VNodeChild) | undefined;
loader?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
prepend?: false | (() => vue.VNodeChild) | undefined;
append?: false | (() => vue.VNodeChild) | undefined;
loader?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:prepend"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:append"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:loader"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onGroup:selected"?: ((val: {
value: boolean;
}) => any) | undefined;
}, {
group: GroupItemProvide | null;
}, {}, {}, {}, {
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
active: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
rounded: string | number | boolean;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
}>;
__isFragment?: undefined;
__isTeleport?: undefined;
__isSuspense?: undefined;
} & vue.ComponentOptionsBase<{
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
} & {
location?: Anchor | undefined;
height?: string | number | undefined;
width?: string | number | undefined;
active?: boolean | undefined;
border?: string | number | boolean | undefined;
color?: string | undefined;
maxHeight?: string | number | undefined;
maxWidth?: string | number | undefined;
minHeight?: string | number | undefined;
minWidth?: string | number | undefined;
position?: "fixed" | "absolute" | "static" | "sticky" | "relative" | undefined;
value?: any;
loading?: string | boolean | undefined;
text?: string | undefined;
class?: any;
icon?: boolean | IconValue | undefined;
href?: string | undefined;
elevation?: string | number | undefined;
to?: vue_router.RouteLocationRaw | undefined;
theme?: string | undefined;
rounded?: string | number | boolean | undefined;
selectedClass?: string | undefined;
prependIcon?: IconValue | undefined;
appendIcon?: IconValue | undefined;
} & {
$children?: vue.VNodeChild | (() => vue.VNodeChild) | {
default?: (() => vue.VNodeChild) | undefined;
prepend?: (() => vue.VNodeChild) | undefined;
append?: (() => vue.VNodeChild) | undefined;
loader?: (() => vue.VNodeChild) | undefined;
};
'v-slots'?: {
default?: false | (() => vue.VNodeChild) | undefined;
prepend?: false | (() => vue.VNodeChild) | undefined;
append?: false | (() => vue.VNodeChild) | undefined;
loader?: false | (() => vue.VNodeChild) | undefined;
} | undefined;
} & {
"v-slot:default"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:prepend"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:append"?: false | (() => vue.VNodeChild) | undefined;
"v-slot:loader"?: false | (() => vue.VNodeChild) | undefined;
} & {
"onGroup:selected"?: ((val: {
value: boolean;
}) => any) | undefined;
}, {
group: GroupItemProvide | null;
}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
'group:selected': (val: {
value: boolean;
}) => true;
}, string, {
symbol: any;
replace: boolean;
flat: boolean;
variant: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
exact: boolean;
block: boolean;
active: boolean;
style: vue.StyleValue;
disabled: boolean;
size: string | number;
tag: string;
rounded: string | number | boolean;
density: Density;
slim: boolean;
stacked: boolean;
ripple: boolean | {
class: string;
} | undefined;
}, {}, string, vue.SlotsType<Partial<{
default: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
prepend: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
append: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
loader: () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>[];
}>>> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & FilterPropsOptions<{
color: StringConstructor;
variant: Omit<{
type: PropType<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
default: string;
validator: (v: any) => boolean;
}, "type" | "default"> & {
type: PropType<NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">>;
default: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
};
theme: StringConstructor;
tag: Omit<{
type: StringConstructor;
default: string;
}, "type" | "default"> & {
type: PropType<string>;
default: string;
};
size: {
type: (StringConstructor | NumberConstructor)[];
default: string;
};
href: StringConstructor;
replace: BooleanConstructor;
to: PropType<vue_router.RouteLocationRaw>;
exact: BooleanConstructor;
rounded: {
type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
default: undefined;
};
position: {
type: PropType<"fixed" | "absolute" | "static" | "sticky" | "relative">;
validator: (v: any) => boolean;
};
location: PropType<Anchor>;
loading: (StringConstructor | BooleanConstructor)[];
value: null;
disabled: BooleanConstructor;
selectedClass: StringConstructor;
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)[];
density: {
type: PropType<Density>;
default: string;
validator: (v: any) => boolean;
};
class: PropType<any>;
style: {
type: PropType<vue.StyleValue>;
default: null;
};
border: (StringConstructor | BooleanConstructor | NumberConstructor)[];
active: {
type: BooleanConstructor;
default: undefined;
};
symbol: {
type: null;
default: vue.InjectionKey<GroupProvide>;
};
flat: BooleanConstructor;
icon: PropType<boolean | IconValue>;
prependIcon: PropType<IconValue>;
appendIcon: PropType<IconValue>;
block: BooleanConstructor;
slim: BooleanConstructor;
stacked: BooleanConstructor;
ripple: {
type: PropType<boolean | {
class: string;
} | undefined>;
default: boolean;
};
text: StringConstructor;
}, vue.ExtractPropTypes<{
color: StringConstructor;
variant: Omit<{
type: PropType<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
default: string;
validator: (v: any) => boolean;
}, "type" | "default"> & {
type: PropType<NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">>;
default: NonNullable<"flat" | "text" | "elevated" | "tonal" | "outlined" | "plain">;
};
theme: StringConstructor;
tag: Omit<{
type: StringConstructor;
default: string;
}, "type" | "default"> & {
type: PropType<string>;
default: string;
};
size: {
type: (StringConstructor | NumberConstructor)[];
default: string;
};
href: StringConstructor;
replace: BooleanConstructor;
to: PropType<vue_router.RouteLocationRaw>;
exact: BooleanConstructor;
rounded: {
type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
default: undefined;
};
position: {
type: PropType<"fixed" | "absolute" | "static" | "sticky" | "relative">;
validator: (v: any) => boolean;
};
location: PropType<Anchor>;
loading: (StringConstructor | BooleanConstructor)[];
value: null;
disabled: BooleanConstructor;
selectedClass: StringConstructor;
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)[];
density: {
type: PropType<Density>;
default: string;
validator: (v: any) => boolean;
};
class: PropType<any>;
style: {
type: PropType<vue.StyleValue>;
default: null;
};
border: (StringConstructor | BooleanConstructor | NumberConstructor)[];
active: {
type: BooleanConstructor;
default: undefined;
};
symbol: {
type: null;
default: vue.InjectionKey<GroupProvide>;
};
flat: BooleanConstructor;
icon: PropType<boolean | IconValue>;
prependIcon: PropType<IconValue>;
appendIcon: PropType<IconValue>;
block: BooleanConstructor;
slim: BooleanConstructor;
stacked: BooleanConstructor;
ripple: {
type: PropType<boolean | {
class: string;
} | undefined>;
default: boolean;
};
text: StringConstructor;
}>>;
type VBtn = InstanceType<typeof VBtn>;
export { VBtn };

View File

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

View File

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