Files
ui/src/runtime/composables/useComponentIcons.ts
2024-03-29 16:59:24 +01:00

43 lines
1.2 KiB
TypeScript

import { computed } from 'vue'
import { useAppConfig } from '#imports'
import type { IconProps } from '#ui/types'
export interface UseComponentIconsProps {
icon?: IconProps['name']
leading?: boolean
leadingIcon?: IconProps['name']
trailing?: boolean
trailingIcon?: IconProps['name']
loading?: boolean
loadingIcon?: IconProps['name']
}
export function useComponentIcons (props: UseComponentIconsProps) {
const appConfig = useAppConfig()
const isLeading = computed(() => (props.icon && props.leading) || (props.icon && !props.trailing) || (props.loading && !props.trailing && !props.trailingIcon) || !!props.leadingIcon)
const isTrailing = computed(() => (props.icon && props.trailing) || (props.loading && props.trailing) || !!props.trailingIcon)
const leadingIconName = computed(() => {
if (props.loading) {
return props.loadingIcon || appConfig.ui.icons.loading
}
return props.leadingIcon || props.icon
})
const trailingIconName = computed(() => {
if (props.loading && !isLeading.value) {
return props.loadingIcon || appConfig.ui.icons.loading
}
return props.trailingIcon || props.icon
})
return {
isLeading,
isTrailing,
leadingIconName,
trailingIconName
}
}