-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", 356). ?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", 346). ?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", 336). ?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", 323). ?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", 313). ?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", 300). ?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", 290). ?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", 280). ?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", 270). ?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", 260). ?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", 250). ?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", 240). ?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", 230). ?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", 220). ?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", 467). -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 => 468, value => _assert_fail, start => 13170, 'end' => 14002, pattern_start => 13181, pattern_end => 13187}) end, El@1. -file("src/inlay.gleam", 487). -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", 503). -spec try_one_with( gleam@option:option(QGR), gleam@uri:uri(), fun((gleam@uri:uri(), QGR) -> 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", 449). -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", 374). ?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", 185). ?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", 382). ?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", 369). ?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", 392). ?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", 106). ?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", 111). ?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", 116). ?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", 121). ?DOC(" Create a default Spotify configuration.\n"). -spec spotify_config() -> inlay@embed:spotify_config(). spotify_config() -> inlay@embed:spotify_config(). -file("src/inlay.gleam", 127). ?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", 132). ?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", 137). ?DOC(" Create a default TED configuration.\n"). -spec ted_config() -> inlay@embed:ted_config(). ted_config() -> inlay@embed:ted_config(). -file("src/inlay.gleam", 142). ?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", 148). ?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", 154). ?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", 162). ?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", 170). ?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", 175). ?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", 191). ?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", 197). ?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", 206). ?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", 212). ?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, {some, Resolve}}. -file("src/inlay.gleam", 225). ?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", 235). ?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", 245). ?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", 255). ?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", 265). ?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", 275). ?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", 285). ?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", 295). ?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", 308). ?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", 318). ?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", 331). ?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", 341). ?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", 351). ?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", 364). ?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", 387). ?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", 400). ?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", 417). ?DOC(" Create an anchor component with a custom configuration.\n"). -spec a_component_with( inlay@embed:config(), fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFR))) -> lustre@vdom@vnode:element(QFR)) ) -> fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFR))) -> lustre@vdom@vnode:element(QFR)). a_component_with(Config, Fallback) -> fun(Href, Title, Children) -> case embed_with(Href, Config) of {some, El} -> El; none -> Fallback(Href, Title, Children) end end. -file("src/inlay.gleam", 410). ?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((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFI))) -> lustre@vdom@vnode:element(QFI)) ) -> fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFI))) -> lustre@vdom@vnode:element(QFI)). a_component(Fallback) -> a_component_with(default_config(), Fallback). -file("src/inlay.gleam", 436). -spec default_fallback( binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QGF)) ) -> lustre@vdom@vnode:element(QGF). 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", 431). ?DOC( " Create an anchor component using the default configuration and\n" " a standard `` tag fallback.\n" ). -spec a_component_default() -> fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QGA))) -> lustre@vdom@vnode:element(QGA)). a_component_default() -> a_component(fun default_fallback/3).