Newer
Older
<template>
<ImagePreview
:url="image?.image ?? null"
class="tw-inline-flex tw-h-64 tw-max-w-full tw-min-w-[320px] tw-bg-gray-700 tw-rounded tw-flex-1"
class="tw-absolute tw-inset-0 tw-flex tw-items-end tw-text-white tw-bg-gradient-to-b tw-from-0% tw-to-100% tw-from-transparent tw-to-black/80"
<div v-if="!disabled" class="tw-flex tw-items-stretch tw-m-3 tw-gap-3">
class="btn btn-sm tw-text-white tw-backdrop-blur tw-bg-black/30 tw-ring-0 hocus:tw-bg-aura-primary/25"
<icon-carbon-image-search class="tw-w-6 tw-h-6" />
{{ t('imagePicker.chooseAnImage') }}
</button>
<button
v-if="modelValue"
type="button"
class="btn btn-sm tw-text-white tw-ring-0 hocus:tw-bg-aura-primary/25"
@click="localImageId = null"
>
{{ t('imagePicker.reset') }}
</button>
</div>
<ImagePickerDialog v-model="localImageId" :is-open="showPicker" @show="showPicker = $event" />
</template>
<script lang="ts" setup>
import { computed, ref, useAttrs } from 'vue'
import { useI18n } from '@/i18n'

Konrad Mohrfeldt
committed
import { useCopy } from '@/form'
import { useImage } from '@/stores/images'
import ImagePickerDialog from './ImagePickerDialog.vue'
import ImagePreview from './ImagePreview.vue'
const props = defineProps<{
modelValue: number | null
}>()
const emit = defineEmits<{
(e: 'update:modelValue', imageId: number | null): void
}>()
const attrs = useAttrs()
const { t } = useI18n()
const showPicker = ref(false)

Konrad Mohrfeldt
committed
const localImageId = useCopy<number | null>(() => props.modelValue, {
save: (value) => emit('update:modelValue', value),
})