@lingxia/bridge 0.9.0 → 0.10.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||{};function h(){return p.os||"unknown"}function g(){return"iOS"===p.os}function v(){return"macOS"===p.os}const y="__LingXiaRecvMessage",x=5e3,w="[LX.Bridge]",b="messageport",k="jsinterface",E=p.appleDownstreamURL,I={data:!1,proto:!1,all:!1},C=[];function _(e){return I.all||I[e]}function T(...e){console.log(w,...e)}function L(...e){console.warn(w,...e)}function S(...e){console.error(w,...e)}function M(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 N(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch{return{}}}const A="iOS"===p.os||"macOS"===p.os?"webkit":"Harmony"===p.os?"messageport":"Android"===p.os?window.LingXiaProxy?.supportsMessagePort?.()?"messageport":"jsinterface":"unknown";"undefined"!=typeof window&&"function"!=typeof window[y]&&(window[y]=e=>{C.push(e)});let B=null,O=!1,j=null,P=null,R=null,F=200;const D={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},X={handleEvent:e=>{const t=e;if("LingXia-port-init"!==t.data)return;const n=t.ports?.[0];n&&(qe._connectWebMessagePort(n),D.resolve?.(n))}};function $(){D.listenerInstalled||(D.listenerInstalled=!0,window.addEventListener("message",X))}function H(){null!==D.timer&&(window.clearTimeout(D.timer),D.timer=null),D.resolve=null,D.reject=null,D.promise=null}function q(){return"webkit"===A&&(g()||v())}function z(){null!==R&&(clearTimeout(R),R=null)}function G(e){for(const t of Array.from(re.keys()))ye(t,{code:c,message:e});for(const t of Array.from(ie.keys()))xe(t,{code:c,message:e});!function(e){for(const[t,n]of Array.from(se.entries()))se.delete(t),n._emitClose(c,e)}(e)}function U(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{Ae(JSON.parse(n))}catch(e){L("Apple downstream parse error:",e,n)}}return t}function W(){q()&&(j||(z(),j=async function(){if(!E)throw new Error("Apple downstream URL is not configured");const e=new AbortController;P=e;const t=await fetch(E,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal});if(!t.ok)throw new Error(`Apple downstream HTTP ${t.status}`);if(!t.body)throw new Error("Apple downstream response body unavailable");O=!0,F=200,_("proto")&&T("Apple downstream connected"),_e();const n=t.body.getReader(),o=new TextDecoder;let r="";try{for(;;){const{value:e,done:t}=await n.read();if(t)break;r+=o.decode(e,{stream:!0}),r=U(r)}r+=o.decode();const e=r.trim();if(e)try{Ae(JSON.parse(e))}catch(t){L("Apple downstream trailing parse error:",t,e)}}catch(t){if(e.signal.aborted)return;throw t}finally{try{n.releaseLock()}catch{}}}().catch(e=>{P?.signal.aborted||L("Apple downstream failed:",e)}).finally(()=>{const e=P?.signal.aborted??!1;j=null,P=null;const t=O;var n,o;O=!1,n="Apple downstream closed",o=t,Ce(),Y=null,V=!1,K=!1,Q=0,o&&G(n),e||function(e){if(!q())return;z();const t=F;F=Math.min(2*F,2e3);const n=`Apple downstream disconnected, retrying in ${t}ms: ${e}`;t<=200?T(n):L(n),R=setTimeout(()=>{R=null,W()},t)}("stream closed")})))}function J(e){const t=e.kind;"req"!==t&&"notify"!==t||T(`postToNative: ${t} ${e.method}`),_("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===A)return void window.webkit?.messageHandlers.LingXia?.postMessage(e);const t=M(e);if(A===b&&B)return void B.postMessage(t);if(A===k&&window.LingXiaProxy?.postMessage)return void window.LingXiaProxy.postMessage(t);L("Transport not ready")}catch(e){S("Send error:",e)}}let Y=null,V=!1,K=!1,Q=0,Z=null;const ee={};let te=0;function ne(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function oe(e,t){const n=ne();let o=!1,r=()=>{},i=()=>{};const s=[],a=[],l=new Promise((e,t)=>{r=e,i=t});return{id:e,result:l,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]:()=>({next:()=>s.length>0?Promise.resolve({done:!1,value:s.shift()}):o?l.then(e=>({done:!0,value:e}),e=>Promise.reject(e)):new Promise((e,t)=>{a.push({resolve:e,reject:t})})}),cancel(){o||t()},_emitData(e){if(!o){a.length>0?a.shift().resolve({done:!1,value:e}):s.push(e);for(const t of n.data)try{t(e)}catch(e){L("Stream data listener failed:",e)}}},_resolve(e){if(!o){for(o=!0,r(e);a.length>0;)a.shift().resolve({done:!0,value:e});for(const t of n.end)try{t(e)}catch(e){L("Stream end listener failed:",e)}}},_reject(e){if(!o){for(o=!0,i(e);a.length>0;)a.shift().reject(e);for(const t of n.error)try{t(e)}catch(e){L("Stream error listener failed:",e)}}}}}const re=new Map,ie=new Map,se=new Map,ae=[];let le=-1,ce={};const de=new Set,ue=new WeakMap,me=new Map;function fe(e,t){me.set(e,t)}function pe(e){if(e.startsWith("host."))return"host";const t=e.indexOf(".");return t>0?e.slice(0,t):"page"}function he(e){if(null!=e)return e}function ge(){return A===b?!!B:q()?O:"webkit"===A||A===k}function ve(){return ge()&&V}function ye(e,t){const n=re.get(e);if(n){re.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 xe(e,t){const n=ie.get(e);if(!n)return;ie.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);n.channel._reject(o),n.reject(o)}function we(e,t){re.has(e)?ye(e,t):ie.has(e)&&xe(e,t)}function be(e){const n=re.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(()=>{re.has(e)&&ye(e,{code:t,message:`'${n.method}' timed out`})},n.timeoutMs)))}function ke(e){re.has(e)?be(e):ie.has(e)&&function(e){const n=ie.get(e);n&&(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(()=>{xe(e,{code:t,message:`Channel '${n.topic}' timed out`})},x))}(e)}function Ee(e){for(let t=ae.length-1;t>=0;t--)if(ae[t]?.reqId===e)return ae.splice(t,1),!0;return!1}function Ie(e,t){const n=e.kind,o="hello"===n||"helloAck"===n||"ready"===n;if(!ve()&&!o)return ae.length>=256?(S("Outbox full"),void(t&&we(t,{code:l,message:"Bridge outbox is full"}))):void ae.push({msg:e,reqId:t});t&&ke(t),J(e)}function Ce(){null!==Z&&(clearTimeout(Z),Z=null)}function _e(){if(V)return;if(!ge())return;Ce();const e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};K=!0,J(e),Z=setTimeout(()=>{if(!V)if(Q++,Q<3)L(`Handshake timeout (${Q}/3), retrying...`),K=!1,_e();else{for(S("Handshake failed"),Ce(),K=!1,Q=0;ae.length;){const e=ae.shift();e?.reqId&&we(e.reqId,{code:o,message:"Bridge handshake failed"})}for(const e of Array.from(ie.keys()))xe(e,{code:o,message:"Bridge handshake failed"})}},1e4)}function Te(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Le(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(Te)}(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 Se(e){de.forEach(t=>{try{if(!ue.has(t))return ue.set(t,!0),void t(N(ce),{rev:le,initial:!0});t(N(ce),{rev:le,initial:e})}catch(e){L("Subscriber error:",e)}})}function Me(e){if("function"!=typeof e)return()=>{};if(de.add(e),le>=0){ue.set(e,!0);try{e(N(ce),{rev:le,initial:!0})}catch(e){S("Callback error:",e)}}return()=>{de.delete(e),ue.delete(e)}}function Ne(e){He.call("state.getSnapshot",{scope:e}).catch(()=>{})}function Ae(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=Be.get(n);if(t)try{t(e)}catch(e){S("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(Y=t.sessionId);case"ready":if(Y&&t.sessionId!==Y)return void L("sessionId mismatch");if(Ce(),V=!0,Q=0,t.hostMethods)for(const[e,n]of Object.entries(t.hostMethods))ee[e]=n;return _("proto")&&T("Handshake complete, hostMethods:",Object.keys(ee).length),void function(){if(ve())for(;ae.length;){const e=ae.shift();e&&(e.reqId&&ke(e.reqId),J(e.msg))}}();case"res":{const e=re.get(t.id);if(!e)return;if(re.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||(ce=t.state,le=t.rev,_("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",le,"state:",N(ce)),console.groupEnd()),Se(!0),0))}(t.result)||L("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(re.has(t.id)){const e=re.get(t.id);return void("stream"===e?.mode&&e.stream?(be(t.id),e.stream._emitData(t.payload)):L(`Received event for non-stream request '${t.id}'`))}return;case"state.snapshot":return ce=t.state||{},le=t.rev,_("data")&&(console.group("[LX] snapshot"),console.log("rev:",le,"state:",N(ce)),console.groupEnd()),void Se(!0);case"state.patch":if(t.baseRev!==le)return L("baseRev mismatch",{have:le,want:t.baseRev}),void Ne(t.scope);try{!function(e,t){for(const n of t){const t="add"===n.op||"replace"===n.op,{container:o,key:r}=Le(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}}(ce,t.ops||[]),le=t.rev}catch(e){return S("Patch failed:",e),void Ne(t.scope)}return _("data")&&(console.group("[LX] patch"),console.log("rev:",le,"ops:",t.ops),console.groupEnd()),Se(!1),void(t.ack&&Ie({v:2,kind:"state.ack",scope:t.scope,rev:t.rev}));case"ch.ack":{const e=ie.get(t.id);if(!e)return;if(ie.delete(t.id),null!==e.timerId&&clearTimeout(e.timerId),t.ok)e.channel._markOpen(),se.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=se.get(t.id);if(!e)return;return void e._emitData(t.payload)}case"ch.close":{const e=ie.get(t.id);if(e)return ie.delete(t.id),void e.channel._emitClose(t.code,t.reason);const n=se.get(t.id);if(!n)return;return se.delete(t.id),void n._emitClose(t.code,t.reason)}case"req":{const e=t,n=pe(e.method);if(!e.cap||e.cap!==n)return void Ie({v:2,kind:"res",id:e.id,ok:!1,error:{code:s,message:`Invalid cap for ${e.method}`}});const o=me.get(e.method);return o?void Promise.resolve().then(()=>o(e.params)).then(t=>{Ie({v:2,kind:"res",id:e.id,ok:!0,result:t})}).catch(t=>{Ie({v:2,kind:"res",id:e.id,ok:!1,error:u(t)})}):void Ie({v:2,kind:"res",id:e.id,ok:!1,error:{code:i,message:`View handler not found: ${e.method}`}})}}else L("Invalid V2 message:",e)}const Be=new Map,Oe=[];let je=!1;function Pe(){return"undefined"!=typeof window&&!(!window.webkit?.messageHandlers?.NativeComponent&&!window.NativeComponentBridge?.postMessage)}function Re(e){try{if(window.webkit?.messageHandlers?.NativeComponent)return void window.webkit.messageHandlers.NativeComponent.postMessage(e);if(window.NativeComponentBridge?.postMessage)return void window.NativeComponentBridge.postMessage(M(e))}catch(e){S("NativeComponent send error:",e)}}function Fe(){if(Pe()&&0!==Oe.length)for(je=!0;Oe.length;){const e=Oe.shift();try{Re(e)}catch{break}}}function De(e){try{if(!Pe())return void Oe.push(e);je||Fe(),Re(e)}catch(e){S("NC send failed:",e)}}function Xe(e){return`${e}_${Date.now()}_${te++}`}function $e(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 He={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"});K||_e();const a=Xe("c"),l=o?.cap||pe(e),c=o?.timeoutMs??x;re.set(a,{method:e,mode:"call",resolve:i,reject:e=>s(e),timeoutMs:c,timerId:null}),Ie({v:2,kind:"req",id:a,method:e,params:he(t),cap:l},a),$e(0,o?.signal,()=>{const e=Ee(a);ye(a,{code:n,message:"Bridge request aborted"}),!e&&V&&Ie({v:2,kind:"cancel",id:a})})}),stream(e,t,o){if(!e||"string"!=typeof e){const e=oe("invalid",()=>{});return e._reject({code:r,message:"Method name must be a non-empty string"}),e}K||_e();const i=Xe("c"),s=oe(i,()=>{Ee(i)?ye(i,{code:n,message:"Bridge request aborted"}):V&&Ie({v:2,kind:"cancel",id:i})}),a=o?.cap||pe(e),l=o?.timeoutMs??x;return re.set(i,{method:e,mode:"stream",stream:s,timeoutMs:l,timerId:null}),Ie({v:2,kind:"req",id:i,method:e,params:he(t),cap:a},i),$e(0,o?.signal,()=>s.cancel()),s},notify(e,t,n){e&&"string"==typeof e&&(K||_e(),Ie({v:2,kind:"notify",method:e,params:he(t),cap:n?.cap||pe(e)}))},state:{subscribe:Me},channel:{open:(e,t,n)=>e&&"string"==typeof e?(K||_e(),new Promise((o,r)=>{const i=Xe("ch"),s=function(e,t,n){const o=ne();let r=!1,i=0,s=!1;const a=[],l=[],d={id:e,send(n){r?t(n,i++):d._reject({code:c,message:`Channel '${e}' is closed`})},on(e,t){return"data"===e&&o.data.add(t),"close"===e&&o.close.add(t),"error"===e&&o.error.add(t),this},[Symbol.asyncIterator]:()=>({next:()=>a.length>0?Promise.resolve({done:!1,value:a.shift()}):s?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>{l.push({resolve:e,reject:t})})}),close(e,t){r&&(r=!1,s=!0,n(e,t),d._emitClose(e,t))},_emitData(e){if(r){l.length>0?l.shift().resolve({done:!1,value:e}):a.push(e);for(const t of o.data)try{t(e)}catch(e){L("Channel listener failed:",e)}}},_emitClose(e,t){for(s=!0;l.length>0;)l.shift().resolve({done:!0,value:void 0});for(const n of o.close)try{n(e,t)}catch(e){L("Channel close listener failed:",e)}},_reject(e){for(s=!0;l.length>0;)l.shift().reject(e);for(const t of o.error)try{t(e)}catch(e){L("Channel error listener failed:",e)}},_markOpen(){r=!0,s=!1},_isOpen:()=>r,_nextSeq:()=>i++};return d}(i,(e,t)=>{Ie({v:2,kind:"ch.data",id:i,seq:t,payload:e})},(e,t)=>{const n=ie.get(i);n&&null!==n.timerId&&clearTimeout(n.timerId),ie.delete(i),se.delete(i),Ie({v:2,kind:"ch.close",id:i,code:e,reason:t})});ie.set(i,{topic:e,channel:s,resolve:o,reject:r,timerId:null}),Ie({v:2,kind:"ch.open",id:i,topic:e,params:he(t),cap:n?.cap||pe(e)},i)})):Promise.reject({code:r,message:"Topic name must be a non-empty string"})}},qe={invoke:(e,t,n)=>He.call(ze(e),t,Ge(n)).then(e=>e).catch(e=>Promise.reject(m(e))),notify(e,t,n){He.notify(ze(e),t,Ge(n))},stream:(e,t,n)=>Ue(He.stream(ze(e),t,Ge(n))),channel:(e,t,n)=>He.channel.open(ze(e),t,Ge(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:He,state:{subscribe:Me},_connectWebMessagePort(e){if(A===b){if(B&&B!==e)try{B.onmessage=null,B.close()}catch{}B=e,e.onmessage=e=>{let t=e.data;if("string"==typeof t)try{t=JSON.parse(t)}catch{return}Ae(t)};try{e.start()}catch{}T("Port connected"),_e()}},_receiveEvaluateMessage(e){try{e&&Ae(JSON.parse(e))}catch(e){S("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}(I),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:g,isAndroid:function(){return"Android"===p.os},isMacOS:v,isDesktop:function(){return v()},getOS:h},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:De,hasHandler:Pe,flush:Fe,register:(e,t)=>e&&"function"==typeof t?(Be.set(e,t),()=>Be.delete(e)):()=>{},unregister(e){Be.delete(e)}},isReady:()=>V};function ze(e){return e.startsWith("host.")?e:`host.${e}`}function Ge(e){return{...e||{},cap:e?.cap||"host"}}function Ue(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 We(){if(window.__LX_BRIDGE_INIT_STATE)T(`Bridge already ${window.__LX_BRIDGE_INIT_STATE}, skipping duplicate init`);else{window.__LX_BRIDGE_INIT_STATE="initializing";try{T(`Method: ${A}`),function(e){if("undefined"==typeof window)return;if(window[y]=e,0===C.length)return;const t=C.splice(0,C.length);for(const n of t)try{e(n)}catch(e){L("Failed to replay queued native message:",e)}}(qe._receiveEvaluateMessage),q()?W():A===b?($(),function(){if(B)return Promise.resolve(B);if(D.promise)return D.promise;$(),D.promise=new Promise((e,t)=>{D.resolve=t=>{H(),e(t)},D.reject=e=>{H(),t(e)},D.timer=window.setTimeout(()=>{D.reject?.(new Error("MessagePort init timed out after 5000ms"))},5e3)});try{window.LingXiaProxy?.getPort("LingXiaPort")}catch(e){D.reject?.(e)}return D.promise}().catch(e=>L("Port init failed:",e))):"webkit"===A||A===k?_e():L("Unknown method"),window.LingXiaBridge=qe,f({os:h(),send:De}),window.__LX_BRIDGE_INIT_STATE="initialized",T("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function Je(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function Ye(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">${Je(t)}</div>`),n&&(i+=`<p class="lx-error-desc" style="margin-top:12px">${Je(n)}</p>`),r.innerHTML=i,document.body.appendChild(r)}function Ve(){const e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function Ke(){return window.__LX_RUNTIME_CONFIG?.error||null}const Qe={handleEvent:()=>Ze()};function Ze(){if(Ve()){const e=Ke();e&&Ye(e)}}function et(){We(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",Qe):Ze()}const tt="lx-action-sheet-style";let nt=null;function ot(e){const t=e,n=t?.itemList??[],o=t?.cancelText??"Cancel",r=t?.itemColor??"#007AFF",i=(nt??Promise.resolve()).then(()=>rt(n,o,r),()=>rt(n,o,r));return nt=i,i}function rt(e,t,n){return new Promise(o=>{let r=!1;const i="macOS"===h();!function(){if(document.getElementById(tt))return;const e=document.createElement("style");e.id=tt,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 it=200,st="lx-modal-style";let at=null;function lt(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=(at??Promise.resolve()).then(()=>ct(n,o,r,i,s,a,l),()=>ct(n,o,r,i,s,a,l));return at=c,c}function ct(e,t,n,o,r,i,s){return new Promise(a=>{let l=!1;!function(){if(document.getElementById(st))return;const e=document.createElement("style");e.id=st,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})},it))}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 dt="lx-toast-style";let ut=null;function mt(e){const t=e,n=t?.title??"",o=t?.icon??"none",r=t?.duration??1500,i=t?.mask??!1,s=t?.position??"center";ut&&(ut.dismiss(),ut=null),function(){if(document.getElementById(dt))return;const e=document.createElement("style");e.id=dt,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,ut?.dismiss===f&&(ut=null),c.classList.remove("lx-toast-visible"),p&&clearTimeout(p),setTimeout(()=>{l.remove(),a?.remove()},200))}let p=null;return r>0&&(p=setTimeout(f,r)),ut={dismiss:f,timer:p},Promise.resolve()}function ft(){return ut&&(ut.dismiss(),ut=null),Promise.resolve()}return fe("ui.showActionSheet",ot),fe("ui.showModal",lt),fe("ui.showToast",mt),fe("ui.hideToast",ft),et(),e.LingXiaBridge=qe,e.boot=function(){We(),Ze()},e.bootWhenReady=et,e.channel=function(e,t,n){return qe.channel(e,t,n)},e.getErrorInfo=Ke,e.hasError=Ve,e.initBridge=We,e.invoke=function(e,t,n){return qe.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){He.notify(ze(e),t,Ge(n))},e.renderErrorUI=Ye,e.stream=function(e,t,n){return Ue(He.stream(ze(e),t,Ge(n)))},e}({});
1
+ const __LX_RUNTIME_PLATFORM__="all";var __LingXiaBridgeBundle=function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});const t="BRIDGE_TIMEOUT",n="BRIDGE_CANCELED",o="BRIDGE_HANDSHAKE_FAILED",r="BRIDGE_MALFORMED_MESSAGE",i="BRIDGE_METHOD_NOT_FOUND",s="BRIDGE_CAPABILITY_DENIED",a="BRIDGE_INTERNAL_ERROR",l="BRIDGE_OUTBOX_FULL",c="BRIDGE_STREAM_CLOSED";var d=class extends Error{constructor(e,t,n){super(t),this.name="BridgeInvocationError",this.code=e,this.data=n}};function u(e){if(e instanceof d)return e;if(e&&"object"==typeof e){const t=e;let n=a;("string"==typeof t.code&&""!==t.code.trim()||"number"==typeof t.code&&Number.isFinite(t.code))&&(n=t.code);const o="string"==typeof t.message&&""!==t.message.trim()?t.message:"Unknown error";return new d(n,o,"data"in t?t.data:void 0)}const t=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new d(a,t)}function m(e){const t=u(e);return{code:String(t.code||a),message:"string"==typeof t.message&&""!==t.message.trim()?t.message:"Unknown error",...void 0===t.data?{}:{data:t.data}}}function f({os:e,send:t}){if("undefined"==typeof window)return;if("undefined"==typeof document)return;const n="iOS"===e;if(!n&&"Android"!==e)return;const o=Symbol.for("LingXia.NativeComponentCoverageMonitor");if(window[o]?.installed)return;const r={installed:!0,coveredById:new Map,coveredCount:0,anyCovered:!1,scheduled:!1,hasAnyVideo:!1,scrollLocked:!1,scrollY:0,htmlOverflow:"",bodyOverflow:"",bodyPosition:"",bodyTop:"",bodyWidth:""};function i(e){const t=e.getBoundingClientRect?.();if(!t)return!1;if(t.width<2||t.height<2)return!1;const n=t.left+t.width/2,o=t.top+t.height/2;if(n<0||o<0||n>=window.innerWidth||o>=window.innerHeight)return!1;const r=document.elementFromPoint?.(n,o);return!!r&&(r!==document.documentElement&&r!==document.body&&!(r===e||e.contains(r)))}function s(){r.scheduled=!1;const e=document.querySelectorAll("lx-video[id]");if(r.hasAnyVideo=e.length>0,!r.hasAnyVideo&&0===r.coveredById.size&&!r.anyCovered)return;const o=new Set;for(const n of Array.from(e)){const e=n.id;if(!e)continue;o.add(e);const s=i(n),a=r.coveredById.get(e);a!==s&&(!0===a&&(r.coveredCount-=1),!0===s&&(r.coveredCount+=1),r.coveredById.set(e,s),t({id:e,action:"component.coverage",covered:s}))}const s=[];for(const[e,t]of r.coveredById.entries())o.has(e)||(s.push(e),!0===t&&(r.coveredCount-=1));for(const e of s)r.coveredById.delete(e),t({id:e,action:"component.coverage",covered:!1});const a=r.coveredCount>0;a!==r.anyCovered&&(r.anyCovered=a,n&&(a?function(){if(!n)return;if(r.scrollLocked)return;const e=document.documentElement,t=document.body;e&&t&&(r.scrollLocked=!0,r.scrollY=window.scrollY||e.scrollTop||0,r.htmlOverflow=e.style.overflow||"",r.bodyOverflow=t.style.overflow||"",r.bodyPosition=t.style.position||"",r.bodyTop=t.style.top||"",r.bodyWidth=t.style.width||"",e.style.overflow="hidden",t.style.overflow="hidden",t.style.position="fixed",t.style.top=-r.scrollY+"px",t.style.width="100%")}():function(){if(!n)return;if(!r.scrollLocked)return;const e=document.documentElement,t=document.body;e&&t&&(r.scrollLocked=!1,e.style.overflow=r.htmlOverflow,t.style.overflow=r.bodyOverflow,t.style.position=r.bodyPosition,t.style.top=r.bodyTop,t.style.width=r.bodyWidth,window.scrollTo(0,r.scrollY))}()))}function a(){r.scheduled||(r.scheduled=!0,requestAnimationFrame(s))}window[o]=r,new MutationObserver(a).observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0});const l={handleEvent:()=>{(r.hasAnyVideo||0!==r.coveredById.size)&&a()}},c={handleEvent:()=>a()};window.addEventListener("scroll",l,{capture:!0,passive:!0}),window.addEventListener("resize",c),a()}const p="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{};function h(){return p.os||"unknown"}function g(){return"iOS"===p.os}function v(){return"macOS"===p.os}function y(){return"Windows"===p.os}const x="__LingXiaRecvMessage",w=5e3,b="[LX.Bridge]",k="messageport",E="jsinterface",I="webmessage",C=p.appleDownstreamURL,_={data:!1,proto:!1,all:!1},T=[];function L(e){return _.all||_[e]}function S(...e){console.log(b,...e)}function M(...e){console.warn(b,...e)}function N(...e){console.error(b,...e)}function A(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 B(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch{return{}}}const O="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[x]&&(window[x]=e=>{T.push(e)});let j=null,P=!1,R=null,F=null,D=null,X=200;const $={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},H={handleEvent:e=>{const t=e;if("LingXia-port-init"!==t.data)return;const n=t.ports?.[0];n&&(Ge._connectWebMessagePort(n),$.resolve?.(n))}};function q(){$.listenerInstalled||($.listenerInstalled=!0,window.addEventListener("message",H))}function z(){null!==$.timer&&(window.clearTimeout($.timer),$.timer=null),$.resolve=null,$.reject=null,$.promise=null}function G(){return"webkit"===O&&(g()||v())}function U(){null!==D&&(clearTimeout(D),D=null)}function W(e){for(const t of Array.from(se.keys()))we(t,{code:c,message:e});for(const t of Array.from(ae.keys()))be(t,{code:c,message:e});!function(e){for(const[t,n]of Array.from(le.entries()))le.delete(t),n._emitClose(c,e)}(e)}function J(e){let t=e;for(;;){const e=t.indexOf("\n");if(e<0)break;const n=t.slice(0,e).trim();if(t=t.slice(e+1),n)try{Oe(JSON.parse(n))}catch(e){M("Apple downstream parse error:",e,n)}}return t}function Y(){G()&&(R||(U(),R=async function(){if(!C)throw new Error("Apple downstream URL is not configured");const e=new AbortController;F=e;const t=await fetch(C,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal});if(!t.ok)throw new Error(`Apple downstream HTTP ${t.status}`);if(!t.body)throw new Error("Apple downstream response body unavailable");P=!0,X=200,L("proto")&&S("Apple downstream connected"),Le();const n=t.body.getReader(),o=new TextDecoder;let r="";try{for(;;){const{value:e,done:t}=await n.read();if(t)break;r+=o.decode(e,{stream:!0}),r=J(r)}r+=o.decode();const e=r.trim();if(e)try{Oe(JSON.parse(e))}catch(t){M("Apple downstream trailing parse error:",t,e)}}catch(t){if(e.signal.aborted)return;throw t}finally{try{n.releaseLock()}catch{}}}().catch(e=>{F?.signal.aborted||M("Apple downstream failed:",e)}).finally(()=>{const e=F?.signal.aborted??!1;R=null,F=null;const t=P;var n,o;P=!1,n="Apple downstream closed",o=t,Te(),K=null,Q=!1,Z=!1,ee=0,o&&W(n),e||function(e){if(!G())return;U();const t=X;X=Math.min(2*X,2e3);const n=`Apple downstream disconnected, retrying in ${t}ms: ${e}`;t<=200?S(n):M(n),D=setTimeout(()=>{D=null,Y()},t)}("stream closed")})))}function V(e){const t=e.kind;"req"!==t&&"notify"!==t||S(`postToNative: ${t} ${e.method}`),L("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===O)return void window.webkit?.messageHandlers.LingXia?.postMessage(e);const t=A(e);if(O===k&&j)return void j.postMessage(t);if((O===E||O===I)&&window.LingXiaProxy?.postMessage)return void window.LingXiaProxy.postMessage(t);M("Transport not ready")}catch(e){N("Send error:",e)}}let K=null,Q=!1,Z=!1,ee=0,te=null;const ne={};let oe=0;function re(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function ie(e,t){const n=re();let o=!1,r=()=>{},i=()=>{};const s=[],a=[],l=new Promise((e,t)=>{r=e,i=t});return{id:e,result:l,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]:()=>({next:()=>s.length>0?Promise.resolve({done:!1,value:s.shift()}):o?l.then(e=>({done:!0,value:e}),e=>Promise.reject(e)):new Promise((e,t)=>{a.push({resolve:e,reject:t})})}),cancel(){o||t()},_emitData(e){if(!o){a.length>0?a.shift().resolve({done:!1,value:e}):s.push(e);for(const t of n.data)try{t(e)}catch(e){M("Stream data listener failed:",e)}}},_resolve(e){if(!o){for(o=!0,r(e);a.length>0;)a.shift().resolve({done:!0,value:e});for(const t of n.end)try{t(e)}catch(e){M("Stream end listener failed:",e)}}},_reject(e){if(!o){for(o=!0,i(e);a.length>0;)a.shift().reject(e);for(const t of n.error)try{t(e)}catch(e){M("Stream error listener failed:",e)}}}}}const se=new Map,ae=new Map,le=new Map,ce=[];let de=-1,ue={};const me=new Set,fe=new WeakMap,pe=new Map;function he(e,t){pe.set(e,t)}function ge(e){if(e.startsWith("host."))return"host";const t=e.indexOf(".");return t>0?e.slice(0,t):"page"}function ve(e){if(null!=e)return e}function ye(){return O===k?!!j:G()?P:"webkit"===O||O===E||O===I}function xe(){return ye()&&Q}function we(e,t){const n=se.get(e);if(n){se.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);if("stream"===n.mode&&n.stream)return void n.stream._reject(o);n.reject?.(o)}}function be(e,t){const n=ae.get(e);if(!n)return;ae.delete(e),null!==n.timerId&&clearTimeout(n.timerId);const o=u(t);n.channel._reject(o),n.reject(o)}function ke(e,t){se.has(e)?we(e,t):ae.has(e)&&be(e,t)}function Ee(e){const n=se.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(()=>{se.has(e)&&we(e,{code:t,message:`'${n.method}' timed out`})},n.timeoutMs)))}function Ie(e){se.has(e)?Ee(e):ae.has(e)&&function(e){const n=ae.get(e);n&&(null!==n.timerId&&clearTimeout(n.timerId),n.timerId=setTimeout(()=>{be(e,{code:t,message:`Channel '${n.topic}' timed out`})},w))}(e)}function Ce(e){for(let t=ce.length-1;t>=0;t--)if(ce[t]?.reqId===e)return ce.splice(t,1),!0;return!1}function _e(e,t){const n=e.kind,o="hello"===n||"helloAck"===n||"ready"===n;if(!xe()&&!o)return ce.length>=256?(N("Outbox full"),void(t&&ke(t,{code:l,message:"Bridge outbox is full"}))):void ce.push({msg:e,reqId:t});t&&Ie(t),V(e)}function Te(){null!==te&&(clearTimeout(te),te=null)}function Le(){if(Q)return;if(!ye())return;Te();const e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};Z=!0,V(e),te=setTimeout(()=>{if(!Q)if(ee++,ee<3)M(`Handshake timeout (${ee}/3), retrying...`),Z=!1,Le();else{for(N("Handshake failed"),Te(),Z=!1,ee=0;ce.length;){const e=ce.shift();e?.reqId&&ke(e.reqId,{code:o,message:"Bridge handshake failed"})}for(const e of Array.from(ae.keys()))be(e,{code:o,message:"Bridge handshake failed"})}},1e4)}function Se(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Me(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(Se)}(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 Ne(e){me.forEach(t=>{try{if(!fe.has(t))return fe.set(t,!0),void t(B(ue),{rev:de,initial:!0});t(B(ue),{rev:de,initial:e})}catch(e){M("Subscriber error:",e)}})}function Ae(e){if("function"!=typeof e)return()=>{};if(me.add(e),de>=0){fe.set(e,!0);try{e(B(ue),{rev:de,initial:!0})}catch(e){N("Callback error:",e)}}return()=>{me.delete(e),fe.delete(e)}}function Be(e){ze.call("state.getSnapshot",{scope:e}).catch(()=>{})}function Oe(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){N("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(K=t.sessionId);case"ready":if(K&&t.sessionId!==K)return void M("sessionId mismatch");if(Te(),Q=!0,ee=0,t.hostMethods)for(const[e,n]of Object.entries(t.hostMethods))ne[e]=n;return L("proto")&&S("Handshake complete, hostMethods:",Object.keys(ne).length),void function(){if(xe())for(;ce.length;){const e=ce.shift();e&&(e.reqId&&Ie(e.reqId),V(e.msg))}}();case"res":{const e=se.get(t.id);if(!e)return;if(se.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||(ue=t.state,de=t.rev,L("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",de,"state:",B(ue)),console.groupEnd()),Ne(!0),0))}(t.result)||M("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(se.has(t.id)){const e=se.get(t.id);return void("stream"===e?.mode&&e.stream?(Ee(t.id),e.stream._emitData(t.payload)):M(`Received event for non-stream request '${t.id}'`))}return;case"state.snapshot":return ue=t.state||{},de=t.rev,L("data")&&(console.group("[LX] snapshot"),console.log("rev:",de,"state:",B(ue)),console.groupEnd()),void Ne(!0);case"state.patch":if(t.baseRev!==de)return M("baseRev mismatch",{have:de,want:t.baseRev}),void Be(t.scope);try{!function(e,t){for(const n of t){const t="add"===n.op||"replace"===n.op,{container:o,key:r}=Me(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}}(ue,t.ops||[]),de=t.rev}catch(e){return N("Patch failed:",e),void Be(t.scope)}return L("data")&&(console.group("[LX] patch"),console.log("rev:",de,"ops:",t.ops),console.groupEnd()),Ne(!1),void(t.ack&&_e({v:2,kind:"state.ack",scope:t.scope,rev:t.rev}));case"ch.ack":{const e=ae.get(t.id);if(!e)return;if(ae.delete(t.id),null!==e.timerId&&clearTimeout(e.timerId),t.ok)e.channel._markOpen(),le.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=le.get(t.id);if(!e)return;return void e._emitData(t.payload)}case"ch.close":{const e=ae.get(t.id);if(e)return ae.delete(t.id),void e.channel._emitClose(t.code,t.reason);const n=le.get(t.id);if(!n)return;return le.delete(t.id),void n._emitClose(t.code,t.reason)}case"req":{const e=t,n=ge(e.method);if(!e.cap||e.cap!==n)return void _e({v:2,kind:"res",id:e.id,ok:!1,error:{code:s,message:`Invalid cap for ${e.method}`}});const o=pe.get(e.method);return o?void Promise.resolve().then(()=>o(e.params)).then(t=>{_e({v:2,kind:"res",id:e.id,ok:!0,result:t})}).catch(t=>{_e({v:2,kind:"res",id:e.id,ok:!1,error:u(t)})}):void _e({v:2,kind:"res",id:e.id,ok:!1,error:{code:i,message:`View handler not found: ${e.method}`}})}}else M("Invalid V2 message:",e)}const je=new Map,Pe=[];let Re=!1;function Fe(){return"undefined"!=typeof window&&!(!window.webkit?.messageHandlers?.NativeComponent&&!window.NativeComponentBridge?.postMessage)}function De(e){try{if(window.webkit?.messageHandlers?.NativeComponent)return void window.webkit.messageHandlers.NativeComponent.postMessage(e);if(window.NativeComponentBridge?.postMessage)return void window.NativeComponentBridge.postMessage(A(e))}catch(e){N("NativeComponent send error:",e)}}function Xe(){if(Fe()&&0!==Pe.length)for(Re=!0;Pe.length;){const e=Pe.shift();try{De(e)}catch{break}}}function $e(e){try{if(!Fe())return void Pe.push(e);Re||Xe(),De(e)}catch(e){N("NC send failed:",e)}}function He(e){return`${e}_${Date.now()}_${oe++}`}function qe(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 ze={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"});Z||Le();const a=He("c"),l=o?.cap||ge(e),c=o?.timeoutMs??w;se.set(a,{method:e,mode:"call",resolve:i,reject:e=>s(e),timeoutMs:c,timerId:null}),_e({v:2,kind:"req",id:a,method:e,params:ve(t),cap:l},a),qe(0,o?.signal,()=>{const e=Ce(a);we(a,{code:n,message:"Bridge request aborted"}),!e&&Q&&_e({v:2,kind:"cancel",id:a})})}),stream(e,t,o){if(!e||"string"!=typeof e){const e=ie("invalid",()=>{});return e._reject({code:r,message:"Method name must be a non-empty string"}),e}Z||Le();const i=He("c"),s=ie(i,()=>{Ce(i)?we(i,{code:n,message:"Bridge request aborted"}):Q&&_e({v:2,kind:"cancel",id:i})}),a=o?.cap||ge(e),l=o?.timeoutMs??w;return se.set(i,{method:e,mode:"stream",stream:s,timeoutMs:l,timerId:null}),_e({v:2,kind:"req",id:i,method:e,params:ve(t),cap:a},i),qe(0,o?.signal,()=>s.cancel()),s},notify(e,t,n){e&&"string"==typeof e&&(Z||Le(),_e({v:2,kind:"notify",method:e,params:ve(t),cap:n?.cap||ge(e)}))},state:{subscribe:Ae},channel:{open:(e,t,n)=>e&&"string"==typeof e?(Z||Le(),new Promise((o,r)=>{const i=He("ch"),s=function(e,t,n){const o=re();let r=!1,i=0,s=!1;const a=[],l=[],d={id:e,send(n){r?t(n,i++):d._reject({code:c,message:`Channel '${e}' is closed`})},on(e,t){if("data"===e&&(o.data.add(t),a.length>0)){const e=a.splice(0);for(const n of e)try{t(n)}catch(e){M("Channel listener failed:",e)}}return"close"===e&&o.close.add(t),"error"===e&&o.error.add(t),this},[Symbol.asyncIterator]:()=>({next:()=>a.length>0?Promise.resolve({done:!1,value:a.shift()}):s?Promise.resolve({done:!0,value:void 0}):new Promise((e,t)=>{l.push({resolve:e,reject:t})})}),close(e,t){r&&(r=!1,s=!0,n(e,t),d._emitClose(e,t))},_emitData(e){if(r){l.length>0?l.shift().resolve({done:!1,value:e}):a.push(e);for(const t of o.data)try{t(e)}catch(e){M("Channel listener failed:",e)}}},_emitClose(e,t){for(s=!0;l.length>0;)l.shift().resolve({done:!0,value:void 0});for(const n of o.close)try{n(e,t)}catch(e){M("Channel close listener failed:",e)}},_reject(e){for(s=!0;l.length>0;)l.shift().reject(e);for(const t of o.error)try{t(e)}catch(e){M("Channel error listener failed:",e)}},_markOpen(){r=!0,s=!1},_isOpen:()=>r,_nextSeq:()=>i++};return d}(i,(e,t)=>{_e({v:2,kind:"ch.data",id:i,seq:t,payload:e})},(e,t)=>{const n=ae.get(i);n&&null!==n.timerId&&clearTimeout(n.timerId),ae.delete(i),le.delete(i),_e({v:2,kind:"ch.close",id:i,code:e,reason:t})});ae.set(i,{topic:e,channel:s,resolve:o,reject:r,timerId:null}),_e({v:2,kind:"ch.open",id:i,topic:e,params:ve(t),cap:n?.cap||ge(e)},i)})):Promise.reject({code:r,message:"Topic name must be a non-empty string"})}},Ge={invoke:(e,t,n)=>ze.call(Ue(e),t,We(n)).then(e=>e).catch(e=>Promise.reject(m(e))),notify(e,t,n){ze.notify(Ue(e),t,We(n))},stream:(e,t,n)=>Je(ze.stream(Ue(e),t,We(n))),channel:(e,t,n)=>ze.channel.open(Ue(e),t,We(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:ze,state:{subscribe:Ae},_connectWebMessagePort(e){if(O===k){if(j&&j!==e)try{j.onmessage=null,j.close()}catch{}j=e,e.onmessage=e=>{let t=e.data;if("string"==typeof t)try{t=JSON.parse(t)}catch{return}Oe(t)};try{e.start()}catch{}S("Port connected"),Le()}},_receiveEvaluateMessage(e){try{e&&Oe(JSON.parse(e))}catch(e){N("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}(_),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:g,isAndroid:function(){return"Android"===p.os},isMacOS:v,isWindows:y,isDesktop:function(){return v()||y()},getOS:h},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:$e,hasHandler:Fe,flush:Xe,register:(e,t)=>e&&"function"==typeof t?(je.set(e,t),()=>je.delete(e)):()=>{},unregister(e){je.delete(e)}},isReady:()=>Q};function Ue(e){return e.startsWith("host.")?e:`host.${e}`}function We(e){return{...e||{},cap:e?.cap||"host"}}function Je(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 Ye(){if(window.__LX_BRIDGE_INIT_STATE)S(`Bridge already ${window.__LX_BRIDGE_INIT_STATE}, skipping duplicate init`);else{window.__LX_BRIDGE_INIT_STATE="initializing";try{S(`Method: ${O}`),function(e){if("undefined"==typeof window)return;if(window[x]=e,0===T.length)return;const t=T.splice(0,T.length);for(const n of t)try{e(n)}catch(e){M("Failed to replay queued native message:",e)}}(Ge._receiveEvaluateMessage),G()?Y():O===k?(q(),function(){if(j)return Promise.resolve(j);if($.promise)return $.promise;q(),$.promise=new Promise((e,t)=>{$.resolve=t=>{z(),e(t)},$.reject=e=>{z(),t(e)},$.timer=window.setTimeout(()=>{$.reject?.(new Error("MessagePort init timed out after 5000ms"))},5e3)});try{window.LingXiaProxy?.getPort("LingXiaPort")}catch(e){$.reject?.(e)}return $.promise}().catch(e=>M("Port init failed:",e))):"webkit"===O||O===E||O===I?Le():M("Unknown method"),window.LingXiaBridge=Ge,f({os:h(),send:$e}),window.__LX_BRIDGE_INIT_STATE="initialized",S("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function Ve(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function Ke(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">${Ve(t)}</div>`),n&&(i+=`<p class="lx-error-desc" style="margin-top:12px">${Ve(n)}</p>`),r.innerHTML=i,document.body.appendChild(r)}function Qe(){const e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function Ze(){return window.__LX_RUNTIME_CONFIG?.error||null}const et={handleEvent:()=>tt()};function tt(){if(Qe()){const e=Ze();e&&Ke(e)}}function nt(){Ye(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",et):tt()}const ot="lx-action-sheet-style";let rt=null;function it(e){const t=e,n=t?.itemList??[],o=t?.cancelText??"Cancel",r=t?.itemColor??"#007AFF",i=(rt??Promise.resolve()).then(()=>st(n,o,r),()=>st(n,o,r));return rt=i,i}function st(e,t,n){return new Promise(o=>{let r=!1;const i="macOS"===h();!function(){if(document.getElementById(ot))return;const e=document.createElement("style");e.id=ot,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 at=200,lt="lx-modal-style";let ct=null;function dt(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=(ct??Promise.resolve()).then(()=>ut(n,o,r,i,s,a,l),()=>ut(n,o,r,i,s,a,l));return ct=c,c}function ut(e,t,n,o,r,i,s){return new Promise(a=>{let l=!1;!function(){if(document.getElementById(lt))return;const e=document.createElement("style");e.id=lt,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})},at))}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 mt="lx-toast-style";let ft=null;function pt(e){const t=e,n=t?.title??"",o=t?.icon??"none",r=t?.duration??1500,i=t?.mask??!1,s=t?.position??"center";ft&&(ft.dismiss(),ft=null),function(){if(document.getElementById(mt))return;const e=document.createElement("style");e.id=mt,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,ft?.dismiss===f&&(ft=null),c.classList.remove("lx-toast-visible"),p&&clearTimeout(p),setTimeout(()=>{l.remove(),a?.remove()},200))}let p=null;return r>0&&(p=setTimeout(f,r)),ft={dismiss:f,timer:p},Promise.resolve()}function ht(){return ft&&(ft.dismiss(),ft=null),Promise.resolve()}return he("ui.showActionSheet",it),he("ui.showModal",dt),he("ui.showToast",pt),he("ui.hideToast",ht),nt(),e.LingXiaBridge=Ge,e.boot=function(){Ye(),tt()},e.bootWhenReady=nt,e.channel=function(e,t,n){return Ge.channel(e,t,n)},e.getErrorInfo=Ze,e.hasError=Qe,e.initBridge=Ye,e.invoke=function(e,t,n){return Ge.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){ze.notify(Ue(e),t,We(n))},e.renderErrorUI=Ke,e.stream=function(e,t,n){return Je(ze.stream(Ue(e),t,We(n)))},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){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});var n="BRIDGE_TIMEOUT",t="BRIDGE_CANCELED",r="BRIDGE_HANDSHAKE_FAILED",o="BRIDGE_MALFORMED_MESSAGE",i="BRIDGE_METHOD_NOT_FOUND",a="BRIDGE_CAPABILITY_DENIED",c="BRIDGE_INTERNAL_ERROR",l="BRIDGE_OUTBOX_FULL",s="BRIDGE_STREAM_CLOSED",d=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 u(e){if(e instanceof d)return e;if(e&&"object"==typeof e){var n=e,t=c;("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 d(t,r,"data"in n?n.data:void 0)}var o=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new d(c,o)}function f(e){var n=u(e);return __assign({code:String(n.code||c),message:"string"==typeof n.message&&""!==n.message.trim()?n.message:"Unknown error"},void 0===n.data?{}:{data:n.data})}function v(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 p="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{};function m(){return p.os||"unknown"}function h(){return"iOS"===p.os}function g(){return"macOS"===p.os}var y="__LingXiaRecvMessage",w=5e3,_="[LX.Bridge]",b="messageport",I="jsinterface",k=p.appleDownstreamURL,E={data:!1,proto:!1,all:!1},x=[];function S(e){return E.all||E[e]}function T(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.log.apply(console,__spreadArray([_],e,!1))}function O(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.warn.apply(console,__spreadArray([_],e,!1))}function M(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.error.apply(console,__spreadArray([_],e,!1))}function j(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 A(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch(e){return{}}}var L,C,N="iOS"===p.os||"macOS"===p.os?"webkit":"Harmony"===p.os?"messageport":"Android"===p.os?(null===(C=null===(L=window.LingXiaProxy)||void 0===L?void 0:L.supportsMessagePort)||void 0===C?void 0:C.call(L))?"messageport":"jsinterface":"unknown";"undefined"!=typeof window&&"function"!=typeof window[y]&&(window[y]=function(e){x.push(e)});var P=null,B=!1,R=null,D=null,X=null,G=200,F={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},H={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&&(ze._connectWebMessagePort(o),null===(t=F.resolve)||void 0===t||t.call(F,o))}}};function q(){F.listenerInstalled||(F.listenerInstalled=!0,window.addEventListener("message",H))}function U(){null!==F.timer&&(window.clearTimeout(F.timer),F.timer=null),F.resolve=null,F.reject=null,F.promise=null}function W(){return"webkit"===N&&(h()||g())}function z(){null!==X&&(clearTimeout(X),X=null)}function J(e){for(var n=0,t=Array.from(ae.keys());n<t.length;n++){we(t[n],{code:s,message:e})}for(var r=0,o=Array.from(ce.keys());r<o.length;r++){_e(o[r],{code:s,message:e})}!function(e){for(var n=0,t=Array.from(le.entries());n<t.length;n++){var r=t[n],o=r[0],i=r[1];le.delete(o),i._emitClose(s,e)}}(e)}function Y(){return __awaiter(this,void 0,void 0,function(){var e,n,t,r,o,i,a,c,l;return __generator(this,function(s){switch(s.label){case 0:if(!k)throw new Error("Apple downstream URL is not configured");return e=new AbortController,D=e,[4,fetch(k,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal})];case 1:if(!(n=s.sent()).ok)throw new Error("Apple downstream HTTP ".concat(n.status));if(!n.body)throw new Error("Apple downstream response body unavailable");B=!0,G=200,S("proto")&&T("Apple downstream connected"),Te(),t=n.body.getReader(),r=new TextDecoder,o="",s.label=2;case 2:s.trys.push([2,6,7,8]),s.label=3;case 3:return[4,t.read()];case 4:return i=s.sent(),a=i.value,i.done?[3,5]:(o=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{Ce(JSON.parse(r))}catch(e){O("Apple downstream parse error:",e,r)}}return n}(o+=r.decode(a,{stream:!0})),[3,3]);case 5:if(o+=r.decode(),c=o.trim())try{Ce(JSON.parse(c))}catch(e){O("Apple downstream trailing parse error:",e,c)}return[3,8];case 6:if(l=s.sent(),e.signal.aborted)return[2];throw l;case 7:try{t.releaseLock()}catch(e){}return[7];case 8:return[2]}})})}function V(){W()&&(R||(z(),R=Y().catch(function(e){(null==D?void 0:D.signal.aborted)||O("Apple downstream failed:",e)}).finally(function(){var e,n=null!==(e=null==D?void 0:D.signal.aborted)&&void 0!==e&&e;R=null,D=null;var t,r,o=B;B=!1,t="Apple downstream closed",r=o,Se(),K=null,Q=!1,Z=!1,ee=0,r&&J(t),n||function(e){if(W()){z();var n=G;G=Math.min(2*G,2e3);var t="Apple downstream disconnected, retrying in ".concat(n,"ms: ").concat(e);n<=200?T(t):O(t),X=setTimeout(function(){X=null,V()},n)}}("stream closed")})))}function $(e){var n,t,r,o=e.kind;"req"!==o&&"notify"!==o||T("postToNative: ".concat(o," ").concat(e.method)),S("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===N)return void(null===(t=null===(n=window.webkit)||void 0===n?void 0:n.messageHandlers.LingXia)||void 0===t||t.postMessage(e));var i=j(e);if(N===b&&P)return void P.postMessage(i);if(N===I&&(null===(r=window.LingXiaProxy)||void 0===r?void 0:r.postMessage))return void window.LingXiaProxy.postMessage(i);O("Transport not ready")}catch(e){M("Send error:",e)}}var K=null,Q=!1,Z=!1,ee=0,ne=null,te={},re=0;function oe(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function ie(e,n){var t,r=oe(),o=!1,i=function(){},a=function(){},c=[],l=[],s=new Promise(function(e,n){i=e,a=n});return(t={id:e,result:s,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{next:function(){return c.length>0?Promise.resolve({done:!1,value:c.shift()}):o?s.then(function(e){return{done:!0,value:e}},function(e){return Promise.reject(e)}):new Promise(function(e,n){l.push({resolve:e,reject:n})})}}},t.cancel=function(){o||n()},t._emitData=function(e){if(!o){l.length>0?l.shift().resolve({done:!1,value:e}):c.push(e);for(var n=0,t=r.data;n<t.length;n++){var i=t[n];try{i(e)}catch(e){O("Stream data listener failed:",e)}}}},t._resolve=function(e){if(!o){for(o=!0,i(e);l.length>0;)l.shift().resolve({done:!0,value:e});for(var n=0,t=r.end;n<t.length;n++){var a=t[n];try{a(e)}catch(e){O("Stream end listener failed:",e)}}}},t._reject=function(e){if(!o){for(o=!0,a(e);l.length>0;)l.shift().reject(e);for(var n=0,t=r.error;n<t.length;n++){var i=t[n];try{i(e)}catch(e){O("Stream error listener failed:",e)}}}},t}var ae=new Map,ce=new Map,le=new Map,se=[],de=-1,ue={},fe=new Set,ve=new WeakMap,pe=new Map;function me(e){if(e.startsWith("host."))return"host";var n=e.indexOf(".");return n>0?e.slice(0,n):"page"}function he(e){if(null!=e)return e}function ge(){return N===b?!!P:W()?B:"webkit"===N||N===I}function ye(){return ge()&&Q}function we(e,n){var t,r=ae.get(e);if(r){ae.delete(e),null!==r.timerId&&clearTimeout(r.timerId);var o=u(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 _e(e,n){var t=ce.get(e);if(t){ce.delete(e),null!==t.timerId&&clearTimeout(t.timerId);var r=u(n);t.channel._reject(r),t.reject(r)}}function be(e,n){ae.has(e)?we(e,n):ce.has(e)&&_e(e,n)}function Ie(e){var t=ae.get(e);t&&(!Number.isFinite(t.timeoutMs)||t.timeoutMs<=0?null!==t.timerId&&(clearTimeout(t.timerId),t.timerId=null):(null!==t.timerId&&clearTimeout(t.timerId),t.timerId=setTimeout(function(){ae.has(e)&&we(e,{code:n,message:"'".concat(t.method,"' timed out")})},t.timeoutMs)))}function ke(e){ae.has(e)?Ie(e):ce.has(e)&&function(e){var t=ce.get(e);t&&(null!==t.timerId&&clearTimeout(t.timerId),t.timerId=setTimeout(function(){_e(e,{code:n,message:"Channel '".concat(t.topic,"' timed out")})},w))}(e)}function Ee(e){for(var n,t=se.length-1;t>=0;t--)if((null===(n=se[t])||void 0===n?void 0:n.reqId)===e)return se.splice(t,1),!0;return!1}function xe(e,n){var t=e.kind,r="hello"===t||"helloAck"===t||"ready"===t;if(!ye()&&!r)return se.length>=256?(M("Outbox full"),void(n&&be(n,{code:l,message:"Bridge outbox is full"}))):void se.push({msg:e,reqId:n});n&&ke(n),$(e)}function Se(){null!==ne&&(clearTimeout(ne),ne=null)}function Te(){if(!Q&&ge()){Se();var e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};Z=!0,$(e),ne=setTimeout(function(){if(!Q)if(++ee<3)O("Handshake timeout (".concat(ee,"/").concat(3,"), retrying...")),Z=!1,Te();else{for(M("Handshake failed"),Se(),Z=!1,ee=0;se.length;){var e=se.shift();(null==e?void 0:e.reqId)&&be(e.reqId,{code:r,message:"Bridge handshake failed"})}for(var n=0,t=Array.from(ce.keys());n<t.length;n++){_e(t[n],{code:r,message:"Bridge handshake failed"})}}},1e4)}}function Oe(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Me(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(Oe)}(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 je(e){fe.forEach(function(n){try{if(!ve.has(n))return ve.set(n,!0),void n(A(ue),{rev:de,initial:!0});n(A(ue),{rev:de,initial:e})}catch(e){O("Subscriber error:",e)}})}function Ae(e){if("function"!=typeof e)return function(){};if(fe.add(e),de>=0){ve.set(e,!0);try{e(A(ue),{rev:de,initial:!0})}catch(e){M("Callback error:",e)}}return function(){fe.delete(e),ve.delete(e)}}function Le(e){We.call("state.getSnapshot",{scope:e}).catch(function(){})}function Ce(e){var n,t;if(e&&"object"==typeof e){var r=e;if("event"===r.type&&"nativecomponent"===r.name&&r.payload){var o=r.payload,c=o.id||o.componentId;if("string"==typeof c){var l=Ne.get(c);if(l)try{l(o)}catch(e){M("NC handler error:",e)}}return}}var s=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(s)switch(s.kind){case"helloAck":return void(K=s.sessionId);case"ready":if(K&&s.sessionId!==K)return void O("sessionId mismatch");if(Se(),Q=!0,ee=0,s.hostMethods)for(var d=0,f=Object.entries(s.hostMethods);d<f.length;d++){var v=f[d],p=v[0],m=v[1];te[p]=m}return S("proto")&&T("Handshake complete, hostMethods:",Object.keys(te).length),void function(){if(ye())for(;se.length;){var e=se.shift();e&&(e.reqId&&ke(e.reqId),$(e.msg))}}();case"res":var h=ae.get(s.id);if(!h)return;if(ae.delete(s.id),null!==h.timerId&&clearTimeout(h.timerId),s.ok){if("state.getSnapshot"===h.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||(ue=n.state,de=n.rev,S("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",de,"state:",A(ue)),console.groupEnd()),je(!0),0))}(s.result)||O("Invalid state.getSnapshot result")),"stream"===h.mode&&h.stream)return void h.stream._resolve(s.result);null===(n=h.resolve)||void 0===n||n.call(h,s.result)}else{var g=u(s.error);if("stream"===h.mode&&h.stream)return void h.stream._reject(g);null===(t=h.reject)||void 0===t||t.call(h,g)}return;case"event":if(ae.has(s.id)){var y=ae.get(s.id);return void("stream"===(null==y?void 0:y.mode)&&y.stream?(Ie(s.id),y.stream._emitData(s.payload)):O("Received event for non-stream request '".concat(s.id,"'")))}return;case"state.snapshot":return ue=s.state||{},de=s.rev,S("data")&&(console.group("[LX] snapshot"),console.log("rev:",de,"state:",A(ue)),console.groupEnd()),void je(!0);case"state.patch":if(s.baseRev!==de)return O("baseRev mismatch",{have:de,want:s.baseRev}),void Le(s.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=Me(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)}}}}(ue,s.ops||[]),de=s.rev}catch(e){return M("Patch failed:",e),void Le(s.scope)}return S("data")&&(console.group("[LX] patch"),console.log("rev:",de,"ops:",s.ops),console.groupEnd()),je(!1),void(s.ack&&xe({v:2,kind:"state.ack",scope:s.scope,rev:s.rev}));case"ch.ack":if(!(_=ce.get(s.id)))return;if(ce.delete(s.id),null!==_.timerId&&clearTimeout(_.timerId),s.ok)_.channel._markOpen(),le.set(s.id,_.channel),_.resolve(_.channel);else{g=u(s.error);_.channel._reject(g),_.reject(g)}return;case"ch.data":var w=le.get(s.id);if(!w)return;return void w._emitData(s.payload);case"ch.close":var _;if(_=ce.get(s.id))return ce.delete(s.id),void _.channel._emitClose(s.code,s.reason);var b=le.get(s.id);if(!b)return;return le.delete(s.id),void b._emitClose(s.code,s.reason);case"req":var I=s,k=me(I.method);if(!I.cap||I.cap!==k)return void xe({v:2,kind:"res",id:I.id,ok:!1,error:{code:a,message:"Invalid cap for ".concat(I.method)}});var E=pe.get(I.method);return E?void Promise.resolve().then(function(){return E(I.params)}).then(function(e){xe({v:2,kind:"res",id:I.id,ok:!0,result:e})}).catch(function(e){xe({v:2,kind:"res",id:I.id,ok:!1,error:u(e)})}):void xe({v:2,kind:"res",id:I.id,ok:!1,error:{code:i,message:"View handler not found: ".concat(I.method)}})}else O("Invalid V2 message:",e)}var Ne=new Map,Pe=[],Be=!1;function Re(){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 De(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(j(e))}catch(e){M("NativeComponent send error:",e)}}function Xe(){if(Re()&&0!==Pe.length)for(Be=!0;Pe.length;){var e=Pe.shift();try{De(e)}catch(e){break}}}function Ge(e){try{if(!Re())return void Pe.push(e);Be||Xe(),De(e)}catch(e){M("NC send failed:",e)}}function Fe(e){return"".concat(e,"_").concat(Date.now(),"_").concat(re++)}function He(e,n,t){if(n)if(n.aborted)t();else{var r={handleEvent:function(){n.removeEventListener("abort",r),t()}};n.addEventListener("abort",r)}}var qe,Ue,We={call:function(e,n,r){return new Promise(function(i,a){var c;if(e&&"string"==typeof e){Z||Te();var l=Fe("c"),s=(null==r?void 0:r.cap)||me(e),d=null!==(c=null==r?void 0:r.timeoutMs)&&void 0!==c?c:w;ae.set(l,{method:e,mode:"call",resolve:i,reject:function(e){return a(e)},timeoutMs:d,timerId:null}),xe({v:2,kind:"req",id:l,method:e,params:he(n),cap:s},l),He(0,null==r?void 0:r.signal,function(){var e=Ee(l);we(l,{code:t,message:"Bridge request aborted"}),!e&&Q&&xe({v:2,kind:"cancel",id:l})})}else a({code:o,message:"Method name must be a non-empty string"})})},stream:function(e,n,r){var i;if(!e||"string"!=typeof e){var a=ie("invalid",function(){});return a._reject({code:o,message:"Method name must be a non-empty string"}),a}Z||Te();var c=Fe("c"),l=ie(c,function(){Ee(c)?we(c,{code:t,message:"Bridge request aborted"}):Q&&xe({v:2,kind:"cancel",id:c})}),s=(null==r?void 0:r.cap)||me(e),d=null!==(i=null==r?void 0:r.timeoutMs)&&void 0!==i?i:w;return ae.set(c,{method:e,mode:"stream",stream:l,timeoutMs:d,timerId:null}),xe({v:2,kind:"req",id:c,method:e,params:he(n),cap:s},c),He(0,null==r?void 0:r.signal,function(){return l.cancel()}),l},notify:function(e,n,t){e&&"string"==typeof e&&(Z||Te(),xe({v:2,kind:"notify",method:e,params:he(n),cap:(null==t?void 0:t.cap)||me(e)}))},state:{subscribe:Ae},channel:{open:function(e,n,t){return e&&"string"==typeof e?(Z||Te(),new Promise(function(r,o){var i=Fe("ch"),a=function(e,n,t){var r,o=oe(),i=!1,a=0,c=!1,l=[],d=[],u=((r={id:e,send:function(t){i?n(t,a++):u._reject({code:s,message:"Channel '".concat(e,"' is closed")})},on:function(e,n){return"data"===e&&o.data.add(n),"close"===e&&o.close.add(n),"error"===e&&o.error.add(n),this}})[Symbol.asyncIterator]=function(){return{next:function(){return l.length>0?Promise.resolve({done:!1,value:l.shift()}):c?Promise.resolve({done:!0,value:void 0}):new Promise(function(e,n){d.push({resolve:e,reject:n})})}}},r.close=function(e,n){i&&(i=!1,c=!0,t(e,n),u._emitClose(e,n))},r._emitData=function(e){if(i){d.length>0?d.shift().resolve({done:!1,value:e}):l.push(e);for(var n=0,t=o.data;n<t.length;n++){var r=t[n];try{r(e)}catch(e){O("Channel listener failed:",e)}}}},r._emitClose=function(e,n){for(c=!0;d.length>0;)d.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){O("Channel close listener failed:",e)}}},r._reject=function(e){for(c=!0;d.length>0;)d.shift().reject(e);for(var n=0,t=o.error;n<t.length;n++){var r=t[n];try{r(e)}catch(e){O("Channel error listener failed:",e)}}},r._markOpen=function(){i=!0,c=!1},r._isOpen=function(){return i},r._nextSeq=function(){return a++},r);return u}(i,function(e,n){xe({v:2,kind:"ch.data",id:i,seq:n,payload:e})},function(e,n){var t=ce.get(i);t&&null!==t.timerId&&clearTimeout(t.timerId),ce.delete(i),le.delete(i),xe({v:2,kind:"ch.close",id:i,code:e,reason:n})});ce.set(i,{topic:e,channel:a,resolve:r,reject:o,timerId:null}),xe({v:2,kind:"ch.open",id:i,topic:e,params:he(n),cap:(null==t?void 0:t.cap)||me(e)},i)})):Promise.reject({code:o,message:"Topic name must be a non-empty string"})}}},ze={invoke:function(e,n,t){return We.call(Je(e),n,Ye(t)).then(function(e){return e}).catch(function(e){return Promise.reject(f(e))})},notify:function(e,n,t){We.notify(Je(e),n,Ye(t))},stream:function(e,n,t){return Ve(We.stream(Je(e),n,Ye(t)))},channel:function(e,n,t){return We.channel.open(Je(e),n,Ye(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(f(e))})},raw:We,state:{subscribe:Ae},_connectWebMessagePort:function(e){if(N===b){if(P&&P!==e)try{P.onmessage=null,P.close()}catch(e){}P=e,e.onmessage=function(e){var n=e.data;if("string"==typeof n)try{n=JSON.parse(n)}catch(e){return}Ce(n)};try{e.start()}catch(e){}T("Port connected"),Te()}},_receiveEvaluateMessage:function(e){try{e&&Ce(JSON.parse(e))}catch(e){M("Parse error:",e)}},debug:(qe=E,Ue={},Object.keys(qe).forEach(function(e){Object.defineProperty(Ue,e,{enumerable:!0,configurable:!1,get:function(){return qe[e]},set:function(n){qe[e]=!!n,console.log("[LX] ".concat(e,": ").concat(n))}})}),Ue),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:h,isAndroid:function(){return"Android"===p.os},isMacOS:g,isDesktop:function(){return g()},getOS:m},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:Ge,hasHandler:Re,flush:Xe,register:function(e,n){return e&&"function"==typeof n?(Ne.set(e,n),function(){return Ne.delete(e)}):function(){}},unregister:function(e){Ne.delete(e)}},isReady:function(){return Q}};function Je(e){return e.startsWith("host.")?e:"host.".concat(e)}function Ye(e){return __assign(__assign({},e||{}),{cap:(null==e?void 0:e.cap)||"host"})}function Ve(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=f(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(f(e))}),cancel:function(){e.cancel()}}}function $e(){if(window.__LX_BRIDGE_INIT_STATE)T("Bridge already ".concat(window.__LX_BRIDGE_INIT_STATE,", skipping duplicate init"));else{window.__LX_BRIDGE_INIT_STATE="initializing";try{T("Method: ".concat(N)),function(e){if("undefined"!=typeof window&&(window[y]=e,0!==x.length))for(var n=0,t=x.splice(0,x.length);n<t.length;n++){var r=t[n];try{e(r)}catch(e){O("Failed to replay queued native message:",e)}}}(ze._receiveEvaluateMessage),W()?V():N===b?(q(),function(){var e,n;if(P)return Promise.resolve(P);if(F.promise)return F.promise;q(),F.promise=new Promise(function(e,n){F.resolve=function(n){U(),e(n)},F.reject=function(e){U(),n(e)},F.timer=window.setTimeout(function(){var e;null===(e=F.reject)||void 0===e||e.call(F,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=F.reject)||void 0===n||n.call(F,e)}return F.promise}().catch(function(e){return O("Port init failed:",e)})):"webkit"===N||N===I?Te():O("Unknown method"),window.LingXiaBridge=ze,v({os:m(),send:Ge}),window.__LX_BRIDGE_INIT_STATE="initialized",T("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function Ke(e){var n=document.createElement("div");return n.textContent=e,n.innerHTML}function Qe(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(Ke(n),"</div>")),t&&(i+='<p class="lx-error-desc" style="margin-top:12px">'.concat(Ke(t),"</p>")),o.innerHTML=i,document.body.appendChild(o)}function Ze(){var e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function en(){var e;return(null===(e=window.__LX_RUNTIME_CONFIG)||void 0===e?void 0:e.error)||null}var nn={handleEvent:function(){return tn()}};function tn(){if(Ze()){var e=en();e&&Qe(e)}}function rn(){$e(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",nn):tn()}return rn(),e.LingXiaBridge=ze,e.boot=function(){$e(),tn()},e.bootWhenReady=rn,e.channel=function(e,n,t){return ze.channel(e,n,t)},e.getErrorInfo=en,e.hasError=Ze,e.initBridge=$e,e.invoke=function(e,n,t){return ze.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){We.notify(Je(e),n,Ye(t))},e.renderErrorUI=Qe,e.stream=function(e,n,t){return Ve(We.stream(Je(e),n,Ye(t)))},e}({});
1
+ var __extends=this&&this.__extends||function(){var e=function(n,t){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])},e(n,t)};return function(n,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=n}e(n,t),n.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e},__assign.apply(this,arguments)},__awaiter=this&&this.__awaiter||function(e,n,t,r){return new(t||(t=Promise))(function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function c(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t(function(e){e(n)})).then(a,c)}l((r=r.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(e,n){var t,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(l){return function(c){if(t)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=n.call(e,i)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,l])}}},__spreadArray=this&&this.__spreadArray||function(e,n,t){if(t||2===arguments.length)for(var r,o=0,i=n.length;o<i;o++)!r&&o in n||(r||(r=Array.prototype.slice.call(n,0,o)),r[o]=n[o]);return e.concat(r||Array.prototype.slice.call(n))},__LX_RUNTIME_PLATFORM__="mobile",__LingXiaBridgeBundle=function(e){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"});var n="BRIDGE_TIMEOUT",t="BRIDGE_CANCELED",r="BRIDGE_HANDSHAKE_FAILED",o="BRIDGE_MALFORMED_MESSAGE",i="BRIDGE_METHOD_NOT_FOUND",a="BRIDGE_CAPABILITY_DENIED",c="BRIDGE_INTERNAL_ERROR",l="BRIDGE_OUTBOX_FULL",s="BRIDGE_STREAM_CLOSED",d=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 u(e){if(e instanceof d)return e;if(e&&"object"==typeof e){var n=e,t=c;("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 d(t,r,"data"in n?n.data:void 0)}var o=e instanceof Error?e.message:"string"==typeof e?e:"Unknown error";return new d(c,o)}function f(e){var n=u(e);return __assign({code:String(n.code||c),message:"string"==typeof n.message&&""!==n.message.trim()?n.message:"Unknown error"},void 0===n.data?{}:{data:n.data})}function v(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 p="undefined"!=typeof window&&window.__LX_BRIDGE_CFG||{};function m(){return p.os||"unknown"}function h(){return"iOS"===p.os}function g(){return"macOS"===p.os}function y(){return"Windows"===p.os}var w="__LingXiaRecvMessage",b=5e3,_="[LX.Bridge]",I="messageport",k="jsinterface",E="webmessage",x=p.appleDownstreamURL,S={data:!1,proto:!1,all:!1},T=[];function O(e){return S.all||S[e]}function M(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.log.apply(console,__spreadArray([_],e,!1))}function j(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.warn.apply(console,__spreadArray([_],e,!1))}function A(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];console.error.apply(console,__spreadArray([_],e,!1))}function C(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 L(e){try{return"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))}catch(e){return{}}}var N,P,B="iOS"===p.os||"macOS"===p.os?"webkit":"Harmony"===p.os?"messageport":"Windows"===p.os?"webmessage":"Android"===p.os?(null===(P=null===(N=window.LingXiaProxy)||void 0===N?void 0:N.supportsMessagePort)||void 0===P?void 0:P.call(N))?"messageport":"jsinterface":"unknown";"undefined"!=typeof window&&"function"!=typeof window[w]&&(window[w]=function(e){T.push(e)});var R=null,D=!1,X=null,G=null,F=null,H=200,q={listenerInstalled:!1,promise:null,resolve:null,reject:null,timer:null},U={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&&(Ye._connectWebMessagePort(o),null===(t=q.resolve)||void 0===t||t.call(q,o))}}};function W(){q.listenerInstalled||(q.listenerInstalled=!0,window.addEventListener("message",U))}function z(){null!==q.timer&&(window.clearTimeout(q.timer),q.timer=null),q.resolve=null,q.reject=null,q.promise=null}function J(){return"webkit"===B&&(h()||g())}function Y(){null!==F&&(clearTimeout(F),F=null)}function V(e){for(var n=0,t=Array.from(le.keys());n<t.length;n++){_e(t[n],{code:s,message:e})}for(var r=0,o=Array.from(se.keys());r<o.length;r++){Ie(o[r],{code:s,message:e})}!function(e){for(var n=0,t=Array.from(de.entries());n<t.length;n++){var r=t[n],o=r[0],i=r[1];de.delete(o),i._emitClose(s,e)}}(e)}function $(){return __awaiter(this,void 0,void 0,function(){var e,n,t,r,o,i,a,c,l;return __generator(this,function(s){switch(s.label){case 0:if(!x)throw new Error("Apple downstream URL is not configured");return e=new AbortController,G=e,[4,fetch(x,{method:"GET",cache:"no-store",headers:{Accept:"application/x-ndjson"},signal:e.signal})];case 1:if(!(n=s.sent()).ok)throw new Error("Apple downstream HTTP ".concat(n.status));if(!n.body)throw new Error("Apple downstream response body unavailable");D=!0,H=200,O("proto")&&M("Apple downstream connected"),Me(),t=n.body.getReader(),r=new TextDecoder,o="",s.label=2;case 2:s.trys.push([2,6,7,8]),s.label=3;case 3:return[4,t.read()];case 4:return i=s.sent(),a=i.value,i.done?[3,5]:(o=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{Pe(JSON.parse(r))}catch(e){j("Apple downstream parse error:",e,r)}}return n}(o+=r.decode(a,{stream:!0})),[3,3]);case 5:if(o+=r.decode(),c=o.trim())try{Pe(JSON.parse(c))}catch(e){j("Apple downstream trailing parse error:",e,c)}return[3,8];case 6:if(l=s.sent(),e.signal.aborted)return[2];throw l;case 7:try{t.releaseLock()}catch(e){}return[7];case 8:return[2]}})})}function K(){J()&&(X||(Y(),X=$().catch(function(e){(null==G?void 0:G.signal.aborted)||j("Apple downstream failed:",e)}).finally(function(){var e,n=null!==(e=null==G?void 0:G.signal.aborted)&&void 0!==e&&e;X=null,G=null;var t,r,o=D;D=!1,t="Apple downstream closed",r=o,Oe(),Z=null,ee=!1,ne=!1,te=0,r&&V(t),n||function(e){if(J()){Y();var n=H;H=Math.min(2*H,2e3);var t="Apple downstream disconnected, retrying in ".concat(n,"ms: ").concat(e);n<=200?M(t):j(t),F=setTimeout(function(){F=null,K()},n)}}("stream closed")})))}function Q(e){var n,t,r,o=e.kind;"req"!==o&&"notify"!==o||M("postToNative: ".concat(o," ").concat(e.method)),O("proto")&&console.log("→",JSON.stringify(e,null,2));try{if("webkit"===B)return void(null===(t=null===(n=window.webkit)||void 0===n?void 0:n.messageHandlers.LingXia)||void 0===t||t.postMessage(e));var i=C(e);if(B===I&&R)return void R.postMessage(i);if((B===k||B===E)&&(null===(r=window.LingXiaProxy)||void 0===r?void 0:r.postMessage))return void window.LingXiaProxy.postMessage(i);j("Transport not ready")}catch(e){A("Send error:",e)}}var Z=null,ee=!1,ne=!1,te=0,re=null,oe={},ie=0;function ae(){return{data:new Set,end:new Set,error:new Set,close:new Set}}function ce(e,n){var t,r=ae(),o=!1,i=function(){},a=function(){},c=[],l=[],s=new Promise(function(e,n){i=e,a=n});return(t={id:e,result:s,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{next:function(){return c.length>0?Promise.resolve({done:!1,value:c.shift()}):o?s.then(function(e){return{done:!0,value:e}},function(e){return Promise.reject(e)}):new Promise(function(e,n){l.push({resolve:e,reject:n})})}}},t.cancel=function(){o||n()},t._emitData=function(e){if(!o){l.length>0?l.shift().resolve({done:!1,value:e}):c.push(e);for(var n=0,t=r.data;n<t.length;n++){var i=t[n];try{i(e)}catch(e){j("Stream data listener failed:",e)}}}},t._resolve=function(e){if(!o){for(o=!0,i(e);l.length>0;)l.shift().resolve({done:!0,value:e});for(var n=0,t=r.end;n<t.length;n++){var a=t[n];try{a(e)}catch(e){j("Stream end listener failed:",e)}}}},t._reject=function(e){if(!o){for(o=!0,a(e);l.length>0;)l.shift().reject(e);for(var n=0,t=r.error;n<t.length;n++){var i=t[n];try{i(e)}catch(e){j("Stream error listener failed:",e)}}}},t}var le=new Map,se=new Map,de=new Map,ue=[],fe=-1,ve={},pe=new Set,me=new WeakMap,he=new Map;function ge(e){if(e.startsWith("host."))return"host";var n=e.indexOf(".");return n>0?e.slice(0,n):"page"}function ye(e){if(null!=e)return e}function we(){return B===I?!!R:J()?D:"webkit"===B||B===k||B===E}function be(){return we()&&ee}function _e(e,n){var t,r=le.get(e);if(r){le.delete(e),null!==r.timerId&&clearTimeout(r.timerId);var o=u(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 Ie(e,n){var t=se.get(e);if(t){se.delete(e),null!==t.timerId&&clearTimeout(t.timerId);var r=u(n);t.channel._reject(r),t.reject(r)}}function ke(e,n){le.has(e)?_e(e,n):se.has(e)&&Ie(e,n)}function Ee(e){var t=le.get(e);t&&(!Number.isFinite(t.timeoutMs)||t.timeoutMs<=0?null!==t.timerId&&(clearTimeout(t.timerId),t.timerId=null):(null!==t.timerId&&clearTimeout(t.timerId),t.timerId=setTimeout(function(){le.has(e)&&_e(e,{code:n,message:"'".concat(t.method,"' timed out")})},t.timeoutMs)))}function xe(e){le.has(e)?Ee(e):se.has(e)&&function(e){var t=se.get(e);t&&(null!==t.timerId&&clearTimeout(t.timerId),t.timerId=setTimeout(function(){Ie(e,{code:n,message:"Channel '".concat(t.topic,"' timed out")})},b))}(e)}function Se(e){for(var n,t=ue.length-1;t>=0;t--)if((null===(n=ue[t])||void 0===n?void 0:n.reqId)===e)return ue.splice(t,1),!0;return!1}function Te(e,n){var t=e.kind,r="hello"===t||"helloAck"===t||"ready"===t;if(!be()&&!r)return ue.length>=256?(A("Outbox full"),void(n&&ke(n,{code:l,message:"Bridge outbox is full"}))):void ue.push({msg:e,reqId:n});n&&xe(n),Q(e)}function Oe(){null!==re&&(clearTimeout(re),re=null)}function Me(){if(!ee&&we()){Oe();var e={v:2,kind:"hello",nonce:p.nonce||"",role:"view",protocolsSupported:[2]};ne=!0,Q(e),re=setTimeout(function(){if(!ee)if(++te<3)j("Handshake timeout (".concat(te,"/").concat(3,"), retrying...")),ne=!1,Me();else{for(A("Handshake failed"),Oe(),ne=!1,te=0;ue.length;){var e=ue.shift();(null==e?void 0:e.reqId)&&ke(e.reqId,{code:r,message:"Bridge handshake failed"})}for(var n=0,t=Array.from(se.keys());n<t.length;n++){Ie(t[n],{code:r,message:"Bridge handshake failed"})}}},1e4)}}function je(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function Ae(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(je)}(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 Ce(e){pe.forEach(function(n){try{if(!me.has(n))return me.set(n,!0),void n(L(ve),{rev:fe,initial:!0});n(L(ve),{rev:fe,initial:e})}catch(e){j("Subscriber error:",e)}})}function Le(e){if("function"!=typeof e)return function(){};if(pe.add(e),fe>=0){me.set(e,!0);try{e(L(ve),{rev:fe,initial:!0})}catch(e){A("Callback error:",e)}}return function(){pe.delete(e),me.delete(e)}}function Ne(e){Je.call("state.getSnapshot",{scope:e}).catch(function(){})}function Pe(e){var n,t;if(e&&"object"==typeof e){var r=e;if("event"===r.type&&"nativecomponent"===r.name&&r.payload){var o=r.payload,c=o.id||o.componentId;if("string"==typeof c){var l=Be.get(c);if(l)try{l(o)}catch(e){A("NC handler error:",e)}}return}}var s=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(s)switch(s.kind){case"helloAck":return void(Z=s.sessionId);case"ready":if(Z&&s.sessionId!==Z)return void j("sessionId mismatch");if(Oe(),ee=!0,te=0,s.hostMethods)for(var d=0,f=Object.entries(s.hostMethods);d<f.length;d++){var v=f[d],p=v[0],m=v[1];oe[p]=m}return O("proto")&&M("Handshake complete, hostMethods:",Object.keys(oe).length),void function(){if(be())for(;ue.length;){var e=ue.shift();e&&(e.reqId&&xe(e.reqId),Q(e.msg))}}();case"res":var h=le.get(s.id);if(!h)return;if(le.delete(s.id),null!==h.timerId&&clearTimeout(h.timerId),s.ok){if("state.getSnapshot"===h.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||(ve=n.state,fe=n.rev,O("data")&&(console.group("[LX] snapshot(res)"),console.log("rev:",fe,"state:",L(ve)),console.groupEnd()),Ce(!0),0))}(s.result)||j("Invalid state.getSnapshot result")),"stream"===h.mode&&h.stream)return void h.stream._resolve(s.result);null===(n=h.resolve)||void 0===n||n.call(h,s.result)}else{var g=u(s.error);if("stream"===h.mode&&h.stream)return void h.stream._reject(g);null===(t=h.reject)||void 0===t||t.call(h,g)}return;case"event":if(le.has(s.id)){var y=le.get(s.id);return void("stream"===(null==y?void 0:y.mode)&&y.stream?(Ee(s.id),y.stream._emitData(s.payload)):j("Received event for non-stream request '".concat(s.id,"'")))}return;case"state.snapshot":return ve=s.state||{},fe=s.rev,O("data")&&(console.group("[LX] snapshot"),console.log("rev:",fe,"state:",L(ve)),console.groupEnd()),void Ce(!0);case"state.patch":if(s.baseRev!==fe)return j("baseRev mismatch",{have:fe,want:s.baseRev}),void Ne(s.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=Ae(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)}}}}(ve,s.ops||[]),fe=s.rev}catch(e){return A("Patch failed:",e),void Ne(s.scope)}return O("data")&&(console.group("[LX] patch"),console.log("rev:",fe,"ops:",s.ops),console.groupEnd()),Ce(!1),void(s.ack&&Te({v:2,kind:"state.ack",scope:s.scope,rev:s.rev}));case"ch.ack":if(!(b=se.get(s.id)))return;if(se.delete(s.id),null!==b.timerId&&clearTimeout(b.timerId),s.ok)b.channel._markOpen(),de.set(s.id,b.channel),b.resolve(b.channel);else{g=u(s.error);b.channel._reject(g),b.reject(g)}return;case"ch.data":var w=de.get(s.id);if(!w)return;return void w._emitData(s.payload);case"ch.close":var b;if(b=se.get(s.id))return se.delete(s.id),void b.channel._emitClose(s.code,s.reason);var _=de.get(s.id);if(!_)return;return de.delete(s.id),void _._emitClose(s.code,s.reason);case"req":var I=s,k=ge(I.method);if(!I.cap||I.cap!==k)return void Te({v:2,kind:"res",id:I.id,ok:!1,error:{code:a,message:"Invalid cap for ".concat(I.method)}});var E=he.get(I.method);return E?void Promise.resolve().then(function(){return E(I.params)}).then(function(e){Te({v:2,kind:"res",id:I.id,ok:!0,result:e})}).catch(function(e){Te({v:2,kind:"res",id:I.id,ok:!1,error:u(e)})}):void Te({v:2,kind:"res",id:I.id,ok:!1,error:{code:i,message:"View handler not found: ".concat(I.method)}})}else j("Invalid V2 message:",e)}var Be=new Map,Re=[],De=!1;function Xe(){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 Ge(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(C(e))}catch(e){A("NativeComponent send error:",e)}}function Fe(){if(Xe()&&0!==Re.length)for(De=!0;Re.length;){var e=Re.shift();try{Ge(e)}catch(e){break}}}function He(e){try{if(!Xe())return void Re.push(e);De||Fe(),Ge(e)}catch(e){A("NC send failed:",e)}}function qe(e){return"".concat(e,"_").concat(Date.now(),"_").concat(ie++)}function Ue(e,n,t){if(n)if(n.aborted)t();else{var r={handleEvent:function(){n.removeEventListener("abort",r),t()}};n.addEventListener("abort",r)}}var We,ze,Je={call:function(e,n,r){return new Promise(function(i,a){var c;if(e&&"string"==typeof e){ne||Me();var l=qe("c"),s=(null==r?void 0:r.cap)||ge(e),d=null!==(c=null==r?void 0:r.timeoutMs)&&void 0!==c?c:b;le.set(l,{method:e,mode:"call",resolve:i,reject:function(e){return a(e)},timeoutMs:d,timerId:null}),Te({v:2,kind:"req",id:l,method:e,params:ye(n),cap:s},l),Ue(0,null==r?void 0:r.signal,function(){var e=Se(l);_e(l,{code:t,message:"Bridge request aborted"}),!e&&ee&&Te({v:2,kind:"cancel",id:l})})}else a({code:o,message:"Method name must be a non-empty string"})})},stream:function(e,n,r){var i;if(!e||"string"!=typeof e){var a=ce("invalid",function(){});return a._reject({code:o,message:"Method name must be a non-empty string"}),a}ne||Me();var c=qe("c"),l=ce(c,function(){Se(c)?_e(c,{code:t,message:"Bridge request aborted"}):ee&&Te({v:2,kind:"cancel",id:c})}),s=(null==r?void 0:r.cap)||ge(e),d=null!==(i=null==r?void 0:r.timeoutMs)&&void 0!==i?i:b;return le.set(c,{method:e,mode:"stream",stream:l,timeoutMs:d,timerId:null}),Te({v:2,kind:"req",id:c,method:e,params:ye(n),cap:s},c),Ue(0,null==r?void 0:r.signal,function(){return l.cancel()}),l},notify:function(e,n,t){e&&"string"==typeof e&&(ne||Me(),Te({v:2,kind:"notify",method:e,params:ye(n),cap:(null==t?void 0:t.cap)||ge(e)}))},state:{subscribe:Le},channel:{open:function(e,n,t){return e&&"string"==typeof e?(ne||Me(),new Promise(function(r,o){var i=qe("ch"),a=function(e,n,t){var r,o=ae(),i=!1,a=0,c=!1,l=[],d=[],u=((r={id:e,send:function(t){i?n(t,a++):u._reject({code:s,message:"Channel '".concat(e,"' is closed")})},on:function(e,n){if("data"===e&&(o.data.add(n),l.length>0))for(var t=0,r=l.splice(0);t<r.length;t++){var i=r[t];try{n(i)}catch(e){j("Channel listener failed:",e)}}return"close"===e&&o.close.add(n),"error"===e&&o.error.add(n),this}})[Symbol.asyncIterator]=function(){return{next:function(){return l.length>0?Promise.resolve({done:!1,value:l.shift()}):c?Promise.resolve({done:!0,value:void 0}):new Promise(function(e,n){d.push({resolve:e,reject:n})})}}},r.close=function(e,n){i&&(i=!1,c=!0,t(e,n),u._emitClose(e,n))},r._emitData=function(e){if(i){d.length>0?d.shift().resolve({done:!1,value:e}):l.push(e);for(var n=0,t=o.data;n<t.length;n++){var r=t[n];try{r(e)}catch(e){j("Channel listener failed:",e)}}}},r._emitClose=function(e,n){for(c=!0;d.length>0;)d.shift().resolve({done:!0,value:void 0});for(var t=0,r=o.close;t<r.length;t++){var i=r[t];try{i(e,n)}catch(e){j("Channel close listener failed:",e)}}},r._reject=function(e){for(c=!0;d.length>0;)d.shift().reject(e);for(var n=0,t=o.error;n<t.length;n++){var r=t[n];try{r(e)}catch(e){j("Channel error listener failed:",e)}}},r._markOpen=function(){i=!0,c=!1},r._isOpen=function(){return i},r._nextSeq=function(){return a++},r);return u}(i,function(e,n){Te({v:2,kind:"ch.data",id:i,seq:n,payload:e})},function(e,n){var t=se.get(i);t&&null!==t.timerId&&clearTimeout(t.timerId),se.delete(i),de.delete(i),Te({v:2,kind:"ch.close",id:i,code:e,reason:n})});se.set(i,{topic:e,channel:a,resolve:r,reject:o,timerId:null}),Te({v:2,kind:"ch.open",id:i,topic:e,params:ye(n),cap:(null==t?void 0:t.cap)||ge(e)},i)})):Promise.reject({code:o,message:"Topic name must be a non-empty string"})}}},Ye={invoke:function(e,n,t){return Je.call(Ve(e),n,$e(t)).then(function(e){return e}).catch(function(e){return Promise.reject(f(e))})},notify:function(e,n,t){Je.notify(Ve(e),n,$e(t))},stream:function(e,n,t){return Ke(Je.stream(Ve(e),n,$e(t)))},channel:function(e,n,t){return Je.channel.open(Ve(e),n,$e(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(f(e))})},raw:Je,state:{subscribe:Le},_connectWebMessagePort:function(e){if(B===I){if(R&&R!==e)try{R.onmessage=null,R.close()}catch(e){}R=e,e.onmessage=function(e){var n=e.data;if("string"==typeof n)try{n=JSON.parse(n)}catch(e){return}Pe(n)};try{e.start()}catch(e){}M("Port connected"),Me()}},_receiveEvaluateMessage:function(e){try{e&&Pe(JSON.parse(e))}catch(e){A("Parse error:",e)}},debug:(We=S,ze={},Object.keys(We).forEach(function(e){Object.defineProperty(ze,e,{enumerable:!0,configurable:!1,get:function(){return We[e]},set:function(n){We[e]=!!n,console.log("[LX] ".concat(e,": ").concat(n))}})}),ze),platform:{isHarmony:function(){return"Harmony"===p.os},isIOS:h,isAndroid:function(){return"Android"===p.os},isMacOS:g,isWindows:y,isDesktop:function(){return g()||y()},getOS:m},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:He,hasHandler:Xe,flush:Fe,register:function(e,n){return e&&"function"==typeof n?(Be.set(e,n),function(){return Be.delete(e)}):function(){}},unregister:function(e){Be.delete(e)}},isReady:function(){return ee}};function Ve(e){return e.startsWith("host.")?e:"host.".concat(e)}function $e(e){return __assign(__assign({},e||{}),{cap:(null==e?void 0:e.cap)||"host"})}function Ke(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=f(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(f(e))}),cancel:function(){e.cancel()}}}function Qe(){if(window.__LX_BRIDGE_INIT_STATE)M("Bridge already ".concat(window.__LX_BRIDGE_INIT_STATE,", skipping duplicate init"));else{window.__LX_BRIDGE_INIT_STATE="initializing";try{M("Method: ".concat(B)),function(e){if("undefined"!=typeof window&&(window[w]=e,0!==T.length))for(var n=0,t=T.splice(0,T.length);n<t.length;n++){var r=t[n];try{e(r)}catch(e){j("Failed to replay queued native message:",e)}}}(Ye._receiveEvaluateMessage),J()?K():B===I?(W(),function(){var e,n;if(R)return Promise.resolve(R);if(q.promise)return q.promise;W(),q.promise=new Promise(function(e,n){q.resolve=function(n){z(),e(n)},q.reject=function(e){z(),n(e)},q.timer=window.setTimeout(function(){var e;null===(e=q.reject)||void 0===e||e.call(q,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=q.reject)||void 0===n||n.call(q,e)}return q.promise}().catch(function(e){return j("Port init failed:",e)})):"webkit"===B||B===k||B===E?Me():j("Unknown method"),window.LingXiaBridge=Ye,v({os:m(),send:He}),window.__LX_BRIDGE_INIT_STATE="initialized",M("Init complete")}catch(e){throw delete window.__LX_BRIDGE_INIT_STATE,e}}}function Ze(e){var n=document.createElement("div");return n.textContent=e,n.innerHTML}function en(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(Ze(n),"</div>")),t&&(i+='<p class="lx-error-desc" style="margin-top:12px">'.concat(Ze(t),"</p>")),o.innerHTML=i,document.body.appendChild(o)}function nn(){var e=window.__LX_RUNTIME_CONFIG;return!(!e||!e.error)}function tn(){var e;return(null===(e=window.__LX_RUNTIME_CONFIG)||void 0===e?void 0:e.error)||null}var rn={handleEvent:function(){return on()}};function on(){if(nn()){var e=tn();e&&en(e)}}function an(){Qe(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",rn):on()}return an(),e.LingXiaBridge=Ye,e.boot=function(){Qe(),on()},e.bootWhenReady=an,e.channel=function(e,n,t){return Ye.channel(e,n,t)},e.getErrorInfo=tn,e.hasError=nn,e.initBridge=Qe,e.invoke=function(e,n,t){return Ye.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){Je.notify(Ve(e),n,$e(t))},e.renderErrorUI=en,e.stream=function(e,n,t){return Ke(Je.stream(Ve(e),n,$e(t)))},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, isDesktop, } from "./runtime-env";
4
+ import { BRIDGE_CONFIG, getCommunicationMethod, getPlatformOS, isAndroid, isHarmony, isIOS, isMacOS, isWindows, isDesktop, } from "./runtime-env";
5
5
  const NATIVE_HANDLER_NAME = "LingXia";
6
6
  const GLOBAL_RECEIVER_NAME = "__LingXiaRecvMessage";
7
7
  const DEFAULT_TIMEOUT_MS = 5000;
@@ -10,6 +10,7 @@ const HANDSHAKE_MAX_RETRIES = 3;
10
10
  const LOG_PREFIX = "[LX.Bridge]";
11
11
  const MESSAGE_PORT_TYPE = "messageport";
12
12
  const JS_INTERFACE_TYPE = "jsinterface";
13
+ const WEB_MESSAGE_TYPE = "webmessage";
13
14
  const OUTBOX_LIMIT = 256;
14
15
  const APPLE_DOWNSTREAM_URL = BRIDGE_CONFIG.appleDownstreamURL;
15
16
  const APPLE_RECONNECT_BASE_MS = 200;
@@ -345,7 +346,8 @@ function postToNative(message) {
345
346
  messagePort.postMessage(messageString);
346
347
  return;
347
348
  }
348
- if (communicationMethod === JS_INTERFACE_TYPE &&
349
+ if ((communicationMethod === JS_INTERFACE_TYPE ||
350
+ communicationMethod === WEB_MESSAGE_TYPE) &&
349
351
  window.LingXiaProxy?.postMessage) {
350
352
  window.LingXiaProxy.postMessage(messageString);
351
353
  return;
@@ -496,8 +498,24 @@ function createChannel(id, sendFn, closeFn) {
496
498
  sendFn(payload, outboundSeq++);
497
499
  },
498
500
  on(event, listener) {
499
- if (event === "data")
501
+ if (event === "data") {
500
502
  listeners.data.add(listener);
503
+ // Flush data buffered before this listener attached. The host can send
504
+ // ch.data immediately after the open ack, before the consumer (e.g. a
505
+ // wrapped channel's onMessage) attaches its listener; without this those
506
+ // early events would sit in pendingData and never reach the listener.
507
+ if (pendingData.length > 0) {
508
+ const buffered = pendingData.splice(0);
509
+ for (const payload of buffered) {
510
+ try {
511
+ listener(payload);
512
+ }
513
+ catch (e) {
514
+ warn("Channel listener failed:", e);
515
+ }
516
+ }
517
+ }
518
+ }
501
519
  if (event === "close")
502
520
  listeners.close.add(listener);
503
521
  if (event === "error")
@@ -620,7 +638,8 @@ function isTransportReady() {
620
638
  if (useAppleDownstreamTransport())
621
639
  return appleDownstreamConnected;
622
640
  return (communicationMethod === "webkit" ||
623
- communicationMethod === JS_INTERFACE_TYPE);
641
+ communicationMethod === JS_INTERFACE_TYPE ||
642
+ communicationMethod === WEB_MESSAGE_TYPE);
624
643
  }
625
644
  function canSendAppMessages() {
626
645
  return isTransportReady() && handshakeDone;
@@ -1437,6 +1456,7 @@ export const LingXiaBridge = {
1437
1456
  isIOS,
1438
1457
  isAndroid,
1439
1458
  isMacOS,
1459
+ isWindows,
1440
1460
  isDesktop,
1441
1461
  getOS: getPlatformOS,
1442
1462
  },
@@ -1584,7 +1604,8 @@ export function initBridge() {
1584
1604
  getMessagePort().catch((e) => warn("Port init failed:", e));
1585
1605
  }
1586
1606
  else if (communicationMethod === "webkit" ||
1587
- communicationMethod === JS_INTERFACE_TYPE) {
1607
+ communicationMethod === JS_INTERFACE_TYPE ||
1608
+ communicationMethod === WEB_MESSAGE_TYPE) {
1588
1609
  startHandshake();
1589
1610
  }
1590
1611
  else {
@@ -14,14 +14,19 @@ export function isAndroid() {
14
14
  export function isMacOS() {
15
15
  return BRIDGE_CONFIG.os === 'macOS';
16
16
  }
17
+ export function isWindows() {
18
+ return BRIDGE_CONFIG.os === 'Windows';
19
+ }
17
20
  export function isDesktop() {
18
- return isMacOS();
21
+ return isMacOS() || isWindows();
19
22
  }
20
23
  export function getCommunicationMethod() {
21
24
  if (BRIDGE_CONFIG.os === 'iOS' || BRIDGE_CONFIG.os === 'macOS')
22
25
  return 'webkit';
23
26
  if (BRIDGE_CONFIG.os === 'Harmony')
24
27
  return 'messageport';
28
+ if (BRIDGE_CONFIG.os === 'Windows')
29
+ return 'webmessage';
25
30
  if (BRIDGE_CONFIG.os === 'Android') {
26
31
  if (window.LingXiaProxy?.supportsMessagePort?.())
27
32
  return 'messageport';
@@ -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, isDesktop, } from "./runtime-env";
87
+ import { BRIDGE_CONFIG, getCommunicationMethod, getPlatformOS, isAndroid, isHarmony, isIOS, isMacOS, isWindows, isDesktop, } from "./runtime-env";
88
88
  var NATIVE_HANDLER_NAME = "LingXia";
89
89
  var GLOBAL_RECEIVER_NAME = "__LingXiaRecvMessage";
90
90
  var DEFAULT_TIMEOUT_MS = 5000;
@@ -93,6 +93,7 @@ var HANDSHAKE_MAX_RETRIES = 3;
93
93
  var LOG_PREFIX = "[LX.Bridge]";
94
94
  var MESSAGE_PORT_TYPE = "messageport";
95
95
  var JS_INTERFACE_TYPE = "jsinterface";
96
+ var WEB_MESSAGE_TYPE = "webmessage";
96
97
  var OUTBOX_LIMIT = 256;
97
98
  var APPLE_DOWNSTREAM_URL = BRIDGE_CONFIG.appleDownstreamURL;
98
99
  var APPLE_RECONNECT_BASE_MS = 200;
@@ -506,7 +507,8 @@ function postToNative(message) {
506
507
  messagePort.postMessage(messageString);
507
508
  return;
508
509
  }
509
- if (communicationMethod === JS_INTERFACE_TYPE &&
510
+ if ((communicationMethod === JS_INTERFACE_TYPE ||
511
+ communicationMethod === WEB_MESSAGE_TYPE) &&
510
512
  ((_c = window.LingXiaProxy) === null || _c === void 0 ? void 0 : _c.postMessage)) {
511
513
  window.LingXiaProxy.postMessage(messageString);
512
514
  return;
@@ -693,8 +695,35 @@ function createChannel(id, sendFn, closeFn) {
693
695
  sendFn(payload, outboundSeq++);
694
696
  },
695
697
  on: function (event, listener) {
696
- if (event === "data")
698
+ var e_9, _a;
699
+ if (event === "data") {
697
700
  listeners.data.add(listener);
701
+ // Flush data buffered before this listener attached. The host can send
702
+ // ch.data immediately after the open ack, before the consumer (e.g. a
703
+ // wrapped channel's onMessage) attaches its listener; without this those
704
+ // early events would sit in pendingData and never reach the listener.
705
+ if (pendingData.length > 0) {
706
+ var buffered = pendingData.splice(0);
707
+ try {
708
+ for (var buffered_1 = __values(buffered), buffered_1_1 = buffered_1.next(); !buffered_1_1.done; buffered_1_1 = buffered_1.next()) {
709
+ var payload = buffered_1_1.value;
710
+ try {
711
+ listener(payload);
712
+ }
713
+ catch (e) {
714
+ warn("Channel listener failed:", e);
715
+ }
716
+ }
717
+ }
718
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
719
+ finally {
720
+ try {
721
+ if (buffered_1_1 && !buffered_1_1.done && (_a = buffered_1.return)) _a.call(buffered_1);
722
+ }
723
+ finally { if (e_9) throw e_9.error; }
724
+ }
725
+ }
726
+ }
698
727
  if (event === "close")
699
728
  listeners.close.add(listener);
700
729
  if (event === "error")
@@ -729,7 +758,7 @@ function createChannel(id, sendFn, closeFn) {
729
758
  channel._emitClose(code, reason);
730
759
  },
731
760
  _a._emitData = function (payload) {
732
- var e_9, _a;
761
+ var e_10, _a;
733
762
  if (!open)
734
763
  return;
735
764
  if (pendingReads.length > 0) {
@@ -749,16 +778,16 @@ function createChannel(id, sendFn, closeFn) {
749
778
  }
750
779
  }
751
780
  }
752
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
781
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
753
782
  finally {
754
783
  try {
755
784
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
756
785
  }
757
- finally { if (e_9) throw e_9.error; }
786
+ finally { if (e_10) throw e_10.error; }
758
787
  }
759
788
  },
760
789
  _a._emitClose = function (code, reason) {
761
- var e_10, _a;
790
+ var e_11, _a;
762
791
  closed = true;
763
792
  while (pendingReads.length > 0) {
764
793
  pendingReads.shift().resolve({ done: true, value: undefined });
@@ -774,16 +803,16 @@ function createChannel(id, sendFn, closeFn) {
774
803
  }
775
804
  }
776
805
  }
777
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
806
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
778
807
  finally {
779
808
  try {
780
809
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
781
810
  }
782
- finally { if (e_10) throw e_10.error; }
811
+ finally { if (e_11) throw e_11.error; }
783
812
  }
784
813
  },
785
814
  _a._reject = function (err) {
786
- var e_11, _a;
815
+ var e_12, _a;
787
816
  closed = true;
788
817
  while (pendingReads.length > 0) {
789
818
  pendingReads.shift().reject(err);
@@ -799,12 +828,12 @@ function createChannel(id, sendFn, closeFn) {
799
828
  }
800
829
  }
801
830
  }
802
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
831
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
803
832
  finally {
804
833
  try {
805
834
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
806
835
  }
807
- finally { if (e_11) throw e_11.error; }
836
+ finally { if (e_12) throw e_12.error; }
808
837
  }
809
838
  },
810
839
  _a._markOpen = function () {
@@ -851,7 +880,8 @@ function isTransportReady() {
851
880
  if (useAppleDownstreamTransport())
852
881
  return appleDownstreamConnected;
853
882
  return (communicationMethod === "webkit" ||
854
- communicationMethod === JS_INTERFACE_TYPE);
883
+ communicationMethod === JS_INTERFACE_TYPE ||
884
+ communicationMethod === WEB_MESSAGE_TYPE);
855
885
  }
856
886
  function canSendAppMessages() {
857
887
  return isTransportReady() && handshakeDone;
@@ -1000,7 +1030,7 @@ function startHandshake() {
1000
1030
  helloSent = true;
1001
1031
  postToNative(hello);
1002
1032
  handshakeTimer = setTimeout(function () {
1003
- var e_12, _a;
1033
+ var e_13, _a;
1004
1034
  if (handshakeDone)
1005
1035
  return;
1006
1036
  handshakeRetryCount++;
@@ -1032,12 +1062,12 @@ function startHandshake() {
1032
1062
  });
1033
1063
  }
1034
1064
  }
1035
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
1065
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
1036
1066
  finally {
1037
1067
  try {
1038
1068
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1039
1069
  }
1040
- finally { if (e_12) throw e_12.error; }
1070
+ finally { if (e_13) throw e_13.error; }
1041
1071
  }
1042
1072
  }
1043
1073
  }, HANDSHAKE_TIMEOUT_MS);
@@ -1088,7 +1118,7 @@ function getContainerAndKey(root, pointer, autoCreate) {
1088
1118
  return { container: current, key: segments[segments.length - 1] };
1089
1119
  }
1090
1120
  function applyJsonPatch(target, ops) {
1091
- var e_13, _a, e_14, _b;
1121
+ var e_14, _a, e_15, _b;
1092
1122
  try {
1093
1123
  for (var ops_1 = __values(ops), ops_1_1 = ops_1.next(); !ops_1_1.done; ops_1_1 = ops_1.next()) {
1094
1124
  var op = ops_1_1.value;
@@ -1096,17 +1126,17 @@ function applyJsonPatch(target, ops) {
1096
1126
  var _c = getContainerAndKey(target, op.path, autoCreate), container = _c.container, key = _c.key;
1097
1127
  if (key === "$root") {
1098
1128
  try {
1099
- for (var _d = (e_14 = void 0, __values(Object.keys(target))), _e = _d.next(); !_e.done; _e = _d.next()) {
1129
+ for (var _d = (e_15 = void 0, __values(Object.keys(target))), _e = _d.next(); !_e.done; _e = _d.next()) {
1100
1130
  var k = _e.value;
1101
1131
  delete target[k];
1102
1132
  }
1103
1133
  }
1104
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
1134
+ catch (e_15_1) { e_15 = { error: e_15_1 }; }
1105
1135
  finally {
1106
1136
  try {
1107
1137
  if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
1108
1138
  }
1109
- finally { if (e_14) throw e_14.error; }
1139
+ finally { if (e_15) throw e_15.error; }
1110
1140
  }
1111
1141
  if (op.op !== "remove") {
1112
1142
  var v = op.value;
@@ -1136,12 +1166,12 @@ function applyJsonPatch(target, ops) {
1136
1166
  obj[key] = op.value;
1137
1167
  }
1138
1168
  }
1139
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
1169
+ catch (e_14_1) { e_14 = { error: e_14_1 }; }
1140
1170
  finally {
1141
1171
  try {
1142
1172
  if (ops_1_1 && !ops_1_1.done && (_a = ops_1.return)) _a.call(ops_1);
1143
1173
  }
1144
- finally { if (e_13) throw e_13.error; }
1174
+ finally { if (e_14) throw e_14.error; }
1145
1175
  }
1146
1176
  }
1147
1177
  function notifyStateSubscribers(initial) {
@@ -1199,7 +1229,7 @@ function applySnapshotFromResult(result) {
1199
1229
  return true;
1200
1230
  }
1201
1231
  function handleIncomingMessage(msg) {
1202
- var e_15, _a;
1232
+ var e_16, _a;
1203
1233
  var _b, _c;
1204
1234
  // Handle native component events (from Android NativeBridge.sendEventToView)
1205
1235
  if (msg && typeof msg === "object") {
@@ -1246,12 +1276,12 @@ function handleIncomingMessage(msg) {
1246
1276
  hostMethodKinds[k] = v;
1247
1277
  }
1248
1278
  }
1249
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
1279
+ catch (e_16_1) { e_16 = { error: e_16_1 }; }
1250
1280
  finally {
1251
1281
  try {
1252
1282
  if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
1253
1283
  }
1254
- finally { if (e_15) throw e_15.error; }
1284
+ finally { if (e_16) throw e_16.error; }
1255
1285
  }
1256
1286
  }
1257
1287
  if (isDebugEnabled("proto"))
@@ -1720,6 +1750,7 @@ export var LingXiaBridge = {
1720
1750
  isIOS: isIOS,
1721
1751
  isAndroid: isAndroid,
1722
1752
  isMacOS: isMacOS,
1753
+ isWindows: isWindows,
1723
1754
  isDesktop: isDesktop,
1724
1755
  getOS: getPlatformOS,
1725
1756
  },
@@ -1778,23 +1809,23 @@ function wrapNativeStream(handle) {
1778
1809
  var eventListeners = new Set();
1779
1810
  var errorListeners = new Set();
1780
1811
  handle.on("data", function (event) {
1781
- var e_16, _a;
1812
+ var e_17, _a;
1782
1813
  try {
1783
1814
  for (var eventListeners_1 = __values(eventListeners), eventListeners_1_1 = eventListeners_1.next(); !eventListeners_1_1.done; eventListeners_1_1 = eventListeners_1.next()) {
1784
1815
  var listener = eventListeners_1_1.value;
1785
1816
  listener(event);
1786
1817
  }
1787
1818
  }
1788
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
1819
+ catch (e_17_1) { e_17 = { error: e_17_1 }; }
1789
1820
  finally {
1790
1821
  try {
1791
1822
  if (eventListeners_1_1 && !eventListeners_1_1.done && (_a = eventListeners_1.return)) _a.call(eventListeners_1);
1792
1823
  }
1793
- finally { if (e_16) throw e_16.error; }
1824
+ finally { if (e_17) throw e_17.error; }
1794
1825
  }
1795
1826
  });
1796
1827
  handle.on("error", function (error) {
1797
- var e_17, _a;
1828
+ var e_18, _a;
1798
1829
  var nativeError = toNativeError(error);
1799
1830
  try {
1800
1831
  for (var errorListeners_1 = __values(errorListeners), errorListeners_1_1 = errorListeners_1.next(); !errorListeners_1_1.done; errorListeners_1_1 = errorListeners_1.next()) {
@@ -1802,12 +1833,12 @@ function wrapNativeStream(handle) {
1802
1833
  listener(nativeError);
1803
1834
  }
1804
1835
  }
1805
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
1836
+ catch (e_18_1) { e_18 = { error: e_18_1 }; }
1806
1837
  finally {
1807
1838
  try {
1808
1839
  if (errorListeners_1_1 && !errorListeners_1_1.done && (_a = errorListeners_1.return)) _a.call(errorListeners_1);
1809
1840
  }
1810
- finally { if (e_17) throw e_17.error; }
1841
+ finally { if (e_18) throw e_18.error; }
1811
1842
  }
1812
1843
  });
1813
1844
  return {
@@ -1833,23 +1864,23 @@ function wrapNativeChannel(channel) {
1833
1864
  var messageListeners = new Set();
1834
1865
  var closeListeners = new Set();
1835
1866
  channel.on("data", function (message) {
1836
- var e_18, _a;
1867
+ var e_19, _a;
1837
1868
  try {
1838
1869
  for (var messageListeners_1 = __values(messageListeners), messageListeners_1_1 = messageListeners_1.next(); !messageListeners_1_1.done; messageListeners_1_1 = messageListeners_1.next()) {
1839
1870
  var listener = messageListeners_1_1.value;
1840
1871
  listener(message);
1841
1872
  }
1842
1873
  }
1843
- catch (e_18_1) { e_18 = { error: e_18_1 }; }
1874
+ catch (e_19_1) { e_19 = { error: e_19_1 }; }
1844
1875
  finally {
1845
1876
  try {
1846
1877
  if (messageListeners_1_1 && !messageListeners_1_1.done && (_a = messageListeners_1.return)) _a.call(messageListeners_1);
1847
1878
  }
1848
- finally { if (e_18) throw e_18.error; }
1879
+ finally { if (e_19) throw e_19.error; }
1849
1880
  }
1850
1881
  });
1851
1882
  channel.on("close", function (code, reason) {
1852
- var e_19, _a;
1883
+ var e_20, _a;
1853
1884
  var event = { code: code, reason: reason };
1854
1885
  try {
1855
1886
  for (var closeListeners_1 = __values(closeListeners), closeListeners_1_1 = closeListeners_1.next(); !closeListeners_1_1.done; closeListeners_1_1 = closeListeners_1.next()) {
@@ -1857,12 +1888,12 @@ function wrapNativeChannel(channel) {
1857
1888
  listener(event);
1858
1889
  }
1859
1890
  }
1860
- catch (e_19_1) { e_19 = { error: e_19_1 }; }
1891
+ catch (e_20_1) { e_20 = { error: e_20_1 }; }
1861
1892
  finally {
1862
1893
  try {
1863
1894
  if (closeListeners_1_1 && !closeListeners_1_1.done && (_a = closeListeners_1.return)) _a.call(closeListeners_1);
1864
1895
  }
1865
- finally { if (e_19) throw e_19.error; }
1896
+ finally { if (e_20) throw e_20.error; }
1866
1897
  }
1867
1898
  });
1868
1899
  return {
@@ -1915,7 +1946,8 @@ export function initBridge() {
1915
1946
  getMessagePort().catch(function (e) { return warn("Port init failed:", e); });
1916
1947
  }
1917
1948
  else if (communicationMethod === "webkit" ||
1918
- communicationMethod === JS_INTERFACE_TYPE) {
1949
+ communicationMethod === JS_INTERFACE_TYPE ||
1950
+ communicationMethod === WEB_MESSAGE_TYPE) {
1919
1951
  startHandshake();
1920
1952
  }
1921
1953
  else {
@@ -14,8 +14,11 @@ export function isAndroid() {
14
14
  export function isMacOS() {
15
15
  return BRIDGE_CONFIG.os === 'macOS';
16
16
  }
17
+ export function isWindows() {
18
+ return BRIDGE_CONFIG.os === 'Windows';
19
+ }
17
20
  export function isDesktop() {
18
- return isMacOS();
21
+ return isMacOS() || isWindows();
19
22
  }
20
23
  export function getCommunicationMethod() {
21
24
  var _a, _b;
@@ -23,6 +26,8 @@ export function getCommunicationMethod() {
23
26
  return 'webkit';
24
27
  if (BRIDGE_CONFIG.os === 'Harmony')
25
28
  return 'messageport';
29
+ if (BRIDGE_CONFIG.os === 'Windows')
30
+ return 'webmessage';
26
31
  if (BRIDGE_CONFIG.os === 'Android') {
27
32
  if ((_b = (_a = window.LingXiaProxy) === null || _a === void 0 ? void 0 : _a.supportsMessagePort) === null || _b === void 0 ? void 0 : _b.call(_a))
28
33
  return 'messageport';
@@ -1,5 +1,5 @@
1
1
  import type { BridgeConfig } from './types';
2
- export type CommunicationMethod = 'messageport' | 'jsinterface' | 'webkit' | 'unknown';
2
+ export type CommunicationMethod = 'messageport' | 'jsinterface' | 'webmessage' | 'webkit' | 'unknown';
3
3
  export type PlatformOS = NonNullable<BridgeConfig['os']> | 'unknown';
4
4
  export declare const BRIDGE_CONFIG: BridgeConfig;
5
5
  export declare function getPlatformOS(): PlatformOS;
@@ -7,5 +7,6 @@ export declare function isHarmony(): boolean;
7
7
  export declare function isIOS(): boolean;
8
8
  export declare function isAndroid(): boolean;
9
9
  export declare function isMacOS(): boolean;
10
+ export declare function isWindows(): boolean;
10
11
  export declare function isDesktop(): boolean;
11
12
  export declare function getCommunicationMethod(): CommunicationMethod;
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export interface BridgeConfig {
2
- os?: 'Harmony' | 'iOS' | 'Android' | 'macOS';
2
+ os?: 'Harmony' | 'iOS' | 'Android' | 'macOS' | 'Windows';
3
3
  nonce?: string;
4
4
  appleDownstreamURL?: string;
5
5
  }
@@ -159,6 +159,7 @@ export interface LingXiaBridgeInterface {
159
159
  isIOS(): boolean;
160
160
  isAndroid(): boolean;
161
161
  isMacOS(): boolean;
162
+ isWindows(): boolean;
162
163
  isDesktop(): boolean;
163
164
  getOS(): string;
164
165
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lingxia/bridge",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "private": false,
5
5
  "description": "LingXia Web Runtime - Bridge, boot, and error handling for WebView",
6
6
  "repository": {
@@ -40,7 +40,7 @@
40
40
  "build:modules:es5": "tsc -p tsconfig.modules.legacy.json",
41
41
  "build:types": "tsc -p tsconfig.json --emitDeclarationOnly",
42
42
  "dev": "rolldown -c -w",
43
- "clean": "rm -rf dist",
43
+ "clean": "node -e \"fs.rmSync('dist',{recursive:true,force:true})\"",
44
44
  "prepublishOnly": "npm run build"
45
45
  },
46
46
  "devDependencies": {