PageSourceSearch

https://dancingvinyl.com/_next/static/chunks/5454-5bcec6f9d1970c7a.js

js dancingvinyl.com collected 2026-10-06 04:36:33 UTC 26,483 bytes, 1 lines download raw bytes

1!function(){try{var e="u">typeof window?window:"u">typeof global?global:"u">typeof globalThis?globalThis:"u">typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="3ef25217-b014-4a8f-8247-51dfff36bb98",e._sentryDebugIdIdentifier="sentry-dbid-3ef25217-b014-4a8f-8247-51dfff36bb98")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5454],{8223:(e,t,r)=>{r.d(t,{Z:()=>o,n:()=>d});var s=r(73424),i=r(17948),a=r(73705),n=r(99260);let l="dv_web_guest_wishlist_ids",c=(0,i.createContext)(null);function u(e){return[...new Set(e.map(e=>Math.trunc(Number(e))).filter(e=>Number.isFinite(e)&&e>0))]}function o({children:e}){let t=(0,a.As)(),[r,o]=(0,i.useState)([]),[d,h]=(0,i.useState)(!0),f=(0,i.useCallback)(async()=>{if(!t.token)return[];let e=await fetch("/api/account/wishlist",{cache:"no-store"}),r=await e.json();if(!e.ok)throw Error(r.error||`HTTP ${e.status}`);return u(r.ids||[])},[t.token]),p=(0,i.useCallback)(async()=>{h(!0);try{t.isAuthenticated&&t.token?o(await f()):o(function(){try{let e=(0,n.l5)(l);if(!e)return[];let t=JSON.parse(e);if(!Array.isArray(t))return[];return u(t)}catch{return[]}}())}finally{h(!1)}},[t.isAuthenticated,t.token,f]);(0,i.useEffect)(()=>{p()},[p]);let m=(0,i.useCallback)(async e=>{let s=Math.trunc(Number(e));if(!Number.isFinite(s)||s<=0)return!1;if(t.isAuthenticated&&t.token){let e=await fetch("/api/account/wishlist",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({itemId:s})}),t=await e.json();if(!e.ok)throw Error(t.error||`HTTP ${e.status}`);
1let r=!!t.wanted;return o(u(t.ids||[])),r}let i=u(r.includes(s)?r.filter(e=>e!==s):[...r,s]);return o(i),(0,n.$e)(l,JSON.stringify(i)),i.includes(s)},[t.isAuthenticated,t.token,r]),g=(0,i.useMemo)(()=>({ids:r,count:r.length,isLoading:d,toggle:m,has:e=>r.includes(e),refresh:p}),[r,d,m,p]);return(0,s.jsx)(c.Provider,{value:g,children:e})}function d(){let e=(0,i.useContext)(c);if(!e)throw Error("useWishlist must be used within WishlistProvider");return e}},30447:(e,t,r)=>{r.d(t,{p:()=>n});var s=r(73424),i=r(13476);let a={default:"border-[var(--border-soft)] bg-[var(--surface-soft)] text-[var(--text-primary)] focus-visible:border-[var(--brand)]",search:"border-transparent bg-transparent text-[var(--text-primary)] focus-visible:border-transparent focus-visible:ring-0 focus-visible:ring-offset-0",invalid:"border-[var(--state-danger-border)] bg-[var(--surface-card)] text-[var(--text-primary)] focus-visible:border-[var(--state-danger-text)]"};function n({variant:e="default",className:t,...r}){return(0,s.jsx)("input",{className:(0,i.cn)("h-11 w-full rounded-[var(--radius-field)] border px-3 text-sm outline-none transition-[border-color,box-shadow] duration-[var(--duration-fast)] placeholder:text-[var(--text-secondary)] focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)] focus-visible:ring-offset-1",a[e],t),...r})}},62471:(e,t,r)=>{r.d(t,{d:()=>
1l,t:()=>n});var s=r(73424),i=r(17948);let a=(0,i.createContext)(null);function n({children:e}){let[t,r]=(0,i.useState)([]),n=(0,i.useRef)(0),l=(0,i.useCallback)(e=>{r(t=>t.filter(t=>t.id!==e))},[]),c=(0,i.useCallback)((e,t="info")=>{let s=String(e||"").trim();if(!s)return;let i=++n.current;r(e=>[...e.slice(-2),{id:i,tone:t,message:s}]),window.setTimeout(()=>l(i),2800)},[l]),u=(0,i.useMemo)(()=>({show:c,success:e=>c(e,"success"),error:e=>c(e,"error"),info:e=>c(e,"info")}),[c]);return(0,s.jsxs)(a.Provider,{value:u,children:[e,(0,s.jsx)("div",{className:"dv-toasts",role:"status","aria-live":"polite","aria-atomic":"false",children:t.map(e=>(0,s.jsx)("div",{className:`dv-toast rounded-lg border px-3.5 py-2.5 text-sm font-medium shadow-[var(--shadow-soft)] ${"success"===e.tone?"border-[var(--state-success-border)] bg-[var(--state-success-bg)] text-[var(--state-success-text)]":"error"===e.tone?"border-[var(--state-danger-border)] bg-[var(--state-danger-bg)] text-[var(--state-danger-text)]":"border-[var(--state-info-border)] bg-[var(--state-info-bg)] text-[var(--state-info-text)]"}`,children:e.message},e.id))})]})}function l(){let e=(0,i.useContext)(a);if(!e)throw Error("useToast must be used within ToastProvider");return e}},68200:(e,t,r)=>{r.d(t,{w:()=>y,_:()=>w});var s=r(73424),i=r(17948),a=r(86985),n=r(86537),l=r(30447),c=r(73705),u=r(62958),o=r(8223);let d=()=>({target:null,snapshot:null,intent:{},busy:!1,message:"",needsRead:!1,createPending:!1}),h=e=>e.trim().replace(/\s+/g," ").toLocaleLowerCase();class f{constructor(e,t=()=>!0){this.adapter=e,this.active=t,this.state=d(),this.listeners=new Set,this.revision=0,this.createAttempt=null,this.getSnapshot=()=>this.state,this.subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.dispose=()=>{this.revision++},this.close=()=>{this.state.busy||(this.revision++,this.createAttempt=null,this.state=d(),this.listeners.forEach(e=>e()))},this.selected=e=>this.state.intent[e]??!!this.state.snapshot?.selected.includes(e),this.restriction=e=>{if(e.unavailable)return"gone";let t=!!this.state.snapshot?.selected.includes(e.id);return"chart"!==e.kind?"":!t&&e.count>=20?"full":t&&"PUBLISHED"===e.status&&e.count<=1?"last":""},this.toggle=e=>{let t=this.state.snapshot?.rows.find(t=>t.id===e);if(!t||this.state.busy||this.state.needsRead||this.restriction(t)&&!Object.hasOwn(this.state.intent,e))return;let r=!this.selected(e),s={...this.state.intent};r===this.state.snapshot.selected.includes(e)?delete s[e]:s[e]=r,this.update({intent:s})},this.open=async e=>{if(this.state.busy||!this.active())return;let t=++this.revision;this.createAttempt=null,this.update({...d(),target:e,busy:!0});try{let r=await this.adapter.read(e.itemId);this.current(t)&&this.accept(r)}catch{this.current(t)&&this.update({message:"loadFailed",needsRead:!0})}finally{this.current(t)&&this.update({busy:!1})}},this.refresh=async()=>{if(!this.state.target||this.state.busy||!this.active())return;let e=this.revision,t=this.state.target.itemId;this.update({busy:!0});try{let r=await this.adapter.read(t);if(!this.current(e))return;this.accept(r),this.update({message:this.createAttempt?"createUnknown":Object.keys(this.state.intent).length?"partial":""})}catch{this.current(e)&&this.unknown()}finally{this.current(e)&&this.update({busy:!1})}},this.save=async()=>{if(!this.state.target||this.state.busy||!this.active())return;if(this.state.needsRead||this.state.createPending)return void await this.refresh();let e=this.revision,t=this.state.target.itemId,r={...this.state.intent};this.update({busy:!0,message:""});try{let s=await this.adapter.read(t);if(!this.current(e))return;for(let[i,a]of(this.accept(s),Object.entries(r))){if(!this.current(e))return;if(s.selected.includes(i)===a)continue;let r=s.rows.find(e=>e.id===i);if(!r||this.restriction(r))break;try{await this.adapter.write(i,t,a)}catch{break}}if(!this.current(e))return;let i=await this.adapter.read(t);if(!this.current(e))return;this.accept(i),Object.keys(this.state.intent).length?this.update({message:"partial"}):(this.update({busy:!1}),this.close())}catch{this.current(e)&&this.unknown()}finally{this.current(e)&&this.update({busy:!1})}},this.createAndAdd=async e=>{let t;if(!(e=e.trim().replace(/\s+/g," "))||!this.state.target||!this.state.snapshot||this.state.busy||this.state.needsRead||this.createAttempt||!this.active())return;if(this.state.snapshot.rows.some(t=>"custom"===t.kind&&h(t.name)===h(e)))return void this.update({message:"createFailed"});let r=this.revision,s=this.state.target.itemId;this.createAttempt={name:e,before:this.state.snapshot.rows.map(e=>e.id)},this.update({busy:!0,message:""});try{let i=await this.adapter.create(e);if(!this.current(r))return;t=i.id,this.createAttempt.id=i.id,this.update({intent:{...this.state.intent,[i.id]:!0}});try{await this.adapter.write(i.id,s,!0)}catch{}}catch{}if(this.current(r))try{let e=await this.adapter.read(s);if(!this.current(r))return;this.accept(e),this.update({message:this.createAttempt?"createUnknown":t&&e.selected.includes(t)?"created":"partial"})}catch{this.current(r)&&(this.update({createPending:!0}),this.unknown())}finally{this.current(r)&&this.update({busy:!1})}}}update(e){this.state={...this.state,...e}
1,this.listeners.forEach(e=>e())}current(e){return this.active()&&e===this.revision}accept(e){let t={...this.state.intent};for(let[r,s]of Object.entries(t))e.selected.includes(r)===s&&delete t[r];if(this.createAttempt){let r=this.createAttempt,s=e.rows.find(e=>"custom"===e.kind&&(r.id?e.id===r.id:!r.before.includes(e.id)&&h(e.name)===h(r.name)));s&&(e.selected.includes(s.id)||(t[s.id]=!0),this.createAttempt=null)}let r=(this.state.snapshot?.rows||[]).filter(r=>!0===t[r.id]&&!e.rows.some(e=>e.id===r.id)).map(e=>({...e,unavailable:!0}));e={...e,rows:[...e.rows,...r]},this.update({snapshot:e,intent:t,needsRead:!1,createPending:!!this.createAttempt}),this.adapter.confirmed(this.state.target.itemId,e)}unknown(){this.update({needsRead:!0,message:"unknown"}),this.adapter.uncertain(this.state.target.itemId)}}let p=(0,i.createContext)(null);async function m(e,t,r=t?"POST":"GET"){let s=await fetch(e,{method:r,cache:"no-store",...t?{headers:{"content-type":"application/json"},body:JSON.stringify(t)}:{}}),i=await s.json();if(!s.ok)throw Error(i.error||`HTTP ${s.status}`);return i}async function g(e){let[t,r,s]=await Promise.all([m("/api/account/saved-lists"),m(`/api/account/saved-lists/memberships?itemId=${e}`),m(`/api/account/dj-charts/memberships?itemId=${e}`)]);return{rows:[...t.lists.filter(e=>"custom"===e.kind||"system_wishlist"===e.kind).map(e=>({id:e.id,name:e.name,count:e.count,kind:"custom"===e.kind?"custom":"wishlist"})),...(s.enabled?s.charts:[]).filter(e=>"ARCHIVED"!==e.status).map(e=>({id:"dj-chart:"+e.id,name:e.title,count:e.itemCount,kind:"chart",status:e.status}))],selected:[...r.listIds.filter(e=>!e.startsWith("dj-chart:")&&!e.includes("order-request")&&"system:purchased"!==e),...(s.enabled&&s.memberships[String(e)]||[]).map(e=>"dj-chart:"+e)]}}async function b(e,t,r){return"system:wishlist"===e?m("/api/account/wishlist",{itemId:t,wanted:r}):e.startsWith("dj-chart:")?m("/api/account/dj-charts/memberships",{chartId:e.slice(9),itemId:t,action:r?"add":"remove"}):r?m(`/api/account/saved-lists/${encodeURIComponent(e)}/items`,{itemId:t}):m(`/api/account/saved-lists/${encodeURIComponent(e)}/items/${t}`,void 0,"DELETE")}class v{constructor(e){this.enabled=e,this.active=!0,this.isActive=()=>this.enabled&&this.active,this.activate=()=>{this.active=!0},this.deactivate=()=>{this.active=!1}}}function y({children:e}){let t=(0,c.As)(),{t:r}=(0,u.o)(),d=(0,o.n)(),h=t.isAuthenticated&&!t.isPreview?t.user?.id:void 0,y=(0,i.useRef)(h),[w,x]=(0,i.useState)({}),[k,E]=(0,i.useState)(h),[P,j]=(0,i.useState)(""),[S,C]=(0,i.useState)(!1),[A,I]=(0,i.useState)(!1),N=(0,i.useRef)(0),_=(0,i.useRef)(new Set),L=(0,i.useRef)(w),M=(0,i.useRef)(d.refresh),T=(0,i.useMemo)(()=>new v(!!h),[h]);(0,i.useLayoutEffect)(()=>{y.current=h,L.current=k===h?w:{},M.current=d.refresh},[h,k,w,d.refresh]),(0,i.useLayoutEffect)(()=>(T.activate(),T.deactivate),[T]);let R=(0,i.useMemo)(()=>new f({read:g,write:b,create:async e=>(await m("/api/account/saved-lists",{name:e})).list,confirmed:(e,t)=>{N.current++,x(r=>({...r,[e]:t.selected})),M.current().catch(()=>{})},uncertain:e=>{N.current++,x(t=>{let r={...t};return delete r[e],r})}},T.isActive),[T]),O=(0,i.useSyncExternalStore)(R.subscribe,R.getSnapshot,R.getSnapshot);(0,i.useEffect)(()=>(x({}),E(h),N.current++,_.current=new Set,I(!1),j(""),C(!1),R.dispose),[R,h]);let $=e=>{if(!h)return;let t=[...new Set(e.map(Number).filter(e=>e>0&&!L.current[e]&&!_.current.has(e)))];if(!t.length)return;let r=_.current,s=N.current;t.forEach(e=>r.add(e)),m("/api/account/saved-lists/memberships/batch",{itemIds:t}).then(e=>{y.current===h&&s===N.current&&x(r=>{let s={...r};for(let r of t)s[r]||(s[r]=e.memberships?.[String(r)]||[]);return s})}).catch(()=>{}).finally(()=>{t.forEach(e=>r.delete(e))})};return(0,s.jsxs)(p.Provider,{value:{open:e=>{if(!O.busy&&!t.isPreview){if(!h)return void I(!0);j(""),C(!1),R.open(e)}},prefetch:e=>$([e]),prefetchMany:$,hasAny:e=>!!h&&k===h&&!!w[e]?.length},children:[e,(0,s.jsx)(a.l,{open:!!O.target||A,onClose:()=>{R.close(),O.busy||I(!1)},title:r("listPicker.title"),className:"dv-account-dialog",children:A?(0,s.jsx)("p",{children:r("listDesign.login")}):(0,s.jsxs)(s.Fragment,{children:[O.target?.title?(0,s.jsx)("p",{className:"text-sm text-slate-500",children:O.target.title}):null,O.busy?(0,s.jsx)("p",{role:"status",className:"text-sm",children:r("common.loading","Loading...")}):null,O.message?(0,s.jsx)("div",{role:"status",className:"rounded-lg bg-slate-50 p-3 text-sm",children:r("listPicker."+O.message)}):null,O.snapshot?(0,s.jsx)("div",{className:"space-y-2",children:O.snapshot.rows.map(e=>{let t=R.restriction(e),i=R.selected(e.id),a=Object.hasOwn(O.intent,e.id);return(0,s.jsxs)("label",{className:"flex min-h-12 items-center gap-3 rounded-lg border border-slate-200 px-3 py-3",children:[(0,s.jsxs)("span",{className:"min-w-0 flex-1 break-words",children:[(0,s.jsx)("strong",{className:"text-sm",children:"wishlist"===e.kind?r("listDesign.wantlist"):e.name}),(0,s.jsxs)("small",{className:"mt-1 block text-slate-500",children:["chart"===e.kind?`${r("listPicker."+("PUBLISHED"===e.status?"published":"draft"))} \xb7 ${e.count}/20`:r("listDesign.itemsCount",void 0,{count:e.count}),a?` \xb7 ${r("listPicker.pending")}`:""]}),t?(0,s.jsx)("small",{className:"block text-slate-500",children:r("listPicker."+t)}):null]}),(0,s.jsx)("input",{type:"checkbox",className:"h-5 w-5 accent-[var(--brand)]","aria-label":"wishlist"===e.kind?r("listDesign.wantlist"):e.name,checked:i,disabled:O.busy||O.needsRead||!!(t&&!a),onChange:()=>R.toggle(e.id)})]},e.id)})}):null,O.needsRead||O.createPending?(0,s.jsx)(n.$,{variant:"secondary",disabled:O.busy,onClick:()=>void R.refresh(),children:r("listPicker.check")}):null,!O.snapshot||O.needsRead||O.createPending?null:(0,s.jsx)("div",{className:"space-y-3 border-t border-slate-200 pt-4",children:S?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("label",{className:"grid gap-2 text-sm",children:[r("listDesign.name"),(0,s.jsx)(l.p,{value:P,disabled:O.busy,onChange:e=>j(e.target.value)})]}),(0,s.jsx)("p",{className:"text-xs text-slate-500",children:r("listPicker.createHelp")}),(0,s.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,s.jsx)(n.$,{variant:"secondary",disabled:O.busy,onClick:()=>C(!1),children:r("common.cancel","Cancel")}),(0,s.jsx)(n.$,{disabled:O.busy||!P.trim(),onClick:()=>void R.createAndAdd(P),children:r("listPicker.create")})]})]}):(0,s.jsxs)(n.$,{variant:"ghost",disabled:O.busy,onClick:()=>C(!0),children:["+ ",r("listDesign.new")]})}),(0,s.jsx)(n.$,{className:"w-full",disabled:O.busy||!O.snapshot||O.needsRead||O.createPending,onClick:()=>void R.save(),children:r("listPicker.done")})]})})]})}function w(){let e=(0,i.useContext)(p);if(!e)throw Error("useSaveToList must be used within SaveToListProvider");return e}},73359:(e,t,r)=>{r.d(t,{KX:()=>n,PO:()=>s,Pc:()=>i,pk:()=>
1a,sB:()=>l});class s{constructor(e,t){this.read=t,this.listeners=new Set,this.revision=0,this.active=!0,this.getSnapshot=()=>this.state,this.subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),this.activate=()=>{this.active=!0},this.dispose=()=>{this.active=!1,this.revision++},this.refresh=async()=>{if(!this.active||this.state.pending)return;let e=++this.revision;this.update({loading:!0});try{let t=await this.read();this.current(e)&&this.update({data:t,ready:!0,error:!1,version:this.state.version+1})}catch{this.current(e)&&this.update({error:!0,ready:!1})}finally{this.current(e)&&this.update({loading:!1})}},this.mutate=async(e,t)=>{if(!this.active||this.state.pending||this.state.loading||!this.state.ready||this.state.error)throw Error("refresh-required");let r=++this.revision;this.update({pending:!0});try{let s=await this.read();if(!this.current(r))throw Error("owner-changed");if(this.update({data:s}),!t(s))try{await e(s)}catch{}if(!this.current(r))throw Error("owner-changed");let i=await this.read();if(!this.current(r))throw Error("owner-changed");if(this.update({data:i,version:this.state.version+1}),!t(i))throw Error("unconfirmed");this.update({error:!1,ready:!0})}catch(e){throw this.current(r)&&this.update({error:!0,ready:!1}),e}finally{this.current(r)&&this.update({pending:!1})}},this.state={data:e,loading:!1,pending:!1,error:!1,ready:!1,version:0}}update(e){this.state={...this.state,...e},this.listeners.forEach(e=>e())}current(e){return this.active&&e===this.revision}}let i=e=>e.trim().replace(/\s+/g," "),a=(e,t,r)=>e["artist"===t?"artists":"labels"].some(e=>i(e).toLowerCase()===i(r).toLowerCase());function n(e){if(!Array.isArray(e.artists)||!Array.isArray(e.labels))throw Error("invalid-follow-state");let t=e=>[...new Map(e.map(i).filter(Boolean).map(e=>[e.toLowerCase(),e])).values()];return{artists:t(e.artists.map(e=>e.artistName||"")),labels:t(e.labels.map(e=>e.labelName||""))}}function l(e){if(!Array.isArray(e.itemIds))throw Error("invalid-alert-state");return[...new Set(e.itemIds.map(Number).filter(e=>Number.isInteger(e)&&e>0))]}},86246:(e,t,r)=>{r.d(t,{a:()=>o,r:()=>d});var s=r(73424),i=r(62958),a=r(17948),n=r(73705),l=r(73359);let c=(0,a.createContext)(null);async function u(e){let t=await fetch("/api/account/stock-alerts",{cache:"no-store",...e?{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)}:{}});if(!t.ok)throw Error("stock-alert-request");return t.json()}function o({children:e}){let{t}=(0,i.o)(),r=(0,n.As)(),o=r.isAuthenticated?`${r.isPreview?"preview:":""}${r.user?.id}`:null,d=(0,a.useMemo)(()=>new l.PO([],async()=>o?(0,l.sB)(await u()):[]),[o]),h=(0,a.useSyncExternalStore)(d.subscribe,d.getSnapshot,d.getSnapshot);(0,a.useLayoutEffect)(()=>(d.activate(),d.dispose),[d]),(0,a.useEffect)(()=>{r.isBootstrapping||d.refresh()},[d,r.isBootstrapping]);let f=async(e,s)=>{if(!o)throw Error(t("eng.stockLogin","Sign in to manage stock alerts."));if(r.isPreview||!Number.isInteger(e)||e<=0)throw Error(t("eng.error","Could not confirm the change. Refresh and try again."));let i=!1;if(h.error)throw await d.refresh(),Error(t("eng.error","Could not confirm the change. Refresh and try again."));try{await d.mutate(async()=>{i=!!(await u({itemId:e,subscribe:s})).alreadyAvailable},t=>t.includes(e)===(!i&&s))}catch{throw Error(t("eng.error","Could not confirm the change. Refresh and try again."))}return i?"already_available":s?"subscribed":"unsubscribed"};return(0,s.jsx)(c.Provider,{value:{itemIds:h.data,isSyncing:r.isBootstrapping||h.loading,pending:h.pending,error:h.error,refresh:d.refresh,unsubscribe:async e=>{await f(e,!1)},isSubscribed:e=>h.data.includes(e),toggle:e=>f(e,!h.data.includes(e)),unsubscribeAll:async()=>{if(!o)throw Error(t("eng.stockLogin","Sign in to manage stock alerts."));if(r.isPreview)throw Error(t("eng.error","Could not confirm the change. Refresh and try again."));let e=0;return await d.mutate(async()=>{e=Number((await u({unsubscribeAll:!0})).canceled||0)},e=>0===e.length),e}},children:e})}function d(){let e=(0,a.useContext)(c);if(!e)throw Error("useStockAlerts must be used within StockAlertProvider");return e}},86985:(e,t,r)=>{r.d(t,{l:()=>n});var s=r(73424),i=r(17948),a=r(62958);function n({open:e,onClose:t,title:r,children:n,className:l=""}){let c=(0,i.useRef)(null),u=(0,i.useId)(),{t:o}=(0,a.o)();return(0,i.useEffect)(()=>{let t=c.current;if(!t||!e)return;let r=document.activeElement;return t.showModal(),()=>{t.close(),r?.focus()}},[e]),(0,s.jsxs)("dialog",{ref:c,"aria-labelledby":u,className:`dv-dialog ${l}`,onCancel:e=>{e.preventDefault(),t()},onClick:e=>{if(e.target!==e.currentTarget)return;let r=e.currentTarget.getBoundingClientRect();(e.clientX<r.left||e.clientX>
1r.right||e.clientY<r.top||e.clientY>r.bottom)&&t()},children:[(0,s.jsxs)("div",{className:"flex items-center justify-between gap-4 border-b border-[var(--border-soft)] px-5 py-4 sm:px-7",children:[(0,s.jsx)("h2",{id:u,className:"text-xl font-semibold",children:r}),(0,s.jsx)("button",{type:"button",onClick:t,"aria-label":o("common.close","Close"),className:"h-10 w-10 rounded-full bg-[var(--surface-soft)] text-xl",children:"\xd7"})]}),(0,s.jsx)("div",{className:"space-y-6 p-5 sm:p-7",children:n})]})}},95095:(e,t,r)=>{r.d(t,{F:()=>h,J:()=>d});var s=r(73424),i=r(17948),a=r(18961),n=r(1668);let l={currentTrack:null,queue:[],currentIndex:-1,isPlaying:!1,isLoading:!1,durationMs:null,positionMs:0,error:null},c=(0,i.createContext)(null);function u(e){return e&&Number.isFinite(e.duration)&&!(e.duration<=0)?Math.round(1e3*e.duration):null}function o(e){return e.filter(e=>{let t=String(e.id||"").trim(),r=String(e.uri||"").trim(),s=String(e.title||"").trim();return!!(t&&r&&s)})}function d({children:e}){let t=(0,i.useRef)(null),[r,d]=(0,i.useState)(l),h=(0,i.useRef)(l);(0,i.useEffect)(()=>{h.current=r},[r]);let f=(0,i.useCallback)(e=>{d(t=>{let r={...t,...e};return h.current=r,r})},[]),p=(0,i.useCallback)(async(e,r)=>{let s=o(r||h.current.queue);if(!s.length)return void f(l);if(e<0||e>=s.length)return;let i=s[e],c=t.current;if(c)try{c.src=i.uri,c.currentTime=0,f({queue:s,currentIndex:e,currentTrack:i,isLoading:!0,isPlaying:!1,durationMs:null,positionMs:0,error:null}),await c.play(),f({isPlaying:!0,isLoading:!1,durationMs:u(c)}),(0,a.sx)("preview_play",{track_id:i.id,item_id:i.itemId??null})}catch(e){if((0,n.vT)(e)||(0,n.Og)(e))return void f({isPlaying:!1,isLoading:!1,error:(0,n.Og)(e)?"Audio preview is unavailable":null});(0,a.l2)(e,{area:"web_player_play",track_id:i.id}),f({isPlaying:!1,isLoading:!1,error:e instanceof Error?e.message:String(e)})}},[f]);(0,i.useEffect)(()=>{let e=new Audio;e.preload="metadata",t.current=e;let r=()=>{f({positionMs:Math.max(0,Math.round(1e3*e.currentTime))})},s=()=>{f({durationMs:u(e)})},i=()=>{f({isLoading:!0})},n=()=>{f({isPlaying:!0,isLoading:!1,error:null})},l=()=>{f({isPlaying:!1,isLoading:!1})},c=()=>{let e=h.current;e.currentTrack&&(0,a.sx)("preview_finished",{track_id:e.currentTrack.id,item_id:e.currentTrack.itemId??null}),e.currentIndex>=0&&e.currentIndex<e.queue.length-1?p(e.currentIndex+1,e.queue):f({isPlaying:!1,isLoading:!1,positionMs:0})},o=()=>{f({isPlaying:!1,isLoading:!1,error:"Audio playback failed"})};return e.addEventListener("timeupdate",r),e.addEventListener("loadedmetadata",s),e.addEventListener("waiting",i),e.addEventListener("playing",n),e.addEventListener("pause",l),e.addEventListener("ended",c),e.addEventListener("error",o),()=>{e.pause(),e.src="",e.removeEventListener("timeupdate",r),e.removeEventListener("loadedmetadata",s),e.removeEventListener("waiting",i),e.removeEventListener("playing",n),e.removeEventListener("pause",l),e.removeEventListener("ended",c),e.removeEventListener("error",o),t.current=null}},[p,f]);let m=(0,i.useCallback)(async(e,t)=>{let r=o(e);if(!r.length)return;let s=Math.min(r.length-1,Math.max(0,Math.trunc(t)));await p(s,r)},[p]),g=(0,i.useCallback)(async(e,r)=>{let s=o(e);if(!s.length)return;let i=Math.min(s.length-1,Math.max(0,Math.trunc(r))),l=s[i],c=h.current.currentTrack;c?.id===l.id?await (async()=>{let e=t.current;if(e)if(e.paused)try{await e.play(),(0,a.sx)("preview_play",{track_id:c.id,item_id:c.itemId??null})}catch(e){if((0,n.vT)(e)||(0,n.Og)(e))return void f({isPlaying:!1,isLoading:!1,error:(0,n.Og)(e)?"Audio preview is unavailable":null});(0,a.l2)(e,{area:"web_player_resume",track_id:c.id}),f({error:e instanceof Error?e.message:String(e)})}else e.pause(),(0,a.sx)("preview_pause",{track_id:c.id,item_id:c.itemId??null})})():await p(i,s)},[p,f]),b=(0,i.useCallback)(async()=>{let e=t.current,r=h.current.currentTrack;if(e&&r)if(e.paused)try{await e.play(),(0,a.sx)("preview_play",{track_id:r.id,item_id:r.itemId??null})}catch(e){if((0,n.vT)(e)||(0,n.Og)(e))return void f({isPlaying:!1,isLoading:!1,error:(0,n.Og)(e)?"Audio preview is unavailable":null});(0,a.l2)(e,{area:"web_player_toggle",track_id:r.id}),f({error:e instanceof Error?e.message:String(e)})}else e.pause(),(0,a.sx)("preview_pause",{track_id:r.id,item_id:r.itemId??null})},[f]),v=(0,i.useCallback)(async e=>{let r=t.current;if(!r)return;let s=Math.max(0,Math.trunc(e));r.currentTime=s/1e3,f({positionMs:s})},[f]),y=(0,i.useCallback)(async()=>{let e=h.current;e.currentIndex>=e.queue.length-1||await p(e.currentIndex+1,e.queue)},[p]),w=(0,i.useCallback)(async()=>{let e=h.current;e.currentIndex<=0||await p(e.currentIndex-1,e.queue)},[p]),x=(0,i.useCallback)(()=>{let e=t.current,r=h.current.currentTrack;e&&r&&(e.pause(),e.currentTime=0,(0,a.sx)("preview_stop",{track_id:r.id,item_id:r.itemId??null}),f({isPlaying:!1,isLoading:!1,positionMs:0}))},[f]),k=(0,i.useCallback)(()=>{let e=t.current;e&&(e.pause(),e.src=""),f(l)},[f]),E=(0,i.useMemo)(()=>({...r,playTrack:m,playOrToggleTrack:g,togglePlayPause:b,seekTo:v,playNext:y,playPrevious:w,stop:x,close:k,isCurrentTrack:e=>r.currentTrack?.id===e,canPlayNext:r.currentIndex>=0&&r.currentIndex<r.queue.length-1,canPlayPrevious:r.currentIndex>0}),[r,m,g,b,v,y,w,x,k]);return(0,s.jsx)(c.Provider,{value:E,children:e})}function h(){let e=(0,i.useContext)(c);if(!e)throw Error("usePlayer must be used within PlayerProvider");return e}},98300:(e,t,r)=>{r.d(t,{R:()=>c,h:()=>l});var s=r(73424),i=r(17948),a=r(73705);let n=(0,i.createContext)(null);function l({children:e}){let t=(0,a.As)(),[r,l]=(0,i.useState)(!1),[c,u]=(0,i.useState)(null),[o,d]=(0,i.useState)(new Map),[h,f]=(0,i.useState)(new Map),p=async()=>
1{if(!t.isAuthenticated||!t.token){d(new Map),f(new Map),u(null);return}l(!0),u(null);try{let e=await fetch("/api/account/collection",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||`Request failed (${e.status})`);let r=new Map,s=new Map;for(let e of t.items??[]){let t=Math.trunc(Number(e.itemId||0));if(!Number.isFinite(t)||t<=0)continue;let i={countOrders:Math.max(0,Number(e.countOrders||0)),quantity:Math.max(0,Number(e.quantity||0)),lastPurchasedAt:String(e.lastPurchasedAt||"").trim()||null};r.set(t,i),s.set(`/item/${t}`,i)}d(r),f(s)}catch(e){u(e instanceof Error?e.message:String(e))}finally{l(!1)}};(0,i.useEffect)(()=>{p()},[t.isAuthenticated,t.token,t.user?.id]);let m=(0,i.useMemo)(()=>({isLoading:r,error:c,getPurchaseInfo:({itemId:e,path:t})=>null!=e&&o.has(e)?o.get(e)??null:t&&h.has(t)?h.get(t)??null:null,refresh:p}),[r,c,o,h]);return(0,s.jsx)(n.Provider,{value:m,children:e})}function c(){let e=(0,i.useContext)(n);if(!e)throw Error("usePurchaseHistory must be used within PurchaseHistoryProvider");return e}}}]);

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.