iobroker.nspanel-lovelace-ui
Version:
NsPanel Lovelace UI is a Firmware for the nextion screen inside of NSPanel in the Design of Lovelace UI Design.
1 lines • 66.1 kB
JavaScript
import{A as M,b as F,c as k,S as G,C as z,w as H,d as Y,a as Z,I as ee,W as te}from"./NavigationView-BGLEMtxw.js";import{j as e}from"./createSvgIcon-Debf11BA.js";import{A as t}from"./AdminComponentEasyAccessSet__loadShare___mf_0_mui_mf_1_material__loadShare__-EKOPJIKX.js";import{R as q}from"./AdminComponentEasyAccessSet__loadShare__react__loadShare__-CJmceRyn.js";import{N as se,S as ie,E as ae,D as Q,V as ne,a as oe}from"./VisibilityOff-Dem2oC7P.js";import{g as re}from"./_commonjsHelpers-CE1G-McA.js";import{_ as le,A as O}from"./_baseIsEqual-BiOdebYq.js";import{A as y}from"./AdminComponentEasyAccessSet__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-BJiKjF1c.js";import{T as J}from"./Tooltip-BHlkKxQm.js";import"./index-BTwTI1Tk.js";import"./AdminComponentEasyAccessSet__mf_v__runtimeInit__mf_v__-9o5tLcPN.js";import"./Clear-CZb6d-di.js";import"./useTheme-Y4z6S2UP.js";import"./defaultTheme-B6DpRwGi.js";import"./Grow-DnKMqB40.js";var de=le;function ce(P,s){return de(P,s)}var he=ce;const pe=re(he);class K extends M.ConfigGeneric{static defaultProps={widthPercent:30};constructor(s){super(s),this.state={...this.state,available:[],selectedTopic:"",added:[],assignments:s.currentAssignments||[],pagesMap:{},alive:!1,isCollapsed:!s.uniqueName,isLoading:{},lastLoadTime:{},focusReceived:{},retryCount:{},activeTab:0}}componentWillUnmount(){if(this.props.oContext&&this.props.oContext.socket){const s=this.props.oContext.instance??"0";this.props.oContext.socket.unsubscribeState(`system.adapter.${F}.${s}.alive`,this.onAliveChanged)}}async componentDidMount(){if(super.componentDidMount(),this.props.oContext&&this.props.oContext.socket){const s=this.props.oContext.instance??"0",n=`system.adapter.${F}.${s}.alive`;try{const a=await this.props.oContext.socket.getState(n),i=!!(a!=null&&a.val);this.setState({alive:i}),await this.props.oContext.socket.subscribeState(n,this.onAliveChanged)}catch(a){console.error("[NavigationAssignmentPanel] Failed to get alive state or subscribe:",a),this.setState({alive:!1})}}await this.loadPanels(!1),await this.applyAssignmentsFromProps(this.props.currentAssignments||[])}onAliveChanged=(s,n)=>{const a=this.state.alive,i=n?!!n.val:!1;a!==i&&(this.setState({alive:i}),!a&&i&&this.state.assignments.length>0&&this.retryLoadingPagesForAssignments())};async applyAssignmentsFromProps(s){var h;const n=(s||[]).map(m=>this.state.available.find(d=>d.panelTopic===m.topic)||{panelTopic:m.topic,friendlyName:m.topic}).sort((m,l)=>m.friendlyName.localeCompare(l.friendlyName));console.log(`[NavigationAssignmentPanel] applyAssignmentsFromProps: available=${JSON.stringify(this.state.available)}, added=${JSON.stringify(n)}`);const a=this.state.selectedAddedTopic,r=n.find(m=>m.panelTopic===a)?a:(h=n[0])==null?void 0:h.panelTopic;this.setState({assignments:s,added:n,selectedAddedTopic:r,selectedTopic:""});const o=n.map(m=>this.loadPagesForPanel(m.panelTopic,!0));await Promise.all(o)}componentDidUpdate(s){if(s.uniqueName!==this.props.uniqueName){const n=this.props.currentAssignments||[];this.props.uniqueName?this.setState(a=>({focusReceived:{...a.focusReceived,[this.props.uniqueName]:!0},isCollapsed:!1})):this.setState({isCollapsed:!0}),this.loadPanels(!1).then(()=>{this.applyAssignmentsFromProps(n)})}else if(this.props.currentAssignments&&!pe(s.currentAssignments||{},this.props.currentAssignments||{})){const n=this.props.currentAssignments||[];this.applyAssignmentsFromProps(n)}}async loadPanels(s=!0){var n;try{let a=[];this.props.fetchPanels?a=await this.props.fetchPanels():(n=this.props.data)!=null&&n.panels&&(a=(this.props.data.panels||[]).map(i=>({panelTopic:i.topic,friendlyName:i.name||i.topic}))),await new Promise(i=>this.setState({available:a,selectedTopic:""},()=>i()))}catch{this.setState({available:[],selectedTopic:""})}}doAddSelected=()=>{const{selectedTopic:s,available:n,added:a}=this.state;if(!s)return;let i=n.find(h=>h.panelTopic===s);if(!i&&s===k&&(i={panelTopic:k,friendlyName:`(${y.I18n.t("all")||"All"})`}),!i||a.find(h=>h.panelTopic===i.panelTopic))return;const r=[...a,i],o=[...this.state.assignments,{topic:i.panelTopic}];this.setState({added:r,assignments:o,selectedTopic:""}),this.loadPagesForPanel(i.panelTopic),this.props.onAssign&&this.props.uniqueName&&this.props.onAssign(this.props.uniqueName,o)};doRemoveSelected=()=>{const{added:s,selectedAddedTopic:n}=this.state;if(s.length)if(n){const a=s.filter(h=>h.panelTopic!==n),i=this.state.assignments.filter(h=>h.topic!==n),r=s.findIndex(h=>h.panelTopic===n);let o;if(a.length>0){const h=a[r]??a[r-1]??a[0];o=h==null?void 0:h.panelTopic}else o=void 0;this.setState({added:a,assignments:i,selectedAddedTopic:o}),this.props.onAssign&&this.props.uniqueName&&this.props.onAssign(this.props.uniqueName,i)}else{const a=s.slice(0,-1),i=this.state.assignments.slice(0,-1),r=a.length?a[a.length-1].panelTopic:void 0;this.setState({added:a,assignments:i,selectedAddedTopic:r}),this.props.onAssign&&this.props.uniqueName&&this.props.onAssign(this.props.uniqueName,i)}};selectAdded=s=>{this.setState({selectedAddedTopic:s}),this.loadPagesForPanel(s,!0)};retryLoadingPagesForAssignments(){const s=this.state.assignments.map(n=>n.topic);for(const n of s)this.loadPagesForPanel(n,!0)}async loadPagesForPanel(s,n=!1){var m,l;if(!s)return;if(!this.state.alive){console.log(`[NavigationAssignmentPanel] Adapter not alive, skipping pages load for ${s}`);return}const a=Date.now(),i=this.state.lastLoadTime[s]||0,r=this.state.isLoading[s],o=!!this.state.pagesMap[s],h=n||!o||a-i>6e4;if(!(r||!h&&o)){this.setState(d=>({isLoading:{...d.isLoading,[s]:!0},lastLoadTime:{...d.lastLoadTime,[s]:a}}));try{let d=[],p=!1;if((m=this.props.oContext)!=null&&m.socket){const f=this.props.oContext.instance??"0",u=`${F}.${f}`,S={panelTopic:s};try{const w=new Promise(($,R)=>{setTimeout(()=>R(new Error("sendTo timeout after 2 seconds")),2e3)}),L=this.props.oContext.socket.sendTo(u,G,S),I=await Promise.race([L,w]);Array.isArray(I)?(d=I,p=!0):I&&Array.isArray(I.result)&&(d=I.result,p=!0),console.log("[NavigationAssignmentPanel] sendTo successful",{topic:s,pages:d})}catch(w){console.warn("[NavigationAssignmentPanel] sendTo failed or timed out",{target:u,cmd:G,payload:S,error:w})}}if(p&&d.length===0){const f=this.state.retryCount[s]||0,u=3,S=2e3;if(f<u){console.log(`[NavigationAssignmentPanel] Got empty array for ${s}, retrying in ${S}ms (attempt ${f+1}/${u})`),this.setState(w=>({retryCount:{...w.retryCount,[s]:f+1}})),setTimeout(()=>{this.setState(w=>({isLoading:{...w.isLoading,[s]:!1}})),this.loadPagesForPanel(s,!0)},S);return}console.log(`[NavigationAssignmentPanel] Max retries reached for ${s}, accepting empty result`),this.setState(w=>({retryCount:{...w.retryCount,[s]:0}}))}else p&&d.length>0&&this.setState(f=>({retryCount:{...f.retryCount,[s]:0}}));if(!p&&!((l=this.props.oContext)!=null&&l.socket)&&(await new Promise(f=>setTimeout(f,1e3)),this.setState(f=>({isLoading:{...f.isLoading,[s]:!1}})),!this.state.focusReceived[s]))return this.setState(f=>({focusReceived:{...f.focusReceived,[s]:!0}})),this.loadPagesForPanel(s,!0);const _=this.state.pagesMap?this.state.pagesMap[s]:void 0,T=!!(this.state.isLoading&&this.state.isLoading[s]);(!(Array.isArray(_)&&_.length===d.length&&_.every((f,u)=>f===d[u]))||T!==!1)&&this.setState(f=>({pagesMap:{...f.pagesMap,[s]:d},isLoading:{...f.isLoading,[s]:!1}}))}catch(d){console.error("[NavigationAssignmentPanel] loadPagesForPanel error",{topic:s,error:d}),this.setState(p=>({isLoading:{...p.isLoading,[s]:!1}}))}}}setNavigationForSelected=s=>{const{selectedAddedTopic:n,assignments:a}=this.state;if(!n)return;const i=a.findIndex(m=>m.topic===n),r=[...a],o=a[i],h={topic:n,navigation:{...o==null?void 0:o.navigation,...s}};i>=0?r[i]=h:r.push(h),this.setState({assignments:r}),this.props.onAssign&&this.props.uniqueName&&this.props.onAssign(this.props.uniqueName,r)};getNavValue=(s,n)=>{var r;if(!s)return"";const a=this.state.assignments.find(o=>o.topic===s);return((r=a==null?void 0:a.navigation)==null?void 0:r[n])||""};togglePanel=()=>{const s=this.state.isCollapsed;this.setState(n=>({isCollapsed:!n.isCollapsed})),s&&this.applyAssignmentsFromProps(this.props.currentAssignments||[])};handleTabChange=(s,n)=>{this.setState({activeTab:n})};handleCommonFieldChange(s,n){this.props.onCommonFieldsChange&&this.props.onCommonFieldsChange({[s]:n})}renderCommonFields(){const{commonFields:s}=this.props;return s?e.jsxs(t.Box,{sx:{mt:2,pt:2,borderTop:"1px solid",borderColor:"divider"},children:[e.jsx(t.Box,{sx:{mb:2},children:e.jsx(t.FormControlLabel,{control:e.jsx(t.Checkbox,{checked:!!s.hidden,onChange:(n,a)=>{this.handleCommonFieldChange("hidden",a)}}),label:y.I18n.t("hidden")})}),e.jsx(t.Box,{sx:{mt:2},children:e.jsxs(t.FormControl,{component:"fieldset",children:[e.jsx(t.Typography,{variant:"subtitle2",sx:{mb:1},children:y.I18n.t("alwaysOn")}),e.jsxs(t.RadioGroup,{row:!0,value:s.alwaysOn||"none",onChange:(n,a)=>{this.handleCommonFieldChange("alwaysOn",a)},children:[e.jsx(t.FormControlLabel,{value:"none",control:e.jsx(t.Radio,{}),label:y.I18n.t("alwaysOn_none")}),e.jsx(t.FormControlLabel,{value:"always",control:e.jsx(t.Radio,{}),label:y.I18n.t("alwaysOn_always")}),e.jsx(t.FormControlLabel,{value:"ignore",control:e.jsx(t.Radio,{}),label:y.I18n.t("alwaysOn_ignore")})]})]})})]}):e.jsx(t.Box,{sx:{mt:2},children:e.jsx(t.Typography,{variant:"body2",color:"text.secondary",children:this.getText("select_description")})})}renderItem(s,n,a){const{widthPercent:i}=this.props,{isCollapsed:r,activeTab:o}=this.state,h=this.state.selectedAddedTopic?this.state.pagesMap[this.state.selectedAddedTopic]??[]:[],m=r||!this.props.uniqueName;return e.jsxs(t.Box,{sx:{position:{xs:"static",md:"absolute"},right:{xs:"auto",md:0},top:{xs:"auto",md:0},height:{xs:"auto",md:"100%"},width:{xs:"100%",md:m?"10px":`${i}%`},minHeight:{xs:m?"50px":"auto",md:"auto"},transition:"width 240ms ease, min-height 240ms ease",backgroundColor:"background.default",border:{xs:"2px solid",md:"none"},borderLeft:{xs:"none",md:"2px solid"},borderTop:{xs:"none",md:"2px solid"},borderColor:"secondary.main",borderRadius:{xs:1,md:0},overflow:{xs:"hidden",md:"visible"},display:"flex",flexDirection:"column",zIndex:20,mt:{xs:2,md:0}},children:[e.jsx(t.Box,{sx:{display:{xs:"none",md:"flex"},position:"absolute",left:"-20px",top:"50%",transform:"translateY(-50%)",width:"20px",height:"60px",backgroundColor:"secondary.main",borderRadius:"4px 0 0 4px",alignItems:"center",justifyContent:"center",cursor:this.props.uniqueName?"pointer":"not-allowed",opacity:this.props.uniqueName?1:.5,zIndex:21,"&:hover":{backgroundColor:"secondary.dark"}},onClick:()=>{this.props.uniqueName&&this.togglePanel()},children:e.jsx(t.Typography,{sx:{color:"secondary.contrastText",fontSize:"14px",fontWeight:"bold",transform:"rotate(-90deg)",whiteSpace:"nowrap"},children:m?"⏶":"⏷"})}),e.jsx(t.Box,{sx:{display:{xs:"flex",md:"none"},alignItems:"center",justifyContent:"center",p:1,backgroundColor:"secondary.main",color:"secondary.contrastText",borderRadius:"4px 4px 0 0"},children:e.jsx(t.Typography,{variant:"subtitle2",sx:{fontWeight:600},children:y.I18n.t("navigation_panel")})}),e.jsxs(t.Box,{sx:{p:1,height:"100%",display:{xs:"flex",md:m?"none":"flex"},flexDirection:"column",width:{xs:"100%",md:m?"0%":"100%"},overflow:"hidden",transition:{xs:"none",md:"width 240ms ease"}},children:[e.jsx(t.Typography,{variant:"h6",sx:{mb:1,fontWeight:600,color:"primary.main",fontSize:"1rem",display:{xs:"none",md:"block"}},children:y.I18n.t("navigation_panel")}),e.jsxs(t.Tabs,{value:o??0,onChange:this.handleTabChange,variant:"scrollable",scrollButtons:!1,sx:{mb:1,minHeight:{xs:36,md:48},"& .MuiTab-root":{minHeight:{xs:36,md:48},py:{xs:.5,md:1.5},fontSize:{xs:"0.75rem",md:"0.875rem"}}},"aria-label":"Navigation assignment tabs",children:[e.jsx(t.Tab,{icon:e.jsx(se,{sx:{fontSize:{xs:18,md:20}}}),iconPosition:"start",label:e.jsxs(e.Fragment,{children:[e.jsx(t.Box,{component:"span",sx:{display:{xs:"inline",md:"none"}},children:y.I18n.t("nav")||"Nav"}),e.jsx(t.Box,{component:"span",sx:{display:{xs:"none",md:"inline"}},children:y.I18n.t("navigation")||"Navigation"})]}),sx:{minWidth:{xs:"auto",md:90},px:{xs:1,md:2}}}),e.jsx(t.Tab,{icon:e.jsx(ie,{sx:{fontSize:{xs:18,md:20}}}),iconPosition:"start",label:e.jsxs(e.Fragment,{children:[e.jsx(t.Box,{component:"span",sx:{display:{xs:"inline",md:"none"}},children:y.I18n.t("details")||"Details"}),e.jsx(t.Box,{component:"span",sx:{display:{xs:"none",md:"inline"}},children:y.I18n.t("pagedetails")||"Page Details"})]}),sx:{minWidth:{xs:"auto",md:90},px:{xs:1,md:2}}}),e.jsx(t.Tab,{icon:e.jsx(ae,{sx:{fontSize:{xs:18,md:20}}}),iconPosition:"start",label:e.jsxs(e.Fragment,{children:[e.jsx(t.Box,{component:"span",sx:{display:{xs:"inline",md:"none"}},children:y.I18n.t("free")||"Free"}),e.jsx(t.Box,{component:"span",sx:{display:{xs:"none",md:"inline"}},children:y.I18n.t("placeholder")||"Placeholder"})]}),sx:{minWidth:{xs:"auto",md:90},px:{xs:1,md:2}}})]}),o===0&&e.jsxs(e.Fragment,{children:[e.jsxs(t.Box,{sx:{display:"flex",gap:1,alignItems:"center",mb:1},children:[e.jsxs(t.Select,{size:"small",variant:"standard",value:this.state.selectedTopic,onOpen:()=>{this.loadPanels()},onChange:l=>this.setState({selectedTopic:String(l.target.value)}),disabled:!this.state.alive,sx:{flex:1,backgroundColor:"transparent",minHeight:40,"& .MuiSelect-select":{backgroundColor:"transparent",display:"flex",alignItems:"center",height:40}},displayEmpty:!0,children:[e.jsx(t.MenuItem,{value:"",children:e.jsx("em",{children:"—"})}),!this.state.added.some(l=>l.panelTopic===k)&&e.jsx(t.MenuItem,{value:k,children:`(${y.I18n.t("all")||"All"})`}),this.state.available.filter(l=>!this.state.added.some(d=>d.panelTopic===l.panelTopic)).map(l=>e.jsx(t.MenuItem,{value:l.panelTopic,children:l.friendlyName},l.panelTopic))]}),e.jsx(t.Button,{size:"small",variant:"contained",sx:{minWidth:32,padding:"4px 8px"},onClick:this.doAddSelected,disabled:!this.state.selectedTopic||!this.state.alive,children:"+"})]}),e.jsx(t.Box,{children:this.state.added.length===0?e.jsx(t.Typography,{variant:"body1",color:"text.secondary",children:y.I18n.t("No panels added")}):e.jsx("div",{style:{overflow:"auto"},children:e.jsx(t.List,{dense:!0,children:this.state.added.map(l=>{const d=l.panelTopic,p=this.state.pendingDelete===d;return e.jsx(q.Fragment,{children:e.jsx(t.ListItem,{component:"div",disablePadding:!0,sx:{"&:hover .delete-icon":{opacity:1}},secondaryAction:e.jsx(t.IconButton,{className:"delete-icon",edge:"end","aria-label":"delete",size:"small",onClick:_=>{var T;if(_.stopPropagation(),!p)this.setState({pendingDelete:d}),setTimeout(()=>{this.state.pendingDelete===d&&this.setState({pendingDelete:void 0})},3e3);else{const N=this.state.added.filter(S=>S.panelTopic!==d),f=this.state.assignments.filter(S=>S.topic!==d),u=N.length>0?(T=N[0])==null?void 0:T.panelTopic:void 0;this.setState({added:N,assignments:f,selectedAddedTopic:u,pendingDelete:void 0}),this.props.onAssign&&this.props.uniqueName&&this.props.onAssign(this.props.uniqueName,f)}},sx:{color:p?"error.dark":"error.main",opacity:{xs:1,md:0},transition:"opacity 0.2s",backgroundColor:p?"error.main":"transparent","&:hover":{backgroundColor:p?"error.dark":"action.hover"}},children:e.jsx(Q,{fontSize:"small"})}),children:e.jsx(t.ListItemButton,{selected:this.state.selectedAddedTopic===d,onClick:()=>{this.selectAdded(d),this.setState({pendingDelete:void 0})},sx:{pr:6},children:e.jsx(t.ListItemText,{primary:d===k?`(${y.I18n.t("all")||"All"})`:l.friendlyName,slotProps:{primary:{sx:{fontSize:"1.05rem",lineHeight:1.2}}},sx:{flex:1,overflow:"hidden",textOverflow:"ellipsis"}})})})},d)})})})}),e.jsx(t.Divider,{sx:{my:1}}),!this.props.hideNavigationFields&&e.jsxs(t.Box,{sx:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:1,mt:1},children:[e.jsxs(t.Box,{children:[e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",mb:.5},children:e.jsx(J,{title:y.I18n.t("nav_prev_tooltip"),children:e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mr:.5},children:"prev"})})}),e.jsxs(t.Select,{size:"small",displayEmpty:!0,"aria-label":"prev",value:this.getNavValue(this.state.selectedAddedTopic,"prev")||"",onOpen:()=>{this.state.selectedAddedTopic&&this.loadPagesForPanel(this.state.selectedAddedTopic,!0)},onChange:l=>this.setNavigationForSelected({prev:String(l.target.value)||void 0}),sx:{width:"100%"},disabled:!this.state.alive||this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]||!1,endAdornment:this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]?e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",pr:1},children:e.jsx(t.CircularProgress,{size:16})}):null,children:[e.jsx(t.MenuItem,{value:"",children:this.state.selectedAddedTopic?e.jsx("em",{children:"—"}):e.jsx("em",{children:y.I18n.t("select_panel_first")})}),h.filter(l=>l!==this.props.uniqueName).map(l=>e.jsx(t.MenuItem,{value:l,children:l},`prev-${l}`))]})]}),e.jsxs(t.Box,{children:[e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",mb:.5},children:e.jsx(J,{title:y.I18n.t("nav_next_tooltip"),children:e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mr:.5},children:"next"})})}),e.jsxs(t.Select,{size:"small",displayEmpty:!0,"aria-label":"next",value:this.getNavValue(this.state.selectedAddedTopic,"next")||"",onOpen:()=>{this.state.selectedAddedTopic&&this.loadPagesForPanel(this.state.selectedAddedTopic,!0)},onChange:l=>this.setNavigationForSelected({next:String(l.target.value)||void 0}),sx:{width:"100%"},disabled:!this.state.alive||this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]||!1,endAdornment:this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]?e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",pr:1},children:e.jsx(t.CircularProgress,{size:16})}):null,children:[e.jsx(t.MenuItem,{value:"",children:this.state.selectedAddedTopic?e.jsx("em",{children:"—"}):e.jsx("em",{children:y.I18n.t("select_panel_first")})}),h.filter(l=>l!==this.props.uniqueName&&!l.startsWith("///")).map(l=>e.jsx(t.MenuItem,{value:l,children:l},`next-${l}`))]})]}),e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mb:.5,display:"block"},children:"home"}),e.jsxs(t.Select,{size:"small",displayEmpty:!0,"aria-label":"home",value:this.getNavValue(this.state.selectedAddedTopic,"home")||"",onOpen:()=>{this.state.selectedAddedTopic&&this.loadPagesForPanel(this.state.selectedAddedTopic,!0)},onChange:l=>this.setNavigationForSelected({home:String(l.target.value)||void 0}),sx:{width:"100%"},disabled:!this.state.alive||this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]||!1,endAdornment:this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]?e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",pr:1},children:e.jsx(t.CircularProgress,{size:16})}):null,children:[e.jsx(t.MenuItem,{value:"",children:e.jsx("em",{children:"—"})}),h.filter(l=>l!==this.props.uniqueName).map(l=>e.jsx(t.MenuItem,{value:l,children:l},`home-${l}`))]})]}),e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mb:.5,display:"block"},children:"parent"}),e.jsxs(t.Select,{size:"small",displayEmpty:!0,"aria-label":"parent",value:this.getNavValue(this.state.selectedAddedTopic,"parent")||"",onOpen:()=>{this.state.selectedAddedTopic&&this.loadPagesForPanel(this.state.selectedAddedTopic,!0)},onChange:l=>this.setNavigationForSelected({parent:String(l.target.value)||void 0}),sx:{width:"100%"},disabled:!this.state.alive||this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]||!1,endAdornment:this.state.selectedAddedTopic&&this.state.isLoading[this.state.selectedAddedTopic]?e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",pr:1},children:e.jsx(t.CircularProgress,{size:16})}):null,children:[e.jsx(t.MenuItem,{value:"",children:e.jsx("em",{children:"—"})}),h.filter(l=>l!==this.props.uniqueName).map(l=>e.jsx(t.MenuItem,{value:l,children:l},`parent-${l}`))]})]}),e.jsx(t.Divider,{sx:{my:1}})]}),this.state.added.length>0?this.state.added.map(l=>{const d=l.panelTopic,p=this.state.added.some(I=>I.panelTopic===k),_=this.getNavValue(d,"next"),T=this.getNavValue(d,"prev"),N=this.getNavValue(d,"home"),f=this.getNavValue(d,"parent"),u=!!(_||T||N||f),S=d===k,w=!_&&!T,L=S?"nav_all_requires_prev_next":p?"nav_remove_from_all_notice":"nav_target_only_notice";return e.jsxs(t.Box,{"data-has-all":p,sx:{mt:2,mb:1},children:[e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5},children:[e.jsx(t.Box,{sx:{width:10,height:10,borderRadius:"50%",bgcolor:u?"success.main":"error.main"}}),e.jsx(t.Typography,{variant:"subtitle2",sx:{fontWeight:600},children:d===k?`(${y.I18n.t("all")||"All"})`:l.friendlyName||d})]}),e.jsx(t.Box,{sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:["next","prev","parent","home"].map((I,$)=>{const R=this.getNavValue(d,I);return e.jsxs(q.Fragment,{children:[e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:.5},children:[e.jsx(t.Typography,{variant:"caption",color:"text.secondary",children:y.I18n.t(I)||I}),e.jsx(t.Typography,{variant:"body2",children:R||e.jsx("em",{children:"—"})})]}),$<3&&e.jsx(t.Divider,{orientation:"vertical",flexItem:!0,sx:{height:18,mx:1}})]},`${d}-${I}`)})}),w?e.jsx(t.Box,{sx:{mt:1},children:e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:y.I18n.t(L)})}):null]},`panel-summary-${d}`)}):null]}),o===1&&e.jsx(e.Fragment,{children:this.renderCommonFields()}),o===2&&e.jsx(e.Fragment,{children:e.jsx(t.Typography,{variant:"body1",color:"text.secondary",children:y.I18n.t("Placeholder content for this tab.")})})]})]})}}class me extends q.Component{constructor(s){super(s),this.state={newName:"",confirmDeleteOpen:!1,confirmDeleteName:null}}getText(s){return this.props.getText(s)}handleAdd=()=>{const s=this.state.newName.trim();!s||this.props.selectedCardType==="all"||(this.props.onAdd(s,this.props.selectedCardType),this.setState({newName:""}),this.props.onSelectedChange(s))};handleDeleteClick=s=>{this.setState({confirmDeleteOpen:!0,confirmDeleteName:s})};handleDeleteConfirm=()=>{const s=this.state.confirmDeleteName;if(!s){this.setState({confirmDeleteOpen:!1,confirmDeleteName:null});return}this.props.onDelete(s),this.setState({confirmDeleteOpen:!1,confirmDeleteName:null})};handleDeleteCancel=()=>{this.setState({confirmDeleteOpen:!1,confirmDeleteName:null})};render(){const{entries:s,selected:n,selectedCardType:a,onSelectedChange:i,onCardTypeChange:r,onAssign:o,children:h,oContext:m,navigationPanelProps:l}=this.props,d=Array.from(new Set(s.map(u=>u.uniqueName))).filter(Boolean),p=a==="all"?s:s.filter(u=>u.card===a),_=Array.from(new Set(p.map(u=>u.uniqueName))).filter(Boolean),T=s.find(u=>u.uniqueName===n),N=(T==null?void 0:T.navigationAssignment)||[],f=`https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki/admin/add_page/${encodeURIComponent(a==="all"&&T!=null&&T.card?T.card:"common")}`;return e.jsxs(t.Box,{sx:{height:"calc(100vh - 64px)",display:"flex",flexDirection:{xs:"column",md:"row"},p:1},children:[e.jsxs(t.Box,{sx:{width:{xs:"100%",md:"20%"},pr:{xs:0,md:1},display:"flex",flexDirection:"column",gap:1},children:[e.jsx(t.Paper,{sx:{p:0,mb:1,backgroundColor:"transparent"},elevation:0,children:e.jsxs(t.FormControl,{fullWidth:!0,variant:"standard",children:[e.jsx(t.Typography,{variant:"h6",sx:{mb:1,fontWeight:600,color:"primary.main",fontSize:"1rem"},children:this.getText("page_type")}),e.jsxs(t.Select,{value:a,onChange:u=>{r(u.target.value)},sx:{backgroundColor:"transparent",px:1},children:[e.jsx(t.MenuItem,{value:"all",children:this.getText("page_type_all")}),e.jsx(t.MenuItem,{value:"cardAlarm",children:this.getText("page_type_alarm")}),e.jsx(t.MenuItem,{value:"cardQR",children:this.getText("page_type_qr")})]})]})}),e.jsx(t.Typography,{variant:"h6",sx:{mt:1,fontWeight:600,color:"primary.main",fontSize:"1rem"},children:this.getText("pages")}),a!=="all"&&e.jsx(t.Paper,{sx:{p:0,backgroundColor:"transparent"},elevation:0,children:e.jsxs(t.Box,{sx:{display:"flex",gap:1},children:[e.jsx(t.TextField,{"aria-label":"new-name",label:this.getText("new_page"),value:this.state.newName,onChange:u=>{this.setState({newName:u.target.value})},variant:"standard",placeholder:this.getText("New item"),InputProps:{sx:{backgroundColor:"transparent",px:1}},sx:{flex:1,"& .MuiInput-underline:before":{borderBottomColor:"primary.main"},"& .MuiInput-underline:hover:before":{borderBottomColor:"primary.main"},"& .MuiInput-underline:after":{borderBottomColor:"primary.main"},"& .MuiInputLabel-root":{color:"primary.main"},"& .MuiInputLabel-root.Mui-focused":{color:"primary.main"}}}),e.jsx(t.Button,{size:"small",variant:"contained",onClick:this.handleAdd,disabled:!this.state.newName.trim()||d.includes(this.state.newName.trim()),children:"+"})]})}),e.jsx(t.Paper,{sx:{overflow:"auto",p:0,backgroundColor:"transparent"},elevation:0,children:_.length===0?e.jsx(t.Typography,{variant:"body2",color:"text.secondary",children:this.getText("No items")}):_.map(u=>e.jsxs(t.Box,{onClick:()=>{i(u)},sx:{p:1,borderRadius:1,cursor:"pointer",backgroundColor:n===u?"action.selected":"transparent",mb:.5,display:"flex",justifyContent:"space-between",alignItems:"center","&:hover .delete-icon":{opacity:1}},children:[e.jsx(t.Typography,{variant:"body2",sx:{flex:1,overflow:"hidden",textOverflow:"ellipsis"},children:u}),e.jsx(t.IconButton,{className:"delete-icon",edge:"end","aria-label":"delete",size:"small",onClick:S=>{S.stopPropagation(),this.handleDeleteClick(u)},sx:{color:"error.main",opacity:{xs:1,md:0},transition:"opacity 0.2s"},children:e.jsx(Q,{fontSize:"small"})})]},u))}),e.jsx(t.Divider,{sx:{my:1}}),f&&e.jsx(t.Box,{sx:{mb:2},children:e.jsx("a",{href:f,target:"_blank",rel:"noopener noreferrer",style:{textDecoration:"none",color:"inherit",fontSize:"0.875rem"},children:e.jsx(t.Typography,{variant:"body2",sx:{color:"primary.main",textDecoration:"underline",cursor:"pointer","&:hover":{opacity:.8}},children:this.getText("documentation")})})})]}),e.jsx(z,{open:this.state.confirmDeleteOpen,onClose:this.handleDeleteCancel,onConfirm:this.handleDeleteConfirm,title:this.getText("delete_confirm_title"),description:this.getText("delete_confirm_text")+(this.state.confirmDeleteName?`: ${this.state.confirmDeleteName}`:""),cancelText:this.getText("Cancel1"),confirmText:this.getText("Delete"),ariaTitleId:"unlock-delete-confirm-title",ariaDescId:"unlock-delete-confirm-description"}),e.jsxs(t.Box,{sx:{width:{xs:"100%",md:"90%"},pl:{xs:0,md:2},mt:{xs:2,md:0},display:"flex",flexDirection:{xs:"column",md:"row"},gap:1,position:"relative"},children:[e.jsx(t.Box,{sx:{width:{xs:"100%",md:"95%"},borderLeft:{xs:"none",md:"1px solid"},borderColor:"divider"},children:e.jsx(t.Paper,{sx:{height:"100%",p:2},elevation:1,children:h})}),e.jsx(K,{...l,widthPercent:30,uniqueName:n,currentAssignments:N,oContext:m,onAssign:o})]})]})}}class xe extends q.Component{constructor(s){super(s),this.state={showPin:!1}}getText(s){return this.props.getText(s)}handleFieldChange(s,n){const a={...this.props.entry,[s]:n};this.props.onEntryChange(a)}render(){const{entry:s,pagesList:n}=this.props;return e.jsxs(t.Box,{children:[e.jsx(t.Box,{sx:{mb:1,p:1,borderRadius:1,backgroundColor:"action.hover"},children:e.jsx(t.TextField,{fullWidth:!0,variant:"standard",type:"text",label:this.getText("unique_label"),value:s.uniqueName,onChange:a=>{const i=a.target.value;i.trim()&&this.props.onUniqueNameChange(s.uniqueName,i)},InputProps:{sx:{backgroundColor:"transparent",px:1,fontWeight:600,width:"50%"}}})}),e.jsx(t.Box,{sx:{mb:1},children:e.jsxs(t.FormControl,{component:"fieldset",children:[e.jsx(t.Typography,{variant:"subtitle2",sx:{mb:1},children:this.getText("unlock_type")}),e.jsxs(t.RadioGroup,{row:!0,value:s.alarmType||"",onChange:(a,i)=>{this.handleFieldChange("alarmType",i)},children:[e.jsx(t.FormControlLabel,{value:"alarm",control:e.jsx(t.Radio,{}),label:this.getText("unlock_alarm")}),e.jsx(t.FormControlLabel,{value:"unlock",control:e.jsx(t.Radio,{}),label:this.getText("unlock_unlock")})]})]})}),e.jsx(t.TextField,{fullWidth:!0,variant:"standard",type:"text",autoComplete:"off",label:this.getText("headline"),value:s.headline??"",onChange:a=>{this.handleFieldChange("headline",a.target.value)},InputProps:{sx:{backgroundColor:"transparent",px:1,width:"50%"}},sx:{mb:2}}),e.jsx(t.Box,{sx:{mt:2},children:e.jsx(t.TextField,{variant:"standard",label:this.getText("unlock_pin"),type:this.state.showPin?"text":"password",value:s.pin!==void 0&&s.pin!==null?String(s.pin):"",onChange:a=>{const r=a.target.value.replace(/[^0-9]/g,""),o=r?parseInt(r,10):0;this.handleFieldChange("pin",o)},InputProps:{sx:{backgroundColor:"transparent",px:1},endAdornment:e.jsx(t.InputAdornment,{position:"end",children:e.jsx(t.IconButton,{"aria-label":this.state.showPin?"hide-pin":"show-pin",onClick:()=>{this.setState({showPin:!this.state.showPin})},edge:"end",size:"small",children:this.state.showPin?e.jsx(ne,{fontSize:"small"}):e.jsx(oe,{fontSize:"small"})})})}})}),s.alarmType==="alarm"&&e.jsxs(t.Box,{sx:{mt:2},children:[e.jsxs(t.Box,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",md:"1fr 1fr"},gap:2},children:[e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"subtitle2",sx:{mb:1},children:this.getText("unlock_armed_header")}),e.jsx(t.Box,{sx:{display:"grid",gap:2},children:[1,2,3,4].map(a=>{const i=`button${a}`,r=(a-1)%4+1;return e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mb:.5},children:this.getText(`unlock_button${r}_label`)}),e.jsx(t.TextField,{fullWidth:!0,variant:"standard",placeholder:this.getText(`unlock_button${r}_placeholder`),value:s[i]??"",onChange:o=>{this.handleFieldChange(i,o.target.value)},InputProps:{disableUnderline:!0,sx:{backgroundColor:"transparent",px:1,"& input::placeholder":{color:"text.disabled"}}}})]},a)})})]}),e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"subtitle2",sx:{mb:1},children:this.getText("unlock_disarmed_header")}),e.jsx(t.Box,{sx:{display:"grid",gap:2},children:[5,6,7,8].map(a=>{const i=`button${a}`,r=(a-1)%4+1;return e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mb:.5},children:this.getText(`unlock_button${r}_label`)}),e.jsx(t.TextField,{fullWidth:!0,variant:"standard",placeholder:this.getText(`unlock_button${r}_placeholder`),value:s[i]??"",onChange:o=>{this.handleFieldChange(i,o.target.value)},InputProps:{disableUnderline:!0,sx:{backgroundColor:"transparent",px:1,"& input::placeholder":{color:"text.disabled"}}}})]},a)})})]})]}),e.jsx(t.Box,{sx:{mt:1},children:e.jsx(t.FormControlLabel,{control:e.jsx(t.Checkbox,{checked:!!s.approved,onChange:(a,i)=>{this.handleFieldChange("approved",i)}}),label:this.getText("unlock_approved")})}),e.jsx(t.Box,{sx:{mt:1},children:e.jsx(t.FormControlLabel,{control:e.jsx(t.Checkbox,{checked:!!s.global,onChange:(a,i)=>{this.handleFieldChange("global",i)}}),label:this.getText("unlock_global")})})]}),s.alarmType==="unlock"&&e.jsxs(t.Box,{sx:{mt:2},children:[e.jsx(t.Typography,{variant:"caption",color:"text.secondary",sx:{mb:.5},children:this.getText("unlock_setnavi_hint")}),e.jsxs(t.Select,{variant:"standard",displayEmpty:!0,value:s.setNavi??"",onChange:a=>{this.handleFieldChange("setNavi",String(a.target.value))},sx:{backgroundColor:"transparent",px:1,width:"60%"},children:[e.jsx(t.MenuItem,{value:"",children:e.jsx("em",{children:this.getText("unlock_setnavi_placeholder")})}),n.filter(a=>typeof a=="string"&&!a.startsWith("///")&&a!==s.uniqueName).map(a=>e.jsx(t.MenuItem,{value:a,children:a},a)),s.setNavi&&s.setNavi!==s.uniqueName&&!n.includes(s.setNavi)&&e.jsx(t.MenuItem,{value:s.setNavi,children:s.setNavi},`custom-${s.setNavi}`)]})]})]})}}class W extends q.Component{constructor(s){super(s),this.state={showSelectDialog:!1}}render(){const{label:s,value:n,onChange:a,socket:i,theme:r,themeType:o,dialogName:h,filterFunc:m}=this.props,{showSelectDialog:l}=this.state;return e.jsxs(t.Box,{sx:{mb:1},children:[e.jsx(t.Typography,{variant:"body2",sx:{mb:.5,color:"text.secondary",fontSize:"0.875rem"},children:s}),e.jsxs(t.Box,{sx:{display:"flex",gap:1,alignItems:"center"},children:[e.jsx(t.TextField,{fullWidth:!0,variant:"standard",value:n||"",onChange:d=>a(d.target.value)}),e.jsx(t.Button,{variant:"outlined",onClick:()=>this.setState({showSelectDialog:!0}),sx:{minWidth:48},children:"..."}),l&&e.jsx(y.SelectID,{socket:i,selected:n||"",onOk:d=>{const p=Array.isArray(d)?d[0]:d;a(p||""),this.setState({showSelectDialog:!1})},onClose:()=>this.setState({showSelectDialog:!1}),filterFunc:m||(d=>(d==null?void 0:d.type)==="state"),dialogName:h,theme:r,themeType:o})]})]})}}class ge extends q.Component{constructor(s){super(s),this.state={showPassword:!1}}getText(s){return this.props.getText(s)}handleFieldChange(s,n){const a={...this.props.entry,[s]:n};this.props.onEntryChange(a)}render(){var i;const{entry:s,oContext:n,theme:a}=this.props;return e.jsxs(t.Box,{children:[e.jsx(t.Box,{sx:{mb:1,p:1,borderRadius:1,backgroundColor:"action.hover"},children:e.jsx(t.TextField,{fullWidth:!0,variant:"standard",type:"text",label:this.getText("unique_label"),value:s.uniqueName,onChange:r=>{const o=r.target.value;o.trim()&&this.props.onUniqueNameChange(s.uniqueName,o)},InputProps:{sx:{backgroundColor:"transparent",px:1,fontWeight:600,width:"50%"}}})}),e.jsx(t.Box,{sx:{mb:2},children:e.jsxs(t.FormControl,{component:"fieldset",children:[e.jsx(t.FormLabel,{component:"legend",children:this.getText("qr_type")}),e.jsxs(t.RadioGroup,{row:!0,value:s.selType??0,onChange:r=>{const o=parseInt(r.target.value,10);this.handleFieldChange("selType",o)},children:[e.jsx(t.FormControlLabel,{value:0,control:e.jsx(t.Radio,{}),label:this.getText("qr_type_free")}),e.jsx(t.FormControlLabel,{value:1,control:e.jsx(t.Radio,{}),label:this.getText("qr_type_wifi")}),e.jsx(t.FormControlLabel,{value:2,control:e.jsx(t.Radio,{}),label:this.getText("qr_type_url")}),e.jsx(t.FormControlLabel,{value:3,control:e.jsx(t.Radio,{}),label:this.getText("qr_type_tel")})]})]})}),e.jsx(t.TextField,{fullWidth:!0,variant:"standard",type:"text",autoComplete:"off",label:this.getText("headline"),value:s.headline??"",onChange:r=>{this.handleFieldChange("headline",r.target.value)},InputProps:{sx:{backgroundColor:"transparent",px:1,width:"50%"}},sx:{mb:2}}),e.jsx(t.TextField,{fullWidth:!0,variant:"standard",type:"text",autoComplete:"off",label:(()=>{switch(s.selType){case 0:return this.getText("qr_content_free");case 1:return this.getText("qr_content_wifi");case 2:return this.getText("qr_content_url");case 3:return this.getText("qr_content_tel");default:return this.getText("qr_content")}})(),value:s.ssidUrlTel??"",onChange:r=>{this.handleFieldChange("ssidUrlTel",r.target.value)},InputProps:{sx:{backgroundColor:"transparent",px:1}},sx:{mb:2}}),s.selType===1&&e.jsxs(t.Box,{sx:{mb:2},children:[e.jsxs(t.FormControl,{variant:"standard",sx:{mb:2,minWidth:240},children:[e.jsx(t.InputLabel,{children:this.getText("qr_wlan_type")}),e.jsxs(t.Select,{value:s.wlantype??"WPA2",onChange:r=>{const o=r.target.value;this.handleFieldChange("wlantype",o)},children:[e.jsx(t.MenuItem,{value:"nopass",children:"No Password"}),e.jsx(t.MenuItem,{value:"WPA",children:"WPA"}),e.jsx(t.MenuItem,{value:"WPA2",children:"WPA2"}),e.jsx(t.MenuItem,{value:"WPA3",children:"WPA3"}),e.jsx(t.MenuItem,{value:"WEP",children:"WEP"})]})]}),s.wlantype!=="nopass"&&e.jsx(t.TextField,{fullWidth:!0,variant:"standard",type:this.state.showPassword?"text":"password",label:this.getText("qr_password"),value:s.qrPass??"",onChange:r=>{this.handleFieldChange("qrPass",r.target.value)},InputProps:{sx:{backgroundColor:"transparent",px:1},endAdornment:e.jsx(t.InputAdornment,{position:"end",children:e.jsx(t.IconButton,{"aria-label":"toggle password visibility",onClick:()=>{this.setState({showPassword:!this.state.showPassword})},edge:"end",children:this.state.showPassword?e.jsx(O.VisibilityOff,{}):e.jsx(O.Visibility,{})})})},sx:{mb:2}}),e.jsxs(t.Box,{sx:{display:"flex",gap:2},children:[e.jsx(t.FormControlLabel,{control:e.jsx(t.Checkbox,{checked:!!s.wlanhidden,onChange:(r,o)=>{this.handleFieldChange("wlanhidden",o)}}),label:this.getText("qr_wlan_hidden")}),e.jsx(t.FormControlLabel,{control:e.jsx(t.Checkbox,{checked:!!s.pwdhidden,onChange:(r,o)=>{this.handleFieldChange("pwdhidden",o)}}),label:this.getText("qr_pwd_hidden")})]}),e.jsx(t.Box,{sx:{mb:2},children:e.jsx(W,{label:this.getText("qr_set_state"),value:s.setState??void 0,onChange:r=>{this.handleFieldChange("setState",r)},socket:n.socket,theme:a,themeType:((i=a==null?void 0:a.palette)==null?void 0:i.mode)||"light",dialogName:"selectState",filterFunc:r=>!!(r&&r.type==="state"&&r.common&&r.common.type==="boolean"&&r.common.write&&r.common.read)})})]})]})}}class ue extends M.ConfigGeneric{pagesRetryTimeout;constructor(s){super(s);const n=M.ConfigGeneric.getValue(s.data,s.attr);this.state={...this.state,entries:Array.isArray(n)?n:[],selected:"",selectedCardType:"all",pagesList:[],alive:!1,pagesRetryCount:0}}componentWillUnmount(){this.pagesRetryTimeout&&clearTimeout(this.pagesRetryTimeout);const s=this.props.oContext.instance??"0";this.props.oContext.socket.unsubscribeState(`system.adapter.${F}.${s}.alive`,this.onAliveChanged)}async componentDidMount(){super.componentDidMount();const s=this.props.oContext.instance??"0",n=`system.adapter.${F}.${s}.alive`;try{const a=await this.props.oContext.socket.getState(n),i=!!(a!=null&&a.val);this.setState({alive:i}),await this.props.oContext.socket.subscribeState(n,this.onAliveChanged),i&&await this.loadPagesList()}catch(a){console.error("[PageConfig] Failed to get alive state or subscribe:",a),this.setState({alive:!1})}}onAliveChanged=(s,n)=>{const a=this.state.alive,i=n?!!n.val:!1;a!==i&&(this.setState({alive:i}),!a&&i&&(!this.state.pagesList||this.state.pagesList.length===0)&&this.loadPagesList(),a&&!i&&this.pagesRetryTimeout&&(clearTimeout(this.pagesRetryTimeout),this.pagesRetryTimeout=void 0))};async loadPagesList(){if(!this.state.alive){console.log("[PageConfig] Adapter not alive, skipping pages load");return}const s=[];if(this.props.oContext&&this.props.oContext.socket){const n=this.props.oContext.instance??"0",a=`${F}.${n}`;try{const i=await this.props.oContext.socket.sendTo(a,Y,null);let r=[];Array.isArray(i)?r=i:i&&Array.isArray(i.result)&&(r=i.result);for(const o of r)s.push(o);if(r.length===0){const o=this.state.pagesRetryCount||0,h=3e3;console.log(`[PageConfig] Got empty pages array, retrying in ${h}ms (attempt ${o+1})`),this.setState({pagesRetryCount:o+1}),this.pagesRetryTimeout&&clearTimeout(this.pagesRetryTimeout),this.pagesRetryTimeout=setTimeout(()=>{this.state.alive?this.loadPagesList():console.log("[PageConfig] Adapter went offline, cancelling pages retry")},h);return}else r.length>0&&(console.log(`[PageConfig] Successfully loaded ${r.length} pages after ${this.state.pagesRetryCount||0} retries`),this.setState({pagesRetryCount:0}),this.pagesRetryTimeout&&(clearTimeout(this.pagesRetryTimeout),this.pagesRetryTimeout=void 0))}catch(i){const r=this.state.pagesRetryCount||0,o=3e3;console.log(`[PageConfig] Error loading pages, retrying in ${o}ms (attempt ${r+1}): ${String(i)}`),this.setState({pagesRetryCount:r+1}),this.pagesRetryTimeout&&clearTimeout(this.pagesRetryTimeout),this.pagesRetryTimeout=setTimeout(()=>{this.state.alive?this.loadPagesList():console.log("[PageConfig] Adapter went offline, cancelling pages retry after error")},o);return}}else{console.log("[PageConfig] No socket available for sendTo");return}this.setState({pagesList:Array.from(new Set(s))})}handleAdd=(s,n)=>{if(n==="all")return;let a;if(n==="cardAlarm")a={card:"cardAlarm",uniqueName:s,headline:s,button1:"",button2:"",button3:"",button4:"",button5:"",button6:"",button7:"",button8:"",pin:0};else if(n==="cardQR")a={card:"cardQR",uniqueName:s,headline:s,ssidUrlTel:"",wlanhidden:!1,pwdhidden:!1,setState:"",selType:0};else return;const i=[...this.state.entries,a];this.setState({entries:i}),this.onChange(this.props.attr,i)};handleDelete=s=>{const n=this.state.entries.filter(i=>i.uniqueName!==s);this.setState({entries:n}),this.onChange(this.props.attr,n);const a=Array.from(new Set(n.map(i=>i.uniqueName))).filter(Boolean);this.setState({selected:a[0]||""})};handleAssign=(s,n)=>{const a=this.state.entries.map(i=>i.uniqueName===s?{...i,navigationAssignment:n}:i);this.setState({entries:a}),this.onChange(this.props.attr,a)};handleEntryChange=s=>{const n=this.state.entries.map(a=>a.uniqueName===s.uniqueName?s:a);this.setState({entries:n}),this.onChange(this.props.attr,n)};handleUniqueNameChange=(s,n)=>{if(!n.trim())return;const a=this.state.entries.map(i=>i.uniqueName===s?{...i,uniqueName:n}:i);this.setState({entries:a,selected:n}),this.onChange(this.props.attr,a)};handleCardTypeChange=s=>{const n=s==="all"?this.state.entries:this.state.entries.filter(i=>i.card===s),a=n.length>0?n[0].uniqueName:"";this.setState({selectedCardType:s,selected:a})};handleCommonFieldsChange=(s,n)=>{const a=this.state.entries.map(i=>i.uniqueName===s?{...i,...n}:i);this.setState({entries:a}),this.onChange(this.props.attr,a)};renderMiddlePanel(){const{selected:s,entries:n,pagesList:a}=this.state;if(!s)return e.jsxs(t.Box,{children:[e.jsx(t.Typography,{variant:"h6",children:this.getText("select_item")}),e.jsx(t.Box,{sx:{mt:2},children:e.jsx(t.Typography,{variant:"body2",color:"text.secondary",children:this.getText("select_description")})})]});const i=n.find(r=>r.uniqueName===s);return i?i.card==="cardAlarm"?e.jsx(xe,{entry:i,pagesList:a,onEntryChange:this.handleEntryChange,onUniqueNameChange:this.handleUniqueNameChange,getText:r=>this.getText(r)}):i.card==="cardQR"?e.jsx(ge,{entry:i,onEntryChange:this.handleEntryChange,onUniqueNameChange:this.handleUniqueNameChange,getText:r=>this.getText(r),oContext:this.props.oContext,theme:this.props.theme}):e.jsxs(t.Typography,{variant:"body2",children:[i.card," - ",this.getText("coming_soon")]}):e.jsx(t.Typography,{variant:"body2",color:"text.secondary",children:this.getText("Entry not found")})}renderItem(s,n,a){const i=this.state.entries.find(r=>r.uniqueName===this.state.selected);return e.jsx(me,{entries:this.state.entries,selected:this.state.selected,selectedCardType:this.state.selectedCardType,onSelectedChange:r=>this.setState({selected:r}),onCardTypeChange:this.handleCardTypeChange,onAdd:this.handleAdd,onDelete:this.handleDelete,onAssign:this.handleAssign,oContext:this.props.oContext,getText:r=>this.getText(r),navigationPanelProps:{...this.props,data:this.props.data,onChange:this.props.onChange,onError:this.props.onError,commonFields:i?{hidden:i.hidden,alwaysOn:i.alwaysOn,navigationAssignment:i.navigationAssignment}:void 0,onCommonFieldsChange:i?r=>{this.handleCommonFieldsChange(i.uniqueName,r)}:void 0},children:this.renderMiddlePanel()})}}const fe=H(ue),B={left:"◧",bottom:"⬜",indicator:"●",favorit:"💎",alternate:"⇄"};class ye extends q.Component{constructor(s){super(s);const n={type:"button",headline:"",modeScr:"left",data:{text:void 0,text1:void 0,icon:void 0,color:void 0,entity1:void 0,entity2:void 0,entity3:void 0,entity4:void 0,filter:void 0,setValue1:void 0,setValue2:void 0,setNavi:void 0,confirm:void 0,popup:void 0,enabled:void 0,additionalId:void 0,setTrue:!1,setFalse:!1}};this.state={editedItem:s.item?{...s.item}:n,confirmDeleteOpen:!1}}handleFieldChange=(s,n)=>{this.setState(a=>({editedItem:{...a.editedItem,[s]:n}}))};handleDataFieldChange=(s,n)=>{this.setState(a=>({editedItem:{...a.editedItem,data:{...a.editedItem.data,[s]:n||void 0}}}))};handleSave=()=>{this.props.onSave(this.state.editedItem)};handleDeleteClick=()=>{this.setState({confirmDeleteOpen:!0})};handleDeleteConfirm=()=>{this.setState({confirmDeleteOpen:!1}),this.props.onDelete&&this.props.onDelete()};handleDeleteCancel=()=>{this.setState({confirmDeleteOpen:!1})};render(){const{item:s,onBack:n,onDelete:a,getText:i,socket:r,theme:o,themeType:h}=this.props,{editedItem:m}=this.state,l=!s,d=m.modeScr==="indicator";return e.jsxs(t.Box,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",mb:3,gap:2},children:[e.jsx(t.IconButton,{onClick:n,sx:{color:"primary.main"},children:e.jsx(O.ArrowBack,{})}),e.jsx(t.Typography,{variant:"h6",sx:{flex:1},children:i(l?"pageItem_new":"pageItem_edit")}),!l&&a&&e.jsx(t.IconButton,{onClick:this.handleDeleteClick,sx:{color:"error.main"},children:e.jsx(O.Delete,{})})]}),e.jsx(t.Paper,{sx:{p:3,flex:1,overflow:"auto",display:"flex",flexDirection:"column"},children:e.jsxs(t.Box,{sx:{display:"flex",flexDirection:"column",gap:2,flex:1},children:[d&&e.jsxs(t.FormControl,{fullWidth:!0,children:[e.jsx(t.InputLabel,{children:i("pageItem_type")}),e.jsxs(t.Select,{value:m.type,label:i("pageItem_type"),onChange:p=>this.handleFieldChange("type",p.target.value),children:[e.jsx(t.MenuItem,{value:"button",children:i("pageItem_type_button")}),e.jsx(t.MenuItem,{value:"text",children:i("pageItem_type_text")})]})]}),e.jsx(t.TextField,{fullWidth:!0,label:i("pageItem_headline"),value:m.headline||"",onChange:p=>this.handleFieldChange("headline",p.target.value),helperText:i("pageItem_headline_hint")}),e.jsxs(t.FormControl,{fullWidth:!0,children:[e.jsx(t.InputLabel,{children:i("pageItem_modeScr")}),e.jsxs(t.Select,{value:m.modeScr||"left",label:i("pageItem_modeScr"),onChange:p=>{const _=p.target.value;this.handleFieldChange("modeScr",_),_!=="indicator"&&this.handleFieldChange("type","text")},children:[e.jsx(t.MenuItem,{value:"left",children:e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx("span",{style:{fontSize:"1.5rem"},children:B.left}),i("pageItem_modeScr_left")]})}),e.jsx(t.MenuItem,{value:"bottom",children:e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx("span",{style:{fontSize:"1.5rem"},children:B.bottom}),i("pageItem_modeScr_bottom")]})}),e.jsx(t.MenuItem,{value:"indicator",children:e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx("span",{style:{fontSize:"1.5rem"},children:B.indicator}),i("pageItem_modeScr_indicator")]})}),e.jsx(t.MenuItem,{value:"favorit",children:e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx("span",{style:{fontSize:"1.5rem"},children:B.favorit}),i("pageItem_modeScr_favorit")]})}),e.jsx(t.MenuItem,{value:"alternate",children:e.jsxs(t.Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.jsx("span",{style:{fontSize:"1.5rem"},children:B.alternate}),i("pageItem_modeScr_alternate")]})})]})]}),e.jsx(t.Divider,{}),e.jsx(t.Typography,{variant:"h6",sx:{mt:1},children:i("pageItem_data")}),!d&&e.jsx(t.TextField,{fullWidth:!0,label:i("pageItem_data_text"),value:m.data.text||"",onChange:p=>this.handleDataFieldChange("text",p.target.value),helperText:i("pageItem_data_text_hint")}),e.jsx(t.TextField,{fullWidth:!0,label:i("pageItem_data_icon"),value:m.data.icon||"",onChange:p=>this.handleDataFieldChange("icon",p.target.value),helperText:i("pageItem_data_icon_hint")}),e.jsx(W,{label:i("pageItem_data_entity1"),value:m.data.entity1,onChange:p=>this.handleDataFieldChange("entity1",p),socket:r,theme:o,themeType:h||"light",dialogName:"nspanel-pageitem-editor-entity1"}),e.jsx(W,{label:i("pageItem_data_entity2"),value:m.data.entity2,onChange:p=>this.handleDataFieldChange("entity2",p),socket:r,theme:o,themeType:h||"light",dialogName:"nspanel-pageitem-editor-entity2"}),e.jsx(t.TextField,{fullWidth:!0,label:i("pageItem_data_setNavi"),value:m.data.setNavi||"",onChange:p=>this.handleDataFieldChange("setNavi",p.target.value),helperText:i("pageItem_data_setNavi_hint")}),e.jsx(t.Box,{sx:{display:"flex",justifyContent:"flex-end",mt:2},children:e.jsx(t.Button,{variant:"contained",color:"primary",onClick:this.handleSave,children:i("save")})})]})}),e.jsx(z,{open:this.state.confirmDeleteOpen,onClose:this.handleDeleteCancel,onConfirm:this.handleDeleteConfirm,title:i("pageItem_delete_confirm_title"),description:i("pageItem_delete_confirm_text"),cancelText:i("Cancel1"),confirmText:i("Delete"),ariaTitleId:"pageitem-delete-confirm-title",ariaDescId:"pageitem-delete-confirm-description"})]})}}class ve extends M.ConfigGeneric{_local=null;pagesRetryTimeout;dateFormats=[{value:{dateStyle:"short"},label:"dateFormatShort"},{value:{year:"numeric",month:"2-digit",day:"2-digit"},label:"dateFormatYearMonthDay"},{value:{day:"2-digit",month:"short",year:"numeric"},label:"dateFormatDayShortMonthYear"},{value:{day:"2-digit",month:"long",year:"numeric"},label:"dateFormatDayLongMonthYear"},{value:{weekday:"short",day:"2-digit",month:"2-digit",year:"numeric"},label:"dateFormatWeekdayShortDate"},{value:{weekday:"long",day:"2-digit",month:"2-digit",year:"numeric"},label:"dateFormatWeekdayLongDate"},{value:{weekday:"short",day:"2-digit",month:"short",year:"numeric"},label:"dateFormatWeekdayShortDayMonthYear"},{value:{weekday:"long",day:"2-digit",month:"long",year:"numeric"},label:"dateFormatWeekdayLongDayMonthYear"},{value:"custom",label:"Custom"}];timeFormats=[{value:{hour:"2-digit",minute:"2-digit",hour12:!1},label:"timeFormat24"},{value:{hour:"numeric",minute:"2-digit",hour12:!0},label:"timeFormat12"}];constructor(s){super(s);const n=M.ConfigGeneric.getValue(s.data,s.attr);this.state={...this.state,entries:Array.isArray(n)?n:[],confirmDeleteOpen:!1,confirmDeleteName:null,alive:!1,pagesRetryCount:0}}formatDatePreview(s,n){try{return s.toLocaleDateString(void 0,typeof n=="string"?JSON.parse(n):n)}catch{return"Invalid Format"}}formatTimePreview(s,n){try{return s.toLocaleTimeString(void 0,typeof n=="string"?JSON.parse(n):n)}catch{return"Invalid Format"}}componentWillUnmount(){this.pagesRetryTimeout&&clearTimeout(this.pagesRetryTimeout);const s=this.props.oContext.instance??"0";this.props.oContext.socket.unsubscribeState(`system.adapter.${F}.${s}.alive`,this.onAliveChanged)}async componentDidMount(){super.componentDidMount();const s=this.props.oContext.instance??"0",n=`system.adapter.${F}.${s}.alive`;try{const a=await this.props.oContext.socket.getState(n),i=!!(a!=null&&a.val);this.setState({alive:i}),await this