@lingxia/bridge 0.13.0 → 0.15.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={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
+ 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"mobile"===p.hostClass||"desktop"===p.hostClass?p.hostClass:"macOS"===p.os||"Windows"===p.os?"desktop":"mobile"}function x(){return"iOS"===p.os}function b(){return"macOS"===p.os}function k(){return"desktop"===w()}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&&(x()||b())}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:x,isAndroid:function(){return"Android"===p.os},isMacOS:b,isWindows:function(){return"Windows"===p.os},isDesktop:k,isMobile:function(){return"mobile"===w()},isApple:function(){return x()||b()},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 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}({});
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"mobile"===m.hostClass||"desktop"===m.hostClass?m.hostClass:"macOS"===m.os||"Windows"===m.os?"desktop":"mobile"}function _(){return"iOS"===m.os}function I(){return"macOS"===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&&(_()||I())}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:_,isAndroid:function(){return"Android"===m.os},isMacOS:I,isWindows:function(){return"Windows"===m.os},isDesktop:function(){return"desktop"===b()},isMobile:function(){return"mobile"===b()},isApple:function(){return _()||I()},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}({});
@@ -1,7 +1,7 @@
1
1
  import { BRIDGE_ERROR } from "./types";
2
2
  import { toBridgeError, toNativeError } from "./invocation";
3
3
  import { installNativeComponentCoverageMonitor } from "./nativecomponents/coverage-monitor";
4
- import { BRIDGE_CONFIG, getCommunicationMethod, getPlatformOS, isAndroid, isHarmony, isIOS, isMacOS, isWindows, isDesktop, isApple, isDevSession, isRunner, } from "./runtime-env";
4
+ import { BRIDGE_CONFIG, getCommunicationMethod, getPlatformOS, isAndroid, isHarmony, isIOS, isMacOS, isWindows, isDesktop, isMobile, isApple, isDevSession, isRunner, } from "./runtime-env";
5
5
  const NATIVE_HANDLER_NAME = "LingXia";
6
6
  const GLOBAL_RECEIVER_NAME = "__LingXiaRecvMessage";
7
7
  const DEFAULT_TIMEOUT_MS = 5000;
