function e(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function t(e,t,n,l){var s,a=arguments.length,i=a<3?t:null===l?l=Object.getOwnPropertyDescriptor(t,n):l;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,l);else for(var r=e.length-1;r>=0;r--)(s=e[r])&&(i=(a<3?s(i):a>3?s(t,n,i):s(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}"function"==typeof SuppressedError&&SuppressedError; /** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const n=globalThis,l=n.ShadowRoot&&(void 0===n.ShadyCSS||n.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s=Symbol(),a=new WeakMap;let i=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==s)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(l&&void 0===e){const n=void 0!==t&&1===t.length;n&&(e=a.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&a.set(t,e))}return e}toString(){return this.cssText}};const r=(e,...t)=>{const n=1===e.length?e[0]:t.reduce(((t,n,l)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+e[l+1]),e[0]);return new i(n,e,s)},c=l?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const n of e.cssRules)t+=n.cssText;return(e=>new i("string"==typeof e?e:e+"",void 0,s))(t)})(e):e /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */,{is:o,defineProperty:_,getOwnPropertyDescriptor:d,getOwnPropertyNames:h,getOwnPropertySymbols:g,getPrototypeOf:p}=Object,u=globalThis,v=u.trustedTypes,m=v?v.emptyScript:"",f=u.reactiveElementPolyfillSupport,b=(e,t)=>e,y={toAttribute(e,t){switch(t){case Boolean:e=e?m:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=null!==e;break;case Number:n=null===e?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch(e){n=null}}return n}},x=(e,t)=>!o(e,t),C={attribute:!0,type:String,converter:y,reflect:!1,useDefault:!1,hasChanged:x};Symbol.metadata??=Symbol("metadata"),u.litPropertyMetadata??=new WeakMap;let S=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=C){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const n=Symbol(),l=this.getPropertyDescriptor(e,n,t);void 0!==l&&_(this.prototype,e,l)}}static getPropertyDescriptor(e,t,n){const{get:l,set:s}=d(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:l,set(t){const a=l?.call(this);s?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??C}static _$Ei(){if(this.hasOwnProperty(b("elementProperties")))return;const e=p(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(b("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(b("properties"))){const e=this.properties,t=[...h(e),...g(e)];for(const n of t)this.createProperty(n,e[n])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const n=this._$Eu(e,t);void 0!==n&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const n=new Set(e.flat(1/0).reverse());for(const e of n)t.unshift(c(e))}else void 0!==e&&t.push(c(e));return t}static _$Eu(e,t){const n=t.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((e=>e(this)))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{if(l)e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet));else for(const l of t){const t=document.createElement("style"),s=n.litNonce;void 0!==s&&t.setAttribute("nonce",s),t.textContent=l.cssText,e.appendChild(t)}})(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((e=>e.hostConnected?.()))}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach((e=>e.hostDisconnected?.()))}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){const n=this.constructor.elementProperties.get(e),l=this.constructor._$Eu(e,n);if(void 0!==l&&!0===n.reflect){const s=(void 0!==n.converter?.toAttribute?n.converter:y).toAttribute(t,n.type);this._$Em=e,null==s?this.removeAttribute(l):this.setAttribute(l,s),this._$Em=null}}_$AK(e,t){const n=this.constructor,l=n._$Eh.get(e);if(void 0!==l&&this._$Em!==l){const e=n.getPropertyOptions(l),s="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:y;this._$Em=l,this[l]=s.fromAttribute(t,e.type)??this._$Ej?.get(l)??null,this._$Em=null}}requestUpdate(e,t,n){if(void 0!==e){const l=this.constructor,s=this[e];if(n??=l.getPropertyOptions(e),!((n.hasChanged??x)(s,t)||n.useDefault&&n.reflect&&s===this._$Ej?.get(e)&&!this.hasAttribute(l._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:l,wrapped:s},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==s||void 0!==a)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===l&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,n]of e){const{wrapped:e}=n,l=this[t];!0!==e||this._$AL.has(t)||void 0===l||this.C(t,void 0,n,l)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach((e=>e.hostUpdate?.())),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach((e=>e.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach((e=>this._$ET(e,this[e]))),this._$EM()}updated(e){}firstUpdated(e){}};S.elementStyles=[],S.shadowRootOptions={mode:"open"},S[b("elementProperties")]=new Map,S[b("finalized")]=new Map,f?.({ReactiveElement:S}),(u.reactiveElementVersions??=[]).push("2.1.0"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const w=globalThis,$=w.trustedTypes,k=$?$.createPolicy("lit-html",{createHTML:e=>e}):void 0,A="$lit$",E=`lit$${Math.random().toFixed(9).slice(2)}$`,M="?"+E,O=`<${M}>`,T=document,V=()=>T.createComment(""),z=e=>null===e||"object"!=typeof e&&"function"!=typeof e,D=Array.isArray,N="[ \t\n\f\r]",P=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,L=/>/g,U=RegExp(`>|${N}(?:([^\\s"'>=/]+)(${N}*=${N}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,F=/"/g,R=/^(?:script|style|textarea|title)$/i,j=(e=>(t,...n)=>({_$litType$:e,strings:t,values:n}))(1),B=Symbol.for("lit-noChange"),K=Symbol.for("lit-nothing"),W=new WeakMap,J=T.createTreeWalker(T,129);function Z(e,t){if(!D(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==k?k.createHTML(t):t}const q=(e,t)=>{const n=e.length-1,l=[];let s,a=2===t?"":3===t?"":"",i=P;for(let t=0;t"===c[0]?(i=s??P,o=-1):void 0===c[1]?o=-2:(o=i.lastIndex-c[2].length,r=c[1],i=void 0===c[3]?U:'"'===c[3]?F:H):i===F||i===H?i=U:i===I||i===L?i=P:(i=U,s=void 0);const d=i===U&&e[t+1].startsWith("/>")?" ":"";a+=i===P?n+O:o>=0?(l.push(r),n.slice(0,o)+A+n.slice(o)+E+d):n+E+(-2===o?t:d)}return[Z(e,a+(e[n]||"")+(2===t?"":3===t?"":"")),l]};class G{constructor({strings:e,_$litType$:t},n){let l;this.parts=[];let s=0,a=0;const i=e.length-1,r=this.parts,[c,o]=q(e,t);if(this.el=G.createElement(c,n),J.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(l=J.nextNode())&&r.length0){l.textContent=$?$.emptyScript:"";for(let n=0;nD(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==K&&z(this._$AH)?this._$AA.nextSibling.data=e:this.T(T.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:n}=e,l="number"==typeof n?this._$AC(e):(void 0===n.el&&(n.el=G.createElement(Z(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===l)this._$AH.p(t);else{const e=new X(l,this),n=e.u(this.options);e.p(t),this.T(n),this._$AH=e}}_$AC(e){let t=W.get(e.strings);return void 0===t&&W.set(e.strings,t=new G(e)),t}k(e){D(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let n,l=0;for(const s of e)l===t.length?t.push(n=new Y(this.O(V()),this.O(V()),this,this.options)):n=t[l],n._$AI(s),l++;l2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=K}_$AI(e,t=this,n,l){const s=this.strings;let a=!1;if(void 0===s)e=Q(this,e,t,0),a=!z(e)||e!==this._$AH&&e!==B,a&&(this._$AH=e);else{const l=e;let i,r;for(e=s[0],i=0;i{const l=n?.renderBefore??t;let s=l._$litPart$;if(void 0===s){const e=n?.renderBefore??null;l._$litPart$=s=new Y(t.insertBefore(V(),e),e,void 0,n??{})}return s._$AI(e),s})(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return B}}re._$litElement$=!0,re.finalized=!0,ie.litElementHydrateSupport?.({LitElement:re});const ce=ie.litElementPolyfillSupport;ce?.({LitElement:re}),(ie.litElementVersions??=[]).push("4.2.0"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const oe=e=>(t,n)=>{void 0!==n?n.addInitializer((()=>{customElements.define(e,t)})):customElements.define(e,t)} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */,_e={attribute:!0,type:String,converter:y,reflect:!1,hasChanged:x},de=(e=_e,t,n)=>{const{kind:l,metadata:s}=n;let a=globalThis.litPropertyMetadata.get(s);if(void 0===a&&globalThis.litPropertyMetadata.set(s,a=new Map),"setter"===l&&((e=Object.create(e)).wrapped=!0),a.set(n.name,e),"accessor"===l){const{name:l}=n;return{set(n){const s=t.get.call(this);t.set.call(this,n),this.requestUpdate(l,s,e)},init(t){return void 0!==t&&this.C(l,void 0,e,t),t}}}if("setter"===l){const{name:l}=n;return function(n){const s=this[l];t.call(this,n),this.requestUpdate(l,s,e)}}throw Error("Unsupported decorator location: "+l)};function he(e){return(t,n)=>"object"==typeof n?de(e,t,n):((e,t,n)=>{const l=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),l?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}const ge="jk-bms-content-card-editor",pe="jk-bms-card";var ue;!function(e){e.delta_cell_voltage="delta_cell_voltage",e.balancing="balancing",e.balancing_current="balancing_current",e.power="power",e.balance_trigger_voltage="balance_trigger_voltage",e.total_runtime_formatted="total_runtime_formatted",e.charging="charging",e.charging_power="charging_power",e.discharging="discharging",e.discharging_power="discharging_power",e.balancer="balancer",e.heater="heater",e.total_voltage="total_voltage",e.total_battery_capacity_setting="total_battery_capacity_setting",e.total_charging_cycle_capacity="total_charging_cycle_capacity",e.average_cell_voltage="average_cell_voltage",e.current="current",e.state_of_charge="state_of_charge",e.capacity_remaining="capacity_remaining",e.charging_cycles="charging_cycles",e.power_tube_temperature="power_tube_temperature",e.min_voltage_cell="min_voltage_cell",e.max_voltage_cell="max_voltage_cell",e.errors="errors",e.software_version="software_version",e.hardware_version="hardware_version",e.cell_voltage_1="cell_voltage_1",e.cell_voltage_2="cell_voltage_2",e.cell_voltage_3="cell_voltage_3",e.cell_voltage_4="cell_voltage_4",e.cell_voltage_5="cell_voltage_5",e.cell_voltage_6="cell_voltage_6",e.cell_voltage_7="cell_voltage_7",e.cell_voltage_8="cell_voltage_8",e.cell_voltage_9="cell_voltage_9",e.cell_voltage_10="cell_voltage_10",e.cell_voltage_11="cell_voltage_11",e.cell_voltage_12="cell_voltage_12",e.cell_voltage_13="cell_voltage_13",e.cell_voltage_14="cell_voltage_14",e.cell_voltage_15="cell_voltage_15",e.cell_voltage_16="cell_voltage_16",e.cell_voltage_17="cell_voltage_17",e.cell_voltage_18="cell_voltage_18",e.cell_voltage_19="cell_voltage_19",e.cell_voltage_20="cell_voltage_20",e.cell_voltage_21="cell_voltage_21",e.cell_voltage_22="cell_voltage_22",e.cell_voltage_23="cell_voltage_23",e.cell_voltage_24="cell_voltage_24",e.cell_voltage_25="cell_voltage_25",e.cell_voltage_26="cell_voltage_26",e.cell_voltage_27="cell_voltage_27",e.cell_voltage_28="cell_voltage_28",e.cell_voltage_29="cell_voltage_29",e.cell_voltage_30="cell_voltage_30",e.cell_voltage_31="cell_voltage_31",e.cell_voltage_32="cell_voltage_32",e.cell_voltage_33="cell_voltage_33",e.cell_voltage_34="cell_voltage_34",e.cell_voltage_35="cell_voltage_35",e.cell_voltage_36="cell_voltage_36",e.cell_voltage_37="cell_voltage_37",e.cell_voltage_38="cell_voltage_38",e.cell_voltage_39="cell_voltage_39",e.cell_voltage_40="cell_voltage_40",e.cell_voltage_41="cell_voltage_41",e.cell_voltage_42="cell_voltage_42",e.cell_voltage_43="cell_voltage_43",e.cell_voltage_44="cell_voltage_44",e.cell_voltage_45="cell_voltage_45",e.cell_voltage_46="cell_voltage_46",e.cell_voltage_47="cell_voltage_47",e.cell_voltage_48="cell_voltage_48",e.cell_voltage_49="cell_voltage_49",e.cell_voltage_50="cell_voltage_50",e.cell_voltage_51="cell_voltage_51",e.cell_voltage_52="cell_voltage_52",e.cell_voltage_53="cell_voltage_53",e.cell_voltage_54="cell_voltage_54",e.cell_voltage_55="cell_voltage_55",e.cell_voltage_56="cell_voltage_56",e.cell_voltage_57="cell_voltage_57",e.cell_voltage_58="cell_voltage_58",e.cell_voltage_59="cell_voltage_59",e.cell_voltage_60="cell_voltage_60",e.cell_voltage_61="cell_voltage_61",e.cell_voltage_62="cell_voltage_62",e.cell_voltage_63="cell_voltage_63",e.cell_voltage_64="cell_voltage_64",e.cell_voltage_65="cell_voltage_65",e.cell_voltage_66="cell_voltage_66",e.cell_voltage_67="cell_voltage_67",e.cell_voltage_68="cell_voltage_68",e.cell_voltage_69="cell_voltage_69",e.cell_voltage_70="cell_voltage_70",e.cell_voltage_71="cell_voltage_71",e.cell_voltage_72="cell_voltage_72",e.cell_voltage_73="cell_voltage_73",e.cell_voltage_74="cell_voltage_74",e.cell_voltage_75="cell_voltage_75",e.cell_voltage_76="cell_voltage_76",e.cell_voltage_77="cell_voltage_77",e.cell_voltage_78="cell_voltage_78",e.cell_voltage_79="cell_voltage_79",e.cell_voltage_80="cell_voltage_80",e.cell_voltage_81="cell_voltage_81",e.cell_voltage_82="cell_voltage_82",e.cell_voltage_83="cell_voltage_83",e.cell_voltage_84="cell_voltage_84",e.cell_voltage_85="cell_voltage_85",e.cell_voltage_86="cell_voltage_86",e.cell_voltage_87="cell_voltage_87",e.cell_voltage_88="cell_voltage_88",e.cell_voltage_89="cell_voltage_89",e.cell_voltage_90="cell_voltage_90",e.cell_voltage_91="cell_voltage_91",e.cell_voltage_92="cell_voltage_92",e.cell_voltage_93="cell_voltage_93",e.cell_voltage_94="cell_voltage_94",e.cell_voltage_95="cell_voltage_95",e.cell_voltage_96="cell_voltage_96",e.cell_resistance_1="cell_resistance_1",e.cell_resistance_2="cell_resistance_2",e.cell_resistance_3="cell_resistance_3",e.cell_resistance_4="cell_resistance_4",e.cell_resistance_5="cell_resistance_5",e.cell_resistance_6="cell_resistance_6",e.cell_resistance_7="cell_resistance_7",e.cell_resistance_8="cell_resistance_8",e.cell_resistance_9="cell_resistance_9",e.cell_resistance_10="cell_resistance_10",e.cell_resistance_11="cell_resistance_11",e.cell_resistance_12="cell_resistance_12",e.cell_resistance_13="cell_resistance_13",e.cell_resistance_14="cell_resistance_14",e.cell_resistance_15="cell_resistance_15",e.cell_resistance_16="cell_resistance_16",e.cell_resistance_17="cell_resistance_17",e.cell_resistance_18="cell_resistance_18",e.cell_resistance_19="cell_resistance_19",e.cell_resistance_20="cell_resistance_20",e.cell_resistance_21="cell_resistance_21",e.cell_resistance_22="cell_resistance_22",e.cell_resistance_23="cell_resistance_23",e.cell_resistance_24="cell_resistance_24",e.cell_resistance_25="cell_resistance_25",e.cell_resistance_26="cell_resistance_26",e.cell_resistance_27="cell_resistance_27",e.cell_resistance_28="cell_resistance_28",e.cell_resistance_29="cell_resistance_29",e.cell_resistance_30="cell_resistance_30",e.cell_resistance_31="cell_resistance_31",e.cell_resistance_32="cell_resistance_32",e.cell_resistance_33="cell_resistance_33",e.cell_resistance_34="cell_resistance_34",e.cell_resistance_35="cell_resistance_35",e.cell_resistance_36="cell_resistance_36",e.cell_resistance_37="cell_resistance_37",e.cell_resistance_38="cell_resistance_38",e.cell_resistance_39="cell_resistance_39",e.cell_resistance_40="cell_resistance_40",e.cell_resistance_41="cell_resistance_41",e.cell_resistance_42="cell_resistance_42",e.cell_resistance_43="cell_resistance_43",e.cell_resistance_44="cell_resistance_44",e.cell_resistance_45="cell_resistance_45",e.cell_resistance_46="cell_resistance_46",e.cell_resistance_47="cell_resistance_47",e.cell_resistance_48="cell_resistance_48",e.cell_resistance_49="cell_resistance_49",e.cell_resistance_50="cell_resistance_50",e.cell_resistance_51="cell_resistance_51",e.cell_resistance_52="cell_resistance_52",e.cell_resistance_53="cell_resistance_53",e.cell_resistance_54="cell_resistance_54",e.cell_resistance_55="cell_resistance_55",e.cell_resistance_56="cell_resistance_56",e.cell_resistance_57="cell_resistance_57",e.cell_resistance_58="cell_resistance_58",e.cell_resistance_59="cell_resistance_59",e.cell_resistance_60="cell_resistance_60",e.cell_resistance_61="cell_resistance_61",e.cell_resistance_62="cell_resistance_62",e.cell_resistance_63="cell_resistance_63",e.cell_resistance_64="cell_resistance_64",e.cell_resistance_65="cell_resistance_65",e.cell_resistance_66="cell_resistance_66",e.cell_resistance_67="cell_resistance_67",e.cell_resistance_68="cell_resistance_68",e.cell_resistance_69="cell_resistance_69",e.cell_resistance_70="cell_resistance_70",e.cell_resistance_71="cell_resistance_71",e.cell_resistance_72="cell_resistance_72",e.cell_resistance_73="cell_resistance_73",e.cell_resistance_74="cell_resistance_74",e.cell_resistance_75="cell_resistance_75",e.cell_resistance_76="cell_resistance_76",e.cell_resistance_77="cell_resistance_77",e.cell_resistance_78="cell_resistance_78",e.cell_resistance_79="cell_resistance_79",e.cell_resistance_80="cell_resistance_80",e.cell_resistance_81="cell_resistance_81",e.cell_resistance_82="cell_resistance_82",e.cell_resistance_83="cell_resistance_83",e.cell_resistance_84="cell_resistance_84",e.cell_resistance_85="cell_resistance_85",e.cell_resistance_86="cell_resistance_86",e.cell_resistance_87="cell_resistance_87",e.cell_resistance_88="cell_resistance_88",e.cell_resistance_89="cell_resistance_89",e.cell_resistance_90="cell_resistance_90",e.cell_resistance_91="cell_resistance_91",e.cell_resistance_92="cell_resistance_92",e.cell_resistance_93="cell_resistance_93",e.cell_resistance_94="cell_resistance_94",e.cell_resistance_95="cell_resistance_95",e.cell_resistance_96="cell_resistance_96",e.temperature_sensor_1="temperature_sensor_1",e.temperature_sensor_2="temperature_sensor_2",e.temperature_sensor_3="temperature_sensor_3",e.temperature_sensor_4="temperature_sensor_4"}(ue||(ue={}));var ve={title:"JK BMS Card",description:"A customizable Home Assistant card to emulate the JK BMS screen",version:"Version"},me={language:"Language",title:"Title",prefix:"Prefix of the sensors",cellCount:"Number of cells",cellColumns:"Number of columns",cellLayout:"Cell Layout",layout:"Layout",deltaVoltageUnit:"Delta Voltage Unit",cellColorMode:"Cell Color Mode",cellOrientation:"Cell Orientation",minCellVoltage:"Min Cell Voltage (V)",maxCellVoltage:"Max Cell Voltage (V)",manualAssignment:"Manual entity assignment",tempSensorsCount:"Number of temperature sensors available",hasHeater:"Heater option is used"},fe={charge:"Charge",discharge:"Discharge",balance:"Balance",heater:"Heater"},be={power:"Power:",capacity:"Capacity:",cycleCapacity:"Cycle Cap:",averageCellV:"Avg Cell V:",balanceCurrent:"Balance Cur:",stateOfCharge:"SOC:",remainingAmps:"Remaining:",cycles:"Cycles:",delta:"Delta Voltage:",mosfetTemp:"MOS Temp:",temperature_sensor_1:"Temp. 1:",temperature_sensor_2:"Temp. 2:",temperature_sensor_3:"Temp. 3:",temperature_sensor_4:"Temp. 4:"},ye={capacity:"Capacity",time:"Time","grid-solar":"Grid/Solar",load:"Load","total-voltage":"Total Voltage",current:"Current",mosfetTemp:"MOS Temp",delta:"Delta",temperature_sensor:"Temp",balancing:"Balancing",volt:"V",charge:"Charge",discharge:"Discharge",remaining:"Remaining"},xe={common:ve,config:me,switches:fe,stats:be,html_texts:ye},Ce={title:"Карта JK BMS",description:"Налаштовувана картка Home Assistant для емуляції екрану JK BMS",version:"Версія"},Se={language:"Мова",title:"Заголовок",prefix:"Префікс сенсорів",cellCount:"Кількість комірок",cellColumns:"Кількість стовпців",cellLayout:"Розташування комірок",layout:"Макет",deltaVoltageUnit:"Одиниця дельта напруги",cellColorMode:"Режим кольору комірок",cellOrientation:"Орієнтація комірок",minCellVoltage:"Мін. напруга комірки (В)",maxCellVoltage:"Макс. напруга комірки (В)",manualAssignment:"Ручне призначення сутності",tempSensorsCount:"Кількість доступних датчиків температури",hasHeater:"Використовується опція підігріву"},we={charge:"Заряд",discharge:"Розряд",balance:"Баланс",heater:"Підігрів"},$e={power:"Потужність:",capacity:"Ємність:",cycleCapacity:"Ємність циклу:",averageCellV:"Середня напруга комірки:",balanceCurrent:"Струм балансування:",stateOfCharge:"Заряд:",remainingAmps:"Залишок (Аг):",cycles:"Цикли:",delta:"Дельта напруги:",mosfetTemp:"Температура MOS:",temperature_sensor_1:"Темп. 1:",temperature_sensor_2:"Темп. 2:",temperature_sensor_3:"Темп. 3:",temperature_sensor_4:"Темп. 4:"},ke={capacity:"Ємність",time:"Час","grid-solar":"Мережа/Сонячна",load:"Навантаження","total-voltage":"Загальна напруга",current:"Струм",mosfetTemp:"Темп. MOS",delta:"Дельта",temperature_sensor:"Темп",balancing:"Балансування",volt:"В",charge:"Заряд",discharge:"Розряд",remaining:"Залишок"},Ae={common:Ce,config:Se,switches:we,stats:$e,html_texts:ke},Ee={title:"Card JK BMS",description:"Un card Home Assistant personalizabil care imită ecranul JK BMS",version:"Versiune"},Me={language:"Limba",title:"Titlu",prefix:"Prefixul senzorilor",cellCount:"Număr de celule",cellColumns:"Număr de coloane",cellLayout:"Aranjament celule",layout:"Aranjament general",deltaVoltageUnit:"Unitate diferență tensiune",cellColorMode:"Mod colorare celule",cellOrientation:"Orientare celule",minCellVoltage:"Tensiune minimă celulă (V)",maxCellVoltage:"Tensiune maximă celulă (V)",manualAssignment:"Atribuire manuală entități",tempSensorsCount:"Număr senzori temperatură disponibili",hasHeater:"Opțiunea încălzitor este utilizată"},Oe={charge:"Încărcare",discharge:"Descărcare",balance:"Echilibrare",heater:"Încălzitor"},Te={power:"Putere:",capacity:"Capacitate:",cycleCapacity:"Cap. totală:",averageCellV:"Medie celule:",balanceCurrent:"Curent echilibrare:",stateOfCharge:"SOC:",remainingAmps:"Rămase:",cycles:"Cicluri:",delta:"Diferență tensiune:",mosfetTemp:"Temp. MOSFET:",temperature_sensor_1:"Temp. 1:",temperature_sensor_2:"Temp. 2:",temperature_sensor_3:"Temp. 3:",temperature_sensor_4:"Temp. 4:"},Ve={capacity:"Capacitate",time:"Timp","grid-solar":"Rețea/Solar",load:"Consum","total-voltage":"Tensiune totală",current:"Curent",mosfetTemp:"Temp. MOSFET",delta:"Diferență",temperature_sensor:"Temp",balancing:"Echilibrare",volt:"V",charge:"Încărcare",discharge:"Descărcare",remaining:"Rămas"},ze={common:Ee,config:Me,switches:Oe,stats:Te,html_texts:Ve},De={title:"JK BMS Karte",description:"Eine anpassbare Home Assistant Karte, die den JK BMS Bildschirm nachbildet",version:"Version"},Ne={language:"Sprache",title:"Titel",prefix:"Präfix der Sensoren",cellCount:"Anzahl der Zellen",cellColumns:"Anzahl der Spalten",cellLayout:"Zellen-Layout",layout:"Layout",deltaVoltageUnit:"Einheit der Spannungsdifferenz",cellColorMode:"Zellen-Farbmodus",cellOrientation:"Zellen-Ausrichtung",minCellVoltage:"Min. Zellspannung (V)",maxCellVoltage:"Max. Zellspannung (V)",manualAssignment:"Manuelle Entitäten-Zuweisung",tempSensorsCount:"Anzahl verfügbarer Temperatursensoren",hasHeater:"Heizungs-Option wird verwendet"},Pe={charge:"Laden",discharge:"Entladen",balance:"Balancing",heater:"Heizung"},Ie={power:"Leistung:",capacity:"Kapazität:",cycleCapacity:"Zyklus-Kap.:",averageCellV:"Durchschn. V:",balanceCurrent:"Balancing-Strom:",stateOfCharge:"SOC:",remainingAmps:"Verbleibend:",cycles:"Zyklen:",delta:"Spannungsdiff.:",mosfetTemp:"MOS Temp:",temperature_sensor_1:"Temp. 1:",temperature_sensor_2:"Temp. 2:",temperature_sensor_3:"Temp. 3:",temperature_sensor_4:"Temp. 4:"},Le={capacity:"Kapazität",time:"Zeit","grid-solar":"Netz/Solar",load:"Last","total-voltage":"Gesamtspannung",current:"Stromstärke",mosfetTemp:"MOS Temp",delta:"Differenz",temperature_sensor:"Temp",balancing:"Balancing",volt:"V",charge:"Laden",discharge:"Entladen",remaining:"Restzeit"},Ue={common:De,config:Ne,switches:Pe,stats:Ie,html_texts:Le};const He={hass:null},Fe={en:Object.freeze({__proto__:null,common:ve,config:me,default:xe,html_texts:ye,stats:be,switches:fe}),uk:Object.freeze({__proto__:null,common:Ce,config:Se,default:Ae,html_texts:ke,stats:$e,switches:we}),ro:Object.freeze({__proto__:null,common:Ee,config:Me,default:ze,html_texts:Ve,stats:Te,switches:Oe}),de:Object.freeze({__proto__:null,common:De,config:Ne,default:Ue,html_texts:Le,stats:Ie,switches:Pe})};function Re(e,t="",n=""){try{let l=He.cardConfig?.language,s=localStorage.getItem("selectedLanguage");null===s&&(s=localStorage.getItem("assist_debug_language")),null===s&&(s=localStorage.getItem("editor-language")),null===s&&(s="en"),s=s.replace(/['"]+/g,"").replace("-","_");const a=l||He.hass?.selectedLanguage||He.hass?.locale?.language||He.hass?.language||s;let i;try{i=e?.split(".").reduce(((e,t)=>e[t]),Fe[a])}catch(t){i=e?.split(".")?.reduce(((e,t)=>e[t]),Fe.en)}return void 0===i&&(i=e?.split(".")?.reduce(((e,t)=>e[t]),Fe.en)),""!==t&&""!==n&&(i=i.replace(t,n)),i}catch(t){return e}}const je=(e,t)=>{const n=e?.entities[t]?.toString()?.trim();return n&&n.length>1?n:t?.toString()},Be=(e,t,n,l="sensor")=>{if(!e)return;e.stopPropagation();const s=je(t,n),a=s.includes("sensor.")||s.includes("switch.")||s.includes("number.")||s.includes("binary_sensor.")?s:l+"."+t?.prefix+"_"+s;let i=new CustomEvent("hass-more-info",{detail:{entityId:a},composed:!0});e.target.dispatchEvent(i)},Ke=(e,t,n,l=2,s="",a="sensor")=>{const i=je(t,n);if(!i)return s;const r=i.includes("sensor.")||i.includes("switch.")||i.includes("number.")||i.includes("binary_sensor.")?i:"".concat(a,".").concat(t.prefix,"_").concat(i),c=e?.states[r],o=c?.state,_=Number(o);return isNaN(_)?o??s:_.toFixed(l)},We=(e="V",t)=>{const n="string"==typeof t?parseFloat(t):t;if(isNaN(n))return"-";if("mV"===e)return"".concat((1e3*n).toFixed(0)," mV");const l=n.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:3});return"".concat(l," V")};var Je,Ze,qe,Ge,Qe,Xe,Ye,et,tt,nt,lt,st,at,it;let rt=class extends re{constructor(){super(...arguments),this.minCellId="",this.maxCellId="",this.maxDeltaV=0,this.shouldBalance=!1}_navigate(e,t,n="sensor"){Be(e,this.config,t,n)}getState(e,t=2,n="",l="sensor"){return Ke(this.hass,this.config,e,t,n,l)}_renderSwitch(t,n){const l=this.getState(t,0,"","switch"),s="on"===l?"status-on":"status-off";return j(Je||(Je=e(['\n
',"\n
\n "])),(e=>this._navigate(e,t,"switch")),Re("switches."+n),s,l.toUpperCase())}configOrEnum(e){return je(this.config,e)}render(){if(He.hass=this.hass,!this.hass||!this.config)return j(Ze||(Ze=e([""])));const t=this.config.title||"Bat 1";this.maxDeltaV=parseFloat(this.getState(ue.delta_cell_voltage,3,"0"));const n=parseFloat(this.getState(ue.balancing_current,2,"0")),l=parseFloat(this.getState(ue.power,2,"0")),s=Number(this.getState(ue.balance_trigger_voltage,2,"","number"));this.shouldBalance=this.maxDeltaV>=s;const a=l>0?"power-positive":l<0?"power-negative":"power-even",i=n>0?"balance-positive":n<0?"balance-negative":"balance-even",r=this.shouldBalance?"delta-needs-balancing":"delta-ok",c=this.getState(ue.total_runtime_formatted),o=c&&"unknown"!=c?j(qe||(qe=e([" | ",': ',""])),Re("html_texts.time"),c.toUpperCase()):"";return j(Ge||(Ge=e(['\n \n
\n
\n
\n\n
\n ',"\n ","\n ","\n ","\n
\n \n ",'\n\n
\n
\n
\n '," ","\n
\n ",' '," A\n ",'\n
\n\n
\n
\n '," A\n
\n ",' \n
\n\n \n \n \n\n
\n ',"\n
\n \n "])),(e=>this._navigate(e,ue.total_runtime_formatted)),t,o,"1"==this.config.hasHeater?"4":"3",this._renderSwitch(ue.charging,"charge"),this._renderSwitch(ue.discharging,"discharge"),this._renderSwitch(ue.balancer,"balance"),"1"==this.config.hasHeater?this._renderSwitch(ue.heater,"heater"):"",this._renderError(),(e=>this._navigate(e,ue.total_voltage)),this.getState(ue.total_voltage),Re("html_texts.volt"),Re("stats.power"),a,(e=>this._navigate(e,ue.power)),this.getState(ue.power),Re("stats.capacity"),(e=>this._navigate(e,ue.total_battery_capacity_setting)),this.getState(ue.total_battery_capacity_setting),Re("stats.cycleCapacity"),(e=>this._navigate(e,ue.total_charging_cycle_capacity)),this.getState(ue.total_charging_cycle_capacity),Re("stats.averageCellV"),(e=>this._navigate(e,ue.average_cell_voltage)),this.getState(ue.average_cell_voltage,3),Re("html_texts.volt"),Re("stats.balanceCurrent"),i,n.toFixed(1),this._renderTemps(1),(e=>this._navigate(e,ue.current)),this.getState(ue.current),Re("stats.stateOfCharge"),(e=>this._navigate(e,ue.state_of_charge)),this.getState(ue.state_of_charge),Re("stats.remainingAmps"),(e=>this._navigate(e,ue.capacity_remaining)),this.getState(ue.capacity_remaining),Re("stats.cycles"),(e=>this._navigate(e,ue.charging_cycles)),this.getState(ue.charging_cycles),Re("stats.delta"),r,(e=>this._navigate(e,ue.delta_cell_voltage)),We(this.config.deltaVoltageUnit,this.maxDeltaV),Re("stats.mosfetTemp"),(e=>this._navigate(e,ue.power_tube_temperature)),this.getState(ue.power_tube_temperature),this._renderTemps(2),this.config.cellColumns??2,this._renderCells("bankMode"==this.config.cellLayout))}updated(){requestAnimationFrame((()=>this._updateFlowLine()))}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this._updateFlowLine.bind(this))}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("resize",this._updateFlowLine.bind(this))}_renderError(){const t=this.getState(ue.errors,0);return t.trim().length<=1||"0"==t?j(Qe||(Qe=e([""]))):j(Xe||(Xe=e(['',""])),t)}_renderTemps(t){const n=[],l=this.config?.tempSensorsCount??0;for(let s=t;s<=l;s+=2)n.push(j(Ye||(Ye=e(["\n
",' \n \n ',"\n ","\n \n ","\n
\n "])),t,(e=>this._navigate(e,ue["cell_voltage_".concat(t)])),t.toString().padStart(2,"0"),i?j(st||(st=e([''," ",""])),i,n,Re("html_texts.volt")):j(at||(at=e([""," ",""])),n,Re("html_texts.volt")),r)}_updateFlowLine(){const e=parseFloat(this.getState(ue.balancing_current,3,"0")),t=this.renderRoot.querySelector("#cell-".concat(this.minCellId)),n=this.renderRoot.querySelector("#cell-".concat(this.maxCellId)),l=this.renderRoot.querySelector("#flow-path");if(!l)return;if(!this.shouldBalance&&0===e||!t||!n)return l.setAttribute("d",""),void(l.style.display="none");l.style.display="inline";const s=(this.renderRoot instanceof ShadowRoot?this.renderRoot.host:this).getBoundingClientRect(),a=t.getBoundingClientRect(),i=e=>{const t=e.left+e.width/2this.fetchHistory()),6e4)}_navigate(e,t,n="sensor"){Be(e,this.config,t,n)}updated(e){e.has("hass")&&this._updateRealtimeHistory()}_updateRealtimeHistory(){if(!this.hass||!this.config)return;const e=[ue.total_voltage,ue.current,ue.power_tube_temperature,ue.delta_cell_voltage],t=Date.now()-36e5;e.forEach((e=>{const n=this._resolveEntityId(e);if(!n)return;const l=this.hass.states[n];if(!l)return;const s=parseFloat(l.state),a=new Date(l.last_updated).getTime();if(isNaN(s))return;const i=this.historyData[n]||[],r=i.length>0?i[i.length-1]:null;if(!r||a>r.time){const e=[...i,{state:s,time:a}];for(;e.length>0&&e[0].timee)),t=[...new Set(e)];if(0===t.length)return;const n=new Date,l=new Date(n.getTime()-36e5);try{const e=await this.hass.callWS({type:"history/history_during_period",start_time:l.toISOString(),end_time:n.toISOString(),entity_ids:t,minimal_response:!0,no_attributes:!0});if(e){const t={};Object.keys(e).forEach((n=>{const l=e[n];Array.isArray(l)&&(t[n]=l.map((e=>({state:parseFloat(e.s||e.state),time:1e3*(e.lu||new Date(e.last_updated).getTime()/1e3)}))).filter((e=>!isNaN(e.state))))})),this.historyData={...this.historyData,...t}}}catch(e){console.warn("JK BMS Card: Failed to fetch history via WS",e)}}configOrEnum(e){return je(this.config,e)}_resolveEntityId(e){const t=this.configOrEnum(e);if(t)return t.includes(".")?t:"sensor.".concat(this.config.prefix,"_").concat(t)}_renderSparkline(t,n){const l=this._resolveEntityId(t);if(!l||!this.historyData[l]||this.historyData[l].length<2)return j(ct||(ct=e(['\n
'])));const s=this.historyData[l];let a=1/0,i=-1/0;s.forEach((e=>{const t=Number(Number(e.state).toFixed(3));ti&&(i=t)}));let r=i-a;if(r<1){const e=(a+i)/2;a=e-.5,i=e+.5}else a-=.05*r,i+=.05*r;const c=s[0].time,o=s[s.length-1].time-c;if(o<=0)return j(ot||(ot=e([""])));let _="";return s.forEach(((e,t)=>{const n=(e.time-c)/o*100,l=100-(e.state-a)/(i-a)*100;_+="".concat(0===t?"M":"L"," ").concat(n.toFixed(1),",").concat(l.toFixed(1)," ")})),j(_t||(_t=e(['\n
\n \n \n \n \n
\n '])),_,n,_,n)}getState(e,t=2,n="",l="sensor"){return Ke(this.hass,this.config,e,t,n,l)}render(){if(He.hass=this.hass,!this.hass||!this.config)return j(dt||(dt=e([""])));const t=this.getState(ue.hardware_version),n=this.getState(ue.software_version),l=this.config.title||j(ht||(ht=e(["Bat 1 - ",": "," Ah
\n HW: "," | SW: ",""])),Re("html_texts.capacity"),this.getState(ue.total_battery_capacity_setting),t,n),s=this.getState(ue.total_runtime_formatted),a=s&&"unknown"!=s?j(gt||(gt=e(["",": ",""])),Re("html_texts.time"),s.toUpperCase()):"",i=parseFloat(this.getState(ue.current)),r=this.getState(ue.charging_power),c=this.getState(ue.discharging_power),o=i>0,_=i<0,d="on"===this.getState(ue.charging,0,"","switch"),h="on"===this.getState(ue.discharging,0,"","switch"),g="on"===this.getState(ue.balancing,0,"","binary_sensor");parseFloat(this.getState(ue.balancing_current));const p=this.getState(ue.state_of_charge);this.getState(ue.total_battery_capacity_setting);const u=this.getState(ue.total_voltage),v=this.getState(ue.power_tube_temperature),m=this.getState(ue.total_charging_cycle_capacity),f=parseFloat(this.getState(ue.charging_cycles)).toFixed(0).toString();return this.tempSensorsCount=this.config.tempSensorsCount,this.calculateDynamicMinMax(),j(pt||(pt=e(['\n \n
\n
\n\n
\n \x3c!-- Solar/Grid Node --\x3e\n
\n
\n \n
\n
','
\n
\n ',': ','\n
\n
\n
\n
\n
\n\n \x3c!-- Reactor (SOC) --\x3e\n
\n
\n
SoC:
\n
',"%
\n ",'\n
\n
\n\n \x3c!-- Load Node --\x3e\n
\n
\n \n
\n
','
\n
\n ',': ','\n
\n \n
\n
\n
\n
\n\n \x3c!-- SVG Flow Lines --\x3e\n \n \x3c!-- Left path (Charge) - Rough coordinates for now, will refine --\x3e\n \n \x3c!-- Right path (Discharge) --\x3e\n \n\n \n \n \n \n \n \n
\n\n \x3c!-- Stats Panels --\x3e\n
\n
\n
\n ','\n
',':
\n
\n
\n\n
\n ','\n
',':
\n
\n
\n
\n\n
\n
\n ','\n
',':
\n
\n
\n\n
\n ','\n
'," ",':
\n
\n
\n
','
\n
\n
\n \n
\n
\n
\n
\n
\n \n \x3c!-- Add number of cycles --\x3e\n
\n
\n
','
\n
\n
\n \n
\n
\n
\n
\n
\n
\n\n \x3c!-- Cells --\x3e\n
\n ',"\n
\n\n \n "])),(e=>this._navigate(e,ue.software_version)),l,(e=>this._navigate(e,ue.total_runtime_formatted)),a,(e=>this._navigate(e,ue.charging,"switch")),o?"var(--solar-color)":"#444",Re("html_texts.grid-solar"),Re("html_texts.charge"),d?"status-on":"status-off",d?"ON":"OFF",(e=>this._navigate(e,ue.charging_power)),r,g?"reactor-ring-balancing":"reactor-ring-base",(e=>this._navigate(e,ue.state_of_charge)),p,g?j(ut||(ut=e(['
\n ','\n
\n '," ",'\n
\n
\n ',"\n ",'\n
\n\n \x3c!-- Right column (2 and 4) --\x3e\n
\n ',"\n ","\n
\n "])),t?a(ue.temperature_sensor_1,1):"",l?a(ue.temperature_sensor_3,3):"",n?a(ue.temperature_sensor_2,2):"",s?a(ue.temperature_sensor_4,4):"")}_renderCells(){const e=[],t="bankMode"===this.config.cellLayout,n=this.config.cellColumns||2,l=this.config.cellCount||16,s=Math.floor(l/n),a=t?Math.ceil(l/n):l,i=l%n;for(let r=1;r<=a;r++){const c=[];if(t)if(i&&r===a)c.push(l);else for(let e=0;e100&&(d=100));const h=parseFloat(s),g=!isNaN(h)&&h>0,p=this.config.cellColorMode||"progress";let u="";if("gradient"===p){const e=[{r:180,g:60,b:60},{r:180,g:180,b:50},{r:60,g:180,b:60},{r:60,g:120,b:200},{r:90,g:60,b:200}];let t=Math.floor(d/25);t>=4&&(t=3);const n=d%25/25,l=e[t],s=e[t+1],a=Math.round(l.r+(s.r-l.r)*n),i=Math.round(l.g+(s.g-l.g)*n),r=Math.round(l.b+(s.b-l.b)*n);u="background: rgba(".concat(a,", ").concat(i,", ").concat(r,", 0.85);")}const v="gradient"===p?"background: rgba(0, 0, 0, 0.25); padding: 1px 3px; border-radius: 3px;":"",m=this.config.cellOrientation||"horizontal",f="vertical"===m?"cell-item cell-item-vertical":"cell-item";t.push(j(yt||(yt=e(['\n
\n ',"\n ","\n
\n "])),f,u,"progress"===p?j(xt||(xt=e(['\n
'])),d):"","vertical"===m?j(Ct||(Ct=e(['\n ','\n \n ','\n '," ","\n \n ","\n "])),(e=>this._navigate(e,ue["cell_voltage_".concat(n)])),String(n).padStart(2,"0"),r,v,l,Re("html_texts.volt"),g?j($t||($t=e(['\n .icon-circle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n justify-self: start;\n }\n\n .icon-stats > :nth-child(2) {\n justify-self: end;\n padding-right: 5px;\n }\n\n .icon-stats > .stat-value {\n font-size: 1.2em;\n font-weight: bold;\n }\n\n /* Cell Grid */\n\n .cell-grid {\n display: grid;\n gap: 6px;\n }\n\n .grid-1 {\n grid-template-columns: 1fr;\n }\n\n .grid-2 {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .grid-3 {\n grid-template-columns: repeat(3, 1fr);\n }\n\n .grid-4 {\n grid-template-columns: repeat(4, 1fr);\n }\n\n .grid-5 {\n grid-template-columns: repeat(5, 1fr);\n }\n\n .grid-6 {\n grid-template-columns: repeat(6, 1fr);\n }\n\n .grid-7 {\n grid-template-columns: repeat(7, 1fr);\n }\n\n .grid-8 {\n grid-template-columns: repeat(8, 1fr);\n }\n\n .cell-item {\n background: var(--secondary-background-color, #2a2a2a);\n border-radius: 8px;\n padding: 4px 6px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 4px;\n font-size: 0.85em;\n position: relative;\n overflow: hidden;\n z-index: 0;\n }\n\n .cell-item-vertical {\n flex-direction: column;\n justify-content: center;\n padding: 6px 4px;\n gap: 3px;\n }\n\n .cell-item-vertical .cell-id {\n margin-right: 0;\n margin-bottom: 2px;\n }\n\n .cell-item-bg {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n background: rgba(48, 144, 199, 0.2);\n z-index: -1;\n transition: width 0.5s ease-out;\n }\n\n .cell-id {\n display: inline-block;\n padding: 0.1rem 0.25rem;\n background-color: #195569;\n color: #e4f3f8;\n border-radius: 999px;\n font-weight: 500;\n font-size: 1em;\n min-width: 1.4rem;\n text-align: center;\n margin-right: 3px;\n flex-shrink: 0;\n }\n\n .cell-volts {\n color: var(--primary-text-color);\n font-family: monospace;\n font-size: 1.2em;\n }\n\n .cell-res {\n color: var(--secondary-text-color);\n font-size: 1em;\n font-family: monospace;\n }\n\n .cell-low {\n color: #FFA500;\n }\n\n /* Example warning color */\n\n .cell-high {\n color: var(--discharge-color);\n }\n\n .status-on {\n color: var(--accent-color);\n font-weight: bold;\n }\n\n .status-off {\n color: var(--disabled-text-color, #666);\n font-weight: bold;\n }\n\n .clickable {\n cursor: pointer;\n }\n\n /* SVG Overlay for Lines */\n\n .flow-svg {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1;\n }\n\n .flow-svg path {\n fill: none;\n stroke-width: 2;\n stroke-dasharray: 8;\n }\n\n .path-charge {\n stroke: var(--solar-color);\n animation: flow 1s linear infinite;\n }\n\n .path-discharge {\n stroke: var(--discharge-color);\n animation: flow 1s linear infinite;\n }\n\n .path-inactive {\n stroke: #444;\n stroke-dasharray: 0;\n animation: none;\n }\n\n @keyframes flow {\n from {\n stroke-dashoffset: 16;\n }\n to {\n stroke-dashoffset: 0;\n }\n }\n\n /* Sparkline CSS */\n /* Sparkline CSS */\n\n .metric-group {\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 8px 0;\n z-index: 1;\n }\n\n .sparkline-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n opacity: 0.3;\n z-index: -1;\n pointer-events: none;\n }\n\n .sparkline-svg {\n width: 100%;\n height: 100%;\n }\n\n .spark-line {\n fill: none;\n stroke-width: 2;\n vector-effect: non-scaling-stroke;\n }\n\n .spark-area {\n fill-opacity: 0.2;\n stroke: none;\n }\n "]))),t([he()],At.prototype,"hass",void 0),t([he()],At.prototype,"config",void 0),t([he()],At.prototype,"historyData",void 0),At=t([oe("jk-bms-core-reactor-layout")],At);const Vt="1.2.10";console.groupCollapsed("%c🔋 JK-BMS Battery Card%c ready! 🚀 (v".concat(Vt,")"),"background: linear-gradient(to right, #41cd52, #3090c7); color: white; font-weight: bold; padding: 2px 8px; border-radius: 6px;","background: none; color: #AAA; font-style: italic;"),console.log("%c📖 Docs:","color: #41cd52; font-weight: bold;","https://github.com/Pho3niX90/jk-bms-card"),console.groupEnd();let zt=Tt=class extends re{setConfig(e){this._config=Tt.getStubConfig(),this._config={...this._config,...e},He.cardConfig=this._config}static getStubConfig(){return{language:"",title:Re("title"),prefix:"jk_bms",cellCount:16,cellColumns:2,cellLayout:"bankMode",tempSensorsCount:0,hasHeater:0,entities:Object.keys(ue).reduce(((e,t)=>(e[t]="",e)),{})}}static async getConfigElement(){return await Promise.resolve().then((function(){return It})),document.createElement(ge)}getCardSize(){return 3}render(){return He.hass=this.hass,this.hass&&this._config?"core-reactor"===this._config.layout?j(Mt||(Mt=e([""])),this.hass,this._config):j(Ot||(Ot=e(["\n \n "])),this.hass,this._config):j(Et||(Et=e([""])))}};var Dt,Nt;t([he()],zt.prototype,"hass",void 0),t([he()],zt.prototype,"_config",void 0),zt=Tt=t([oe(pe)],zt),window.customCards.push({type:pe,name:"JK BMS Card",preview:!0,description:Re("common.description"),configurable:!0});let Pt=class extends re{constructor(){super(...arguments),this._computeLabelCallback=e=>Re("config.".concat(e.name))??e.name}setConfig(e){this._config={...this._config,...e}}render(){if(!this._config||!this.hass)return j(Dt||(Dt=e([""])));const t=Object.values(ue).map((e=>({name:e,selector:{entity:{}}})));return j(Nt||(Nt=e(["\n\t\t\t\n\t\t"])),this.hass,this._config,this._computeLabelCallback.bind(this),[{type:"grid",title:Re("config.title"),schema:[{type:"grid",schema:[{name:"title",selector:{text:{}}}]}]},{type:"grid",title:Re("config.language"),schema:[{type:"grid",schema:[{name:"language",selector:{select:{options:[{label:"Auto (follow HA)",value:""},{label:"English",value:"en"},{label:"Română",value:"ro"},{label:"Українська",value:"uk"},{label:"German",value:"de"}],mode:"dropdown"}}}]}]},{type:"grid",title:Re("config.prefix"),schema:[{type:"grid",schema:[{name:"prefix",selector:{text:{}}}]}]},{type:"grid",title:Re("config.layout"),schema:[{type:"grid",schema:[{name:"layout",selector:{select:{options:[{label:"Default",value:"default"},{label:"Core Reactor",value:"core-reactor"}]}}},{name:"deltaVoltageUnit",selector:{select:{options:[{label:"Volts (V)",value:"V"},{label:"Millivolts (mV)",value:"mV"}]}}},{name:"minCellVoltage",selector:{number:{min:2,max:4,step:.01,mode:"box"}}}]},{type:"grid",column_min_width:"200px",schema:[{name:"cellColorMode",selector:{select:{options:[{label:"Progress Bar",value:"progress"},{label:"Voltage Gradient",value:"gradient"}]}}},{name:"cellOrientation",selector:{select:{options:[{label:"Vertical",value:"vertical"},{label:"Horizontal",value:"horizontal"}]}}},{name:"maxCellVoltage",selector:{number:{min:2,max:4,step:.01,mode:"box"}}}]}]},{type:"grid",title:Re("config.cellCount"),schema:[{type:"grid",schema:[{name:"cellCount",selector:{number:{min:2,max:48,step:2}}},{name:"cellColumns",selector:{number:{min:1,max:8,step:1}}},{name:"cellLayout",selector:{select:{options:[{label:"Incremental",value:"incremental"},{label:"Bank Mode",value:"bankMode"}]}}}]}]},{type:"grid",title:Re("config.tempSensorsCount"),schema:[{type:"grid",schema:[{name:"tempSensorsCount",selector:{number:{min:0,max:4,step:2}}}]}]},{type:"grid",title:Re("config.hasHeater"),schema:[{type:"grid",schema:[{name:"hasHeater",selector:{select:{multiple:!1,mode:"list",options:[{label:"Yes",value:"1"},{label:"No",value:"0"}]}}}]}]},{type:"expandable",title:Re("config.manualAssignment"),schema:[{name:"entities",type:"grid",schema:t}]}],this._valueChanged.bind(this))}_valueChanged(e){!function(e,t,n,l){l=l||{},n=null==n?{}:n;const s=new Event(t,{bubbles:void 0===l.bubbles||l.bubbles,cancelable:Boolean(l.cancelable),composed:void 0===l.composed||l.composed});s.detail=n,e.dispatchEvent(s)}(this,"config-changed",{config:e.detail.value})}};t([he()],Pt.prototype,"hass",void 0),t([he()],Pt.prototype,"_config",void 0),t([he()],Pt.prototype,"lovelace",void 0),Pt=t([oe(ge)],Pt);var It=Object.freeze({__proto__:null,get JkBmsCardEditor(){return Pt}});export{Vt as CARD_VERSION,zt as JkBmsCard};