UNPKG

@nuxt/image

Version:

Nuxt Image Module

99 lines (98 loc) 2.94 kB
import { computed } from "vue"; import { parseSize } from "../utils/index.js"; import { useImage } from "#imports"; export const baseImageProps = { // input source src: { type: String, required: false }, // modifiers format: { type: String, required: false }, quality: { type: [Number, String], required: false }, background: { type: String, required: false }, fit: { type: String, required: false }, modifiers: { type: Object, required: false }, // options preset: { type: String, required: false }, provider: { type: String, required: false }, sizes: { type: [Object, String], required: false }, densities: { type: String, required: false }, preload: { type: [Boolean, Object], required: false }, // <img> attributes width: { type: [String, Number], required: false }, height: { type: [String, Number], required: false }, alt: { type: String, required: false }, referrerpolicy: { type: String, required: false }, usemap: { type: String, required: false }, longdesc: { type: String, required: false }, ismap: { type: Boolean, required: false }, loading: { type: String, required: false, validator: (val) => ["lazy", "eager"].includes(val) }, crossorigin: { type: [Boolean, String], required: false, validator: (val) => ["anonymous", "use-credentials", "", true, false].includes(val) }, decoding: { type: String, required: false, validator: (val) => ["async", "auto", "sync"].includes(val) }, // csp nonce: { type: [String], required: false } }; export const useBaseImage = (props) => { const options = computed(() => { return { provider: props.provider, preset: props.preset }; }); const attrs = computed(() => { return { width: parseSize(props.width), height: parseSize(props.height), alt: props.alt, referrerpolicy: props.referrerpolicy, usemap: props.usemap, longdesc: props.longdesc, ismap: props.ismap, crossorigin: props.crossorigin === true ? "anonymous" : props.crossorigin || void 0, loading: props.loading, decoding: props.decoding, nonce: props.nonce }; }); const $img = useImage(); const modifiers = computed(() => { return { ...props.modifiers, width: parseSize(props.width), height: parseSize(props.height), format: props.format, quality: props.quality || $img.options.quality, background: props.background, fit: props.fit }; }); return { options, attrs, modifiers }; }; export const pictureProps = { ...baseImageProps, legacyFormat: { type: String, default: null }, imgAttrs: { type: Object, default: null } }; export const imgProps = { ...baseImageProps, placeholder: { type: [Boolean, String, Number, Array], required: false }, placeholderClass: { type: String, required: false }, custom: { type: Boolean, required: false } };