your personal website on atproto - mirror blento.app
at qr-codes 48 lines 1.1 kB view raw
1import { checkAndUploadImage } from '$lib/helper'; 2import type { CardDefinition } from '../types'; 3import ImageCard from './ImageCard.svelte'; 4import ImageCardSettings from './ImageCardSettings.svelte'; 5 6// Common image extensions 7const IMAGE_EXTENSIONS = /\.(jpe?g|png|gif|webp|svg|bmp|ico|avif|tiff?)(\?.*)?$/i; 8 9export const ImageCardDefinition = { 10 type: 'image', 11 contentComponent: ImageCard, 12 createNew: (card) => { 13 card.cardType = 'image'; 14 card.cardData = { 15 image: '', 16 alt: '', 17 href: '' 18 }; 19 }, 20 upload: async (item) => { 21 await checkAndUploadImage(item.cardData, 'image'); 22 return item; 23 }, 24 settingsComponent: ImageCardSettings, 25 26 canChange: (item) => Boolean(item.cardData.image), 27 28 change: (item) => { 29 return item; 30 }, 31 32 onUrlHandler: (url, item) => { 33 // Check if URL points to an image 34 if (IMAGE_EXTENSIONS.test(url)) { 35 item.cardType = 'image'; 36 item.cardData.image = url; 37 item.cardData.alt = ''; 38 item.cardData.href = ''; 39 return item; 40 } 41 return null; 42 }, 43 urlHandlerPriority: 3, 44 45 name: 'Image Card', 46 47 canHaveLabel: true 48} as CardDefinition & { type: 'image' };