@quicktvui/naddons 1.0.0-rc.2 → 1.0.0-rc.3
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.
- package/dist/naddons.cjs.js +1 -1
- package/dist/naddons.es.js +306 -274
- package/package.json +1 -1
package/dist/naddons.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),T=require("@extscreen/es3-vue"),V=require("@extscreen/es3-core"),be="QtGridTabs",_=a.defineComponent({__name:"GridTabs",props:{protocolVersion:{},pageSpec:{},tabsData:{},actionPayload:{}},emits:["onTabSelected","onTabClick","onTabNeedsData","onLoadMore","onScroll","onScrollStateChanged","onItemPresence","onTabFocused","onItemClick","onItemLongClick","onItemFocused","onProtocolMismatch"],setup(e,{expose:l}){const d=a.ref(),c=O(),v=be+"_Plugin",r=(c.isPluginActive?v:be).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value},dispatchAction:(...i)=>{var g,p;const u=((p=(g=d.value)==null?void 0:g.getNativeNode)==null?void 0:p.call(g))||d.value;if(u)if(i.length>0){let k=i[0];typeof k=="object"&&(k=JSON.stringify(k)),T.Native.callUIFunction(u,"dispatchAction",[k])}else T.Native.callUIFunction(u,"dispatchAction",i)},scrollToTop:(...i)=>{var g,p;const u=((p=(g=d.value)==null?void 0:g.getNativeNode)==null?void 0:p.call(g))||d.value;u&&T.Native.callUIFunction(u,"scrollToTop",i)},getFocusState:(...i)=>{var g,p;const u=((p=(g=d.value)==null?void 0:g.getNativeNode)==null?void 0:p.call(g))||d.value;u&&T.Native.callUIFunction(u,"getFocusState",i)},getItemRect:(...i)=>{var g,p;const u=((p=(g=d.value)==null?void 0:g.getNativeNode)==null?void 0:p.call(g))||d.value;u&&T.Native.callUIFunction(u,"getItemRect",i)},requestFocus:(...i)=>{var g,p;const u=((p=(g=d.value)==null?void 0:g.getNativeNode)==null?void 0:p.call(g))||d.value;u&&T.Native.callUIFunction(u,"requestFocus",i)}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,protocolVersion:e.protocolVersion,pageSpec:e.pageSpec,tabsData:e.tabsData,actionPayload:e.actionPayload,onOnTabSelected:u[0]||(u[0]=g=>i.$emit("onTabSelected",g.nativeEvent)),onOnTabClick:u[1]||(u[1]=g=>i.$emit("onTabClick",g.nativeEvent)),onOnTabNeedsData:u[2]||(u[2]=g=>i.$emit("onTabNeedsData",g.nativeEvent)),onOnLoadMore:u[3]||(u[3]=g=>i.$emit("onLoadMore",g.nativeEvent)),onOnScroll:u[4]||(u[4]=g=>i.$emit("onScroll",g.nativeEvent)),onOnScrollStateChanged:u[5]||(u[5]=g=>i.$emit("onScrollStateChanged",g.nativeEvent)),onOnItemPresence:u[6]||(u[6]=g=>i.$emit("onItemPresence",g.nativeEvent)),onOnTabFocused:u[7]||(u[7]=g=>i.$emit("onTabFocused",g.nativeEvent)),onOnItemClick:u[8]||(u[8]=g=>i.$emit("onItemClick",g.nativeEvent)),onOnItemLongClick:u[9]||(u[9]=g=>i.$emit("onItemLongClick",g.nativeEvent)),onOnItemFocused:u[10]||(u[10]=g=>i.$emit("onItemFocused",g.nativeEvent)),onOnProtocolMismatch:u[11]||(u[11]=g=>i.$emit("onProtocolMismatch",g.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["protocolVersion","pageSpec","tabsData","actionPayload"]))}});let U;var Pe;try{const e=require("@extscreen/es3-vue");U=e.registerElement||((Pe=e.default)==null?void 0:Pe.registerElement)}catch{}const Qe={install:e=>{if(!globalThis.__QtGridTabs_registered)if(U){const l=(d,c)=>{U(d,{component:{name:c?"QtGridTabs_Plugin":"QtGridTabs",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-grid-tabs",!1),l("qt-grid-tabs-plugin",!0),l("QtGridTabs",!1),l("QtGridTabs_Plugin",!0),l("gt-tabs",!1),l("gt-tabs-plugin",!0),globalThis.__QtGridTabs_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtGridTabs")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("GridTabs",_),e.component("qt-grid-tabs",_),e.component("gt-tabs",_)}};function tt(e,l){const d=a.ref(""),c=l?JSON.parse(JSON.stringify(l)):{},v=a.shallowRef([]),m=a.shallowRef([]);let r=!1,s=!1;const i="__virtual_single_tab__";let u="",g=!1;const p=a.ref({}),k=o=>{const t=Array.isArray(o)?o:[o];if(s&&e.value){if(typeof e.value.dispatchAction=="function"){console.log("[useGridTabs] Calling Wrapper dispatchAction directly"),e.value.dispatchAction(t);return}let n=e.value;typeof e.value.getNativeNode=="function"?n=e.value.getNativeNode()||e.value:e.value.nativeRef&&(n=e.value.nativeRef),n?(console.log("[useGridTabs] Calling Native callUIFunction dispatchAction fallback"),T.Native.callUIFunction(n,"dispatchAction",[JSON.stringify(t)])):console.warn("[useGridTabs] Native target is null or undefined, cannot call dispatchAction")}},q=(o,t)=>{if(!o)return!1;let n=!0;return o.id||(console.error(`[useGridTabs] ❌ 数据格式错误 (${t}): 卡片缺失必填字段 'id'。每个卡片必须有唯一标识才能进行后续更新!`,o),n=!1),o.viewType||(console.error(`[useGridTabs] ❌ 数据格式错误 (${t}): 卡片缺失必填字段 'viewType' (id: ${o.id||"未知"})。必须指定 Native 注册的视图类型或 Portal 标识!`,o),n=!1),n},B=(o,t)=>{if(!o)return!1;let n=!0;return o.tabId||(console.error(`[useGridTabs] ❌ 数据格式错误 (${t}): Tab 缺失必填字段 'tabId'。每个 Tab 必须有唯一标识!`,o),n=!1),(o.title===void 0||o.title===null)&&console.warn(`[useGridTabs] ⚠️ 数据格式警告 (${t}): Tab 缺失 'title' 字段 (tabId: ${o.tabId||"未知"}),导航栏可能显示为空。`,o),n},D=(o,t)=>{if(!o||o.length===0)return;R.clear();const n=o[0].hasOwnProperty("tabId")||o[0].hasOwnProperty("items")&&Array.isArray(o[0].items);r=t==="1d",t==="1d"&&n?console.error("[useGridTabs] ❌ 赋值错误: 你正在向 `items.value` (一维瀑布流) 赋值二维 Tabs 数据结构!请改用 `tabs.value = ...`"):t==="2d"&&!n&&console.error("[useGridTabs] ❌ 赋值错误: 你正在向 `tabs.value` (二维导航) 赋值一维卡片列表数据结构!请改用 `items.value = ...`"),t==="1d"?o.forEach((f,b)=>q(f,`items.value[${b}]`)):o.forEach((f,b)=>{B(f,`tabs.value[${b}]`),f.items&&Array.isArray(f.items)&&f.items.forEach((h,y)=>q(h,`tabs.value[${b}].items[${y}]`))}),s=!0,C()},R=new Set,C=(o="unknown")=>{if(!s){console.warn("[useGridTabs] triggerRootUpdate skipped because isInitialized is false");return}let t={protocolVersion:"1.28.0",gridBasis:(c==null?void 0:c.gridBasis)??30,unitType:(c==null?void 0:c.unitType)??"px",contentConfig:(c==null?void 0:c.contentConfig)??(c==null?void 0:c.layoutConfig)??{box:{padding:[0,60,60,60]},navContentGapNormal:0,itemGap:24},navConfig:(c==null?void 0:c.navConfig)??{dock:"left",mode:"fixed",renderType:"smart-hybrid",box:{size:[200,0]},expandedBox:{size:[300,0]}},cacheConfig:(c==null?void 0:c.cacheConfig)??{offscreenPageLimit:1,prefetchOffset:2,preLoadEnabled:!1,strategy:"data_priority"},animationConfig:(c==null?void 0:c.animationConfig)??{duration:300,easing:"ease-out"},interactionStrategy:(c==null?void 0:c.interactionStrategy)??{defaultFocus:"nav",interceptBack:!0,backMode:"home-first",autoScrollToTop:!0,edgeScrollProtection:.5},focusConfig:(c==null?void 0:c.focusConfig)??{boundaryLock:{left:!1,right:!1,top:!1,bottom:!1}},themeConfig:c==null?void 0:c.themeConfig,referenceResolution:(c==null?void 0:c.referenceResolution)??{w:1920,h:1080}},n=[];r?(t.navConfig={...t.navConfig,renderType:"none"},n=[{tabId:i,title:"Virtual Tab",hidden:!0,items:m.value}]):n=v.value;const f=JSON.stringify({page_spec:t,tabs:n});if(d.value==="")console.log(`[useGridTabs] triggerRootUpdate: Initializing tabsDataStr (length=${f.length})`),d.value=f,u=f;else{if(u===f){console.log("[useGridTabs] triggerRootUpdate: Data unchanged, skipping RELOAD_TABS");return}console.log(`[useGridTabs] triggerRootUpdate: Sending RELOAD_TABS action directly to Native (length=${f.length})`),d.value=f,u=f,k({op:"RELOAD_TABS",payload:{pageSpec:t,page_spec:t,tabs:n}})}},I=o=>{if(!o||typeof o!="object"||o.__isGridTabsProxy)return o;o.content&&typeof o.content=="object"&&!o.content.__isGridTabsProxy&&(o.content=new Proxy(o.content,{set(n,f,b,h){const y=Reflect.set(n,f,b,h);return o.id&&s&&k({op:"UPDATE_ITEM",itemId:o.id,payload:o}),y}}),Object.defineProperty(o.content,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(o.content,"__v_skip",{value:!0,enumerable:!1})),o.subItems&&Array.isArray(o.subItems)&&!o.subItems.__isGridTabsProxy&&(o.subItems=P(o.subItems,o.id),Object.defineProperty(o.subItems,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(o.subItems,"__v_skip",{value:!0,enumerable:!1}));const t=new Proxy(o,{set(n,f,b,h){const y=Reflect.set(n,f,b,h);return n.id&&s&&!g&&k({op:"UPDATE_ITEM",itemId:n.id,payload:n}),y}});return Object.defineProperty(t,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(t,"__v_skip",{value:!0,enumerable:!1}),t},P=(o,t)=>{for(let n=0;n<o.length;n++)o[n]=I(o[n]);return new Proxy(o,{get(n,f,b){return f==="push"?(...h)=>{h.forEach(($,M)=>q($,`push(${M})`)),s||console.error("[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时调用了 push()。请先对 items.value 或 tabs.value 进行全量赋值!");const y=h.map($=>I($)),N=Array.prototype.push.apply(n,y);return g||k({op:"APPEND_SUB_ITEMS",itemId:t,payload:{subItems:y}}),N}:f==="unshift"?(...h)=>{h.forEach(($,M)=>q($,`unshift(${M})`)),s||console.error("[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时调用了 unshift()。请先对 items.value 或 tabs.value 进行全量赋值!");const y=h.map($=>I($)),N=Array.prototype.unshift.apply(n,y);return s&&y.length>0&&!g&&k({op:"PREPEND_SUB_ITEMS",itemId:t,payload:{subItems:y}}),N}:f==="splice"?(...h)=>{const y=h.length>=2&&h[0]===0&&h[1]===n.length,N=Array.prototype.splice.apply(n,h);return s&&y&&t!==i?g||k({op:"CLEAR_SUB_ITEMS",itemId:t}):s&&(g||C("items array spliced")),N}:Reflect.get(n,f,b)},set(n,f,b,h){if(f!=="length"&&!isNaN(Number(f))){s||console.error(`[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时直接修改了索引 [${String(f)}]。请先对 items.value 或 tabs.value 进行全量赋值!`),q(b,`索引赋值 [${String(f)}]`);const y=I(b),N=Reflect.set(n,f,y,h);return y&&y.id&&!g&&k({op:"UPDATE_ITEM",itemId:y.id,payload:y}),N}return Reflect.set(n,f,b,h)}})},E=o=>(o.items&&Array.isArray(o.items)&&!o.items.__isGridTabsProxy&&(o.items=P(o.items,o.tabId),Object.defineProperty(o.items,"__isGridTabsProxy",{value:!0,enumerable:!1})),new Proxy(o,{set(t,n,f,b){if(n==="items"){let y=f;return Array.isArray(f)&&!f.__isGridTabsProxy&&(y=P(f,t.tabId),Object.defineProperty(y,"__isGridTabsProxy",{value:!0,enumerable:!1})),Reflect.set(t,n,y,b)}else if(n==="loadState"){const y=Reflect.set(t,n,f,b);return s&&t.tabId&&!g&&k({op:"UPDATE_TAB_STATE",itemId:t.tabId,payload:{loadState:f}}),y}return Reflect.set(t,n,f,b)}})),w=o=>{const t=o.map(n=>E(n));return new Proxy(t,{set(n,f,b,h){if(f!=="length"&&!isNaN(Number(f))){let y=b;b.__isGridTabsProxy||(y=E(b),Object.defineProperty(y,"__isGridTabsProxy",{value:!0,enumerable:!1}));const N=Reflect.set(n,f,y,h);return C(),N}return Reflect.set(n,f,b,h)}})};a.watch(v,(o,t)=>{if(console.log("[useGridTabs] watch(tabs) triggered:",{newTabs:o,isInitialized:s}),!o||o.length===0){d.value="",u="",s=!1;return}if(o.__isGridTabsProxy)console.log("[useGridTabs] newTabs is ALREADY a proxy, triggering root update"),C();else{console.log("[useGridTabs] newTabs is NOT a proxy, performing full deduceModeAndInitialize & wrapping");const n=w(o);Object.defineProperty(n,"__isGridTabsProxy",{value:!0,enumerable:!1}),D(n,"2d"),v.value=n}},{flush:"sync",deep:!1}),a.watch(m,(o,t)=>{if(console.log("[useGridTabs] watch(items) triggered:",{newItems:o,isInitialized:s}),!o||o.length===0){d.value="",u="",s=!1;return}if(o.__isGridTabsProxy)console.log("[useGridTabs] newItems is ALREADY a proxy, triggering root update"),C();else{console.log("[useGridTabs] newItems is NOT a proxy, performing full deduceModeAndInitialize & wrapping");const n=P(o,i);Object.defineProperty(n,"__isGridTabsProxy",{value:!0,enumerable:!1}),D(n,"1d"),m.value=n}},{flush:"sync",deep:!1});const S={},A=()=>{console.log("[useGridTabs] resetInitialization called manually"),s=!1,R.clear();for(const o in S)delete S[o]},Q=o=>{if(!o||o.length===0){d.value="",s=!1;return}o[0].hasOwnProperty("tabId")||o[0].hasOwnProperty("items")&&Array.isArray(o[0].items)?v.value=o:m.value=o},x=o=>{p.value=o},z=a.computed(()=>({tabsData:d.value,onTabNeedsData:async(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),!p.value.onTabNeedsData)return;const{tabId:n,index:f,reason:b}=t;if(R.has(n)){console.log(`[useGridTabs] onTabNeedsData SKIP: tabId=${n} 已经发起过请求,防止死循环`);return}R.add(n);try{const h=await p.value.onTabNeedsData(n,f,b);if(h&&Array.isArray(h))if(S[n]=1,h.length>0){const y=v.value.find(N=>N.tabId===n);y&&(y.items?y.items.length>0&&y.items.splice(0,y.items.length):y.items=[],y.items.push(...h),y.loadState="ready",k({op:"UPDATE_TAB_STATE",itemId:n,payload:{loadState:"ready"}}))}else console.warn(`[useGridTabs] ⚠️ 警告: onTabNeedsData(tabId="${n}") 返回了空数组 []!`),console.warn("👉 如果你已经在此函数内手动调用了 push() 来追加数据,请在最后 return null 或 undefined。"),console.warn("👉 如果该 Tab 确实没有数据,返回 [] 可能会导致底层的 Header 等已有元素被清空,请注意检查。"),console.warn("👉 框架已为您拦截此次空数组覆盖,保留了当前的 DOM 结构。")}catch(h){console.error("[useGridTabs] onTabNeedsData 执行失败:",h),R.delete(n)}},onLoadMore:async(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),!p.value.onLoadMore)return;const{tabId:n,itemId:f}=t,h=(S[n]||1)+1;console.log(`[useGridTabs] 拦截到底层 onLoadMore,强行接管页码: tabId=${n}, pageNo=${h}`);try{const y=await p.value.onLoadMore(n,h,f);if(y&&Array.isArray(y))if(y.length>0)if(S[n]=h,r)m.value.push(...y);else{const N=v.value.find($=>$.tabId===n);N&&N.items&&N.items.push(...y)}else console.warn(`[useGridTabs] ⚠️ 警告: onLoadMore(tabId="${n}", pageNo="${h}") 返回了空数组 []!`),console.warn('👉 如果这是你的最后一页数据,推荐在卡片列表中追加一个 type="no_more" 的 footer 卡片,而不是仅仅返回空。'),console.warn("👉 框架已忽略本次空数据追加,且不会自增页码。")}catch(y){console.error("[useGridTabs] onLoadMore 业务层请求失败:",y)}},onItemPresence:(...o)=>{let t=o[0];if(console.log("[useGridTabs] ⚡️ bindings caught onItemPresence:",t),p.value.onItemPresence)try{let n=typeof t=="string"?t:(t==null?void 0:t.nativeEvent)||t;n&&typeof n.data=="string"&&(n=n.data);const f=typeof n=="string"?JSON.parse(n):n;f&&f.type==="VIEW_PRESENCE_BATCH"&&Array.isArray(f.payload)?f.payload.forEach(b=>{b.itemId&&typeof b.itemId=="string"&&b.itemId.startsWith("fallback_pos_")&&console.warn(`[useGridTabs] ⚠️ 警告:检测到列表项曝光 (index=${b.index}),但未配置 itemId。请检查传入的 items 数组,务必为每个数据项指定唯一的 itemId,否则底层无法准确进行去重与曝光上报。`),p.value.onItemPresence(b)}):p.value.onItemPresence(f)}catch(n){console.error("[useGridTabs] Failed to parse onItemPresence event payload:",n),p.value.onItemPresence(t)}},onTabSelected:(...o)=>{let t=o[0];t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onTabSelected&&p.value.onTabSelected(t)},onTabClick:(...o)=>{let t=o[0];t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onTabClick&&p.value.onTabClick(t)},onItemClick:(...o)=>{let t=o[0];if(console.log("[useGridTabs] RAW onItemClick intercepted from Native:",t),t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onItemClick)try{let n=typeof t=="string"?t:(t==null?void 0:t.data)||t;const f=typeof n=="string"?JSON.parse(n):n;p.value.onItemClick(f)}catch(n){console.error("[useGridTabs] Failed to parse onItemClick event payload:",n),p.value.onItemClick(t)}else console.warn("[useGridTabs] onItemClick triggered but NO callback registered in callbacksRef!")},onItemLongClick:(...o)=>{let t=o[0];if(console.log("[useGridTabs] RAW onItemLongClick intercepted from Native:",t),typeof t=="number"&&o.length>=3&&typeof o[1]=="string"&&(t=o[2]),t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onItemLongClick)try{let n=typeof t=="string"?t:(t==null?void 0:t.data)||t;const f=typeof n=="string"?JSON.parse(n):n;p.value.onItemLongClick(f)}catch(n){console.error("[useGridTabs] Failed to parse onItemLongClick event payload:",n),p.value.onItemLongClick(t)}},onItemFocused:(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onItemFocused)try{let n=typeof t=="string"?t:(t==null?void 0:t.data)||t;const f=typeof n=="string"?JSON.parse(n):n;p.value.onItemFocused(f)}catch(n){console.error("[useGridTabs] Failed to parse onItemFocused event payload:",n),p.value.onItemFocused(t)}},onTabFocused:(...o)=>{let t=o[0];t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onTabFocused&&p.value.onTabFocused(t)},onScroll:(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onScroll)try{const n=(t==null?void 0:t.data)||t;p.value.onScroll(n)}catch{p.value.onScroll(t)}},onScrollStateChanged:(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onScrollStateChanged)try{const n=(t==null?void 0:t.data)||t;p.value.onScrollStateChanged(n)}catch{p.value.onScrollStateChanged(t)}}}));return{tabsDataStr:d,bindings:z,tabs:v,items:m,initData:Q,setCallbacks:x,updateItem:(o,t)=>{if(!s){console.error("[useGridTabs] ❌ 时机错误: 尚未初始化数据,无法调用 updateItem");return}k({op:"UPDATE_ITEM",itemId:o,payload:t}),g=!0;try{if(r){const n=m.value.find(f=>f.id===o);n&&Object.assign(n,t)}else for(const n of v.value)if(n.items){const f=n.items.find(b=>b.id===o);if(f){Object.assign(f,t);break}}}finally{g=!1}},deleteItem:(o,t=!0)=>{if(s){k({op:"DELETE_ITEM",itemId:o,payload:{animated:t}}),g=!0;try{if(r){const n=m.value.findIndex(f=>f.id===o);n!==-1&&m.value.splice(n,1)}else for(const n of v.value)if(n.items){const f=n.items.findIndex(b=>b.id===o);if(f!==-1){n.items.splice(f,1);break}}}finally{g=!1}}},prependItems:(o,t)=>{if(s){k({op:"PREPEND_SUB_ITEMS",itemId:o,payload:{subItems:t}}),g=!0;try{if(r)m.value.unshift(...t);else{const n=v.value.find(f=>f.tabId===o);n&&n.items&&n.items.unshift(...t)}}finally{g=!1}}},clearItems:o=>{if(s){k({op:"CLEAR_SUB_ITEMS",itemId:o}),g=!0;try{if(r)m.value.splice(0,m.value.length);else{const t=v.value.find(n=>n.tabId===o);t&&t.items&&t.items.splice(0,t.items.length)}}finally{g=!1}}},moveItem:(o,t,n)=>{if(s){k({op:"MOVE_ITEM",itemId:o,payload:{targetPosition:t,anchorItemId:n}}),g=!0;try{const f=b=>{const h=b.findIndex(N=>N.id===o),y=b.findIndex(N=>N.id===n);if(h!==-1&&y!==-1){const N=b.splice(h,1)[0],$=b.findIndex(et=>et.id===n),M=t==="after"?$+1:$;b.splice(M,0,N)}};if(r)f(m.value);else for(const b of v.value)b.items&&f(b.items)}finally{g=!1}}},replaceItem:(o,t)=>{if(s){k({op:"REPLACE_ITEM",itemId:o,payload:t}),g=!0;try{if(r){const n=m.value.findIndex(f=>f.id===o);n!==-1&&(m.value[n]=t)}else for(const n of v.value)if(n.items){const f=n.items.findIndex(b=>b.id===o);if(f!==-1){n.items[f]=t;break}}}finally{g=!1}}},dispatchAction:k,resetInitialization:A,getFocusState:async()=>new Promise((o,t)=>{let n=e.value;typeof e.value.getNativeNode=="function"?n=e.value.getNativeNode()||e.value:e.value.nativeRef&&(n=e.value.nativeRef),console.log("[useGridTabs] getFocusState called, nativeTarget:",n);const f=b=>{if(console.log("[useGridTabs] getFocusState callback received:",b),b&&b.isSuccess!==void 0&&b.result!==void 0){o(b.result);return}try{const h=typeof b=="string"?JSON.parse(b):b;o(h)}catch(h){t(h)}};typeof T.Native.callUIFunction=="function"?(console.log('[useGridTabs] Executing Native.callUIFunction("getFocusState") with callback as 4th arg'),T.Native.callUIFunction(n,"getFocusState",[],f)):(console.error("[useGridTabs] Native.callUIFunction is not available"),t(new Error("Native.callUIFunction is not available")))}),getItemRect:async o=>new Promise((t,n)=>{let f=e.value;typeof e.value.getNativeNode=="function"?f=e.value.getNativeNode()||e.value:e.value.nativeRef&&(f=e.value.nativeRef),console.log(`[useGridTabs] getItemRect called for itemId=${o}, nativeTarget:`,f);const b=h=>{if(console.log(`[useGridTabs] getItemRect callback received for itemId=${o}:`,h),h&&h.isSuccess!==void 0&&h.result!==void 0){t(h.result);return}try{const y=typeof h=="string"?JSON.parse(h):h;t(y)}catch(y){n(y)}};typeof T.Native.callUIFunction=="function"?(console.log('[useGridTabs] Executing Native.callUIFunction("getItemRect") with itemId and callback as 4th arg'),T.Native.callUIFunction(f,"getItemRect",[o],b)):(console.error("[useGridTabs] Native.callUIFunction is not available"),n(new Error("Native.callUIFunction is not available")))}),requestFocus:o=>{let t=e.value;typeof e.value.getNativeNode=="function"?t=e.value.getNativeNode()||e.value:e.value.nativeRef&&(t=e.value.nativeRef),T.Native.callUIFunction(t,"requestFocus",[o])},updatePageSpec:o=>{if(!s)return;const t=Object.assign({},JSON.parse(d.value).page_spec,o);o.layout&&(t.navConfig=Object.assign({},t.navConfig,o.layout)),o.navConfig&&(t.navConfig=Object.assign({},t.navConfig,o.navConfig)),o.contentConfig&&(t.contentConfig=Object.assign({},t.contentConfig,o.contentConfig)),c&&Object.assign(c,t),k({op:"RELOAD_TABS",payload:{pageSpec:t,page_spec:t,tabs:v.value}});const n=JSON.parse(d.value);n.page_spec=t,d.value=JSON.stringify(n),u=d.value},reloadAll:(o,t)=>{c&&(Object.keys(c).forEach(n=>delete c[n]),Object.assign(c,o)),v.value=t,k({op:"RELOAD_TABS",payload:{pageSpec:o,page_spec:o,tabs:t}})},scrollToTop:()=>{let o=e.value;typeof e.value.getNativeNode=="function"?o=e.value.getNativeNode()||e.value:e.value.nativeRef&&(o=e.value.nativeRef),T.Native.callUIFunction(o,"scrollToTop",[])}}}const ye="QtKeyboard",W=a.defineComponent({__name:"Keyboard",props:{backgroundColor:{},backgroundGradient:{},textColor:{},weakTextColor:{},focusBackgroundColor:{},focusTextColor:{},placeholder:{},textFullKeyboard:{},textT9Keyboard:{},keyboardType:{},textClear:{},textDelete:{},currentInput:{},autofocus:{type:Boolean},rememberKeyboardType:{type:Boolean}},emits:["onInputChanged","onKeyPressed"],setup(e,{expose:l}){const d=a.ref(),c=O(),v=ye+"_Plugin",r=(c.isPluginActive?v:ye).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value},requestFocus:(...i)=>{var g,p;const u=((p=(g=d.value)==null?void 0:g.getNativeNode)==null?void 0:p.call(g))||d.value;u&&T.Native.callUIFunction(u,"requestFocus",i)}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,backgroundColor:e.backgroundColor,backgroundGradient:e.backgroundGradient,textColor:e.textColor,weakTextColor:e.weakTextColor,focusBackgroundColor:e.focusBackgroundColor,focusTextColor:e.focusTextColor,placeholder:e.placeholder,textFullKeyboard:e.textFullKeyboard,textT9Keyboard:e.textT9Keyboard,keyboardType:e.keyboardType,textClear:e.textClear,textDelete:e.textDelete,currentInput:e.currentInput,autofocus:e.autofocus,rememberKeyboardType:e.rememberKeyboardType,onOnInputChanged:u[0]||(u[0]=g=>i.$emit("onInputChanged",g.nativeEvent)),onOnKeyPressed:u[1]||(u[1]=g=>i.$emit("onKeyPressed",g.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["backgroundColor","backgroundGradient","textColor","weakTextColor","focusBackgroundColor","focusTextColor","placeholder","textFullKeyboard","textT9Keyboard","keyboardType","textClear","textDelete","currentInput","autofocus","rememberKeyboardType"]))}});let j;var Ee;try{const e=require("@extscreen/es3-vue");j=e.registerElement||((Ee=e.default)==null?void 0:Ee.registerElement)}catch{}const Re={install:e=>{if(!globalThis.__QtKeyboard_registered)if(j){const l=(d,c)=>{j(d,{component:{name:c?"QtKeyboard_Plugin":"QtKeyboard",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-keyboard",!1),l("qt-keyboard-plugin",!0),l("QtKeyboard",!1),l("QtKeyboard_Plugin",!0),globalThis.__QtKeyboard_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtKeyboard")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("Keyboard",W),e.component("qt-keyboard",W)}},he="QtPortalPool",K=a.defineComponent({__name:"PortalPool",setup(e,{expose:l}){const d=a.ref(),c=O(),v=he+"_Plugin",r=(c.isPluginActive?v:he).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,style:{position:"absolute"},absolute:!0},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16))}});let H;var xe;try{const e=require("@extscreen/es3-vue");H=e.registerElement||((xe=e.default)==null?void 0:xe.registerElement)}catch{}const ze={install:e=>{if(!globalThis.__QtPortalPool_registered)if(H){const l=(d,c)=>{H(d,{component:{name:c?"QtPortalPool_Plugin":"QtPortalPool",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-portal-pool",!1),l("qt-portal-pool-plugin",!0),l("QtPortalPool",!1),l("QtPortalPool_Plugin",!0),globalThis.__QtPortalPool_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtPortalPool")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("PortalPool",K),e.component("qt-portal-pool",K)}},pe="QtPortalItem",Z=a.defineComponent({__name:"PortalItem",props:{portalId:{}},setup(e,{expose:l}){const d=a.ref(),c=O(),v=pe+"_Plugin",r=(c.isPluginActive?v:pe).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,style:{position:"absolute"},absolute:!0,portalId:e.portalId},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["portalId"]))}});let J;var we;try{const e=require("@extscreen/es3-vue");J=e.registerElement||((we=e.default)==null?void 0:we.registerElement)}catch{}const Fe={install:e=>{if(!globalThis.__QtPortalItem_registered)if(J){const l=(d,c)=>{J(d,{component:{name:c?"QtPortalItem_Plugin":"QtPortalItem",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-portal-item",!1),l("qt-portal-item-plugin",!0),l("QtPortalItem",!1),l("QtPortalItem_Plugin",!0),globalThis.__QtPortalItem_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtPortalItem")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("PortalItem",Z),e.component("qt-portal-item",Z)}},Ce="QtHsvBackground",X=a.defineComponent({__name:"HsvBackground",props:{hue:{},hueDuration:{}},setup(e,{expose:l}){const d=a.ref(),c=O(),v=Ce+"_Plugin",r=(c.isPluginActive?v:Ce).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,hue:e.hue,hueDuration:e.hueDuration},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["hue","hueDuration"]))}});let Y;var Ae;try{const e=require("@extscreen/es3-vue");Y=e.registerElement||((Ae=e.default)==null?void 0:Ae.registerElement)}catch{}const Me={install:e=>{if(!globalThis.__QtHsvBackground_registered)if(Y){const l=(d,c)=>{Y(d,{component:{name:c?"QtHsvBackground_Plugin":"QtHsvBackground",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-hsv-background",!1),l("qt-hsv-background-plugin",!0),l("QtHsvBackground",!1),l("QtHsvBackground_Plugin",!0),globalThis.__QtHsvBackground_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtHsvBackground")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("HsvBackground",X),e.component("qt-hsv-background",X)}},ke="QtSvgImage",ee=a.defineComponent({__name:"SvgImage",props:{src:{},tintColor:{}},setup(e,{expose:l}){const d=a.ref(),c=O(),v=ke+"_Plugin",r=(c.isPluginActive?v:ke).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,src:e.src,tintColor:e.tintColor},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["src","tintColor"]))}});let te;var Be;try{const e=require("@extscreen/es3-vue");te=e.registerElement||((Be=e.default)==null?void 0:Be.registerElement)}catch{}const De={install:e=>{if(!globalThis.__QtSvgImage_registered)if(te){const l=(d,c)=>{te(d,{component:{name:c?"QtSvgImage_Plugin":"QtSvgImage",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-svg-image",!1),l("qt-svg-image-plugin",!0),l("QtSvgImage",!1),l("QtSvgImage_Plugin",!0),globalThis.__QtSvgImage_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtSvgImage")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("SvgImage",ee),e.component("qt-svg-image",ee)}},Ne="QtNaButton",ot=a.defineComponent({__name:"NaButtonBase",props:{text:{},icon:{},iconSize:{},iconSpace:{},layoutDirection:{},fontSize:{},maxLines:{},textColor:{},focusTextColor:{},backgroundColor:{},focusBackgroundColor:{},normalBorderWidth:{},normalBorderColor:{},focusBorderColor:{},cornerRadius:{},focusScale:{},enableFocusBorder:{type:Boolean}},emits:["onButtonCustomEvent"],setup(e,{expose:l}){const d=a.ref(),c=O(),v=Ne+"_Plugin",r=(c.isPluginActive?v:Ne).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,text:e.text,icon:e.icon,iconSize:e.iconSize,iconSpace:e.iconSpace,layoutDirection:e.layoutDirection,fontSize:e.fontSize,maxLines:e.maxLines,textColor:e.textColor,focusTextColor:e.focusTextColor,backgroundColor:e.backgroundColor,focusBackgroundColor:e.focusBackgroundColor,normalBorderWidth:e.normalBorderWidth,normalBorderColor:e.normalBorderColor,focusBorderColor:e.focusBorderColor,cornerRadius:e.cornerRadius,focusScale:e.focusScale,enableFocusBorder:e.enableFocusBorder,onOnButtonCustomEvent:u[0]||(u[0]=g=>i.$emit("onButtonCustomEvent",g.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["text","icon","iconSize","iconSpace","layoutDirection","fontSize","maxLines","textColor","focusTextColor","backgroundColor","focusBackgroundColor","normalBorderWidth","normalBorderColor","focusBorderColor","cornerRadius","focusScale","enableFocusBorder"]))}}),oe=a.defineComponent({__name:"NaButton",props:{width:{},height:{}},setup(e){const l=e,d=a.computed(()=>({width:typeof l.width=="number"?`${l.width}px`:l.width,height:typeof l.height=="number"?`${l.height}px`:l.height}));return(c,v)=>(a.openBlock(),a.createBlock(ot,a.mergeProps(c.$attrs,{style:d.value}),{default:a.withCtx(()=>[a.renderSlot(c.$slots,"default")]),_:3},16,["style"]))}});let ne;var $e;try{const e=require("@extscreen/es3-vue");ne=e.registerElement||(($e=e.default)==null?void 0:$e.registerElement)}catch{}const _e={install:e=>{if(!globalThis.__QtNaButton_registered)if(ne){const l=(d,c)=>{ne(d,{component:{name:c?"QtNaButton_Plugin":"QtNaButton",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-button",!1),l("qt-na-button-plugin",!0),l("QtNaButton",!1),l("QtNaButton_Plugin",!0),globalThis.__QtNaButton_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaButton")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaButton",oe),e.component("qt-na-button",oe)}},Ie="QtNaCheckbox",ae=a.defineComponent({__name:"NaCheckbox",props:{text:{},checked:{type:Boolean},disabled:{type:Boolean},checkedIcon:{},uncheckedIcon:{},iconSize:{},iconSpace:{},layoutDirection:{},gravity:{},paddingX:{},showBackground:{type:Boolean},fontSize:{},textColor:{},focusTextColor:{},checkedTextColor:{},focusCheckedTextColor:{},disabledTextColor:{},iconColor:{},focusIconColor:{},checkedIconColor:{},focusCheckedIconColor:{},disabledIconColor:{},iconInnerColor:{},focusIconInnerColor:{},checkedIconInnerColor:{},focusCheckedIconInnerColor:{},disabledIconInnerColor:{},focusMode:{},bgColor:{},focusBgColor:{},checkedBgColor:{},focusCheckedBgColor:{},disabledBgColor:{},borderColor:{},focusBorderColor:{},checkedBorderColor:{},focusCheckedBorderColor:{},disabledBorderColor:{},cornerRadius:{},focusScale:{},type:{}},emits:["onCheckedChange"],setup(e,{expose:l}){const d=a.ref(),c=O(),v=Ie+"_Plugin",r=(c.isPluginActive?v:Ie).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,text:e.text,checked:e.checked,disabled:e.disabled,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,iconSize:e.iconSize,iconSpace:e.iconSpace,layoutDirection:e.layoutDirection,gravity:e.gravity,paddingX:e.paddingX,showBackground:e.showBackground,fontSize:e.fontSize,textColor:e.textColor,focusTextColor:e.focusTextColor,checkedTextColor:e.checkedTextColor,focusCheckedTextColor:e.focusCheckedTextColor,disabledTextColor:e.disabledTextColor,iconColor:e.iconColor,focusIconColor:e.focusIconColor,checkedIconColor:e.checkedIconColor,focusCheckedIconColor:e.focusCheckedIconColor,disabledIconColor:e.disabledIconColor,iconInnerColor:e.iconInnerColor,focusIconInnerColor:e.focusIconInnerColor,checkedIconInnerColor:e.checkedIconInnerColor,focusCheckedIconInnerColor:e.focusCheckedIconInnerColor,disabledIconInnerColor:e.disabledIconInnerColor,focusMode:e.focusMode,bgColor:e.bgColor,focusBgColor:e.focusBgColor,checkedBgColor:e.checkedBgColor,focusCheckedBgColor:e.focusCheckedBgColor,disabledBgColor:e.disabledBgColor,borderColor:e.borderColor,focusBorderColor:e.focusBorderColor,checkedBorderColor:e.checkedBorderColor,focusCheckedBorderColor:e.focusCheckedBorderColor,disabledBorderColor:e.disabledBorderColor,cornerRadius:e.cornerRadius,focusScale:e.focusScale,type:e.type,onOnCheckedChange:u[0]||(u[0]=g=>i.$emit("onCheckedChange",g.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["text","checked","disabled","checkedIcon","uncheckedIcon","iconSize","iconSpace","layoutDirection","gravity","paddingX","showBackground","fontSize","textColor","focusTextColor","checkedTextColor","focusCheckedTextColor","disabledTextColor","iconColor","focusIconColor","checkedIconColor","focusCheckedIconColor","disabledIconColor","iconInnerColor","focusIconInnerColor","checkedIconInnerColor","focusCheckedIconInnerColor","disabledIconInnerColor","focusMode","bgColor","focusBgColor","checkedBgColor","focusCheckedBgColor","disabledBgColor","borderColor","focusBorderColor","checkedBorderColor","focusCheckedBorderColor","disabledBorderColor","cornerRadius","focusScale","type"]))}});let ie;var Ge;try{const e=require("@extscreen/es3-vue");ie=e.registerElement||((Ge=e.default)==null?void 0:Ge.registerElement)}catch{}const Le={install:e=>{if(!globalThis.__QtNaCheckbox_registered)if(ie){const l=(d,c)=>{ie(d,{component:{name:c?"QtNaCheckbox_Plugin":"QtNaCheckbox",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-checkbox",!1),l("qt-na-checkbox-plugin",!0),l("QtNaCheckbox",!1),l("QtNaCheckbox_Plugin",!0),globalThis.__QtNaCheckbox_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaCheckbox")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaCheckbox",ae),e.component("qt-na-checkbox",ae)}},nt=a.defineComponent({name:"NaRadioGroup",props:{modelValue:{type:[String,Number,Boolean],default:""},options:{type:Array,default:()=>[]},direction:{type:String,default:"row"},itemWidth:{type:Number,default:void 0},itemHeight:{type:Number,default:void 0},itemGap:{type:Number,default:20},gravity:{type:String,default:"center"},showBackground:{type:Boolean,default:!0}},emits:["update:modelValue","change"],setup(e,{emit:l}){return{groupStyle:a.computed(()=>({display:"flex",flexDirection:e.direction,alignItems:"center"})),getItemStyle:(m,r)=>{var i;const s={...((i=m.props)==null?void 0:i.style)||{}};return e.itemWidth!==void 0&&(s.width=e.itemWidth),e.itemHeight!==void 0&&(s.height=e.itemHeight),r!==e.options.length-1&&(e.direction==="row"?s.marginRight=e.itemGap:s.marginBottom=e.itemGap),s},onItemClick:m=>{m.disabled||(l("update:modelValue",m.value),l("change",m.value))}}}});const ve=(e,l)=>{const d=e.__vccOpts||e;for(const[c,v]of l)d[c]=v;return d};function at(e,l,d,c,v,m){const r=a.resolveComponent("qt-na-checkbox");return a.openBlock(),a.createElementBlock("div",{class:"na-radio-group",style:a.normalizeStyle(e.groupStyle)},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(e.options,(s,i)=>(a.openBlock(),a.createBlock(r,a.mergeProps({key:i,type:"radio",checked:e.modelValue===s.value,text:s.label,gravity:e.gravity,showBackground:e.showBackground,disabled:s.disabled},{ref_for:!0},s.props,{style:e.getItemStyle(s,i),onClick:u=>e.onItemClick(s)}),null,16,["checked","text","gravity","showBackground","disabled","style","onClick"]))),128))],4)}const le=ve(nt,[["render",at],["__scopeId","data-v-448252ff"]]),Ve={install:e=>{e.component("NaRadioGroup",le),e.component("qt-na-radio-group",le)}},it=a.defineComponent({name:"NaCheckboxGroup",props:{modelValue:{type:Array,default:()=>[]},options:{type:Array,default:()=>[]},direction:{type:String,default:"row"},itemWidth:{type:Number,default:void 0},itemHeight:{type:Number,default:void 0},itemGap:{type:Number,default:20},gravity:{type:String,default:"center"},showBackground:{type:Boolean,default:!0}},emits:["update:modelValue","change"],setup(e,{emit:l}){return{groupStyle:a.computed(()=>({display:"flex",flexDirection:e.direction,alignItems:"center"})),getItemStyle:(m,r)=>{var i;const s={...((i=m.props)==null?void 0:i.style)||{}};return e.itemWidth!==void 0&&(s.width=e.itemWidth),e.itemHeight!==void 0&&(s.height=e.itemHeight),r!==e.options.length-1&&(e.direction==="row"?s.marginRight=e.itemGap:s.marginBottom=e.itemGap),s},onItemClick:m=>{if(m.disabled)return;const r=[...e.modelValue],s=r.indexOf(m.value);s>-1?r.splice(s,1):r.push(m.value),l("update:modelValue",r),l("change",r)}}}});function lt(e,l,d,c,v,m){const r=a.resolveComponent("qt-na-checkbox");return a.openBlock(),a.createElementBlock("div",{class:"na-checkbox-group",style:a.normalizeStyle(e.groupStyle)},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(e.options,(s,i)=>(a.openBlock(),a.createBlock(r,a.mergeProps({key:i,type:"checkbox",checked:e.modelValue.includes(s.value),text:s.label,gravity:e.gravity,showBackground:e.showBackground,disabled:s.disabled},{ref_for:!0},s.props,{style:e.getItemStyle(s,i),onClick:u=>e.onItemClick(s)}),null,16,["checked","text","gravity","showBackground","disabled","style","onClick"]))),128))],4)}const re=ve(it,[["render",lt],["__scopeId","data-v-cf6a4eaa"]]),Ue={install:e=>{e.component("NaCheckboxGroup",re),e.component("qt-na-checkbox-group",re)}},Te="QtNaSwitcher",se=a.defineComponent({__name:"NaSwitcher",props:{checked:{type:Boolean},disabled:{type:Boolean},title:{},textOn:{},textOff:{},subtitle:{},subtitleColor:{},titleColor:{},focusTitleColor:{},titleTextSize:{},subtitleTextSize:{},stateTextSize:{}},emits:["onCheckedChange"],setup(e,{expose:l}){const d=a.ref(),c=O(),v=Te+"_Plugin",r=(c.isPluginActive?v:Te).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,checked:e.checked,disabled:e.disabled,title:e.title,textOn:e.textOn,textOff:e.textOff,subtitle:e.subtitle,subtitleColor:e.subtitleColor,titleColor:e.titleColor,focusTitleColor:e.focusTitleColor,titleTextSize:e.titleTextSize,subtitleTextSize:e.subtitleTextSize,stateTextSize:e.stateTextSize,onOnCheckedChange:u[0]||(u[0]=g=>i.$emit("onCheckedChange",g.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["checked","disabled","title","textOn","textOff","subtitle","subtitleColor","titleColor","focusTitleColor","titleTextSize","subtitleTextSize","stateTextSize"]))}});let ce;var Oe;try{const e=require("@extscreen/es3-vue");ce=e.registerElement||((Oe=e.default)==null?void 0:Oe.registerElement)}catch{}const We={install:e=>{if(!globalThis.__QtNaSwitcher_registered)if(ce){const l=(d,c)=>{ce(d,{component:{name:c?"QtNaSwitcher_Plugin":"QtNaSwitcher",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-switcher",!1),l("qt-na-switcher-plugin",!0),l("QtNaSwitcher",!1),l("QtNaSwitcher_Plugin",!0),globalThis.__QtNaSwitcher_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaSwitcher")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaSwitcher",se),e.component("qt-na-switcher",se)}},rt=a.defineComponent({name:"NaSettingSwitch",props:{title:{type:String,default:""},subtitle:{type:String,default:""},modelValue:{type:Boolean,default:!1},textOn:{type:String,default:"打开"},textOff:{type:String,default:"关闭"},titleTextSize:{type:Number,default:28},subtitleTextSize:{type:Number,default:22},stateTextSize:{type:Number,default:24},disabled:{type:Boolean,default:!1},width:{type:[Number,String],default:800},height:{type:[Number,String],default:100}},emits:["update:modelValue","change"],setup(e,{emit:l,attrs:d}){const c=a.ref(e.modelValue);a.watch(()=>e.modelValue,s=>{c.value=s});const v=s=>{const i=s.checked;c.value=i,l("update:modelValue",i),l("change",i)},m=a.computed(()=>typeof e.width=="number"?`${e.width}px`:e.width),r=a.computed(()=>{const s=d.style||{},i=e.subtitle?(typeof e.height=="number"?e.height:parseInt(e.height))+30:e.height;return{width:m.value,height:typeof i=="number"?`${i}px`:i,...s}});return{checked:c,handleCheckedChange:v,mergedStyle:r}}});function st(e,l,d,c,v,m){const r=a.resolveComponent("qt-na-switcher");return a.openBlock(),a.createBlock(r,{class:"na-setting-switch",style:a.normalizeStyle(e.mergedStyle),title:e.title,subtitle:e.subtitle,checked:e.checked,textOn:e.textOn,textOff:e.textOff,titleTextSize:e.titleTextSize,subtitleTextSize:e.subtitleTextSize,stateTextSize:e.stateTextSize,disabled:e.disabled,onOnCheckedChange:e.handleCheckedChange},null,8,["style","title","subtitle","checked","textOn","textOff","titleTextSize","subtitleTextSize","stateTextSize","disabled","onOnCheckedChange"])}const ue=ve(rt,[["render",st]]),je={install(e){e.component("NaSettingSwitch",ue),e.component("qt-na-setting-switch",ue)}},Se="QtNaInputView",ct=a.defineComponent({__name:"NaInputViewBase",props:{text:{},placeholder:{},type:{},status:{},disabled:{type:Boolean},inputSize:{},cursorVisible:{type:Boolean},useSystemKeyboard:{type:Boolean},trailingIcon:{}},emits:["onInputClick","onChange"],setup(e,{expose:l}){const d=a.ref(),c=O(),v=Se+"_Plugin",r=(c.isPluginActive?v:Se).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,u;return((u=(i=d.value)==null?void 0:i.getNativeNode)==null?void 0:u.call(i))||d.value}}),(i,u)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:d,text:e.text,placeholder:e.placeholder,type:e.type,status:e.status,disabled:e.disabled,inputSize:e.inputSize,cursorVisible:e.cursorVisible,useSystemKeyboard:e.useSystemKeyboard,trailingIcon:e.trailingIcon,onOnInputClick:u[0]||(u[0]=g=>i.$emit("onInputClick",g.nativeEvent)),onOnChange:u[1]||(u[1]=g=>i.$emit("onChange",g.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["text","placeholder","type","status","disabled","inputSize","cursorVisible","useSystemKeyboard","trailingIcon"]))}}),de=a.defineComponent({__name:"NaInputView",props:{inputSize:{default:"medium"}},emits:["onInputClick","onChange"],setup(e,{emit:l}){const d=l,c=e,v=a.computed(()=>{let s=60;return c.inputSize==="large"?s=70:c.inputSize==="small"&&(s=50),{height:`${s}px`}}),m=s=>{d("onInputClick",s)},r=s=>{d("onChange",s)};return(s,i)=>(a.openBlock(),a.createBlock(ct,a.mergeProps(s.$attrs,{style:v.value,inputSize:e.inputSize,onOnInputClick:m,onOnChange:r}),{default:a.withCtx(()=>[a.renderSlot(s.$slots,"default")]),_:3},16,["style","inputSize"]))}});let ge;var qe;try{const e=require("@extscreen/es3-vue");ge=e.registerElement||((qe=e.default)==null?void 0:qe.registerElement)}catch{}const Ke={install:e=>{if(!globalThis.__QtNaInputView_registered)if(ge){const l=(d,c)=>{ge(d,{component:{name:c?"QtNaInputView_Plugin":"QtNaInputView",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-input-view",!1),l("qt-na-input-view-plugin",!0),l("QtNaInputView",!1),l("QtNaInputView_Plugin",!0),globalThis.__QtNaInputView_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaInputView")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaInputView",de),e.component("qt-na-input-view",de)}},He={skipPluginCheck:!1},L=new Set;function G(e,l,d){return a.defineComponent({name:`${e}AsyncWrapper`,inheritAttrs:!1,props:{skipPluginCheck:{type:Boolean,default:!1}},setup(c,{slots:v,attrs:m,expose:r}){const s=a.ref("loading"),i=a.ref(""),u=a.ref(),g=globalThis.__VUE_INSTANCE__;r({getNativeNode:()=>{let C=u.value;return!C&&g&&g.vnode&&g.vnode.el&&(C=g.vnode.el,C.childNodes&&C.childNodes.length>0&&(C=C.childNodes[0])),C},nativeRef:u});let q=null,B=null;try{q=V.useES(),B=V.useESPlugin()}catch(C){console.warn("[withAsyncPlugin] 获取 useES 或 useESPlugin 失败,可能处于非 ES 环境。",C)}const D=async()=>{if(!q||typeof q.isComponentRegistered!="function")return console.log("[withAsyncPlugin] es.isComponentRegistered 不可用"),!1;try{const C=await q.isComponentRegistered(e);if(console.log(`[withAsyncPlugin] isComponentRegistered('${e}') 返回:`,C),C===!0||C&&typeof C=="object"&&(C.registered===!0||C.isRegistered===!0))return!0;try{const I=await T.Native.callNativeWithPromise("ExtendModule","getCoreSDKInfo");if(I&&I.core_version){const P=I.core_version;console.log(`[withAsyncPlugin] 当前引擎核心版本: ${P}`);const E=P.split(".").map(w=>parseInt(w,10));if(E.length>=3&&!isNaN(E[0])&&!isNaN(E[1])&&!isNaN(E[2]))if(E[0]*1e6+E[1]*1e3+E[2]>=1011205){console.log(`[withAsyncPlugin] 引擎 >= 1.11.205,使用 ExtendModule 检查 Controller: ${e}`);const S=e.split("-").map(x=>x.charAt(0).toUpperCase()+x.slice(1)).join("");console.log(`[withAsyncPlugin] 同时检查原名和驼峰名: ${e}, ${S}`);const[A,Q]=await Promise.all([T.Native.callNativeWithPromise("ExtendModule","isComponentRegistered",e).catch(()=>!1),T.Native.callNativeWithPromise("ExtendModule","isComponentRegistered",S).catch(()=>!1)]);if(console.log(`[withAsyncPlugin] ExtendModule.isComponentRegistered 返回: [${A}, ${Q}]`),A===!0||Q===!0)return!0}else console.log(`[withAsyncPlugin] 引擎版本 ${P} < 1.11.205,跳过 ExtendModule 检查`);else console.log(`[withAsyncPlugin] 无法解析引擎版本号: ${P}`)}}catch(I){console.log("[withAsyncPlugin] 获取引擎版本或检查 Controller 失败:",I)}return!1}catch(C){return console.warn("[withAsyncPlugin] 检查组件注册状态异常:",C),!1}},R=async()=>{if(He.skipPluginCheck||c.skipPluginCheck){console.log(`[withAsyncPlugin] 跳过 ${e} 插件检查 (skipPluginCheck = true)`),s.value="ready";return}if(!l){s.value="ready";return}const C=await D();if(console.log(`[withAsyncPlugin] 拦截检查 - ${e} 是否已注册:`,C),C||L.has(l)){s.value="ready",L.add(l),console.log("[withAsyncPlugin] 组件已注册,跳过安装流程");return}if(!B){console.warn(`[withAsyncPlugin] 无法获取 useESPlugin 实例,可能处于内置 AAR 环境或非插件环境,尝试直接渲染 ${e}`),s.value="ready";return}console.log(`[withAsyncPlugin] 开始动态安装插件: ${l}`);try{await new Promise((I,P)=>{let E;const w={onPluginInstallSuccess(S,A,Q){S===l&&(clearTimeout(E),B.removeListener(w),console.log(`[withAsyncPlugin] 安装成功 pkg=${S} 状态码=${A}`),A==1003||A==1001?(d?(console.log(`[withAsyncPlugin] 触发反射初始化: ${d}`),T.Native.callNative("EsNativeModule","callReflect",{entry:{from:d,method:"setup"}})):console.log("[withAsyncPlugin] 安装成功,跳过反射初始化(无 pluginInitClass)"),I()):P(new Error(`安装失败 pkg=${S} status=${A} msg=${Q}`)))},onPluginInstallError(S,A,Q){S===l&&(clearTimeout(E),B.removeListener(w),P(new Error(`安装失败 pkg=${S} status=${A} msg=${Q}`)))}};B.addListener({pkg:l},w),E=setTimeout(()=>{B.removeListener(w),P(new Error(`插件安装超时: ${l}`))},8e3),typeof B.installPlugin=="function"?B.installPlugin({pkg:l}):typeof B.install=="function"?B.install(l):P(new Error("当前运行时不支持 install / installPlugin"))}),await a.nextTick(),L.add(l),s.value="ready"}catch(I){console.error("[withAsyncPlugin] 插件加载失败:",I),i.value=(I==null?void 0:I.message)||String(I),s.value="error"}};return a.onMounted(()=>{R()}),()=>{const C={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",...m.style||{}};m.width!==void 0&&!C.width&&(C.width=typeof m.width=="number"?`${m.width}px`:m.width),m.height!==void 0&&!C.height&&(C.height=typeof m.height=="number"?`${m.height}px`:m.height);const I=m.class?`qt-plugin-container ${m.class}`:"qt-plugin-container",P={class:I,style:C,clipChildren:!1,clipPadding:!1,clipToPadding:!1};if(s.value==="loading")return a.h("div",P,[a.h("div",{style:{color:"white",fontSize:"30px"}},"插件加载中...")]);if(s.value==="error")return a.h("div",P,[a.h("div",{style:{color:"white",fontSize:"30px",backgroundColor:"rgba(255,0,0,0.5)"}},`插件加载失败: ${i.value}`)]);const E={},w={};for(const[x,z]of Object.entries(m))if(x.startsWith("on")&&typeof z=="function"){let F=x;x.startsWith("onOn")&&(F="on"+x.slice(4)),w[F]=z}else if(x.startsWith("on")&&Array.isArray(z)){let F=x;x.startsWith("onOn")&&(F="on"+x.slice(4)),w[F]=z}else x.startsWith("onOn")||(E[x]=z);const S={...E,...w,class:I,style:C,ref:x=>{u.value=x}},A=S.tabsData||"",Q=S.actionPayload||"";return console.log("[withAsyncPlugin] 最终准备传递给 h() 的属性键集合:",Object.keys(S),"tabsData.length=",A.length,"actionPayload.length=",Q.length),a.h(e,S,v.default?v.default():[])}}})}const me=Symbol("AddonEnvContext"),Ze={isPluginActive:!1,nameSuffix:"",pluginPackageName:"com.quicktvui.plugin.glintui",builtInVersions:{}};async function ut(e="com.quicktvui.plugin.glintui",l="_Plugin"){const d=V.useES();let c={};try{const i=await T.Native.callNativeModule("AddonEnvModule","getBuiltInVersions",[]);i&&typeof i=="object"&&(c=i)}catch(i){console.warn("[AddonProvider] Failed to fetch built-in versions from AddonEnvModule",i)}const v=`QtGridTabs${l}`,m=d.isComponentRegistered(v),r=m instanceof Promise?await m:m,s={isPluginActive:r,nameSuffix:r?l:"",pluginPackageName:r?`${e}.ext`:e,builtInVersions:c};return console.info("[AddonProvider] Environment initialized:",s),s}let fe=a.ref(Ze);function dt(e){fe.value=e,a.provide(me,fe)}function O(){var e;return((e=a.inject(me,fe))==null?void 0:e.value)||Ze}async function Je(e){console.log("[AddonProvider] Sending GridTabs global config to Native:",e);try{const l=await T.Native.callNativeWithPromise("GridTabsConfigModule","setDefaultConfig",JSON.stringify(e));return console.log("[AddonProvider] Received response from Native:",l),!!(l&&l.success)}catch(l){return console.error("[AddonProvider] Failed to initialize GridTabs global config:",l),!1}}async function Xe(e){console.log("[AddonProvider] Sending ExtraUI global theme config to Native:",e);try{const l=await T.Native.callNativeWithPromise("ExtraUIConfigModule","setThemeConfig",JSON.stringify(e));return console.log("[AddonProvider] Received ExtraUI theme response from Native:",l),!!(l&&l.success)}catch(l){return console.error("[AddonProvider] Failed to initialize ExtraUI global theme config:",l),!1}}async function gt(e){console.log("[AddonProvider] Initializing global theme across all modules:",e);const l=await Xe(e),d=await Je({themeConfig:{placeholderColor:e.placeholderColor,glowColor:e.glowColor||e.focusBackgroundColor,outerBorderColor:e.outerBorderColor||e.focusBorderColor,innerBorderColor:e.innerBorderColor,enableElevationShadow:e.enableElevationShadow,cornerRadius:e.cornerRadius,buttonCornerRadius:e.buttonCornerRadius,primaryTextColor:e.primaryTextColor,secondaryTextColor:e.secondaryTextColor,focusTextColor:e.focusTextColor,selectedTextColor:e.selectedTextColor,selectedBackgroundColor:e.selectedBackgroundColor,focusBackgroundColor:e.focusBackgroundColor,buttonNormalBackgroundColor:e.buttonNormalBackgroundColor}});return l&&d}const Ye={install:e=>{e.use(Qe),e.use(Re),e.use(ze),e.use(Fe),e.use(Me),e.use(De),e.use(_e),e.use(Le),e.use(Ve),e.use(Ue),e.use(We),e.use(je),e.use(Ke)}};exports.ADDON_ENV_CONTEXT_KEY=me;exports.GridTabs=_;exports.GridTabsPlugin=Qe;exports.HsvBackground=X;exports.HsvBackgroundPlugin=Me;exports.Keyboard=W;exports.KeyboardPlugin=Re;exports.NaButton=oe;exports.NaButtonPlugin=_e;exports.NaCheckbox=ae;exports.NaCheckboxGroup=re;exports.NaCheckboxGroupPlugin=Ue;exports.NaCheckboxPlugin=Le;exports.NaInputView=de;exports.NaInputViewPlugin=Ke;exports.NaRadioGroup=le;exports.NaRadioGroupPlugin=Ve;exports.NaSettingSwitch=ue;exports.NaSettingSwitchPlugin=je;exports.NaSwitcher=se;exports.NaSwitcherPlugin=We;exports.PortalItem=Z;exports.PortalItemPlugin=Fe;exports.PortalPool=K;exports.PortalPoolPlugin=ze;exports.QuickTVUINAddons=Ye;exports.QuickTVUINAddonsConfig=He;exports.SvgImage=ee;exports.SvgImagePlugin=De;exports.default=Ye;exports.initAddonEnv=ut;exports.initExtraUIGlobalTheme=Xe;exports.initGlobalTheme=gt;exports.initGridTabsGlobalConfig=Je;exports.provideAddonEnv=dt;exports.useAddonEnv=O;exports.useGridTabs=tt;exports.withAsyncPlugin=G;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),P=require("@extscreen/es3-vue"),V=require("@extscreen/es3-core"),be="QtGridTabs",_=a.defineComponent({__name:"GridTabs",props:{protocolVersion:{},pageSpec:{},tabsData:{},actionPayload:{}},emits:["onTabSelected","onTabClick","onTabNeedsData","onLoadMore","onScroll","onScrollStateChanged","onItemPresence","onTabFocused","onItemClick","onItemLongClick","onItemFocused","onProtocolMismatch"],setup(e,{expose:l}){const g=a.ref(),c=O(),v=be+"_Plugin",r=(c.isPluginActive?v:be).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value},dispatchAction:(...i)=>{var f,p;const d=((p=(f=g.value)==null?void 0:f.getNativeNode)==null?void 0:p.call(f))||g.value;if(d)if(i.length>0){let k=i[0];typeof k=="object"&&(k=JSON.stringify(k)),P.Native.callUIFunction(d,"dispatchAction",[k])}else P.Native.callUIFunction(d,"dispatchAction",i)},scrollToTop:(...i)=>{var f,p;const d=((p=(f=g.value)==null?void 0:f.getNativeNode)==null?void 0:p.call(f))||g.value;d&&P.Native.callUIFunction(d,"scrollToTop",i)},getFocusState:(...i)=>{var f,p;const d=((p=(f=g.value)==null?void 0:f.getNativeNode)==null?void 0:p.call(f))||g.value;d&&P.Native.callUIFunction(d,"getFocusState",i)},getItemRect:(...i)=>{var f,p;const d=((p=(f=g.value)==null?void 0:f.getNativeNode)==null?void 0:p.call(f))||g.value;d&&P.Native.callUIFunction(d,"getItemRect",i)},requestFocus:(...i)=>{var f,p;const d=((p=(f=g.value)==null?void 0:f.getNativeNode)==null?void 0:p.call(f))||g.value;d&&P.Native.callUIFunction(d,"requestFocus",i)}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,protocolVersion:e.protocolVersion,pageSpec:e.pageSpec,tabsData:e.tabsData,actionPayload:e.actionPayload,onOnTabSelected:d[0]||(d[0]=f=>i.$emit("onTabSelected",f.nativeEvent)),onOnTabClick:d[1]||(d[1]=f=>i.$emit("onTabClick",f.nativeEvent)),onOnTabNeedsData:d[2]||(d[2]=f=>i.$emit("onTabNeedsData",f.nativeEvent)),onOnLoadMore:d[3]||(d[3]=f=>i.$emit("onLoadMore",f.nativeEvent)),onOnScroll:d[4]||(d[4]=f=>i.$emit("onScroll",f.nativeEvent)),onOnScrollStateChanged:d[5]||(d[5]=f=>i.$emit("onScrollStateChanged",f.nativeEvent)),onOnItemPresence:d[6]||(d[6]=f=>i.$emit("onItemPresence",f.nativeEvent)),onOnTabFocused:d[7]||(d[7]=f=>i.$emit("onTabFocused",f.nativeEvent)),onOnItemClick:d[8]||(d[8]=f=>i.$emit("onItemClick",f.nativeEvent)),onOnItemLongClick:d[9]||(d[9]=f=>i.$emit("onItemLongClick",f.nativeEvent)),onOnItemFocused:d[10]||(d[10]=f=>i.$emit("onItemFocused",f.nativeEvent)),onOnProtocolMismatch:d[11]||(d[11]=f=>i.$emit("onProtocolMismatch",f.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["protocolVersion","pageSpec","tabsData","actionPayload"]))}});let U;var Se;try{const e=require("@extscreen/es3-vue");U=e.registerElement||((Se=e.default)==null?void 0:Se.registerElement)}catch{}const Qe={install:e=>{if(!globalThis.__QtGridTabs_registered)if(U){const l=(g,c)=>{U(g,{component:{name:c?"QtGridTabs_Plugin":"QtGridTabs",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-grid-tabs",!1),l("qt-grid-tabs-plugin",!0),l("QtGridTabs",!1),l("QtGridTabs_Plugin",!0),l("gt-tabs",!1),l("gt-tabs-plugin",!0),globalThis.__QtGridTabs_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtGridTabs")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("GridTabs",_),e.component("qt-grid-tabs",_),e.component("gt-tabs",_)}};function tt(e,l){const g=a.ref(""),c=l?JSON.parse(JSON.stringify(l)):{},v=a.shallowRef([]),m=a.shallowRef([]);let r=!1,s=!1;const i="__virtual_single_tab__";let d="",f=!1;const p=a.ref({}),k=o=>{const t=Array.isArray(o)?o:[o];if(s&&e.value){if(typeof e.value.dispatchAction=="function"){console.log("[useGridTabs] Calling Wrapper dispatchAction directly"),e.value.dispatchAction(t);return}let n=e.value;typeof e.value.getNativeNode=="function"?n=e.value.getNativeNode()||e.value:e.value.nativeRef&&(n=e.value.nativeRef),n?(console.log("[useGridTabs] Calling Native callUIFunction dispatchAction fallback"),P.Native.callUIFunction(n,"dispatchAction",[JSON.stringify(t)])):console.warn("[useGridTabs] Native target is null or undefined, cannot call dispatchAction")}},q=(o,t)=>{if(!o)return!1;let n=!0;return o.id||(console.error(`[useGridTabs] ❌ 数据格式错误 (${t}): 卡片缺失必填字段 'id'。每个卡片必须有唯一标识才能进行后续更新!`,o),n=!1),o.viewType||(console.error(`[useGridTabs] ❌ 数据格式错误 (${t}): 卡片缺失必填字段 'viewType' (id: ${o.id||"未知"})。必须指定 Native 注册的视图类型或 Portal 标识!`,o),n=!1),n},B=(o,t)=>{if(!o)return!1;let n=!0;return o.tabId||(console.error(`[useGridTabs] ❌ 数据格式错误 (${t}): Tab 缺失必填字段 'tabId'。每个 Tab 必须有唯一标识!`,o),n=!1),(o.title===void 0||o.title===null)&&console.warn(`[useGridTabs] ⚠️ 数据格式警告 (${t}): Tab 缺失 'title' 字段 (tabId: ${o.tabId||"未知"}),导航栏可能显示为空。`,o),n},D=(o,t)=>{if(!o||o.length===0)return;R.clear();const n=o[0].hasOwnProperty("tabId")||o[0].hasOwnProperty("items")&&Array.isArray(o[0].items);r=t==="1d",t==="1d"&&n?console.error("[useGridTabs] ❌ 赋值错误: 你正在向 `items.value` (一维瀑布流) 赋值二维 Tabs 数据结构!请改用 `tabs.value = ...`"):t==="2d"&&!n&&console.error("[useGridTabs] ❌ 赋值错误: 你正在向 `tabs.value` (二维导航) 赋值一维卡片列表数据结构!请改用 `items.value = ...`"),t==="1d"?o.forEach((u,b)=>q(u,`items.value[${b}]`)):o.forEach((u,b)=>{B(u,`tabs.value[${b}]`),u.items&&Array.isArray(u.items)&&u.items.forEach((h,y)=>q(h,`tabs.value[${b}].items[${y}]`))}),s=!0,C()},R=new Set,C=(o="unknown")=>{if(!s){console.warn("[useGridTabs] triggerRootUpdate skipped because isInitialized is false");return}let t={protocolVersion:"1.28.0",gridBasis:(c==null?void 0:c.gridBasis)??30,unitType:(c==null?void 0:c.unitType)??"px",contentConfig:(c==null?void 0:c.contentConfig)??(c==null?void 0:c.layoutConfig)??{box:{padding:[0,60,60,60]},navContentGapNormal:0,itemGap:24},navConfig:(c==null?void 0:c.navConfig)??{dock:"left",mode:"fixed",renderType:"smart-hybrid",box:{size:[200,0]},expandedBox:{size:[300,0]}},cacheConfig:(c==null?void 0:c.cacheConfig)??{offscreenPageLimit:1,prefetchOffset:2,preLoadEnabled:!1,strategy:"data_priority"},animationConfig:(c==null?void 0:c.animationConfig)??{duration:300,easing:"ease-out"},interactionStrategy:(c==null?void 0:c.interactionStrategy)??{defaultFocus:"nav",interceptBack:!0,backMode:"home-first",autoScrollToTop:!0,edgeScrollProtection:.5},focusConfig:(c==null?void 0:c.focusConfig)??{boundaryLock:{left:!1,right:!1,top:!1,bottom:!1}},themeConfig:c==null?void 0:c.themeConfig,referenceResolution:(c==null?void 0:c.referenceResolution)??{w:1920,h:1080}},n=[];r?(t.navConfig={...t.navConfig,renderType:"none"},n=[{tabId:i,title:"Virtual Tab",hidden:!0,items:m.value}]):n=v.value;const u=JSON.stringify({page_spec:t,tabs:n});if(g.value==="")console.log(`[useGridTabs] triggerRootUpdate: Initializing tabsDataStr (length=${u.length})`),g.value=u,d=u;else{if(d===u){console.log("[useGridTabs] triggerRootUpdate: Data unchanged, skipping RELOAD_TABS");return}console.log(`[useGridTabs] triggerRootUpdate: Sending RELOAD_TABS action directly to Native (length=${u.length})`),g.value=u,d=u,k({op:"RELOAD_TABS",payload:{pageSpec:t,page_spec:t,tabs:n}})}},I=o=>{if(!o||typeof o!="object"||o.__isGridTabsProxy)return o;o.content&&typeof o.content=="object"&&!o.content.__isGridTabsProxy&&(o.content=new Proxy(o.content,{set(n,u,b,h){const y=Reflect.set(n,u,b,h);return o.id&&s&&k({op:"UPDATE_ITEM",itemId:o.id,payload:o}),y}}),Object.defineProperty(o.content,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(o.content,"__v_skip",{value:!0,enumerable:!1})),o.subItems&&Array.isArray(o.subItems)&&!o.subItems.__isGridTabsProxy&&(o.subItems=S(o.subItems,o.id),Object.defineProperty(o.subItems,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(o.subItems,"__v_skip",{value:!0,enumerable:!1}));const t=new Proxy(o,{set(n,u,b,h){const y=Reflect.set(n,u,b,h);return n.id&&s&&!f&&k({op:"UPDATE_ITEM",itemId:n.id,payload:n}),y}});return Object.defineProperty(t,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(t,"__v_skip",{value:!0,enumerable:!1}),t},S=(o,t)=>{for(let n=0;n<o.length;n++)o[n]=I(o[n]);return new Proxy(o,{get(n,u,b){return u==="push"?(...h)=>{h.forEach(($,M)=>q($,`push(${M})`)),s||console.error("[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时调用了 push()。请先对 items.value 或 tabs.value 进行全量赋值!");const y=h.map($=>I($)),N=Array.prototype.push.apply(n,y);return f||k({op:"APPEND_SUB_ITEMS",itemId:t,payload:{subItems:y}}),N}:u==="unshift"?(...h)=>{h.forEach(($,M)=>q($,`unshift(${M})`)),s||console.error("[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时调用了 unshift()。请先对 items.value 或 tabs.value 进行全量赋值!");const y=h.map($=>I($)),N=Array.prototype.unshift.apply(n,y);return s&&y.length>0&&!f&&k({op:"PREPEND_SUB_ITEMS",itemId:t,payload:{subItems:y}}),N}:u==="splice"?(...h)=>{const y=h.length>=2&&h[0]===0&&h[1]===n.length,N=Array.prototype.splice.apply(n,h);return s&&y&&t!==i?f||k({op:"CLEAR_SUB_ITEMS",itemId:t}):s&&(f||C("items array spliced")),N}:Reflect.get(n,u,b)},set(n,u,b,h){if(u!=="length"&&!isNaN(Number(u))){s||console.error(`[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时直接修改了索引 [${String(u)}]。请先对 items.value 或 tabs.value 进行全量赋值!`),q(b,`索引赋值 [${String(u)}]`);const y=I(b),N=Reflect.set(n,u,y,h);return y&&y.id&&!f&&k({op:"UPDATE_ITEM",itemId:y.id,payload:y}),N}return Reflect.set(n,u,b,h)}})},E=o=>(o.items&&Array.isArray(o.items)&&!o.items.__isGridTabsProxy&&(o.items=S(o.items,o.tabId),Object.defineProperty(o.items,"__isGridTabsProxy",{value:!0,enumerable:!1})),new Proxy(o,{set(t,n,u,b){if(n==="items"){let y=u;return Array.isArray(u)&&!u.__isGridTabsProxy&&(y=S(u,t.tabId),Object.defineProperty(y,"__isGridTabsProxy",{value:!0,enumerable:!1})),Reflect.set(t,n,y,b)}else if(n==="loadState"){const y=Reflect.set(t,n,u,b);return s&&t.tabId&&!f&&k({op:"UPDATE_TAB_STATE",itemId:t.tabId,payload:{loadState:u}}),y}return Reflect.set(t,n,u,b)}})),w=o=>{const t=o.map(n=>E(n));return new Proxy(t,{set(n,u,b,h){if(u!=="length"&&!isNaN(Number(u))){let y=b;b.__isGridTabsProxy||(y=E(b),Object.defineProperty(y,"__isGridTabsProxy",{value:!0,enumerable:!1}));const N=Reflect.set(n,u,y,h);return C(),N}return Reflect.set(n,u,b,h)}})};a.watch(v,(o,t)=>{if(console.log("[useGridTabs] watch(tabs) triggered:",{newTabs:o,isInitialized:s}),!o||o.length===0){g.value="",d="",s=!1;return}if(o.__isGridTabsProxy)console.log("[useGridTabs] newTabs is ALREADY a proxy, triggering root update"),C();else{console.log("[useGridTabs] newTabs is NOT a proxy, performing full deduceModeAndInitialize & wrapping");const n=w(o);Object.defineProperty(n,"__isGridTabsProxy",{value:!0,enumerable:!1}),D(n,"2d"),v.value=n}},{flush:"sync",deep:!1}),a.watch(m,(o,t)=>{if(console.log("[useGridTabs] watch(items) triggered:",{newItems:o,isInitialized:s}),!o||o.length===0){g.value="",d="",s=!1;return}if(o.__isGridTabsProxy)console.log("[useGridTabs] newItems is ALREADY a proxy, triggering root update"),C();else{console.log("[useGridTabs] newItems is NOT a proxy, performing full deduceModeAndInitialize & wrapping");const n=S(o,i);Object.defineProperty(n,"__isGridTabsProxy",{value:!0,enumerable:!1}),D(n,"1d"),m.value=n}},{flush:"sync",deep:!1});const T={},A=()=>{console.log("[useGridTabs] resetInitialization called manually"),s=!1,R.clear();for(const o in T)delete T[o]},Q=o=>{if(!o||o.length===0){g.value="",s=!1;return}o[0].hasOwnProperty("tabId")||o[0].hasOwnProperty("items")&&Array.isArray(o[0].items)?v.value=o:m.value=o},x=o=>{p.value=o},F=a.computed(()=>({tabsData:g.value,onTabNeedsData:async(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),!p.value.onTabNeedsData)return;const{tabId:n,index:u,reason:b}=t;if(R.has(n)){console.log(`[useGridTabs] onTabNeedsData SKIP: tabId=${n} 已经发起过请求,防止死循环`);return}R.add(n);try{const h=await p.value.onTabNeedsData(n,u,b);if(h&&Array.isArray(h))if(T[n]=1,h.length>0){const y=v.value.find(N=>N.tabId===n);y&&(y.items?y.items.length>0&&y.items.splice(0,y.items.length):y.items=[],y.items.push(...h),y.loadState="ready",k({op:"UPDATE_TAB_STATE",itemId:n,payload:{loadState:"ready"}}))}else console.warn(`[useGridTabs] ⚠️ 警告: onTabNeedsData(tabId="${n}") 返回了空数组 []!`),console.warn("👉 如果你已经在此函数内手动调用了 push() 来追加数据,请在最后 return null 或 undefined。"),console.warn("👉 如果该 Tab 确实没有数据,返回 [] 可能会导致底层的 Header 等已有元素被清空,请注意检查。"),console.warn("👉 框架已为您拦截此次空数组覆盖,保留了当前的 DOM 结构。")}catch(h){console.error("[useGridTabs] onTabNeedsData 执行失败:",h),R.delete(n)}},onLoadMore:async(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),!p.value.onLoadMore)return;const{tabId:n,itemId:u}=t,h=(T[n]||1)+1;console.log(`[useGridTabs] 拦截到底层 onLoadMore,强行接管页码: tabId=${n}, pageNo=${h}`);try{const y=await p.value.onLoadMore(n,h,u);if(y&&Array.isArray(y))if(y.length>0)if(T[n]=h,r)m.value.push(...y);else{const N=v.value.find($=>$.tabId===n);N&&N.items&&N.items.push(...y)}else console.warn(`[useGridTabs] ⚠️ 警告: onLoadMore(tabId="${n}", pageNo="${h}") 返回了空数组 []!`),console.warn('👉 如果这是你的最后一页数据,推荐在卡片列表中追加一个 type="no_more" 的 footer 卡片,而不是仅仅返回空。'),console.warn("👉 框架已忽略本次空数据追加,且不会自增页码。")}catch(y){console.error("[useGridTabs] onLoadMore 业务层请求失败:",y)}},onItemPresence:(...o)=>{let t=o[0];if(console.log("[useGridTabs] ⚡️ bindings caught onItemPresence:",t),p.value.onItemPresence)try{let n=typeof t=="string"?t:(t==null?void 0:t.nativeEvent)||t;n&&typeof n.data=="string"&&(n=n.data);const u=typeof n=="string"?JSON.parse(n):n;u&&u.type==="VIEW_PRESENCE_BATCH"&&Array.isArray(u.payload)?u.payload.forEach(b=>{b.itemId&&typeof b.itemId=="string"&&b.itemId.startsWith("fallback_pos_")&&console.warn(`[useGridTabs] ⚠️ 警告:检测到列表项曝光 (index=${b.index}),但未配置 itemId。请检查传入的 items 数组,务必为每个数据项指定唯一的 itemId,否则底层无法准确进行去重与曝光上报。`),p.value.onItemPresence(b)}):p.value.onItemPresence(u)}catch(n){console.error("[useGridTabs] Failed to parse onItemPresence event payload:",n),p.value.onItemPresence(t)}},onTabSelected:(...o)=>{let t=o[0];t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onTabSelected&&p.value.onTabSelected(t)},onTabClick:(...o)=>{let t=o[0];t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onTabClick&&p.value.onTabClick(t)},onItemClick:(...o)=>{let t=o[0];if(console.log("[useGridTabs] RAW onItemClick intercepted from Native:",t),t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onItemClick)try{let n=typeof t=="string"?t:(t==null?void 0:t.data)||t;const u=typeof n=="string"?JSON.parse(n):n;if(u&&typeof u.clickPayload=="string")try{u.clickPayload=JSON.parse(u.clickPayload)}catch(b){console.warn("Failed to parse clickPayload:",b)}if(u&&typeof u.focusPayload=="string")try{u.focusPayload=JSON.parse(u.focusPayload)}catch(b){console.warn("Failed to parse focusPayload:",b)}p.value.onItemClick(u)}catch(n){console.error("[useGridTabs] Failed to parse onItemClick event payload:",n),p.value.onItemClick(t)}else console.warn("[useGridTabs] onItemClick triggered but NO callback registered in callbacksRef!")},onItemLongClick:(...o)=>{let t=o[0];if(console.log("[useGridTabs] RAW onItemLongClick intercepted from Native:",t),typeof t=="number"&&o.length>=3&&typeof o[1]=="string"&&(t=o[2]),t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onItemLongClick)try{let n=typeof t=="string"?t:(t==null?void 0:t.data)||t;const u=typeof n=="string"?JSON.parse(n):n;if(u&&typeof u.clickPayload=="string")try{u.clickPayload=JSON.parse(u.clickPayload)}catch{}if(u&&typeof u.focusPayload=="string")try{u.focusPayload=JSON.parse(u.focusPayload)}catch{}p.value.onItemLongClick(u)}catch(n){console.error("[useGridTabs] Failed to parse onItemLongClick event payload:",n),p.value.onItemLongClick(t)}},onItemFocused:(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onItemFocused)try{let n=typeof t=="string"?t:(t==null?void 0:t.data)||t;const u=typeof n=="string"?JSON.parse(n):n;if(u&&typeof u.clickPayload=="string")try{u.clickPayload=JSON.parse(u.clickPayload)}catch{}if(u&&typeof u.focusPayload=="string")try{u.focusPayload=JSON.parse(u.focusPayload)}catch{}p.value.onItemFocused(u)}catch(n){console.error("[useGridTabs] Failed to parse onItemFocused event payload:",n),p.value.onItemFocused(t)}},onTabFocused:(...o)=>{let t=o[0];t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onTabFocused&&p.value.onTabFocused(t)},onScroll:(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onScroll)try{const n=(t==null?void 0:t.data)||t;p.value.onScroll(n)}catch{p.value.onScroll(t)}},onScrollStateChanged:(...o)=>{let t=o[0];if(t&&t.nativeEvent&&(t=t.nativeEvent),p.value.onScrollStateChanged)try{const n=(t==null?void 0:t.data)||t;p.value.onScrollStateChanged(n)}catch{p.value.onScrollStateChanged(t)}}}));return{tabsDataStr:g,bindings:F,tabs:v,items:m,initData:Q,setCallbacks:x,updateItem:(o,t)=>{if(!s){console.error("[useGridTabs] ❌ 时机错误: 尚未初始化数据,无法调用 updateItem");return}k({op:"UPDATE_ITEM",itemId:o,payload:t}),f=!0;try{if(r){const n=m.value.find(u=>u.id===o);n&&Object.assign(n,t)}else for(const n of v.value)if(n.items){const u=n.items.find(b=>b.id===o);if(u){Object.assign(u,t);break}}}finally{f=!1}},deleteItem:(o,t=!0)=>{if(s){k({op:"DELETE_ITEM",itemId:o,payload:{animated:t}}),f=!0;try{if(r){const n=m.value.findIndex(u=>u.id===o);n!==-1&&m.value.splice(n,1)}else for(const n of v.value)if(n.items){const u=n.items.findIndex(b=>b.id===o);if(u!==-1){n.items.splice(u,1);break}}}finally{f=!1}}},prependItems:(o,t)=>{if(s){k({op:"PREPEND_SUB_ITEMS",itemId:o,payload:{subItems:t}}),f=!0;try{if(r)m.value.unshift(...t);else{const n=v.value.find(u=>u.tabId===o);n&&n.items&&n.items.unshift(...t)}}finally{f=!1}}},clearItems:o=>{if(s){k({op:"CLEAR_SUB_ITEMS",itemId:o}),f=!0;try{if(r)m.value.splice(0,m.value.length);else{const t=v.value.find(n=>n.tabId===o);t&&t.items&&t.items.splice(0,t.items.length)}}finally{f=!1}}},moveItem:(o,t,n)=>{if(s){k({op:"MOVE_ITEM",itemId:o,payload:{targetPosition:t,anchorItemId:n}}),f=!0;try{const u=b=>{const h=b.findIndex(N=>N.id===o),y=b.findIndex(N=>N.id===n);if(h!==-1&&y!==-1){const N=b.splice(h,1)[0],$=b.findIndex(et=>et.id===n),M=t==="after"?$+1:$;b.splice(M,0,N)}};if(r)u(m.value);else for(const b of v.value)b.items&&u(b.items)}finally{f=!1}}},replaceItem:(o,t)=>{if(s){k({op:"REPLACE_ITEM",itemId:o,payload:t}),f=!0;try{if(r){const n=m.value.findIndex(u=>u.id===o);n!==-1&&(m.value[n]=t)}else for(const n of v.value)if(n.items){const u=n.items.findIndex(b=>b.id===o);if(u!==-1){n.items[u]=t;break}}}finally{f=!1}}},dispatchAction:k,resetInitialization:A,getFocusState:async()=>new Promise((o,t)=>{let n=e.value;typeof e.value.getNativeNode=="function"?n=e.value.getNativeNode()||e.value:e.value.nativeRef&&(n=e.value.nativeRef),console.log("[useGridTabs] getFocusState called, nativeTarget:",n);const u=b=>{if(console.log("[useGridTabs] getFocusState callback received:",b),b&&b.isSuccess!==void 0&&b.result!==void 0){o(b.result);return}try{const h=typeof b=="string"?JSON.parse(b):b;o(h)}catch(h){t(h)}};typeof P.Native.callUIFunction=="function"?(console.log('[useGridTabs] Executing Native.callUIFunction("getFocusState") with callback as 4th arg'),P.Native.callUIFunction(n,"getFocusState",[],u)):(console.error("[useGridTabs] Native.callUIFunction is not available"),t(new Error("Native.callUIFunction is not available")))}),getItemRect:async o=>new Promise((t,n)=>{let u=e.value;typeof e.value.getNativeNode=="function"?u=e.value.getNativeNode()||e.value:e.value.nativeRef&&(u=e.value.nativeRef),console.log(`[useGridTabs] getItemRect called for itemId=${o}, nativeTarget:`,u);const b=h=>{if(console.log(`[useGridTabs] getItemRect callback received for itemId=${o}:`,h),h&&h.isSuccess!==void 0&&h.result!==void 0){t(h.result);return}try{const y=typeof h=="string"?JSON.parse(h):h;t(y)}catch(y){n(y)}};typeof P.Native.callUIFunction=="function"?(console.log('[useGridTabs] Executing Native.callUIFunction("getItemRect") with itemId and callback as 4th arg'),P.Native.callUIFunction(u,"getItemRect",[o],b)):(console.error("[useGridTabs] Native.callUIFunction is not available"),n(new Error("Native.callUIFunction is not available")))}),requestFocus:o=>{let t=e.value;typeof e.value.getNativeNode=="function"?t=e.value.getNativeNode()||e.value:e.value.nativeRef&&(t=e.value.nativeRef),P.Native.callUIFunction(t,"requestFocus",[o])},updatePageSpec:o=>{if(!s)return;const t=Object.assign({},JSON.parse(g.value).page_spec,o);o.layout&&(t.navConfig=Object.assign({},t.navConfig,o.layout)),o.navConfig&&(t.navConfig=Object.assign({},t.navConfig,o.navConfig)),o.contentConfig&&(t.contentConfig=Object.assign({},t.contentConfig,o.contentConfig)),c&&Object.assign(c,t),k({op:"RELOAD_TABS",payload:{pageSpec:t,page_spec:t,tabs:v.value}});const n=JSON.parse(g.value);n.page_spec=t,g.value=JSON.stringify(n),d=g.value},reloadAll:(o,t)=>{c&&(Object.keys(c).forEach(n=>delete c[n]),Object.assign(c,o)),v.value=t,k({op:"RELOAD_TABS",payload:{pageSpec:o,page_spec:o,tabs:t}})},scrollToTop:()=>{let o=e.value;typeof e.value.getNativeNode=="function"?o=e.value.getNativeNode()||e.value:e.value.nativeRef&&(o=e.value.nativeRef),P.Native.callUIFunction(o,"scrollToTop",[])}}}const ye="QtKeyboard",W=a.defineComponent({__name:"Keyboard",props:{backgroundColor:{},backgroundGradient:{},textColor:{},weakTextColor:{},focusBackgroundColor:{},focusTextColor:{},placeholder:{},textFullKeyboard:{},textT9Keyboard:{},keyboardType:{},textClear:{},textDelete:{},currentInput:{},autofocus:{type:Boolean},rememberKeyboardType:{type:Boolean}},emits:["onInputChanged","onKeyPressed"],setup(e,{expose:l}){const g=a.ref(),c=O(),v=ye+"_Plugin",r=(c.isPluginActive?v:ye).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value},requestFocus:(...i)=>{var f,p;const d=((p=(f=g.value)==null?void 0:f.getNativeNode)==null?void 0:p.call(f))||g.value;d&&P.Native.callUIFunction(d,"requestFocus",i)}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,backgroundColor:e.backgroundColor,backgroundGradient:e.backgroundGradient,textColor:e.textColor,weakTextColor:e.weakTextColor,focusBackgroundColor:e.focusBackgroundColor,focusTextColor:e.focusTextColor,placeholder:e.placeholder,textFullKeyboard:e.textFullKeyboard,textT9Keyboard:e.textT9Keyboard,keyboardType:e.keyboardType,textClear:e.textClear,textDelete:e.textDelete,currentInput:e.currentInput,autofocus:e.autofocus,rememberKeyboardType:e.rememberKeyboardType,onOnInputChanged:d[0]||(d[0]=f=>i.$emit("onInputChanged",f.nativeEvent)),onOnKeyPressed:d[1]||(d[1]=f=>i.$emit("onKeyPressed",f.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["backgroundColor","backgroundGradient","textColor","weakTextColor","focusBackgroundColor","focusTextColor","placeholder","textFullKeyboard","textT9Keyboard","keyboardType","textClear","textDelete","currentInput","autofocus","rememberKeyboardType"]))}});let j;var Ee;try{const e=require("@extscreen/es3-vue");j=e.registerElement||((Ee=e.default)==null?void 0:Ee.registerElement)}catch{}const Re={install:e=>{if(!globalThis.__QtKeyboard_registered)if(j){const l=(g,c)=>{j(g,{component:{name:c?"QtKeyboard_Plugin":"QtKeyboard",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-keyboard",!1),l("qt-keyboard-plugin",!0),l("QtKeyboard",!1),l("QtKeyboard_Plugin",!0),globalThis.__QtKeyboard_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtKeyboard")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("Keyboard",W),e.component("qt-keyboard",W)}},he="QtPortalPool",K=a.defineComponent({__name:"PortalPool",setup(e,{expose:l}){const g=a.ref(),c=O(),v=he+"_Plugin",r=(c.isPluginActive?v:he).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,style:{position:"absolute"},absolute:!0},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16))}});let H;var xe;try{const e=require("@extscreen/es3-vue");H=e.registerElement||((xe=e.default)==null?void 0:xe.registerElement)}catch{}const Fe={install:e=>{if(!globalThis.__QtPortalPool_registered)if(H){const l=(g,c)=>{H(g,{component:{name:c?"QtPortalPool_Plugin":"QtPortalPool",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-portal-pool",!1),l("qt-portal-pool-plugin",!0),l("QtPortalPool",!1),l("QtPortalPool_Plugin",!0),globalThis.__QtPortalPool_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtPortalPool")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("PortalPool",K),e.component("qt-portal-pool",K)}},pe="QtPortalItem",J=a.defineComponent({__name:"PortalItem",props:{portalId:{}},setup(e,{expose:l}){const g=a.ref(),c=O(),v=pe+"_Plugin",r=(c.isPluginActive?v:pe).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,style:{position:"absolute"},absolute:!0,portalId:e.portalId},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["portalId"]))}});let Z;var we;try{const e=require("@extscreen/es3-vue");Z=e.registerElement||((we=e.default)==null?void 0:we.registerElement)}catch{}const ze={install:e=>{if(!globalThis.__QtPortalItem_registered)if(Z){const l=(g,c)=>{Z(g,{component:{name:c?"QtPortalItem_Plugin":"QtPortalItem",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-portal-item",!1),l("qt-portal-item-plugin",!0),l("QtPortalItem",!1),l("QtPortalItem_Plugin",!0),globalThis.__QtPortalItem_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtPortalItem")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("PortalItem",J),e.component("qt-portal-item",J)}},Ce="QtHsvBackground",X=a.defineComponent({__name:"HsvBackground",props:{hue:{},hueDuration:{}},setup(e,{expose:l}){const g=a.ref(),c=O(),v=Ce+"_Plugin",r=(c.isPluginActive?v:Ce).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.glintui");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,hue:e.hue,hueDuration:e.hueDuration},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["hue","hueDuration"]))}});let Y;var Ae;try{const e=require("@extscreen/es3-vue");Y=e.registerElement||((Ae=e.default)==null?void 0:Ae.registerElement)}catch{}const Me={install:e=>{if(!globalThis.__QtHsvBackground_registered)if(Y){const l=(g,c)=>{Y(g,{component:{name:c?"QtHsvBackground_Plugin":"QtHsvBackground",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-hsv-background",!1),l("qt-hsv-background-plugin",!0),l("QtHsvBackground",!1),l("QtHsvBackground_Plugin",!0),globalThis.__QtHsvBackground_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtHsvBackground")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("HsvBackground",X),e.component("qt-hsv-background",X)}},ke="QtSvgImage",ee=a.defineComponent({__name:"SvgImage",props:{src:{},tintColor:{}},setup(e,{expose:l}){const g=a.ref(),c=O(),v=ke+"_Plugin",r=(c.isPluginActive?v:ke).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,src:e.src,tintColor:e.tintColor},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["src","tintColor"]))}});let te;var Be;try{const e=require("@extscreen/es3-vue");te=e.registerElement||((Be=e.default)==null?void 0:Be.registerElement)}catch{}const De={install:e=>{if(!globalThis.__QtSvgImage_registered)if(te){const l=(g,c)=>{te(g,{component:{name:c?"QtSvgImage_Plugin":"QtSvgImage",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-svg-image",!1),l("qt-svg-image-plugin",!0),l("QtSvgImage",!1),l("QtSvgImage_Plugin",!0),globalThis.__QtSvgImage_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtSvgImage")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("SvgImage",ee),e.component("qt-svg-image",ee)}},Ne="QtNaButton",ot=a.defineComponent({__name:"NaButtonBase",props:{text:{},icon:{},iconSize:{},iconSpace:{},layoutDirection:{},fontSize:{},maxLines:{},textColor:{},focusTextColor:{},backgroundColor:{},focusBackgroundColor:{},normalBorderWidth:{},normalBorderColor:{},focusBorderColor:{},cornerRadius:{},focusScale:{},enableFocusBorder:{type:Boolean}},emits:["onButtonCustomEvent"],setup(e,{expose:l}){const g=a.ref(),c=O(),v=Ne+"_Plugin",r=(c.isPluginActive?v:Ne).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,text:e.text,icon:e.icon,iconSize:e.iconSize,iconSpace:e.iconSpace,layoutDirection:e.layoutDirection,fontSize:e.fontSize,maxLines:e.maxLines,textColor:e.textColor,focusTextColor:e.focusTextColor,backgroundColor:e.backgroundColor,focusBackgroundColor:e.focusBackgroundColor,normalBorderWidth:e.normalBorderWidth,normalBorderColor:e.normalBorderColor,focusBorderColor:e.focusBorderColor,cornerRadius:e.cornerRadius,focusScale:e.focusScale,enableFocusBorder:e.enableFocusBorder,onOnButtonCustomEvent:d[0]||(d[0]=f=>i.$emit("onButtonCustomEvent",f.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["text","icon","iconSize","iconSpace","layoutDirection","fontSize","maxLines","textColor","focusTextColor","backgroundColor","focusBackgroundColor","normalBorderWidth","normalBorderColor","focusBorderColor","cornerRadius","focusScale","enableFocusBorder"]))}}),oe=a.defineComponent({__name:"NaButton",props:{width:{},height:{}},setup(e){const l=e,g=a.computed(()=>({width:typeof l.width=="number"?`${l.width}px`:l.width,height:typeof l.height=="number"?`${l.height}px`:l.height}));return(c,v)=>(a.openBlock(),a.createBlock(ot,a.mergeProps(c.$attrs,{style:g.value}),{default:a.withCtx(()=>[a.renderSlot(c.$slots,"default")]),_:3},16,["style"]))}});let ne;var $e;try{const e=require("@extscreen/es3-vue");ne=e.registerElement||(($e=e.default)==null?void 0:$e.registerElement)}catch{}const _e={install:e=>{if(!globalThis.__QtNaButton_registered)if(ne){const l=(g,c)=>{ne(g,{component:{name:c?"QtNaButton_Plugin":"QtNaButton",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-button",!1),l("qt-na-button-plugin",!0),l("QtNaButton",!1),l("QtNaButton_Plugin",!0),globalThis.__QtNaButton_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaButton")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaButton",oe),e.component("qt-na-button",oe)}},Ie="QtNaCheckbox",ae=a.defineComponent({__name:"NaCheckbox",props:{text:{},checked:{type:Boolean},disabled:{type:Boolean},checkedIcon:{},uncheckedIcon:{},iconSize:{},iconSpace:{},layoutDirection:{},gravity:{},paddingX:{},showBackground:{type:Boolean},fontSize:{},textColor:{},focusTextColor:{},checkedTextColor:{},focusCheckedTextColor:{},disabledTextColor:{},iconColor:{},focusIconColor:{},checkedIconColor:{},focusCheckedIconColor:{},disabledIconColor:{},iconInnerColor:{},focusIconInnerColor:{},checkedIconInnerColor:{},focusCheckedIconInnerColor:{},disabledIconInnerColor:{},focusMode:{},bgColor:{},focusBgColor:{},checkedBgColor:{},focusCheckedBgColor:{},disabledBgColor:{},borderColor:{},focusBorderColor:{},checkedBorderColor:{},focusCheckedBorderColor:{},disabledBorderColor:{},cornerRadius:{},focusScale:{},type:{}},emits:["onCheckedChange"],setup(e,{expose:l}){const g=a.ref(),c=O(),v=Ie+"_Plugin",r=(c.isPluginActive?v:Ie).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,text:e.text,checked:e.checked,disabled:e.disabled,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,iconSize:e.iconSize,iconSpace:e.iconSpace,layoutDirection:e.layoutDirection,gravity:e.gravity,paddingX:e.paddingX,showBackground:e.showBackground,fontSize:e.fontSize,textColor:e.textColor,focusTextColor:e.focusTextColor,checkedTextColor:e.checkedTextColor,focusCheckedTextColor:e.focusCheckedTextColor,disabledTextColor:e.disabledTextColor,iconColor:e.iconColor,focusIconColor:e.focusIconColor,checkedIconColor:e.checkedIconColor,focusCheckedIconColor:e.focusCheckedIconColor,disabledIconColor:e.disabledIconColor,iconInnerColor:e.iconInnerColor,focusIconInnerColor:e.focusIconInnerColor,checkedIconInnerColor:e.checkedIconInnerColor,focusCheckedIconInnerColor:e.focusCheckedIconInnerColor,disabledIconInnerColor:e.disabledIconInnerColor,focusMode:e.focusMode,bgColor:e.bgColor,focusBgColor:e.focusBgColor,checkedBgColor:e.checkedBgColor,focusCheckedBgColor:e.focusCheckedBgColor,disabledBgColor:e.disabledBgColor,borderColor:e.borderColor,focusBorderColor:e.focusBorderColor,checkedBorderColor:e.checkedBorderColor,focusCheckedBorderColor:e.focusCheckedBorderColor,disabledBorderColor:e.disabledBorderColor,cornerRadius:e.cornerRadius,focusScale:e.focusScale,type:e.type,onOnCheckedChange:d[0]||(d[0]=f=>i.$emit("onCheckedChange",f.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["text","checked","disabled","checkedIcon","uncheckedIcon","iconSize","iconSpace","layoutDirection","gravity","paddingX","showBackground","fontSize","textColor","focusTextColor","checkedTextColor","focusCheckedTextColor","disabledTextColor","iconColor","focusIconColor","checkedIconColor","focusCheckedIconColor","disabledIconColor","iconInnerColor","focusIconInnerColor","checkedIconInnerColor","focusCheckedIconInnerColor","disabledIconInnerColor","focusMode","bgColor","focusBgColor","checkedBgColor","focusCheckedBgColor","disabledBgColor","borderColor","focusBorderColor","checkedBorderColor","focusCheckedBorderColor","disabledBorderColor","cornerRadius","focusScale","type"]))}});let ie;var Ge;try{const e=require("@extscreen/es3-vue");ie=e.registerElement||((Ge=e.default)==null?void 0:Ge.registerElement)}catch{}const Le={install:e=>{if(!globalThis.__QtNaCheckbox_registered)if(ie){const l=(g,c)=>{ie(g,{component:{name:c?"QtNaCheckbox_Plugin":"QtNaCheckbox",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-checkbox",!1),l("qt-na-checkbox-plugin",!0),l("QtNaCheckbox",!1),l("QtNaCheckbox_Plugin",!0),globalThis.__QtNaCheckbox_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaCheckbox")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaCheckbox",ae),e.component("qt-na-checkbox",ae)}},nt=a.defineComponent({name:"NaRadioGroup",props:{modelValue:{type:[String,Number,Boolean],default:""},options:{type:Array,default:()=>[]},direction:{type:String,default:"row"},itemWidth:{type:Number,default:void 0},itemHeight:{type:Number,default:void 0},itemGap:{type:Number,default:20},gravity:{type:String,default:"center"},showBackground:{type:Boolean,default:!0}},emits:["update:modelValue","change"],setup(e,{emit:l}){return{groupStyle:a.computed(()=>({display:"flex",flexDirection:e.direction,alignItems:"center"})),getItemStyle:(m,r)=>{var i;const s={...((i=m.props)==null?void 0:i.style)||{}};return e.itemWidth!==void 0&&(s.width=e.itemWidth),e.itemHeight!==void 0&&(s.height=e.itemHeight),r!==e.options.length-1&&(e.direction==="row"?s.marginRight=e.itemGap:s.marginBottom=e.itemGap),s},onItemClick:m=>{m.disabled||(l("update:modelValue",m.value),l("change",m.value))}}}});const ve=(e,l)=>{const g=e.__vccOpts||e;for(const[c,v]of l)g[c]=v;return g};function at(e,l,g,c,v,m){const r=a.resolveComponent("qt-na-checkbox");return a.openBlock(),a.createElementBlock("div",{class:"na-radio-group",style:a.normalizeStyle(e.groupStyle)},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(e.options,(s,i)=>(a.openBlock(),a.createBlock(r,a.mergeProps({key:i,type:"radio",checked:e.modelValue===s.value,text:s.label,gravity:e.gravity,showBackground:e.showBackground,disabled:s.disabled},{ref_for:!0},s.props,{style:e.getItemStyle(s,i),onClick:d=>e.onItemClick(s)}),null,16,["checked","text","gravity","showBackground","disabled","style","onClick"]))),128))],4)}const le=ve(nt,[["render",at],["__scopeId","data-v-448252ff"]]),Ve={install:e=>{e.component("NaRadioGroup",le),e.component("qt-na-radio-group",le)}},it=a.defineComponent({name:"NaCheckboxGroup",props:{modelValue:{type:Array,default:()=>[]},options:{type:Array,default:()=>[]},direction:{type:String,default:"row"},itemWidth:{type:Number,default:void 0},itemHeight:{type:Number,default:void 0},itemGap:{type:Number,default:20},gravity:{type:String,default:"center"},showBackground:{type:Boolean,default:!0}},emits:["update:modelValue","change"],setup(e,{emit:l}){return{groupStyle:a.computed(()=>({display:"flex",flexDirection:e.direction,alignItems:"center"})),getItemStyle:(m,r)=>{var i;const s={...((i=m.props)==null?void 0:i.style)||{}};return e.itemWidth!==void 0&&(s.width=e.itemWidth),e.itemHeight!==void 0&&(s.height=e.itemHeight),r!==e.options.length-1&&(e.direction==="row"?s.marginRight=e.itemGap:s.marginBottom=e.itemGap),s},onItemClick:m=>{if(m.disabled)return;const r=[...e.modelValue],s=r.indexOf(m.value);s>-1?r.splice(s,1):r.push(m.value),l("update:modelValue",r),l("change",r)}}}});function lt(e,l,g,c,v,m){const r=a.resolveComponent("qt-na-checkbox");return a.openBlock(),a.createElementBlock("div",{class:"na-checkbox-group",style:a.normalizeStyle(e.groupStyle)},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(e.options,(s,i)=>(a.openBlock(),a.createBlock(r,a.mergeProps({key:i,type:"checkbox",checked:e.modelValue.includes(s.value),text:s.label,gravity:e.gravity,showBackground:e.showBackground,disabled:s.disabled},{ref_for:!0},s.props,{style:e.getItemStyle(s,i),onClick:d=>e.onItemClick(s)}),null,16,["checked","text","gravity","showBackground","disabled","style","onClick"]))),128))],4)}const re=ve(it,[["render",lt],["__scopeId","data-v-cf6a4eaa"]]),Ue={install:e=>{e.component("NaCheckboxGroup",re),e.component("qt-na-checkbox-group",re)}},Pe="QtNaSwitcher",se=a.defineComponent({__name:"NaSwitcher",props:{checked:{type:Boolean},disabled:{type:Boolean},title:{},textOn:{},textOff:{},subtitle:{},subtitleColor:{},titleColor:{},focusTitleColor:{},titleTextSize:{},subtitleTextSize:{},stateTextSize:{}},emits:["onCheckedChange"],setup(e,{expose:l}){const g=a.ref(),c=O(),v=Pe+"_Plugin",r=(c.isPluginActive?v:Pe).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,checked:e.checked,disabled:e.disabled,title:e.title,textOn:e.textOn,textOff:e.textOff,subtitle:e.subtitle,subtitleColor:e.subtitleColor,titleColor:e.titleColor,focusTitleColor:e.focusTitleColor,titleTextSize:e.titleTextSize,subtitleTextSize:e.subtitleTextSize,stateTextSize:e.stateTextSize,onOnCheckedChange:d[0]||(d[0]=f=>i.$emit("onCheckedChange",f.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["checked","disabled","title","textOn","textOff","subtitle","subtitleColor","titleColor","focusTitleColor","titleTextSize","subtitleTextSize","stateTextSize"]))}});let ce;var Oe;try{const e=require("@extscreen/es3-vue");ce=e.registerElement||((Oe=e.default)==null?void 0:Oe.registerElement)}catch{}const We={install:e=>{if(!globalThis.__QtNaSwitcher_registered)if(ce){const l=(g,c)=>{ce(g,{component:{name:c?"QtNaSwitcher_Plugin":"QtNaSwitcher",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-switcher",!1),l("qt-na-switcher-plugin",!0),l("QtNaSwitcher",!1),l("QtNaSwitcher_Plugin",!0),globalThis.__QtNaSwitcher_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaSwitcher")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaSwitcher",se),e.component("qt-na-switcher",se)}},rt=a.defineComponent({name:"NaSettingSwitch",props:{title:{type:String,default:""},subtitle:{type:String,default:""},modelValue:{type:Boolean,default:!1},textOn:{type:String,default:"打开"},textOff:{type:String,default:"关闭"},titleTextSize:{type:Number,default:28},subtitleTextSize:{type:Number,default:22},stateTextSize:{type:Number,default:24},disabled:{type:Boolean,default:!1},width:{type:[Number,String],default:800},height:{type:[Number,String],default:100}},emits:["update:modelValue","change"],setup(e,{emit:l,attrs:g}){const c=a.ref(e.modelValue);a.watch(()=>e.modelValue,s=>{c.value=s});const v=s=>{const i=s.checked;c.value=i,l("update:modelValue",i),l("change",i)},m=a.computed(()=>typeof e.width=="number"?`${e.width}px`:e.width),r=a.computed(()=>{const s=g.style||{},i=e.subtitle?(typeof e.height=="number"?e.height:parseInt(e.height))+30:e.height;return{width:m.value,height:typeof i=="number"?`${i}px`:i,...s}});return{checked:c,handleCheckedChange:v,mergedStyle:r}}});function st(e,l,g,c,v,m){const r=a.resolveComponent("qt-na-switcher");return a.openBlock(),a.createBlock(r,{class:"na-setting-switch",style:a.normalizeStyle(e.mergedStyle),title:e.title,subtitle:e.subtitle,checked:e.checked,textOn:e.textOn,textOff:e.textOff,titleTextSize:e.titleTextSize,subtitleTextSize:e.subtitleTextSize,stateTextSize:e.stateTextSize,disabled:e.disabled,onOnCheckedChange:e.handleCheckedChange},null,8,["style","title","subtitle","checked","textOn","textOff","titleTextSize","subtitleTextSize","stateTextSize","disabled","onOnCheckedChange"])}const ue=ve(rt,[["render",st]]),je={install(e){e.component("NaSettingSwitch",ue),e.component("qt-na-setting-switch",ue)}},Te="QtNaInputView",ct=a.defineComponent({__name:"NaInputViewBase",props:{text:{},placeholder:{},type:{},status:{},disabled:{type:Boolean},inputSize:{},cursorVisible:{type:Boolean},useSystemKeyboard:{type:Boolean},trailingIcon:{}},emits:["onInputClick","onChange"],setup(e,{expose:l}){const g=a.ref(),c=O(),v=Te+"_Plugin",r=(c.isPluginActive?v:Te).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),s=G(r,c.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return l({getNativeNode:()=>{var i,d;return((d=(i=g.value)==null?void 0:i.getNativeNode)==null?void 0:d.call(i))||g.value}}),(i,d)=>(a.openBlock(),a.createBlock(a.unref(s),a.mergeProps({ref_key:"nativeRef",ref:g,text:e.text,placeholder:e.placeholder,type:e.type,status:e.status,disabled:e.disabled,inputSize:e.inputSize,cursorVisible:e.cursorVisible,useSystemKeyboard:e.useSystemKeyboard,trailingIcon:e.trailingIcon,onOnInputClick:d[0]||(d[0]=f=>i.$emit("onInputClick",f.nativeEvent)),onOnChange:d[1]||(d[1]=f=>i.$emit("onChange",f.nativeEvent))},i.$attrs),{default:a.withCtx(()=>[a.renderSlot(i.$slots,"default")]),_:3},16,["text","placeholder","type","status","disabled","inputSize","cursorVisible","useSystemKeyboard","trailingIcon"]))}}),de=a.defineComponent({__name:"NaInputView",props:{inputSize:{default:"medium"}},emits:["onInputClick","onChange"],setup(e,{emit:l}){const g=l,c=e,v=a.computed(()=>{let s=60;return c.inputSize==="large"?s=70:c.inputSize==="small"&&(s=50),{height:`${s}px`}}),m=s=>{g("onInputClick",s)},r=s=>{g("onChange",s)};return(s,i)=>(a.openBlock(),a.createBlock(ct,a.mergeProps(s.$attrs,{style:v.value,inputSize:e.inputSize,onOnInputClick:m,onOnChange:r}),{default:a.withCtx(()=>[a.renderSlot(s.$slots,"default")]),_:3},16,["style","inputSize"]))}});let ge;var qe;try{const e=require("@extscreen/es3-vue");ge=e.registerElement||((qe=e.default)==null?void 0:qe.registerElement)}catch{}const Ke={install:e=>{if(!globalThis.__QtNaInputView_registered)if(ge){const l=(g,c)=>{ge(g,{component:{name:c?"QtNaInputView_Plugin":"QtNaInputView",processEventData(v,m){const r=v.handler||v,s=m||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=s),r}}})};l("qt-na-input-view",!1),l("qt-na-input-view-plugin",!0),l("QtNaInputView",!1),l("QtNaInputView_Plugin",!0),globalThis.__QtNaInputView_registered=!0,console.log("[@quicktvui/naddons] Successfully registered Native tag:","QtNaInputView")}else console.warn("[@quicktvui/naddons] Failed to find registerElement from @extscreen/es3-vue");e.component("NaInputView",de),e.component("qt-na-input-view",de)}},He={skipPluginCheck:!1},L=new Set;function G(e,l,g){return a.defineComponent({name:`${e}AsyncWrapper`,inheritAttrs:!1,props:{skipPluginCheck:{type:Boolean,default:!1}},setup(c,{slots:v,attrs:m,expose:r}){const s=a.ref("loading"),i=a.ref(""),d=a.ref(),f=globalThis.__VUE_INSTANCE__;r({getNativeNode:()=>{let C=d.value;return!C&&f&&f.vnode&&f.vnode.el&&(C=f.vnode.el,C.childNodes&&C.childNodes.length>0&&(C=C.childNodes[0])),C},nativeRef:d});let q=null,B=null;try{q=V.useES(),B=V.useESPlugin()}catch(C){console.warn("[withAsyncPlugin] 获取 useES 或 useESPlugin 失败,可能处于非 ES 环境。",C)}const D=async()=>{if(!q||typeof q.isComponentRegistered!="function")return console.log("[withAsyncPlugin] es.isComponentRegistered 不可用"),!1;try{const C=await q.isComponentRegistered(e);if(console.log(`[withAsyncPlugin] isComponentRegistered('${e}') 返回:`,C),C===!0||C&&typeof C=="object"&&(C.registered===!0||C.isRegistered===!0))return!0;try{const I=await P.Native.callNativeWithPromise("ExtendModule","getCoreSDKInfo");if(I&&I.core_version){const S=I.core_version;console.log(`[withAsyncPlugin] 当前引擎核心版本: ${S}`);const E=S.split(".").map(w=>parseInt(w,10));if(E.length>=3&&!isNaN(E[0])&&!isNaN(E[1])&&!isNaN(E[2]))if(E[0]*1e6+E[1]*1e3+E[2]>=1011205){console.log(`[withAsyncPlugin] 引擎 >= 1.11.205,使用 ExtendModule 检查 Controller: ${e}`);const T=e.split("-").map(x=>x.charAt(0).toUpperCase()+x.slice(1)).join("");console.log(`[withAsyncPlugin] 同时检查原名和驼峰名: ${e}, ${T}`);const[A,Q]=await Promise.all([P.Native.callNativeWithPromise("ExtendModule","isComponentRegistered",e).catch(()=>!1),P.Native.callNativeWithPromise("ExtendModule","isComponentRegistered",T).catch(()=>!1)]);if(console.log(`[withAsyncPlugin] ExtendModule.isComponentRegistered 返回: [${A}, ${Q}]`),A===!0||Q===!0)return!0}else console.log(`[withAsyncPlugin] 引擎版本 ${S} < 1.11.205,跳过 ExtendModule 检查`);else console.log(`[withAsyncPlugin] 无法解析引擎版本号: ${S}`)}}catch(I){console.log("[withAsyncPlugin] 获取引擎版本或检查 Controller 失败:",I)}return!1}catch(C){return console.warn("[withAsyncPlugin] 检查组件注册状态异常:",C),!1}},R=async()=>{if(He.skipPluginCheck||c.skipPluginCheck){console.log(`[withAsyncPlugin] 跳过 ${e} 插件检查 (skipPluginCheck = true)`),s.value="ready";return}if(!l){s.value="ready";return}const C=await D();if(console.log(`[withAsyncPlugin] 拦截检查 - ${e} 是否已注册:`,C),C||L.has(l)){s.value="ready",L.add(l),console.log("[withAsyncPlugin] 组件已注册,跳过安装流程");return}if(!B){console.warn(`[withAsyncPlugin] 无法获取 useESPlugin 实例,可能处于内置 AAR 环境或非插件环境,尝试直接渲染 ${e}`),s.value="ready";return}console.log(`[withAsyncPlugin] 开始动态安装插件: ${l}`);try{await new Promise((I,S)=>{let E;const w={onPluginInstallSuccess(T,A,Q){T===l&&(clearTimeout(E),B.removeListener(w),console.log(`[withAsyncPlugin] 安装成功 pkg=${T} 状态码=${A}`),A==1003||A==1001?(g?(console.log(`[withAsyncPlugin] 触发反射初始化: ${g}`),P.Native.callNative("EsNativeModule","callReflect",{entry:{from:g,method:"setup"}})):console.log("[withAsyncPlugin] 安装成功,跳过反射初始化(无 pluginInitClass)"),I()):S(new Error(`安装失败 pkg=${T} status=${A} msg=${Q}`)))},onPluginInstallError(T,A,Q){T===l&&(clearTimeout(E),B.removeListener(w),S(new Error(`安装失败 pkg=${T} status=${A} msg=${Q}`)))}};B.addListener({pkg:l},w),E=setTimeout(()=>{B.removeListener(w),S(new Error(`插件安装超时: ${l}`))},8e3),typeof B.installPlugin=="function"?B.installPlugin({pkg:l}):typeof B.install=="function"?B.install(l):S(new Error("当前运行时不支持 install / installPlugin"))}),await a.nextTick(),L.add(l),s.value="ready"}catch(I){console.error("[withAsyncPlugin] 插件加载失败:",I),i.value=(I==null?void 0:I.message)||String(I),s.value="error"}};return a.onMounted(()=>{R()}),()=>{const C={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",...m.style||{}};m.width!==void 0&&!C.width&&(C.width=typeof m.width=="number"?`${m.width}px`:m.width),m.height!==void 0&&!C.height&&(C.height=typeof m.height=="number"?`${m.height}px`:m.height);const I=m.class?`qt-plugin-container ${m.class}`:"qt-plugin-container",S={class:I,style:C,clipChildren:!1,clipPadding:!1,clipToPadding:!1};if(s.value==="loading")return a.h("div",S,[a.h("div",{style:{color:"white",fontSize:"30px"}},"插件加载中...")]);if(s.value==="error")return a.h("div",S,[a.h("div",{style:{color:"white",fontSize:"30px",backgroundColor:"rgba(255,0,0,0.5)"}},`插件加载失败: ${i.value}`)]);const E={},w={};for(const[x,F]of Object.entries(m))if(x.startsWith("on")&&typeof F=="function"){let z=x;x.startsWith("onOn")&&(z="on"+x.slice(4)),w[z]=F}else if(x.startsWith("on")&&Array.isArray(F)){let z=x;x.startsWith("onOn")&&(z="on"+x.slice(4)),w[z]=F}else x.startsWith("onOn")||(E[x]=F);const T={...E,...w,class:I,style:C,ref:x=>{d.value=x}},A=T.tabsData||"",Q=T.actionPayload||"";return console.log("[withAsyncPlugin] 最终准备传递给 h() 的属性键集合:",Object.keys(T),"tabsData.length=",A.length,"actionPayload.length=",Q.length),a.h(e,T,v.default?v.default():[])}}})}const me=Symbol("AddonEnvContext"),Je={isPluginActive:!1,nameSuffix:"",pluginPackageName:"com.quicktvui.plugin.glintui",builtInVersions:{}};async function ut(e="com.quicktvui.plugin.glintui",l="_Plugin"){const g=V.useES();let c={};try{const i=await P.Native.callNativeModule("AddonEnvModule","getBuiltInVersions",[]);i&&typeof i=="object"&&(c=i)}catch(i){console.warn("[AddonProvider] Failed to fetch built-in versions from AddonEnvModule",i)}const v=`QtGridTabs${l}`,m=g.isComponentRegistered(v),r=m instanceof Promise?await m:m,s={isPluginActive:r,nameSuffix:r?l:"",pluginPackageName:r?`${e}.ext`:e,builtInVersions:c};return console.info("[AddonProvider] Environment initialized:",s),s}let fe=a.ref(Je);function dt(e){fe.value=e,a.provide(me,fe)}function O(){var e;return((e=a.inject(me,fe))==null?void 0:e.value)||Je}async function Ze(e){console.log("[AddonProvider] Sending GridTabs global config to Native:",e);try{const l=await P.Native.callNativeWithPromise("GridTabsConfigModule","setDefaultConfig",JSON.stringify(e));return console.log("[AddonProvider] Received response from Native:",l),!!(l&&l.success)}catch(l){return console.error("[AddonProvider] Failed to initialize GridTabs global config:",l),!1}}async function Xe(e){console.log("[AddonProvider] Sending ExtraUI global theme config to Native:",e);try{const l=await P.Native.callNativeWithPromise("ExtraUIConfigModule","setThemeConfig",JSON.stringify(e));return console.log("[AddonProvider] Received ExtraUI theme response from Native:",l),!!(l&&l.success)}catch(l){return console.error("[AddonProvider] Failed to initialize ExtraUI global theme config:",l),!1}}async function gt(e){console.log("[AddonProvider] Initializing global theme across all modules:",e);const l=await Xe(e),g=await Ze({themeConfig:{placeholderColor:e.placeholderColor,glowColor:e.glowColor||e.focusBackgroundColor,outerBorderColor:e.outerBorderColor||e.focusBorderColor,innerBorderColor:e.innerBorderColor,enableElevationShadow:e.enableElevationShadow,cornerRadius:e.cornerRadius,buttonCornerRadius:e.buttonCornerRadius,primaryTextColor:e.primaryTextColor,secondaryTextColor:e.secondaryTextColor,focusTextColor:e.focusTextColor,selectedTextColor:e.selectedTextColor,selectedBackgroundColor:e.selectedBackgroundColor,focusBackgroundColor:e.focusBackgroundColor,buttonNormalBackgroundColor:e.buttonNormalBackgroundColor}});return l&&g}const Ye={install:e=>{e.use(Qe),e.use(Re),e.use(Fe),e.use(ze),e.use(Me),e.use(De),e.use(_e),e.use(Le),e.use(Ve),e.use(Ue),e.use(We),e.use(je),e.use(Ke)}};exports.ADDON_ENV_CONTEXT_KEY=me;exports.GridTabs=_;exports.GridTabsPlugin=Qe;exports.HsvBackground=X;exports.HsvBackgroundPlugin=Me;exports.Keyboard=W;exports.KeyboardPlugin=Re;exports.NaButton=oe;exports.NaButtonPlugin=_e;exports.NaCheckbox=ae;exports.NaCheckboxGroup=re;exports.NaCheckboxGroupPlugin=Ue;exports.NaCheckboxPlugin=Le;exports.NaInputView=de;exports.NaInputViewPlugin=Ke;exports.NaRadioGroup=le;exports.NaRadioGroupPlugin=Ve;exports.NaSettingSwitch=ue;exports.NaSettingSwitchPlugin=je;exports.NaSwitcher=se;exports.NaSwitcherPlugin=We;exports.PortalItem=J;exports.PortalItemPlugin=ze;exports.PortalPool=K;exports.PortalPoolPlugin=Fe;exports.QuickTVUINAddons=Ye;exports.QuickTVUINAddonsConfig=He;exports.SvgImage=ee;exports.SvgImagePlugin=De;exports.default=Ye;exports.initAddonEnv=ut;exports.initExtraUIGlobalTheme=Xe;exports.initGlobalTheme=gt;exports.initGridTabsGlobalConfig=Ze;exports.provideAddonEnv=dt;exports.useAddonEnv=O;exports.useGridTabs=tt;exports.withAsyncPlugin=G;
|