@@ -1631,6 +1631,7 @@ export const LingXiaBridge = {
1631
1631
  isMacOS,
1632
1632
  isWindows,
1633
1633
  isDesktop,
1634
+ isMobile,
1634
1635
  isApple,
1635
1636
  isRunner,
1636
1637
  getOS: getPlatformOS,
@@ -65,6 +65,23 @@ export function subscribeDisplayLanguage(listener) {
65
65
  export function getPlatformOS() {
66
66
  return BRIDGE_CONFIG.os || 'unknown';
67
67
  }
68
+ /**
69
+ * Which kind of machine this is, mobile or desktop. Read through `isMobile()`
70
+ * and `isDesktop()`; the class itself is host vocabulary, not lxapp API.
71
+ *
72
+ * Fixed for the life of the document. A shipped host is one machine; the
73
+ * Runner re-serves the page when its simulated device changes class, so this
74
+ * never has to change under a page that is already rendering.
75
+ *
76
+ * Hosts from before this config key shipped send nothing, so fall back to the
77
+ * OS: every one of them is the machine it names.
78
+ */
79
+ function hostClass() {
80
+ if (BRIDGE_CONFIG.hostClass === 'mobile' || BRIDGE_CONFIG.hostClass === 'desktop') {
81
+ return BRIDGE_CONFIG.hostClass;
82
+ }
83
+ return BRIDGE_CONFIG.os === 'macOS' || BRIDGE_CONFIG.os === 'Windows' ? 'desktop' : 'mobile';
84
+ }
68
85
  export function isHarmony() {
69
86
  return BRIDGE_CONFIG.os === 'Harmony';
70
87
  }
@@ -80,8 +97,13 @@ export function isMacOS() {
80
97
  export function isWindows() {
81
98
  return BRIDGE_CONFIG.os === 'Windows';
82
99
  }
100
+ // Form factor, not OS: the Runner shows a real macOS/Windows build inside a
101
+ // phone frame, and a page that keyed off the OS would keep its desktop layout.
83
102
  export function isDesktop() {
84
- return isMacOS() || isWindows();
103
+ return hostClass() === 'desktop';
104
+ }
105
+ export function isMobile() {
106
+ return hostClass() === 'mobile';
85
107
  }
86
108
  // iOS and macOS share the WKWebView transport, so features scoped to it (e.g.
87
109
  // the streaming downstream) key off this rather than the two OS checks.
@@ -84,7 +84,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
84
84
  import { BRIDGE_ERROR } from "./types";
85
85
  import { toBridgeError, toNativeError } from "./invocation";
86
86
  import { installNativeComponentCoverageMonitor } from "./nativecomponents/coverage-monitor";
87
- import { BRIDGE_CONFIG, getCommunicationMethod, getPlatformOS, isAndroid, isHarmony, isIOS, isMacOS, isWindows, isDesktop, isApple, isDevSession, isRunner, } from "./runtime-env";
87
+ import { BRIDGE_CONFIG, getCommunicationMethod, getPlatformOS, isAndroid, isHarmony, isIOS, isMacOS, isWindows, isDesktop, isMobile, isApple, isDevSession, isRunner, } from "./runtime-env";
88
88
  var NATIVE_HANDLER_NAME = "LingXia";
89
89
  var GLOBAL_RECEIVER_NAME = "__LingXiaRecvMessage";
90
90
  var DEFAULT_TIMEOUT_MS = 5000;
@@ -1925,6 +1925,7 @@ export var LingXiaBridge = {
1925
1925
  isMacOS: isMacOS,
1926
1926
  isWindows: isWindows,
1927
1927
  isDesktop: isDesktop,
1928
+ isMobile: isMobile,
1928
1929
  isApple: isApple,
1929
1930
  isRunner: isRunner,
1930
1931
  getOS: getPlatformOS,
@@ -115,6 +115,23 @@ export function subscribeDisplayLanguage(listener) {
115
115
  export function getPlatformOS() {
116
116
  return BRIDGE_CONFIG.os || 'unknown';
117
117
  }
118
+ /**
119
+ * Which kind of machine this is, mobile or desktop. Read through `isMobile()`
120
+ * and `isDesktop()`; the class itself is host vocabulary, not lxapp API.
121
+ *
122
+ * Fixed for the life of the document. A shipped host is one machine; the
123
+ * Runner re-serves the page when its simulated device changes class, so this
124
+ * never has to change under a page that is already rendering.
125
+ *
126
+ * Hosts from before this config key shipped send nothing, so fall back to the
127
+ * OS: every one of them is the machine it names.
128
+ */
129
+ function hostClass() {
130
+ if (BRIDGE_CONFIG.hostClass === 'mobile' || BRIDGE_CONFIG.hostClass === 'desktop') {
131
+ return BRIDGE_CONFIG.hostClass;
132
+ }
133
+ return BRIDGE_CONFIG.os === 'macOS' || BRIDGE_CONFIG.os === 'Windows' ? 'desktop' : 'mobile';
134
+ }
118
135
  export function isHarmony() {
119
136
  return BRIDGE_CONFIG.os === 'Harmony';
120
137
  }
@@ -130,8 +147,13 @@ export function isMacOS() {
130
147
  export function isWindows() {
131
148
  return BRIDGE_CONFIG.os === 'Windows';
132
149
  }
150
+ // Form factor, not OS: the Runner shows a real macOS/Windows build inside a
151
+ // phone frame, and a page that keyed off the OS would keep its desktop layout.
133
152
  export function isDesktop() {
134
- return isMacOS() || isWindows();
153
+ return hostClass() === 'desktop';
154
+ }
155
+ export function isMobile() {
156
+ return hostClass() === 'mobile';
135
157
  }
136
158
  // iOS and macOS share the WKWebView transport, so features scoped to it (e.g.
137
159
  // the streaming downstream) key off this rather than the two OS checks.
@@ -12,6 +12,7 @@ export declare function isAndroid(): boolean;
12
12
  export declare function isMacOS(): boolean;
13
13
  export declare function isWindows(): boolean;
14
14
  export declare function isDesktop(): boolean;
15
+ export declare function isMobile(): boolean;
15
16
  export declare function isApple(): boolean;
16
17
  export declare function isDevSession(): boolean;
17
18
  export declare function isRunner(): boolean;
package/dist/types.d.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  export interface BridgeConfig {
2
2
  os?: 'Harmony' | 'iOS' | 'Android' | 'macOS' | 'Windows';
3
+ /**
4
+ * Transport for the host's form factor, read through `isMobile()` /
5
+ * `isDesktop()` rather than directly. Distinct from `os`, which names the
6
+ * actual system: the Runner simulating a phone is still macOS or Windows.
7
+ */
8
+ hostClass?: 'mobile' | 'desktop';
3
9
  /** Effective host display language; distinct from the raw system locale. */
4
10
  displayLanguage?: string;
5
11
  nonce?: string;
@@ -172,6 +178,7 @@ export interface LingXiaBridgeInterface {
172
178
  isMacOS(): boolean;
173
179
  isWindows(): boolean;
174
180
  isDesktop(): boolean;
181
+ isMobile(): boolean;
175
182
  isApple(): boolean;
176
183
  isRunner(): boolean;
177
184
  getOS(): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingxia/bridge",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "private": false,
5
5
  "description": "LingXia Web Runtime - Bridge, boot, and error handling for WebView",
6
6
  "repository": {