vuetify
Version:
Vue Material Component Framework
1 lines • 13 kB
Source Map (JSON)
{"version":3,"file":"VCard.mjs","names":["VCardActions","VCardItem","VCardText","VDefaultsProvider","VImg","Ripple","genOverlays","makeVariantProps","useVariant","IconValue","LoaderSlot","makeLoaderProps","useLoader","makeBorderProps","useBorder","makeDensityProps","useDensity","makeDimensionProps","useDimension","makeElevationProps","useElevation","makeLocationProps","useLocation","makePositionProps","usePosition","makeRoundedProps","useRounded","makeRouterProps","useLink","makeTagProps","makeThemeProps","provideTheme","computed","genericComponent","useRender","VCard","name","directives","props","appendAvatar","String","appendIcon","disabled","Boolean","flat","hover","image","link","type","default","undefined","prependAvatar","prependIcon","ripple","subtitle","text","title","variant","setup","attrs","slots","themeClasses","borderClasses","colorClasses","colorStyles","variantClasses","densityClasses","dimensionStyles","elevationClasses","loaderClasses","locationStyles","positionClasses","roundedClasses","isLink","value","isClickable","Tag","tag","hasTitle","hasSubtitle","hasHeader","hasAppend","append","hasPrepend","prepend","hasImage","hasCardItem","hasText","href","navigate","cover","src","loading","loader","item","actions"],"sources":["../../../src/components/VCard/VCard.tsx"],"sourcesContent":["/* eslint-disable complexity */\n\n// Styles\nimport './VCard.sass'\n\n// Components\nimport { VCardActions } from './VCardActions'\nimport { VCardItem } from './VCardItem'\nimport { VCardText } from './VCardText'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VImg } from '@/components/VImg'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\nexport type VCardSlots = MakeSlots<{\n default: []\n actions: []\n title: []\n subtitle: []\n text: []\n loader: []\n image: []\n prepend: []\n append: []\n}>\n\nexport const VCard = genericComponent<VCardSlots>()({\n name: 'VCard',\n\n directives: { Ripple },\n\n props: {\n appendAvatar: String,\n appendIcon: IconValue,\n disabled: Boolean,\n flat: Boolean,\n hover: Boolean,\n image: String,\n link: {\n type: Boolean,\n default: undefined,\n },\n prependAvatar: String,\n prependIcon: IconValue,\n ripple: {\n type: Boolean,\n default: true,\n },\n subtitle: String,\n text: String,\n title: String,\n\n ...makeThemeProps(),\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeLoaderProps(),\n ...makeLocationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeVariantProps({ variant: 'elevated' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { loaderClasses } = useLoader(props)\n const { locationStyles } = useLocation(props)\n const { positionClasses } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const link = useLink(props, attrs)\n\n const isLink = computed(() => props.link !== false && link.isLink.value)\n const isClickable = computed(() =>\n !props.disabled &&\n props.link !== false &&\n (props.link || link.isClickable.value)\n )\n\n useRender(() => {\n const Tag = isLink.value ? 'a' : props.tag\n const hasTitle = !!(slots.title || props.title)\n const hasSubtitle = !!(slots.subtitle || props.subtitle)\n const hasHeader = hasTitle || hasSubtitle\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const hasImage = !!(slots.image || props.image)\n const hasCardItem = hasHeader || hasPrepend || hasAppend\n const hasText = !!(slots.text || props.text)\n\n return (\n <Tag\n class={[\n 'v-card',\n {\n 'v-card--disabled': props.disabled,\n 'v-card--flat': props.flat,\n 'v-card--hover': props.hover && !(props.disabled || props.flat),\n 'v-card--link': isClickable.value,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n loaderClasses.value,\n positionClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n locationStyles.value,\n ]}\n href={ link.href.value }\n onClick={ isClickable.value && link.navigate }\n v-ripple={ isClickable.value && props.ripple }\n tabindex={ props.disabled ? -1 : undefined }\n >\n { hasImage && (\n <VDefaultsProvider\n key=\"image\"\n defaults={{\n VImg: {\n cover: true,\n src: props.image,\n },\n }}\n >\n <div class=\"v-card__image\">\n { slots.image?.() ?? <VImg /> }\n </div>\n </VDefaultsProvider>\n ) }\n\n <LoaderSlot\n name=\"v-card\"\n active={ !!props.loading }\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n v-slots={{ default: slots.loader }}\n />\n\n { hasCardItem && (\n <VCardItem\n key=\"item\"\n prependAvatar={ props.prependAvatar }\n prependIcon={ props.prependIcon }\n title={ props.title }\n subtitle={ props.subtitle }\n appendAvatar={ props.appendAvatar }\n appendIcon={ props.appendIcon }\n >\n {{\n default: slots.item,\n prepend: slots.prepend,\n title: slots.title,\n subtitle: slots.subtitle,\n append: slots.append,\n }}\n </VCardItem>\n ) }\n\n { hasText && (\n <VCardText key=\"text\">\n { slots.text?.() ?? props.text }\n </VCardText>\n ) }\n\n { slots.default?.() }\n\n { slots.actions && (\n <VCardActions v-slots={{ default: slots.actions }} />\n ) }\n\n { genOverlays(isClickable.value, 'v-card') }\n </Tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VCard = InstanceType<typeof VCard>\n"],"mappings":"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"}