@lingxia/bridge 0.11.1 → 0.12.0

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.
@@ -1 +1 @@
1
- const __LX_RUNTIME_PLATFORM__="all";var __LingXiaBridgeBundle=function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="BRIDGE_TIMEOUT",n="BRIDGE_CANCELED",o="BRIDGE_HANDSHAKE_FAILED",r="BRIDGE_MALFORMED_MESSAGE",i="BRIDGE_METHOD_NOT_FOUND",s="BRIDGE_CAPABILITY_DENIED",a="BRIDGE_INTERNAL_ERROR",l="BRIDGE_OUTBOX_FULL",c="BRIDGE_STREAM_CLOSED";var d=class extends Error{constructor(e,t,n){super(t),this.name="BridgeInvocationError",this.code=e,this.data=n}};function u(e){if(e instanceof d)return e;if(e&&"object"==typeof e){const t=e;let n=a;("string"==typeof t.code&&""!==t.code.trim()||"number"==typeof t.code&&Number.isFinite(t.code))&&(n=t.code);const o="string"==typeof t.message&&""!==t.message.trim()?t.message:"Unknown error";return new d(n,o,"data"in t?t.data:void 0)}const t=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new d(a,t)}function m(e){const t=u(e);return{code:String(t.code||a),message:"string"==typeof t.message&&""!==t.message.trim()?t.message:"Unknown error",...void 0===t.data?{}:{data:t.data}}}function f({os:e,send:t}){if("undefined"==typeof window)return;if("undefined"==typeof document)return;const n="iOS"===e;if(!n&&"Android"!==e)return;const o=Symbol.for("LingXia.NativeComponentCoverageMonitor");if(window[o]?.installed)return;const r={installed:!0,coveredById:new Map,coveredCount:0,anyCovered:!1,scheduled:!1,hasAnyVideo:!1,scrollLocked:!1,scrollY:0,htmlOverflow:"",bodyOverflow:"",bodyPosition:"",bodyTop:"",bodyWidth:""};function i(e){const t=e.getBoundingClientRect?.();if(!t)return!1;if(t.width<2||t.height<2)return!1;const n=t.left+t.width/2,o=t.top+t.height/2;if(n<0||o<0||n>=window.innerWidth||o>=window.innerHeight)return!1;const r=document.elementFromPoint?.(n,o);return!!r&&(r!==document.documentElement&&r!==document.body&&!(r===e||e.contains(r)))}function s(){r.scheduled=!1;const e=document.querySelectorAll("lx-video[id]");if(r.hasAnyVideo=e.length>0,!r.hasAnyVideo&&0===r.coveredById.size&&!r.anyCovered)return;const o=new Set;for(const n of Array.from(e)){const e=n.id;if(!e)continue;o.add(e);const s=i(n),a=r.coveredById.get(e);a!==s&&(!0===a&&(r.coveredCount-=1),!0===s&&(r.coveredCount+=1),r.coveredById.set(e,s),t({id:e,action:"component.coverage",covered:s}))}const s=[];for(const[e,t]of r.coveredById.entries())o.has(e)||(s.push(e),!0===t&&(r.coveredCount-=1));for(const e of s)r.coveredById.delete(e),t({id:e,action:"component.coverage",covered:!1});const a=r.coveredCount>0;a!==r.anyCovered&&(r.anyCovered=a,n&&(a?function(){if(!n)return;if(r.scrollLocked)return;const e=document.documentElement,t=document.body;e&&t&&(r.scrollLocked=!0,r.scrollY=window.scrollY||e.scrollTop||0,r.htmlOverflow=e.style.overflow||"",r.bodyOverflow=t.style.overflow||"",r.bodyPosition=t.style.position||"",r.bodyTop=t.style.top||"",r.bodyWidth=t.style.width||"",e.style.overflow="hidden",t.style.overflow="hidden",t.style.position="fixed",t.style.top=-r.scrollY+"px",t.style.width="100%")}():function(){if(!n)return;if(!r.scrollLocked)return;const e=document.documentElement,t=document.body;e&&t&&(r.scrollLocked=!1,e.style.overflow=r.htmlOverflow,t.style.overflow=r.bodyOverflow,t.style.position=r.bodyPosition,t.style.top=r.bodyTop,t.style.width=r.bodyWidth,window.scrollTo(0,r.scrollY))}()))}function a(){r.scheduled||(r.scheduled=!0,requestAnimationFrame(s))}window[o]=r,new MutationObserver(a).observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0});const l={handleEvent:()=>{(r.hasAnyVideo||0!==r.coveredById.size)&&a()}},c={handleEvent:()=>a()};window.addEventListener("scroll",l,{capture:!0,passive:!0}),window.addEventListener("resize",c),a()}const p="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{},h=p.displayLanguage?.trim()||"en-US";function g(){return p.os||"unknown"}function v(){return"iOS"===p.os}function y(){return"macOS"===p.os}function w(){return"Windows"===p.os}function x(){return y()||w()}"undefined"!=typeof document&&document.documentElement&&(document.documentElement.lang=h);const b="__LingXiaRecvMessage",k=5e3,E="[LX.Bridge]",I="messageport",C="jsinterface",_="webmessage",L=p.appleDownstreamURL,T={data:!1,proto:!1,all:!1},S=[];function M(e){return T.all||T[e]}function N(...e){(!0===p.dev||T.all||T.proto||T.data)&&console.log(E,...e)}function A(...e){console.warn(E,...e)}function B(...e){console.error(E,...e)}function j(e){try{return JSON.stringify(e)}catch{return function(e,t){const n=new WeakSet;return JSON.stringify(e,(e,t)=>{if("object"==typeof t&&null!==t){if(n.has(t))return"[Circular]";n.add(t)}return t},t)}(e)}}function O(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch{return{}}}const P="iOS"===p.os||"macOS"===p.os?"webkit":"Harmony"===p.os?"messageport":"Windows"===p.os?"webmessage":"Android"===p.os?window.LingXiaProxy?.supportsMessagePort?.()?"messageport":"jsinterface":"unknown";"undefined"!=typeof window&&"function"!=typeof window[b]&&(window[b]=e=>{S.push(e)});let R=null,D=!1,F=null,$=null,X=null,z=200,H=!1,q=0;let G=0,U=null;const W={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},J={handleEvent:e=>{const t=e;if("LingXia-port-init"!==t.data)return;const n=t.ports?.[0];n&&(nt._connectWebMessagePort(n),W.resolve?.(n))}};function Y(){W.listenerInstalled||(W.listenerInstalled=!0,window.addEventListener("message",J))}function V(){null!==W.timer&&(window.clearTimeout(W.timer),W.timer=null),W.resolve=null,W.reject=null,W.promise=null}function K(){return"webkit"===P&&(v()||y())}function Q(){null!==X&&(clearTimeout(X),X=null)}function Z(e){K()&&!H&&(H=!0,Q(),null!==U&&(clearInterval(U),U=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",ae),ie=!1,$?.abort(),D=!1,te(e,!0))}function ee(e){for(const t of Array.from(ye.keys()))Ae(t,{code:c,message:e});for(const t of Array.from(we.keys()))Be(t,{code:c,message:e});!function(e){for(const[t,n]of Array.from(xe.entries()))xe.delete(t),n._emitClose(c,e)}(e)}function te(e,t){De(),ce=null,de=!1,ue=!1,me=0,t&&ee(e)}function ne(e){let t=e;for(;;){const e=t.indexOf("\n");if(e<0)break;const n=t.slice(0,e).trim();if(t=t.slice(e+1),n)try{oe(JSON.parse(n))}catch(e){A("Apple downstream parse error:",e,n)}}return t}function oe(e){if(!e||"object"!=typeof e)return;G=Date.now();const t=e;if(!0!==t.lxshutdown){if(void 0===t.lxhb){if(!0===t.lxreset)return q=0,te("Apple downstream reset",!0),void Fe();if("number"==typeof t.lxff){if(t.lxff<=q)return;return q=t.lxff,void Ge(t.m)}Ge(e)}}else Z("Apple downstream closed")}function re(){if(!K()||H)return;if(F)return;Q();let e=!1;F=async function(){if(!L)throw new Error("Apple downstream URL is not configured");const e=new AbortController;$=e;const t=L.includes("?")?"&":"?",n=`${L}${t}from=${q}`,o=await fetch(n,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal});if(!o.ok)throw new Error(`Apple downstream HTTP ${o.status}`);if("1"===o.headers.get("X-LingXia-Bridge-Shutdown"))return void Z("Apple downstream closed");if(!o.body)throw new Error("Apple downstream response body unavailable");D=!0,z=200,G=Date.now(),M("proto")&&N("Apple downstream connected"),Fe();const r=o.body.getReader(),i=new TextDecoder;let s="";try{for(;;){const{value:e,done:t}=await r.read();if(t)break;s+=i.decode(e,{stream:!0}),s=ne(s)}s+=i.decode();const e=s.trim();if(e)try{oe(JSON.parse(e))}catch(t){A("Apple downstream trailing parse error:",t,e)}}catch(t){if(e.signal.aborted)return;throw t}finally{try{r.releaseLock()}catch{}}}().then(()=>{e=!0}).catch(e=>{$?.signal.aborted||A("Apple downstream failed:",e)}).finally(()=>{const t=$?.signal.aborted??!1;F=null,$=null,D=!1,t||H||function(e,t=!1){if(!K()||H)return;Q();const n=t?0:z;t||(z=Math.min(2*z,2e3));const o=t?`Apple downstream completed, reconnecting immediately: ${e}`:`Apple downstream disconnected, retrying in ${n}ms: ${e}`;n<=200?N(o):A(o),X=setTimeout(()=>{X=null,re()},n)}("stream closed",e)})}let ie=!1;function se(){if(!K()||H)return;if(ie)return;ie=!0;const e=F;$?.abort();const t=()=>{ie=!1,re()};e?e.finally(t):t()}function ae(){"visible"===document.visibilityState&&se()}function le(e){const t=e.kind;"req"!==t&&"notify"!==t||N(`postToNative: ${t} ${e.method}`),M("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===P)return void window.webkit?.messageHandlers.LingXia?.postMessage(e);const t=j(e);if(P===I&&R)return void R.postMessage(t);if((P===C||P===_)&&window.LingXiaProxy?.postMessage)return void window.LingXiaProxy.postMessage(t);A("Transport not ready")}catch(e){B("Send error:",e)}}let ce=null,de=!1,ue=!1,me=0,fe=null;const pe={};let he=0;function ge(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function ve(e,t){const n=ge();let o=!1,r=!1,i=()=>{},s=()=>{};const a=[],l=[],c=new Promise((e,t)=>{i=e,s=t});return{id:e,result:c,on(e,t){return"data"===e&&n.data.add(t),"end"===e&&n.end.add(t),"error"===e&&n.error.add(t),this},[Symbol.asyncIterator]:()=>(r=!0,{next:()=>a.length>0?Promise.resolve({done:!1,value:a.shift()}):o?c.then(e=>({done:!0,value:e}),e=>Promise.reject(e)):new Promise((e,t)=>{l.push({resolve:e,reject:t})})}),cancel(){o||t()},_emitData(e){if(!o){l.length>0?l.shift().resolve({done:!1,value:e}):r&&a.push(e);for(const t of n.data)try{t(e)}catch(e){A("Stream data listener failed:",e)}}},_resolve(e){if(!o){for(o=!0,i(e);l.length>0;)l.shift().resolve({done:!0,value:e});for(const t of n.end)try{t(e)}catch(e){A("Stream end listener failed:",e)}}},_reject(e){if(!o){for(o=!0,s(e);l.length>0;)l.shift().reject(e);for(const t of n.error)try{t(e)}catch(e){A("Stream error listener failed:",e)}}}}}const ye=new Map,we=new Map,xe=new Map,be=[];let ke=-1,Ee={};const Ie=new Set,Ce=new WeakMap,_e=new Map;function Le(e,t){_e.set(e,t)}function Te(e){if(e.startsWith("host."))return"host";const t=e.indexOf(".");return t>0?e.slice(0,t):"page"}function Se(e){if(null!=e)return e}function Me(){return P===I?!!R:K()?D:"webkit"===P||P===C||P===_}function Ne(){return!!de&&(!!K()||Me())}function Ae(e,t){const n=ye.get(e);if(n){ye.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);if("stream"===n.mode&&n.stream)return void n.stream._reject(o);n.reject?.(o)}}function Be(e,t){const n=we.get(e);if(!n)return;we.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);n.channel._reject(o),n.reject(o)}function je(e,t){ye.has(e)?Ae(e,t):we.has(e)&&Be(e,t)}function Oe(e){ye.has(e)?function(e){const n=ye.get(e);n&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<=0?null!==n.timerId&&(clearTimeout(n.timerId),n.timerId=null):(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(()=>{ye.has(e)&&Ae(e,{code:t,message:`'${n.method}' timed out`})},n.timeoutMs)))}(e):we.has(e)&&function(e){const n=we.get(e);n&&(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(()=>{Be(e,{code:t,message:`Channel '${n.topic}' timed out`})},k))}(e)}function Pe(e){for(let t=be.length-1;t>=0;t--)if(be[t]?.reqId===e)return be.splice(t,1),!0;return!1}function Re(e,t){const n=e.kind,o="hello"===n||"helloAck"===n||"ready"===n;if(!Ne()&&!o)return be.length>=256?(B("Outbox full"),void(t&&je(t,{code:l,message:"Bridge outbox is full"}))):void be.push({msg:e,reqId:t});t&&Oe(t),le(e)}function De(){null!==fe&&(clearTimeout(fe),fe=null)}function Fe(){if(de)return;if(!Me())return;De();const e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};ue=!0,le(e),fe=setTimeout(()=>{if(!de)if(me++,me<3)A(`Handshake timeout (${me}/3), retrying...`),ue=!1,Fe();else{for(B("Handshake failed"),De(),ue=!1,me=0;be.length;){const e=be.shift();e?.reqId&&je(e.reqId,{code:o,message:"Bridge handshake failed"})}for(const e of Array.from(we.keys()))Be(e,{code:o,message:"Bridge handshake failed"})}},1e4)}function $e(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Xe(e,t,n=!1){const o=function(e){if(""===e)return[];if(!e.startsWith("/"))throw new Error(`Invalid JSON pointer: ${e}`);return e.split("/").slice(1).map($e)}(t);if(0===o.length)return{container:{$root:e},key:"$root"};let r=e;for(let e=0;e<o.length-1;e++){const t=o[e];if(Array.isArray(r))r=r[Number(t)];else{if(!r||"object"!=typeof r)throw new Error(`Invalid container at ${t}`);{const i=r;if(n&&void 0===i[t]){const n=o[e+1];i[t]=n&&/^\d+$/.test(n)?[]:{}}r=i[t]}}}return{container:r,key:o[o.length-1]}}function ze(e){Ie.forEach(t=>{try{if(!Ce.has(t))return Ce.set(t,!0),void t(O(Ee),{rev:ke,initial:!0});t(O(Ee),{rev:ke,initial:e})}catch(e){A("Subscriber error:",e)}})}function He(e){if("function"!=typeof e)return()=>{};if(Ie.add(e),ke>=0){Ce.set(e,!0);try{e(O(Ee),{rev:ke,initial:!0})}catch(e){B("Callback error:",e)}}return()=>{Ie.delete(e),Ce.delete(e)}}function qe(e){tt.call("state.getSnapshot",{scope:e}).catch(()=>{})}function Ge(e){if(e&&"object"==typeof e){const t=e;if("event"===t.type&&"nativecomponent"===t.name&&t.payload){const e=t.payload,n=e.id||e.componentId;if("string"==typeof n){const t=Ue.get(n);if(t)try{t(e)}catch(e){B("NC handler error:",e)}}return}}const t=function(e){if(!e||"object"!=typeof e)return null;const t=e.v,n=e.kind;return 2!==t||"string"!=typeof n?null:e}(e);if(t)switch(t.kind){case"helloAck":return void(ce=t.sessionId);case"ready":if(ce&&t.sessionId!==ce)return void A("sessionId mismatch");if(De(),de=!0,me=0,t.hostMethods)for(const[e,n]of Object.entries(t.hostMethods))pe[e]=n;return M("proto")&&N("Handshake complete, hostMethods:",Object.keys(pe).length),void function(){if(Ne())for(;be.length;){const e=be.shift();e&&(e.reqId&&Oe(e.reqId),le(e.msg))}}();case"res":{const e=ye.get(t.id);if(!e)return;if(ye.delete(t.id),null!==e.timerId&&clearTimeout(e.timerId),t.ok){if("state.getSnapshot"===e.method&&(function(e){if(!e||"object"!=typeof e)return!1;const t=e;return!("number"!=typeof t.rev||!Number.isFinite(t.rev)||!t.state||"object"!=typeof t.state||(Ee=t.state,ke=t.rev,M("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",ke,"state:",O(Ee)),console.groupEnd()),ze(!0),0))}(t.result)||A("Invalid state.getSnapshot result")),"stream"===e.mode&&e.stream)return void e.stream._resolve(t.result);e.resolve?.(t.result)}else{const n=u(t.error);if("stream"===e.mode&&e.stream)return void e.stream._reject(n);e.reject?.(n)}return}case"event":if(ye.has(t.id)){const e=ye.get(t.id);return void("stream"===e?.mode&&e.stream?(null!==e.timerId&&(clearTimeout(e.timerId),e.timerId=null),e.timeoutMs=0,e.stream._emitData(t.payload)):A(`Received event for non-stream request '${t.id}'`))}return;case"state.snapshot":return Ee=t.state||{},ke=t.rev,M("data")&&(console.group("[LX] snapshot"),console.log("rev:",ke,"state:",O(Ee)),console.groupEnd()),void ze(!0);case"state.patch":if(t.baseRev!==ke)return A("baseRev mismatch",{have:ke,want:t.baseRev}),void qe(t.scope);try{!function(e,t){for(const n of t){const t="add"===n.op||"replace"===n.op,{container:o,key:r}=Xe(e,n.path,t);if("$root"===r){for(const t of Object.keys(e))delete e[t];if("remove"!==n.op){const t=n.value;t&&"object"==typeof t&&Object.assign(e,t)}continue}if(Array.isArray(o)){const e="-"===r?o.length:Number(r);if(!Number.isFinite(e)||e<0)throw new Error("Invalid index");"remove"===n.op?o.splice(e,1):"add"===n.op?o.splice(e,0,n.value):"replace"===n.op&&(o[e]=n.value);continue}if(!o||"object"!=typeof o)throw new Error("Invalid container");const i=o;"remove"===n.op?delete i[r]:i[r]=n.value}}(Ee,t.ops||[]),ke=t.rev}catch(e){return B("Patch failed:",e),void qe(t.scope)}return M("data")&&(console.group("[LX] patch"),console.log("rev:",ke,"ops:",t.ops),console.groupEnd()),ze(!1),void(t.ack&&Re({v:2,kind:"state.ack",scope:t.scope,rev:t.rev}));case"ch.ack":{const e=we.get(t.id);if(!e)return;if(we.delete(t.id),null!==e.timerId&&clearTimeout(e.timerId),t.ok)e.channel._markOpen(),xe.set(t.id,e.channel),e.resolve(e.channel);else{const n=u(t.error);e.channel._reject(n),e.reject(n)}return}case"ch.data":{const e=xe.get(t.id);if(!e)return;return void e._emitData(t.payload)}case"ch.close":{if(we.get(t.id))return void Be(t.id,{code:t.code??c,message:t.reason??"Channel closed before opening"});const e=xe.get(t.id);if(!e)return;return xe.delete(t.id),void e._emitClose(t.code,t.reason)}case"req":{const e=t,n=Te(e.method);if(!e.cap||e.cap!==n)return void Re({v:2,kind:"res",id:e.id,ok:!1,error:{code:s,message:`Invalid cap for ${e.method}`}});const o=_e.get(e.method);return o?void Promise.resolve().then(()=>o(e.params)).then(t=>{Re({v:2,kind:"res",id:e.id,ok:!0,result:t})}).catch(t=>{Re({v:2,kind:"res",id:e.id,ok:!1,error:u(t)})}):void Re({v:2,kind:"res",id:e.id,ok:!1,error:{code:i,message:`View handler not found: ${e.method}`}})}}else A("Invalid V2 message:",e)}const Ue=new Map,We=[];let Je=!1;function Ye(){return"undefined"!=typeof window&&!(!window.webkit?.messageHandlers?.NativeComponent&&!window.NativeComponentBridge?.postMessage)}function Ve(e){try{if(window.webkit?.messageHandlers?.NativeComponent)return void window.webkit.messageHandlers.NativeComponent.postMessage(e);if(window.NativeComponentBridge?.postMessage)return void window.NativeComponentBridge.postMessage(j(e))}catch(e){B("NativeComponent send error:",e)}}function Ke(){if(Ye()&&0!==We.length)for(Je=!0;We.length;){const e=We.shift();try{Ve(e)}catch{break}}}function Qe(e){try{if(!Ye())return void We.push(e);Je||Ke(),Ve(e)}catch(e){B("NC send failed:",e)}}function Ze(e){return`${e}_${Date.now()}_${he++}`}function et(e,t,n){if(!t)return;if(t.aborted)return void n();let o={handleEvent:()=>{t.removeEventListener("abort",o),n()}};t.addEventListener("abort",o)}const tt={call:(e,t,o)=>new Promise((i,s)=>{if(!e||"string"!=typeof e)return void s({code:r,message:"Method name must be a non-empty string"});ue||Fe();const a=Ze("c"),l=o?.cap||Te(e),c=o?.timeoutMs??k;ye.set(a,{method:e,mode:"call",resolve:i,reject:e=>s(e),timeoutMs:c,timerId:null}),Re({v:2,kind:"req",id:a,method:e,params:Se(t),cap:l},a),et(0,o?.signal,()=>{const e=Pe(a);Ae(a,{code:n,message:"Bridge request aborted"}),!e&&de&&Re({v:2,kind:"cancel",id:a})})}),stream(e,t,o){if(!e||"string"!=typeof e){const e=ve("invalid",()=>{});return e._reject({code:r,message:"Method name must be a non-empty string"}),e}ue||Fe();const i=Ze("c"),s=ve(i,()=>{Pe(i)?Ae(i,{code:n,message:"Bridge request aborted"}):de&&Re({v:2,kind:"cancel",id:i})}),a=o?.cap||Te(e),l=o?.timeoutMs??k;return ye.set(i,{method:e,mode:"stream",stream:s,timeoutMs:l,timerId:null}),Re({v:2,kind:"req",id:i,method:e,params:Se(t),cap:a},i),et(0,o?.signal,()=>s.cancel()),s},notify(e,t,n){e&&"string"==typeof e&&(ue||Fe(),Re({v:2,kind:"notify",method:e,params:Se(t),cap:n?.cap||Te(e)}))},state:{subscribe:He},channel:{open:(e,t,n)=>e&&"string"==typeof e?(ue||Fe(),new Promise((o,r)=>{const i=Ze("ch"),s=function(e,t,n){const o=ge();let r=!1,i=0,s=!1,a=!1;const l=[],d=[],u={id:e,send(n){r?t(n,i++):u._reject({code:c,message:`Channel '${e}' is closed`})},on(e,t){if("data"===e&&(o.data.add(t),l.length>0)){const e=l.splice(0);for(const n of e)try{t(n)}catch(e){A("Channel listener failed:",e)}}return"close"===e&&o.close.add(t),"error"===e&&o.error.add(t),this},[Symbol.asyncIterator]:()=>(a=!0,{next:()=>l.length>0?Promise.resolve({done:!1,value:l.shift()}):s?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>{d.push({resolve:e,reject:t})})}),close(e,t){r&&(r=!1,s=!0,n(e,t),u._emitClose(e,t))},_emitData(e){if(r){d.length>0?d.shift().resolve({done:!1,value:e}):(a||0===o.data.size)&&l.push(e);for(const t of o.data)try{t(e)}catch(e){A("Channel listener failed:",e)}}},_emitClose(e,t){for(s=!0;d.length>0;)d.shift().resolve({done:!0,value:void 0});for(const n of o.close)try{n(e,t)}catch(e){A("Channel close listener failed:",e)}},_reject(e){for(s=!0;d.length>0;)d.shift().reject(e);for(const t of o.error)try{t(e)}catch(e){A("Channel error listener failed:",e)}},_markOpen(){r=!0,s=!1},_isOpen:()=>r,_nextSeq:()=>i++};return u}(i,(e,t)=>{Re({v:2,kind:"ch.data",id:i,seq:t,payload:e})},(e,t)=>{const n=we.get(i);n&&null!==n.timerId&&clearTimeout(n.timerId),we.delete(i),xe.delete(i),Re({v:2,kind:"ch.close",id:i,code:e,reason:t})});we.set(i,{topic:e,channel:s,resolve:o,reject:r,timerId:null}),Re({v:2,kind:"ch.open",id:i,topic:e,params:Se(t),cap:n?.cap||Te(e)},i)})):Promise.reject({code:r,message:"Topic name must be a non-empty string"})}},nt={invoke:(e,t,n)=>tt.call(ot(e),t,rt(n)).then(e=>e).catch(e=>Promise.reject(m(e))),notify(e,t,n){tt.notify(ot(e),t,rt(n))},stream:(e,t,n)=>it(tt.stream(ot(e),t,rt(n))),channel:(e,t,n)=>tt.channel.open(ot(e),t,rt(n)).then(e=>function(e){const t=new Set,n=new Set;return e.on("data",e=>{for(const n of t)n(e)}),e.on("close",(e,t)=>{const o={code:e,reason:t};for(const e of n)e(o)}),{send(t){e.send(t)},onMessage:e=>(t.add(e),()=>{t.delete(e)}),onClose:e=>(n.add(e),()=>{n.delete(e)}),close(t,n){e.close(t,n)}}}(e)).catch(e=>Promise.reject(m(e))),raw:tt,state:{subscribe:He},_connectWebMessagePort(e){if(P===I){if(R&&R!==e)try{R.onmessage=null,R.close()}catch{}R=e,e.onmessage=e=>{let t=e.data;if("string"==typeof t)try{t=JSON.parse(t)}catch{return}Ge(t)};try{e.start()}catch{}N("Port connected"),Fe()}},_receiveEvaluateMessage(e){try{e&&Ge(JSON.parse(e))}catch(e){B("Parse error:",e)}},debug:function(e){const t={};return Object.keys(e).forEach(n=>{Object.defineProperty(t,n,{enumerable:!0,configurable:!1,get:()=>e[n],set(t){e[n]=!!t,console.log(`[LX] ${n}: ${t}`)}})}),t}(T),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:v,isAndroid:function(){return"Android"===p.os},isMacOS:y,isWindows:w,isDesktop:x,isApple:function(){return v()||y()},isRunner:function(){return!0===p.runner},getOS:g},dom:{measureById(e){try{if(!e)return null;const t=document.getElementById(e);if(!t)return null;const n=t.getBoundingClientRect();let o=0;try{o=parseFloat(getComputedStyle(t).borderRadius)||0}catch{}return[n.left+window.scrollX,n.top+window.scrollY,n.width,n.height,o]}catch{return null}}},nativeComponents:{send:Qe,hasHandler:Ye,flush:Ke,register:(e,t)=>e&&"function"==typeof t?(Ue.set(e,t),()=>Ue.delete(e)):()=>{},unregister(e){Ue.delete(e)}},isReady:()=>de};function ot(e){return e.startsWith("host.")?e:`host.${e}`}function rt(e){return{...e||{},cap:e?.cap||"host"}}function it(e){const t=new Set,n=new Set;return e.on("data",e=>{for(const n of t)n(e)}),e.on("error",e=>{const t=m(e);for(const e of n)e(t)}),{onEvent:e=>(t.add(e),()=>{t.delete(e)}),onError:e=>(n.add(e),()=>{n.delete(e)}),result:e.result.catch(e=>Promise.reject(m(e))),cancel(){e.cancel()}}}function st(){if(window.__LX_BRIDGE_INIT_STATE)N(`Bridge already ${window.__LX_BRIDGE_INIT_STATE}, skipping duplicate init`);else{window.__LX_BRIDGE_INIT_STATE="initializing";try{N(`Method: ${P}`),function(e){if("undefined"==typeof window)return;if(window[b]=e,0===S.length)return;const t=S.splice(0,S.length);for(const n of t)try{e(n)}catch(e){A("Failed to replay queued native message:",e)}}(nt._receiveEvaluateMessage),K()?(re(),K()&&!H&&null===U&&(U=setInterval(()=>{0!==G&&Date.now()-G>35e3&&(A("Apple downstream stale (no heartbeat), forcing reconnect"),se())},5e3)),K()&&"undefined"!=typeof document&&document.addEventListener("visibilitychange",ae)):P===I?(Y(),function(){if(R)return Promise.resolve(R);if(W.promise)return W.promise;Y(),W.promise=new Promise((e,t)=>{W.resolve=t=>{V(),e(t)},W.reject=e=>{V(),t(e)},W.timer=window.setTimeout(()=>{W.reject?.(new Error("MessagePort init timed out after 5000ms"))},5e3)});try{window.LingXiaProxy?.getPort("LingXiaPort")}catch(e){W.reject?.(e)}return W.promise}().catch(e=>A("Port init failed:",e))):"webkit"===P||P===C||P===_?Fe():A("Unknown method"),window.LingXiaBridge=nt,window.__lxForceDownstreamReconnect=se,f({os:g(),send:Qe}),window.__LX_BRIDGE_INIT_STATE="initialized",N("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function at(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function lt(e){const{failedPath:t,reason:n}=e,o=document.createElement("style");o.textContent="\n* { margin: 0; padding: 0; box-sizing: border-box; }\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: #f5f5f7;\n color: #1d1d1f;\n padding: 20px;\n -webkit-font-smoothing: antialiased;\n}\n.lx-error {\n text-align: center;\n max-width: 400px;\n}\n.lx-error-code {\n font-size: 120px;\n font-weight: 700;\n color: #d1d1d6;\n line-height: 1;\n letter-spacing: -4px;\n}\n.lx-error-title {\n font-size: 21px;\n font-weight: 600;\n margin: 16px 0 8px;\n color: #1d1d1f;\n}\n.lx-error-desc {\n font-size: 15px;\n color: #86868b;\n line-height: 1.5;\n}\n.lx-error-path {\n display: inline-block;\n margin-top: 20px;\n padding: 10px 16px;\n background: rgba(0,0,0,0.04);\n border-radius: 8px;\n font-family: 'SF Mono', ui-monospace, Menlo, Monaco, monospace;\n font-size: 13px;\n color: #1d1d1f;\n word-break: break-all;\n max-width: 100%;\n}\n@media (prefers-color-scheme: dark) {\n body { background: #000; color: #f5f5f7; }\n .lx-error-code { color: #3a3a3c; }\n .lx-error-title { color: #f5f5f7; }\n .lx-error-desc { color: #86868b; }\n .lx-error-path { background: rgba(255,255,255,0.08); color: #f5f5f7; }\n}\n",document.head.appendChild(o),document.body.innerHTML="",document.body.style.cssText="";const r=document.createElement("div");r.className="lx-error";let i='<div class="lx-error-code">404</div>';i+='<h1 class="lx-error-title">Page Not Found</h1>',i+="<p class=\"lx-error-desc\">The page you're looking for doesn't exist.</p>",t&&(i+=`<div class="lx-error-path">${at(t)}</div>`),n&&(i+=`<p class="lx-error-desc" style="margin-top:12px">${at(n)}</p>`),r.innerHTML=i,document.body.appendChild(r)}function ct(){const e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function dt(){return window.__LX_RUNTIME_CONFIG?.error||null}const ut={handleEvent:()=>mt()};function mt(){if(ct()){const e=dt();e&&lt(e)}}function ft(){st(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",ut):mt()}const pt="lx-action-sheet-style";let ht=null;function gt(e){const t=e,n=t?.itemList??[],o=t?.cancelText??"Cancel",r=t?.itemColor??"#007AFF",i=(ht??Promise.resolve()).then(()=>vt(n,o,r),()=>vt(n,o,r));return ht=i,i}function vt(e,t,n){return new Promise(o=>{let r=!1;const i=x();!function(){if(document.getElementById(pt))return;const e=document.createElement("style");e.id=pt,e.textContent="\n.lx-as-backdrop {\n position: fixed; inset: 0; z-index: 99999;\n background: rgba(0,0,0,0.4);\n opacity: 0; transition: opacity 300ms ease;\n}\n.lx-as-backdrop.lx-as-visible { opacity: 1; }\n\n.lx-as-sheet {\n position: fixed; left: 0; right: 0; bottom: 0; z-index: 100000;\n transform: translateY(100%);\n transition: transform 300ms ease;\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n -webkit-font-smoothing: antialiased;\n}\n.lx-as-sheet.lx-as-visible { transform: translateY(0); }\n.lx-as-sheet.lx-as-desktop {\n left: 50%;\n right: auto;\n bottom: auto;\n top: 50%;\n width: min(92vw, 460px);\n transform: translate(-50%, calc(-50% + 16px));\n}\n.lx-as-sheet.lx-as-desktop.lx-as-visible { transform: translate(-50%, -50%); }\n\n.lx-as-container {\n background: #fff;\n border-radius: 16px 16px 0 0;\n overflow: hidden;\n}\n.lx-as-container.lx-as-desktop {\n border-radius: 16px;\n}\n\n.lx-as-item {\n display: block; width: 100%;\n height: 56px;\n line-height: 56px;\n padding: 0;\n border: none; background: none;\n font-size: 18px; font-weight: 400;\n text-align: center;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n position: relative;\n}\n.lx-as-item:active { background: rgba(0,0,0,0.08); }\n.lx-as-item + .lx-as-item::before {\n content: ''; position: absolute; top: 0; left: 0; right: 0;\n height: 1px; background: #E0E0E0;\n}\n.lx-as-separator {\n height: 8px;\n background: #F2F2F2;\n}\n.lx-as-cancel-btn { font-weight: 500; color: #000; }\n",document.head.appendChild(e)}();const s=document.createElement("div");s.className="lx-as-backdrop";const a=document.createElement("div");a.className="lx-as-sheet",i&&a.classList.add("lx-as-desktop");const l=document.createElement("div");l.className="lx-as-container",i&&l.classList.add("lx-as-desktop"),e.forEach((e,t)=>{const o=document.createElement("button");o.className="lx-as-item",o.textContent=e,o.style.color=n,o.addEventListener("click",()=>u(t)),l.appendChild(o)});const c=document.createElement("div");c.className="lx-as-separator",l.appendChild(c);const d=document.createElement("button");function u(e){r||(r=!0,s.classList.remove("lx-as-visible"),a.classList.remove("lx-as-visible"),setTimeout(()=>{s.remove(),a.remove(),o({tapIndex:e})},300))}d.className="lx-as-item lx-as-cancel-btn",d.textContent=t,d.addEventListener("click",()=>u(-1)),l.appendChild(d),a.appendChild(l),document.body.appendChild(s),document.body.appendChild(a),requestAnimationFrame(()=>{s.classList.add("lx-as-visible"),a.classList.add("lx-as-visible")}),s.addEventListener("click",()=>u(-1))})}const yt=200,wt="lx-modal-style";let xt=null;function bt(e){const t=e,n=t?.title??"",o=t?.content??"",r=t?.showCancel??!0,i=t?.cancelText??"Cancel",s=t?.cancelColor,a=t?.confirmText??"OK",l=t?.confirmColor??"#007AFF",c=(xt??Promise.resolve()).then(()=>kt(n,o,r,i,s,a,l),()=>kt(n,o,r,i,s,a,l));return xt=c,c}function kt(e,t,n,o,r,i,s){return new Promise(a=>{let l=!1;!function(){if(document.getElementById(wt))return;const e=document.createElement("style");e.id=wt,e.textContent="\n.lx-modal-backdrop {\n position: fixed; inset: 0; z-index: 99999;\n background: rgba(0,0,0,0.4);\n opacity: 0; transition: opacity 200ms ease;\n display: flex; align-items: center; justify-content: center;\n}\n.lx-modal-backdrop.lx-modal-visible { opacity: 1; }\n\n.lx-modal-dialog {\n width: min(92vw, 320px);\n background: #fff;\n border-radius: 14px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n -webkit-font-smoothing: antialiased;\n transform: scale(0.95); opacity: 0;\n transition: transform 200ms ease, opacity 200ms ease;\n}\n.lx-modal-backdrop.lx-modal-visible .lx-modal-dialog {\n transform: scale(1); opacity: 1;\n}\n\n.lx-modal-body {\n padding: 24px 20px 16px;\n text-align: center;\n}\n.lx-modal-title {\n margin: 0 0 8px;\n font-size: 17px;\n font-weight: 600;\n color: #000;\n line-height: 1.35;\n}\n.lx-modal-content {\n margin: 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n word-break: break-word;\n}\n.lx-modal-body:has(.lx-modal-title:empty) .lx-modal-content {\n font-size: 17px;\n font-weight: 600;\n color: #000;\n}\n\n.lx-modal-footer {\n display: flex;\n border-top: 1px solid #E0E0E0;\n}\n.lx-modal-btn {\n flex: 1;\n height: 44px;\n line-height: 44px;\n padding: 0;\n border: none;\n background: none;\n font-size: 17px;\n text-align: center;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n.lx-modal-btn:active { background: rgba(0,0,0,0.06); }\n.lx-modal-btn + .lx-modal-btn {\n border-left: 1px solid #E0E0E0;\n}\n.lx-modal-btn-cancel {\n color: #666;\n font-weight: 400;\n}\n.lx-modal-btn-confirm {\n font-weight: 600;\n}\n\n@media (prefers-color-scheme: dark) {\n .lx-modal-dialog { background: #2c2c2e; }\n .lx-modal-title { color: #f5f5f7; }\n .lx-modal-content { color: #ababab; }\n .lx-modal-body:has(.lx-modal-title:empty) .lx-modal-content {\n color: #f5f5f7;\n }\n .lx-modal-footer { border-top-color: #3a3a3c; }\n .lx-modal-btn:active { background: rgba(255,255,255,0.08); }\n .lx-modal-btn + .lx-modal-btn { border-left-color: #3a3a3c; }\n .lx-modal-btn-cancel { color: #ababab; }\n}\n",document.head.appendChild(e)}();const c=document.createElement("div");c.className="lx-modal-backdrop";const d=document.createElement("div");d.className="lx-modal-dialog";const u=document.createElement("div");u.className="lx-modal-body";const m=document.createElement("div");if(m.className="lx-modal-title",m.textContent=e,u.appendChild(m),t){const e=document.createElement("p");e.className="lx-modal-content",e.textContent=t,u.appendChild(e)}d.appendChild(u);const f=document.createElement("div");if(f.className="lx-modal-footer",n){const e=document.createElement("button");e.className="lx-modal-btn lx-modal-btn-cancel",e.textContent=o,r&&(e.style.color=r),e.addEventListener("click",()=>h(!1)),f.appendChild(e)}const p=document.createElement("button");function h(e){l||(l=!0,c.classList.remove("lx-modal-visible"),setTimeout(()=>{c.remove(),a({confirm:e,cancel:!e})},yt))}p.className="lx-modal-btn lx-modal-btn-confirm",p.textContent=i,p.style.color=s,p.addEventListener("click",()=>h(!0)),f.appendChild(p),d.appendChild(f),c.appendChild(d),document.body.appendChild(c),requestAnimationFrame(()=>{c.classList.add("lx-modal-visible")})})}const Et="lx-toast-style";let It=null;function Ct(e){const t=e,n=t?.title??"",o=t?.icon??"none",r=t?.duration??1500,i=t?.mask??!1,s=t?.position??"center";It&&(It.dismiss(),It=null),function(){if(document.getElementById(Et))return;const e=document.createElement("style");e.id=Et,e.textContent="\n.lx-toast-mask {\n position: fixed; inset: 0; z-index: 99998;\n}\n.lx-toast-container {\n position: fixed; left: 0; right: 0; z-index: 99999;\n display: flex; justify-content: center;\n pointer-events: none;\n}\n.lx-toast-container.lx-toast-top { top: 0; padding-top: 80px; }\n.lx-toast-container.lx-toast-center { top: 0; bottom: 0; align-items: center; }\n.lx-toast-container.lx-toast-bottom { bottom: 0; padding-bottom: 80px; }\n\n.lx-toast-box {\n display: flex; flex-direction: column; align-items: center; gap: 10px;\n min-width: 120px; max-width: 280px;\n padding: 20px;\n background: rgba(0,0,0,0.8);\n border-radius: 12px;\n color: #fff;\n pointer-events: auto;\n transform: scale(0.8); opacity: 0;\n transition: transform 200ms ease, opacity 200ms ease;\n}\n.lx-toast-box.lx-toast-no-icon {\n min-width: auto; min-height: auto;\n padding: 12px 20px;\n}\n.lx-toast-box.lx-toast-visible {\n transform: scale(1); opacity: 1;\n}\n.lx-toast-icon {\n width: 36px; height: 36px;\n color: #fff;\n line-height: 0;\n}\n.lx-toast-title {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n font-size: 16px; font-weight: 500;\n text-align: center;\n line-height: 1.4;\n word-break: break-word;\n -webkit-font-smoothing: antialiased;\n}\n",document.head.appendChild(e)}();let a=null;i&&(a=document.createElement("div"),a.className="lx-toast-mask",document.body.appendChild(a));const l=document.createElement("div");l.className="lx-toast-container","top"===s?l.classList.add("lx-toast-top"):"bottom"===s?l.classList.add("lx-toast-bottom"):l.classList.add("lx-toast-center");const c=document.createElement("div");c.className="lx-toast-box";const d="none"!==o;if(d||c.classList.add("lx-toast-no-icon"),d){const e=document.createElement("div");e.className="lx-toast-icon","success"===o?e.innerHTML='<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="18" cy="18" r="17" stroke="currentColor" stroke-width="2"/><path d="M11 18l5 5 9-9" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>':"error"===o?e.innerHTML='<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="18" cy="18" r="17" stroke="currentColor" stroke-width="2"/><path d="M13 13l10 10M23 13l-10 10" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/></svg>':"loading"===o&&(e.innerHTML='<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 4a14 14 0 0 1 14 14" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="0.8s" repeatCount="indefinite"/></path></svg>'),c.appendChild(e)}const u=document.createElement("div");u.className="lx-toast-title",u.textContent=n,c.appendChild(u),l.appendChild(c),document.body.appendChild(l),requestAnimationFrame(()=>{c.classList.add("lx-toast-visible")});let m=!1;function f(){m||(m=!0,It?.dismiss===f&&(It=null),c.classList.remove("lx-toast-visible"),p&&clearTimeout(p),setTimeout(()=>{l.remove(),a?.remove()},200))}let p=null;return r>0&&(p=setTimeout(f,r)),It={dismiss:f,timer:p},Promise.resolve()}function _t(){return It&&(It.dismiss(),It=null),Promise.resolve()}return Le("ui.showActionSheet",gt),Le("ui.showModal",bt),Le("ui.showToast",Ct),Le("ui.hideToast",_t),ft(),e.LingXiaBridge=nt,e.boot=function(){st(),mt()},e.bootWhenReady=ft,e.channel=function(e,t,n){return nt.channel(e,t,n)},e.getDisplayLanguage=function(){return h},e.getErrorInfo=dt,e.hasError=ct,e.initBridge=st,e.invoke=function(e,t,n){return nt.invoke(e,t,n)},e.isNativeError=function(e,t){if(!e||"object"!=typeof e)return!1;const n=e;return"string"==typeof n.code&&""!==n.code.trim()&&("string"==typeof n.message&&(void 0===t||n.code===t))},e.notify=function(e,t,n){tt.notify(ot(e),t,rt(n))},e.renderErrorUI=lt,e.stream=function(e,t,n){return it(tt.stream(ot(e),t,rt(n)))},e}({});
1
+ const __LX_RUNTIME_PLATFORM__="all";var __LingXiaBridgeBundle=function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="BRIDGE_TIMEOUT",n="BRIDGE_CANCELED",o="BRIDGE_HANDSHAKE_FAILED",r="BRIDGE_MALFORMED_MESSAGE",i="BRIDGE_METHOD_NOT_FOUND",s="BRIDGE_CAPABILITY_DENIED",a="BRIDGE_INTERNAL_ERROR",l="BRIDGE_OUTBOX_FULL",c="BRIDGE_STREAM_CLOSED";var d=class extends Error{constructor(e,t,n){super(t),this.name="BridgeInvocationError",this.code=e,this.data=n}};function u(e){if(e instanceof d)return e;if(e&&"object"==typeof e){const t=e;let n=a;("string"==typeof t.code&&""!==t.code.trim()||"number"==typeof t.code&&Number.isFinite(t.code))&&(n=t.code);const o="string"==typeof t.message&&""!==t.message.trim()?t.message:"Unknown error";return new d(n,o,"data"in t?t.data:void 0)}const t=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new d(a,t)}function m(e){const t=u(e);return{code:String(t.code||a),message:"string"==typeof t.message&&""!==t.message.trim()?t.message:"Unknown error",...void 0===t.data?{}:{data:t.data}}}function f({os:e,send:t}){if("undefined"==typeof window)return;if("undefined"==typeof document)return;const n="iOS"===e;if(!n&&"Android"!==e)return;const o=Symbol.for("LingXia.NativeComponentCoverageMonitor");if(window[o]?.installed)return;const r={installed:!0,coveredById:new Map,coveredCount:0,anyCovered:!1,scheduled:!1,hasAnyVideo:!1,scrollLocked:!1,scrollY:0,htmlOverflow:"",bodyOverflow:"",bodyPosition:"",bodyTop:"",bodyWidth:""};function i(e){const t=e.getBoundingClientRect?.();if(!t)return!1;if(t.width<2||t.height<2)return!1;const n=t.left+t.width/2,o=t.top+t.height/2;if(n<0||o<0||n>=window.innerWidth||o>=window.innerHeight)return!1;const r=document.elementFromPoint?.(n,o);return!!r&&(r!==document.documentElement&&r!==document.body&&!(r===e||e.contains(r)))}function s(){r.scheduled=!1;const e=document.querySelectorAll("lx-video[id]");if(r.hasAnyVideo=e.length>0,!r.hasAnyVideo&&0===r.coveredById.size&&!r.anyCovered)return;const o=new Set;for(const n of Array.from(e)){const e=n.id;if(!e)continue;o.add(e);const s=i(n),a=r.coveredById.get(e);a!==s&&(!0===a&&(r.coveredCount-=1),!0===s&&(r.coveredCount+=1),r.coveredById.set(e,s),t({id:e,action:"component.coverage",covered:s}))}const s=[];for(const[e,t]of r.coveredById.entries())o.has(e)||(s.push(e),!0===t&&(r.coveredCount-=1));for(const e of s)r.coveredById.delete(e),t({id:e,action:"component.coverage",covered:!1});const a=r.coveredCount>0;a!==r.anyCovered&&(r.anyCovered=a,n&&(a?function(){if(!n)return;if(r.scrollLocked)return;const e=document.documentElement,t=document.body;e&&t&&(r.scrollLocked=!0,r.scrollY=window.scrollY||e.scrollTop||0,r.htmlOverflow=e.style.overflow||"",r.bodyOverflow=t.style.overflow||"",r.bodyPosition=t.style.position||"",r.bodyTop=t.style.top||"",r.bodyWidth=t.style.width||"",e.style.overflow="hidden",t.style.overflow="hidden",t.style.position="fixed",t.style.top=-r.scrollY+"px",t.style.width="100%")}():function(){if(!n)return;if(!r.scrollLocked)return;const e=document.documentElement,t=document.body;e&&t&&(r.scrollLocked=!1,e.style.overflow=r.htmlOverflow,t.style.overflow=r.bodyOverflow,t.style.position=r.bodyPosition,t.style.top=r.bodyTop,t.style.width=r.bodyWidth,window.scrollTo(0,r.scrollY))}()))}function a(){r.scheduled||(r.scheduled=!0,requestAnimationFrame(s))}window[o]=r,new MutationObserver(a).observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0});const l={handleEvent:()=>{(r.hasAnyVideo||0!==r.coveredById.size)&&a()}},c={handleEvent:()=>a()};window.addEventListener("scroll",l,{capture:!0,passive:!0}),window.addEventListener("resize",c),a()}const p="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{},h={value:p.displayLanguage?.trim()||"en-US",listeners:new Set};function g(){return"undefined"==typeof window?h:(window.__lxDisplayLanguage||(window.__lxDisplayLanguage={value:p.displayLanguage?.trim()||"en-US",listeners:new Set}),window.__lxDisplayLanguage)}function v(){"undefined"!=typeof document&&document.documentElement&&(document.documentElement.lang=g().value)}function y(){return p.os||"unknown"}function w(){return"iOS"===p.os}function x(){return"macOS"===p.os}function b(){return"Windows"===p.os}function k(){return x()||b()}v(),"undefined"==typeof window||window.__lingxiaApplyDisplayLanguage||Object.defineProperty(window,"__lingxiaApplyDisplayLanguage",{configurable:!1,enumerable:!1,value:function(e){const t="string"==typeof e?e.trim():"",n=g();if(t&&t!==n.value){n.value=t,v();for(const e of[...n.listeners])e()}}});const E="__LingXiaRecvMessage",I=5e3,_="[LX.Bridge]",C="messageport",L="jsinterface",T="webmessage",S=p.appleDownstreamURL,M={data:!1,proto:!1,all:!1},N=[];function A(e){return M.all||M[e]}function B(...e){(!0===p.dev||M.all||M.proto||M.data)&&console.log(_,...e)}function j(...e){console.warn(_,...e)}function O(...e){console.error(_,...e)}function P(e){try{return JSON.stringify(e)}catch{return function(e,t){const n=new WeakSet;return JSON.stringify(e,(e,t)=>{if("object"==typeof t&&null!==t){if(n.has(t))return"[Circular]";n.add(t)}return t},t)}(e)}}function D(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch{return{}}}const R="iOS"===p.os||"macOS"===p.os?"webkit":"Harmony"===p.os?"messageport":"Windows"===p.os?"webmessage":"Android"===p.os?window.LingXiaProxy?.supportsMessagePort?.()?"messageport":"jsinterface":"unknown";"undefined"!=typeof window&&"function"!=typeof window[E]&&(window[E]=e=>{N.push(e)});let F=null,$=!1,X=null,z=null,H=null,q=200,G=!1,U=0;let W=0,J=null;const Y={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},V={handleEvent:e=>{const t=e;if("LingXia-port-init"!==t.data)return;const n=t.ports?.[0];n&&(rt._connectWebMessagePort(n),Y.resolve?.(n))}};function K(){Y.listenerInstalled||(Y.listenerInstalled=!0,window.addEventListener("message",V))}function Q(){null!==Y.timer&&(window.clearTimeout(Y.timer),Y.timer=null),Y.resolve=null,Y.reject=null,Y.promise=null}function Z(){return"webkit"===R&&(w()||x())}function ee(){null!==H&&(clearTimeout(H),H=null)}function te(e){Z()&&!G&&(G=!0,ee(),null!==J&&(clearInterval(J),J=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",ce),ae=!1,z?.abort(),$=!1,oe(e,!0))}function ne(e){for(const t of Array.from(xe.keys()))je(t,{code:c,message:e});for(const t of Array.from(be.keys()))Oe(t,{code:c,message:e});!function(e){for(const[t,n]of Array.from(ke.entries()))ke.delete(t),n._emitClose(c,e)}(e)}function oe(e,t){$e(),ue=null,me=!1,fe=!1,pe=0,t&&ne(e)}function re(e){let t=e;for(;;){const e=t.indexOf("\n");if(e<0)break;const n=t.slice(0,e).trim();if(t=t.slice(e+1),n)try{ie(JSON.parse(n))}catch(e){j("Apple downstream parse error:",e,n)}}return t}function ie(e){if(!e||"object"!=typeof e)return;W=Date.now();const t=e;if(!0!==t.lxshutdown){if(void 0===t.lxhb){if(!0===t.lxreset)return U=0,oe("Apple downstream reset",!0),void Xe();if("number"==typeof t.lxff){if(t.lxff<=U)return;return U=t.lxff,void We(t.m)}We(e)}}else te("Apple downstream closed")}function se(){if(!Z()||G)return;if(X)return;ee();let e=!1;X=async function(){if(!S)throw new Error("Apple downstream URL is not configured");const e=new AbortController;z=e;const t=S.includes("?")?"&":"?",n=`${S}${t}from=${U}`,o=await fetch(n,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal});if(!o.ok)throw new Error(`Apple downstream HTTP ${o.status}`);if("1"===o.headers.get("X-LingXia-Bridge-Shutdown"))return void te("Apple downstream closed");if(!o.body)throw new Error("Apple downstream response body unavailable");$=!0,q=200,W=Date.now(),A("proto")&&B("Apple downstream connected"),Xe();const r=o.body.getReader(),i=new TextDecoder;let s="";try{for(;;){const{value:e,done:t}=await r.read();if(t)break;s+=i.decode(e,{stream:!0}),s=re(s)}s+=i.decode();const e=s.trim();if(e)try{ie(JSON.parse(e))}catch(t){j("Apple downstream trailing parse error:",t,e)}}catch(t){if(e.signal.aborted)return;throw t}finally{try{r.releaseLock()}catch{}}}().then(()=>{e=!0}).catch(e=>{z?.signal.aborted||j("Apple downstream failed:",e)}).finally(()=>{const t=z?.signal.aborted??!1;X=null,z=null,$=!1,t||G||function(e,t=!1){if(!Z()||G)return;ee();const n=t?0:q;t||(q=Math.min(2*q,2e3));const o=t?`Apple downstream completed, reconnecting immediately: ${e}`:`Apple downstream disconnected, retrying in ${n}ms: ${e}`;n<=200?B(o):j(o),H=setTimeout(()=>{H=null,se()},n)}("stream closed",e)})}let ae=!1;function le(){if(!Z()||G)return;if(ae)return;ae=!0;const e=X;z?.abort();const t=()=>{ae=!1,se()};e?e.finally(t):t()}function ce(){"visible"===document.visibilityState&&le()}function de(e){const t=e.kind;"req"!==t&&"notify"!==t||B(`postToNative: ${t} ${e.method}`),A("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===R)return void window.webkit?.messageHandlers.LingXia?.postMessage(e);const t=P(e);if(R===C&&F)return void F.postMessage(t);if((R===L||R===T)&&window.LingXiaProxy?.postMessage)return void window.LingXiaProxy.postMessage(t);j("Transport not ready")}catch(e){O("Send error:",e)}}let ue=null,me=!1,fe=!1,pe=0,he=null;const ge={};let ve=0;function ye(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function we(e,t){const n=ye();let o=!1,r=!1,i=()=>{},s=()=>{};const a=[],l=[],c=new Promise((e,t)=>{i=e,s=t});return{id:e,result:c,on(e,t){return"data"===e&&n.data.add(t),"end"===e&&n.end.add(t),"error"===e&&n.error.add(t),this},[Symbol.asyncIterator]:()=>(r=!0,{next:()=>a.length>0?Promise.resolve({done:!1,value:a.shift()}):o?c.then(e=>({done:!0,value:e}),e=>Promise.reject(e)):new Promise((e,t)=>{l.push({resolve:e,reject:t})})}),cancel(){o||t()},_emitData(e){if(!o){l.length>0?l.shift().resolve({done:!1,value:e}):r&&a.push(e);for(const t of n.data)try{t(e)}catch(e){j("Stream data listener failed:",e)}}},_resolve(e){if(!o){for(o=!0,i(e);l.length>0;)l.shift().resolve({done:!0,value:e});for(const t of n.end)try{t(e)}catch(e){j("Stream end listener failed:",e)}}},_reject(e){if(!o){for(o=!0,s(e);l.length>0;)l.shift().reject(e);for(const t of n.error)try{t(e)}catch(e){j("Stream error listener failed:",e)}}}}}const xe=new Map,be=new Map,ke=new Map,Ee=[];let Ie=-1,_e={};const Ce=new Set,Le=new WeakMap,Te=new Map;function Se(e,t){Te.set(e,t)}function Me(e){if(e.startsWith("host."))return"host";const t=e.indexOf(".");return t>0?e.slice(0,t):"page"}function Ne(e){if(null!=e)return e}function Ae(){return R===C?!!F:Z()?$:"webkit"===R||R===L||R===T}function Be(){return!!me&&(!!Z()||Ae())}function je(e,t){const n=xe.get(e);if(n){xe.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);if("stream"===n.mode&&n.stream)return void n.stream._reject(o);n.reject?.(o)}}function Oe(e,t){const n=be.get(e);if(!n)return;be.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);n.channel._reject(o),n.reject(o)}function Pe(e,t){xe.has(e)?je(e,t):be.has(e)&&Oe(e,t)}function De(e){xe.has(e)?function(e){const n=xe.get(e);n&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<=0?null!==n.timerId&&(clearTimeout(n.timerId),n.timerId=null):(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(()=>{xe.has(e)&&je(e,{code:t,message:`'${n.method}' timed out`})},n.timeoutMs)))}(e):be.has(e)&&function(e){const n=be.get(e);n&&(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(()=>{Oe(e,{code:t,message:`Channel '${n.topic}' timed out`})},I))}(e)}function Re(e){for(let t=Ee.length-1;t>=0;t--)if(Ee[t]?.reqId===e)return Ee.splice(t,1),!0;return!1}function Fe(e,t){const n=e.kind,o="hello"===n||"helloAck"===n||"ready"===n;if(!Be()&&!o)return Ee.length>=256?(O("Outbox full"),void(t&&Pe(t,{code:l,message:"Bridge outbox is full"}))):void Ee.push({msg:e,reqId:t});t&&De(t),de(e)}function $e(){null!==he&&(clearTimeout(he),he=null)}function Xe(){if(me)return;if(!Ae())return;$e();const e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};fe=!0,de(e),he=setTimeout(()=>{if(!me)if(pe++,pe<3)j(`Handshake timeout (${pe}/3), retrying...`),fe=!1,Xe();else{for(O("Handshake failed"),$e(),fe=!1,pe=0;Ee.length;){const e=Ee.shift();e?.reqId&&Pe(e.reqId,{code:o,message:"Bridge handshake failed"})}for(const e of Array.from(be.keys()))Oe(e,{code:o,message:"Bridge handshake failed"})}},1e4)}function ze(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function He(e,t,n=!1){const o=function(e){if(""===e)return[];if(!e.startsWith("/"))throw new Error(`Invalid JSON pointer: ${e}`);return e.split("/").slice(1).map(ze)}(t);if(0===o.length)return{container:{$root:e},key:"$root"};let r=e;for(let e=0;e<o.length-1;e++){const t=o[e];if(Array.isArray(r))r=r[Number(t)];else{if(!r||"object"!=typeof r)throw new Error(`Invalid container at ${t}`);{const i=r;if(n&&void 0===i[t]){const n=o[e+1];i[t]=n&&/^\d+$/.test(n)?[]:{}}r=i[t]}}}return{container:r,key:o[o.length-1]}}function qe(e){Ce.forEach(t=>{try{if(!Le.has(t))return Le.set(t,!0),void t(D(_e),{rev:Ie,initial:!0});t(D(_e),{rev:Ie,initial:e})}catch(e){j("Subscriber error:",e)}})}function Ge(e){if("function"!=typeof e)return()=>{};if(Ce.add(e),Ie>=0){Le.set(e,!0);try{e(D(_e),{rev:Ie,initial:!0})}catch(e){O("Callback error:",e)}}return()=>{Ce.delete(e),Le.delete(e)}}function Ue(e){ot.call("state.getSnapshot",{scope:e}).catch(()=>{})}function We(e){if(e&&"object"==typeof e){const t=e;if("event"===t.type&&"nativecomponent"===t.name&&t.payload){const e=t.payload,n=e.id||e.componentId;if("string"==typeof n){const t=Je.get(n);if(t)try{t(e)}catch(e){O("NC handler error:",e)}}return}}const t=function(e){if(!e||"object"!=typeof e)return null;const t=e.v,n=e.kind;return 2!==t||"string"!=typeof n?null:e}(e);if(t)switch(t.kind){case"helloAck":return void(ue=t.sessionId);case"ready":if(ue&&t.sessionId!==ue)return void j("sessionId mismatch");if($e(),me=!0,pe=0,t.hostMethods)for(const[e,n]of Object.entries(t.hostMethods))ge[e]=n;return A("proto")&&B("Handshake complete, hostMethods:",Object.keys(ge).length),void function(){if(Be())for(;Ee.length;){const e=Ee.shift();e&&(e.reqId&&De(e.reqId),de(e.msg))}}();case"res":{const e=xe.get(t.id);if(!e)return;if(xe.delete(t.id),null!==e.timerId&&clearTimeout(e.timerId),t.ok){if("state.getSnapshot"===e.method&&(function(e){if(!e||"object"!=typeof e)return!1;const t=e;return!("number"!=typeof t.rev||!Number.isFinite(t.rev)||!t.state||"object"!=typeof t.state||(_e=t.state,Ie=t.rev,A("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",Ie,"state:",D(_e)),console.groupEnd()),qe(!0),0))}(t.result)||j("Invalid state.getSnapshot result")),"stream"===e.mode&&e.stream)return void e.stream._resolve(t.result);e.resolve?.(t.result)}else{const n=u(t.error);if("stream"===e.mode&&e.stream)return void e.stream._reject(n);e.reject?.(n)}return}case"event":if(xe.has(t.id)){const e=xe.get(t.id);return void("stream"===e?.mode&&e.stream?(null!==e.timerId&&(clearTimeout(e.timerId),e.timerId=null),e.timeoutMs=0,e.stream._emitData(t.payload)):j(`Received event for non-stream request '${t.id}'`))}return;case"state.snapshot":return _e=t.state||{},Ie=t.rev,A("data")&&(console.group("[LX] snapshot"),console.log("rev:",Ie,"state:",D(_e)),console.groupEnd()),void qe(!0);case"state.patch":if(t.baseRev!==Ie)return j("baseRev mismatch",{have:Ie,want:t.baseRev}),void Ue(t.scope);try{!function(e,t){for(const n of t){const t="add"===n.op||"replace"===n.op,{container:o,key:r}=He(e,n.path,t);if("$root"===r){for(const t of Object.keys(e))delete e[t];if("remove"!==n.op){const t=n.value;t&&"object"==typeof t&&Object.assign(e,t)}continue}if(Array.isArray(o)){const e="-"===r?o.length:Number(r);if(!Number.isFinite(e)||e<0)throw new Error("Invalid index");"remove"===n.op?o.splice(e,1):"add"===n.op?o.splice(e,0,n.value):"replace"===n.op&&(o[e]=n.value);continue}if(!o||"object"!=typeof o)throw new Error("Invalid container");const i=o;"remove"===n.op?delete i[r]:i[r]=n.value}}(_e,t.ops||[]),Ie=t.rev}catch(e){return O("Patch failed:",e),void Ue(t.scope)}return A("data")&&(console.group("[LX] patch"),console.log("rev:",Ie,"ops:",t.ops),console.groupEnd()),qe(!1),void(t.ack&&Fe({v:2,kind:"state.ack",scope:t.scope,rev:t.rev}));case"ch.ack":{const e=be.get(t.id);if(!e)return;if(be.delete(t.id),null!==e.timerId&&clearTimeout(e.timerId),t.ok)e.channel._markOpen(),ke.set(t.id,e.channel),e.resolve(e.channel);else{const n=u(t.error);e.channel._reject(n),e.reject(n)}return}case"ch.data":{const e=ke.get(t.id);if(!e)return;return void e._emitData(t.payload)}case"ch.close":{if(be.get(t.id))return void Oe(t.id,{code:t.code??c,message:t.reason??"Channel closed before opening"});const e=ke.get(t.id);if(!e)return;return ke.delete(t.id),void e._emitClose(t.code,t.reason)}case"req":{const e=t,n=Me(e.method);if(!e.cap||e.cap!==n)return void Fe({v:2,kind:"res",id:e.id,ok:!1,error:{code:s,message:`Invalid cap for ${e.method}`}});const o=Te.get(e.method);return o?void Promise.resolve().then(()=>o(e.params)).then(t=>{Fe({v:2,kind:"res",id:e.id,ok:!0,result:t})}).catch(t=>{Fe({v:2,kind:"res",id:e.id,ok:!1,error:u(t)})}):void Fe({v:2,kind:"res",id:e.id,ok:!1,error:{code:i,message:`View handler not found: ${e.method}`}})}}else j("Invalid V2 message:",e)}const Je=new Map,Ye=[];let Ve=!1;function Ke(){return"undefined"!=typeof window&&!(!window.webkit?.messageHandlers?.NativeComponent&&!window.NativeComponentBridge?.postMessage)}function Qe(e){try{if(window.webkit?.messageHandlers?.NativeComponent)return void window.webkit.messageHandlers.NativeComponent.postMessage(e);if(window.NativeComponentBridge?.postMessage)return void window.NativeComponentBridge.postMessage(P(e))}catch(e){O("NativeComponent send error:",e)}}function Ze(){if(Ke()&&0!==Ye.length)for(Ve=!0;Ye.length;){const e=Ye.shift();try{Qe(e)}catch{break}}}function et(e){try{if(!Ke())return void Ye.push(e);Ve||Ze(),Qe(e)}catch(e){O("NC send failed:",e)}}function tt(e){return`${e}_${Date.now()}_${ve++}`}function nt(e,t,n){if(!t)return;if(t.aborted)return void n();let o={handleEvent:()=>{t.removeEventListener("abort",o),n()}};t.addEventListener("abort",o)}const ot={call:(e,t,o)=>new Promise((i,s)=>{if(!e||"string"!=typeof e)return void s({code:r,message:"Method name must be a non-empty string"});fe||Xe();const a=tt("c"),l=o?.cap||Me(e),c=o?.timeoutMs??I;xe.set(a,{method:e,mode:"call",resolve:i,reject:e=>s(e),timeoutMs:c,timerId:null}),Fe({v:2,kind:"req",id:a,method:e,params:Ne(t),cap:l},a),nt(0,o?.signal,()=>{const e=Re(a);je(a,{code:n,message:"Bridge request aborted"}),!e&&me&&Fe({v:2,kind:"cancel",id:a})})}),stream(e,t,o){if(!e||"string"!=typeof e){const e=we("invalid",()=>{});return e._reject({code:r,message:"Method name must be a non-empty string"}),e}fe||Xe();const i=tt("c"),s=we(i,()=>{Re(i)?je(i,{code:n,message:"Bridge request aborted"}):me&&Fe({v:2,kind:"cancel",id:i})}),a=o?.cap||Me(e),l=o?.timeoutMs??I;return xe.set(i,{method:e,mode:"stream",stream:s,timeoutMs:l,timerId:null}),Fe({v:2,kind:"req",id:i,method:e,params:Ne(t),cap:a},i),nt(0,o?.signal,()=>s.cancel()),s},notify(e,t,n){e&&"string"==typeof e&&(fe||Xe(),Fe({v:2,kind:"notify",method:e,params:Ne(t),cap:n?.cap||Me(e)}))},state:{subscribe:Ge},channel:{open:(e,t,n)=>e&&"string"==typeof e?(fe||Xe(),new Promise((o,r)=>{const i=tt("ch"),s=function(e,t,n){const o=ye();let r=!1,i=0,s=!1,a=!1;const l=[],d=[],u={id:e,send(n){r?t(n,i++):u._reject({code:c,message:`Channel '${e}' is closed`})},on(e,t){if("data"===e&&(o.data.add(t),l.length>0)){const e=l.splice(0);for(const n of e)try{t(n)}catch(e){j("Channel listener failed:",e)}}return"close"===e&&o.close.add(t),"error"===e&&o.error.add(t),this},[Symbol.asyncIterator]:()=>(a=!0,{next:()=>l.length>0?Promise.resolve({done:!1,value:l.shift()}):s?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>{d.push({resolve:e,reject:t})})}),close(e,t){r&&(r=!1,s=!0,n(e,t),u._emitClose(e,t))},_emitData(e){if(r){d.length>0?d.shift().resolve({done:!1,value:e}):(a||0===o.data.size)&&l.push(e);for(const t of o.data)try{t(e)}catch(e){j("Channel listener failed:",e)}}},_emitClose(e,t){for(s=!0;d.length>0;)d.shift().resolve({done:!0,value:void 0});for(const n of o.close)try{n(e,t)}catch(e){j("Channel close listener failed:",e)}},_reject(e){for(s=!0;d.length>0;)d.shift().reject(e);for(const t of o.error)try{t(e)}catch(e){j("Channel error listener failed:",e)}},_markOpen(){r=!0,s=!1},_isOpen:()=>r,_nextSeq:()=>i++};return u}(i,(e,t)=>{Fe({v:2,kind:"ch.data",id:i,seq:t,payload:e})},(e,t)=>{const n=be.get(i);n&&null!==n.timerId&&clearTimeout(n.timerId),be.delete(i),ke.delete(i),Fe({v:2,kind:"ch.close",id:i,code:e,reason:t})});be.set(i,{topic:e,channel:s,resolve:o,reject:r,timerId:null}),Fe({v:2,kind:"ch.open",id:i,topic:e,params:Ne(t),cap:n?.cap||Me(e)},i)})):Promise.reject({code:r,message:"Topic name must be a non-empty string"})}},rt={invoke:(e,t,n)=>ot.call(it(e),t,st(n)).then(e=>e).catch(e=>Promise.reject(m(e))),notify(e,t,n){ot.notify(it(e),t,st(n))},stream:(e,t,n)=>at(ot.stream(it(e),t,st(n))),channel:(e,t,n)=>ot.channel.open(it(e),t,st(n)).then(e=>function(e){const t=new Set,n=new Set;return e.on("data",e=>{for(const n of t)n(e)}),e.on("close",(e,t)=>{const o={code:e,reason:t};for(const e of n)e(o)}),{send(t){e.send(t)},onMessage:e=>(t.add(e),()=>{t.delete(e)}),onClose:e=>(n.add(e),()=>{n.delete(e)}),close(t,n){e.close(t,n)}}}(e)).catch(e=>Promise.reject(m(e))),raw:ot,state:{subscribe:Ge},_connectWebMessagePort(e){if(R===C){if(F&&F!==e)try{F.onmessage=null,F.close()}catch{}F=e,e.onmessage=e=>{let t=e.data;if("string"==typeof t)try{t=JSON.parse(t)}catch{return}We(t)};try{e.start()}catch{}B("Port connected"),Xe()}},_receiveEvaluateMessage(e){try{e&&We(JSON.parse(e))}catch(e){O("Parse error:",e)}},debug:function(e){const t={};return Object.keys(e).forEach(n=>{Object.defineProperty(t,n,{enumerable:!0,configurable:!1,get:()=>e[n],set(t){e[n]=!!t,console.log(`[LX] ${n}: ${t}`)}})}),t}(M),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:w,isAndroid:function(){return"Android"===p.os},isMacOS:x,isWindows:b,isDesktop:k,isApple:function(){return w()||x()},isRunner:function(){return!0===p.runner},getOS:y},dom:{measureById(e){try{if(!e)return null;const t=document.getElementById(e);if(!t)return null;const n=t.getBoundingClientRect();let o=0;try{o=parseFloat(getComputedStyle(t).borderRadius)||0}catch{}return[n.left+window.scrollX,n.top+window.scrollY,n.width,n.height,o]}catch{return null}}},nativeComponents:{send:et,hasHandler:Ke,flush:Ze,register:(e,t)=>e&&"function"==typeof t?(Je.set(e,t),()=>Je.delete(e)):()=>{},unregister(e){Je.delete(e)}},isReady:()=>me};function it(e){return e.startsWith("host.")?e:`host.${e}`}function st(e){return{...e||{},cap:e?.cap||"host"}}function at(e){const t=new Set,n=new Set;return e.on("data",e=>{for(const n of t)n(e)}),e.on("error",e=>{const t=m(e);for(const e of n)e(t)}),{onEvent:e=>(t.add(e),()=>{t.delete(e)}),onError:e=>(n.add(e),()=>{n.delete(e)}),result:e.result.catch(e=>Promise.reject(m(e))),cancel(){e.cancel()}}}function lt(){if(window.__LX_BRIDGE_INIT_STATE)B(`Bridge already ${window.__LX_BRIDGE_INIT_STATE}, skipping duplicate init`);else{window.__LX_BRIDGE_INIT_STATE="initializing";try{B(`Method: ${R}`),function(e){if("undefined"==typeof window)return;if(window[E]=e,0===N.length)return;const t=N.splice(0,N.length);for(const n of t)try{e(n)}catch(e){j("Failed to replay queued native message:",e)}}(rt._receiveEvaluateMessage),Z()?(se(),Z()&&!G&&null===J&&(J=setInterval(()=>{0!==W&&Date.now()-W>35e3&&(j("Apple downstream stale (no heartbeat), forcing reconnect"),le())},5e3)),Z()&&"undefined"!=typeof document&&document.addEventListener("visibilitychange",ce)):R===C?(K(),function(){if(F)return Promise.resolve(F);if(Y.promise)return Y.promise;K(),Y.promise=new Promise((e,t)=>{Y.resolve=t=>{Q(),e(t)},Y.reject=e=>{Q(),t(e)},Y.timer=window.setTimeout(()=>{Y.reject?.(new Error("MessagePort init timed out after 5000ms"))},5e3)});try{window.LingXiaProxy?.getPort("LingXiaPort")}catch(e){Y.reject?.(e)}return Y.promise}().catch(e=>j("Port init failed:",e))):"webkit"===R||R===L||R===T?Xe():j("Unknown method"),window.LingXiaBridge=rt,window.__lxForceDownstreamReconnect=le,f({os:y(),send:et}),window.__LX_BRIDGE_INIT_STATE="initialized",B("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function ct(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function dt(e){const{failedPath:t,reason:n}=e,o=document.createElement("style");o.textContent="\n* { margin: 0; padding: 0; box-sizing: border-box; }\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: #f5f5f7;\n color: #1d1d1f;\n padding: 20px;\n -webkit-font-smoothing: antialiased;\n}\n.lx-error {\n text-align: center;\n max-width: 400px;\n}\n.lx-error-code {\n font-size: 120px;\n font-weight: 700;\n color: #d1d1d6;\n line-height: 1;\n letter-spacing: -4px;\n}\n.lx-error-title {\n font-size: 21px;\n font-weight: 600;\n margin: 16px 0 8px;\n color: #1d1d1f;\n}\n.lx-error-desc {\n font-size: 15px;\n color: #86868b;\n line-height: 1.5;\n}\n.lx-error-path {\n display: inline-block;\n margin-top: 20px;\n padding: 10px 16px;\n background: rgba(0,0,0,0.04);\n border-radius: 8px;\n font-family: 'SF Mono', ui-monospace, Menlo, Monaco, monospace;\n font-size: 13px;\n color: #1d1d1f;\n word-break: break-all;\n max-width: 100%;\n}\n@media (prefers-color-scheme: dark) {\n body { background: #000; color: #f5f5f7; }\n .lx-error-code { color: #3a3a3c; }\n .lx-error-title { color: #f5f5f7; }\n .lx-error-desc { color: #86868b; }\n .lx-error-path { background: rgba(255,255,255,0.08); color: #f5f5f7; }\n}\n",document.head.appendChild(o),document.body.innerHTML="",document.body.style.cssText="";const r=document.createElement("div");r.className="lx-error";let i='<div class="lx-error-code">404</div>';i+='<h1 class="lx-error-title">Page Not Found</h1>',i+="<p class=\"lx-error-desc\">The page you're looking for doesn't exist.</p>",t&&(i+=`<div class="lx-error-path">${ct(t)}</div>`),n&&(i+=`<p class="lx-error-desc" style="margin-top:12px">${ct(n)}</p>`),r.innerHTML=i,document.body.appendChild(r)}function ut(){const e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function mt(){return window.__LX_RUNTIME_CONFIG?.error||null}const ft={handleEvent:()=>pt()};function pt(){if(ut()){const e=mt();e&&dt(e)}}function ht(){lt(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",ft):pt()}const gt="lx-action-sheet-style";let vt=null;function yt(e){const t=e,n=t?.itemList??[],o=t?.cancelText??"Cancel",r=t?.itemColor??"#007AFF",i=(vt??Promise.resolve()).then(()=>wt(n,o,r),()=>wt(n,o,r));return vt=i,i}function wt(e,t,n){return new Promise(o=>{let r=!1;const i=k();!function(){if(document.getElementById(gt))return;const e=document.createElement("style");e.id=gt,e.textContent="\n.lx-as-backdrop {\n position: fixed; inset: 0; z-index: 99999;\n background: rgba(0,0,0,0.4);\n opacity: 0; transition: opacity 300ms ease;\n}\n.lx-as-backdrop.lx-as-visible { opacity: 1; }\n\n.lx-as-sheet {\n position: fixed; left: 0; right: 0; bottom: 0; z-index: 100000;\n transform: translateY(100%);\n transition: transform 300ms ease;\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n -webkit-font-smoothing: antialiased;\n}\n.lx-as-sheet.lx-as-visible { transform: translateY(0); }\n.lx-as-sheet.lx-as-desktop {\n left: 50%;\n right: auto;\n bottom: auto;\n top: 50%;\n width: min(92vw, 460px);\n transform: translate(-50%, calc(-50% + 16px));\n}\n.lx-as-sheet.lx-as-desktop.lx-as-visible { transform: translate(-50%, -50%); }\n\n.lx-as-container {\n background: #fff;\n border-radius: 16px 16px 0 0;\n overflow: hidden;\n}\n.lx-as-container.lx-as-desktop {\n border-radius: 16px;\n}\n\n.lx-as-item {\n display: block; width: 100%;\n height: 56px;\n line-height: 56px;\n padding: 0;\n border: none; background: none;\n font-size: 18px; font-weight: 400;\n text-align: center;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n position: relative;\n}\n.lx-as-item:active { background: rgba(0,0,0,0.08); }\n.lx-as-item + .lx-as-item::before {\n content: ''; position: absolute; top: 0; left: 0; right: 0;\n height: 1px; background: #E0E0E0;\n}\n.lx-as-separator {\n height: 8px;\n background: #F2F2F2;\n}\n.lx-as-cancel-btn { font-weight: 500; color: #000; }\n",document.head.appendChild(e)}();const s=document.createElement("div");s.className="lx-as-backdrop";const a=document.createElement("div");a.className="lx-as-sheet",i&&a.classList.add("lx-as-desktop");const l=document.createElement("div");l.className="lx-as-container",i&&l.classList.add("lx-as-desktop"),e.forEach((e,t)=>{const o=document.createElement("button");o.className="lx-as-item",o.textContent=e,o.style.color=n,o.addEventListener("click",()=>u(t)),l.appendChild(o)});const c=document.createElement("div");c.className="lx-as-separator",l.appendChild(c);const d=document.createElement("button");function u(e){r||(r=!0,s.classList.remove("lx-as-visible"),a.classList.remove("lx-as-visible"),setTimeout(()=>{s.remove(),a.remove(),o({tapIndex:e})},300))}d.className="lx-as-item lx-as-cancel-btn",d.textContent=t,d.addEventListener("click",()=>u(-1)),l.appendChild(d),a.appendChild(l),document.body.appendChild(s),document.body.appendChild(a),requestAnimationFrame(()=>{s.classList.add("lx-as-visible"),a.classList.add("lx-as-visible")}),s.addEventListener("click",()=>u(-1))})}const xt=200,bt="lx-modal-style";let kt=null;function Et(e){const t=e,n=t?.title??"",o=t?.content??"",r=t?.showCancel??!0,i=t?.cancelText??"Cancel",s=t?.cancelColor,a=t?.confirmText??"OK",l=t?.confirmColor??"#007AFF",c=(kt??Promise.resolve()).then(()=>It(n,o,r,i,s,a,l),()=>It(n,o,r,i,s,a,l));return kt=c,c}function It(e,t,n,o,r,i,s){return new Promise(a=>{let l=!1;!function(){if(document.getElementById(bt))return;const e=document.createElement("style");e.id=bt,e.textContent="\n.lx-modal-backdrop {\n position: fixed; inset: 0; z-index: 99999;\n background: rgba(0,0,0,0.4);\n opacity: 0; transition: opacity 200ms ease;\n display: flex; align-items: center; justify-content: center;\n}\n.lx-modal-backdrop.lx-modal-visible { opacity: 1; }\n\n.lx-modal-dialog {\n width: min(92vw, 320px);\n background: #fff;\n border-radius: 14px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n -webkit-font-smoothing: antialiased;\n transform: scale(0.95); opacity: 0;\n transition: transform 200ms ease, opacity 200ms ease;\n}\n.lx-modal-backdrop.lx-modal-visible .lx-modal-dialog {\n transform: scale(1); opacity: 1;\n}\n\n.lx-modal-body {\n padding: 24px 20px 16px;\n text-align: center;\n}\n.lx-modal-title {\n margin: 0 0 8px;\n font-size: 17px;\n font-weight: 600;\n color: #000;\n line-height: 1.35;\n}\n.lx-modal-content {\n margin: 0;\n font-size: 14px;\n color: #666;\n line-height: 1.5;\n word-break: break-word;\n}\n.lx-modal-body:has(.lx-modal-title:empty) .lx-modal-content {\n font-size: 17px;\n font-weight: 600;\n color: #000;\n}\n\n.lx-modal-footer {\n display: flex;\n border-top: 1px solid #E0E0E0;\n}\n.lx-modal-btn {\n flex: 1;\n height: 44px;\n line-height: 44px;\n padding: 0;\n border: none;\n background: none;\n font-size: 17px;\n text-align: center;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n}\n.lx-modal-btn:active { background: rgba(0,0,0,0.06); }\n.lx-modal-btn + .lx-modal-btn {\n border-left: 1px solid #E0E0E0;\n}\n.lx-modal-btn-cancel {\n color: #666;\n font-weight: 400;\n}\n.lx-modal-btn-confirm {\n font-weight: 600;\n}\n\n@media (prefers-color-scheme: dark) {\n .lx-modal-dialog { background: #2c2c2e; }\n .lx-modal-title { color: #f5f5f7; }\n .lx-modal-content { color: #ababab; }\n .lx-modal-body:has(.lx-modal-title:empty) .lx-modal-content {\n color: #f5f5f7;\n }\n .lx-modal-footer { border-top-color: #3a3a3c; }\n .lx-modal-btn:active { background: rgba(255,255,255,0.08); }\n .lx-modal-btn + .lx-modal-btn { border-left-color: #3a3a3c; }\n .lx-modal-btn-cancel { color: #ababab; }\n}\n",document.head.appendChild(e)}();const c=document.createElement("div");c.className="lx-modal-backdrop";const d=document.createElement("div");d.className="lx-modal-dialog";const u=document.createElement("div");u.className="lx-modal-body";const m=document.createElement("div");if(m.className="lx-modal-title",m.textContent=e,u.appendChild(m),t){const e=document.createElement("p");e.className="lx-modal-content",e.textContent=t,u.appendChild(e)}d.appendChild(u);const f=document.createElement("div");if(f.className="lx-modal-footer",n){const e=document.createElement("button");e.className="lx-modal-btn lx-modal-btn-cancel",e.textContent=o,r&&(e.style.color=r),e.addEventListener("click",()=>h(!1)),f.appendChild(e)}const p=document.createElement("button");function h(e){l||(l=!0,c.classList.remove("lx-modal-visible"),setTimeout(()=>{c.remove(),a({confirm:e,cancel:!e})},xt))}p.className="lx-modal-btn lx-modal-btn-confirm",p.textContent=i,p.style.color=s,p.addEventListener("click",()=>h(!0)),f.appendChild(p),d.appendChild(f),c.appendChild(d),document.body.appendChild(c),requestAnimationFrame(()=>{c.classList.add("lx-modal-visible")})})}const _t="lx-toast-style";let Ct=null;function Lt(e){const t=e,n=t?.title??"",o=t?.icon??"none",r=t?.duration??1500,i=t?.mask??!1,s=t?.position??"center";if(Ct&&Ct.icon===o&&Ct.position===s&&Ct.mask===i){const e=Ct;return e.titleEl.textContent=n,e.timer&&clearTimeout(e.timer),e.timer=r>0?setTimeout(e.dismiss,r):null,Promise.resolve()}Ct&&(Ct.dismiss(),Ct=null),function(){if(document.getElementById(_t))return;const e=document.createElement("style");e.id=_t,e.textContent="\n.lx-toast-mask {\n position: fixed; inset: 0; z-index: 99998;\n}\n.lx-toast-container {\n position: fixed; left: 0; right: 0; z-index: 99999;\n display: flex; justify-content: center;\n pointer-events: none;\n}\n.lx-toast-container.lx-toast-top { top: 0; padding-top: 80px; }\n.lx-toast-container.lx-toast-center { top: 0; bottom: 0; align-items: center; }\n.lx-toast-container.lx-toast-bottom { bottom: 0; padding-bottom: 80px; }\n\n.lx-toast-box {\n display: flex; flex-direction: column; align-items: center; gap: 10px;\n min-width: 120px; max-width: 280px;\n padding: 20px;\n background: rgba(0,0,0,0.8);\n border-radius: 12px;\n color: #fff;\n pointer-events: auto;\n transform: scale(0.8); opacity: 0;\n transition: transform 200ms ease, opacity 200ms ease;\n}\n.lx-toast-box.lx-toast-no-icon {\n min-width: auto; min-height: auto;\n padding: 12px 20px;\n}\n.lx-toast-box.lx-toast-visible {\n transform: scale(1); opacity: 1;\n}\n.lx-toast-icon {\n width: 36px; height: 36px;\n color: #fff;\n line-height: 0;\n}\n.lx-toast-title {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n font-size: 16px; font-weight: 500;\n text-align: center;\n line-height: 1.4;\n word-break: break-word;\n -webkit-font-smoothing: antialiased;\n}\n",document.head.appendChild(e)}();let a=null;i&&(a=document.createElement("div"),a.className="lx-toast-mask",document.body.appendChild(a));const l=document.createElement("div");l.className="lx-toast-container","top"===s?l.classList.add("lx-toast-top"):"bottom"===s?l.classList.add("lx-toast-bottom"):l.classList.add("lx-toast-center");const c=document.createElement("div");c.className="lx-toast-box";const d="none"!==o;if(d||c.classList.add("lx-toast-no-icon"),d){const e=document.createElement("div");e.className="lx-toast-icon","success"===o?e.innerHTML='<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="18" cy="18" r="17" stroke="currentColor" stroke-width="2"/><path d="M11 18l5 5 9-9" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/></svg>':"error"===o?e.innerHTML='<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="18" cy="18" r="17" stroke="currentColor" stroke-width="2"/><path d="M13 13l10 10M23 13l-10 10" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"/></svg>':"loading"===o&&(e.innerHTML='<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 4a14 14 0 0 1 14 14" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="0.8s" repeatCount="indefinite"/></path></svg>'),c.appendChild(e)}const u=document.createElement("div");u.className="lx-toast-title",u.textContent=n,c.appendChild(u),l.appendChild(c),document.body.appendChild(l),requestAnimationFrame(()=>{c.classList.add("lx-toast-visible")});let m=!1;function f(){m||(m=!0,p.timer&&clearTimeout(p.timer),Ct===p&&(Ct=null),c.classList.remove("lx-toast-visible"),setTimeout(()=>{l.remove(),a?.remove()},200))}const p={dismiss:f,timer:null,titleEl:u,icon:o,position:s,mask:i};return r>0&&(p.timer=setTimeout(f,r)),Ct=p,Promise.resolve()}function Tt(){return Ct&&(Ct.dismiss(),Ct=null),Promise.resolve()}return Se("ui.showActionSheet",yt),Se("ui.showModal",Et),Se("ui.showToast",Lt),Se("ui.hideToast",Tt),ht(),e.LingXiaBridge=rt,e.boot=function(){lt(),pt()},e.bootWhenReady=ht,e.channel=function(e,t,n){return rt.channel(e,t,n)},e.getDisplayLanguage=function(){return g().value},e.getErrorInfo=mt,e.hasError=ut,e.initBridge=lt,e.invoke=function(e,t,n){return rt.invoke(e,t,n)},e.isNativeError=function(e,t){if(!e||"object"!=typeof e)return!1;const n=e;return"string"==typeof n.code&&""!==n.code.trim()&&("string"==typeof n.message&&(void 0===t||n.code===t))},e.notify=function(e,t,n){ot.notify(it(e),t,st(n))},e.renderErrorUI=dt,e.stream=function(e,t,n){return at(ot.stream(it(e),t,st(n)))},e.subscribeDisplayLanguage=function(e){const t=g().listeners;return t.add(e),()=>{t.delete(e)}},e}({});
@@ -1 +1 @@
1
- var __extends=this&&this.__extends||function(){var e=function(n,t){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])},e(n,t)};return function(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=n}e(n,t),n.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e},__assign.apply(this,arguments)},__awaiter=this&&this.__awaiter||function(e,n,t,r){return new(t||(t=Promise))(function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t(function(e){e(n)})).then(a,c)}l((r=r.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(e,n){var t,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(l){return function(c){if(t)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=n.call(e,i)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,l])}}},__spreadArray=this&&this.__spreadArray||function(e,n,t){if(t||2===arguments.length)for(var r,o=0,i=n.length;o<i;o++)!r&&o in n||(r||(r=Array.prototype.slice.call(n,0,o)),r[o]=n[o]);return e.concat(r||Array.prototype.slice.call(n))},__LX_RUNTIME_PLATFORM__="mobile",__LingXiaBridgeBundle=function(e){var n;Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});var t="BRIDGE_TIMEOUT",r="BRIDGE_CANCELED",o="BRIDGE_HANDSHAKE_FAILED",i="BRIDGE_MALFORMED_MESSAGE",a="BRIDGE_METHOD_NOT_FOUND",c="BRIDGE_CAPABILITY_DENIED",l="BRIDGE_INTERNAL_ERROR",s="BRIDGE_OUTBOX_FULL",d="BRIDGE_STREAM_CLOSED",u=function(e){function n(n,t,r){var o=e.call(this,t)||this;return o.name="BridgeInvocationError",o.code=n,o.data=r,o}return __extends(n,e),n}(Error);function f(e){if(e instanceof u)return e;if(e&&"object"==typeof e){var n=e,t=l;("string"==typeof n.code&&""!==n.code.trim()||"number"==typeof n.code&&Number.isFinite(n.code))&&(t=n.code);var r="string"==typeof n.message&&""!==n.message.trim()?n.message:"Unknown error";return new u(t,r,"data"in n?n.data:void 0)}var o=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new u(l,o)}function v(e){var n=f(e);return __assign({code:String(n.code||l),message:"string"==typeof n.message&&""!==n.message.trim()?n.message:"Unknown error"},void 0===n.data?{}:{data:n.data})}function m(e){var n,t=e.os,r=e.send;if("undefined"!=typeof window&&"undefined"!=typeof document){var o="iOS"===t;if(o||"Android"===t){var i=Symbol.for("LingXia.NativeComponentCoverageMonitor");if(!(null===(n=window[i])||void 0===n?void 0:n.installed)){var a={installed:!0,coveredById:new Map,coveredCount:0,anyCovered:!1,scheduled:!1,hasAnyVideo:!1,scrollLocked:!1,scrollY:0,htmlOverflow:"",bodyOverflow:"",bodyPosition:"",bodyTop:"",bodyWidth:""};window[i]=a,new MutationObserver(u).observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0});var c={handleEvent:function(){(a.hasAnyVideo||0!==a.coveredById.size)&&u()}},l={handleEvent:function(){return u()}};window.addEventListener("scroll",c,{capture:!0,passive:!0}),window.addEventListener("resize",l),u()}}}function s(e){var n,t,r=null===(n=e.getBoundingClientRect)||void 0===n?void 0:n.call(e);if(!r)return!1;if(r.width<2||r.height<2)return!1;var o=r.left+r.width/2,i=r.top+r.height/2;if(o<0||i<0||o>=window.innerWidth||i>=window.innerHeight)return!1;var a=null===(t=document.elementFromPoint)||void 0===t?void 0:t.call(document,o,i);return!!a&&(a!==document.documentElement&&a!==document.body&&!(a===e||e.contains(a)))}function d(){a.scheduled=!1;var e=document.querySelectorAll("lx-video[id]");if(a.hasAnyVideo=e.length>0,a.hasAnyVideo||0!==a.coveredById.size||a.anyCovered){for(var n=new Set,t=0,i=Array.from(e);t<i.length;t++){var c=i[t];if(p=c.id){n.add(p);var l=s(c),d=a.coveredById.get(p);d!==l&&(!0===d&&(a.coveredCount-=1),!0===l&&(a.coveredCount+=1),a.coveredById.set(p,l),r({id:p,action:"component.coverage",covered:l}))}}for(var u=[],f=0,v=a.coveredById.entries();f<v.length;f++){var m=v[f],p=m[0];l=m[1];n.has(p)||(u.push(p),!0===l&&(a.coveredCount-=1))}for(var h=0,g=u;h<g.length;h++){p=g[h];a.coveredById.delete(p),r({id:p,action:"component.coverage",covered:!1})}var y=a.coveredCount>0;y!==a.anyCovered&&(a.anyCovered=y,o&&(y?function(){if(o&&!a.scrollLocked){var e=document.documentElement,n=document.body;e&&n&&(a.scrollLocked=!0,a.scrollY=window.scrollY||e.scrollTop||0,a.htmlOverflow=e.style.overflow||"",a.bodyOverflow=n.style.overflow||"",a.bodyPosition=n.style.position||"",a.bodyTop=n.style.top||"",a.bodyWidth=n.style.width||"",e.style.overflow="hidden",n.style.overflow="hidden",n.style.position="fixed",n.style.top="".concat(-a.scrollY,"px"),n.style.width="100%")}}():function(){if(o&&a.scrollLocked){var e=document.documentElement,n=document.body;e&&n&&(a.scrollLocked=!1,e.style.overflow=a.htmlOverflow,n.style.overflow=a.bodyOverflow,n.style.position=a.bodyPosition,n.style.top=a.bodyTop,n.style.width=a.bodyWidth,window.scrollTo(0,a.scrollY))}}()))}}function u(){a.scheduled||(a.scheduled=!0,requestAnimationFrame(d))}}var p="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{},h=(null===(n=p.displayLanguage)||void 0===n?void 0:n.trim())||"en-US";function g(){return p.os||"unknown"}function y(){return"iOS"===p.os}function w(){return"macOS"===p.os}function b(){return"Windows"===p.os}"undefined"!=typeof document&&document.documentElement&&(document.documentElement.lang=h);var _="__LingXiaRecvMessage",I=5e3,k="[LX.Bridge]",E="messageport",x="jsinterface",S="webmessage",T=p.appleDownstreamURL,A={data:!1,proto:!1,all:!1},O=[];function M(e){return A.all||A[e]}function L(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];(!0===p.dev||A.all||A.proto||A.data)&&console.log.apply(console,__spreadArray([k],e,!1))}function j(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.warn.apply(console,__spreadArray([k],e,!1))}function C(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.error.apply(console,__spreadArray([k],e,!1))}function N(e){try{return JSON.stringify(e)}catch(n){return function(e,n){var t=new WeakSet;return JSON.stringify(e,function(e,n){if("object"==typeof n&&null!==n){if(t.has(n))return"[Circular]";t.add(n)}return n},n)}(e)}}function B(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch(e){return{}}}var P=function(){var e,n;return"iOS"===p.os||"macOS"===p.os?"webkit":"Harmony"===p.os?"messageport":"Windows"===p.os?"webmessage":"Android"===p.os?(null===(n=null===(e=window.LingXiaProxy)||void 0===e?void 0:e.supportsMessagePort)||void 0===n?void 0:n.call(e))?"messageport":"jsinterface":"unknown"}();"undefined"!=typeof window&&"function"!=typeof window[_]&&(window[_]=function(e){O.push(e)});var R=null,D=!1,X=null,F=null,G=null,H=200,q=!1,U=0,W=0,z=null,J={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},Y={handleEvent:function(e){var n,t,r=e;if("LingXia-port-init"===r.data){var o=null===(n=r.ports)||void 0===n?void 0:n[0];o&&(rn._connectWebMessagePort(o),null===(t=J.resolve)||void 0===t||t.call(J,o))}}};function V(){J.listenerInstalled||(J.listenerInstalled=!0,window.addEventListener("message",Y))}function $(){null!==J.timer&&(window.clearTimeout(J.timer),J.timer=null),J.resolve=null,J.reject=null,J.promise=null}function K(){return"webkit"===P&&(y()||w())}function Q(){null!==G&&(clearTimeout(G),G=null)}function Z(e){K()&&!q&&(q=!0,Q(),null!==z&&(clearInterval(z),z=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",ce),ie=!1,null==F||F.abort(),D=!1,ne(e,!0))}function ee(e){for(var n=0,t=Array.from(ye.keys());n<t.length;n++){Le(t[n],{code:d,message:e})}for(var r=0,o=Array.from(we.keys());r<o.length;r++){je(o[r],{code:d,message:e})}!function(e){for(var n=0,t=Array.from(be.entries());n<t.length;n++){var r=t[n],o=r[0],i=r[1];be.delete(o),i._emitClose(d,e)}}(e)}function ne(e,n){Re(),se=null,de=!1,ue=!1,fe=0,n&&ee(e)}function te(e){if(e&&"object"==typeof e){W=Date.now();var n=e;if(!0!==n.lxshutdown){if(void 0===n.lxhb){if(!0===n.lxreset)return U=0,ne("Apple downstream reset",!0),void De();if("number"==typeof n.lxff){if(n.lxff<=U)return;return U=n.lxff,void Ue(n.m)}Ue(e)}}else Z("Apple downstream closed")}}function re(){return __awaiter(this,void 0,void 0,function(){var e,n,t,r,o,i,a,c,l,s,d;return __generator(this,function(u){switch(u.label){case 0:if(!T)throw new Error("Apple downstream URL is not configured");return e=new AbortController,F=e,n=T.includes("?")?"&":"?",t="".concat(T).concat(n,"from=").concat(U),[4,fetch(t,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal})];case 1:if(!(r=u.sent()).ok)throw new Error("Apple downstream HTTP ".concat(r.status));if("1"===r.headers.get("X-LingXia-Bridge-Shutdown"))return Z("Apple downstream closed"),[2];if(!r.body)throw new Error("Apple downstream response body unavailable");D=!0,H=200,W=Date.now(),M("proto")&&L("Apple downstream connected"),De(),o=r.body.getReader(),i=new TextDecoder,a="",u.label=2;case 2:u.trys.push([2,6,7,8]),u.label=3;case 3:return[4,o.read()];case 4:return c=u.sent(),l=c.value,c.done?[3,5]:(a=function(e){for(var n=e;;){var t=n.indexOf("\n");if(t<0)break;var r=n.slice(0,t).trim();if(n=n.slice(t+1),r)try{te(JSON.parse(r))}catch(e){j("Apple downstream parse error:",e,r)}}return n}(a+=i.decode(l,{stream:!0})),[3,3]);case 5:if(a+=i.decode(),s=a.trim())try{te(JSON.parse(s))}catch(e){j("Apple downstream trailing parse error:",e,s)}return[3,8];case 6:if(d=u.sent(),e.signal.aborted)return[2];throw d;case 7:try{o.releaseLock()}catch(e){}return[7];case 8:return[2]}})})}function oe(){if(K()&&!q&&!X){Q();var e=!1;X=re().then(function(){e=!0}).catch(function(e){(null==F?void 0:F.signal.aborted)||j("Apple downstream failed:",e)}).finally(function(){var n,t=null!==(n=null==F?void 0:F.signal.aborted)&&void 0!==n&&n;X=null,F=null,D=!1,t||q||function(e,n){if(void 0===n&&(n=!1),K()&&!q){Q();var t=n?0:H;n||(H=Math.min(2*H,2e3));var r=n?"Apple downstream completed, reconnecting immediately: ".concat(e):"Apple downstream disconnected, retrying in ".concat(t,"ms: ").concat(e);t<=200?L(r):j(r),G=setTimeout(function(){G=null,oe()},t)}}("stream closed",e)})}}var ie=!1;function ae(){if(K()&&!q&&!ie){ie=!0;var e=X;null==F||F.abort();var n=function(){ie=!1,oe()};e?e.finally(n):n()}}function ce(){"visible"===document.visibilityState&&ae()}function le(e){var n,t,r,o=e.kind;"req"!==o&&"notify"!==o||L("postToNative: ".concat(o," ").concat(e.method)),M("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===P)return void(null===(t=null===(n=window.webkit)||void 0===n?void 0:n.messageHandlers.LingXia)||void 0===t||t.postMessage(e));var i=N(e);if(P===E&&R)return void R.postMessage(i);if((P===x||P===S)&&(null===(r=window.LingXiaProxy)||void 0===r?void 0:r.postMessage))return void window.LingXiaProxy.postMessage(i);j("Transport not ready")}catch(e){C("Send error:",e)}}var se=null,de=!1,ue=!1,fe=0,ve=null,me={},pe=0;function he(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function ge(e,n){var t,r=he(),o=!1,i=!1,a=function(){},c=function(){},l=[],s=[],d=new Promise(function(e,n){a=e,c=n});return(t={id:e,result:d,on:function(e,n){return"data"===e&&r.data.add(n),"end"===e&&r.end.add(n),"error"===e&&r.error.add(n),this}})[Symbol.asyncIterator]=function(){return i=!0,{next:function(){return l.length>0?Promise.resolve({done:!1,value:l.shift()}):o?d.then(function(e){return{done:!0,value:e}},function(e){return Promise.reject(e)}):new Promise(function(e,n){s.push({resolve:e,reject:n})})}}},t.cancel=function(){o||n()},t._emitData=function(e){if(!o){s.length>0?s.shift().resolve({done:!1,value:e}):i&&l.push(e);for(var n=0,t=r.data;n<t.length;n++){var a=t[n];try{a(e)}catch(e){j("Stream data listener failed:",e)}}}},t._resolve=function(e){if(!o){for(o=!0,a(e);s.length>0;)s.shift().resolve({done:!0,value:e});for(var n=0,t=r.end;n<t.length;n++){var i=t[n];try{i(e)}catch(e){j("Stream end listener failed:",e)}}}},t._reject=function(e){if(!o){for(o=!0,c(e);s.length>0;)s.shift().reject(e);for(var n=0,t=r.error;n<t.length;n++){var i=t[n];try{i(e)}catch(e){j("Stream error listener failed:",e)}}}},t}var ye=new Map,we=new Map,be=new Map,_e=[],Ie=-1,ke={},Ee=new Set,xe=new WeakMap,Se=new Map;function Te(e){if(e.startsWith("host."))return"host";var n=e.indexOf(".");return n>0?e.slice(0,n):"page"}function Ae(e){if(null!=e)return e}function Oe(){return P===E?!!R:K()?D:"webkit"===P||P===x||P===S}function Me(){return!!de&&(!!K()||Oe())}function Le(e,n){var t,r=ye.get(e);if(r){ye.delete(e),null!==r.timerId&&clearTimeout(r.timerId);var o=f(n);if("stream"===r.mode&&r.stream)return void r.stream._reject(o);null===(t=r.reject)||void 0===t||t.call(r,o)}}function je(e,n){var t=we.get(e);if(t){we.delete(e),null!==t.timerId&&clearTimeout(t.timerId);var r=f(n);t.channel._reject(r),t.reject(r)}}function Ce(e,n){ye.has(e)?Le(e,n):we.has(e)&&je(e,n)}function Ne(e){if(ye.has(e))return n=e,void((r=ye.get(n))&&(!Number.isFinite(r.timeoutMs)||r.timeoutMs<=0?null!==r.timerId&&(clearTimeout(r.timerId),r.timerId=null):(null!==r.timerId&&clearTimeout(r.timerId),r.timerId=setTimeout(function(){ye.has(n)&&Le(n,{code:t,message:"'".concat(r.method,"' timed out")})},r.timeoutMs))));var n,r;we.has(e)&&function(e){var n=we.get(e);n&&(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(function(){je(e,{code:t,message:"Channel '".concat(n.topic,"' timed out")})},I))}(e)}function Be(e){for(var n,t=_e.length-1;t>=0;t--)if((null===(n=_e[t])||void 0===n?void 0:n.reqId)===e)return _e.splice(t,1),!0;return!1}function Pe(e,n){var t=e.kind,r="hello"===t||"helloAck"===t||"ready"===t;if(!Me()&&!r)return _e.length>=256?(C("Outbox full"),void(n&&Ce(n,{code:s,message:"Bridge outbox is full"}))):void _e.push({msg:e,reqId:n});n&&Ne(n),le(e)}function Re(){null!==ve&&(clearTimeout(ve),ve=null)}function De(){if(!de&&Oe()){Re();var e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};ue=!0,le(e),ve=setTimeout(function(){if(!de)if(++fe<3)j("Handshake timeout (".concat(fe,"/").concat(3,"), retrying...")),ue=!1,De();else{for(C("Handshake failed"),Re(),ue=!1,fe=0;_e.length;){var e=_e.shift();(null==e?void 0:e.reqId)&&Ce(e.reqId,{code:o,message:"Bridge handshake failed"})}for(var n=0,t=Array.from(we.keys());n<t.length;n++){je(t[n],{code:o,message:"Bridge handshake failed"})}}},1e4)}}function Xe(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Fe(e,n,t){void 0===t&&(t=!1);var r=function(e){if(""===e)return[];if(!e.startsWith("/"))throw new Error("Invalid JSON pointer: ".concat(e));return e.split("/").slice(1).map(Xe)}(n);if(0===r.length)return{container:{$root:e},key:"$root"};for(var o=e,i=0;i<r.length-1;i++){var a=r[i];if(Array.isArray(o))o=o[Number(a)];else{if(!o||"object"!=typeof o)throw new Error("Invalid container at ".concat(a));var c=o;if(t&&void 0===c[a]){var l=r[i+1];c[a]=l&&/^\d+$/.test(l)?[]:{}}o=c[a]}}return{container:o,key:r[r.length-1]}}function Ge(e){Ee.forEach(function(n){try{if(!xe.has(n))return xe.set(n,!0),void n(B(ke),{rev:Ie,initial:!0});n(B(ke),{rev:Ie,initial:e})}catch(e){j("Subscriber error:",e)}})}function He(e){if("function"!=typeof e)return function(){};if(Ee.add(e),Ie>=0){xe.set(e,!0);try{e(B(ke),{rev:Ie,initial:!0})}catch(e){C("Callback error:",e)}}return function(){Ee.delete(e),xe.delete(e)}}function qe(e){tn.call("state.getSnapshot",{scope:e}).catch(function(){})}function Ue(e){var n,t,r,o;if(e&&"object"==typeof e){var i=e;if("event"===i.type&&"nativecomponent"===i.name&&i.payload){var l=i.payload,s=l.id||l.componentId;if("string"==typeof s){var u=We.get(s);if(u)try{u(l)}catch(e){C("NC handler error:",e)}}return}}var v=function(e){if(!e||"object"!=typeof e)return null;var n=e.v,t=e.kind;return 2!==n||"string"!=typeof t?null:e}(e);if(v)switch(v.kind){case"helloAck":return void(se=v.sessionId);case"ready":if(se&&v.sessionId!==se)return void j("sessionId mismatch");if(Re(),de=!0,fe=0,v.hostMethods)for(var m=0,p=Object.entries(v.hostMethods);m<p.length;m++){var h=p[m],g=h[0],y=h[1];me[g]=y}return M("proto")&&L("Handshake complete, hostMethods:",Object.keys(me).length),void function(){if(Me())for(;_e.length;){var e=_e.shift();e&&(e.reqId&&Ne(e.reqId),le(e.msg))}}();case"res":var w=ye.get(v.id);if(!w)return;if(ye.delete(v.id),null!==w.timerId&&clearTimeout(w.timerId),v.ok){if("state.getSnapshot"===w.method&&(function(e){if(!e||"object"!=typeof e)return!1;var n=e;return!("number"!=typeof n.rev||!Number.isFinite(n.rev)||!n.state||"object"!=typeof n.state||(ke=n.state,Ie=n.rev,M("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",Ie,"state:",B(ke)),console.groupEnd()),Ge(!0),0))}(v.result)||j("Invalid state.getSnapshot result")),"stream"===w.mode&&w.stream)return void w.stream._resolve(v.result);null===(n=w.resolve)||void 0===n||n.call(w,v.result)}else{var b=f(v.error);if("stream"===w.mode&&w.stream)return void w.stream._reject(b);null===(t=w.reject)||void 0===t||t.call(w,b)}return;case"event":if(ye.has(v.id)){var _=ye.get(v.id);return void("stream"===(null==_?void 0:_.mode)&&_.stream?(null!==_.timerId&&(clearTimeout(_.timerId),_.timerId=null),_.timeoutMs=0,_.stream._emitData(v.payload)):j("Received event for non-stream request '".concat(v.id,"'")))}return;case"state.snapshot":return ke=v.state||{},Ie=v.rev,M("data")&&(console.group("[LX] snapshot"),console.log("rev:",Ie,"state:",B(ke)),console.groupEnd()),void Ge(!0);case"state.patch":if(v.baseRev!==Ie)return j("baseRev mismatch",{have:Ie,want:v.baseRev}),void qe(v.scope);try{!function(e,n){for(var t=0,r=n;t<r.length;t++){var o=r[t],i="add"===o.op||"replace"===o.op,a=Fe(e,o.path,i),c=a.container,l=a.key;if("$root"!==l)if(Array.isArray(c)){var s="-"===l?c.length:Number(l);if(!Number.isFinite(s)||s<0)throw new Error("Invalid index");"remove"===o.op?c.splice(s,1):"add"===o.op?c.splice(s,0,o.value):"replace"===o.op&&(c[s]=o.value)}else{if(!c||"object"!=typeof c)throw new Error("Invalid container");var d=c;"remove"===o.op?delete d[l]:d[l]=o.value}else{for(var u=0,f=Object.keys(e);u<f.length;u++)delete e[f[u]];if("remove"!==o.op){var v=o.value;v&&"object"==typeof v&&Object.assign(e,v)}}}}(ke,v.ops||[]),Ie=v.rev}catch(e){return C("Patch failed:",e),void qe(v.scope)}return M("data")&&(console.group("[LX] patch"),console.log("rev:",Ie,"ops:",v.ops),console.groupEnd()),Ge(!1),void(v.ack&&Pe({v:2,kind:"state.ack",scope:v.scope,rev:v.rev}));case"ch.ack":var I=we.get(v.id);if(!I)return;if(we.delete(v.id),null!==I.timerId&&clearTimeout(I.timerId),v.ok)I.channel._markOpen(),be.set(v.id,I.channel),I.resolve(I.channel);else{b=f(v.error);I.channel._reject(b),I.reject(b)}return;case"ch.data":var k=be.get(v.id);if(!k)return;return void k._emitData(v.payload);case"ch.close":if(we.get(v.id))return void je(v.id,{code:null!==(r=v.code)&&void 0!==r?r:d,message:null!==(o=v.reason)&&void 0!==o?o:"Channel closed before opening"});var E=be.get(v.id);if(!E)return;return be.delete(v.id),void E._emitClose(v.code,v.reason);case"req":var x=v,S=Te(x.method);if(!x.cap||x.cap!==S)return void Pe({v:2,kind:"res",id:x.id,ok:!1,error:{code:c,message:"Invalid cap for ".concat(x.method)}});var T=Se.get(x.method);return T?void Promise.resolve().then(function(){return T(x.params)}).then(function(e){Pe({v:2,kind:"res",id:x.id,ok:!0,result:e})}).catch(function(e){Pe({v:2,kind:"res",id:x.id,ok:!1,error:f(e)})}):void Pe({v:2,kind:"res",id:x.id,ok:!1,error:{code:a,message:"View handler not found: ".concat(x.method)}})}else j("Invalid V2 message:",e)}var We=new Map,ze=[],Je=!1;function Ye(){var e,n,t;return"undefined"!=typeof window&&!(!(null===(n=null===(e=window.webkit)||void 0===e?void 0:e.messageHandlers)||void 0===n?void 0:n.NativeComponent)&&!(null===(t=window.NativeComponentBridge)||void 0===t?void 0:t.postMessage))}function Ve(e){var n,t,r;try{if(null===(t=null===(n=window.webkit)||void 0===n?void 0:n.messageHandlers)||void 0===t?void 0:t.NativeComponent)return void window.webkit.messageHandlers.NativeComponent.postMessage(e);if(null===(r=window.NativeComponentBridge)||void 0===r?void 0:r.postMessage)return void window.NativeComponentBridge.postMessage(N(e))}catch(e){C("NativeComponent send error:",e)}}function $e(){if(Ye()&&0!==ze.length)for(Je=!0;ze.length;){var e=ze.shift();try{Ve(e)}catch(e){break}}}function Ke(e){try{if(!Ye())return void ze.push(e);Je||$e(),Ve(e)}catch(e){C("NC send failed:",e)}}function Qe(e){return"".concat(e,"_").concat(Date.now(),"_").concat(pe++)}function Ze(e,n,t){if(n)if(n.aborted)t();else{var r={handleEvent:function(){n.removeEventListener("abort",r),t()}};n.addEventListener("abort",r)}}var en,nn,tn={call:function(e,n,t){return new Promise(function(o,a){var c;if(e&&"string"==typeof e){ue||De();var l=Qe("c"),s=(null==t?void 0:t.cap)||Te(e),d=null!==(c=null==t?void 0:t.timeoutMs)&&void 0!==c?c:I;ye.set(l,{method:e,mode:"call",resolve:o,reject:function(e){return a(e)},timeoutMs:d,timerId:null}),Pe({v:2,kind:"req",id:l,method:e,params:Ae(n),cap:s},l),Ze(0,null==t?void 0:t.signal,function(){var e=Be(l);Le(l,{code:r,message:"Bridge request aborted"}),!e&&de&&Pe({v:2,kind:"cancel",id:l})})}else a({code:i,message:"Method name must be a non-empty string"})})},stream:function(e,n,t){var o;if(!e||"string"!=typeof e){var a=ge("invalid",function(){});return a._reject({code:i,message:"Method name must be a non-empty string"}),a}ue||De();var c=Qe("c"),l=ge(c,function(){Be(c)?Le(c,{code:r,message:"Bridge request aborted"}):de&&Pe({v:2,kind:"cancel",id:c})}),s=(null==t?void 0:t.cap)||Te(e),d=null!==(o=null==t?void 0:t.timeoutMs)&&void 0!==o?o:I;return ye.set(c,{method:e,mode:"stream",stream:l,timeoutMs:d,timerId:null}),Pe({v:2,kind:"req",id:c,method:e,params:Ae(n),cap:s},c),Ze(0,null==t?void 0:t.signal,function(){return l.cancel()}),l},notify:function(e,n,t){e&&"string"==typeof e&&(ue||De(),Pe({v:2,kind:"notify",method:e,params:Ae(n),cap:(null==t?void 0:t.cap)||Te(e)}))},state:{subscribe:He},channel:{open:function(e,n,t){return e&&"string"==typeof e?(ue||De(),new Promise(function(r,o){var i=Qe("ch"),a=function(e,n,t){var r,o=he(),i=!1,a=0,c=!1,l=!1,s=[],u=[],f=((r={id:e,send:function(t){i?n(t,a++):f._reject({code:d,message:"Channel '".concat(e,"' is closed")})},on:function(e,n){if("data"===e&&(o.data.add(n),s.length>0))for(var t=0,r=s.splice(0);t<r.length;t++){var i=r[t];try{n(i)}catch(e){j("Channel listener failed:",e)}}return"close"===e&&o.close.add(n),"error"===e&&o.error.add(n),this}})[Symbol.asyncIterator]=function(){return l=!0,{next:function(){return s.length>0?Promise.resolve({done:!1,value:s.shift()}):c?Promise.resolve({done:!0,value:void 0}):new Promise(function(e,n){u.push({resolve:e,reject:n})})}}},r.close=function(e,n){i&&(i=!1,c=!0,t(e,n),f._emitClose(e,n))},r._emitData=function(e){if(i){u.length>0?u.shift().resolve({done:!1,value:e}):(l||0===o.data.size)&&s.push(e);for(var n=0,t=o.data;n<t.length;n++){var r=t[n];try{r(e)}catch(e){j("Channel listener failed:",e)}}}},r._emitClose=function(e,n){for(c=!0;u.length>0;)u.shift().resolve({done:!0,value:void 0});for(var t=0,r=o.close;t<r.length;t++){var i=r[t];try{i(e,n)}catch(e){j("Channel close listener failed:",e)}}},r._reject=function(e){for(c=!0;u.length>0;)u.shift().reject(e);for(var n=0,t=o.error;n<t.length;n++){var r=t[n];try{r(e)}catch(e){j("Channel error listener failed:",e)}}},r._markOpen=function(){i=!0,c=!1},r._isOpen=function(){return i},r._nextSeq=function(){return a++},r);return f}(i,function(e,n){Pe({v:2,kind:"ch.data",id:i,seq:n,payload:e})},function(e,n){var t=we.get(i);t&&null!==t.timerId&&clearTimeout(t.timerId),we.delete(i),be.delete(i),Pe({v:2,kind:"ch.close",id:i,code:e,reason:n})});we.set(i,{topic:e,channel:a,resolve:r,reject:o,timerId:null}),Pe({v:2,kind:"ch.open",id:i,topic:e,params:Ae(n),cap:(null==t?void 0:t.cap)||Te(e)},i)})):Promise.reject({code:i,message:"Topic name must be a non-empty string"})}}},rn={invoke:function(e,n,t){return tn.call(on(e),n,an(t)).then(function(e){return e}).catch(function(e){return Promise.reject(v(e))})},notify:function(e,n,t){tn.notify(on(e),n,an(t))},stream:function(e,n,t){return cn(tn.stream(on(e),n,an(t)))},channel:function(e,n,t){return tn.channel.open(on(e),n,an(t)).then(function(e){return function(e){var n=new Set,t=new Set;return e.on("data",function(e){for(var t=0,r=n;t<r.length;t++){(0,r[t])(e)}}),e.on("close",function(e,n){for(var r={code:e,reason:n},o=0,i=t;o<i.length;o++){(0,i[o])(r)}}),{send:function(n){e.send(n)},onMessage:function(e){return n.add(e),function(){n.delete(e)}},onClose:function(e){return t.add(e),function(){t.delete(e)}},close:function(n,t){e.close(n,t)}}}(e)}).catch(function(e){return Promise.reject(v(e))})},raw:tn,state:{subscribe:He},_connectWebMessagePort:function(e){if(P===E){if(R&&R!==e)try{R.onmessage=null,R.close()}catch(e){}R=e,e.onmessage=function(e){var n=e.data;if("string"==typeof n)try{n=JSON.parse(n)}catch(e){return}Ue(n)};try{e.start()}catch(e){}L("Port connected"),De()}},_receiveEvaluateMessage:function(e){try{e&&Ue(JSON.parse(e))}catch(e){C("Parse error:",e)}},debug:(en=A,nn={},Object.keys(en).forEach(function(e){Object.defineProperty(nn,e,{enumerable:!0,configurable:!1,get:function(){return en[e]},set:function(n){en[e]=!!n,console.log("[LX] ".concat(e,": ").concat(n))}})}),nn),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:y,isAndroid:function(){return"Android"===p.os},isMacOS:w,isWindows:b,isDesktop:function(){return w()||b()},isApple:function(){return y()||w()},isRunner:function(){return!0===p.runner},getOS:g},dom:{measureById:function(e){try{if(!e)return null;var n=document.getElementById(e);if(!n)return null;var t=n.getBoundingClientRect(),r=0;try{r=parseFloat(getComputedStyle(n).borderRadius)||0}catch(e){}return[t.left+window.scrollX,t.top+window.scrollY,t.width,t.height,r]}catch(e){return null}}},nativeComponents:{send:Ke,hasHandler:Ye,flush:$e,register:function(e,n){return e&&"function"==typeof n?(We.set(e,n),function(){return We.delete(e)}):function(){}},unregister:function(e){We.delete(e)}},isReady:function(){return de}};function on(e){return e.startsWith("host.")?e:"host.".concat(e)}function an(e){return __assign(__assign({},e||{}),{cap:(null==e?void 0:e.cap)||"host"})}function cn(e){var n=new Set,t=new Set;return e.on("data",function(e){for(var t=0,r=n;t<r.length;t++){(0,r[t])(e)}}),e.on("error",function(e){for(var n=v(e),r=0,o=t;r<o.length;r++){(0,o[r])(n)}}),{onEvent:function(e){return n.add(e),function(){n.delete(e)}},onError:function(e){return t.add(e),function(){t.delete(e)}},result:e.result.catch(function(e){return Promise.reject(v(e))}),cancel:function(){e.cancel()}}}function ln(){if(window.__LX_BRIDGE_INIT_STATE)L("Bridge already ".concat(window.__LX_BRIDGE_INIT_STATE,", skipping duplicate init"));else{window.__LX_BRIDGE_INIT_STATE="initializing";try{L("Method: ".concat(P)),function(e){if("undefined"!=typeof window&&(window[_]=e,0!==O.length))for(var n=0,t=O.splice(0,O.length);n<t.length;n++){var r=t[n];try{e(r)}catch(e){j("Failed to replay queued native message:",e)}}}(rn._receiveEvaluateMessage),K()?(oe(),K()&&!q&&null===z&&(z=setInterval(function(){0!==W&&Date.now()-W>35e3&&(j("Apple downstream stale (no heartbeat), forcing reconnect"),ae())},5e3)),K()&&"undefined"!=typeof document&&document.addEventListener("visibilitychange",ce)):P===E?(V(),function(){var e,n;if(R)return Promise.resolve(R);if(J.promise)return J.promise;V(),J.promise=new Promise(function(e,n){J.resolve=function(n){$(),e(n)},J.reject=function(e){$(),n(e)},J.timer=window.setTimeout(function(){var e;null===(e=J.reject)||void 0===e||e.call(J,new Error("MessagePort init timed out after ".concat(5e3,"ms")))},5e3)});try{null===(e=window.LingXiaProxy)||void 0===e||e.getPort("LingXiaPort")}catch(e){null===(n=J.reject)||void 0===n||n.call(J,e)}return J.promise}().catch(function(e){return j("Port init failed:",e)})):"webkit"===P||P===x||P===S?De():j("Unknown method"),window.LingXiaBridge=rn,window.__lxForceDownstreamReconnect=ae,m({os:g(),send:Ke}),window.__LX_BRIDGE_INIT_STATE="initialized",L("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function sn(e){var n=document.createElement("div");return n.textContent=e,n.innerHTML}function dn(e){var n=e.failedPath,t=e.reason,r=document.createElement("style");r.textContent="\n* { margin: 0; padding: 0; box-sizing: border-box; }\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: #f5f5f7;\n color: #1d1d1f;\n padding: 20px;\n -webkit-font-smoothing: antialiased;\n}\n.lx-error {\n text-align: center;\n max-width: 400px;\n}\n.lx-error-code {\n font-size: 120px;\n font-weight: 700;\n color: #d1d1d6;\n line-height: 1;\n letter-spacing: -4px;\n}\n.lx-error-title {\n font-size: 21px;\n font-weight: 600;\n margin: 16px 0 8px;\n color: #1d1d1f;\n}\n.lx-error-desc {\n font-size: 15px;\n color: #86868b;\n line-height: 1.5;\n}\n.lx-error-path {\n display: inline-block;\n margin-top: 20px;\n padding: 10px 16px;\n background: rgba(0,0,0,0.04);\n border-radius: 8px;\n font-family: 'SF Mono', ui-monospace, Menlo, Monaco, monospace;\n font-size: 13px;\n color: #1d1d1f;\n word-break: break-all;\n max-width: 100%;\n}\n@media (prefers-color-scheme: dark) {\n body { background: #000; color: #f5f5f7; }\n .lx-error-code { color: #3a3a3c; }\n .lx-error-title { color: #f5f5f7; }\n .lx-error-desc { color: #86868b; }\n .lx-error-path { background: rgba(255,255,255,0.08); color: #f5f5f7; }\n}\n",document.head.appendChild(r),document.body.innerHTML="",document.body.style.cssText="";var o=document.createElement("div");o.className="lx-error";var i='<div class="lx-error-code">404</div>';i+='<h1 class="lx-error-title">Page Not Found</h1>',i+="<p class=\"lx-error-desc\">The page you're looking for doesn't exist.</p>",n&&(i+='<div class="lx-error-path">'.concat(sn(n),"</div>")),t&&(i+='<p class="lx-error-desc" style="margin-top:12px">'.concat(sn(t),"</p>")),o.innerHTML=i,document.body.appendChild(o)}function un(){var e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function fn(){var e;return(null===(e=window.__LX_RUNTIME_CONFIG)||void 0===e?void 0:e.error)||null}var vn={handleEvent:function(){return mn()}};function mn(){if(un()){var e=fn();e&&dn(e)}}function pn(){ln(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",vn):mn()}return pn(),e.LingXiaBridge=rn,e.boot=function(){ln(),mn()},e.bootWhenReady=pn,e.channel=function(e,n,t){return rn.channel(e,n,t)},e.getDisplayLanguage=function(){return h},e.getErrorInfo=fn,e.hasError=un,e.initBridge=ln,e.invoke=function(e,n,t){return rn.invoke(e,n,t)},e.isNativeError=function(e,n){if(!e||"object"!=typeof e)return!1;var t=e;return"string"==typeof t.code&&""!==t.code.trim()&&("string"==typeof t.message&&(void 0===n||t.code===n))},e.notify=function(e,n,t){tn.notify(on(e),n,an(t))},e.renderErrorUI=dn,e.stream=function(e,n,t){return cn(tn.stream(on(e),n,an(t)))},e}({});
1
+ var __extends=this&&this.__extends||function(){var e=function(n,t){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])},e(n,t)};return function(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=n}e(n,t),n.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e},__assign.apply(this,arguments)},__awaiter=this&&this.__awaiter||function(e,n,t,r){return new(t||(t=Promise))(function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t(function(e){e(n)})).then(a,c)}l((r=r.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(e,n){var t,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(l){return function(c){if(t)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=n.call(e,i)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,l])}}},__spreadArray=this&&this.__spreadArray||function(e,n,t){if(t||2===arguments.length)for(var r,o=0,i=n.length;o<i;o++)!r&&o in n||(r||(r=Array.prototype.slice.call(n,0,o)),r[o]=n[o]);return e.concat(r||Array.prototype.slice.call(n))},__LX_RUNTIME_PLATFORM__="mobile",__LingXiaBridgeBundle=function(e){var n;Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});var t="BRIDGE_TIMEOUT",r="BRIDGE_CANCELED",o="BRIDGE_HANDSHAKE_FAILED",i="BRIDGE_MALFORMED_MESSAGE",a="BRIDGE_METHOD_NOT_FOUND",c="BRIDGE_CAPABILITY_DENIED",l="BRIDGE_INTERNAL_ERROR",s="BRIDGE_OUTBOX_FULL",d="BRIDGE_STREAM_CLOSED",u=function(e){function n(n,t,r){var o=e.call(this,t)||this;return o.name="BridgeInvocationError",o.code=n,o.data=r,o}return __extends(n,e),n}(Error);function f(e){if(e instanceof u)return e;if(e&&"object"==typeof e){var n=e,t=l;("string"==typeof n.code&&""!==n.code.trim()||"number"==typeof n.code&&Number.isFinite(n.code))&&(t=n.code);var r="string"==typeof n.message&&""!==n.message.trim()?n.message:"Unknown error";return new u(t,r,"data"in n?n.data:void 0)}var o=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new u(l,o)}function v(e){var n=f(e);return __assign({code:String(n.code||l),message:"string"==typeof n.message&&""!==n.message.trim()?n.message:"Unknown error"},void 0===n.data?{}:{data:n.data})}function p(e){var n,t=e.os,r=e.send;if("undefined"!=typeof window&&"undefined"!=typeof document){var o="iOS"===t;if(o||"Android"===t){var i=Symbol.for("LingXia.NativeComponentCoverageMonitor");if(!(null===(n=window[i])||void 0===n?void 0:n.installed)){var a={installed:!0,coveredById:new Map,coveredCount:0,anyCovered:!1,scheduled:!1,hasAnyVideo:!1,scrollLocked:!1,scrollY:0,htmlOverflow:"",bodyOverflow:"",bodyPosition:"",bodyTop:"",bodyWidth:""};window[i]=a,new MutationObserver(u).observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0});var c={handleEvent:function(){(a.hasAnyVideo||0!==a.coveredById.size)&&u()}},l={handleEvent:function(){return u()}};window.addEventListener("scroll",c,{capture:!0,passive:!0}),window.addEventListener("resize",l),u()}}}function s(e){var n,t,r=null===(n=e.getBoundingClientRect)||void 0===n?void 0:n.call(e);if(!r)return!1;if(r.width<2||r.height<2)return!1;var o=r.left+r.width/2,i=r.top+r.height/2;if(o<0||i<0||o>=window.innerWidth||i>=window.innerHeight)return!1;var a=null===(t=document.elementFromPoint)||void 0===t?void 0:t.call(document,o,i);return!!a&&(a!==document.documentElement&&a!==document.body&&!(a===e||e.contains(a)))}function d(){a.scheduled=!1;var e=document.querySelectorAll("lx-video[id]");if(a.hasAnyVideo=e.length>0,a.hasAnyVideo||0!==a.coveredById.size||a.anyCovered){for(var n=new Set,t=0,i=Array.from(e);t<i.length;t++){var c=i[t];if(m=c.id){n.add(m);var l=s(c),d=a.coveredById.get(m);d!==l&&(!0===d&&(a.coveredCount-=1),!0===l&&(a.coveredCount+=1),a.coveredById.set(m,l),r({id:m,action:"component.coverage",covered:l}))}}for(var u=[],f=0,v=a.coveredById.entries();f<v.length;f++){var p=v[f],m=p[0];l=p[1];n.has(m)||(u.push(m),!0===l&&(a.coveredCount-=1))}for(var h=0,g=u;h<g.length;h++){m=g[h];a.coveredById.delete(m),r({id:m,action:"component.coverage",covered:!1})}var y=a.coveredCount>0;y!==a.anyCovered&&(a.anyCovered=y,o&&(y?function(){if(o&&!a.scrollLocked){var e=document.documentElement,n=document.body;e&&n&&(a.scrollLocked=!0,a.scrollY=window.scrollY||e.scrollTop||0,a.htmlOverflow=e.style.overflow||"",a.bodyOverflow=n.style.overflow||"",a.bodyPosition=n.style.position||"",a.bodyTop=n.style.top||"",a.bodyWidth=n.style.width||"",e.style.overflow="hidden",n.style.overflow="hidden",n.style.position="fixed",n.style.top="".concat(-a.scrollY,"px"),n.style.width="100%")}}():function(){if(o&&a.scrollLocked){var e=document.documentElement,n=document.body;e&&n&&(a.scrollLocked=!1,e.style.overflow=a.htmlOverflow,n.style.overflow=a.bodyOverflow,n.style.position=a.bodyPosition,n.style.top=a.bodyTop,n.style.width=a.bodyWidth,window.scrollTo(0,a.scrollY))}}()))}}function u(){a.scheduled||(a.scheduled=!0,requestAnimationFrame(d))}}var m="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{},h={value:(null===(n=m.displayLanguage)||void 0===n?void 0:n.trim())||"en-US",listeners:new Set};function g(){var e;return"undefined"==typeof window?h:(window.__lxDisplayLanguage||(window.__lxDisplayLanguage={value:(null===(e=m.displayLanguage)||void 0===e?void 0:e.trim())||"en-US",listeners:new Set}),window.__lxDisplayLanguage)}function y(){"undefined"!=typeof document&&document.documentElement&&(document.documentElement.lang=g().value)}function w(){return m.os||"unknown"}function b(){return"iOS"===m.os}function _(){return"macOS"===m.os}function I(){return"Windows"===m.os}y(),"undefined"==typeof window||window.__lingxiaApplyDisplayLanguage||Object.defineProperty(window,"__lingxiaApplyDisplayLanguage",{configurable:!1,enumerable:!1,value:function(e){var n="string"==typeof e?e.trim():"",t=g();if(n&&n!==t.value){t.value=n,y();for(var r=0,o=__spreadArray([],t.listeners,!0);r<o.length;r++){(0,o[r])()}}}});var k="__LingXiaRecvMessage",E=5e3,x="[LX.Bridge]",S="messageport",L="jsinterface",T="webmessage",A=m.appleDownstreamURL,O={data:!1,proto:!1,all:!1},M=[];function j(e){return O.all||O[e]}function C(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];(!0===m.dev||O.all||O.proto||O.data)&&console.log.apply(console,__spreadArray([x],e,!1))}function N(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.warn.apply(console,__spreadArray([x],e,!1))}function P(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.error.apply(console,__spreadArray([x],e,!1))}function B(e){try{return JSON.stringify(e)}catch(n){return function(e,n){var t=new WeakSet;return JSON.stringify(e,function(e,n){if("object"==typeof n&&null!==n){if(t.has(n))return"[Circular]";t.add(n)}return n},n)}(e)}}function D(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch(e){return{}}}var R=function(){var e,n;return"iOS"===m.os||"macOS"===m.os?"webkit":"Harmony"===m.os?"messageport":"Windows"===m.os?"webmessage":"Android"===m.os?(null===(n=null===(e=window.LingXiaProxy)||void 0===e?void 0:e.supportsMessagePort)||void 0===n?void 0:n.call(e))?"messageport":"jsinterface":"unknown"}();"undefined"!=typeof window&&"function"!=typeof window[k]&&(window[k]=function(e){M.push(e)});var X=null,F=!1,G=null,H=null,q=null,U=200,W=!1,z=0,J=0,Y=null,V={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},$={handleEvent:function(e){var n,t,r=e;if("LingXia-port-init"===r.data){var o=null===(n=r.ports)||void 0===n?void 0:n[0];o&&(an._connectWebMessagePort(o),null===(t=V.resolve)||void 0===t||t.call(V,o))}}};function K(){V.listenerInstalled||(V.listenerInstalled=!0,window.addEventListener("message",$))}function Q(){null!==V.timer&&(window.clearTimeout(V.timer),V.timer=null),V.resolve=null,V.reject=null,V.promise=null}function Z(){return"webkit"===R&&(b()||_())}function ee(){null!==q&&(clearTimeout(q),q=null)}function ne(e){Z()&&!W&&(W=!0,ee(),null!==Y&&(clearInterval(Y),Y=null),"undefined"!=typeof document&&document.removeEventListener("visibilitychange",se),ce=!1,null==H||H.abort(),F=!1,re(e,!0))}function te(e){for(var n=0,t=Array.from(be.keys());n<t.length;n++){Ce(t[n],{code:d,message:e})}for(var r=0,o=Array.from(_e.keys());r<o.length;r++){Ne(o[r],{code:d,message:e})}!function(e){for(var n=0,t=Array.from(Ie.entries());n<t.length;n++){var r=t[n],o=r[0],i=r[1];Ie.delete(o),i._emitClose(d,e)}}(e)}function re(e,n){Xe(),ue=null,fe=!1,ve=!1,pe=0,n&&te(e)}function oe(e){if(e&&"object"==typeof e){J=Date.now();var n=e;if(!0!==n.lxshutdown){if(void 0===n.lxhb){if(!0===n.lxreset)return z=0,re("Apple downstream reset",!0),void Fe();if("number"==typeof n.lxff){if(n.lxff<=z)return;return z=n.lxff,void ze(n.m)}ze(e)}}else ne("Apple downstream closed")}}function ie(){return __awaiter(this,void 0,void 0,function(){var e,n,t,r,o,i,a,c,l,s,d;return __generator(this,function(u){switch(u.label){case 0:if(!A)throw new Error("Apple downstream URL is not configured");return e=new AbortController,H=e,n=A.includes("?")?"&":"?",t="".concat(A).concat(n,"from=").concat(z),[4,fetch(t,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal})];case 1:if(!(r=u.sent()).ok)throw new Error("Apple downstream HTTP ".concat(r.status));if("1"===r.headers.get("X-LingXia-Bridge-Shutdown"))return ne("Apple downstream closed"),[2];if(!r.body)throw new Error("Apple downstream response body unavailable");F=!0,U=200,J=Date.now(),j("proto")&&C("Apple downstream connected"),Fe(),o=r.body.getReader(),i=new TextDecoder,a="",u.label=2;case 2:u.trys.push([2,6,7,8]),u.label=3;case 3:return[4,o.read()];case 4:return c=u.sent(),l=c.value,c.done?[3,5]:(a=function(e){for(var n=e;;){var t=n.indexOf("\n");if(t<0)break;var r=n.slice(0,t).trim();if(n=n.slice(t+1),r)try{oe(JSON.parse(r))}catch(e){N("Apple downstream parse error:",e,r)}}return n}(a+=i.decode(l,{stream:!0})),[3,3]);case 5:if(a+=i.decode(),s=a.trim())try{oe(JSON.parse(s))}catch(e){N("Apple downstream trailing parse error:",e,s)}return[3,8];case 6:if(d=u.sent(),e.signal.aborted)return[2];throw d;case 7:try{o.releaseLock()}catch(e){}return[7];case 8:return[2]}})})}function ae(){if(Z()&&!W&&!G){ee();var e=!1;G=ie().then(function(){e=!0}).catch(function(e){(null==H?void 0:H.signal.aborted)||N("Apple downstream failed:",e)}).finally(function(){var n,t=null!==(n=null==H?void 0:H.signal.aborted)&&void 0!==n&&n;G=null,H=null,F=!1,t||W||function(e,n){if(void 0===n&&(n=!1),Z()&&!W){ee();var t=n?0:U;n||(U=Math.min(2*U,2e3));var r=n?"Apple downstream completed, reconnecting immediately: ".concat(e):"Apple downstream disconnected, retrying in ".concat(t,"ms: ").concat(e);t<=200?C(r):N(r),q=setTimeout(function(){q=null,ae()},t)}}("stream closed",e)})}}var ce=!1;function le(){if(Z()&&!W&&!ce){ce=!0;var e=G;null==H||H.abort();var n=function(){ce=!1,ae()};e?e.finally(n):n()}}function se(){"visible"===document.visibilityState&&le()}function de(e){var n,t,r,o=e.kind;"req"!==o&&"notify"!==o||C("postToNative: ".concat(o," ").concat(e.method)),j("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===R)return void(null===(t=null===(n=window.webkit)||void 0===n?void 0:n.messageHandlers.LingXia)||void 0===t||t.postMessage(e));var i=B(e);if(R===S&&X)return void X.postMessage(i);if((R===L||R===T)&&(null===(r=window.LingXiaProxy)||void 0===r?void 0:r.postMessage))return void window.LingXiaProxy.postMessage(i);N("Transport not ready")}catch(e){P("Send error:",e)}}var ue=null,fe=!1,ve=!1,pe=0,me=null,he={},ge=0;function ye(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function we(e,n){var t,r=ye(),o=!1,i=!1,a=function(){},c=function(){},l=[],s=[],d=new Promise(function(e,n){a=e,c=n});return(t={id:e,result:d,on:function(e,n){return"data"===e&&r.data.add(n),"end"===e&&r.end.add(n),"error"===e&&r.error.add(n),this}})[Symbol.asyncIterator]=function(){return i=!0,{next:function(){return l.length>0?Promise.resolve({done:!1,value:l.shift()}):o?d.then(function(e){return{done:!0,value:e}},function(e){return Promise.reject(e)}):new Promise(function(e,n){s.push({resolve:e,reject:n})})}}},t.cancel=function(){o||n()},t._emitData=function(e){if(!o){s.length>0?s.shift().resolve({done:!1,value:e}):i&&l.push(e);for(var n=0,t=r.data;n<t.length;n++){var a=t[n];try{a(e)}catch(e){N("Stream data listener failed:",e)}}}},t._resolve=function(e){if(!o){for(o=!0,a(e);s.length>0;)s.shift().resolve({done:!0,value:e});for(var n=0,t=r.end;n<t.length;n++){var i=t[n];try{i(e)}catch(e){N("Stream end listener failed:",e)}}}},t._reject=function(e){if(!o){for(o=!0,c(e);s.length>0;)s.shift().reject(e);for(var n=0,t=r.error;n<t.length;n++){var i=t[n];try{i(e)}catch(e){N("Stream error listener failed:",e)}}}},t}var be=new Map,_e=new Map,Ie=new Map,ke=[],Ee=-1,xe={},Se=new Set,Le=new WeakMap,Te=new Map;function Ae(e){if(e.startsWith("host."))return"host";var n=e.indexOf(".");return n>0?e.slice(0,n):"page"}function Oe(e){if(null!=e)return e}function Me(){return R===S?!!X:Z()?F:"webkit"===R||R===L||R===T}function je(){return!!fe&&(!!Z()||Me())}function Ce(e,n){var t,r=be.get(e);if(r){be.delete(e),null!==r.timerId&&clearTimeout(r.timerId);var o=f(n);if("stream"===r.mode&&r.stream)return void r.stream._reject(o);null===(t=r.reject)||void 0===t||t.call(r,o)}}function Ne(e,n){var t=_e.get(e);if(t){_e.delete(e),null!==t.timerId&&clearTimeout(t.timerId);var r=f(n);t.channel._reject(r),t.reject(r)}}function Pe(e,n){be.has(e)?Ce(e,n):_e.has(e)&&Ne(e,n)}function Be(e){if(be.has(e))return n=e,void((r=be.get(n))&&(!Number.isFinite(r.timeoutMs)||r.timeoutMs<=0?null!==r.timerId&&(clearTimeout(r.timerId),r.timerId=null):(null!==r.timerId&&clearTimeout(r.timerId),r.timerId=setTimeout(function(){be.has(n)&&Ce(n,{code:t,message:"'".concat(r.method,"' timed out")})},r.timeoutMs))));var n,r;_e.has(e)&&function(e){var n=_e.get(e);n&&(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(function(){Ne(e,{code:t,message:"Channel '".concat(n.topic,"' timed out")})},E))}(e)}function De(e){for(var n,t=ke.length-1;t>=0;t--)if((null===(n=ke[t])||void 0===n?void 0:n.reqId)===e)return ke.splice(t,1),!0;return!1}function Re(e,n){var t=e.kind,r="hello"===t||"helloAck"===t||"ready"===t;if(!je()&&!r)return ke.length>=256?(P("Outbox full"),void(n&&Pe(n,{code:s,message:"Bridge outbox is full"}))):void ke.push({msg:e,reqId:n});n&&Be(n),de(e)}function Xe(){null!==me&&(clearTimeout(me),me=null)}function Fe(){if(!fe&&Me()){Xe();var e={v:2,kind:"hello",nonce:m.nonce||"",role:"view",protocolsSupported:[2]};ve=!0,de(e),me=setTimeout(function(){if(!fe)if(++pe<3)N("Handshake timeout (".concat(pe,"/").concat(3,"), retrying...")),ve=!1,Fe();else{for(P("Handshake failed"),Xe(),ve=!1,pe=0;ke.length;){var e=ke.shift();(null==e?void 0:e.reqId)&&Pe(e.reqId,{code:o,message:"Bridge handshake failed"})}for(var n=0,t=Array.from(_e.keys());n<t.length;n++){Ne(t[n],{code:o,message:"Bridge handshake failed"})}}},1e4)}}function Ge(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function He(e,n,t){void 0===t&&(t=!1);var r=function(e){if(""===e)return[];if(!e.startsWith("/"))throw new Error("Invalid JSON pointer: ".concat(e));return e.split("/").slice(1).map(Ge)}(n);if(0===r.length)return{container:{$root:e},key:"$root"};for(var o=e,i=0;i<r.length-1;i++){var a=r[i];if(Array.isArray(o))o=o[Number(a)];else{if(!o||"object"!=typeof o)throw new Error("Invalid container at ".concat(a));var c=o;if(t&&void 0===c[a]){var l=r[i+1];c[a]=l&&/^\d+$/.test(l)?[]:{}}o=c[a]}}return{container:o,key:r[r.length-1]}}function qe(e){Se.forEach(function(n){try{if(!Le.has(n))return Le.set(n,!0),void n(D(xe),{rev:Ee,initial:!0});n(D(xe),{rev:Ee,initial:e})}catch(e){N("Subscriber error:",e)}})}function Ue(e){if("function"!=typeof e)return function(){};if(Se.add(e),Ee>=0){Le.set(e,!0);try{e(D(xe),{rev:Ee,initial:!0})}catch(e){P("Callback error:",e)}}return function(){Se.delete(e),Le.delete(e)}}function We(e){on.call("state.getSnapshot",{scope:e}).catch(function(){})}function ze(e){var n,t,r,o;if(e&&"object"==typeof e){var i=e;if("event"===i.type&&"nativecomponent"===i.name&&i.payload){var l=i.payload,s=l.id||l.componentId;if("string"==typeof s){var u=Je.get(s);if(u)try{u(l)}catch(e){P("NC handler error:",e)}}return}}var v=function(e){if(!e||"object"!=typeof e)return null;var n=e.v,t=e.kind;return 2!==n||"string"!=typeof t?null:e}(e);if(v)switch(v.kind){case"helloAck":return void(ue=v.sessionId);case"ready":if(ue&&v.sessionId!==ue)return void N("sessionId mismatch");if(Xe(),fe=!0,pe=0,v.hostMethods)for(var p=0,m=Object.entries(v.hostMethods);p<m.length;p++){var h=m[p],g=h[0],y=h[1];he[g]=y}return j("proto")&&C("Handshake complete, hostMethods:",Object.keys(he).length),void function(){if(je())for(;ke.length;){var e=ke.shift();e&&(e.reqId&&Be(e.reqId),de(e.msg))}}();case"res":var w=be.get(v.id);if(!w)return;if(be.delete(v.id),null!==w.timerId&&clearTimeout(w.timerId),v.ok){if("state.getSnapshot"===w.method&&(function(e){if(!e||"object"!=typeof e)return!1;var n=e;return!("number"!=typeof n.rev||!Number.isFinite(n.rev)||!n.state||"object"!=typeof n.state||(xe=n.state,Ee=n.rev,j("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",Ee,"state:",D(xe)),console.groupEnd()),qe(!0),0))}(v.result)||N("Invalid state.getSnapshot result")),"stream"===w.mode&&w.stream)return void w.stream._resolve(v.result);null===(n=w.resolve)||void 0===n||n.call(w,v.result)}else{var b=f(v.error);if("stream"===w.mode&&w.stream)return void w.stream._reject(b);null===(t=w.reject)||void 0===t||t.call(w,b)}return;case"event":if(be.has(v.id)){var _=be.get(v.id);return void("stream"===(null==_?void 0:_.mode)&&_.stream?(null!==_.timerId&&(clearTimeout(_.timerId),_.timerId=null),_.timeoutMs=0,_.stream._emitData(v.payload)):N("Received event for non-stream request '".concat(v.id,"'")))}return;case"state.snapshot":return xe=v.state||{},Ee=v.rev,j("data")&&(console.group("[LX] snapshot"),console.log("rev:",Ee,"state:",D(xe)),console.groupEnd()),void qe(!0);case"state.patch":if(v.baseRev!==Ee)return N("baseRev mismatch",{have:Ee,want:v.baseRev}),void We(v.scope);try{!function(e,n){for(var t=0,r=n;t<r.length;t++){var o=r[t],i="add"===o.op||"replace"===o.op,a=He(e,o.path,i),c=a.container,l=a.key;if("$root"!==l)if(Array.isArray(c)){var s="-"===l?c.length:Number(l);if(!Number.isFinite(s)||s<0)throw new Error("Invalid index");"remove"===o.op?c.splice(s,1):"add"===o.op?c.splice(s,0,o.value):"replace"===o.op&&(c[s]=o.value)}else{if(!c||"object"!=typeof c)throw new Error("Invalid container");var d=c;"remove"===o.op?delete d[l]:d[l]=o.value}else{for(var u=0,f=Object.keys(e);u<f.length;u++)delete e[f[u]];if("remove"!==o.op){var v=o.value;v&&"object"==typeof v&&Object.assign(e,v)}}}}(xe,v.ops||[]),Ee=v.rev}catch(e){return P("Patch failed:",e),void We(v.scope)}return j("data")&&(console.group("[LX] patch"),console.log("rev:",Ee,"ops:",v.ops),console.groupEnd()),qe(!1),void(v.ack&&Re({v:2,kind:"state.ack",scope:v.scope,rev:v.rev}));case"ch.ack":var I=_e.get(v.id);if(!I)return;if(_e.delete(v.id),null!==I.timerId&&clearTimeout(I.timerId),v.ok)I.channel._markOpen(),Ie.set(v.id,I.channel),I.resolve(I.channel);else{b=f(v.error);I.channel._reject(b),I.reject(b)}return;case"ch.data":var k=Ie.get(v.id);if(!k)return;return void k._emitData(v.payload);case"ch.close":if(_e.get(v.id))return void Ne(v.id,{code:null!==(r=v.code)&&void 0!==r?r:d,message:null!==(o=v.reason)&&void 0!==o?o:"Channel closed before opening"});var E=Ie.get(v.id);if(!E)return;return Ie.delete(v.id),void E._emitClose(v.code,v.reason);case"req":var x=v,S=Ae(x.method);if(!x.cap||x.cap!==S)return void Re({v:2,kind:"res",id:x.id,ok:!1,error:{code:c,message:"Invalid cap for ".concat(x.method)}});var L=Te.get(x.method);return L?void Promise.resolve().then(function(){return L(x.params)}).then(function(e){Re({v:2,kind:"res",id:x.id,ok:!0,result:e})}).catch(function(e){Re({v:2,kind:"res",id:x.id,ok:!1,error:f(e)})}):void Re({v:2,kind:"res",id:x.id,ok:!1,error:{code:a,message:"View handler not found: ".concat(x.method)}})}else N("Invalid V2 message:",e)}var Je=new Map,Ye=[],Ve=!1;function $e(){var e,n,t;return"undefined"!=typeof window&&!(!(null===(n=null===(e=window.webkit)||void 0===e?void 0:e.messageHandlers)||void 0===n?void 0:n.NativeComponent)&&!(null===(t=window.NativeComponentBridge)||void 0===t?void 0:t.postMessage))}function Ke(e){var n,t,r;try{if(null===(t=null===(n=window.webkit)||void 0===n?void 0:n.messageHandlers)||void 0===t?void 0:t.NativeComponent)return void window.webkit.messageHandlers.NativeComponent.postMessage(e);if(null===(r=window.NativeComponentBridge)||void 0===r?void 0:r.postMessage)return void window.NativeComponentBridge.postMessage(B(e))}catch(e){P("NativeComponent send error:",e)}}function Qe(){if($e()&&0!==Ye.length)for(Ve=!0;Ye.length;){var e=Ye.shift();try{Ke(e)}catch(e){break}}}function Ze(e){try{if(!$e())return void Ye.push(e);Ve||Qe(),Ke(e)}catch(e){P("NC send failed:",e)}}function en(e){return"".concat(e,"_").concat(Date.now(),"_").concat(ge++)}function nn(e,n,t){if(n)if(n.aborted)t();else{var r={handleEvent:function(){n.removeEventListener("abort",r),t()}};n.addEventListener("abort",r)}}var tn,rn,on={call:function(e,n,t){return new Promise(function(o,a){var c;if(e&&"string"==typeof e){ve||Fe();var l=en("c"),s=(null==t?void 0:t.cap)||Ae(e),d=null!==(c=null==t?void 0:t.timeoutMs)&&void 0!==c?c:E;be.set(l,{method:e,mode:"call",resolve:o,reject:function(e){return a(e)},timeoutMs:d,timerId:null}),Re({v:2,kind:"req",id:l,method:e,params:Oe(n),cap:s},l),nn(0,null==t?void 0:t.signal,function(){var e=De(l);Ce(l,{code:r,message:"Bridge request aborted"}),!e&&fe&&Re({v:2,kind:"cancel",id:l})})}else a({code:i,message:"Method name must be a non-empty string"})})},stream:function(e,n,t){var o;if(!e||"string"!=typeof e){var a=we("invalid",function(){});return a._reject({code:i,message:"Method name must be a non-empty string"}),a}ve||Fe();var c=en("c"),l=we(c,function(){De(c)?Ce(c,{code:r,message:"Bridge request aborted"}):fe&&Re({v:2,kind:"cancel",id:c})}),s=(null==t?void 0:t.cap)||Ae(e),d=null!==(o=null==t?void 0:t.timeoutMs)&&void 0!==o?o:E;return be.set(c,{method:e,mode:"stream",stream:l,timeoutMs:d,timerId:null}),Re({v:2,kind:"req",id:c,method:e,params:Oe(n),cap:s},c),nn(0,null==t?void 0:t.signal,function(){return l.cancel()}),l},notify:function(e,n,t){e&&"string"==typeof e&&(ve||Fe(),Re({v:2,kind:"notify",method:e,params:Oe(n),cap:(null==t?void 0:t.cap)||Ae(e)}))},state:{subscribe:Ue},channel:{open:function(e,n,t){return e&&"string"==typeof e?(ve||Fe(),new Promise(function(r,o){var i=en("ch"),a=function(e,n,t){var r,o=ye(),i=!1,a=0,c=!1,l=!1,s=[],u=[],f=((r={id:e,send:function(t){i?n(t,a++):f._reject({code:d,message:"Channel '".concat(e,"' is closed")})},on:function(e,n){if("data"===e&&(o.data.add(n),s.length>0))for(var t=0,r=s.splice(0);t<r.length;t++){var i=r[t];try{n(i)}catch(e){N("Channel listener failed:",e)}}return"close"===e&&o.close.add(n),"error"===e&&o.error.add(n),this}})[Symbol.asyncIterator]=function(){return l=!0,{next:function(){return s.length>0?Promise.resolve({done:!1,value:s.shift()}):c?Promise.resolve({done:!0,value:void 0}):new Promise(function(e,n){u.push({resolve:e,reject:n})})}}},r.close=function(e,n){i&&(i=!1,c=!0,t(e,n),f._emitClose(e,n))},r._emitData=function(e){if(i){u.length>0?u.shift().resolve({done:!1,value:e}):(l||0===o.data.size)&&s.push(e);for(var n=0,t=o.data;n<t.length;n++){var r=t[n];try{r(e)}catch(e){N("Channel listener failed:",e)}}}},r._emitClose=function(e,n){for(c=!0;u.length>0;)u.shift().resolve({done:!0,value:void 0});for(var t=0,r=o.close;t<r.length;t++){var i=r[t];try{i(e,n)}catch(e){N("Channel close listener failed:",e)}}},r._reject=function(e){for(c=!0;u.length>0;)u.shift().reject(e);for(var n=0,t=o.error;n<t.length;n++){var r=t[n];try{r(e)}catch(e){N("Channel error listener failed:",e)}}},r._markOpen=function(){i=!0,c=!1},r._isOpen=function(){return i},r._nextSeq=function(){return a++},r);return f}(i,function(e,n){Re({v:2,kind:"ch.data",id:i,seq:n,payload:e})},function(e,n){var t=_e.get(i);t&&null!==t.timerId&&clearTimeout(t.timerId),_e.delete(i),Ie.delete(i),Re({v:2,kind:"ch.close",id:i,code:e,reason:n})});_e.set(i,{topic:e,channel:a,resolve:r,reject:o,timerId:null}),Re({v:2,kind:"ch.open",id:i,topic:e,params:Oe(n),cap:(null==t?void 0:t.cap)||Ae(e)},i)})):Promise.reject({code:i,message:"Topic name must be a non-empty string"})}}},an={invoke:function(e,n,t){return on.call(cn(e),n,ln(t)).then(function(e){return e}).catch(function(e){return Promise.reject(v(e))})},notify:function(e,n,t){on.notify(cn(e),n,ln(t))},stream:function(e,n,t){return sn(on.stream(cn(e),n,ln(t)))},channel:function(e,n,t){return on.channel.open(cn(e),n,ln(t)).then(function(e){return function(e){var n=new Set,t=new Set;return e.on("data",function(e){for(var t=0,r=n;t<r.length;t++){(0,r[t])(e)}}),e.on("close",function(e,n){for(var r={code:e,reason:n},o=0,i=t;o<i.length;o++){(0,i[o])(r)}}),{send:function(n){e.send(n)},onMessage:function(e){return n.add(e),function(){n.delete(e)}},onClose:function(e){return t.add(e),function(){t.delete(e)}},close:function(n,t){e.close(n,t)}}}(e)}).catch(function(e){return Promise.reject(v(e))})},raw:on,state:{subscribe:Ue},_connectWebMessagePort:function(e){if(R===S){if(X&&X!==e)try{X.onmessage=null,X.close()}catch(e){}X=e,e.onmessage=function(e){var n=e.data;if("string"==typeof n)try{n=JSON.parse(n)}catch(e){return}ze(n)};try{e.start()}catch(e){}C("Port connected"),Fe()}},_receiveEvaluateMessage:function(e){try{e&&ze(JSON.parse(e))}catch(e){P("Parse error:",e)}},debug:(tn=O,rn={},Object.keys(tn).forEach(function(e){Object.defineProperty(rn,e,{enumerable:!0,configurable:!1,get:function(){return tn[e]},set:function(n){tn[e]=!!n,console.log("[LX] ".concat(e,": ").concat(n))}})}),rn),platform:{isHarmony:function(){return"Harmony"===m.os},isIOS:b,isAndroid:function(){return"Android"===m.os},isMacOS:_,isWindows:I,isDesktop:function(){return _()||I()},isApple:function(){return b()||_()},isRunner:function(){return!0===m.runner},getOS:w},dom:{measureById:function(e){try{if(!e)return null;var n=document.getElementById(e);if(!n)return null;var t=n.getBoundingClientRect(),r=0;try{r=parseFloat(getComputedStyle(n).borderRadius)||0}catch(e){}return[t.left+window.scrollX,t.top+window.scrollY,t.width,t.height,r]}catch(e){return null}}},nativeComponents:{send:Ze,hasHandler:$e,flush:Qe,register:function(e,n){return e&&"function"==typeof n?(Je.set(e,n),function(){return Je.delete(e)}):function(){}},unregister:function(e){Je.delete(e)}},isReady:function(){return fe}};function cn(e){return e.startsWith("host.")?e:"host.".concat(e)}function ln(e){return __assign(__assign({},e||{}),{cap:(null==e?void 0:e.cap)||"host"})}function sn(e){var n=new Set,t=new Set;return e.on("data",function(e){for(var t=0,r=n;t<r.length;t++){(0,r[t])(e)}}),e.on("error",function(e){for(var n=v(e),r=0,o=t;r<o.length;r++){(0,o[r])(n)}}),{onEvent:function(e){return n.add(e),function(){n.delete(e)}},onError:function(e){return t.add(e),function(){t.delete(e)}},result:e.result.catch(function(e){return Promise.reject(v(e))}),cancel:function(){e.cancel()}}}function dn(){if(window.__LX_BRIDGE_INIT_STATE)C("Bridge already ".concat(window.__LX_BRIDGE_INIT_STATE,", skipping duplicate init"));else{window.__LX_BRIDGE_INIT_STATE="initializing";try{C("Method: ".concat(R)),function(e){if("undefined"!=typeof window&&(window[k]=e,0!==M.length))for(var n=0,t=M.splice(0,M.length);n<t.length;n++){var r=t[n];try{e(r)}catch(e){N("Failed to replay queued native message:",e)}}}(an._receiveEvaluateMessage),Z()?(ae(),Z()&&!W&&null===Y&&(Y=setInterval(function(){0!==J&&Date.now()-J>35e3&&(N("Apple downstream stale (no heartbeat), forcing reconnect"),le())},5e3)),Z()&&"undefined"!=typeof document&&document.addEventListener("visibilitychange",se)):R===S?(K(),function(){var e,n;if(X)return Promise.resolve(X);if(V.promise)return V.promise;K(),V.promise=new Promise(function(e,n){V.resolve=function(n){Q(),e(n)},V.reject=function(e){Q(),n(e)},V.timer=window.setTimeout(function(){var e;null===(e=V.reject)||void 0===e||e.call(V,new Error("MessagePort init timed out after ".concat(5e3,"ms")))},5e3)});try{null===(e=window.LingXiaProxy)||void 0===e||e.getPort("LingXiaPort")}catch(e){null===(n=V.reject)||void 0===n||n.call(V,e)}return V.promise}().catch(function(e){return N("Port init failed:",e)})):"webkit"===R||R===L||R===T?Fe():N("Unknown method"),window.LingXiaBridge=an,window.__lxForceDownstreamReconnect=le,p({os:w(),send:Ze}),window.__LX_BRIDGE_INIT_STATE="initialized",C("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function un(e){var n=document.createElement("div");return n.textContent=e,n.innerHTML}function fn(e){var n=e.failedPath,t=e.reason,r=document.createElement("style");r.textContent="\n* { margin: 0; padding: 0; box-sizing: border-box; }\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n background: #f5f5f7;\n color: #1d1d1f;\n padding: 20px;\n -webkit-font-smoothing: antialiased;\n}\n.lx-error {\n text-align: center;\n max-width: 400px;\n}\n.lx-error-code {\n font-size: 120px;\n font-weight: 700;\n color: #d1d1d6;\n line-height: 1;\n letter-spacing: -4px;\n}\n.lx-error-title {\n font-size: 21px;\n font-weight: 600;\n margin: 16px 0 8px;\n color: #1d1d1f;\n}\n.lx-error-desc {\n font-size: 15px;\n color: #86868b;\n line-height: 1.5;\n}\n.lx-error-path {\n display: inline-block;\n margin-top: 20px;\n padding: 10px 16px;\n background: rgba(0,0,0,0.04);\n border-radius: 8px;\n font-family: 'SF Mono', ui-monospace, Menlo, Monaco, monospace;\n font-size: 13px;\n color: #1d1d1f;\n word-break: break-all;\n max-width: 100%;\n}\n@media (prefers-color-scheme: dark) {\n body { background: #000; color: #f5f5f7; }\n .lx-error-code { color: #3a3a3c; }\n .lx-error-title { color: #f5f5f7; }\n .lx-error-desc { color: #86868b; }\n .lx-error-path { background: rgba(255,255,255,0.08); color: #f5f5f7; }\n}\n",document.head.appendChild(r),document.body.innerHTML="",document.body.style.cssText="";var o=document.createElement("div");o.className="lx-error";var i='<div class="lx-error-code">404</div>';i+='<h1 class="lx-error-title">Page Not Found</h1>',i+="<p class=\"lx-error-desc\">The page you're looking for doesn't exist.</p>",n&&(i+='<div class="lx-error-path">'.concat(un(n),"</div>")),t&&(i+='<p class="lx-error-desc" style="margin-top:12px">'.concat(un(t),"</p>")),o.innerHTML=i,document.body.appendChild(o)}function vn(){var e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function pn(){var e;return(null===(e=window.__LX_RUNTIME_CONFIG)||void 0===e?void 0:e.error)||null}var mn={handleEvent:function(){return hn()}};function hn(){if(vn()){var e=pn();e&&fn(e)}}function gn(){dn(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",mn):hn()}return gn(),e.LingXiaBridge=an,e.boot=function(){dn(),hn()},e.bootWhenReady=gn,e.channel=function(e,n,t){return an.channel(e,n,t)},e.getDisplayLanguage=function(){return g().value},e.getErrorInfo=pn,e.hasError=vn,e.initBridge=dn,e.invoke=function(e,n,t){return an.invoke(e,n,t)},e.isNativeError=function(e,n){if(!e||"object"!=typeof e)return!1;var t=e;return"string"==typeof t.code&&""!==t.code.trim()&&("string"==typeof t.message&&(void 0===n||t.code===n))},e.notify=function(e,n,t){on.notify(cn(e),n,ln(t))},e.renderErrorUI=fn,e.stream=function(e,n,t){return sn(on.stream(cn(e),n,ln(t)))},e.subscribeDisplayLanguage=function(e){var n=g().listeners;return n.add(e),function(){n.delete(e)}},e}({});
@@ -7,7 +7,7 @@
7
7
  */
8
8
  export { LingXiaBridge, channel, initBridge, invoke, notify, stream, } from './bridge';
9
9
  export { isNativeError } from './invocation';
10
- export { getDisplayLanguage } from './runtime-env';
10
+ export { getDisplayLanguage, subscribeDisplayLanguage } from './runtime-env';
11
11
  export { renderErrorUI, hasError, getErrorInfo } from './error';
12
12
  export { boot, bootWhenReady } from './boot';
13
13
  import { bootWhenReady } from './boot';
@@ -1,10 +1,66 @@
1
1
  export const BRIDGE_CONFIG = (typeof window !== 'undefined' && window.__LX_BRIDGE_CFG) || {};
2
- const displayLanguage = BRIDGE_CONFIG.displayLanguage?.trim() || 'en-US';
3
- if (typeof document !== 'undefined' && document.documentElement) {
4
- document.documentElement.lang = displayLanguage;
2
+ /**
3
+ * One store per document, deliberately on `window`.
4
+ *
5
+ * This module is present twice in a page: once as the global bridge runtime
6
+ * the host injects, once bundled into the page's own JS. Module-local state
7
+ * would give each copy its own value — the host would push the change into
8
+ * whichever copy won the race to install the hook, and the other, which is the
9
+ * one the framework hooks read, would answer with the boot value forever.
10
+ */
11
+ const fallbackStore = {
12
+ value: BRIDGE_CONFIG.displayLanguage?.trim() || 'en-US',
13
+ listeners: new Set(),
14
+ };
15
+ function store() {
16
+ if (typeof window === 'undefined')
17
+ return fallbackStore;
18
+ if (!window.__lxDisplayLanguage) {
19
+ window.__lxDisplayLanguage = {
20
+ value: BRIDGE_CONFIG.displayLanguage?.trim() || 'en-US',
21
+ listeners: new Set(),
22
+ };
23
+ }
24
+ return window.__lxDisplayLanguage;
25
+ }
26
+ function stampDocumentLanguage() {
27
+ if (typeof document !== 'undefined' && document.documentElement) {
28
+ document.documentElement.lang = store().value;
29
+ }
30
+ }
31
+ stampDocumentLanguage();
32
+ /**
33
+ * Host entry point for a language the user changed while this document was
34
+ * open. Bootstrap alone would leave a live page in the language it started in,
35
+ * with the native chrome around it already switched.
36
+ */
37
+ function applyDisplayLanguage(next) {
38
+ const normalized = typeof next === 'string' ? next.trim() : '';
39
+ const current = store();
40
+ if (!normalized || normalized === current.value)
41
+ return;
42
+ current.value = normalized;
43
+ stampDocumentLanguage();
44
+ for (const listener of [...current.listeners])
45
+ listener();
46
+ }
47
+ if (typeof window !== 'undefined' && !window.__lingxiaApplyDisplayLanguage) {
48
+ Object.defineProperty(window, '__lingxiaApplyDisplayLanguage', {
49
+ configurable: false,
50
+ enumerable: false,
51
+ value: applyDisplayLanguage,
52
+ });
5
53
  }
6
54
  export function getDisplayLanguage() {
7
- return displayLanguage;
55
+ return store().value;
56
+ }
57
+ /** Subscribe to host display-language changes. Returns an unsubscribe. */
58
+ export function subscribeDisplayLanguage(listener) {
59
+ const listeners = store().listeners;
60
+ listeners.add(listener);
61
+ return () => {
62
+ listeners.delete(listener);
63
+ };
8
64
  }
9
65
  export function getPlatformOS() {
10
66
  return BRIDGE_CONFIG.os || 'unknown';
@@ -63,6 +63,20 @@ export function showToast(params) {
63
63
  const duration = p?.duration ?? 1500;
64
64
  const mask = p?.mask ?? false;
65
65
  const position = p?.position ?? 'center';
66
+ // A repeat call that only changes the text updates the live toast in place —
67
+ // stepping "connecting 1/4" to "2/4" must not replay the enter animation or
68
+ // restart the spinner. Anything structural still rebuilds.
69
+ if (currentToast &&
70
+ currentToast.icon === icon &&
71
+ currentToast.position === position &&
72
+ currentToast.mask === mask) {
73
+ const live = currentToast;
74
+ live.titleEl.textContent = title;
75
+ if (live.timer)
76
+ clearTimeout(live.timer);
77
+ live.timer = duration > 0 ? setTimeout(live.dismiss, duration) : null;
78
+ return Promise.resolve();
79
+ }
66
80
  // Hide existing toast first
67
81
  if (currentToast) {
68
82
  currentToast.dismiss();
@@ -119,21 +133,28 @@ export function showToast(params) {
119
133
  if (dismissed)
120
134
  return;
121
135
  dismissed = true;
122
- if (currentToast?.dismiss === dismiss)
136
+ if (live.timer)
137
+ clearTimeout(live.timer);
138
+ if (currentToast === live)
123
139
  currentToast = null;
124
140
  box.classList.remove('lx-toast-visible');
125
- if (timer)
126
- clearTimeout(timer);
127
141
  setTimeout(() => {
128
142
  container.remove();
129
143
  maskEl?.remove();
130
144
  }, ANIMATION_MS);
131
145
  }
132
- let timer = null;
146
+ const live = {
147
+ dismiss,
148
+ timer: null,
149
+ titleEl,
150
+ icon,
151
+ position,
152
+ mask,
153
+ };
133
154
  if (duration > 0) {
134
- timer = setTimeout(dismiss, duration);
155
+ live.timer = setTimeout(dismiss, duration);
135
156
  }
136
- currentToast = { dismiss, timer };
157
+ currentToast = live;
137
158
  return Promise.resolve();
138
159
  }
139
160
  export function hideToast() {
package/dist/es5/index.js CHANGED
@@ -7,7 +7,7 @@
7
7
  */
8
8
  export { LingXiaBridge, channel, initBridge, invoke, notify, stream, } from './bridge';
9
9
  export { isNativeError } from './invocation';
10
- export { getDisplayLanguage } from './runtime-env';
10
+ export { getDisplayLanguage, subscribeDisplayLanguage } from './runtime-env';
11
11
  export { renderErrorUI, hasError, getErrorInfo } from './error';
12
12
  export { boot, bootWhenReady } from './boot';
13
13
  import { bootWhenReady } from './boot';
@@ -1,11 +1,116 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ var __values = (this && this.__values) || function(o) {
27
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
28
+ if (m) return m.call(o);
29
+ if (o && typeof o.length === "number") return {
30
+ next: function () {
31
+ if (o && i >= o.length) o = void 0;
32
+ return { value: o && o[i++], done: !o };
33
+ }
34
+ };
35
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
36
+ };
1
37
  var _a;
2
38
  export var BRIDGE_CONFIG = (typeof window !== 'undefined' && window.__LX_BRIDGE_CFG) || {};
3
- var displayLanguage = ((_a = BRIDGE_CONFIG.displayLanguage) === null || _a === void 0 ? void 0 : _a.trim()) || 'en-US';
4
- if (typeof document !== 'undefined' && document.documentElement) {
5
- document.documentElement.lang = displayLanguage;
39
+ /**
40
+ * One store per document, deliberately on `window`.
41
+ *
42
+ * This module is present twice in a page: once as the global bridge runtime
43
+ * the host injects, once bundled into the page's own JS. Module-local state
44
+ * would give each copy its own value — the host would push the change into
45
+ * whichever copy won the race to install the hook, and the other, which is the
46
+ * one the framework hooks read, would answer with the boot value forever.
47
+ */
48
+ var fallbackStore = {
49
+ value: ((_a = BRIDGE_CONFIG.displayLanguage) === null || _a === void 0 ? void 0 : _a.trim()) || 'en-US',
50
+ listeners: new Set(),
51
+ };
52
+ function store() {
53
+ var _a;
54
+ if (typeof window === 'undefined')
55
+ return fallbackStore;
56
+ if (!window.__lxDisplayLanguage) {
57
+ window.__lxDisplayLanguage = {
58
+ value: ((_a = BRIDGE_CONFIG.displayLanguage) === null || _a === void 0 ? void 0 : _a.trim()) || 'en-US',
59
+ listeners: new Set(),
60
+ };
61
+ }
62
+ return window.__lxDisplayLanguage;
63
+ }
64
+ function stampDocumentLanguage() {
65
+ if (typeof document !== 'undefined' && document.documentElement) {
66
+ document.documentElement.lang = store().value;
67
+ }
68
+ }
69
+ stampDocumentLanguage();
70
+ /**
71
+ * Host entry point for a language the user changed while this document was
72
+ * open. Bootstrap alone would leave a live page in the language it started in,
73
+ * with the native chrome around it already switched.
74
+ */
75
+ function applyDisplayLanguage(next) {
76
+ var e_1, _a;
77
+ var normalized = typeof next === 'string' ? next.trim() : '';
78
+ var current = store();
79
+ if (!normalized || normalized === current.value)
80
+ return;
81
+ current.value = normalized;
82
+ stampDocumentLanguage();
83
+ try {
84
+ for (var _b = __values(__spreadArray([], __read(current.listeners), false)), _c = _b.next(); !_c.done; _c = _b.next()) {
85
+ var listener = _c.value;
86
+ listener();
87
+ }
88
+ }
89
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
90
+ finally {
91
+ try {
92
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
93
+ }
94
+ finally { if (e_1) throw e_1.error; }
95
+ }
96
+ }
97
+ if (typeof window !== 'undefined' && !window.__lingxiaApplyDisplayLanguage) {
98
+ Object.defineProperty(window, '__lingxiaApplyDisplayLanguage', {
99
+ configurable: false,
100
+ enumerable: false,
101
+ value: applyDisplayLanguage,
102
+ });
6
103
  }
7
104
  export function getDisplayLanguage() {
8
- return displayLanguage;
105
+ return store().value;
106
+ }
107
+ /** Subscribe to host display-language changes. Returns an unsubscribe. */
108
+ export function subscribeDisplayLanguage(listener) {
109
+ var listeners = store().listeners;
110
+ listeners.add(listener);
111
+ return function () {
112
+ listeners.delete(listener);
113
+ };
9
114
  }
10
115
  export function getPlatformOS() {
11
116
  return BRIDGE_CONFIG.os || 'unknown';
@@ -20,6 +20,20 @@ export function showToast(params) {
20
20
  var duration = (_c = p === null || p === void 0 ? void 0 : p.duration) !== null && _c !== void 0 ? _c : 1500;
21
21
  var mask = (_d = p === null || p === void 0 ? void 0 : p.mask) !== null && _d !== void 0 ? _d : false;
22
22
  var position = (_e = p === null || p === void 0 ? void 0 : p.position) !== null && _e !== void 0 ? _e : 'center';
23
+ // A repeat call that only changes the text updates the live toast in place —
24
+ // stepping "connecting 1/4" to "2/4" must not replay the enter animation or
25
+ // restart the spinner. Anything structural still rebuilds.
26
+ if (currentToast &&
27
+ currentToast.icon === icon &&
28
+ currentToast.position === position &&
29
+ currentToast.mask === mask) {
30
+ var live_1 = currentToast;
31
+ live_1.titleEl.textContent = title;
32
+ if (live_1.timer)
33
+ clearTimeout(live_1.timer);
34
+ live_1.timer = duration > 0 ? setTimeout(live_1.dismiss, duration) : null;
35
+ return Promise.resolve();
36
+ }
23
37
  // Hide existing toast first
24
38
  if (currentToast) {
25
39
  currentToast.dismiss();
@@ -76,21 +90,28 @@ export function showToast(params) {
76
90
  if (dismissed)
77
91
  return;
78
92
  dismissed = true;
79
- if ((currentToast === null || currentToast === void 0 ? void 0 : currentToast.dismiss) === dismiss)
93
+ if (live.timer)
94
+ clearTimeout(live.timer);
95
+ if (currentToast === live)
80
96
  currentToast = null;
81
97
  box.classList.remove('lx-toast-visible');
82
- if (timer)
83
- clearTimeout(timer);
84
98
  setTimeout(function () {
85
99
  container.remove();
86
100
  maskEl === null || maskEl === void 0 ? void 0 : maskEl.remove();
87
101
  }, ANIMATION_MS);
88
102
  }
89
- var timer = null;
103
+ var live = {
104
+ dismiss: dismiss,
105
+ timer: null,
106
+ titleEl: titleEl,
107
+ icon: icon,
108
+ position: position,
109
+ mask: mask,
110
+ };
90
111
  if (duration > 0) {
91
- timer = setTimeout(dismiss, duration);
112
+ live.timer = setTimeout(dismiss, duration);
92
113
  }
93
- currentToast = { dismiss: dismiss, timer: timer };
114
+ currentToast = live;
94
115
  return Promise.resolve();
95
116
  }
96
117
  export function hideToast() {
package/dist/index.d.ts CHANGED
@@ -8,6 +8,6 @@
8
8
  export type { BridgeConfig, CallOptions, ChannelCloseEvent, ChannelOptions, ChannelOpenOptions, BridgeErrorCode, ChannelEventName, DataSubscriber, ErrorInfo, LingXiaBridgeInterface, LxChannel, LxBridgeError, LxMethod, LxMethodParams, LxMethodResult, LxMethodStreamData, LxStream, NativeComponentMessage, NativeChannel, NativeError, NativeStream, NotifyOptions, InvokeOptions, StateInfo, StreamCallOptions, StreamOptions, StreamEventName, } from './types';
9
9
  export { LingXiaBridge, channel, initBridge, invoke, notify, stream, } from './bridge';
10
10
  export { isNativeError } from './invocation';
11
- export { getDisplayLanguage } from './runtime-env';
11
+ export { getDisplayLanguage, subscribeDisplayLanguage } from './runtime-env';
12
12
  export { renderErrorUI, hasError, getErrorInfo } from './error';
13
13
  export { boot, bootWhenReady } from './boot';
@@ -3,6 +3,8 @@ export type CommunicationMethod = 'messageport' | 'jsinterface' | 'webmessage' |
3
3
  export type PlatformOS = NonNullable<BridgeConfig['os']> | 'unknown';
4
4
  export declare const BRIDGE_CONFIG: BridgeConfig;
5
5
  export declare function getDisplayLanguage(): string;
6
+ /** Subscribe to host display-language changes. Returns an unsubscribe. */
7
+ export declare function subscribeDisplayLanguage(listener: () => void): () => void;
6
8
  export declare function getPlatformOS(): PlatformOS;
7
9
  export declare function isHarmony(): boolean;
8
10
  export declare function isIOS(): boolean;
package/dist/types.d.ts CHANGED
@@ -117,6 +117,13 @@ export interface NativeChannel<TIn = unknown, TOut = unknown> {
117
117
  declare global {
118
118
  interface Window {
119
119
  __LX_BRIDGE_CFG?: BridgeConfig;
120
+ /** Host push for a display language changed while the page is open. */
121
+ __lingxiaApplyDisplayLanguage?: (language: string) => void;
122
+ /** Shared by every copy of the bridge module in this document. */
123
+ __lxDisplayLanguage?: {
124
+ value: string;
125
+ listeners: Set<() => void>;
126
+ };
120
127
  __LX_BRIDGE_INIT_STATE?: 'initializing' | 'initialized';
121
128
  __LX_RUNTIME_CONFIG?: RuntimeConfig;
122
129
  __pageBridge?: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingxia/bridge",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "private": false,
5
5
  "description": "LingXia Web Runtime - Bridge, boot, and error handling for WebView",
6
6
  "repository": {
@@ -44,9 +44,9 @@
44
44
  "prepublishOnly": "npm run build"
45
45
  },
46
46
  "devDependencies": {
47
- "rolldown": "^1.0.0-rc.13",
48
- "terser": "^5.39.0",
49
- "tslib": "^2.6.2",
47
+ "rolldown": "^1.2.4",
48
+ "terser": "^5.50.0",
49
+ "tslib": "^2.8.1",
50
50
  "typescript": "^5.3.0"
51
51
  },
52
52
  "files": [