{"version":3,"sources":["jsdelivr-header.js","/npm/bluesky-profile-card-embed@1.0.1/dist/core.js","/npm/bluesky-profile-card-embed@1.0.1/dist/wc.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,wKCHA,MAAM,EAAa,SACb,EAAgB,QAOtB,SAAS,EAAY,EAAO,GAC3B,MAAM,EAAM,OAAO,GAAS,IAEtB,EAAU,EAAU,EAAa,EACvC,EAAQ,UAAY,EAEpB,IAAI,EAAU,GACV,EAAO,EAEX,KAAO,EAAQ,KAAK,IAAM,CACzB,MAAM,EAAI,EAAQ,UAAY,EACxB,EAAK,EAAI,GACf,GAAW,EAAI,UAAU,EAAM,IAAa,MAAP,EAAa,QAAiB,MAAP,EAAa,SAAW,QACpF,EAAO,EAAI,CACb,CAEC,OAAO,EAAU,EAAI,UAAU,EAChC,CASA,SAAS,EAAK,EAAM,EAAO,GAAa,GAKvC,GAHa,WAAT,GAA+B,gBAAV,IACxB,GAAa,GAED,MAAT,IAAmB,GAAS,EAAa,MAAO,GAGpD,MAAO,IAAI,IADQ,EAAa,GAAK,KAAK,EADvB,GAC+C,OAEnE,CA4CA,SAAS,EAAW,EAAO,EAAM,GAChC,IAAI,EArCL,SAAkB,EAAO,GACxB,IAAI,EAAqB,MAAT,EAAgB,GAAK,GAAK,EAM1C,MAAqB,MAHpB,EAAY,EAAY,EAAY,IAAM,EAAO,GAGxB,KAAO,CAClC,CA6Bc,CAAS,EAAO,GAC7B,OAAO,EAAS,WAAW,EAAY,GAAQ,MAAW,EAC3D,CAUA,SAAS,EAAY,EAAY,GAChC,MAAM,SAAE,GAAa,EAErB,EAAW,KAAK,wCAChB,EAAS,GACT,EAAW,KAAK,SACjB,CAEA,MAAM,EAAiB,GACd,4BAA4B,IAQ/B,EAAgB,CACpB,QAAS,CACP,KAAM,uBACN,MAJgB,GAMlB,QAAS,CACP,KAAM,kBACN,MARgB,GAUlB,KAAM,CACJ,KAAM,gBACN,MAbc,GAehB,OAAQ,CACN,KAAM,sBACN,MAjBc,GAmBhB,gBAAiB,CACf,KAAM,gBACN,MArBc,GAuBhB,OAAQ,CACN,KAAM,SACN,MAzBc,IA6CZ,EAAO,IAAI,KAAK,aAAa,SAC7B,EAAU,IAAI,KAAK,aAAa,QAAS,CAAE,SAAU,YACrD,EAAuB,GACvB,EAAQ,IACH,GAAK,EAEV,EAAQ,IACH,EAAK,OAAO,GAEd,EAAQ,OAAO,GAGlB,EAAU,eAgChB,SAAS,EAAa,EAAY,GACjC,CACC,MAAM,QAAE,GAAY,EACd,EAAM,EAAc,EAAQ,KAC5B,EAjEU,EAAC,EAAQ,KACzB,GAAI,GAAQ,OACV,IAAK,IAAI,EAAM,EAAG,EAAM,EAAO,OAAQ,EAAM,EAAK,IAAO,CACvD,MAAM,EAAQ,EAAO,GACf,EAAM,EAAM,IAClB,KAAM,KAAO,GACX,SAEF,MAAM,EAAM,EAAc,GAC1B,KApCc,EAoCV,EAAI,OAAuB,EAAM,MAAQ,GAG7C,OAAO,CACb,CACA,EAmDoB,CAAU,EAAQ,OAAQ,EAAQ,KAEpD,EAAW,KAAK,uFAEZ,EAAQ,QACX,EAAW,KAAK,sBAAsB,EAAK,MAAO,EAAQ,iBAAiB,EAAW,UAAY,EAAY,cAAgB,IAAK,iBAGpI,EAAW,KAAK,wEAAwE,EAAK,OAAQ,uDAEjG,EAAQ,QACX,EAAW,KAAK,sBAAsB,EAAK,MAAO,EAAQ,iBAAiB,EAAW,UAAY,EAAY,cAAgB,IAAK,iBAGpI,EAAW,KAAK,wCAAwC,EAAK,OAAQ,w4BAA04B,EAAY,EAAQ,aAAa,QAAU,EAAQ,OAAO,MAAM,EAAG,wCAAwC,EAAY,EAAQ,qHAAqH,EAAY,EAAoB,EAAQ,gBAAkB,oBAAoB,EAAuC,IAA3B,EAAQ,eAAuB,WAAa,kGAAkG,EAAY,EAAoB,EAAQ,cAAgB,mDAE/9C,EAAQ,aAAa,QAlD3B,SAA+B,EAAY,GAC1C,CACC,MAAM,KAAE,GAAS,EAEjB,EAAW,KAAK,4CAEhB,MAAM,EAA+B,EAAS,GAE9C,IAAK,IAAI,EAAU,EAAG,EAAW,EAAW,OAAQ,EAAU,EAAU,IAAW,CAClF,IAAI,EAAQ,EAAW,GAEJ,aAAf,EAAM,KACT,EAAW,KAAK,qBAAqB,EAAK,OAAQ,EAAM,uDAAuD,EAAY,EAAM,IAAI,QAAQ,EAAS,YAEnI,YAAf,EAAM,KACT,EAAW,KAAK,qBAAqB,EAAK,OAAQ,EAAc,EAAM,sCAAsC,EAAY,EAAM,YAE3G,UAAf,EAAM,KACT,EAAW,KAAK,qBAAqB,EAAK,QAjFzB,EAiF+C,EAAM,KAhFnE,4BAA4B,mCAgF2E,EAAY,EAAM,YAE5H,EAAW,KAAK,GAAG,EAAY,EAAM,OAI3C,CAEE,EAAW,KAAK,OAClB,CA1FsB,IAAC,CA2FvB,CAuBG,CAAsB,EAAY,CAAE,KAAM,EAAQ,cAGnD,EAAW,KAAK,eAClB,CACA,CAEA,SAAS,EAAQ,EAAY,GAC5B,EAAY,EAAY,CACvB,SAAW,IACV,EAAW,KAAK,iCAAiC,EAAY,WAAa,GAE7E,CAEA,SAAS,EAAqB,EAAY,GACzC,CACC,MAAM,QAAE,EAAO,qBAAE,GAAyB,EACpC,GAAkB,GAAwB,GAAS,QAAQ,MAAM,GAhJxC,wBAgJkD,EAAM,MAEvE,OAAZ,EACH,EAAQ,EAAY,yDAEhB,EACH,EAAQ,EAAY,mFAEpB,EAAY,EAAY,CACvB,SAAW,IACV,EAAa,EAAY,CAAE,WAAU,GAI3C,CACA,CClQA,MAAM,UAA2B,YAC/B,iBAAA,GACE,KAAK,OAAO,MACV,IAAM,KAAK,cAAc,IAAI,YAAY,aACxC,IAEC,GADkB,KAAK,cAAc,IAAI,YAAY,QAAS,CAAE,OAAQ,KAEtE,MAAM,CAChB,GAGA,CACE,UAAM,GACJ,MAAM,EAAQ,KAAK,aAAa,SAC1B,EAAa,KAAK,aAAa,qBAAkB,EACjD,EAAsE,OAA/C,KAAK,aAAa,yBACzC,EAAyC,OAAhC,KAAK,aAAa,UAC3B,ODmPe,OAAO,IAC9B,MAAM,EAAQ,EAAK,MACb,EAAuB,EAAK,uBAAwB,EACpD,EAAM,IAAI,EAAK,CAAE,QAAS,EAAmB,CAAE,QAAS,EAAK,YArKzC,mCAsKlB,KAAM,SAAkB,EAAI,IAAI,4BAA6B,CACnE,OAAQ,EAAK,OACb,OAAQ,CAAE,WACT,OAAO,GACJ,aAAe,GACA,mBAAb,EAAI,MAAiD,sBAApB,EAAI,YAChC,CAAE,KAAM,MAGZ,QAAQ,OAAO,KAExB,MAAO,CAAE,UAAS,uBAAsB,EClQnB,CAAiB,CAAE,QAAO,uBAAsB,eAAc,OAAO,IACtF,GAAI,EAEF,OADA,QAAQ,KAAK,gCAAiC,GACvC,KAET,MAAM,CAAK,IAEb,GAAa,OAAT,EACF,OAEF,MAAM,ED0PgB,CAAC,GA9M3B,SAAgB,EAAW,EAAU,IACpC,IAAI,EAAM,GAGV,OA2Me,EA7ME,CAAE,IAAA,CAAK,GAAK,GAAO,CAAE,GAClB,EAAQ,OAAS,IAC9B,CAAE,KAAM,EAChB,CA0MS,CAAO,EAAsB,CAAE,MAAO,IAAQ,KC3PtC,CAAkB,GACzB,EAAO,KAAK,WAClB,GAAK,EAEE,CACL,MAAM,EAAW,SAAS,cAAc,YACxC,EAAS,UAAY,EACrB,MAAM,EAAW,EAAS,QACpB,EAAO,EAAK,cAAc,QAC5B,EACF,EAAK,YAAY,GAEjB,EAAK,YAAY,EAEzB,MAXM,KAAK,UAAY,CAYvB,EAEA,eAAe,OAAO,uBAAwB,U","file":"/npm/bluesky-profile-card-embed@1.0.1/dist/wc.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/bluesky-profile-card-embed@1.0.1/dist/wc.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { XRPC, simpleFetchHandler, XRPCError } from '@atcute/client';\nimport { tokenize } from '@atcute/bluesky-richtext-parser';\n\nconst ATTR_REGEX = /[&\"<]/g;\nconst CONTENT_REGEX = /[&<]/g;\n\n/**\n * @template V\n * @param {V} value\n * @param {boolean} [is_attr]\n */\nfunction escape_html(value, is_attr) {\n\tconst str = String(value ?? '');\n\n\tconst pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX;\n\tpattern.lastIndex = 0;\n\n\tlet escaped = '';\n\tlet last = 0;\n\n\twhile (pattern.test(str)) {\n\t\tconst i = pattern.lastIndex - 1;\n\t\tconst ch = str[i];\n\t\tescaped += str.substring(last, i) + (ch === '&' ? '&amp;' : ch === '\"' ? '&quot;' : '&lt;');\n\t\tlast = i + 1;\n\t}\n\n\treturn escaped + str.substring(last);\n}\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nfunction attr(name, value, is_boolean = false) {\n\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized = value;\n\tconst assignment = is_boolean ? '' : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nfunction to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\t{\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/** @import { Component } from 'svelte' */\n/** @import { RenderOutput } from './types.js' */\n\n/**\n * @template {Record<string, any>} Props\n * @param {Component<Props>} component\n * @param {{ props?: Omit<Props, '$$slots' | '$$events'> }} [options]\n * @returns {RenderOutput}\n */\nfunction render(component, options = {}) {\n\tlet out = '';\n\tconst renderer = { push(s) { out += s; } };\n\tcomponent(renderer, options.props ?? {});\n\treturn { body: out };\n}\n\n/** @import { ComponentType, SvelteComponent, Component } from 'svelte' */\n/** @import { RenderOutput } from '#server' */\n/** @import { Store } from '#shared' */\n/** @import { AccumulatedContent } from './renderer.js' */\n\n/**\n * @param {any} value\n * @param {string | undefined} [hash]\n * @param {Record<string, boolean>} [directives]\n */\nfunction attr_class(value, hash, directives) {\n\tvar result = to_class(value, hash);\n\treturn result ? ` class=\"${escape_html(result, true)}\"` : '';\n}\n\n/** @param {any} array_like_or_iterator */\nfunction ensure_array_like(array_like_or_iterator) {\n\treturn array_like_or_iterator;\n}\n\nconst DEFAULT_APPVIEW_URL = \"https://public.api.bsky.app\";\nconst NO_UNAUTHENTICATED_LABEL = \"!no-unauthenticated\";\n\nfunction Embed_frame($$renderer, $$props) {\n\tconst { children } = $$props;\n\n\t$$renderer.push(`<div class=\"bluesky-embed s-dgn7w7\">`);\n\tchildren($$renderer);\n\t$$renderer.push(`</div>`);\n}\n\nconst getProfileUrl = (author) => {\n  return `https://bsky.app/profile/${author}`;\n};\nconst getHashtagUrl = (tag) => {\n  return `https://bsky.app/hashtag/${tag}`;\n};\n\nconst FlagsNone = 0;\nconst FlagsNoSelf = 1 << 0;\nconst LABEL_MAPPING = {\n  \"!hide\": {\n    name: `Hidden by moderators`,\n    flags: FlagsNoSelf\n  },\n  \"!warn\": {\n    name: `Content warning`,\n    flags: FlagsNoSelf\n  },\n  porn: {\n    name: `Adult content`,\n    flags: FlagsNone\n  },\n  sexual: {\n    name: `Sexually suggestive`,\n    flags: FlagsNone\n  },\n  \"graphic-media\": {\n    name: `Graphic media`,\n    flags: FlagsNone\n  },\n  nudity: {\n    name: `Nudity`,\n    flags: FlagsNone\n  }\n};\nconst findLabel = (labels, authorDid) => {\n  if (labels?.length) {\n    for (let idx = 0, len = labels.length; idx < len; idx++) {\n      const label = labels[idx];\n      const val = label.val;\n      if (!(val in LABEL_MAPPING)) {\n        continue;\n      }\n      const def = LABEL_MAPPING[val];\n      if (def.flags & FlagsNoSelf && label.src === authorDid) {\n        continue;\n      }\n      return def;\n    }\n  }\n};\n\nconst long = new Intl.NumberFormat(\"en-US\");\nconst compact = new Intl.NumberFormat(\"en-US\", { notation: \"compact\" });\nconst formatCompactNumber = (value) => {\n  if (value < 1e3) {\n    return \"\" + value;\n  }\n  if (value < 1e5) {\n    return long.format(value);\n  }\n  return compact.format(value);\n};\n\nconst HTTP_RE = /^https?:\\/\\//;\n\nfunction Richtext_raw_renderer($$renderer, $$props) {\n\t{\n\t\tconst { text } = $$props;\n\n\t\t$$renderer.push(`<p class=\"rich-text is-small s-1ea7h2m\">`);\n\n\t\tconst each_array = ensure_array_like(tokenize(text));\n\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet token = each_array[$$index];\n\n\t\t\tif (token.type === 'autolink') {\n\t\t\t\t$$renderer.push(`<a target=\"_blank\"${attr('href', token.url)} rel=\"noopener nofollow\" class=\"link s-1ea7h2m\">${escape_html(token.raw.replace(HTTP_RE, ''))}</a>`);\n\t\t\t} else {\n\t\t\t\tif (token.type === 'mention') {\n\t\t\t\t\t$$renderer.push(`<a target=\"_blank\"${attr('href', getProfileUrl(token.handle))} class=\"mention s-1ea7h2m\">${escape_html(token.raw)}</a>`);\n\t\t\t\t} else {\n\t\t\t\t\tif (token.type === 'topic') {\n\t\t\t\t\t\t$$renderer.push(`<a target=\"_blank\"${attr('href', getHashtagUrl(token.name))} class=\"hashtag s-1ea7h2m\">${escape_html(token.raw)}</a>`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$$renderer.push(`${escape_html(token.raw)}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$$renderer.push(`</p>`);\n\t}\n}\n\nfunction Profile_card($$renderer, $$props) {\n\t{\n\t\tconst { profile } = $$props;\n\t\tconst url = getProfileUrl(profile.did);\n\t\tconst isBlurred = findLabel(profile.labels, profile.did);\n\n\t\t$$renderer.push(`<div class=\"profile-card has-banner s-2b3fq6\"><div class=\"banner-wrapper s-2b3fq6\">`);\n\n\t\tif (profile.banner) {\n\t\t\t$$renderer.push(`<img loading=\"lazy\"${attr('src', profile.banner)} alt=\"\"${attr_class(`banner` + (isBlurred ? ` is-blurred` : ``), 's-2b3fq6')}/>`);\n\t\t}\n\n\t\t$$renderer.push(`</div> <div class=\"contents s-2b3fq6\"><div class=\"header s-2b3fq6\"><a${attr('href', url)} target=\"_blank\" class=\"avatar-wrapper s-2b3fq6\">`);\n\n\t\tif (profile.avatar) {\n\t\t\t$$renderer.push(`<img loading=\"lazy\"${attr('src', profile.avatar)} alt=\"\"${attr_class(`avatar` + (isBlurred ? ` is-blurred` : ``), 's-2b3fq6')}/>`);\n\t\t}\n\n\t\t$$renderer.push(`</a> <div class=\"actions s-2b3fq6\"><a${attr('href', url)} target=\"_blank\" class=\"follow-button s-2b3fq6\"><svg class=\"icon s-2b3fq6\" fill=\"none\" viewBox=\"0 0 24 24\"><path stroke=\"currentColor\" stroke-linecap=\"square\" stroke-width=\"2\" d=\"M12 4v8m0 0v8m0-8H4m8 0h8\"></path></svg> <span>Follow</span></a> <svg class=\"logo s-2b3fq6\" fill=\"none\" viewBox=\"0 0 320 286\"><path fill=\"#0A7AFF\" d=\"M69.364 19.146c36.687 27.806 76.147 84.186 90.636 114.439 14.489-30.253 53.948-86.633 90.636-114.439C277.107-.917 320-16.44 320 32.957c0 9.865-5.603 82.875-8.889 94.729-11.423 41.208-53.045 51.719-90.071 45.357 64.719 11.12 81.182 47.953 45.627 84.785-80 82.874-106.667-44.333-106.667-44.333s-26.667 127.207-106.667 44.333c-35.555-36.832-19.092-73.665 45.627-84.785-37.026 6.362-78.648-4.149-90.071-45.357C5.603 115.832 0 42.822 0 32.957 0-16.44 42.893-.917 69.364 19.147Z\"></path></svg></div></div> <div class=\"name-wrapper\"><p dir=\"auto\" class=\"display-name s-2b3fq6\">${escape_html(profile.displayName?.trim() || profile.handle.slice(0, 64))}</p> <p class=\"handle s-2b3fq6\">@${escape_html(profile.handle)}</p></div> <div class=\"stats s-2b3fq6\"><span class=\"stat-entry s-2b3fq6\"><span class=\"stat-count s-2b3fq6\">${escape_html(formatCompactNumber(profile.followersCount || 0))}</span> <span>${escape_html(profile.followersCount === 1 ? `Follower` : `Followers`)}</span></span> <span class=\"stat-entry s-2b3fq6\"><span class=\"stat-count s-2b3fq6\">${escape_html(formatCompactNumber(profile.followsCount || 0))}</span> <span>Following</span></span></div> `);\n\n\t\tif (profile.description?.trim()) {\n\t\t\tRichtext_raw_renderer($$renderer, { text: profile.description });\n\t\t}\n\n\t\t$$renderer.push(`</div></div>`);\n\t}\n}\n\nfunction Message($$renderer, msg) {\n\tEmbed_frame($$renderer, {\n\t\tchildren: ($$renderer) => {\n\t\t\t$$renderer.push(`<div class=\"message s-ibmh3w\">${escape_html(msg)}</div>`);\n\t\t}});\n}\n\nfunction Bluesky_profile_card($$renderer, $$props) {\n\t{\n\t\tconst { profile, allowUnauthenticated } = $$props;\n\t\tconst isPwiForbidden = !allowUnauthenticated && profile?.labels?.some((label) => label.val === NO_UNAUTHENTICATED_LABEL);\n\n\t\tif (profile === null) {\n\t\t\tMessage($$renderer, `The profile can't be found, it may have been deleted.`);\n\t\t} else {\n\t\t\tif (isPwiForbidden) {\n\t\t\t\tMessage($$renderer, `The user has requested for their profile to not be displayed on external sites.`);\n\t\t\t} else {\n\t\t\t\tEmbed_frame($$renderer, {\n\t\t\t\t\tchildren: ($$renderer) => {\n\t\t\t\t\t\tProfile_card($$renderer, { profile });\n\t\t\t\t\t}});\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst fetchProfileCard = async (opts) => {\n  const actor = opts.actor;\n  const allowUnauthenticated = opts.allowUnauthenticated ?? false;\n  const rpc = new XRPC({ handler: simpleFetchHandler({ service: opts.serviceUri ?? DEFAULT_APPVIEW_URL }) });\n  const { data: profile } = await rpc.get(\"app.bsky.actor.getProfile\", {\n    signal: opts.signal,\n    params: { actor }\n  }).catch((err) => {\n    if (err instanceof XRPCError) {\n      if (err.kind === \"InvalidRequest\" && err.description === \"Profile not found\") {\n        return { data: null };\n      }\n    }\n    return Promise.reject(err);\n  });\n  return { profile, allowUnauthenticated };\n};\nconst renderProfileCard = (data) => {\n  return render(Bluesky_profile_card, { props: data }).body;\n};\n\nexport { fetchProfileCard, renderProfileCard };\n","import { fetchProfileCard, renderProfileCard } from './core.js';\n\nclass BlueskyProfileCard extends HTMLElement {\n  connectedCallback() {\n    this.load().then(\n      () => this.dispatchEvent(new CustomEvent(\"loaded\")),\n      (err) => {\n        const defaulted = this.dispatchEvent(new CustomEvent(\"error\", { detail: err }));\n        if (defaulted) {\n          throw err;\n        }\n      }\n    );\n  }\n  async load() {\n    const actor = this.getAttribute(\"actor\");\n    const serviceUri = this.getAttribute(\"service-uri\") || void 0;\n    const allowUnauthenticated = this.getAttribute(\"allow-unauthenticated\") !== null;\n    const silent = this.getAttribute(\"silent\") !== null;\n    const data = await fetchProfileCard({ actor, allowUnauthenticated, serviceUri }).catch((error) => {\n      if (silent) {\n        console.warn(\"Failed to fetch profile card:\", error);\n        return null;\n      }\n      throw error;\n    });\n    if (data === null) {\n      return;\n    }\n    const html = renderProfileCard(data);\n    const root = this.shadowRoot;\n    if (!root) {\n      this.innerHTML = html;\n    } else {\n      const template = document.createElement(\"template\");\n      template.innerHTML = html;\n      const fragment = template.content;\n      const slot = root.querySelector(\"slot\");\n      if (slot) {\n        slot.replaceWith(fragment);\n      } else {\n        root.appendChild(fragment);\n      }\n    }\n  }\n}\ncustomElements.define(\"bluesky-profile-card\", BlueskyProfileCard);\n\nexport { BlueskyProfileCard };\n"]}