-module(inlay@embed). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/inlay/embed.gleam"). -export([bluesky_config/0, twitter_config/0, tiktok_config/0, instagram_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, apple_music_config/0, default_config/0, new/0]). -export_type([embed/0, spotify_media_type/0, apple_music_media_type/0, instagram_post_type/0, pixelfed_layout/0, config/0, youtube_config/0, vimeo_config/0, spotify_config/0, bluesky_config/0, twitter_config/0, tik_tok_config/0, instagram_config/0, twitch_config/0, open_street_map_config/0, ted_config/0, sound_cloud_config/0, mastodon_config/0, pixelfed_config/0, apple_music_config/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(" Types and configuration for embeddable social media links.\n"). -type embed() :: {youtube_video, binary(), gleam@option:option(integer()), gleam@option:option(binary())} | {youtube_playlist, binary()} | {vimeo_video, binary(), gleam@option:option(binary())} | {spotify_media, spotify_media_type(), binary()} | {tweet, binary(), binary()} | {tik_tok_video, binary(), binary()} | {bluesky_post, binary(), binary()} | {instagram_post, instagram_post_type(), binary()} | {twitch_channel, binary()} | {twitch_video, binary()} | {map_location, integer(), float(), float()} | {ted_talk, binary()} | {sound_cloud_track, binary()} | {mastodon_post, binary(), binary(), binary()} | {pixelfed_post, binary(), binary(), binary()} | {apple_music_media, apple_music_media_type(), binary(), binary(), binary()}. -type spotify_media_type() :: spotify_playlist | spotify_track | spotify_album | spotify_artist | spotify_episode | spotify_show. -type apple_music_media_type() :: apple_music_album | apple_music_artist | apple_music_playlist | {apple_music_song, binary()} | apple_music_music_video. -type instagram_post_type() :: post | reel | t_v. -type pixelfed_layout() :: {full, boolean(), boolean()} | compact. -type config() :: {config, gleam@option:option(youtube_config()), gleam@option:option(vimeo_config()), gleam@option:option(spotify_config()), gleam@option:option(twitter_config()), gleam@option:option(tik_tok_config()), gleam@option:option(bluesky_config()), gleam@option:option(instagram_config()), gleam@option:option(twitch_config()), gleam@option:option(open_street_map_config()), gleam@option:option(ted_config()), gleam@option:option(sound_cloud_config()), gleam@option:option(mastodon_config()), gleam@option:option(pixelfed_config()), gleam@option:option(apple_music_config())}. -type youtube_config() :: {youtube_config, boolean(), gleam@option:option(binary())}. -type vimeo_config() :: {vimeo_config, boolean(), gleam@option:option(binary())}. -type spotify_config() :: {spotify_config, gleam@option:option(integer()), gleam@option:option(integer()), gleam@option:option(integer())}. -type bluesky_config() :: {bluesky_config, gleam@option:option(fun((binary()) -> {ok, binary()} | {error, nil})), gleam@option:option(integer())}. -type twitter_config() :: {twitter_config, gleam@option:option(integer())}. -type tik_tok_config() :: {tik_tok_config, gleam@option:option(integer())}. -type instagram_config() :: {instagram_config, gleam@option:option(integer())}. -type twitch_config() :: {twitch_config, binary(), gleam@option:option(binary())}. -type open_street_map_config() :: {open_street_map_config, gleam@option:option(binary())}. -type ted_config() :: {ted_config, gleam@option:option(binary())}. -type sound_cloud_config() :: {sound_cloud_config, gleam@option:option(integer()), gleam@option:option(integer())}. -type mastodon_config() :: {mastodon_config, list(binary()), gleam@option:option(integer()), gleam@option:option(integer())}. -type pixelfed_config() :: {pixelfed_config, list(binary()), pixelfed_layout(), gleam@option:option(integer()), gleam@option:option(integer())}. -type apple_music_config() :: {apple_music_config, gleam@option:option(integer()), gleam@option:option(integer()), gleam@option:option(integer())}. -file("src/inlay/embed.gleam", 191). ?DOC(" Create a default Bluesky configuration with no handle resolver.\n"). -spec bluesky_config() -> bluesky_config(). bluesky_config() -> {bluesky_config, none, none}. -file("src/inlay/embed.gleam", 196). ?DOC(" Create a default Twitter/X configuration.\n"). -spec twitter_config() -> twitter_config(). twitter_config() -> {twitter_config, none}. -file("src/inlay/embed.gleam", 201). ?DOC(" Create a default TikTok configuration.\n"). -spec tiktok_config() -> tik_tok_config(). tiktok_config() -> {tik_tok_config, none}. -file("src/inlay/embed.gleam", 206). ?DOC(" Create a default Instagram configuration.\n"). -spec instagram_config() -> instagram_config(). instagram_config() -> {instagram_config, none}. -file("src/inlay/embed.gleam", 211). ?DOC(" Create a default YouTube configuration with privacy-enhanced mode enabled.\n"). -spec youtube_config() -> youtube_config(). youtube_config() -> {youtube_config, true, none}. -file("src/inlay/embed.gleam", 216). ?DOC(" Create a default Vimeo configuration with Do Not Track enabled.\n"). -spec vimeo_config() -> vimeo_config(). vimeo_config() -> {vimeo_config, true, none}. -file("src/inlay/embed.gleam", 221). ?DOC(" Create a default Spotify configuration.\n"). -spec spotify_config() -> spotify_config(). spotify_config() -> {spotify_config, none, none, none}. -file("src/inlay/embed.gleam", 226). ?DOC(" Create a Twitch configuration with the required parent domain.\n"). -spec twitch_config(binary()) -> twitch_config(). twitch_config(Parent) -> {twitch_config, Parent, none}. -file("src/inlay/embed.gleam", 231). ?DOC(" Create a default OpenStreetMap configuration.\n"). -spec openstreetmap_config() -> open_street_map_config(). openstreetmap_config() -> {open_street_map_config, none}. -file("src/inlay/embed.gleam", 236). ?DOC(" Create a default TED configuration.\n"). -spec ted_config() -> ted_config(). ted_config() -> {ted_config, none}. -file("src/inlay/embed.gleam", 241). ?DOC(" Create a default SoundCloud configuration.\n"). -spec soundcloud_config() -> sound_cloud_config(). soundcloud_config() -> {sound_cloud_config, none, none}. -file("src/inlay/embed.gleam", 246). ?DOC(" Create a Mastodon configuration for the given server allowlist.\n"). -spec mastodon_config(list(binary())) -> mastodon_config(). mastodon_config(Servers) -> {mastodon_config, Servers, none, none}. -file("src/inlay/embed.gleam", 251). ?DOC(" Create a Pixelfed configuration for the given server allowlist and layout.\n"). -spec pixelfed_config(list(binary()), pixelfed_layout()) -> pixelfed_config(). pixelfed_config(Servers, Layout) -> {pixelfed_config, Servers, Layout, none, none}. -file("src/inlay/embed.gleam", 259). ?DOC(" Create a default Apple Music configuration.\n"). -spec apple_music_config() -> apple_music_config(). apple_music_config() -> {apple_music_config, none, none, none}. -file("src/inlay/embed.gleam", 269). ?DOC( " Create a default 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() -> config(). default_config() -> {config, {some, youtube_config()}, {some, vimeo_config()}, {some, spotify_config()}, {some, twitter_config()}, {some, tiktok_config()}, {some, bluesky_config()}, {some, instagram_config()}, none, {some, openstreetmap_config()}, {some, ted_config()}, {some, soundcloud_config()}, none, none, {some, apple_music_config()}}. -file("src/inlay/embed.gleam", 291). ?DOC( " Create an empty configuration with all providers disabled.\n" " Enable providers selectively with the builder functions in the `inlay`\n" " module.\n" ). -spec new() -> config(). new() -> {config, none, none, none, none, none, none, none, none, none, none, none, none, none, none}.