1"use strict";(globalThis.webpackChunkao_react_app||=[]).push([[2799],{32799(e,t,r){r.d(t,{A:()=>s});var n=r(9950),i=r(39921),o=r(28227),a=r(2313);function s(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const[t]=(0,n.useState)(()=>function(e){if(!e)return{saved:[],cards:[],error:""};try{return{saved:(0,i.Vb)(window.localStorage),cards:(0,o.nY)(window.localStorage),error:""}}catch(t){return{saved:[],cards:[],error:t.message}}}(e)),[r,s]=(0,n.useState)(()=>{var t;return e&&(null===(t=(0,i.lM)())||void 0===t?void 0:t.items)||[]}),[l,c]=(0,n.useState)(t.saved),[d,u]=(0,n.useState)(t.cards),[h,p]=(0,n.useState)(t.error),[f,m]=(0,n.useState)(e&&!(0,i.lM)());return(0,n.useEffect)(()=>{if(!e)return;let t=!0,r=!1;const n=(0,a.Po)(()=>{r||(r=!0,m(!(0,i.lM)()),(0,i.dV)().then(e=>{t&&s(e.items)}).catch(e=>{t&&p(e.message)}).finally(()=>{t&&m(!1)}))},{document:document,window:window,navigator:navigator}),l=()=>{try{c((0,i.Vb)(window.localStorage))}catch(e){p(e.message)}},d=()=>{try{u((0,o.nY)(window.localStorage))}catch{u([])}};l(),d();const h=e=>{e.key===i.sl&&l(),e.key===o.CK&&d()};return window.addEventListener("storage",h),window.addEventListener(o.Fn,d),()=>{t=!1,n(),window.removeEventListener("storage",h),window.removeEventListener(o.Fn,d)}},[e]),{editorial:r,saved:l,setSaved:c,cards:d,error:h,loading:f}}},28227(e,t,r){r.d(t,{$y:()=>h,Lq:()=>m,P_:()=>g,Pe:()=>v,U$:()=>b,Uy:()=>f,gY:()=>u,jV:()=>y,nY:()=>w,q6:()=>p});var n=r(49730);const i="appo-face-cards-v1",o="appo-face-cards",a=8e3,s=[{id:"orchid",name:"Purple crush",paper:"#eee4ff",glow:"#ffc8dd",ink:"#35204f",accent:"#754ae4",sticker:"A LITTLE ICONIC"},{id:"mango",name:"Mango season",paper:"#fff1bd",glow:"#ffbea8",ink:"#4f291e",accent:"#a94327",sticker:"GOOD ENERGY ONLY"},{id:"pool",name:"Pool party",paper:"#d8fbf4",glow:"#c2cfff",ink:"#153c4b",accent:"#17637b",sticker:"MAKE SOME WAVES"},{id:"rose",name:"Main character",paper:"#ffe5ee",glow:"#f6d49a",ink:"#572341",accent:"#a43067",sticker:"IN MY OWN ORBIT"}],l=new Set(["appopener.com","www.appopener.com","appopener.in","www.appopener.in"]),c=e=>(new TextEncoder).encode(e).length,d=(e,t)=>{if("string"!==typeof e)return"";const r=e.normalize("NFC").replace(/[\u0000-\u001f\u007f\u202a-\u202e\u2066-\u2069]/g," ").trim();return(e=>Array.from(e).length)(r)<=t?r:null};function u(e){if("string"!==typeof e||e.length>700||/[\\\u0000-\u0020\u007f]/.test(e))return"";try{const t=new URL(e);if("https:"!==t.protocol||t.username||t.password||!t.hostname.includes(".")||t.hostname.includes(":")||/^[\d.]+$/.test(t.hostname)||/(?:^|\.)(localhost|local|internal|test|invalid)$/.test(t.hostname))return"";const r=/token|secret|password|signature|api.?key|authorization/i;for(const e of t.searchParams.keys())if(r.test(e))return"";for(const e of new URLSearchParams(t.hash.slice(1)).keys())if(r.test(e))return"";return t.href}catch{return""}}function h(e){if(!e||"object"!==typeof e||Array.isArray(e))return null;if(void 0!==e.version&&1!==e.version)return null;if(void 0!==e.kind&&"face-card"!==e.kind)return null;const t=d(e.name,60),r=d(e.bio||"",180),n=s.find(t=>t.id===(e.theme||"orchid")),i=e.accent||(null===n||void 0===n?void 0:n.accent);if(!t||null===r||!n||!/^#[\da-f]{6}$/i.test(i)||!Array.isArray(e.links)||!e.links.length||e.links.length>8)return null;const o=e.avatar?u(e.avatar):"";if(e.avatar&&!o)return null;const l=e.links.map(e=>{if(!e||"object"!==typeof e)return null;const t=u(e.url),r=d(e.label,48);return t&&r?{label:r,url:t}:null});if(l.some(e=>!e)||new Set(l.map(e=>e.url)).size!==l.length)return null;const h={version:1,kind:"face-card",name:t,bio:r,avatar:o,theme:n.id,accent:i.toLowerCase(),links:l};return c(JSON.stringify(h))<=a?h:null}function p(e){if("string"!==typeof e||e.length>Math.ceil(32e3/3)+6||!/^#card=[\w-]+$/.test(e))return null;try{const t=e.slice(6).replace(/-/g,"+").replace(/_/g,"/"),r=Uint8Array.from(atob(t),e=>e.charCodeAt(0));if(r.length>a)return null;const n=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(r));return 1!==n.version||"face-card"!==n.kind?null:h(n)}catch{return null}}function f(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"https://appopener.com",r="https://appopener.com";try{const e=new URL(t);"https:"!==e.protocol||!l.has(e.hostname)||e.port||e.username||e.password||(r=e.origin)}catch{}return r+"/face-card"+function(e){const t=h(e);if(!t)throw new Error("Add your name and 1\u20138 different public HTTPS links, each with a label. Check the avatar URL and field lengths.");const r=(new TextEncoder).encode(JSON.stringify(t));return"#card="+btoa(Array.from(r,e=>String.fromCharCode(e)).join("")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}(e)}function m(e){try{const t=new URL(e);return"https:"===t.protocol&&l.has(t.hostname)&&!t.port&&!t.username&&!t.password&&"/face-card"===t.pathname&&!!p(t.hash)&&c(e)<=900}catch{return!1}}function g(e){var t,r;if("string"!==typeof e||c(e)>a)throw new Error("Choose a Face Card JSON file smaller than 8 KB.");let n;try{n=JSON.parse(e)}catch{throw new Error("That file is not readable Face Card JSON.")}
1const i=1===(null===(t=n)||void 0===t?void 0:t.version)&&"face-card"===(null===(r=n)||void 0===r?void 0:r.kind)?h(n):null;if(!i)throw new Error("This card has invalid or duplicate links, unsupported fields, or text that is too long. Your draft has been kept.");return i}function w(e){try{const t=JSON.parse((e||window.localStorage).getItem(i)||"[]");return!Array.isArray(t)||t.length>12?[]:t.map(e=>{const t=h(e);return t?{...t,id:"string"===typeof e.id&&/^[\w-]{1,80}$/.test(e.id)?e.id:""}:null}).filter(Boolean)}catch{return[]}}function v(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const n=h(e);if(!n)return{saved:!1,error:"Finish your card before saving it."};try{const e=t||window.localStorage,a=JSON.parse(e.getItem(i)||"[]");if(!Array.isArray(a)||a.length>12)throw new Error("Existing card data is unreadable. Export this card to keep it.");const s="string"===typeof r&&/^[\w-]{1,80}$/.test(r)?r:`fc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`,l=w(e).filter(e=>e.id!==s);return l.length>=12?{saved:!1,error:"This browser already has 12 cards. Export this card or replace an existing draft."}:(e.setItem(i,JSON.stringify([{...n,id:s},...l])),"undefined"!==typeof window&&window.dispatchEvent(new Event(o)),{saved:!0,id:s,card:n})}catch(a){return{saved:!1,error:"Existing card data is unreadable. Export this card to keep it."===a.message?a.message:"Browser storage is unavailable. Your card still works: share its link or export its file."}}}function b(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=(0,n.im)(e);if(!r||!l.has(new URL(r.url).hostname)||!u(r.url))return null;const i=t.find(e=>{var t;return(null===(t=(0,n.im)(e.url))||void 0===t?void 0:t.url)===r.url}),o=d((null===i||void 0===i?void 0:i.title)||"",48)||"My AppOpener link";return{name:"",bio:"",avatar:"",theme:"orchid",accent:s[0].accent,links:[{label:o,url:r.url}]}}function y(e){try{const t=new URL(e).hostname.replace(/^www\./,""),r=[["youtube.com","YouTube","\u25b6"],["youtu.be","YouTube","\u25b6"],["instagram.com","Instagram","\u25ce"],["spotify.com","Spotify","\u266b"],["twitter.com","X / Twitter","\u2197"],["x.com","X / Twitter","\u2197"],["linkedin.com","LinkedIn","in"],["github.com","GitHub","\u2318"],["appopener.com","AppOpener","\u2197"],["appopener.in","AppOpener","\u2197"]].find(e=>{let[r]=e;return t===r||t.endsWith("."+r)});return{label:(null===r||void 0===r?void 0:r[1])||t,mark:(null===r||void 0===r?void 0:r[2])||"\u2197"}}catch{return{label:"Your link",mark:"\u2197"}}}r.d(t,["CK",0,i,"Fn",0,o,"yt",0,s])},86001(e,t,r){r.d(t,{Qs:()=>o});const n=Object.freeze([{id:"studio-first-flight",type:"video",title:"First Flight",subtitle:"From the ocean floor to another world.",creator:{name:"AppOpener Studio"},thumbnail:"/assets/universe/darshan-world.webp",duration:"0:30",category:"Original film",theme:"orbit",action:"film",description:"A thirty-second rocket-to-moon studio film, created for the Darshan universe. A recorded preview, not a live event or winner announcement."},{id:"studio-three-cuts",type:"guide",title:"One film. Three different stories.",subtitle:"A practical first assignment for your clip studio.",creator:{name:"AppOpener Studio"},category:"Clipping playbook",theme:"lime",action:"guide",guide:{title:"Make three cuts, not three copies.",intro:"A useful clip has one clear idea. Start with the owned Darshan practice film, choose a different angle for each cut, and write the brief before opening your editor.",steps:["The reveal: choose a moment that makes sense without the rest of the film. Write a one-sentence hook that describes what actually happens.","The journey: connect a beginning, a transition and a destination. Mark the timestamps in your clip brief instead of uploading someone else's media.","The invitation: end with one honest next step. Credit the source and do not imply the recorded preview is a live show.","Review at phone size: readable captions, safe margins, an understandable first frame, and no claim that views or payment are guaranteed."],destination:"/studio/clips",cta:"Open the clip studio"}},{id:"studio-recognizable-link",type:"guide",title:"A better entrance for your work.",subt
1itle:"Make the link as intentional as the thing behind it.",creator:{name:"AppOpener Studio"},category:"Link craft",theme:"peach",action:"guide",guide:{title:"Make a link people can recognize.",intro:"A useful link tells someone where they are going. Start with a destination you own or have permission to share, and make the promise match the page.",steps:["Use a specific title: the film, collection or offer, not an unexplained call to click.","Check the destination on a phone and a desktop. Avoid links that require credentials unless the audience expects that.","Keep one destination per promise. A product link should not suddenly become an unrelated advertisement.","When you share the link, explain why the work matters. A click counter is recorded activity, not a count of distinct people."],destination:"/links",cta:"Make a smart link"}},{id:"studio-better-brief",type:"guide",title:"Good collaborations start here.",subtitle:"A clear brief is a creative advantage.",creator:{name:"AppOpener Studio"},category:"Creator business",theme:"lavender",action:"guide",guide:{title:"Write the brief before the pitch.",intro:"Make the deliverable, permissions and review process legible. A local draft is not a published gig, and an approved draft is not a paid invoice.",steps:["Name the audience and the single message. Specify format, approximate length, aspect ratio, deadline and the source footage.","State what can be used: footage, music, voice, logo and names. Do not assume a public URL is a remix licence.","Agree on revisions and acceptance outside the local practice workspace before real work begins.","State payment terms plainly in your agreement. Never describe a local review button as escrow, hiring or payout."],destination:"/studio/clips",cta:"Draft a brief"}},{id:"studio-read-your-signals",type:"guide",title:"Know what your numbers mean.",subtitle:"Better decisions, without imaginary growth charts.",creator:{name:"AppOpener Studio"},category:"Analytics basics",theme:"blue",action:"guide",guide:{title:"Read the signal, not the fantasy.",intro:"Start with what is actually measured. Link creation dates and cumulative recorded clicks answer different questions.",steps:["Compare similar links and similar observation periods. An older link has had more time to collect clicks.","Keep unknown values unknown. A missing counter does not mean nobody clicked.","Do not call link clicks unique visitors, watch time or purchases. Those need their own trustworthy measurements.","Use your own exported link records in the analytics workspace. Device imports stay in the current browser session and are not uploaded."],destination:"/dashboard",cta:"Open your analytics"}},{id:"studio-small-reset",type:"tool",title:"A little room to play.",subtitle:"A 30-second focus break. No stakes, just a score.",creator:{name:"AppOpener Studio"},category:"Studio break",theme:"ink",action:"route",href:"/studio/play"}]);function i(e){if("string"!==typeof e||e.length>2048||/[\u0000-\u0020\\]/.test(e))return null;if(/^\/(?!\/)/.test(e))return e;try{const t=new URL(e);return"https:"!==t.protocol||t.username||t.password?null:t.href}catch{return null}}function o(e){return Array.isArray(e)?e.slice(0,120).flatMap(e=>{const t=i(null===e||void 0===e?void 0:e.href);return t&&"string"===typeof e.title&&e.title.trim()?[{...e,id:String(e.id||t),href:t,title:e.title.slice(0,180),thumbnail:i(e.thumbnail),action:"external",category:"product"===e.type?"Product discovery":"Public library",theme:"orbit"}]:[]}):[]}r.d(t,["c1",0,n])},39921(e,t,r){r.d(t,{$n:()=>E,OC:()=>x,Q1:()=>$,Vb:()=>O,Wi:()=>b,Z:()=>C,_0:()=>S,dV:()=>P,eP:()=>L,lL:()=>M,lM:()=>R,oF:()=>y,oZ:()=>g,qE:()=>m,uH:()=>A,vJ:()=>T,yA:()=>k});var n=r(86001),i=r(28227);const o="appo-web-theatre-saved-v1",a=256,s=Object.freeze({public:"Published on AppOpener",editorial:"Web collection",original:"AppOpener original",local:"Saved on this device",facecard:"FaceCard on this device",shared:"Opened from a link"}),l=Object.freeze({web:"Websites & tools",short:"Shorts",video:"Videos",music:"Music",docs:"Reading & docs",images:"Art & images",profile:"Profiles & communities"}),c=/^(?:yt|vr|ig|sp|tg|tw|lk|ps|docs|fb|web|other|amazon|amz)$/,d=new Set(["/darshan","/studio/play","/studio/clips","/links","/ascii","/fit-check","/contacts","/offline-kit/","/offline-sos/","/universe-guide.html","/creator-library.html","/dashboard"]),u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:180;return"string"===typeof e?e.replace(/[\u0000-\u001f\u007f]/g," ").replace(/<[^>]*>/g,"").replace(/\s+/g," ").trim().slice(0,t):""},h=/(?:email|phone|mobile|password|passwd|token|secret|session|authorization|apikey|accesskey|otp|signature|credential)/i,p=e=>/^(?:www\.)?appopener\.(?:com|in|net)$/.test(e);function f(e){if("string"!==typeof e||e.length>2048)return"";const t=e.trim();if(!t||/[\u0000-\u0020\u007f\\]/.test(t)||/%(?:00|0a|0d|5c)/i.test(t))return"";const r=t.startsWith("/");if(r&&(t.startsWith("//")||!d.has(t)&&!/^\/(?:free\/|link\/)?(?:yt|vr|ig|sp|tg|tw|lk|ps|docs|fb|web|other|amazon|amz)\/(?:a4\/)?[A-Za-z0-9_-]{1,128}$/.test(t)))return"";try{const e=new URL(t,"https://appopener.com");if("https:"!==e.protocol||e.username||e.password||e.port)return"";const n=e.hostname.toLowerCase();if(!n.includes(".")||n.endsWith(".")||n.includes(":")||/^\d+\.\d+\.\d+\.\d+$/.test(n)||/(^|\.)(?:localhost|local|internal|intranet|lan|home|test|invalid|onion)$/.test(n)||/(^|\.)(?:localtest\.me|lvh\.me|nip\.io|sslip\.io)$/.test(n))return"";const i=decodeURIComponent(e.pathname+e.search+e.hash);if(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i.test(i))return"";for(const t of e.searchParams.keys())if(h.test(t.replace(/[-_.]/g,""))||/^(?:key|code|auth|sig|jwt|bearer|ticket)$/i.test(t))return"";if(/[?&#](?:token|secret|password|session|auth|api[-_]?key|signature|sig|code)=/i.test(i))return"";if(e.hash&&(h.test(e.hash)||!/^#[A-Za-z][A-Za-z0-9_-]{0,100}$/.test(e.hash)))return"";for(const t of[...e.searchParams.keys()])/^(?:utm_|fbclid$|gclid$|msclkid$)/i.test(t)&&e.searchParams.delete(t);return p(n)&&/^\/(?:api|auth|login|claim|payment|retrieve|account)(?:\/|$)/i.test(e.pathname)?"":r?e.pathname:e.href}catch{return""}}function m(e){const t=f(e);return t?`/theatre#link=${encodeURIComponent(t)}`:""}function g(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return f(new URLSearchParams((arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").replace(/^#/,"")).get("link")||new URLSearchParams(e).get("link"))}function w(e){let t=2166136261;for(const r of e)t=Math.imul(t^r.charCodeAt(0),16777619);return`web-${(t>>>0).toString(16)}`}function v(e,t){if(Object.hasOwn(l,e.kind))return e.kind;
1const r=new URL(t,"https://appopener.com"),n=r.pathname.split("/").filter(Boolean);["free","link"].includes(n[0])&&n.shift();const i=p(r.hostname)&&c.test(n[0])?n[0]:"";return"vr"===i||["short","vertical"].includes(e.type)||/\/shorts\//.test(r.pathname)?"short":"yt"===i||"video"===e.type||/(^|\.)(?:youtube\.com|youtu\.be)$/.test(r.hostname)?"video":"sp"===i||/(^|\.)(?:spotify\.com|soundcloud\.com)$/.test(r.hostname)?"music":"docs"===i||"guide"===e.type||/\.pdf$/i.test(r.pathname)?"docs":["ig","tg","tw","lk","fb"].includes(i)?"profile":"web"}function b(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"public";if(!e||!Object.hasOwn(s,r))return null;const n=f(e.href);if(!n)return null;const i=new URL(n,"https://appopener.com"),o=w(n),a=`${r}-${o}`,l="string"===typeof e.thumbnail&&/^\/assets\/universe\/[A-Za-z0-9._-]+$/.test(e.thumbnail)?e.thumbnail:f(e.thumbnail),c="public"===r&&"number"===typeof e.clicks&&Number.isFinite(e.clicks)&&e.clicks>=0?e.clicks:null;return{id:a,href:n,domain:n.startsWith("/")?"appopener.com":i.hostname.replace(/^www\./,""),title:u(e.title,160)||i.hostname.replace(/^www\./,""),description:u(e.description||e.subtitle,240),creator:u(e.publisher||(null===(t=e.creator)||void 0===t?void 0:t.name),100),thumbnail:l,kind:v(e,n),source:r,sourceLabel:s[r],clicks:c,accent:["violet","coral","mint","peach","blue"].includes(e.accent)?e.accent:["violet","coral","mint","peach","blue"][parseInt(o.slice(4),16)%5],film:"original"===r&&"studio-first-flight"===e.id,guide:"original"===r&&e.guide?{title:u(e.guide.title),intro:u(e.guide.intro,400),steps:Array.isArray(e.guide.steps)?e.guide.steps.slice(0,6).map(e=>u(e,400)):[]}:null}}function y(){return[...n.c1.map(e=>{var t;return b({...e,href:e.href||(null===(t=e.guide)||void 0===t?void 0:t.destination)||"/darshan"},"original")}),...[{href:"/ascii",title:"Turn an image into ASCII",description:"Make text art with the AppOpener creative tools.",kind:"images"},{href:"/offline-kit/",title:"A little kit for offline moments",description:"Choose useful tools to save explicitly for offline access.",kind:"web"},{href:"/universe-guide.html",title:"Your guide to the AppOpener universe",description:"Find the tools and destinations already here.",kind:"docs"}].map(e=>b(e,"original"))].filter(Boolean)}function k(e,t){return(Array.isArray(e)?e:[]).slice(0,12).flatMap(e=>{const r=(0,i.$y)(e);if(!r)return[];const n=(0,i.Uy)(r,t);return[{id:`facecard-${w(n)}`,href:n,domain:"appopener.com",title:r.name,description:r.bio,creator:"",thumbnail:f(r.avatar),kind:"profile",source:"facecard",sourceLabel:s.facecard,clicks:null,accent:"violet",facecard:r,film:!1,guide:null}]})}function A(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(e=>Array.isArray(e)?[...e]:[]),t=new Set,r=[];for(;e.some(e=>e.length)&&r.length<a;)for(const n of e){const e=n.shift(),i=e&&`${e.source}:${e.href}`;if(e&&!t.has(i)&&(t.add(i),r.push(e)),r.length>=a)break}return r}function S(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Math.random,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";const n=e.slice(0,a);for(let i=n.length-1;i>0;i--){const e=t(),r=Math.floor(Math.max(0,Math.min(.999999999,Number.isFinite(e)?e:0))*(i+1));[n[i],n[r]]=[n[r],n[i]]}return n.length>1&&n[0].id===r&&([n[0],n[1]]=[n[1],n[0]]),n}function O(e){const t=e.getItem(o);if(!t)return[];if(t.length>2e5)throw new Error("The saved website collection could not be read.");let r;try{r=JSON.parse(t)}catch{throw new Error("The saved website collection could not be read.")}if(!Array.isArray(r)||r.length>80)throw new Error("The saved website collection could not be read.");const n=r.map(e=>b(e,"local"));if(n.some(e=>!e))throw new Error("The saved website collection has an invalid link. Existing data was preserved.");return A([n])}function $(e,t){const r=b(t,"local");if(!r||!r.href.startsWith("https://"))throw new Error("Use a public HTTPS website link without sign-in tokens or private contact details.");const n=O(e);if(!n.find(e=>e.href===r.href)&&n.length>=80)throw new Error("Your device shelf holds 80 websites. Remove one before adding another.");const i=[r,...n.filter(e=>e.href!==r.href)];return e.setItem(o,JSON.stringify(i.map(e=>
1{let{href:t,title:r,description:n,kind:i}=e;return{href:t,title:r,description:n,kind:i}}))),i}function E(e,t){const r=O(e).filter(e=>e.href!==t);return e.setItem(o,JSON.stringify(r.map(e=>{let{href:t,title:r,description:n,kind:i}=e;return{href:t,title:r,description:n,kind:i}}))),r}function T(e){let{enabled:t,hidden:r,reducedMotion:n,saveData:i,previewOpen:o,interacting:a,count:s}=e;return!0===t&&!r&&!n&&!i&&!o&&!a&&s>1}function L(e){let{startX:t,startY:r,endX:n,endY:i,elapsed:o,axis:a="y"}=e;const s=n-t,l=i-r,c="x"===a?s:l,d="x"===a?l:s;return o>=40&&o<=1200&&Math.abs(c)>=55&&Math.abs(c)>1.2*Math.abs(d)?c<0?1:-1:0}function M(e){return new Map(e.slice(0,a).map(e=>[e.id,`${e.title} ${e.description} ${e.domain} ${e.creator}`.toLowerCase()]))}function C(e,t){let{query:r="",source:n="all",kind:i="all"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=r.trim().toLowerCase().slice(0,180);return e.filter(e=>("all"===n||e.source===n)&&("all"===i||e.kind===i)&&(t.get(e.id)||"").includes(o))}function x(e){var t,r;return!0===(null===e||void 0===e||null===(t=e.connection)||void 0===t?void 0:t.saveData)||["slow-2g","2g"].includes(null===e||void 0===e||null===(r=e.connection)||void 0===r?void 0:r.effectiveType)}let N,U;function R(){return U||null}function P(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:globalThis.fetch;return N||(N=(async()=>{const t=new AbortController,r=setTimeout(()=>t.abort(),5e3);try{var n;const r=await e("/editorial-web-library.json",{credentials:"omit",signal:t.signal});if(!r.ok||null===(n=r.headers.get("content-type"))||void 0===n||!n.includes("application/json"))throw new Error("The web collection is temporarily unavailable.");const i=await r.text();if(i.length>64e3)throw new Error("The web collection is too large.");const o=JSON.parse(i);if(1!==o.version||"editorial"!==o.source||!Array.isArray(o.items)||o.items.length>40)throw new Error("The web collection could not be read.");return U={items:o.items.map(e=>b(e,"editorial")).filter(Boolean),reviewedAt:u(o.reviewedAt,20),notice:u(o.notice,240)},U}finally{clearTimeout(r)}})().catch(e=>{throw N=null,e})),N}r.d(t,["ds",0,s,"qg",0,l,"sl",0,o])}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.