mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-27 19:51:09 -04:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			dark-base-
			...
			dark-butto
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2c8bb38531 | |||
| af2482a69c | |||
| cac35826c2 | 
| @ -1,6 +1,7 @@ | ||||
| <script setup> | ||||
| import { computed, ref } from 'vue' | ||||
| import SpinnerIcon from '@/scripts/components/icons/SpinnerIcon.vue' | ||||
|  | ||||
| const props = defineProps({ | ||||
|   contentLoading: { | ||||
|     type: Boolean, | ||||
| @ -9,7 +10,7 @@ const props = defineProps({ | ||||
|   defaultClass: { | ||||
|     type: String, | ||||
|     default: | ||||
|       'inline-flex whitespace-nowrap items-center border font-medium focus:outline-none focus:ring-2 focus:ring-offset-2', | ||||
|       'inline-flex whitespace-nowrap items-center border font-medium focus:outline-none focus:ring-2 focus:ring-offset-2 dark:focus:ring-offset-gray-800', | ||||
|   }, | ||||
|   tag: { | ||||
|     type: String, | ||||
| @ -27,6 +28,10 @@ const props = defineProps({ | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
|   loadingRight: { | ||||
|     type: Boolean, | ||||
|     default: false, | ||||
|   }, | ||||
|   size: { | ||||
|     type: String, | ||||
|     default: 'md', | ||||
| @ -81,17 +86,17 @@ const placeHolderSize = computed(() => { | ||||
|  | ||||
| const variantClass = computed(() => { | ||||
|   return { | ||||
|     'border-transparent shadow-sm text-white bg-primary-600 hover:bg-primary-700 focus:ring-primary-500': | ||||
|     'border-transparent shadow-sm text-white bg-primary-600 hover:bg-primary-700 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-600': | ||||
|       props.variant === 'primary', | ||||
|     'border-transparent text-primary-700 bg-primary-100 hover:bg-primary-200 focus:ring-primary-500': | ||||
|       props.variant === 'secondary', | ||||
|     'border-transparent  border-solid border-primary-500 font-normal transition ease-in-out duration-150 text-primary-500 hover:bg-primary-200 shadow-inner focus:ring-primary-500': | ||||
|     'border-transparent border-solid border-primary-500 font-normal transition ease-in-out duration-150 text-primary-500 hover:bg-primary-100 shadow-inner focus:ring-primary-500 dark:text-primary-400 dark:border-primary-400 dark:hover:bg-transparent dark:hover:text-primary-500 dark:hover:border-primary-500': | ||||
|       props.variant == 'primary-outline', | ||||
|     'border-gray-200 text-gray-700 bg-white hover:bg-gray-50 focus:ring-primary-500 focus:ring-offset-0': | ||||
|     'border-gray-200 text-gray-700 bg-white hover:bg-gray-50 focus:ring-primary-500 focus:ring-offset-0 dark:bg-gray-800 dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-900': | ||||
|       props.variant == 'white', | ||||
|     'border-transparent shadow-sm text-white bg-red-600 hover:bg-red-700 focus:ring-red-500': | ||||
|       props.variant === 'danger', | ||||
|     'border-transparent bg-gray-200 border hover:bg-opacity-60 focus:ring-gray-500 focus:ring-offset-0': | ||||
|     'border-transparent bg-gray-200 border hover:bg-opacity-60 focus:ring-gray-500 focus:ring-offset-0 dark:bg-gray-600 dark:text-white dark:hover:bg-opacity-60': | ||||
|       props.variant === 'gray', | ||||
|   } | ||||
| }) | ||||
| @ -124,6 +129,13 @@ const iconRightClass = computed(() => { | ||||
|     'ml-3 -mr-1 h-5 w-5': props.size === 'lg' || props.size === 'xl', | ||||
|   } | ||||
| }) | ||||
|  | ||||
| const buttonDisabledClass = computed(() => { | ||||
|   if (props.disabled || props.loading) | ||||
|     return 'cursor-not-allowed bg-opacity-70 dark:!bg-opacity-40 hover:!bg-opacity-70 pointer-event-none' | ||||
|  | ||||
|   return '' | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| <template> | ||||
| @ -141,15 +153,17 @@ const iconRightClass = computed(() => { | ||||
|   <BaseCustomTag | ||||
|     v-else | ||||
|     :tag="tag" | ||||
|     :disabled="disabled" | ||||
|     :class="[defaultClass, sizeClass, variantClass, roundedClass]" | ||||
|     :disabled="disabled || loading" | ||||
|     :class="[defaultClass, sizeClass, variantClass, roundedClass, buttonDisabledClass]" | ||||
|   > | ||||
|     <SpinnerIcon v-if="loading" :class="[iconLeftClass, iconVariantClass]" /> | ||||
|     <SpinnerIcon v-if="loading && !loadingRight" :class="[iconLeftClass, iconVariantClass]" /> | ||||
|  | ||||
|     <slot v-else name="left" :class="iconLeftClass"></slot> | ||||
|     <slot v-else name="left" :class="iconLeftClass" /> | ||||
|  | ||||
|     <slot /> | ||||
|  | ||||
|     <slot name="right" :class="[iconRightClass, iconVariantClass]"></slot> | ||||
|     <SpinnerIcon v-if="loading && loadingRight" :class="[iconRightClass, iconVariantClass]" /> | ||||
|  | ||||
|     <slot v-else name="right" :class="[iconRightClass, iconVariantClass]" /> | ||||
|   </BaseCustomTag> | ||||
| </template> | ||||
|  | ||||
| @ -30,13 +30,8 @@ | ||||
|           leave-to="opacity-0" | ||||
|         > | ||||
|           <DialogOverlay | ||||
|             class="fixed inset-0 transition-opacity bg-gray-500 bg-opacity-75 dark:backdrop-blur-xl dark:bg-gray-900/80" | ||||
|           > | ||||
|            <BaseDarkHighlight | ||||
|             class="!bg-highlight/[.17] !top-1/2 h-60 -translate-y-1/2 mt-5" | ||||
|             :class="dialogSizeClasses" | ||||
|             class="fixed inset-0 transition-opacity bg-gray-500 bg-opacity-75" | ||||
|           /> | ||||
|           </DialogOverlay> | ||||
|         </TransitionChild> | ||||
|  | ||||
|         <!-- This element is to trick the browser into centering the modal contents. --> | ||||
| @ -69,11 +64,6 @@ | ||||
|               shadow-xl | ||||
|               sm:my-8 sm:align-middle sm:w-full sm:p-6 | ||||
|               relative | ||||
|               dark:backdrop-blur-xl | ||||
|               dark:shadow-glass | ||||
|               dark:border | ||||
|               dark:border-white/10 | ||||
|               dark:bg-gray-800 | ||||
|             " | ||||
|             :class="dialogSizeClasses" | ||||
|           > | ||||
| @ -90,31 +80,31 @@ | ||||
|                   rounded-full | ||||
|                 " | ||||
|                 :class="{ | ||||
|                   'bg-green-100 dark:bg-primary-500': dialogStore.variant === 'primary', | ||||
|                   'bg-red-100 dark:bg-red-500': dialogStore.variant === 'danger', | ||||
|                   'bg-green-100': dialogStore.variant === 'primary', | ||||
|                   'bg-red-100': dialogStore.variant === 'danger', | ||||
|                 }" | ||||
|               > | ||||
|                 <BaseIcon | ||||
|                   v-if="dialogStore.variant === 'primary'" | ||||
|                   name="CheckIcon" | ||||
|                   class="w-6 h-6 text-green-600 dark:text-white" | ||||
|                   class="w-6 h-6 text-green-600" | ||||
|                 /> | ||||
|                 <BaseIcon | ||||
|                   v-else | ||||
|                   name="ExclamationIcon" | ||||
|                   class="w-6 h-6 text-red-600 dark:text-white" | ||||
|                   class="w-6 h-6 text-red-600" | ||||
|                   aria-hidden="true" | ||||
|                 /> | ||||
|               </div> | ||||
|               <div class="mt-3 text-center sm:mt-5"> | ||||
|                 <DialogTitle | ||||
|                   as="h3" | ||||
|                   class="text-lg font-medium leading-6 text-gray-900 dark:text-white" | ||||
|                   class="text-lg font-medium leading-6 text-gray-900" | ||||
|                 > | ||||
|                   {{ dialogStore.title }} | ||||
|                 </DialogTitle> | ||||
|                 <div class="mt-2"> | ||||
|                   <p class="text-sm text-gray-500 dark:text-gray-400"> | ||||
|                   <p class="text-sm text-gray-500"> | ||||
|                     {{ dialogStore.message }} | ||||
|                   </p> | ||||
|                 </div> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	