UNPKG

@vue-layout/link

Version:

A package containing a link component.

1 lines 9.8 kB
{"version":3,"file":"index.mjs","sources":["../src/component.ts","../src/index.ts"],"sourcesContent":["/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DefineComponent, VNodeProps, VNodeTypes } from 'vue';\nimport {\n computed, defineComponent, h, resolveDynamicComponent,\n} from 'vue';\n\nexport const VCLink = defineComponent({\n props: {\n active: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n href: {\n type: String,\n default: undefined,\n },\n prefetch: {\n type: Boolean,\n default: true,\n },\n target: {\n type: String,\n default: '_self',\n },\n to: {\n type: String,\n default: undefined,\n },\n },\n emits: ['click', 'clicked'],\n setup(props, { emit, slots }) {\n const routerLink = resolveDynamicComponent('RouterLink');\n const nuxtLink = resolveDynamicComponent('NuxtLink');\n\n const computedTag = computed(() => {\n const hasRouter = typeof routerLink !== 'string';\n\n if (!hasRouter || props.disabled || !props.to) {\n return 'a';\n }\n\n if (typeof nuxtLink !== 'string') {\n return 'nuxt-link';\n }\n\n return 'router-link';\n });\n\n const isRouterLink = computed(() => computedTag.value !== 'a');\n\n const computedHref = computed(() => {\n if (props.href) {\n return props.href;\n }\n\n if (isRouterLink.value) {\n return null;\n }\n\n return '#';\n });\n\n const computedProps = computed(() => {\n if (!isRouterLink.value) {\n return {};\n }\n\n return {\n ...(props.to ? { to: props.to } : {}),\n ...(typeof props.prefetch !== 'undefined' ? { prefetch: props.prefetch } : {}),\n };\n });\n\n const computedAttrs = computed(() => ({\n ...(props.href ? { href: props.href } : {}),\n ...(isRouterLink.value ? {} : {\n target: props.target,\n }),\n }));\n\n const buildVNodeProps = () => {\n const onClick = (event: Record<string, any>) => {\n const isEvent: boolean = typeof event.preventDefault !== 'undefined' &&\n typeof event.stopPropagation !== 'undefined' &&\n typeof event.stopImmediatePropagation !== 'undefined';\n\n if (isEvent && props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n } else {\n if (isRouterLink.value) {\n emit('click', event);\n }\n\n emit('clicked', event);\n }\n\n if (\n isEvent &&\n !isRouterLink.value &&\n computedHref.value === '#'\n ) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n };\n\n const vNodeProps: VNodeProps & Record<string, any> = {\n class: {\n active: props.active,\n disabled: props.disabled,\n },\n ...computedAttrs.value,\n ...computedProps.value,\n onClick,\n };\n\n return vNodeProps;\n };\n\n let component : string | VNodeTypes;\n\n switch (computedTag.value) {\n case 'router-link':\n component = routerLink;\n break;\n case 'nuxt-link':\n component = nuxtLink;\n break;\n default:\n component = 'a';\n }\n\n if (typeof component === 'string') {\n return () => h(\n component as string,\n buildVNodeProps(),\n [\n (typeof slots.default === 'function' ? slots.default() : []),\n ],\n );\n }\n\n return () => h(\n component as DefineComponent,\n buildVNodeProps(),\n {\n default: () => (typeof slots.default === 'function' ? slots.default() : []),\n },\n );\n },\n});\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { App, Plugin } from 'vue';\n\nimport './vue';\n\n// Import vue components\nimport {\n VCLink,\n} from './component';\nimport type { Options } from './type';\n\nexport * from './component';\nexport * from './type';\n\nexport function install(instance: App, options?: Options) : void {\n instance.component('VCLink', VCLink);\n}\n\nexport default {\n install,\n} satisfies Plugin<Options | undefined>;\n"],"names":["VCLink","defineComponent","props","active","type","Boolean","default","disabled","href","String","undefined","prefetch","target","to","emits","setup","emit","slots","routerLink","resolveDynamicComponent","nuxtLink","computedTag","computed","hasRouter","isRouterLink","value","computedHref","computedProps","computedAttrs","buildVNodeProps","onClick","event","isEvent","preventDefault","stopPropagation","stopImmediatePropagation","vNodeProps","class","component","h","install","instance","options"],"mappings":"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"}