custom element for embedding Bluesky posts and feeds mary-ext.github.io/bluesky-embed
typescript npm bluesky atcute

Compare changes

Choose any two refs to compare.

-13
.editorconfig
··· 1 - [*] 2 - charset = utf-8 3 - end_of_line = lf 4 - insert_final_newline = true 5 - indent_style = tab 6 - trim_trailing_whitespace = true 7 - 8 - [*.yaml] 9 - indent_style = space 10 - 11 - [*.md] 12 - indent_style = space 13 - trim_trailing_whitespace = false
-14
.gitignore
··· 1 - node_modules/ 2 - dist/ 3 - docs/ 4 - 5 - .npm-*.log 6 - .pnpm-*.log 7 - .yarn-*.log 8 - npm-*.log 9 - pnpm-*.log 10 - yarn-*.log 11 - 12 - *.local 13 - 14 - tsconfig.tsbuildinfo
-1
.mailmap
··· 1 - Mary <git@mary.my.id> <pineapplecreamcheese@skiff.com>
.nojekyll

This is a binary file and will not be displayed.

-2
.npmrc
··· 1 - publish-branch=trunk 2 - auto-install-peers=false
-1
.prettierignore
··· 1 - pnpm-lock.yaml
-18
.prettierrc
··· 1 - { 2 - "trailingComma": "all", 3 - "useTabs": true, 4 - "tabWidth": 2, 5 - "printWidth": 110, 6 - "semi": true, 7 - "singleQuote": true, 8 - "bracketSpacing": true, 9 - "plugins": ["prettier-plugin-css-order"], 10 - "overrides": [ 11 - { 12 - "files": ["tsconfig.json", "jsconfig.json"], 13 - "options": { 14 - "parser": "jsonc" 15 - } 16 - } 17 - ] 18 - }
-3
.vscode/extensions.json
··· 1 - { 2 - "recommendations": ["esbenp.prettier-vscode"] 3 - }
-4
.vscode/settings.json
··· 1 - { 2 - "editor.defaultFormatter": "esbenp.prettier-vscode", 3 - "typescript.tsdk": "node_modules/typescript/lib" 4 - }
-17
LICENSE
··· 1 - Permission is hereby granted, free of charge, to any person obtaining a copy 2 - of this software and associated documentation files (the "Software"), to deal 3 - in the Software without restriction, including without limitation the rights 4 - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 5 - copies of the Software, and to permit persons to whom the Software is 6 - furnished to do so, subject to the following conditions: 7 - 8 - The above copyright notice and this permission notice shall be included in all 9 - copies or substantial portions of the Software. 10 - 11 - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 - SOFTWARE.
-77
README.md
··· 1 - # &lt;bluesky-post> 2 - 3 - A custom element for embedding Bluesky posts. [Live demo](https://mary-ext.github.io/bluesky-post-embed) 4 - 5 - - **Lightweight**, the entire package + dependencies is only 24 KB (7 KB gzipped) 6 - - **Standalone**, no additional middleman involved, connects straight to Bluesky's API 7 - 8 - ## Installation 9 - 10 - ### via package manager 11 - 12 - This custom element is available on npm. 13 - 14 - ``` 15 - npm install bluesky-post-embed 16 - ``` 17 - 18 - Then, import the package on your app. 19 - 20 - ```js 21 - import 'bluesky-post-embed'; 22 - ``` 23 - 24 - ### via CDN 25 - 26 - If you like, you can also rely on CDN services like esm.sh or JSDelivr. 27 - 28 - ```html 29 - <script type="module" src="https://esm.sh/bluesky-post-embed@~0.1.0"></script> 30 - ``` 31 - 32 - ## Usage 33 - 34 - Bluesky posts can be embedded like so: 35 - 36 - ```html 37 - <bluesky-post src="https://bsky.app/profile/pfrazee.com/post/3kj2umze7zj2n" theme="light"> 38 - <blockquote class="bluesky-post-fallback"> 39 - <p dir="auto">angel mode</p> 40 - &mdash; Paul Frazee ๐Ÿฆ‹ (@pfrazee.com) 41 - <a href="https://bsky.app/profile/pfrazee.com/post/3kj2umze7zj2n">January 16, 2024</a> 42 - </blockquote> 43 - </bluesky-post> 44 - ``` 45 - 46 - Adding a fallback content like above is heavily recommended for progressive enhancement. 47 - 48 - ### Attributes 49 - 50 - - `src` **Required** 51 - A `bsky.app` URL of the post. 52 - Heavily recommended that the URL points to a DID instead of a handle, otherwise, it would have to 53 - resolve the handle into DID first (and suffer from issues like users changing their handles, etc) 54 - An example of such URL would be: https://bsky.app/profile/did:plc:ragtjsm2j2vknwkz3zp4oxrd/post/3kj2umze7zj2n 55 - - `contextless` **Optional** 56 - Prevent displaying of context when `src` points to a reply. 57 - - `theme` **Semi-required** 58 - The color palette that it should use, either `light` or `dark`. 59 - Set this to blank if you're setting a custom color palette. 60 - - `service-uri` **Optional** 61 - URL to an AppView service, defaults to `https://public.api.bsky.app` 62 - 63 - ### Events 64 - 65 - - `loaded` 66 - Fired when the embed has successfully loaded the post 67 - - `error` 68 - Fired when the embed fails to load the post 69 - 70 - ## SSR usage 71 - 72 - The core of this package is a static HTML renderer, so long as your framework of 73 - choice has the means to deal with declarative shadow DOM, then it's possible to 74 - generate a completely static embed without any JavaScript in the client. 75 - 76 - See [this repository](https://github.com/mary-ext/astro-bluesky-post) for an 77 - SSR demo made in Astro.
+1
assets/GuideInstructions-B8N7RzmZ.css
··· 1 + .code-block.svelte-ipr7k2{display:flex;gap:12px;border:1px solid #d1d5db;border-radius:4px;background:#f9fafb;padding:12px;overflow:hidden;overflow-x:auto;pre:where(.svelte-ipr7k2){flex-grow:1;margin:0;font-size:.75rem;line-height:1.25rem}}.actions.svelte-ipr7k2{position:sticky;top:0;right:0}.action-button.svelte-ipr7k2{display:flex;justify-content:center;align-items:center;cursor:pointer;box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;border:1px solid #d1d5db;border-radius:4px;background:#fff;padding:0;width:32px;height:32px;color:#4b5563;@media(pointer:fine){opacity:0;transition:75ms ease-in;.code-block:where(.svelte-ipr7k2):hover &,.code-block:where(.svelte-ipr7k2):focus-within &{opacity:1}&:hover{border-color:#9ca3af;background:#e5e7eb;color:#1f2937}}&:active{border-color:#9ca3af;background:#e5e7eb;color:#1f2937}}.icon.svelte-ipr7k2{width:16px;height:16px}.guide.svelte-1wxv0ke{margin:36px 0 0;border-top:1px solid #d1d5db}.guide-header.svelte-1wxv0ke{margin:36px 0 16px}.guide-instructions.svelte-mki4x9{margin:24px 0 0;padding:0 0 0 22px;font-size:.875rem;line-height:1.25rem;li+li{margin:24px 0 0}}
+1
assets/GuideInstructions-CTis8QB-.js
··· 1 + import{t as e,m as t,r as s,n as r,o as n,q as a,v as o,w as i,x as c,p as l,f as d,k as p,c as h,i as u,a as f,b as v,y,z as g}from"./index-CD_0uzJz.js";function w(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function b(o,i,c=!1,l=!1,d=!1){var p=o,h="";e(()=>{var e=t;if(h!==(h=i()??"")&&(null!==e.nodes&&(s(e.nodes.start,e.nodes.end),e.nodes=null),""!==h)){var o=h+"";c?o=`<svg>${o}</svg>`:l&&(o=`<math>${o}</math>`);var d=r(o);if((c||l)&&(d=a(d)),n(a(d),d.lastChild),c||l)for(;a(d);)p.before(a(d));else p.before(d)}})}function k(e){null===o&&w(),function(e){null===o&&w(),i(()=>{const t=c(e);if("function"==typeof t)return t})}(()=>()=>c(e))}const x=({service:e,fetch:t=fetch})=>async(s,r)=>{const n=new URL(s,e);return await t(n,r)},m=(e,t)=>{let s;for(const r in t){const n=t[r];null!==n&&(s??=new Headers(e),s.has(r)||s.set(r,n))}return s??e};class j extends Error{constructor(e,{kind:t=`HTTP error ${e}`,description:s="Unspecified error description",headers:r,cause:n}={}){super(`${t} > ${s}`,{cause:n}),this.name="XRPCError",this.status=e,this.kind=t,this.description=s,this.headers=r||{}}}class ${constructor({handler:e,proxy:t}){this.handle=(e=>"object"==typeof e?e.handle.bind(e):e)(e),this.proxy=t}get(e,t){return this.request({type:"get",nsid:e,...t})}call(e,t){return this.request({type:"post",nsid:e,...t})}async request(e){const t=e.data,s=`/xrpc/${e.nsid}`+O(e.params),r=q(t),n=await this.handle(s,{method:e.type,signal:e.signal,body:r?JSON.stringify(t):t,headers:m(e.headers,{"content-type":r?"application/json":null,"atproto-proxy":C(this.proxy)})}),a=n.status,o=Object.fromEntries(n.headers),i=o["content-type"];let c,l;i&&(i.startsWith("application/json")?c=n.json():i.startsWith("text/")&&(c=n.text()));try{l=await(c||n.arrayBuffer().then(e=>new Uint8Array(e)))}catch(d){throw new j(2,{cause:d,kind:"InvalidResponse",description:"Failed to parse response body",headers:o})}if(200===a)return{data:l,headers:o};if(A(l))throw new j(a,{kind:l.error,description:l.message,headers:o});throw new j(a,{headers:o})}}const C=e=>e?`${e.service}#${e.type}`:null,O=e=>{let t;for(const s in e){const r=e[s];if(void 0!==r)if(t??=new URLSearchParams,Array.isArray(r))for(let e=0,n=r.length;e<n;e++){const n=r[e];t.append(s,""+n)}else t.set(s,""+r)}return t?"?"+t.toString():""},q=e=>{if("object"!=typeof e||null===e)return!1;if("toJSON"in e)return!0;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype},A=e=>{if("object"!=typeof e||null===e)return!1;const t=typeof e.error,s=typeof e.message;return!("undefined"!==t&&"string"!==t||"undefined"!==s&&"string"!==s)},E=e=>e.replace(/[<"&]/g,e=>"&#"+e.charCodeAt(0)+";");var H=d('<div class="code-block svelte-ipr7k2"><pre class="svelte-ipr7k2"><code> </code></pre> <div class="actions svelte-ipr7k2"><button title="Copy" aria-label="Copy" class="action-button svelte-ipr7k2"><svg class="icon svelte-ipr7k2" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="M15 5h4v16H5V5h4m0-2h6v4H9V3Z"></path></svg></button></div></div>');function P(t,s){l(s,!0);var r=H(),n=h(r),a=h(n),o=h(a),i=p(n,2);h(i).__click=()=>{navigator.clipboard.writeText(s.code).catch(()=>alert("Failed to copy to clipboard"))},e(()=>u(o,s.code)),f(t,r),v()}y(["click"]);var R=d('<div class="guide svelte-1wxv0ke"><h4 class="guide-header svelte-1wxv0ke"> </h4> <!></div>');function S(t,s){var r=R(),n=h(r),a=h(n),o=p(n,2);g(o,()=>s.children),e(()=>u(a,s.title)),f(t,r)}var U=d('<ol class="guide-instructions svelte-mki4x9"><!></ol>');function _(e,t){var s=U(),r=h(s);g(r,()=>t.children),f(e,s)}export{P as C,S as G,$ as X,j as a,_ as b,E as e,b as h,k as o,x as s};
+1
assets/PostDisplay-CqTUAVla.js
··· 1 + import{p as e,f as s,t as a,s as t,a as i,b as r,c as l,d as n,e as p,g as d,B as o,h as c,i as h,j as u,k as m,l as f,u as v,C as b}from"./index-CD_0uzJz.js";import{X as k,s as y,a as g,h as $,o as w,G as x,b as z,C as q,e as Z}from"./GuideInstructions-CTis8QB-.js";import{s as A}from"./index-Cr8Vao8y.js";const F=/[&"<]/g,C=/[&<]/g;function M(e,s){const a=String(e??""),t=s?F:C;t.lastIndex=0;let i="",r=0;for(;t.test(a);){const e=t.lastIndex-1,s=a[e];i+=a.substring(r,e)+("&"===s?"&amp;":'"'===s?"&quot;":"&lt;"),r=e+1}return i+a.substring(r)}function N(e,s,a=!1){if("hidden"===e&&"until-found"!==s&&(a=!0),null==s||!s&&a)return"";return` ${e}${a?"":`="${M(s,!0)}"`}`}function _(e,s,a){var t=function(e,s){var a=null==e?"":""+e;return s&&(a=a?a+" "+s:s),""===a?null:a}(e,s);return t?` class="${M(t,!0)}"`:""}function B(e,s){var a=function(e){return null==e?null:String(e)}(e);return a?` style="${M(a,!0)}"`:""}function S(e,s){const{children:a}=s;e.push('<div class="bluesky-embed s-3olstj">'),a(e),e.push("</div>")}const U=e=>`https://bsky.app/profile/${e}`,T=(e,s)=>`https://bsky.app/profile/${e}/post/${s}`,I=e=>`https://bsky.app/hashtag/${e}`,R=(e,s)=>`https://bsky.app/profile/${e}/feed/${s}`;let D=0,H=0;const j=new Intl.DateTimeFormat("en-US",{dateStyle:"long",timeStyle:"short"}),P=new Intl.DateTimeFormat("en-US",{dateStyle:"medium"}),V=new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}),G=e=>{const s=new Date(e),a=s.getTime();if(isNaN(a))return"N/A";const t=Date.now();if(t>H){const e=new Date(t);e.setMonth(0,1),e.setHours(0,0,0),D=e.getTime(),e.setFullYear(e.getFullYear()+1,0,0),e.setHours(23,59,59,999),H=e.getTime()}return a>=D&&a<=H?V.format(s):P.format(s)},L=e=>{const s=new Date(e);return isNaN(s.getTime())?"N/A":j.format(s)},W={"!hide":{name:"Hidden by moderators",flags:1},"!warn":{name:"Content warning",flags:1},porn:{name:"Adult content",flags:0},sexual:{name:"Sexually suggestive",flags:0},"graphic-media":{name:"Graphic media",flags:0},nudity:{name:"Nudity",flags:0}},E=(e,s)=>{if(e?.length)for(let a=0,t=e.length;a<t;a++){const t=e[a],i=t.val;if(!(i in W))continue;const r=W[i];if(!(1&r.flags&&t.src===s))return r}},Y=new Intl.NumberFormat("en-US"),J=new Intl.NumberFormat("en-US",{notation:"compact"}),K=e=>e<1e3?""+e:e<1e5?Y.format(e):J.format(e),X=e=>Y.format(e),O=/^at:\/\/((?:did:[a-zA-Z0-9._:%-]+)|(?:[a-zA-Z0-9][a-zA-Z0-9-.]*))(?:\/([a-zA-Z0-9.-]+)(?:\/([a-zA-Z0-9_~.:-]{1,512}))?)?\/?(?:\?([^#\s]*))?(?:#([^\s]*))?$/,Q=e=>{const s=O.exec(e);if(!s)throw new ee(`invalid at-uri: ${e}`);return{repo:s[1],collection:s[2]??"",rkey:s[3]??"",query:s[4]??"",fragment:s[5]??""}};let ee=class extends Error{};function se(e,s){{const{embed:a}=s,t=a.external,i=(e=>{let s;if("parse"in URL)s=URL.parse(e);else try{s=new URL(e)}catch{}return!s||"https:"!==s.protocol&&"http:"!==s.protocol?null:s})(t.uri)?.host;e.push(`<a target="_blank"${N("href",i&&t.uri)} rel="noopener noreferrer nofollow" class="external-embed s-rtbqd8">`),t.thumb&&e.push(`<img loading="lazy"${N("src",t.thumb)} alt="" class="thumbnail s-rtbqd8"/>`),e.push(` <div class="meta s-rtbqd8"><p class="title s-rtbqd8">${M(t.title)}</p> <p class="description s-rtbqd8">${M(t.description)}</p> `),i&&e.push(`<div class="domain s-rtbqd8"><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="m4.172 8.07 3.94 2.957.977-1.941 3.887-.978 1.15-4.6M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-6.078 4.865.973-1.946-2.869-1.928-1.89-.12-1.08 1.075 1.947 2.919h2.919Z"></path></svg> <span class="domain-name">${M(i)}</span></div>`),e.push("</div></a>")}}const ae={width:16,height:9};function te(e,s){{const{embed:a,borderless:t,standalone:i,blur:r}=s,l=a.images,n=l.length;function p(e,s){const a=l[s];e.push(`<img loading="lazy"${N("src",a.thumb)}${N("alt",a.alt)}${_("image"+(r?" is-blurred":""),"s-t3k6fc")}/>`)}if(e.push(`<div${_("image-embed"+(t?"":" is-bordered")+(i&&1===n?" is-aligned":""),"s-t3k6fc")}>`),4===n)e.push('<div class="grid s-t3k6fc"><div class="col s-t3k6fc"><div class="item wide tl s-t3k6fc">'),p(e,0),e.push('</div> <div class="item wide bl s-t3k6fc">'),p(e,2),e.push('</div></div> <div class="col s-t3k6fc"><div class="item wide tr s-t3k6fc">'),p(e,1),e.push('</div> <div class="item wide br s-t3k6fc">'),p(e,3),e.push("</div></div></div>");else if(3===n)e.push('<div class="grid s-t3k6fc"><div class="col square s-t3k6fc"><div class="item tl bl s-t3k6fc">'),p(e,0),e.push('</div></div> <div class="col square s-t3k6fc"><div class="item tr s-t3k6fc">'),p(e,1),e.push('</div> <div class="item br s-t3k6fc">'),p(e,2),e.push("</div></div></div>");else if(2===n)e.push('<div class="grid s-t3k6fc"><div class="col s-t3k6fc"><div class="item square tl bl s-t3k6fc">'),p(e,0),e.push('</div></div> <div class="col s-t3k6fc"><div class="item square tr br s-t3k6fc">'),p(e,1),e.push("</div></div></div>");else if(1===n){const d=i&&(l[0].aspectRatio||ae);e.push(`<div${_("single-item tl tr bl br"+(d?" is-standalone":""),"s-t3k6fc")}${B(d?`aspect-ratio: ${d.width}/${d.height}`:"")}>`),p(e,0),e.push(" "),d&&e.push('<div class="placeholder s-t3k6fc"></div>'),e.push("</div>")}e.push("</div>")}}function ie(e,s){{const{post:a,embed:t,borderless:i,standalone:r,blur:l}=s,n=r&&t.aspectRatio,p=a&&T(a.author.did,Q(a.uri).rkey);function d(e){e.push(`<img loading="lazy"${N("src",t.thumbnail)} alt=""${_("thumbnail"+(l?" is-blurred":""),"s-1azk58e")}/> `),n&&e.push('<div class="placeholder s-1azk58e"></div>'),e.push(' <div class="play s-1azk58e"><svg class="icon s-1azk58e" fill="none" viewBox="0 0 24 24"><path fill="currentColor" d="M22 12 5 2v20l17-10Z"></path></svg></div>')}r?(e.push(`<a target="_blank"${N("href",p)}${_("video-embed"+(i?"":" is-bordered")+(r?" is-standalone":""),"s-1azk58e")}><div class="constrainer s-1azk58e"${B(n?`aspect-ratio: ${n.width}/${n.height}`:"")}>`),d(e),e.push("</div></a>")):(e.push(`<div${_("video-embed"+(i?"":" is-bordered"),"s-1azk58e")}${B(n?`aspect-ratio: ${n.width}/${n.height}`:"")}>`),d(e),e.push("</div>"))}}const re=e=>{if(e){if("app.bsky.embed.images#view"===e.$type)return e;if("app.bsky.embed.recordWithMedia#view"===e.$type)return re(e.media)}},le=e=>{if(e){if("app.bsky.embed.video#view"===e.$type)return e;if("app.bsky.embed.recordWithMedia#view"===e.$type)return le(e.media)}};function ne(e,s){e.push(`<div class="message s-azdpbr">${M(s)}</div>`)}function pe(e,s){{const{post:a,embed:t,large:i=!1}=s;function r(e,s){!function(e,s){{const{warning:a,children:t}=s;a?(e.push(`<details class="content-hider s-q6x07m"><summary class="gate s-q6x07m"><svg class="icon s-q6x07m" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="M11 11h1v5m9-4a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"></path><path fill="currentColor" stroke="currentColor" stroke-width=".5" d="M11.5 7.25h-.25v1.5h1.5v-1.5H11.5Z"></path></svg> <span class="label s-q6x07m">${M(a.name)}</span> <span class="action s-q6x07m"></span></summary> `),t(e),e.push("</details>")):t(e)}}(e,{warning:a&&E(a.labels,a.author.did),children:e=>{"app.bsky.embed.external#view"===s.$type?se(e,{embed:s}):"app.bsky.embed.images#view"===s.$type?te(e,{embed:s,standalone:!0}):"app.bsky.embed.video#view"===s.$type?ie(e,{post:a,embed:s,standalone:!0}):ne(e,"Unsupported media embed")}})}function l(e,s){const a=s.record;if("app.bsky.embed.record#viewRecord"===a.$type)!function(e,s){{const{embed:a,large:t=!1}=s,i=a.value,r=i.text.trim(),l=a.author,n=l.displayName?.trim(),p=a.embeds?.[0],d=re(p),o=le(p),c=T(l.did,Q(a.uri).rkey),h=!!E(a.labels,l.did);e.push(`<a target="_blank"${N("href",c)} class="quote-embed s-za6fip"><div class="meta s-za6fip"><div class="avatar-wrapper s-za6fip">`),l.avatar&&e.push(`<img loading="lazy"${N("src",l.avatar)} alt="" class="avatar s-za6fip"/>`),e.push('</div> <span class="name-wrapper s-za6fip">'),n&&e.push(`<bdi class="display-name-wrapper s-za6fip"><span class="display-name s-za6fip">${M(n)}</span></bdi>`),e.push(` <span class="handle s-za6fip">@${M(l.handle)}</span></span> <span aria-hidden="true" class="dot s-za6fip">ยท</span> <time${N("datetime",i.createdAt)} class="date s-za6fip">${M(G(i.createdAt))}</time></div> `),r?(e.push('<div class="body s-za6fip">'),t||(d?(e.push('<div class="aside s-za6fip">'),te(e,{embed:d,blur:h}),e.push("</div>")):o&&(e.push('<div class="aside s-za6fip">'),ie(e,{embed:o,blur:h}),e.push("</div>"))),e.push(` <p class="text s-za6fip">${M(r)}</p></div>`)):e.push('<div class="divide s-za6fip"></div>'),e.push(" "),!t&&r||(d?te(e,{embed:d,borderless:!0,blur:h}):o&&ie(e,{embed:o,borderless:!0,blur:h})),e.push("</a>")}}(e,{embed:a,large:i});else if("app.bsky.feed.defs#generatorView"===a.$type)!function(e,s){{const{embed:a}=s,t=a.creator,i=R(t.did,Q(a.uri).rkey);e.push(`<a target="_blank"${N("href",i)} class="feed-embed s-156tlwp"><div class="main s-156tlwp"><div class="avatar-wrapper s-156tlwp">`),a.avatar?e.push(`<img loading="lazy"${N("src",a.avatar)} alt="" class="avatar s-156tlwp"/>`):e.push('<svg viewBox="0 0 32 32" class="avatar s-156tlwp"><path fill="#0070FF" d="M0 0h32v32H0z"></path><path fill="#fff" d="M22.153 22.354a9.328 9.328 0 0 0 3.837-.491 3.076 3.076 0 0 0-4.802-2.79m.965 3.281a6.128 6.128 0 0 0-.965-3.28Zm-11.342-3.28a3.077 3.077 0 0 0-4.801 2.79 9.21 9.21 0 0 0 3.835.49m.966-3.28a6.127 6.127 0 0 0-.966 3.28Zm8.265-8.997a3.076 3.076 0 1 1-6.153 0 3.076 3.076 0 0 1 6.153 0Zm6.154 3.077a2.307 2.307 0 1 1-4.615 0 2.307 2.307 0 0 1 4.615 0Zm-13.847 0a2.307 2.307 0 1 1-4.614 0 2.307 2.307 0 0 1 4.614 0Z"></path><path fill="#fff" d="M22 22c0 3.314-2.686 3.5-6 3.5s-6-.186-6-3.5a6 6 0 0 1 12 0Z"></path></svg>'),e.push(`</div> <div class="info"><p class="name s-156tlwp">${M(a.displayName)}</p> <p class="creator s-156tlwp">Feed by @${M(t.handle)}</p></div></div> <p class="description s-156tlwp">${M(a.description)}</p></a>`)}}(e,{embed:a});else if("app.bsky.graph.defs#listView"===a.$type)!function(e,s){{const{embed:a}=s,t=a.creator,i=R(t.did,Q(a.uri).rkey);e.push(`<a target="_blank"${N("href",i)} class="list-embed s-6uize5"><div class="main s-6uize5"><div class="avatar-wrapper s-6uize5">`),a.avatar?e.push(`<img loading="lazy"${N("src",a.avatar)} alt="" class="avatar s-6uize5"/>`):e.push('<svg viewBox="0 0 32 32" class="avatar s-6uize5"><path fill="#0070FF" d="M0 0h32v32H0z"></path><path fill="#fff" d="M22.153 22.354a9.328 9.328 0 0 0 3.837-.491 3.076 3.076 0 0 0-4.802-2.79m.965 3.281a6.128 6.128 0 0 0-.965-3.28Zm-11.342-3.28a3.077 3.077 0 0 0-4.801 2.79 9.21 9.21 0 0 0 3.835.49m.966-3.28a6.127 6.127 0 0 0-.966 3.28Zm8.265-8.997a3.076 3.076 0 1 1-6.153 0 3.076 3.076 0 0 1 6.153 0Zm6.154 3.077a2.307 2.307 0 1 1-4.615 0 2.307 2.307 0 0 1 4.615 0Zm-13.847 0a2.307 2.307 0 1 1-4.614 0 2.307 2.307 0 0 1 4.614 0Z"></path><path fill="#fff" d="M22 22c0 3.314-2.686 3.5-6 3.5s-6-.186-6-3.5a6 6 0 0 1 12 0Z"></path></svg>'),e.push(`</div> <div class="info"><p class="name s-6uize5">${M(a.name)}</p> <p class="creator s-6uize5">${M((e=>{switch(e){case"app.bsky.graph.defs#curatelist":return"User list";case"app.bsky.graph.defs#modlist":return"Moderation list"}return"Unknown list"})(a.purpose))} by @${M(t.handle)}</p></div></div> <p class="description s-6uize5">${M(a.description)}</p></a>`)}}(e,{embed:a});else if("app.bsky.graph.defs#starterPackViewBasic"===a.$type)!function(e,s){{const{embed:a,large:t=!1}=s,i=a.record,r=a.creator,l=r.did,n=Q(a.uri).rkey,p=((e,s)=>`https://bsky.app/starter-pack/${e}/${s}`)(l,n);if(e.push(`<a target="_blank"${N("href",p)} class="starterpack-embed s-15v965v">`),t){const s=((e,s)=>`https://ogcard.cdn.bsky.app/start/${e}/${s}`)(l,n);e.push(`<img loading="lazy"${N("src",s)} alt="" class="banner s-15v965v"/>`)}e.push(` <div class="meta s-15v965v"><div class="main s-15v965v"><svg fill="none" viewBox="0 0 24 24" class="avatar s-15v965v"><defs><linearGradient id="a" x1="0" x2="100%" y1="0" y2="0" gradientTransform="rotate(45)"><stop offset="0" stop-color="#0A7AFF"></stop><stop offset="1" stop-color="#59B9FF"></stop></linearGradient></defs><path fill="url(#a)" fill-rule="evenodd" d="M11.26 5.227 5.02 6.899c-.734.197-1.17.95-.973 1.685l1.672 6.24c.197.734.951 1.17 1.685.973l6.24-1.672a1.376 1.376 0 0 0 .973-1.685L12.945 6.2a1.375 1.375 0 0 0-1.685-.973Zm-6.566.459a2.632 2.632 0 0 0-1.86 3.223l1.672 6.24a2.632 2.632 0 0 0 3.223 1.861l6.24-1.672a2.631 2.631 0 0 0 1.861-3.223l-1.672-6.24a2.632 2.632 0 0 0-3.223-1.861l-6.24 1.672Z" clip-rule="evenodd"></path><path fill="url(#a)" fill-rule="evenodd" d="M15.138 18.411a4.606 4.606 0 1 0 0-9.211 4.606 4.606 0 0 0 0 9.211Zm0 1.257a5.862 5.862 0 1 0 0-11.724 5.862 5.862 0 0 0 0 11.724Z" clip-rule="evenodd"></path></svg> <div class="info"><p class="name s-15v965v">${M(i.name)}</p> <p class="creator s-15v965v">Starter pack by @${M(r.handle)}</p></div></div> <p class="description s-15v965v">${M(i.description)}</p></div></a>`)}}(e,{embed:a,large:i});else{const s=(e=>{switch(e){case"app.bsky.feed.post":return"post";case"app.bsky.feed.generator":return"feed";case"app.bsky.graph.list":return"list";case"app.bsky.graph.starterpack":return"starter pack";case"app.bsky.labeler.service":return"labeler"}return null})(Q(a.uri).collection);ne(e,s&&("app.bsky.embed.record#viewNotFound"===a.$type||"app.bsky.embed.record#viewBlocked"===a.$type||"app.bsky.embed.record#viewDetached"===a.$type)?`This ${s} is unavailable`:"Unsupported record embed")}}e.push('<div class="embeds s-azdpbr">'),"app.bsky.embed.recordWithMedia#view"===t.$type?(r(e,t.media),e.push(" "),l(e,t.record)):"app.bsky.embed.record#view"===t.$type?l(e,t):r(e,t),e.push("</div>")}}const de=e=>e?.find(e=>"app.bsky.richtext.facet#link"===e.$type||"app.bsky.richtext.facet#mention"===e.$type||"app.bsky.richtext.facet#tag"===e.$type);function oe(e,s){{const{text:a,facets:t,large:i}=s;e.push(`<p${_("rich-text"+(i?" is-large":" is-small"),"s-1lecfnd")}>`);const r=A(a,t);for(let s=0,l=r.length;s<l;s++){let a=r[s];const t=de(a.features);t?"app.bsky.richtext.facet#link"===t.$type?e.push(`<a target="_blank"${N("href",t.uri)} rel="noopener nofollow" class="link s-1lecfnd">${M(a.text)}</a>`):"app.bsky.richtext.facet#mention"===t.$type?e.push(`<a target="_blank"${N("href",U(t.did))} class="mention s-1lecfnd">${M(a.text)}</a>`):"app.bsky.richtext.facet#tag"===t.$type&&e.push(`<a target="_blank"${N("href",I(t.tag))} class="hashtag s-1lecfnd">${M(a.text)}</a>`):e.push(`${M(a.text)}`)}e.push("</p>")}}function ce(e,s){{const{post:a,parent:t,prev:i=!1}=s,r=a.author,l=U(r.did),n=r.displayName?.trim(),p=a.record,d=T(r.did,Q(a.uri).rkey),o=a.replyCount||0,c=a.likeCount||0,h=(a.repostCount||0)+(a.quoteCount||0),u=!!E(r.labels,r.did);if(e.push(`<div class="highlighted-post s-hik11q"><div class="meta s-hik11q"><a${N("href",l)} target="_blank" class="avatar-wrapper s-hik11q">`),r.avatar&&e.push(`<img loading="lazy"${N("src",r.avatar)} alt=""${_("avatar"+(u?" is-blurred":""),"s-hik11q")}/>`),e.push(`</a> <a${N("href",l)} target="_blank" class="name-wrapper s-hik11q">`),n&&e.push(`<bdi class="display-name-wrapper s-hik11q"><span class="display-name s-hik11q">${M(n)}</span></bdi>`),e.push(` <span class="handle s-hik11q">@${M(r.handle)}</span></a> `),i||e.push('<svg class="logo s-hik11q" 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>'),e.push("</div> "),!i&&p.reply){if(e.push('<p class="context s-hik11q">'),t){const s=t.author;e.push(`Replying to <a target="_blank"${N("href",U(s.did))} dir="auto" class="s-hik11q">${M(s.displayName?.trim()||`@${s.handle}`)}</a>`)}else e.push("Replying to an unknown post");e.push("</p>")}e.push(" "),oe(e,{text:p.text,facets:p.facets,large:!0}),e.push(" "),a.embed&&pe(e,{post:a,embed:a.embed,large:!0}),e.push(` <time${N("datetime",p.createdAt)} class="date s-hik11q">${M(L(p.createdAt))}</time> <div class="stats s-hik11q"><span class="stat s-hik11q"${N("title",1===c?`${X(c)} like`:`${X(c)} likes`)}><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="2" d="M12 5.768c6.162-6.25 16.725 5.358 0 14.732C-4.725 11.126 5.838-.482 12 5.768Z"></path></svg> <span>${M(K(c))}</span></span> <span class="stat s-hik11q"${N("title",1===h?`${X(h)} repost`:`${X(h)} reposts`)}><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="m17 3 3 3-3 3M7 21l-3-3 3-3m-2 3h15v-5M4 11V6h15"></path></svg> <span>${M(K(h))}</span></span> <div class="gap s-hik11q"></div> <a${N("href",d)} target="_blank" class="permalink s-hik11q"><span>${M(o?1===o?`Read ${K(o)} reply on Bluesky`:`Read ${K(o)} replies on Bluesky`:"View on Bluesky")}</span></a></div></div>`)}}function he(e,s){{const{post:a,parent:t,prev:i}=s,r=a.author,l=U(r.did),n=r.displayName?.trim(),p=a.record,d=T(r.did,Q(a.uri).rkey),o=!!E(r.labels,r.did);if(e.push('<div class="post s-12mzi62">'),i||e.push('<svg class="logo s-12mzi62" 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>'),e.push(` <div class="aside s-12mzi62"><a target="_blank"${N("href",l)} class="avatar-wrapper s-12mzi62">`),r.avatar&&e.push(`<img loading="lazy"${N("src",r.avatar)} alt=""${_("avatar"+(o?" is-blurred":""),"s-12mzi62")}/>`),e.push(`</a> <div class="line s-12mzi62"></div></div> <div class="main s-12mzi62"><div class="meta s-12mzi62"><a${N("href",l)} target="_blank" class="name-wrapper s-12mzi62">`),n&&e.push(`<bdi class="display-name-wrapper s-12mzi62"><span class="display-name s-12mzi62">${M(n)}</span></bdi>`),e.push(` <span class="handle s-12mzi62">@${M(r.handle)}</span></a> <span aria-hidden="true" class="dot s-12mzi62">ยท</span> <a target="_blank"${N("href",d)}${N("title",L(p.createdAt))} class="date s-12mzi62"><time${N("datetime",p.createdAt)}>${M(G(p.createdAt))}</time></a></div> `),!i&&p.reply){if(e.push('<p class="context s-12mzi62">'),t){const s=t.author;e.push(`Replying to <a target="_blank"${N("href",U(s.did))} dir="auto" class="s-12mzi62">${M(s.displayName?.trim()||`@${s.handle}`)}</a>`)}else e.push("Replying to an unknown post");e.push("</p>")}e.push(" "),oe(e,{text:p.text,facets:p.facets}),e.push(" "),a.embed&&pe(e,{post:a,embed:a.embed}),e.push("</div></div>")}}function ue(e,s){S(e,{children:e=>{e.push(`<div class="message s-1q9cbx0">${M(s)}</div>`)}})}function me(e,s){{const{thread:a,contextless:t,allowUnauthenticated:i}=s,r=!i&&null!==a&&"app.bsky.feed.defs#threadViewPost"===a.$type&&a.post.author.labels?.some(e=>"!no-unauthenticated"===e.val);if(null===a)ue(e,"The post can't be found, it may have been deleted.");else if(r)ue(e,"The author has requested for their posts to not be displayed on external sites.");else{const s=((e,s,a)=>{const t=[];let i=0,r=s?1:2,l=e;for(;l&&"app.bsky.feed.defs#notFoundPost"!==l.$type&&"app.bsky.feed.defs#blockedPost"!==l.$type;){const e=l.post;if(0!==i&&(t[i-1].parent=e),++i>r)break;const s=e.author;if(!a&&s.labels?.some(e=>"!no-unauthenticated"===e.val))break;t.push({post:e,parent:null}),l=l.parent}return t.reverse()})(a,t,i);S(e,{children:e=>{const a=s;for(let t=0,i=a.length;t<i;t++){let{post:i,parent:r}=a[t];const l=0!==t;t===s.length-1?ce(e,{post:i,parent:r,prev:l}):he(e,{post:i,parent:r,prev:l})}}})}}}const fe=new Intl.DateTimeFormat("en-US",{dateStyle:"long",timeStyle:"short"}),ve=/^at:\/\/((?:did:[a-zA-Z0-9._:%-]+)|(?:[a-zA-Z0-9][a-zA-Z0-9-.]*))(?:\/([a-zA-Z0-9.-]+)(?:\/([a-zA-Z0-9_~.:-]{1,512}))?)?\/?(?:\?([^#\s]*))?(?:#([^\s]*))?$/;class be extends Error{}var ke=s("<bluesky-post><!></bluesky-post>",2);function ye(s,n){e(n,!0);var p=ke();a(()=>t(p,"src",n.data.thread?.post.uri));var d=l(p);$(d,()=>function(e,s={}){let a="";return me({push(e){a+=e}},s.props??{}),{body:a}}(0,{props:n.data}).body),i(s,p),r()}var ge=s('Doing server-side rendering? Check out examples for <a href="https://github.com/mary-ext/bluesky-embed-astro">Astro</a> and <a href="https://github.com/mary-ext/bluesky-embed-sveltekit">SvelteKit</a>.',1),$e=s("<li><p>Insert the following scripts and stylesheets to the <code>&lt;head&gt;</code> of your website.</p> <!></li> <li><p>Insert the following markup in wherever you want the post to be.</p> <!></li>",1),we=s("<!> <!>",1),xe=s("<!> <!>",1);function ze(s,t){let $;e(t,!0);const A=v(()=>{$?.abort(),$=new AbortController;const e=$.signal;return(async e=>{const s=new k({handler:y({service:e.serviceUri??"https://public.api.bsky.app"})}),a=e.contextless??!1,{data:t}=await s.get("app.bsky.feed.getPostThread",{signal:e.signal,params:{uri:e.uri,parentHeight:a?1:2,depth:0}}).catch(e=>e instanceof g&&"NotFound"===e.kind?{data:null}:Promise.reject(e));return{thread:"app.bsky.feed.defs#threadViewPost"===t?.thread.$type?t.thread:null,contextless:a,allowUnauthenticated:e.allowUnauthenticated??!1}})({uri:`at://${t.matched.author}/app.bsky.feed.post/${t.matched.rkey}`,signal:e})});w(()=>{$?.abort()});const F="https://cdn.jsdelivr.net/npm/bluesky-post-embed@^1.0.0",C=()=>`\x3c!-- Core web component and styling --\x3e\n<script type="module" src="${F}/+esm"><\/script>\n<link rel="stylesheet" href="${F}/dist/core.min.css">\n\n\x3c!-- Built-in themes --\x3e\n<link rel="stylesheet" href="${F}/themes/light.min.css" media="(prefers-color-scheme: light)">\n<link rel="stylesheet" href="${F}/themes/dim.min.css" media="(prefers-color-scheme: dark)">\n\n\x3c!-- Fallback/placeholder elements if JS script is taking a while to load or is failing --\x3e\n<style>\n .bluesky-post-fallback {\n margin: 16px 0;\n border-left: 3px solid var(--divider);\n padding: 4px 8px;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n }\n .bluesky-post-fallback p {\n margin: 0 0 8px 0;\n }\n</style>\n`,M=e=>{const s=e.author,a=e.record;return`<bluesky-post src="${Z(e.uri)}">\n <blockquote class="bluesky-post-fallback">\n <p dir="auto">${Z(a.text)}</p>\n โ€” ${s.displayName?.trim()?`${Z(s.displayName)} (@${Z(s.handle)})`:`@${Z(s.handle)}`}\n <a href="${Z(((e,s)=>`https://bsky.app/profile/${e}/post/${s}`)(s.did,(e=>{const s=ve.exec(e);if(!s)throw new be(`invalid at-uri: ${e}`);return{repo:s[1],collection:s[2]??"",rkey:s[3]??"",query:s[4]??"",fragment:s[5]??""}})(e.uri).rkey))}">${(e=>{const s=new Date(e);return isNaN(s.getTime())?"N/A":fe.format(s)})(e.indexedAt)}</a>\n </blockquote>\n</bluesky-post>\n`};var N=n(),_=p(N);d(_,()=>u(A),e=>{b(e)},(e,s)=>{var a=xe(),t=p(a);ye(t,{get data(){return u(s)}});var r=m(t,2),n=e=>{x(e,{title:"How do I embed this to my website?",children:(e,a)=>{var t=we(),r=p(t);o(r,{type:"inform",children:(e,s)=>{var a=ge();i(e,a)}});var n=m(r,2);z(n,{children:(e,a)=>{var t=$e(),r=p(t),n=m(l(r),2);{let e=v(C);q(n,{get code(){return u(e)}})}var d=m(r,2),o=m(l(d),2);{let e=v(()=>M(u(s).thread.post));q(o,{get code(){return u(e)}})}i(e,t)}}),i(e,t)}})};f(r,e=>{u(s).thread&&e(n)}),i(e,a)},(e,s)=>{o(e,{type:"alert",children:(e,t)=>{var r=c();a(()=>h(r,""+u(s))),i(e,r)}})}),i(s,N),r()}export{ze as default};
+1
assets/PostDisplay-yMSDBkol.css
··· 1 + .bluesky-embed.s-3olstj{position:relative;box-sizing:border-box;margin:0 auto;border:1px solid var(--divider);border-radius:8px;background:var(--background-primary);min-width:250px;max-width:550px;overflow:hidden;color:var(--text-primary);font-weight:400;font-size:calc(var(--font-size) * .875);line-height:calc(var(--font-size) * 1.25);font-family:var(--font-family);:where(*),:where(*:before),:where(*:after){box-sizing:border-box;margin:0;padding:0}:where(a){color:inherit;text-decoration:none}:where(.icon){flex-shrink:0;width:1em;height:1em}}.gate.s-q6x07m{display:flex;align-items:center;gap:12px;cursor:pointer;border:1px solid var(--divider);border-radius:6px;padding:0 12px;height:44px;.content-hider[open]:where(.s-q6x07m) &{margin-bottom:12px}&:hover{border-color:var(--divider-hover)}}.icon.s-q6x07m{width:18px;height:18px;color:var(--text-secondary)}.label.s-q6x07m{flex-grow:1;overflow:hidden;font-weight:500;user-select:none;text-overflow:ellipsis}.action.s-q6x07m{color:var(--text-link);font-weight:500;font-size:calc(var(--font-size) * .8125);line-height:calc(var(--font-size) * 1.25);&:before{content:"Show"}.content-hider[open]:where(.s-q6x07m) &:before{content:"Hide"}}.external-embed.s-rtbqd8{display:block;border:1px solid var(--divider);border-radius:6px;overflow:hidden;&:hover{border-color:var(--divider-hover)}}.thumbnail.s-rtbqd8{display:block;border-bottom:1px solid var(--divider);background:#000;aspect-ratio:1.91;width:100%;.external-embed:where(.s-rtbqd8):hover &{border-color:var(--divider-hover)}}.meta.s-rtbqd8{padding:12px}.title.s-rtbqd8{display:-webkit-box;overflow:hidden;font-weight:700;white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.description.s-rtbqd8{display:-webkit-box;overflow:hidden;color:var(--text-secondary);font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.domain.s-rtbqd8{display:flex;align-items:center;gap:6px;margin:6px 0 0;color:var(--text-secondary);font-weight:500;font-size:calc(var(--font-size) * .75)}.feed-embed.s-156tlwp{display:flex;flex-direction:column;gap:12px;border:1px solid var(--divider);border-radius:6px;padding:12px;&:hover{border-color:var(--divider-hover)}}.main.s-156tlwp{display:flex;gap:12px}.avatar-wrapper.s-156tlwp{margin:2px 0 0;border-radius:6px;background:var(--background-secondary);width:36px;height:36px;overflow:hidden}.avatar.s-156tlwp{width:100%;height:100%;object-fit:cover}.name.s-156tlwp{font-weight:700}.creator.s-156tlwp{color:var(--text-secondary);font-size:calc(var(--font-size) * .8125)}.description.s-156tlwp{display:-webkit-box;overflow:hidden;font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.is-aligned.s-t3k6fc{align-self:baseline;max-width:100%}.grid.s-t3k6fc{display:flex;gap:2px}.col.s-t3k6fc{display:flex;flex:1;flex-direction:column;gap:2px}.square.s-t3k6fc{aspect-ratio:1}.wide.s-t3k6fc{aspect-ratio:1.5}.item.s-t3k6fc{position:relative;flex-grow:1;flex-shrink:0;overflow:hidden}.is-bordered.s-t3k6fc{.tl:where(.s-t3k6fc),.tr:where(.s-t3k6fc),.bl:where(.s-t3k6fc),.br:where(.s-t3k6fc){border:1px solid var(--divider)}.tl:where(.s-t3k6fc){border-top-left-radius:6px}.tr:where(.s-t3k6fc){border-top-right-radius:6px}.bl:where(.s-t3k6fc){border-bottom-left-radius:6px}.br:where(.s-t3k6fc){border-bottom-right-radius:6px}}.single-item.s-t3k6fc{position:relative;aspect-ratio:16 / 9;overflow:hidden;.image:where(.s-t3k6fc){object-fit:contain}}.is-standalone.s-t3k6fc{min-width:64px;max-width:100%;min-height:64px;max-height:320px}.image.s-t3k6fc{position:absolute;inset:0;background:#000;width:100%;height:100%;object-fit:cover;font-size:0px}.is-blurred.s-t3k6fc{scale:125%;filter:blur(24px)}.placeholder.s-t3k6fc{width:100vw;height:100vh}.list-embed.s-6uize5{display:flex;flex-direction:column;gap:12px;border:1px solid var(--divider);border-radius:6px;padding:12px;&:hover{border-color:var(--divider-hover)}}.main.s-6uize5{display:flex;gap:12px}.avatar-wrapper.s-6uize5{margin:2px 0 0;border-radius:6px;background:var(--background-secondary);width:36px;height:36px;overflow:hidden}.avatar.s-6uize5{width:100%;height:100%;object-fit:cover}.name.s-6uize5{font-weight:700}.creator.s-6uize5{color:var(--text-secondary);font-size:calc(var(--font-size) * .8125)}.description.s-6uize5{display:-webkit-box;overflow:hidden;font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.video-embed.s-1azk58e{display:block;position:relative;background:#000;aspect-ratio:16 / 9;overflow:hidden}.is-bordered.s-1azk58e{border:1px solid var(--divider);border-radius:6px}.is-standalone.s-1azk58e{align-self:baseline;aspect-ratio:auto;max-width:100%}.constrainer.s-1azk58e{min-width:64px;max-width:100%;min-height:64px;max-height:320px}.thumbnail.s-1azk58e{width:100%;height:100%;object-fit:contain}.is-blurred.s-1azk58e{scale:125%;filter:blur(24px)}.placeholder.s-1azk58e{width:100vw;height:100vh}.play.s-1azk58e{display:grid;position:absolute;top:50%;left:50%;place-items:center;translate:-50% -50%;border-radius:50%;background:#40404099;aspect-ratio:1 / 1;height:40%;max-height:48px;color:#fff;font-size:20px;.icon:where(.s-1azk58e){width:40%;height:40%}.is-standalone:where(.s-1azk58e) &:hover{background:#404040cc}}.quote-embed.s-za6fip{display:block;border:1px solid var(--divider);border-radius:6px;overflow:hidden;&:hover{border-color:var(--divider-hover)}}.meta.s-za6fip{display:flex;padding:12px 12px 0;color:var(--text-secondary);.avatar-wrapper:where(.s-za6fip){flex-shrink:0;margin:0 8px 0 0;border-radius:9999px;background:var(--background-secondary);width:20px;height:20px;overflow:hidden}.avatar:where(.s-za6fip){width:100%;height:100%}.name-wrapper:where(.s-za6fip){display:flex;gap:4px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.display-name-wrapper:where(.s-za6fip){overflow:hidden;text-overflow:ellipsis}.display-name:where(.s-za6fip){color:var(--text-primary);font-weight:700}.handle:where(.s-za6fip){display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot:where(.s-za6fip){flex-shrink:0;margin:0 6px}.date:where(.s-za6fip){white-space:nowrap}}.body.s-za6fip{display:flex;align-items:flex-start}.aside.s-za6fip{flex-grow:1;flex-basis:0;margin:8px 0 12px 12px;max-width:20%}.text.s-za6fip{display:-webkit-box;margin:8px 12px 12px;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:6;line-clamp:6;flex-grow:4;flex-basis:0px;min-width:0px;white-space:pre-wrap;overflow-wrap:break-word}.divide.s-za6fip{padding:6px 0}.starterpack-embed.s-15v965v{display:block;border:1px solid var(--divider);border-radius:6px;overflow:hidden;&:hover{border-color:var(--divider-hover)}}.banner.s-15v965v{display:block;aspect-ratio:1.91;width:100%}.meta.s-15v965v{display:flex;flex-direction:column;gap:12px;padding:12px}.main.s-15v965v{display:flex;gap:12px}.avatar.s-15v965v{margin:2px;width:36px;height:36px}.name.s-15v965v{font-weight:700}.creator.s-15v965v{color:var(--text-secondary);font-size:calc(var(--font-size) * .8125)}.description.s-15v965v{display:-webkit-box;overflow:hidden;font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.embeds.s-azdpbr{display:flex;flex-direction:column;gap:12px;margin:12px 0 0}.message.s-azdpbr{border:1px solid var(--divider);border-radius:6px;padding:12px;color:var(--text-secondary)}.rich-text.s-1lecfnd{overflow:hidden;white-space:pre-wrap;overflow-wrap:break-word;&:empty{display:none}}.is-large.s-1lecfnd{font-size:calc(var(--font-size) * 1);line-height:calc(var(--font-size) * 1.5)}.link.s-1lecfnd,.mention.s-1lecfnd,.hashtag.s-1lecfnd{color:var(--text-link);&:hover{text-decoration:underline}}.highlighted-post.s-hik11q{padding:16px}.meta.s-hik11q{display:flex;align-items:center;gap:12px;margin:0 0 12px;color:var(--text-secondary)}.avatar-wrapper.s-hik11q{display:block;flex-shrink:0;border-radius:9999px;background:var(--background-secondary);width:40px;height:40px;overflow:hidden;&:hover{filter:brightness(.85)}}.avatar.s-hik11q{width:100%;height:100%;object-fit:cover}.is-blurred.s-hik11q{scale:125%;filter:blur(4px)}.name-wrapper.s-hik11q{display:block;flex-grow:1;max-width:100%;overflow:hidden;color:inherit;text-overflow:ellipsis;white-space:nowrap}.display-name-wrapper.s-hik11q{overflow:hidden;text-overflow:ellipsis;.name-wrapper:where(.s-hik11q):hover &{text-decoration:underline}}.display-name.s-hik11q{color:var(--text-primary);font-weight:700}.handle.s-hik11q{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logo.s-hik11q{width:32px;height:32px}.context.s-hik11q{overflow:hidden;color:var(--text-secondary);font-size:calc(var(--font-size) * .8125);text-overflow:ellipsis;white-space:nowrap;a:where(.s-hik11q){color:inherit;font-weight:500;&:hover{text-decoration:underline}}}.date.s-hik11q{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0 0;border-bottom:1px solid var(--divider);padding:0 0 12px;color:var(--text-secondary)}.stats.s-hik11q{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 -16px;padding:12px 0;color:var(--text-secondary);.gap:where(.s-hik11q){flex:1 1 auto}.permalink:where(.s-hik11q){display:flex;align-items:center;gap:4px;color:var(--text-link);font-weight:700;&:hover{text-decoration:underline}}}.stat.s-hik11q{display:flex;align-items:center;gap:8px;font-weight:500}.post.s-12mzi62{display:flex;position:relative;gap:12px;padding:12px 16px 0}.logo.s-12mzi62{position:absolute;top:12px;right:12px;width:24px;height:24px}.aside.s-12mzi62{flex-shrink:0}.avatar-wrapper.s-12mzi62{display:block;border-radius:9999px;background:var(--background-secondary);width:40px;height:40px;overflow:hidden;&:hover{filter:brightness(.85)}}.avatar.s-12mzi62{width:100%;height:100%;object-fit:cover}.is-blurred.s-12mzi62{scale:125%;filter:blur(4px)}.line.s-12mzi62{position:absolute;top:56px;bottom:-12px;left:35px;border-left:2px solid var(--divider)}.main.s-12mzi62{display:flex;flex-grow:1;flex-direction:column;min-width:0px}.meta.s-12mzi62{display:flex;align-items:center;margin:0 0 2px;padding:0 32px 0 0;color:var(--text-secondary);.name-wrapper:where(.s-12mzi62){display:flex;gap:4px;max-width:100%;overflow:hidden;color:inherit;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.display-name-wrapper:where(.s-12mzi62){overflow:hidden;text-overflow:ellipsis;.name-wrapper:where(.s-12mzi62):hover &{text-decoration:underline}}.display-name:where(.s-12mzi62){color:var(--text-primary);font-weight:700}.handle:where(.s-12mzi62){display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot:where(.s-12mzi62){flex-shrink:0;margin:0 6px}.date:where(.s-12mzi62){color:inherit;text-decoration:none;white-space:nowrap;&:hover{text-decoration:underline}}}.context.s-12mzi62{overflow:hidden;color:var(--text-secondary);font-size:calc(var(--font-size) * .8125);text-overflow:ellipsis;white-space:nowrap;a:where(.s-12mzi62){color:inherit;font-weight:500;&:hover{text-decoration:underline}}}.message.s-1q9cbx0{margin:0 auto;padding:32px 16px;max-width:380px;color:var(--text-secondary);text-align:center}
+1
assets/ProfileCardDisplay-BpCMWdM3.js
··· 1 + import{p as e,f as s,t,s as a,c as n,a as r,b as l,d as o,e as i,g as c,B as p,h as d,i as u,j as f,k as h,l as m,u as b,C as g}from"./index-CD_0uzJz.js";import{X as w,s as y,a as v,h as $,o as k,G as x,b as q,C,e as F}from"./GuideInstructions-CTis8QB-.js";const I=/^[@๏ผ ]([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*(?:\.[a-zA-Z]{2,}))($|\s|\p{P})/u,N=/^(?:#(?!\ufe0f|\u20e3)|๏ผƒ)([\p{N}]*[\p{L}\p{M}\p{Pc}][\p{L}\p{M}\p{Pc}\p{N}]*)($|\s|\p{P})/u,A=/^:([\w-]+):/,P=/^https?:\/\/[\S]+/,B=/(?:(?<!\(.*)\))?[.,;]*$/,U=/^\[((?:\[(?:\\.|[^\[\]\\])*\]|\\.|[^\[\]\\])*?)\]\((.*?)\)/,_=/^\\([@๏ผ #:\\\[])/,j=/^.+?(?:(?=$|[:\\\[]|https?:\/\/)|(?<=\s|[(){}\/\\\[\]\-|:;'".,=+])(?=[@๏ผ #๏ผƒ]))/s,z=e=>{const s=I.exec(e);if(s&&"@"!==s[2]){const e=s[2].length;return{type:"mention",raw:e>0?s[0].slice(0,-e):s[0],handle:s[1]}}},S=e=>{const s=N.exec(e);if(s&&"#"!==s[2]){const e=s[2].length;return{type:"topic",raw:e>0?s[0].slice(0,-e):s[0],name:s[1]}}},M=e=>{const s=A.exec(e);if(s)return{type:"emote",raw:s[0],name:s[1]}},Z=e=>{const s=P.exec(e);if(s){const e=s[0].replace(B,"");return{type:"autolink",raw:e,url:e}}},G=e=>{const s=U.exec(e);if(s)return{type:"link",raw:s[0],text:s[1],url:s[2]}},H=e=>{const s=_.exec(e);if(s)return{type:"escape",raw:s[0],escaped:s[1]}},L=e=>{const s=j.exec(e);if(s)return{type:"text",raw:s[0],text:s[0]}},T=/[&"<]/g,E=/[&<]/g;function R(e,s){const t=String(e??""),a=s?T:E;a.lastIndex=0;let n="",r=0;for(;a.test(t);){const e=a.lastIndex-1,s=t[e];n+=t.substring(r,e)+("&"===s?"&amp;":'"'===s?"&quot;":"&lt;"),r=e+1}return n+t.substring(r)}function X(e,s,t=!1){if("hidden"===e&&"until-found"!==s&&(t=!0),null==s||!s&&t)return"";return` ${e}${t?"":`="${R(s,!0)}"`}`}function D(e,s,t){var a=function(e,s){var t=null==e?"":""+e;return""===(t=t?t+" "+s:s)?null:t}(e,s);return a?` class="${R(a,!0)}"`:""}function J(e,s){const{children:t}=s;e.push('<div class="bluesky-embed s-dgn7w7">'),t(e),e.push("</div>")}const K=e=>`https://bsky.app/profile/${e}`,O=e=>`https://bsky.app/hashtag/${e}`,Q={"!hide":{name:"Hidden by moderators",flags:1},"!warn":{name:"Content warning",flags:1},porn:{name:"Adult content",flags:0},sexual:{name:"Sexually suggestive",flags:0},"graphic-media":{name:"Graphic media",flags:0},nudity:{name:"Nudity",flags:0}},V=new Intl.NumberFormat("en-US"),W=new Intl.NumberFormat("en-US",{notation:"compact"}),Y=e=>e<1e3?""+e:e<1e5?V.format(e):W.format(e),ee=/^https?:\/\//;function se(e,s){{const{text:t}=s;e.push('<p class="rich-text is-small s-1ea7h2m">');const a=(e=>{const s=[];let t,a;for(;e;)if(t=a,a=H(e)||Z(e)||z(e)||S(e)||M(e)||G(e))e=e.slice(a.raw.length),s.push(a);else if(a=L(e))e=e.slice(a.raw.length),t&&"text"===t.type?(t.raw+=a.raw,t.text+=a.text,a=t):s.push(a);else if(e)throw new Error("infinite loop encountered");return s})(t);for(let s=0,n=a.length;s<n;s++){let t=a[s];"autolink"===t.type?e.push(`<a target="_blank"${X("href",t.url)} rel="noopener nofollow" class="link s-1ea7h2m">${R(t.raw.replace(ee,""))}</a>`):"mention"===t.type?e.push(`<a target="_blank"${X("href",K(t.handle))} class="mention s-1ea7h2m">${R(t.raw)}</a>`):"topic"===t.type?e.push(`<a target="_blank"${X("href",O(t.name))} class="hashtag s-1ea7h2m">${R(t.raw)}</a>`):e.push(`${R(t.raw)}`)}e.push("</p>")}}function te(e,s){{const{profile:t}=s,a=K(t.did),n=((e,s)=>{if(e?.length)for(let t=0,a=e.length;t<a;t++){const a=e[t],n=a.val;if(!(n in Q))continue;const r=Q[n];if(!(1&r.flags&&a.src===s))return r}})(t.labels,t.did);e.push('<div class="profile-card has-banner s-2b3fq6"><div class="banner-wrapper s-2b3fq6">'),t.banner&&e.push(`<img loading="lazy"${X("src",t.banner)} alt=""${D("banner"+(n?" is-blurred":""),"s-2b3fq6")}/>`),e.push(`</div> <div class="contents s-2b3fq6"><div class="header s-2b3fq6"><a${X("href",a)} target="_blank" class="avatar-wrapper s-2b3fq6">`),t.avatar&&e.push(`<img loading="lazy"${X("src",t.avatar)} alt=""${D("avatar"+(n?" is-blurred":""),"s-2b3fq6")}/>`),e.push(`</a> <div class="actions s-2b3fq6"><a${X("href",a)} 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">${R(t.displayName?.trim()||t.handle.slice(0,64))}</p> <p class="handle s-2b3fq6">@${R(t.handle)}</p></div> <div class="stats s-2b3fq6"><span class="stat-entry s-2b3fq6"><span class="stat-count s-2b3fq6">${R(Y(t.followersCount||0))}</span> <span>${R(1===t.followersCount?"Follower":"Followers")}</span></span> <span class="stat-entry s-2b3fq6"><span class="stat-count s-2b3fq6">${R(Y(t.followsCount||0))}</span> <span>Following</span></span></div> `),t.description?.trim()&&se(e,{text:t.description}),e.push("</div></div>")}}function ae(e,s){J(e,{children:e=>{e.push(`<div class="message s-ibmh3w">${R(s)}</div>`)}})}function ne(e,s){{const{profile:t,allowUnauthenticated:a}=s,n=!a&&t?.labels?.some(e=>"!no-unauthenticated"===e.val);null===t?ae(e,"The profile can't be found, it may have been deleted."):n?ae(e,"The user has requested for their profile to not be displayed on external sites."):J(e,{children:e=>{te(e,{profile:t})}})}}var re=s("<bluesky-profile-card><!></bluesky-profile-card>",2);function le(s,o){e(o,!0);var i=re();t(()=>a(i,"actor",o.data.profile?.did));var c=n(i);$(c,()=>function(e,s={}){let t="";return ne({push(e){t+=e}},s.props??{}),{body:t}}(0,{props:o.data}).body),r(s,i),l()}var oe=s("<li><p>Insert the following scripts and stylesheets to the <code>&lt;head&gt;</code> of your website.</p> <!></li> <li><p>Insert the following markup in wherever you want the profile feed to be.</p> <!></li>",1),ie=s("<!> <!>",1);function ce(s,a){let $;e(a,!0);const I=b(()=>{$?.abort(),$=new AbortController;const e=$.signal;return(async e=>{const s=e.actor,t=e.allowUnauthenticated??!1,a=new w({handler:y({service:e.serviceUri??"https://public.api.bsky.app"})}),{data:n}=await a.get("app.bsky.actor.getProfile",{signal:e.signal,params:{actor:s}}).catch(e=>e instanceof v&&"InvalidRequest"===e.kind&&"Profile not found"===e.description?{data:null}:Promise.reject(e));return{profile:n,allowUnauthenticated:t}})({actor:a.matched.actor,signal:e})});k(()=>{$?.abort()});const N=()=>{const e="https://cdn.jsdelivr.net/npm/bluesky-profile-card-embed@^1.0.0";return`\x3c!-- Core web component and styling --\x3e\n<script type="module" src="${e}/+esm"><\/script>\n<link rel="stylesheet" href="${e}/dist/core.min.css">\n\n\x3c!-- Built-in themes --\x3e\n<link rel="stylesheet" href="${e}/themes/light.min.css" media="(prefers-color-scheme: light)">\n<link rel="stylesheet" href="${e}/themes/dim.min.css" media="(prefers-color-scheme: dark)">\n`};var A=o(),P=i(A);c(P,()=>f(I),e=>{g(e)},(e,s)=>{var t=ie(),a=i(t);le(a,{get data(){return f(s)}});var l=h(a,2),o=e=>{x(e,{title:"How do I embed this to my website?",children:(e,t)=>{q(e,{children:(e,t)=>{var a=oe(),l=i(a),o=h(n(l),2);{let e=b(N);C(o,{get code(){return f(e)}})}var c=h(l,2),p=h(n(c),2);{let e=b(()=>(e=>{const s=`https://bsky.app/profile/${e.did}`;return`<bluesky-profile-card actor="${F(e.did)}">\n <a target="_blank" href="${F(s)}" class="bluesky-profile-card-fallback">\n ${e.displayName?.trim()?`Follow ${F(e.displayName)} (@${F(e.handle)}) on Bluesky`:`Follow @${F(e.handle)} on Bluesky`}\n </a>\n</bluesky-profile-card>\n`})(f(s).profile));C(p,{get code(){return f(e)}})}r(e,a)}})}})};m(l,e=>{f(s).profile&&e(o)}),r(e,t)},(e,s)=>{p(e,{type:"alert",children:(e,a)=>{var n=d();t(()=>u(n,""+f(s))),r(e,n)}})}),r(s,A),l()}export{ce as default};
+1
assets/ProfileCardDisplay-D4FwjqsR.css
··· 1 + .bluesky-embed.s-dgn7w7{position:relative;box-sizing:border-box;margin:0 auto;border:1px solid var(--divider);border-radius:8px;background:var(--background-primary);min-width:250px;max-width:550px;overflow:hidden;color:var(--text-primary);font-weight:400;font-size:calc(var(--font-size) * .875);line-height:calc(var(--font-size) * 1.25);font-family:var(--font-family);:where(*),:where(*:before),:where(*:after){box-sizing:border-box;margin:0;padding:0}:where(a){color:inherit;text-decoration:none}:where(.icon){flex-shrink:0;width:1em;height:1em}}.rich-text.s-1ea7h2m{overflow:hidden;white-space:pre-wrap;overflow-wrap:break-word;&:empty{display:none}}.link.s-1ea7h2m,.mention.s-1ea7h2m,.hashtag.s-1ea7h2m{color:var(--text-link);&:hover{text-decoration:underline}}.profile-card.s-2b3fq6{display:flex;flex-direction:column}.is-blurred.s-2b3fq6{scale:125%;filter:blur(4px)}.banner-wrapper.s-2b3fq6{background:var(--background-secondary);aspect-ratio:3 / 1;overflow:hidden}.banner.s-2b3fq6{width:100%;height:100%;object-fit:cover}.contents.s-2b3fq6{display:flex;position:relative;flex-direction:column;gap:8px;padding:12px 16px 16px}.logo.s-2b3fq6{width:24px;height:24px}.header.s-2b3fq6{display:flex;justify-content:space-between;align-items:end}.actions.s-2b3fq6{display:flex;align-items:center;gap:16px}.avatar-wrapper.s-2b3fq6{display:block;flex-shrink:0;outline:2px solid var(--background-primary);border-radius:9999px;background:var(--background-secondary);width:90px;height:90px;overflow:hidden;.has-banner:where(.s-2b3fq6) &{margin-top:-56px}}.avatar.s-2b3fq6{width:100%;height:100%;object-fit:cover;.avatar-wrapper:where(.s-2b3fq6):hover &{filter:brightness(.85);&.is-blurred{filter:brightness(.85) blur(4px)}}}.follow-button.s-2b3fq6{display:flex;align-items:center;gap:6px;border-radius:9999px;background:var(--button);padding:9px 12px;color:var(--button-text);font-weight:600;font-size:calc(var(--font-size) * .8125);line-height:calc(var(--font-size) * 1);user-select:none;.icon:where(.s-2b3fq6){font-size:16px}&:hover{background:var(--button-hover)}}.display-name.s-2b3fq6{font-weight:700;font-size:calc(var(--font-size) * 1.25);line-height:calc(var(--font-size) * 1.75);overflow-wrap:break-word}.handle.s-2b3fq6{color:var(--text-secondary);overflow-wrap:break-word}.stats.s-2b3fq6{display:flex;flex-wrap:wrap;gap:20px;min-width:0}.stat-entry.s-2b3fq6{color:var(--text-secondary)}.stat-count.s-2b3fq6{color:var(--text-primary);font-weight:700}.message.s-ibmh3w{margin:0 auto;padding:32px 16px;max-width:380px;color:var(--text-secondary);text-align:center}
+1
assets/ProfileFeedDisplay-DOw9fkTH.css
··· 1 + .bluesky-embed.s-1pz15a1{position:relative;box-sizing:border-box;margin:0 auto;border:1px solid var(--divider);border-radius:8px;background:var(--background-primary);min-width:250px;max-width:550px;overflow:hidden;color:var(--text-primary);font-weight:400;font-size:calc(var(--font-size) * .875);line-height:calc(var(--font-size) * 1.25);font-family:var(--font-family);:where(*),:where(*:before),:where(*:after){box-sizing:border-box;margin:0;padding:0}:where(a){color:inherit;text-decoration:none}:where(.icon){flex-shrink:0;width:1em;height:1em}}.gate.s-1se5tqk{display:flex;align-items:center;gap:12px;cursor:pointer;border:1px solid var(--divider);border-radius:6px;padding:0 12px;height:44px;.content-hider[open]:where(.s-1se5tqk) &{margin-bottom:12px}&:hover{border-color:var(--divider-hover)}}.icon.s-1se5tqk{width:18px;height:18px;color:var(--text-secondary)}.label.s-1se5tqk{flex-grow:1;overflow:hidden;font-weight:500;user-select:none;text-overflow:ellipsis}.action.s-1se5tqk{color:var(--text-link);font-weight:500;font-size:calc(var(--font-size) * .8125);line-height:calc(var(--font-size) * 1.25);&:before{content:"Show"}.content-hider[open]:where(.s-1se5tqk) &:before{content:"Hide"}}.external-embed.s-au8a8u{display:block;border:1px solid var(--divider);border-radius:6px;overflow:hidden;&:hover{border-color:var(--divider-hover)}}.thumbnail.s-au8a8u{display:block;border-bottom:1px solid var(--divider);background:#000;aspect-ratio:1.91;width:100%;.external-embed:where(.s-au8a8u):hover &{border-color:var(--divider-hover)}}.meta.s-au8a8u{padding:12px}.title.s-au8a8u{display:-webkit-box;overflow:hidden;font-weight:700;white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.description.s-au8a8u{display:-webkit-box;overflow:hidden;color:var(--text-secondary);font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.domain.s-au8a8u{display:flex;align-items:center;gap:6px;margin:6px 0 0;color:var(--text-secondary);font-weight:500;font-size:calc(var(--font-size) * .75)}.feed-embed.s-1c1phtf{display:flex;flex-direction:column;gap:12px;border:1px solid var(--divider);border-radius:6px;padding:12px;&:hover{border-color:var(--divider-hover)}}.main.s-1c1phtf{display:flex;gap:12px}.avatar-wrapper.s-1c1phtf{margin:2px 0 0;border-radius:6px;background:var(--background-secondary);width:36px;height:36px;overflow:hidden}.avatar.s-1c1phtf{width:100%;height:100%;object-fit:cover}.name.s-1c1phtf{font-weight:700}.creator.s-1c1phtf{color:var(--text-secondary);font-size:calc(var(--font-size) * .8125)}.description.s-1c1phtf{display:-webkit-box;overflow:hidden;font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.is-aligned.s-1d339cy{align-self:baseline;max-width:100%}.grid.s-1d339cy{display:flex;gap:2px}.col.s-1d339cy{display:flex;flex:1;flex-direction:column;gap:2px}.square.s-1d339cy{aspect-ratio:1}.wide.s-1d339cy{aspect-ratio:1.5}.item.s-1d339cy{position:relative;flex-grow:1;flex-shrink:0;overflow:hidden}.is-bordered.s-1d339cy{.tl:where(.s-1d339cy),.tr:where(.s-1d339cy),.bl:where(.s-1d339cy),.br:where(.s-1d339cy){border:1px solid var(--divider)}.tl:where(.s-1d339cy){border-top-left-radius:6px}.tr:where(.s-1d339cy){border-top-right-radius:6px}.bl:where(.s-1d339cy){border-bottom-left-radius:6px}.br:where(.s-1d339cy){border-bottom-right-radius:6px}}.single-item.s-1d339cy{position:relative;aspect-ratio:16 / 9;overflow:hidden;.image:where(.s-1d339cy){object-fit:contain}}.is-standalone.s-1d339cy{min-width:64px;max-width:100%;min-height:64px;max-height:320px}.image.s-1d339cy{position:absolute;inset:0;background:#000;width:100%;height:100%;object-fit:cover;font-size:0px}.is-blurred.s-1d339cy{scale:125%;filter:blur(24px)}.placeholder.s-1d339cy{width:100vw;height:100vh}.list-embed.s-1mo1e33{display:flex;flex-direction:column;gap:12px;border:1px solid var(--divider);border-radius:6px;padding:12px;&:hover{border-color:var(--divider-hover)}}.main.s-1mo1e33{display:flex;gap:12px}.avatar-wrapper.s-1mo1e33{margin:2px 0 0;border-radius:6px;background:var(--background-secondary);width:36px;height:36px;overflow:hidden}.avatar.s-1mo1e33{width:100%;height:100%;object-fit:cover}.name.s-1mo1e33{font-weight:700}.creator.s-1mo1e33{color:var(--text-secondary);font-size:calc(var(--font-size) * .8125)}.description.s-1mo1e33{display:-webkit-box;overflow:hidden;font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.video-embed.s-1h3cnsw{display:block;position:relative;background:#000;aspect-ratio:16 / 9;overflow:hidden}.is-bordered.s-1h3cnsw{border:1px solid var(--divider);border-radius:6px}.is-standalone.s-1h3cnsw{align-self:baseline;aspect-ratio:auto;max-width:100%}.constrainer.s-1h3cnsw{min-width:64px;max-width:100%;min-height:64px;max-height:320px}.thumbnail.s-1h3cnsw{width:100%;height:100%;object-fit:contain}.is-blurred.s-1h3cnsw{scale:125%;filter:blur(24px)}.placeholder.s-1h3cnsw{width:100vw;height:100vh}.play.s-1h3cnsw{display:grid;position:absolute;top:50%;left:50%;place-items:center;translate:-50% -50%;border-radius:50%;background:#40404099;aspect-ratio:1 / 1;height:40%;max-height:48px;color:#fff;font-size:20px;.icon:where(.s-1h3cnsw){width:40%;height:40%}.is-standalone:where(.s-1h3cnsw) &:hover{background:#404040cc}}.quote-embed.s-vbjlyj{display:block;border:1px solid var(--divider);border-radius:6px;overflow:hidden;&:hover{border-color:var(--divider-hover)}}.meta.s-vbjlyj{display:flex;padding:12px 12px 0;color:var(--text-secondary);.avatar-wrapper:where(.s-vbjlyj){flex-shrink:0;margin:0 8px 0 0;border-radius:9999px;background:var(--background-secondary);width:20px;height:20px;overflow:hidden}.avatar:where(.s-vbjlyj){width:100%;height:100%}.name-wrapper:where(.s-vbjlyj){display:flex;gap:4px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.display-name-wrapper:where(.s-vbjlyj){overflow:hidden;text-overflow:ellipsis}.display-name:where(.s-vbjlyj){color:var(--text-primary);font-weight:700}.handle:where(.s-vbjlyj){display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot:where(.s-vbjlyj){flex-shrink:0;margin:0 6px}.date:where(.s-vbjlyj){white-space:nowrap}}.body.s-vbjlyj{display:flex;align-items:flex-start}.aside.s-vbjlyj{flex-grow:1;flex-basis:0;margin:8px 0 12px 12px;max-width:20%}.text.s-vbjlyj{display:-webkit-box;margin:8px 12px 12px;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:6;line-clamp:6;flex-grow:4;flex-basis:0px;min-width:0px;white-space:pre-wrap;overflow-wrap:break-word}.divide.s-vbjlyj{padding:6px 0}.starterpack-embed.s-whpa2l{display:block;border:1px solid var(--divider);border-radius:6px;overflow:hidden;&:hover{border-color:var(--divider-hover)}}.banner.s-whpa2l{display:block;aspect-ratio:1.91;width:100%}.meta.s-whpa2l{display:flex;flex-direction:column;gap:12px;padding:12px}.main.s-whpa2l{display:flex;gap:12px}.avatar.s-whpa2l{margin:2px;width:36px;height:36px}.name.s-whpa2l{font-weight:700}.creator.s-whpa2l{color:var(--text-secondary);font-size:calc(var(--font-size) * .8125)}.description.s-whpa2l{display:-webkit-box;overflow:hidden;font-size:calc(var(--font-size) * .8125);white-space:pre-wrap;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow-wrap:break-word;&:empty{display:none}}.embeds.s-1nks9gp{display:flex;flex-direction:column;gap:12px;margin:12px 0 0}.message.s-1nks9gp{border:1px solid var(--divider);border-radius:6px;padding:12px;color:var(--text-secondary)}.rich-text.s-10xqaeb{overflow:hidden;white-space:pre-wrap;overflow-wrap:break-word;&:empty{display:none}}.is-large.s-10xqaeb{font-size:calc(var(--font-size) * 1);line-height:calc(var(--font-size) * 1.5)}.link.s-10xqaeb,.mention.s-10xqaeb,.hashtag.s-10xqaeb{color:var(--text-link);&:hover{text-decoration:underline}}.feed-post.s-1c3lek9{padding:0 16px}.is-leaf.s-1c3lek9{border-bottom:1px solid var(--divider)}.ascendant-line-wrapper.s-1c3lek9{display:flex;flex-direction:column;align-items:center;width:36px;.line:where(.s-1c3lek9){position:absolute;top:0;bottom:4px;flex-grow:1;border-left:2px solid var(--divider)}}.descendant-line.s-1c3lek9{flex-grow:1;margin-top:4px;border-left:2px solid var(--divider)}.contexts.s-1c3lek9{display:flex;position:relative;flex-direction:column;padding:8px 0 4px}.context.s-1c3lek9{display:flex;align-items:center;gap:12px;color:var(--text-secondary);font-size:.8125rem;line-height:1.25rem;.aside:where(.s-1c3lek9){display:flex;flex-shrink:0;justify-content:flex-end;width:36px}.main:where(.s-1c3lek9){display:flex;min-width:0px;&:hover{text-decoration-line:underline}}.name:where(.s-1c3lek9){overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.affix:where(.s-1c3lek9){flex-shrink:0;white-space:pre}}.content.s-1c3lek9{display:flex;gap:12px;.aside:where(.s-1c3lek9){display:flex;flex-shrink:0;flex-direction:column;align-items:center}.main:where(.s-1c3lek9){flex-grow:1;padding-bottom:12px;min-width:0}}.avatar-wrapper.s-1c3lek9{display:block;border-radius:9999px;background:var(--background-secondary);width:36px;height:36px;overflow:hidden;&:hover{filter:brightness(.85)}}.avatar.s-1c3lek9{width:100%;height:100%;object-fit:cover}.meta.s-1c3lek9{display:flex;align-items:center;margin:0 0 2px;color:var(--text-secondary);.name-wrapper:where(.s-1c3lek9){display:flex;gap:4px;max-width:100%;overflow:hidden;color:inherit;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.display-name-wrapper:where(.s-1c3lek9){overflow:hidden;text-overflow:ellipsis;.name-wrapper:where(.s-1c3lek9):hover &{text-decoration:underline}}.display-name:where(.s-1c3lek9){color:var(--text-primary);font-weight:700}.handle:where(.s-1c3lek9){display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot:where(.s-1c3lek9){flex-shrink:0;margin:0 6px}.date:where(.s-1c3lek9){color:inherit;text-decoration:none;white-space:nowrap;&:hover{text-decoration:underline}}}.reply-context.s-1c3lek9{overflow:hidden;color:var(--text-secondary);font-size:calc(var(--font-size) * .8125);text-overflow:ellipsis;white-space:nowrap;a:where(.s-1c3lek9){color:inherit;font-weight:500;&:hover{text-decoration:underline}}}.metrics.s-1c3lek9{display:flex;align-items:center;gap:16px;margin-top:12px;color:var(--text-secondary)}.stat.s-1c3lek9{display:flex;align-items:center;gap:8px;min-width:0px;max-width:100%;.count:where(.s-1c3lek9){padding-right:8px;overflow:hidden;font-size:calc(var(--font-size) * .8125);line-height:calc(var(--font-size) * 1.25);text-overflow:ellipsis;white-space:nowrap}}.profile-feed-header.s-1xh30xs{display:flex;justify-content:space-between;align-items:center;gap:16px;container-type:inline-size;border-bottom:1px solid var(--divider);padding:12px 16px}.title.s-1xh30xs{padding:4px 0;min-width:0;overflow:hidden;font-weight:600;font-size:calc(var(--font-size) * 1);line-height:calc(var(--font-size) * 1.5);text-overflow:ellipsis;white-space:nowrap;&:hover{text-decoration:underline}}.logo.s-1xh30xs{width:24px;height:24px}.message.s-f12rvk{margin:0 auto;padding:32px 16px;max-width:380px;color:var(--text-secondary);text-align:center}.feed.s-f12rvk{max-height:var(--max-feed-height);overflow-y:auto}.end-marker.s-f12rvk{display:grid;place-items:center;height:48px;.dot:where(.s-f12rvk){border-radius:50%;background:var(--text-secondary);width:4px;height:4px}}
+1
assets/ProfileFeedDisplay-QaaAcc9o.js
··· 1 + import{p as e,f as s,t as a,s as t,c as i,a as l,b as r,d as n,e as d,g as p,B as c,h as o,i as h,j as u,k as v,l as f,u as m,C as b}from"./index-CD_0uzJz.js";import{X as y,s as k,a as g,h as $,o as w,G as x,b as j,C as Z,e as M}from"./GuideInstructions-CTis8QB-.js";import{s as q}from"./index-Cr8Vao8y.js";const C=/[&"<]/g,A=/[&<]/g;function F(e,s){const a=String(e??""),t=s?C:A;t.lastIndex=0;let i="",l=0;for(;t.test(a);){const e=t.lastIndex-1,s=a[e];i+=a.substring(l,e)+("&"===s?"&amp;":'"'===s?"&quot;":"&lt;"),l=e+1}return i+a.substring(l)}function _(e,s,a=!1){if("hidden"===e&&"until-found"!==s&&(a=!0),null==s||!s&&a)return"";return` ${e}${a?"":`="${F(s,!0)}"`}`}function B(e,s,a){var t=function(e,s){var a=null==e?"":""+e;return s&&(a=a?a+" "+s:s),""===a?null:a}(e,s);return t?` class="${F(t,!0)}"`:""}function N(e,s){var a=function(e){return null==e?null:String(e)}(e);return a?` style="${F(a,!0)}"`:""}const z="!no-unauthenticated";function U(e,s){const{children:a}=s;e.push('<div class="bluesky-embed s-1pz15a1">'),a(e),e.push("</div>")}const P=e=>`https://bsky.app/profile/${e}`,I=(e,s)=>`https://bsky.app/profile/${e}/post/${s}`,R=e=>`https://bsky.app/hashtag/${e}`,S=(e,s)=>`https://bsky.app/profile/${e}/feed/${s}`;let T=0,H=0;const V=new Intl.DateTimeFormat("en-US",{dateStyle:"long",timeStyle:"short"}),L=new Intl.DateTimeFormat("en-US",{dateStyle:"medium"}),D=new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric"}),G=e=>{const s=new Date(e),a=s.getTime();if(isNaN(a))return"N/A";const t=Date.now();if(t>H){const e=new Date(t);e.setMonth(0,1),e.setHours(0,0,0),T=e.getTime(),e.setFullYear(e.getFullYear()+1,0,0),e.setHours(23,59,59,999),H=e.getTime()}return a>=T&&a<=H?D.format(s):L.format(s)},W=/^at:\/\/((?:did:[a-zA-Z0-9._:%-]+)|(?:[a-zA-Z0-9][a-zA-Z0-9-.]*))(?:\/([a-zA-Z0-9.-]+)(?:\/([a-zA-Z0-9_~.:-]{1,512}))?)?\/?(?:\?([^#\s]*))?(?:#([^\s]*))?$/,Y=e=>{const s=W.exec(e);if(!s)throw new E(`invalid at-uri: ${e}`);return{repo:s[1],collection:s[2]??"",rkey:s[3]??"",query:s[4]??"",fragment:s[5]??""}};class E extends Error{}const X=new Intl.NumberFormat("en-US"),J=new Intl.NumberFormat("en-US",{notation:"compact"}),K=e=>e<1e3?""+e:e<1e5?X.format(e):J.format(e),O=e=>X.format(e),Q={"!hide":{name:"Hidden by moderators",flags:1},"!warn":{name:"Content warning",flags:1},porn:{name:"Adult content",flags:0},sexual:{name:"Sexually suggestive",flags:0},"graphic-media":{name:"Graphic media",flags:0},nudity:{name:"Nudity",flags:0}},ee=(e,s)=>{if(e?.length)for(let a=0,t=e.length;a<t;a++){const t=e[a],i=t.val;if(!(i in Q))continue;const l=Q[i];if(!(1&l.flags&&t.src===s))return l}};function se(e,s){{const{embed:a}=s,t=a.external,i=(e=>{let s;if("parse"in URL)s=URL.parse(e);else try{s=new URL(e)}catch{}return!s||"https:"!==s.protocol&&"http:"!==s.protocol?null:s})(t.uri)?.host;e.push(`<a target="_blank"${_("href",i&&t.uri)} rel="noopener noreferrer nofollow" class="external-embed s-au8a8u">`),t.thumb&&e.push(`<img loading="lazy"${_("src",t.thumb)} alt="" class="thumbnail s-au8a8u"/>`),e.push(` <div class="meta s-au8a8u"><p class="title s-au8a8u">${F(t.title)}</p> <p class="description s-au8a8u">${F(t.description)}</p> `),i&&e.push(`<div class="domain s-au8a8u"><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="m4.172 8.07 3.94 2.957.977-1.941 3.887-.978 1.15-4.6M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-6.078 4.865.973-1.946-2.869-1.928-1.89-.12-1.08 1.075 1.947 2.919h2.919Z"></path></svg> <span class="domain-name">${F(i)}</span></div>`),e.push("</div></a>")}}const ae={width:16,height:9};function te(e,s){{const{embed:a,borderless:t,standalone:i,blur:l}=s,r=a.images,n=r.length;function d(e,s){const a=r[s];e.push(`<img loading="lazy"${_("src",a.thumb)}${_("alt",a.alt)}${B("image"+(l?" is-blurred":""),"s-1d339cy")}/>`)}if(e.push(`<div${B("image-embed"+(t?"":" is-bordered")+(i&&1===n?" is-aligned":""),"s-1d339cy")}>`),4===n)e.push('<div class="grid s-1d339cy"><div class="col s-1d339cy"><div class="item wide tl s-1d339cy">'),d(e,0),e.push('</div> <div class="item wide bl s-1d339cy">'),d(e,2),e.push('</div></div> <div class="col s-1d339cy"><div class="item wide tr s-1d339cy">'),d(e,1),e.push('</div> <div class="item wide br s-1d339cy">'),d(e,3),e.push("</div></div></div>");else if(3===n)e.push('<div class="grid s-1d339cy"><div class="col square s-1d339cy"><div class="item tl bl s-1d339cy">'),d(e,0),e.push('</div></div> <div class="col square s-1d339cy"><div class="item tr s-1d339cy">'),d(e,1),e.push('</div> <div class="item br s-1d339cy">'),d(e,2),e.push("</div></div></div>");else if(2===n)e.push('<div class="grid s-1d339cy"><div class="col s-1d339cy"><div class="item square tl bl s-1d339cy">'),d(e,0),e.push('</div></div> <div class="col s-1d339cy"><div class="item square tr br s-1d339cy">'),d(e,1),e.push("</div></div></div>");else if(1===n){const p=i&&(r[0].aspectRatio||ae);e.push(`<div${B("single-item tl tr bl br"+(p?" is-standalone":""),"s-1d339cy")}${N(p?`aspect-ratio: ${p.width}/${p.height}`:"")}>`),d(e,0),e.push(" "),p&&e.push('<div class="placeholder s-1d339cy"></div>'),e.push("</div>")}e.push("</div>")}}function ie(e,s){{const{post:a,embed:t,borderless:i,standalone:l,blur:r}=s,n=l&&t.aspectRatio,d=a&&I(a.author.did,Y(a.uri).rkey);function p(e){e.push(`<img loading="lazy"${_("src",t.thumbnail)} alt=""${B("thumbnail"+(r?" is-blurred":""),"s-1h3cnsw")}/> `),n&&e.push('<div class="placeholder s-1h3cnsw"></div>'),e.push(' <div class="play s-1h3cnsw"><svg class="icon s-1h3cnsw" fill="none" viewBox="0 0 24 24"><path fill="currentColor" d="M22 12 5 2v20l17-10Z"></path></svg></div>')}l?(e.push(`<a target="_blank"${_("href",d)}${B("video-embed"+(i?"":" is-bordered")+(l?" is-standalone":""),"s-1h3cnsw")}><div class="constrainer s-1h3cnsw"${N(n?`aspect-ratio: ${n.width}/${n.height}`:"")}>`),p(e),e.push("</div></a>")):(e.push(`<div${B("video-embed"+(i?"":" is-bordered"),"s-1h3cnsw")}${N(n?`aspect-ratio: ${n.width}/${n.height}`:"")}>`),p(e),e.push("</div>"))}}const le=e=>{if(e){if("app.bsky.embed.images#view"===e.$type)return e;if("app.bsky.embed.recordWithMedia#view"===e.$type)return le(e.media)}},re=e=>{if(e){if("app.bsky.embed.video#view"===e.$type)return e;if("app.bsky.embed.recordWithMedia#view"===e.$type)return re(e.media)}};function ne(e,s){e.push(`<div class="message s-1nks9gp">${F(s)}</div>`)}function de(e,s){{const{post:a,embed:t,large:i=!1}=s;function l(e,s){!function(e,s){{const{warning:a,children:t}=s;a?(e.push(`<details class="content-hider s-1se5tqk"><summary class="gate s-1se5tqk"><svg class="icon s-1se5tqk" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="M11 11h1v5m9-4a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"></path><path fill="currentColor" stroke="currentColor" stroke-width=".5" d="M11.5 7.25h-.25v1.5h1.5v-1.5H11.5Z"></path></svg> <span class="label s-1se5tqk">${F(a.name)}</span> <span class="action s-1se5tqk"></span></summary> `),t(e),e.push("</details>")):t(e)}}(e,{warning:a&&ee(a.labels,a.author.did),children:e=>{"app.bsky.embed.external#view"===s.$type?se(e,{embed:s}):"app.bsky.embed.images#view"===s.$type?te(e,{embed:s,standalone:!0}):"app.bsky.embed.video#view"===s.$type?ie(e,{post:a,embed:s,standalone:!0}):ne(e,"Unsupported media embed")}})}function r(e,s){const a=s.record;if("app.bsky.embed.record#viewRecord"===a.$type)!function(e,s){{const{embed:a,large:t=!1}=s,i=a.value,l=i.text.trim(),r=a.author,n=r.displayName?.trim(),d=a.embeds?.[0],p=le(d),c=re(d),o=I(r.did,Y(a.uri).rkey),h=!!ee(a.labels,r.did);e.push(`<a target="_blank"${_("href",o)} class="quote-embed s-vbjlyj"><div class="meta s-vbjlyj"><div class="avatar-wrapper s-vbjlyj">`),r.avatar&&e.push(`<img loading="lazy"${_("src",r.avatar)} alt="" class="avatar s-vbjlyj"/>`),e.push('</div> <span class="name-wrapper s-vbjlyj">'),n&&e.push(`<bdi class="display-name-wrapper s-vbjlyj"><span class="display-name s-vbjlyj">${F(n)}</span></bdi>`),e.push(` <span class="handle s-vbjlyj">@${F(r.handle)}</span></span> <span aria-hidden="true" class="dot s-vbjlyj">ยท</span> <time${_("datetime",i.createdAt)} class="date s-vbjlyj">${F(G(i.createdAt))}</time></div> `),l?(e.push('<div class="body s-vbjlyj">'),t||(p?(e.push('<div class="aside s-vbjlyj">'),te(e,{embed:p,blur:h}),e.push("</div>")):c&&(e.push('<div class="aside s-vbjlyj">'),ie(e,{embed:c,blur:h}),e.push("</div>"))),e.push(` <p class="text s-vbjlyj">${F(l)}</p></div>`)):e.push('<div class="divide s-vbjlyj"></div>'),e.push(" "),!t&&l||(p?te(e,{embed:p,borderless:!0,blur:h}):c&&ie(e,{embed:c,borderless:!0,blur:h})),e.push("</a>")}}(e,{embed:a,large:i});else if("app.bsky.feed.defs#generatorView"===a.$type)!function(e,s){{const{embed:a}=s,t=a.creator,i=S(t.did,Y(a.uri).rkey);e.push(`<a target="_blank"${_("href",i)} class="feed-embed s-1c1phtf"><div class="main s-1c1phtf"><div class="avatar-wrapper s-1c1phtf">`),a.avatar?e.push(`<img loading="lazy"${_("src",a.avatar)} alt="" class="avatar s-1c1phtf"/>`):e.push('<svg viewBox="0 0 32 32" class="avatar s-1c1phtf"><path fill="#0070FF" d="M0 0h32v32H0z"></path><path fill="#fff" d="M22.153 22.354a9.328 9.328 0 0 0 3.837-.491 3.076 3.076 0 0 0-4.802-2.79m.965 3.281a6.128 6.128 0 0 0-.965-3.28Zm-11.342-3.28a3.077 3.077 0 0 0-4.801 2.79 9.21 9.21 0 0 0 3.835.49m.966-3.28a6.127 6.127 0 0 0-.966 3.28Zm8.265-8.997a3.076 3.076 0 1 1-6.153 0 3.076 3.076 0 0 1 6.153 0Zm6.154 3.077a2.307 2.307 0 1 1-4.615 0 2.307 2.307 0 0 1 4.615 0Zm-13.847 0a2.307 2.307 0 1 1-4.614 0 2.307 2.307 0 0 1 4.614 0Z"></path><path fill="#fff" d="M22 22c0 3.314-2.686 3.5-6 3.5s-6-.186-6-3.5a6 6 0 0 1 12 0Z"></path></svg>'),e.push(`</div> <div class="info"><p class="name s-1c1phtf">${F(a.displayName)}</p> <p class="creator s-1c1phtf">Feed by @${F(t.handle)}</p></div></div> <p class="description s-1c1phtf">${F(a.description)}</p></a>`)}}(e,{embed:a});else if("app.bsky.graph.defs#listView"===a.$type)!function(e,s){{const{embed:a}=s,t=a.creator,i=S(t.did,Y(a.uri).rkey);e.push(`<a target="_blank"${_("href",i)} class="list-embed s-1mo1e33"><div class="main s-1mo1e33"><div class="avatar-wrapper s-1mo1e33">`),a.avatar?e.push(`<img loading="lazy"${_("src",a.avatar)} alt="" class="avatar s-1mo1e33"/>`):e.push('<svg viewBox="0 0 32 32" class="avatar s-1mo1e33"><path fill="#0070FF" d="M0 0h32v32H0z"></path><path fill="#fff" d="M22.153 22.354a9.328 9.328 0 0 0 3.837-.491 3.076 3.076 0 0 0-4.802-2.79m.965 3.281a6.128 6.128 0 0 0-.965-3.28Zm-11.342-3.28a3.077 3.077 0 0 0-4.801 2.79 9.21 9.21 0 0 0 3.835.49m.966-3.28a6.127 6.127 0 0 0-.966 3.28Zm8.265-8.997a3.076 3.076 0 1 1-6.153 0 3.076 3.076 0 0 1 6.153 0Zm6.154 3.077a2.307 2.307 0 1 1-4.615 0 2.307 2.307 0 0 1 4.615 0Zm-13.847 0a2.307 2.307 0 1 1-4.614 0 2.307 2.307 0 0 1 4.614 0Z"></path><path fill="#fff" d="M22 22c0 3.314-2.686 3.5-6 3.5s-6-.186-6-3.5a6 6 0 0 1 12 0Z"></path></svg>'),e.push(`</div> <div class="info"><p class="name s-1mo1e33">${F(a.name)}</p> <p class="creator s-1mo1e33">${F((e=>{switch(e){case"app.bsky.graph.defs#curatelist":return"User list";case"app.bsky.graph.defs#modlist":return"Moderation list"}return"Unknown list"})(a.purpose))} by @${F(t.handle)}</p></div></div> <p class="description s-1mo1e33">${F(a.description)}</p></a>`)}}(e,{embed:a});else if("app.bsky.graph.defs#starterPackViewBasic"===a.$type)!function(e,s){{const{embed:a,large:t=!1}=s,i=a.record,l=a.creator,r=l.did,n=Y(a.uri).rkey,d=((e,s)=>`https://bsky.app/starter-pack/${e}/${s}`)(r,n);if(e.push(`<a target="_blank"${_("href",d)} class="starterpack-embed s-whpa2l">`),t){const s=((e,s)=>`https://ogcard.cdn.bsky.app/start/${e}/${s}`)(r,n);e.push(`<img loading="lazy"${_("src",s)} alt="" class="banner s-whpa2l"/>`)}e.push(` <div class="meta s-whpa2l"><div class="main s-whpa2l"><svg fill="none" viewBox="0 0 24 24" class="avatar s-whpa2l"><defs><linearGradient id="a" x1="0" x2="100%" y1="0" y2="0" gradientTransform="rotate(45)"><stop offset="0" stop-color="#0A7AFF"></stop><stop offset="1" stop-color="#59B9FF"></stop></linearGradient></defs><path fill="url(#a)" fill-rule="evenodd" d="M11.26 5.227 5.02 6.899c-.734.197-1.17.95-.973 1.685l1.672 6.24c.197.734.951 1.17 1.685.973l6.24-1.672a1.376 1.376 0 0 0 .973-1.685L12.945 6.2a1.375 1.375 0 0 0-1.685-.973Zm-6.566.459a2.632 2.632 0 0 0-1.86 3.223l1.672 6.24a2.632 2.632 0 0 0 3.223 1.861l6.24-1.672a2.631 2.631 0 0 0 1.861-3.223l-1.672-6.24a2.632 2.632 0 0 0-3.223-1.861l-6.24 1.672Z" clip-rule="evenodd"></path><path fill="url(#a)" fill-rule="evenodd" d="M15.138 18.411a4.606 4.606 0 1 0 0-9.211 4.606 4.606 0 0 0 0 9.211Zm0 1.257a5.862 5.862 0 1 0 0-11.724 5.862 5.862 0 0 0 0 11.724Z" clip-rule="evenodd"></path></svg> <div class="info"><p class="name s-whpa2l">${F(i.name)}</p> <p class="creator s-whpa2l">Starter pack by @${F(l.handle)}</p></div></div> <p class="description s-whpa2l">${F(i.description)}</p></div></a>`)}}(e,{embed:a,large:i});else{const s=(e=>{switch(e){case"app.bsky.feed.post":return"post";case"app.bsky.feed.generator":return"feed";case"app.bsky.graph.list":return"list";case"app.bsky.graph.starterpack":return"starter pack";case"app.bsky.labeler.service":return"labeler"}return null})(Y(a.uri).collection);ne(e,s&&("app.bsky.embed.record#viewNotFound"===a.$type||"app.bsky.embed.record#viewBlocked"===a.$type||"app.bsky.embed.record#viewDetached"===a.$type)?`This ${s} is unavailable`:"Unsupported record embed")}}e.push('<div class="embeds s-1nks9gp">'),"app.bsky.embed.recordWithMedia#view"===t.$type?(l(e,t.media),e.push(" "),r(e,t.record)):"app.bsky.embed.record#view"===t.$type?r(e,t):l(e,t),e.push("</div>")}}const pe=e=>e?.find(e=>"app.bsky.richtext.facet#link"===e.$type||"app.bsky.richtext.facet#mention"===e.$type||"app.bsky.richtext.facet#tag"===e.$type);function ce(e,s){{const{item:a,prev:t=!1,next:i=!1}=s,l=a.reason,r=a.post,n=a.reply?.parent,d=r.author,p=P(d.did),c=d.displayName?.trim(),o=r.record,h=I(d.did,Y(r.uri).rkey),u=r.replyCount||0,v=r.likeCount||0,f=(r.repostCount||0)+(r.quoteCount||0);if(e.push(`<div${B("feed-post"+(i?"":" is-leaf"),"s-1c3lek9")}><div class="contexts s-1c3lek9">`),t&&e.push('<div class="ascendant-line-wrapper s-1c3lek9"><div class="line s-1c3lek9"></div></div>'),e.push(" "),l)if("app.bsky.feed.defs#reasonRepost"===l.$type){const s=l.by;e.push(`<div class="context s-1c3lek9"><div class="aside s-1c3lek9"><svg class="icon" viewBox="0 0 24 24" fill="none"><path d="M17 3L20 6L17 9M7 21L4 18L7 15M5 18H20V13M4 11V6H19" stroke="currentColor" stroke-width="2" stroke-linecap="square"></path></svg></div> <a${_("href",P(s.did))} class="main s-1c3lek9"><span dir="auto" class="name s-1c3lek9">${F(s.displayName)}</span> <span class="affix s-1c3lek9"> reposted</span></a></div>`)}else"app.bsky.feed.defs#reasonPin"===l.$type&&e.push('<div class="context s-1c3lek9"><div class="aside s-1c3lek9"><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="M12 15H5v-2.5l.377-.377A7.25 7.25 0 0 0 7.5 6.997V3h9v3.997a7.25 7.25 0 0 0 2.123 5.127L19 12.5V15h-7Zm0 0v6"></path></svg></div> <span class="main s-1c3lek9">Pinned</span></div>');if(e.push(`</div> <div class="content s-1c3lek9"><div class="aside s-1c3lek9"><a target="_blank"${_("href",p)} class="avatar-wrapper s-1c3lek9">`),d.avatar&&e.push(`<img loading="lazy"${_("src",d.avatar)} alt="" class="avatar s-1c3lek9"/>`),e.push("</a> "),i&&e.push('<div class="descendant-line s-1c3lek9"></div>'),e.push(`</div> <div class="main s-1c3lek9"><div class="meta s-1c3lek9"><a${_("href",p)} target="_blank" class="name-wrapper s-1c3lek9">`),c&&e.push(`<bdi class="display-name-wrapper s-1c3lek9"><span class="display-name s-1c3lek9">${F(c)}</span></bdi>`),e.push(` <span class="handle s-1c3lek9">@${F(d.handle)}</span></a> <span aria-hidden="true" class="dot s-1c3lek9">ยท</span> <a target="_blank"${_("href",h)}${_("title",(e=>{const s=new Date(e);return isNaN(s.getTime())?"N/A":V.format(s)})(o.createdAt))} class="date s-1c3lek9"><time${_("datetime",o.createdAt)}>${F(G(o.createdAt))}</time></a></div> `),!t&&o.reply){if(e.push('<p class="reply-context s-1c3lek9">'),n&&"app.bsky.feed.defs#postView"===n.$type){const s=n.author;e.push(`Replying to <a target="_blank"${_("href",P(s.did))} dir="auto" class="s-1c3lek9">${F(s.displayName?.trim()||`@${s.handle}`)}</a>`)}else e.push("Replying to an unknown post");e.push("</p>")}e.push(" "),function(e,s){{const{text:a,facets:t,large:i}=s;e.push(`<p${B("rich-text"+(i?" is-large":" is-small"),"s-10xqaeb")}>`);const l=q(a,t);for(let s=0,r=l.length;s<r;s++){let a=l[s];const t=pe(a.features);t?"app.bsky.richtext.facet#link"===t.$type?e.push(`<a target="_blank"${_("href",t.uri)} rel="noopener nofollow" class="link s-10xqaeb">${F(a.text)}</a>`):"app.bsky.richtext.facet#mention"===t.$type?e.push(`<a target="_blank"${_("href",P(t.did))} class="mention s-10xqaeb">${F(a.text)}</a>`):"app.bsky.richtext.facet#tag"===t.$type&&e.push(`<a target="_blank"${_("href",R(t.tag))} class="hashtag s-10xqaeb">${F(a.text)}</a>`):e.push(`${F(a.text)}`)}e.push("</p>")}}(e,{text:o.text,facets:o.facets}),e.push(" "),r.embed&&de(e,{post:r,embed:r.embed}),e.push(` <div class="metrics s-1c3lek9"><div${_("title",1===u?`${O(u)} reply`:`${O(u)} replies`)} class="stat s-1c3lek9"><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="M3.002 4h18v14h-9l-5 3v-3h-4V4Z"></path></svg> <span class="count s-1c3lek9">${F(K(u))}</span></div> <div${_("title",1===f?`${O(f)} repost`:`${O(f)} reposts`)} class="stat s-1c3lek9"><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="square" stroke-width="2" d="m17 3 3 3-3 3M7 21l-3-3 3-3m-2 3h15v-5M4 11V6h15"></path></svg> <span class="count s-1c3lek9">${F(K(f))}</span></div> <div${_("title",1===v?`${O(v)} like`:`${O(v)} likes`)} class="stat s-1c3lek9"><svg class="icon" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-width="2" d="M12 5.768c6.162-6.25 16.725 5.358 0 14.732C-4.725 11.126 5.838-.482 12 5.768Z"></path></svg> <span class="count s-1c3lek9">${F(K(v))}</span></div></div></div></div></div>`)}}function oe(e,s){U(e,{children:e=>{e.push(`<div class="message s-f12rvk">${F(s)}</div>`)}})}function he(e,s){{const{profile:a,feed:t,allowUnauthenticated:i}=s,l=!i&&a?.labels?.some(e=>e.val===z),r=t.filter(e=>{if(!a)return!1;const s=e.reason;if(s){if("app.bsky.feed.defs#reasonPin"===s.$type)return!0;if("app.bsky.feed.defs#reasonRepost"===s.$type){const s=e.post.author;return s.did===a.did||(i||!s.labels?.some(e=>e.val===z))}return!1}return!e.reply});null===a?oe(e,"The profile can't be found, it may have been deleted."):l?oe(e,"The user has requested for their posts to not be displayed on external sites."):U(e,{children:e=>{if(function(e,s){{const{profile:a}=s;e.push(`<div class="profile-feed-header s-1xh30xs"><a target="_blank"${_("href",P(a.did))} class="title s-1xh30xs">Posts from @${F(a.handle)}</a> <svg class="logo s-1xh30xs" 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>`)}}(e,{profile:a}),e.push(" "),r.length>0){e.push('<div class="feed s-f12rvk">');const s=r;for(let a=0,t=s.length;a<t;a++){ce(e,{item:s[a]})}e.push(' <div class="end-marker s-f12rvk"><div class="dot s-f12rvk"></div></div></div>')}else e.push('<div class="message s-f12rvk">This user has not made any posts.</div>')}})}}var ue=s("<bluesky-profile-feed><!></bluesky-profile-feed>",2);function ve(s,n){e(n,!0);var d=ue();a(()=>t(d,"actor",n.data.profile?.did));var p=i(d);$(p,()=>function(e,s={}){let a="";return he({push(e){a+=e}},s.props??{}),{body:a}}(0,{props:n.data}).body),l(s,d),r()}var fe=s("<li><p>Insert the following scripts and stylesheets to the <code>&lt;head&gt;</code> of your website.</p> <!></li> <li><p>Insert the following markup in wherever you want the profile feed to be.</p> <!></li>",1),me=s("<!> <!>",1);function be(s,t){let $;e(t,!0);const q=m(()=>{$?.abort(),$=new AbortController;const e=$.signal;return(async e=>{const s=e.actor,a=e.allowUnauthenticated??!1,t=new y({handler:k({service:e.serviceUri??"https://public.api.bsky.app"})}),[{data:i},{data:l}]=await Promise.all([t.get("app.bsky.actor.getProfile",{signal:e.signal,params:{actor:s}}).catch(e=>e instanceof g&&"InvalidRequest"===e.kind&&"Profile not found"===e.description?{data:null}:Promise.reject(e)),t.get("app.bsky.feed.getAuthorFeed",{signal:e.signal,params:{actor:s,filter:"posts_no_replies",includePins:e.includePins,limit:30}}).catch(e=>e instanceof g&&"InvalidRequest"===e.kind&&"Profile not found"===e.description?{data:{feed:[]}}:Promise.reject(e))]);return{profile:i,feed:l.feed,allowUnauthenticated:a}})({actor:t.matched.actor,signal:e})});w(()=>{$?.abort()});const C=()=>{const e="https://cdn.jsdelivr.net/npm/bluesky-profile-feed-embed@^1.0.0";return`\x3c!-- Core web component and styling --\x3e\n<script type="module" src="${e}/+esm"><\/script>\n<link rel="stylesheet" href="${e}/dist/core.min.css">\n\n\x3c!-- Built-in themes --\x3e\n<link rel="stylesheet" href="${e}/themes/light.min.css" media="(prefers-color-scheme: light)">\n<link rel="stylesheet" href="${e}/themes/dim.min.css" media="(prefers-color-scheme: dark)">\n`};var A=n(),F=d(A);p(F,()=>u(q),e=>{b(e)},(e,s)=>{var a=me(),t=d(a);ve(t,{get data(){return u(s)}});var r=v(t,2),n=e=>{x(e,{title:"How do I embed this to my website?",children:(e,a)=>{j(e,{children:(e,a)=>{var t=fe(),r=d(t),n=v(i(r),2);{let e=m(C);Z(n,{get code(){return u(e)}})}var p=v(r,2),c=v(i(p),2);{let e=m(()=>(e=>{const s=`https://bsky.app/profile/${e.did}`;return`<bluesky-profile-feed actor="${M(e.did)}" include-pins>\n <a target="_blank" href="${M(s)}" class="bluesky-profile-feed-fallback">\n ${e.displayName?.trim()?`Posts by ${M(e.displayName)} (@${M(e.handle)})`:`Posts by @${M(e.handle)}`}\n </a>\n</bluesky-profile-feed>\n`})(u(s).profile));Z(c,{get code(){return u(e)}})}l(e,t)}})}})};f(r,e=>{u(s).profile&&e(n)}),l(e,a)},(e,s)=>{c(e,{type:"alert",children:(e,t)=>{var i=o();a(()=>h(i,""+u(s))),l(e,i)}})}),l(s,A),r()}export{be as default};
+1
assets/index-B_9yoyg2.css
··· 1 + *,:before,:after{box-sizing:border-box}html{line-height:1.15;font-family:Inter,Roboto,ui-sans-serif,sans-serif,"Noto Color Emoji",Twemoji Mozilla;-webkit-text-size-adjust:100%;tab-size:4}body{margin:0}b,strong{font-weight:bolder}code,kbd,samp,pre{font-size:1em;font-family:JetBrains Mono NL,ui-monospace,monospace}small{font-size:80%}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}table{border-color:currentcolor}button,input,optgroup,select,textarea{margin:0;font-size:100%;line-height:1.15;font-family:inherit}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}.bluesky-embed{--font-size: 16px;--font-family: system-ui, "Segoe UI", "Roboto", "Helvetica", "Arial", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--max-feed-height: 600px}.bluesky-embed{--text-primary: #000000;--text-secondary: #455668;--text-link: #1083fe;--background-primary: #ffffff;--background-secondary: #455668;--divider-hover: #a9b7c5;--divider: #d4dbe2;--button: #1083fe;--button-text: #ffffff;--button-hover: #0168d5}.banner.svelte-4gizvm{border:1px solid;border-radius:4px;padding:10px 12px;font-weight:500;font-size:.875rem;line-height:1.25rem;a{color:inherit;font-weight:600}}.type-alert.svelte-4gizvm{border-color:#fca5a5;background:#fee2e2;color:#991b1b}.type-inform.svelte-4gizvm{border-color:#bfdbfe;background:#dbeafe;color:#1e40af}.circular-spinner.svelte-rq8vha{display:block;animation:svelte-rq8vha-spin 1s linear infinite;margin:0 auto;width:24px;height:24px}@keyframes svelte-rq8vha-spin{to{transform:rotate(360deg)}}.accented.svelte-rq8vha{stroke:#2563eb}.background.svelte-rq8vha{stroke:#2563eb;opacity:20%}.field.svelte-1wzaqos{display:flex;flex-direction:column;gap:8px}.input-wrapper.svelte-1wzaqos{display:contents}.label.svelte-1wzaqos{color:#4b5563;font-weight:600;font-size:.875rem;line-height:1.25rem}.text-input.svelte-1e5va0l{outline:2px none #2563eb;outline-offset:-1px;border:1px solid #9ca3af;border-radius:4px;padding:8px 12px;font-size:.875rem;line-height:1.25rem;&::placeholder{color:#9ca3af}&:focus{outline-style:solid}}.app.svelte-1n46o8q{margin:0 auto;padding:36px 16px;width:100%;max-width:582px}.header.svelte-1n46o8q{margin:24px 0}.main.svelte-1n46o8q{margin:36px 0}.choices.svelte-1n46o8q{display:flex;flex-direction:column;gap:8px;margin:16px 0 36px;border:0;padding:0}.choice.svelte-1n46o8q{display:flex;align-items:center;gap:8px;font-size:.875rem;line-height:1.25rem;input:where(.svelte-1n46o8q){appearance:none;outline:2px none #2563eb;outline-offset:2px;border:1px solid #9ca3af;border-radius:8px;width:16px;height:16px;&:checked{border:0;background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");background-color:#2563eb}&:focus{outline-style:solid}}}.footer.svelte-1n46o8q{display:flex;flex-wrap:wrap;gap:.5rem;margin:36px 0 0;border-top:1px solid #d1d5db;padding:36px 0 0;color:#4b5563;font-size:.875rem;line-height:1.25rem;a:where(.svelte-1n46o8q){color:#2563eb}}
+2
assets/index-CD_0uzJz.js
··· 1 + const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./PostDisplay-CqTUAVla.js","./GuideInstructions-CTis8QB-.js","./GuideInstructions-B8N7RzmZ.css","./index-Cr8Vao8y.js","./PostDisplay-yMSDBkol.css","./ProfileCardDisplay-BpCMWdM3.js","./ProfileCardDisplay-D4FwjqsR.css","./ProfileFeedDisplay-QaaAcc9o.js","./ProfileFeedDisplay-DOw9fkTH.css"])))=>i.map(i=>d[i]); 2 + !function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))t(e);new MutationObserver(e=>{for(const n of e)if("childList"===n.type)for(const e of n.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&t(e)}).observe(document,{childList:!0,subtree:!0})}function t(e){if(e.ep)return;e.ep=!0;const t=function(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?t.credentials="include":"anonymous"===e.crossOrigin?t.credentials="omit":t.credentials="same-origin",t}(e);fetch(e.href,t)}}();const e=!1;var t=Array.isArray,n=Array.prototype.indexOf,r=Array.from,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyDescriptors,o=Object.prototype,a=Array.prototype,f=Object.getPrototypeOf,c=Object.isExtensible;const u=()=>{};function d(){var e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}const h=16,v=32,p=64,_=128,g=512,m=1024,y=2048,b=4096,w=8192,k=16384,x=32768,E=65536,P=1<<17,S=1<<18,A=1<<19,q=32768,j=1<<21,O=1<<23,L=Symbol("$state"),z=Symbol("legacy props"),N=Symbol(""),$=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"};const M=Symbol(),D="http://www.w3.org/1999/xhtml";function R(e){return e===this.v}let C=null;function T(e){C=e}function I(e,t=!1,n){C={p:C,i:!1,c:null,e:null,s:e,x:null,l:null}}function U(e){var t=C,n=t.e;if(null!==n)for(var r of(t.e=null,n))Ge(r);return t.i=!0,C=t.p,{}}let Z=[];function B(){var e=Z;Z=[],function(e){for(var t=0;t<e.length;t++)e[t]()}(e)}function V(e){if(0===Z.length&&!te){var t=Z;queueMicrotask(()=>{t===Z&&B()})}Z.push(e)}function W(){for(;Z.length>0;)B()}function F(e){var t=gt;if(null===t)return vt.f|=O,e;if(0===(t.f&x)){if(0===(t.f&_))throw e;t.b.error(e)}else K(e,t)}function K(e,t){for(;null!==t;){if(0!==(t.f&_))try{return void t.b.error(e)}catch(n){e=n}t=t.parent}throw e}const H=new Set;let G=null,J=null,Q=null,X=[],Y=null,ee=!1,te=!1;class ne{committed=!1;current=new Map;previous=new Map;#e=new Set;#t=new Set;#n=0;#r=0;#i=null;#l=[];#s=[];skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#r>0}process(e){X=[],J=null,this.apply();var t={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(const n of e)this.#o(n,t);this.is_fork||this.#a(),this.is_deferred()?(this.#f(t.effects),this.#f(t.render_effects),this.#f(t.block_effects)):(J=this,G=null,oe(t.render_effects),oe(t.effects),J=null,this.#i?.resolve()),Q=null}#o(e,t){e.f^=m;for(var n=e.first;null!==n;){var r=n.f,i=!!(96&r),l=i&&0!==(r&m)||0!==(r&w)||this.skipped_effects.has(n);if(0!==(n.f&_)&&n.b?.is_pending()&&(t={parent:t,effect:n,effects:[],render_effects:[],block_effects:[]}),!l&&null!==n.fn){i?n.f^=m:4&r?t.effects.push(n):jt(n)&&(0!==(n.f&h)&&t.block_effects.push(n),$t(n));var s=n.first;if(null!==s){n=s;continue}}var o=n.parent;for(n=n.next;null===n&&null!==o;)o===t.effect&&(this.#f(t.effects),this.#f(t.render_effects),this.#f(t.block_effects),t=t.parent),n=o.next,o=o.parent}}#f(e){for(const t of e){(0!==(t.f&y)?this.#l:this.#s).push(t),this.#c(t.deps),It(t,m)}}#c(e){if(null!==e)for(const t of e)2&t.f&&0!==(t.f&q)&&(t.f^=q,this.#c(t.deps))}capture(e,t){this.previous.has(e)||this.previous.set(e,t),0===(e.f&O)&&(this.current.set(e,e.v),Q?.set(e,e.v))}activate(){G=this,this.apply()}deactivate(){G===this&&(G=null,Q=null)}flush(){if(this.activate(),X.length>0){if(ie(),null!==G&&G!==this)return}else 0===this.#n&&this.process([]);this.deactivate()}discard(){for(const e of this.#t)e(this);this.#t.clear()}#a(){if(0===this.#r){for(const e of this.#e)e();this.#e.clear()}0===this.#n&&this.#u()}#u(){if(H.size>1){this.previous.clear();var e=Q,t=!0,n={parent:null,effect:null,effects:[],render_effects:[],block_effects:[]};for(const e of H){if(e===this){t=!1;continue}const i=[];for(const[n,r]of this.current){if(e.current.has(n)){if(!t||r===e.current.get(n))continue;e.current.set(n,r)}i.push(n)}if(0===i.length)continue;const l=[...e.current.keys()].filter(e=>!this.current.has(e));if(l.length>0){var r=X;X=[];const t=new Set,s=new Map;for(const e of i)ae(e,l,t,s);if(X.length>0){G=e,e.apply();for(const t of X)e.#o(t,n);e.deactivate()}X=r}}G=null,Q=e}this.committed=!0,H.delete(this)}increment(e){this.#n+=1,e&&(this.#r+=1)}decrement(e){this.#n-=1,e&&(this.#r-=1),this.revive()}revive(){for(const e of this.#l)It(e,y),ce(e);for(const e of this.#s)It(e,b),ce(e);this.#l=[],this.#s=[],this.flush()}oncommit(e){this.#e.add(e)}ondiscard(e){this.#t.add(e)}settled(){return(this.#i??=d()).promise}static ensure(){if(null===G){const e=G=new ne;H.add(G),te||ne.enqueue(()=>{G===e&&e.flush()})}return G}static enqueue(e){V(e)}apply(){}}function re(e){var t=te;te=!0;try{for(;;){if(W(),0===X.length&&(G?.flush(),0===X.length))return void(Y=null);ie()}}finally{te=t}}function ie(){var t=ct;ee=!0;try{var n=0;for(ut(!0);X.length>0;){var r=ne.ensure();if(n++>1e3)e,le();r.process(X),we.clear()}}finally{ee=!1,ut(t),Y=null}}function le(){try{!function(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}()}catch(e){K(e,Y)}}let se=null;function oe(e){var t=e.length;if(0!==t){for(var n=0;n<t;){var r=e[n++];if(!(24576&r.f)&&jt(r)&&(se=new Set,$t(r),null===r.deps&&null===r.first&&null===r.nodes&&(null===r.teardown&&null===r.ac?it(r):r.fn=null),se?.size>0)){we.clear();for(const e of se){if(24576&e.f)continue;const t=[e];let n=e.parent;for(;null!==n;)se.has(n)&&(se.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){const n=t[e];24576&n.f||$t(n)}}se.clear()}}se=null}}function ae(e,t,n,r){if(!n.has(e)&&(n.add(e),null!==e.reactions))for(const i of e.reactions){const e=i.f;2&e?ae(i,t,n,r):4194320&e&&0===(e&y)&&fe(i,t,r)&&(It(i,y),ce(i))}}function fe(e,t,n){const r=n.get(e);if(void 0!==r)return r;if(null!==e.deps)for(const i of e.deps){if(t.includes(i))return!0;if(2&i.f&&fe(i,t,n))return n.set(i,!0),!0}return n.set(e,!1),!1}function ce(e){for(var t=Y=e;null!==t.parent;){var n=(t=t.parent).f;if(ee&&t===gt&&0!==(n&h)&&0===(n&S))return;if(96&n){if(0===(n&m))return;t.f^=m}}X.push(t)}class ue{parent;#n=!1;#d;#h=null;#v;#p;#_;#g=null;#m=null;#y=null;#b=null;#w=null;#k=0;#x=0;#E=!1;#P=null;#S=function(e){let t,n=0,r=xe(0);return()=>{Fe()&&(Mt(r),Je(()=>(0===n&&(t=Ct(()=>e(()=>Ae(r)))),n+=1,()=>{V(()=>{n-=1,0===n&&(t?.(),t=void 0,Ae(r))})})))}}(()=>(this.#P=xe(this.#k),()=>{this.#P=null}));constructor(e,t,n){this.#d=e,this.#v=t,this.#p=n,this.parent=gt.b,this.#n=!!this.#v.pending,this.#_=Xe(()=>{gt.b=this;var e=this.#A();try{this.#g=Ye(()=>n(e))}catch(t){this.error(t)}return this.#x>0?this.#q():this.#n=!1,()=>{this.#w?.remove()}},589952)}#j(){try{this.#g=Ye(()=>this.#p(this.#d))}catch(e){this.error(e)}this.#n=!1}#O(){const e=this.#v.pending;e&&(this.#m=Ye(()=>e(this.#d)),ne.enqueue(()=>{var e=this.#A();this.#g=this.#L(()=>(ne.ensure(),Ye(()=>this.#p(e)))),this.#x>0?this.#q():(lt(this.#m,()=>{this.#m=null}),this.#n=!1)}))}#A(){var e=this.#d;return this.#n&&(this.#w=Me(),this.#d.before(this.#w),e=this.#w),e}is_pending(){return this.#n||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#v.pending}#L(e){var t=gt,n=vt,r=C;mt(this.#_),_t(this.#_),T(this.#_.ctx);try{return e()}catch(i){return F(i),null}finally{mt(t),_t(n),T(r)}}#q(){const e=this.#v.pending;null!==this.#g&&(this.#b=document.createDocumentFragment(),this.#b.append(this.#w),ft(this.#g,this.#b)),null===this.#m&&(this.#m=Ye(()=>e(this.#d)))}#z(e){this.has_pending_snippet()?(this.#x+=e,0===this.#x&&(this.#n=!1,this.#m&&lt(this.#m,()=>{this.#m=null}),this.#b&&(this.#d.before(this.#b),this.#b=null))):this.parent&&this.parent.#z(e)}update_pending_count(e){this.#z(e),this.#k+=e,this.#P&&Se(this.#P,this.#k)}get_effect_pending(){return this.#S(),Mt(this.#P)}error(e){var t=this.#v.onerror;let n=this.#v.failed;if(this.#E||!t&&!n)throw e;this.#g&&(nt(this.#g),this.#g=null),this.#m&&(nt(this.#m),this.#m=null),this.#y&&(nt(this.#y),this.#y=null);var r=!1,i=!1;const l=()=>{r?console.warn("https://svelte.dev/e/svelte_boundary_reset_noop"):(r=!0,i&&function(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}(),ne.ensure(),this.#k=0,null!==this.#y&&lt(this.#y,()=>{this.#y=null}),this.#n=this.has_pending_snippet(),this.#g=this.#L(()=>(this.#E=!1,Ye(()=>this.#p(this.#d)))),this.#x>0?this.#q():this.#n=!1)};var s=vt;try{_t(null),i=!0,t?.(e,l),i=!1}catch(e){K(e,this.#_&&this.#_.parent)}finally{_t(s)}n&&V(()=>{this.#y=this.#L(()=>{ne.ensure(),this.#E=!0;try{return Ye(()=>{n(this.#d,()=>e,()=>l)})}catch(e){return K(e,this.#_.parent),null}finally{this.#E=!1}})})}}function de(e,t,n,r){const i=pe;if(0!==n.length||0!==e.length){var l=G,s=gt,o=he();e.length>0?Promise.all(e).then(()=>{o();try{return a()}finally{l?.deactivate(),ve()}}):a()}else r(t.map(i));function a(){Promise.all(n.map(e=>function(e){let t=gt;null===t&&function(){throw new Error("https://svelte.dev/e/async_derived_orphan")}();var n=t.b,r=void 0,i=xe(M),l=!vt,s=new Map;return function(e){We(4718592,e,!0)}(()=>{var t=d();r=t.promise;try{Promise.resolve(e()).then(t.resolve,t.reject).then(()=>{o===G&&o.committed&&o.deactivate(),ve()})}catch(c){t.reject(c),ve()}var o=G;if(l){var a=!n.is_pending();n.update_pending_count(1),o.increment(a),s.get(o)?.reject($),s.delete(o),s.set(o,t)}const f=(e,t=void 0)=>{if(o.activate(),t)t!==$&&(i.f|=O,Se(i,t));else{0!==(i.f&O)&&(i.f^=O),Se(i,e);for(const[e,t]of s){if(s.delete(e),e===o)break;t.reject($)}}l&&(n.update_pending_count(-1),o.decrement(a))};t.promise.then(f,e=>f(null,e||"unknown"))}),Ke(()=>{for(const e of s.values())e.reject($)}),new Promise(e=>{function t(n){function l(){n===r?e(i):t(r)}n.then(l,l)}t(r)})}(e))).then(e=>{o();try{r([...t.map(i),...e])}catch(n){0===(s.f&k)&&K(n,s)}l?.deactivate(),ve()}).catch(e=>{K(e,s)})}}function he(){var e=gt,t=vt,n=C,r=G;return function(i=!0){mt(e),_t(t),T(n),i&&r?.activate()}}function ve(){mt(null),_t(null),T(null)}function pe(e){var t=null!==vt&&2&vt.f?vt:null;null!==gt&&(gt.f|=A);return{ctx:C,deps:null,effects:null,equals:R,f:2050,fn:e,reactions:null,rv:0,v:M,wv:0,parent:t??gt,ac:null}}function _e(e){const t=pe(e);return bt(t),t}function ge(e){var t=e.effects;if(null!==t){e.effects=null;for(var n=0;n<t.length;n+=1)nt(t[n])}}function me(e){var t,n=gt;mt(function(e){for(var t=e.parent;null!==t;){if(!(2&t.f))return 0===(t.f&k)?t:null;t=t.parent}return null}(e));try{e.f&=-32769,ge(e),t=Lt(e)}finally{mt(n)}return t}function ye(e){var t=me(e);(e.equals(t)||(G?.is_fork||(e.v=t),e.wv=qt()),dt)||(null!==Q?(Fe()||G?.is_fork)&&Q.set(e,t):It(e,0===(e.f&g)?b:m))}let be=new Set;const we=new Map;let ke=!1;function xe(e,t){return{f:0,v:e,reactions:null,equals:R,rv:0,wv:0}}function Ee(e,t){const n=xe(e);return bt(n),n}function Pe(e,t,n=!1){return null===vt||pt&&0===(vt.f&P)||!(4325394&vt.f)||yt?.includes(e)||function(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}(),Se(e,n?je(t):t)}function Se(e,t){if(!e.equals(t)){var n=e.v;dt?we.set(e,t):we.set(e,n),e.v=t;var r=ne.ensure();r.capture(e,n),2&e.f&&(0!==(e.f&y)&&me(e),It(e,0!==(e.f&g)?m:b)),e.wv=qt(),qe(e,y),null===gt||0===(gt.f&m)||96&gt.f||(null===xt?function(e){xt=e}([e]):xt.push(e)),!r.is_fork&&be.size>0&&!ke&&function(){ke=!1;var e=ct;ut(!0);const t=Array.from(be);try{for(const e of t)0!==(e.f&m)&&It(e,b),jt(e)&&$t(e)}finally{ut(e)}be.clear()}()}return t}function Ae(e){Pe(e,e.v+1)}function qe(e,t){var n=e.reactions;if(null!==n)for(var r=n.length,i=0;i<r;i++){var l=n[i],s=l.f,o=0===(s&y);if(o&&It(l,t),2&s){var a=l;Q?.delete(a),0===(s&q)&&(s&g&&(l.f|=q),qe(a,b))}else o&&(0!==(s&h)&&null!==se&&se.add(l),ce(l))}}function je(e){if("object"!=typeof e||null===e||L in e)return e;const n=f(e);if(n!==o&&n!==a)return e;var r=new Map,i=t(e),s=Ee(0),c=St,u=e=>{if(St===c)return e();var t=vt,n=St;_t(null),At(c);var r=e();return _t(t),At(n),r};return i&&r.set("length",Ee(e.length)),new Proxy(e,{defineProperty(e,t,n){"value"in n&&!1!==n.configurable&&!1!==n.enumerable&&!1!==n.writable||function(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}();var i=r.get(t);return void 0===i?i=u(()=>{var e=Ee(n.value);return r.set(t,e),e}):Pe(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(void 0===n){if(t in e){const e=u(()=>Ee(M));r.set(t,e),Ae(s)}}else Pe(n,M),Ae(s);return!0},get(t,n,i){if(n===L)return e;var s=r.get(n),o=n in t;if(void 0!==s||o&&!l(t,n)?.writable||(s=u(()=>Ee(je(o?t[n]:M))),r.set(n,s)),void 0!==s){var a=Mt(s);return a===M?void 0:a}return Reflect.get(t,n,i)},getOwnPropertyDescriptor(e,t){var n=Reflect.getOwnPropertyDescriptor(e,t);if(n&&"value"in n){var i=r.get(t);i&&(n.value=Mt(i))}else if(void 0===n){var l=r.get(t),s=l?.v;if(void 0!==l&&s!==M)return{enumerable:!0,configurable:!0,value:s,writable:!0}}return n},has(e,t){if(t===L)return!0;var n=r.get(t),i=void 0!==n&&n.v!==M||Reflect.has(e,t);if((void 0!==n||null!==gt&&(!i||l(e,t)?.writable))&&(void 0===n&&(n=u(()=>Ee(i?je(e[t]):M)),r.set(t,n)),Mt(n)===M))return!1;return i},set(e,t,n,o){var a=r.get(t),f=t in e;if(i&&"length"===t)for(var c=n;c<a.v;c+=1){var d=r.get(c+"");void 0!==d?Pe(d,M):c in e&&(d=u(()=>Ee(M)),r.set(c+"",d))}void 0===a?f&&!l(e,t)?.writable||(Pe(a=u(()=>Ee(void 0)),je(n)),r.set(t,a)):(f=a.v!==M,Pe(a,u(()=>je(n))));var h=Reflect.getOwnPropertyDescriptor(e,t);if(h?.set&&h.set.call(o,n),!f){if(i&&"string"==typeof t){var v=r.get("length"),p=Number(t);Number.isInteger(p)&&p>=v.v&&Pe(v,p+1)}Ae(s)}return!0},ownKeys(e){Mt(s);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return void 0===t||t.v!==M});for(var[n,i]of r)i.v===M||n in e||t.push(n);return t},setPrototypeOf(){!function(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}()}})}function Oe(e){try{if(null!==e&&"object"==typeof e&&L in e)return e[L]}catch{}return e}var Le,ze,Ne,$e;function Me(e=""){return document.createTextNode(e)}function De(e){return Ne.call(e)}function Re(e){return $e.call(e)}function Ce(e,t){return De(e)}function Te(e,t=!1){var n=De(e);return n instanceof Comment&&""===n.data?Re(n):n}function Ie(e,t=1,n=!1){let r=e;for(;t--;)r=Re(r);return r}let Ue=!1;function Ze(e){var t=vt,n=gt;_t(null),mt(null);try{return e()}finally{_t(t),mt(n)}}function Be(e,t,n,r=n){e.addEventListener(t,()=>Ze(n));const i=e.__on_r;e.__on_r=i?()=>{i(),r(!0)}:()=>r(!0),Ue||(Ue=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Ve(e){null===gt&&(null===vt&&function(){throw new Error("https://svelte.dev/e/effect_orphan")}(),function(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}()),dt&&function(){throw new Error("https://svelte.dev/e/effect_in_teardown")}()}function We(e,t,n){var r=gt;null!==r&&0!==(r.f&w)&&(e|=w);var i={ctx:C,deps:null,nodes:null,f:e|y|g,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{$t(i),i.f|=x}catch(l){throw nt(i),l}else null!==t&&ce(i);var l=i;if(n&&null===l.deps&&null===l.teardown&&null===l.nodes&&l.first===l.last&&0===(l.f&A)&&(l=l.first,0!==(e&h)&&0!==(e&E)&&null!==l&&(l.f|=E)),null!==l&&(l.parent=r,null!==r&&function(e,t){var n=t.last;null===n?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}(l,r),null!==vt&&2&vt.f&&0===(e&p))){var s=vt;(s.effects??=[]).push(l)}return i}function Fe(){return null!==vt&&!pt}function Ke(e){const t=We(8,null,!1);return It(t,m),t.teardown=e,t}function He(e){Ve();var t=gt.f;if(!(!vt&&0!==(t&v)&&0===(t&x)))return Ge(e);var n=C;(n.e??=[]).push(e)}function Ge(e){return We(1048580,e,!1)}function Je(e,t=0){return We(8|t,e,!0)}function Qe(e,t=[],n=[],r=[]){de(r,t,n,t=>{We(8,()=>e(...t.map(Mt)),!0)})}function Xe(e,t=0){return We(h|t,e,!0)}function Ye(e){return We(524320,e,!0)}function et(e){var t=e.teardown;if(null!==t){const e=dt,n=vt;ht(!0),_t(null);try{t.call(null)}finally{ht(e),_t(n)}}}function tt(e,t=!1){var n=e.first;for(e.first=e.last=null;null!==n;){const e=n.ac;null!==e&&Ze(()=>{e.abort($)});var r=n.next;0!==(n.f&p)?n.parent=null:nt(n,t),n=r}}function nt(e,t=!0){var n=!1;!t&&0===(e.f&S)||null===e.nodes||null===e.nodes.end||(rt(e.nodes.start,e.nodes.end),n=!0),tt(e,t&&!n),Nt(e,0),It(e,k);var r=e.nodes&&e.nodes.t;if(null!==r)for(const l of r)l.stop();et(e);var i=e.parent;null!==i&&null!==i.first&&it(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function rt(e,t){for(;null!==e;){var n=e===t?null:Re(e);e.remove(),e=n}}function it(e){var t=e.parent,n=e.prev,r=e.next;null!==n&&(n.next=r),null!==r&&(r.prev=n),null!==t&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function lt(e,t,n=!0){var r=[];st(e,r,!0);var i=()=>{n&&nt(e),t&&t()},l=r.length;if(l>0){var s=()=>--l||i();for(var o of r)o.out(s)}else i()}function st(e,t,n){if(0===(e.f&w)){e.f^=w;var r=e.nodes&&e.nodes.t;if(null!==r)for(const e of r)(e.is_global||n)&&t.push(e);for(var i=e.first;null!==i;){var l=i.next;st(i,t,!!(0!==(i.f&E)||0!==(i.f&v)&&0!==(e.f&h))&&n),i=l}}}function ot(e){at(e,!0)}function at(e,t){if(0!==(e.f&w)){e.f^=w,0===(e.f&m)&&(It(e,y),ce(e));for(var n=e.first;null!==n;){var r=n.next;at(n,!!(0!==(n.f&E)||0!==(n.f&v))&&t),n=r}var i=e.nodes&&e.nodes.t;if(null!==i)for(const e of i)(e.is_global||t)&&e.in()}}function ft(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;null!==n;){var i=n===r?null:Re(n);t.append(n),n=i}}let ct=!1;function ut(e){ct=e}let dt=!1;function ht(e){dt=e}let vt=null,pt=!1;function _t(e){vt=e}let gt=null;function mt(e){gt=e}let yt=null;function bt(e){null!==vt&&(null===yt?yt=[e]:yt.push(e))}let wt=null,kt=0,xt=null;let Et=1,Pt=0,St=Pt;function At(e){St=e}function qt(){return++Et}function jt(e){var t=e.f;if(0!==(t&y))return!0;if(2&t&&(e.f&=-32769),0!==(t&b)){var n=e.deps;if(null!==n)for(var r=n.length,i=0;i<r;i++){var l=n[i];if(jt(l)&&ye(l),l.wv>e.wv)return!0}0!==(t&g)&&null===Q&&It(e,m)}return!1}function Ot(e,t,n=!0){var r=e.reactions;if(null!==r&&!yt?.includes(e))for(var i=0;i<r.length;i++){var l=r[i];2&l.f?Ot(l,t,!1):t===l&&(n?It(l,y):0!==(l.f&m)&&It(l,b),ce(l))}}function Lt(e){var t=wt,n=kt,r=xt,i=vt,l=yt,s=C,o=pt,a=St,f=e.f;wt=null,kt=0,xt=null,vt=96&f?null:e,yt=null,T(e.ctx),pt=!1,St=++Pt,null!==e.ac&&(Ze(()=>{e.ac.abort($)}),e.ac=null);try{e.f|=j;var c=(0,e.fn)(),u=e.deps;if(null!==wt){var d;if(Nt(e,kt),null!==u&&kt>0)for(u.length=kt+wt.length,d=0;d<wt.length;d++)u[kt+d]=wt[d];else e.deps=u=wt;if(Fe()&&0!==(e.f&g))for(d=kt;d<u.length;d++)(u[d].reactions??=[]).push(e)}else null!==u&&kt<u.length&&(Nt(e,kt),u.length=kt);if(!(null===xt||pt||null===u||6146&e.f))for(d=0;d<xt.length;d++)Ot(xt[d],e);return null!==i&&i!==e&&(Pt++,null!==xt&&(null===r?r=xt:r.push(...xt))),0!==(e.f&O)&&(e.f^=O),c}catch(h){return F(h)}finally{e.f^=j,wt=t,kt=n,xt=r,vt=i,yt=l,T(s),pt=o,St=a}}function zt(e,t){let r=t.reactions;if(null!==r){var i=n.call(r,e);if(-1!==i){var l=r.length-1;0===l?r=t.reactions=null:(r[i]=r[l],r.pop())}}null===r&&2&t.f&&(null===wt||!wt.includes(t))&&(It(t,b),0!==(t.f&g)&&(t.f^=g,t.f&=-32769),ge(t),Nt(t,0))}function Nt(e,t){var n=e.deps;if(null!==n)for(var r=t;r<n.length;r++)zt(e,n[r])}function $t(e){var t=e.f;if(0===(t&k)){It(e,m);var n=gt,r=ct;gt=e,ct=!0;try{16777232&t?function(e){for(var t=e.first;null!==t;){var n=t.next;0===(t.f&v)&&nt(t),t=n}}(e):tt(e),et(e);var i=Lt(e);e.teardown="function"==typeof i?i:null,e.wv=Et}finally{ct=r,gt=n}}}function Mt(e){var t=!!(2&e.f);if(null!==vt&&!pt&&(!(null!==gt&&0!==(gt.f&k))&&!yt?.includes(e))){var n=vt.deps;if(0!==(vt.f&j))e.rv<Pt&&(e.rv=Pt,null===wt&&null!==n&&n[kt]===e?kt++:null===wt?wt=[e]:wt.includes(e)||wt.push(e));else{(vt.deps??=[]).push(e);var r=e.reactions;null===r?e.reactions=[vt]:r.includes(vt)||r.push(vt)}}if(dt){if(we.has(e))return we.get(e);if(t){var i=e,l=i.v;return(0===(i.f&m)&&null!==i.reactions||Rt(i))&&(l=me(i)),we.set(i,l),l}}else t&&(!Q?.has(e)||G?.is_fork&&!Fe())&&(jt(i=e)&&ye(i),ct&&Fe()&&0===(i.f&g)&&Dt(i));if(Q?.has(e))return Q.get(e);if(0!==(e.f&O))throw e.v;return e.v}function Dt(e){if(null!==e.deps){e.f^=g;for(const t of e.deps)(t.reactions??=[]).push(e),2&t.f&&0===(t.f&g)&&Dt(t)}}function Rt(e){if(e.v===M)return!0;if(null===e.deps)return!1;for(const t of e.deps){if(we.has(t))return!0;if(2&t.f&&Rt(t))return!0}return!1}function Ct(e){var t=pt;try{return pt=!0,e()}finally{pt=t}}const Tt=-7169;function It(e,t){e.f=e.f&Tt|t}const Ut=["touchstart","touchmove"];function Zt(e){return Ut.includes(e)}const Bt=new Set,Vt=new Set;function Wt(e){for(var t=0;t<e.length;t++)Bt.add(e[t]);for(var n of Vt)n(e)}let Ft=null;function Kt(e){var t=this,n=t.ownerDocument,r=e.type,l=e.composedPath?.()||[],s=l[0]||e.target;Ft=e;var o=0,a=Ft===e&&e.__root;if(a){var f=l.indexOf(a);if(-1!==f&&(t===document||t===window))return void(e.__root=t);var c=l.indexOf(t);if(-1===c)return;f<=c&&(o=f)}if((s=l[o]||e.target)!==t){i(e,"currentTarget",{configurable:!0,get:()=>s||n});var u=vt,d=gt;_t(null),mt(null);try{for(var h,v=[];null!==s;){var p=s.assignedSlot||s.parentNode||s.host||null;try{var _=s["__"+r];null==_||s.disabled&&e.target!==s||_.call(s,e)}catch(g){h?v.push(g):h=g}if(e.cancelBubble||p===t||null===p)break;s=p}if(h){for(let e of v)queueMicrotask(()=>{throw e});throw h}}finally{e.__root=t,delete e.currentTarget,_t(u),mt(d)}}}function Ht(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("<!>","\x3c!----\x3e"),t.content}function Gt(e,t){var n=gt;null===n.nodes&&(n.nodes={start:e,end:t,a:null,t:null})}function Jt(e,t){var n,r=!!(1&t),i=!!(2&t),l=!e.startsWith("<!>");return()=>{void 0===n&&(n=Ht(l?e:"<!>"+e),r||(n=De(n)));var t=i||ze?document.importNode(n,!0):n.cloneNode(!0);r?Gt(De(t),t.lastChild):Gt(t,t);return t}}function Qt(e=""){var t=Me(e+"");return Gt(t,t),t}function Xt(){var e=document.createDocumentFragment(),t=document.createComment(""),n=Me();return e.append(t,n),Gt(t,n),e}function Yt(e,t){null!==e&&e.before(t)}function en(e,t){var n=null==t?"":"object"==typeof t?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}const tn=new Map;let nn=new WeakMap;class rn{anchor;#N=new Map;#$=new Map;#M=new Map;#D=new Set;#R=!0;constructor(e,t=!0){this.anchor=e,this.#R=t}#u=()=>{var e=G;if(this.#N.has(e)){var t=this.#N.get(e),n=this.#$.get(t);if(n)ot(n),this.#D.delete(t);else{var r=this.#M.get(t);r&&(this.#$.set(t,r.effect),this.#M.delete(t),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),n=r.effect)}for(const[t,n]of this.#N){if(this.#N.delete(t),t===e)break;const r=this.#M.get(n);r&&(nt(r.effect),this.#M.delete(n))}for(const[e,r]of this.#$){if(e===t||this.#D.has(e))continue;const i=()=>{if(Array.from(this.#N.values()).includes(e)){var t=document.createDocumentFragment();ft(r,t),t.append(Me()),this.#M.set(e,{effect:r,fragment:t})}else nt(r);this.#D.delete(e),this.#$.delete(e)};this.#R||!n?(this.#D.add(e),lt(r,i,!1)):i()}}};#C=e=>{this.#N.delete(e);const t=Array.from(this.#N.values());for(const[n,r]of this.#M)t.includes(n)||(nt(r.effect),this.#M.delete(n))};ensure(e,t){var n=G;!t||this.#$.has(e)||this.#M.has(e)||this.#$.set(e,Ye(()=>t(this.anchor)));this.#N.set(n,e),this.#u()}}function ln(e,t,n,r,i){var l=M,s=xe(l),o=xe(l),a=new rn(e);Xe(()=>{var e=t(),l=!1;if(function(e){return"function"==typeof e?.then}(e)){var f=he(),c=!1;const t=e=>{if(!l){c=!0,f(!1),ne.ensure();try{e()}finally{ve(),te||re()}}};e.then(e=>{t(()=>{Se(s,e),a.ensure(1,r&&(e=>r(e,s)))})},e=>{t(()=>{if(Se(o,e),a.ensure(1,i&&(e=>i(e,o))),!i)throw o.v})}),V(()=>{c||t(()=>{a.ensure(0,n)})})}else Se(s,e),a.ensure(1,r&&(e=>r(e,s)));return()=>{l=!0}})}function sn(e,t,n=!1){var r=new rn(e);function i(e,t){r.ensure(e,t)}Xe(()=>{var e=!1;t((t,n=!0)=>{e=!0,i(n,t)}),e||i(!1,null)},n?E:0)}function on(e,t,...n){var r=new rn(e);Xe(()=>{const e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},E)}function an(e,t,n){var r=new rn(e);Xe(()=>{var e=t()??null;r.ensure(e,e&&(t=>n(t,e)))},E)}const fn=[..." \t\n\r\fย \v\ufeff"];function cn(e,t,n,r,i,l){var s=e.__className;if(s!==n||void 0===s){var o=function(e,t,n){var r=""+e;if(n)for(var i in n)if(n[i])r=r?r+" "+i:i;else if(r.length)for(var l=i.length,s=0;(s=r.indexOf(i,s))>=0;){var o=s+l;0!==s&&!fn.includes(r[s-1])||o!==r.length&&!fn.includes(r[o])?s=o:r=(0===s?"":r.substring(0,s))+r.substring(o+1)}return""===r?null:r}(n,0,l);null==o?e.removeAttribute("class"):e.className=o,e.__className=n}else if(l&&i!==l)for(var a in l){var f=!!l[a];null!=i&&f===!!i[a]||e.classList.toggle(a,f)}return l}const un=Symbol("is custom element"),dn=Symbol("is html");function hn(e,t,n,r){var i=function(e){return e.__attributes??={[un]:e.nodeName.includes("-"),[dn]:e.namespaceURI===D}}(e);i[t]!==(i[t]=n)&&("loading"===t&&(e[N]=n),null==n?e.removeAttribute(t):"string"!=typeof n&&_n(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function vn(e,t,n){var r=vt,i=gt;_t(null),mt(null);try{"style"!==t&&(pn.has(e.getAttribute("is")||e.nodeName)||!customElements||customElements.get(e.getAttribute("is")||e.tagName.toLowerCase())?_n(e).includes(t):n&&"object"==typeof n)?e[t]=n:hn(e,t,null==n?n:String(n))}finally{_t(r),mt(i)}}var pn=new Map;function _n(e){var t,n=e.getAttribute("is")||e.nodeName,r=pn.get(n);if(r)return r;pn.set(n,r=[]);for(var i=e,l=Element.prototype;l!==i;){for(var o in t=s(i))t[o].set&&r.push(o);i=f(i)}return r}function gn(e,t,n=t){var r=new WeakSet;Be(e,"input",async i=>{var l=i?e.defaultValue:e.value;if(l=bn(e)?wn(l):l,n(l),null!==G&&r.add(G),await async function(){await Promise.resolve(),re()}(),l!==(l=t())){var s=e.selectionStart,o=e.selectionEnd,a=e.value.length;if(e.value=l??"",null!==o){var f=e.value.length;s===o&&o===a&&f>a?(e.selectionStart=f,e.selectionEnd=f):(e.selectionStart=s,e.selectionEnd=Math.min(o,f))}}}),null==Ct(t)&&e.value&&(n(bn(e)?wn(e.value):e.value),null!==G&&r.add(G)),Je(()=>{var n=t();if(e===document.activeElement){var i=J??G;if(r.has(i))return}bn(e)&&n===wn(e.value)||("date"!==e.type||n||e.value)&&n!==e.value&&(e.value=n??"")})}const mn=new Set;function yn(e,t,n,r,i=r){var l="checkbox"===n.getAttribute("type"),s=e;if(null!==t)for(var o of t)s=s[o]??=[];s.push(n),Be(n,"change",()=>{var e=n.__value;l&&(e=function(e,t,n){for(var r=new Set,i=0;i<e.length;i+=1)e[i].checked&&r.add(e[i].__value);n||r.delete(t);return Array.from(r)}(s,e,n.checked)),i(e)},()=>i(l?[]:null)),Je(()=>{var e,t,i=r();l?(i=i||[],n.checked=i.includes(n.__value)):n.checked=(e=n.__value,t=i,Object.is(Oe(e),Oe(t)))}),Ke(()=>{var e=s.indexOf(n);-1!==e&&s.splice(e,1)}),mn.has(s)||(mn.add(s),V(()=>{s.sort((e,t)=>4===e.compareDocumentPosition(t)?-1:1),mn.delete(s)})),V(()=>{})}function bn(e){var t=e.type;return"number"===t||"range"===t}function wn(e){return""===e?null:+e}let kn=!1;function xn(e,t,n,r){var i,s,o=r,a=!0,f=L in e||z in e;i=l(e,t)?.set??(f&&t in e?n=>e[t]=n:void 0);var c,u=!1;if([s,u]=function(e){var t=kn;try{return kn=!1,[e(),kn]}finally{kn=t}}(()=>e[t]),c=()=>{var n=e[t];return void 0===n?(a&&(a=!1,o=r),o):(a=!0,n)},i){var d=e.$$legacy;return function(e,t){return arguments.length>0?((!t||d||u)&&i(t?c():e),e):c()}}var h=!1,v=pe(()=>(h=!1,c()));Mt(v);var p=gt;return function(e,t){if(arguments.length>0){const n=t?Mt(v):je(e);return Pe(v,n),h=!0,void 0!==o&&(o=n),e}return dt&&h||0!==(p.f&k)?v.v:Mt(v)}}const En={},Pn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){const e=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),s=l?.nonce||l?.getAttribute("nonce");i=t.map(t=>{if(t=function(e,t){return new URL(e,t).href}(t,n),t in En)return;En[t]=!0;const r=t.endsWith(".css"),i=r?'[rel="stylesheet"]':"";if(n)for(let n=e.length-1;n>=0;n--){const i=e[n];if(i.href===t&&(!r||"stylesheet"===i.rel))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;const l=document.createElement("link");return l.rel=r?"stylesheet":"modulepreload",r||(l.as="script"),l.crossOrigin="",l.href=t,s&&l.setAttribute("nonce",s),document.head.appendChild(l),r?new Promise((e,n)=>{l.addEventListener("load",e),l.addEventListener("error",()=>n(new Error(`Unable to preload CSS for ${t}`)))}):void 0}),r=Promise.all(i.map(e=>Promise.resolve(e).then(e=>({status:"fulfilled",value:e}),e=>({status:"rejected",reason:e}))))}var i;function l(e){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(const e of t||[])"rejected"===e.status&&l(e.reason);return e().catch(l)})};"undefined"!=typeof window&&((window.__svelte??={}).v??=new Set).add("5");const Sn=/^[234567abcdefghij][234567abcdefghijklmnopqrstuvwxyz]{12}$/,An=/^did:([a-z]+):([a-zA-Z0-9._:%-]*[a-zA-Z0-9._-])$/,qn=/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/,jn=e=>(e=>e.length>=7&&e.length<=2048&&An.test(e))(e)||(e=>e.length>=3&&e.length<=253&&qn.test(e))(e),On=e=>{const t=Ln(e);if(!t)return null;let n;if("bsky.app"===t.host||"staging.bsky.app"===t.host||"main.bsky.dev"===t.host){if(n=/^\/profile\/([^/]+)\/post\/([^/]+)\/?$/.exec(t.pathname))return jn(n[1])&&(e=>13===e.length&&Sn.test(e))(n[2])?{type:"post",author:n[1],rkey:n[2]}:null;if(n=/^\/profile\/([^/]+)\/?$/.exec(t.pathname))return jn(n[1])?{type:"profile",actor:n[1]}:null}return null},Ln=e=>{let t;if("parse"in URL)t=URL.parse(e);else try{t=new URL(e)}catch{}return!t||"https:"!==t.protocol&&"http:"!==t.protocol?null:t};var zn=Jt("<div><!></div>");function Nn(e,t){var n=zn();let r;on(Ce(n),()=>t.children),Qe(()=>r=cn(n,0,"banner svelte-4gizvm",0,r,{"type-alert":"alert"===t.type,"type-inform":"inform"===t.type})),Yt(e,n)}var $n=function(e,t,n="svg"){var r,i=`<${n}>${e.startsWith("<!>")?"<!>"+e:e}</${n}>`;return()=>{if(!r){var e=De(Ht(i));r=De(e)}var t=r.cloneNode(!0);return Gt(t,t),t}}('<svg viewBox="0 0 32 32" class="circular-spinner svelte-rq8vha"><circle cx="16" cy="16" fill="none" r="14" stroke-width="4" class="background svelte-rq8vha"></circle><circle cx="16" cy="16" fill="none" r="14" stroke-width="4" stroke-dasharray="80px" stroke-dashoffset="60px" class="accented svelte-rq8vha"></circle></svg>',0,"svg");function Mn(e,t){Yt(e,$n())}var Dn=Jt('<div class="field svelte-1wzaqos"><label class="input-wrapper svelte-1wzaqos"><span class="label svelte-1wzaqos"> </span> <!></label></div>');const Rn=new WeakMap;function Cn(e,t){I(t,!0);const n=_e(()=>(e=>{let t=Rn.get(e);return void 0===t&&Rn.set(e,t=e().then(e=>e.default)),t})(t.loader));var r=Xt();ln(Te(r),()=>Mt(n),e=>{var n=Xt();on(Te(n),()=>t.fallback),Yt(e,n)},(e,n)=>{var r=Xt();on(Te(r),()=>t.children,()=>Mt(n)),Yt(e,r)},(e,n)=>{var r=Xt();on(Te(r),()=>t.boundary,()=>Mt(n)),Yt(e,r)}),Yt(e,r),U()}var Tn=Jt('<input class="text-input svelte-1e5va0l"/>');const In=e=>{Mn(e)},Un=(e,t=u)=>{Nn(e,{type:"alert",children:(e,n)=>{var r=Qt();Qe(()=>en(r,""+t())),Yt(e,r)}})},Zn=()=>Pn(()=>import("./PostDisplay-CqTUAVla.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),Bn=()=>Pn(()=>import("./ProfileCardDisplay-BpCMWdM3.js"),__vite__mapDeps([5,1,2,6]),import.meta.url),Vn=()=>Pn(()=>import("./ProfileFeedDisplay-QaaAcc9o.js"),__vite__mapDeps([7,1,2,3,8]),import.meta.url);var Wn=Jt('<fieldset class="choices svelte-1n46o8q"><label class="choice svelte-1n46o8q"><input type="radio" name="profile-type" class="svelte-1n46o8q"/> <span>Profile feed</span></label> <label class="choice svelte-1n46o8q"><input type="radio" name="profile-type" class="svelte-1n46o8q"/> <span>Profile card</span></label></fieldset>'),Fn=Jt('<div class="app svelte-1n46o8q"><h1 class="header svelte-1n46o8q"><code>&lt;bluesky-embed&gt;</code></h1> <!> <!> <main class="main svelte-1n46o8q"><!></main> <footer class="footer svelte-1n46o8q"><span>made with โค๏ธ by <a href="https://bsky.app/profile/did:plc:ia76kvnndjutgedggx2ibrem" class="svelte-1n46o8q">@mary.my.id</a></span> <span aria-hidden="true">ยท</span> <span><a href="https://github.com/mary-ext/bluesky-embed" class="svelte-1n46o8q">source code</a></span> <span aria-hidden="true">ยท</span> <span>MIT License</span></footer></div>');!function(e,t){(function(e,{target:t,anchor:n,props:i={},events:s,context:o,intro:a=!0}){!function(){if(void 0===Le){Le=window,ze=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Ne=l(t,"firstChild").get,$e=l(t,"nextSibling").get,c(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),c(n)&&(n.__t=void 0)}}();var f=new Set,u=e=>{for(var n=0;n<e.length;n++){var r=e[n];if(!f.has(r)){f.add(r);var i=Zt(r);t.addEventListener(r,Kt,{passive:i});var l=tn.get(r);void 0===l?(document.addEventListener(r,Kt,{passive:i}),tn.set(r,1)):tn.set(r,l+1)}}};u(r(Bt)),Vt.add(u);var d=void 0,h=function(e){ne.ensure();const t=We(524352,e,!0);return(e={})=>new Promise(n=>{e.outro?lt(t,()=>{nt(t),n(void 0)}):(nt(t),n(void 0))})}(()=>{var r=n??t.appendChild(Me());return function(e,t,n){new ue(e,t,n)}(r,{pending:()=>{}},t=>{o&&(I({}),C.c=o);s&&(i.$$events=s),d=e(t,i)||{},o&&U()}),()=>{for(var e of f){t.removeEventListener(e,Kt);var i=tn.get(e);0===--i?(document.removeEventListener(e,Kt),tn.delete(e)):tn.set(e,i)}Vt.delete(u),r!==n&&r.parentNode?.removeChild(r)}});nn.set(d,h)})(e,t)}(function(e,t){I(t,!0);const n=[],r="https://bsky.app/profile/did:plc:ragtjsm2j2vknwkz3zp4oxrd/post/3kj2umze7zj2n";let i=Ee(""),l=Ee("feed");const s=_e(()=>On(Mt(i)||r));var o=Fn(),a=Ie(Ce(o),2);!function(e,t){var n=Dn(),r=Ce(n),i=Ce(r),l=Ce(i);on(Ie(i,2),()=>t.children),Qe(()=>en(l,t.label)),Yt(e,n)}(a,{label:"Bluesky post or profile URL",children:(e,t)=>{!function(e,t){I(t,!0);let n=xn(t,"value");var r=Tn();Qe(()=>{hn(r,"type",t.type),hn(r,"placeholder",t.placeholder)}),gn(r,n),Yt(e,r),U()}(e,{type:"url",placeholder:r,get value(){return Mt(i)},set value(e){Pe(i,e,!0)}})}});var f=Ie(a,2),c=e=>{var t=Wn(),r=Ce(t),i=Ce(r);i.value=i.__value="feed";var s=Ce(Ie(r,2));s.value=s.__value="card",yn(n,[],i,()=>Mt(l),e=>Pe(l,e)),yn(n,[],s,()=>Mt(l),e=>Pe(l,e)),Yt(e,t)};sn(f,e=>{Mt(s)&&"profile"===Mt(s).type&&e(c)});var d=Ce(Ie(f,2)),h=e=>{Nn(e,{type:"alert",children:(e,t)=>{Yt(e,Qt("Invalid URL, did you type it correctly?"))}})},v=e=>{var t=Xt(),n=Te(t),r=e=>{{const t=(e,t=u)=>{var n=Xt();an(Te(n),t,(e,t)=>{t(e,{get matched(){return Mt(s)}})}),Yt(e,n)};Cn(e,{loader:Zn,get fallback(){return In},get boundary(){return Un},children:t,$$slots:{default:!0}})}},i=e=>{var t=Xt(),n=Te(t),r=e=>{{const t=(e,t=u)=>{var n=Xt();an(Te(n),t,(e,t)=>{t(e,{get matched(){return Mt(s)}})}),Yt(e,n)};let n=_e(()=>"card"===Mt(l)?Bn:Vn);Cn(e,{get loader(){return Mt(n)},get fallback(){return In},get boundary(){return Un},children:t,$$slots:{default:!0}})}};sn(n,e=>{"profile"===Mt(s).type&&e(r)},!0),Yt(e,t)};sn(n,e=>{"post"===Mt(s).type?e(r):e(i,!1)},!0),Yt(e,t)};sn(d,e=>{Mt(s)?e(v,!1):e(h)}),Yt(e,o),U()},{target:document.getElementById("app")});export{Nn as B,Mn as C,Yt as a,U as b,Ce as c,Xt as d,Te as e,Jt as f,ln as g,Qt as h,en as i,Mt as j,Ie as k,sn as l,gt as m,Ht as n,Gt as o,I as p,De as q,rt as r,vn as s,Qe as t,_e as u,C as v,He as w,Ct as x,Wt as y,on as z};
+1
assets/index-Cr8Vao8y.js
··· 1 + const t=(t,e)=>({text:t,features:t.length>0?e:void 0}),e=(e,o)=>{if(void 0===o||0===o.length)return[t(e,void 0)];const r=[],c=e.length;let h=0,d=0;const n=(t,o)=>{let r=t;if(e.charCodeAt(r)<128)for(r+=1,d+=1;d+8<=o&&r+8<=c;){if(!((e.charCodeAt(r)|e.charCodeAt(r+1)|e.charCodeAt(r+2)|e.charCodeAt(r+3)|e.charCodeAt(r+4)|e.charCodeAt(r+5)|e.charCodeAt(r+6)|e.charCodeAt(r+7))<128))break;r+=8,d+=8}for(;d<o&&r<c;){const t=e.charCodeAt(r);t<128?(r+=1,d+=1):t<2048?(r+=1,d+=2):t<55296||t>56319?(r+=1,d+=3):(r+=2,d+=4)}return r};for(let s=0,a=o.length;s<a;s++){const c=o[s],{byteStart:a,byteEnd:i}=c.index,l=c.features;if(!(a>i||0===l.length)){if(d<a){const o=n(h,a);o>h&&r.push(t(e.slice(h,o),void 0)),h=o}{const o=n(h,i);o>h&&r.push(t(e.slice(h,o),l)),h=o}}}return h<c&&r.push(t(e.slice(h),void 0)),r};export{e as s};
+5 -25
index.html
··· 1 1 <!doctype html> 2 2 <html lang="en"> 3 3 <head> 4 - <meta charset="utf-8" /> 4 + <meta charset="UTF-8" /> 5 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 - <title>Bluesky post embeds</title> 7 - <script type="module" src="./src/index.ts"></script> 6 + <title>Bluesky embed</title> 7 + <script type="module" crossorigin src="./assets/index-CD_0uzJz.js"></script> 8 + <link rel="stylesheet" crossorigin href="./assets/index-B_9yoyg2.css"> 8 9 </head> 9 10 <body> 10 - <h1>&lt;bluesky-post&gt;</h1> 11 - <p>A custom element for embedding Bluesky posts.</p> 12 - <p>See <a href="https://github.com/mary-ext/bluesky-post-embed">GitHub repository</a> for details.</p> 13 - 14 - <bluesky-post src="https://bsky.app/profile/pfrazee.com/post/3kj2umze7zj2n" theme="light"> 15 - <blockquote class="bluesky-post-fallback"> 16 - <p dir="auto">angel mode</p> 17 - &mdash; Paul Frazee ๐Ÿฆ‹ (@pfrazee.com) 18 - <a href="https://bsky.app/profile/pfrazee.com/post/3kj2umze7zj2n">January 16, 2024</a> 19 - </blockquote> 20 - </bluesky-post> 21 - 22 - <pre> 23 - &#60;bluesky-post src="https://bsky.app/profile/pfrazee.com/post/3kj2umze7zj2n" theme="light"> 24 - &#60;blockquote class="bluesky-post-fallback"> 25 - &#60;p dir="auto">angel mode&#60;/p> 26 - &#38;mdash; Paul Frazee ๐Ÿฆ‹ (@pfrazee.com) 27 - &#60;a href="https://bsky.app/profile/pfrazee.com/post/3kj2umze7zj2n">January 16, 2024&#60;/a> 28 - &#60;/blockquote> 29 - &#60;/bluesky-post> 30 - &#60;script type="module" src="https://esm.sh/bluesky-post-embed@~0.1.0">&#60;/script></pre 31 - > 11 + <div id="app"></div> 32 12 </body> 33 13 </html>
-686
lib/core.tsx
··· 1 - import type { TrustedHTML } from '@intrnl/jsx-to-string'; 2 - 3 - import { BskyXRPC } from '@externdefs/bluesky-client'; 4 - import type { 5 - AppBskyEmbedExternal, 6 - AppBskyEmbedImages, 7 - AppBskyEmbedRecord, 8 - AppBskyFeedDefs, 9 - AppBskyFeedGetPostThread, 10 - AppBskyFeedPost, 11 - AppBskyGraphDefs, 12 - } from '@externdefs/bluesky-client/lexicons'; 13 - 14 - import './style.css'; 15 - 16 - import { segment_richtext } from './utils/richtext/segmentize.ts'; 17 - import type { Facet } from './utils/richtext/types.ts'; 18 - 19 - import { abs_long, abs_short, format_date } from './utils/date.ts'; 20 - import { format_compact } from './utils/number.ts'; 21 - 22 - type ThreadResponse = AppBskyFeedGetPostThread.Output; 23 - type PostData = AppBskyFeedDefs.PostView; 24 - type PostRecord = AppBskyFeedPost.Record; 25 - 26 - /// Fetch post 27 - const parse_src = (src: string): [actor: string, rkey: string] => { 28 - const { protocol, host, pathname } = new URL(src); 29 - 30 - if (protocol === 'https:' || protocol === 'http:') { 31 - if (host === 'bsky.app' || host === 'staging.bsky.app') { 32 - const match = /\/profile\/([^/]+)\/post\/([^/]+)\/?$/.exec(pathname); 33 - 34 - if (match) { 35 - return [match[1], match[2]]; 36 - } 37 - } 38 - } 39 - 40 - throw new RangeError(`Invalid src: ${src}`); 41 - }; 42 - 43 - export const get = async ( 44 - src: string, 45 - contextless: boolean, 46 - service: string = 'https://public.api.bsky.app', 47 - ): Promise<ThreadResponse> => { 48 - const rpc = new BskyXRPC({ service }); 49 - 50 - const [actor, rkey] = parse_src(src); 51 - 52 - let did: string; 53 - if (actor.startsWith('did:')) { 54 - did = actor; 55 - } else { 56 - const response = await rpc.get('com.atproto.identity.resolveHandle', { 57 - params: { 58 - handle: actor, 59 - }, 60 - }); 61 - 62 - did = response.data.did; 63 - } 64 - 65 - const response = await rpc.get('app.bsky.feed.getPostThread', { 66 - params: { 67 - uri: `at://${did}/app.bsky.feed.post/${rkey}`, 68 - parentHeight: !contextless ? 2 : 1, 69 - depth: 0, 70 - }, 71 - }); 72 - 73 - const data = response.data; 74 - 75 - return data; 76 - }; 77 - 78 - /// Renderer 79 - const get_record_key = (uri: string) => { 80 - const idx = uri.lastIndexOf('/'); 81 - return uri.slice(idx + 1); 82 - }; 83 - 84 - const get_collection_ns = (uri: string) => { 85 - const first = uri.indexOf('/', 5); 86 - const second = uri.indexOf('/', first + 1); 87 - 88 - return uri.slice(first + 1, second); 89 - }; 90 - 91 - const get_profile_url = (author: string) => { 92 - return `https://bsky.app/profile/${author}`; 93 - }; 94 - 95 - const get_post_url = (author: string, rkey: string) => { 96 - return `https://bsky.app/profile/${author}/post/${rkey}`; 97 - }; 98 - 99 - export const render = (resp: ThreadResponse, contextless: boolean): TrustedHTML => { 100 - const posts = unwrap_thread(resp, contextless); 101 - const len = posts.length; 102 - 103 - if (len === 0) { 104 - return ( 105 - <div class="root"> 106 - <p class="not-available">This post is unavailable</p> 107 - </div> 108 - ); 109 - } 110 - 111 - const reply_to_icon = ( 112 - <svg viewBox="0 0 24 24" class="icon"> 113 - <path fill="currentColor" d="M10 9V5l-7 7l7 7v-4.1c5 0 8.5 1.6 11 5.1c-1-5-4-10-11-11" /> 114 - </svg> 115 - ); 116 - 117 - return ( 118 - <div class="root"> 119 - <div class="timeline"> 120 - {posts.map(({ post, parent }, i) => { 121 - const main = i === len - 1; 122 - 123 - const record = post.record as PostRecord; 124 - const author = post.author; 125 - 126 - const author_url = get_profile_url(author.did); 127 - const post_url = get_post_url(author.did, get_record_key(post.uri)); 128 - 129 - if (main) { 130 - return ( 131 - <div class="main-post"> 132 - <div class="main-post__header"> 133 - <a href={author_url} target="_blank" class="main-post__avatar-wrapper"> 134 - {author.avatar ? ( 135 - <img loading="lazy" src={author.avatar} class="main-post__avatar" /> 136 - ) : null} 137 - </a> 138 - 139 - <a href={author_url} target="_blank" class="main-post__name-wrapper"> 140 - <bdi class="main-post__display-name-wrapper"> 141 - <span class="main-post__display-name">{author.displayName}</span> 142 - </bdi> 143 - <span class="main-post__handle">@{author.handle}</span> 144 - </a> 145 - </div> 146 - 147 - {i === 0 && record.reply ? ( 148 - <p class="main-post__context"> 149 - {reply_to_icon} 150 - {parent ? ( 151 - <span> 152 - Reply to{' '} 153 - <a 154 - href={`https://bsky.app/profile/${parent.author.handle}`} 155 - target="_blank" 156 - class="main-post__context-link" 157 - > 158 - {parent.author.displayName || '@' + parent.author.handle} 159 - </a> 160 - </span> 161 - ) : ( 162 - <span>Reply to an unknown post</span> 163 - )} 164 - </p> 165 - ) : null} 166 - 167 - <div class="main-post__body"> 168 - <RichTextRenderer text={record.text} facets={record.facets} /> 169 - </div> 170 - 171 - {post.embed ? <Embeds embed={post.embed} large={true} /> : null} 172 - 173 - {record.tags ? ( 174 - <div class="main-post__tags"> 175 - {record.tags.map((tag) => ( 176 - <div class="main-post__tag"> 177 - <span>#</span> 178 - <span class="main-post__tag-text">{tag}</span> 179 - </div> 180 - ))} 181 - </div> 182 - ) : null} 183 - 184 - <time datetime={record.createdAt} class="main-post__date"> 185 - {format_date(abs_long, record.createdAt)} 186 - </time> 187 - 188 - <div class="main-post__stats"> 189 - <span class="main-post__stat" title={`${post.likeCount || 0} likes`}> 190 - <svg viewBox="0 0 24 24" class="icon"> 191 - <path 192 - fill="currentColor" 193 - d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3C4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5C22 5.42 19.58 3 16.5 3m-4.4 15.55l-.1.1l-.1-.1C7.14 14.24 4 11.39 4 8.5C4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5c0 2.89-3.14 5.74-7.9 10.05" 194 - ></path> 195 - </svg> 196 - <span>{format_compact(post.likeCount || 0)}</span> 197 - </span> 198 - 199 - <span class="main-post__stat" title={`${post.repostCount || 0} reposts`}> 200 - <svg viewBox="0 0 24 24" class="icon"> 201 - <path 202 - fill="currentColor" 203 - d="M7 7h10v3l4-4l-4-4v3H5v6h2zm10 10H7v-3l-4 4l4 4v-3h12v-6h-2z" 204 - ></path> 205 - </svg> 206 - <span>{format_compact(post.repostCount || 0)}</span> 207 - </span> 208 - 209 - <div class="gap"></div> 210 - 211 - <a href={post_url} target="_blank" class="permalink"> 212 - <span>Read {format_compact(post.replyCount || 0)} replies on Bluesky</span> 213 - </a> 214 - </div> 215 - </div> 216 - ); 217 - } else { 218 - return ( 219 - <div class="reply-post"> 220 - <div class="reply-post__aside"> 221 - <a href={author_url} target="_blank" class="reply-post__avatar-wrapper"> 222 - {author.avatar ? ( 223 - <img loading="lazy" src={author.avatar} class="reply-post__avatar" /> 224 - ) : null} 225 - </a> 226 - 227 - <div class="reply-post__line"></div> 228 - </div> 229 - 230 - <div class="reply-post__main"> 231 - <div class="reply-post__header"> 232 - <a href={author_url} target="_blank" class="reply-post__name-wrapper"> 233 - <bdi class="reply-post__display-name-wrapper"> 234 - <span class="reply-post__display-name">{author.displayName}</span> 235 - </bdi> 236 - 237 - <span class="reply-post__handle">@{author.handle}</span> 238 - </a> 239 - 240 - <span aria-hidden="true" class="dot"> 241 - ยท 242 - </span> 243 - 244 - <a 245 - href={post_url} 246 - target="_blank" 247 - title={format_date(abs_long, record.createdAt)} 248 - class="reply-post__date" 249 - > 250 - <time datetime={record.createdAt}>{format_date(abs_short, record.createdAt)}</time> 251 - </a> 252 - </div> 253 - 254 - {i === 0 && record.reply ? ( 255 - <p class="reply-post__context"> 256 - {reply_to_icon} 257 - {parent ? ( 258 - <span> 259 - Reply to{' '} 260 - <a 261 - href={`https://bsky.app/profile/${parent.author.handle}`} 262 - target="_blank" 263 - class="reply-post__context-link" 264 - > 265 - {parent.author.displayName || '@' + parent.author.handle} 266 - </a> 267 - </span> 268 - ) : ( 269 - <span>Reply to an unknown post</span> 270 - )} 271 - </p> 272 - ) : null} 273 - 274 - <div class="reply-post__body"> 275 - <RichTextRenderer text={record.text} facets={record.facets} /> 276 - </div> 277 - 278 - {post.embed ? <Embeds embed={post.embed} large={false} /> : null} 279 - </div> 280 - </div> 281 - ); 282 - } 283 - })} 284 - </div> 285 - </div> 286 - ); 287 - }; 288 - 289 - const unwrap_thread = (resp: ThreadResponse, contextless: boolean) => { 290 - const items: { post: PostData; parent: PostData | undefined }[] = []; 291 - 292 - let i = 0; 293 - let il = contextless ? 1 : 2; 294 - 295 - let curr: typeof resp.thread | undefined = resp.thread; 296 - while (curr) { 297 - if (curr.$type === 'app.bsky.feed.defs#notFoundPost' || curr.$type === 'app.bsky.feed.defs#blockedPost') { 298 - break; 299 - } 300 - 301 - const post = curr.post; 302 - 303 - if (i !== 0) { 304 - items[i - 1].parent = post; 305 - } 306 - 307 - if (++i > il) { 308 - break; 309 - } 310 - 311 - const author = post.author; 312 - if (author.labels?.some((def) => def.val === '!no-unauthenticated')) { 313 - break; 314 - } 315 - 316 - items.push({ post: post, parent: undefined }); 317 - curr = curr.parent; 318 - } 319 - 320 - return items.reverse(); 321 - }; 322 - 323 - /// <RichTextRenderer /> 324 - const RichTextRenderer = ({ text, facets }: { text: string; facets?: Facet[] }) => { 325 - const segments = segment_richtext(text, facets); 326 - 327 - return ( 328 - <> 329 - {segments.map((segment) => { 330 - const text = segment.text; 331 - 332 - const link = segment.link; 333 - const mention = segment.mention; 334 - const tag = segment.tag; 335 - 336 - if (link) { 337 - return ( 338 - <a href={link.uri} target="_blank" class="link"> 339 - {text} 340 - </a> 341 - ); 342 - } else if (mention) { 343 - return ( 344 - <a href={`https://bsky.app/profile/${mention.did}`} target="_blank" class="mention"> 345 - {text} 346 - </a> 347 - ); 348 - } else if (tag) { 349 - return <span class="hashtag">{text}</span>; 350 - } 351 - 352 - return text; 353 - })} 354 - </> 355 - ); 356 - }; 357 - 358 - /// <Embeds /> 359 - type EmbeddedImage = AppBskyEmbedImages.ViewImage; 360 - type EmbeddedLink = AppBskyEmbedExternal.ViewExternal; 361 - type EmbeddedRecord = AppBskyEmbedRecord.View['record']; 362 - 363 - const Embeds = ({ embed, large }: { embed: NonNullable<PostData['embed']>; large: boolean }) => { 364 - let images: EmbeddedImage[] | undefined; 365 - let link: EmbeddedLink | undefined; 366 - let record: EmbeddedRecord | undefined; 367 - 368 - { 369 - const $type = embed.$type; 370 - 371 - if ($type === 'app.bsky.embed.images#view') { 372 - images = embed.images; 373 - } else if ($type === 'app.bsky.embed.external#view') { 374 - link = embed.external; 375 - } else if ($type === 'app.bsky.embed.record#view') { 376 - record = embed.record; 377 - } else if ($type === 'app.bsky.embed.recordWithMedia#view') { 378 - const rec = embed.record.record; 379 - 380 - const media = embed.media; 381 - const mediatype = media.$type; 382 - 383 - record = rec; 384 - 385 - if (mediatype === 'app.bsky.embed.images#view') { 386 - images = media.images; 387 - } else if (mediatype === 'app.bsky.embed.external#view') { 388 - link = media.external; 389 - } 390 - } 391 - } 392 - 393 - return ( 394 - <div class="embeds"> 395 - {link ? <EmbedLink link={link} /> : null} 396 - {images ? <EmbedImage images={images} is_bordered={true} allow_standalone_ratio={true} /> : null} 397 - {record ? render_record(record, large) : null} 398 - </div> 399 - ); 400 - }; 401 - 402 - const render_record = (record: EmbeddedRecord, large: boolean) => { 403 - const $type = record.$type; 404 - 405 - if ($type === 'app.bsky.embed.record#viewNotFound' || $type === 'app.bsky.embed.record#viewBlocked') { 406 - return <EmbedNotFound uri={record.uri} />; 407 - } 408 - 409 - if ($type === 'app.bsky.embed.record#viewRecord') { 410 - const author = record.author; 411 - if (author.labels?.some((def) => def.val === '!no-unauthenticated')) { 412 - return <EmbedNotFound uri={record.uri} />; 413 - } 414 - 415 - return <EmbedPost post={record} large={large} />; 416 - } 417 - 418 - if ($type === 'app.bsky.feed.defs#generatorView') { 419 - return <EmbedFeed feed={record} />; 420 - } 421 - 422 - if ($type === 'app.bsky.graph.defs#listView') { 423 - return <EmbedList list={record} />; 424 - } 425 - 426 - return null; 427 - }; 428 - 429 - /// <EmbedNotFound /> 430 - const EmbedNotFound = ({ uri }: { uri: string }) => { 431 - const ns = get_collection_ns(uri); 432 - const resource = 433 - ns === 'app.bsky.feed.post' 434 - ? 'post' 435 - : ns === 'app.bsky.feed.generator' 436 - ? 'feed' 437 - : ns === 'app.bsky.graph.list' 438 - ? 'list' 439 - : 'record'; 440 - 441 - return <p class="embed-not-found">This {resource} is unavailable</p>; 442 - }; 443 - 444 - /// <EmbedLink /> 445 - const EmbedLink = ({ link }: { link: EmbeddedLink }) => { 446 - return ( 447 - <a href={link.uri} target="_blank" rel="noopener noreferrer nofollow" class="embed-link interactive"> 448 - {link.thumb ? <img loading="lazy" src={link.thumb} class="embed-link__thumb" /> : null} 449 - 450 - <div class="embed-link__main"> 451 - <p class="embed-link__domain">{get_domain(link.uri)}</p> 452 - <p class="embed-link__title">{link.title}</p> 453 - 454 - <div class="embed-link__desktop-only"> 455 - <p class="embed-link__summary">{link.description}</p> 456 - </div> 457 - </div> 458 - </a> 459 - ); 460 - }; 461 - 462 - const get_domain = (url: string) => { 463 - try { 464 - const host = new URL(url).host; 465 - return host.startsWith('www.') ? host.slice(4) : host; 466 - } catch { 467 - return url; 468 - } 469 - }; 470 - 471 - /// <EmbedImage /> 472 - const enum RenderMode { 473 - MULTIPLE, 474 - STANDALONE, 475 - STANDALONE_RATIO, 476 - } 477 - 478 - const EmbedImage = ({ 479 - images, 480 - is_bordered, 481 - allow_standalone_ratio, 482 - }: { 483 - images: EmbeddedImage[]; 484 - is_bordered: boolean; 485 - allow_standalone_ratio: boolean; 486 - }) => { 487 - const length = images.length; 488 - const is_standalone_image = allow_standalone_ratio && length === 1 && 'aspectRatio' in images[0]; 489 - 490 - return ( 491 - <div 492 - class={ 493 - 'embed-image' + 494 - (is_bordered ? ' embed-image--bordered' : '') + 495 - (is_standalone_image ? ' embed-image--standalone' : '') 496 - } 497 - > 498 - {is_standalone_image ? ( 499 - render_img(images[0], RenderMode.STANDALONE_RATIO) 500 - ) : length === 1 ? ( 501 - render_img(images[0], RenderMode.STANDALONE) 502 - ) : length === 2 ? ( 503 - <div class="embed-image__grid"> 504 - <div class="embed-image__col">{render_img(images[0], RenderMode.MULTIPLE)}</div> 505 - <div class="embed-image__col">{render_img(images[1], RenderMode.MULTIPLE)}</div> 506 - </div> 507 - ) : length === 3 ? ( 508 - <div class="embed-image__grid"> 509 - <div class="embed-image__col"> 510 - {render_img(images[0], RenderMode.MULTIPLE)} 511 - {render_img(images[1], RenderMode.MULTIPLE)} 512 - </div> 513 - 514 - <div class="embed-image__col">{render_img(images[2], RenderMode.MULTIPLE)}</div> 515 - </div> 516 - ) : length === 4 ? ( 517 - <div class="embed-image__grid"> 518 - <div class="embed-image__col"> 519 - {render_img(images[0], RenderMode.MULTIPLE)} 520 - {render_img(images[2], RenderMode.MULTIPLE)} 521 - </div> 522 - 523 - <div class="embed-image__col"> 524 - {render_img(images[1], RenderMode.MULTIPLE)} 525 - {render_img(images[3], RenderMode.MULTIPLE)} 526 - </div> 527 - </div> 528 - ) : null} 529 - </div> 530 - ); 531 - }; 532 - 533 - const render_img = (img: EmbeddedImage, mode: RenderMode) => { 534 - // FIXME: with STANDALONE_RATIO, we are resizing the image to make it fit 535 - // the container with our given constraints, but this doesn't work when the 536 - // image hasn't had its metadata loaded yet, the browser will snap to the 537 - // smallest possible size for our layout. 538 - 539 - const alt = img.alt; 540 - const aspectRatio = img.aspectRatio; 541 - 542 - let cn: string | undefined; 543 - let ratio: string | undefined; 544 - 545 - if (mode === RenderMode.MULTIPLE) { 546 - cn = `embed-image__image-wrapper--multiple`; 547 - } else if (mode === RenderMode.STANDALONE) { 548 - cn = `embed-image__image-wrapper--standalone`; 549 - } else if (mode === RenderMode.STANDALONE_RATIO) { 550 - cn = `embed-image__image-wrapper--standalone-ratio`; 551 - ratio = `${aspectRatio!.width}/${aspectRatio!.height}`; 552 - } 553 - 554 - return ( 555 - <div class={'embed-image__image-wrapper ' + cn} style={{ 'aspect-ratio': ratio }}> 556 - <img loading="lazy" src={img.thumb} alt={alt} class="embed-image__image" /> 557 - {mode === RenderMode.STANDALONE_RATIO ? <div class="embed-image__placeholder"></div> : null} 558 - </div> 559 - ); 560 - }; 561 - 562 - /// <EmbedPost /> 563 - const EmbedPost = ({ post, large }: { post: AppBskyEmbedRecord.ViewRecord; large: boolean }) => { 564 - const author = post.author; 565 - 566 - const record = post.value as PostRecord; 567 - const text = record.text; 568 - const images = get_post_images(post); 569 - 570 - const show_large_images = images !== undefined && (large || !text); 571 - 572 - const post_url = get_post_url(author.did, get_record_key(post.uri)); 573 - 574 - return ( 575 - <a href={post_url} target="_blank" class="embed-post interactive"> 576 - <div class="embed-post__header"> 577 - <div class="embed-post__avatar-wrapper"> 578 - {author.avatar ? <img loading="lazy" src={author.avatar} class="embed-post__avatar" /> : null} 579 - </div> 580 - 581 - <span class="embed-post__name-wrapper"> 582 - {author.displayName ? ( 583 - <bdi class="embed-post__display-name-wrapper"> 584 - <span class="embed-post__display-name">{author.displayName}</span> 585 - </bdi> 586 - ) : null} 587 - 588 - <span class="embed-post__handle">@{author.handle}</span> 589 - </span> 590 - 591 - <span aria-hidden="true" class="dot"> 592 - ยท 593 - </span> 594 - 595 - <time datetime={record.createdAt} class="embed-post__date"> 596 - {format_date(abs_short, record.createdAt)} 597 - </time> 598 - </div> 599 - 600 - {text ? ( 601 - <div class="embed-post__body"> 602 - {images && !large ? ( 603 - <div class="embed-post__image-aside"> 604 - <EmbedImage images={images} is_bordered={true} allow_standalone_ratio={false} /> 605 - </div> 606 - ) : null} 607 - 608 - <div class="embed-post__text">{text}</div> 609 - </div> 610 - ) : null} 611 - 612 - {show_large_images ? ( 613 - <> 614 - {text ? <div class="embed-post__divider"></div> : null} 615 - <EmbedImage images={images} is_bordered={false} allow_standalone_ratio={false} /> 616 - </> 617 - ) : null} 618 - </a> 619 - ); 620 - }; 621 - 622 - const get_post_images = (post: AppBskyEmbedRecord.ViewRecord) => { 623 - const embeds = post.embeds; 624 - 625 - if (embeds && embeds.length > 0) { 626 - const val = embeds[0]; 627 - 628 - if (val.$type === 'app.bsky.embed.images#view') { 629 - return val.images; 630 - } else if (val.$type === 'app.bsky.embed.recordWithMedia#view') { 631 - const media = val.media; 632 - 633 - if (media.$type === 'app.bsky.embed.images#view') { 634 - return media.images; 635 - } 636 - } 637 - } 638 - }; 639 - 640 - /// <EmbedFeed /> 641 - const EmbedFeed = ({ feed }: { feed: AppBskyFeedDefs.GeneratorView }) => { 642 - const creator = feed.creator; 643 - 644 - const feed_url = `https://bsky.app/profile/${creator.handle}/feed/${get_record_key(feed.uri)}`; 645 - 646 - return ( 647 - <a href={feed_url} target="_blank" class="embed-feed interactive"> 648 - <div class="embed-feed__avatar-wrapper"> 649 - {feed.avatar ? <img loading="lazy" src={feed.avatar} class="embed-feed__avatar" /> : null} 650 - </div> 651 - 652 - <div class="embed-feed__main"> 653 - <p class="embed-feed__name">{feed.displayName}</p> 654 - <p class="embed-feed__type">{`Feed by @${creator.handle}`}</p> 655 - </div> 656 - </a> 657 - ); 658 - }; 659 - 660 - /// <EmbedList /> 661 - const EmbedList = ({ list }: { list: AppBskyGraphDefs.ListView }) => { 662 - const creator = list.creator; 663 - 664 - const raw_purpose = list.purpose; 665 - const purpose = 666 - raw_purpose === 'app.bsky.graph.defs#curatelist' 667 - ? `Curation list` 668 - : raw_purpose === 'app.bsky.graph.defs#modlist' 669 - ? `Moderation list` 670 - : `Unknown list`; 671 - 672 - const list_url = `https://bsky.app/profile/${creator.handle}/list/${get_record_key(list.uri)}`; 673 - 674 - return ( 675 - <a href={list_url} target="_blank" class="embed-list interactive"> 676 - <div class="embed-list__avatar-wrapper"> 677 - {list.avatar ? <img loading="lazy" src={list.avatar} class="embed-list__avatar" /> : null} 678 - </div> 679 - 680 - <div class="embed-list__main"> 681 - <p class="embed-list__name">{list.name}</p> 682 - <p class="embed-list__type">{`${purpose} by ${creator.handle}`}</p> 683 - </div> 684 - </a> 685 - ); 686 - };
-1
lib/env.d.ts
··· 1 - /// <reference types="vite/client" />
-35
lib/index.ts
··· 1 - import rawStyles from './style.css?inline'; 2 - import { get, render } from './core.tsx'; 3 - 4 - let _style: CSSStyleSheet; 5 - const get_style = () => { 6 - if (!_style) { 7 - _style = new CSSStyleSheet(); 8 - _style.replaceSync(rawStyles); 9 - } 10 - 11 - return _style; 12 - }; 13 - 14 - export class BlueskyPost extends HTMLElement { 15 - connectedCallback() { 16 - this.load().then( 17 - () => this.dispatchEvent(new CustomEvent('loaded')), 18 - (err) => this.dispatchEvent(new CustomEvent('error', { detail: err })), 19 - ); 20 - } 21 - 22 - async load() { 23 - const src = this.getAttribute('src')!; 24 - const service = this.getAttribute('service-uri') || undefined; 25 - const contextless = this.getAttribute('contextless') !== null; 26 - 27 - const data = await get(src, contextless, service); 28 - 29 - const root = this.attachShadow({ mode: 'open' }); 30 - root.adoptedStyleSheets = [get_style()]; 31 - root.innerHTML = render(data, contextless).value; 32 - } 33 - } 34 - 35 - customElements.define('bluesky-post', BlueskyPost);
-677
lib/style.css
··· 1 - :host { 2 - --font-size: 1rem; 3 - display: block; 4 - } 5 - 6 - :host([theme='light']) { 7 - --text-primary: #000000; 8 - --text-secondary: #455668; 9 - --text-link: #1083fe; 10 - --background-primary: #ffffff; 11 - --background-secondary: #455668; 12 - --divider-hover: #c0ccd6; 13 - --divider: #c2ccd6; 14 - } 15 - :host([theme='dark']) { 16 - --text-primary: #ffffff; 17 - --text-secondary: #9aaabc; 18 - --text-link: #1083fe; 19 - --background-primary: #161e27; 20 - --background-secondary: #212d3b; 21 - --divider-hover: #42566c; 22 - --divider: #324458; 23 - } 24 - 25 - *, 26 - *::before, 27 - *::after { 28 - box-sizing: border-box; 29 - } 30 - 31 - p { 32 - margin: 0; 33 - } 34 - 35 - .root { 36 - margin: 0 auto; 37 - border: 1px solid var(--divider); 38 - border-radius: 8px; 39 - background: var(--background-primary); 40 - min-width: 250px; 41 - max-width: 550px; 42 - overflow: hidden; 43 - color: var(--text-primary); 44 - font-size: calc(var(--font-size) * 0.875); 45 - line-height: calc(var(--font-size) * 1.25); 46 - } 47 - 48 - .link, 49 - .mention { 50 - color: var(--text-link); 51 - text-decoration: none; 52 - 53 - &:hover { 54 - text-decoration: underline; 55 - } 56 - } 57 - 58 - .dot { 59 - margin: 0 4px; 60 - user-select: none; 61 - } 62 - 63 - .icon { 64 - flex-shrink: 0; 65 - width: 1em; 66 - height: 1em; 67 - } 68 - 69 - .interactive { 70 - cursor: pointer; 71 - color: inherit; 72 - text-decoration: none; 73 - } 74 - 75 - .not-available { 76 - padding: 12px; 77 - color: var(--text-secondary); 78 - } 79 - 80 - /** main-post */ 81 - .main-post { 82 - padding: 16px; 83 - } 84 - 85 - .main-post__header { 86 - display: flex; 87 - align-items: center; 88 - margin: 0 0 12px 0; 89 - color: var(--text-secondary); 90 - } 91 - 92 - .main-post__avatar-wrapper { 93 - display: block; 94 - flex-shrink: 0; 95 - margin: 0 12px 0 0; 96 - border-radius: 9999px; 97 - background: var(--background-secondary); 98 - width: 40px; 99 - height: 40px; 100 - overflow: hidden; 101 - 102 - &:hover { 103 - filter: brightness(0.85); 104 - } 105 - } 106 - .main-post__avatar { 107 - width: 100%; 108 - height: 100%; 109 - object-fit: cover; 110 - } 111 - 112 - .main-post__name-wrapper { 113 - display: block; 114 - max-width: 100%; 115 - overflow: hidden; 116 - color: inherit; 117 - text-decoration: none; 118 - text-overflow: ellipsis; 119 - white-space: nowrap; 120 - } 121 - .main-post__display-name-wrapper { 122 - overflow: hidden; 123 - text-overflow: ellipsis; 124 - 125 - .main-post__name-wrapper:hover & { 126 - text-decoration: underline; 127 - } 128 - } 129 - .main-post__display-name { 130 - color: var(--text-primary); 131 - font-weight: 700; 132 - } 133 - .main-post__handle { 134 - display: block; 135 - overflow: hidden; 136 - text-overflow: ellipsis; 137 - white-space: nowrap; 138 - } 139 - 140 - .main-post__context { 141 - display: flex; 142 - align-items: center; 143 - gap: 6px; 144 - margin: 0 0 4px 0; 145 - color: var(--text-secondary); 146 - 147 - span { 148 - overflow: hidden; 149 - text-overflow: ellipsis; 150 - white-space: nowrap; 151 - } 152 - 153 - a { 154 - color: inherit; 155 - text-decoration: none; 156 - 157 - &:hover { 158 - text-decoration: underline; 159 - } 160 - } 161 - } 162 - .main-post__body { 163 - overflow: hidden; 164 - font-size: calc(var(--font-size) * 1); 165 - line-height: calc(var(--font-size) * 1.5); 166 - white-space: pre-wrap; 167 - overflow-wrap: break-word; 168 - 169 - &:empty { 170 - display: none; 171 - } 172 - } 173 - 174 - .main-post__tags { 175 - display: flex; 176 - flex-wrap: wrap; 177 - gap: 6px; 178 - margin: 12px 0 0 0; 179 - } 180 - 181 - .main-post__tag { 182 - display: flex; 183 - align-items: center; 184 - gap: 4px; 185 - border-radius: 9999px; 186 - background: var(--text-secondary); 187 - padding: 0 8px; 188 - min-width: 0px; 189 - line-height: calc(var(--font-size) * 1.5); 190 - } 191 - 192 - .main-post__tag-text { 193 - overflow: hidden; 194 - text-overflow: ellipsis; 195 - white-space: nowrap; 196 - } 197 - 198 - .main-post__date { 199 - display: flex; 200 - flex-wrap: wrap; 201 - align-items: center; 202 - gap: 8px; 203 - margin: 12px 0 0; 204 - border-bottom: 1px solid var(--divider); 205 - padding: 0 0 12px 0; 206 - color: var(--text-secondary); 207 - } 208 - .main-post__stats { 209 - display: flex; 210 - flex-wrap: wrap; 211 - align-items: center; 212 - gap: 8px 16px; 213 - margin: 0 0 -16px 0; 214 - padding: 12px 0; 215 - color: var(--text-secondary); 216 - 217 - .gap { 218 - flex: 1 1 auto; 219 - } 220 - 221 - .permalink { 222 - display: flex; 223 - align-items: center; 224 - gap: 4px; 225 - color: var(--text-link); 226 - font-weight: 700; 227 - text-decoration: none; 228 - 229 - &:hover { 230 - text-decoration: underline; 231 - } 232 - } 233 - } 234 - .main-post__stat { 235 - display: flex; 236 - align-items: center; 237 - gap: 8px; 238 - } 239 - 240 - /** reply-post */ 241 - .reply-post { 242 - display: flex; 243 - position: relative; 244 - gap: 12px; 245 - padding: 12px 16px 0 16px; 246 - } 247 - 248 - .reply-post__aside { 249 - flex-shrink: 0; 250 - } 251 - 252 - .reply-post__avatar-wrapper { 253 - display: block; 254 - border-radius: 9999px; 255 - background: var(--background-secondary); 256 - width: 40px; 257 - height: 40px; 258 - overflow: hidden; 259 - 260 - &:hover { 261 - filter: brightness(0.85); 262 - } 263 - } 264 - .reply-post__avatar { 265 - width: 100%; 266 - height: 100%; 267 - object-fit: cover; 268 - } 269 - .reply-post__line { 270 - position: absolute; 271 - top: 56px; 272 - bottom: -12px; 273 - left: 35px; 274 - border-left: 2px solid var(--divider); 275 - } 276 - 277 - .reply-post__main { 278 - display: flex; 279 - flex-grow: 1; 280 - flex-direction: column; 281 - min-width: 0px; 282 - } 283 - 284 - .reply-post__header { 285 - display: flex; 286 - align-items: center; 287 - margin: 0 0 2px 0; 288 - color: var(--text-secondary); 289 - } 290 - .reply-post__name-wrapper { 291 - display: flex; 292 - gap: 4px; 293 - max-width: 100%; 294 - overflow: hidden; 295 - color: inherit; 296 - text-decoration: none; 297 - text-overflow: ellipsis; 298 - white-space: nowrap; 299 - } 300 - .reply-post__display-name-wrapper { 301 - overflow: hidden; 302 - text-overflow: ellipsis; 303 - 304 - .reply-post__name-wrapper:hover & { 305 - text-decoration: underline; 306 - } 307 - } 308 - .reply-post__display-name { 309 - color: var(--text-primary); 310 - font-weight: 700; 311 - } 312 - .reply-post__handle { 313 - display: block; 314 - overflow: hidden; 315 - text-overflow: ellipsis; 316 - white-space: nowrap; 317 - } 318 - .reply-post__date { 319 - color: inherit; 320 - text-decoration: none; 321 - white-space: nowrap; 322 - 323 - &:hover { 324 - text-decoration: underline; 325 - } 326 - } 327 - 328 - .reply-post__context { 329 - display: flex; 330 - align-items: center; 331 - gap: 4px; 332 - margin: 0 0 4px 0; 333 - color: var(--text-secondary); 334 - 335 - span { 336 - overflow: hidden; 337 - text-overflow: ellipsis; 338 - white-space: nowrap; 339 - } 340 - 341 - a { 342 - color: inherit; 343 - text-decoration: none; 344 - 345 - &:hover { 346 - text-decoration: underline; 347 - } 348 - } 349 - } 350 - .reply-post__body { 351 - white-space: pre-wrap; 352 - overflow-wrap: break-word; 353 - } 354 - 355 - /** embeds */ 356 - .embeds { 357 - display: flex; 358 - flex-direction: column; 359 - gap: 12px; 360 - margin: 12px 0 0 0; 361 - } 362 - 363 - .embeds:empty { 364 - display: none; 365 - } 366 - 367 - /** embed-feed */ 368 - .embed-feed { 369 - display: flex; 370 - gap: 12px; 371 - border: 1px solid var(--divider); 372 - border-radius: 6px; 373 - padding: 12px; 374 - 375 - &:hover { 376 - border-color: var(--divider-hover); 377 - } 378 - } 379 - 380 - .embed-feed__avatar-wrapper { 381 - margin: 2px 0 0 0; 382 - border-radius: 6px; 383 - background: var(--background-secondary); 384 - width: 36px; 385 - height: 36px; 386 - overflow: hidden; 387 - } 388 - 389 - .embed-feed__avatar { 390 - width: 100%; 391 - height: 100%; 392 - object-fit: cover; 393 - } 394 - 395 - .embed-feed__main { 396 - } 397 - 398 - .embed-feed__name { 399 - font-weight: 700; 400 - } 401 - 402 - .embed-feed__type { 403 - color: var(--text-secondary); 404 - } 405 - 406 - /** embed-image */ 407 - .embed-image { 408 - } 409 - 410 - .embed-image--bordered { 411 - border: 1px solid var(--divider); 412 - border-radius: 6px; 413 - overflow: hidden; 414 - } 415 - 416 - .embed-image--standalone { 417 - align-self: baseline; 418 - max-width: 100%; 419 - } 420 - 421 - .embed-image__grid { 422 - display: flex; 423 - gap: 2px; 424 - aspect-ratio: 16 / 9; 425 - } 426 - 427 - .embed-image__col { 428 - display: flex; 429 - flex-grow: 1; 430 - flex-basis: 0px; 431 - flex-direction: column; 432 - gap: 2px; 433 - } 434 - 435 - .embed-image__image-wrapper { 436 - position: relative; 437 - } 438 - 439 - .embed-image__image-wrapper--multiple { 440 - flex-grow: 1; 441 - flex-basis: 0px; 442 - min-height: 0px; 443 - overflow: hidden; 444 - } 445 - 446 - .embed-image__image-wrapper--standalone { 447 - aspect-ratio: 16 / 9; 448 - overflow: hidden; 449 - } 450 - 451 - .embed-image__image-wrapper--standalone-ratio { 452 - min-width: 64px; 453 - max-width: 100%; 454 - min-height: 64px; 455 - max-height: 320px; 456 - overflow: hidden; 457 - } 458 - 459 - .embed-image__image { 460 - width: 100%; 461 - height: 100%; 462 - object-fit: cover; 463 - font-size: 0px; 464 - } 465 - 466 - .embed-image__placeholder { 467 - width: 100vw; 468 - height: 100vh; 469 - } 470 - 471 - /** embed-link */ 472 - .embed-link { 473 - display: flex; 474 - border: 1px solid var(--divider); 475 - border-radius: 6px; 476 - overflow: hidden; 477 - 478 - &:hover { 479 - border-color: var(--divider-hover); 480 - } 481 - } 482 - 483 - .embed-link__thumb { 484 - flex-shrink: 0; 485 - box-sizing: content-box; 486 - border-right-width: 1px; 487 - aspect-ratio: 1 / 1; 488 - width: 86px; 489 - object-fit: cover; 490 - } 491 - 492 - .embed-link__main { 493 - display: flex; 494 - flex-direction: column; 495 - justify-content: center; 496 - gap: 2px; 497 - padding: 12px; 498 - min-width: 0px; 499 - } 500 - 501 - .embed-link__domain { 502 - overflow: hidden; 503 - color: var(--text-secondary); 504 - text-overflow: ellipsis; 505 - } 506 - 507 - .embed-link__title { 508 - display: -webkit-box; 509 - overflow: hidden; 510 - overflow-wrap: break-word; 511 - -webkit-box-orient: vertical; 512 - -webkit-line-clamp: 2; 513 - } 514 - 515 - .embed-link__title:empty { 516 - display: none; 517 - } 518 - 519 - .embed-link__desktop-only { 520 - display: none; 521 - 522 - @media (min-width: 640px) { 523 - display: block; 524 - } 525 - } 526 - 527 - .embed-link__summary { 528 - display: -webkit-box; 529 - overflow: hidden; 530 - -webkit-box-orient: vertical; 531 - -webkit-line-clamp: 2; 532 - color: var(--text-secondary); 533 - } 534 - 535 - .embed-link__summary:empty { 536 - display: none; 537 - } 538 - 539 - /** embed-list */ 540 - .embed-list { 541 - display: flex; 542 - gap: 12px; 543 - border: 1px solid var(--divider); 544 - border-radius: 6px; 545 - padding: 12px; 546 - 547 - &:hover { 548 - border-color: var(--divider-hover); 549 - } 550 - } 551 - 552 - .embed-list__avatar-wrapper { 553 - margin: 2px 0 0 0; 554 - border-radius: 6px; 555 - background: var(--background-secondary); 556 - width: 36px; 557 - height: 36px; 558 - overflow: hidden; 559 - } 560 - 561 - .embed-list__avatar { 562 - width: 100%; 563 - height: 100%; 564 - object-fit: cover; 565 - } 566 - 567 - .embed-list__main { 568 - } 569 - 570 - .embed-list__name { 571 - font-weight: 700; 572 - } 573 - 574 - .embed-list__type { 575 - color: var(--text-secondary); 576 - } 577 - 578 - /** embed-not-found */ 579 - .embed-not-found { 580 - border: 1px solid var(--divider); 581 - border-radius: 6px; 582 - padding: 12px; 583 - color: var(--text-secondary); 584 - } 585 - 586 - /** embed-post */ 587 - .embed-post { 588 - border: 1px solid var(--divider); 589 - border-radius: 6px; 590 - overflow: hidden; 591 - 592 - &:hover { 593 - border-color: var(--divider-hover); 594 - } 595 - } 596 - 597 - .embed-post__header { 598 - display: flex; 599 - margin: 12px 12px 0 12px; 600 - color: var(--text-secondary); 601 - } 602 - .embed-post__header + .embed-image { 603 - margin: 12px 0 0 0; 604 - } 605 - 606 - .embed-post__avatar-wrapper { 607 - flex-shrink: 0; 608 - margin: 0 8px 0 0; 609 - border-radius: 9999px; 610 - background: var(--background-secondary); 611 - width: 20px; 612 - height: 20px; 613 - overflow: hidden; 614 - } 615 - .embed-post__avatar { 616 - width: 100%; 617 - height: 100%; 618 - } 619 - 620 - .embed-post__name-wrapper { 621 - display: flex; 622 - gap: 4px; 623 - max-width: 100%; 624 - overflow: hidden; 625 - text-overflow: ellipsis; 626 - white-space: nowrap; 627 - } 628 - .embed-post__display-name-wrapper { 629 - overflow: hidden; 630 - text-overflow: ellipsis; 631 - } 632 - .embed-post__display-name { 633 - color: var(--text-primary); 634 - font-weight: 700; 635 - } 636 - .embed-post__handle { 637 - display: block; 638 - overflow: hidden; 639 - text-overflow: ellipsis; 640 - white-space: nowrap; 641 - } 642 - 643 - .embed-post__date { 644 - white-space: nowrap; 645 - } 646 - 647 - .embed-post__body { 648 - display: flex; 649 - align-items: flex-start; 650 - } 651 - 652 - .embed-post__image-aside { 653 - flex-grow: 1; 654 - flex-basis: 0px; 655 - margin: 8px 0 12px 12px; 656 - } 657 - 658 - .embed-post__text { 659 - display: -webkit-box; 660 - margin: 4px 12px 12px 12px; 661 - overflow: hidden; 662 - -webkit-box-orient: vertical; 663 - -webkit-line-clamp: 6; 664 - flex-grow: 4; 665 - flex-basis: 0px; 666 - min-width: 0px; 667 - white-space: pre-wrap; 668 - overflow-wrap: break-word; 669 - } 670 - 671 - .embed-post__text:empty { 672 - display: none; 673 - } 674 - 675 - .embed-post__divider { 676 - margin: 12px 0 0 0; 677 - }
-12
lib/utils/date.ts
··· 1 - export const abs_long = new Intl.DateTimeFormat('en-US', { dateStyle: 'long', timeStyle: 'short' }); 2 - export const abs_short = new Intl.DateTimeFormat('en-US', { dateStyle: 'medium' }); 3 - 4 - export const format_date = (formatter: Intl.DateTimeFormat, date: string | number) => { 5 - const inst = new Date(date); 6 - 7 - if (isNaN(inst.getTime())) { 8 - return 'N/A'; 9 - } 10 - 11 - return formatter.format(inst); 12 - };
-14
lib/utils/number.ts
··· 1 - const long = new Intl.NumberFormat('en-US'); 2 - const compact = new Intl.NumberFormat('en-US', { notation: 'compact' }); 3 - 4 - export const format_compact = (value: number) => { 5 - if (value < 1_000) { 6 - return '' + value; 7 - } 8 - 9 - if (value < 100_000) { 10 - return long.format(value); 11 - } 12 - 13 - return compact.format(value); 14 - };
-82
lib/utils/richtext/segmentize.ts
··· 1 - import { create_utf_string, get_utf8_length, slice_utf8 } from './unicode.ts'; 2 - import type { Facet, LinkFeature, MentionFeature, TagFeature } from './types.ts'; 3 - 4 - export interface RichTextSegment { 5 - text: string; 6 - link?: LinkFeature; 7 - mention?: MentionFeature; 8 - tag?: TagFeature; 9 - } 10 - 11 - const create_segment = (text: string, facet?: Facet): RichTextSegment => { 12 - let link: LinkFeature | undefined; 13 - let mention: MentionFeature | undefined; 14 - let tag: TagFeature | undefined; 15 - 16 - if (facet) { 17 - const features = facet.features; 18 - 19 - for (let idx = 0, len = features.length; idx < len; idx++) { 20 - const feature = features[idx]; 21 - const type = feature.$type; 22 - 23 - if (type === 'app.bsky.richtext.facet#link') { 24 - link = feature; 25 - } else if (type === 'app.bsky.richtext.facet#mention') { 26 - mention = feature; 27 - } else if (type === 'app.bsky.richtext.facet#tag') { 28 - tag = feature; 29 - } 30 - } 31 - } 32 - 33 - return { text, link, mention, tag }; 34 - }; 35 - 36 - export const segment_richtext = (text: string, facets: Facet[] | undefined) => { 37 - if (!facets || facets.length < 1) { 38 - return [create_segment(text)]; 39 - } 40 - 41 - const ustr = create_utf_string(text); 42 - 43 - const segments: RichTextSegment[] = []; 44 - const length = get_utf8_length(ustr); 45 - 46 - const facets_length = facets.length; 47 - 48 - let text_cursor = 0; 49 - let facet_cursor = 0; 50 - 51 - do { 52 - const facet = facets[facet_cursor]; 53 - const { byteStart, byteEnd } = facet.index; 54 - 55 - if (text_cursor < byteStart) { 56 - segments.push(create_segment(slice_utf8(ustr, text_cursor, byteStart))); 57 - } else if (text_cursor > byteStart) { 58 - facet_cursor++; 59 - continue; 60 - } 61 - 62 - if (byteStart < byteEnd) { 63 - const subtext = slice_utf8(ustr, byteStart, byteEnd); 64 - 65 - if (!subtext.trim()) { 66 - // dont empty string entities 67 - segments.push(create_segment(subtext)); 68 - } else { 69 - segments.push(create_segment(subtext, facet)); 70 - } 71 - } 72 - 73 - text_cursor = byteEnd; 74 - facet_cursor++; 75 - } while (facet_cursor < facets_length); 76 - 77 - if (text_cursor < length) { 78 - segments.push(create_segment(slice_utf8(ustr, text_cursor, length))); 79 - } 80 - 81 - return segments; 82 - };
-6
lib/utils/richtext/types.ts
··· 1 - import type { AppBskyRichtextFacet } from '@externdefs/bluesky-client/lexicons'; 2 - 3 - export type Facet = AppBskyRichtextFacet.Main; 4 - export type LinkFeature = AppBskyRichtextFacet.Link; 5 - export type MentionFeature = AppBskyRichtextFacet.Mention; 6 - export type TagFeature = AppBskyRichtextFacet.Tag;
-22
lib/utils/richtext/unicode.ts
··· 1 - const encoder = new TextEncoder(); 2 - const decoder = new TextDecoder(); 3 - 4 - export interface UtfString { 5 - u16: string; 6 - u8: Uint8Array; 7 - } 8 - 9 - export const create_utf_string = (utf16: string): UtfString => { 10 - return { 11 - u16: utf16, 12 - u8: encoder.encode(utf16), 13 - }; 14 - }; 15 - 16 - export const get_utf8_length = (utf: UtfString) => { 17 - return utf.u8.byteLength; 18 - }; 19 - 20 - export const slice_utf8 = (utf: UtfString, start?: number, end?: number) => { 21 - return decoder.decode(utf.u8.slice(start, end)); 22 - };
-40
package.json
··· 1 - { 2 - "type": "module", 3 - "name": "bluesky-post-embed", 4 - "description": "Custom element for embedding Bluesky posts", 5 - "version": "0.1.6", 6 - "author": "externdefs", 7 - "license": "MIT", 8 - "repository": { 9 - "type": "git", 10 - "url": "git+https://codeberg.org/mary-ext/bluesky-post-embed.git" 11 - }, 12 - "files": [ 13 - "dist/" 14 - ], 15 - "scripts": { 16 - "dev": "vite", 17 - "build": "tsc && vite build", 18 - "fmt": "prettier --cache --write .", 19 - "prepublishOnly": "pnpm run build" 20 - }, 21 - "exports": { 22 - ".": "./dist/element.js", 23 - "./core": "./dist/core.js", 24 - "./style.css": "./dist/style.css" 25 - }, 26 - "dependencies": { 27 - "@externdefs/bluesky-client": "^0.5.8" 28 - }, 29 - "devDependencies": { 30 - "@babel/core": "^7.24.4", 31 - "@babel/plugin-syntax-typescript": "^7.24.1", 32 - "@intrnl/jsx-to-string": "^0.1.6", 33 - "@rollup/plugin-babel": "^6.0.4", 34 - "prettier": "^3.2.5", 35 - "prettier-plugin-css-order": "^2.1.2", 36 - "typescript": "~5.4.5", 37 - "vite": "^5.2.8", 38 - "vite-plugin-dts": "^3.8.1" 39 - } 40 - }
-1487
pnpm-lock.yaml
··· 1 - lockfileVersion: '6.0' 2 - 3 - settings: 4 - autoInstallPeers: false 5 - excludeLinksFromLockfile: false 6 - 7 - dependencies: 8 - '@externdefs/bluesky-client': 9 - specifier: ^0.5.8 10 - version: 0.5.8 11 - 12 - devDependencies: 13 - '@babel/core': 14 - specifier: ^7.24.4 15 - version: 7.24.4 16 - '@babel/plugin-syntax-typescript': 17 - specifier: ^7.24.1 18 - version: 7.24.1(@babel/core@7.24.4) 19 - '@intrnl/jsx-to-string': 20 - specifier: ^0.1.6 21 - version: 0.1.6(@babel/core@7.24.4) 22 - '@rollup/plugin-babel': 23 - specifier: ^6.0.4 24 - version: 6.0.4(@babel/core@7.24.4) 25 - prettier: 26 - specifier: ^3.2.5 27 - version: 3.2.5 28 - prettier-plugin-css-order: 29 - specifier: ^2.1.2 30 - version: 2.1.2(prettier@3.2.5) 31 - typescript: 32 - specifier: ~5.4.5 33 - version: 5.4.5 34 - vite: 35 - specifier: ^5.2.8 36 - version: 5.2.8 37 - vite-plugin-dts: 38 - specifier: ^3.8.1 39 - version: 3.8.1(typescript@5.4.5)(vite@5.2.8) 40 - 41 - packages: 42 - 43 - /@ampproject/remapping@2.3.0: 44 - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 45 - engines: {node: '>=6.0.0'} 46 - dependencies: 47 - '@jridgewell/gen-mapping': 0.3.5 48 - '@jridgewell/trace-mapping': 0.3.25 49 - dev: true 50 - 51 - /@babel/code-frame@7.24.2: 52 - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} 53 - engines: {node: '>=6.9.0'} 54 - dependencies: 55 - '@babel/highlight': 7.24.2 56 - picocolors: 1.0.0 57 - dev: true 58 - 59 - /@babel/compat-data@7.24.4: 60 - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} 61 - engines: {node: '>=6.9.0'} 62 - dev: true 63 - 64 - /@babel/core@7.24.4: 65 - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} 66 - engines: {node: '>=6.9.0'} 67 - dependencies: 68 - '@ampproject/remapping': 2.3.0 69 - '@babel/code-frame': 7.24.2 70 - '@babel/generator': 7.24.4 71 - '@babel/helper-compilation-targets': 7.23.6 72 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) 73 - '@babel/helpers': 7.24.4 74 - '@babel/parser': 7.24.4 75 - '@babel/template': 7.24.0 76 - '@babel/traverse': 7.24.1 77 - '@babel/types': 7.24.0 78 - convert-source-map: 2.0.0 79 - debug: 4.3.4 80 - gensync: 1.0.0-beta.2 81 - json5: 2.2.3 82 - semver: 6.3.1 83 - transitivePeerDependencies: 84 - - supports-color 85 - dev: true 86 - 87 - /@babel/generator@7.24.4: 88 - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} 89 - engines: {node: '>=6.9.0'} 90 - dependencies: 91 - '@babel/types': 7.24.0 92 - '@jridgewell/gen-mapping': 0.3.5 93 - '@jridgewell/trace-mapping': 0.3.25 94 - jsesc: 2.5.2 95 - dev: true 96 - 97 - /@babel/helper-compilation-targets@7.23.6: 98 - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 99 - engines: {node: '>=6.9.0'} 100 - dependencies: 101 - '@babel/compat-data': 7.24.4 102 - '@babel/helper-validator-option': 7.23.5 103 - browserslist: 4.23.0 104 - lru-cache: 5.1.1 105 - semver: 6.3.1 106 - dev: true 107 - 108 - /@babel/helper-environment-visitor@7.22.20: 109 - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 110 - engines: {node: '>=6.9.0'} 111 - dev: true 112 - 113 - /@babel/helper-function-name@7.23.0: 114 - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 115 - engines: {node: '>=6.9.0'} 116 - dependencies: 117 - '@babel/template': 7.24.0 118 - '@babel/types': 7.24.0 119 - dev: true 120 - 121 - /@babel/helper-hoist-variables@7.22.5: 122 - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 123 - engines: {node: '>=6.9.0'} 124 - dependencies: 125 - '@babel/types': 7.24.0 126 - dev: true 127 - 128 - /@babel/helper-module-imports@7.24.3: 129 - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} 130 - engines: {node: '>=6.9.0'} 131 - dependencies: 132 - '@babel/types': 7.24.0 133 - dev: true 134 - 135 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): 136 - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 137 - engines: {node: '>=6.9.0'} 138 - peerDependencies: 139 - '@babel/core': ^7.0.0 140 - dependencies: 141 - '@babel/core': 7.24.4 142 - '@babel/helper-environment-visitor': 7.22.20 143 - '@babel/helper-module-imports': 7.24.3 144 - '@babel/helper-simple-access': 7.22.5 145 - '@babel/helper-split-export-declaration': 7.22.6 146 - '@babel/helper-validator-identifier': 7.22.20 147 - dev: true 148 - 149 - /@babel/helper-plugin-utils@7.24.0: 150 - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} 151 - engines: {node: '>=6.9.0'} 152 - dev: true 153 - 154 - /@babel/helper-simple-access@7.22.5: 155 - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 156 - engines: {node: '>=6.9.0'} 157 - dependencies: 158 - '@babel/types': 7.24.0 159 - dev: true 160 - 161 - /@babel/helper-split-export-declaration@7.22.6: 162 - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 163 - engines: {node: '>=6.9.0'} 164 - dependencies: 165 - '@babel/types': 7.24.0 166 - dev: true 167 - 168 - /@babel/helper-string-parser@7.24.1: 169 - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} 170 - engines: {node: '>=6.9.0'} 171 - dev: true 172 - 173 - /@babel/helper-validator-identifier@7.22.20: 174 - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 175 - engines: {node: '>=6.9.0'} 176 - dev: true 177 - 178 - /@babel/helper-validator-option@7.23.5: 179 - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 180 - engines: {node: '>=6.9.0'} 181 - dev: true 182 - 183 - /@babel/helpers@7.24.4: 184 - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} 185 - engines: {node: '>=6.9.0'} 186 - dependencies: 187 - '@babel/template': 7.24.0 188 - '@babel/traverse': 7.24.1 189 - '@babel/types': 7.24.0 190 - transitivePeerDependencies: 191 - - supports-color 192 - dev: true 193 - 194 - /@babel/highlight@7.24.2: 195 - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} 196 - engines: {node: '>=6.9.0'} 197 - dependencies: 198 - '@babel/helper-validator-identifier': 7.22.20 199 - chalk: 2.4.2 200 - js-tokens: 4.0.0 201 - picocolors: 1.0.0 202 - dev: true 203 - 204 - /@babel/parser@7.24.4: 205 - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} 206 - engines: {node: '>=6.0.0'} 207 - hasBin: true 208 - dependencies: 209 - '@babel/types': 7.24.0 210 - dev: true 211 - 212 - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): 213 - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} 214 - engines: {node: '>=6.9.0'} 215 - peerDependencies: 216 - '@babel/core': ^7.0.0-0 217 - dependencies: 218 - '@babel/core': 7.24.4 219 - '@babel/helper-plugin-utils': 7.24.0 220 - dev: true 221 - 222 - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): 223 - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} 224 - engines: {node: '>=6.9.0'} 225 - peerDependencies: 226 - '@babel/core': ^7.0.0-0 227 - dependencies: 228 - '@babel/core': 7.24.4 229 - '@babel/helper-plugin-utils': 7.24.0 230 - dev: true 231 - 232 - /@babel/template@7.24.0: 233 - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} 234 - engines: {node: '>=6.9.0'} 235 - dependencies: 236 - '@babel/code-frame': 7.24.2 237 - '@babel/parser': 7.24.4 238 - '@babel/types': 7.24.0 239 - dev: true 240 - 241 - /@babel/traverse@7.24.1: 242 - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} 243 - engines: {node: '>=6.9.0'} 244 - dependencies: 245 - '@babel/code-frame': 7.24.2 246 - '@babel/generator': 7.24.4 247 - '@babel/helper-environment-visitor': 7.22.20 248 - '@babel/helper-function-name': 7.23.0 249 - '@babel/helper-hoist-variables': 7.22.5 250 - '@babel/helper-split-export-declaration': 7.22.6 251 - '@babel/parser': 7.24.4 252 - '@babel/types': 7.24.0 253 - debug: 4.3.4 254 - globals: 11.12.0 255 - transitivePeerDependencies: 256 - - supports-color 257 - dev: true 258 - 259 - /@babel/types@7.24.0: 260 - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} 261 - engines: {node: '>=6.9.0'} 262 - dependencies: 263 - '@babel/helper-string-parser': 7.24.1 264 - '@babel/helper-validator-identifier': 7.22.20 265 - to-fast-properties: 2.0.0 266 - dev: true 267 - 268 - /@esbuild/aix-ppc64@0.20.2: 269 - resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 270 - engines: {node: '>=12'} 271 - cpu: [ppc64] 272 - os: [aix] 273 - requiresBuild: true 274 - dev: true 275 - optional: true 276 - 277 - /@esbuild/android-arm64@0.20.2: 278 - resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 279 - engines: {node: '>=12'} 280 - cpu: [arm64] 281 - os: [android] 282 - requiresBuild: true 283 - dev: true 284 - optional: true 285 - 286 - /@esbuild/android-arm@0.20.2: 287 - resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 288 - engines: {node: '>=12'} 289 - cpu: [arm] 290 - os: [android] 291 - requiresBuild: true 292 - dev: true 293 - optional: true 294 - 295 - /@esbuild/android-x64@0.20.2: 296 - resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 297 - engines: {node: '>=12'} 298 - cpu: [x64] 299 - os: [android] 300 - requiresBuild: true 301 - dev: true 302 - optional: true 303 - 304 - /@esbuild/darwin-arm64@0.20.2: 305 - resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 306 - engines: {node: '>=12'} 307 - cpu: [arm64] 308 - os: [darwin] 309 - requiresBuild: true 310 - dev: true 311 - optional: true 312 - 313 - /@esbuild/darwin-x64@0.20.2: 314 - resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 315 - engines: {node: '>=12'} 316 - cpu: [x64] 317 - os: [darwin] 318 - requiresBuild: true 319 - dev: true 320 - optional: true 321 - 322 - /@esbuild/freebsd-arm64@0.20.2: 323 - resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 324 - engines: {node: '>=12'} 325 - cpu: [arm64] 326 - os: [freebsd] 327 - requiresBuild: true 328 - dev: true 329 - optional: true 330 - 331 - /@esbuild/freebsd-x64@0.20.2: 332 - resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 333 - engines: {node: '>=12'} 334 - cpu: [x64] 335 - os: [freebsd] 336 - requiresBuild: true 337 - dev: true 338 - optional: true 339 - 340 - /@esbuild/linux-arm64@0.20.2: 341 - resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 342 - engines: {node: '>=12'} 343 - cpu: [arm64] 344 - os: [linux] 345 - requiresBuild: true 346 - dev: true 347 - optional: true 348 - 349 - /@esbuild/linux-arm@0.20.2: 350 - resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 351 - engines: {node: '>=12'} 352 - cpu: [arm] 353 - os: [linux] 354 - requiresBuild: true 355 - dev: true 356 - optional: true 357 - 358 - /@esbuild/linux-ia32@0.20.2: 359 - resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 360 - engines: {node: '>=12'} 361 - cpu: [ia32] 362 - os: [linux] 363 - requiresBuild: true 364 - dev: true 365 - optional: true 366 - 367 - /@esbuild/linux-loong64@0.20.2: 368 - resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 369 - engines: {node: '>=12'} 370 - cpu: [loong64] 371 - os: [linux] 372 - requiresBuild: true 373 - dev: true 374 - optional: true 375 - 376 - /@esbuild/linux-mips64el@0.20.2: 377 - resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 378 - engines: {node: '>=12'} 379 - cpu: [mips64el] 380 - os: [linux] 381 - requiresBuild: true 382 - dev: true 383 - optional: true 384 - 385 - /@esbuild/linux-ppc64@0.20.2: 386 - resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 387 - engines: {node: '>=12'} 388 - cpu: [ppc64] 389 - os: [linux] 390 - requiresBuild: true 391 - dev: true 392 - optional: true 393 - 394 - /@esbuild/linux-riscv64@0.20.2: 395 - resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 396 - engines: {node: '>=12'} 397 - cpu: [riscv64] 398 - os: [linux] 399 - requiresBuild: true 400 - dev: true 401 - optional: true 402 - 403 - /@esbuild/linux-s390x@0.20.2: 404 - resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 405 - engines: {node: '>=12'} 406 - cpu: [s390x] 407 - os: [linux] 408 - requiresBuild: true 409 - dev: true 410 - optional: true 411 - 412 - /@esbuild/linux-x64@0.20.2: 413 - resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 414 - engines: {node: '>=12'} 415 - cpu: [x64] 416 - os: [linux] 417 - requiresBuild: true 418 - dev: true 419 - optional: true 420 - 421 - /@esbuild/netbsd-x64@0.20.2: 422 - resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 423 - engines: {node: '>=12'} 424 - cpu: [x64] 425 - os: [netbsd] 426 - requiresBuild: true 427 - dev: true 428 - optional: true 429 - 430 - /@esbuild/openbsd-x64@0.20.2: 431 - resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 432 - engines: {node: '>=12'} 433 - cpu: [x64] 434 - os: [openbsd] 435 - requiresBuild: true 436 - dev: true 437 - optional: true 438 - 439 - /@esbuild/sunos-x64@0.20.2: 440 - resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 441 - engines: {node: '>=12'} 442 - cpu: [x64] 443 - os: [sunos] 444 - requiresBuild: true 445 - dev: true 446 - optional: true 447 - 448 - /@esbuild/win32-arm64@0.20.2: 449 - resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 450 - engines: {node: '>=12'} 451 - cpu: [arm64] 452 - os: [win32] 453 - requiresBuild: true 454 - dev: true 455 - optional: true 456 - 457 - /@esbuild/win32-ia32@0.20.2: 458 - resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 459 - engines: {node: '>=12'} 460 - cpu: [ia32] 461 - os: [win32] 462 - requiresBuild: true 463 - dev: true 464 - optional: true 465 - 466 - /@esbuild/win32-x64@0.20.2: 467 - resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 468 - engines: {node: '>=12'} 469 - cpu: [x64] 470 - os: [win32] 471 - requiresBuild: true 472 - dev: true 473 - optional: true 474 - 475 - /@externdefs/bluesky-client@0.5.8: 476 - resolution: {integrity: sha512-RM7huV2fZlPscfv8TTsM7wDQZ7yw4doJvch5TSIkj4NCHXg+iTADmzv7FCuWNvrMwsAbqiWe+Uz2AsPuTWiMDA==} 477 - dev: false 478 - 479 - /@intrnl/jsx-to-string@0.1.6(@babel/core@7.24.4): 480 - resolution: {integrity: sha512-ib6FWU0GcJdzsBv8zvFj43IDNRakWoC8JlpRDYBsOgIl3aXCR2PKazE6CnRJxmSvSHF9FQ5tgaLGFGSBGTjy1Q==} 481 - dependencies: 482 - '@babel/helper-plugin-utils': 7.24.0 483 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) 484 - '@babel/types': 7.24.0 485 - csstype: 3.1.3 486 - transitivePeerDependencies: 487 - - '@babel/core' 488 - dev: true 489 - 490 - /@jridgewell/gen-mapping@0.3.5: 491 - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 492 - engines: {node: '>=6.0.0'} 493 - dependencies: 494 - '@jridgewell/set-array': 1.2.1 495 - '@jridgewell/sourcemap-codec': 1.4.15 496 - '@jridgewell/trace-mapping': 0.3.25 497 - dev: true 498 - 499 - /@jridgewell/resolve-uri@3.1.2: 500 - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 501 - engines: {node: '>=6.0.0'} 502 - dev: true 503 - 504 - /@jridgewell/set-array@1.2.1: 505 - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 506 - engines: {node: '>=6.0.0'} 507 - dev: true 508 - 509 - /@jridgewell/sourcemap-codec@1.4.15: 510 - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 511 - dev: true 512 - 513 - /@jridgewell/trace-mapping@0.3.25: 514 - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 515 - dependencies: 516 - '@jridgewell/resolve-uri': 3.1.2 517 - '@jridgewell/sourcemap-codec': 1.4.15 518 - dev: true 519 - 520 - /@microsoft/api-extractor-model@7.28.13: 521 - resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==} 522 - dependencies: 523 - '@microsoft/tsdoc': 0.14.2 524 - '@microsoft/tsdoc-config': 0.16.2 525 - '@rushstack/node-core-library': 4.0.2 526 - transitivePeerDependencies: 527 - - '@types/node' 528 - dev: true 529 - 530 - /@microsoft/api-extractor@7.43.0: 531 - resolution: {integrity: sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==} 532 - hasBin: true 533 - dependencies: 534 - '@microsoft/api-extractor-model': 7.28.13 535 - '@microsoft/tsdoc': 0.14.2 536 - '@microsoft/tsdoc-config': 0.16.2 537 - '@rushstack/node-core-library': 4.0.2 538 - '@rushstack/rig-package': 0.5.2 539 - '@rushstack/terminal': 0.10.0 540 - '@rushstack/ts-command-line': 4.19.1 541 - lodash: 4.17.21 542 - minimatch: 3.0.8 543 - resolve: 1.22.8 544 - semver: 7.5.4 545 - source-map: 0.6.1 546 - typescript: 5.4.2 547 - transitivePeerDependencies: 548 - - '@types/node' 549 - dev: true 550 - 551 - /@microsoft/tsdoc-config@0.16.2: 552 - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} 553 - dependencies: 554 - '@microsoft/tsdoc': 0.14.2 555 - ajv: 6.12.6 556 - jju: 1.4.0 557 - resolve: 1.19.0 558 - dev: true 559 - 560 - /@microsoft/tsdoc@0.14.2: 561 - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} 562 - dev: true 563 - 564 - /@rollup/plugin-babel@6.0.4(@babel/core@7.24.4): 565 - resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} 566 - engines: {node: '>=14.0.0'} 567 - peerDependencies: 568 - '@babel/core': ^7.0.0 569 - '@types/babel__core': ^7.1.9 570 - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 571 - peerDependenciesMeta: 572 - '@types/babel__core': 573 - optional: true 574 - rollup: 575 - optional: true 576 - dependencies: 577 - '@babel/core': 7.24.4 578 - '@babel/helper-module-imports': 7.24.3 579 - '@rollup/pluginutils': 5.1.0 580 - dev: true 581 - 582 - /@rollup/pluginutils@5.1.0: 583 - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} 584 - engines: {node: '>=14.0.0'} 585 - peerDependencies: 586 - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 587 - peerDependenciesMeta: 588 - rollup: 589 - optional: true 590 - dependencies: 591 - '@types/estree': 1.0.5 592 - estree-walker: 2.0.2 593 - picomatch: 2.3.1 594 - dev: true 595 - 596 - /@rollup/rollup-android-arm-eabi@4.14.2: 597 - resolution: {integrity: sha512-ahxSgCkAEk+P/AVO0vYr7DxOD3CwAQrT0Go9BJyGQ9Ef0QxVOfjDZMiF4Y2s3mLyPrjonchIMH/tbWHucJMykQ==} 598 - cpu: [arm] 599 - os: [android] 600 - requiresBuild: true 601 - dev: true 602 - optional: true 603 - 604 - /@rollup/rollup-android-arm64@4.14.2: 605 - resolution: {integrity: sha512-lAarIdxZWbFSHFSDao9+I/F5jDaKyCqAPMq5HqnfpBw8dKDiCaaqM0lq5h1pQTLeIqueeay4PieGR5jGZMWprw==} 606 - cpu: [arm64] 607 - os: [android] 608 - requiresBuild: true 609 - dev: true 610 - optional: true 611 - 612 - /@rollup/rollup-darwin-arm64@4.14.2: 613 - resolution: {integrity: sha512-SWsr8zEUk82KSqquIMgZEg2GE5mCSfr9sE/thDROkX6pb3QQWPp8Vw8zOq2GyxZ2t0XoSIUlvHDkrf5Gmf7x3Q==} 614 - cpu: [arm64] 615 - os: [darwin] 616 - requiresBuild: true 617 - dev: true 618 - optional: true 619 - 620 - /@rollup/rollup-darwin-x64@4.14.2: 621 - resolution: {integrity: sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==} 622 - cpu: [x64] 623 - os: [darwin] 624 - requiresBuild: true 625 - dev: true 626 - optional: true 627 - 628 - /@rollup/rollup-linux-arm-gnueabihf@4.14.2: 629 - resolution: {integrity: sha512-nwlJ65UY9eGq91cBi6VyDfArUJSKOYt5dJQBq8xyLhvS23qO+4Nr/RreibFHjP6t+5ap2ohZrUJcHv5zk5ju/g==} 630 - cpu: [arm] 631 - os: [linux] 632 - requiresBuild: true 633 - dev: true 634 - optional: true 635 - 636 - /@rollup/rollup-linux-arm64-gnu@4.14.2: 637 - resolution: {integrity: sha512-Pg5TxxO2IVlMj79+c/9G0LREC9SY3HM+pfAwX7zj5/cAuwrbfj2Wv9JbMHIdPCfQpYsI4g9mE+2Bw/3aeSs2rQ==} 638 - cpu: [arm64] 639 - os: [linux] 640 - requiresBuild: true 641 - dev: true 642 - optional: true 643 - 644 - /@rollup/rollup-linux-arm64-musl@4.14.2: 645 - resolution: {integrity: sha512-cAOTjGNm84gc6tS02D1EXtG7tDRsVSDTBVXOLbj31DkwfZwgTPYZ6aafSU7rD/4R2a34JOwlF9fQayuTSkoclA==} 646 - cpu: [arm64] 647 - os: [linux] 648 - requiresBuild: true 649 - dev: true 650 - optional: true 651 - 652 - /@rollup/rollup-linux-powerpc64le-gnu@4.14.2: 653 - resolution: {integrity: sha512-4RyT6v1kXb7C0fn6zV33rvaX05P0zHoNzaXI/5oFHklfKm602j+N4mn2YvoezQViRLPnxP8M1NaY4s/5kXO5cw==} 654 - cpu: [ppc64] 655 - os: [linux] 656 - requiresBuild: true 657 - dev: true 658 - optional: true 659 - 660 - /@rollup/rollup-linux-riscv64-gnu@4.14.2: 661 - resolution: {integrity: sha512-KNUH6jC/vRGAKSorySTyc/yRYlCwN/5pnMjXylfBniwtJx5O7X17KG/0efj8XM3TZU7raYRXJFFReOzNmL1n1w==} 662 - cpu: [riscv64] 663 - os: [linux] 664 - requiresBuild: true 665 - dev: true 666 - optional: true 667 - 668 - /@rollup/rollup-linux-s390x-gnu@4.14.2: 669 - resolution: {integrity: sha512-xPV4y73IBEXToNPa3h5lbgXOi/v0NcvKxU0xejiFw6DtIYQqOTMhZ2DN18/HrrP0PmiL3rGtRG9gz1QE8vFKXQ==} 670 - cpu: [s390x] 671 - os: [linux] 672 - requiresBuild: true 673 - dev: true 674 - optional: true 675 - 676 - /@rollup/rollup-linux-x64-gnu@4.14.2: 677 - resolution: {integrity: sha512-QBhtr07iFGmF9egrPOWyO5wciwgtzKkYPNLVCFZTmr4TWmY0oY2Dm/bmhHjKRwZoGiaKdNcKhFtUMBKvlchH+Q==} 678 - cpu: [x64] 679 - os: [linux] 680 - requiresBuild: true 681 - dev: true 682 - optional: true 683 - 684 - /@rollup/rollup-linux-x64-musl@4.14.2: 685 - resolution: {integrity: sha512-8zfsQRQGH23O6qazZSFY5jP5gt4cFvRuKTpuBsC1ZnSWxV8ZKQpPqOZIUtdfMOugCcBvFGRa1pDC/tkf19EgBw==} 686 - cpu: [x64] 687 - os: [linux] 688 - requiresBuild: true 689 - dev: true 690 - optional: true 691 - 692 - /@rollup/rollup-win32-arm64-msvc@4.14.2: 693 - resolution: {integrity: sha512-H4s8UjgkPnlChl6JF5empNvFHp77Jx+Wfy2EtmYPe9G22XV+PMuCinZVHurNe8ggtwoaohxARJZbaH/3xjB/FA==} 694 - cpu: [arm64] 695 - os: [win32] 696 - requiresBuild: true 697 - dev: true 698 - optional: true 699 - 700 - /@rollup/rollup-win32-ia32-msvc@4.14.2: 701 - resolution: {integrity: sha512-djqpAjm/i8erWYF0K6UY4kRO3X5+T4TypIqw60Q8MTqSBaQNpNXDhxdjpZ3ikgb+wn99svA7jxcXpiyg9MUsdw==} 702 - cpu: [ia32] 703 - os: [win32] 704 - requiresBuild: true 705 - dev: true 706 - optional: true 707 - 708 - /@rollup/rollup-win32-x64-msvc@4.14.2: 709 - resolution: {integrity: sha512-teAqzLT0yTYZa8ZP7zhFKEx4cotS8Tkk5XiqNMJhD4CpaWB1BHARE4Qy+RzwnXvSAYv+Q3jAqCVBS+PS+Yee8Q==} 710 - cpu: [x64] 711 - os: [win32] 712 - requiresBuild: true 713 - dev: true 714 - optional: true 715 - 716 - /@rushstack/node-core-library@4.0.2: 717 - resolution: {integrity: sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==} 718 - peerDependencies: 719 - '@types/node': '*' 720 - peerDependenciesMeta: 721 - '@types/node': 722 - optional: true 723 - dependencies: 724 - fs-extra: 7.0.1 725 - import-lazy: 4.0.0 726 - jju: 1.4.0 727 - resolve: 1.22.8 728 - semver: 7.5.4 729 - z-schema: 5.0.5 730 - dev: true 731 - 732 - /@rushstack/rig-package@0.5.2: 733 - resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} 734 - dependencies: 735 - resolve: 1.22.8 736 - strip-json-comments: 3.1.1 737 - dev: true 738 - 739 - /@rushstack/terminal@0.10.0: 740 - resolution: {integrity: sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==} 741 - peerDependencies: 742 - '@types/node': '*' 743 - peerDependenciesMeta: 744 - '@types/node': 745 - optional: true 746 - dependencies: 747 - '@rushstack/node-core-library': 4.0.2 748 - supports-color: 8.1.1 749 - dev: true 750 - 751 - /@rushstack/ts-command-line@4.19.1: 752 - resolution: {integrity: sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==} 753 - dependencies: 754 - '@rushstack/terminal': 0.10.0 755 - '@types/argparse': 1.0.38 756 - argparse: 1.0.10 757 - string-argv: 0.3.2 758 - transitivePeerDependencies: 759 - - '@types/node' 760 - dev: true 761 - 762 - /@types/argparse@1.0.38: 763 - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} 764 - dev: true 765 - 766 - /@types/estree@1.0.5: 767 - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 768 - dev: true 769 - 770 - /@volar/language-core@1.11.1: 771 - resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} 772 - dependencies: 773 - '@volar/source-map': 1.11.1 774 - dev: true 775 - 776 - /@volar/source-map@1.11.1: 777 - resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} 778 - dependencies: 779 - muggle-string: 0.3.1 780 - dev: true 781 - 782 - /@volar/typescript@1.11.1: 783 - resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} 784 - dependencies: 785 - '@volar/language-core': 1.11.1 786 - path-browserify: 1.0.1 787 - dev: true 788 - 789 - /@vue/compiler-core@3.4.21: 790 - resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} 791 - dependencies: 792 - '@babel/parser': 7.24.4 793 - '@vue/shared': 3.4.21 794 - entities: 4.5.0 795 - estree-walker: 2.0.2 796 - source-map-js: 1.2.0 797 - dev: true 798 - 799 - /@vue/compiler-dom@3.4.21: 800 - resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} 801 - dependencies: 802 - '@vue/compiler-core': 3.4.21 803 - '@vue/shared': 3.4.21 804 - dev: true 805 - 806 - /@vue/language-core@1.8.27(typescript@5.4.5): 807 - resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} 808 - peerDependencies: 809 - typescript: '*' 810 - peerDependenciesMeta: 811 - typescript: 812 - optional: true 813 - dependencies: 814 - '@volar/language-core': 1.11.1 815 - '@volar/source-map': 1.11.1 816 - '@vue/compiler-dom': 3.4.21 817 - '@vue/shared': 3.4.21 818 - computeds: 0.0.1 819 - minimatch: 9.0.4 820 - muggle-string: 0.3.1 821 - path-browserify: 1.0.1 822 - typescript: 5.4.5 823 - vue-template-compiler: 2.7.16 824 - dev: true 825 - 826 - /@vue/shared@3.4.21: 827 - resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} 828 - dev: true 829 - 830 - /ajv@6.12.6: 831 - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 832 - dependencies: 833 - fast-deep-equal: 3.1.3 834 - fast-json-stable-stringify: 2.1.0 835 - json-schema-traverse: 0.4.1 836 - uri-js: 4.4.1 837 - dev: true 838 - 839 - /ansi-styles@3.2.1: 840 - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 841 - engines: {node: '>=4'} 842 - dependencies: 843 - color-convert: 1.9.3 844 - dev: true 845 - 846 - /argparse@1.0.10: 847 - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 848 - dependencies: 849 - sprintf-js: 1.0.3 850 - dev: true 851 - 852 - /balanced-match@1.0.2: 853 - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 854 - dev: true 855 - 856 - /brace-expansion@1.1.11: 857 - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 858 - dependencies: 859 - balanced-match: 1.0.2 860 - concat-map: 0.0.1 861 - dev: true 862 - 863 - /brace-expansion@2.0.1: 864 - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 865 - dependencies: 866 - balanced-match: 1.0.2 867 - dev: true 868 - 869 - /browserslist@4.23.0: 870 - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} 871 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 872 - hasBin: true 873 - dependencies: 874 - caniuse-lite: 1.0.30001609 875 - electron-to-chromium: 1.4.735 876 - node-releases: 2.0.14 877 - update-browserslist-db: 1.0.13(browserslist@4.23.0) 878 - dev: true 879 - 880 - /caniuse-lite@1.0.30001609: 881 - resolution: {integrity: sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==} 882 - dev: true 883 - 884 - /chalk@2.4.2: 885 - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 886 - engines: {node: '>=4'} 887 - dependencies: 888 - ansi-styles: 3.2.1 889 - escape-string-regexp: 1.0.5 890 - supports-color: 5.5.0 891 - dev: true 892 - 893 - /color-convert@1.9.3: 894 - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 895 - dependencies: 896 - color-name: 1.1.3 897 - dev: true 898 - 899 - /color-name@1.1.3: 900 - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 901 - dev: true 902 - 903 - /commander@9.5.0: 904 - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 905 - engines: {node: ^12.20.0 || >=14} 906 - requiresBuild: true 907 - dev: true 908 - optional: true 909 - 910 - /computeds@0.0.1: 911 - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} 912 - dev: true 913 - 914 - /concat-map@0.0.1: 915 - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 916 - dev: true 917 - 918 - /convert-source-map@2.0.0: 919 - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 920 - dev: true 921 - 922 - /css-declaration-sorter@7.2.0: 923 - resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} 924 - engines: {node: ^14 || ^16 || >=18} 925 - peerDependencies: 926 - postcss: ^8.0.9 927 - dev: true 928 - 929 - /csstype@3.1.3: 930 - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 931 - dev: true 932 - 933 - /de-indent@1.0.2: 934 - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 935 - dev: true 936 - 937 - /debug@4.3.4: 938 - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 939 - engines: {node: '>=6.0'} 940 - peerDependencies: 941 - supports-color: '*' 942 - peerDependenciesMeta: 943 - supports-color: 944 - optional: true 945 - dependencies: 946 - ms: 2.1.2 947 - dev: true 948 - 949 - /electron-to-chromium@1.4.735: 950 - resolution: {integrity: sha512-pkYpvwg8VyOTQAeBqZ7jsmpCjko1Qc6We1ZtZCjRyYbT5v4AIUKDy5cQTRotQlSSZmMr8jqpEt6JtOj5k7lR7A==} 951 - dev: true 952 - 953 - /entities@4.5.0: 954 - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 955 - engines: {node: '>=0.12'} 956 - dev: true 957 - 958 - /esbuild@0.20.2: 959 - resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 960 - engines: {node: '>=12'} 961 - hasBin: true 962 - requiresBuild: true 963 - optionalDependencies: 964 - '@esbuild/aix-ppc64': 0.20.2 965 - '@esbuild/android-arm': 0.20.2 966 - '@esbuild/android-arm64': 0.20.2 967 - '@esbuild/android-x64': 0.20.2 968 - '@esbuild/darwin-arm64': 0.20.2 969 - '@esbuild/darwin-x64': 0.20.2 970 - '@esbuild/freebsd-arm64': 0.20.2 971 - '@esbuild/freebsd-x64': 0.20.2 972 - '@esbuild/linux-arm': 0.20.2 973 - '@esbuild/linux-arm64': 0.20.2 974 - '@esbuild/linux-ia32': 0.20.2 975 - '@esbuild/linux-loong64': 0.20.2 976 - '@esbuild/linux-mips64el': 0.20.2 977 - '@esbuild/linux-ppc64': 0.20.2 978 - '@esbuild/linux-riscv64': 0.20.2 979 - '@esbuild/linux-s390x': 0.20.2 980 - '@esbuild/linux-x64': 0.20.2 981 - '@esbuild/netbsd-x64': 0.20.2 982 - '@esbuild/openbsd-x64': 0.20.2 983 - '@esbuild/sunos-x64': 0.20.2 984 - '@esbuild/win32-arm64': 0.20.2 985 - '@esbuild/win32-ia32': 0.20.2 986 - '@esbuild/win32-x64': 0.20.2 987 - dev: true 988 - 989 - /escalade@3.1.2: 990 - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 991 - engines: {node: '>=6'} 992 - dev: true 993 - 994 - /escape-string-regexp@1.0.5: 995 - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 996 - engines: {node: '>=0.8.0'} 997 - dev: true 998 - 999 - /estree-walker@2.0.2: 1000 - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1001 - dev: true 1002 - 1003 - /fast-deep-equal@3.1.3: 1004 - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1005 - dev: true 1006 - 1007 - /fast-json-stable-stringify@2.1.0: 1008 - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1009 - dev: true 1010 - 1011 - /fs-extra@7.0.1: 1012 - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 1013 - engines: {node: '>=6 <7 || >=8'} 1014 - dependencies: 1015 - graceful-fs: 4.2.11 1016 - jsonfile: 4.0.0 1017 - universalify: 0.1.2 1018 - dev: true 1019 - 1020 - /fsevents@2.3.3: 1021 - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1022 - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1023 - os: [darwin] 1024 - requiresBuild: true 1025 - dev: true 1026 - optional: true 1027 - 1028 - /function-bind@1.1.2: 1029 - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1030 - dev: true 1031 - 1032 - /gensync@1.0.0-beta.2: 1033 - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1034 - engines: {node: '>=6.9.0'} 1035 - dev: true 1036 - 1037 - /globals@11.12.0: 1038 - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1039 - engines: {node: '>=4'} 1040 - dev: true 1041 - 1042 - /graceful-fs@4.2.11: 1043 - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1044 - dev: true 1045 - 1046 - /has-flag@3.0.0: 1047 - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1048 - engines: {node: '>=4'} 1049 - dev: true 1050 - 1051 - /has-flag@4.0.0: 1052 - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1053 - engines: {node: '>=8'} 1054 - dev: true 1055 - 1056 - /hasown@2.0.2: 1057 - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1058 - engines: {node: '>= 0.4'} 1059 - dependencies: 1060 - function-bind: 1.1.2 1061 - dev: true 1062 - 1063 - /he@1.2.0: 1064 - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1065 - hasBin: true 1066 - dev: true 1067 - 1068 - /import-lazy@4.0.0: 1069 - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 1070 - engines: {node: '>=8'} 1071 - dev: true 1072 - 1073 - /is-core-module@2.13.1: 1074 - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1075 - dependencies: 1076 - hasown: 2.0.2 1077 - dev: true 1078 - 1079 - /jju@1.4.0: 1080 - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 1081 - dev: true 1082 - 1083 - /js-tokens@4.0.0: 1084 - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1085 - dev: true 1086 - 1087 - /jsesc@2.5.2: 1088 - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1089 - engines: {node: '>=4'} 1090 - hasBin: true 1091 - dev: true 1092 - 1093 - /json-schema-traverse@0.4.1: 1094 - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1095 - dev: true 1096 - 1097 - /json5@2.2.3: 1098 - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1099 - engines: {node: '>=6'} 1100 - hasBin: true 1101 - dev: true 1102 - 1103 - /jsonfile@4.0.0: 1104 - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1105 - optionalDependencies: 1106 - graceful-fs: 4.2.11 1107 - dev: true 1108 - 1109 - /kolorist@1.8.0: 1110 - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} 1111 - dev: true 1112 - 1113 - /lodash.get@4.4.2: 1114 - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} 1115 - dev: true 1116 - 1117 - /lodash.isequal@4.5.0: 1118 - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 1119 - dev: true 1120 - 1121 - /lodash@4.17.21: 1122 - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1123 - dev: true 1124 - 1125 - /lru-cache@5.1.1: 1126 - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1127 - dependencies: 1128 - yallist: 3.1.1 1129 - dev: true 1130 - 1131 - /lru-cache@6.0.0: 1132 - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1133 - engines: {node: '>=10'} 1134 - dependencies: 1135 - yallist: 4.0.0 1136 - dev: true 1137 - 1138 - /magic-string@0.30.9: 1139 - resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} 1140 - engines: {node: '>=12'} 1141 - dependencies: 1142 - '@jridgewell/sourcemap-codec': 1.4.15 1143 - dev: true 1144 - 1145 - /minimatch@3.0.8: 1146 - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} 1147 - dependencies: 1148 - brace-expansion: 1.1.11 1149 - dev: true 1150 - 1151 - /minimatch@9.0.4: 1152 - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 1153 - engines: {node: '>=16 || 14 >=14.17'} 1154 - dependencies: 1155 - brace-expansion: 2.0.1 1156 - dev: true 1157 - 1158 - /ms@2.1.2: 1159 - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1160 - dev: true 1161 - 1162 - /muggle-string@0.3.1: 1163 - resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} 1164 - dev: true 1165 - 1166 - /nanoid@3.3.7: 1167 - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1168 - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1169 - hasBin: true 1170 - dev: true 1171 - 1172 - /node-releases@2.0.14: 1173 - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 1174 - dev: true 1175 - 1176 - /path-browserify@1.0.1: 1177 - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 1178 - dev: true 1179 - 1180 - /path-parse@1.0.7: 1181 - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1182 - dev: true 1183 - 1184 - /picocolors@1.0.0: 1185 - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1186 - dev: true 1187 - 1188 - /picomatch@2.3.1: 1189 - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1190 - engines: {node: '>=8.6'} 1191 - dev: true 1192 - 1193 - /postcss-less@6.0.0: 1194 - resolution: {integrity: sha512-FPX16mQLyEjLzEuuJtxA8X3ejDLNGGEG503d2YGZR5Ask1SpDN8KmZUMpzCvyalWRywAn1n1VOA5dcqfCLo5rg==} 1195 - engines: {node: '>=12'} 1196 - peerDependencies: 1197 - postcss: ^8.3.5 1198 - dev: true 1199 - 1200 - /postcss-scss@4.0.9: 1201 - resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} 1202 - engines: {node: '>=12.0'} 1203 - peerDependencies: 1204 - postcss: ^8.4.29 1205 - dev: true 1206 - 1207 - /postcss@8.4.38: 1208 - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 1209 - engines: {node: ^10 || ^12 || >=14} 1210 - dependencies: 1211 - nanoid: 3.3.7 1212 - picocolors: 1.0.0 1213 - source-map-js: 1.2.0 1214 - dev: true 1215 - 1216 - /prettier-plugin-css-order@2.1.2(prettier@3.2.5): 1217 - resolution: {integrity: sha512-vomxPjHI6pOMYcBuouSJHxxQClJXaUpU9rsV9IAO2wrSTZILRRlrxAAR8t9UF6wtczLkLfNRFUwM+ZbGXOONUA==} 1218 - engines: {node: '>=16'} 1219 - peerDependencies: 1220 - prettier: 3.x 1221 - dependencies: 1222 - css-declaration-sorter: 7.2.0 1223 - postcss-less: 6.0.0 1224 - postcss-scss: 4.0.9 1225 - prettier: 3.2.5 1226 - transitivePeerDependencies: 1227 - - postcss 1228 - dev: true 1229 - 1230 - /prettier@3.2.5: 1231 - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 1232 - engines: {node: '>=14'} 1233 - hasBin: true 1234 - dev: true 1235 - 1236 - /punycode@2.3.1: 1237 - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1238 - engines: {node: '>=6'} 1239 - dev: true 1240 - 1241 - /resolve@1.19.0: 1242 - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} 1243 - dependencies: 1244 - is-core-module: 2.13.1 1245 - path-parse: 1.0.7 1246 - dev: true 1247 - 1248 - /resolve@1.22.8: 1249 - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1250 - hasBin: true 1251 - dependencies: 1252 - is-core-module: 2.13.1 1253 - path-parse: 1.0.7 1254 - supports-preserve-symlinks-flag: 1.0.0 1255 - dev: true 1256 - 1257 - /rollup@4.14.2: 1258 - resolution: {integrity: sha512-WkeoTWvuBoFjFAhsEOHKRoZ3r9GfTyhh7Vff1zwebEFLEFjT1lG3784xEgKiTa7E+e70vsC81roVL2MP4tgEEQ==} 1259 - engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1260 - hasBin: true 1261 - dependencies: 1262 - '@types/estree': 1.0.5 1263 - optionalDependencies: 1264 - '@rollup/rollup-android-arm-eabi': 4.14.2 1265 - '@rollup/rollup-android-arm64': 4.14.2 1266 - '@rollup/rollup-darwin-arm64': 4.14.2 1267 - '@rollup/rollup-darwin-x64': 4.14.2 1268 - '@rollup/rollup-linux-arm-gnueabihf': 4.14.2 1269 - '@rollup/rollup-linux-arm64-gnu': 4.14.2 1270 - '@rollup/rollup-linux-arm64-musl': 4.14.2 1271 - '@rollup/rollup-linux-powerpc64le-gnu': 4.14.2 1272 - '@rollup/rollup-linux-riscv64-gnu': 4.14.2 1273 - '@rollup/rollup-linux-s390x-gnu': 4.14.2 1274 - '@rollup/rollup-linux-x64-gnu': 4.14.2 1275 - '@rollup/rollup-linux-x64-musl': 4.14.2 1276 - '@rollup/rollup-win32-arm64-msvc': 4.14.2 1277 - '@rollup/rollup-win32-ia32-msvc': 4.14.2 1278 - '@rollup/rollup-win32-x64-msvc': 4.14.2 1279 - fsevents: 2.3.3 1280 - dev: true 1281 - 1282 - /semver@6.3.1: 1283 - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1284 - hasBin: true 1285 - dev: true 1286 - 1287 - /semver@7.5.4: 1288 - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1289 - engines: {node: '>=10'} 1290 - hasBin: true 1291 - dependencies: 1292 - lru-cache: 6.0.0 1293 - dev: true 1294 - 1295 - /semver@7.6.0: 1296 - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 1297 - engines: {node: '>=10'} 1298 - hasBin: true 1299 - dependencies: 1300 - lru-cache: 6.0.0 1301 - dev: true 1302 - 1303 - /source-map-js@1.2.0: 1304 - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1305 - engines: {node: '>=0.10.0'} 1306 - dev: true 1307 - 1308 - /source-map@0.6.1: 1309 - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1310 - engines: {node: '>=0.10.0'} 1311 - dev: true 1312 - 1313 - /sprintf-js@1.0.3: 1314 - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1315 - dev: true 1316 - 1317 - /string-argv@0.3.2: 1318 - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1319 - engines: {node: '>=0.6.19'} 1320 - dev: true 1321 - 1322 - /strip-json-comments@3.1.1: 1323 - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1324 - engines: {node: '>=8'} 1325 - dev: true 1326 - 1327 - /supports-color@5.5.0: 1328 - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1329 - engines: {node: '>=4'} 1330 - dependencies: 1331 - has-flag: 3.0.0 1332 - dev: true 1333 - 1334 - /supports-color@8.1.1: 1335 - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1336 - engines: {node: '>=10'} 1337 - dependencies: 1338 - has-flag: 4.0.0 1339 - dev: true 1340 - 1341 - /supports-preserve-symlinks-flag@1.0.0: 1342 - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1343 - engines: {node: '>= 0.4'} 1344 - dev: true 1345 - 1346 - /to-fast-properties@2.0.0: 1347 - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1348 - engines: {node: '>=4'} 1349 - dev: true 1350 - 1351 - /typescript@5.4.2: 1352 - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} 1353 - engines: {node: '>=14.17'} 1354 - hasBin: true 1355 - dev: true 1356 - 1357 - /typescript@5.4.5: 1358 - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 1359 - engines: {node: '>=14.17'} 1360 - hasBin: true 1361 - dev: true 1362 - 1363 - /universalify@0.1.2: 1364 - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1365 - engines: {node: '>= 4.0.0'} 1366 - dev: true 1367 - 1368 - /update-browserslist-db@1.0.13(browserslist@4.23.0): 1369 - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 1370 - hasBin: true 1371 - peerDependencies: 1372 - browserslist: '>= 4.21.0' 1373 - dependencies: 1374 - browserslist: 4.23.0 1375 - escalade: 3.1.2 1376 - picocolors: 1.0.0 1377 - dev: true 1378 - 1379 - /uri-js@4.4.1: 1380 - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1381 - dependencies: 1382 - punycode: 2.3.1 1383 - dev: true 1384 - 1385 - /validator@13.11.0: 1386 - resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} 1387 - engines: {node: '>= 0.10'} 1388 - dev: true 1389 - 1390 - /vite-plugin-dts@3.8.1(typescript@5.4.5)(vite@5.2.8): 1391 - resolution: {integrity: sha512-zEYyQxH7lKto1VTKZHF3ZZeOPkkJgnMrePY4VxDHfDSvDjmYMMfWjZxYmNwW8QxbaItWJQhhXY+geAbyNphI7g==} 1392 - engines: {node: ^14.18.0 || >=16.0.0} 1393 - peerDependencies: 1394 - typescript: '*' 1395 - vite: '*' 1396 - peerDependenciesMeta: 1397 - vite: 1398 - optional: true 1399 - dependencies: 1400 - '@microsoft/api-extractor': 7.43.0 1401 - '@rollup/pluginutils': 5.1.0 1402 - '@vue/language-core': 1.8.27(typescript@5.4.5) 1403 - debug: 4.3.4 1404 - kolorist: 1.8.0 1405 - magic-string: 0.30.9 1406 - typescript: 5.4.5 1407 - vite: 5.2.8 1408 - vue-tsc: 1.8.27(typescript@5.4.5) 1409 - transitivePeerDependencies: 1410 - - '@types/node' 1411 - - rollup 1412 - - supports-color 1413 - dev: true 1414 - 1415 - /vite@5.2.8: 1416 - resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} 1417 - engines: {node: ^18.0.0 || >=20.0.0} 1418 - hasBin: true 1419 - peerDependencies: 1420 - '@types/node': ^18.0.0 || >=20.0.0 1421 - less: '*' 1422 - lightningcss: ^1.21.0 1423 - sass: '*' 1424 - stylus: '*' 1425 - sugarss: '*' 1426 - terser: ^5.4.0 1427 - peerDependenciesMeta: 1428 - '@types/node': 1429 - optional: true 1430 - less: 1431 - optional: true 1432 - lightningcss: 1433 - optional: true 1434 - sass: 1435 - optional: true 1436 - stylus: 1437 - optional: true 1438 - sugarss: 1439 - optional: true 1440 - terser: 1441 - optional: true 1442 - dependencies: 1443 - esbuild: 0.20.2 1444 - postcss: 8.4.38 1445 - rollup: 4.14.2 1446 - optionalDependencies: 1447 - fsevents: 2.3.3 1448 - dev: true 1449 - 1450 - /vue-template-compiler@2.7.16: 1451 - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} 1452 - dependencies: 1453 - de-indent: 1.0.2 1454 - he: 1.2.0 1455 - dev: true 1456 - 1457 - /vue-tsc@1.8.27(typescript@5.4.5): 1458 - resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} 1459 - hasBin: true 1460 - peerDependencies: 1461 - typescript: '*' 1462 - dependencies: 1463 - '@volar/typescript': 1.11.1 1464 - '@vue/language-core': 1.8.27(typescript@5.4.5) 1465 - semver: 7.6.0 1466 - typescript: 5.4.5 1467 - dev: true 1468 - 1469 - /yallist@3.1.1: 1470 - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1471 - dev: true 1472 - 1473 - /yallist@4.0.0: 1474 - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1475 - dev: true 1476 - 1477 - /z-schema@5.0.5: 1478 - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} 1479 - engines: {node: '>=8.0.0'} 1480 - hasBin: true 1481 - dependencies: 1482 - lodash.get: 4.4.2 1483 - lodash.isequal: 4.5.0 1484 - validator: 13.11.0 1485 - optionalDependencies: 1486 - commander: 9.5.0 1487 - dev: true
-17
src/index.ts
··· 1 - import '../lib/index.ts'; 2 - import type { BlueskyPost } from '../lib/index.ts'; 3 - 4 - import './style.css'; 5 - 6 - const dark = matchMedia('(prefers-color-scheme: dark)'); 7 - 8 - const update_theme = () => { 9 - const is_dark = dark.matches; 10 - 11 - for (const node of document.querySelectorAll<BlueskyPost>('bluesky-post')) { 12 - node.setAttribute('theme', !is_dark ? 'light' : 'dark'); 13 - } 14 - }; 15 - 16 - update_theme(); 17 - dark.addEventListener('change', update_theme);
-75
src/style.css
··· 1 - :root { 2 - --background-primary: #fafafa; 3 - --background-secondary: #e5e5e5; 4 - --text-primary: #000000; 5 - --text-link: #1d4ed8; 6 - --divider: #c8c8c8; 7 - } 8 - 9 - @media (prefers-color-scheme: dark) { 10 - :root { 11 - --background-primary: #0a0a0a; 12 - --background-secondary: #171717; 13 - --text-primary: #ffffff; 14 - --text-link: #60a5fa; 15 - --divider: #404040; 16 - } 17 - } 18 - 19 - html { 20 - background: var(--background-primary); 21 - color: var(--text-primary); 22 - color-scheme: light dark; 23 - font-size: 14px; 24 - line-height: 1.25rem; 25 - } 26 - 27 - body { 28 - margin: 24px auto; 29 - padding: 0 16px; 30 - max-width: 680px; 31 - } 32 - 33 - h1, 34 - h2, 35 - h3, 36 - h4, 37 - h5, 38 - h6, 39 - p { 40 - margin-block-start: 1.1rem; 41 - margin-block-end: 1.1rem; 42 - } 43 - 44 - h1 { 45 - font-size: 1.25rem; 46 - } 47 - h2 { 48 - font-size: 1.125rem; 49 - } 50 - 51 - a { 52 - color: var(--text-link); 53 - } 54 - 55 - pre { 56 - border-radius: 4px; 57 - background: var(--background-secondary); 58 - padding: 8px; 59 - overflow-x: auto; 60 - font-size: 12px; 61 - } 62 - 63 - bluesky-post { 64 - --font-size: 16px; 65 - margin: 16px auto; 66 - } 67 - 68 - .bluesky-post-fallback { 69 - margin: 16px 0; 70 - border-left: 3px solid var(--divider); 71 - padding: 4px 8px; 72 - } 73 - .bluesky-post-fallback p { 74 - margin: 0 0 8px 0; 75 - }
-25
tsconfig.json
··· 1 - { 2 - "compilerOptions": { 3 - "target": "ESNext", 4 - "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 - "types": [], 6 - "skipLibCheck": true, 7 - 8 - "module": "ESNext", 9 - "moduleResolution": "Bundler", 10 - "allowImportingTsExtensions": true, 11 - "resolveJsonModule": true, 12 - "noEmit": true, 13 - "jsx": "preserve", 14 - "jsxImportSource": "@intrnl/jsx-to-string", 15 - 16 - "incremental": true, 17 - "strict": true, 18 - "noUnusedLocals": true, 19 - "noUnusedParameters": true, 20 - "noFallthroughCasesInSwitch": true, 21 - "verbatimModuleSyntax": true, 22 - }, 23 - "include": ["src", "lib"], 24 - "references": [{ "path": "./tsconfig.node.json" }], 25 - }
-10
tsconfig.node.json
··· 1 - { 2 - "compilerOptions": { 3 - "composite": true, 4 - "skipLibCheck": true, 5 - "module": "ESNext", 6 - "moduleResolution": "bundler", 7 - "allowSyntheticDefaultImports": true 8 - }, 9 - "include": ["vite.config.ts"] 10 - }
-46
vite.config.ts
··· 1 - import { defineConfig } from 'vite'; 2 - 3 - import babel from '@rollup/plugin-babel'; 4 - import dts from 'vite-plugin-dts'; 5 - 6 - export default defineConfig({ 7 - base: '/', 8 - optimizeDeps: { 9 - include: ['@intrnl/jsx-to-string/runtime'], 10 - }, 11 - build: { 12 - sourcemap: true, 13 - target: 'esnext', 14 - minify: false, 15 - cssMinify: true, 16 - lib: { 17 - entry: { 18 - core: 'lib/core.tsx', 19 - element: 'lib/index.ts', 20 - }, 21 - formats: ['es'], 22 - }, 23 - rollupOptions: { 24 - external: [ 25 - '@externdefs/bluesky-client', 26 - '@externdefs/bluesky-client/lexicons', 27 - '@externdefs/bluesky-client/xrpc', 28 - ], 29 - }, 30 - }, 31 - esbuild: { 32 - target: 'es2022', 33 - }, 34 - plugins: [ 35 - { 36 - enforce: 'pre', 37 - ...babel({ 38 - babelrc: false, 39 - babelHelpers: 'bundled', 40 - extensions: ['.tsx'], 41 - plugins: [['@babel/plugin-syntax-typescript', { isTSX: true }], ['@intrnl/jsx-to-string/babel']], 42 - }), 43 - }, 44 - dts({ rollupTypes: true }), 45 - ], 46 - });