PageSourceSearch

https://www.denisyurchak.com/_next/static/chunks/app/anki/page-5176a237a2b4e359.js

js denisyurchak.com collected 2026-10-07 22:24:23 UTC 10,923 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[448],{54382:(e,t,r)=>{Promise.resolve().then(r.bind(r,97360)),Promise.resolve().then(r.bind(r,41030)),Promise.resolve().then(r.t.bind(r,48173,23))},97360:(e,t,r)=>{"use strict";r.d(t,{default:()=>g});var a=r(95155),n=r(48173),o=r.n(n),l=r(12115),s=r(13970);function i(e){return!!e&&e.replace(/<[^>]*>|&nbsp;|\s/g,"").length>0}function c(e,t,r){return(function(e,t){let r=/\{\{([#^])([^{}]+?)\}\}((?:(?!\{\{[#^])[\s\S])*?)\{\{\/\2\}\}/;for(;;){let a=r.exec(e);if(!a)return e;let[n,o,l,s]=a,c=i(t[l.trim()]),d=("#"===o?c:!c)?s:"";e=e.slice(0,a.index)+d+e.slice(a.index+n.length)}})(e,t).replace(/\{\{([^{}]+)\}\}/g,(e,a)=>{var n;if("FrontSide"===(a=a.trim()))return null!=r?r:"";if("Tags"===a)return"";let o=a.split(":"),l=o[o.length-1].trim(),s=o.slice(0,-1).map(e=>e.trim());if(s.some(e=>e.startsWith("type")))return"";let i=null!==(n=t[l])&&void 0!==n?n:"";return s.includes("text")&&(i=i.replace(/<[^>]*>/g,"")),i})}let d=/\[sound:([^\]]+)\]/g;function u(e){let t=[];return{html:e.replace(d,(e,r)=>(t.push(r),'<button class="anki-sound" data-audio="'.concat(r,'" aria-label="Play audio">&#9654;</button>'))),sounds:t}}var m=r(73551);let f={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",svg:"image/svg+xml",webp:"image/webp",mp3:"audio/mpeg",ogg:"audio/ogg",wav:"audio/wav",m4a:"audio/mp4"};async function h(e){var t,a,n,o,l,s,h,g;let[{default:p},b]=await Promise.all([r.e(670).then(r.t.bind(r,10670,23)),r.e(755).then(r.t.bind(r,61755,23)).then(e=>e.default)]),x=await p.loadAsync(e),v=null!==(t=x.file("collection.anki21"))&&void 0!==t?t:x.file("collection.anki2");if(!v)throw Error("This .apkg uses the new Anki export format. In Anki, export again with “Support older Anki versions” checked.");let k=new(await b({locateFile:()=>"/sql-wasm.wasm"})).Database(await v.async("uint8array"));try{let t=JSON.parse(k.exec("select models from col")[0].values[0][0]),r=[],p=new Map,b=[],v=k.exec("select c.id, c.ord, n.mid, n.flds from cards c join notes n on n.id = c.nid order by c.due, c.id");for(let[e,s,m,f]of null!==(n=null===(a=v[0])||void 0===a?void 0:a.values)&&void 0!==n?n:[]){let a=t[String(m)];if(!a)continue;let n=a.tmpls[s];if(!n)continue;let h=String(f).split("\x1f"),g={};a.flds.forEach((e,t)=>{var r;return g[e.name]=null!==(r=h[t])&&void 0!==r?r:""});let x=c(n.qfmt,g);if(!i(x.replace(d,"")))continue;let v=c(n.afmt,g,x),k=u(x),w=u(v),y=null!==(o=a.css)&&void 0!==o?o:"",j=p.get(y);void 0===j&&(j=r.length,p.set(y,j),r.push(y)),b.push({id:Number(e),front:k.html,back:w.html,style:j,autoplay:null!==(l=w.sounds.find(e=>!k.sounds.includes(e)))&&void 0!==l?l:null})}if(0===b.length)throw Error("No cards found in this .apkg.");let w=new Map,y=x.file("media");if(y){let e=JSON.parse(await y.async("string"));for(let[t,r]of Object.entries(e)){let e=x.file(t);if(!e)continue;let a=null!==(h=null===(s=r.split(".").pop())||void 0===s?void 0:s.toLowerCase())&&void 0!==h?h:"";w.set(r,new Blob([await e.async("uint8array")],{type:null!==(g=f[a])&&void 0!==g?g:"application/octet-stream"}))}}let j=e.name.replace(/\.apkg$/i,"").replace(/[_+]/g," ").trim(),N="u-".concat(j.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,40)||"deck","-").concat(b[0].id.toString(36));return await (0,m._P)({id:N,name:j,styles:r,cards:b},w),{id:N,name:j}}finally{k.close()}}function g(){let[e,t]=(0,l.useState)([]),[r,n]=(0,l.useState)(!1),[i,c]=(0,l.useState)(null),d=(0,l.useRef)(null),u=(0,l.useCallback)(()=>{(0,m.eO)().then(t).catch(()=>{})},[]);(0,l.useEffect)(u,[u]);let f=async e=>{n(!0),c(null);try{try{var t,r;null===(r=navigator.storage)||void 0===r||null===(t=r.persist)||void 0===t||t.call(r)}catch(e){}await h(e),u()}catch(e){c(e instanceof Error?e.message:"Import failed.")}finally{n(!1)}};return(0,a.jsxs)("div",{children:[e.length>0&&(0,a.jsx)("ul",{className:"space-y-3 mb-6",children:e.map(e=>(0,a.jsxs)("li",{className:"flex items-center gap-3 rounded-xl border border-border bg-muted/30 px-5 py-4",children:[(0,a.jsxs)(o(),{href:"/anki/".concat(e.id),className:"flex-1 min-w-0 group",children:[(0,a.jsx)("span",{className:"block font-semibold text-foreground group-hover:text-accent transition-colors truncate",children:e.name}),(0,a.jsxs)("span",{className:"text-sm text-muted-foreground",children:[e.count," cards"]})]}),(0,a.jsx)("button",{onClick:()=>{confirm('Delete "'.concat(e.name,'" from this browser?'))&&(0,m.od)(e.id).then(u)},className:"p-2 text-muted-foreground hover:text-foreground transition-colors","aria-label":"Delete ".concat(e.name),children:(0,a.jsx)(s.qbC,{size:13})})]},e.id))}),(0,a.jsxs)("button",{onClick:()=>{var e;return null===(e=d.current)||void 0===e?void 0:e.click()},disabled:r,className:"inline-flex items-center gap-2 px-5 py-3 rounded-xl border border-border bg-muted/50 text-foreground font-semibold hover:bg-muted transition-colors disabled:opacity-50",children:[(0,a.jsx)(s.HVe,{size:14}),r?"Importing…":"Add a deck (.apkg)"]}),(0,a.jsx)("input",{ref:d,type:"file",accept:".apkg",className:"hidden",onChange:e=>{var t;let r=null===(t=e.target.files)||void 0===t?void 0:t[0];r&&f(r),e.target.value=""}}),i&&(0,a.jsx)("p",{className:"mt-3 text-sm text-red-500",children:i}),(0,a.jsx)("p",{className:"mt-3 text-sm text-muted-foreground",children:"Decks you add stay in your browser only — nothing is uploaded. Cloze decks aren't supported yet."})]})}},73551:(e,t,r)=>{"use strict";function a(){return new Promise((e,t)=>
1{let r=indexedDB.open("anki-user-decks",1);r.onupgradeneeded=()=>{let e=r.result;e.createObjectStore("decks",{keyPath:"id"}),e.createObjectStore("media",{keyPath:["deckId","name"]})},r.onsuccess=()=>e(r.result),r.onerror=()=>t(r.error)})}function n(e){return new Promise((t,r)=>{e.oncomplete=()=>t(),e.onerror=()=>r(e.error),e.onabort=()=>r(e.error)})}function o(e){return new Promise((t,r)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>r(e.error)})}async function l(){let e=await a();try{return(await o(e.transaction("decks").objectStore("decks").getAll())).map(e=>({id:e.id,name:e.name,count:e.cards.length}))}finally{e.close()}}async function s(e){let t=await a();try{var r;return null!==(r=await o(t.transaction("decks").objectStore("decks").get(e)))&&void 0!==r?r:null}finally{t.close()}}async function i(e){let t=await a();try{let r=await o(t.transaction("media").objectStore("media").getAll(IDBKeyRange.bound([e,""],[e,"ï¿¿"])));return new Map(r.map(e=>[e.name,e.blob]))}finally{t.close()}}async function c(e,t){let r=await a();try{let a=r.transaction(["decks","media"],"readwrite");a.objectStore("decks").put(e);let o=a.objectStore("media");for(let[r,a]of t)o.put({deckId:e.id,name:r,blob:a});await n(a)}finally{r.close()}}async function d(e){let t=await a();try{let r=t.transaction(["decks","media"],"readwrite");r.objectStore("decks").delete(e),r.objectStore("media").delete(IDBKeyRange.bound([e,""],[e,"ï¿¿"])),await n(r)}finally{t.close()}}r.d(t,{Zo:()=>s,_P:()=>c,b4:()=>i,eO:()=>l,od:()=>d})},41030:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var a=r(95155),n=r(12115),o=r(48173),l=r.n(o),s=r(76046),i=r(11536);function c(){let[e,t]=(0,n.useState)(!1),[r,o]=(0,n.useState)(!1);return((0,n.useEffect)(()=>{o(!0);let e=localStorage.getItem("theme"),r=window.matchMedia("(prefers-color-scheme: dark)").matches,a="dark"===e||!e&&r;t(a),a?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[]),r)?(0,a.jsx)("button",{onClick:()=>{let r=!e;t(r),r?(document.documentElement.classList.add("dark"),localStorage.setItem("theme","dark"),console.log("Switched to dark theme")):(document.documentElement.classList.remove("dark"),localStorage.setItem("theme","light"),console.log("Switched to light theme"))},className:"p-2 rounded-lg bg-muted/50 hover:bg-muted border border-border ","aria-label":"Toggle theme",children:(0,a.jsx)("svg",{className:"w-5 h-5 text-foreground",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e?(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"}):(0,a.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})})}):(0,a.jsx)("div",{className:"p-2 rounded-lg bg-muted/50 border border-border",children:(0,a.jsx)("div",{className:"w-5 h-5"})})}function d(){let[e,t]=(0,n.useState)(!1),[r,o]=(0,n.useState)(!1),d="/"===(0,s.usePathname)();(0,n.useEffect)(()=>{let e=()=>{t(window.scrollY>20)};return window.addEventListener("scroll",e),()=>window.removeEventListener("scroll",e)},[]);let u=()=>{o(!1)},m=[{href:"#about",label:"About"},{href:"#projects",label:"Products"},{href:"#media",label:"Media"},{href:"/blog",label:"Blog"},{href:"/consulting",label:"Consulting"}];return(0,a.jsx)("nav",{className:"fixed top-0 left-0 right-0 z-50 transition-all duration-300 ".concat(e?"bg-background/80 backdrop-blur-md border-b border-border":"bg-transparent"),children:(0,a.jsxs)("div",{className:"max-w-4xl mx-auto px-6",children:[(0,a.jsxs)("div",{className:"flex items-center gap-6 h-20 ".concat(d?"justify-end":"justify-between"),children:[!d&&(0,a.jsxs)(l(),{href:"/",className:"inline-flex items-center gap-2 whitespace-nowrap text-muted-foreground hover:text-foreground transition-colors font-medium",children:[(0,a.jsx)(i.QVr,{size:13}),"Back home"]}),(0,a.jsxs)("div",{className:"hidden md:flex flex-wrap justify-end items-center gap-x-5 gap-y-1",children:[m.map(e=>(0,a.jsx)("a",{href:e.href.startsWith("#")?d?e.href:"/".concat(e.href):e.href,className:"text-foreground hover:text-accent transition-colors duration-200 font-medium",onClick:u,children:e.label},e.href)),(0,a.jsx)(c,{})]}),(0,a.jsxs)("div",{className:"flex md:hidden items-center gap-4",children:[(0,a.jsx)(c,{}),(0,a.jsx)("button",{onClick:()=>{o(!r)},className:"p-2 text-foreground hover:text-accent transition-colors","aria-label":"Toggle mobile menu",children:r?(0,a.jsx)(i.QCr,{size:20}):(0,a.jsx)(i.OXb,{size:20})})]})]}),(0,a.jsx)("div",{className:"md:hidden absolute top-full left-0 right-0 z-[100] bg-background border-b border-border shadow-2xl overflow-y-auto transition-all duration-300 ease-in-out ".concat(r?"max-h-[calc(100dvh-5rem)] opacity-100":"max-h-0 opacity-0 border-b-0"),children:(0,a.jsx)("div",{className:"px-6 py-4 space-y-4 text-right",children:m.map(e=>(0,a.jsx)("a",{href:e.href.startsWith("#")?d?e.href:"/".concat(e.href):e.href,className:"block text-foreground hover:text-accent transition-colors duration-200 font-medium py-2",onClick:u,children:e.label},e.href))})})]})})}},76046:(e,t,r)=>{"use strict";var a=r(66658);r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}})}},e=>{var t=t=>e(e.s=t);e.O(0,[711,446,7,441,517,358],()=>t(54382)),_N_E=e.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.