HButton.vue 1004 B

12345678910111213141516171819202122232425262728
  1. <script setup lang="ts">
  2. const props = withDefaults(
  3. defineProps<{
  4. block?: boolean
  5. outline?: boolean
  6. disabled?: boolean
  7. }>(),
  8. {
  9. block: false,
  10. outline: false,
  11. disabled: false,
  12. },
  13. )
  14. const buttonClass = computed(() => [
  15. 'focus-outline-none focus-visible-outline-0 cursor-pointer disabled-cursor-not-allowed disabled-opacity-75 flex-shrink-0 gap-x-1.5 px-2.5 py-1.5 border-size-0 font-medium text-sm rounded-md select-none',
  16. props.block ? 'w-full flex justify-center items-center' : 'inline-flex items-center',
  17. props.outline
  18. ? 'shadow-sm ring-1 ring-inset ring-ui-primary text-ui-primary bg-white dark-bg-dark hover-not-disabled-bg-ui-primary/10 dark-hover-not-disabled-bg-ui-primary/10 focus-visible-ring-2'
  19. : 'shadow-sm text-ui-text bg-ui-primary hover-bg-ui-primary/75 disabled-bg-ui-primary/90 focus-visible-ring-inset focus-visible-ring-2',
  20. ])
  21. </script>
  22. <template>
  23. <button :disabled="disabled" :class="buttonClass">
  24. <slot />
  25. </button>
  26. </template>