diff --git a/docs/components/button.md b/docs/components/button.md index f1996de..3816192 100644 --- a/docs/components/button.md +++ b/docs/components/button.md @@ -13,6 +13,7 @@ import ButtonIconExample from './button/examples/ButtonIconExample.vue'; import ButtonSquareExample from './button/examples/ButtonSquareExample.vue'; import ButtonDisabledExample from './button/examples/ButtonDisabledExample.vue'; import ButtonLoadingExample from './button/examples/ButtonLoadingExample.vue'; +import ButtonLinkExample from './button/examples/ButtonLinkExample.vue'; # Vue Button - Flowbite @@ -372,7 +373,20 @@ import { Button } from 'flowbite-vue' ``` +## Prop - href +You can add a link to a `Button` component. +Additionally you can add `tag` prop to change button component to `router-link` + +```vue + + +``` ## Slot - default diff --git a/docs/components/button/examples/ButtonLinkExample.vue b/docs/components/button/examples/ButtonLinkExample.vue new file mode 100644 index 0000000..9f67272 --- /dev/null +++ b/docs/components/button/examples/ButtonLinkExample.vue @@ -0,0 +1,8 @@ + + diff --git a/src/components/Button/Button.vue b/src/components/Button/Button.vue index 5f9f426..7c88db8 100644 --- a/src/components/Button/Button.vue +++ b/src/components/Button/Button.vue @@ -1,5 +1,5 @@ diff --git a/src/components/Button/composables/useButtonClasses.ts b/src/components/Button/composables/useButtonClasses.ts index f120661..99e5919 100644 --- a/src/components/Button/composables/useButtonClasses.ts +++ b/src/components/Button/composables/useButtonClasses.ts @@ -2,6 +2,7 @@ import type { Ref } from 'vue' import { computed, useSlots } from 'vue' import classNames from 'classnames' import type { ButtonDuotoneGradient, ButtonGradient, ButtonMonochromeGradient, ButtonSize, ButtonVariant } from '../types' +import { twMerge } from 'tailwind-merge' export type ButtonClassMap = { hover: Record; default: Record } @@ -231,21 +232,21 @@ export function useButtonClasses(props: UseButtonClassesProps): { wrapperClasses } } - return classNames( + return twMerge( backgroundClass, hoverClass, shadowClass, - props.pill.value ? '!rounded-full' : '', - props.disabled.value ? 'cursor-not-allowed opacity-50' : '', + props.pill.value && '!rounded-full', + props.disabled.value && 'cursor-not-allowed opacity-50', isGradient && isOutline ? 'p-0.5' : sizeClasses.value, - slots.prefix || slots.suffix || props.loading.value ? 'inline-flex items-center' : '', + (slots.prefix || slots.suffix || props.loading.value) && 'inline-flex items-center', ) }) const spanClasses = computed(() => { if (!!props.gradient.value && props.outline.value) { // ONLY FOR GRADIENT OUTLINE BUTTON - return classNames( + return twMerge( 'relative bg-white dark:bg-gray-900 rounded-md inline-flex items-center', sizeClasses.value, !props.disabled.value ? 'group-hover:bg-opacity-0 transition-all ease-in duration-75' : '',