From 1d8b33991f8d68998be442060bc3cc61e8e58349 Mon Sep 17 00:00:00 2001 From: Florian <45694132+flo-bit@users.noreply.github.com> Date: Tue, 3 Feb 2026 02:44:52 +0100 Subject: [PATCH] move cards into subfolders --- src/lib/cards/GameCards/README.md | 95 ------------------ .../{ => _base}/BaseCard/BaseCard.svelte | 2 +- .../BaseCard/BaseEditingCard.svelte | 2 +- src/lib/cards/{ => _base}/Card/Card.svelte | 2 +- .../cards/{ => _base}/Card/EditingCard.svelte | 4 +- .../BlogEntry.svelte | 0 .../DateTime.svelte | 0 .../StandardSiteDocumentListCard.svelte | 4 +- .../StandardSiteDocumentListCard/index.ts | 2 +- .../{ => core}/ImageCard/ImageCard.svelte | 2 +- .../ImageCard/ImageCardSettings.svelte | 0 src/lib/cards/{ => core}/ImageCard/index.ts | 2 +- .../LinkCard/CreateLinkCardModal.svelte | 2 +- .../LinkCard/EditingLinkCard.svelte | 2 +- .../cards/{ => core}/LinkCard/LinkCard.svelte | 2 +- .../LinkCard/LinkCardSettings.svelte | 0 src/lib/cards/{ => core}/LinkCard/index.ts | 2 +- .../MapCard/CreateMapCardModal.svelte | 2 +- src/lib/cards/{ => core}/MapCard/Map.svelte | 2 +- .../cards/{ => core}/MapCard/MapCard.svelte | 2 +- .../{ => core}/MapCard/MapCardSettings.svelte | 0 src/lib/cards/{ => core}/MapCard/index.ts | 2 +- .../SectionCard/EditingSectionCard.svelte | 2 +- .../{ => core}/SectionCard/SectionCard.svelte | 2 +- .../SectionCard/SectionCardSettings.svelte | 2 +- src/lib/cards/{ => core}/SectionCard/index.ts | 2 +- .../TextCard/EditingTextCard.svelte | 2 +- .../cards/{ => core}/TextCard/TextCard.svelte | 2 +- .../TextCard/TextCardSettings.svelte | 2 +- src/lib/cards/{ => core}/TextCard/index.ts | 2 +- .../DinoGameCard/DinoGameCard.svelte | 0 .../DinoGameCard/index.ts | 0 .../TetrisCard/Tetris8Bit.mp3 | Bin .../TetrisCard/TetrisCard.svelte | 0 .../{GameCards => games}/TetrisCard/index.ts | 0 src/lib/cards/index.ts | 82 +++++++-------- .../AppleMusicCard/AppleMusicCard.svelte | 2 +- .../CreateAppleMusicCardModal.svelte | 2 +- .../cards/{ => media}/AppleMusicCard/index.ts | 2 +- .../BlueskyMediaCard/BlueskyMediaCard.svelte | 2 +- .../CreateBlueskyMediaCardModal.svelte | 2 +- .../{ => media}/BlueskyMediaCard/Video.svelte | 0 .../{ => media}/BlueskyMediaCard/index.ts | 2 +- .../EmbedCard/CreateEmbedCardModal.svelte | 2 +- .../{ => media}/EmbedCard/EmbedCard.svelte | 2 +- .../EmbedCard/SidebarItemEmbedCard.svelte | 0 src/lib/cards/{ => media}/EmbedCard/index.ts | 2 +- .../GIFCard/CreateGifCardModal.svelte | 2 +- .../{ => media}/GIFCard/EditingGifCard.svelte | 2 +- .../cards/{ => media}/GIFCard/GifCard.svelte | 2 +- .../GIFCard/GifCardSettings.svelte | 2 +- .../GIFCard/GiphySearchModal.svelte | 0 .../{ => media}/GIFCard/PoweredByGiphy.gif | Bin src/lib/cards/{ => media}/GIFCard/index.ts | 2 +- .../{ => media}/LivestreamCard/Icon.svelte | 0 .../LivestreamCard/LivestreamCard.svelte | 4 +- .../LivestreamCard/LivestreamEmbedCard.svelte | 2 +- .../cards/{ => media}/LivestreamCard/index.ts | 2 +- .../PhotoGalleryCard/PhotoGalleryCard.svelte | 2 +- .../{ => media}/PhotoGalleryCard/index.ts | 2 +- .../PopfeedReviews/PopfeedReviewsCard.svelte | 2 +- .../{ => media}/PopfeedReviews/Rating.svelte | 0 .../cards/{ => media}/PopfeedReviews/index.ts | 2 +- .../SpotifyCard/CreateSpotifyCardModal.svelte | 2 +- .../SpotifyCard/SpotifyCard.svelte | 2 +- .../cards/{ => media}/SpotifyCard/index.ts | 2 +- .../EditStatusphereCard.svelte | 2 +- .../SettingsStatusphereCard.svelte | 0 .../StatusphereCard/StatusphereCard.svelte | 0 .../{ => media}/StatusphereCard/icons.json | 0 .../{ => media}/StatusphereCard/index.ts | 2 +- .../TealFMPlaysCard/AlbumArt.svelte | 0 .../TealFMPlaysCard/TealFMPlaysCard.svelte | 2 +- .../{ => media}/TealFMPlaysCard/index.ts | 2 +- .../CreateYoutubeCardModal.svelte | 2 +- .../YoutubeVideoCard/YoutubeCard.svelte | 2 +- .../YoutubeCardSettings.svelte | 0 .../{ => media}/YoutubeVideoCard/index.ts | 2 +- .../ATProtoCollectionsCard.svelte | 4 +- .../ATProtoCollectionsCard/index.ts | 2 +- .../BigSocialCard/BigSocialCard.svelte | 2 +- .../CreateBigSocialCardModal.svelte | 2 +- .../cards/{ => social}/BigSocialCard/index.ts | 2 +- .../BlueskyFeedCard/BlueskyFeedCard.svelte | 2 +- .../{ => social}/BlueskyFeedCard/index.ts | 2 +- .../BlueskyPostCard/BlueskyPostCard.svelte | 2 +- .../CreateBlueskyPostCardModal.svelte | 2 +- .../{ => social}/BlueskyPostCard/index.ts | 2 +- .../{ => social}/BlueskyPostCard/utils.ts | 0 .../BlueskyProfileCard.svelte | 2 +- .../{ => social}/BlueskyProfileCard/index.ts | 2 +- .../EventCard/CreateEventCardModal.svelte | 2 +- .../{ => social}/EventCard/EventCard.svelte | 4 +- src/lib/cards/{ => social}/EventCard/index.ts | 2 +- .../FriendsCard/FriendsCard.svelte | 2 +- .../FriendsCard/FriendsCardSettings.svelte | 2 +- .../cards/{ => social}/FriendsCard/index.ts | 2 +- .../CreateGitHubContributorsCardModal.svelte | 2 +- .../GitHubContributorsCard.svelte | 2 +- .../GitHubContributorsCardSettings.svelte | 2 +- .../GitHubContributorsCard/index.ts | 2 +- .../CreateGitHubProfileCardModal.svelte | 2 +- .../GitHubProfileCard.svelte | 2 +- .../GithubContributionsGraph.svelte | 0 .../{ => social}/GitHubProfileCard/index.ts | 2 +- .../{ => social}/GitHubProfileCard/types.ts | 0 .../CreateGuestbookCardModal.svelte | 2 +- .../GuestbookCard/GuestbookCard.svelte | 4 +- .../cards/{ => social}/GuestbookCard/index.ts | 2 +- .../CreateKickstarterCardModal.svelte | 2 +- .../KickstarterCard/KickstarterCard.svelte | 2 +- .../{ => social}/KickstarterCard/index.ts | 2 +- .../LatestBlueskyPostCard.svelte | 4 +- .../SidebarItemLatestBlueskyPostCard.svelte | 0 .../LatestBlueskyPostCard/index.ts | 2 +- .../CreateProductHuntCardModal.svelte | 2 +- .../ProductHuntCard/ProductHuntCard.svelte | 2 +- .../{ => social}/ProductHuntCard/index.ts | 2 +- .../{ => social}/VCardCard/VCardCard.svelte | 2 +- .../VCardCard/VCardCardSettings.svelte | 2 +- src/lib/cards/{ => social}/VCardCard/index.ts | 2 +- .../UpdatedBlentos/UpdatedBlentosCard.svelte | 2 +- .../UpdatedBlentos/index.ts | 0 .../ButtonCard/ButtonCard.svelte | 2 +- .../ButtonCard/ButtonCardSettings.svelte | 2 +- .../ButtonCard/EditingButtonCard.svelte | 2 +- .../cards/{ => utilities}/ButtonCard/index.ts | 2 +- .../ClockCard/ClockCard.svelte | 2 +- .../ClockCard/ClockCardSettings.svelte | 0 .../cards/{ => utilities}/ClockCard/index.ts | 2 +- .../CountdownCard/CountdownCard.svelte | 2 +- .../CountdownCardSettings.svelte | 0 .../{ => utilities}/CountdownCard/index.ts | 2 +- .../TimerCard/TimerCard.svelte | 2 +- .../TimerCard/TimerCardSettings.svelte | 0 .../cards/{ => utilities}/TimerCard/index.ts | 2 +- .../{ => visual}/DrawCard/DrawCard.svelte | 2 +- .../DrawCard/EditingDrawCard.svelte | 2 +- src/lib/cards/{ => visual}/DrawCard/index.ts | 2 +- .../CreateFluidTextCardModal.svelte | 2 +- .../FluidTextCard/EditingFluidTextCard.svelte | 2 +- .../FluidTextCard/FluidTextCard.svelte | 4 +- .../FluidTextCardSettings.svelte | 2 +- .../cards/{ => visual}/FluidTextCard/index.ts | 2 +- .../Model3DCard/CreateModel3DCardModal.svelte | 2 +- .../Model3DCard/Model3DCard.svelte | 2 +- .../Model3DCard/Model3DScene.svelte | 0 .../cards/{ => visual}/Model3DCard/index.ts | 2 +- src/lib/website/EditableWebsite.svelte | 4 +- src/lib/website/EmptyState.svelte | 4 +- src/lib/website/Website.svelte | 4 +- src/routes/api/github/+server.ts | 2 +- src/routes/random/+page.server.ts | 1 + 153 files changed, 173 insertions(+), 267 deletions(-) delete mode 100644 src/lib/cards/GameCards/README.md rename src/lib/cards/{ => _base}/BaseCard/BaseCard.svelte (98%) rename src/lib/cards/{ => _base}/BaseCard/BaseEditingCard.svelte (99%) rename src/lib/cards/{ => _base}/Card/Card.svelte (89%) rename src/lib/cards/{ => _base}/Card/EditingCard.svelte (80%) rename src/lib/cards/{ => content}/StandardSiteDocumentListCard/BlogEntry.svelte (100%) rename src/lib/cards/{ => content}/StandardSiteDocumentListCard/DateTime.svelte (100%) rename src/lib/cards/{ => content}/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte (94%) rename src/lib/cards/{ => content}/StandardSiteDocumentListCard/index.ts (97%) rename src/lib/cards/{ => core}/ImageCard/ImageCard.svelte (96%) rename src/lib/cards/{ => core}/ImageCard/ImageCardSettings.svelte (100%) rename src/lib/cards/{ => core}/ImageCard/index.ts (97%) rename src/lib/cards/{ => core}/LinkCard/CreateLinkCardModal.svelte (94%) rename src/lib/cards/{ => core}/LinkCard/EditingLinkCard.svelte (99%) rename src/lib/cards/{ => core}/LinkCard/LinkCard.svelte (98%) rename src/lib/cards/{ => core}/LinkCard/LinkCardSettings.svelte (100%) rename src/lib/cards/{ => core}/LinkCard/index.ts (97%) rename src/lib/cards/{ => core}/MapCard/CreateMapCardModal.svelte (96%) rename src/lib/cards/{ => core}/MapCard/Map.svelte (98%) rename src/lib/cards/{ => core}/MapCard/MapCard.svelte (91%) rename src/lib/cards/{ => core}/MapCard/MapCardSettings.svelte (100%) rename src/lib/cards/{ => core}/MapCard/index.ts (96%) rename src/lib/cards/{ => core}/SectionCard/EditingSectionCard.svelte (92%) rename src/lib/cards/{ => core}/SectionCard/SectionCard.svelte (91%) rename src/lib/cards/{ => core}/SectionCard/SectionCardSettings.svelte (98%) rename src/lib/cards/{ => core}/SectionCard/index.ts (96%) rename src/lib/cards/{ => core}/TextCard/EditingTextCard.svelte (95%) rename src/lib/cards/{ => core}/TextCard/TextCard.svelte (95%) rename src/lib/cards/{ => core}/TextCard/TextCardSettings.svelte (98%) rename src/lib/cards/{ => core}/TextCard/index.ts (96%) rename src/lib/cards/{GameCards => games}/DinoGameCard/DinoGameCard.svelte (100%) rename src/lib/cards/{GameCards => games}/DinoGameCard/index.ts (100%) rename src/lib/cards/{GameCards => games}/TetrisCard/Tetris8Bit.mp3 (100%) rename src/lib/cards/{GameCards => games}/TetrisCard/TetrisCard.svelte (100%) rename src/lib/cards/{GameCards => games}/TetrisCard/index.ts (100%) rename src/lib/cards/{ => media}/AppleMusicCard/AppleMusicCard.svelte (93%) rename src/lib/cards/{ => media}/AppleMusicCard/CreateAppleMusicCardModal.svelte (95%) rename src/lib/cards/{ => media}/AppleMusicCard/index.ts (98%) rename src/lib/cards/{ => media}/BlueskyMediaCard/BlueskyMediaCard.svelte (95%) rename src/lib/cards/{ => media}/BlueskyMediaCard/CreateBlueskyMediaCardModal.svelte (97%) rename src/lib/cards/{ => media}/BlueskyMediaCard/Video.svelte (100%) rename src/lib/cards/{ => media}/BlueskyMediaCard/index.ts (97%) rename src/lib/cards/{ => media}/EmbedCard/CreateEmbedCardModal.svelte (93%) rename src/lib/cards/{ => media}/EmbedCard/EmbedCard.svelte (85%) rename src/lib/cards/{ => media}/EmbedCard/SidebarItemEmbedCard.svelte (100%) rename src/lib/cards/{ => media}/EmbedCard/index.ts (94%) rename src/lib/cards/{ => media}/GIFCard/CreateGifCardModal.svelte (90%) rename src/lib/cards/{ => media}/GIFCard/EditingGifCard.svelte (97%) rename src/lib/cards/{ => media}/GIFCard/GifCard.svelte (94%) rename src/lib/cards/{ => media}/GIFCard/GifCardSettings.svelte (94%) rename src/lib/cards/{ => media}/GIFCard/GiphySearchModal.svelte (100%) rename src/lib/cards/{ => media}/GIFCard/PoweredByGiphy.gif (100%) rename src/lib/cards/{ => media}/GIFCard/index.ts (97%) rename src/lib/cards/{ => media}/LivestreamCard/Icon.svelte (100%) rename src/lib/cards/{ => media}/LivestreamCard/LivestreamCard.svelte (96%) rename src/lib/cards/{ => media}/LivestreamCard/LivestreamEmbedCard.svelte (89%) rename src/lib/cards/{ => media}/LivestreamCard/index.ts (98%) rename src/lib/cards/{ => media}/PhotoGalleryCard/PhotoGalleryCard.svelte (97%) rename src/lib/cards/{ => media}/PhotoGalleryCard/index.ts (97%) rename src/lib/cards/{ => media}/PopfeedReviews/PopfeedReviewsCard.svelte (97%) rename src/lib/cards/{ => media}/PopfeedReviews/Rating.svelte (100%) rename src/lib/cards/{ => media}/PopfeedReviews/index.ts (96%) rename src/lib/cards/{ => media}/SpotifyCard/CreateSpotifyCardModal.svelte (94%) rename src/lib/cards/{ => media}/SpotifyCard/SpotifyCard.svelte (92%) rename src/lib/cards/{ => media}/SpotifyCard/index.ts (97%) rename src/lib/cards/{ => media}/StatusphereCard/EditStatusphereCard.svelte (97%) rename src/lib/cards/{ => media}/StatusphereCard/SettingsStatusphereCard.svelte (100%) rename src/lib/cards/{ => media}/StatusphereCard/StatusphereCard.svelte (100%) rename src/lib/cards/{ => media}/StatusphereCard/icons.json (100%) rename src/lib/cards/{ => media}/StatusphereCard/index.ts (97%) rename src/lib/cards/{ => media}/TealFMPlaysCard/AlbumArt.svelte (100%) rename src/lib/cards/{ => media}/TealFMPlaysCard/TealFMPlaysCard.svelte (98%) rename src/lib/cards/{ => media}/TealFMPlaysCard/index.ts (95%) rename src/lib/cards/{ => media}/YoutubeVideoCard/CreateYoutubeCardModal.svelte (94%) rename src/lib/cards/{ => media}/YoutubeVideoCard/YoutubeCard.svelte (96%) rename src/lib/cards/{ => media}/YoutubeVideoCard/YoutubeCardSettings.svelte (100%) rename src/lib/cards/{ => media}/YoutubeVideoCard/index.ts (98%) rename src/lib/cards/{ => social}/ATProtoCollectionsCard/ATProtoCollectionsCard.svelte (94%) rename src/lib/cards/{ => social}/ATProtoCollectionsCard/index.ts (96%) rename src/lib/cards/{ => social}/BigSocialCard/BigSocialCard.svelte (94%) rename src/lib/cards/{ => social}/BigSocialCard/CreateBigSocialCardModal.svelte (95%) rename src/lib/cards/{ => social}/BigSocialCard/index.ts (99%) rename src/lib/cards/{ => social}/BlueskyFeedCard/BlueskyFeedCard.svelte (97%) rename src/lib/cards/{ => social}/BlueskyFeedCard/index.ts (98%) rename src/lib/cards/{ => social}/BlueskyPostCard/BlueskyPostCard.svelte (96%) rename src/lib/cards/{ => social}/BlueskyPostCard/CreateBlueskyPostCardModal.svelte (97%) rename src/lib/cards/{ => social}/BlueskyPostCard/index.ts (98%) rename src/lib/cards/{ => social}/BlueskyPostCard/utils.ts (100%) rename src/lib/cards/{ => social}/BlueskyProfileCard/BlueskyProfileCard.svelte (93%) rename src/lib/cards/{ => social}/BlueskyProfileCard/index.ts (85%) rename src/lib/cards/{ => social}/EventCard/CreateEventCardModal.svelte (97%) rename src/lib/cards/{ => social}/EventCard/EventCard.svelte (98%) rename src/lib/cards/{ => social}/EventCard/index.ts (98%) rename src/lib/cards/{ => social}/FriendsCard/FriendsCard.svelte (98%) rename src/lib/cards/{ => social}/FriendsCard/FriendsCardSettings.svelte (92%) rename src/lib/cards/{ => social}/FriendsCard/index.ts (97%) rename src/lib/cards/{ => social}/GitHubContributorsCard/CreateGitHubContributorsCardModal.svelte (96%) rename src/lib/cards/{ => social}/GitHubContributorsCard/GitHubContributorsCard.svelte (99%) rename src/lib/cards/{ => social}/GitHubContributorsCard/GitHubContributorsCardSettings.svelte (96%) rename src/lib/cards/{ => social}/GitHubContributorsCard/index.ts (98%) rename src/lib/cards/{ => social}/GitHubProfileCard/CreateGitHubProfileCardModal.svelte (96%) rename src/lib/cards/{ => social}/GitHubProfileCard/GitHubProfileCard.svelte (97%) rename src/lib/cards/{ => social}/GitHubProfileCard/GithubContributionsGraph.svelte (100%) rename src/lib/cards/{ => social}/GitHubProfileCard/index.ts (98%) rename src/lib/cards/{ => social}/GitHubProfileCard/types.ts (100%) rename src/lib/cards/{ => social}/GuestbookCard/CreateGuestbookCardModal.svelte (98%) rename src/lib/cards/{ => social}/GuestbookCard/GuestbookCard.svelte (96%) rename src/lib/cards/{ => social}/GuestbookCard/index.ts (97%) rename src/lib/cards/{ => social}/KickstarterCard/CreateKickstarterCardModal.svelte (97%) rename src/lib/cards/{ => social}/KickstarterCard/KickstarterCard.svelte (91%) rename src/lib/cards/{ => social}/KickstarterCard/index.ts (97%) rename src/lib/cards/{ => social}/LatestBlueskyPostCard/LatestBlueskyPostCard.svelte (90%) rename src/lib/cards/{ => social}/LatestBlueskyPostCard/SidebarItemLatestBlueskyPostCard.svelte (100%) rename src/lib/cards/{ => social}/LatestBlueskyPostCard/index.ts (96%) rename src/lib/cards/{ => social}/ProductHuntCard/CreateProductHuntCardModal.svelte (96%) rename src/lib/cards/{ => social}/ProductHuntCard/ProductHuntCard.svelte (93%) rename src/lib/cards/{ => social}/ProductHuntCard/index.ts (94%) rename src/lib/cards/{ => social}/VCardCard/VCardCard.svelte (97%) rename src/lib/cards/{ => social}/VCardCard/VCardCardSettings.svelte (98%) rename src/lib/cards/{ => social}/VCardCard/index.ts (98%) rename src/lib/cards/{SpecialCards => special}/UpdatedBlentos/UpdatedBlentosCard.svelte (95%) rename src/lib/cards/{SpecialCards => special}/UpdatedBlentos/index.ts (100%) rename src/lib/cards/{ => utilities}/ButtonCard/ButtonCard.svelte (96%) rename src/lib/cards/{ => utilities}/ButtonCard/ButtonCardSettings.svelte (93%) rename src/lib/cards/{ => utilities}/ButtonCard/EditingButtonCard.svelte (91%) rename src/lib/cards/{ => utilities}/ButtonCard/index.ts (95%) rename src/lib/cards/{ => utilities}/ClockCard/ClockCard.svelte (97%) rename src/lib/cards/{ => utilities}/ClockCard/ClockCardSettings.svelte (100%) rename src/lib/cards/{ => utilities}/ClockCard/index.ts (94%) rename src/lib/cards/{ => utilities}/CountdownCard/CountdownCard.svelte (99%) rename src/lib/cards/{ => utilities}/CountdownCard/CountdownCardSettings.svelte (100%) rename src/lib/cards/{ => utilities}/CountdownCard/index.ts (94%) rename src/lib/cards/{ => utilities}/TimerCard/TimerCard.svelte (99%) rename src/lib/cards/{ => utilities}/TimerCard/TimerCardSettings.svelte (100%) rename src/lib/cards/{ => utilities}/TimerCard/index.ts (95%) rename src/lib/cards/{ => visual}/DrawCard/DrawCard.svelte (96%) rename src/lib/cards/{ => visual}/DrawCard/EditingDrawCard.svelte (99%) rename src/lib/cards/{ => visual}/DrawCard/index.ts (95%) rename src/lib/cards/{ => visual}/FluidTextCard/CreateFluidTextCardModal.svelte (93%) rename src/lib/cards/{ => visual}/FluidTextCard/EditingFluidTextCard.svelte (97%) rename src/lib/cards/{ => visual}/FluidTextCard/FluidTextCard.svelte (99%) rename src/lib/cards/{ => visual}/FluidTextCard/FluidTextCardSettings.svelte (94%) rename src/lib/cards/{ => visual}/FluidTextCard/index.ts (95%) rename src/lib/cards/{ => visual}/Model3DCard/CreateModel3DCardModal.svelte (97%) rename src/lib/cards/{ => visual}/Model3DCard/Model3DCard.svelte (97%) rename src/lib/cards/{ => visual}/Model3DCard/Model3DScene.svelte (100%) rename src/lib/cards/{ => visual}/Model3DCard/index.ts (96%) diff --git a/src/lib/cards/GameCards/README.md b/src/lib/cards/GameCards/README.md deleted file mode 100644 index fbf45c0..0000000 --- a/src/lib/cards/GameCards/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# Game Cards - -This folder contains interactive game cards (Tetris, Dino, etc.). - -## Implementation Requirements - -When creating a new game card, follow these patterns to ensure multiple games on the same page work independently. - -### 1. Container Setup - -Make the game container focusable and handle keyboard events on it (not on `svelte:window`): - -```svelte - - - -
- -
-``` - -### 2. Focus on Game Start - -When the game starts, focus the container so keyboard events work: - -```typescript -function startGame() { - // ... game initialization - container?.focus(); -} -``` - -### 3. Keyboard Handlers - -Do NOT use `` - this captures all keyboard events globally and causes all games to respond at once. - -Instead, attach handlers directly to the container div. The handlers will only fire when that specific game is focused. - -```typescript -function handleKeyDown(e: KeyboardEvent) { - if (e.code === 'Space') { - e.preventDefault(); - // handle action - } -} -``` - -### 4. Canvas Setup - -Add `touch-none` and `select-none` classes to prevent scrolling and text selection during gameplay: - -```svelte - -``` - -### 5. Touch Controls - -For mobile support, add touch event handlers to the canvas. Prevent default to stop page scrolling: - -```typescript -function handleTouchStart(e: TouchEvent) { - if (gameState === 'playing') { - e.preventDefault(); - } - // handle touch -} -``` - -## Checklist for New Game Cards - -- [ ] Container has `bind:this={container}` reference -- [ ] Container has `tabindex="0"` for focusability -- [ ] Container has `role="application"` and `aria-label` -- [ ] Container has `outline-none` class -- [ ] Keyboard handlers are on container, NOT `svelte:window` -- [ ] `startGame()` calls `container?.focus()` -- [ ] Canvas has `touch-none select-none` classes -- [ ] Touch handlers call `e.preventDefault()` when game is active -- [ ] No `isTyping()` check needed (focus handles this automatically) diff --git a/src/lib/cards/BaseCard/BaseCard.svelte b/src/lib/cards/_base/BaseCard/BaseCard.svelte similarity index 98% rename from src/lib/cards/BaseCard/BaseCard.svelte rename to src/lib/cards/_base/BaseCard/BaseCard.svelte index 7585d22..b402a7b 100644 --- a/src/lib/cards/BaseCard/BaseCard.svelte +++ b/src/lib/cards/_base/BaseCard/BaseCard.svelte @@ -4,7 +4,7 @@ import type { WithElementRef } from 'bits-ui'; import type { Snippet } from 'svelte'; import type { HTMLAttributes } from 'svelte/elements'; - import { getColor } from '..'; + import { getColor } from '../..'; import { getIsCoarse } from '$lib/website/context'; function tryGetIsCoarse(): (() => boolean) | undefined { diff --git a/src/lib/cards/BaseCard/BaseEditingCard.svelte b/src/lib/cards/_base/BaseCard/BaseEditingCard.svelte similarity index 99% rename from src/lib/cards/BaseCard/BaseEditingCard.svelte rename to src/lib/cards/_base/BaseCard/BaseEditingCard.svelte index aa77b30..243aae4 100644 --- a/src/lib/cards/BaseCard/BaseEditingCard.svelte +++ b/src/lib/cards/_base/BaseCard/BaseEditingCard.svelte @@ -5,7 +5,7 @@ import type { Item } from '$lib/types'; import { Button, cn, Label, Popover } from '@foxui/core'; import { ColorSelect } from '@foxui/colors'; - import { AllCardDefinitions, CardDefinitionsByType, getColor } from '..'; + import { AllCardDefinitions, CardDefinitionsByType, getColor } from '../..'; import { COLUMNS } from '$lib'; import { getCanEdit, diff --git a/src/lib/cards/Card/Card.svelte b/src/lib/cards/_base/Card/Card.svelte similarity index 89% rename from src/lib/cards/Card/Card.svelte rename to src/lib/cards/_base/Card/Card.svelte index ca17fee..2bbcc6b 100644 --- a/src/lib/cards/Card/Card.svelte +++ b/src/lib/cards/_base/Card/Card.svelte @@ -1,5 +1,5 @@ diff --git a/src/lib/cards/StandardSiteDocumentListCard/BlogEntry.svelte b/src/lib/cards/content/StandardSiteDocumentListCard/BlogEntry.svelte similarity index 100% rename from src/lib/cards/StandardSiteDocumentListCard/BlogEntry.svelte rename to src/lib/cards/content/StandardSiteDocumentListCard/BlogEntry.svelte diff --git a/src/lib/cards/StandardSiteDocumentListCard/DateTime.svelte b/src/lib/cards/content/StandardSiteDocumentListCard/DateTime.svelte similarity index 100% rename from src/lib/cards/StandardSiteDocumentListCard/DateTime.svelte rename to src/lib/cards/content/StandardSiteDocumentListCard/DateTime.svelte diff --git a/src/lib/cards/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte b/src/lib/cards/content/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte similarity index 94% rename from src/lib/cards/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte rename to src/lib/cards/content/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte index 238b0d2..58e5063 100644 --- a/src/lib/cards/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte +++ b/src/lib/cards/content/StandardSiteDocumentListCard/StandardSiteDocumentListCard.svelte @@ -6,8 +6,8 @@ getHandleContext } from '$lib/website/context'; import { onMount } from 'svelte'; - import { CardDefinitionsByType } from '..'; - import type { ContentComponentProps } from '../types'; + import { CardDefinitionsByType } from '../..'; + import type { ContentComponentProps } from '../../types'; import BlogEntry from './BlogEntry.svelte'; import { Button } from '@foxui/core'; diff --git a/src/lib/cards/StandardSiteDocumentListCard/index.ts b/src/lib/cards/content/StandardSiteDocumentListCard/index.ts similarity index 97% rename from src/lib/cards/StandardSiteDocumentListCard/index.ts rename to src/lib/cards/content/StandardSiteDocumentListCard/index.ts index 189a804..214b9a8 100644 --- a/src/lib/cards/StandardSiteDocumentListCard/index.ts +++ b/src/lib/cards/content/StandardSiteDocumentListCard/index.ts @@ -1,5 +1,5 @@ import { getRecord, listRecords, parseUri } from '$lib/atproto'; -import type { CardDefinition } from '../types'; +import type { CardDefinition } from '../../types'; import StandardSiteDocumentListCard from './StandardSiteDocumentListCard.svelte'; export const StandardSiteDocumentListCardDefinition = { diff --git a/src/lib/cards/ImageCard/ImageCard.svelte b/src/lib/cards/core/ImageCard/ImageCard.svelte similarity index 96% rename from src/lib/cards/ImageCard/ImageCard.svelte rename to src/lib/cards/core/ImageCard/ImageCard.svelte index fed4499..b41d671 100644 --- a/src/lib/cards/ImageCard/ImageCard.svelte +++ b/src/lib/cards/core/ImageCard/ImageCard.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte b/src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte similarity index 95% rename from src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte rename to src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte index ac0fd04..7a16d8c 100644 --- a/src/lib/cards/AppleMusicCard/CreateAppleMusicCardModal.svelte +++ b/src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/cards/SpotifyCard/index.ts b/src/lib/cards/media/SpotifyCard/index.ts similarity index 97% rename from src/lib/cards/SpotifyCard/index.ts rename to src/lib/cards/media/SpotifyCard/index.ts index 4e1cdc2..3c8bf99 100644 --- a/src/lib/cards/SpotifyCard/index.ts +++ b/src/lib/cards/media/SpotifyCard/index.ts @@ -1,4 +1,4 @@ -import type { CardDefinition } from '../types'; +import type { CardDefinition } from '../../types'; import CreateSpotifyCardModal from './CreateSpotifyCardModal.svelte'; import SpotifyCard from './SpotifyCard.svelte'; diff --git a/src/lib/cards/StatusphereCard/EditStatusphereCard.svelte b/src/lib/cards/media/StatusphereCard/EditStatusphereCard.svelte similarity index 97% rename from src/lib/cards/StatusphereCard/EditStatusphereCard.svelte rename to src/lib/cards/media/StatusphereCard/EditStatusphereCard.svelte index 4ff5cc1..e98a592 100644 --- a/src/lib/cards/StatusphereCard/EditStatusphereCard.svelte +++ b/src/lib/cards/media/StatusphereCard/EditStatusphereCard.svelte @@ -2,7 +2,7 @@ import type { Item } from '$lib/types'; import { onMount } from 'svelte'; import { getAdditionalUserData, getDidContext, getHandleContext } from '$lib/website/context'; - import { CardDefinitionsByType } from '..'; + import { CardDefinitionsByType } from '../..'; import { PopoverEmojiPicker } from '@foxui/social'; import { emojiToNotoAnimatedWebp } from '.'; diff --git a/src/lib/cards/StatusphereCard/SettingsStatusphereCard.svelte b/src/lib/cards/media/StatusphereCard/SettingsStatusphereCard.svelte similarity index 100% rename from src/lib/cards/StatusphereCard/SettingsStatusphereCard.svelte rename to src/lib/cards/media/StatusphereCard/SettingsStatusphereCard.svelte diff --git a/src/lib/cards/StatusphereCard/StatusphereCard.svelte b/src/lib/cards/media/StatusphereCard/StatusphereCard.svelte similarity index 100% rename from src/lib/cards/StatusphereCard/StatusphereCard.svelte rename to src/lib/cards/media/StatusphereCard/StatusphereCard.svelte diff --git a/src/lib/cards/StatusphereCard/icons.json b/src/lib/cards/media/StatusphereCard/icons.json similarity index 100% rename from src/lib/cards/StatusphereCard/icons.json rename to src/lib/cards/media/StatusphereCard/icons.json diff --git a/src/lib/cards/StatusphereCard/index.ts b/src/lib/cards/media/StatusphereCard/index.ts similarity index 97% rename from src/lib/cards/StatusphereCard/index.ts rename to src/lib/cards/media/StatusphereCard/index.ts index a3d1929..b47e9b7 100644 --- a/src/lib/cards/StatusphereCard/index.ts +++ b/src/lib/cards/media/StatusphereCard/index.ts @@ -1,7 +1,7 @@ // animated emojis from // https://googlefonts.github.io/noto-emoji-animation/ -import type { CardDefinition } from '../types'; +import type { CardDefinition } from '../../types'; import { listRecords, putRecord } from '$lib/atproto'; import StatusphereCard from './StatusphereCard.svelte'; import EditStatusphereCard from './EditStatusphereCard.svelte'; diff --git a/src/lib/cards/TealFMPlaysCard/AlbumArt.svelte b/src/lib/cards/media/TealFMPlaysCard/AlbumArt.svelte similarity index 100% rename from src/lib/cards/TealFMPlaysCard/AlbumArt.svelte rename to src/lib/cards/media/TealFMPlaysCard/AlbumArt.svelte diff --git a/src/lib/cards/TealFMPlaysCard/TealFMPlaysCard.svelte b/src/lib/cards/media/TealFMPlaysCard/TealFMPlaysCard.svelte similarity index 98% rename from src/lib/cards/TealFMPlaysCard/TealFMPlaysCard.svelte rename to src/lib/cards/media/TealFMPlaysCard/TealFMPlaysCard.svelte index 610a352..09c3cab 100644 --- a/src/lib/cards/TealFMPlaysCard/TealFMPlaysCard.svelte +++ b/src/lib/cards/media/TealFMPlaysCard/TealFMPlaysCard.svelte @@ -2,7 +2,7 @@ import type { Item } from '$lib/types'; import { onMount } from 'svelte'; import { getAdditionalUserData, getDidContext, getHandleContext } from '$lib/website/context'; - import { CardDefinitionsByType } from '..'; + import { CardDefinitionsByType } from '../..'; import AlbumArt from './AlbumArt.svelte'; import { RelativeTime } from '@foxui/time'; diff --git a/src/lib/cards/TealFMPlaysCard/index.ts b/src/lib/cards/media/TealFMPlaysCard/index.ts similarity index 95% rename from src/lib/cards/TealFMPlaysCard/index.ts rename to src/lib/cards/media/TealFMPlaysCard/index.ts index 0473ed8..60c68fc 100644 --- a/src/lib/cards/TealFMPlaysCard/index.ts +++ b/src/lib/cards/media/TealFMPlaysCard/index.ts @@ -1,4 +1,4 @@ -import type { CardDefinition } from '../types'; +import type { CardDefinition } from '../../types'; import { listRecords } from '$lib/atproto'; import TealFMPlaysCard from './TealFMPlaysCard.svelte'; diff --git a/src/lib/cards/YoutubeVideoCard/CreateYoutubeCardModal.svelte b/src/lib/cards/media/YoutubeVideoCard/CreateYoutubeCardModal.svelte similarity index 94% rename from src/lib/cards/YoutubeVideoCard/CreateYoutubeCardModal.svelte rename to src/lib/cards/media/YoutubeVideoCard/CreateYoutubeCardModal.svelte index c677f8e..323eabd 100644 --- a/src/lib/cards/YoutubeVideoCard/CreateYoutubeCardModal.svelte +++ b/src/lib/cards/media/YoutubeVideoCard/CreateYoutubeCardModal.svelte @@ -1,6 +1,6 @@ diff --git a/src/lib/cards/ButtonCard/ButtonCardSettings.svelte b/src/lib/cards/utilities/ButtonCard/ButtonCardSettings.svelte similarity index 93% rename from src/lib/cards/ButtonCard/ButtonCardSettings.svelte rename to src/lib/cards/utilities/ButtonCard/ButtonCardSettings.svelte index 2a7eed0..888461b 100644 --- a/src/lib/cards/ButtonCard/ButtonCardSettings.svelte +++ b/src/lib/cards/utilities/ButtonCard/ButtonCardSettings.svelte @@ -1,6 +1,6 @@