@nuxt/image
Version:
Nuxt Image Module
99 lines (98 loc) • 2.94 kB
JavaScript
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 }
};