UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 16.7 kB
{"version":3,"file":"VChip.mjs","names":["VAvatar","VChipGroupSymbol","VDefaultsProvider","VExpandXTransition","VIcon","genOverlays","makeVariantProps","useVariant","makeBorderProps","useBorder","makeDensityProps","useDensity","makeElevationProps","useElevation","makeGroupItemProps","useGroupItem","makeRoundedProps","useRounded","makeRouterProps","useLink","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","useProxiedModel","IconValue","useLocale","Ripple","EventProp","genericComponent","computed","VChip","name","directives","props","activeClass","String","appendAvatar","appendIcon","closable","Boolean","closeIcon","type","default","closeLabel","draggable","filter","filterIcon","label","link","undefined","pill","prependAvatar","prependIcon","ripple","text","modelValue","onClick","onClickOnce","tag","variant","emits","e","value","val","click","setup","attrs","emit","slots","t","borderClasses","colorClasses","colorStyles","variantClasses","densityClasses","elevationClasses","roundedClasses","sizeClasses","themeClasses","isActive","group","isLink","isClickable","disabled","onCloseClick","navigate","toggle","onKeyDown","key","preventDefault","Tag","hasAppend","append","hasClose","close","hasFilter","hasPrepend","prepend","hasColor","isSelected","selectedClass","href","icon","image","select","size"],"sources":["../../../src/components/VChip/VChip.tsx"],"sourcesContent":["/* eslint-disable complexity */\n// Styles\nimport './VChip.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VChipGroupSymbol } from '@/components/VChipGroup/VChipGroup'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { EventProp, genericComponent } from '@/util'\nimport { computed } from 'vue'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\nexport type VChipSlots = MakeSlots<{\n default: []\n label: []\n prepend: []\n append: []\n}>\n\nexport const VChip = genericComponent<VChipSlots>()({\n name: 'VChip',\n\n directives: { Ripple },\n\n props: {\n activeClass: String,\n appendAvatar: String,\n appendIcon: IconValue,\n closable: Boolean,\n closeIcon: {\n type: IconValue,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: {\n type: Boolean,\n default: undefined,\n },\n pill: Boolean,\n prependAvatar: String,\n prependIcon: IconValue,\n ripple: {\n type: Boolean,\n default: true,\n },\n text: String,\n modelValue: {\n type: Boolean,\n default: true,\n },\n\n onClick: EventProp,\n onClickOnce: EventProp,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeGroupItemProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'span' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'tonal' } as const),\n },\n\n emits: {\n 'click:close': (e: Event) => true,\n 'update:modelValue': (value: boolean) => true,\n 'group:selected': (val: { value: boolean }) => true,\n click: (e: MouseEvent | KeyboardEvent) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses } = useSize(props)\n const { themeClasses } = provideTheme(props)\n\n const isActive = useProxiedModel(props, 'modelValue')\n const group = useGroupItem(props, VChipGroupSymbol, false)\n const link = useLink(props, attrs)\n const isLink = computed(() => props.link !== false && link.isLink.value)\n const isClickable = computed(() =>\n !props.disabled &&\n props.link !== false &&\n (!!group || props.link || link.isClickable.value)\n )\n\n function onCloseClick (e: Event) {\n isActive.value = false\n\n emit('click:close', e)\n }\n\n function onClick (e: MouseEvent) {\n emit('click', e)\n\n if (!isClickable.value) return\n\n link.navigate?.(e)\n group?.toggle()\n }\n\n function onKeyDown (e: KeyboardEvent) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick(e as any as MouseEvent)\n }\n }\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar)\n const hasClose = !!(slots.close || props.closable)\n const hasFilter = !!(slots.filter || props.filter) && group\n const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar)\n const hasColor = !group || group.isSelected.value\n\n return isActive.value && (\n <Tag\n class={[\n 'v-chip',\n {\n 'v-chip--disabled': props.disabled,\n 'v-chip--label': props.label,\n 'v-chip--link': isClickable.value,\n 'v-chip--filter': hasFilter,\n 'v-chip--pill': props.pill,\n },\n themeClasses.value,\n borderClasses.value,\n hasColor ? colorClasses.value : undefined,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n variantClasses.value,\n group?.selectedClass.value,\n ]}\n style={[\n hasColor ? colorStyles.value : undefined,\n ]}\n disabled={ props.disabled || undefined }\n draggable={ props.draggable }\n href={ link.href.value }\n tabindex={ isClickable.value ? 0 : undefined }\n onClick={ onClick }\n onKeydown={ isClickable.value && !isLink.value && onKeyDown }\n v-ripple={ [isClickable.value && props.ripple, null] }\n >\n { genOverlays(isClickable.value, 'v-chip') }\n\n { hasFilter && (\n <VDefaultsProvider\n key=\"filter\"\n defaults={{\n VIcon: { icon: props.filterIcon },\n }}\n >\n <VExpandXTransition>\n <div\n class=\"v-chip__filter\"\n v-show={ group.isSelected.value }\n >\n { slots.filter ? slots.filter() : (<VIcon />) }\n </div>\n </VExpandXTransition>\n </VDefaultsProvider>\n ) }\n\n { hasPrepend && (\n <VDefaultsProvider\n key=\"prepend\"\n defaults={{\n VAvatar: {\n image: props.prependAvatar,\n },\n VIcon: {\n icon: props.prependIcon,\n },\n }}\n >\n { slots.prepend\n ? (\n <div class=\"v-chip__prepend\">\n { slots.prepend() }\n </div>\n )\n : props.prependAvatar ? (<VAvatar start />)\n : props.prependIcon ? (<VIcon start />)\n : undefined\n }\n </VDefaultsProvider>\n ) }\n\n { slots.default?.({\n isSelected: group?.isSelected.value,\n selectedClass: group?.selectedClass.value,\n select: group?.select,\n toggle: group?.toggle,\n value: group?.value.value,\n disabled: props.disabled,\n }) ?? props.text }\n\n { hasAppend && (\n <VDefaultsProvider\n key=\"append\"\n defaults={{\n VAvatar: {\n image: props.appendAvatar,\n },\n VIcon: {\n icon: props.appendIcon,\n },\n }}\n >\n { slots.append\n ? (\n <div class=\"v-chip__append\">\n { slots.append() }\n </div>\n )\n : props.appendAvatar ? (<VAvatar end />)\n : props.appendIcon ? (<VIcon end />)\n : undefined\n }\n </VDefaultsProvider>\n ) }\n\n { hasClose && (\n <VDefaultsProvider\n key=\"close\"\n defaults={{\n VIcon: {\n icon: props.closeIcon,\n size: 'x-small',\n },\n }}\n >\n <div\n class=\"v-chip__close\"\n aria-label={ t(props.closeLabel) }\n onClick={ onCloseClick }\n >\n { slots.close ? slots.close() : (<VIcon />) }\n </div>\n </VDefaultsProvider>\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VChip = InstanceType<typeof VChip>\n"],"mappings":"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"}