vuetify
Version:
Vue Material Component Framework
1 lines • 8.46 kB
Source Map (JSON)
{"version":3,"file":"VBadge.mjs","names":["VIcon","IconValue","makeLocationProps","useLocation","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","useTheme","makeTransitionProps","MaybeTransition","useBackgroundColor","useTextColor","useLocale","genericComponent","pick","useRender","toRef","VBadge","name","inheritAttrs","props","bordered","Boolean","color","String","content","Number","dot","floating","icon","inline","label","type","default","max","modelValue","offsetX","offsetY","textColor","location","transition","setup","ctx","backgroundColorClasses","backgroundColorStyles","roundedClasses","t","textColorClasses","textColorStyles","themeClasses","locationStyles","side","base","includes","value","isNaN","badgeAttrs","attrs","slots","undefined","badge"],"sources":["../../../src/components/VBadge/VBadge.tsx"],"sourcesContent":["// Styles\nimport './VBadge.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, useTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { genericComponent, pick, useRender } from '@/util'\nimport { toRef } from 'vue'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\nexport type VBadgeSlots = MakeSlots<{\n default: []\n badge: []\n}>\n\nexport const VBadge = genericComponent<VBadgeSlots>()({\n name: 'VBadge',\n\n inheritAttrs: false,\n\n props: {\n bordered: Boolean,\n color: String,\n content: [Number, String],\n dot: Boolean,\n floating: Boolean,\n icon: IconValue,\n inline: Boolean,\n label: {\n type: String,\n default: '$vuetify.badge',\n },\n max: [Number, String],\n modelValue: {\n type: Boolean,\n default: true,\n },\n offsetX: [Number, String],\n offsetY: [Number, String],\n textColor: String,\n\n ...makeLocationProps({ location: 'top end' } as const),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeTransitionProps({ transition: 'scale-rotate-transition' }),\n },\n\n setup (props, ctx) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { roundedClasses } = useRounded(props)\n const { t } = useLocale()\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'textColor'))\n const { themeClasses } = useTheme()\n\n const { locationStyles } = useLocation(props, true, side => {\n const base = props.floating\n ? (props.dot ? 2 : 4)\n : (props.dot ? 8 : 12)\n\n return base + (\n ['top', 'bottom'].includes(side) ? +(props.offsetY ?? 0)\n : ['left', 'right'].includes(side) ? +(props.offsetX ?? 0)\n : 0\n )\n })\n\n useRender(() => {\n const value = Number(props.content)\n const content = (!props.max || isNaN(value)) ? props.content\n : value <= props.max ? value\n : `${props.max}+`\n\n const [badgeAttrs, attrs] = pick(ctx.attrs as Record<string, any>, [\n 'aria-atomic',\n 'aria-label',\n 'aria-live',\n 'role',\n 'title',\n ])\n\n return (\n <props.tag\n class={[\n 'v-badge',\n {\n 'v-badge--bordered': props.bordered,\n 'v-badge--dot': props.dot,\n 'v-badge--floating': props.floating,\n 'v-badge--inline': props.inline,\n },\n ]}\n { ...attrs }\n >\n <div class=\"v-badge__wrapper\">\n { ctx.slots.default?.() }\n\n <MaybeTransition transition={ props.transition }>\n <span\n v-show={ props.modelValue }\n class={[\n 'v-badge__badge',\n themeClasses.value,\n backgroundColorClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n textColorStyles.value,\n props.inline ? {} : locationStyles.value,\n ]}\n aria-atomic=\"true\"\n aria-label={ t(props.label, value) }\n aria-live=\"polite\"\n role=\"status\"\n { ...badgeAttrs }\n >\n {\n props.dot ? undefined\n : ctx.slots.badge ? ctx.slots.badge?.()\n : props.icon ? <VIcon icon={ props.icon } />\n : content\n }\n </span>\n </MaybeTransition>\n </div>\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VBadge = InstanceType<typeof VBadge>\n"],"mappings":"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"}