SvelteKit Embed
This is a collection of embed components I use on a regular basis packaged up for use.
Each component (except Tweet, Toot and Zencastr) is wrapped in an intersection observer GeneralObserver which will load up the component when it scrolls into the viewport.
Currently the GeneralObserver is enabled so all the components are loaded on page load.
You can toggle the GeneralObserver on and off from here, just bear in mind that if this is the first time you’ve loaded this page then the default is to load all the components.
If you want to see the intersection observer in action then you’ll need to toggle it off, reload the page and scroll down the page.
All props listed are the defaults for the component.
Install it
pnpm i -D sveltekit-embed # npm or yarn even Use it
<!-- +page.svelte --> <script> import { AnchorFm } from 'sveltekit-embed'; </script> <AnchorFm episodeUrl="purrfect-dev/embed/episodes/3-6---Effective-Testing-using-Cypress-io-e1vbg9m" /> Available Components List
Your embed not here? Start a discussion or open a PR.
- AnchorFm
- Buzzsprout
- CodePen
- Deezer
- GenericEmbed
- Gist
- Guild
- Relive
- SimpleCast
- Slides
- SoundCloud
- Spotify
- StackBlitz
- Toot
- Tweet
- Vimeo
- YouTube
- Zencastr
AnchorFm
Props:
episodeUrl: string; height: string = '100px'; width: string = '100%'; disable_observer: boolean = false; Usage:
<AnchorFm episodeUrl="purrfect-dev/embed/episodes/3-6---Effective-Testing-using-Cypress-io-e1vbg9m" /> Output:
Buzzsprout
Props:
buzzsproutId: string; width: string = '100%'; height: string = '200px'; disable_observer: boolean = false; Usage:
<Buzzsprout buzzsproutId="190346/9866589-185-scott-spence-from-vba-analyst-to-webdev" /> Output:
CodePen
Props:
height: string = '500px' width: string = '100%' codePenId: string = '' tabs: | string[] | 'js' | 'css' | 'scss' | 'less' | 'result' = 'result' clickToLoad: boolean = true editable: boolean = true theme: string | 'light' | 'dark' | 'default' = 'default' disable_observer: boolean = false iframe_styles: string = ` height: ${height}; width: ${width}; ` Usage:
For a CodePen URL like this: https://codepen.io/spences10/pen/WNMvXpa take the codePenId this WNMvXpa and add it to the component.
<CodePen codePenId="WNMvXpa" /> Output:
Deezer
Props:
theme: string = 'auto'; frameSrc: string = ''; height: string = '300px'; width: string = '100%'; disable_observer: boolean = false; iframe_styles: string = ` border-radius: 0.6rem; height: ${height}; width: ${width}; `; Usage:
<Deezer frameSrc="show/496882" /> Output:
GenericEmbed
This component passes all provided props to the iframe This component also provides a slot, to bring your own markup besides the iframe
Props:
src: string = ''; title: string = ''; height: string = '152px'; width: string = '100%'; disable_observer: boolean = false; Usage:
<GenericEmbed width="100%" height="152px" data-testid="spotify" title="spotify-generic" src={`https://open.spotify.com/embed/show/4XPl3uEEL9hvqMkoZrzbx5`} frameBorder="0" allow="encrypted-media" style="border-radius: 0.9rem;" /> Output:
Gist
Props:
width = '100%'; height = '320px'; gistUri = ''; disable_observer: boolean = false; iframe_styles: string = ` height: ${height}; width: ${width}; `; Usage:
<Gist gistUri="Ennoriel/8c89dc3615292f0a40b04f4f876afd77" /> Output:
Guild
Props:
height: string = '380px' width: string = '100%' card_id: string type: 'guild' | 'user' | 'event' | 'presentation' = 'guild' display_type: | 'card' | 'item' | 'events/latest' | 'events/upcoming' | 'events/past' | 'presentations/latest' | 'presentations/upcoming' | 'presentations/other' = 'card' disable_observer: boolean = false Usage:
<Guild type="guild" card_id="svelte-society-london" display_type="events/latest" /> Output:
Relive
Props:
reliveId: string = ''; width: string = '100%'; disable_observer: boolean = false; Usage:
<Relive reliveId="vAOZokmYVo6" /> Output:
SimpleCast
Props:
episodeId: string = ''; theme: string = `dark`; disable_observer: boolean = false; Usage:
<SimpleCast episodeId="1c254f66-5d75-48ef-b960-4cfec94baa0b" /> Output:
Slides
Props:
width: string = '100%' height: string = '420px' username: string = '' title: string = '' byline: 'hidden' | 'visible' | 'default' = 'hidden' share: 'hidden' | 'visible' | 'default' = 'hidden' style: | 'light' | 'dark' | 'hidden' | 'transparent' | 'default' = 'dark' disable_observer: boolean = false Usage:
<Slides username="spences10" title="building-with-sveltekit-and-graphql" /> Output:
SoundCloud
Props:
soundcloudLink: string = ''; width: string = '100%'; height: string = '300px'; showVisual: boolean = true; disable_observer: boolean = false; iframe_styles: string = ''; Usage:
<SoundCloud soundcloudLink="https://soundcloud.com/dimension_uk/sets/prospa-want-need-love" /> Output:
Spotify
Props:
spotifyLink: string = ''; height: string = '100%'; width: string = '152px'; disable_observer: boolean = false; iframe_styles: string = ` border-radius: 0.8rem; height: ${height}; width: ${width}; `; Usage:
<Spotify spotifyLink="show/4XPl3uEEL9hvqMkoZrzbx5" /> Output:
StackBlitz
Props:
width: string = '100%' height: string = '500px' id: string = '' view: 'editor' | 'preview' | 'default' = 'default' clickToLoad: boolean = true //ctl hideNavigation: boolean = false //hideNavigation hideExplorer: boolean = true theme: string | 'light' | 'dark' | 'default' = 'dark' file: string | undefined disable_observer: boolean = false iframe_styles: string = ` height: ${height}; width: ${width}; Usage:
<StackBlitz id="vitejs-vite-yyoood" theme="light" /> Output:
Toot
Props:
instance: string = ''; username: string = ''; tootId: string = ''; Usage:
<Toot instance="mas.to" username="@spences10" tootId="109252587760962553" /> Output:
Tweet
Props:
tweetLink: string = ''; Usage:
<Tweet tweetLink="adamwathan/status/959078631434731521" /> Output:
Vimeo
Props:
vimeoId: string = '' autoPlay: boolean = false aspectRatio: string = '16:9' skipTo: { h: 0, m: 0, s: 0 } disable_observer: boolean = false Usage:
<Vimeo vimeoId="246846978" /> Output:
YouTube
Props:
youTubeId: string = '' listId: string = '' autoPlay: boolean = false aspectRatio: string = '16:9' skipTo: { h: 0, m: 0, s: 0 } disable_observer: boolean = false export let iframe_styles: string = ` border-radius: 0.6rem; ` Usage:
<YouTube youTubeId="L7_z8rcbFPg" /> Output:
Zencastr
Props:
zencastrId: string = ''; Usage:
<Zencastr zencastrId="TARGseQu" /> Output:
View on Zencastr