-module(inlay). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/inlay.gleam"). -export([apple_music/2, pixelfed/2, mastodon/2, soundcloud/2, ted/2, openstreetmap/2, twitch/2, instagram/1, bluesky/2, tiktok/1, twitter/1, spotify/2, vimeo/2, youtube/2, detect_with/2, default_config/0, render/1, detect/1, embed/1, bluesky_config/0, youtube_config/0, vimeo_config/0, spotify_config/0, twitch_config/1, openstreetmap_config/0, ted_config/0, soundcloud_config/0, mastodon_config/1, pixelfed_config/2, pixelfed_full/2, pixelfed_compact/0, apple_music_config/0, new/0, youtube_no_cookie/2, vimeo_dnt/2, bluesky_resolver/2, no_youtube/1, no_vimeo/1, no_spotify/1, no_twitter/1, no_tiktok/1, no_bluesky/1, no_instagram/1, no_twitch/1, no_openstreetmap/1, no_ted/1, no_soundcloud/1, no_mastodon/1, no_pixelfed/1, no_apple_music/1, render_with/2, embed_with/2, a_component_with/2, a_component/1, a_component_default/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " Render embedded previews for social media links as Lustre HTML elements.\n" "\n" " Use `detect` to parse a URL into an `Embed`, `render` to turn it into\n" " HTML, or `embed` to do both in one step. All functions have `_with`\n" " variants that accept a custom `Config`.\n" "\n" " ## Example\n" "\n" " ```gleam\n" " case inlay.embed(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\") {\n" " Some(element) -> element\n" " None -> html.text(\"Not an embeddable link\")\n" " }\n" " ```\n" "\n" " ## Configuration\n" "\n" " ```gleam\n" " let config =\n" " inlay.new()\n" " |> inlay.youtube(inlay.youtube_config())\n" " |> inlay.mastodon(inlay.mastodon_config([\"mastodon.social\"]))\n" " ```\n" ). -file("src/inlay.gleam", 358). ?DOC(" Enable Apple Music embeds with the given configuration.\n"). -spec apple_music(inlay@embed:config(), inlay@embed:apple_music_config()) -> inlay@embed:config(). apple_music(Config, Apple_music_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), {some, Apple_music_config}}. -file("src/inlay.gleam", 348). ?DOC(" Enable Pixelfed embeds with the given configuration.\n"). -spec pixelfed(inlay@embed:config(), inlay@embed:pixelfed_config()) -> inlay@embed:config(). pixelfed(Config, Pixelfed_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), {some, Pixelfed_config}, erlang:element(15, Config)}. -file("src/inlay.gleam", 338). ?DOC(" Enable Mastodon embeds with the given configuration.\n"). -spec mastodon(inlay@embed:config(), inlay@embed:mastodon_config()) -> inlay@embed:config(). mastodon(Config, Mastodon_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), {some, Mastodon_config}, erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 325). ?DOC(" Enable SoundCloud embeds with the given configuration.\n"). -spec soundcloud(inlay@embed:config(), inlay@embed:sound_cloud_config()) -> inlay@embed:config(). soundcloud(Config, Soundcloud_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), {some, Soundcloud_config}, erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 315). ?DOC(" Enable TED talk embeds with the given configuration.\n"). -spec ted(inlay@embed:config(), inlay@embed:ted_config()) -> inlay@embed:config(). ted(Config, Ted_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), {some, Ted_config}, erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 302). ?DOC(" Enable OpenStreetMap embeds with the given configuration.\n"). -spec openstreetmap(inlay@embed:config(), inlay@embed:open_street_map_config()) -> inlay@embed:config(). openstreetmap(Config, Osm_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), {some, Osm_config}, erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 292). ?DOC(" Enable Twitch embeds with the given configuration.\n"). -spec twitch(inlay@embed:config(), inlay@embed:twitch_config()) -> inlay@embed:config(). twitch(Config, Twitch_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), {some, Twitch_config}, erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 282). ?DOC(" Enable Instagram embeds.\n"). -spec instagram(inlay@embed:config()) -> inlay@embed:config(). instagram(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), {some, nil}, erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 272). ?DOC(" Enable Bluesky embeds with the given configuration.\n"). -spec bluesky(inlay@embed:config(), inlay@embed:bluesky_config()) -> inlay@embed:config(). bluesky(Config, Bluesky_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), {some, Bluesky_config}, erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 262). ?DOC(" Enable TikTok embeds.\n"). -spec tiktok(inlay@embed:config()) -> inlay@embed:config(). tiktok(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), {some, nil}, erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 252). ?DOC(" Enable Twitter/X embeds.\n"). -spec twitter(inlay@embed:config()) -> inlay@embed:config(). twitter(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), {some, nil}, erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 242). ?DOC(" Enable Spotify embeds with the given configuration.\n"). -spec spotify(inlay@embed:config(), inlay@embed:spotify_config()) -> inlay@embed:config(). spotify(Config, Spotify_config) -> {config, erlang:element(2, Config), erlang:element(3, Config), {some, Spotify_config}, erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 232). ?DOC(" Enable Vimeo embeds with the given configuration.\n"). -spec vimeo(inlay@embed:config(), inlay@embed:vimeo_config()) -> inlay@embed:config(). vimeo(Config, Vimeo_config) -> {config, erlang:element(2, Config), {some, Vimeo_config}, erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 222). ?DOC(" Enable YouTube embeds with the given configuration.\n"). -spec youtube(inlay@embed:config(), inlay@embed:youtube_config()) -> inlay@embed:config(). youtube(Config, Youtube_config) -> {config, {some, Youtube_config}, erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 483). -spec do_render(inlay@embed:embed(), inlay@embed:config()) -> lustre@vdom@vnode:element(any()). do_render(Embed, Config) -> El@1 = case case Embed of {youtube_video, _, _, _} -> inlay@youtube:render(Embed, Config); {youtube_playlist, _} -> inlay@youtube:render(Embed, Config); {vimeo_video, _, _} -> inlay@vimeo:render(Embed, Config); {spotify_media, _, _} -> inlay@spotify:render(Embed, Config); {tweet, _, _} -> inlay@twitter:render(Embed, Config); {tik_tok_video, _, _} -> inlay@tiktok:render(Embed, Config); {bluesky_post, _, _} -> inlay@bluesky:render(Embed, Config); {instagram_post, _, _} -> inlay@instagram:render(Embed, Config); {twitch_channel, _} -> inlay@twitch:render(Embed, Config); {twitch_video, _} -> inlay@twitch:render(Embed, Config); {map_location, _, _, _} -> inlay@openstreetmap:render(Embed, Config); {ted_talk, _} -> inlay@ted:render(Embed, Config); {sound_cloud_track, _} -> inlay@soundcloud:render(Embed, Config); {mastodon_post, _, _, _} -> inlay@mastodon:render(Embed, Config); {pixelfed_post, _, _, _} -> inlay@pixelfed:render(Embed, Config); {apple_music_media, _, _, _, _} -> inlay@apple_music:render(Embed, Config) end of {ok, El} -> El; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, file => <>, module => <<"inlay"/utf8>>, function => <<"do_render"/utf8>>, line => 484, value => _assert_fail, start => 13464, 'end' => 14296, pattern_start => 13475, pattern_end => 13481}) end, El@1. -file("src/inlay.gleam", 503). -spec try_one( gleam@option:option(any()), gleam@uri:uri(), fun((gleam@uri:uri()) -> gleam@option:option(inlay@embed:embed())), fun(() -> gleam@option:option(inlay@embed:embed())) ) -> gleam@option:option(inlay@embed:embed()). try_one(Enabled, Url, Detector, Next) -> case Enabled of {some, _} -> case Detector(Url) of {some, Found} -> {some, Found}; none -> Next() end; none -> Next() end. -file("src/inlay.gleam", 519). -spec try_one_with( gleam@option:option(QHD), gleam@uri:uri(), fun((gleam@uri:uri(), QHD) -> gleam@option:option(inlay@embed:embed())), fun(() -> gleam@option:option(inlay@embed:embed())) ) -> gleam@option:option(inlay@embed:embed()). try_one_with(Enabled, Url, Detector, Next) -> case Enabled of {some, Cfg} -> case Detector(Url, Cfg) of {some, Found} -> {some, Found}; none -> Next() end; none -> Next() end. -file("src/inlay.gleam", 465). -spec do_detect(gleam@uri:uri(), inlay@embed:config()) -> gleam@option:option(inlay@embed:embed()). do_detect(Url, Config) -> try_one_with( erlang:element(13, Config), Url, fun inlay@mastodon:detect/2, fun() -> try_one_with( erlang:element(14, Config), Url, fun inlay@pixelfed:detect/2, fun() -> try_one( erlang:element(2, Config), Url, fun inlay@youtube:detect/1, fun() -> try_one( erlang:element(11, Config), Url, fun inlay@ted:detect/1, fun() -> try_one( erlang:element(3, Config), Url, fun inlay@vimeo:detect/1, fun() -> try_one( erlang:element(4, Config), Url, fun inlay@spotify:detect/1, fun() -> try_one( erlang:element( 7, Config ), Url, fun inlay@bluesky:detect/1, fun() -> try_one( erlang:element( 9, Config ), Url, fun inlay@twitch:detect/1, fun() -> try_one( erlang:element( 12, Config ), Url, fun inlay@soundcloud:detect/1, fun() -> try_one( erlang:element( 5, Config ), Url, fun inlay@twitter:detect/1, fun( ) -> try_one( erlang:element( 6, Config ), Url, fun inlay@tiktok:detect/1, fun( ) -> try_one( erlang:element( 8, Config ), Url, fun inlay@instagram:detect/1, fun( ) -> try_one( erlang:element( 10, Config ), Url, fun inlay@openstreetmap:detect/1, fun( ) -> try_one( erlang:element( 15, Config ), Url, fun inlay@apple_music:detect/1, fun( ) -> none end ) end ) end ) end ) end ) end ) end ) end ) end ) end ) end ) end ) end ) end ). -file("src/inlay.gleam", 376). ?DOC(" Detect an embeddable link from a URL using a custom configuration.\n"). -spec detect_with(binary(), inlay@embed:config()) -> gleam@option:option(inlay@embed:embed()). detect_with(Url, Config) -> case gleam_stdlib:uri_parse(Url) of {ok, Parsed} -> do_detect(Parsed, Config); {error, _} -> none end. -file("src/inlay.gleam", 186). ?DOC( " Create a configuration with commonly used providers enabled.\n" "\n" " Enabled: YouTube, Vimeo, Spotify, Twitter/X, TikTok, Bluesky,\n" " Instagram, OpenStreetMap, TED, SoundCloud, Apple Music.\n" "\n" " Disabled (require explicit setup): Twitch, Mastodon, Pixelfed.\n" ). -spec default_config() -> inlay@embed:config(). default_config() -> inlay@embed:default_config(). -file("src/inlay.gleam", 384). ?DOC(" Render a detected embed as HTML using the default configuration.\n"). -spec render(inlay@embed:embed()) -> lustre@vdom@vnode:element(any()). render(Embed) -> do_render(Embed, default_config()). -file("src/inlay.gleam", 371). ?DOC(" Detect an embeddable link from a URL using the default configuration.\n"). -spec detect(binary()) -> gleam@option:option(inlay@embed:embed()). detect(Url) -> detect_with(Url, default_config()). -file("src/inlay.gleam", 394). ?DOC(" Detect and render in one step using the default configuration.\n"). -spec embed(binary()) -> gleam@option:option(lustre@vdom@vnode:element(any())). embed(Url) -> case detect(Url) of {some, E} -> {some, render(E)}; none -> none end. -file("src/inlay.gleam", 107). ?DOC(" Create a default Bluesky configuration with no handle resolver.\n"). -spec bluesky_config() -> inlay@embed:bluesky_config(). bluesky_config() -> inlay@embed:bluesky_config(). -file("src/inlay.gleam", 112). ?DOC(" Create a default YouTube configuration with privacy-enhanced mode enabled.\n"). -spec youtube_config() -> inlay@embed:youtube_config(). youtube_config() -> inlay@embed:youtube_config(). -file("src/inlay.gleam", 117). ?DOC(" Create a default Vimeo configuration with Do Not Track enabled.\n"). -spec vimeo_config() -> inlay@embed:vimeo_config(). vimeo_config() -> inlay@embed:vimeo_config(). -file("src/inlay.gleam", 122). ?DOC(" Create a default Spotify configuration.\n"). -spec spotify_config() -> inlay@embed:spotify_config(). spotify_config() -> inlay@embed:spotify_config(). -file("src/inlay.gleam", 128). ?DOC( " Create a Twitch configuration. The `parent` domain is required by\n" " Twitch's embed API.\n" ). -spec twitch_config(binary()) -> inlay@embed:twitch_config(). twitch_config(Parent) -> inlay@embed:twitch_config(Parent). -file("src/inlay.gleam", 133). ?DOC(" Create a default OpenStreetMap configuration.\n"). -spec openstreetmap_config() -> inlay@embed:open_street_map_config(). openstreetmap_config() -> inlay@embed:openstreetmap_config(). -file("src/inlay.gleam", 138). ?DOC(" Create a default TED configuration.\n"). -spec ted_config() -> inlay@embed:ted_config(). ted_config() -> inlay@embed:ted_config(). -file("src/inlay.gleam", 143). ?DOC(" Create a default SoundCloud configuration.\n"). -spec soundcloud_config() -> inlay@embed:sound_cloud_config(). soundcloud_config() -> inlay@embed:soundcloud_config(). -file("src/inlay.gleam", 149). ?DOC( " Create a Mastodon configuration. Only posts from the listed `servers`\n" " will be detected.\n" ). -spec mastodon_config(list(binary())) -> inlay@embed:mastodon_config(). mastodon_config(Servers) -> inlay@embed:mastodon_config(Servers). -file("src/inlay.gleam", 155). ?DOC( " Create a Pixelfed configuration. Only posts from the listed `servers`\n" " will be detected.\n" ). -spec pixelfed_config(list(binary()), inlay@embed:pixelfed_layout()) -> inlay@embed:pixelfed_config(). pixelfed_config(Servers, Layout) -> inlay@embed:pixelfed_config(Servers, Layout). -file("src/inlay.gleam", 163). ?DOC(" Pixelfed embed layout that shows the post with optional caption and likes.\n"). -spec pixelfed_full(boolean(), boolean()) -> inlay@embed:pixelfed_layout(). pixelfed_full(Caption, Likes) -> {full, Caption, Likes}. -file("src/inlay.gleam", 171). ?DOC(" Pixelfed embed layout that shows a compact view of the post.\n"). -spec pixelfed_compact() -> inlay@embed:pixelfed_layout(). pixelfed_compact() -> compact. -file("src/inlay.gleam", 176). ?DOC(" Create a default Apple Music configuration.\n"). -spec apple_music_config() -> inlay@embed:apple_music_config(). apple_music_config() -> inlay@embed:apple_music_config(). -file("src/inlay.gleam", 192). ?DOC( " Create a configuration with all providers disabled.\n" " Enable providers selectively with the builder functions.\n" ). -spec new() -> inlay@embed:config(). new() -> inlay@embed:new(). -file("src/inlay.gleam", 198). ?DOC( " Set whether YouTube embeds use the privacy-enhanced `youtube-nocookie.com`\n" " domain. Enabled by default.\n" ). -spec youtube_no_cookie(inlay@embed:youtube_config(), boolean()) -> inlay@embed:youtube_config(). youtube_no_cookie(Config, No_cookie) -> {youtube_config, No_cookie, erlang:element(3, Config)}. -file("src/inlay.gleam", 207). ?DOC( " Set whether Vimeo embeds include the Do Not Track flag.\n" " Enabled by default.\n" ). -spec vimeo_dnt(inlay@embed:vimeo_config(), boolean()) -> inlay@embed:vimeo_config(). vimeo_dnt(Config, Dnt) -> {vimeo_config, Dnt, erlang:element(3, Config)}. -file("src/inlay.gleam", 213). ?DOC( " Set a function that resolves a Bluesky handle (e.g. `\"user.bsky.social\"`)\n" " to a DID. When provided, embeds render with richer Bluesky markup.\n" ). -spec bluesky_resolver( inlay@embed:bluesky_config(), fun((binary()) -> {ok, binary()} | {error, nil}) ) -> inlay@embed:bluesky_config(). bluesky_resolver(Config, Resolve) -> {bluesky_config, _} = Config, {bluesky_config, {some, Resolve}}. -file("src/inlay.gleam", 227). ?DOC(" Disable YouTube embeds.\n"). -spec no_youtube(inlay@embed:config()) -> inlay@embed:config(). no_youtube(Config) -> {config, none, erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 237). ?DOC(" Disable Vimeo embeds.\n"). -spec no_vimeo(inlay@embed:config()) -> inlay@embed:config(). no_vimeo(Config) -> {config, erlang:element(2, Config), none, erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 247). ?DOC(" Disable Spotify embeds.\n"). -spec no_spotify(inlay@embed:config()) -> inlay@embed:config(). no_spotify(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), none, erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 257). ?DOC(" Disable Twitter/X embeds.\n"). -spec no_twitter(inlay@embed:config()) -> inlay@embed:config(). no_twitter(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), none, erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 267). ?DOC(" Disable TikTok embeds.\n"). -spec no_tiktok(inlay@embed:config()) -> inlay@embed:config(). no_tiktok(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), none, erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 277). ?DOC(" Disable Bluesky embeds.\n"). -spec no_bluesky(inlay@embed:config()) -> inlay@embed:config(). no_bluesky(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), none, erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 287). ?DOC(" Disable Instagram embeds.\n"). -spec no_instagram(inlay@embed:config()) -> inlay@embed:config(). no_instagram(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), none, erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 297). ?DOC(" Disable Twitch embeds.\n"). -spec no_twitch(inlay@embed:config()) -> inlay@embed:config(). no_twitch(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), none, erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 310). ?DOC(" Disable OpenStreetMap embeds.\n"). -spec no_openstreetmap(inlay@embed:config()) -> inlay@embed:config(). no_openstreetmap(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), none, erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 320). ?DOC(" Disable TED talk embeds.\n"). -spec no_ted(inlay@embed:config()) -> inlay@embed:config(). no_ted(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), none, erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 333). ?DOC(" Disable SoundCloud embeds.\n"). -spec no_soundcloud(inlay@embed:config()) -> inlay@embed:config(). no_soundcloud(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), none, erlang:element(13, Config), erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 343). ?DOC(" Disable Mastodon embeds.\n"). -spec no_mastodon(inlay@embed:config()) -> inlay@embed:config(). no_mastodon(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), none, erlang:element(14, Config), erlang:element(15, Config)}. -file("src/inlay.gleam", 353). ?DOC(" Disable Pixelfed embeds.\n"). -spec no_pixelfed(inlay@embed:config()) -> inlay@embed:config(). no_pixelfed(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), none, erlang:element(15, Config)}. -file("src/inlay.gleam", 366). ?DOC(" Disable Apple Music embeds.\n"). -spec no_apple_music(inlay@embed:config()) -> inlay@embed:config(). no_apple_music(Config) -> {config, erlang:element(2, Config), erlang:element(3, Config), erlang:element(4, Config), erlang:element(5, Config), erlang:element(6, Config), erlang:element(7, Config), erlang:element(8, Config), erlang:element(9, Config), erlang:element(10, Config), erlang:element(11, Config), erlang:element(12, Config), erlang:element(13, Config), erlang:element(14, Config), none}. -file("src/inlay.gleam", 389). ?DOC(" Render a detected embed as HTML using a custom configuration.\n"). -spec render_with(inlay@embed:embed(), inlay@embed:config()) -> lustre@vdom@vnode:element(any()). render_with(Embed, Config) -> do_render(Embed, Config). -file("src/inlay.gleam", 402). ?DOC(" Detect and render in one step using a custom configuration.\n"). -spec embed_with(binary(), inlay@embed:config()) -> gleam@option:option(lustre@vdom@vnode:element(any())). embed_with(Url, Config) -> case detect_with(Url, Config) of {some, E} -> {some, render_with(E, Config)}; none -> none end. -file("src/inlay.gleam", 421). ?DOC(" Create an anchor component with a custom configuration.\n"). -spec a_component_with( inlay@embed:config(), fun((gleam@dict:dict(binary(), binary()), binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFX))) -> lustre@vdom@vnode:element(QFX)) ) -> fun((gleam@dict:dict(binary(), binary()), binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFX))) -> lustre@vdom@vnode:element(QFX)). a_component_with(Config, Fallback) -> fun(Attributes, Href, Title, Children) -> case embed_with(Href, Config) of {some, El} -> El; none -> Fallback(Attributes, Href, Title, Children) end end. -file("src/inlay.gleam", 412). ?DOC( " Create an anchor component that renders embeds for recognized URLs\n" " and delegates to `fallback` for unrecognized ones.\n" " Uses the default configuration.\n" ). -spec a_component( fun((gleam@dict:dict(binary(), binary()), binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFK))) -> lustre@vdom@vnode:element(QFK)) ) -> fun((gleam@dict:dict(binary(), binary()), binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFK))) -> lustre@vdom@vnode:element(QFK)). a_component(Fallback) -> a_component_with(default_config(), Fallback). -file("src/inlay.gleam", 451). -spec default_fallback( gleam@dict:dict(binary(), binary()), binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QGR)) ) -> lustre@vdom@vnode:element(QGR). default_fallback(_, Href, Title, Children) -> Attrs = [lustre@attribute:href(Href)], Attrs@1 = case Title of {some, T} -> [lustre@attribute:title(T) | Attrs]; none -> Attrs end, lustre@element@html:a(Attrs@1, Children). -file("src/inlay.gleam", 442). ?DOC( " Create an anchor component using the default configuration and\n" " a standard `` tag fallback.\n" ). -spec a_component_default() -> fun((gleam@dict:dict(binary(), binary()), binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QGK))) -> lustre@vdom@vnode:element(QGK)). a_component_default() -> a_component(fun default_fallback/4).