smarteye-e-components 0.0.22 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue");exports.RecursionDeviceGroup=void 0;(e=>{(n=>{function i(a){const l=[];for(let c=0;c<a;c++)l.push({id:"testId",pid:"",name:`device-${c}`,online:c%2==0,channels:[]});return l}function o(a){const l=[];for(let c=0;c<a;c++)l.push({id:`groupid-${c}`,name:`group-${c}`,pid:"",onlineCount:0,totalCount:0,devices:i(10),items:o(a-c-1)});return l}function s(a){return{name:"hah",onlineCount:0,totalCount:0,items:o(a)}}n.RandomDeviceGroup=s})(e.Test||(e.Test={}));function r(n,i){for(let o=0;o<n.length;o++)i(n[o]),r(n[o].items,i)}(n=>{function i(o){const s={},a={};return r(o.items,l=>{s[l.id]=l;for(let c=0;c<l.devices.length;c++)a[l.devices[c].id]=l.devices[c]}),{getGroup(l){return s[l]},getDevice(l){return a[l]},foreachGroup(l){for(let c in s)l(s[c])}}}n.AccessSession=i})(e.Utils||(e.Utils={}))})(exports.RecursionDeviceGroup||(exports.RecursionDeviceGroup={}));const z=t.defineComponent({props:{countInfo:Object,controlParams:Object},setup(e){function r(o,s){if(s){let a=0;return s.items.forEach(l=>{a+=r(o,l)}),o(s)+a}return 0}const n=t.computed(()=>r(o=>o.onlineCount,e.countInfo));return{totalCount:t.computed(()=>r(o=>o.totalCount,e.countInfo)),onlineCount:n}}});const y=(e,r)=>{const n=e.__vccOpts||e;for(const[i,o]of r)n[i]=o;return n},H={class:"root"},A={class:"count-show"};function T(e,r,n,i,o,s){return t.openBlock(),t.createElementBlock("div",H,[t.renderSlot(e.$slots,"default",{},void 0,!0),t.createElementVNode("span",A,t.toDisplayString(e.onlineCount)+"/"+t.toDisplayString(e.totalCount),1)])}const O=y(z,[["render",T],["__scopeId","data-v-56ab9f59"]]),N=Object.freeze({left:0,top:0,width:16,height:16}),V=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),C=Object.freeze({...N,...V});Object.freeze({...C,body:"",hidden:!1});({...N});const F=Object.freeze({width:null,height:null}),j=Object.freeze({...F,...V});function L(e,r){const n={...e};for(const i in r){const o=r[i],s=typeof o;i in F?(o===null||o&&(s==="string"||s==="number"))&&(n[i]=o):s===typeof n[i]&&(n[i]=i==="rotate"?o%4:o)}return n}const R=/[\s,]+/;function x(e,r){r.split(R).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function U(e,r=0){const n=e.replace(/^-?[0-9.]*/,"");function i(o){for(;o<0;)o+=4;return o%4}if(n===""){const o=parseInt(e);return isNaN(o)?0:i(o)}else if(n!==e){let o=0;switch(n){case"%":o=25;break;case"deg":o=90}if(o){let s=parseFloat(e.slice(0,e.length-n.length));return isNaN(s)?0:(s=s/o,s%1===0?i(s):0)}}return r}const W=/(-?[0-9.]*[0-9]+[0-9.]*)/g,q=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function $(e,r,n){if(r===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*r*n)/n;if(typeof e!="string")return e;const i=e.split(W);if(i===null||!i.length)return e;const o=[];let s=i.shift(),a=q.test(s);for(;;){if(a){const l=parseFloat(s);isNaN(l)?o.push(s):o.push(Math.ceil(l*r*n)/n)}else o.push(s);if(s=i.shift(),s===void 0)return o.join("");a=!a}}function K(e,r){const n={...C,...e},i={...j,...r},o={left:n.left,top:n.top,width:n.width,height:n.height};let s=n.body;[n,i].forEach(g=>{const p=[],f=g.hFlip,u=g.vFlip;let w=g.rotate;f?u?w+=2:(p.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),p.push("scale(-1 1)"),o.top=o.left=0):u&&(p.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),p.push("scale(1 -1)"),o.top=o.left=0);let S;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:S=o.height/2+o.top,p.unshift("rotate(90 "+S.toString()+" "+S.toString()+")");break;case 2:p.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:S=o.width/2+o.left,p.unshift("rotate(-90 "+S.toString()+" "+S.toString()+")");break}w%2===1&&(o.left!==o.top&&(S=o.left,o.left=o.top,o.top=S),o.width!==o.height&&(S=o.width,o.width=o.height,o.height=S)),p.length&&(s='<g transform="'+p.join(" ")+'">'+s+"</g>")});const a=i.width,l=i.height,c=o.width,h=o.height;let m,d;return a===null?(d=l===null?"1em":l==="auto"?h:l,m=$(d,c/h)):(m=a==="auto"?c:a,d=l===null?$(m,h/c):l==="auto"?h:l),{attributes:{width:m.toString(),height:d.toString(),viewBox:o.left.toString()+" "+o.top.toString()+" "+c.toString()+" "+h.toString()},body:s}}const J=/\sid="(\S+)"/g,Q="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let X=0;function Y(e,r=Q){const n=[];let i;for(;i=J.exec(e);)n.push(i[1]);return n.length&&n.forEach(o=>{const s=typeof r=="function"?r(o):r+(X++).toString(),a=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+a+')([")]|\\.[a-z])',"g"),"$1"+s+"$3")}),e}function Z(e,r){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const i in r)n+=" "+i+'="'+r[i]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+n+">"+e+"</svg>"}function ee(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}function te(e){return'url("data:image/svg+xml,'+ee(e)+'")'}const I={...j,inline:!1},oe={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},ne={display:"inline-block"},k={backgroundColor:"currentColor"},M={backgroundColor:"transparent"},B={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},E={webkitMask:k,mask:k,background:M};for(const e in E){const r=E[e];for(const n in B)r[e+n]=B[n]}const b={};["horizontal","vertical"].forEach(e=>{const r=e.slice(0,1)+"Flip";b[e+"-flip"]=r,b[e.slice(0,1)+"-flip"]=r,b[e+"Flip"]=r});function P(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const re=(e,r)=>{const n=L(I,r),i={...oe},o=r.mode||"svg",s={},a=r.style,l=typeof a=="object"&&!(a instanceof Array)?a:{};for(let f in r){const u=r[f];if(u!==void 0)switch(f){case"icon":case"style":case"onLoad":case"mode":break;case"inline":case"hFlip":case"vFlip":n[f]=u===!0||u==="true"||u===1;break;case"flip":typeof u=="string"&&x(n,u);break;case"color":s.color=u;break;case"rotate":typeof u=="string"?n[f]=U(u):typeof u=="number"&&(n[f]=u);break;case"ariaHidden":case"aria-hidden":u!==!0&&u!=="true"&&delete i["aria-hidden"];break;default:{const w=b[f];w?(u===!0||u==="true"||u===1)&&(n[w]=!0):I[f]===void 0&&(i[f]=u)}}}const c=K(e,n),h=c.attributes;if(n.inline&&(s.verticalAlign="-0.125em"),o==="svg"){i.style={...s,...l},Object.assign(i,h);let f=0,u=r.id;return typeof u=="string"&&(u=u.replace(/-/g,"_")),i.innerHTML=Y(c.body,u?()=>u+"ID"+f++:"iconifyVue"),t.h("svg",i)}const{body:m,width:d,height:v}=e,g=o==="mask"||(o==="bg"?!1:m.indexOf("currentColor")!==-1),p=Z(m,{...h,width:d+"",height:v+""});return i.style={...s,"--svg":te(p),width:P(h.width),height:P(h.height),...ne,...g?k:M,...l},t.h("span",i)},D=Object.create(null);function _(e,r){D[e]=r}const ie=t.defineComponent({inheritAttrs:!1,render(){const e=this.$attrs,r=e.icon,n=typeof r=="string"?D[r]:typeof r=="object"?r:null;return n===null||typeof n!="object"||typeof n.body!="string"?this.$slots.default?this.$slots.default():null:re({...C,...n},e)}}),se=t.defineComponent({components:{CountShow:O,Icon:ie},name:"group-show",props:{deviceGroup:Object,controlParams:Object},setup(e){const r=t.inject("theme");function n(s){var a;return((a=s&&s.filter(l=>{var c;return!((c=e.controlParams)!=null&&c.onlyShowOnline)||l.online}))==null?void 0:a.filter(l=>{var c,h;return e.controlParams?l.name.indexOf((c=e.controlParams)==null?void 0:c.searchStr)>=0||l.id.indexOf((h=e.controlParams)==null?void 0:h.searchStr):!0}))||[]}const i=t.computed(()=>{var s,a;const l=e.controlParams.searchStr;return l.length==0||e.deviceGroup&&((s=e.deviceGroup)==null?void 0:s.name.indexOf(l))>0?!0:(a=e.deviceGroup)==null?void 0:a.devices.find(c=>c.name.indexOf(e.controlParams.searchStr)>0||c.id.indexOf(e.controlParams.searchStr)>0)}),o=t.ref(!1);return{showGroup:i,FilterDevice:n,bShow:o,theme:r}}});const le={key:0,class:"head-op"},ce=["title"],ae={class:"group-slot"},ue={key:0,style:{"margin-left":"26px"}},de={class:"device-show-div"},he=["title"],pe={class:"device-slot"};function fe(e,r,n,i,o,s){var a,l;const c=t.resolveComponent("Icon"),h=t.resolveComponent("CountShow"),m=t.resolveComponent("group-show");return e.showGroup?(t.openBlock(),t.createElementBlock("div",{key:0,class:t.normalizeClass("group "+e.theme)},[t.createVNode(h,{countInfo:e.deviceGroup,controlParams:e.controlParams},{default:t.withCtx(()=>{var d,v,g,p,f;return[e.deviceGroup&&e.deviceGroup.devices.length+e.deviceGroup.items.length>0?(t.openBlock(),t.createElementBlock("span",le,[e.bShow?(t.openBlock(),t.createBlock(c,{key:1,icon:"minus",width:"20",onClick:r[1]||(r[1]=u=>e.bShow=!e.bShow),class:"handle-ls-svg"})):(t.openBlock(),t.createBlock(c,{key:0,icon:"plus",width:"20",onClick:r[0]||(r[0]=u=>e.bShow=!e.bShow),class:"handle-ls-svg"}))])):t.createCommentVNode("",!0),t.createElementVNode("span",{class:"group-head-db-click",onDblclick:r[2]||(r[2]=u=>e.bShow=!e.bShow)},[t.createVNode(c,{icon:"group",width:"24",class:"group-avatar"}),t.createElementVNode("span",{class:"group-name",title:(d=e.deviceGroup)==null?void 0:d.name},t.toDisplayString(((v=e.deviceGroup)==null?void 0:v.name)&&((g=e.deviceGroup)==null?void 0:g.name.length)>0?(p=e.deviceGroup)==null?void 0:p.name:(f=e.deviceGroup)==null?void 0:f.id),9,ce)],32),t.createElementVNode("div",ae,[t.renderSlot(e.$slots,"group",{group:e.deviceGroup},void 0,!0)])]}),_:3},8,["countInfo","controlParams"]),e.bShow?(t.openBlock(),t.createElementBlock("div",ue,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList((a=e.deviceGroup)==null?void 0:a.items,(d,v)=>(t.openBlock(),t.createBlock(m,{key:v,deviceGroup:d,controlParams:e.controlParams},{group:t.withCtx(({group:g})=>[t.renderSlot(e.$slots,"group",{group:g},void 0,!0)]),device:t.withCtx(({device:g,group:p})=>[t.renderSlot(e.$slots,"device",{device:g,group:p},void 0,!0)]),_:2},1032,["deviceGroup","controlParams"]))),128)),t.createElementVNode("div",de,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.FilterDevice((l=e.deviceGroup)==null?void 0:l.devices),(d,v)=>(t.openBlock(),t.createElementBlock("div",{key:v,class:t.normalizeClass(["device",d.online&&"online-device"])},[t.createVNode(c,{icon:"user",width:"16",class:"device-avatar"}),t.createElementVNode("span",{title:d.id,class:"device-name"},t.toDisplayString(d.name.length>0?d.name:d.id),9,he),t.createElementVNode("div",pe,[t.renderSlot(e.$slots,"device",{device:d,group:e.deviceGroup},void 0,!0)])],2))),128))])])):t.createCommentVNode("",!0)],2)):t.createCommentVNode("",!0)}const ge=y(se,[["render",fe],["__scopeId","data-v-a9d269de"]]),me={width:1024,height:1024,body:'<path fill="currentColor" d="M384 192v640l384-320.064z"/>'},ve={width:1024,height:1024,body:'<path fill="currentColor" d="M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384H832zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896z"/>'},we={width:1024,height:1024,body:'<path fill="currentColor" d="M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704l116.736-175.104zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0z"/>'},Se={width:1024,height:1024,body:'<path fill="currentColor" d="M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z"/>'},_e={width:1024,height:1024,body:'<path fill="currentColor" d="M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z"/>'};_("right",me);_("group",ve);_("user",we);_("plus",Se);_("minus",_e);const be=t.defineComponent({components:{CountShow:O,GroupShow:ge},props:{deviceGroup:Object,theme:{type:String,default:""}},methods:{onCheckBoxChange(){this.controlParams.onlyShowOnline=!this.controlParams.onlyShowOnline},onSearchChange(){var e;this.inputSearchRef&&(this.controlParams.searchStr=(e=this.inputSearchRef)==null?void 0:e.value)},search(e){this.controlParams.searchStr=e}},setup(e){t.provide("theme",e.theme);const r=t.ref({onlyShowOnline:!1,searchStr:""});return{inputSearchRef:t.ref(),controlParams:r}}});const ke=e=>(t.pushScopeId("data-v-7e0a8034"),e=e(),t.popScopeId(),e),ye={class:"device-group-list"},Ce={class:"search-panel"},$e=ke(()=>t.createElementVNode("label",{for:"onlineShow"},"\u53EA\u663E\u793A\u5728\u7EBF\u8BBE\u5907",-1)),Ie={class:"device-panel"};function Be(e,r,n,i,o,s){var a;const l=t.resolveComponent("CountShow"),c=t.resolveComponent("group-show");return t.openBlock(),t.createElementBlock("div",ye,[t.createElementVNode("div",Ce,[t.createVNode(l,{countInfo:e.deviceGroup},{default:t.withCtx(()=>[t.createElementVNode("input",{type:"checkbox",id:"onlineShow",value:"onlineShow",onChange:r[0]||(r[0]=(...h)=>e.onCheckBoxChange&&e.onCheckBoxChange(...h))},null,32),$e]),_:1},8,["countInfo"])]),t.createElementVNode("div",Ie,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList((a=e.deviceGroup)==null?void 0:a.items,(h,m)=>(t.openBlock(),t.createBlock(c,{controlParams:e.controlParams,key:m,deviceGroup:h},{group:t.withCtx(({group:d})=>[t.renderSlot(e.$slots,"group",{group:d},void 0,!0)]),device:t.withCtx(({device:d,group:v})=>[t.renderSlot(e.$slots,"device",{device:d,group:v},void 0,!0)]),_:2},1032,["controlParams","deviceGroup"]))),128))])])}const Ee=y(be,[["render",Be],["__scopeId","data-v-7e0a8034"]]),G={RecursionDeviceGroup:Ee},Pe={install(e){for(const r in G){const n=G[r];e.component(r,n)}}};exports.default=Pe;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("vue");exports.RecursionDeviceGroup=void 0;(e=>{(n=>{function i(a){const l=[];for(let c=0;c<a;c++)l.push({id:"testId",pid:"",name:`device-${c}`,online:c%2==0,channels:[]});return l}function o(a){const l=[];for(let c=0;c<a;c++)l.push({id:`groupid-${c}`,name:`group-${c}`,pid:"",onlineCount:0,totalCount:0,devices:i(10),items:o(a-c-1)});return l}function s(a){return{name:"hah",onlineCount:0,totalCount:0,items:o(a)}}n.RandomDeviceGroup=s})(e.Test||(e.Test={}));function r(n,i){for(let o=0;o<n.length;o++)i(n[o]),r(n[o].items,i)}(n=>{function i(o){const s={},a={};return r(o.items,l=>{s[l.id]=l;for(let c=0;c<l.devices.length;c++)a[l.devices[c].id]=l.devices[c]}),{getGroup(l){return s[l]},getDevice(l){return a[l]},foreachGroup(l){for(let c in s)l(s[c])}}}n.AccessSession=i})(e.Utils||(e.Utils={}))})(exports.RecursionDeviceGroup||(exports.RecursionDeviceGroup={}));const z=t.defineComponent({props:{countInfo:Object,controlParams:Object},setup(e){function r(o,s){if(s){let a=0;return s.items.forEach(l=>{a+=r(o,l)}),o(s)+a}return 0}const n=t.computed(()=>r(o=>o.onlineCount,e.countInfo));return{totalCount:t.computed(()=>r(o=>o.totalCount,e.countInfo)),onlineCount:n}}});const y=(e,r)=>{const n=e.__vccOpts||e;for(const[i,o]of r)n[i]=o;return n},H={class:"root"},A={class:"count-show"};function T(e,r,n,i,o,s){return t.openBlock(),t.createElementBlock("div",H,[t.renderSlot(e.$slots,"default",{},void 0,!0),t.createElementVNode("span",A,t.toDisplayString(e.onlineCount)+"/"+t.toDisplayString(e.totalCount),1)])}const O=y(z,[["render",T],["__scopeId","data-v-56ab9f59"]]),N=Object.freeze({left:0,top:0,width:16,height:16}),V=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),C=Object.freeze({...N,...V});Object.freeze({...C,body:"",hidden:!1});({...N});const F=Object.freeze({width:null,height:null}),j=Object.freeze({...F,...V});function L(e,r){const n={...e};for(const i in r){const o=r[i],s=typeof o;i in F?(o===null||o&&(s==="string"||s==="number"))&&(n[i]=o):s===typeof n[i]&&(n[i]=i==="rotate"?o%4:o)}return n}const R=/[\s,]+/;function x(e,r){r.split(R).forEach(n=>{switch(n.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function U(e,r=0){const n=e.replace(/^-?[0-9.]*/,"");function i(o){for(;o<0;)o+=4;return o%4}if(n===""){const o=parseInt(e);return isNaN(o)?0:i(o)}else if(n!==e){let o=0;switch(n){case"%":o=25;break;case"deg":o=90}if(o){let s=parseFloat(e.slice(0,e.length-n.length));return isNaN(s)?0:(s=s/o,s%1===0?i(s):0)}}return r}const W=/(-?[0-9.]*[0-9]+[0-9.]*)/g,q=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function $(e,r,n){if(r===1)return e;if(n=n||100,typeof e=="number")return Math.ceil(e*r*n)/n;if(typeof e!="string")return e;const i=e.split(W);if(i===null||!i.length)return e;const o=[];let s=i.shift(),a=q.test(s);for(;;){if(a){const l=parseFloat(s);isNaN(l)?o.push(s):o.push(Math.ceil(l*r*n)/n)}else o.push(s);if(s=i.shift(),s===void 0)return o.join("");a=!a}}function K(e,r){const n={...C,...e},i={...j,...r},o={left:n.left,top:n.top,width:n.width,height:n.height};let s=n.body;[n,i].forEach(g=>{const p=[],f=g.hFlip,u=g.vFlip;let w=g.rotate;f?u?w+=2:(p.push("translate("+(o.width+o.left).toString()+" "+(0-o.top).toString()+")"),p.push("scale(-1 1)"),o.top=o.left=0):u&&(p.push("translate("+(0-o.left).toString()+" "+(o.height+o.top).toString()+")"),p.push("scale(1 -1)"),o.top=o.left=0);let S;switch(w<0&&(w-=Math.floor(w/4)*4),w=w%4,w){case 1:S=o.height/2+o.top,p.unshift("rotate(90 "+S.toString()+" "+S.toString()+")");break;case 2:p.unshift("rotate(180 "+(o.width/2+o.left).toString()+" "+(o.height/2+o.top).toString()+")");break;case 3:S=o.width/2+o.left,p.unshift("rotate(-90 "+S.toString()+" "+S.toString()+")");break}w%2===1&&(o.left!==o.top&&(S=o.left,o.left=o.top,o.top=S),o.width!==o.height&&(S=o.width,o.width=o.height,o.height=S)),p.length&&(s='<g transform="'+p.join(" ")+'">'+s+"</g>")});const a=i.width,l=i.height,c=o.width,h=o.height;let m,d;return a===null?(d=l===null?"1em":l==="auto"?h:l,m=$(d,c/h)):(m=a==="auto"?c:a,d=l===null?$(m,h/c):l==="auto"?h:l),{attributes:{width:m.toString(),height:d.toString(),viewBox:o.left.toString()+" "+o.top.toString()+" "+c.toString()+" "+h.toString()},body:s}}const J=/\sid="(\S+)"/g,Q="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let X=0;function Y(e,r=Q){const n=[];let i;for(;i=J.exec(e);)n.push(i[1]);return n.length&&n.forEach(o=>{const s=typeof r=="function"?r(o):r+(X++).toString(),a=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+a+')([")]|\\.[a-z])',"g"),"$1"+s+"$3")}),e}function Z(e,r){let n=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const i in r)n+=" "+i+'="'+r[i]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+n+">"+e+"</svg>"}function ee(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}function te(e){return'url("data:image/svg+xml,'+ee(e)+'")'}const I={...j,inline:!1},oe={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},ne={display:"inline-block"},k={backgroundColor:"currentColor"},M={backgroundColor:"transparent"},B={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},E={webkitMask:k,mask:k,background:M};for(const e in E){const r=E[e];for(const n in B)r[e+n]=B[n]}const b={};["horizontal","vertical"].forEach(e=>{const r=e.slice(0,1)+"Flip";b[e+"-flip"]=r,b[e.slice(0,1)+"-flip"]=r,b[e+"Flip"]=r});function P(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const re=(e,r)=>{const n=L(I,r),i={...oe},o=r.mode||"svg",s={},a=r.style,l=typeof a=="object"&&!(a instanceof Array)?a:{};for(let f in r){const u=r[f];if(u!==void 0)switch(f){case"icon":case"style":case"onLoad":case"mode":break;case"inline":case"hFlip":case"vFlip":n[f]=u===!0||u==="true"||u===1;break;case"flip":typeof u=="string"&&x(n,u);break;case"color":s.color=u;break;case"rotate":typeof u=="string"?n[f]=U(u):typeof u=="number"&&(n[f]=u);break;case"ariaHidden":case"aria-hidden":u!==!0&&u!=="true"&&delete i["aria-hidden"];break;default:{const w=b[f];w?(u===!0||u==="true"||u===1)&&(n[w]=!0):I[f]===void 0&&(i[f]=u)}}}const c=K(e,n),h=c.attributes;if(n.inline&&(s.verticalAlign="-0.125em"),o==="svg"){i.style={...s,...l},Object.assign(i,h);let f=0,u=r.id;return typeof u=="string"&&(u=u.replace(/-/g,"_")),i.innerHTML=Y(c.body,u?()=>u+"ID"+f++:"iconifyVue"),t.h("svg",i)}const{body:m,width:d,height:v}=e,g=o==="mask"||(o==="bg"?!1:m.indexOf("currentColor")!==-1),p=Z(m,{...h,width:d+"",height:v+""});return i.style={...s,"--svg":te(p),width:P(h.width),height:P(h.height),...ne,...g?k:M,...l},t.h("span",i)},D=Object.create(null);function _(e,r){D[e]=r}const ie=t.defineComponent({inheritAttrs:!1,render(){const e=this.$attrs,r=e.icon,n=typeof r=="string"?D[r]:typeof r=="object"?r:null;return n===null||typeof n!="object"||typeof n.body!="string"?this.$slots.default?this.$slots.default():null:re({...C,...n},e)}}),se=t.defineComponent({components:{CountShow:O,Icon:ie},name:"group-show",props:{deviceGroup:Object,controlParams:Object},setup(e){const r=t.inject("theme");function n(s){var a;return((a=s&&s.filter(l=>{var c;return!((c=e.controlParams)!=null&&c.onlyShowOnline)||l.online}))==null?void 0:a.filter(l=>{var c,h;return e.controlParams?l.name.indexOf((c=e.controlParams)==null?void 0:c.searchStr)>=0||l.id.indexOf((h=e.controlParams)==null?void 0:h.searchStr)>=0:!0}))||[]}const i=t.computed(()=>{var s,a;const l=e.controlParams.searchStr;return l.length==0||e.deviceGroup&&((s=e.deviceGroup)==null?void 0:s.name.indexOf(l))>0?!0:(a=e.deviceGroup)==null?void 0:a.devices.find(c=>c.name.indexOf(e.controlParams.searchStr)>=0||c.id.indexOf(e.controlParams.searchStr)>=0)}),o=t.ref(!1);return{showGroup:i,FilterDevice:n,bShow:o,theme:r}}});const le={key:0,class:"head-op"},ce=["title"],ae={class:"group-slot"},ue={key:0,style:{"margin-left":"26px"}},de={class:"device-show-div"},he=["title"],pe={class:"device-slot"};function fe(e,r,n,i,o,s){var a,l;const c=t.resolveComponent("Icon"),h=t.resolveComponent("CountShow"),m=t.resolveComponent("group-show");return e.showGroup?(t.openBlock(),t.createElementBlock("div",{key:0,class:t.normalizeClass("group "+e.theme)},[t.createVNode(h,{countInfo:e.deviceGroup,controlParams:e.controlParams},{default:t.withCtx(()=>{var d,v,g,p,f;return[e.deviceGroup&&e.deviceGroup.devices.length+e.deviceGroup.items.length>0?(t.openBlock(),t.createElementBlock("span",le,[e.bShow?(t.openBlock(),t.createBlock(c,{key:1,icon:"minus",width:"20",onClick:r[1]||(r[1]=u=>e.bShow=!e.bShow),class:"handle-ls-svg"})):(t.openBlock(),t.createBlock(c,{key:0,icon:"plus",width:"20",onClick:r[0]||(r[0]=u=>e.bShow=!e.bShow),class:"handle-ls-svg"}))])):t.createCommentVNode("",!0),t.createElementVNode("span",{class:"group-head-db-click",onDblclick:r[2]||(r[2]=u=>e.bShow=!e.bShow)},[t.createVNode(c,{icon:"group",width:"24",class:"group-avatar"}),t.createElementVNode("span",{class:"group-name",title:(d=e.deviceGroup)==null?void 0:d.name},t.toDisplayString(((v=e.deviceGroup)==null?void 0:v.name)&&((g=e.deviceGroup)==null?void 0:g.name.length)>0?(p=e.deviceGroup)==null?void 0:p.name:(f=e.deviceGroup)==null?void 0:f.id),9,ce)],32),t.createElementVNode("div",ae,[t.renderSlot(e.$slots,"group",{group:e.deviceGroup},void 0,!0)])]}),_:3},8,["countInfo","controlParams"]),e.bShow?(t.openBlock(),t.createElementBlock("div",ue,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList((a=e.deviceGroup)==null?void 0:a.items,(d,v)=>(t.openBlock(),t.createBlock(m,{key:v,deviceGroup:d,controlParams:e.controlParams},{group:t.withCtx(({group:g})=>[t.renderSlot(e.$slots,"group",{group:g},void 0,!0)]),device:t.withCtx(({device:g,group:p})=>[t.renderSlot(e.$slots,"device",{device:g,group:p},void 0,!0)]),_:2},1032,["deviceGroup","controlParams"]))),128)),t.createElementVNode("div",de,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(e.FilterDevice((l=e.deviceGroup)==null?void 0:l.devices),(d,v)=>(t.openBlock(),t.createElementBlock("div",{key:v,class:t.normalizeClass(["device",d.online&&"online-device"])},[t.createVNode(c,{icon:"user",width:"16",class:"device-avatar"}),t.createElementVNode("span",{title:d.id,class:"device-name"},t.toDisplayString(d.name.length>0?d.name:d.id),9,he),t.createElementVNode("div",pe,[t.renderSlot(e.$slots,"device",{device:d,group:e.deviceGroup},void 0,!0)])],2))),128))])])):t.createCommentVNode("",!0)],2)):t.createCommentVNode("",!0)}const ge=y(se,[["render",fe],["__scopeId","data-v-100c06ff"]]),me={width:1024,height:1024,body:'<path fill="currentColor" d="M384 192v640l384-320.064z"/>'},ve={width:1024,height:1024,body:'<path fill="currentColor" d="M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384H832zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896z"/>'},we={width:1024,height:1024,body:'<path fill="currentColor" d="M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704l116.736-175.104zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0z"/>'},Se={width:1024,height:1024,body:'<path fill="currentColor" d="M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z"/>'},_e={width:1024,height:1024,body:'<path fill="currentColor" d="M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z"/>'};_("right",me);_("group",ve);_("user",we);_("plus",Se);_("minus",_e);const be=t.defineComponent({components:{CountShow:O,GroupShow:ge},props:{deviceGroup:Object,theme:{type:String,default:""}},methods:{onCheckBoxChange(){this.controlParams.onlyShowOnline=!this.controlParams.onlyShowOnline},onSearchChange(){var e;this.inputSearchRef&&(this.controlParams.searchStr=(e=this.inputSearchRef)==null?void 0:e.value)},search(e){this.controlParams.searchStr=e}},setup(e){t.provide("theme",e.theme);const r=t.ref({onlyShowOnline:!1,searchStr:""});return{inputSearchRef:t.ref(),controlParams:r}}});const ke=e=>(t.pushScopeId("data-v-7e0a8034"),e=e(),t.popScopeId(),e),ye={class:"device-group-list"},Ce={class:"search-panel"},$e=ke(()=>t.createElementVNode("label",{for:"onlineShow"},"\u53EA\u663E\u793A\u5728\u7EBF\u8BBE\u5907",-1)),Ie={class:"device-panel"};function Be(e,r,n,i,o,s){var a;const l=t.resolveComponent("CountShow"),c=t.resolveComponent("group-show");return t.openBlock(),t.createElementBlock("div",ye,[t.createElementVNode("div",Ce,[t.createVNode(l,{countInfo:e.deviceGroup},{default:t.withCtx(()=>[t.createElementVNode("input",{type:"checkbox",id:"onlineShow",value:"onlineShow",onChange:r[0]||(r[0]=(...h)=>e.onCheckBoxChange&&e.onCheckBoxChange(...h))},null,32),$e]),_:1},8,["countInfo"])]),t.createElementVNode("div",Ie,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList((a=e.deviceGroup)==null?void 0:a.items,(h,m)=>(t.openBlock(),t.createBlock(c,{controlParams:e.controlParams,key:m,deviceGroup:h},{group:t.withCtx(({group:d})=>[t.renderSlot(e.$slots,"group",{group:d},void 0,!0)]),device:t.withCtx(({device:d,group:v})=>[t.renderSlot(e.$slots,"device",{device:d,group:v},void 0,!0)]),_:2},1032,["controlParams","deviceGroup"]))),128))])])}const Ee=y(be,[["render",Be],["__scopeId","data-v-7e0a8034"]]),G={RecursionDeviceGroup:Ee},Pe={install(e){for(const r in G){const n=G[r];e.component(r,n)}}};exports.default=Pe;
2
2
  //# sourceMappingURL=smarteye-e-components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"smarteye-e-components.js","sources":["../src/components/recursion-device-group/model/index.ts","../src/components-global/count-show/index.vue","../src/components-global/count-show/index.vue","../node_modules/.pnpm/@iconify+vue@4.0.0_vue@3.2.39/node_modules/@iconify/vue/dist/offline.mjs","../src/components-global/group-show/index.vue","../src/components-global/group-show/index.vue","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/caret-right.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/folder-opened.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/avatar.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/plus.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/minus.js","../src/components/recursion-device-group/index.vue","../src/components/recursion-device-group/index.vue","../src/index.ts"],"sourcesContent":["export namespace RecursionDeviceGroup {\r\n export interface IChannelInfo {\r\n index: number;\r\n name: string;\r\n mediaDir: number;\r\n }\r\n\r\n export interface DeviceInfo<T = any> {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n online: boolean;\r\n channels: Array<IChannelInfo>;\r\n tag?: T;\r\n }\r\n\r\n export interface DeviceGroup<T = any, DT = any> extends ICountInfo {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n devices: Array<DeviceInfo<DT>>;\r\n items: Array<DeviceGroup<T, DT>>;\r\n tag?: T;\r\n }\r\n\r\n export interface SessionDeviceGroup<\r\n GroupTag = any,\r\n DeviceTag = any,\r\n SessionTag = any\r\n > extends ICountInfo {\r\n name: string;\r\n items: Array<DeviceGroup>;\r\n tag?: SessionTag;\r\n }\r\n\r\n export interface ICountInfo {\r\n totalCount: number;\r\n onlineCount: number;\r\n items: Array<ICountInfo>;\r\n }\r\n\r\n export interface IControlParams {\r\n onlyShowOnline: boolean;\r\n searchStr: string;\r\n }\r\n\r\n export namespace Test {\r\n let startIndex = 0;\r\n function CreateDevice(count: number): Array<DeviceInfo> {\r\n const deviceList: Array<DeviceInfo> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: \"testId\",\r\n pid: \"\",\r\n name: `device-${i}`,\r\n online: i % 2 == 0,\r\n channels: [],\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n function CreateGroup(count: number) {\r\n const deviceList: Array<DeviceGroup> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: `groupid-${i}`,\r\n name: `group-${i}`,\r\n pid: \"\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n devices: CreateDevice(10),\r\n items: CreateGroup(count - i - 1),\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n export function RandomDeviceGroup(count: number): SessionDeviceGroup {\r\n return {\r\n name: \"hah\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n items: CreateGroup(count),\r\n };\r\n }\r\n }\r\n\r\n function ForeachDeviceGroup(\r\n deviceGroup: DeviceGroup[],\r\n handleDeviceGroup: (deviceGroup: DeviceGroup) => void\r\n ) {\r\n for (let i = 0; i < deviceGroup.length; i++) {\r\n handleDeviceGroup(deviceGroup[i]);\r\n ForeachDeviceGroup(deviceGroup[i].items, handleDeviceGroup);\r\n }\r\n }\r\n\r\n export namespace Utils {\r\n export function AccessSession(session: SessionDeviceGroup) {\r\n const groupMap: { [k in string]: DeviceGroup } = {};\r\n const deviceMap: { [k in string]: DeviceInfo } = {};\r\n\r\n ForeachDeviceGroup(session.items, (deviceGroup) => {\r\n groupMap[deviceGroup.id] = deviceGroup;\r\n for (let i = 0; i < deviceGroup.devices.length; i++) {\r\n deviceMap[deviceGroup.devices[i].id] = deviceGroup.devices[i];\r\n }\r\n });\r\n\r\n return {\r\n getGroup(id: string) {\r\n return groupMap[id];\r\n },\r\n getDevice(id: string) {\r\n return deviceMap[id];\r\n },\r\n foreachGroup(handle: (item: DeviceGroup) => void) {\r\n for (let i in groupMap) {\r\n handle(groupMap[i]);\r\n }\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","import { h, defineComponent } from 'vue';\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || {};\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n ...defaultIconSizeCustomisations,\n ...defaultIconTransformations\n});\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const result = {\n attributes: {\n width: width.toString(),\n height: height.toString(),\n viewBox: box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString()\n },\n body\n };\n return result;\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + \"$3\"\n );\n });\n return body;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToURL(svg) {\n return 'url(\"data:image/svg+xml,' + encodeSVGforURL(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Storage for icons referred by name\n */\nconst storage = Object.create(null);\n/**\n * Add icon to storage, allowing to call it by name\n *\n * @param name\n * @param data\n */\nfunction addIcon(name, data) {\n storage[name] = data;\n}\n/**\n * Add collection to storage, allowing to call icons by name\n *\n * @param data Icon set\n * @param prefix Optional prefix to add to icon names, true (default) if prefix from icon set should be used.\n */\nfunction addCollection(data, prefix) {\n const iconPrefix = typeof prefix === 'string'\n ? prefix\n : prefix !== false && typeof data.prefix === 'string'\n ? data.prefix + ':'\n : '';\n quicklyValidateIconSet(data) &&\n parseIconSet(data, (name, icon) => {\n if (icon) {\n storage[iconPrefix + name] = icon;\n }\n });\n}\n/**\n * Component\n */\nconst Icon = defineComponent({\n // Do not inherit other attributes: it is handled by render()\n inheritAttrs: false,\n // Render icon\n render() {\n const props = this.$attrs;\n // Check icon\n const propsIcon = props.icon;\n const icon = typeof propsIcon === 'string'\n ? storage[propsIcon]\n : typeof propsIcon === 'object'\n ? propsIcon\n : null;\n // Validate icon object\n if (icon === null ||\n typeof icon !== 'object' ||\n typeof icon.body !== 'string') {\n return this.$slots.default ? this.$slots.default() : null;\n }\n // Valid icon: render it\n return render({\n ...defaultIconProps,\n ...icon,\n }, props);\n },\n});\n\nexport { Icon, addCollection, addIcon };\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr)\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) > 0 || item.id.indexOf((props.controlParams as any).searchStr) > 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr)\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) > 0 || item.id.indexOf((props.controlParams as any).searchStr) > 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M384 192v640l384-320.064z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384H832zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704l116.736-175.104zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z\\\"/>\"\n};\nexport default data;\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","import { Plugin, App } from \"vue\";\r\n\r\nexport * from \"./comp.d\";\r\nexport * from \"./components\";\r\n\r\nimport RecursionDeviceGroup from \"/@/components/recursion-device-group/index.vue\";\r\n\r\nconst components = {\r\n RecursionDeviceGroup,\r\n};\r\n\r\nconst _default: Plugin = {\r\n install(app: App) {\r\n for (const itemKey in components) {\r\n const item = components[itemKey as keyof typeof components];\r\n app.component(itemKey, item);\r\n }\r\n },\r\n};\r\n\r\nexport default _default;\r\n"],"names":["RecursionDeviceGroup","Test","CreateDevice","count","deviceList","i","CreateGroup","RandomDeviceGroup","ForeachDeviceGroup","deviceGroup","handleDeviceGroup","Utils","AccessSession","session","groupMap","deviceMap","id","handle","_sfc_main$2","defineComponent","props","ForeachICountInfo","countInfo","countItem","item","onlineCount","computed","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultIconSizeCustomisations","defaultIconCustomisations","mergeCustomisations","defaults","result","key","value","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","cleanup","value2","num","split","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","iconToSVG","icon","customisations","fullIcon","fullCustomisations","box","body","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","regex","randomPrefix","counter","replaceIDs","prefix","ids","match","newID","escapedID","iconToHTML","attributes","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","list","prop","customisationAliases","fixSize","render","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","localCounter","h","useMask","html","storage","addIcon","name","data","Icon","propsIcon","_sfc_main$1","CountShow","theme","inject","FilterDevice","devices","_a","_a2","_b","showGroup","strSearch","bShow","ref","_hoisted_4","_hoisted_5","_component_group_show","_resolveComponent","_withCtx","_cache","$event","_createBlock","_component_Icon","_createCommentVNode","_createElementVNode","_createVNode","_toDisplayString","_b2","_c","_d","_e","_hoisted_2","_hoisted_3","_Fragment","_renderList","group","index","device","group2","_hoisted_6","_hoisted_7","right","avatar","plus","minus","_sfc_main","GroupShow","provide","controlParams","_withScopeId","n","_pushScopeId","_popScopeId","_component_CountShow","itemGroup","components","_default","app","itemKey"],"mappings":"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"}
1
+ {"version":3,"file":"smarteye-e-components.js","sources":["../src/components/recursion-device-group/model/index.ts","../src/components-global/count-show/index.vue","../src/components-global/count-show/index.vue","../node_modules/.pnpm/@iconify+vue@4.0.0_vue@3.2.39/node_modules/@iconify/vue/dist/offline.mjs","../src/components-global/group-show/index.vue","../src/components-global/group-show/index.vue","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/caret-right.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/folder-opened.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/avatar.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/plus.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/minus.js","../src/components/recursion-device-group/index.vue","../src/components/recursion-device-group/index.vue","../src/index.ts"],"sourcesContent":["export namespace RecursionDeviceGroup {\r\n export interface IChannelInfo {\r\n index: number;\r\n name: string;\r\n mediaDir: number;\r\n }\r\n\r\n export interface DeviceInfo<T = any> {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n online: boolean;\r\n channels: Array<IChannelInfo>;\r\n tag?: T;\r\n }\r\n\r\n export interface DeviceGroup<T = any, DT = any> extends ICountInfo {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n devices: Array<DeviceInfo<DT>>;\r\n items: Array<DeviceGroup<T, DT>>;\r\n tag?: T;\r\n }\r\n\r\n export interface SessionDeviceGroup<\r\n GroupTag = any,\r\n DeviceTag = any,\r\n SessionTag = any\r\n > extends ICountInfo {\r\n name: string;\r\n items: Array<DeviceGroup>;\r\n tag?: SessionTag;\r\n }\r\n\r\n export interface ICountInfo {\r\n totalCount: number;\r\n onlineCount: number;\r\n items: Array<ICountInfo>;\r\n }\r\n\r\n export interface IControlParams {\r\n onlyShowOnline: boolean;\r\n searchStr: string;\r\n }\r\n\r\n export namespace Test {\r\n let startIndex = 0;\r\n function CreateDevice(count: number): Array<DeviceInfo> {\r\n const deviceList: Array<DeviceInfo> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: \"testId\",\r\n pid: \"\",\r\n name: `device-${i}`,\r\n online: i % 2 == 0,\r\n channels: [],\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n function CreateGroup(count: number) {\r\n const deviceList: Array<DeviceGroup> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: `groupid-${i}`,\r\n name: `group-${i}`,\r\n pid: \"\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n devices: CreateDevice(10),\r\n items: CreateGroup(count - i - 1),\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n export function RandomDeviceGroup(count: number): SessionDeviceGroup {\r\n return {\r\n name: \"hah\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n items: CreateGroup(count),\r\n };\r\n }\r\n }\r\n\r\n function ForeachDeviceGroup(\r\n deviceGroup: DeviceGroup[],\r\n handleDeviceGroup: (deviceGroup: DeviceGroup) => void\r\n ) {\r\n for (let i = 0; i < deviceGroup.length; i++) {\r\n handleDeviceGroup(deviceGroup[i]);\r\n ForeachDeviceGroup(deviceGroup[i].items, handleDeviceGroup);\r\n }\r\n }\r\n\r\n export namespace Utils {\r\n export function AccessSession(session: SessionDeviceGroup) {\r\n const groupMap: { [k in string]: DeviceGroup } = {};\r\n const deviceMap: { [k in string]: DeviceInfo } = {};\r\n\r\n ForeachDeviceGroup(session.items, (deviceGroup) => {\r\n groupMap[deviceGroup.id] = deviceGroup;\r\n for (let i = 0; i < deviceGroup.devices.length; i++) {\r\n deviceMap[deviceGroup.devices[i].id] = deviceGroup.devices[i];\r\n }\r\n });\r\n\r\n return {\r\n getGroup(id: string) {\r\n return groupMap[id];\r\n },\r\n getDevice(id: string) {\r\n return deviceMap[id];\r\n },\r\n foreachGroup(handle: (item: DeviceGroup) => void) {\r\n for (let i in groupMap) {\r\n handle(groupMap[i]);\r\n }\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","import { h, defineComponent } from 'vue';\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || {};\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n ...defaultIconSizeCustomisations,\n ...defaultIconTransformations\n});\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const result = {\n attributes: {\n width: width.toString(),\n height: height.toString(),\n viewBox: box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString()\n },\n body\n };\n return result;\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + \"$3\"\n );\n });\n return body;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToURL(svg) {\n return 'url(\"data:image/svg+xml,' + encodeSVGforURL(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Storage for icons referred by name\n */\nconst storage = Object.create(null);\n/**\n * Add icon to storage, allowing to call it by name\n *\n * @param name\n * @param data\n */\nfunction addIcon(name, data) {\n storage[name] = data;\n}\n/**\n * Add collection to storage, allowing to call icons by name\n *\n * @param data Icon set\n * @param prefix Optional prefix to add to icon names, true (default) if prefix from icon set should be used.\n */\nfunction addCollection(data, prefix) {\n const iconPrefix = typeof prefix === 'string'\n ? prefix\n : prefix !== false && typeof data.prefix === 'string'\n ? data.prefix + ':'\n : '';\n quicklyValidateIconSet(data) &&\n parseIconSet(data, (name, icon) => {\n if (icon) {\n storage[iconPrefix + name] = icon;\n }\n });\n}\n/**\n * Component\n */\nconst Icon = defineComponent({\n // Do not inherit other attributes: it is handled by render()\n inheritAttrs: false,\n // Render icon\n render() {\n const props = this.$attrs;\n // Check icon\n const propsIcon = props.icon;\n const icon = typeof propsIcon === 'string'\n ? storage[propsIcon]\n : typeof propsIcon === 'object'\n ? propsIcon\n : null;\n // Validate icon object\n if (icon === null ||\n typeof icon !== 'object' ||\n typeof icon.body !== 'string') {\n return this.$slots.default ? this.$slots.default() : null;\n }\n // Valid icon: render it\n return render({\n ...defaultIconProps,\n ...icon,\n }, props);\n },\n});\n\nexport { Icon, addCollection, addIcon };\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr) >= 0\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) >= 0 || item.id.indexOf((props.controlParams as any).searchStr) >= 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr) >= 0\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) >= 0 || item.id.indexOf((props.controlParams as any).searchStr) >= 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M384 192v640l384-320.064z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384H832zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704l116.736-175.104zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z\\\"/>\"\n};\nexport default data;\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","import { Plugin, App } from \"vue\";\r\n\r\nexport * from \"./comp.d\";\r\nexport * from \"./components\";\r\n\r\nimport RecursionDeviceGroup from \"/@/components/recursion-device-group/index.vue\";\r\n\r\nconst components = {\r\n RecursionDeviceGroup,\r\n};\r\n\r\nconst _default: Plugin = {\r\n install(app: App) {\r\n for (const itemKey in components) {\r\n const item = components[itemKey as keyof typeof components];\r\n app.component(itemKey, item);\r\n }\r\n },\r\n};\r\n\r\nexport default _default;\r\n"],"names":["RecursionDeviceGroup","Test","CreateDevice","count","deviceList","i","CreateGroup","RandomDeviceGroup","ForeachDeviceGroup","deviceGroup","handleDeviceGroup","Utils","AccessSession","session","groupMap","deviceMap","id","handle","_sfc_main$2","defineComponent","props","ForeachICountInfo","countInfo","countItem","item","onlineCount","computed","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultIconSizeCustomisations","defaultIconCustomisations","mergeCustomisations","defaults","result","key","value","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","cleanup","value2","num","split","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","iconToSVG","icon","customisations","fullIcon","fullCustomisations","box","body","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","regex","randomPrefix","counter","replaceIDs","prefix","ids","match","newID","escapedID","iconToHTML","attributes","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","list","prop","customisationAliases","fixSize","render","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","localCounter","h","useMask","html","storage","addIcon","name","data","Icon","propsIcon","_sfc_main$1","CountShow","theme","inject","FilterDevice","devices","_a","_a2","_b","showGroup","strSearch","bShow","ref","_hoisted_4","_hoisted_5","_component_group_show","_resolveComponent","_withCtx","_cache","$event","_createBlock","_component_Icon","_createCommentVNode","_createElementVNode","_createVNode","_toDisplayString","_b2","_c","_d","_e","_hoisted_2","_hoisted_3","_Fragment","_renderList","group","index","device","group2","_hoisted_6","_hoisted_7","right","avatar","plus","minus","_sfc_main","GroupShow","provide","controlParams","_withScopeId","n","_pushScopeId","_popScopeId","_component_CountShow","itemGroup","components","_default","app","itemKey"],"mappings":"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"}
@@ -1,39 +1,39 @@
1
- import { defineComponent as F, computed as M, openBlock as f, createElementBlock as b, renderSlot as y, createElementVNode as _, toDisplayString as O, h as L, inject as te, ref as z, resolveComponent as $, normalizeClass as B, createVNode as I, withCtx as C, createBlock as P, createCommentVNode as j, Fragment as H, renderList as A, provide as oe, pushScopeId as ne, popScopeId as se } from "vue";
1
+ import { defineComponent as F, computed as M, openBlock as p, createElementBlock as b, renderSlot as y, createElementVNode as _, toDisplayString as O, h as L, inject as te, ref as z, resolveComponent as $, normalizeClass as B, createVNode as I, withCtx as C, createBlock as P, createCommentVNode as j, Fragment as H, renderList as A, provide as oe, pushScopeId as ne, popScopeId as se } from "vue";
2
2
  var N;
3
3
  ((e) => {
4
4
  ((o) => {
5
- function s(l) {
5
+ function s(a) {
6
6
  const i = [];
7
- for (let a = 0; a < l; a++)
7
+ for (let l = 0; l < a; l++)
8
8
  i.push({
9
9
  id: "testId",
10
10
  pid: "",
11
- name: `device-${a}`,
12
- online: a % 2 == 0,
11
+ name: `device-${l}`,
12
+ online: l % 2 == 0,
13
13
  channels: []
14
14
  });
15
15
  return i;
16
16
  }
17
- function t(l) {
17
+ function t(a) {
18
18
  const i = [];
19
- for (let a = 0; a < l; a++)
19
+ for (let l = 0; l < a; l++)
20
20
  i.push({
21
- id: `groupid-${a}`,
22
- name: `group-${a}`,
21
+ id: `groupid-${l}`,
22
+ name: `group-${l}`,
23
23
  pid: "",
24
24
  onlineCount: 0,
25
25
  totalCount: 0,
26
26
  devices: s(10),
27
- items: t(l - a - 1)
27
+ items: t(a - l - 1)
28
28
  });
29
29
  return i;
30
30
  }
31
- function r(l) {
31
+ function r(a) {
32
32
  return {
33
33
  name: "hah",
34
34
  onlineCount: 0,
35
35
  totalCount: 0,
36
- items: t(l)
36
+ items: t(a)
37
37
  };
38
38
  }
39
39
  o.RandomDeviceGroup = r;
@@ -44,21 +44,21 @@ var N;
44
44
  }
45
45
  ((o) => {
46
46
  function s(t) {
47
- const r = {}, l = {};
47
+ const r = {}, a = {};
48
48
  return n(t.items, (i) => {
49
49
  r[i.id] = i;
50
- for (let a = 0; a < i.devices.length; a++)
51
- l[i.devices[a].id] = i.devices[a];
50
+ for (let l = 0; l < i.devices.length; l++)
51
+ a[i.devices[l].id] = i.devices[l];
52
52
  }), {
53
53
  getGroup(i) {
54
54
  return r[i];
55
55
  },
56
56
  getDevice(i) {
57
- return l[i];
57
+ return a[i];
58
58
  },
59
59
  foreachGroup(i) {
60
- for (let a in r)
61
- i(r[a]);
60
+ for (let l in r)
61
+ i(r[l]);
62
62
  }
63
63
  };
64
64
  }
@@ -73,10 +73,10 @@ const re = F({
73
73
  setup(e) {
74
74
  function n(t, r) {
75
75
  if (r) {
76
- let l = 0;
76
+ let a = 0;
77
77
  return r.items.forEach((i) => {
78
- l += n(t, i);
79
- }), t(r) + l;
78
+ a += n(t, i);
79
+ }), t(r) + a;
80
80
  }
81
81
  return 0;
82
82
  }
@@ -92,14 +92,14 @@ const E = (e, n) => {
92
92
  for (const [s, t] of n)
93
93
  o[s] = t;
94
94
  return o;
95
- }, ie = { class: "root" }, ae = { class: "count-show" };
96
- function le(e, n, o, s, t, r) {
97
- return f(), b("div", ie, [
95
+ }, ie = { class: "root" }, le = { class: "count-show" };
96
+ function ae(e, n, o, s, t, r) {
97
+ return p(), b("div", ie, [
98
98
  y(e.$slots, "default", {}, void 0, !0),
99
- _("span", ae, O(e.onlineCount) + "/" + O(e.totalCount), 1)
99
+ _("span", le, O(e.onlineCount) + "/" + O(e.totalCount), 1)
100
100
  ]);
101
101
  }
102
- const q = /* @__PURE__ */ E(re, [["render", le], ["__scopeId", "data-v-56ab9f59"]]), J = Object.freeze(
102
+ const q = /* @__PURE__ */ E(re, [["render", ae], ["__scopeId", "data-v-56ab9f59"]]), J = Object.freeze(
103
103
  {
104
104
  left: 0,
105
105
  top: 0,
@@ -178,7 +178,7 @@ function he(e, n = 0) {
178
178
  }
179
179
  return n;
180
180
  }
181
- const pe = /(-?[0-9.]*[0-9]+[0-9.]*)/g, fe = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
181
+ const fe = /(-?[0-9.]*[0-9]+[0-9.]*)/g, pe = /^-?[0-9.]*[0-9]+[0-9.]*$/g;
182
182
  function R(e, n, o) {
183
183
  if (n === 1)
184
184
  return e;
@@ -186,20 +186,20 @@ function R(e, n, o) {
186
186
  return Math.ceil(e * n * o) / o;
187
187
  if (typeof e != "string")
188
188
  return e;
189
- const s = e.split(pe);
189
+ const s = e.split(fe);
190
190
  if (s === null || !s.length)
191
191
  return e;
192
192
  const t = [];
193
- let r = s.shift(), l = fe.test(r);
193
+ let r = s.shift(), a = pe.test(r);
194
194
  for (; ; ) {
195
- if (l) {
195
+ if (a) {
196
196
  const i = parseFloat(r);
197
197
  isNaN(i) ? t.push(r) : t.push(Math.ceil(i * n * o) / o);
198
198
  } else
199
199
  t.push(r);
200
200
  if (r = s.shift(), r === void 0)
201
201
  return t.join("");
202
- l = !l;
202
+ a = !a;
203
203
  }
204
204
  }
205
205
  function ge(e, n) {
@@ -217,9 +217,9 @@ function ge(e, n) {
217
217
  };
218
218
  let r = o.body;
219
219
  [o, s].forEach((g) => {
220
- const h = [], p = g.hFlip, c = g.vFlip;
220
+ const h = [], f = g.hFlip, c = g.vFlip;
221
221
  let w = g.rotate;
222
- p ? c ? w += 2 : (h.push(
222
+ f ? c ? w += 2 : (h.push(
223
223
  "translate(" + (t.width + t.left).toString() + " " + (0 - t.top).toString() + ")"
224
224
  ), h.push("scale(-1 1)"), t.top = t.left = 0) : c && (h.push(
225
225
  "translate(" + (0 - t.left).toString() + " " + (t.height + t.top).toString() + ")"
@@ -244,13 +244,13 @@ function ge(e, n) {
244
244
  }
245
245
  w % 2 === 1 && (t.left !== t.top && (S = t.left, t.left = t.top, t.top = S), t.width !== t.height && (S = t.width, t.width = t.height, t.height = S)), h.length && (r = '<g transform="' + h.join(" ") + '">' + r + "</g>");
246
246
  });
247
- const l = s.width, i = s.height, a = t.width, d = t.height;
247
+ const a = s.width, i = s.height, l = t.width, d = t.height;
248
248
  let v, u;
249
- return l === null ? (u = i === null ? "1em" : i === "auto" ? d : i, v = R(u, a / d)) : (v = l === "auto" ? a : l, u = i === null ? R(v, d / a) : i === "auto" ? d : i), {
249
+ return a === null ? (u = i === null ? "1em" : i === "auto" ? d : i, v = R(u, l / d)) : (v = a === "auto" ? l : a, u = i === null ? R(v, d / l) : i === "auto" ? d : i), {
250
250
  attributes: {
251
251
  width: v.toString(),
252
252
  height: u.toString(),
253
- viewBox: t.left.toString() + " " + t.top.toString() + " " + a.toString() + " " + d.toString()
253
+ viewBox: t.left.toString() + " " + t.top.toString() + " " + l.toString() + " " + d.toString()
254
254
  },
255
255
  body: r
256
256
  };
@@ -263,9 +263,9 @@ function _e(e, n = me) {
263
263
  for (; s = ve.exec(e); )
264
264
  o.push(s[1]);
265
265
  return o.length && o.forEach((t) => {
266
- const r = typeof n == "function" ? n(t) : n + (we++).toString(), l = t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
266
+ const r = typeof n == "function" ? n(t) : n + (we++).toString(), a = t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
267
267
  e = e.replace(
268
- new RegExp('([#;"])(' + l + ')([")]|\\.[a-z])', "g"),
268
+ new RegExp('([#;"])(' + a + ')([")]|\\.[a-z])', "g"),
269
269
  "$1" + r + "$3"
270
270
  );
271
271
  }), e;
@@ -319,11 +319,11 @@ function W(e) {
319
319
  return e + (e.match(/^[-0-9.]+$/) ? "px" : "");
320
320
  }
321
321
  const ke = (e, n) => {
322
- const o = ce(V, n), s = { ...Ce }, t = n.mode || "svg", r = {}, l = n.style, i = typeof l == "object" && !(l instanceof Array) ? l : {};
323
- for (let p in n) {
324
- const c = n[p];
322
+ const o = ce(V, n), s = { ...Ce }, t = n.mode || "svg", r = {}, a = n.style, i = typeof a == "object" && !(a instanceof Array) ? a : {};
323
+ for (let f in n) {
324
+ const c = n[f];
325
325
  if (c !== void 0)
326
- switch (p) {
326
+ switch (f) {
327
327
  case "icon":
328
328
  case "style":
329
329
  case "onLoad":
@@ -332,7 +332,7 @@ const ke = (e, n) => {
332
332
  case "inline":
333
333
  case "hFlip":
334
334
  case "vFlip":
335
- o[p] = c === !0 || c === "true" || c === 1;
335
+ o[f] = c === !0 || c === "true" || c === 1;
336
336
  break;
337
337
  case "flip":
338
338
  typeof c == "string" && de(o, c);
@@ -341,26 +341,26 @@ const ke = (e, n) => {
341
341
  r.color = c;
342
342
  break;
343
343
  case "rotate":
344
- typeof c == "string" ? o[p] = he(c) : typeof c == "number" && (o[p] = c);
344
+ typeof c == "string" ? o[f] = he(c) : typeof c == "number" && (o[f] = c);
345
345
  break;
346
346
  case "ariaHidden":
347
347
  case "aria-hidden":
348
348
  c !== !0 && c !== "true" && delete s["aria-hidden"];
349
349
  break;
350
350
  default: {
351
- const w = G[p];
352
- w ? (c === !0 || c === "true" || c === 1) && (o[w] = !0) : V[p] === void 0 && (s[p] = c);
351
+ const w = G[f];
352
+ w ? (c === !0 || c === "true" || c === 1) && (o[w] = !0) : V[f] === void 0 && (s[f] = c);
353
353
  }
354
354
  }
355
355
  }
356
- const a = ge(e, o), d = a.attributes;
356
+ const l = ge(e, o), d = l.attributes;
357
357
  if (o.inline && (r.verticalAlign = "-0.125em"), t === "svg") {
358
358
  s.style = {
359
359
  ...r,
360
360
  ...i
361
361
  }, Object.assign(s, d);
362
- let p = 0, c = n.id;
363
- return typeof c == "string" && (c = c.replace(/-/g, "_")), s.innerHTML = _e(a.body, c ? () => c + "ID" + p++ : "iconifyVue"), L("svg", s);
362
+ let f = 0, c = n.id;
363
+ return typeof c == "string" && (c = c.replace(/-/g, "_")), s.innerHTML = _e(l.body, c ? () => c + "ID" + f++ : "iconifyVue"), L("svg", s);
364
364
  }
365
365
  const { body: v, width: u, height: m } = e, g = t === "mask" || (t === "bg" ? !1 : v.indexOf("currentColor") !== -1), h = Se(v, {
366
366
  ...d,
@@ -402,19 +402,19 @@ const Ie = F({
402
402
  setup(e) {
403
403
  const n = te("theme");
404
404
  function o(r) {
405
- var l;
406
- return ((l = r && r.filter((i) => {
407
- var a;
408
- return !((a = e.controlParams) != null && a.onlyShowOnline) || i.online;
409
- })) == null ? void 0 : l.filter((i) => {
410
- var a, d;
411
- return e.controlParams ? i.name.indexOf((a = e.controlParams) == null ? void 0 : a.searchStr) >= 0 || i.id.indexOf((d = e.controlParams) == null ? void 0 : d.searchStr) : !0;
405
+ var a;
406
+ return ((a = r && r.filter((i) => {
407
+ var l;
408
+ return !((l = e.controlParams) != null && l.onlyShowOnline) || i.online;
409
+ })) == null ? void 0 : a.filter((i) => {
410
+ var l, d;
411
+ return e.controlParams ? i.name.indexOf((l = e.controlParams) == null ? void 0 : l.searchStr) >= 0 || i.id.indexOf((d = e.controlParams) == null ? void 0 : d.searchStr) >= 0 : !0;
412
412
  })) || [];
413
413
  }
414
414
  const s = M(() => {
415
- var r, l;
415
+ var r, a;
416
416
  const i = e.controlParams.searchStr;
417
- return i.length == 0 || e.deviceGroup && ((r = e.deviceGroup) == null ? void 0 : r.name.indexOf(i)) > 0 ? !0 : (l = e.deviceGroup) == null ? void 0 : l.devices.find((a) => a.name.indexOf(e.controlParams.searchStr) > 0 || a.id.indexOf(e.controlParams.searchStr) > 0);
417
+ return i.length == 0 || e.deviceGroup && ((r = e.deviceGroup) == null ? void 0 : r.name.indexOf(i)) > 0 ? !0 : (a = e.deviceGroup) == null ? void 0 : a.devices.find((l) => l.name.indexOf(e.controlParams.searchStr) >= 0 || l.id.indexOf(e.controlParams.searchStr) >= 0);
418
418
  }), t = z(!1);
419
419
  return {
420
420
  showGroup: s,
@@ -432,9 +432,9 @@ const Ge = {
432
432
  style: { "margin-left": "26px" }
433
433
  }, Me = { class: "device-show-div" }, ze = ["title"], He = { class: "device-slot" };
434
434
  function Ae(e, n, o, s, t, r) {
435
- var l, i;
436
- const a = $("Icon"), d = $("CountShow"), v = $("group-show");
437
- return e.showGroup ? (f(), b("div", {
435
+ var a, i;
436
+ const l = $("Icon"), d = $("CountShow"), v = $("group-show");
437
+ return e.showGroup ? (p(), b("div", {
438
438
  key: 0,
439
439
  class: B("group " + e.theme)
440
440
  }, [
@@ -443,16 +443,16 @@ function Ae(e, n, o, s, t, r) {
443
443
  controlParams: e.controlParams
444
444
  }, {
445
445
  default: C(() => {
446
- var u, m, g, h, p;
446
+ var u, m, g, h, f;
447
447
  return [
448
- e.deviceGroup && e.deviceGroup.devices.length + e.deviceGroup.items.length > 0 ? (f(), b("span", Ge, [
449
- e.bShow ? (f(), P(a, {
448
+ e.deviceGroup && e.deviceGroup.devices.length + e.deviceGroup.items.length > 0 ? (p(), b("span", Ge, [
449
+ e.bShow ? (p(), P(l, {
450
450
  key: 1,
451
451
  icon: "minus",
452
452
  width: "20",
453
453
  onClick: n[1] || (n[1] = (c) => e.bShow = !e.bShow),
454
454
  class: "handle-ls-svg"
455
- })) : (f(), P(a, {
455
+ })) : (p(), P(l, {
456
456
  key: 0,
457
457
  icon: "plus",
458
458
  width: "20",
@@ -464,7 +464,7 @@ function Ae(e, n, o, s, t, r) {
464
464
  class: "group-head-db-click",
465
465
  onDblclick: n[2] || (n[2] = (c) => e.bShow = !e.bShow)
466
466
  }, [
467
- I(a, {
467
+ I(l, {
468
468
  icon: "group",
469
469
  width: "24",
470
470
  class: "group-avatar"
@@ -472,7 +472,7 @@ function Ae(e, n, o, s, t, r) {
472
472
  _("span", {
473
473
  class: "group-name",
474
474
  title: (u = e.deviceGroup) == null ? void 0 : u.name
475
- }, O(((m = e.deviceGroup) == null ? void 0 : m.name) && ((g = e.deviceGroup) == null ? void 0 : g.name.length) > 0 ? (h = e.deviceGroup) == null ? void 0 : h.name : (p = e.deviceGroup) == null ? void 0 : p.id), 9, Oe)
475
+ }, O(((m = e.deviceGroup) == null ? void 0 : m.name) && ((g = e.deviceGroup) == null ? void 0 : g.name.length) > 0 ? (h = e.deviceGroup) == null ? void 0 : h.name : (f = e.deviceGroup) == null ? void 0 : f.id), 9, Oe)
476
476
  ], 32),
477
477
  _("div", Fe, [
478
478
  y(e.$slots, "group", { group: e.deviceGroup }, void 0, !0)
@@ -481,8 +481,8 @@ function Ae(e, n, o, s, t, r) {
481
481
  }),
482
482
  _: 3
483
483
  }, 8, ["countInfo", "controlParams"]),
484
- e.bShow ? (f(), b("div", je, [
485
- (f(!0), b(H, null, A((l = e.deviceGroup) == null ? void 0 : l.items, (u, m) => (f(), P(v, {
484
+ e.bShow ? (p(), b("div", je, [
485
+ (p(!0), b(H, null, A((a = e.deviceGroup) == null ? void 0 : a.items, (u, m) => (p(), P(v, {
486
486
  key: m,
487
487
  deviceGroup: u,
488
488
  controlParams: e.controlParams
@@ -499,11 +499,11 @@ function Ae(e, n, o, s, t, r) {
499
499
  _: 2
500
500
  }, 1032, ["deviceGroup", "controlParams"]))), 128)),
501
501
  _("div", Me, [
502
- (f(!0), b(H, null, A(e.FilterDevice((i = e.deviceGroup) == null ? void 0 : i.devices), (u, m) => (f(), b("div", {
502
+ (p(!0), b(H, null, A(e.FilterDevice((i = e.deviceGroup) == null ? void 0 : i.devices), (u, m) => (p(), b("div", {
503
503
  key: m,
504
504
  class: B(["device", u.online && "online-device"])
505
505
  }, [
506
- I(a, {
506
+ I(l, {
507
507
  icon: "user",
508
508
  width: "16",
509
509
  class: "device-avatar"
@@ -523,7 +523,7 @@ function Ae(e, n, o, s, t, r) {
523
523
  ])) : j("", !0)
524
524
  ], 2)) : j("", !0);
525
525
  }
526
- const De = /* @__PURE__ */ E(Pe, [["render", Ae], ["__scopeId", "data-v-a9d269de"]]), Ee = {
526
+ const De = /* @__PURE__ */ E(Pe, [["render", Ae], ["__scopeId", "data-v-100c06ff"]]), Ee = {
527
527
  width: 1024,
528
528
  height: 1024,
529
529
  body: '<path fill="currentColor" d="M384 192v640l384-320.064z"/>'
@@ -587,9 +587,9 @@ const Re = F({
587
587
  });
588
588
  const Ve = (e) => (ne("data-v-7e0a8034"), e = e(), se(), e), xe = { class: "device-group-list" }, Ue = { class: "search-panel" }, We = /* @__PURE__ */ Ve(() => /* @__PURE__ */ _("label", { for: "onlineShow" }, "\u53EA\u663E\u793A\u5728\u7EBF\u8BBE\u5907", -1)), Ke = { class: "device-panel" };
589
589
  function qe(e, n, o, s, t, r) {
590
- var l;
591
- const i = $("CountShow"), a = $("group-show");
592
- return f(), b("div", xe, [
590
+ var a;
591
+ const i = $("CountShow"), l = $("group-show");
592
+ return p(), b("div", xe, [
593
593
  _("div", Ue, [
594
594
  I(i, { countInfo: e.deviceGroup }, {
595
595
  default: C(() => [
@@ -605,7 +605,7 @@ function qe(e, n, o, s, t, r) {
605
605
  }, 8, ["countInfo"])
606
606
  ]),
607
607
  _("div", Ke, [
608
- (f(!0), b(H, null, A((l = e.deviceGroup) == null ? void 0 : l.items, (d, v) => (f(), P(a, {
608
+ (p(!0), b(H, null, A((a = e.deviceGroup) == null ? void 0 : a.items, (d, v) => (p(), P(l, {
609
609
  controlParams: e.controlParams,
610
610
  key: v,
611
611
  deviceGroup: d
@@ -1 +1 @@
1
- {"version":3,"file":"smarteye-e-components.mjs","sources":["../src/components/recursion-device-group/model/index.ts","../src/components-global/count-show/index.vue","../src/components-global/count-show/index.vue","../node_modules/.pnpm/@iconify+vue@4.0.0_vue@3.2.39/node_modules/@iconify/vue/dist/offline.mjs","../src/components-global/group-show/index.vue","../src/components-global/group-show/index.vue","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/caret-right.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/folder-opened.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/avatar.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/plus.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/minus.js","../src/components/recursion-device-group/index.vue","../src/components/recursion-device-group/index.vue","../src/index.ts"],"sourcesContent":["export namespace RecursionDeviceGroup {\r\n export interface IChannelInfo {\r\n index: number;\r\n name: string;\r\n mediaDir: number;\r\n }\r\n\r\n export interface DeviceInfo<T = any> {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n online: boolean;\r\n channels: Array<IChannelInfo>;\r\n tag?: T;\r\n }\r\n\r\n export interface DeviceGroup<T = any, DT = any> extends ICountInfo {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n devices: Array<DeviceInfo<DT>>;\r\n items: Array<DeviceGroup<T, DT>>;\r\n tag?: T;\r\n }\r\n\r\n export interface SessionDeviceGroup<\r\n GroupTag = any,\r\n DeviceTag = any,\r\n SessionTag = any\r\n > extends ICountInfo {\r\n name: string;\r\n items: Array<DeviceGroup>;\r\n tag?: SessionTag;\r\n }\r\n\r\n export interface ICountInfo {\r\n totalCount: number;\r\n onlineCount: number;\r\n items: Array<ICountInfo>;\r\n }\r\n\r\n export interface IControlParams {\r\n onlyShowOnline: boolean;\r\n searchStr: string;\r\n }\r\n\r\n export namespace Test {\r\n let startIndex = 0;\r\n function CreateDevice(count: number): Array<DeviceInfo> {\r\n const deviceList: Array<DeviceInfo> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: \"testId\",\r\n pid: \"\",\r\n name: `device-${i}`,\r\n online: i % 2 == 0,\r\n channels: [],\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n function CreateGroup(count: number) {\r\n const deviceList: Array<DeviceGroup> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: `groupid-${i}`,\r\n name: `group-${i}`,\r\n pid: \"\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n devices: CreateDevice(10),\r\n items: CreateGroup(count - i - 1),\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n export function RandomDeviceGroup(count: number): SessionDeviceGroup {\r\n return {\r\n name: \"hah\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n items: CreateGroup(count),\r\n };\r\n }\r\n }\r\n\r\n function ForeachDeviceGroup(\r\n deviceGroup: DeviceGroup[],\r\n handleDeviceGroup: (deviceGroup: DeviceGroup) => void\r\n ) {\r\n for (let i = 0; i < deviceGroup.length; i++) {\r\n handleDeviceGroup(deviceGroup[i]);\r\n ForeachDeviceGroup(deviceGroup[i].items, handleDeviceGroup);\r\n }\r\n }\r\n\r\n export namespace Utils {\r\n export function AccessSession(session: SessionDeviceGroup) {\r\n const groupMap: { [k in string]: DeviceGroup } = {};\r\n const deviceMap: { [k in string]: DeviceInfo } = {};\r\n\r\n ForeachDeviceGroup(session.items, (deviceGroup) => {\r\n groupMap[deviceGroup.id] = deviceGroup;\r\n for (let i = 0; i < deviceGroup.devices.length; i++) {\r\n deviceMap[deviceGroup.devices[i].id] = deviceGroup.devices[i];\r\n }\r\n });\r\n\r\n return {\r\n getGroup(id: string) {\r\n return groupMap[id];\r\n },\r\n getDevice(id: string) {\r\n return deviceMap[id];\r\n },\r\n foreachGroup(handle: (item: DeviceGroup) => void) {\r\n for (let i in groupMap) {\r\n handle(groupMap[i]);\r\n }\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","import { h, defineComponent } from 'vue';\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || {};\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n ...defaultIconSizeCustomisations,\n ...defaultIconTransformations\n});\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const result = {\n attributes: {\n width: width.toString(),\n height: height.toString(),\n viewBox: box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString()\n },\n body\n };\n return result;\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + \"$3\"\n );\n });\n return body;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToURL(svg) {\n return 'url(\"data:image/svg+xml,' + encodeSVGforURL(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Storage for icons referred by name\n */\nconst storage = Object.create(null);\n/**\n * Add icon to storage, allowing to call it by name\n *\n * @param name\n * @param data\n */\nfunction addIcon(name, data) {\n storage[name] = data;\n}\n/**\n * Add collection to storage, allowing to call icons by name\n *\n * @param data Icon set\n * @param prefix Optional prefix to add to icon names, true (default) if prefix from icon set should be used.\n */\nfunction addCollection(data, prefix) {\n const iconPrefix = typeof prefix === 'string'\n ? prefix\n : prefix !== false && typeof data.prefix === 'string'\n ? data.prefix + ':'\n : '';\n quicklyValidateIconSet(data) &&\n parseIconSet(data, (name, icon) => {\n if (icon) {\n storage[iconPrefix + name] = icon;\n }\n });\n}\n/**\n * Component\n */\nconst Icon = defineComponent({\n // Do not inherit other attributes: it is handled by render()\n inheritAttrs: false,\n // Render icon\n render() {\n const props = this.$attrs;\n // Check icon\n const propsIcon = props.icon;\n const icon = typeof propsIcon === 'string'\n ? storage[propsIcon]\n : typeof propsIcon === 'object'\n ? propsIcon\n : null;\n // Validate icon object\n if (icon === null ||\n typeof icon !== 'object' ||\n typeof icon.body !== 'string') {\n return this.$slots.default ? this.$slots.default() : null;\n }\n // Valid icon: render it\n return render({\n ...defaultIconProps,\n ...icon,\n }, props);\n },\n});\n\nexport { Icon, addCollection, addIcon };\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr)\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) > 0 || item.id.indexOf((props.controlParams as any).searchStr) > 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr)\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) > 0 || item.id.indexOf((props.controlParams as any).searchStr) > 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M384 192v640l384-320.064z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384H832zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704l116.736-175.104zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z\\\"/>\"\n};\nexport default data;\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","import { Plugin, App } from \"vue\";\r\n\r\nexport * from \"./comp.d\";\r\nexport * from \"./components\";\r\n\r\nimport RecursionDeviceGroup from \"/@/components/recursion-device-group/index.vue\";\r\n\r\nconst components = {\r\n RecursionDeviceGroup,\r\n};\r\n\r\nconst _default: Plugin = {\r\n install(app: App) {\r\n for (const itemKey in components) {\r\n const item = components[itemKey as keyof typeof components];\r\n app.component(itemKey, item);\r\n }\r\n },\r\n};\r\n\r\nexport default _default;\r\n"],"names":["RecursionDeviceGroup","Test","CreateDevice","count","deviceList","i","CreateGroup","RandomDeviceGroup","ForeachDeviceGroup","deviceGroup","handleDeviceGroup","Utils","AccessSession","session","groupMap","deviceMap","id","handle","_sfc_main$2","defineComponent","props","ForeachICountInfo","countInfo","countItem","item","onlineCount","computed","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultIconSizeCustomisations","defaultIconCustomisations","mergeCustomisations","defaults","result","key","value","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","cleanup","value2","num","split","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","iconToSVG","icon","customisations","fullIcon","fullCustomisations","box","body","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","regex","randomPrefix","counter","replaceIDs","prefix","ids","match","newID","escapedID","iconToHTML","attributes","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","list","prop","customisationAliases","fixSize","render","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","localCounter","h","useMask","html","storage","addIcon","name","data","Icon","propsIcon","_sfc_main$1","CountShow","theme","inject","FilterDevice","devices","_a","_a2","_b","showGroup","strSearch","bShow","ref","_hoisted_4","_hoisted_5","_component_group_show","_resolveComponent","_withCtx","_cache","$event","_createBlock","_component_Icon","_createCommentVNode","_createElementVNode","_createVNode","_toDisplayString","_b2","_c","_d","_e","_hoisted_2","_hoisted_3","_Fragment","_renderList","group","index","device","group2","_hoisted_6","_hoisted_7","right","avatar","plus","minus","_sfc_main","GroupShow","provide","controlParams","_withScopeId","n","_pushScopeId","_popScopeId","_component_CountShow","itemGroup","components","_default","app","itemKey"],"mappings":"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"}
1
+ {"version":3,"file":"smarteye-e-components.mjs","sources":["../src/components/recursion-device-group/model/index.ts","../src/components-global/count-show/index.vue","../src/components-global/count-show/index.vue","../node_modules/.pnpm/@iconify+vue@4.0.0_vue@3.2.39/node_modules/@iconify/vue/dist/offline.mjs","../src/components-global/group-show/index.vue","../src/components-global/group-show/index.vue","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/caret-right.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/folder-opened.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/avatar.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/plus.js","../node_modules/.pnpm/@iconify-icons+ep@1.2.8/node_modules/@iconify-icons/ep/minus.js","../src/components/recursion-device-group/index.vue","../src/components/recursion-device-group/index.vue","../src/index.ts"],"sourcesContent":["export namespace RecursionDeviceGroup {\r\n export interface IChannelInfo {\r\n index: number;\r\n name: string;\r\n mediaDir: number;\r\n }\r\n\r\n export interface DeviceInfo<T = any> {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n online: boolean;\r\n channels: Array<IChannelInfo>;\r\n tag?: T;\r\n }\r\n\r\n export interface DeviceGroup<T = any, DT = any> extends ICountInfo {\r\n id: string;\r\n name: string;\r\n pid: string;\r\n devices: Array<DeviceInfo<DT>>;\r\n items: Array<DeviceGroup<T, DT>>;\r\n tag?: T;\r\n }\r\n\r\n export interface SessionDeviceGroup<\r\n GroupTag = any,\r\n DeviceTag = any,\r\n SessionTag = any\r\n > extends ICountInfo {\r\n name: string;\r\n items: Array<DeviceGroup>;\r\n tag?: SessionTag;\r\n }\r\n\r\n export interface ICountInfo {\r\n totalCount: number;\r\n onlineCount: number;\r\n items: Array<ICountInfo>;\r\n }\r\n\r\n export interface IControlParams {\r\n onlyShowOnline: boolean;\r\n searchStr: string;\r\n }\r\n\r\n export namespace Test {\r\n let startIndex = 0;\r\n function CreateDevice(count: number): Array<DeviceInfo> {\r\n const deviceList: Array<DeviceInfo> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: \"testId\",\r\n pid: \"\",\r\n name: `device-${i}`,\r\n online: i % 2 == 0,\r\n channels: [],\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n function CreateGroup(count: number) {\r\n const deviceList: Array<DeviceGroup> = [];\r\n for (let i = 0; i < count; i++) {\r\n deviceList.push({\r\n id: `groupid-${i}`,\r\n name: `group-${i}`,\r\n pid: \"\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n devices: CreateDevice(10),\r\n items: CreateGroup(count - i - 1),\r\n });\r\n }\r\n return deviceList;\r\n }\r\n\r\n export function RandomDeviceGroup(count: number): SessionDeviceGroup {\r\n return {\r\n name: \"hah\",\r\n onlineCount: 0,\r\n totalCount: 0,\r\n items: CreateGroup(count),\r\n };\r\n }\r\n }\r\n\r\n function ForeachDeviceGroup(\r\n deviceGroup: DeviceGroup[],\r\n handleDeviceGroup: (deviceGroup: DeviceGroup) => void\r\n ) {\r\n for (let i = 0; i < deviceGroup.length; i++) {\r\n handleDeviceGroup(deviceGroup[i]);\r\n ForeachDeviceGroup(deviceGroup[i].items, handleDeviceGroup);\r\n }\r\n }\r\n\r\n export namespace Utils {\r\n export function AccessSession(session: SessionDeviceGroup) {\r\n const groupMap: { [k in string]: DeviceGroup } = {};\r\n const deviceMap: { [k in string]: DeviceInfo } = {};\r\n\r\n ForeachDeviceGroup(session.items, (deviceGroup) => {\r\n groupMap[deviceGroup.id] = deviceGroup;\r\n for (let i = 0; i < deviceGroup.devices.length; i++) {\r\n deviceMap[deviceGroup.devices[i].id] = deviceGroup.devices[i];\r\n }\r\n });\r\n\r\n return {\r\n getGroup(id: string) {\r\n return groupMap[id];\r\n },\r\n getDevice(id: string) {\r\n return deviceMap[id];\r\n },\r\n foreachGroup(handle: (item: DeviceGroup) => void) {\r\n for (let i in groupMap) {\r\n handle(groupMap[i]);\r\n }\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","<template>\r\n <div class=\"root\">\r\n <slot></slot>\r\n <!-- <button @click=\"countInfo&&countInfo.onlineCount++\">add</button> -->\r\n <span class=\"count-show\">\r\n {{onlineCount}}/{{totalCount}}\r\n </span>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType } from 'vue'\r\nimport { RecursionDeviceGroup } from '../../components/recursion-device-group/model'\r\n\r\nexport default defineComponent({\r\n props: {\r\n countInfo: Object as PropType<RecursionDeviceGroup.ICountInfo>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n function ForeachICountInfo(handle: (countInfo: RecursionDeviceGroup.ICountInfo) => number, countInfo?: RecursionDeviceGroup.ICountInfo) {\r\n if (countInfo) {\r\n let countItem = 0;\r\n countInfo.items.forEach(item => {\r\n countItem += ForeachICountInfo(handle, item);\r\n })\r\n return handle(countInfo) + countItem;\r\n }\r\n return 0;\r\n }\r\n\r\n const onlineCount = computed(() => {\r\n return ForeachICountInfo((item) => {\r\n return item.onlineCount;\r\n }, props.countInfo)\r\n })\r\n\r\n const totalCount = computed(() => {\r\n return ForeachICountInfo((item) => item.totalCount, props.countInfo)\r\n })\r\n\r\n return {\r\n totalCount,\r\n onlineCount\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.root {\r\n position: relative;\r\n}\r\n\r\n.count-show {\r\n position: absolute;\r\n right: 0px;\r\n color: rgb(183, 183, 183)\r\n}\r\n</style>","import { h, defineComponent } from 'vue';\n\nconst defaultIconDimensions = Object.freeze(\n {\n left: 0,\n top: 0,\n width: 16,\n height: 16\n }\n);\nconst defaultIconTransformations = Object.freeze({\n rotate: 0,\n vFlip: false,\n hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n ...defaultIconDimensions,\n ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n ...defaultIconProps,\n body: \"\",\n hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n const result = {};\n if (!obj1.hFlip !== !obj2.hFlip) {\n result.hFlip = true;\n }\n if (!obj1.vFlip !== !obj2.vFlip) {\n result.vFlip = true;\n }\n const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n if (rotate) {\n result.rotate = rotate;\n }\n return result;\n}\n\nfunction mergeIconData(parent, child) {\n const result = mergeIconTransformations(parent, child);\n for (const key in defaultExtendedIconProps) {\n if (key in defaultIconTransformations) {\n if (key in parent && !(key in result)) {\n result[key] = defaultIconTransformations[key];\n }\n } else if (key in child) {\n result[key] = child[key];\n } else if (key in parent) {\n result[key] = parent[key];\n }\n }\n return result;\n}\n\nfunction getIconsTree(data, names) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n const resolved = /* @__PURE__ */ Object.create(null);\n function resolve(name) {\n if (icons[name]) {\n return resolved[name] = [];\n }\n if (!(name in resolved)) {\n resolved[name] = null;\n const parent = aliases[name] && aliases[name].parent;\n const value = parent && resolve(parent);\n if (value) {\n resolved[name] = [parent].concat(value);\n }\n }\n return resolved[name];\n }\n (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n const icons = data.icons;\n const aliases = data.aliases || {};\n let currentProps = {};\n function parse(name2) {\n currentProps = mergeIconData(\n icons[name2] || aliases[name2],\n currentProps\n );\n }\n parse(name);\n tree.forEach(parse);\n return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n const names = [];\n if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n return names;\n }\n if (data.not_found instanceof Array) {\n data.not_found.forEach((name) => {\n callback(name, null);\n names.push(name);\n });\n }\n const tree = getIconsTree(data);\n for (const name in tree) {\n const item = tree[name];\n if (item) {\n callback(name, internalGetIconData(data, name, item));\n names.push(name);\n }\n }\n return names;\n}\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\nconst optionalPropertyDefaults = {\n provider: \"\",\n aliases: {},\n not_found: {},\n ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n for (const prop in defaults) {\n if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n return false;\n }\n }\n return true;\n}\nfunction quicklyValidateIconSet(obj) {\n if (typeof obj !== \"object\" || obj === null) {\n return null;\n }\n const data = obj;\n if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n return null;\n }\n if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n return null;\n }\n const icons = data.icons;\n for (const name in icons) {\n const icon = icons[name];\n if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n const aliases = data.aliases || {};\n for (const name in aliases) {\n const icon = aliases[name];\n const parent = icon.parent;\n if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n icon,\n defaultExtendedIconProps\n )) {\n return null;\n }\n }\n return data;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n width: null,\n height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n ...defaultIconSizeCustomisations,\n ...defaultIconTransformations\n});\n\nfunction mergeCustomisations(defaults, item) {\n const result = {\n ...defaults\n };\n for (const key in item) {\n const value = item[key];\n const valueType = typeof value;\n if (key in defaultIconSizeCustomisations) {\n if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n result[key] = value;\n }\n } else if (valueType === typeof result[key]) {\n result[key] = key === \"rotate\" ? value % 4 : value;\n }\n }\n return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n flip.split(separator).forEach((str) => {\n const value = str.trim();\n switch (value) {\n case \"horizontal\":\n custom.hFlip = true;\n break;\n case \"vertical\":\n custom.vFlip = true;\n break;\n }\n });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n const units = value.replace(/^-?[0-9.]*/, \"\");\n function cleanup(value2) {\n while (value2 < 0) {\n value2 += 4;\n }\n return value2 % 4;\n }\n if (units === \"\") {\n const num = parseInt(value);\n return isNaN(num) ? 0 : cleanup(num);\n } else if (units !== value) {\n let split = 0;\n switch (units) {\n case \"%\":\n split = 25;\n break;\n case \"deg\":\n split = 90;\n }\n if (split) {\n let num = parseFloat(value.slice(0, value.length - units.length));\n if (isNaN(num)) {\n return 0;\n }\n num = num / split;\n return num % 1 === 0 ? cleanup(num) : 0;\n }\n }\n return defaultValue;\n}\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n if (ratio === 1) {\n return size;\n }\n precision = precision || 100;\n if (typeof size === \"number\") {\n return Math.ceil(size * ratio * precision) / precision;\n }\n if (typeof size !== \"string\") {\n return size;\n }\n const oldParts = size.split(unitsSplit);\n if (oldParts === null || !oldParts.length) {\n return size;\n }\n const newParts = [];\n let code = oldParts.shift();\n let isNumber = unitsTest.test(code);\n while (true) {\n if (isNumber) {\n const num = parseFloat(code);\n if (isNaN(num)) {\n newParts.push(code);\n } else {\n newParts.push(Math.ceil(num * ratio * precision) / precision);\n }\n } else {\n newParts.push(code);\n }\n code = oldParts.shift();\n if (code === void 0) {\n return newParts.join(\"\");\n }\n isNumber = !isNumber;\n }\n}\n\nfunction iconToSVG(icon, customisations) {\n const fullIcon = {\n ...defaultIconProps,\n ...icon\n };\n const fullCustomisations = {\n ...defaultIconCustomisations,\n ...customisations\n };\n const box = {\n left: fullIcon.left,\n top: fullIcon.top,\n width: fullIcon.width,\n height: fullIcon.height\n };\n let body = fullIcon.body;\n [fullIcon, fullCustomisations].forEach((props) => {\n const transformations = [];\n const hFlip = props.hFlip;\n const vFlip = props.vFlip;\n let rotation = props.rotate;\n if (hFlip) {\n if (vFlip) {\n rotation += 2;\n } else {\n transformations.push(\n \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n );\n transformations.push(\"scale(-1 1)\");\n box.top = box.left = 0;\n }\n } else if (vFlip) {\n transformations.push(\n \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n );\n transformations.push(\"scale(1 -1)\");\n box.top = box.left = 0;\n }\n let tempValue;\n if (rotation < 0) {\n rotation -= Math.floor(rotation / 4) * 4;\n }\n rotation = rotation % 4;\n switch (rotation) {\n case 1:\n tempValue = box.height / 2 + box.top;\n transformations.unshift(\n \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n case 2:\n transformations.unshift(\n \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n );\n break;\n case 3:\n tempValue = box.width / 2 + box.left;\n transformations.unshift(\n \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n );\n break;\n }\n if (rotation % 2 === 1) {\n if (box.left !== box.top) {\n tempValue = box.left;\n box.left = box.top;\n box.top = tempValue;\n }\n if (box.width !== box.height) {\n tempValue = box.width;\n box.width = box.height;\n box.height = tempValue;\n }\n }\n if (transformations.length) {\n body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n }\n });\n const customisationsWidth = fullCustomisations.width;\n const customisationsHeight = fullCustomisations.height;\n const boxWidth = box.width;\n const boxHeight = box.height;\n let width;\n let height;\n if (customisationsWidth === null) {\n height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n width = calculateSize(height, boxWidth / boxHeight);\n } else {\n width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n }\n const result = {\n attributes: {\n width: width.toString(),\n height: height.toString(),\n viewBox: box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString()\n },\n body\n };\n return result;\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n const ids = [];\n let match;\n while (match = regex.exec(body)) {\n ids.push(match[1]);\n }\n if (!ids.length) {\n return body;\n }\n ids.forEach((id) => {\n const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n body = body.replace(\n new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n \"$1\" + newID + \"$3\"\n );\n });\n return body;\n}\n\nfunction iconToHTML(body, attributes) {\n let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n for (const attr in attributes) {\n renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n }\n return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToURL(svg) {\n return 'url(\"data:image/svg+xml,' + encodeSVGforURL(svg) + '\")';\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n webkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Aliases for customisations.\n * In Vue 'v-' properties are reserved, so v-flip must be renamed\n */\nconst customisationAliases = {};\n['horizontal', 'vertical'].forEach((prefix) => {\n const attr = prefix.slice(0, 1) + 'Flip';\n // vertical-flip\n customisationAliases[prefix + '-flip'] = attr;\n // v-flip\n customisationAliases[prefix.slice(0, 1) + '-flip'] = attr;\n // verticalFlip\n customisationAliases[prefix + 'Flip'] = attr;\n});\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops) => {\n // Split properties\n const customisations = mergeCustomisations(defaultExtendedIconCustomisations, props);\n const componentProps = { ...svgDefaults };\n // Check mode\n const mode = props.mode || 'svg';\n // Copy style\n const style = {};\n const propsStyle = props.style;\n const customStyle = typeof propsStyle === 'object' && !(propsStyle instanceof Array)\n ? propsStyle\n : {};\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'onLoad':\n case 'mode':\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: override style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n // Vue transforms 'aria-hidden' property to 'ariaHidden'\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n default: {\n const alias = customisationAliases[key];\n if (alias) {\n // Aliases for boolean customisations\n if (value === true || value === 'true' || value === 1) {\n customisations[alias] = true;\n }\n }\n else if (defaultExtendedIconCustomisations[key] === void 0) {\n // Copy missing property if it does not exist in customisations\n componentProps[key] = value;\n }\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add innerHTML and style to props\n componentProps['innerHTML'] = replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyVue');\n // Render icon\n return h('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return h('span', componentProps);\n};\n\n/**\n * Storage for icons referred by name\n */\nconst storage = Object.create(null);\n/**\n * Add icon to storage, allowing to call it by name\n *\n * @param name\n * @param data\n */\nfunction addIcon(name, data) {\n storage[name] = data;\n}\n/**\n * Add collection to storage, allowing to call icons by name\n *\n * @param data Icon set\n * @param prefix Optional prefix to add to icon names, true (default) if prefix from icon set should be used.\n */\nfunction addCollection(data, prefix) {\n const iconPrefix = typeof prefix === 'string'\n ? prefix\n : prefix !== false && typeof data.prefix === 'string'\n ? data.prefix + ':'\n : '';\n quicklyValidateIconSet(data) &&\n parseIconSet(data, (name, icon) => {\n if (icon) {\n storage[iconPrefix + name] = icon;\n }\n });\n}\n/**\n * Component\n */\nconst Icon = defineComponent({\n // Do not inherit other attributes: it is handled by render()\n inheritAttrs: false,\n // Render icon\n render() {\n const props = this.$attrs;\n // Check icon\n const propsIcon = props.icon;\n const icon = typeof propsIcon === 'string'\n ? storage[propsIcon]\n : typeof propsIcon === 'object'\n ? propsIcon\n : null;\n // Validate icon object\n if (icon === null ||\n typeof icon !== 'object' ||\n typeof icon.body !== 'string') {\n return this.$slots.default ? this.$slots.default() : null;\n }\n // Valid icon: render it\n return render({\n ...defaultIconProps,\n ...icon,\n }, props);\n },\n});\n\nexport { Icon, addCollection, addIcon };\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr) >= 0\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) >= 0 || item.id.indexOf((props.controlParams as any).searchStr) >= 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","<template>\r\n <div :class=\"'group ' + theme\" v-if=\"showGroup\">\r\n <CountShow :countInfo=\"deviceGroup\" :controlParams=\"controlParams\">\r\n <span v-if=\"deviceGroup && (deviceGroup.devices.length + deviceGroup.items.length > 0)\" class=\"head-op\">\r\n <Icon icon=\"plus\" width=\"20\" @click=\"bShow = !bShow\" v-if=\"!bShow\" class=\"handle-ls-svg\" />\r\n <Icon icon=\"minus\" width=\"20\" @click=\"bShow = !bShow\" v-else class=\"handle-ls-svg\" />\r\n </span>\r\n <span class=\"group-head-db-click\" @dblclick=\"bShow = !bShow\">\r\n <Icon icon=\"group\" width=\"24\" class=\"group-avatar\" />\r\n <span class=\"group-name\" :title=\"deviceGroup?.name\">\r\n {{(deviceGroup?.name && deviceGroup?.name.length > 0)?deviceGroup?.name:deviceGroup?.id}}\r\n </span>\r\n </span>\r\n <div class=\"group-slot\">\r\n <slot name=\"group\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </CountShow>\r\n\r\n <div style=\"margin-left: 26px\" v-if=\"bShow\">\r\n <group-show v-for=\"group, index in (deviceGroup?.items)\" :key=\"index\" :deviceGroup=\"group\"\r\n :controlParams=\"controlParams\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n <div class=\"device-show-div\">\r\n <div v-for=\"(item, index) in FilterDevice(deviceGroup?.devices)\" :key=\"index\" class=\"device\"\r\n :class=\"item.online&&'online-device'\">\r\n <Icon icon=\"user\" width=\"16\" class=\"device-avatar\" />\r\n <span :title=\"item.id\" class=\"device-name\">{{item.name.length > 0 ? item.name : item.id}}</span>\r\n <div class=\"device-slot\">\r\n <slot name=\"device\" :device=\"item\" :group=\"deviceGroup\"></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, defineComponent, PropType, ref, inject } from 'vue'\r\nimport { RecursionDeviceGroup } from '/@/components/recursion-device-group/model'\r\nimport CountShow from \"../count-show/index.vue\"\r\nimport { Icon } from '@iconify/vue/offline';\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n Icon\r\n },\r\n name: \"group-show\",\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.DeviceGroup>,\r\n controlParams: Object as PropType<RecursionDeviceGroup.IControlParams>\r\n },\r\n setup(props) {\r\n\r\n const theme = inject(\"theme\") as string\r\n\r\n function FilterDevice(devices?: RecursionDeviceGroup.DeviceInfo[]) {\r\n return (devices && devices.filter(item => !props.controlParams?.onlyShowOnline || item.online))?.filter((item) => {\r\n if (props.controlParams) {\r\n return item.name.indexOf(props.controlParams?.searchStr) >= 0 || item.id.indexOf(props.controlParams?.searchStr) >= 0\r\n }\r\n return true;\r\n }) || []\r\n }\r\n\r\n const showGroup = computed(() => {\r\n const strSearch = (props.controlParams as any).searchStr as string;\r\n\r\n if (strSearch.length == 0) {\r\n return true;\r\n }\r\n\r\n if (props.deviceGroup && props.deviceGroup?.name.indexOf(strSearch) > 0) {\r\n return true;\r\n }\r\n\r\n return props.deviceGroup?.devices.find(item => item.name.indexOf((props.controlParams as any).searchStr) >= 0 || item.id.indexOf((props.controlParams as any).searchStr) >= 0)\r\n })\r\n\r\n const bShow = ref(false);\r\n return {\r\n showGroup,\r\n FilterDevice,\r\n bShow,\r\n theme\r\n }\r\n },\r\n})\r\n</script>\r\n\r\n<style>\r\n:root {\r\n --device-offline-color: rgb(168, 168, 168);\r\n --device-online-color: rgb(1, 172, 1);\r\n --group-name-width: 160px;\r\n\r\n}\r\n</style>\r\n\r\n<style scoped>\r\n.group-head-db-click,\r\n.group-head-db-click .group-name {\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.device-show-div {\r\n max-height: 400px;\r\n overflow-y: auto;\r\n}\r\n\r\n.dark .handle-ls-svg {\r\n color: white;\r\n}\r\n\r\n\r\n.handle-ls-svg {\r\n vertical-align: -5px;\r\n cursor: pointer;\r\n margin-right: 5px;\r\n color: rgb(56, 56, 56)\r\n}\r\n\r\n.group-avatar {\r\n vertical-align: -6px;\r\n color: gray;\r\n}\r\n\r\n.device,\r\n.group {\r\n margin: 5px 0px;\r\n}\r\n\r\n.group-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 24px;\r\n padding-left: 5px;\r\n}\r\n\r\n.group-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 100px);\r\n}\r\n\r\n.device-slot {\r\n display: inline-block;\r\n width: calc(100% - var(--group-name-width) - 42px);\r\n}\r\n\r\n.device-avatar {\r\n vertical-align: -2px;\r\n margin-right: 4px;\r\n margin-left: 2px;\r\n color: var(--device-offline-color);\r\n}\r\n\r\n.device-name {\r\n display: inline-block;\r\n width: var(--group-name-width);\r\n cursor: default;\r\n text-overflow: ellipsis;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n vertical-align: bottom;\r\n color: var(--device-offline-color);\r\n padding-left: 5px;\r\n}\r\n\r\n.online-device .device-avatar,\r\n.online-device .device-name {\r\n color: var(--device-online-color)\r\n}\r\n</style>\r\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M384 192v640l384-320.064z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384H832zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704l116.736-175.104zM720 304a208 208 0 1 1-416 0a208 208 0 0 1 416 0z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64h352z\\\"/>\"\n};\nexport default data;\n","const data = {\n\t\"width\": 1024,\n\t\"height\": 1024,\n\t\"body\": \"<path fill=\\\"currentColor\\\" d=\\\"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64z\\\"/>\"\n};\nexport default data;\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","<template>\r\n <div class=\"device-group-list\">\r\n <div class=\"search-panel\">\r\n <!-- <div style=\"height: 32px; line-height: 32px;\">\r\n <img src=\"\" />\r\n <input type=\"text\" @change=\"onSearchChange\" ref=\"inputSearchRef\" />\r\n </div> -->\r\n <CountShow :countInfo=\"deviceGroup\">\r\n <input type=\"checkbox\" id=\"onlineShow\" value=\"onlineShow\" @change=\"onCheckBoxChange\" />\r\n <label for=\"onlineShow\">只显示在线设备</label>\r\n </CountShow>\r\n </div>\r\n <div class=\"device-panel\">\r\n <group-show :controlParams=\"controlParams\" v-for=\"itemGroup, index in deviceGroup?.items\" :key=\"index\"\r\n :deviceGroup=\"itemGroup\">\r\n <template #group=\"{group}\">\r\n <slot name=\"group\" :group=\"group\"></slot>\r\n </template>\r\n <template #device=\"{device, group}\">\r\n <slot name=\"device\" :device=\"device\" :group=\"group\"></slot>\r\n </template>\r\n </group-show>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, PropType, ref, provide } from 'vue'\r\nimport { RecursionDeviceGroup } from \"./model\"\r\nimport GroupShow from \"/@/components-global/group-show/index.vue\"\r\nimport CountShow from \"/@/components-global/count-show/index.vue\"\r\n\r\nimport { addIcon } from \"@iconify/vue/offline\"\r\nimport right from \"@iconify-icons/ep/caret-right\"\r\nimport group from \"@iconify-icons/ep/folder-opened\"\r\nimport avatar from \"@iconify-icons/ep/avatar\"\r\nimport plus from \"@iconify-icons/ep/plus\"\r\nimport minus from \"@iconify-icons/ep/minus\"\r\n\r\naddIcon('right', right);\r\naddIcon('group', group);\r\naddIcon('user', avatar);\r\naddIcon('plus', plus);\r\naddIcon('minus', minus);\r\n\r\n\r\nexport default defineComponent({\r\n components: {\r\n CountShow,\r\n GroupShow\r\n },\r\n props: {\r\n deviceGroup: Object as PropType<RecursionDeviceGroup.SessionDeviceGroup>,\r\n theme: {\r\n type: String as PropType<\"dark\" | ''>,\r\n default: \"\"\r\n },\r\n },\r\n methods: {\r\n onCheckBoxChange() {\r\n this.controlParams.onlyShowOnline = !this.controlParams.onlyShowOnline;\r\n },\r\n onSearchChange() {\r\n if (this.inputSearchRef) {\r\n this.controlParams.searchStr = this.inputSearchRef?.value\r\n }\r\n },\r\n search(str: string) {\r\n this.controlParams.searchStr = str;\r\n }\r\n },\r\n setup(props) {\r\n\r\n provide(\"theme\", props.theme)\r\n\r\n const controlParams = ref<RecursionDeviceGroup.IControlParams>({\r\n onlyShowOnline: false,\r\n searchStr: \"\"\r\n });\r\n const inputSearchRef = ref<HTMLInputElement>()\r\n return {\r\n inputSearchRef,\r\n controlParams\r\n }\r\n },\r\n})\r\n\r\n</script>\r\n\r\n\r\n<style>\r\n:root {\r\n --sec-main-search-height: 32px\r\n}\r\n</style>\r\n\r\n\r\n<style scoped>\r\n.device-group-list {\r\n height: 100%;\r\n}\r\n\r\n.device-group-list .search-panel {\r\n height: var(--sec-main-search-height);\r\n}\r\n\r\n.device-group-list .device-panel {\r\n height: calc(100% - var(--sec-main-search-height));\r\n overflow-y: auto;\r\n}\r\n</style>\r\n\r\n","import { Plugin, App } from \"vue\";\r\n\r\nexport * from \"./comp.d\";\r\nexport * from \"./components\";\r\n\r\nimport RecursionDeviceGroup from \"/@/components/recursion-device-group/index.vue\";\r\n\r\nconst components = {\r\n RecursionDeviceGroup,\r\n};\r\n\r\nconst _default: Plugin = {\r\n install(app: App) {\r\n for (const itemKey in components) {\r\n const item = components[itemKey as keyof typeof components];\r\n app.component(itemKey, item);\r\n }\r\n },\r\n};\r\n\r\nexport default _default;\r\n"],"names":["RecursionDeviceGroup","Test","CreateDevice","count","deviceList","i","CreateGroup","RandomDeviceGroup","ForeachDeviceGroup","deviceGroup","handleDeviceGroup","Utils","AccessSession","session","groupMap","deviceMap","id","handle","_sfc_main$2","defineComponent","props","ForeachICountInfo","countInfo","countItem","item","onlineCount","computed","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultIconSizeCustomisations","defaultIconCustomisations","mergeCustomisations","defaults","result","key","value","valueType","separator","flipFromString","custom","flip","str","rotateFromString","defaultValue","units","cleanup","value2","num","split","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","iconToSVG","icon","customisations","fullIcon","fullCustomisations","box","body","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","regex","randomPrefix","counter","replaceIDs","prefix","ids","match","newID","escapedID","iconToHTML","attributes","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToURL","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","list","prop","customisationAliases","fixSize","render","componentProps","mode","style","propsStyle","customStyle","alias","renderAttribs","localCounter","h","useMask","html","storage","addIcon","name","data","Icon","propsIcon","_sfc_main$1","CountShow","theme","inject","FilterDevice","devices","_a","_a2","_b","showGroup","strSearch","bShow","ref","_hoisted_4","_hoisted_5","_component_group_show","_resolveComponent","_withCtx","_cache","$event","_createBlock","_component_Icon","_createCommentVNode","_createElementVNode","_createVNode","_toDisplayString","_b2","_c","_d","_e","_hoisted_2","_hoisted_3","_Fragment","_renderList","group","index","device","group2","_hoisted_6","_hoisted_7","right","avatar","plus","minus","_sfc_main","GroupShow","provide","controlParams","_withScopeId","n","_pushScopeId","_popScopeId","_component_CountShow","itemGroup","components","_default","app","itemKey"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .root[data-v-56ab9f59]{position:relative}.count-show[data-v-56ab9f59]{position:absolute;right:0px;color:#b7b7b7}:root{--device-offline-color: rgb(168, 168, 168);--device-online-color: rgb(1, 172, 1);--group-name-width: 160px}.group-head-db-click[data-v-a9d269de],.group-head-db-click .group-name[data-v-a9d269de]{cursor:pointer;user-select:none}.device-show-div[data-v-a9d269de]{max-height:400px;overflow-y:auto}.dark .handle-ls-svg[data-v-a9d269de]{color:#fff}.handle-ls-svg[data-v-a9d269de]{vertical-align:-5px;cursor:pointer;margin-right:5px;color:#383838}.group-avatar[data-v-a9d269de]{vertical-align:-6px;color:gray}.device[data-v-a9d269de],.group[data-v-a9d269de]{margin:5px 0}.group-name[data-v-a9d269de]{display:inline-block;width:var(--group-name-width);cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;vertical-align:middle;line-height:24px;padding-left:5px}.group-slot[data-v-a9d269de]{display:inline-block;width:calc(100% - var(--group-name-width) - 100px)}.device-slot[data-v-a9d269de]{display:inline-block;width:calc(100% - var(--group-name-width) - 42px)}.device-avatar[data-v-a9d269de]{vertical-align:-2px;margin-right:4px;margin-left:2px;color:var(--device-offline-color)}.device-name[data-v-a9d269de]{display:inline-block;width:var(--group-name-width);cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;vertical-align:bottom;color:var(--device-offline-color);padding-left:5px}.online-device .device-avatar[data-v-a9d269de],.online-device .device-name[data-v-a9d269de]{color:var(--device-online-color)}:root{--sec-main-search-height: 32px }.device-group-list[data-v-7e0a8034]{height:100%}.device-group-list .search-panel[data-v-7e0a8034]{height:var(--sec-main-search-height)}.device-group-list .device-panel[data-v-7e0a8034]{height:calc(100% - var(--sec-main-search-height));overflow-y:auto}
1
+ .root[data-v-56ab9f59]{position:relative}.count-show[data-v-56ab9f59]{position:absolute;right:0px;color:#b7b7b7}:root{--device-offline-color: rgb(168, 168, 168);--device-online-color: rgb(1, 172, 1);--group-name-width: 160px}.group-head-db-click[data-v-100c06ff],.group-head-db-click .group-name[data-v-100c06ff]{cursor:pointer;user-select:none}.device-show-div[data-v-100c06ff]{max-height:400px;overflow-y:auto}.dark .handle-ls-svg[data-v-100c06ff]{color:#fff}.handle-ls-svg[data-v-100c06ff]{vertical-align:-5px;cursor:pointer;margin-right:5px;color:#383838}.group-avatar[data-v-100c06ff]{vertical-align:-6px;color:gray}.device[data-v-100c06ff],.group[data-v-100c06ff]{margin:5px 0}.group-name[data-v-100c06ff]{display:inline-block;width:var(--group-name-width);cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;vertical-align:middle;line-height:24px;padding-left:5px}.group-slot[data-v-100c06ff]{display:inline-block;width:calc(100% - var(--group-name-width) - 100px)}.device-slot[data-v-100c06ff]{display:inline-block;width:calc(100% - var(--group-name-width) - 42px)}.device-avatar[data-v-100c06ff]{vertical-align:-2px;margin-right:4px;margin-left:2px;color:var(--device-offline-color)}.device-name[data-v-100c06ff]{display:inline-block;width:var(--group-name-width);cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;vertical-align:bottom;color:var(--device-offline-color);padding-left:5px}.online-device .device-avatar[data-v-100c06ff],.online-device .device-name[data-v-100c06ff]{color:var(--device-online-color)}:root{--sec-main-search-height: 32px }.device-group-list[data-v-7e0a8034]{height:100%}.device-group-list .search-panel[data-v-7e0a8034]{height:var(--sec-main-search-height)}.device-group-list .device-panel[data-v-7e0a8034]{height:calc(100% - var(--sec-main-search-height));overflow-y:auto}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smarteye-e-components",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "description": "",
5
5
  "main": "./dist/smarteye-e-components.mjs",
6
6
  "scripts": {