slug-lib-js 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -71,4 +71,4 @@ Error generating stack: `+e.message+`
71
71
  <p>We may update this policy from time to time. Changes take effect upon posting with a revised effective date. Continued use of the Service after changes constitutes acceptance.</p>
72
72
  <h2>10. Contact</h2>
73
73
  <p>Questions about this policy can be sent through the copium community channels linked from the project page.</p>
74
- `}};function u2({url:a,setUrl:n,openExternal:t,settings:e}){let[i]=ia(()=>{try{return localStorage.getItem("copium-last-url")||""}catch{return""}});return K("div",{className:"ntp",children:[b("div",{className:"ntp-logo",children:b("span",{className:"ntp-name",children:"copium"})}),K("form",{className:"ntp-search",onSubmit:(l)=>{l.preventDefault(),t(a||"https://www.google.com")},children:[ta.search,b("input",{placeholder:"Search the web",value:a,onChange:(l)=>n(l.target.value)})]}),e.lastPage!==!1&&i&&K("button",{className:"ntp-last",onClick:()=>t(i),children:[b("span",{className:"material-symbols-rounded",children:"history"}),b("span",{children:$l(i)})]}),(!e||e.shortcuts!==!1)&&b("div",{className:"shortcuts",children:y6.map((l)=>b("button",{className:"shortcut",onClick:()=>t(l.url,!0),title:l.label,children:b("span",{className:"ic",children:me(l.domain)})},l.label))})]})}function Yl({on:a,onClick:n}){return b("button",{className:"m3-switch"+(a?" on":""),role:"switch","aria-checked":!!a,onClick:n,children:b("span",{className:"knob"})})}var l1=[{id:"general",label:"General"},{id:"browsing",label:"Browsing"},{id:"privacy",label:"Privacy"}];function Kt({icon:a,title:n,desc:t,trail:e}){return K("div",{className:"set-row",children:[b("span",{className:"lead",children:b("span",{className:"material-symbols-rounded",style:{fontSize:20},children:a})}),K("span",{className:"txt",children:[b("span",{className:"t",children:n}),b("span",{className:"d",style:{display:"block"},children:t})]}),b("span",{className:"trail",children:e})]})}function c2({settings:a,update:n}){let[t,e]=ia("general"),i=(c,o)=>{if(a.confirmClear!==!1&&!window.confirm(c))return;o()},l=()=>{try{localStorage.removeItem("copium-last-url")}catch{}window.dispatchEvent(new CustomEvent("copium:clear-history"))},u=()=>{try{localStorage.clear()}catch{}location.reload()};return b("div",{className:"page-wrap",children:K("div",{className:"set-wrap",children:[K("div",{className:"set-card",children:[K("div",{className:"set-head",children:[b("h1",{children:"Settings"}),b("p",{children:"copium shell. everything saves locally, promise."})]}),b("div",{className:"set-tabs",children:l1.map((c)=>b("button",{className:"set-tab"+(t===c.id?" on":""),onClick:()=>e(c.id),children:c.label},c.id))})]}),t==="general"&&b("div",{className:"set-card",children:K("div",{className:"set-group",children:[b(Kt,{icon:"lock",title:"Always use HTTPS",desc:"Upgrades plain http links",trail:b(Yl,{on:a.https!==!1,onClick:()=>n({https:a.https===!1})})}),b(Kt,{icon:"apps",title:"Show shortcuts",desc:"Shortcut grid on the new tab page",trail:b(Yl,{on:a.shortcuts!==!1,onClick:()=>n({shortcuts:a.shortcuts===!1})})}),b(Kt,{icon:"restore",title:"Reopen last page",desc:"Shows a shortcut to your last site",trail:b(Yl,{on:a.lastPage!==!1,onClick:()=>n({lastPage:a.lastPage===!1})})})]})}),t==="browsing"&&K(fi,{children:[b("div",{className:"set-card",children:b("div",{className:"set-group",children:b(Kt,{icon:"history",title:"Remember history",desc:"Keeps back and forward working",trail:b(Yl,{on:a.history!==!1,onClick:()=>n({history:a.history===!1})})})})}),b("div",{className:"set-card",children:b("div",{className:"set-group",children:b(Kt,{icon:"density_medium",title:"Interface size",desc:"Scales the whole shell up or down",trail:b("span",{className:"m3-seg",children:[["s","S"],["m","M"],["l","L"]].map(([c,o])=>b("button",{className:a.uiScale===c||!a.uiScale&&c==="m"?"on":"",onClick:()=>n({uiScale:c}),children:o},c))})})})})]}),t==="privacy"&&K(fi,{children:[b("div",{className:"set-card",children:b("div",{className:"set-group",children:b(Kt,{icon:"verified_user",title:"Ask before clearing",desc:"Confirms before wiping history or data",trail:b(Yl,{on:a.confirmClear!==!1,onClick:()=>n({confirmClear:a.confirmClear===!1})})})})}),b("div",{className:"set-card",children:K("div",{className:"set-group",children:[b(Kt,{icon:"history",title:"Clear browsing history",desc:"Back/forward list and last page link",trail:b("button",{className:"m3-btn-danger",onClick:()=>i("Clear browsing history?",l),children:"Clear"})}),b(Kt,{icon:"delete",title:"Clear all local data",desc:"Settings and preferences",trail:b("button",{className:"m3-btn-danger",onClick:()=>i("Wipe everything and reload?",u),children:"Clear"})})]})})]})]})})}function o2({onAccept:a,onOpen:n}){return b("div",{className:"page-wrap",children:K("div",{className:"legal-card",children:[b("h2",{children:"Welcome to copium"}),K("div",{className:"legal-body",children:[K("p",{className:"legal-intro",children:["by continuing you agree to our"," ",b("button",{className:"legal-link",onClick:()=>n("tos"),children:"Terms of Service"})," ","and"," ",b("button",{className:"legal-link",onClick:()=>n("privacy"),children:"Privacy Policy"}),"."]}),b("p",{className:"legal-cookies",children:"This site uses cookies to keep your settings and remember your session."})]}),b("button",{className:"m3-btn legal-accept",onClick:a,children:"Accept"})]})})}function Rr({kind:a,onBack:n}){let t=zr[a]||zr.tos;return b("div",{className:"page-wrap",children:K("div",{className:"legal-doc",children:[K("div",{className:"legal-doc-head",children:[b("button",{className:"legal-back",onClick:n,title:"Back",children:ta.back}),b("h1",{children:t.title})]}),K("div",{className:"legal-doc-sub",children:["effective ",l2]}),b("div",{className:"legal-doc-body",dangerouslySetInnerHTML:{__html:t.body}})]})})}var u1=[{pkg:"verifi-lib-js",cdn:"jsdelivr",tag:"2.1.2",url:"https://cdn.jsdelivr.net/npm/verifi-lib-js@2.1.2/assets/logos/verifi-lib-js-backup.svg"},{pkg:"verifi-lib-js",cdn:"unpkg",tag:"2.1.2",url:"https://unpkg.com/verifi-lib-js@2.1.2/assets/logos/verifi-lib-js-backup.svg"},{pkg:"slug-lib-js",cdn:"jsdelivr",tag:"2.1.2",url:"https://cdn.jsdelivr.net/npm/slug-lib-js@2.1.2/assets/logos/slug-lib-js-backup.svg"},{pkg:"slug-lib-js",cdn:"unpkg",tag:"2.1.2",url:"https://unpkg.com/slug-lib-js@2.1.2/assets/logos/slug-lib-js-backup.svg"},{pkg:"bit-byte-bit",cdn:"jsdelivr",tag:"2.1.2",url:"https://cdn.jsdelivr.net/npm/bit-byte-bit@2.1.2/assets/logos/bit-byte-bit-backup.svg"},{pkg:"bit-byte-bit",cdn:"unpkg",tag:"2.1.2",url:"https://unpkg.com/bit-byte-bit@2.1.2/assets/logos/bit-byte-bit-backup.svg"},{pkg:"uniform-js-lib",cdn:"jsdelivr",tag:"2.1.2",url:"https://cdn.jsdelivr.net/npm/uniform-js-lib@2.1.2/assets/logos/uniform-js-lib-backup.svg"},{pkg:"uniform-js-lib",cdn:"unpkg",tag:"2.1.2",url:"https://unpkg.com/uniform-js-lib@2.1.2/assets/logos/uniform-js-lib-backup.svg"},{pkg:"lumen-lib",cdn:"jsdelivr",tag:"2.1.2",url:"https://cdn.jsdelivr.net/npm/lumen-lib@2.1.2/assets/logos/lumen-backup.svg"},{pkg:"lumen-lib",cdn:"unpkg",tag:"2.1.2",url:"https://unpkg.com/lumen-lib@2.1.2/assets/logos/lumen-backup.svg"}];function r2(){return b("div",{className:"alt-page",children:K("div",{className:"alt-card",children:[b("h1",{className:"alt-title",children:"Alternatives"}),b("p",{className:"alt-sub",children:"other copium hosts. each link opens in a separate browser tab."}),b("div",{className:"alt-list",children:u1.map((a)=>K("a",{className:"alt-link",href:a.url,target:"_blank",rel:"noopener noreferrer",children:[b("span",{className:"alt-ico",children:ta.globe}),b("span",{className:"alt-name",children:a.pkg}),K("span",{className:"alt-cdn",children:[a.cdn,a.tag!=="latest"?"@"+a.tag:""]})]},a.url))})]})})}function s2({value:a,onChange:n}){let[t,e]=ia(!1),i=Ia(null);xa(()=>{if(!t)return;let c=(m)=>{if(!i.current?.contains(m.target))e(!1)},o=(m)=>{if(m.key==="Escape")e(!1)};return document.addEventListener("mousedown",c),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",c),document.removeEventListener("keydown",o)}},[t]);let l=Object.entries(Xl),u=Xl[a]||l[0][1];return K("div",{className:"engine-wrap",ref:i,children:[b("button",{type:"button",className:"engine-select",onClick:()=>e((c)=>!c),"aria-haspopup":"listbox","aria-expanded":t,children:u.label}),b("span",{className:"material-symbols-rounded",children:t?"arrow_drop_up":"arrow_drop_down"}),t&&b("div",{className:"m3-menu",role:"listbox",children:l.map(([c,o])=>K("button",{type:"button",role:"option","aria-selected":c===a,className:`m3-menu-item ${c===a?"on":""}`,onClick:()=>{n(c),e(!1)},children:[b("span",{children:o.label}),c===a&&b("span",{className:"material-symbols-rounded",children:"check"})]},c))})]})}var f2={tiktok:{label:"TikTok",url:"https://www.tiktok.com/foryou",domain:"tiktok.com"},youtube:{label:"YouTube Shorts",url:"https://www.youtube.com/shorts",domain:"youtube.com"}};function c1(){let a=document.cookie.match(/(?:^|;\s*)copium-scroll=(tiktok|youtube)/);return a?a[1]:null}function o1(a){document.cookie=`copium-scroll=${a}; max-age=31536000; path=/; SameSite=Lax`}function r1(){let a=Ia(null);return xa(()=>{let n=a.current,t=n.getContext("2d",{desynchronized:!0,alpha:!0}),e=0,i=0,l=[],u=0,c=0,o=-9999,m=-9999,g=null,M=0,f=!0,h=41.666666666666664,w=()=>{g=n.getBoundingClientRect(),e=n.width=Math.ceil(g.width*Math.min(devicePixelRatio,1.25)),i=n.height=Math.ceil(g.height*Math.min(devicePixelRatio,1.25)),t.setTransform(Math.min(devicePixelRatio,1.25),0,0,Math.min(devicePixelRatio,1.25),0,0),l=[];for(let v=7;v<g.height;v+=14)for(let p=7;p<g.width;p+=14)l.push({ox:p,oy:v,x:p,y:v});if(f=!0,!u)u=requestAnimationFrame(d)},Y=(v)=>{if(!g)return;if(o=v.clientX-g.left,m=v.clientY-g.top,f=!0,clearTimeout(M),M=setTimeout(()=>f=!1,700),!u)c=0,u=requestAnimationFrame(d)},S=()=>{o=m=-9999,f=!0,clearTimeout(M),M=setTimeout(()=>f=!1,700)},d=(v)=>{if(u=0,!f)return;if(v-c<h){u=requestAnimationFrame(d);return}c=v,t.clearRect(0,0,g.width,g.height),t.fillStyle="rgba(111,217,174,.32)";for(let p of l){let X=p.ox-o,A=p.oy-m,E=Math.hypot(X,A),{ox:x,oy:R}=p;if(E<120&&E>0){let ve=(1-E/120)*26,he=Math.atan2(A,X);x=p.ox+Math.cos(he)*ve,R=p.oy+Math.sin(he)*ve}p.x+=(x-p.x)*0.14,p.y+=(R-p.y)*0.14;let T=Math.hypot(p.x-p.ox,p.y-p.oy),Ya=1+Math.min(T*0.05,1.6);t.fillRect(p.x-Ya,p.y-Ya,Ya*2,Ya*2)}u=requestAnimationFrame(d)};w();let r=new ResizeObserver(w);return r.observe(n),window.addEventListener("mousemove",Y),window.addEventListener("mouseleave",S),u=requestAnimationFrame(d),()=>{cancelAnimationFrame(u),clearTimeout(M),r.disconnect(),window.removeEventListener("mousemove",Y),window.removeEventListener("mouseleave",S)}},[]),b("canvas",{ref:a,className:"dotgrid","aria-hidden":"true"})}function Hr(){let a=Ca((s)=>{if(!s)return;let N=()=>{s.playbackRate=1,s.play().catch(()=>{})};if(s.readyState>=2)N();s.addEventListener("canplay",N,{once:!0}),s.addEventListener("loadeddata",N,{once:!0})},[]),n=Ia(0),t=(s={})=>({id:++n.current,view:"home",url:"",pageUrl:"",title:"",fromPin:!1,...s}),[e,i]=ia(()=>[t()]),[l,u]=ia(()=>e[0].id),[c,o]=ia(null),m=Ia(new Map),g=Ia({}),[M,f]=ia(()=>At().engine||"duckduckgo"),[h,w]=ia(()=>At()),[Y,S]=ia("boot"),[d,r]=ia(""),[v,p]=ia(!1),[X,A]=ia(null),[E,x]=ia(()=>{try{return localStorage.getItem("acceptance")==="1"}catch{return!1}}),R=Ia(new Map),T=Ia(new Map),[Ya,ve]=ia({canBack:!1,canFwd:!1}),[he,Ur]=ia(!1),Gr=e.find((s)=>s.id===l)||e[0],{view:E6,url:L6,pageUrl:x6,fromPin:d2}=Gr,f1=Gr.title,Tn=(s)=>{let N=T.current.get(s);if(!N)N={hist:{list:[],idx:-1},loading:!1,lastActive:Date.now()},T.current.set(s,N);return N},Wn=(s,N)=>{if(Tn(s).loading=N,s===l)Ur(N)},Ct=Ca((s,N)=>{i((L)=>L.map((B)=>B.id===s?{...B,...N}:B))},[]),El=Ca((s)=>Ct(l,s),[l,Ct]),Zr=(s)=>El({url:s}),Tt=Ca((s=l)=>{let N=Tn(s).hist;ve({canBack:N.idx>0,canFwd:N.idx<N.list.length-1})},[l]);xa(()=>{X6().then(()=>S("ok")).catch((N)=>{S("err"),r(String(N&&N.message?N.message:N))}),w6();let s=()=>S("ok");return window.addEventListener("copium:ctrl-ok",s),()=>window.removeEventListener("copium:ctrl-ok",s)},[]),xa(()=>{let s=(N)=>{if(w(N.detail),N.detail.engine)f(N.detail.engine)};return window.addEventListener("copium:settings",s),()=>window.removeEventListener("copium:settings",s)},[]),xa(()=>{document.title="copium";let s="dark";document.documentElement.dataset.theme=s;let N=document.querySelector("html");if(N)N.dataset.theme=s},[h.theme]),xa(()=>{let s=document.querySelector("html");if(!s)return;s.style.zoom={s:".92",m:"1",l:"1.08"}[h.uiScale]||"1"},[h.uiScale]),xa(()=>{let s=()=>{T.current.forEach((N)=>{N.hist={list:[],idx:-1}}),Tt()};return window.addEventListener("copium:clear-history",s),()=>window.removeEventListener("copium:clear-history",s)},[Tt]),xa(()=>{Tt(),Ur(Tn(l).loading)},[l,Tt]);let m2=Ca((s)=>{w(Pr(s))},[]),at=Ca(async(s,N=!0,L=!1,B=null)=>{let V=B??l;Tn(V).lastActive=Date.now(),o(null),Ct(V,{view:"external",pageUrl:s,url:s,fromPin:L,title:""});let ka=At();if(N&&ka.history!==!1){let fa=Tn(V).hist;if(fa.list[fa.idx]!==s)fa.list=fa.list.slice(0,fa.idx+1),fa.list.push(s),fa.idx=fa.list.length-1;Tt(V)}if(ka.lastPage===!1||s.startsWith("copium:"))localStorage.removeItem("copium-last-url");else localStorage.setItem("copium-last-url",s);Wn(V,!0);try{await(await $6(V,R.current.get(V))).go(s)}catch(fa){Wn(V,!1),console.error("frame go failed",fa)}},[l,Ct,Tt]),S6=Ca(async(s,N=!1)=>{let L=String(s??"").trim();if(L.startsWith("copium://")){let V=L.slice(9).split(/[/?#]/)[0];if(["home","media","scroll","alternatives","settings","accept","tos","privacy"].includes(V)){Pn(V);return}}await w6();let B=i2(s,M);if(B)at(B,!0,N)},[M,at,l]),v2=Ca((s)=>{let N=t();i((V)=>[...V,N]),u(N.id);let L=0,B=()=>{if(R.current.get(N.id))at(s,!0,!1,N.id);else if(++L<40)setTimeout(B,50)};B()},[at]),Qr=(s)=>{let N=e.find((L)=>L.id===s);if(!N||N.hibernated||N.view!=="external"||!N.pageUrl)return;Ct(s,{hibernated:!0,title:""}),Wn(s,!1);try{let L=R.current.get(s);if(L)L.src="about:blank"}catch{}vi.delete(s)},Fr=(s)=>{let N=e.find((L)=>L.id===s);if(!N||!N.hibernated||!N.pageUrl)return;Ct(s,{hibernated:!1}),at(N.pageUrl,!1,!1,s)},[h2,g2]=ia(0),[Ll,jr]=ia({}),p2=(s)=>{if(g2((N)=>N+1),jr((N)=>({...N,[s]:!0})),s==="media"||s==="scroll"){vi.delete(`appframe:${s}`),delete g.current[s];try{let N=m.current.get(s);if(N)N.src="about:blank"}catch{}if(c===s)o(null)}},xl=Ia({});xl.current={showExternal:at,openInNewTab:v2};let b2=Ca((s,N)=>{if(s.defaultPrevented)return;if(s.type==="auxclick"&&s.button!==1)return;let L=s.target&&s.target.closest?s.target.closest("a[href]"):null;if(!L||L.hasAttribute("download"))return;let B=L.getAttribute("href")||"";if(!B||/^javascript:/i.test(B))return;let V=Y6(L.href);if(!V)return;let ka=R.current.get(N),fa=ka&&ka.contentWindow?Y6(ka.contentWindow.location.href):null,Mn=(L.getAttribute("target")||"").toLowerCase(),hi=s.type==="auxclick"||Mn==="_blank"||s.ctrlKey||s.metaKey||s.shiftKey;if(!hi&&fa&&V.split("#")[0]===fa.split("#")[0])return;if(s.preventDefault(),s.stopPropagation(),hi)xl.current.openInNewTab(V);else xl.current.showExternal(V,!0,!1,N)},[]),Jr=Ca((s)=>{let N=Tn(s),L=Date.now();if(L-(N.lastActive||0)>4000)N.lastActive=L},[]),Vr=(s)=>{let N=Tn(l).hist,L=N.idx+s;if(L<0||L>=N.list.length)return;N.idx=L;let B=N.list[N.idx];o(null),El({view:"external",pageUrl:B,url:B,title:""}),Wn(l,!0),$6(l,R.current.get(l)).then((V)=>V.go(B)).catch(()=>Wn(l,!1)),Tt()},M2=()=>Vr(-1),N2=()=>Vr(1),y2=()=>{if(Y==="err"){S("boot"),r(""),X6().then(()=>S("ok")).catch((s)=>{S("err"),r(String(s&&s.message?s.message:s))});return}if(c==="media"||c==="scroll"){try{m.current.get(c)?.contentWindow?.location.reload()}catch{}return}if(c)return;if(E6==="external"&&x6){Wn(l,!0);try{let s=R.current.get(l)?.contentWindow;if(s)s.location.reload();else at(x6,!1)}catch{at(x6,!1)}}},w2=new Set(["media","scroll","alternatives","settings","tos","privacy","accept"]),A6=(s)=>{if(s==="media")return"https://cineby.rocks";if(s==="scroll"){let N=c1();return N&&f2[N]?f2[N].url:null}return null},Pn=(s)=>{if(s==="home"){o(null),El({view:"home",url:"",fromPin:!1,title:""});return}if(w2.has(s)){if(s==="scroll"&&!A6("scroll"))p(!0);o(s);return}o(null),El({view:s,url:`copium://${s}`,fromPin:!1,title:""})},[X2,$2]=ia(0);xa(()=>{if(c!=="media"&&c!=="scroll")return;let s=A6(c);if(!s)return;let N=!!Ll[c];if(Ll[c])jr((L)=>({...L,[c]:!1}));if(!N&&g.current[c]===s)return;setTimeout(()=>{let L=m.current.get(c);if(!L)return;$6(`appframe:${c}`,L).then((B)=>B.go(s)).then(()=>{g.current[c]=s}).catch(()=>{})},0)},[c,X2]),xa(()=>{let s=setInterval(()=>{let N=Date.now();for(let L of e)if(L.view==="external"&&L.pageUrl&&!L.hibernated&&N-Tn(L.id).lastActive>300000)Qr(L.id)},20000);return()=>clearInterval(s)},[e]);let Y2=()=>{if(A6("scroll"))o("scroll");else p(!0)},qr=(s)=>{o1(s),p(!1),$2((N)=>N+1),o("scroll")},E2=(s)=>{s.preventDefault(),S6(L6)},D6=Ca((s={})=>{let N=t(s);i((L)=>[...L,N]),u(N.id)},[]),Sl=(s)=>{let N=e.findIndex((B)=>B.id===s);if(N<0)return;let L=e.filter((B)=>B.id!==s);if(T.current.delete(s),R.current.delete(s),vi.delete(s),L.length===0){let B=t();i([B]),u(B.id);return}if(i(L),s===l)u(L[Math.min(N,L.length-1)].id)},L2=(s)=>{if(e.length<2)return;let L=(e.findIndex((B)=>B.id===l)+s+e.length)%e.length;o(null),u(e[L].id),Fr(e[L].id)};xa(()=>{let s=(N)=>{if(!(N.ctrlKey||N.metaKey))return;let L=N.key.toLowerCase();if(L==="t")N.preventDefault(),D6();else if(L==="w")N.preventDefault(),Sl(l);else if(L==="tab")N.preventDefault(),L2(N.shiftKey?-1:1)};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[l,e,D6]);let K6=(s)=>!E&&s!=="tos"&&s!=="privacy"?"accept":s,fn=K6(c||E6),x2=c?`copium://${c}`:L6,kr=c!=="media"&&c!=="scroll"&&!(fn==="external"&&!he),S2={home:"Home",scroll:"Scroll",alternatives:"Alternatives",settings:"Settings",tos:"Terms of Service",privacy:"Privacy Policy",accept:"Accept ToS/Privacy Policy"},A2={home:ta.home,alternatives:ta.link,settings:ta.settings,tos:ta.doc,privacy:ta.doc,accept:ta.lock},Ir=(s)=>{let N=K6(s.view);return s.title||(["external","media","scroll"].includes(N)&&s.pageUrl?$l(s.pageUrl):"")||S2[N]||"Home"},D2=(s)=>{let N=K6(s.view);return["external","media","scroll"].includes(N)&&s.pageUrl?me($l(s.pageUrl),"tab-fav"):A2[N]||ta.globe};return K("div",{className:"shell",children:[kr&&b("video",{ref:a,className:"bgvid",src:"../../bg/green.mp4",poster:"../../bg/poster.jpg",autoPlay:!0,muted:!0,loop:!0,playsInline:!0}),kr&&b(r1,{}),K("div",{className:"sidebar",children:[b("div",{className:"side-label",children:"Pinned"}),b("div",{className:"pin-grid",children:y6.map((s)=>b("button",{className:"pin",title:s.label,onClick:()=>S6(s.url,!0),children:me(s.domain,"pin-fav")},s.label))}),b("div",{className:"side-label",children:"Apps"}),K("button",{className:`nav-item ${c==="media"?"active":""}${Ll.media?" hibernated":""}`,onClick:()=>Pn("media"),onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"media"})},children:[ta.movie," Media"]}),K("button",{className:`nav-item ${c==="scroll"?"active":""}${Ll.scroll?" hibernated":""}`,onClick:Y2,onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"scroll"})},children:[ta.feed," Scroll"]}),K("button",{className:`nav-item ${c==="alternatives"?"active":""}`,onClick:()=>Pn("alternatives"),onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"alternatives"})},children:[ta.link," Alternatives"]}),K("button",{className:`nav-item ${c==="settings"?"active":""}`,onClick:()=>Pn("settings"),onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"settings"})},children:[ta.settings," Settings"]}),b("div",{className:"side-label",children:"Pages"}),e.map((s)=>K("div",{className:`nav-item tab-item${!c&&s.id===l?" active":""}${s.hibernated?" hibernated":""}`,onClick:()=>{o(null),u(s.id),Tn(s.id).lastActive=Date.now(),Fr(s.id)},onContextMenu:(N)=>{N.preventDefault(),A({x:N.clientX,y:N.clientY,kind:"tab",id:s.id})},onAuxClick:(N)=>{if(N.button===1)N.preventDefault(),Sl(s.id)},title:Ir(s),children:[b("span",{className:"tab-ico",children:D2(s)}),b("span",{className:"nav-item-label",children:Ir(s)}),b("button",{className:"tab-close",onClick:(N)=>{N.stopPropagation(),Sl(s.id)},children:ta.close})]},s.id)),K("button",{className:"nav-item",onClick:()=>{o(null),D6()},children:[ta.plus," New Tab"]})]}),K("div",{className:"main",children:[K("div",{className:"topbar",children:[b("button",{className:"navbtn home-btn",onClick:()=>Pn("home"),disabled:!(E6==="external"&&!d2),title:"Home",children:ta.home}),b("button",{className:"navbtn",onClick:M2,disabled:!Ya.canBack,children:ta.back}),b("button",{className:"navbtn",onClick:N2,disabled:!Ya.canFwd,children:ta.fwd}),b("button",{className:"navbtn"+(he?" loading":""),onClick:y2,title:he?"Loading…":"Reload",children:ta.reload}),K("form",{className:"urlbar",onSubmit:E2,children:[b("span",{className:"lock",children:Y==="ok"?ta.lock:null}),b("input",{value:x2,onChange:(s)=>Zr(s.target.value),placeholder:Y==="err"?"relay offline: "+d:"Search or enter address",spellCheck:"false"})]}),b(s2,{value:M,onChange:(s)=>{f(s),Pr({engine:s})}})]}),K("div",{className:"content",children:[e.map((s)=>{let N=s.view==="external";return b("iframe",{ref:(L)=>{if(L)R.current.set(s.id,L);else R.current.delete(s.id)},title:"tab-"+s.id,onLoad:()=>{Wn(s.id,!1),Jr(s.id);try{let L=R.current.get(s.id),B=L&&L.contentDocument?L.contentDocument:null;if(!B)return;if(B.title)Ct(s.id,{title:B.title});if(!B.__copiumNav){B.__copiumNav=!0;let ka=(Mn)=>b2(Mn,s.id);B.addEventListener("click",ka,!0),B.addEventListener("auxclick",ka,!0);let fa=()=>Jr(s.id);for(let Mn of["mousemove","scroll","keydown","touchstart"])B.addEventListener(Mn,fa,!0)}let V=L.contentWindow;if(V&&!V.__copiumOpen){V.__copiumOpen=!0;let ka=V.open;try{V.open=function(fa){if(fa){let Mn=String(fa);try{let hi=Y6(V.location.href);if(hi&&!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(Mn))Mn=new URL(Mn,hi).href}catch{}return xl.current.openInNewTab(Mn),null}return ka?ka.apply(this,arguments):null}}catch{}}}catch{}},onError:()=>Wn(s.id,!1),"aria-hidden":!(s.id===l&&N&&!c&&fn==="external"),style:{opacity:s.id===l&&N&&!c&&fn==="external"?1:0,pointerEvents:s.id===l&&N&&!c&&fn==="external"?"auto":"none",zIndex:s.id===l&&N&&!c&&fn==="external"?2:0,transition:"opacity .18s ease"}},s.id)}),["media","scroll"].map((s)=>b("iframe",{ref:(N)=>{if(N)m.current.set(s,N);else m.current.delete(s)},title:`app-${s}`,"aria-hidden":c!==s,style:{opacity:c===s?1:0,pointerEvents:c===s?"auto":"none",zIndex:c===s?2:0,transition:"opacity .18s ease"}},s)),fn==="alternatives"&&b(r2,{}),fn==="settings"&&b(c2,{settings:h,update:m2},"set"+h2),fn==="accept"&&b(o2,{onAccept:()=>{try{localStorage.setItem("acceptance","1")}catch{}x(!0),Pn("home")},onOpen:Pn}),fn==="tos"&&b(Rr,{kind:"tos",onBack:()=>Pn(E?"home":"accept")}),fn==="privacy"&&b(Rr,{kind:"privacy",onBack:()=>Pn(E?"home":"accept")}),fn==="home"&&b("div",{className:"home",children:b(u2,{url:L6,setUrl:Zr,openExternal:S6,settings:h})})]})]}),X&&b("div",{className:"ctx-overlay",onClick:()=>A(null),onContextMenu:(s)=>{s.preventDefault(),A(null)},children:K("div",{className:"ctx-menu",style:{left:Math.min(X.x,window.innerWidth-180),top:Math.min(X.y,window.innerHeight-140)},onClick:(s)=>s.stopPropagation(),children:[X.kind==="tab"&&(()=>{let s=e.find((N)=>N.id===X.id);return K(fi,{children:[s&&s.view==="external"&&s.pageUrl&&!s.hibernated&&b("button",{className:"ctx-item",onClick:()=>{Qr(X.id),A(null)},children:"Hibernate"}),b("button",{className:"ctx-item",onClick:()=>{Sl(X.id),A(null)},children:"Close tab"})]})})(),X.kind==="app"&&b("button",{className:"ctx-item",onClick:()=>{p2(X.v),A(null)},children:"Hibernate"})]})}),v&&b("div",{className:"pick-overlay",onClick:()=>p(!1),children:K("div",{className:"pick-dialog",onClick:(s)=>s.stopPropagation(),children:[b("div",{className:"pick-dialog-title",children:"Pick your scroll feed"}),K("button",{className:"pick-os",onClick:()=>qr("tiktok"),children:[b("span",{className:"pick-os-icon",children:me("tiktok.com")}),b("span",{className:"pick-os-label",children:"TikTok"})]}),K("button",{className:"pick-os",onClick:()=>qr("youtube"),children:[b("span",{className:"pick-os-icon",children:me("youtube.com")}),b("span",{className:"pick-os-label",children:"YouTube Shorts"})]}),b("div",{className:"scroll-hint",children:"this choice is saved as a cookie. clear site data to pick again."})]})})]})}var s1=document.getElementById("root")||document.body;Tr(s1).render(b(Hr,{}));
74
+ `}};function u2({url:a,setUrl:n,openExternal:t,settings:e}){let[i]=ia(()=>{try{return localStorage.getItem("copium-last-url")||""}catch{return""}});return K("div",{className:"ntp",children:[b("div",{className:"ntp-logo",children:b("span",{className:"ntp-name",children:"copium"})}),K("form",{className:"ntp-search",onSubmit:(l)=>{l.preventDefault(),t(a||"https://www.google.com")},children:[ta.search,b("input",{placeholder:"Search the web",value:a,onChange:(l)=>n(l.target.value)})]}),e.lastPage!==!1&&i&&K("button",{className:"ntp-last",onClick:()=>t(i),children:[b("span",{className:"material-symbols-rounded",children:"history"}),b("span",{children:$l(i)})]}),(!e||e.shortcuts!==!1)&&b("div",{className:"shortcuts",children:y6.map((l)=>b("button",{className:"shortcut",onClick:()=>t(l.url,!0),title:l.label,children:b("span",{className:"ic",children:me(l.domain)})},l.label))})]})}function Yl({on:a,onClick:n}){return b("button",{className:"m3-switch"+(a?" on":""),role:"switch","aria-checked":!!a,onClick:n,children:b("span",{className:"knob"})})}var l1=[{id:"general",label:"General"},{id:"browsing",label:"Browsing"},{id:"privacy",label:"Privacy"}];function Kt({icon:a,title:n,desc:t,trail:e}){return K("div",{className:"set-row",children:[b("span",{className:"lead",children:b("span",{className:"material-symbols-rounded",style:{fontSize:20},children:a})}),K("span",{className:"txt",children:[b("span",{className:"t",children:n}),b("span",{className:"d",style:{display:"block"},children:t})]}),b("span",{className:"trail",children:e})]})}function c2({settings:a,update:n}){let[t,e]=ia("general"),i=(c,o)=>{if(a.confirmClear!==!1&&!window.confirm(c))return;o()},l=()=>{try{localStorage.removeItem("copium-last-url")}catch{}window.dispatchEvent(new CustomEvent("copium:clear-history"))},u=()=>{try{localStorage.clear()}catch{}location.reload()};return b("div",{className:"page-wrap",children:K("div",{className:"set-wrap",children:[K("div",{className:"set-card",children:[K("div",{className:"set-head",children:[b("h1",{children:"Settings"}),b("p",{children:"copium shell. everything saves locally, promise."})]}),b("div",{className:"set-tabs",children:l1.map((c)=>b("button",{className:"set-tab"+(t===c.id?" on":""),onClick:()=>e(c.id),children:c.label},c.id))})]}),t==="general"&&b("div",{className:"set-card",children:K("div",{className:"set-group",children:[b(Kt,{icon:"lock",title:"Always use HTTPS",desc:"Upgrades plain http links",trail:b(Yl,{on:a.https!==!1,onClick:()=>n({https:a.https===!1})})}),b(Kt,{icon:"apps",title:"Show shortcuts",desc:"Shortcut grid on the new tab page",trail:b(Yl,{on:a.shortcuts!==!1,onClick:()=>n({shortcuts:a.shortcuts===!1})})}),b(Kt,{icon:"restore",title:"Reopen last page",desc:"Shows a shortcut to your last site",trail:b(Yl,{on:a.lastPage!==!1,onClick:()=>n({lastPage:a.lastPage===!1})})})]})}),t==="browsing"&&K(fi,{children:[b("div",{className:"set-card",children:b("div",{className:"set-group",children:b(Kt,{icon:"history",title:"Remember history",desc:"Keeps back and forward working",trail:b(Yl,{on:a.history!==!1,onClick:()=>n({history:a.history===!1})})})})}),b("div",{className:"set-card",children:b("div",{className:"set-group",children:b(Kt,{icon:"density_medium",title:"Interface size",desc:"Scales the whole shell up or down",trail:b("span",{className:"m3-seg",children:[["s","S"],["m","M"],["l","L"]].map(([c,o])=>b("button",{className:a.uiScale===c||!a.uiScale&&c==="m"?"on":"",onClick:()=>n({uiScale:c}),children:o},c))})})})})]}),t==="privacy"&&K(fi,{children:[b("div",{className:"set-card",children:b("div",{className:"set-group",children:b(Kt,{icon:"verified_user",title:"Ask before clearing",desc:"Confirms before wiping history or data",trail:b(Yl,{on:a.confirmClear!==!1,onClick:()=>n({confirmClear:a.confirmClear===!1})})})})}),b("div",{className:"set-card",children:K("div",{className:"set-group",children:[b(Kt,{icon:"history",title:"Clear browsing history",desc:"Back/forward list and last page link",trail:b("button",{className:"m3-btn-danger",onClick:()=>i("Clear browsing history?",l),children:"Clear"})}),b(Kt,{icon:"delete",title:"Clear all local data",desc:"Settings and preferences",trail:b("button",{className:"m3-btn-danger",onClick:()=>i("Wipe everything and reload?",u),children:"Clear"})})]})})]})]})})}function o2({onAccept:a,onOpen:n}){return b("div",{className:"page-wrap",children:K("div",{className:"legal-card",children:[b("h2",{children:"Welcome to copium"}),K("div",{className:"legal-body",children:[K("p",{className:"legal-intro",children:["by continuing you agree to our"," ",b("button",{className:"legal-link",onClick:()=>n("tos"),children:"Terms of Service"})," ","and"," ",b("button",{className:"legal-link",onClick:()=>n("privacy"),children:"Privacy Policy"}),"."]}),b("p",{className:"legal-cookies",children:"This site uses cookies to keep your settings and remember your session."})]}),b("button",{className:"m3-btn legal-accept",onClick:a,children:"Accept"})]})})}function Rr({kind:a,onBack:n}){let t=zr[a]||zr.tos;return b("div",{className:"page-wrap",children:K("div",{className:"legal-doc",children:[K("div",{className:"legal-doc-head",children:[b("button",{className:"legal-back",onClick:n,title:"Back",children:ta.back}),b("h1",{children:t.title})]}),K("div",{className:"legal-doc-sub",children:["effective ",l2]}),b("div",{className:"legal-doc-body",dangerouslySetInnerHTML:{__html:t.body}})]})})}var u1=[{pkg:"verifi-lib-js",cdn:"jsdelivr",tag:"2.1.3",url:"https://cdn.jsdelivr.net/npm/verifi-lib-js@2.1.3/assets/logos/verifi-lib-js-backup.svg"},{pkg:"verifi-lib-js",cdn:"unpkg",tag:"2.1.3",url:"https://unpkg.com/verifi-lib-js@2.1.3/assets/logos/verifi-lib-js-backup.svg"},{pkg:"slug-lib-js",cdn:"jsdelivr",tag:"2.1.3",url:"https://cdn.jsdelivr.net/npm/slug-lib-js@2.1.3/assets/logos/slug-lib-js-backup.svg"},{pkg:"slug-lib-js",cdn:"unpkg",tag:"2.1.3",url:"https://unpkg.com/slug-lib-js@2.1.3/assets/logos/slug-lib-js-backup.svg"},{pkg:"bit-byte-bit",cdn:"jsdelivr",tag:"2.1.3",url:"https://cdn.jsdelivr.net/npm/bit-byte-bit@2.1.3/assets/logos/bit-byte-bit-backup.svg"},{pkg:"bit-byte-bit",cdn:"unpkg",tag:"2.1.3",url:"https://unpkg.com/bit-byte-bit@2.1.3/assets/logos/bit-byte-bit-backup.svg"},{pkg:"uniform-js-lib",cdn:"jsdelivr",tag:"2.1.3",url:"https://cdn.jsdelivr.net/npm/uniform-js-lib@2.1.3/assets/logos/uniform-js-lib-backup.svg"},{pkg:"uniform-js-lib",cdn:"unpkg",tag:"2.1.3",url:"https://unpkg.com/uniform-js-lib@2.1.3/assets/logos/uniform-js-lib-backup.svg"},{pkg:"lumen-lib",cdn:"jsdelivr",tag:"2.1.3",url:"https://cdn.jsdelivr.net/npm/lumen-lib@2.1.3/assets/logos/lumen-backup.svg"},{pkg:"lumen-lib",cdn:"unpkg",tag:"2.1.3",url:"https://unpkg.com/lumen-lib@2.1.3/assets/logos/lumen-backup.svg"}];function r2(){return b("div",{className:"alt-page",children:K("div",{className:"alt-card",children:[b("h1",{className:"alt-title",children:"Alternatives"}),b("p",{className:"alt-sub",children:"other copium hosts. each link opens in a separate browser tab."}),b("div",{className:"alt-list",children:u1.map((a)=>K("a",{className:"alt-link",href:a.url,target:"_blank",rel:"noopener noreferrer",children:[b("span",{className:"alt-ico",children:ta.globe}),b("span",{className:"alt-name",children:a.pkg}),K("span",{className:"alt-cdn",children:[a.cdn,a.tag!=="latest"?"@"+a.tag:""]})]},a.url))})]})})}function s2({value:a,onChange:n}){let[t,e]=ia(!1),i=Ia(null);xa(()=>{if(!t)return;let c=(m)=>{if(!i.current?.contains(m.target))e(!1)},o=(m)=>{if(m.key==="Escape")e(!1)};return document.addEventListener("mousedown",c),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",c),document.removeEventListener("keydown",o)}},[t]);let l=Object.entries(Xl),u=Xl[a]||l[0][1];return K("div",{className:"engine-wrap",ref:i,children:[b("button",{type:"button",className:"engine-select",onClick:()=>e((c)=>!c),"aria-haspopup":"listbox","aria-expanded":t,children:u.label}),b("span",{className:"material-symbols-rounded",children:t?"arrow_drop_up":"arrow_drop_down"}),t&&b("div",{className:"m3-menu",role:"listbox",children:l.map(([c,o])=>K("button",{type:"button",role:"option","aria-selected":c===a,className:`m3-menu-item ${c===a?"on":""}`,onClick:()=>{n(c),e(!1)},children:[b("span",{children:o.label}),c===a&&b("span",{className:"material-symbols-rounded",children:"check"})]},c))})]})}var f2={tiktok:{label:"TikTok",url:"https://www.tiktok.com/foryou",domain:"tiktok.com"},youtube:{label:"YouTube Shorts",url:"https://www.youtube.com/shorts",domain:"youtube.com"}};function c1(){let a=document.cookie.match(/(?:^|;\s*)copium-scroll=(tiktok|youtube)/);return a?a[1]:null}function o1(a){document.cookie=`copium-scroll=${a}; max-age=31536000; path=/; SameSite=Lax`}function r1(){let a=Ia(null);return xa(()=>{let n=a.current,t=n.getContext("2d",{desynchronized:!0,alpha:!0}),e=0,i=0,l=[],u=0,c=0,o=-9999,m=-9999,g=null,M=0,f=!0,h=41.666666666666664,w=()=>{g=n.getBoundingClientRect(),e=n.width=Math.ceil(g.width*Math.min(devicePixelRatio,1.25)),i=n.height=Math.ceil(g.height*Math.min(devicePixelRatio,1.25)),t.setTransform(Math.min(devicePixelRatio,1.25),0,0,Math.min(devicePixelRatio,1.25),0,0),l=[];for(let v=7;v<g.height;v+=14)for(let p=7;p<g.width;p+=14)l.push({ox:p,oy:v,x:p,y:v});if(f=!0,!u)u=requestAnimationFrame(d)},Y=(v)=>{if(!g)return;if(o=v.clientX-g.left,m=v.clientY-g.top,f=!0,clearTimeout(M),M=setTimeout(()=>f=!1,700),!u)c=0,u=requestAnimationFrame(d)},S=()=>{o=m=-9999,f=!0,clearTimeout(M),M=setTimeout(()=>f=!1,700)},d=(v)=>{if(u=0,!f)return;if(v-c<h){u=requestAnimationFrame(d);return}c=v,t.clearRect(0,0,g.width,g.height),t.fillStyle="rgba(111,217,174,.32)";for(let p of l){let X=p.ox-o,A=p.oy-m,E=Math.hypot(X,A),{ox:x,oy:R}=p;if(E<120&&E>0){let ve=(1-E/120)*26,he=Math.atan2(A,X);x=p.ox+Math.cos(he)*ve,R=p.oy+Math.sin(he)*ve}p.x+=(x-p.x)*0.14,p.y+=(R-p.y)*0.14;let T=Math.hypot(p.x-p.ox,p.y-p.oy),Ya=1+Math.min(T*0.05,1.6);t.fillRect(p.x-Ya,p.y-Ya,Ya*2,Ya*2)}u=requestAnimationFrame(d)};w();let r=new ResizeObserver(w);return r.observe(n),window.addEventListener("mousemove",Y),window.addEventListener("mouseleave",S),u=requestAnimationFrame(d),()=>{cancelAnimationFrame(u),clearTimeout(M),r.disconnect(),window.removeEventListener("mousemove",Y),window.removeEventListener("mouseleave",S)}},[]),b("canvas",{ref:a,className:"dotgrid","aria-hidden":"true"})}function Hr(){let a=Ca((s)=>{if(!s)return;let N=()=>{s.playbackRate=1,s.play().catch(()=>{})};if(s.readyState>=2)N();s.addEventListener("canplay",N,{once:!0}),s.addEventListener("loadeddata",N,{once:!0})},[]),n=Ia(0),t=(s={})=>({id:++n.current,view:"home",url:"",pageUrl:"",title:"",fromPin:!1,...s}),[e,i]=ia(()=>[t()]),[l,u]=ia(()=>e[0].id),[c,o]=ia(null),m=Ia(new Map),g=Ia({}),[M,f]=ia(()=>At().engine||"duckduckgo"),[h,w]=ia(()=>At()),[Y,S]=ia("boot"),[d,r]=ia(""),[v,p]=ia(!1),[X,A]=ia(null),[E,x]=ia(()=>{try{return localStorage.getItem("acceptance")==="1"}catch{return!1}}),R=Ia(new Map),T=Ia(new Map),[Ya,ve]=ia({canBack:!1,canFwd:!1}),[he,Ur]=ia(!1),Gr=e.find((s)=>s.id===l)||e[0],{view:E6,url:L6,pageUrl:x6,fromPin:d2}=Gr,f1=Gr.title,Tn=(s)=>{let N=T.current.get(s);if(!N)N={hist:{list:[],idx:-1},loading:!1,lastActive:Date.now()},T.current.set(s,N);return N},Wn=(s,N)=>{if(Tn(s).loading=N,s===l)Ur(N)},Ct=Ca((s,N)=>{i((L)=>L.map((B)=>B.id===s?{...B,...N}:B))},[]),El=Ca((s)=>Ct(l,s),[l,Ct]),Zr=(s)=>El({url:s}),Tt=Ca((s=l)=>{let N=Tn(s).hist;ve({canBack:N.idx>0,canFwd:N.idx<N.list.length-1})},[l]);xa(()=>{X6().then(()=>S("ok")).catch((N)=>{S("err"),r(String(N&&N.message?N.message:N))}),w6();let s=()=>S("ok");return window.addEventListener("copium:ctrl-ok",s),()=>window.removeEventListener("copium:ctrl-ok",s)},[]),xa(()=>{let s=(N)=>{if(w(N.detail),N.detail.engine)f(N.detail.engine)};return window.addEventListener("copium:settings",s),()=>window.removeEventListener("copium:settings",s)},[]),xa(()=>{document.title="copium";let s="dark";document.documentElement.dataset.theme=s;let N=document.querySelector("html");if(N)N.dataset.theme=s},[h.theme]),xa(()=>{let s=document.querySelector("html");if(!s)return;s.style.zoom={s:".92",m:"1",l:"1.08"}[h.uiScale]||"1"},[h.uiScale]),xa(()=>{let s=()=>{T.current.forEach((N)=>{N.hist={list:[],idx:-1}}),Tt()};return window.addEventListener("copium:clear-history",s),()=>window.removeEventListener("copium:clear-history",s)},[Tt]),xa(()=>{Tt(),Ur(Tn(l).loading)},[l,Tt]);let m2=Ca((s)=>{w(Pr(s))},[]),at=Ca(async(s,N=!0,L=!1,B=null)=>{let V=B??l;Tn(V).lastActive=Date.now(),o(null),Ct(V,{view:"external",pageUrl:s,url:s,fromPin:L,title:""});let ka=At();if(N&&ka.history!==!1){let fa=Tn(V).hist;if(fa.list[fa.idx]!==s)fa.list=fa.list.slice(0,fa.idx+1),fa.list.push(s),fa.idx=fa.list.length-1;Tt(V)}if(ka.lastPage===!1||s.startsWith("copium:"))localStorage.removeItem("copium-last-url");else localStorage.setItem("copium-last-url",s);Wn(V,!0);try{await(await $6(V,R.current.get(V))).go(s)}catch(fa){Wn(V,!1),console.error("frame go failed",fa)}},[l,Ct,Tt]),S6=Ca(async(s,N=!1)=>{let L=String(s??"").trim();if(L.startsWith("copium://")){let V=L.slice(9).split(/[/?#]/)[0];if(["home","media","scroll","alternatives","settings","accept","tos","privacy"].includes(V)){Pn(V);return}}await w6();let B=i2(s,M);if(B)at(B,!0,N)},[M,at,l]),v2=Ca((s)=>{let N=t();i((V)=>[...V,N]),u(N.id);let L=0,B=()=>{if(R.current.get(N.id))at(s,!0,!1,N.id);else if(++L<40)setTimeout(B,50)};B()},[at]),Qr=(s)=>{let N=e.find((L)=>L.id===s);if(!N||N.hibernated||N.view!=="external"||!N.pageUrl)return;Ct(s,{hibernated:!0,title:""}),Wn(s,!1);try{let L=R.current.get(s);if(L)L.src="about:blank"}catch{}vi.delete(s)},Fr=(s)=>{let N=e.find((L)=>L.id===s);if(!N||!N.hibernated||!N.pageUrl)return;Ct(s,{hibernated:!1}),at(N.pageUrl,!1,!1,s)},[h2,g2]=ia(0),[Ll,jr]=ia({}),p2=(s)=>{if(g2((N)=>N+1),jr((N)=>({...N,[s]:!0})),s==="media"||s==="scroll"){vi.delete(`appframe:${s}`),delete g.current[s];try{let N=m.current.get(s);if(N)N.src="about:blank"}catch{}if(c===s)o(null)}},xl=Ia({});xl.current={showExternal:at,openInNewTab:v2};let b2=Ca((s,N)=>{if(s.defaultPrevented)return;if(s.type==="auxclick"&&s.button!==1)return;let L=s.target&&s.target.closest?s.target.closest("a[href]"):null;if(!L||L.hasAttribute("download"))return;let B=L.getAttribute("href")||"";if(!B||/^javascript:/i.test(B))return;let V=Y6(L.href);if(!V)return;let ka=R.current.get(N),fa=ka&&ka.contentWindow?Y6(ka.contentWindow.location.href):null,Mn=(L.getAttribute("target")||"").toLowerCase(),hi=s.type==="auxclick"||Mn==="_blank"||s.ctrlKey||s.metaKey||s.shiftKey;if(!hi&&fa&&V.split("#")[0]===fa.split("#")[0])return;if(s.preventDefault(),s.stopPropagation(),hi)xl.current.openInNewTab(V);else xl.current.showExternal(V,!0,!1,N)},[]),Jr=Ca((s)=>{let N=Tn(s),L=Date.now();if(L-(N.lastActive||0)>4000)N.lastActive=L},[]),Vr=(s)=>{let N=Tn(l).hist,L=N.idx+s;if(L<0||L>=N.list.length)return;N.idx=L;let B=N.list[N.idx];o(null),El({view:"external",pageUrl:B,url:B,title:""}),Wn(l,!0),$6(l,R.current.get(l)).then((V)=>V.go(B)).catch(()=>Wn(l,!1)),Tt()},M2=()=>Vr(-1),N2=()=>Vr(1),y2=()=>{if(Y==="err"){S("boot"),r(""),X6().then(()=>S("ok")).catch((s)=>{S("err"),r(String(s&&s.message?s.message:s))});return}if(c==="media"||c==="scroll"){try{m.current.get(c)?.contentWindow?.location.reload()}catch{}return}if(c)return;if(E6==="external"&&x6){Wn(l,!0);try{let s=R.current.get(l)?.contentWindow;if(s)s.location.reload();else at(x6,!1)}catch{at(x6,!1)}}},w2=new Set(["media","scroll","alternatives","settings","tos","privacy","accept"]),A6=(s)=>{if(s==="media")return"https://cineby.rocks";if(s==="scroll"){let N=c1();return N&&f2[N]?f2[N].url:null}return null},Pn=(s)=>{if(s==="home"){o(null),El({view:"home",url:"",fromPin:!1,title:""});return}if(w2.has(s)){if(s==="scroll"&&!A6("scroll"))p(!0);o(s);return}o(null),El({view:s,url:`copium://${s}`,fromPin:!1,title:""})},[X2,$2]=ia(0);xa(()=>{if(c!=="media"&&c!=="scroll")return;let s=A6(c);if(!s)return;let N=!!Ll[c];if(Ll[c])jr((L)=>({...L,[c]:!1}));if(!N&&g.current[c]===s)return;setTimeout(()=>{let L=m.current.get(c);if(!L)return;$6(`appframe:${c}`,L).then((B)=>B.go(s)).then(()=>{g.current[c]=s}).catch(()=>{})},0)},[c,X2]),xa(()=>{let s=setInterval(()=>{let N=Date.now();for(let L of e)if(L.view==="external"&&L.pageUrl&&!L.hibernated&&N-Tn(L.id).lastActive>300000)Qr(L.id)},20000);return()=>clearInterval(s)},[e]);let Y2=()=>{if(A6("scroll"))o("scroll");else p(!0)},qr=(s)=>{o1(s),p(!1),$2((N)=>N+1),o("scroll")},E2=(s)=>{s.preventDefault(),S6(L6)},D6=Ca((s={})=>{let N=t(s);i((L)=>[...L,N]),u(N.id)},[]),Sl=(s)=>{let N=e.findIndex((B)=>B.id===s);if(N<0)return;let L=e.filter((B)=>B.id!==s);if(T.current.delete(s),R.current.delete(s),vi.delete(s),L.length===0){let B=t();i([B]),u(B.id);return}if(i(L),s===l)u(L[Math.min(N,L.length-1)].id)},L2=(s)=>{if(e.length<2)return;let L=(e.findIndex((B)=>B.id===l)+s+e.length)%e.length;o(null),u(e[L].id),Fr(e[L].id)};xa(()=>{let s=(N)=>{if(!(N.ctrlKey||N.metaKey))return;let L=N.key.toLowerCase();if(L==="t")N.preventDefault(),D6();else if(L==="w")N.preventDefault(),Sl(l);else if(L==="tab")N.preventDefault(),L2(N.shiftKey?-1:1)};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[l,e,D6]);let K6=(s)=>!E&&s!=="tos"&&s!=="privacy"?"accept":s,fn=K6(c||E6),x2=c?`copium://${c}`:L6,kr=c!=="media"&&c!=="scroll"&&!(fn==="external"&&!he),S2={home:"Home",scroll:"Scroll",alternatives:"Alternatives",settings:"Settings",tos:"Terms of Service",privacy:"Privacy Policy",accept:"Accept ToS/Privacy Policy"},A2={home:ta.home,alternatives:ta.link,settings:ta.settings,tos:ta.doc,privacy:ta.doc,accept:ta.lock},Ir=(s)=>{let N=K6(s.view);return s.title||(["external","media","scroll"].includes(N)&&s.pageUrl?$l(s.pageUrl):"")||S2[N]||"Home"},D2=(s)=>{let N=K6(s.view);return["external","media","scroll"].includes(N)&&s.pageUrl?me($l(s.pageUrl),"tab-fav"):A2[N]||ta.globe};return K("div",{className:"shell",children:[kr&&b("video",{ref:a,className:"bgvid",src:"../../bg/green.mp4",poster:"../../bg/poster.jpg",autoPlay:!0,muted:!0,loop:!0,playsInline:!0}),kr&&b(r1,{}),K("div",{className:"sidebar",children:[b("div",{className:"side-label",children:"Pinned"}),b("div",{className:"pin-grid",children:y6.map((s)=>b("button",{className:"pin",title:s.label,onClick:()=>S6(s.url,!0),children:me(s.domain,"pin-fav")},s.label))}),b("div",{className:"side-label",children:"Apps"}),K("button",{className:`nav-item ${c==="media"?"active":""}${Ll.media?" hibernated":""}`,onClick:()=>Pn("media"),onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"media"})},children:[ta.movie," Media"]}),K("button",{className:`nav-item ${c==="scroll"?"active":""}${Ll.scroll?" hibernated":""}`,onClick:Y2,onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"scroll"})},children:[ta.feed," Scroll"]}),K("button",{className:`nav-item ${c==="alternatives"?"active":""}`,onClick:()=>Pn("alternatives"),onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"alternatives"})},children:[ta.link," Alternatives"]}),K("button",{className:`nav-item ${c==="settings"?"active":""}`,onClick:()=>Pn("settings"),onContextMenu:(s)=>{s.preventDefault(),A({x:s.clientX,y:s.clientY,kind:"app",v:"settings"})},children:[ta.settings," Settings"]}),b("div",{className:"side-label",children:"Pages"}),e.map((s)=>K("div",{className:`nav-item tab-item${!c&&s.id===l?" active":""}${s.hibernated?" hibernated":""}`,onClick:()=>{o(null),u(s.id),Tn(s.id).lastActive=Date.now(),Fr(s.id)},onContextMenu:(N)=>{N.preventDefault(),A({x:N.clientX,y:N.clientY,kind:"tab",id:s.id})},onAuxClick:(N)=>{if(N.button===1)N.preventDefault(),Sl(s.id)},title:Ir(s),children:[b("span",{className:"tab-ico",children:D2(s)}),b("span",{className:"nav-item-label",children:Ir(s)}),b("button",{className:"tab-close",onClick:(N)=>{N.stopPropagation(),Sl(s.id)},children:ta.close})]},s.id)),K("button",{className:"nav-item",onClick:()=>{o(null),D6()},children:[ta.plus," New Tab"]})]}),K("div",{className:"main",children:[K("div",{className:"topbar",children:[b("button",{className:"navbtn home-btn",onClick:()=>Pn("home"),disabled:!(E6==="external"&&!d2),title:"Home",children:ta.home}),b("button",{className:"navbtn",onClick:M2,disabled:!Ya.canBack,children:ta.back}),b("button",{className:"navbtn",onClick:N2,disabled:!Ya.canFwd,children:ta.fwd}),b("button",{className:"navbtn"+(he?" loading":""),onClick:y2,title:he?"Loading…":"Reload",children:ta.reload}),K("form",{className:"urlbar",onSubmit:E2,children:[b("span",{className:"lock",children:Y==="ok"?ta.lock:null}),b("input",{value:x2,onChange:(s)=>Zr(s.target.value),placeholder:Y==="err"?"relay offline: "+d:"Search or enter address",spellCheck:"false"})]}),b(s2,{value:M,onChange:(s)=>{f(s),Pr({engine:s})}})]}),K("div",{className:"content",children:[e.map((s)=>{let N=s.view==="external";return b("iframe",{ref:(L)=>{if(L)R.current.set(s.id,L);else R.current.delete(s.id)},title:"tab-"+s.id,onLoad:()=>{Wn(s.id,!1),Jr(s.id);try{let L=R.current.get(s.id),B=L&&L.contentDocument?L.contentDocument:null;if(!B)return;if(B.title)Ct(s.id,{title:B.title});if(!B.__copiumNav){B.__copiumNav=!0;let ka=(Mn)=>b2(Mn,s.id);B.addEventListener("click",ka,!0),B.addEventListener("auxclick",ka,!0);let fa=()=>Jr(s.id);for(let Mn of["mousemove","scroll","keydown","touchstart"])B.addEventListener(Mn,fa,!0)}let V=L.contentWindow;if(V&&!V.__copiumOpen){V.__copiumOpen=!0;let ka=V.open;try{V.open=function(fa){if(fa){let Mn=String(fa);try{let hi=Y6(V.location.href);if(hi&&!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(Mn))Mn=new URL(Mn,hi).href}catch{}return xl.current.openInNewTab(Mn),null}return ka?ka.apply(this,arguments):null}}catch{}}}catch{}},onError:()=>Wn(s.id,!1),"aria-hidden":!(s.id===l&&N&&!c&&fn==="external"),style:{opacity:s.id===l&&N&&!c&&fn==="external"?1:0,pointerEvents:s.id===l&&N&&!c&&fn==="external"?"auto":"none",zIndex:s.id===l&&N&&!c&&fn==="external"?2:0,transition:"opacity .18s ease"}},s.id)}),["media","scroll"].map((s)=>b("iframe",{ref:(N)=>{if(N)m.current.set(s,N);else m.current.delete(s)},title:`app-${s}`,"aria-hidden":c!==s,style:{opacity:c===s?1:0,pointerEvents:c===s?"auto":"none",zIndex:c===s?2:0,transition:"opacity .18s ease"}},s)),fn==="alternatives"&&b(r2,{}),fn==="settings"&&b(c2,{settings:h,update:m2},"set"+h2),fn==="accept"&&b(o2,{onAccept:()=>{try{localStorage.setItem("acceptance","1")}catch{}x(!0),Pn("home")},onOpen:Pn}),fn==="tos"&&b(Rr,{kind:"tos",onBack:()=>Pn(E?"home":"accept")}),fn==="privacy"&&b(Rr,{kind:"privacy",onBack:()=>Pn(E?"home":"accept")}),fn==="home"&&b("div",{className:"home",children:b(u2,{url:L6,setUrl:Zr,openExternal:S6,settings:h})})]})]}),X&&b("div",{className:"ctx-overlay",onClick:()=>A(null),onContextMenu:(s)=>{s.preventDefault(),A(null)},children:K("div",{className:"ctx-menu",style:{left:Math.min(X.x,window.innerWidth-180),top:Math.min(X.y,window.innerHeight-140)},onClick:(s)=>s.stopPropagation(),children:[X.kind==="tab"&&(()=>{let s=e.find((N)=>N.id===X.id);return K(fi,{children:[s&&s.view==="external"&&s.pageUrl&&!s.hibernated&&b("button",{className:"ctx-item",onClick:()=>{Qr(X.id),A(null)},children:"Hibernate"}),b("button",{className:"ctx-item",onClick:()=>{Sl(X.id),A(null)},children:"Close tab"})]})})(),X.kind==="app"&&b("button",{className:"ctx-item",onClick:()=>{p2(X.v),A(null)},children:"Hibernate"})]})}),v&&b("div",{className:"pick-overlay",onClick:()=>p(!1),children:K("div",{className:"pick-dialog",onClick:(s)=>s.stopPropagation(),children:[b("div",{className:"pick-dialog-title",children:"Pick your scroll feed"}),K("button",{className:"pick-os",onClick:()=>qr("tiktok"),children:[b("span",{className:"pick-os-icon",children:me("tiktok.com")}),b("span",{className:"pick-os-label",children:"TikTok"})]}),K("button",{className:"pick-os",onClick:()=>qr("youtube"),children:[b("span",{className:"pick-os-icon",children:me("youtube.com")}),b("span",{className:"pick-os-label",children:"YouTube Shorts"})]}),b("div",{className:"scroll-hint",children:"this choice is saved as a cookie. clear site data to pick again."})]})})]})}var s1=document.getElementById("root")||document.body;Tr(s1).render(b(Hr,{}));
@@ -16,7 +16,7 @@
16
16
  <path d="M9 23V9h3.2l4.6 8.4V9H20v14h-3.2l-4.6-8.4V23H9z" fill="#6fd9ae"/>
17
17
  </svg>
18
18
  <span class="brand-name">slug-lib-js</span>
19
- <span class="ver">v2.1.2</span>
19
+ <span class="ver">v2.1.3</span>
20
20
  </a>
21
21
  <nav class="top-nav">
22
22
  <a href="#features">Features</a>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slug-lib-js",
3
- "version": "2.1.2",
3
+ "version": "2.1.3",
4
4
  "description": "Small, dependency-free slug and URL-safe string utilities.",
5
5
  "main": "index.cjs",
6
6
  "types": "index.d.ts",