From 0a6aec01f099f4fc9bb787ba835348243946c8bb Mon Sep 17 00:00:00 2001
From: Florian <45694132+flo-bit@users.noreply.github.com>
Date: Sun, 1 Feb 2026 12:13:27 +0100
Subject: [PATCH 1/2] add apple music embed
---
.../AppleMusicCard/AppleMusicCard.svelte | 22 ++++++
.../CreateAppleMusicCardModal.svelte | 52 ++++++++++++++
src/lib/cards/AppleMusicCard/index.ts | 70 +++++++++++++++++++
src/lib/cards/index.ts | 2 +
src/lib/website/Context.svelte | 4 +-
src/lib/website/EditableWebsite.svelte | 4 +-
6 files changed, 150 insertions(+), 4 deletions(-)
create mode 100644 src/lib/cards/AppleMusicCard/AppleMusicCard.svelte
create mode 100644 src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte
create mode 100644 src/lib/cards/AppleMusicCard/index.ts
diff --git a/src/lib/cards/AppleMusicCard/AppleMusicCard.svelte b/src/lib/cards/AppleMusicCard/AppleMusicCard.svelte
new file mode 100644
index 0000000..8fd8f7d
--- /dev/null
+++ b/src/lib/cards/AppleMusicCard/AppleMusicCard.svelte
@@ -0,0 +1,22 @@
+
+
+{#if item.cardData?.appleMusicType && item.cardData?.appleMusicId && item.cardData?.appleMusicStorefront}
+
+
+
+{:else}
+
+ Missing Apple Music data
+
+{/if}
diff --git a/src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte b/src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte
new file mode 100644
index 0000000..ac0fd04
--- /dev/null
+++ b/src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte
@@ -0,0 +1,52 @@
+
+
+
+ Enter an Apple Music album or playlist URL
+ {
+ if (e.key === 'Enter' && checkUrl()) oncreate();
+ }}
+ />
+
+ {#if errorMessage}
+ {errorMessage}
+ {/if}
+
+
+
+
+
+
diff --git a/src/lib/cards/AppleMusicCard/index.ts b/src/lib/cards/AppleMusicCard/index.ts
new file mode 100644
index 0000000..43aa7cf
--- /dev/null
+++ b/src/lib/cards/AppleMusicCard/index.ts
@@ -0,0 +1,70 @@
+import type { CardDefinition } from '../types';
+import CreateAppleMusicCardModal from './CreateAppleMusicCardModal.svelte';
+import AppleMusicCard from './AppleMusicCard.svelte';
+
+const cardType = 'apple-music-embed';
+
+export const AppleMusicCardDefinition = {
+ type: cardType,
+ contentComponent: AppleMusicCard,
+ creationModalComponent: CreateAppleMusicCardModal,
+ createNew: (item) => {
+ item.cardType = cardType;
+ item.cardData = {};
+ item.w = 4;
+ item.mobileW = 8;
+ item.h = 5;
+ item.mobileH = 10;
+ },
+
+ onUrlHandler: (url, item) => {
+ const match = matchAppleMusicUrl(url);
+ if (!match) return null;
+
+ item.cardData.appleMusicType = match.type;
+ item.cardData.appleMusicId = match.id;
+ item.cardData.appleMusicStorefront = match.storefront;
+ item.cardData.href = url;
+
+ item.w = 4;
+ item.mobileW = 8;
+ item.h = 5;
+ item.mobileH = 10;
+
+ return item;
+ },
+
+ urlHandlerPriority: 2,
+
+ name: 'Apple Music Embed',
+ canResize: true,
+ minW: 4,
+ minH: 5,
+
+ keywords: ['music', 'apple', 'playlist', 'album'],
+ groups: ['Media'],
+ icon: ``
+} as CardDefinition & { type: typeof cardType };
+
+// Match Apple Music album and playlist URLs
+// Examples:
+// https://music.apple.com/us/album/midnights/1649434004
+// https://music.apple.com/us/playlist/todays-hits/pl.f4d106fed2bd41149aaacabb233eb5eb
+function matchAppleMusicUrl(
+ url: string | undefined
+): { type: 'album' | 'playlist'; id: string; storefront: string } | null {
+ if (!url) return null;
+
+ const pattern = /music\.apple\.com\/([a-z]{2})\/(album|playlist)\/[^/]+\/([a-zA-Z0-9.]+)/;
+ const match = url.match(pattern);
+
+ if (match) {
+ return {
+ storefront: match[1],
+ type: match[2] as 'album' | 'playlist',
+ id: match[3]
+ };
+ }
+
+ return null;
+}
diff --git a/src/lib/cards/index.ts b/src/lib/cards/index.ts
index 0e32989..92ebe92 100644
--- a/src/lib/cards/index.ts
+++ b/src/lib/cards/index.ts
@@ -32,6 +32,7 @@ import { TimerCardDefinition } from './TimerCard';
import { ClockCardDefinition } from './ClockCard';
import { CountdownCardDefinition } from './CountdownCard';
import { SpotifyCardDefinition } from './SpotifyCard';
+import { AppleMusicCardDefinition } from './AppleMusicCard';
import { ButtonCardDefinition } from './ButtonCard';
import { GuestbookCardDefinition } from './GuestbookCard';
import { FriendsCardDefinition } from './FriendsCard';
@@ -73,6 +74,7 @@ export const AllCardDefinitions = [
ClockCardDefinition,
CountdownCardDefinition,
SpotifyCardDefinition,
+ AppleMusicCardDefinition,
// Model3DCardDefinition
FriendsCardDefinition
] as const;
diff --git a/src/lib/website/Context.svelte b/src/lib/website/Context.svelte
index 8cadf44..5c4a577 100644
--- a/src/lib/website/Context.svelte
+++ b/src/lib/website/Context.svelte
@@ -19,7 +19,9 @@
// svelte-ignore state_referenced_locally
setAdditionalUserData(data.additionalData);
- setCanEdit(() => dev || (user.isLoggedIn && user.profile?.did === data.did && isEditing === true));
+ setCanEdit(
+ () => dev || (user.isLoggedIn && user.profile?.did === data.did && isEditing === true)
+ );
// svelte-ignore state_referenced_locally
setDidContext(data.did as Did);
diff --git a/src/lib/website/EditableWebsite.svelte b/src/lib/website/EditableWebsite.svelte
index 4c2ac3e..af920c6 100644
--- a/src/lib/website/EditableWebsite.svelte
+++ b/src/lib/website/EditableWebsite.svelte
@@ -201,9 +201,7 @@
document.body.style.removeProperty('padding-right');
document.body.style.removeProperty('margin-right');
// Remove any orphaned dialog overlay/content elements left by the portal
- for (const el of document.querySelectorAll(
- '[data-dialog-overlay], [data-dialog-content]'
- )) {
+ for (const el of document.querySelectorAll('[data-dialog-overlay], [data-dialog-content]')) {
el.remove();
}
};
--
2.54.0
From 28c6767f512160fa4bab5e46d7743ba66aba55df Mon Sep 17 00:00:00 2001
From: Florian <45694132+flo-bit@users.noreply.github.com>
Date: Sun, 1 Feb 2026 14:30:15 +0100
Subject: [PATCH 2/2] update recently updated
---
.../SpecialCards/UpdatedBlentos/UpdatedBlentosCard.svelte | 1 -
src/lib/cards/SpecialCards/UpdatedBlentos/index.ts | 3 +++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/lib/cards/SpecialCards/UpdatedBlentos/UpdatedBlentosCard.svelte b/src/lib/cards/SpecialCards/UpdatedBlentos/UpdatedBlentosCard.svelte
index 82134b6..a63f3a8 100644
--- a/src/lib/cards/SpecialCards/UpdatedBlentos/UpdatedBlentosCard.svelte
+++ b/src/lib/cards/SpecialCards/UpdatedBlentos/UpdatedBlentosCard.svelte
@@ -20,7 +20,6 @@
-
Recently updated blentos