your personal website on atproto - mirror
blento.app
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' };