@quicktvui/naddons 1.0.0-rc.0 → 1.0.0-rc.2
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/components/GridTabs/GridTabs.vue.d.ts +56 -2
- package/dist/components/GridTabs/useGridTabs.d.ts +5 -1
- package/dist/components/HsvBackground/HsvBackground.vue.d.ts +7 -19
- package/dist/components/HsvBackground/index.d.ts +9 -2
- package/dist/components/NaButton/NaButton.vue.d.ts +24 -0
- package/dist/components/NaButton/NaButtonBase.vue.d.ts +60 -0
- package/dist/components/NaButton/index.d.ts +13 -0
- package/dist/components/NaCheckbox/NaCheckbox.vue.d.ts +108 -0
- package/dist/components/NaCheckbox/index.d.ts +13 -0
- package/dist/components/NaCheckboxGroup/NaCheckboxGroup.vue.d.ts +103 -0
- package/dist/components/NaCheckboxGroup/index.d.ts +13 -0
- package/dist/components/NaInputView/NaInputView.vue.d.ts +42 -0
- package/dist/components/NaInputView/NaInputViewBase.vue.d.ts +46 -0
- package/dist/components/NaInputView/index.d.ts +13 -0
- package/dist/components/NaRadioGroup/NaRadioGroup.vue.d.ts +103 -0
- package/dist/components/NaRadioGroup/index.d.ts +13 -0
- package/dist/components/NaSettingSwitch/NaSettingSwitch.vue.d.ts +111 -0
- package/dist/components/NaSettingSwitch/index.d.ts +6 -0
- package/dist/components/NaSwitcher/NaSwitcher.vue.d.ts +50 -0
- package/dist/components/NaSwitcher/index.d.ts +13 -0
- package/dist/components/SvgImage/SvgImage.vue.d.ts +26 -0
- package/dist/components/SvgImage/index.d.ts +13 -0
- package/dist/core/AddonProvider.d.ts +14 -1
- package/dist/index.d.ts +33 -1
- package/dist/modules/AddonEnvModule.d.ts +4 -0
- package/dist/modules/ExtraUIConfigModule.d.ts +7 -0
- package/dist/modules/GridTabsConfigModule.d.ts +7 -0
- package/dist/naddons.cjs.js +1 -1
- package/dist/naddons.es.js +1528 -622
- package/dist/style.css +1 -0
- package/dist/types/index.d.ts +50 -0
- 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 i=require("vue"),x=require("@extscreen/es3-vue"),K=require("@extscreen/es3-core"),te="QtGridTabs",L=i.defineComponent({__name:"GridTabs",setup(o,{expose:s}){const f=i.ref(),b=B(),g=te+"_Plugin",r=(b.isPluginActive?g:te).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),m=q(r,b.pluginPackageName||"com.quicktvui.plugin.glintui","com.quicktvui.plugin.glintui.GlintPluginApp");return s({getNativeNode:()=>{var l,v;return((v=(l=f.value)==null?void 0:l.getNativeNode)==null?void 0:v.call(l))||f.value}}),(l,v)=>(i.openBlock(),i.createBlock(i.unref(m),i.mergeProps({ref_key:"nativeRef",ref:f},l.$attrs),{default:i.withCtx(()=>[i.renderSlot(l.$slots,"default")]),_:3},16))}});let j;var re;try{const o=require("@extscreen/es3-vue");j=o.registerElement||((re=o.default)==null?void 0:re.registerElement)}catch{}const ue={install:o=>{if(!globalThis.__QtGridTabs_registered)if(j){const s=(f,b)=>{j(f,{component:{name:b?"QtGridTabs_Plugin":"QtGridTabs",processEventData(g,y){const r=g.handler||g,m=y||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=m),r}}})};s("qt-grid-tabs",!1),s("qt-grid-tabs-plugin",!0),s("QtGridTabs",!1),s("QtGridTabs_Plugin",!0),s("gt-tabs",!1),s("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");o.component("GridTabs",L),o.component("qt-grid-tabs",L),o.component("gt-tabs",L)}};function he(o,s){const f=i.ref(""),b=i.shallowRef([]),g=i.shallowRef([]);let y=!1,r=!1;const m="__virtual_single_tab__";let l="",v=!1;const p=i.ref({}),I=n=>{const e=Array.isArray(n)?n:[n];if(r&&o.value){if(typeof o.value.dispatchAction=="function"){console.log("[useGridTabs] Calling Wrapper dispatchAction directly"),o.value.dispatchAction(e);return}let t=o.value;typeof o.value.getNativeNode=="function"?t=o.value.getNativeNode()||o.value:o.value.nativeRef&&(t=o.value.nativeRef),t?(console.log("[useGridTabs] Calling Native callUIFunction dispatchAction fallback"),x.Native.callUIFunction(t,"dispatchAction",[JSON.stringify(e)])):console.warn("[useGridTabs] Native target is null or undefined, cannot call dispatchAction")}},M=(n,e)=>{if(!n)return!1;let t=!0;return n.id||(console.error(`[useGridTabs] ❌ 数据格式错误 (${e}): 卡片缺失必填字段 'id'。每个卡片必须有唯一标识才能进行后续更新!`,n),t=!1),n.viewType||(console.error(`[useGridTabs] ❌ 数据格式错误 (${e}): 卡片缺失必填字段 'viewType' (id: ${n.id||"未知"})。必须指定 Native 注册的视图类型或 Portal 标识!`,n),t=!1),t},R=(n,e)=>{if(!n)return!1;let t=!0;return n.tabId||(console.error(`[useGridTabs] ❌ 数据格式错误 (${e}): Tab 缺失必填字段 'tabId'。每个 Tab 必须有唯一标识!`,n),t=!1),(n.title===void 0||n.title===null)&&console.warn(`[useGridTabs] ⚠️ 数据格式警告 (${e}): Tab 缺失 'title' 字段 (tabId: ${n.tabId||"未知"}),导航栏可能显示为空。`,n),t},w=(n,e)=>{if(!n||n.length===0)return;C.clear();const t=n[0].hasOwnProperty("tabId")||n[0].hasOwnProperty("items")&&Array.isArray(n[0].items);y=e==="1d",e==="1d"&&t?console.error("[useGridTabs] ❌ 赋值错误: 你正在向 `items.value` (一维瀑布流) 赋值二维 Tabs 数据结构!请改用 `tabs.value = ...`"):e==="2d"&&!t&&console.error("[useGridTabs] ❌ 赋值错误: 你正在向 `tabs.value` (二维导航) 赋值一维卡片列表数据结构!请改用 `items.value = ...`"),e==="1d"?n.forEach((a,c)=>M(a,`items.value[${c}]`)):n.forEach((a,c)=>{R(a,`tabs.value[${c}]`),a.items&&Array.isArray(a.items)&&a.items.forEach((d,u)=>M(d,`tabs.value[${c}].items[${u}]`))}),r=!0,O()},C=new Set,O=(n="unknown")=>{if(!r){console.warn("[useGridTabs] triggerRootUpdate skipped because isInitialized is false");return}let e={protocolVersion:"1.28.0",gridBasis:(s==null?void 0:s.gridBasis)??30,unitType:(s==null?void 0:s.unitType)??"px",contentConfig:(s==null?void 0:s.contentConfig)??(s==null?void 0:s.layoutConfig)??{box:{padding:[0,60,60,60]},navContentGapNormal:0,itemGap:24},navConfig:(s==null?void 0:s.navConfig)??{dock:"left",mode:"fixed",renderType:"smart-hybrid",box:{size:[200,0]},expandedBox:{size:[300,0]}},cacheConfig:(s==null?void 0:s.cacheConfig)??{offscreenPageLimit:1,prefetchOffset:2,preLoadEnabled:!1,strategy:"data_priority"},animationConfig:(s==null?void 0:s.animationConfig)??{duration:300,easing:"ease-out"},interactionStrategy:(s==null?void 0:s.interactionStrategy)??{defaultFocus:"nav",interceptBack:!0,backMode:"home-first",autoScrollToTop:!0,edgeScrollProtection:.5},focusConfig:(s==null?void 0:s.focusConfig)??{boundaryLock:{left:!1,right:!1,top:!1,bottom:!1}},themeConfig:s==null?void 0:s.themeConfig,referenceResolution:(s==null?void 0:s.referenceResolution)??{w:1920,h:1080}},t=[];y?(e.navConfig={...e.navConfig,renderType:"none"},t=[{tabId:m,title:"Virtual Tab",hidden:!0,items:g.value}]):t=b.value;const a=JSON.stringify({page_spec:e,tabs:t});if(f.value==="")console.log(`[useGridTabs] triggerRootUpdate: Initializing tabsDataStr (length=${a.length})`),f.value=a,l=a;else{if(l===a){console.log("[useGridTabs] triggerRootUpdate: Data unchanged, skipping RELOAD_TABS");return}console.log(`[useGridTabs] triggerRootUpdate: Sending RELOAD_TABS action directly to Native (length=${a.length})`),f.value=a,l=a,I({op:"RELOAD_TABS",payload:{pageSpec:e,page_spec:e,tabs:t}})}},h=n=>{if(!n||typeof n!="object"||n.__isGridTabsProxy)return n;n.content&&typeof n.content=="object"&&!n.content.__isGridTabsProxy&&(n.content=new Proxy(n.content,{set(t,a,c,d){const u=Reflect.set(t,a,c,d);return n.id&&r&&I({op:"UPDATE_ITEM",itemId:n.id,payload:n}),u}}),Object.defineProperty(n.content,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(n.content,"__v_skip",{value:!0,enumerable:!1})),n.subItems&&Array.isArray(n.subItems)&&!n.subItems.__isGridTabsProxy&&(n.subItems=T(n.subItems,n.id),Object.defineProperty(n.subItems,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(n.subItems,"__v_skip",{value:!0,enumerable:!1}));const e=new Proxy(n,{set(t,a,c,d){const u=Reflect.set(t,a,c,d);return t.id&&r&&!v&&I({op:"UPDATE_ITEM",itemId:t.id,payload:t}),u}});return Object.defineProperty(e,"__isGridTabsProxy",{value:!0,enumerable:!1}),Object.defineProperty(e,"__v_skip",{value:!0,enumerable:!1}),e},T=(n,e)=>{for(let t=0;t<n.length;t++)n[t]=h(n[t]);return new Proxy(n,{get(t,a,c){return a==="push"?(...d)=>{d.forEach((G,U)=>M(G,`push(${U})`)),r||console.error("[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时调用了 push()。请先对 items.value 或 tabs.value 进行全量赋值!");const u=d.map(G=>h(G)),P=Array.prototype.push.apply(t,u);return v||I({op:"APPEND_SUB_ITEMS",itemId:e,payload:{subItems:u}}),P}:a==="unshift"?(...d)=>{d.forEach((G,U)=>M(G,`unshift(${U})`)),r||console.error("[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时调用了 unshift()。请先对 items.value 或 tabs.value 进行全量赋值!");const u=d.map(G=>h(G)),P=Array.prototype.unshift.apply(t,u);return r&&u.length>0&&!v&&I({op:"PREPEND_SUB_ITEMS",itemId:e,payload:{subItems:u}}),P}:a==="splice"?(...d)=>{const u=d.length>=2&&d[0]===0&&d[1]===t.length,P=Array.prototype.splice.apply(t,d);return r&&u&&e!==m?v||I({op:"CLEAR_SUB_ITEMS",itemId:e}):r&&(v||O("items array spliced")),P}:Reflect.get(t,a,c)},set(t,a,c,d){if(a!=="length"&&!isNaN(Number(a))){r||console.error(`[useGridTabs] ❌ 时机错误: 在底层还未完成初始化时直接修改了索引 [${String(a)}]。请先对 items.value 或 tabs.value 进行全量赋值!`),M(c,`索引赋值 [${String(a)}]`);const u=h(c),P=Reflect.set(t,a,u,d);return u&&u.id&&!v&&I({op:"UPDATE_ITEM",itemId:u.id,payload:u}),P}return Reflect.set(t,a,c,d)}})},k=n=>(n.items&&Array.isArray(n.items)&&!n.items.__isGridTabsProxy&&(n.items=T(n.items,n.tabId),Object.defineProperty(n.items,"__isGridTabsProxy",{value:!0,enumerable:!1})),new Proxy(n,{set(e,t,a,c){if(t==="items"){let u=a;return Array.isArray(a)&&!a.__isGridTabsProxy&&(u=T(a,e.tabId),Object.defineProperty(u,"__isGridTabsProxy",{value:!0,enumerable:!1})),Reflect.set(e,t,u,c)}else if(t==="loadState"){const u=Reflect.set(e,t,a,c);return r&&e.tabId&&!v&&I({op:"UPDATE_TAB_STATE",itemId:e.tabId,payload:{loadState:a}}),u}return Reflect.set(e,t,a,c)}})),E=n=>{const e=n.map(t=>k(t));return new Proxy(e,{set(t,a,c,d){if(a!=="length"&&!isNaN(Number(a))){let u=c;c.__isGridTabsProxy||(u=k(c),Object.defineProperty(u,"__isGridTabsProxy",{value:!0,enumerable:!1}));const P=Reflect.set(t,a,u,d);return O(),P}return Reflect.set(t,a,c,d)}})};i.watch(b,(n,e)=>{if(console.log("[useGridTabs] watch(tabs) triggered:",{newTabs:n,isInitialized:r}),!n||n.length===0){f.value="",l="",r=!1;return}if(n.__isGridTabsProxy)console.log("[useGridTabs] newTabs is ALREADY a proxy, triggering root update"),O();else{console.log("[useGridTabs] newTabs is NOT a proxy, performing full deduceModeAndInitialize & wrapping");const t=E(n);Object.defineProperty(t,"__isGridTabsProxy",{value:!0,enumerable:!1}),w(t,"2d"),b.value=t}},{flush:"sync",deep:!1}),i.watch(g,(n,e)=>{if(console.log("[useGridTabs] watch(items) triggered:",{newItems:n,isInitialized:r}),!n||n.length===0){f.value="",l="",r=!1;return}if(n.__isGridTabsProxy)console.log("[useGridTabs] newItems is ALREADY a proxy, triggering root update"),O();else{console.log("[useGridTabs] newItems is NOT a proxy, performing full deduceModeAndInitialize & wrapping");const t=T(n,m);Object.defineProperty(t,"__isGridTabsProxy",{value:!0,enumerable:!1}),w(t,"1d"),g.value=t}},{flush:"sync",deep:!1});const A={},_=()=>{console.log("[useGridTabs] resetInitialization called manually"),r=!1,C.clear();for(const n in A)delete A[n]},S=n=>{if(!n||n.length===0){f.value="",r=!1;return}n[0].hasOwnProperty("tabId")||n[0].hasOwnProperty("items")&&Array.isArray(n[0].items)?b.value=n:g.value=n},$=n=>{p.value=n},N=i.computed(()=>({tabsData:f.value,onTabNeedsData:async(...n)=>{let e=n[0];if(e&&e.nativeEvent&&(e=e.nativeEvent),!p.value.onTabNeedsData)return;const{tabId:t,index:a,reason:c}=e;if(C.has(t)){console.log(`[useGridTabs] onTabNeedsData SKIP: tabId=${t} 已经发起过请求,防止死循环`);return}C.add(t);try{const d=await p.value.onTabNeedsData(t,a,c);if(d&&Array.isArray(d))if(A[t]=1,d.length>0){const u=b.value.find(P=>P.tabId===t);u&&(u.items?u.items.length>0&&u.items.splice(0,u.items.length):u.items=[],u.items.push(...d),u.loadState="ready",I({op:"UPDATE_TAB_STATE",itemId:t,payload:{loadState:"ready"}}))}else console.warn(`[useGridTabs] ⚠️ 警告: onTabNeedsData(tabId="${t}") 返回了空数组 []!`),console.warn("👉 如果你已经在此函数内手动调用了 push() 来追加数据,请在最后 return null 或 undefined。"),console.warn("👉 如果该 Tab 确实没有数据,返回 [] 可能会导致底层的 Header 等已有元素被清空,请注意检查。"),console.warn("👉 框架已为您拦截此次空数组覆盖,保留了当前的 DOM 结构。")}catch(d){console.error("[useGridTabs] onTabNeedsData 执行失败:",d),C.delete(t)}},onLoadMore:async(...n)=>{let e=n[0];if(e&&e.nativeEvent&&(e=e.nativeEvent),!p.value.onLoadMore)return;const{tabId:t,itemId:a}=e,d=(A[t]||1)+1;console.log(`[useGridTabs] 拦截到底层 onLoadMore,强行接管页码: tabId=${t}, pageNo=${d}`);try{const u=await p.value.onLoadMore(t,d,a);if(u&&Array.isArray(u))if(u.length>0)if(A[t]=d,y)g.value.push(...u);else{const P=b.value.find(G=>G.tabId===t);P&&P.items&&P.items.push(...u)}else console.warn(`[useGridTabs] ⚠️ 警告: onLoadMore(tabId="${t}", pageNo="${d}") 返回了空数组 []!`),console.warn('👉 如果这是你的最后一页数据,推荐在卡片列表中追加一个 type="no_more" 的 footer 卡片,而不是仅仅返回空。'),console.warn("👉 框架已忽略本次空数据追加,且不会自增页码。")}catch(u){console.error("[useGridTabs] onLoadMore 业务层请求失败:",u)}},onItemPresence:(...n)=>{let e=n[0];if(console.log("[useGridTabs] ⚡️ bindings caught onItemPresence:",e),p.value.onItemPresence)try{let t=typeof e=="string"?e:(e==null?void 0:e.nativeEvent)||e;t&&typeof t.data=="string"&&(t=t.data);const a=typeof t=="string"?JSON.parse(t):t;a&&a.type==="VIEW_PRESENCE_BATCH"&&Array.isArray(a.payload)?a.payload.forEach(c=>{c.itemId&&typeof c.itemId=="string"&&c.itemId.startsWith("fallback_pos_")&&console.warn(`[useGridTabs] ⚠️ 警告:检测到列表项曝光 (index=${c.index}),但未配置 itemId。请检查传入的 items 数组,务必为每个数据项指定唯一的 itemId,否则底层无法准确进行去重与曝光上报。`),p.value.onItemPresence(c)}):p.value.onItemPresence(a)}catch(t){console.error("[useGridTabs] Failed to parse onItemPresence event payload:",t),p.value.onItemPresence(e)}},onTabSelected:(...n)=>{let e=n[0];e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onTabSelected&&p.value.onTabSelected(e)},onItemClick:(...n)=>{let e=n[0];if(console.log("[useGridTabs] RAW onItemClick intercepted from Native:",e),e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onItemClick)try{let t=typeof e=="string"?e:(e==null?void 0:e.data)||e;const a=typeof t=="string"?JSON.parse(t):t;p.value.onItemClick(a)}catch(t){console.error("[useGridTabs] Failed to parse onItemClick event payload:",t),p.value.onItemClick(e)}else console.warn("[useGridTabs] onItemClick triggered but NO callback registered in callbacksRef!")},onItemLongClick:(...n)=>{let e=n[0];if(console.log("[useGridTabs] RAW onItemLongClick intercepted from Native:",e),typeof e=="number"&&n.length>=3&&typeof n[1]=="string"&&(e=n[2]),e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onItemLongClick)try{let t=typeof e=="string"?e:(e==null?void 0:e.data)||e;const a=typeof t=="string"?JSON.parse(t):t;p.value.onItemLongClick(a)}catch(t){console.error("[useGridTabs] Failed to parse onItemLongClick event payload:",t),p.value.onItemLongClick(e)}},onItemFocused:(...n)=>{let e=n[0];if(e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onItemFocused)try{let t=typeof e=="string"?e:(e==null?void 0:e.data)||e;const a=typeof t=="string"?JSON.parse(t):t;p.value.onItemFocused(a)}catch(t){console.error("[useGridTabs] Failed to parse onItemFocused event payload:",t),p.value.onItemFocused(e)}},onTabFocused:(...n)=>{let e=n[0];e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onTabFocused&&p.value.onTabFocused(e)},onScroll:(...n)=>{let e=n[0];if(e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onScroll)try{const t=(e==null?void 0:e.data)||e;p.value.onScroll(t)}catch{p.value.onScroll(e)}},onScrollStateChanged:(...n)=>{let e=n[0];if(e&&e.nativeEvent&&(e=e.nativeEvent),p.value.onScrollStateChanged)try{const t=(e==null?void 0:e.data)||e;p.value.onScrollStateChanged(t)}catch{p.value.onScrollStateChanged(e)}}}));return{tabsDataStr:f,bindings:N,tabs:b,items:g,initData:S,setCallbacks:$,updateItem:(n,e)=>{if(!r){console.error("[useGridTabs] ❌ 时机错误: 尚未初始化数据,无法调用 updateItem");return}I({op:"UPDATE_ITEM",itemId:n,payload:e}),v=!0;try{if(y){const t=g.value.find(a=>a.id===n);t&&Object.assign(t,e)}else for(const t of b.value)if(t.items){const a=t.items.find(c=>c.id===n);if(a){Object.assign(a,e);break}}}finally{v=!1}},deleteItem:(n,e=!0)=>{if(r){I({op:"DELETE_ITEM",itemId:n,payload:{animated:e}}),v=!0;try{if(y){const t=g.value.findIndex(a=>a.id===n);t!==-1&&g.value.splice(t,1)}else for(const t of b.value)if(t.items){const a=t.items.findIndex(c=>c.id===n);if(a!==-1){t.items.splice(a,1);break}}}finally{v=!1}}},prependItems:(n,e)=>{if(r){I({op:"PREPEND_SUB_ITEMS",itemId:n,payload:{subItems:e}}),v=!0;try{if(y)g.value.unshift(...e);else{const t=b.value.find(a=>a.tabId===n);t&&t.items&&t.items.unshift(...e)}}finally{v=!1}}},clearItems:n=>{if(r){I({op:"CLEAR_SUB_ITEMS",itemId:n}),v=!0;try{if(y)g.value.splice(0,g.value.length);else{const e=b.value.find(t=>t.tabId===n);e&&e.items&&e.items.splice(0,e.items.length)}}finally{v=!1}}},moveItem:(n,e,t)=>{if(r){I({op:"MOVE_ITEM",itemId:n,payload:{targetPosition:e,anchorItemId:t}}),v=!0;try{const a=c=>{const d=c.findIndex(P=>P.id===n),u=c.findIndex(P=>P.id===t);if(d!==-1&&u!==-1){const P=c.splice(d,1)[0],G=c.findIndex(me=>me.id===t),U=e==="after"?G+1:G;c.splice(U,0,P)}};if(y)a(g.value);else for(const c of b.value)c.items&&a(c.items)}finally{v=!1}}},replaceItem:(n,e)=>{if(r){I({op:"REPLACE_ITEM",itemId:n,payload:e}),v=!0;try{if(y){const t=g.value.findIndex(a=>a.id===n);t!==-1&&(g.value[t]=e)}else for(const t of b.value)if(t.items){const a=t.items.findIndex(c=>c.id===n);if(a!==-1){t.items[a]=e;break}}}finally{v=!1}}},dispatchAction:I,resetInitialization:_,getFocusState:async()=>new Promise((n,e)=>{let t=o.value;typeof o.value.getNativeNode=="function"?t=o.value.getNativeNode()||o.value:o.value.nativeRef&&(t=o.value.nativeRef),console.log("[useGridTabs] getFocusState called, nativeTarget:",t);const a=c=>{if(console.log("[useGridTabs] getFocusState callback received:",c),c&&c.isSuccess!==void 0&&c.result!==void 0){n(c.result);return}try{const d=typeof c=="string"?JSON.parse(c):c;n(d)}catch(d){e(d)}};typeof x.Native.callUIFunction=="function"?(console.log('[useGridTabs] Executing Native.callUIFunction("getFocusState") with callback as 4th arg'),x.Native.callUIFunction(t,"getFocusState",[],a)):(console.error("[useGridTabs] Native.callUIFunction is not available"),e(new Error("Native.callUIFunction is not available")))}),getItemRect:async n=>new Promise((e,t)=>{let a=o.value;typeof o.value.getNativeNode=="function"?a=o.value.getNativeNode()||o.value:o.value.nativeRef&&(a=o.value.nativeRef),console.log(`[useGridTabs] getItemRect called for itemId=${n}, nativeTarget:`,a);const c=d=>{if(console.log(`[useGridTabs] getItemRect callback received for itemId=${n}:`,d),d&&d.isSuccess!==void 0&&d.result!==void 0){e(d.result);return}try{const u=typeof d=="string"?JSON.parse(d):d;e(u)}catch(u){t(u)}};typeof x.Native.callUIFunction=="function"?(console.log('[useGridTabs] Executing Native.callUIFunction("getItemRect") with itemId and callback as 4th arg'),x.Native.callUIFunction(a,"getItemRect",[n],c)):(console.error("[useGridTabs] Native.callUIFunction is not available"),t(new Error("Native.callUIFunction is not available")))}),requestFocus:n=>{let e=o.value;typeof o.value.getNativeNode=="function"?e=o.value.getNativeNode()||o.value:o.value.nativeRef&&(e=o.value.nativeRef),x.Native.callUIFunction(e,"requestFocus",[n])}}}const ne="QtKeyboard",V=i.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(o,{expose:s}){const f=i.ref(),b=B(),g=ne+"_Plugin",r=(b.isPluginActive?g:ne).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),m=q(r,b.pluginPackageName||"com.quicktvui.plugin.extraui","com.quicktvui.plugin.extraui.ExtraUIPluginApp");return s({getNativeNode:()=>{var l,v;return((v=(l=f.value)==null?void 0:l.getNativeNode)==null?void 0:v.call(l))||f.value},requestFocus:(...l)=>{var p,I;const v=((I=(p=f.value)==null?void 0:p.getNativeNode)==null?void 0:I.call(p))||f.value;v&&x.Native.callUIFunction(v,"requestFocus",l)}}),(l,v)=>(i.openBlock(),i.createBlock(i.unref(m),i.mergeProps({ref_key:"nativeRef",ref:f,backgroundColor:o.backgroundColor,backgroundGradient:o.backgroundGradient,textColor:o.textColor,weakTextColor:o.weakTextColor,focusBackgroundColor:o.focusBackgroundColor,focusTextColor:o.focusTextColor,placeholder:o.placeholder,textFullKeyboard:o.textFullKeyboard,textT9Keyboard:o.textT9Keyboard,keyboardType:o.keyboardType,textClear:o.textClear,textDelete:o.textDelete,currentInput:o.currentInput,autofocus:o.autofocus,rememberKeyboardType:o.rememberKeyboardType,onOnInputChanged:v[0]||(v[0]=p=>l.$emit("onInputChanged",p.nativeEvent)),onOnKeyPressed:v[1]||(v[1]=p=>l.$emit("onKeyPressed",p.nativeEvent))},l.$attrs),{default:i.withCtx(()=>[i.renderSlot(l.$slots,"default")]),_:3},16,["backgroundColor","backgroundGradient","textColor","weakTextColor","focusBackgroundColor","focusTextColor","placeholder","textFullKeyboard","textT9Keyboard","keyboardType","textClear","textDelete","currentInput","autofocus","rememberKeyboardType"]))}});let W;var ie;try{const o=require("@extscreen/es3-vue");W=o.registerElement||((ie=o.default)==null?void 0:ie.registerElement)}catch{}const de={install:o=>{if(!globalThis.__QtKeyboard_registered)if(W){const s=(f,b)=>{W(f,{component:{name:b?"QtKeyboard_Plugin":"QtKeyboard",processEventData(g,y){const r=g.handler||g,m=y||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=m),r}}})};s("qt-keyboard",!1),s("qt-keyboard-plugin",!0),s("QtKeyboard",!1),s("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");o.component("Keyboard",V),o.component("qt-keyboard",V)}},oe="QtPortalPool",z=i.defineComponent({__name:"PortalPool",setup(o,{expose:s}){const f=i.ref(),b=B(),g=oe+"_Plugin",r=(b.isPluginActive?g:oe).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),m=q(r,b.pluginPackageName||"com.quicktvui.plugin.glintui");return s({getNativeNode:()=>{var l,v;return((v=(l=f.value)==null?void 0:l.getNativeNode)==null?void 0:v.call(l))||f.value}}),(l,v)=>(i.openBlock(),i.createBlock(i.unref(m),i.mergeProps({ref_key:"nativeRef",ref:f},l.$attrs),{default:i.withCtx(()=>[i.renderSlot(l.$slots,"default")]),_:3},16))}});let Z;var le;try{const o=require("@extscreen/es3-vue");Z=o.registerElement||((le=o.default)==null?void 0:le.registerElement)}catch{}const ve={install:o=>{if(!globalThis.__QtPortalPool_registered)if(Z){const s=(f,b)=>{Z(f,{component:{name:b?"QtPortalPool_Plugin":"QtPortalPool",processEventData(g,y){const r=g.handler||g,m=y||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=m),r}}})};s("qt-portal-pool",!1),s("qt-portal-pool-plugin",!0),s("QtPortalPool",!1),s("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");o.component("PortalPool",z),o.component("qt-portal-pool",z)}},se="QtPortalItem",H=i.defineComponent({__name:"PortalItem",props:{portalId:{}},setup(o,{expose:s}){const f=i.ref(),b=B(),g=se+"_Plugin",r=(b.isPluginActive?g:se).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),m=q(r,b.pluginPackageName||"com.quicktvui.plugin.glintui");return s({getNativeNode:()=>{var l,v;return((v=(l=f.value)==null?void 0:l.getNativeNode)==null?void 0:v.call(l))||f.value}}),(l,v)=>(i.openBlock(),i.createBlock(i.unref(m),i.mergeProps({ref_key:"nativeRef",ref:f,portalId:o.portalId},l.$attrs),{default:i.withCtx(()=>[i.renderSlot(l.$slots,"default")]),_:3},16,["portalId"]))}});let J;var ce;try{const o=require("@extscreen/es3-vue");J=o.registerElement||((ce=o.default)==null?void 0:ce.registerElement)}catch{}const fe={install:o=>{if(!globalThis.__QtPortalItem_registered)if(J){const s=(f,b)=>{J(f,{component:{name:b?"QtPortalItem_Plugin":"QtPortalItem",processEventData(g,y){const r=g.handler||g,m=y||(r==null?void 0:r.nativeParams)||{};return r&&(r.nativeEvent=m),r}}})};s("qt-portal-item",!1),s("qt-portal-item-plugin",!0),s("QtPortalItem",!1),s("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");o.component("PortalItem",H),o.component("qt-portal-item",H)}},ae="QtHsvBackground",Y=i.defineComponent({__name:"HsvBackground",props:{hue:{default:-2}},setup(o,{expose:s}){const f=i.ref(),b=B(),g=ae+"_Plugin",r=(b.isPluginActive?g:ae).replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g,"$1-$2").toLowerCase().replace(/^-/,""),m=q(r,b.pluginPackageName||"com.quicktvui.plugin.glintui");return s({getNativeNode:()=>{var l,v;return((v=(l=f.value)==null?void 0:l.getNativeNode)==null?void 0:v.call(l))||f.value}}),(l,v)=>(i.openBlock(),i.createBlock(i.unref(m),i.mergeProps({ref_key:"nativeRef",ref:f,hue:o.hue},l.$attrs),{default:i.withCtx(()=>[i.renderSlot(l.$slots,"default")]),_:3},16,["hue"]))}}),ge={install(o){o.component("qt-hsv-background",Y),o.component("HsvBackground",Y)}},pe={skipPluginCheck:!1},Q=new Set;function q(o,s,f){return i.defineComponent({name:`${o}AsyncWrapper`,inheritAttrs:!1,props:{skipPluginCheck:{type:Boolean,default:!1}},setup(b,{slots:g,attrs:y,expose:r}){const m=i.ref("loading"),l=i.ref(""),v=i.ref(),p=globalThis.__VUE_INSTANCE__;r({getNativeNode:()=>{let h=v.value;return!h&&p&&p.vnode&&p.vnode.el&&(h=p.vnode.el,h.childNodes&&h.childNodes.length>0&&(h=h.childNodes[0])),h},nativeRef:v});let R=null,w=null;try{R=K.useES(),w=K.useESPlugin()}catch(h){console.warn("[withAsyncPlugin] 获取 useES 或 useESPlugin 失败,可能处于非 ES 环境。",h)}const C=async()=>{if(!R||typeof R.isComponentRegistered!="function")return console.log("[withAsyncPlugin] es.isComponentRegistered 不可用"),!1;try{const h=await R.isComponentRegistered(o);if(console.log(`[withAsyncPlugin] isComponentRegistered('${o}') 返回:`,h),h===!0||h&&typeof h=="object"&&(h.registered===!0||h.isRegistered===!0))return!0;try{const T=await x.Native.callNativeWithPromise("ExtendModule","getCoreSDKInfo");if(T&&T.core_version){const k=T.core_version;console.log(`[withAsyncPlugin] 当前引擎核心版本: ${k}`);const E=k.split(".").map(A=>parseInt(A,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: ${o}`);const _=o.split("-").map(N=>N.charAt(0).toUpperCase()+N.slice(1)).join("");console.log(`[withAsyncPlugin] 同时检查原名和驼峰名: ${o}, ${_}`);const[S,$]=await Promise.all([x.Native.callNativeWithPromise("ExtendModule","isComponentRegistered",o).catch(()=>!1),x.Native.callNativeWithPromise("ExtendModule","isComponentRegistered",_).catch(()=>!1)]);if(console.log(`[withAsyncPlugin] ExtendModule.isComponentRegistered 返回: [${S}, ${$}]`),S===!0||$===!0)return!0}else console.log(`[withAsyncPlugin] 引擎版本 ${k} < 1.11.205,跳过 ExtendModule 检查`);else console.log(`[withAsyncPlugin] 无法解析引擎版本号: ${k}`)}}catch(T){console.log("[withAsyncPlugin] 获取引擎版本或检查 Controller 失败:",T)}return!1}catch(h){return console.warn("[withAsyncPlugin] 检查组件注册状态异常:",h),!1}},O=async()=>{if(pe.skipPluginCheck||b.skipPluginCheck){console.log(`[withAsyncPlugin] 跳过 ${o} 插件检查 (skipPluginCheck = true)`),m.value="ready";return}if(!s){m.value="ready";return}const h=await C();if(console.log(`[withAsyncPlugin] 拦截检查 - ${o} 是否已注册:`,h),h||Q.has(s)){m.value="ready",Q.add(s),console.log("[withAsyncPlugin] 组件已注册,跳过安装流程");return}if(!w){console.warn(`[withAsyncPlugin] 无法获取 useESPlugin 实例,可能处于内置 AAR 环境或非插件环境,尝试直接渲染 ${o}`),m.value="ready";return}console.log(`[withAsyncPlugin] 开始动态安装插件: ${s}`);try{await new Promise((T,k)=>{let E;const A={onPluginInstallSuccess(_,S,$){_===s&&(clearTimeout(E),w.removeListener(A),console.log(`[withAsyncPlugin] 安装成功 pkg=${_} 状态码=${S}`),S==1003||S==1001?(f?(console.log(`[withAsyncPlugin] 触发反射初始化: ${f}`),x.Native.callNative("EsNativeModule","callReflect",{entry:{from:f,method:"setup"}})):console.log("[withAsyncPlugin] 安装成功,跳过反射初始化(无 pluginInitClass)"),T()):k(new Error(`安装失败 pkg=${_} status=${S} msg=${$}`)))},onPluginInstallError(_,S,$){_===s&&(clearTimeout(E),w.removeListener(A),k(new Error(`安装失败 pkg=${_} status=${S} msg=${$}`)))}};w.addListener({pkg:s},A),E=setTimeout(()=>{w.removeListener(A),k(new Error(`插件安装超时: ${s}`))},8e3),typeof w.installPlugin=="function"?w.installPlugin({pkg:s}):typeof w.install=="function"?w.install(s):k(new Error("当前运行时不支持 install / installPlugin"))}),await i.nextTick(),Q.add(s),m.value="ready"}catch(T){console.error("[withAsyncPlugin] 插件加载失败:",T),l.value=(T==null?void 0:T.message)||String(T),m.value="error"}};return i.onMounted(()=>{O()}),()=>{const h={display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",...y.style||{}};y.width!==void 0&&!h.width&&(h.width=typeof y.width=="number"?`${y.width}px`:y.width),y.height!==void 0&&!h.height&&(h.height=typeof y.height=="number"?`${y.height}px`:y.height);const T=y.class?`qt-plugin-container ${y.class}`:"qt-plugin-container",k={class:T,style:h,clipChildren:!1,clipPadding:!1,clipToPadding:!1};if(m.value==="loading")return i.h("div",k,[i.h("div",{style:{color:"white",fontSize:"30px"}},"插件加载中...")]);if(m.value==="error")return i.h("div",k,[i.h("div",{style:{color:"white",fontSize:"30px",backgroundColor:"rgba(255,0,0,0.5)"}},`插件加载失败: ${l.value}`)]);const E={},A={};for(const[N,D]of Object.entries(y))if(N.startsWith("on")&&typeof D=="function"){let F=N;N.startsWith("onOn")&&(F="on"+N.slice(4)),A[F]=D}else if(N.startsWith("on")&&Array.isArray(D)){let F=N;N.startsWith("onOn")&&(F="on"+N.slice(4)),A[F]=D}else N.startsWith("onOn")||(E[N]=D);const _={...E,...A,class:T,style:h,ref:N=>{v.value=N}},S=_.tabsData||"",$=_.actionPayload||"";return console.log("[withAsyncPlugin] 最终准备传递给 h() 的属性键集合:",Object.keys(_),"tabsData.length=",S.length,"actionPayload.length=",$.length),i.h(o,_,g.default?g.default():[])}}})}const ee=Symbol("AddonEnvContext"),be={isPluginActive:!1,nameSuffix:"",pluginPackageName:"com.quicktvui.plugin.glintui",builtInVersions:{}};async function Pe(o="com.quicktvui.plugin.glintui",s="_Plugin"){const f=K.useES();let b={};try{const l=await x.Native.callNativeModule("AddonEnvModule","getBuiltInVersions",[]);l&&typeof l=="object"&&(b=l)}catch(l){console.warn("[AddonProvider] Failed to fetch built-in versions from AddonEnvModule",l)}const g=`QtGridTabs${s}`,y=f.isComponentRegistered(g),r=y instanceof Promise?await y:y,m={isPluginActive:r,nameSuffix:r?s:"",pluginPackageName:r?`${o}.ext`:o,builtInVersions:b};return console.info("[AddonProvider] Environment initialized:",m),m}let X=i.ref(be);function Te(o){X.value=o,i.provide(ee,X)}function B(){var o;return((o=i.inject(ee,X))==null?void 0:o.value)||be}async function Ie(o){console.log("[AddonProvider] Sending GridTabs global config to Native:",o);try{const s=await x.Native.callNativeWithPromise("GridTabsConfigModule","setDefaultConfig",JSON.stringify(o));return console.log("[AddonProvider] Received response from Native:",s),!!(s&&s.success)}catch(s){return console.error("[AddonProvider] Failed to initialize GridTabs global config:",s),!1}}const ye={install:o=>{o.use(ue),o.use(de),o.use(ve),o.use(fe),o.use(ge)}};exports.ADDON_ENV_CONTEXT_KEY=ee;exports.GridTabs=L;exports.GridTabsPlugin=ue;exports.HsvBackground=Y;exports.HsvBackgroundPlugin=ge;exports.Keyboard=V;exports.KeyboardPlugin=de;exports.PortalItem=H;exports.PortalItemPlugin=fe;exports.PortalPool=z;exports.PortalPoolPlugin=ve;exports.QuickTVUINAddons=ye;exports.QuickTVUINAddonsConfig=pe;exports.default=ye;exports.initAddonEnv=Pe;exports.initGridTabsGlobalConfig=Ie;exports.provideAddonEnv=Te;exports.useAddonEnv=B;exports.useGridTabs=he;exports.withAsyncPlugin=q;
|
|
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;
|