esphome-device-builder-frontend 0.1.331__tar.gz → 0.1.332__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {esphome_device_builder_frontend-0.1.331/esphome_device_builder_frontend.egg-info → esphome_device_builder_frontend-0.1.332}/PKG-INFO +1 -1
- esphome_device_builder_frontend-0.1.331/esphome_device_builder_frontend/app.459dc50ca8cdfa93.js → esphome_device_builder_frontend-0.1.332/esphome_device_builder_frontend/app.68fb37bca6569874.js +3 -3
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/index.html +1 -1
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332/esphome_device_builder_frontend.egg-info}/PKG-INFO +1 -1
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend.egg-info/SOURCES.txt +2 -2
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/pyproject.toml +1 -1
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/LICENSE +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/MANIFEST.in +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/README.md +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/16.70a4e106a196a44a.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/170.0a95e6a58f6783c9.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/204.9e71e35f7f796d87.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/377.cf7eba64c95f57b7.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/508.9dac8def7150dfc3.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/57.e771fbe8f5fc4c0a.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/577.413ba4865ab075af.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/602.3377f7caecba040a.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/658.bfbb4f73993720ef.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/778.be5afb20ddef4c5b.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/795.707276f1f502691c.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/820.23206f1b0e2fd64e.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/839.48798448f7e34101.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/846.226462cb67c4ba40.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/870.2a518ff19d7db391.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/886.dab7ca741c745068.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/945.9dcf314922bd6a88.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/967.79b76d4257be9be3.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/979.bbab3ab9a82f95d8.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/98.b15bee24d06c813c.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/990.3abfa9ff422f3763.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/__init__.py +0 -0
- /esphome_device_builder_frontend-0.1.331/esphome_device_builder_frontend/app.459dc50ca8cdfa93.js.LICENSE.txt → /esphome_device_builder_frontend-0.1.332/esphome_device_builder_frontend/app.68fb37bca6569874.js.LICENSE.txt +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/board/default.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/logo/esphome-color.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/logo/esphome-favicon.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/logo/esphome-mono-black.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/logo/esphome-mono-white.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/logo/ha.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/direction.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/driven_signal.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/ground_switch.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/output_active_low.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/output_open_drain.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/output_standard.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/pull_resistor.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/assets/pin-wiring/vcc_switch.svg +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/vendors.15351e3132852a11.js +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend/vendors.15351e3132852a11.js.LICENSE.txt +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend.egg-info/dependency_links.txt +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend.egg-info/not-zip-safe +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/esphome_device_builder_frontend.egg-info/top_level.txt +0 -0
- {esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/setup.cfg +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! LICENSE: app.
|
|
1
|
+
/*! LICENSE: app.68fb37bca6569874.js.LICENSE.txt */
|
|
2
2
|
(()=>{var e,t,i,o={9442(e,t,i){"use strict";var o=i(5077);let r=(0,o.AH)`
|
|
3
3
|
:host {
|
|
4
4
|
display: flex;
|
|
@@ -21838,7 +21838,7 @@ read/write operations will fail.
|
|
|
21838
21838
|
Try checking the chip connections or removing
|
|
21839
21839
|
any other hardware connected to IOs.`)}catch(e){throw new l("Unable to verify flash chip connection "+e)}return t}flashSizeBytes(e){let t=-1;return this.transport.trace(`Flash size string ${e}`),-1!==e.toString().indexOf("KB")?t=1024*parseInt(e.toString().slice(0,e.toString().indexOf("KB"))):-1!==e.toString().indexOf("MB")&&(t=1024*parseInt(e.toString().slice(0,e.toString().indexOf("MB")))*1024),this.transport.trace(`Flash size in bytes ${t}`),t}parseFlashSizeArg(e){if(void 0===this.chip.FLASH_SIZES[e])throw new l("Flash size "+e+" is not supported by this chip type. Supported sizes: "+this.chip.FLASH_SIZES);return this.chip.FLASH_SIZES[e]}async _updateImageFlashParams(e,t,i="keep",o="keep",r="keep"){if(this.debug(`_update_image_flash_params ${r} ${i} ${o}`),e.length<8||t!=this.chip.BOOTLOADER_FLASH_OFFSET)return e;if("keep"===r&&"keep"===i&&"keep"===o)return this.info("Not changing the image"),e;let a=e[0],n=e[2],s=e[3];if(a!==this.ESP_IMAGE_MAGIC)return this.info("Warning: Image file at 0x"+t.toString(16)+" doesn't look like an image file, so not changing any flash settings."),e;try{(await ic(this.chip,e)).verify()}catch(i){return this.debug(`Warning: Image file at 0x${t.toString(16)} is not a valid ${this.chip.CHIP_NAME} image, so not changing any flash settings.`),e}let l="ESP8266"!==this.chip.CHIP_NAME&&49===e[23];"keep"!==i&&(n=({qio:0,qout:1,dio:2,dout:3})[i]);let C=15&s;"keep"!==o&&(C=({"40m":0,"26m":1,"20m":2,"80m":15})[o]);let d=240&s;if("keep"!==r)if("detect"===r){this.info("Configuring flash size...");let e=await this.detectFlashSize();this.info("Detected flash size set to "+e),d=this.parseFlashSizeArg(e)}else d=this.parseFlashSizeArg(r);let H=n<<8|C+d;this.info("Flash params set to "+H.toString(16));let V=new Uint8Array(e);if(e[2]!==n&&(V[2]=n),e[3]!==C+d&&(V[3]=C+d),l){let e=await ic(this.chip,V),t=V.slice(0,e.datalength),i=V.slice(e.datalength+e.SHA256_DIGEST_LEN),o=new Uint8Array(await crypto.subtle.digest("SHA-256",i)),r=new Uint8Array(t.length+o.length+i.length);r.set(t,0),r.set(o,t.length),r.set(i,t.length+o.length);let a=r.slice(e.datalength,e.datalength+e.SHA256_DIGEST_LEN);return this.transport.hexify(o)===this.transport.hexify(a)?this.info("SHA digest in image updated"):this.info(`WARNING: SHA recalculation for binary failed!
|
|
21840
21840
|
Expected calculated SHA: ${this.transport.hexify(o)}
|
|
21841
|
-
SHA stored in binary: ${this.transport.hexify(a)}`),r}return V}async writeFlash(e){let t,i;if(this.debug("EspLoader program"),"keep"!==e.flashSize){let t=this.flashSizeBytes(e.flashSize);for(let i=0;i<e.fileArray.length;i++)if(e.fileArray[i].data.length+e.fileArray[i].address>t)throw new l(`File ${i+1} doesn't fit in the available flash`)}!0===this.IS_STUB&&!0===e.eraseAll&&await this.eraseFlash();for(let o=0;o<e.fileArray.length;o++){let r;if(this.debug("Data Length "+e.fileArray[o].data.length),t=e.fileArray[o].data,this.debug("Image Length "+t.length),0===t.length){this.debug("Warning: File is empty");continue}t=tN(t,4),i=e.fileArray[o].address,t=await this._updateImageFlashParams(t,i,e.flashMode,e.flashFreq,e.flashSize);let a=null;e.calculateMD5Hash&&(a=e.calculateMD5Hash(t),this.debug("Image MD5 "+a));let n=t.length;e.compress?(t=tT(t,{level:9}),r=await this.flashDeflBegin(n,t.length,i)):r=await this.flashBegin(n,i);let s=0,C=0,d=t.length;e.reportProgress&&e.reportProgress(o,0,d);let H=new Date,V=H.getTime(),c=5e3,L=new tD({chunkSize:1}),h=0;L.onData=function(e){h+=e.byteLength};let u=0;for(;u<t.length;){this.debug("Write loop "+i+" "+s+" "+r),this.info("Writing at 0x"+(i+(e.compress?h:C)).toString(16)+"... ("+Math.floor(100*(s+1)/r)+"%)");let a=Math.min(this.FLASH_WRITE_SIZE,t.length-u),n=t.slice(u,u+a),l=u+a>=t.length;if(e.compress){let e=h;L.push(n,l);let t=h-e,i=3e3;this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,t)>3e3&&(i=this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,t)),!1===this.IS_STUB&&(c=i),await this.flashDeflBlock(n,s,c),this.IS_STUB&&(c=i)}else{let e=n;n.length<this.FLASH_WRITE_SIZE&&(e=new Uint8Array(this.FLASH_WRITE_SIZE).fill(255)).set(n);let t=3e3;this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,e.length)>3e3&&(t=this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,e.length)),!1===this.IS_STUB&&(c=t),await this.flashBlock(e,s,c),this.IS_STUB&&(c=t)}C+=n.length,u+=a,s++,e.reportProgress&&e.reportProgress(o,C,d)}this.IS_STUB&&(e.compress?await this.flashDeflFinish(!1,c):await this.flashFinish(!1,c));let M=(H=new Date).getTime()-V;if(e.compress?this.info("Wrote "+n+" bytes ("+C+" compressed) at 0x"+i.toString(16)+" in "+M/1e3+" seconds."):this.info("Wrote "+C+" bytes at 0x"+i.toString(16)+" in "+M/1e3+" seconds."),a){this.info("File md5: "+a);let e=await this.flashMd5sum(i,n);if(this.info("Flash md5: "+e),new String(e).valueOf()!=new String(a).valueOf())throw new l("MD5 of file does not match data in flash!");this.info("Hash of data verified.")}}this.info("Leaving...")}async flashId(){this.debug("flash_id");let e=await this.readFlashId();this.info("Manufacturer: "+(255&e).toString(16));let t=e>>16&255;this.info("Device: "+(e>>8&255).toString(16)+t.toString(16)),this.info("Detected flash size: "+this.DETECTED_FLASH_SIZES[t])}async detectFlashSize(){this.debug("detectFlashSize");let e=await this.readFlashId(),t=this.DETECTED_FLASH_SIZES[e>>16&255];return t?this.info("Auto-detected Flash size: "+t):(t="4MB",this.info("Could not auto-detect Flash size. defaulting to 4MB")),t}async softReset(e){if(this.IS_STUB)if("ESP8266"!=this.chip.CHIP_NAME)throw new l("Soft resetting is currently only supported on ESP8266");else e?(await this.flashBegin(0,0),await this.flashFinish(!0)):await this.command(this.ESP_RUN_USER_CODE,void 0,void 0,!1);else e||(await this.flashBegin(0,0),await this.flashFinish(!1))}async after(e="hard_reset",t,i){switch(e){case"hard_reset":if(this.resetConstructors.hardReset){this.info("Hard resetting via RTS pin...");let e=this.resetConstructors.hardReset(this.transport,t);await e.reset()}break;case"soft_reset":this.info("Soft resetting..."),await this.softReset(!1);break;case"no_reset_stub":this.info("Staying in flasher stub.");break;case"custom_reset":if(i||this.info("Custom reset sequence not provided, doing nothing."),this.resetConstructors.customReset||this.info("Custom reset constructor not available, doing nothing."),this.resetConstructors.customReset&&i){this.info("Custom resetting using sequence "+i);let e=this.resetConstructors.customReset(this.transport,i);await e.reset()}break;default:this.info("Staying in bootloader."),this.IS_STUB&&this.softReset(!0)}}}var iu=i(8283),iM=i(8716);let ip=0;function im(){ip=Date.now()}function ig(e=6e3){return Date.now()-ip<e}async function ib(e){let t=e.getInfo(),i=[];try{i=await navigator.serial.getPorts()}catch{}return{fresh:i.filter(i=>{let o;return i!==e&&(o=i.getInfo(),void 0!==o.usbVendorId&&void 0!==o.usbProductId&&o.usbVendorId===t.usbVendorId&&o.usbProductId===t.usbProductId)}),cachedGranted:i.includes(e)}}async function i_(e,t){let{baudRate:i,bufferSize:o,timeoutMs:r=8e3,cancelled:a=()=>!1,onOpened:n}=t,s=Date.now()+r,l=null;for(;!a();){let{fresh:t}=await ib(e);for(let r of[...t,e]){if(!1===r.connected){l=Error("port device disconnected");continue}if(r.readable){if(r.readable.locked){l=Error("port stream already locked");continue}return r}try{return await r.open(o?{baudRate:i,bufferSize:o}:{baudRate:i}),n?.(r),r}catch(o){l=o;let e=o instanceof DOMException?o.name:"",t=o instanceof Error?o.message:"",i=r.readable;if("InvalidStateError"===e&&/already open/i.test(t)&&i&&!i.locked)return r}}if(Date.now()>=s){console.error("[Web Serial] Failed to reopen port:",l);break}if(a())break;await (0,iM.y)(200)}return null}function iA(e){let{usbVendorId:t,usbProductId:i}=e.getInfo();return 12346===t&&4097===i}function iw(){return"serial"in navigator?"available":"u">typeof window&&!window.isSecureContext?"insecure-context":"unsupported"}function iv(){return"available"===iw()}function iy(e){return e instanceof DOMException&&"NotFoundError"===e.name}let iS={25:"ESP32-H21",28:"ESP32-H4",31:"ESP32-E22",32:"ESP32-S31"};class ik extends Error{constructor(e){super(`${e} is not supported by browser flashing yet — download the firmware and flash it with esptool from the command line instead`),this.name="UnsupportedChipError",this.chipName=e}}async function iZ(e){let t;if(e.chip?.CHIP_NAME!=="ESP32-P4")return;try{[,t]=await e.command(20)}catch{return}if(t.length<16)return;let i=new DataView(t.buffer,t.byteOffset).getUint32(12,!0);if(18!==i)throw new ik(iS[i]??`unsupported ESP chip (chip id ${i})`)}function ix(){if("u"<typeof window||"0.0.0.0"!==window.location.hostname)return null;let e=new URL(window.location.href);return e.hostname="127.0.0.1",e.toString()}async function iO(e,t){im();let i=new tG(e,!1),o=new ih({transport:i,baudrate:115200,terminal:t?{clean:()=>{},writeLine:e=>t(e),write:e=>t(e)}:void 0}),r=[],a=o.debug;t&&(o.debug=(e,t)=>{r.push(e),r.length>80&&r.shift(),a.call(o,e,t)});try{let t=o.runStub.bind(o);return o.runStub=async()=>(await iZ(o),t()),{chipName:await o.main(),port:e,transport:i,loader:o}}catch(o){if(t){if(!(o instanceof ik))for(let e of r)t(e);t(`Error: ${(0,iu.u)(o)}`)}try{await i.disconnect()}catch{try{await e.close()}catch{}}throw o}finally{t&&(o.debug=a)}}async function i$(e){return im(),iO(await navigator.serial.requestPort(),e)}async function iE(e){return im(),(await e.chip.readMac(e)).toUpperCase()}async function iz(e){im();try{let t=await e.readFlash(65568,256);if(0xabcd5432!==new DataView(t.buffer,t.byteOffset,t.byteLength).getUint32(0,!0))return null;let i=new TextDecoder("utf-8"),o=(e,o)=>{let r=t.subarray(e,e+o),a=r.indexOf(0);return i.decode(r.subarray(0,-1===a?r.length:a))},r=o(16,32),a=o(48,32);if(!a)return null;return{board_id:a,version:r}}catch{return null}}async function iP(e,t,i,o){im(),await e.writeFlash({fileArray:[{data:t,address:i}],flashSize:"keep",flashMode:"keep",flashFreq:"keep",eraseAll:!1,compress:!0,reportProgress:(e,t,i)=>{im(),o?.({fileIndex:e,written:t,total:i,percent:Math.round(t/i*100)})}})}let iT={"ESP32-S2":{wdtConfig0:0x3f408094,wdtConfig1:0x3f408098,wdtWProtect:0x3f4080ac},"ESP32-S3":{wdtConfig0:0x60008098,wdtConfig1:0x6000809c,wdtWProtect:0x600080b0},"ESP32-C2":{wdtConfig0:0x60008084,wdtConfig1:0x60008088,wdtWProtect:0x6000809c},"ESP32-C3":{wdtConfig0:0x60008090,wdtConfig1:0x60008094,wdtWProtect:0x600080a8}};async function iR(e,t){let i=e.chip?.CHIP_NAME?iT[e.chip.CHIP_NAME]:void 0;if(!i)return!1;try{await t.setDTR(!1),await t.setRTS(!1)}catch{}try{await e.writeReg(i.wdtWProtect,0x50d83aa1),await e.writeReg(i.wdtConfig1,2e3),await e.writeReg(i.wdtConfig0,0xd0000102),await e.writeReg(i.wdtWProtect,0)}catch{}return await new Promise(e=>setTimeout(e,200)),!0}async function iF(e,t,i){await e.setDTR(!1),await e.setRTS(!0),await (0,iM.y)(t),await e.setRTS(!1),i>0&&await (0,iM.y)(i)}async function iD(e,t,i){await iR(e,t)||(iA(i)?await iF(t,200,200):await iF(t,100,0))}async function iB(e,t,i){im();try{await iD(e,t,i)}finally{await t.disconnect(),im()}}async function iI(e){im(),await e.disconnect()}},332(e,t,i){"use strict";function o(e){if(!e)return"";let t=e.replace(/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,"").replace(/[\t\r\n]/g,"");try{let e=new URL(t);if("http:"!==e.protocol&&"https:"!==e.protocol||t.slice(e.protocol.length).replace(/^[/\\]+/,"").split(/[/?#\\]/,1)[0].includes("@"))return"";return t}catch{return""}}function r(e){return a(e.address||e.ip,e.web_port)}function a(e,t){return null!=t&&e?o(`http://${e.startsWith("[")||!e.includes(":")?e:`[${e}]`}${80===t?"":`:${t}`}`):""}i.d(t,{Gv:()=>r,Nl:()=>a,hM:()=>o})},9757(e,t,i){"use strict";var o=i(5089),r=i(5016),a=i(2765),n=i(1150),s=i(4125);function l(e){let t=(0,s.MT)(e).find(e=>r.Xo.has(e.key));if(!t)return null;let i=(0,a.D)(e),o=null,l=null,C=null;for(let e=t.fromLine;e<t.toLine&&e<i.length;e++){let t=i[e];if(!t.trim()||t.trim().startsWith("#"))continue;let r=(0,s.p0)(t);C??=r,r===C&&(o??=(0,n.K)(t,"board"),l??=(0,n.K)(t,"variant"))}return{platform:(0,r.bk)(t.key),board:o,variant:l}}function C(e,t){return e!==(0,r.bk)(t.esphome.platform)}function d(e){return e.esphome.variant||e.esphome.mcu||null}function H(e,t){let i=d(t);return!!(e&&i&&(0,o.S)(e)!==(0,o.S)(i))}function V(e,t){return!!C(e.platform,t)||!!e.board&&e.board.toLowerCase()!==t.esphome.board.toLowerCase()||H(e.variant,t)}i.d(t,{GP:()=>l,LW:()=>H,cq:()=>d,nW:()=>V,tv:()=>C})},2765(e,t,i){"use strict";function o(e){let t=e.split(/\r?\n/),i=t.length-1;return t[i].endsWith("\r")&&(t[i]=t[i].slice(0,-1)),t}function r(e){let t=0,i=0;for(let o=e.indexOf("\n");-1!==o;o=e.indexOf("\n",o+1))"\r"===e[o-1]?t++:i++;return t>i?"\r\n":"\n"}i.d(t,{D:()=>o,y:()=>r})},9470(e,t,i){"use strict";function o(e){return e<32||127===e||e>=128&&e<=159||e>=57344&&e<=63743||e>=983040&&e<=1048573||e>=1048576&&e<=1114109}function r(e){for(let t of e)if(o(t.codePointAt(0)))return!0;return!1}function a(e,t){let i=e[t],o="x"===i?2:"u"===i?4:8*("U"===i);if(!o)return null;let r=e.slice(t+1,t+1+o);if(r.length!==o||!/^[0-9a-fA-F]+$/.test(r))return null;let a=parseInt(r,16);return a>1114111||a>=55296&&a<=57343?null:[String.fromCodePoint(a),1+o]}let n={},s={'"':'\\"',"\n":"\\n","\r":"\\r"," ":"\\t"},l={"\\":"\\"},C={"\\":"\\",'"':'"',n:"\n",r:"\r",t:" "},d={"\n":"\\n","\r":"\\r"," ":"\\t"},H={"\\":"\\",n:"\n",r:"\r",t:" "};function V(e,t){let i="";for(let r of e){let e=r.codePointAt(0);if("\\"===r)i+="\\\\";else if(void 0!==t[r])i+=t[r];else if(o(e))i+=e<=255?`\\x${e.toString(16).toUpperCase().padStart(2,"0")}`:e<=65535?`\\u${e.toString(16).toUpperCase().padStart(4,"0")}`:`\\U${e.toString(16).toUpperCase().padStart(8,"0")}`;else i+=r}return i}function c(e,t){if(!e.includes("\\"))return e;let i="";for(let o=0;o<e.length;o++){if("\\"!==e[o]||o+1>=e.length){i+=e[o];continue}let r=a(e,o+1);if(r){i+=r[0],o+=r[1];continue}let n=t[e[o+1]];void 0!==n?(i+=n,o+=1):i+=e[o]}return i}function L(e){return V(e,s)}function h(e){return c(e,C)}function u(e){let t="";for(let i=0;i<e.length;i++){let o=e[i];if('"'===o)return null;if("\\"!==o){t+=o;continue}if(i+1>=e.length)return null;let r=a(e,i+1);if(r){t+=r[0],i+=r[1];continue}let n=C[e[i+1]];if(void 0===n)return null;t+=n,i+=1}return t}function M(e){return/^(?:[^']|'')*$/.test(e)?e.replace(/''/g,"'"):null}function p(e){return V(e,n)}function m(e){return c(e,l)}function g(e){return V(e,d)}function f(e){return c(e,H)}i.d(t,{QJ:()=>M,hZ:()=>p,iI:()=>m,k9:()=>L,kk:()=>g,lm:()=>u,pV:()=>f,rq:()=>h,td:()=>r})},1150(e,t,i){"use strict";var o=i(2765),r=i(9808),a=i(9789);let n=new Map;function s(e,t){let i="id"===t||"platform"===t,o=n.get(t);void 0===o&&(o=i?RegExp(`^\\s*(?:-\\s+)?${t}:\\s*["']?(\\S+?)["']?(?:\\s+#.*)?\\s*$`):RegExp(`^\\s*(?:-\\s+)?${t}:\\s*(.*)$`),n.set(t,o));let a=e.match(o);if(!a)return null;if(i)return a[1];let{value:s}=(0,r.bw)(a[1]),l=s.trim();return l.startsWith("#")?null:(0,r.Ir)(l).trim()||null}function l(e,t,i){let r=new Set;if(!e)return r;let n=void 0===i;for(let l of(0,o.D)(e)){if(!/^\s/.test(l)){let e=l.match(a.lF);void 0!==i&&(e||a.ET.test(l))&&(n=null!==e&&e[1]===i);continue}if(!n)continue;let e=s(l,t);null!==e&&r.add(e)}return r}i.d(t,{K:()=>s,p:()=>l})},8818(e,t,i){"use strict";var o=i(9789);let r=/(^|\s)#/,a=/^\s*(?:-\s+)?([A-Za-z0-9_.]+)\s*:\s*(.*)$/,n=/^\s*-\s/,s=/^\s*-\s+([^\s:#]+)/;function l(e){let t=e.match(s);return t?{key:t[1],contentCol:t[0].length-t[1].length}:null}let C=/^\s*(?:-\s+)?platform\s*:\s*("[^"]*"|'[^']*'|[A-Za-z0-9_]+)\s*$/;function d(e){let t=0;for(;t<e.length&&" "===e[t];)t++;return t}function H(e){let t=e.match(r);return t?e.slice(0,t.index+t[0].length-1).trimEnd():e.trimEnd()}function V(e){if(e.length<2)return e;let t=e[0];return('"'===t||"'"===t)&&e[e.length-1]===t?e.slice(1,-1):e}function c(e,t,i,o=!1){for(let r=t-1;r>=0;r--){let t=H(e.line(r+1).text);if(!t.trim())continue;let s=d(t);if(s>=i)continue;let l=t.match(a);if(l&&!(o&&""!==l[2]&&n.test(t)))return{key:l[1],indent:s,lineIdx:r}}return null}function L(e,t){let i=e.lineAt(t);return""!==i.text.trim()?null:{lineIdx:i.number-1,indent:t-i.from}}function h(e,t,i,o=!1){let r=[],a=i,n=t;for(;;){let t=c(e,n,a,o);if(!t)break;r.push(t.key),a=t.indent,n=t.lineIdx}return r.reverse()}function u(e,t){let i=H(e.line(t+1).text),o=i.match(a);return o&&""===o[2]?[...h(e,t,d(i),!0),o[1]]:null}function M(e,t,i){let o=new Set,r=(t,r)=>{for(let n=t;n>=0&&n<e.lines;n+=r){let t=H(e.line(n+1).text);if(!t.trim())continue;let r=d(t);if(r<i)break;if(r===i){let e=t.match(a);e&&o.add(e[1])}}};return r(t-1,-1),r(t+1,1),o}function p(e,t){for(let i=t-1;i>=0;i--){let t=H(e.line(i+1).text);if(!t.trim()||0!==d(t))continue;let r=t.match(o.lF);if(r)return r[1];if(o.ET.test(t))break}return null}function m(e,t,i){for(let o=t-1;o>=0;o--){let t=e.line(o+1).text,r=H(t);if(!r.trim()||d(r)>=i||!/^\s*-\s/.test(t))continue;let a=r.match(C);if(a)return V(a[1])}let o=t;for(let r=t-1;r>=0;r--){let t=e.line(r+1).text,a=H(t);if(!a.trim())continue;let n=d(a);if(n<i||n===i&&(o=r,/^\s*-\s/.test(t)))break}for(let t=o;t<e.lines;t++){let r=H(e.line(t+1).text);if(!r.trim())continue;let a=d(r);if(t!==o&&a<i)break;let n=r.match(C);if(n)return V(n[1])}return null}i.d(t,{EK:()=>p,F6:()=>l,GH:()=>L,N_:()=>c,Sl:()=>M,Xu:()=>u,_j:()=>d,_n:()=>V,aQ:()=>h,eJ:()=>H,m_:()=>m},{JO:r,Ud:a,X$:n})},9808(e,t,i){"use strict";i.d(t,{Tg:()=>L,N_:()=>c,Wg:()=>M,Qj:()=>d,bw:()=>n,dZ:()=>s,X9:()=>l,Ir:()=>a,sS:()=>h});var o=i(9470),r=i(8851);let a=e=>e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replace(/''/g,"'"):e,n=e=>{let t=!1,i=!1;for(let o=0;o<e.length;o++){let r=e[o];if("\\"===r&&i){o++;continue}if('"'!==r||t)if("'"!==r||i){if("#"===r&&!t&&!i&&(" "===e[o-1]||" "===e[o-1])){let t=o;for(;t>0&&(" "===e[t-1]||" "===e[t-1]);)t--;return{value:e.slice(0,t),comment:e.slice(t)}}}else t=!t;else i=!i}return{value:e,comment:""}},s=e=>e.startsWith("#")?{value:"",comment:` ${e}`}:n(e),l=(e,t)=>t?s(e):n(e),C=/^!lambda\s+([\s\S]+)$/,d=e=>{let t,{value:i}=n(e),o=(t=i.match(C))?{_lambda:a(t[1].trim()),_tag:"!lambda"}:null;return null!==o?o:L(a(i),c(i))},H=/^[-+]?(?:0|[1-9]\d*(?:_\d+)*)$/,V=/^[-+]?(?:(?:0|[1-9]\d*(?:_\d+)*)\.(?:\d+(?:_\d+)*)?|\.\d+(?:_\d+)*)$/,c=e=>e.length>=2&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")),L=(e,t)=>{if(t)return e;let i=(0,r.FY)(e);if(null!==i)return i;if(H.test(e)){let t=Number(e.replace(/_/g,""));return Number.isSafeInteger(t)?t:e}if(V.test(e)){let t=Number(e.replace(/_/g,""));return Number.isFinite(t)?t:e}return e};function h(e){return u(e)?(0,o.rq)(e.slice(1,-1)):a(e)}let u=e=>e.length>=2&&e.startsWith('"')&&e.endsWith('"'),M=e=>{let t=e.slice(1,-1).trim();return""===t?[]:(function(e){let t=[],i="",o=null;for(let r=0;r<e.length;r++){let a=e[r];o?(i+=a,'"'===o&&"\\"===a&&r+1<e.length?i+=e[++r]:a===o&&(o=null)):'"'===a||"'"===a?(o=a,i+=a):","===a?(t.push(i),i=""):i+=a}return t.push(i),t})(t).map(e=>{let t=e.trim();return u(t)?h(t):L(a(t),c(t))})}},9789(e,t,i){"use strict";let o="[^\\s:#]*",r=`[a-zA-Z_]${o}`,a=/^[a-zA-Z_.]/,n=RegExp(`^\\.${o}:`),s=RegExp(`^\\s*-\\s+(${r}):\\s*(.*)$`),l=/^(?:(!\S+)\s+)?([|>][-+]?)\s*(?:#.*)?$/,C=/^(\s*-\s*)\S/,d=e=>e.trim().startsWith("#"),H=e=>""===e.trim()||d(e),V=e=>e.match(/^ */)[0],c=(e,t)=>{let i=V(e);if(i.length<t.length)return!1;let o=e.slice(i.length);return"-"===o||o.startsWith("- ")},L=/^(?:then|else|on_[a-z0-9_]*|[a-z0-9_]+_action)$/;function h(e){return L.test(e)}i.d(t,{DX:()=>h},{AL:(e,t)=>{let i=`${t}-`;if(!e.startsWith(i))return!1;let o=e.slice(i.length);return""===o||o.startsWith(" ")},BJ:H,CC:/^ *([A-Za-z_][\w.]*):\s*(#.*)?$/,CI:e=>{let t=e.match(l);return t?{tag:t[1],marker:t[2]}:null},ET:n,G5:(e,t,i)=>{for(let o=t;o<e.length;o++){let t=e[o];if(H(t))continue;let r=V(t);if(r.length<=i.length)break;if("-"!==t[r.length])return r}return null},K7:(e,t)=>{let i=t;for(;i<e.length&&H(e[i]);)i++;return i},L1:s,MG:V,PL:/^[^"']*:\s*(?:!\S+\s+)?[|>][0-9+-]*\s*(?:#.*)?$/,PM:(e,t)=>{if(H(e))return!1;let i=V(e).length;return i<t||!(i>t)&&!c(e,e.slice(0,i))},QW:a,SU:c,Vi:/^\s*-\s*$/,WV:/^\s*-(\s|$)/,bn:r,eq:(e,t,i)=>{let o=e[t];if(i){let e=o.match(C);if(e)return" ".repeat(e[1].length)}let r=i?o.indexOf("-")+1:V(o).length;for(let i=t+1;i<e.length;i++){let t=e[i];if(H(t))continue;if(a.test(t))break;let o=V(t);if(o.length>r)return o;break}return i?" ":" "},iu:e=>RegExp(`^${e}-\\s+(.*)$`),lF:/^([a-zA-Z_][a-zA-Z0-9_]*):/,o1:C,uT:/^\s*-\s+[a-zA-Z_][\w.]*:(?:\s|$)/,w5:d,zM:e=>RegExp(`^${e}(${r}):(\\s*)(.*)$`)})},4175(e,t,i){"use strict";var o=i(9808),r=i(9789),a=i(8851);let n=(e,t,i)=>{if(e.includes(".")||(0,r.CI)(t))return null;let{value:n,comment:s}=(0,o.X9)(t,i);return""===n?{key:e,value:null}:n.startsWith("[")&&n.endsWith("]")?{key:e,value:a.aZ.wrap((0,o.Wg)(n),s)}:{key:e,value:(0,o.Qj)(n)}};i.d(t,{},{Fp:(e,t,i)=>{let o=t;for(;o<e.length&&(0,r.BJ)(e[o]);)o++;return o>=e.length?{dashIndent:i,firstDashIdx:o}:{dashIndent:e[o].match(/^( *)-/)?.[1]??i,firstDashIdx:o}},Ie:(e,t,i,a)=>{let n=[],s=[],l=[],C=t;for(;C<e.length;C++){if((0,r.BJ)(e[C]))continue;if(!e[C].startsWith(i))break;let t=e[C].match(a);if(!t)break;let{value:d,comment:H}=(0,o.dZ)(t[1].trim());n.push((0,o.Tg)((0,o.Ir)(d),(0,o.N_)(d))),s.push([C,C+1]),l.push(H)}return{items:n,endIdx:C,itemRanges:s,inlineComments:l}},fb:n,gL:(e,t,i)=>{let o=-1,a=t-1;for(let n=t;n<e.length;n++){if(""===e[n].trim())continue;let t=(0,r.MG)(e[n]).length;if(-1===o){if(t<=i)break;o=t}else if(t<o)break;a=n}return a+1},jl:(e,t,i)=>{let o=!1;for(let a=t;a<e.length;a++){let t=e[a];if(!(0,r.BJ)(t)){if((0,r.PM)(t,i.length))return{endIdx:a,isComplex:o};!o&&(r.PL.test(t)||r.uT.test(t)||r.Vi.test(t))&&(o=!0)}}return{endIdx:e.length,isComplex:o}},qn:(e,t)=>{let i=e.match(t);return i?n(i[1],i[3].trim(),i[2].length>0):null}})},8310(e,t,i){"use strict";i.d(t,{zZ:()=>p,pn:()=>M,WW:()=>g,wz:()=>m});var o=i(6049),r=i(8851);let a=e=>"!lambda"===e.tag&&"|-"===e.marker,n=e=>({_lambda:new r.ho(e).body.replace(/\n+$/,""),_tag:"!lambda"}),s=(e,t,i)=>a(e)?n(i):new r.ho(i,t);var l=i(2765),C=i(9808),d=i(9789),H=i(4175);let V=(e,t,i)=>{let o=`${i} `,{dashIndent:a,firstDashIdx:n}=(0,H.Fp)(e,t,o),s=(e[n]??"").match(d.o1),l=s?" ".repeat(s[1].length):(0,d.G5)(e,n+1,a)??`${a} `,{endIdx:C,isComplex:V}=(0,H.jl)(e,t,i);if(V){let i=h(e,t,a,l);return i?{value:i.items,endIdx:i.endIdx,isEmptyScalarList:!1,listSource:i.items.length>0?{itemRanges:i.itemRanges,dashIndent:a}:void 0}:{value:new r.ho(e.slice(t,C)),endIdx:C,isEmptyScalarList:!1}}let{items:c,endIdx:L,itemRanges:u,inlineComments:M}=(0,H.Ie)(e,t,`${a}- `,(0,d.iu)(a));return{value:c,endIdx:L,isEmptyScalarList:0===c.length,listSource:{itemRanges:u,inlineComments:M,dashIndent:a}}},c=(e,t,i)=>{let o=(0,d.K7)(e,t+1);if(o>=e.length)return null;let r=(0,d.MG)(e[o]);return r.length<=i?null:e[o].slice(r.length).startsWith("-")?"bail":u(e,t+1,r)},L=(e,t,i,o,r)=>{let a=t;for(;a<e.length;){let t=e[a];if((0,d.BJ)(t)){a++;continue}if(!t.startsWith(i))break;if(t.startsWith(`${i} `))return null;let n=(0,H.qn)(t,o);if(!n)return null;if(null===n.value){let t=c(e,a,i.length);if("bail"===t)return null;if(t){r[n.key]=Object.keys(t.values).length>0?t.values:n.value,a=t.endIdx;continue}}r[n.key]=n.value,a++}return a},h=(e,t,i,o)=>{let r=RegExp(`^${i}-\\s+(${d.bn}):(\\s*)(.*)$`),s=RegExp(`^${o}(${d.bn}):(\\s*)(.*)$`),l=t=>{let l=Object.create(null),C=null;if(!d.Vi.test(e[t])){let o=e[t].match(r);if(!o)return null;let s=o[1],V=o[2].length>0,c=o[3].trim();if(!V&&""!==c)return null;let L=(0,d.CI)(c);if(L){if(!a(L))return null;let o=(0,H.gL)(e,t+1,`${i} `.length),r=(0,d.K7)(e,o);return r<e.length&&(0,d.MG)(e[r]).length>i.length?null:(l[s]=n(e.slice(t+1,o)),{item:l,endIdx:o})}let h=(0,H.fb)(s,c,V);if(!h)return null;l[h.key]=h.value,null===h.value&&(C=h.key)}if(null!==C){let r=e[t].match(d.o1)?.[1].length??i.length+2,a=c(e,t,r);if("bail"===a)return null;if(a){Object.keys(a.values).length>0&&(l[C]=a.values);let t=L(e,a.endIdx,o,s,l);return null===t?null:{item:l,endIdx:t}}}let V=L(e,t+1,o,s,l);return null===V?null:{item:l,endIdx:V}},C=[],V=[],h=t;for(;h<e.length;){if((0,d.BJ)(e[h])){h++;continue}if(!(0,d.AL)(e[h],i))break;let t=l(h);if(!t)return null;C.push(t.item);let o=t.endIdx;for(;o>h+1&&(0,d.BJ)(e[o-1]);)o--;V.push([h,o]),h=t.endIdx}return{items:C,endIdx:h,itemRanges:V}};function u(e,t,i){let o=(0,d.zM)(i),a=Object.create(null),n=t;for(;n<e.length;){let t=e[n];if((0,d.BJ)(t)){n++;continue}if(!t.startsWith(i))break;let l=t.match(o);if(!l){n++;continue}let c=l[1],L=l[2].length>0,h=l[3].trim(),M=(0,d.CI)(h);if(M){let t=(0,H.gL)(e,n+1,i.length);a[c]=s(M,h,e.slice(n+1,t)),n=t;continue}let{value:p,comment:m}=(0,C.X9)(h,L);if(""===p){let t=(0,d.K7)(e,n+1);if(t<e.length&&(0,d.SU)(e[t],i)){let{value:t,endIdx:o}=V(e,n+1,i);a[c]=t,n=o;continue}if(t<e.length){let o=(0,d.MG)(e[t]);if(o.length>i.length){let t=u(e,n+1,o);Object.keys(t.values).length>0&&(a[c]=t.values),n=t.endIdx;continue}}a[c]=null,n++;continue}p.startsWith("[")&&p.endsWith("]")?a[c]=r.aZ.wrap((0,C.Wg)(p),m):a[c]=(0,C.Qj)(p),n++}return{values:a,endIdx:n}}function M(e,t,i){if(void 0!==i)return i-1;for(let i=0;i<e.length;i++)if(e[i].startsWith(`${t}:`))return i;return -1}function p(e,t,i,o){let r=M(e,t,o);if(r<0)return -1;let a=null,n=-1;(void 0!==o?d.L1.exec(e[r]):null)&&(i.lastIndex=0,i.test(e[r].replace(/^\s*-\s+/,""))&&(n=r));for(let t=r+1;t<e.length;t++){let o=e[t];if((0,d.BJ)(o))continue;if(d.QW.test(o))break;let r=(0,d.MG)(o).length;if(null===a&&(a=r),r<a)break;r===a&&(i.lastIndex=0,i.test(o.trimStart())&&(n=t))}return n}function m(e,t,i){return g((0,l.D)(e),t,i).values}function g(e,t,i){let r=Object.create(null),a=new Map,n=(e,t,i)=>{let o={span:{start:t,end:i,leadStart:t}};return a.set(e,o),o},l=M(e,t,i);if(l<0)return{values:r,keys:a,childIndent:"",isListItem:!1,startIdx:l};let c=d.WV.test(e[l]),L=(0,d.eq)(e,l,c),h=(0,d.zM)(L),p=t=>{let i=(0,d.K7)(e,t);if(i>=e.length)return null;let o=(0,d.MG)(e[i]);return o.length<=L.length?null:u(e,t,o)};if(!c&&o.sU.has(t)){let i=(0,d.MG)(e[l]),o=(0,d.K7)(e,l+1);if(o<e.length&&(0,d.SU)(e[o],i))return r[t]=V(e,l+1,i).value,{values:r,keys:a,childIndent:L,isListItem:c,startIdx:l}}if(c){let t=e[l].match(d.L1);if(t){let i=e[l],o=i.slice(i.indexOf(":",i.indexOf("-"))+1),{value:n,comment:s}=(0,C.bw)(o),d=n.trim();if(""!==d)s&&a.set(t[1],{comment:s}),r[t[1]]=(0,C.Qj)(d);else{let e=p(l+1);e&&Object.keys(e.values).length>0&&(r[t[1]]=e.values)}}}let m=c?(e[l].match(/^(\s*)-/)??["",""])[1].length:-1;for(let t=l+1;t<e.length;t++){let i=e[t];if((0,d.BJ)(i))continue;if(c){let e=i.match(/^(\s*)-(\s|$)/);if(e&&e[1].length===m||d.QW.test(i))break}else if(d.QW.test(i))break;let o=i.match(h);if(!o)continue;let a=o[1],l=o[2].length>0,u=o[3].trim(),M=(0,d.CI)(u);if(M){let i=(0,H.gL)(e,t+1,L.length);r[a]=s(M,u,e.slice(t+1,i)),n(a,t,i),t=i-1;continue}let{value:g,comment:f}=(0,C.X9)(u,l);if(""===g){let i=(0,d.K7)(e,t+1);if(i<e.length&&(0,d.SU)(e[i],L)){let{value:i,endIdx:o,isEmptyScalarList:s,listSource:l}=V(e,t+1,L);if(!s){r[a]=i;let e=n(a,t,o);l&&(e.listSource=l),f&&(e.comment=f),t=o-1}continue}let o=p(t+1),s=o?.endIdx??t+1;r[a]=o&&Object.keys(o.values).length>0?o.values:null;let l=n(a,t,s);f&&(l.comment=f),t=s-1;continue}if(g.startsWith("[")&&g.endsWith("]")){r[a]=(0,C.Wg)(g);let e=n(a,t,t+1);e.flowList=!0,f&&(e.comment=f);continue}r[a]=(0,C.Qj)(g);let b=n(a,t,t+1);f&&(b.comment=f)}for(let{span:t}of a.values()){if(!t)continue;let i=t.start+1,o=t.end,r=!1;for(;o>i&&(0,d.BJ)(e[o-1])&&(0,d.MG)(e[o-1]).length<=L.length;)o--,(0,d.w5)(e[o])&&(r=!0);r&&(t.end=o)}let g=l+1;for(let{span:t}of a.values()){if(!t)continue;let i=t.start;for(;i>g&&(0,d.BJ)(e[i-1]);)i--;t.leadStart=i,g=t.end}return{values:r,keys:a,childIndent:L,isListItem:c,startIdx:l}}},418(e,t,i){"use strict";i.d(t,{Kd:()=>p,ju:()=>M,Nj:()=>u});var o=i(6049),r=i(2765),a=i(9789),n=i(8310),s=i(8175),l=i(2814),C=i(8851);function d(e,t){if(e===t)return!0;if(e instanceof C.ho||t instanceof C.ho)return e instanceof C.ho&&t instanceof C.ho&&e.inlineHeader===t.inlineHeader&&(0,l.r)(e.lines,t.lines);if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&(0,l.r)(e,t,d);if((0,s.Qd)(e)&&(0,s.Qd)(t)){let i=Object.keys(e);return i.length===Object.keys(t).length&&i.every(i=>Object.prototype.hasOwnProperty.call(t,i)&&d(e[i],t[i]))}return!1}let H=e=>(0,s.k4)(e)&&null!=e,V=e=>H(e)||(0,s.Qd)(e),c=/\S/,L=/(?:\r?\n[ \t]*)+$/;function h(e,t,i){let o=(0,n.pn)(e,t,i);if(o<0)return{start:-1,end:-1};let r=a.WV.test(e[o]),s=r?(e[o].match(/^(\s*)-/)??["",""])[1].length:-1,l=e.length;for(let t=o+1;t<e.length;t++)if(r){let i=e[t].match(/^(\s*)-(\s|$)/);if(i&&i[1].length===s||a.QW.test(e[t])){l=t;break}}else if(a.QW.test(e[t])){l=t;break}return{start:o,end:l}}function u(e,t,i,s,l={}){let c=(0,r.D)(e),{start:L,end:M}=h(c,t,s);if(L<0)return e;let p=(0,r.y)(e),m=a.WV.test(c[L]),g=(0,a.eq)(c,L,m),f=function(e,t,i,o){let r=-1;for(let o=t+1;o<i;o++){let t=e[o];if(""===t.trim()||(0,a.w5)(t))continue;let i=(0,a.MG)(t).length;i>r&&(r=i)}return r<0?o:r}(c,L,M,g.length),b=M;for(;b>L+1;){let e=c[b-1];if(""===e.trim()){b--;continue}let t=(0,a.MG)(e).length;if((0,a.w5)(e)&&(t<=g.length||t<f))b--;else break}let _=b;if(o.sU.has(t)){let o=i[t];if(!Array.isArray(o))return e;let r=(0,C.ym)({[t]:o},(0,a.MG)(c[L]),{...l,indentStep:l.indentStep??(g||" ")});return c.splice(L,_-L,...r),c.join(p)}let A=(0,n.WW)(c,t,s),w=-1;for(let{span:e}of A.keys.values())e&&e.end>w&&(w=e.end);w>=0&&(_=w);let v=c[L],y=new Set;if(m){let e=v.match(a.L1);if(e){let t=e[1];if(Object.prototype.hasOwnProperty.call(i,t))if(function(e){if(null==e)return!1;let t=typeof e;return"string"===t||"number"===t||"boolean"===t}(i[t])){if(y.add(t),!d(i[t],A.values[t])){let e=v.match(/^(\s*)-(\s+)/),o=`${e[1]}-${e[2]}`,r=A.keys.get(t)?.comment??"";v=`${o}${t}: ${(0,C.Rm)(i[t])}${r}`}}else{let e=(v.match(/^(\s*)-/)??["",""])[1];v=`${e}-`}}}let S=!m&&g?g:" ",k=[v,...function(e,t,i,o,r,a){let n=[];for(let[h,u]of Object.entries(i)){var s,l,c,L;if(o.has(h))continue;let i=t.keys.get(h),M=i?.span,p=t.values[h];if(M&&d(u,p)){n.push(...e.slice(M.leadStart,M.end));continue}let m=i&&function(e,t,i,o,r,a){let{span:n,listSource:s}=t;if(!n||!s||!Array.isArray(i)||!Array.isArray(o)||0===o.length||!o.every(V))return null;let l=0;for(;l<i.length&&l<o.length&&d(i[l],o[l]);)l++;let c=0;for(;c<i.length-l&&c<o.length-l&&d(i[i.length-1-c],o[o.length-1-c]);)c++;let{itemRanges:L,dashIndent:h}=s,u=`${r}${a.indentStep??" "}`,M=e=>0===e?n.start+1:L[e-1][1],p=i.length===o.length;if(h!==u){for(let e=l;e<o.length-c;e++)if(!(p&&d(i[e],o[e]))&&!H(o[e]))return null}let m=[];m.push(...e.slice(n.leadStart,M(l)));for(let t=l;t<o.length-c;t++){if(p&&d(i[t],o[t])){m.push(...e.slice(M(t),L[t][1]));continue}if(p&&m.push(...e.slice(M(t),L[t][0])),H(o[t])){let e=p?s.inlineComments?.[t]??"":"";m.push(`${h}- ${(0,C.Rm)(o[t])}${e}`)}else m.push(...(0,C.qV)(o[t],r,a))}return m.push(...e.slice(M(i.length-c),n.end)),m}(e,i,p,u,r,a);if(m){n.push(...m);continue}M&&n.push(...e.slice(M.leadStart,M.start));let g=(s=i,l=h,c=u,L=r,(s?.flowList&&Array.isArray(c)&&0!==c.length&&c.every(H)?[`${L}${l}: ${(0,C.P1)(c)}`]:null)??(0,C.ym)({[h]:u},r,a));i?.comment&&1===g.length&&(g[0]+=i.comment),n.push(...g)}return n}(c,A,i,y,g,{...l,indentStep:l.indentStep??S})];return c.splice(L,_-L,...k),c.join(p)}function M(e,t,i){let o=(0,r.D)(e),{start:n,end:s}=h(o,t,i);if(n<0)return e;let l=(0,r.y)(e),C=a.WV.test(o[n]);if(o.splice(n,s-n),C){let e=n-1;for(;e>=0&&!a.QW.test(o[e]);)e--;if(e>=0){let t=!1,i=o.length;for(let r=e+1;r<o.length;r++){if(a.QW.test(o[r])){i=r;break}if(""!==o[r].trim()){t=!0;break}}t||o.splice(e,i-e)}}return o.join(l)}function p(e,t,i,o={}){let n=(0,r.D)(e),s=o.indentStep??function(e){let t=!1;for(let i of e){if(a.QW.test(i)){t=!0;continue}if(!t||""===i.trim()||(0,a.w5)(i))continue;let e=(0,a.MG)(i);if(e)return e;t=!1}return null}(n)??void 0,l=(0,C.ym)({[t]:i},"",{...o,indentStep:s});if(0===l.length)return e;let d=(0,r.y)(e),H=c.test(e)?n.join(d).replace(L,""):"",V=l.join(d);return H?`${H}${d}${d}${V}${d}`:`${V}${d}`}},4125(e,t,i){"use strict";let o,r;var a=i(8175),n=i(6049),s=i(2765),l=i(1150),C=i(8818),d=i(9789);function H(e){return""===e.trim()||e.startsWith("#")}function V(e){if(o===e&&r)return r;let t=(0,s.D)(e),i=[];for(let e=0;e<t.length;e++){let o=t[e].match(d.lF),r=!o&&d.ET.test(t[e]);if(o||r){if(i.length>0){let o=i[i.length-1],r=o.fromLine-1,a=e-1;for(;a>r&&H(t[a]);)a--;o.toLine=a+1}i.push({key:o?o[1]:"",fromLine:e+1,toLine:t.length,ignored:r})}}if(i.length>0){let e=i[i.length-1],o=e.fromLine-1,r=t.length-1;for(r>=0&&""===t[r]&&r--;r>o&&H(t[r]);)r--;e.toLine=r+1}let a=[];for(let e of i)e.ignored||a.push(...function(e,t){if(n.sU.has(t.key))return[{key:t.key,fromLine:t.fromLine,toLine:t.toLine}];let i=t.fromLine-1,o=t.toLine-1,r=(0,d.K7)(e,i+1),a=r<=o?u(e[r]):-1,s=r<=o&&d.WV.test(e[r])?g(e,r,o,a):[];if(0===s.length){let r="",n="",s="";for(let t=i+1;t<=o;t++)u(e[t])===a&&(d.WV.test(e[t])||(r=(0,l.K)(e[t],"name")??r,n=(0,l.K)(e[t],"id")??n,s=(0,l.K)(e[t],"platform")??s));return[{key:t.key,fromLine:t.fromLine,toLine:t.toLine,name:r||void 0,id:n||void 0,platform:s||void 0}]}let C=[];for(let i=0;i<s.length;i++){let r=s[i],a=i+1<s.length?s[i+1]-1:o,n="",d="",H="",V=h(e[r]);for(let t=r;t<=a;t++){let i=e[t];(t===r||u(i)===V)&&(n=(0,l.K)(i,"name")??n,d=(0,l.K)(i,"id")??d,H=(0,l.K)(i,"platform")??H)}C.push({key:t.key,fromLine:r+1,toLine:a+1,name:n||void 0,id:d||void 0,platform:H||void 0,parentKey:t.key})}return C}(t,e));return o=e,r=a,a}function c(e,t){let i=null,o=1/0;for(let r of e){if(t<r.fromLine||t>r.toLine)continue;let e=r.toLine-r.fromLine;e<o&&(i=r,o=e)}return i}function L(e,t){let i=t.parentKey;if(void 0===i)return t.id??t.key;if(t.id)return t.id;let o=0;for(let r of e)r.parentKey===i&&r.fromLine<t.fromLine&&o++;return`${i}_${o}`}function h(e){let t=e.match(/^\s*-\s+(?=\S)/)?.[0].length;return void 0!==t?t:u(e)+2}function u(e){return e.match(/^ */)?.[0].length??0}function M(e,t,i){if(i[0]===t.key&&(i=i.slice(1)),0===i.length)return null;let o=e.split("\n"),r=(e,t,i,n)=>{let s=n[0],l=n.slice(1);if((0,a.wr)(s)&&_(o,e,t,i)){let a=g(o,e,t,i),n=a[Number(s)];return void 0===n?null:0===l.length?n+1:r(n,Number(s)+1<a.length?a[Number(s)+1]-1:t,h(o[n]),l)}for(let a=e;a<=t;a++){let e=(0,C.eJ)(o[a]);if(!e.trim()||p(e)!==i)continue;let n=e.match(C.Ud);if(!n||n[1]!==s)continue;if(0===l.length)return a+1;let d=f(o,a+1,t,i),H=m(o,a+1,d);return null===H?null:r(a+1,d,H,l)}return null},n=b(o,t);return null===n?null:r(n.lo,n.hi,n.baseIndent,i)}function p(e){return d.WV.test(e)?h(e):(0,C._j)(e)}function m(e,t,i){for(let o=t;o<=i;o++){let t=(0,C.eJ)(e[o]);if(t.trim())return(0,C._j)(t)}return null}function g(e,t,i,o){let r=[];for(let a=t;a<=i;a++){let t=(0,C.eJ)(e[a]);t.trim()&&(0,C._j)(t)===o&&d.WV.test(t)&&r.push(a)}return r}function f(e,t,i,o){for(let r=t;r<=i;r++)if((0,d.PM)(e[r],o))return r-1;return i}function b(e,t){let i=t.fromLine-1,o=Math.min(t.toLine-1,e.length-1);if(i<0||i>=e.length)return null;if(d.WV.test(e[i]))return{lo:i,hi:o,baseIndent:h(e[i])};let r=m(e,i+1,o);return null===r?null:{lo:i+1,hi:o,baseIndent:r}}function _(e,t,i,o){for(let r=t;r<=i;r++){let t=(0,C.eJ)(e[r]);if(t.trim())return(0,C._j)(t)===o&&d.WV.test(t)}return!1}function A(e,t,i){if(0===i.length)return[];let o=[],r=(t,i,a,n)=>{for(let s of function(e,t,i,o){if(!_(e,t,i,o))return[{lo:t,hi:i,keyIndent:o}];let r=g(e,t,i,o);return r.map((t,o)=>({lo:t,hi:o+1<r.length?r[o+1]-1:i,keyIndent:h(e[t])}))}(e,t,i,a)){if(1===n.length){let t="",i="";for(let o=s.lo;o<=s.hi;o++)p(e[o])===s.keyIndent&&(t=(0,l.K)(e[o],n[0])??t,i=(0,l.K)(e[o],"name")??i);t&&o.push({id:t,name:i});continue}for(let t=s.lo;t<=s.hi;t++){if(p(e[t])!==s.keyIndent)continue;let i=(0,C.eJ)(e[t]).match(C.Ud);if(!i||i[1]!==n[0])continue;let o=f(e,t+1,s.hi,s.keyIndent),a=m(e,t+1,o);null!==a&&r(t+1,o,a,n.slice(1));break}}},a=b(e,t);return null!==a&&r(a.lo,a.hi,a.baseIndent,i),o}function w(e,t){return t?t.startsWith(`${e}.`)?t:`${e}.${t}`:e}i.d(t,{IO:()=>h,LS:()=>A,MT:()=>V,MX:()=>L,T0:()=>w,lr:()=>c,of:()=>M,p0:()=>u})},3815(e,t,i){"use strict";var o=i(7883);let r="••••••••",a=/[_.-](password|psk)$/i,n=/(^|[_.-])(certificate|certificate_authority|certificates|private_key|client_key)$/i,s=/[_.-](pass|secret|token)$/i,l={scanCommented:!0,emitCommentSpans:!0,skipSubstitutionRefs:!0};function C(e,t=r,i=V){return d([e],t,i)[0]}function d(e,t=r,i=V){if(0===e.length)return[];let a=e.slice(),n=(0,o.H)({lines:a.length,line:e=>({text:a[e-1]})},{...l,sensitiveKeyPredicate:i});for(let e=n.length-1;e>=0;e--){let{line:i,valueFrom:o,valueTo:r}=n[e],s=i-1;a[s]=a[s].slice(0,o)+t+a[s].slice(r)}return a}function H(e){return d(e.split("\n"),"•",c).join("\n")}function V(e){return a.test(e)}function c(e){return V(e)||n.test(e)||s.test(e)}i.d(t,{jB:()=>C,qk:()=>H,yt:()=>d})},7883(e,t,i){"use strict";var o=i(2765);let r=new Set(["password","ap_password","ota_password","psk"]),a=new Map([["encryption",new Set(["key"])],["eap",new Set(["key"])]]),n=/^(\s*)(-\s+)?([a-zA-Z_][a-zA-Z0-9_.\-]*)(\s*):(\s*)(.*)$/,s=/^[|>][+-]?\d*\s*(#.*)?$/,l=/^!secret\b/,C=/^\$\{/,d=/^(\s*(?:-\s+)?#+)(.*)$/,H=/^(\s*#+)\s*(.*)$/,V=/^(\s*)/,c=/\s/;function L(e,t={}){let i,{maskAllValues:M=!1,sensitiveKeyPredicate:p,scanCommented:m=!1,emitCommentSpans:g=!1,skipSubstitutionRefs:f=!1}=t,b=[];if("string"!=typeof e){if(0===e.lines)return b;i=Array(e.lines);for(let t=1;t<=e.lines;t++){var _;i[t-1]=(_=e.line(t).text).endsWith("\r")?_.slice(0,-1):_}}else{if(!e)return b;i=(0,o.D)(e)}let A=[],w=(e,t,o)=>{let r=i[e];for(;o>t&&c.test(r[o-1]);)o--;o>t&&b.push({line:e+1,valueFrom:t,valueTo:o})},v=(e,t)=>{if(!g)return;let o=i[e],r=h(o,t);if(-1===r)return;let a=u(o,r);a&&b.push({line:e+1,valueFrom:a.from,valueTo:a.to})},y=(e,t,o)=>{let r=i[e];if(o.startsWith("#")){if(g){let i=u(r,r.indexOf("#",t));i&&b.push({line:e+1,valueFrom:i.from,valueTo:i.to})}return"done"}let a=s.test(o);if(a||""===o||l.test(o)||f&&C.test(o))return v(e,t),a?"block":"done";let n=t,d=o[0];if('"'===d||"'"===d){let e=t+(r.length-t-o.length),i=function(e,t){let i=e[t],o=t+1;for(;o<e.length;){if(e[o]===i){if("'"===i&&"'"===e[o+1]){o+=2;continue}if('"'===i){let i=0;for(let r=o-1;r>=t+1&&"\\"===e[r];r--)i++;if(i%2==1){o++;continue}}return o}o++}return -1}(r,e);n=-1!==i?i+1:r.length}let H=h(r,n);return w(e,t,-1!==H?H:r.length),-1!==H&&v(e,H),"done"},S=(e,t)=>{let o=i[e].slice(t).match(n);if(!o)return e+1;let[,s,l="",C,d,V,c]=o,L=C.toLowerCase(),h=t+s.length+l.length,u=!1;for(let e=A.length-1;e>=0&&!u;e--)if(!(A[e].indent>=h)){u=a.get(A[e].key)?.has(L)===!0;break}if(!(M||u||r.has(L)||p?.(C)===!0)||"block"!==y(e,t+s.length+l.length+C.length+d.length+1+V.length,c.trimStart()))return e+1;let m=e+1;for(;m<i.length;){let e=i[m],t=e.match(H);if(!t)break;if(!t[2]){m++;continue}let o=e.length-t[2].length;if(o>t[1].length&&o<=h)break;w(m,o,e.length),m++}return m},k=0;for(;k<i.length;){let e,t=i[k],o=t.match(n);if(!o){if(m){let e=t.match(d);if(e){k=S(k,e[1].length);continue}}k++;continue}let s=o[1],l=o[2]??"",C=o[3],H=o[4],c=o[5],L=o[6],h=C.toLowerCase(),u=s.length+(l?l.length:0);for(;A.length>0&&A[A.length-1].indent>=u;)A.pop();if(M)e=!0;else{if(!(e=r.has(h))&&A.length>0){let t=A[A.length-1].key,i=a.get(t);i&&i.has(h)&&(e=!0)}!e&&p&&(e=p(C))}if(A.push({indent:u,key:h}),!e||"block"!==y(k,s.length+l.length+C.length+H.length+1+c.length,L.trimStart())){k++;continue}let g=k+1;for(;g<i.length;){let e=i[g];if(""===e.trim()){g++;continue}let t=(e.match(V)?.[1]??"").length;if(t<=u)break;w(g,t,e.length),g++}k=g}return b}function h(e,t){for(let i=t;i<e.length;i++)if("#"===e[i]&&i>0&&c.test(e[i-1]))return i;return -1}function u(e,t){let i=t+1;for(;i<e.length&&c.test(e[i]);)i++;let o=e.length;for(;o>i&&c.test(e[o-1]);)o--;return o>i?{from:i,to:o}:null}i.d(t,{H:()=>L})},8851(e,t,i){"use strict";var o=i(8067),r=i(8175),a=i(9470),n=i(9789);function s(e,t){return new C(e._lambda.split("\n").map(e=>""===e?"":`${t}${e}`),"!lambda"===e._tag?"!lambda |-":"|-")}function l(e,t,i){if(0===i.lines.length&&!i.inlineHeader)return[];let o=i.inlineHeader?` ${i.inlineHeader}`:"";return[`${t}${e}:${o}`,...i.lines]}class C{get indent(){let e=this.lines.filter(e=>""!==e.trim());if(0===e.length)return"";let t=e[0].match(/^\s*/)?.[0]??"";for(let i of e.slice(1)){let e=i.match(/^\s*/)?.[0]??"";for(;t&&!i.startsWith(t);)t=t.slice(0,-1);if(!t)return"";e.length<t.length&&(t=e)}return t}get body(){let e=this.indent;return this.lines.map(t=>t.slice(e.length)).join("\n")}toString(){return this.body}static fromBodyText(e,t){let i=t.indent;return new C(e.split("\n").map(e=>""===e?"":`${i}${e}`),t.inlineHeader)}constructor(e,t){this.lines=e,this.inlineHeader=t}}class d extends Array{static get[Symbol.species](){return Array}static wrap(e,t){let i=new d;return i.push(...e),Object.defineProperty(i,"comment",{value:t,enumerable:!1}),i}}function H(e,t,i){let a=!0===i.keepEmptyStrings,n=i.indentStep??" ",V=`${t}${n}`;if((0,r.Qd)(e)){let t=Object.entries(e);if(1===t.length&&null===t[0][1])return[`${V}- ${t[0][0]}:`];let n=t.filter(([,e])=>null!=e&&(""!==e||a));if(0===n.length)return[`${V}-`];let L=[],h=`${V} `;return n.forEach(([e,t],a)=>{let n=0===a?`${V}- `:h;if(t instanceof C)return void L.push(...l(e,n,t));if((0,o.b)(t)){let i=s(t,`${h} `);L.push(...l(e,n,i));return}if(Array.isArray(t)){if(0===t.length)return;if(t.every(e=>!(0,r.Qd)(e)&&!Array.isArray(e)&&!(0,o.b)(e))){let i=t instanceof d?t.comment??"":"";L.push(`${n}${e}: ${v(t)}${i}`);return}for(let o of(L.push(`${n}${e}:`),t))L.push(...H(o,h,i));return}if((0,r.Qd)(t)){L.push(`${n}${e}:`);let o=c(t,`${h} `,i);L.push(...o);return}L.push(`${n}${e}: ${A(t)}`)}),L}return[`${V}- ${A(e)}`]}function V(e){return null!=e&&""!==e&&(e instanceof C||(Array.isArray(e)?e.length>0:!!(0,o.b)(e)||!(0,r.Qd)(e)||Object.values(e).some(V)))}function c(e,t,i={}){let r=[],a=!0===i.keepEmptyStrings,n=i.indentStep??" ";for(let[V,L]of Object.entries(e))if(null!=L&&(""!==L||a)){if(L instanceof C){r.push(...l(V,t,L));continue}if(Array.isArray(L)){if(0===L.length)continue;if(L instanceof d){r.push(`${t}${V}: ${v(L)}${L.comment??""}`);continue}for(let e of(r.push(`${t}${V}:`),L)){let o=H(e,t,i);r.push(...o)}continue}if((0,o.b)(L)){let e=s(L,`${t}${n}`);r.push(...l(V,t,e));continue}if("object"==typeof L){let e=c(L,`${t}${n}`,i);if(0===e.length)continue;r.push(`${t}${V}:`),r.push(...e);continue}r.push(`${t}${V}: ${A(L)}`)}return r}function L(e){let t=new Set;for(let i of e.split("\n")){let e=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(.*)$/);e&&t.add(e[1])}return t}function h(e){let t=new Set;if(!e)return t;let i=e.split("\n"),o=null;for(let e of i){let i=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(?:#.*)?$/);if(i){o=i[1];continue}if(n.ET.test(e)){o=null;continue}if(!o)continue;let r=e.match(/^\s+(?:-\s+)?platform:\s*["']?(\S+?)["']?\s*(?:#.*)?$/);r&&t.add(`${o}.${r[1]}`)}return t}let u=/^(?:yes|Yes|YES|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)$/,M=/^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*))$/,p=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*(?:[eE][-+][0-9]+)?|[-+]?\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,m=/^(?:~|null|Null|NULL)$/,g=/^!(?:remove$|(?:secret|include|include_dir_list|include_dir_merge_list|include_dir_named|include_dir_merge_named|lambda|literal|extend|remove|env_var) +\S)/,f=/^(?:[0-9]{4}-[0-9]{2}-[0-9]{2}|[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}(?:[Tt]|[ \t]+)[0-9]{1,2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]*)?(?:[ \t]*(?:Z|[-+][0-9]{1,2}(?::[0-9]{2})?))?)$/;function b(e){return`"${(0,a.k9)(e)}"`}function _(e){return g.test(e)}function A(e){if("boolean"==typeof e||"number"==typeof e)return String(e);let t=String(e);return""===t||/[:#]/.test(t)||/^[-\s'"!&*|>[\]{}@`%,?]/.test(t)&&!_(t)||/\s$/.test(t)||/[\n\r\t]/.test(t)||(0,a.td)(t)||u.test(t)||M.test(t)||p.test(t)||m.test(t)||f.test(t)?b(t):t}function w(e){return"string"==typeof e&&/[,[\]{}]/.test(e)?b(e):A(e)}function v(e){return`[${e.map(w).join(", ")}]`}let y=new Set(["true","yes","on","enable"]),S=new Set(["false","no","off","disable"]);function k(e){if("boolean"==typeof e)return e;if("string"==typeof e){let t=e.trim().toLowerCase();if(y.has(t))return!0;if(S.has(t))return!1}return null}i.d(t,{$z:()=>V,FY:()=>k,P1:()=>v,Rm:()=>A,Zn:()=>L,aZ:()=>d,ho:()=>C,qV:()=>H,u:()=>h,uM:()=>_,ym:()=>c})},6370(e,t,i){"use strict";i.d(t,{UE:()=>K,ll:()=>N,rD:()=>Q,UU:()=>W,cY:()=>U,iD:()=>I,BN:()=>j,Ej:()=>G});let o=Math.min,r=Math.max,a=Math.round,n=Math.floor,s=e=>({x:e,y:e}),l={left:"right",right:"left",bottom:"top",top:"bottom"};function C(e,t){return"function"==typeof e?e(t):e}function d(e){return e.split("-")[0]}function H(e){return e.split("-")[1]}function V(e){return"x"===e?"y":"x"}function c(e){return"y"===e?"height":"width"}function L(e){let t=e[0];return"t"===t||"b"===t?"y":"x"}function h(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}let u=["left","right"],M=["right","left"],p=["top","bottom"],m=["bottom","top"];function g(e){let t=d(e);return l[t]+e.slice(t.length)}function f(e){return"number"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function b(e){let{x:t,y:i,width:o,height:r}=e;return{width:o,height:r,top:i,left:t,right:t+o,bottom:i+r,x:t,y:i}}function _(e,t,i){let o,{reference:r,floating:a}=e,n=L(t),s=V(L(t)),l=c(s),C=d(t),h="y"===n,u=r.x+r.width/2-a.width/2,M=r.y+r.height/2-a.height/2,p=r[l]/2-a[l]/2;switch(C){case"top":o={x:u,y:r.y-a.height};break;case"bottom":o={x:u,y:r.y+r.height};break;case"right":o={x:r.x+r.width,y:M};break;case"left":o={x:r.x-a.width,y:M};break;default:o={x:r.x,y:r.y}}switch(H(t)){case"start":o[s]-=p*(i&&h?-1:1);break;case"end":o[s]+=p*(i&&h?-1:1)}return o}async function A(e,t){var i;void 0===t&&(t={});let{x:o,y:r,platform:a,rects:n,elements:s,strategy:l}=e,{boundary:d="clippingAncestors",rootBoundary:H="viewport",elementContext:V="floating",altBoundary:c=!1,padding:L=0}=C(t,e),h=f(L),u=s[c?"floating"===V?"reference":"floating":V],M=b(await a.getClippingRect({element:null==(i=await (null==a.isElement?void 0:a.isElement(u)))||i?u:u.contextElement||await (null==a.getDocumentElement?void 0:a.getDocumentElement(s.floating)),boundary:d,rootBoundary:H,strategy:l})),p="floating"===V?{x:o,y:r,width:n.floating.width,height:n.floating.height}:n.reference,m=await (null==a.getOffsetParent?void 0:a.getOffsetParent(s.floating)),g=await (null==a.isElement?void 0:a.isElement(m))&&await (null==a.getScale?void 0:a.getScale(m))||{x:1,y:1},_=b(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:p,offsetParent:m,strategy:l}):p);return{top:(M.top-_.top+h.top)/g.y,bottom:(_.bottom-M.bottom+h.bottom)/g.y,left:(M.left-_.left+h.left)/g.x,right:(_.right-M.right+h.right)/g.x}}let w=async(e,t,i)=>{let{placement:o="bottom",strategy:r="absolute",middleware:a=[],platform:n}=i,s=n.detectOverflow?n:{...n,detectOverflow:A},l=await (null==n.isRTL?void 0:n.isRTL(t)),C=await n.getElementRects({reference:e,floating:t,strategy:r}),{x:d,y:H}=_(C,o,l),V=o,c=0,L={};for(let i=0;i<a.length;i++){let h=a[i];if(!h)continue;let{name:u,fn:M}=h,{x:p,y:m,data:g,reset:f}=await M({x:d,y:H,initialPlacement:o,placement:V,strategy:r,middlewareData:L,rects:C,platform:s,elements:{reference:e,floating:t}});d=null!=p?p:d,H=null!=m?m:H,L[u]={...L[u],...g},f&&c<50&&(c++,"object"==typeof f&&(f.placement&&(V=f.placement),f.rects&&(C=!0===f.rects?await n.getElementRects({reference:e,floating:t,strategy:r}):f.rects),{x:d,y:H}=_(C,V,l)),i=-1)}return{x:d,y:H,placement:V,strategy:r,middlewareData:L}},v=new Set(["left","top"]);async function y(e,t){let{placement:i,platform:o,elements:r}=e,a=await (null==o.isRTL?void 0:o.isRTL(r.floating)),n=d(i),s=H(i),l="y"===L(i),V=v.has(n)?-1:1,c=a&&l?-1:1,h=C(t,e),{mainAxis:u,crossAxis:M,alignmentAxis:p}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return s&&"number"==typeof p&&(M="end"===s?-1*p:p),l?{x:M*c,y:u*V}:{x:u*V,y:M*c}}var S=i(4268);function k(e){let t=(0,S.L9)(e),i=parseFloat(t.width)||0,o=parseFloat(t.height)||0,r=(0,S.sb)(e),n=r?e.offsetWidth:i,s=r?e.offsetHeight:o,l=a(i)!==n||a(o)!==s;return l&&(i=n,o=s),{width:i,height:o,$:l}}function Z(e){return(0,S.vq)(e)?e:e.contextElement}function x(e){let t=Z(e);if(!(0,S.sb)(t))return s(1);let i=t.getBoundingClientRect(),{width:o,height:r,$:n}=k(t),l=(n?a(i.width):i.width)/o,C=(n?a(i.height):i.height)/r;return l&&Number.isFinite(l)||(l=1),C&&Number.isFinite(C)||(C=1),{x:l,y:C}}let O=s(0);function $(e){let t=(0,S.zk)(e);return(0,S.Tc)()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:O}function E(e,t,i,o){var r;void 0===t&&(t=!1),void 0===i&&(i=!1);let a=e.getBoundingClientRect(),n=Z(e),l=s(1);t&&(o?(0,S.vq)(o)&&(l=x(o)):l=x(e));let C=(void 0===(r=i)&&(r=!1),o&&(!r||o===(0,S.zk)(n))&&r)?$(n):s(0),d=(a.left+C.x)/l.x,H=(a.top+C.y)/l.y,V=a.width/l.x,c=a.height/l.y;if(n){let e=(0,S.zk)(n),t=o&&(0,S.vq)(o)?(0,S.zk)(o):o,i=e,r=(0,S._m)(i);for(;r&&o&&t!==i;){let e=x(r),t=r.getBoundingClientRect(),o=(0,S.L9)(r),a=t.left+(r.clientLeft+parseFloat(o.paddingLeft))*e.x,n=t.top+(r.clientTop+parseFloat(o.paddingTop))*e.y;d*=e.x,H*=e.y,V*=e.x,c*=e.y,d+=a,H+=n,i=(0,S.zk)(r),r=(0,S._m)(i)}}return b({width:V,height:c,x:d,y:H})}function z(e,t){let i=(0,S.CP)(e).scrollLeft;return t?t.left+i:E((0,S.ep)(e)).left+i}function P(e,t){let i=e.getBoundingClientRect();return{x:i.left+t.scrollLeft-z(e,i),y:i.top+t.scrollTop}}function T(e,t,i){var o;let a;if("viewport"===t)a=function(e,t){let i=(0,S.zk)(e),o=(0,S.ep)(e),r=i.visualViewport,a=o.clientWidth,n=o.clientHeight,s=0,l=0;if(r){a=r.width,n=r.height;let e=(0,S.Tc)();(!e||e&&"fixed"===t)&&(s=r.offsetLeft,l=r.offsetTop)}let C=z(o);if(C<=0){let e=o.ownerDocument,t=e.body,i=getComputedStyle(t),r="CSS1Compat"===e.compatMode&&parseFloat(i.marginLeft)+parseFloat(i.marginRight)||0,n=Math.abs(o.clientWidth-t.clientWidth-r);n<=25&&(a-=n)}else C<=25&&(a+=C);return{width:a,height:n,x:s,y:l}}(e,i);else if("document"===t){let t,i,n,s,l,C,d;o=(0,S.ep)(e),t=(0,S.ep)(o),i=(0,S.CP)(o),n=o.ownerDocument.body,s=r(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),l=r(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight),C=-i.scrollLeft+z(o),d=-i.scrollTop,"rtl"===(0,S.L9)(n).direction&&(C+=r(t.clientWidth,n.clientWidth)-s),a={width:s,height:l,x:C,y:d}}else if((0,S.vq)(t)){let e,o,r,n,l,C;o=(e=E(t,!0,"fixed"===i)).top+t.clientTop,r=e.left+t.clientLeft,n=(0,S.sb)(t)?x(t):s(1),l=t.clientWidth*n.x,C=t.clientHeight*n.y,a={width:l,height:C,x:r*n.x,y:o*n.y}}else{let i=$(e);a={x:t.x-i.x,y:t.y-i.y,width:t.width,height:t.height}}return b(a)}function R(e){return"static"===(0,S.L9)(e).position}function F(e,t){if(!(0,S.sb)(e)||"fixed"===(0,S.L9)(e).position)return null;if(t)return t(e);let i=e.offsetParent;return(0,S.ep)(e)===i&&(i=i.ownerDocument.body),i}function D(e,t){let i=(0,S.zk)(e);if((0,S.Tf)(e))return i;if(!(0,S.sb)(e)){let t=(0,S.$4)(e);for(;t&&!(0,S.eu)(t);){if((0,S.vq)(t)&&!R(t))return t;t=(0,S.$4)(t)}return i}let o=F(e,t);for(;o&&(0,S.Lv)(o)&&R(o);)o=F(o,t);return o&&(0,S.eu)(o)&&R(o)&&!(0,S.sQ)(o)?i:o||(0,S.gJ)(e)||i}let B=async function(e){let t=this.getOffsetParent||D,i=this.getDimensions,o=await i(e.floating);return{reference:function(e,t,i){let o=(0,S.sb)(t),r=(0,S.ep)(t),a="fixed"===i,n=E(e,!0,a,t),l={scrollLeft:0,scrollTop:0},C=s(0);if(o||!o&&!a)if(("body"!==(0,S.mq)(t)||(0,S.ZU)(r))&&(l=(0,S.CP)(t)),o){let e=E(t,!0,a,t);C.x=e.x+t.clientLeft,C.y=e.y+t.clientTop}else r&&(C.x=z(r));a&&!o&&r&&(C.x=z(r));let d=!r||o||a?s(0):P(r,l);return{x:n.left+l.scrollLeft-C.x-d.x,y:n.top+l.scrollTop-C.y-d.y,width:n.width,height:n.height}}(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}},I={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:i,offsetParent:o,strategy:r}=e,a="fixed"===r,n=(0,S.ep)(o),l=!!t&&(0,S.Tf)(t.floating);if(o===n||l&&a)return i;let C={scrollLeft:0,scrollTop:0},d=s(1),H=s(0),V=(0,S.sb)(o);if((V||!V&&!a)&&(("body"!==(0,S.mq)(o)||(0,S.ZU)(n))&&(C=(0,S.CP)(o)),V)){let e=E(o);d=x(o),H.x=e.x+o.clientLeft,H.y=e.y+o.clientTop}let c=!n||V||a?s(0):P(n,C);return{width:i.width*d.x,height:i.height*d.y,x:i.x*d.x-C.scrollLeft*d.x+H.x+c.x,y:i.y*d.y-C.scrollTop*d.y+H.y+c.y}},getDocumentElement:S.ep,getClippingRect:function(e){let{element:t,boundary:i,rootBoundary:a,strategy:n}=e,s=[..."clippingAncestors"===i?(0,S.Tf)(t)?[]:function(e,t){let i=t.get(e);if(i)return i;let o=(0,S.v9)(e,[],!1).filter(e=>(0,S.vq)(e)&&"body"!==(0,S.mq)(e)),r=null,a="fixed"===(0,S.L9)(e).position,n=a?(0,S.$4)(e):e;for(;(0,S.vq)(n)&&!(0,S.eu)(n);){let t=(0,S.L9)(n),i=(0,S.sQ)(n);i||"fixed"!==t.position||(r=null),(a?i||r:!(!i&&"static"===t.position&&r&&("absolute"===r.position||"fixed"===r.position)||(0,S.ZU)(n)&&!i&&function e(t,i){let o=(0,S.$4)(t);return!(o===i||!(0,S.vq)(o)||(0,S.eu)(o))&&("fixed"===(0,S.L9)(o).position||e(o,i))}(e,n)))?r=t:o=o.filter(e=>e!==n),n=(0,S.$4)(n)}return t.set(e,o),o}(t,this._c):[].concat(i),a],l=T(t,s[0],n),C=l.top,d=l.right,H=l.bottom,V=l.left;for(let e=1;e<s.length;e++){let i=T(t,s[e],n);C=r(i.top,C),d=o(i.right,d),H=o(i.bottom,H),V=r(i.left,V)}return{width:d-V,height:H-C,x:V,y:C}},getOffsetParent:D,getElementRects:B,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:i}=k(e);return{width:t,height:i}},getScale:x,isElement:S.vq,isRTL:function(e){return"rtl"===(0,S.L9)(e).direction}};function q(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function N(e,t,i,a){let s;void 0===a&&(a={});let{ancestorScroll:l=!0,ancestorResize:C=!0,elementResize:d="function"==typeof ResizeObserver,layoutShift:H="function"==typeof IntersectionObserver,animationFrame:V=!1}=a,c=Z(e),L=l||C?[...c?(0,S.v9)(c):[],...t?(0,S.v9)(t):[]]:[];L.forEach(e=>{l&&e.addEventListener("scroll",i,{passive:!0}),C&&e.addEventListener("resize",i)});let h=c&&H?function(e,t){let i,a=null,s=(0,S.ep)(e);function l(){var e;clearTimeout(i),null==(e=a)||e.disconnect(),a=null}return!function C(d,H){void 0===d&&(d=!1),void 0===H&&(H=1),l();let V=e.getBoundingClientRect(),{left:c,top:L,width:h,height:u}=V;if(d||t(),!h||!u)return;let M={rootMargin:-n(L)+"px "+-n(s.clientWidth-(c+h))+"px "+-n(s.clientHeight-(L+u))+"px "+-n(c)+"px",threshold:r(0,o(1,H))||1},p=!0;function m(t){let o=t[0].intersectionRatio;if(o!==H){if(!p)return C();o?C(!1,o):i=setTimeout(()=>{C(!1,1e-7)},1e3)}1!==o||q(V,e.getBoundingClientRect())||C(),p=!1}try{a=new IntersectionObserver(m,{...M,root:s.ownerDocument})}catch(e){a=new IntersectionObserver(m,M)}a.observe(e)}(!0),l}(c,i):null,u=-1,M=null;d&&(M=new ResizeObserver(e=>{let[o]=e;o&&o.target===c&&M&&t&&(M.unobserve(t),cancelAnimationFrame(u),u=requestAnimationFrame(()=>{var e;null==(e=M)||e.observe(t)})),i()}),c&&!V&&M.observe(c),t&&M.observe(t));let p=V?E(e):null;return V&&function t(){let o=E(e);p&&!q(p,o)&&i(),p=o,s=requestAnimationFrame(t)}(),i(),()=>{var e;L.forEach(e=>{l&&e.removeEventListener("scroll",i),C&&e.removeEventListener("resize",i)}),null==h||h(),null==(e=M)||e.disconnect(),M=null,V&&cancelAnimationFrame(s)}}let U=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var i,o;let{x:r,y:a,placement:n,middlewareData:s}=t,l=await y(t,e);return n===(null==(i=s.offset)?void 0:i.placement)&&null!=(o=s.arrow)&&o.alignmentOffset?{}:{x:r+l.x,y:a+l.y,data:{...l,placement:n}}}}},j=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){let{x:i,y:a,placement:n,platform:s}=t,{mainAxis:l=!0,crossAxis:H=!1,limiter:c={fn:e=>{let{x:t,y:i}=e;return{x:t,y:i}}},...h}=C(e,t),u={x:i,y:a},M=await s.detectOverflow(t,h),p=L(d(n)),m=V(p),g=u[m],f=u[p];if(l){let e="y"===m?"top":"left",t="y"===m?"bottom":"right",i=g+M[e],a=g-M[t];g=r(i,o(g,a))}if(H){let e="y"===p?"top":"left",t="y"===p?"bottom":"right",i=f+M[e],a=f-M[t];f=r(i,o(f,a))}let b=c.fn({...t,[m]:g,[p]:f});return{...b,data:{x:b.x-i,y:b.y-a,enabled:{[m]:l,[p]:H}}}}}},W=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var i,o,r,a,n,s,l,f;let b,_,A,{placement:w,middlewareData:v,rects:y,initialPlacement:S,platform:k,elements:Z}=t,{mainAxis:x=!0,crossAxis:O=!0,fallbackPlacements:$,fallbackStrategy:E="bestFit",fallbackAxisSideDirection:z="none",flipAlignment:P=!0,...T}=C(e,t);if(null!=(i=v.arrow)&&i.alignmentOffset)return{};let R=d(w),F=L(S),D=d(S)===S,B=await (null==k.isRTL?void 0:k.isRTL(Z.floating)),I=$||(D||!P?[g(S)]:(b=g(S),[h(S),b,h(b)])),q="none"!==z;!$&&q&&I.push(...(_=H(S),A=function(e,t,i){switch(e){case"top":case"bottom":if(i)return t?M:u;return t?u:M;case"left":case"right":return t?p:m;default:return[]}}(d(S),"start"===z,B),_&&(A=A.map(e=>e+"-"+_),P&&(A=A.concat(A.map(h)))),A));let N=[S,...I],U=await k.detectOverflow(t,T),j=[],W=(null==(o=v.flip)?void 0:o.overflows)||[];if(x&&j.push(U[R]),O){let e,t,i,o,r=(s=w,l=y,void 0===(f=B)&&(f=!1),e=H(s),i=c(t=V(L(s))),o="x"===t?e===(f?"end":"start")?"right":"left":"start"===e?"bottom":"top",l.reference[i]>l.floating[i]&&(o=g(o)),[o,g(o)]);j.push(U[r[0]],U[r[1]])}if(W=[...W,{placement:w,overflows:j}],!j.every(e=>e<=0)){let e=((null==(r=v.flip)?void 0:r.index)||0)+1,t=N[e];if(t&&("alignment"!==O||F===L(t)||W.every(e=>L(e.placement)!==F||e.overflows[0]>0)))return{data:{index:e,overflows:W},reset:{placement:t}};let i=null==(a=W.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!i)switch(E){case"bestFit":{let e=null==(n=W.filter(e=>{if(q){let t=L(e.placement);return t===F||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:n[0];e&&(i=e);break}case"initialPlacement":i=S}if(w!==i)return{reset:{placement:i}}}return{}}}},G=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){var i,a;let n,s,{placement:l,rects:V,platform:c,elements:h}=t,{apply:u=()=>{},...M}=C(e,t),p=await c.detectOverflow(t,M),m=d(l),g=H(l),f="y"===L(l),{width:b,height:_}=V.floating;"top"===m||"bottom"===m?(n=m,s=g===(await (null==c.isRTL?void 0:c.isRTL(h.floating))?"start":"end")?"left":"right"):(s=m,n="end"===g?"top":"bottom");let A=_-p.top-p.bottom,w=b-p.left-p.right,v=o(_-p[n],A),y=o(b-p[s],w),S=!t.middlewareData.shift,k=v,Z=y;if(null!=(i=t.middlewareData.shift)&&i.enabled.x&&(Z=w),null!=(a=t.middlewareData.shift)&&a.enabled.y&&(k=A),S&&!g){let e=r(p.left,0),t=r(p.right,0),i=r(p.top,0),o=r(p.bottom,0);f?Z=b-2*(0!==e||0!==t?e+t:r(p.left,p.right)):k=_-2*(0!==i||0!==o?i+o:r(p.top,p.bottom))}await u({...t,availableWidth:Z,availableHeight:k});let x=await c.getDimensions(h.floating);return b!==x.width||_!==x.height?{reset:{rects:!0}}:{}}}},K=e=>({name:"arrow",options:e,async fn(t){let{x:i,y:a,placement:n,rects:s,platform:l,elements:d,middlewareData:h}=t,{element:u,padding:M=0}=C(e,t)||{};if(null==u)return{};let p=f(M),m={x:i,y:a},g=V(L(n)),b=c(g),_=await l.getDimensions(u),A="y"===g,w=A?"clientHeight":"clientWidth",v=s.reference[b]+s.reference[g]-m[g]-s.floating[b],y=m[g]-s.reference[g],S=await (null==l.getOffsetParent?void 0:l.getOffsetParent(u)),k=S?S[w]:0;k&&await (null==l.isElement?void 0:l.isElement(S))||(k=d.floating[w]||s.floating[b]);let Z=k/2-_[b]/2-1,x=o(p[A?"top":"left"],Z),O=o(p[A?"bottom":"right"],Z),$=k-_[b]-O,E=k/2-_[b]/2+(v/2-y/2),z=r(x,o(E,$)),P=!h.arrow&&null!=H(n)&&E!==z&&s.reference[b]/2-(E<x?x:O)-_[b]/2<0,T=P?E<x?E-x:E-$:0;return{[g]:m[g]+T,data:{[g]:z,centerOffset:E-z-T,...P&&{alignmentOffset:T}},reset:P}}}),Q=(e,t,i)=>{let o=new Map,r={platform:I,...i},a={...r.platform,_c:o};return w(e,t,{...r,platform:a})}},4268(e,t,i){"use strict";let o;function r(){return"u">typeof window}function a(e){return l(e)?(e.nodeName||"").toLowerCase():"#document"}function n(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function s(e){var t;return null==(t=(l(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function l(e){return!!r()&&(e instanceof Node||e instanceof n(e).Node)}function C(e){return!!r()&&(e instanceof Element||e instanceof n(e).Element)}function d(e){return!!r()&&(e instanceof HTMLElement||e instanceof n(e).HTMLElement)}function H(e){return!(!r()||"u"<typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof n(e).ShadowRoot)}function V(e){let{overflow:t,overflowX:i,overflowY:o,display:r}=b(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+i)&&"inline"!==r&&"contents"!==r}function c(e){return/^(table|td|th)$/.test(a(e))}function L(e){try{if(e.matches(":popover-open"))return!0}catch(e){}try{return e.matches(":modal")}catch(e){return!1}}let h=/transform|translate|scale|rotate|perspective|filter/,u=/paint|layout|strict|content/,M=e=>!!e&&"none"!==e;function p(e){let t=C(e)?b(e):e;return M(t.transform)||M(t.translate)||M(t.scale)||M(t.rotate)||M(t.perspective)||!g()&&(M(t.backdropFilter)||M(t.filter))||h.test(t.willChange||"")||u.test(t.contain||"")}function m(e){let t=A(e);for(;d(t)&&!f(t);){if(p(t))return t;if(L(t))break;t=A(t)}return null}function g(){return null==o&&(o="u">typeof CSS&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),o}function f(e){return/^(html|body|#document)$/.test(a(e))}function b(e){return n(e).getComputedStyle(e)}function _(e){return C(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function A(e){if("html"===a(e))return e;let t=e.assignedSlot||e.parentNode||H(e)&&e.host||s(e);return H(t)?t.host:t}function w(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}i.d(t,{$4:()=>A,CP:()=>_,L9:()=>b,Lv:()=>c,Tc:()=>g,Tf:()=>L,ZU:()=>V,_m:()=>w,ep:()=>s,eu:()=>f,gJ:()=>m,mq:()=>a,sQ:()=>p,sb:()=>d,v9:()=>function e(t,i,o){var r;void 0===i&&(i=[]),void 0===o&&(o=!0);let a=function e(t){let i=A(t);return f(i)?t.ownerDocument?t.ownerDocument.body:t.body:d(i)&&V(i)?i:e(i)}(t),s=a===(null==(r=t.ownerDocument)?void 0:r.body),l=n(a);if(!s)return i.concat(a,e(a,[],o));{let t=w(l);return i.concat(l,l.visualViewport||[],V(a)?a:[],t&&o?e(t):[])}},vq:()=>C,zk:()=>n})},751(e,t,i){"use strict";var o=i(5077),r=i(9356),a=i(6231),n=i(3078),s=(0,o.AH)`:host {
|
|
21841
|
+
SHA stored in binary: ${this.transport.hexify(a)}`),r}return V}async writeFlash(e){let t,i;if(this.debug("EspLoader program"),"keep"!==e.flashSize){let t=this.flashSizeBytes(e.flashSize);for(let i=0;i<e.fileArray.length;i++)if(e.fileArray[i].data.length+e.fileArray[i].address>t)throw new l(`File ${i+1} doesn't fit in the available flash`)}!0===this.IS_STUB&&!0===e.eraseAll&&await this.eraseFlash();for(let o=0;o<e.fileArray.length;o++){let r;if(this.debug("Data Length "+e.fileArray[o].data.length),t=e.fileArray[o].data,this.debug("Image Length "+t.length),0===t.length){this.debug("Warning: File is empty");continue}t=tN(t,4),i=e.fileArray[o].address,t=await this._updateImageFlashParams(t,i,e.flashMode,e.flashFreq,e.flashSize);let a=null;e.calculateMD5Hash&&(a=e.calculateMD5Hash(t),this.debug("Image MD5 "+a));let n=t.length;e.compress?(t=tT(t,{level:9}),r=await this.flashDeflBegin(n,t.length,i)):r=await this.flashBegin(n,i);let s=0,C=0,d=t.length;e.reportProgress&&e.reportProgress(o,0,d);let H=new Date,V=H.getTime(),c=5e3,L=new tD({chunkSize:1}),h=0;L.onData=function(e){h+=e.byteLength};let u=0;for(;u<t.length;){this.debug("Write loop "+i+" "+s+" "+r),this.info("Writing at 0x"+(i+(e.compress?h:C)).toString(16)+"... ("+Math.floor(100*(s+1)/r)+"%)");let a=Math.min(this.FLASH_WRITE_SIZE,t.length-u),n=t.slice(u,u+a),l=u+a>=t.length;if(e.compress){let e=h;L.push(n,l);let t=h-e,i=3e3;this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,t)>3e3&&(i=this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,t)),!1===this.IS_STUB&&(c=i),await this.flashDeflBlock(n,s,c),this.IS_STUB&&(c=i)}else{let e=n;n.length<this.FLASH_WRITE_SIZE&&(e=new Uint8Array(this.FLASH_WRITE_SIZE).fill(255)).set(n);let t=3e3;this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,e.length)>3e3&&(t=this.timeoutPerMb(this.ERASE_WRITE_TIMEOUT_PER_MB,e.length)),!1===this.IS_STUB&&(c=t),await this.flashBlock(e,s,c),this.IS_STUB&&(c=t)}C+=n.length,u+=a,s++,e.reportProgress&&e.reportProgress(o,C,d)}this.IS_STUB&&(e.compress?await this.flashDeflFinish(!1,c):await this.flashFinish(!1,c));let M=(H=new Date).getTime()-V;if(e.compress?this.info("Wrote "+n+" bytes ("+C+" compressed) at 0x"+i.toString(16)+" in "+M/1e3+" seconds."):this.info("Wrote "+C+" bytes at 0x"+i.toString(16)+" in "+M/1e3+" seconds."),a){this.info("File md5: "+a);let e=await this.flashMd5sum(i,n);if(this.info("Flash md5: "+e),new String(e).valueOf()!=new String(a).valueOf())throw new l("MD5 of file does not match data in flash!");this.info("Hash of data verified.")}}this.info("Leaving...")}async flashId(){this.debug("flash_id");let e=await this.readFlashId();this.info("Manufacturer: "+(255&e).toString(16));let t=e>>16&255;this.info("Device: "+(e>>8&255).toString(16)+t.toString(16)),this.info("Detected flash size: "+this.DETECTED_FLASH_SIZES[t])}async detectFlashSize(){this.debug("detectFlashSize");let e=await this.readFlashId(),t=this.DETECTED_FLASH_SIZES[e>>16&255];return t?this.info("Auto-detected Flash size: "+t):(t="4MB",this.info("Could not auto-detect Flash size. defaulting to 4MB")),t}async softReset(e){if(this.IS_STUB)if("ESP8266"!=this.chip.CHIP_NAME)throw new l("Soft resetting is currently only supported on ESP8266");else e?(await this.flashBegin(0,0),await this.flashFinish(!0)):await this.command(this.ESP_RUN_USER_CODE,void 0,void 0,!1);else e||(await this.flashBegin(0,0),await this.flashFinish(!1))}async after(e="hard_reset",t,i){switch(e){case"hard_reset":if(this.resetConstructors.hardReset){this.info("Hard resetting via RTS pin...");let e=this.resetConstructors.hardReset(this.transport,t);await e.reset()}break;case"soft_reset":this.info("Soft resetting..."),await this.softReset(!1);break;case"no_reset_stub":this.info("Staying in flasher stub.");break;case"custom_reset":if(i||this.info("Custom reset sequence not provided, doing nothing."),this.resetConstructors.customReset||this.info("Custom reset constructor not available, doing nothing."),this.resetConstructors.customReset&&i){this.info("Custom resetting using sequence "+i);let e=this.resetConstructors.customReset(this.transport,i);await e.reset()}break;default:this.info("Staying in bootloader."),this.IS_STUB&&this.softReset(!0)}}}var iu=i(8283),iM=i(8716);let ip=0;function im(){ip=Date.now()}function ig(e=6e3){return Date.now()-ip<e}async function ib(e){let t=e.getInfo(),i=[];try{i=await navigator.serial.getPorts()}catch{}return{fresh:i.filter(i=>{let o;return i!==e&&(o=i.getInfo(),void 0!==o.usbVendorId&&void 0!==o.usbProductId&&o.usbVendorId===t.usbVendorId&&o.usbProductId===t.usbProductId)}),cachedGranted:i.includes(e)}}async function i_(e,t){let{baudRate:i,bufferSize:o,timeoutMs:r=8e3,cancelled:a=()=>!1,onOpened:n}=t,s=Date.now()+r,l=null;for(;!a();){let{fresh:t}=await ib(e);for(let r of[...t,e]){if(!1===r.connected){l=Error("port device disconnected");continue}if(r.readable){if(r.readable.locked){l=Error("port stream already locked");continue}return r}try{return await r.open(o?{baudRate:i,bufferSize:o}:{baudRate:i}),n?.(r),r}catch(o){l=o;let e=o instanceof DOMException?o.name:"",t=o instanceof Error?o.message:"",i=r.readable;if("InvalidStateError"===e&&/already open/i.test(t)&&i&&!i.locked)return r}}if(Date.now()>=s){console.error("[Web Serial] Failed to reopen port:",l);break}if(a())break;await (0,iM.y)(200)}return null}function iA(e){let{usbVendorId:t,usbProductId:i}=e.getInfo();return 12346===t&&4097===i}function iw(){return"serial"in navigator?"available":"u">typeof window&&!window.isSecureContext?"insecure-context":"unsupported"}function iv(){return"available"===iw()}function iy(e){return e instanceof DOMException&&"NotFoundError"===e.name}let iS={25:"ESP32-H21",28:"ESP32-H4",31:"ESP32-E22",32:"ESP32-S31"};class ik extends Error{constructor(e){super(`${e} is not supported by browser flashing yet — download the firmware and flash it with esptool from the command line instead`),this.name="UnsupportedChipError",this.chipName=e}}async function iZ(e){let t;if(e.chip?.CHIP_NAME!=="ESP32-P4")return;try{[,t]=await e.command(20)}catch{return}if(t.length<16)return;let i=new DataView(t.buffer,t.byteOffset).getUint32(12,!0);if(18!==i)throw new ik(iS[i]??`unsupported ESP chip (chip id ${i})`)}function ix(){if("u"<typeof window||"0.0.0.0"!==window.location.hostname)return null;let e=new URL(window.location.href);return e.hostname="127.0.0.1",e.toString()}async function iO(e,t){im();let i=new tG(e,!1),o=new ih({transport:i,baudrate:115200,terminal:t?{clean:()=>{},writeLine:e=>t(e),write:e=>t(e)}:void 0}),r=[],a=o.debug;t&&(o.debug=(e,t)=>{r.push(e),r.length>80&&r.shift(),a.call(o,e,t)});try{let t=o.runStub.bind(o);return o.runStub=async()=>(await iZ(o),t()),{chipName:await o.main(),port:e,transport:i,loader:o}}catch(o){if(t){if(!(o instanceof ik))for(let e of r)t(e);t(`Error: ${(0,iu.u)(o)}`)}try{await i.disconnect()}catch{try{await e.close()}catch{}}throw o}finally{t&&(o.debug=a)}}async function i$(e){return im(),iO(await navigator.serial.requestPort(),e)}async function iE(e){return im(),(await e.chip.readMac(e)).toUpperCase()}async function iz(e){im();try{let t=await e.readFlash(65568,256);if(0xabcd5432!==new DataView(t.buffer,t.byteOffset,t.byteLength).getUint32(0,!0))return null;let i=new TextDecoder("utf-8"),o=(e,o)=>{let r=t.subarray(e,e+o),a=r.indexOf(0);return i.decode(r.subarray(0,-1===a?r.length:a))},r=o(16,32),a=o(48,32);if(!a)return null;return{board_id:a,version:r}}catch{return null}}async function iP(e,t,i,o){im(),await e.writeFlash({fileArray:[{data:t,address:i}],flashSize:"keep",flashMode:"keep",flashFreq:"keep",eraseAll:!1,compress:!0,reportProgress:(e,t,i)=>{im(),o?.({fileIndex:e,written:t,total:i,percent:Math.round(t/i*100)})}})}let iT={"ESP32-S2":{wdtConfig0:0x3f408094,wdtConfig1:0x3f408098,wdtWProtect:0x3f4080ac},"ESP32-S3":{wdtConfig0:0x60008098,wdtConfig1:0x6000809c,wdtWProtect:0x600080b0},"ESP32-C2":{wdtConfig0:0x60008084,wdtConfig1:0x60008088,wdtWProtect:0x6000809c},"ESP32-C3":{wdtConfig0:0x60008090,wdtConfig1:0x60008094,wdtWProtect:0x600080a8}};async function iR(e,t){let i=e.chip?.CHIP_NAME?iT[e.chip.CHIP_NAME]:void 0;if(!i)return!1;try{await t.setDTR(!1),await t.setRTS(!1)}catch{}try{await e.writeReg(i.wdtWProtect,0x50d83aa1),await e.writeReg(i.wdtConfig1,2e3),await e.writeReg(i.wdtConfig0,0xd0000102),await e.writeReg(i.wdtWProtect,0)}catch{}return await new Promise(e=>setTimeout(e,200)),!0}async function iF(e,t,i){await e.setDTR(!1),await e.setRTS(!0),await (0,iM.y)(t),await e.setRTS(!1),i>0&&await (0,iM.y)(i)}async function iD(e,t,i){await iR(e,t)||(iA(i)?await iF(t,200,200):await iF(t,100,0))}async function iB(e,t,i){im();try{await iD(e,t,i)}finally{await t.disconnect(),im()}}async function iI(e){im(),await e.disconnect()}},332(e,t,i){"use strict";function o(e){if(!e)return"";let t=e.replace(/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,"").replace(/[\t\r\n]/g,"");try{let e=new URL(t);if("http:"!==e.protocol&&"https:"!==e.protocol||t.slice(e.protocol.length).replace(/^[/\\]+/,"").split(/[/?#\\]/,1)[0].includes("@"))return"";return t}catch{return""}}function r(e){return a(e.address||e.ip,e.web_port)}function a(e,t){return null!=t&&e?o(`http://${e.startsWith("[")||!e.includes(":")?e:`[${e}]`}${80===t?"":`:${t}`}`):""}i.d(t,{Gv:()=>r,Nl:()=>a,hM:()=>o})},9757(e,t,i){"use strict";var o=i(5089),r=i(5016),a=i(2765),n=i(1150),s=i(4125);function l(e){let t=(0,s.MT)(e).find(e=>r.Xo.has(e.key));if(!t)return null;let i=(0,a.D)(e),o=null,l=null,C=null;for(let e=t.fromLine;e<t.toLine&&e<i.length;e++){let t=i[e];if(!t.trim()||t.trim().startsWith("#"))continue;let r=(0,s.p0)(t);C??=r,r===C&&(o??=(0,n.K)(t,"board"),l??=(0,n.K)(t,"variant"))}return{platform:(0,r.bk)(t.key),board:o,variant:l}}function C(e,t){return e!==(0,r.bk)(t.esphome.platform)}function d(e){return e.esphome.variant||e.esphome.mcu||null}function H(e,t){let i=d(t);return!!(e&&i&&(0,o.S)(e)!==(0,o.S)(i))}function V(e,t){return!!C(e.platform,t)||!!e.board&&e.board.toLowerCase()!==t.esphome.board.toLowerCase()||H(e.variant,t)}i.d(t,{GP:()=>l,LW:()=>H,cq:()=>d,nW:()=>V,tv:()=>C})},2765(e,t,i){"use strict";function o(e){let t=e.split(/\r?\n/),i=t.length-1;return t[i].endsWith("\r")&&(t[i]=t[i].slice(0,-1)),t}function r(e){let t=0,i=0;for(let o=e.indexOf("\n");-1!==o;o=e.indexOf("\n",o+1))"\r"===e[o-1]?t++:i++;return t>i?"\r\n":"\n"}i.d(t,{D:()=>o,y:()=>r})},9470(e,t,i){"use strict";function o(e){return e<32||127===e||e>=128&&e<=159||e>=57344&&e<=63743||e>=983040&&e<=1048573||e>=1048576&&e<=1114109}function r(e){for(let t of e)if(o(t.codePointAt(0)))return!0;return!1}function a(e,t){let i=e[t],o="x"===i?2:"u"===i?4:8*("U"===i);if(!o)return null;let r=e.slice(t+1,t+1+o);if(r.length!==o||!/^[0-9a-fA-F]+$/.test(r))return null;let a=parseInt(r,16);return a>1114111||a>=55296&&a<=57343?null:[String.fromCodePoint(a),1+o]}let n={},s={'"':'\\"',"\n":"\\n","\r":"\\r"," ":"\\t"},l={"\\":"\\"},C={"\\":"\\",'"':'"',n:"\n",r:"\r",t:" "},d={"\n":"\\n","\r":"\\r"," ":"\\t"},H={"\\":"\\",n:"\n",r:"\r",t:" "};function V(e,t){let i="";for(let r of e){let e=r.codePointAt(0);if("\\"===r)i+="\\\\";else if(void 0!==t[r])i+=t[r];else if(o(e))i+=e<=255?`\\x${e.toString(16).toUpperCase().padStart(2,"0")}`:e<=65535?`\\u${e.toString(16).toUpperCase().padStart(4,"0")}`:`\\U${e.toString(16).toUpperCase().padStart(8,"0")}`;else i+=r}return i}function c(e,t){if(!e.includes("\\"))return e;let i="";for(let o=0;o<e.length;o++){if("\\"!==e[o]||o+1>=e.length){i+=e[o];continue}let r=a(e,o+1);if(r){i+=r[0],o+=r[1];continue}let n=t[e[o+1]];void 0!==n?(i+=n,o+=1):i+=e[o]}return i}function L(e){return V(e,s)}function h(e){return c(e,C)}function u(e){let t="";for(let i=0;i<e.length;i++){let o=e[i];if('"'===o)return null;if("\\"!==o){t+=o;continue}if(i+1>=e.length)return null;let r=a(e,i+1);if(r){t+=r[0],i+=r[1];continue}let n=C[e[i+1]];if(void 0===n)return null;t+=n,i+=1}return t}function M(e){return/^(?:[^']|'')*$/.test(e)?e.replace(/''/g,"'"):null}function p(e){return V(e,n)}function m(e){return c(e,l)}function g(e){return V(e,d)}function f(e){return c(e,H)}i.d(t,{QJ:()=>M,hZ:()=>p,iI:()=>m,k9:()=>L,kk:()=>g,lm:()=>u,pV:()=>f,rq:()=>h,td:()=>r})},1150(e,t,i){"use strict";var o=i(2765),r=i(9808),a=i(9789);let n=new Map;function s(e,t){let i="id"===t||"platform"===t,o=n.get(t);void 0===o&&(o=i?RegExp(`^\\s*(?:-\\s+)?${t}:\\s*["']?(\\S+?)["']?(?:\\s+#.*)?\\s*$`):RegExp(`^\\s*(?:-\\s+)?${t}:\\s*(.*)$`),n.set(t,o));let a=e.match(o);if(!a)return null;if(i)return a[1];let{value:s}=(0,r.bw)(a[1]),l=s.trim();return l.startsWith("#")?null:(0,r.Ir)(l).trim()||null}function l(e,t,i){let r=new Set;if(!e)return r;let n=void 0===i;for(let l of(0,o.D)(e)){if(!/^\s/.test(l)){let e=l.match(a.lF);void 0!==i&&(e||a.ET.test(l))&&(n=null!==e&&e[1]===i);continue}if(!n)continue;let e=s(l,t);null!==e&&r.add(e)}return r}i.d(t,{K:()=>s,p:()=>l})},8818(e,t,i){"use strict";var o=i(9789);let r=/(^|\s)#/,a=/^\s*(?:-\s+)?([A-Za-z0-9_.]+)\s*:\s*(.*)$/,n=/^\s*-\s/,s=/^\s*-\s+([^\s:#]+)/;function l(e){let t=e.match(s);return t?{key:t[1],contentCol:t[0].length-t[1].length}:null}let C=/^\s*(?:-\s+)?platform\s*:\s*("[^"]*"|'[^']*'|[A-Za-z0-9_]+)\s*$/;function d(e){let t=0;for(;t<e.length&&" "===e[t];)t++;return t}function H(e){let t=e.match(r);return t?e.slice(0,t.index+t[0].length-1).trimEnd():e.trimEnd()}function V(e){if(e.length<2)return e;let t=e[0];return('"'===t||"'"===t)&&e[e.length-1]===t?e.slice(1,-1):e}function c(e,t,i,o=!1){for(let r=t-1;r>=0;r--){let t=H(e.line(r+1).text);if(!t.trim())continue;let s=d(t);if(s>=i)continue;let l=t.match(a);if(l&&!(o&&""!==l[2]&&n.test(t)))return{key:l[1],indent:s,lineIdx:r}}return null}function L(e,t){let i=e.lineAt(t);return""!==i.text.trim()?null:{lineIdx:i.number-1,indent:t-i.from}}function h(e,t,i,o=!1){let r=[],a=i,n=t;for(;;){let t=c(e,n,a,o);if(!t)break;r.push(t.key),a=t.indent,n=t.lineIdx}return r.reverse()}function u(e,t){let i=H(e.line(t+1).text),o=i.match(a);return o&&""===o[2]?[...h(e,t,d(i),!0),o[1]]:null}function M(e,t,i){let o=new Set,r=(t,r)=>{for(let n=t;n>=0&&n<e.lines;n+=r){let t=H(e.line(n+1).text);if(!t.trim())continue;let r=d(t);if(r<i)break;if(r===i){let e=t.match(a);e&&o.add(e[1])}}};return r(t-1,-1),r(t+1,1),o}function p(e,t){for(let i=t-1;i>=0;i--){let t=H(e.line(i+1).text);if(!t.trim()||0!==d(t))continue;let r=t.match(o.lF);if(r)return r[1];if(o.ET.test(t))break}return null}function m(e,t,i){for(let o=t-1;o>=0;o--){let t=e.line(o+1).text,r=H(t);if(!r.trim()||d(r)>=i||!/^\s*-\s/.test(t))continue;let a=r.match(C);if(a)return V(a[1])}let o=t;for(let r=t-1;r>=0;r--){let t=e.line(r+1).text,a=H(t);if(!a.trim())continue;let n=d(a);if(n<i||n===i&&(o=r,/^\s*-\s/.test(t)))break}for(let t=o;t<e.lines;t++){let r=H(e.line(t+1).text);if(!r.trim())continue;let a=d(r);if(t!==o&&a<i)break;let n=r.match(C);if(n)return V(n[1])}return null}i.d(t,{EK:()=>p,F6:()=>l,GH:()=>L,N_:()=>c,Sl:()=>M,Xu:()=>u,_j:()=>d,_n:()=>V,aQ:()=>h,eJ:()=>H,m_:()=>m},{JO:r,Ud:a,X$:n})},9808(e,t,i){"use strict";i.d(t,{Tg:()=>L,N_:()=>c,Wg:()=>M,Qj:()=>d,bw:()=>n,dZ:()=>s,X9:()=>l,Ir:()=>a,sS:()=>h});var o=i(9470),r=i(8851);let a=e=>e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replace(/''/g,"'"):e,n=e=>{let t=!1,i=!1;for(let o=0;o<e.length;o++){let r=e[o];if("\\"===r&&i){o++;continue}if('"'!==r||t)if("'"!==r||i){if("#"===r&&!t&&!i&&(" "===e[o-1]||" "===e[o-1])){let t=o;for(;t>0&&(" "===e[t-1]||" "===e[t-1]);)t--;return{value:e.slice(0,t),comment:e.slice(t)}}}else t=!t;else i=!i}return{value:e,comment:""}},s=e=>e.startsWith("#")?{value:"",comment:` ${e}`}:n(e),l=(e,t)=>t?s(e):n(e),C=/^!lambda\s+([\s\S]+)$/,d=e=>{let t,{value:i}=n(e),o=(t=i.match(C))?{_lambda:a(t[1].trim()),_tag:"!lambda"}:null;return null!==o?o:L(a(i),c(i))},H=/^[-+]?(?:0|[1-9]\d*(?:_\d+)*)$/,V=/^[-+]?(?:(?:0|[1-9]\d*(?:_\d+)*)\.(?:\d+(?:_\d+)*)?|\.\d+(?:_\d+)*)$/,c=e=>e.length>=2&&(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")),L=(e,t)=>{if(t)return e;let i=(0,r.FY)(e);if(null!==i)return i;if(H.test(e)){let t=Number(e.replace(/_/g,""));return Number.isSafeInteger(t)?t:e}if(V.test(e)){let t=Number(e.replace(/_/g,""));return Number.isFinite(t)?t:e}return e};function h(e){return u(e)?(0,o.rq)(e.slice(1,-1)):a(e)}let u=e=>e.length>=2&&e.startsWith('"')&&e.endsWith('"'),M=e=>{let t=e.slice(1,-1).trim();return""===t?[]:(function(e){let t=[],i="",o=null;for(let r=0;r<e.length;r++){let a=e[r];o?(i+=a,'"'===o&&"\\"===a&&r+1<e.length?i+=e[++r]:a===o&&(o=null)):'"'===a||"'"===a?(o=a,i+=a):","===a?(t.push(i),i=""):i+=a}return t.push(i),t})(t).map(e=>{let t=e.trim();return u(t)?h(t):L(a(t),c(t))})}},9789(e,t,i){"use strict";let o="[^\\s:#]*",r=`[a-zA-Z_]${o}`,a=/^[a-zA-Z_.]/,n=RegExp(`^\\.${o}:`),s=RegExp(`^\\s*-\\s+(${r}):\\s*(.*)$`),l=/^(?:(!\S+)\s+)?([|>][-+]?)\s*(?:#.*)?$/,C=/^(\s*-\s*)\S/,d=e=>e.trim().startsWith("#"),H=e=>""===e.trim()||d(e),V=e=>e.match(/^ */)[0],c=(e,t)=>{let i=V(e);if(i.length<t.length)return!1;let o=e.slice(i.length);return"-"===o||o.startsWith("- ")},L=/^(?:then|else|on_[a-z0-9_]*|[a-z0-9_]+_action)$/;function h(e){return L.test(e)}i.d(t,{DX:()=>h},{AL:(e,t)=>{let i=`${t}-`;if(!e.startsWith(i))return!1;let o=e.slice(i.length);return""===o||o.startsWith(" ")},BJ:H,CC:/^ *([A-Za-z_][\w.]*):\s*(#.*)?$/,CI:e=>{let t=e.match(l);return t?{tag:t[1],marker:t[2]}:null},ET:n,G5:(e,t,i)=>{for(let o=t;o<e.length;o++){let t=e[o];if(H(t))continue;let r=V(t);if(r.length<=i.length)break;if("-"!==t[r.length])return r}return null},K7:(e,t)=>{let i=t;for(;i<e.length&&H(e[i]);)i++;return i},L1:s,MG:V,PL:/^[^"']*:\s*(?:!\S+\s+)?[|>][0-9+-]*\s*(?:#.*)?$/,PM:(e,t)=>{if(H(e))return!1;let i=V(e).length;return i<t||!(i>t)&&!c(e,e.slice(0,i))},QW:a,SU:c,Vi:/^\s*-\s*$/,WV:/^\s*-(\s|$)/,bn:r,eq:(e,t,i)=>{let o=e[t];if(i){let e=o.match(C);if(e)return" ".repeat(e[1].length)}let r=i?o.indexOf("-")+1:V(o).length;for(let i=t+1;i<e.length;i++){let t=e[i];if(H(t))continue;if(a.test(t))break;let o=V(t);if(o.length>r)return o;break}return i?" ":" "},iu:e=>RegExp(`^${e}-\\s+(.*)$`),lF:/^([a-zA-Z_][a-zA-Z0-9_]*):/,o1:C,uT:/^\s*-\s+[a-zA-Z_][\w.]*:(?:\s|$)/,w5:d,zM:e=>RegExp(`^${e}(${r}):(\\s*)(.*)$`)})},4175(e,t,i){"use strict";var o=i(9808),r=i(9789),a=i(8851);let n=(e,t,i)=>{if(e.includes(".")||(0,r.CI)(t))return null;let{value:n,comment:s}=(0,o.X9)(t,i);return""===n?{key:e,value:null}:n.startsWith("[")&&n.endsWith("]")?{key:e,value:a.aZ.wrap((0,o.Wg)(n),s)}:{key:e,value:(0,o.Qj)(n)}};i.d(t,{},{Fp:(e,t,i)=>{let o=t;for(;o<e.length&&(0,r.BJ)(e[o]);)o++;return o>=e.length?{dashIndent:i,firstDashIdx:o}:{dashIndent:e[o].match(/^( *)-/)?.[1]??i,firstDashIdx:o}},Ie:(e,t,i,a)=>{let n=[],s=[],l=[],C=t;for(;C<e.length;C++){if((0,r.BJ)(e[C]))continue;if(!e[C].startsWith(i))break;let t=e[C].match(a);if(!t)break;let{value:d,comment:H}=(0,o.dZ)(t[1].trim());n.push((0,o.Tg)((0,o.Ir)(d),(0,o.N_)(d))),s.push([C,C+1]),l.push(H)}return{items:n,endIdx:C,itemRanges:s,inlineComments:l}},fb:n,gL:(e,t,i)=>{let o=-1,a=t-1;for(let n=t;n<e.length;n++){if(""===e[n].trim())continue;let t=(0,r.MG)(e[n]).length;if(-1===o){if(t<=i)break;o=t}else if(t<o)break;a=n}return a+1},jl:(e,t,i)=>{let o=!1;for(let a=t;a<e.length;a++){let t=e[a];if(!(0,r.BJ)(t)){if((0,r.PM)(t,i.length))return{endIdx:a,isComplex:o};!o&&(r.PL.test(t)||r.uT.test(t)||r.Vi.test(t))&&(o=!0)}}return{endIdx:e.length,isComplex:o}},qn:(e,t)=>{let i=e.match(t);return i?n(i[1],i[3].trim(),i[2].length>0):null}})},8310(e,t,i){"use strict";i.d(t,{zZ:()=>p,pn:()=>M,WW:()=>g,wz:()=>m});var o=i(6049),r=i(8851);let a=e=>"!lambda"===e.tag&&"|-"===e.marker,n=e=>({_lambda:new r.ho(e).body.replace(/\n+$/,""),_tag:"!lambda"}),s=(e,t,i)=>a(e)?n(i):new r.ho(i,t);var l=i(2765),C=i(9808),d=i(9789),H=i(4175);let V=(e,t,i)=>{let o=`${i} `,{dashIndent:a,firstDashIdx:n}=(0,H.Fp)(e,t,o),s=(e[n]??"").match(d.o1),l=s?" ".repeat(s[1].length):(0,d.G5)(e,n+1,a)??`${a} `,{endIdx:C,isComplex:V}=(0,H.jl)(e,t,i);if(V){let i=h(e,t,a,l);return i?{value:i.items,endIdx:i.endIdx,isEmptyScalarList:!1,listSource:i.items.length>0?{itemRanges:i.itemRanges,dashIndent:a}:void 0}:{value:new r.ho(e.slice(t,C)),endIdx:C,isEmptyScalarList:!1}}let{items:c,endIdx:L,itemRanges:u,inlineComments:M}=(0,H.Ie)(e,t,`${a}- `,(0,d.iu)(a));return{value:c,endIdx:L,isEmptyScalarList:0===c.length,listSource:{itemRanges:u,inlineComments:M,dashIndent:a}}},c=(e,t,i)=>{let o=(0,d.K7)(e,t+1);if(o>=e.length)return null;let r=(0,d.MG)(e[o]);return r.length<=i?null:e[o].slice(r.length).startsWith("-")?"bail":u(e,t+1,r)},L=(e,t,i,o,r)=>{let a=t;for(;a<e.length;){let t=e[a];if((0,d.BJ)(t)){a++;continue}if(!t.startsWith(i))break;if(t.startsWith(`${i} `))return null;let n=(0,H.qn)(t,o);if(!n)return null;if(null===n.value){let t=c(e,a,i.length);if("bail"===t)return null;if(t){r[n.key]=Object.keys(t.values).length>0?t.values:n.value,a=t.endIdx;continue}}r[n.key]=n.value,a++}return a},h=(e,t,i,o)=>{let r=RegExp(`^${i}-\\s+(${d.bn}):(\\s*)(.*)$`),s=RegExp(`^${o}(${d.bn}):(\\s*)(.*)$`),l=t=>{let l=Object.create(null),C=null;if(!d.Vi.test(e[t])){let o=e[t].match(r);if(!o)return null;let s=o[1],V=o[2].length>0,c=o[3].trim();if(!V&&""!==c)return null;let L=(0,d.CI)(c);if(L){if(!a(L))return null;let o=(0,H.gL)(e,t+1,`${i} `.length),r=(0,d.K7)(e,o);return r<e.length&&(0,d.MG)(e[r]).length>i.length?null:(l[s]=n(e.slice(t+1,o)),{item:l,endIdx:o})}let h=(0,H.fb)(s,c,V);if(!h)return null;l[h.key]=h.value,null===h.value&&(C=h.key)}if(null!==C){let r=e[t].match(d.o1)?.[1].length??i.length+2,a=c(e,t,r);if("bail"===a)return null;if(a){Object.keys(a.values).length>0&&(l[C]=a.values);let t=L(e,a.endIdx,o,s,l);return null===t?null:{item:l,endIdx:t}}}let V=L(e,t+1,o,s,l);return null===V?null:{item:l,endIdx:V}},C=[],V=[],h=t;for(;h<e.length;){if((0,d.BJ)(e[h])){h++;continue}if(!(0,d.AL)(e[h],i))break;let t=l(h);if(!t)return null;C.push(t.item);let o=t.endIdx;for(;o>h+1&&(0,d.BJ)(e[o-1]);)o--;V.push([h,o]),h=t.endIdx}return{items:C,endIdx:h,itemRanges:V}};function u(e,t,i){let o=(0,d.zM)(i),a=Object.create(null),n=t;for(;n<e.length;){let t=e[n];if((0,d.BJ)(t)){n++;continue}if(!t.startsWith(i))break;let l=t.match(o);if(!l){n++;continue}let c=l[1],L=l[2].length>0,h=l[3].trim(),M=(0,d.CI)(h);if(M){let t=(0,H.gL)(e,n+1,i.length);a[c]=s(M,h,e.slice(n+1,t)),n=t;continue}let{value:p,comment:m}=(0,C.X9)(h,L);if(""===p){let t=(0,d.K7)(e,n+1);if(t<e.length&&(0,d.SU)(e[t],i)){let{value:t,endIdx:o}=V(e,n+1,i);a[c]=t,n=o;continue}if(t<e.length){let o=(0,d.MG)(e[t]);if(o.length>i.length){let t=u(e,n+1,o);Object.keys(t.values).length>0&&(a[c]=t.values),n=t.endIdx;continue}}a[c]=null,n++;continue}p.startsWith("[")&&p.endsWith("]")?a[c]=r.aZ.wrap((0,C.Wg)(p),m):a[c]=(0,C.Qj)(p),n++}return{values:a,endIdx:n}}function M(e,t,i){if(void 0!==i)return i-1;for(let i=0;i<e.length;i++)if(e[i].startsWith(`${t}:`))return i;return -1}function p(e,t,i,o){let r=M(e,t,o);if(r<0)return -1;let a=null,n=-1;(void 0!==o?d.L1.exec(e[r]):null)&&(i.lastIndex=0,i.test(e[r].replace(/^\s*-\s+/,""))&&(n=r));for(let t=r+1;t<e.length;t++){let o=e[t];if((0,d.BJ)(o))continue;if(d.QW.test(o))break;let r=(0,d.MG)(o).length;if(null===a&&(a=r),r<a)break;r===a&&(i.lastIndex=0,i.test(o.trimStart())&&(n=t))}return n}function m(e,t,i){return g((0,l.D)(e),t,i).values}function g(e,t,i){let r=Object.create(null),a=new Map,n=(e,t,i)=>{let o={span:{start:t,end:i,leadStart:t}};return a.set(e,o),o},l=M(e,t,i);if(l<0)return{values:r,keys:a,childIndent:"",isListItem:!1,startIdx:l};let c=d.WV.test(e[l]),L=(0,d.eq)(e,l,c),h=(0,d.zM)(L),p=t=>{let i=(0,d.K7)(e,t);if(i>=e.length)return null;let o=(0,d.MG)(e[i]);return o.length<=L.length?null:u(e,t,o)};if(!c&&o.sU.has(t)){let i=(0,d.MG)(e[l]),o=(0,d.K7)(e,l+1);if(o<e.length&&(0,d.SU)(e[o],i))return r[t]=V(e,l+1,i).value,{values:r,keys:a,childIndent:L,isListItem:c,startIdx:l}}if(c){let t=e[l].match(d.L1);if(t){let i=e[l],o=i.slice(i.indexOf(":",i.indexOf("-"))+1),{value:n,comment:s}=(0,C.bw)(o),d=n.trim();if(""!==d)s&&a.set(t[1],{comment:s}),r[t[1]]=(0,C.Qj)(d);else{let e=p(l+1);e&&Object.keys(e.values).length>0&&(r[t[1]]=e.values)}}}let m=c?(e[l].match(/^(\s*)-/)??["",""])[1].length:-1;for(let t=l+1;t<e.length;t++){let i=e[t];if((0,d.BJ)(i))continue;if(c){let e=i.match(/^(\s*)-(\s|$)/);if(e&&e[1].length===m||d.QW.test(i))break}else if(d.QW.test(i))break;let o=i.match(h);if(!o)continue;let a=o[1],l=o[2].length>0,u=o[3].trim(),M=(0,d.CI)(u);if(M){let i=(0,H.gL)(e,t+1,L.length);r[a]=s(M,u,e.slice(t+1,i)),n(a,t,i),t=i-1;continue}let{value:g,comment:f}=(0,C.X9)(u,l);if(""===g){let i=(0,d.K7)(e,t+1);if(i<e.length&&(0,d.SU)(e[i],L)){let{value:i,endIdx:o,isEmptyScalarList:s,listSource:l}=V(e,t+1,L);if(!s){r[a]=i;let e=n(a,t,o);l&&(e.listSource=l),f&&(e.comment=f),t=o-1}continue}let o=p(t+1),s=o?.endIdx??t+1;r[a]=o&&Object.keys(o.values).length>0?o.values:null;let l=n(a,t,s);f&&(l.comment=f),t=s-1;continue}if(g.startsWith("[")&&g.endsWith("]")){r[a]=(0,C.Wg)(g);let e=n(a,t,t+1);e.flowList=!0,f&&(e.comment=f);continue}r[a]=(0,C.Qj)(g);let b=n(a,t,t+1);f&&(b.comment=f)}for(let{span:t}of a.values()){if(!t)continue;let i=t.start+1,o=t.end,r=!1;for(;o>i&&(0,d.BJ)(e[o-1])&&(0,d.MG)(e[o-1]).length<=L.length;)o--,(0,d.w5)(e[o])&&(r=!0);r&&(t.end=o)}let g=l+1;for(let{span:t}of a.values()){if(!t)continue;let i=t.start;for(;i>g&&(0,d.BJ)(e[i-1]);)i--;t.leadStart=i,g=t.end}return{values:r,keys:a,childIndent:L,isListItem:c,startIdx:l}}},418(e,t,i){"use strict";i.d(t,{Kd:()=>p,ju:()=>M,Nj:()=>u});var o=i(6049),r=i(2765),a=i(9789),n=i(8310),s=i(8175),l=i(2814),C=i(8851);function d(e,t){if(e===t)return!0;if(e instanceof C.ho||t instanceof C.ho)return e instanceof C.ho&&t instanceof C.ho&&e.inlineHeader===t.inlineHeader&&(0,l.r)(e.lines,t.lines);if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&(0,l.r)(e,t,d);if((0,s.Qd)(e)&&(0,s.Qd)(t)){let i=Object.keys(e);return i.length===Object.keys(t).length&&i.every(i=>Object.prototype.hasOwnProperty.call(t,i)&&d(e[i],t[i]))}return!1}let H=e=>(0,s.k4)(e)&&null!=e,V=e=>H(e)||(0,s.Qd)(e),c=/\S/,L=/(?:\r?\n[ \t]*)+$/;function h(e,t,i){let o=(0,n.pn)(e,t,i);if(o<0)return{start:-1,end:-1};let r=a.WV.test(e[o]),s=r?(e[o].match(/^(\s*)-/)??["",""])[1].length:-1,l=e.length;for(let t=o+1;t<e.length;t++)if(r){let i=e[t].match(/^(\s*)-(\s|$)/);if(i&&i[1].length===s||a.QW.test(e[t])){l=t;break}}else if(a.QW.test(e[t])){l=t;break}return{start:o,end:l}}function u(e,t,i,s,l={}){let c=(0,r.D)(e),{start:L,end:M}=h(c,t,s);if(L<0)return e;let p=(0,r.y)(e),m=a.WV.test(c[L]),g=(0,a.eq)(c,L,m),f=function(e,t,i,o){let r=-1;for(let o=t+1;o<i;o++){let t=e[o];if(""===t.trim()||(0,a.w5)(t))continue;let i=(0,a.MG)(t).length;i>r&&(r=i)}return r<0?o:r}(c,L,M,g.length),b=M;for(;b>L+1;){let e=c[b-1];if(""===e.trim()){b--;continue}let t=(0,a.MG)(e).length;if((0,a.w5)(e)&&(t<=g.length||t<f))b--;else break}let _=b;if(o.sU.has(t)){let o=i[t];if(!Array.isArray(o))return e;let r=(0,C.ym)({[t]:o},(0,a.MG)(c[L]),{...l,indentStep:l.indentStep??(g||" ")});return c.splice(L,_-L,...r),c.join(p)}let A=(0,n.WW)(c,t,s),w=-1;for(let{span:e}of A.keys.values())e&&e.end>w&&(w=e.end);w>=0&&(_=w);let v=c[L],y=new Set;if(m){let e=v.match(a.L1);if(e){let t=e[1];if(Object.prototype.hasOwnProperty.call(i,t))if(function(e){if(null==e)return!1;let t=typeof e;return"string"===t||"number"===t||"boolean"===t}(i[t])){if(y.add(t),!d(i[t],A.values[t])){let e=v.match(/^(\s*)-(\s+)/),o=`${e[1]}-${e[2]}`,r=A.keys.get(t)?.comment??"";v=`${o}${t}: ${(0,C.Rm)(i[t])}${r}`}}else{let e=(v.match(/^(\s*)-/)??["",""])[1];v=`${e}-`}}}let S=!m&&g?g:" ",k=[v,...function(e,t,i,o,r,a){let n=[];for(let[h,u]of Object.entries(i)){var s,l,c,L;if(o.has(h))continue;let i=t.keys.get(h),M=i?.span,p=t.values[h];if(M&&d(u,p)){n.push(...e.slice(M.leadStart,M.end));continue}let m=i&&function(e,t,i,o,r,a){let{span:n,listSource:s}=t;if(!n||!s||!Array.isArray(i)||!Array.isArray(o)||0===o.length||!o.every(V))return null;let l=0;for(;l<i.length&&l<o.length&&d(i[l],o[l]);)l++;let c=0;for(;c<i.length-l&&c<o.length-l&&d(i[i.length-1-c],o[o.length-1-c]);)c++;let{itemRanges:L,dashIndent:h}=s,u=`${r}${a.indentStep??" "}`,M=e=>0===e?n.start+1:L[e-1][1],p=i.length===o.length;if(h!==u){for(let e=l;e<o.length-c;e++)if(!(p&&d(i[e],o[e]))&&!H(o[e]))return null}let m=[];m.push(...e.slice(n.leadStart,M(l)));for(let t=l;t<o.length-c;t++){if(p&&d(i[t],o[t])){m.push(...e.slice(M(t),L[t][1]));continue}if(p&&m.push(...e.slice(M(t),L[t][0])),H(o[t])){let e=p?s.inlineComments?.[t]??"":"";m.push(`${h}- ${(0,C.Rm)(o[t])}${e}`)}else m.push(...(0,C.qV)(o[t],r,a))}return m.push(...e.slice(M(i.length-c),n.end)),m}(e,i,p,u,r,a);if(m){n.push(...m);continue}M&&n.push(...e.slice(M.leadStart,M.start));let g=(s=i,l=h,c=u,L=r,(s?.flowList&&Array.isArray(c)&&0!==c.length&&c.every(H)?[`${L}${l}: ${(0,C.P1)(c)}`]:null)??(0,C.ym)({[h]:u},r,a));i?.comment&&1===g.length&&(g[0]+=i.comment),n.push(...g)}return n}(c,A,i,y,g,{...l,indentStep:l.indentStep??S})];return c.splice(L,_-L,...k),c.join(p)}function M(e,t,i){let o=(0,r.D)(e),{start:n,end:s}=h(o,t,i);if(n<0)return e;let l=(0,r.y)(e),C=a.WV.test(o[n]);if(o.splice(n,s-n),C){let e=n-1;for(;e>=0&&!a.QW.test(o[e]);)e--;if(e>=0){let t=!1,i=o.length;for(let r=e+1;r<o.length;r++){if(a.QW.test(o[r])){i=r;break}if(""!==o[r].trim()){t=!0;break}}t||o.splice(e,i-e)}}return o.join(l)}function p(e,t,i,o={}){let n=(0,r.D)(e),s=o.indentStep??function(e){let t=!1;for(let i of e){if(a.QW.test(i)){t=!0;continue}if(!t||""===i.trim()||(0,a.w5)(i))continue;let e=(0,a.MG)(i);if(e)return e;t=!1}return null}(n)??void 0,l=(0,C.ym)({[t]:i},"",{...o,indentStep:s});if(0===l.length)return e;let d=(0,r.y)(e),H=c.test(e)?n.join(d).replace(L,""):"",V=l.join(d);return H?`${H}${d}${d}${V}${d}`:`${V}${d}`}},4125(e,t,i){"use strict";let o,r;var a=i(8175),n=i(6049),s=i(2765),l=i(1150),C=i(8818),d=i(9789);function H(e){return""===e.trim()||e.startsWith("#")}function V(e){if(o===e&&r)return r;let t=(0,s.D)(e),i=[];for(let e=0;e<t.length;e++){let o=t[e].match(d.lF),r=!o&&d.ET.test(t[e]);if(o||r){if(i.length>0){let o=i[i.length-1],r=o.fromLine-1,a=e-1;for(;a>r&&H(t[a]);)a--;o.toLine=a+1}i.push({key:o?o[1]:"",fromLine:e+1,toLine:t.length,ignored:r})}}if(i.length>0){let e=i[i.length-1],o=e.fromLine-1,r=t.length-1;for(r>=0&&""===t[r]&&r--;r>o&&H(t[r]);)r--;e.toLine=r+1}let a=[];for(let e of i)e.ignored||a.push(...function(e,t){if(n.sU.has(t.key))return[{key:t.key,fromLine:t.fromLine,toLine:t.toLine}];let i=t.fromLine-1,o=t.toLine-1,r=(0,d.K7)(e,i+1),a=r<=o?u(e[r]):-1,s=r<=o&&d.WV.test(e[r])?g(e,r,o,a):[];if(0===s.length){let r="",n="",s="";for(let t=i+1;t<=o;t++)u(e[t])===a&&(d.WV.test(e[t])||(r=(0,l.K)(e[t],"name")??r,n=(0,l.K)(e[t],"id")??n,s=(0,l.K)(e[t],"platform")??s));return[{key:t.key,fromLine:t.fromLine,toLine:t.toLine,name:r||void 0,id:n||void 0,platform:s||void 0}]}let C=[];for(let i=0;i<s.length;i++){let r=s[i],a=i+1<s.length?s[i+1]-1:o,n="",d="",H="",V=h(e[r]);for(let t=r;t<=a;t++){let i=e[t];(t===r||u(i)===V)&&(n=(0,l.K)(i,"name")??n,d=(0,l.K)(i,"id")??d,H=(0,l.K)(i,"platform")??H)}C.push({key:t.key,fromLine:r+1,toLine:a+1,name:n||void 0,id:d||void 0,platform:H||void 0,parentKey:t.key})}return C}(t,e));return o=e,r=a,a}function c(e,t){let i=null,o=1/0;for(let r of e){if(t<r.fromLine||t>r.toLine)continue;let e=r.toLine-r.fromLine;e<o&&(i=r,o=e)}return i}function L(e,t){let i=t.parentKey;if(void 0===i)return t.id??t.key;if(t.id)return t.id;let o=0;for(let r of e)r.parentKey===i&&r.fromLine<t.fromLine&&o++;return`${i}_${o}`}function h(e){let t=e.match(/^\s*-\s+(?=\S)/)?.[0].length;return void 0!==t?t:u(e)+2}function u(e){return e.match(/^ */)?.[0].length??0}function M(e,t,i){if(i[0]===t.key&&(i=i.slice(1)),0===i.length)return null;let o=e.split("\n"),r=(e,t,i,n)=>{let s=n[0],l=n.slice(1);if((0,a.wr)(s)&&_(o,e,t,i)){let a=g(o,e,t,i),n=a[Number(s)];return void 0===n?null:0===l.length?n+1:r(n,Number(s)+1<a.length?a[Number(s)+1]-1:t,h(o[n]),l)}for(let a=e;a<=t;a++){let e=(0,C.eJ)(o[a]);if(!e.trim()||p(e)!==i)continue;let n=e.match(C.Ud);if(!n||n[1]!==s)continue;if(0===l.length)return a+1;let d=f(o,a+1,t,i),H=m(o,a+1,d);return null===H?null:r(a+1,d,H,l)}return null},n=b(o,t);return null===n?null:r(n.lo,n.hi,n.baseIndent,i)}function p(e){return d.WV.test(e)?h(e):(0,C._j)(e)}function m(e,t,i){for(let o=t;o<=i;o++){let t=(0,C.eJ)(e[o]);if(t.trim())return(0,C._j)(t)}return null}function g(e,t,i,o){let r=[];for(let a=t;a<=i;a++){let t=(0,C.eJ)(e[a]);t.trim()&&(0,C._j)(t)===o&&d.WV.test(t)&&r.push(a)}return r}function f(e,t,i,o){for(let r=t;r<=i;r++)if((0,d.PM)(e[r],o))return r-1;return i}function b(e,t){let i=t.fromLine-1,o=Math.min(t.toLine-1,e.length-1);if(i<0||i>=e.length)return null;if(d.WV.test(e[i]))return{lo:i,hi:o,baseIndent:h(e[i])};let r=m(e,i+1,o);return null===r?null:{lo:i+1,hi:o,baseIndent:r}}function _(e,t,i,o){for(let r=t;r<=i;r++){let t=(0,C.eJ)(e[r]);if(t.trim())return(0,C._j)(t)===o&&d.WV.test(t)}return!1}function A(e,t,i){if(0===i.length)return[];let o=[],r=(t,i,a,n)=>{for(let s of function(e,t,i,o){if(!_(e,t,i,o))return[{lo:t,hi:i,keyIndent:o}];let r=g(e,t,i,o);return r.map((t,o)=>({lo:t,hi:o+1<r.length?r[o+1]-1:i,keyIndent:h(e[t])}))}(e,t,i,a)){if(1===n.length){let t="",i="";for(let o=s.lo;o<=s.hi;o++)p(e[o])===s.keyIndent&&(t=(0,l.K)(e[o],n[0])??t,i=(0,l.K)(e[o],"name")??i);t&&o.push({id:t,name:i});continue}for(let t=s.lo;t<=s.hi;t++){if(p(e[t])!==s.keyIndent)continue;let i=(0,C.eJ)(e[t]).match(C.Ud);if(!i||i[1]!==n[0])continue;let o=f(e,t+1,s.hi,s.keyIndent),a=m(e,t+1,o);null!==a&&r(t+1,o,a,n.slice(1));break}}},a=b(e,t);return null!==a&&r(a.lo,a.hi,a.baseIndent,i),o}function w(e,t){return t?t.startsWith(`${e}.`)?t:`${e}.${t}`:e}i.d(t,{IO:()=>h,LS:()=>A,MT:()=>V,MX:()=>L,T0:()=>w,lr:()=>c,of:()=>M,p0:()=>u})},3815(e,t,i){"use strict";var o=i(7883);let r="••••••••",a=/[_.-](password|psk)$/i,n=/(^|[_.-])(certificate|certificate_authority|certificates|private_key|client_key)$/i,s=/[_.-](pass|secret|token)$/i,l={scanCommented:!0,emitCommentSpans:!0,skipSubstitutionRefs:!0};function C(e,t=r,i=V){return d([e],t,i)[0]}function d(e,t=r,i=V){if(0===e.length)return[];let a=e.slice(),n=(0,o.H)({lines:a.length,line:e=>({text:a[e-1]})},{...l,sensitiveKeyPredicate:i});for(let e=n.length-1;e>=0;e--){let{line:i,valueFrom:o,valueTo:r}=n[e],s=i-1;a[s]=a[s].slice(0,o)+t+a[s].slice(r)}return a}function H(e){return d(e.split("\n"),"•",c).join("\n")}function V(e){return a.test(e)}function c(e){return V(e)||n.test(e)||s.test(e)}i.d(t,{jB:()=>C,qk:()=>H,yt:()=>d})},7883(e,t,i){"use strict";var o=i(2765);let r=new Set(["password","ap_password","ota_password","psk"]),a=new Map([["encryption",new Set(["key"])],["eap",new Set(["key"])]]),n=/^(\s*)(-\s+)?([a-zA-Z_][a-zA-Z0-9_.\-]*)(\s*):(\s*)(.*)$/,s=/^[|>][+-]?\d*\s*(#.*)?$/,l=/^!secret\b/,C=/^\$\{/,d=/^(\s*(?:-\s+)?#+)(.*)$/,H=/^(\s*#+)\s*(.*)$/,V=/^(\s*)/,c=/\s/;function L(e,t={}){let i,{maskAllValues:M=!1,sensitiveKeyPredicate:p,scanCommented:m=!1,emitCommentSpans:g=!1,skipSubstitutionRefs:f=!1}=t,b=[];if("string"!=typeof e){if(0===e.lines)return b;i=Array(e.lines);for(let t=1;t<=e.lines;t++){var _;i[t-1]=(_=e.line(t).text).endsWith("\r")?_.slice(0,-1):_}}else{if(!e)return b;i=(0,o.D)(e)}let A=[],w=(e,t,o)=>{let r=i[e];for(;o>t&&c.test(r[o-1]);)o--;o>t&&b.push({line:e+1,valueFrom:t,valueTo:o})},v=(e,t)=>{if(!g)return;let o=i[e],r=h(o,t);if(-1===r)return;let a=u(o,r);a&&b.push({line:e+1,valueFrom:a.from,valueTo:a.to})},y=(e,t,o)=>{let r=i[e];if(o.startsWith("#")){if(g){let i=u(r,r.indexOf("#",t));i&&b.push({line:e+1,valueFrom:i.from,valueTo:i.to})}return"done"}let a=s.test(o);if(a||""===o||l.test(o)||f&&C.test(o))return v(e,t),a?"block":"done";let n=t,d=o[0];if('"'===d||"'"===d){let e=t+(r.length-t-o.length),i=function(e,t){let i=e[t],o=t+1;for(;o<e.length;){if(e[o]===i){if("'"===i&&"'"===e[o+1]){o+=2;continue}if('"'===i){let i=0;for(let r=o-1;r>=t+1&&"\\"===e[r];r--)i++;if(i%2==1){o++;continue}}return o}o++}return -1}(r,e);n=-1!==i?i+1:r.length}let H=h(r,n);return w(e,t,-1!==H?H:r.length),-1!==H&&v(e,H),"done"},S=(e,t)=>{let o=i[e].slice(t).match(n);if(!o)return e+1;let[,s,l="",C,d,V,c]=o,L=C.toLowerCase(),h=t+s.length+l.length,u=!1;for(let e=A.length-1;e>=0&&!u;e--)if(!(A[e].indent>=h)){u=a.get(A[e].key)?.has(L)===!0;break}if(!(M||u||r.has(L)||p?.(C)===!0)||"block"!==y(e,t+s.length+l.length+C.length+d.length+1+V.length,c.trimStart()))return e+1;let m=e+1;for(;m<i.length;){let e=i[m],t=e.match(H);if(!t)break;if(!t[2]){m++;continue}let o=e.length-t[2].length;if(o>t[1].length&&o<=h)break;w(m,o,e.length),m++}return m},k=0;for(;k<i.length;){let e,t=i[k],o=t.match(n);if(!o){if(m){let e=t.match(d);if(e){k=S(k,e[1].length);continue}}k++;continue}let s=o[1],l=o[2]??"",C=o[3],H=o[4],c=o[5],L=o[6],h=C.toLowerCase(),u=s.length+(l?l.length:0);for(;A.length>0&&A[A.length-1].indent>=u;)A.pop();if(M)e=!0;else{if(!(e=r.has(h))&&A.length>0){let t=A[A.length-1].key,i=a.get(t);i&&i.has(h)&&(e=!0)}!e&&p&&(e=p(C))}if(A.push({indent:u,key:h}),!e||"block"!==y(k,s.length+l.length+C.length+H.length+1+c.length,L.trimStart())){k++;continue}let g=k+1;for(;g<i.length;){let e=i[g];if(""===e.trim()){g++;continue}let t=(e.match(V)?.[1]??"").length;if(t<=u)break;w(g,t,e.length),g++}k=g}return b}function h(e,t){for(let i=t;i<e.length;i++)if("#"===e[i]&&i>0&&c.test(e[i-1]))return i;return -1}function u(e,t){let i=t+1;for(;i<e.length&&c.test(e[i]);)i++;let o=e.length;for(;o>i&&c.test(e[o-1]);)o--;return o>i?{from:i,to:o}:null}i.d(t,{H:()=>L})},8851(e,t,i){"use strict";var o=i(8067),r=i(8175),a=i(9470),n=i(9789);function s(e,t){return new C(e._lambda.split("\n").map(e=>""===e?"":`${t}${e}`),"!lambda"===e._tag?"!lambda |-":"|-")}function l(e,t,i){if(0===i.lines.length&&!i.inlineHeader)return[];let o=i.inlineHeader?` ${i.inlineHeader}`:"";return[`${t}${e}:${o}`,...i.lines]}class C{get indent(){let e=this.lines.filter(e=>""!==e.trim());if(0===e.length)return"";let t=e[0].match(/^\s*/)?.[0]??"";for(let i of e.slice(1)){let e=i.match(/^\s*/)?.[0]??"";for(;t&&!i.startsWith(t);)t=t.slice(0,-1);if(!t)return"";e.length<t.length&&(t=e)}return t}get body(){let e=this.indent;return this.lines.map(t=>t.slice(e.length)).join("\n")}toString(){return this.body}static fromBodyText(e,t){let i=t.indent;return new C(e.split("\n").map(e=>""===e?"":`${i}${e}`),t.inlineHeader)}constructor(e,t){this.lines=e,this.inlineHeader=t}}class d extends Array{static get[Symbol.species](){return Array}static wrap(e,t){let i=new d;return i.push(...e),Object.defineProperty(i,"comment",{value:t,enumerable:!1}),i}}function H(e,t,i){let a=!0===i.keepEmptyStrings,n=i.indentStep??" ",V=`${t}${n}`;if((0,r.Qd)(e)){let t=Object.entries(e);if(1===t.length&&null===t[0][1])return[`${V}- ${t[0][0]}:`];let n=t.filter(([,e])=>null!=e&&(""!==e||a));if(0===n.length)return[`${V}-`];let L=[],h=`${V} `;return n.forEach(([e,t],a)=>{let n=0===a?`${V}- `:h;if(t instanceof C)return void L.push(...l(e,n,t));if((0,o.b)(t)){let i=s(t,`${h} `);L.push(...l(e,n,i));return}if(Array.isArray(t)){if(0===t.length)return;if(t.every(e=>!(0,r.Qd)(e)&&!Array.isArray(e)&&!(0,o.b)(e))){let i=t instanceof d?t.comment??"":"";L.push(`${n}${e}: ${v(t)}${i}`);return}for(let o of(L.push(`${n}${e}:`),t))L.push(...H(o,h,i));return}if((0,r.Qd)(t)){L.push(`${n}${e}:`);let o=c(t,`${h} `,i);L.push(...o);return}L.push(`${n}${e}: ${A(t)}`)}),L}return[`${V}- ${A(e)}`]}function V(e){return null!=e&&""!==e&&(e instanceof C||(Array.isArray(e)?e.length>0:!!(0,o.b)(e)||!(0,r.Qd)(e)||Object.values(e).some(V)))}function c(e,t,i={}){let r=[],a=!0===i.keepEmptyStrings,n=i.indentStep??" ";for(let[V,L]of Object.entries(e))if(null!=L&&(""!==L||a)){if(L instanceof C){r.push(...l(V,t,L));continue}if(Array.isArray(L)){if(0===L.length)continue;if(L instanceof d){r.push(`${t}${V}: ${v(L)}${L.comment??""}`);continue}for(let e of(r.push(`${t}${V}:`),L)){let o=H(e,t,i);r.push(...o)}continue}if((0,o.b)(L)){let e=s(L,`${t}${n}`);r.push(...l(V,t,e));continue}if("object"==typeof L){let e=c(L,`${t}${n}`,i);if(0===e.length)continue;r.push(`${t}${V}:`),r.push(...e);continue}r.push(`${t}${V}: ${A(L)}`)}return r}function L(e){let t=new Set;for(let i of e.split("\n")){let e=i.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(.*)$/);e&&t.add(e[1])}return t}function h(e){let t=new Set;if(!e)return t;let i=e.split("\n"),o=null;for(let e of i){let i=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\s*(?:#.*)?$/);if(i){o=i[1];continue}if(n.ET.test(e)){o=null;continue}if(!o)continue;let r=e.match(/^\s+(?:-\s+)?platform:\s*["']?(\S+?)["']?\s*(?:#.*)?$/);r&&t.add(`${o}.${r[1]}`)}return t}let u=/^(?:yes|Yes|YES|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)$/,M=/^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*))$/,p=/^(?:[-+]?[0-9][0-9_]*\.[0-9_]*(?:[eE][-+][0-9]+)?|[-+]?\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,m=/^(?:~|null|Null|NULL)$/,g=/^!(?:remove$|secret +\S+ *$|(?:include|include_dir_list|include_dir_merge_list|include_dir_named|include_dir_merge_named|lambda|literal|extend|remove|env_var) +\S)/,f=/^(?:[0-9]{4}-[0-9]{2}-[0-9]{2}|[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}(?:[Tt]|[ \t]+)[0-9]{1,2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]*)?(?:[ \t]*(?:Z|[-+][0-9]{1,2}(?::[0-9]{2})?))?)$/;function b(e){return`"${(0,a.k9)(e)}"`}function _(e){return g.test(e)}function A(e){if("boolean"==typeof e||"number"==typeof e)return String(e);let t=String(e);return""===t||/[:#]/.test(t)||/^[-\s'"!&*|>[\]{}@`%,?]/.test(t)&&!_(t)||/\s$/.test(t)||/[\n\r\t]/.test(t)||(0,a.td)(t)||u.test(t)||M.test(t)||p.test(t)||m.test(t)||f.test(t)?b(t):t}function w(e){return"string"==typeof e&&/[,[\]{}]/.test(e)?b(e):A(e)}function v(e){return`[${e.map(w).join(", ")}]`}let y=new Set(["true","yes","on","enable"]),S=new Set(["false","no","off","disable"]);function k(e){if("boolean"==typeof e)return e;if("string"==typeof e){let t=e.trim().toLowerCase();if(y.has(t))return!0;if(S.has(t))return!1}return null}i.d(t,{$z:()=>V,FY:()=>k,P1:()=>v,Rm:()=>A,Zn:()=>L,aZ:()=>d,ho:()=>C,qV:()=>H,u:()=>h,uM:()=>_,ym:()=>c})},6370(e,t,i){"use strict";i.d(t,{UE:()=>K,ll:()=>N,rD:()=>Q,UU:()=>W,cY:()=>U,iD:()=>I,BN:()=>j,Ej:()=>G});let o=Math.min,r=Math.max,a=Math.round,n=Math.floor,s=e=>({x:e,y:e}),l={left:"right",right:"left",bottom:"top",top:"bottom"};function C(e,t){return"function"==typeof e?e(t):e}function d(e){return e.split("-")[0]}function H(e){return e.split("-")[1]}function V(e){return"x"===e?"y":"x"}function c(e){return"y"===e?"height":"width"}function L(e){let t=e[0];return"t"===t||"b"===t?"y":"x"}function h(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}let u=["left","right"],M=["right","left"],p=["top","bottom"],m=["bottom","top"];function g(e){let t=d(e);return l[t]+e.slice(t.length)}function f(e){return"number"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function b(e){let{x:t,y:i,width:o,height:r}=e;return{width:o,height:r,top:i,left:t,right:t+o,bottom:i+r,x:t,y:i}}function _(e,t,i){let o,{reference:r,floating:a}=e,n=L(t),s=V(L(t)),l=c(s),C=d(t),h="y"===n,u=r.x+r.width/2-a.width/2,M=r.y+r.height/2-a.height/2,p=r[l]/2-a[l]/2;switch(C){case"top":o={x:u,y:r.y-a.height};break;case"bottom":o={x:u,y:r.y+r.height};break;case"right":o={x:r.x+r.width,y:M};break;case"left":o={x:r.x-a.width,y:M};break;default:o={x:r.x,y:r.y}}switch(H(t)){case"start":o[s]-=p*(i&&h?-1:1);break;case"end":o[s]+=p*(i&&h?-1:1)}return o}async function A(e,t){var i;void 0===t&&(t={});let{x:o,y:r,platform:a,rects:n,elements:s,strategy:l}=e,{boundary:d="clippingAncestors",rootBoundary:H="viewport",elementContext:V="floating",altBoundary:c=!1,padding:L=0}=C(t,e),h=f(L),u=s[c?"floating"===V?"reference":"floating":V],M=b(await a.getClippingRect({element:null==(i=await (null==a.isElement?void 0:a.isElement(u)))||i?u:u.contextElement||await (null==a.getDocumentElement?void 0:a.getDocumentElement(s.floating)),boundary:d,rootBoundary:H,strategy:l})),p="floating"===V?{x:o,y:r,width:n.floating.width,height:n.floating.height}:n.reference,m=await (null==a.getOffsetParent?void 0:a.getOffsetParent(s.floating)),g=await (null==a.isElement?void 0:a.isElement(m))&&await (null==a.getScale?void 0:a.getScale(m))||{x:1,y:1},_=b(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:p,offsetParent:m,strategy:l}):p);return{top:(M.top-_.top+h.top)/g.y,bottom:(_.bottom-M.bottom+h.bottom)/g.y,left:(M.left-_.left+h.left)/g.x,right:(_.right-M.right+h.right)/g.x}}let w=async(e,t,i)=>{let{placement:o="bottom",strategy:r="absolute",middleware:a=[],platform:n}=i,s=n.detectOverflow?n:{...n,detectOverflow:A},l=await (null==n.isRTL?void 0:n.isRTL(t)),C=await n.getElementRects({reference:e,floating:t,strategy:r}),{x:d,y:H}=_(C,o,l),V=o,c=0,L={};for(let i=0;i<a.length;i++){let h=a[i];if(!h)continue;let{name:u,fn:M}=h,{x:p,y:m,data:g,reset:f}=await M({x:d,y:H,initialPlacement:o,placement:V,strategy:r,middlewareData:L,rects:C,platform:s,elements:{reference:e,floating:t}});d=null!=p?p:d,H=null!=m?m:H,L[u]={...L[u],...g},f&&c<50&&(c++,"object"==typeof f&&(f.placement&&(V=f.placement),f.rects&&(C=!0===f.rects?await n.getElementRects({reference:e,floating:t,strategy:r}):f.rects),{x:d,y:H}=_(C,V,l)),i=-1)}return{x:d,y:H,placement:V,strategy:r,middlewareData:L}},v=new Set(["left","top"]);async function y(e,t){let{placement:i,platform:o,elements:r}=e,a=await (null==o.isRTL?void 0:o.isRTL(r.floating)),n=d(i),s=H(i),l="y"===L(i),V=v.has(n)?-1:1,c=a&&l?-1:1,h=C(t,e),{mainAxis:u,crossAxis:M,alignmentAxis:p}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return s&&"number"==typeof p&&(M="end"===s?-1*p:p),l?{x:M*c,y:u*V}:{x:u*V,y:M*c}}var S=i(4268);function k(e){let t=(0,S.L9)(e),i=parseFloat(t.width)||0,o=parseFloat(t.height)||0,r=(0,S.sb)(e),n=r?e.offsetWidth:i,s=r?e.offsetHeight:o,l=a(i)!==n||a(o)!==s;return l&&(i=n,o=s),{width:i,height:o,$:l}}function Z(e){return(0,S.vq)(e)?e:e.contextElement}function x(e){let t=Z(e);if(!(0,S.sb)(t))return s(1);let i=t.getBoundingClientRect(),{width:o,height:r,$:n}=k(t),l=(n?a(i.width):i.width)/o,C=(n?a(i.height):i.height)/r;return l&&Number.isFinite(l)||(l=1),C&&Number.isFinite(C)||(C=1),{x:l,y:C}}let O=s(0);function $(e){let t=(0,S.zk)(e);return(0,S.Tc)()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:O}function E(e,t,i,o){var r;void 0===t&&(t=!1),void 0===i&&(i=!1);let a=e.getBoundingClientRect(),n=Z(e),l=s(1);t&&(o?(0,S.vq)(o)&&(l=x(o)):l=x(e));let C=(void 0===(r=i)&&(r=!1),o&&(!r||o===(0,S.zk)(n))&&r)?$(n):s(0),d=(a.left+C.x)/l.x,H=(a.top+C.y)/l.y,V=a.width/l.x,c=a.height/l.y;if(n){let e=(0,S.zk)(n),t=o&&(0,S.vq)(o)?(0,S.zk)(o):o,i=e,r=(0,S._m)(i);for(;r&&o&&t!==i;){let e=x(r),t=r.getBoundingClientRect(),o=(0,S.L9)(r),a=t.left+(r.clientLeft+parseFloat(o.paddingLeft))*e.x,n=t.top+(r.clientTop+parseFloat(o.paddingTop))*e.y;d*=e.x,H*=e.y,V*=e.x,c*=e.y,d+=a,H+=n,i=(0,S.zk)(r),r=(0,S._m)(i)}}return b({width:V,height:c,x:d,y:H})}function z(e,t){let i=(0,S.CP)(e).scrollLeft;return t?t.left+i:E((0,S.ep)(e)).left+i}function P(e,t){let i=e.getBoundingClientRect();return{x:i.left+t.scrollLeft-z(e,i),y:i.top+t.scrollTop}}function T(e,t,i){var o;let a;if("viewport"===t)a=function(e,t){let i=(0,S.zk)(e),o=(0,S.ep)(e),r=i.visualViewport,a=o.clientWidth,n=o.clientHeight,s=0,l=0;if(r){a=r.width,n=r.height;let e=(0,S.Tc)();(!e||e&&"fixed"===t)&&(s=r.offsetLeft,l=r.offsetTop)}let C=z(o);if(C<=0){let e=o.ownerDocument,t=e.body,i=getComputedStyle(t),r="CSS1Compat"===e.compatMode&&parseFloat(i.marginLeft)+parseFloat(i.marginRight)||0,n=Math.abs(o.clientWidth-t.clientWidth-r);n<=25&&(a-=n)}else C<=25&&(a+=C);return{width:a,height:n,x:s,y:l}}(e,i);else if("document"===t){let t,i,n,s,l,C,d;o=(0,S.ep)(e),t=(0,S.ep)(o),i=(0,S.CP)(o),n=o.ownerDocument.body,s=r(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),l=r(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight),C=-i.scrollLeft+z(o),d=-i.scrollTop,"rtl"===(0,S.L9)(n).direction&&(C+=r(t.clientWidth,n.clientWidth)-s),a={width:s,height:l,x:C,y:d}}else if((0,S.vq)(t)){let e,o,r,n,l,C;o=(e=E(t,!0,"fixed"===i)).top+t.clientTop,r=e.left+t.clientLeft,n=(0,S.sb)(t)?x(t):s(1),l=t.clientWidth*n.x,C=t.clientHeight*n.y,a={width:l,height:C,x:r*n.x,y:o*n.y}}else{let i=$(e);a={x:t.x-i.x,y:t.y-i.y,width:t.width,height:t.height}}return b(a)}function R(e){return"static"===(0,S.L9)(e).position}function F(e,t){if(!(0,S.sb)(e)||"fixed"===(0,S.L9)(e).position)return null;if(t)return t(e);let i=e.offsetParent;return(0,S.ep)(e)===i&&(i=i.ownerDocument.body),i}function D(e,t){let i=(0,S.zk)(e);if((0,S.Tf)(e))return i;if(!(0,S.sb)(e)){let t=(0,S.$4)(e);for(;t&&!(0,S.eu)(t);){if((0,S.vq)(t)&&!R(t))return t;t=(0,S.$4)(t)}return i}let o=F(e,t);for(;o&&(0,S.Lv)(o)&&R(o);)o=F(o,t);return o&&(0,S.eu)(o)&&R(o)&&!(0,S.sQ)(o)?i:o||(0,S.gJ)(e)||i}let B=async function(e){let t=this.getOffsetParent||D,i=this.getDimensions,o=await i(e.floating);return{reference:function(e,t,i){let o=(0,S.sb)(t),r=(0,S.ep)(t),a="fixed"===i,n=E(e,!0,a,t),l={scrollLeft:0,scrollTop:0},C=s(0);if(o||!o&&!a)if(("body"!==(0,S.mq)(t)||(0,S.ZU)(r))&&(l=(0,S.CP)(t)),o){let e=E(t,!0,a,t);C.x=e.x+t.clientLeft,C.y=e.y+t.clientTop}else r&&(C.x=z(r));a&&!o&&r&&(C.x=z(r));let d=!r||o||a?s(0):P(r,l);return{x:n.left+l.scrollLeft-C.x-d.x,y:n.top+l.scrollTop-C.y-d.y,width:n.width,height:n.height}}(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}},I={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:i,offsetParent:o,strategy:r}=e,a="fixed"===r,n=(0,S.ep)(o),l=!!t&&(0,S.Tf)(t.floating);if(o===n||l&&a)return i;let C={scrollLeft:0,scrollTop:0},d=s(1),H=s(0),V=(0,S.sb)(o);if((V||!V&&!a)&&(("body"!==(0,S.mq)(o)||(0,S.ZU)(n))&&(C=(0,S.CP)(o)),V)){let e=E(o);d=x(o),H.x=e.x+o.clientLeft,H.y=e.y+o.clientTop}let c=!n||V||a?s(0):P(n,C);return{width:i.width*d.x,height:i.height*d.y,x:i.x*d.x-C.scrollLeft*d.x+H.x+c.x,y:i.y*d.y-C.scrollTop*d.y+H.y+c.y}},getDocumentElement:S.ep,getClippingRect:function(e){let{element:t,boundary:i,rootBoundary:a,strategy:n}=e,s=[..."clippingAncestors"===i?(0,S.Tf)(t)?[]:function(e,t){let i=t.get(e);if(i)return i;let o=(0,S.v9)(e,[],!1).filter(e=>(0,S.vq)(e)&&"body"!==(0,S.mq)(e)),r=null,a="fixed"===(0,S.L9)(e).position,n=a?(0,S.$4)(e):e;for(;(0,S.vq)(n)&&!(0,S.eu)(n);){let t=(0,S.L9)(n),i=(0,S.sQ)(n);i||"fixed"!==t.position||(r=null),(a?i||r:!(!i&&"static"===t.position&&r&&("absolute"===r.position||"fixed"===r.position)||(0,S.ZU)(n)&&!i&&function e(t,i){let o=(0,S.$4)(t);return!(o===i||!(0,S.vq)(o)||(0,S.eu)(o))&&("fixed"===(0,S.L9)(o).position||e(o,i))}(e,n)))?r=t:o=o.filter(e=>e!==n),n=(0,S.$4)(n)}return t.set(e,o),o}(t,this._c):[].concat(i),a],l=T(t,s[0],n),C=l.top,d=l.right,H=l.bottom,V=l.left;for(let e=1;e<s.length;e++){let i=T(t,s[e],n);C=r(i.top,C),d=o(i.right,d),H=o(i.bottom,H),V=r(i.left,V)}return{width:d-V,height:H-C,x:V,y:C}},getOffsetParent:D,getElementRects:B,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:i}=k(e);return{width:t,height:i}},getScale:x,isElement:S.vq,isRTL:function(e){return"rtl"===(0,S.L9)(e).direction}};function q(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function N(e,t,i,a){let s;void 0===a&&(a={});let{ancestorScroll:l=!0,ancestorResize:C=!0,elementResize:d="function"==typeof ResizeObserver,layoutShift:H="function"==typeof IntersectionObserver,animationFrame:V=!1}=a,c=Z(e),L=l||C?[...c?(0,S.v9)(c):[],...t?(0,S.v9)(t):[]]:[];L.forEach(e=>{l&&e.addEventListener("scroll",i,{passive:!0}),C&&e.addEventListener("resize",i)});let h=c&&H?function(e,t){let i,a=null,s=(0,S.ep)(e);function l(){var e;clearTimeout(i),null==(e=a)||e.disconnect(),a=null}return!function C(d,H){void 0===d&&(d=!1),void 0===H&&(H=1),l();let V=e.getBoundingClientRect(),{left:c,top:L,width:h,height:u}=V;if(d||t(),!h||!u)return;let M={rootMargin:-n(L)+"px "+-n(s.clientWidth-(c+h))+"px "+-n(s.clientHeight-(L+u))+"px "+-n(c)+"px",threshold:r(0,o(1,H))||1},p=!0;function m(t){let o=t[0].intersectionRatio;if(o!==H){if(!p)return C();o?C(!1,o):i=setTimeout(()=>{C(!1,1e-7)},1e3)}1!==o||q(V,e.getBoundingClientRect())||C(),p=!1}try{a=new IntersectionObserver(m,{...M,root:s.ownerDocument})}catch(e){a=new IntersectionObserver(m,M)}a.observe(e)}(!0),l}(c,i):null,u=-1,M=null;d&&(M=new ResizeObserver(e=>{let[o]=e;o&&o.target===c&&M&&t&&(M.unobserve(t),cancelAnimationFrame(u),u=requestAnimationFrame(()=>{var e;null==(e=M)||e.observe(t)})),i()}),c&&!V&&M.observe(c),t&&M.observe(t));let p=V?E(e):null;return V&&function t(){let o=E(e);p&&!q(p,o)&&i(),p=o,s=requestAnimationFrame(t)}(),i(),()=>{var e;L.forEach(e=>{l&&e.removeEventListener("scroll",i),C&&e.removeEventListener("resize",i)}),null==h||h(),null==(e=M)||e.disconnect(),M=null,V&&cancelAnimationFrame(s)}}let U=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var i,o;let{x:r,y:a,placement:n,middlewareData:s}=t,l=await y(t,e);return n===(null==(i=s.offset)?void 0:i.placement)&&null!=(o=s.arrow)&&o.alignmentOffset?{}:{x:r+l.x,y:a+l.y,data:{...l,placement:n}}}}},j=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){let{x:i,y:a,placement:n,platform:s}=t,{mainAxis:l=!0,crossAxis:H=!1,limiter:c={fn:e=>{let{x:t,y:i}=e;return{x:t,y:i}}},...h}=C(e,t),u={x:i,y:a},M=await s.detectOverflow(t,h),p=L(d(n)),m=V(p),g=u[m],f=u[p];if(l){let e="y"===m?"top":"left",t="y"===m?"bottom":"right",i=g+M[e],a=g-M[t];g=r(i,o(g,a))}if(H){let e="y"===p?"top":"left",t="y"===p?"bottom":"right",i=f+M[e],a=f-M[t];f=r(i,o(f,a))}let b=c.fn({...t,[m]:g,[p]:f});return{...b,data:{x:b.x-i,y:b.y-a,enabled:{[m]:l,[p]:H}}}}}},W=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var i,o,r,a,n,s,l,f;let b,_,A,{placement:w,middlewareData:v,rects:y,initialPlacement:S,platform:k,elements:Z}=t,{mainAxis:x=!0,crossAxis:O=!0,fallbackPlacements:$,fallbackStrategy:E="bestFit",fallbackAxisSideDirection:z="none",flipAlignment:P=!0,...T}=C(e,t);if(null!=(i=v.arrow)&&i.alignmentOffset)return{};let R=d(w),F=L(S),D=d(S)===S,B=await (null==k.isRTL?void 0:k.isRTL(Z.floating)),I=$||(D||!P?[g(S)]:(b=g(S),[h(S),b,h(b)])),q="none"!==z;!$&&q&&I.push(...(_=H(S),A=function(e,t,i){switch(e){case"top":case"bottom":if(i)return t?M:u;return t?u:M;case"left":case"right":return t?p:m;default:return[]}}(d(S),"start"===z,B),_&&(A=A.map(e=>e+"-"+_),P&&(A=A.concat(A.map(h)))),A));let N=[S,...I],U=await k.detectOverflow(t,T),j=[],W=(null==(o=v.flip)?void 0:o.overflows)||[];if(x&&j.push(U[R]),O){let e,t,i,o,r=(s=w,l=y,void 0===(f=B)&&(f=!1),e=H(s),i=c(t=V(L(s))),o="x"===t?e===(f?"end":"start")?"right":"left":"start"===e?"bottom":"top",l.reference[i]>l.floating[i]&&(o=g(o)),[o,g(o)]);j.push(U[r[0]],U[r[1]])}if(W=[...W,{placement:w,overflows:j}],!j.every(e=>e<=0)){let e=((null==(r=v.flip)?void 0:r.index)||0)+1,t=N[e];if(t&&("alignment"!==O||F===L(t)||W.every(e=>L(e.placement)!==F||e.overflows[0]>0)))return{data:{index:e,overflows:W},reset:{placement:t}};let i=null==(a=W.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!i)switch(E){case"bestFit":{let e=null==(n=W.filter(e=>{if(q){let t=L(e.placement);return t===F||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:n[0];e&&(i=e);break}case"initialPlacement":i=S}if(w!==i)return{reset:{placement:i}}}return{}}}},G=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){var i,a;let n,s,{placement:l,rects:V,platform:c,elements:h}=t,{apply:u=()=>{},...M}=C(e,t),p=await c.detectOverflow(t,M),m=d(l),g=H(l),f="y"===L(l),{width:b,height:_}=V.floating;"top"===m||"bottom"===m?(n=m,s=g===(await (null==c.isRTL?void 0:c.isRTL(h.floating))?"start":"end")?"left":"right"):(s=m,n="end"===g?"top":"bottom");let A=_-p.top-p.bottom,w=b-p.left-p.right,v=o(_-p[n],A),y=o(b-p[s],w),S=!t.middlewareData.shift,k=v,Z=y;if(null!=(i=t.middlewareData.shift)&&i.enabled.x&&(Z=w),null!=(a=t.middlewareData.shift)&&a.enabled.y&&(k=A),S&&!g){let e=r(p.left,0),t=r(p.right,0),i=r(p.top,0),o=r(p.bottom,0);f?Z=b-2*(0!==e||0!==t?e+t:r(p.left,p.right)):k=_-2*(0!==i||0!==o?i+o:r(p.top,p.bottom))}await u({...t,availableWidth:Z,availableHeight:k});let x=await c.getDimensions(h.floating);return b!==x.width||_!==x.height?{reset:{rects:!0}}:{}}}},K=e=>({name:"arrow",options:e,async fn(t){let{x:i,y:a,placement:n,rects:s,platform:l,elements:d,middlewareData:h}=t,{element:u,padding:M=0}=C(e,t)||{};if(null==u)return{};let p=f(M),m={x:i,y:a},g=V(L(n)),b=c(g),_=await l.getDimensions(u),A="y"===g,w=A?"clientHeight":"clientWidth",v=s.reference[b]+s.reference[g]-m[g]-s.floating[b],y=m[g]-s.reference[g],S=await (null==l.getOffsetParent?void 0:l.getOffsetParent(u)),k=S?S[w]:0;k&&await (null==l.isElement?void 0:l.isElement(S))||(k=d.floating[w]||s.floating[b]);let Z=k/2-_[b]/2-1,x=o(p[A?"top":"left"],Z),O=o(p[A?"bottom":"right"],Z),$=k-_[b]-O,E=k/2-_[b]/2+(v/2-y/2),z=r(x,o(E,$)),P=!h.arrow&&null!=H(n)&&E!==z&&s.reference[b]/2-(E<x?x:O)-_[b]/2<0,T=P?E<x?E-x:E-$:0;return{[g]:m[g]+T,data:{[g]:z,centerOffset:E-z-T,...P&&{alignmentOffset:T}},reset:P}}}),Q=(e,t,i)=>{let o=new Map,r={platform:I,...i},a={...r.platform,_c:o};return w(e,t,{...r,platform:a})}},4268(e,t,i){"use strict";let o;function r(){return"u">typeof window}function a(e){return l(e)?(e.nodeName||"").toLowerCase():"#document"}function n(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function s(e){var t;return null==(t=(l(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function l(e){return!!r()&&(e instanceof Node||e instanceof n(e).Node)}function C(e){return!!r()&&(e instanceof Element||e instanceof n(e).Element)}function d(e){return!!r()&&(e instanceof HTMLElement||e instanceof n(e).HTMLElement)}function H(e){return!(!r()||"u"<typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof n(e).ShadowRoot)}function V(e){let{overflow:t,overflowX:i,overflowY:o,display:r}=b(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+i)&&"inline"!==r&&"contents"!==r}function c(e){return/^(table|td|th)$/.test(a(e))}function L(e){try{if(e.matches(":popover-open"))return!0}catch(e){}try{return e.matches(":modal")}catch(e){return!1}}let h=/transform|translate|scale|rotate|perspective|filter/,u=/paint|layout|strict|content/,M=e=>!!e&&"none"!==e;function p(e){let t=C(e)?b(e):e;return M(t.transform)||M(t.translate)||M(t.scale)||M(t.rotate)||M(t.perspective)||!g()&&(M(t.backdropFilter)||M(t.filter))||h.test(t.willChange||"")||u.test(t.contain||"")}function m(e){let t=A(e);for(;d(t)&&!f(t);){if(p(t))return t;if(L(t))break;t=A(t)}return null}function g(){return null==o&&(o="u">typeof CSS&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),o}function f(e){return/^(html|body|#document)$/.test(a(e))}function b(e){return n(e).getComputedStyle(e)}function _(e){return C(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function A(e){if("html"===a(e))return e;let t=e.assignedSlot||e.parentNode||H(e)&&e.host||s(e);return H(t)?t.host:t}function w(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}i.d(t,{$4:()=>A,CP:()=>_,L9:()=>b,Lv:()=>c,Tc:()=>g,Tf:()=>L,ZU:()=>V,_m:()=>w,ep:()=>s,eu:()=>f,gJ:()=>m,mq:()=>a,sQ:()=>p,sb:()=>d,v9:()=>function e(t,i,o){var r;void 0===i&&(i=[]),void 0===o&&(o=!0);let a=function e(t){let i=A(t);return f(i)?t.ownerDocument?t.ownerDocument.body:t.body:d(i)&&V(i)?i:e(i)}(t),s=a===(null==(r=t.ownerDocument)?void 0:r.body),l=n(a);if(!s)return i.concat(a,e(a,[],o));{let t=w(l);return i.concat(l,l.visualViewport||[],V(a)?a:[],t&&o?e(t):[])}},vq:()=>C,zk:()=>n})},751(e,t,i){"use strict";var o=i(5077),r=i(9356),a=i(6231),n=i(3078),s=(0,o.AH)`:host {
|
|
21842
21842
|
--pulse-color: var(--wa-color-fill-loud, var(--wa-color-brand-fill-loud));
|
|
21843
21843
|
display: inline-flex;
|
|
21844
21844
|
align-items: center;
|
|
@@ -23639,4 +23639,4 @@ label:has(> :disabled) {
|
|
|
23639
23639
|
}
|
|
23640
23640
|
`;class s extends Set{constructor(e,t=null){super(),this._existing=null,this._el=e,this._existing=t}add(e){super.add(e);let t=this._existing;if(t)try{t.add(e)}catch{t.add(`--${e}`)}else this._el.setAttribute(`state-${e}`,"");return this}delete(e){super.delete(e);let t=this._existing;return t?(t.delete(e),t.delete(`--${e}`)):this._el.removeAttribute(`state-${e}`),!0}has(e){return super.has(e)}clear(){for(let e of this)this.delete(e)}}let l=CSSStyleSheet.prototype.replaceSync;Object.defineProperty(CSSStyleSheet.prototype,"replaceSync",{value:function(e){e=e.replace(/:state\(([^)]+)\)/g,":where(:state($1), :--$1, [state-$1])"),l.call(this,e)}});var C=Object.defineProperty,d=Object.getOwnPropertyDescriptor,H=e=>{throw TypeError(e)},V=(e,t,i,o)=>{for(var r,a=o>1?void 0:o?d(t,i):t,n=e.length-1;n>=0;n--)(r=e[n])&&(a=(o?r(t,i,a):r(a))||a);return o&&a&&C(t,i,a),a},c=(e,t,i)=>t.has(e)||H("Cannot "+i);class L extends r.WF{constructor(){let e;super(),(e=o).has(this)?H("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(this):e.set(this,!1),this.initialReflectedProperties=new Map,this.didSSR=r.S$||!!this.shadowRoot,this.customStates={set:(e,t)=>{if(this.internals?.states)try{t?this.internals.states.add(e):this.internals.states.delete(e)}catch(e){if(String(e).includes("must start with '--'"))console.error("Your browser implements an outdated version of CustomStateSet. Consider using a polyfill");else throw e}},has:e=>{if(!this.internals?.states)return!1;try{return this.internals.states.has(e)}catch{return!1}}};try{this.internals=this.attachInternals()}catch{console.error("Element internals are not supported in your browser. Consider using a polyfill")}for(let[e,t]of(this.customStates.set("wa-defined",!0),this.constructor.elementProperties))"inherit"===t.default&&void 0!==t.initial&&"string"==typeof e&&this.customStates.set(`initial-${e}-${t.initial}`,!0)}static get styles(){return[n,...Array.isArray(this.css)?this.css:this.css?[this.css]:[]]}attachInternals(){let e=super.attachInternals();return Object.defineProperty(e,"states",{value:new s(this,e.states)}),e}connectedCallback(){super.connectedCallback(),r.S$||this.shadowRoot?.prepend(document.createComment(` Web Awesome: https://webawesome.com/docs/components/${this.localName.replace("wa-","")} `))}attributeChangedCallback(e,t,i){let r;if(c(this,r=o,"read from private field"),!r.get(this)){let e;this.constructor.elementProperties.forEach((e,t)=>{e.reflect&&null!=this[t]&&this.initialReflectedProperties.set(t,this[t])}),c(this,e=o,"write to private field"),e.set(this,!0)}super.attributeChangedCallback(e,t,i)}willUpdate(e){super.willUpdate(e),this.initialReflectedProperties.forEach((t,i)=>{e.has(i)&&null==this[i]&&(this[i]=t)})}firstUpdated(e){super.firstUpdated(e),this.didSSR&&this.shadowRoot?.querySelectorAll("slot").forEach(e=>{e.dispatchEvent(new Event("slotchange",{bubbles:!0,composed:!1,cancelable:!1}))})}update(e){try{super.update(e)}catch(e){if(this.didSSR&&!this.hasUpdated){let t=new Event("lit-hydration-error",{bubbles:!0,composed:!0,cancelable:!1});t.error=e,this.dispatchEvent(t)}throw e}}relayNativeEvent(e,t){e.stopImmediatePropagation(),this.dispatchEvent(new e.constructor(e.type,{...e,...t}))}}o=new WeakMap,V([(0,a.MZ)()],L.prototype,"dir",2),V([(0,a.MZ)()],L.prototype,"lang",2),V([(0,a.MZ)({type:Boolean,reflect:!0,attribute:"did-ssr"})],L.prototype,"didSSR",2)},2164(e,t,i){"use strict";i.d(t,{q:()=>d});var o=i(5077),r=i(9356),a=i(6773),n=i(6231),s=Object.defineProperty,l=Object.getOwnPropertyDescriptor,C=(e,t,i,o)=>{for(var r,a=o>1?void 0:o?l(t,i):t,n=e.length-1;n>=0;n--)(r=e[n])&&(a=(o?r(t,i,a):r(a))||a);return o&&a&&s(t,i,a),a};class d extends n.A{constructor(){super(),this.name=null,this.disabled=!1,this.required=!1,this.assumeInteractionOn=["input"],this.validators=[],this.valueHasChanged=!1,this.hasInteracted=!1,this.customError=null,this.emittedEvents=[],this.emitInvalid=e=>{e.target===this&&(this.hasInteracted=!0,this.dispatchEvent(new a.W))},this.handleInteraction=e=>{let t=this.emittedEvents;t.includes(e.type)||t.push(e.type),t.length===this.assumeInteractionOn?.length&&(this.hasInteracted=!0)},o.S$||this.addEventListener("invalid",this.emitInvalid)}static get validators(){return[{observedAttributes:["custom-error"],checkValidity(e){let t={message:"",isValid:!0,invalidKeys:[]};return e.customError&&(t.message=e.customError,t.isValid=!1,t.invalidKeys=["customError"]),t}}]}static get observedAttributes(){let e=new Set(super.observedAttributes||[]);for(let t of this.validators)if(t.observedAttributes)for(let i of t.observedAttributes)e.add(i);return[...e]}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.assumeInteractionOn.forEach(e=>{this.addEventListener(e,this.handleInteraction)})}firstUpdated(...e){super.firstUpdated(...e),this.updateValidity()}willUpdate(e){if(!o.S$&&e.has("customError")&&(this.customError||(this.customError=null),this.setCustomValidity(this.customError||"")),e.has("value")||e.has("disabled")||e.has("defaultValue")){let e=this.value;if(Array.isArray(e)){if(this.name){let t=new FormData;for(let i of e)t.append(this.name,i);this.setValue(t,t)}}else this.setValue(e,e)}e.has("disabled")&&(this.customStates.set("disabled",this.disabled),!this.hasAttribute("disabled")&&(o.S$||this.matches(":disabled"))||this.toggleAttribute("disabled",this.disabled)),super.willUpdate(e),this.updateValidity()}get labels(){return this.internals.labels}getForm(){return this.internals.form}set form(e){e?this.setAttribute("form",e):this.removeAttribute("form")}get form(){return this.internals.form}get validity(){return this.internals.validity}get willValidate(){return this.internals.willValidate}get validationMessage(){return this.internals.validationMessage}checkValidity(){return this.updateValidity(),this.internals.checkValidity()}reportValidity(){return this.updateValidity(),this.hasInteracted=!0,this.internals.reportValidity()}get validationTarget(){return this.input||void 0}setValidity(...e){let t=e[0],i=e[1],o=e[2];o||(o=this.validationTarget),this.internals.setValidity(t,i,o||void 0),this.requestUpdate("validity"),this.setCustomStates()}setCustomStates(){let e=!!this.required,t=this.internals.validity.valid,i=this.hasInteracted;this.customStates.set("required",e),this.customStates.set("optional",!e),this.customStates.set("invalid",!t),this.customStates.set("valid",t),this.customStates.set("user-invalid",!t&&i),this.customStates.set("user-valid",t&&i)}setCustomValidity(e){if(!e){this.customError=null,this.setValidity({});return}this.customError=e,this.setValidity({customError:!0},e,this.validationTarget)}formResetCallback(){this.resetValidity(),this.hasInteracted=!1,this.valueHasChanged=!1,this.emittedEvents=[],this.updateValidity()}formDisabledCallback(e){this.disabled=e,this.updateValidity()}formStateRestoreCallback(e,t){this.value=e,"restore"===t&&this.resetValidity(),this.updateValidity()}setValue(...e){let[t,i]=e;this.internals.setFormValue(t,i)}get allValidators(){return[...this.constructor.validators||[],...this.validators||[]]}resetValidity(){this.setCustomValidity(""),this.setValidity({})}updateValidity(){if(this.disabled||this.hasAttribute("disabled")||!this.willValidate)return void this.resetValidity();let e=this.allValidators;if(!e?.length)return;let t={customError:!!this.customError},i=this.validationTarget||this.input||void 0,o="";for(let i of e){let{isValid:e,message:r,invalidKeys:a}=i.checkValidity(this);!e&&(o||(o=r),a?.length>=0&&a.forEach(e=>t[e]=!0))}o||(o=this.validationMessage),this.setValidity(t,o,i)}}d.formAssociated=!0,C([(0,r.MZ)({reflect:!0})],d.prototype,"name",2),C([(0,r.MZ)({type:Boolean})],d.prototype,"disabled",2),C([(0,r.MZ)({state:!0,attribute:!1})],d.prototype,"valueHasChanged",2),C([(0,r.MZ)({state:!0,attribute:!1})],d.prototype,"hasInteracted",2),C([(0,r.MZ)({attribute:"custom-error",reflect:!0})],d.prototype,"customError",2),C([(0,r.MZ)({attribute:!1,state:!0,type:Object})],d.prototype,"validity",1)},8791(e,t,i){"use strict";let o;i.d(t,{c:()=>c});let r=new Set,a=new Map,n="ltr",s="en",l="u">typeof MutationObserver&&"u">typeof document&&void 0!==document.documentElement;if(l){let e=new MutationObserver(d);n=document.documentElement.dir||"ltr",s=document.documentElement.lang||navigator.language,e.observe(document.documentElement,{attributes:!0,attributeFilter:["dir","lang"]})}function C(...e){e.map(e=>{let t=e.$code.toLowerCase();a.has(t)?a.set(t,Object.assign(Object.assign({},a.get(t)),e)):a.set(t,e),o||(o=e)}),d()}function d(){l&&(n=document.documentElement.dir||"ltr",s=document.documentElement.lang||navigator.language),[...r.keys()].map(e=>{"function"==typeof e.requestUpdate&&e.requestUpdate()})}class H{constructor(e){this.host=e,this.host.addController(this)}hostConnected(){r.add(this.host)}hostDisconnected(){r.delete(this.host)}dir(){return`${this.host.dir||n}`.toLowerCase()}lang(){return`${this.host.lang||s}`.toLowerCase()}getTranslationData(e){var t,i;let o;try{o=new Intl.Locale(e.replace(/_/g,"-"))}catch(e){return{locale:void 0,language:"",region:"",primary:void 0,secondary:void 0}}let r=o.language.toLowerCase(),n=null!=(i=null==(t=o.region)?void 0:t.toLowerCase())?i:"",s=a.get(`${r}-${n}`),l=a.get(r);return{locale:o,language:r,region:n,primary:s,secondary:l}}exists(e,t){var i;let{primary:r,secondary:a}=this.getTranslationData(null!=(i=t.lang)?i:this.lang());return t=Object.assign({includeFallback:!1},t),!!r&&!!r[e]||!!a&&!!a[e]||!!t.includeFallback&&!!o&&!!o[e]}term(e,...t){let i,{primary:r,secondary:a}=this.getTranslationData(this.lang());if(r&&r[e])i=r[e];else if(a&&a[e])i=a[e];else{if(!o||!o[e])return console.error(`No translation found for: ${String(e)}`),String(e);i=o[e]}return"function"==typeof i?i(...t):i}date(e,t){return e=new Date(e),new Intl.DateTimeFormat(this.lang(),t).format(e)}number(e,t){return isNaN(e=Number(e))?"":new Intl.NumberFormat(this.lang(),t).format(e)}relativeTime(e,t,i){return new Intl.RelativeTimeFormat(this.lang(),i).format(e,t)}}let V={$code:"en",$name:"English",$dir:"ltr",carousel:"Carousel",captions:"Captions",clearEntry:"Clear entry",close:"Close",createOption:e=>`Create "${e}"`,copied:"Copied",copy:"Copy",currentValue:"Current value",dropFileHere:"Drop file here or click to browse",decrement:"Decrement",dropFilesHere:"Drop files here or click to browse",error:"Error",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",goToSlide:(e,t)=>`Go to slide ${e} of ${t}`,hidePassword:"Hide password",increment:"Increment",loading:"Loading",moreOptions:"More Options",mute:"Mute",nextSlide:"Next slide",nextVideo:"Next Video",numCharacters:e=>1===e?"1 character":`${e} characters`,numCharactersRemaining:e=>1===e?"1 character remaining":`${e} characters remaining`,numOptionsSelected:e=>0===e?"No options selected":1===e?"1 option selected":`${e} options selected`,pause:"Pause",pauseAnimation:"Pause animation",pictureInPicture:"Picture in picture",play:"Play",playbackSpeed:"Playback speed",playlist:"Playlist",playAnimation:"Play animation",previousSlide:"Previous slide",previousVideo:"Previous video",progress:"Progress",remove:"Remove",resize:"Resize",scrollableRegion:"Scrollable region",scrollToEnd:"Scroll to end",scrollToStart:"Scroll to start",selectAColorFromTheScreen:"Select a color from the screen",showPassword:"Show password",slideNum:e=>`Slide ${e}`,toggleColorFormat:"Toggle color format",seek:"Seek",seekProgress:(e,t)=>`${e} of ${t}`,currentlyPlaying:"currently playing",unmute:"Unmute",videoPlayer:"Video player",volume:"Volume",zoomIn:"Zoom in",zoomOut:"Zoom out"};C(V);class c extends H{}C(V)},9104(e,t,i){"use strict";i.d(t,{Fg:()=>d,q6:()=>r,Gt:()=>C});class o extends Event{constructor(e,t,i,o){super("context-request",{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=t,this.callback=i,this.subscribe=o??!1}}function r(e){return e}class a{constructor(e,t,i,o){(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(e,t)=>{this.unsubscribe&&(this.unsubscribe!==t&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=e,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(e,t)),this.unsubscribe=t},this.host=e,void 0!==t.context)?(this.context=t.context,this.callback=t.callback,this.subscribe=t.subscribe??!1):(this.context=t,this.callback=i,this.subscribe=o??!1),this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new o(this.context,this.host,this.t,this.subscribe))}}class n{get value(){return this.o}set value(e){this.setValue(e)}setValue(e,t=!1){let i=t||!Object.is(e,this.o);this.o=e,i&&this.updateObservers()}constructor(e){this.subscriptions=new Map,this.updateObservers=()=>{for(let[e,{disposer:t}]of this.subscriptions)e(this.o,t)},void 0!==e&&(this.value=e)}addCallback(e,t,i){if(!i)return void e(this.value);this.subscriptions.has(e)||this.subscriptions.set(e,{disposer:()=>{this.subscriptions.delete(e)},consumerHost:t});let{disposer:o}=this.subscriptions.get(e);e(this.value,o)}clearCallbacks(){this.subscriptions.clear()}}class s extends Event{constructor(e,t){super("context-provider",{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=t}}class l extends n{constructor(e,t,i){super(void 0!==t.context?t.initialValue:i),this.onContextRequest=e=>{if(e.context!==this.context)return;let t=e.contextTarget??e.composedPath()[0];t!==this.host&&(e.stopPropagation(),this.addCallback(e.callback,t,e.subscribe))},this.onProviderRequest=e=>{if(e.context!==this.context||(e.contextTarget??e.composedPath()[0])===this.host)return;let t=new Set;for(let[e,{consumerHost:i}]of this.subscriptions)t.has(e)||(t.add(e),i.dispatchEvent(new o(this.context,i,e,!0)));e.stopPropagation()},this.host=e,void 0!==t.context?this.context=t.context:this.context=t,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener("context-request",this.onContextRequest),this.host.addEventListener("context-provider",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new s(this.context,this.host))}}function C({context:e}){return(t,i)=>{let o=new WeakMap;if("object"==typeof i)return{get(){return t.get.call(this)},set(e){return o.get(this).setValue(e),t.set.call(this,e)},init(t){return o.set(this,new l(this,{context:e,initialValue:t})),t}};{let r;t.constructor.addInitializer(t=>{o.set(t,new l(t,{context:e}))});let a=Object.getOwnPropertyDescriptor(t,i);if(void 0===a){let e=new WeakMap;r={get(){return e.get(this)},set(t){o.get(this).setValue(t),e.set(this,t)},configurable:!0,enumerable:!0}}else{let e=a.set;r={...a,set(t){o.get(this).setValue(t),e?.call(this,t)}}}return void Object.defineProperty(t,i,r)}}}function d({context:e,subscribe:t}){return(i,o)=>{"object"==typeof o?o.addInitializer(function(){new a(this,{context:e,callback:e=>{i.set.call(this,e)},subscribe:t})}):i.constructor.addInitializer(i=>{new a(i,{context:e,callback:e=>{i[o]=e},subscribe:t})})}}},1292(e,t,i){"use strict";i.d(t,{mN:()=>A,AH:()=>C,W3:()=>f,Ec:()=>b,iz:()=>l});let o=globalThis,r=o.ShadowRoot&&(void 0===o.ShadyCSS||o.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,a=Symbol(),n=new WeakMap;class s{constructor(e,t,i){if(this._$cssResult$=!0,i!==a)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(r&&void 0===e){let i=void 0!==t&&1===t.length;i&&(e=n.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&n.set(t,e))}return e}toString(){return this.cssText}}let l=e=>new s("string"==typeof e?e:e+"",void 0,a),C=(e,...t)=>new s(1===e.length?e[0]:t.reduce((t,i,o)=>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.")})(i)+e[o+1],e[0]),e,a),d=r?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(let i of e.cssRules)t+=i.cssText;return l(t)})(e):e,{is:H,defineProperty:V,getOwnPropertyDescriptor:c,getOwnPropertyNames:L,getOwnPropertySymbols:h,getPrototypeOf:u}=Object,M=globalThis,p=M.trustedTypes,m=p?p.emptyScript:"",g=M.reactiveElementPolyfillSupport,f={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 i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},b=(e,t)=>!H(e,t),_={attribute:!0,type:String,converter:f,reflect:!1,useDefault:!1,hasChanged:b};Symbol.metadata??=Symbol("metadata"),M.litPropertyMetadata??=new WeakMap;class A 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=_){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){let i=Symbol(),o=this.getPropertyDescriptor(e,i,t);void 0!==o&&V(this.prototype,e,o)}}static getPropertyDescriptor(e,t,i){let{get:o,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:o,set(t){let a=o?.call(this);r?.call(this,t),this.requestUpdate(e,a,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??_}static _$Ei(){if(this.hasOwnProperty("elementProperties"))return;let e=u(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty("finalized"))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty("properties")){let e=this.properties;for(let t of[...L(e),...h(e)])this.createProperty(t,e[t])}let e=this[Symbol.metadata];if(null!==e){let t=litPropertyMetadata.get(e);if(void 0!==t)for(let[e,i]of t)this.elementProperties.set(e,i)}for(let[e,t]of(this._$Eh=new Map,this.elementProperties)){let i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e))for(let i of new Set(e.flat(1/0).reverse()))t.unshift(d(i));else void 0!==e&&t.push(d(e));return t}static _$Eu(e,t){let i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"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_(){let e=new Map;for(let t of this.constructor.elementProperties.keys())this.hasOwnProperty(t)&&(e.set(t,this[t]),delete this[t]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{if(r)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let i of t){let t=document.createElement("style"),r=o.litNonce;void 0!==r&&t.setAttribute("nonce",r),t.textContent=i.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,i){this._$AK(e,i)}_$ET(e,t){let i=this.constructor.elementProperties.get(e),o=this.constructor._$Eu(e,i);if(void 0!==o&&!0===i.reflect){let r=(void 0!==i.converter?.toAttribute?i.converter:f).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(o):this.setAttribute(o,r),this._$Em=null}}_$AK(e,t){let i=this.constructor,o=i._$Eh.get(e);if(void 0!==o&&this._$Em!==o){let e=i.getPropertyOptions(o),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:f;this._$Em=o;let a=r.fromAttribute(t,e.type);this[o]=a??this._$Ej?.get(o)??a,this._$Em=null}}requestUpdate(e,t,i,o=!1,r){if(void 0!==e){let a=this.constructor;if(!1===o&&(r=this[e]),!(((i??=a.getPropertyOptions(e)).hasChanged??b)(r,t)||i.useDefault&&i.reflect&&r===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,i))))return;this.C(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:i,reflect:o,wrapped:r},a){i&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==r||void 0!==a)||(this._$AL.has(e)||(this.hasUpdated||i||(t=void 0),this._$AL.set(e,t)),!0===o&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let 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(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,i]of e){let{wrapped:e}=i,o=this[t];!0!==e||this._$AL.has(t)||void 0===o||this.C(t,void 0,i,o)}}let e=!1,t=this._$AL;try{(e=this.shouldUpdate(t))?(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){}}A.elementStyles=[],A.shadowRootOptions={mode:"open"},A.elementProperties=new Map,A.finalized=new Map,g?.({ReactiveElement:A}),(M.reactiveElementVersions??=[]).push("2.1.2")},6697(e,t,i){"use strict";var o=i(8632),r=i(3356);let a=(e,t)=>{let i=e._$AN;if(void 0===i)return!1;for(let e of i)e._$AO?.(t,!1),a(e,t);return!0},n=e=>{let t,i;do{if(void 0===(t=e._$AM))break;(i=t._$AN).delete(e),e=t}while(0===i?.size)},s=e=>{for(let t;t=e._$AM;e=t){let i=t._$AN;if(void 0===i)t._$AN=i=new Set;else if(i.has(e))break;i.add(e),d(t)}};function l(e){void 0!==this._$AN?(n(this),this._$AM=e,s(this)):this._$AM=e}function C(e,t=!1,i=0){let o=this._$AH,r=this._$AN;if(void 0!==r&&0!==r.size)if(t)if(Array.isArray(o))for(let e=i;e<o.length;e++)a(o[e],!1),n(o[e]);else null!=o&&(a(o,!1),n(o));else a(this,e)}let d=e=>{e.type==r.OA.CHILD&&(e._$AP??=C,e._$AQ??=l)};class H extends r.WL{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,i){super._$AT(e,t,i),s(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(a(this,e),n(this))}setValue(e){if((0,o.Rt)(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}}i.d(t,{Kq:()=>H,u$:()=>r.u$})},8632(e,t,i){"use strict";let{I:o}=i(496).ge,r=e=>e,a={};i.d(t,{},{Dx:(e,t,i)=>{let a=e._$AA.parentNode,n=void 0===t?e._$AB:t._$AA;if(void 0===i)i=new o(a.insertBefore(document.createComment(""),n),a.insertBefore(document.createComment(""),n),e,e.options);else{let t=i._$AB.nextSibling,o=i._$AM,s=o!==e;if(s){let t;i._$AQ?.(e),i._$AM=e,void 0!==i._$AP&&(t=e._$AU)!==o._$AU&&i._$AP(t)}if(t!==n||s){let e=i._$AA;for(;e!==t;){let t=r(e).nextSibling;r(a).insertBefore(e,n),e=t}}}return i},Jz:e=>{e._$AR()},KO:e=>{e._$AR(),e._$AA.remove()},Rt:e=>void 0===e.strings,cN:e=>e._$AH,lx:(e,t,i=e)=>(e._$AI(t,i),e),mY:(e,t=a)=>e._$AH=t,ps:e=>null!=e?._$litType$?.h,qb:(e,t)=>void 0===t?void 0!==e?._$litType$:e?._$litType$===t})},3356(e,t,i){"use strict";class o{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}i.d(t,{WL:()=>o},{OA:{ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},u$:e=>(...t)=>({_$litDirective$:e,values:t})})},496(e,t,i){"use strict";let o=globalThis,r=e=>e,a=o.trustedTypes,n=a?a.createPolicy("lit-html",{createHTML:e=>e}):void 0,s="$lit$",l=`lit$${Math.random().toFixed(9).slice(2)}$`,C="?"+l,d=`<${C}>`,H=document,V=()=>H.createComment(""),c=e=>null===e||"object"!=typeof e&&"function"!=typeof e,L=Array.isArray,h=e=>L(e)||"function"==typeof e?.[Symbol.iterator],u="[ \n\f\r]",M=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,p=/-->/g,m=/>/g,g=RegExp(`>|${u}(?:([^\\s"'>=/]+)(${u}*=${u}*(?:[^
|
|
23641
23641
|
\f\r"'\`<>=]|("|')|))|$)`,"g"),f=/'/g,b=/"/g,_=/^(?:script|style|textarea|title)$/i,A=e=>(t,...i)=>({_$litType$:e,strings:t,values:i}),w=A(1),v=A(2),y=Symbol.for("lit-noChange"),S=Symbol.for("lit-nothing"),k=new WeakMap,Z=H.createTreeWalker(H,129);function x(e,t){if(!L(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==n?n.createHTML(t):t}let O=(e,t)=>{let i=e.length-1,o=[],r,a=2===t?"<svg>":3===t?"<math>":"",n=M;for(let t=0;t<i;t++){let i=e[t],C,H,V=-1,c=0;for(;c<i.length&&(n.lastIndex=c,null!==(H=n.exec(i)));)c=n.lastIndex,n===M?"!--"===H[1]?n=p:void 0!==H[1]?n=m:void 0!==H[2]?(_.test(H[2])&&(r=RegExp("</"+H[2],"g")),n=g):void 0!==H[3]&&(n=g):n===g?">"===H[0]?(n=r??M,V=-1):void 0===H[1]?V=-2:(V=n.lastIndex-H[2].length,C=H[1],n=void 0===H[3]?g:'"'===H[3]?b:f):n===b||n===f?n=g:n===p||n===m?n=M:(n=g,r=void 0);let L=n===g&&e[t+1].startsWith("/>")?" ":"";a+=n===M?i+d:V>=0?(o.push(C),i.slice(0,V)+s+i.slice(V)+l+L):i+l+(-2===V?t:L)}return[x(e,a+(e[i]||"<?>")+(2===t?"</svg>":3===t?"</math>":"")),o]};class ${constructor({strings:e,_$litType$:t},i){let o;this.parts=[];let r=0,n=0,d=e.length-1,H=this.parts,[c,L]=O(e,t);if(this.el=$.createElement(c,i),Z.currentNode=this.el.content,2===t||3===t){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(o=Z.nextNode())&&H.length<d;){if(1===o.nodeType){if(o.hasAttributes())for(let e of o.getAttributeNames())if(e.endsWith(s)){let t=L[n++],i=o.getAttribute(e).split(l),a=/([.?@])?(.*)/.exec(t);H.push({type:1,index:r,name:a[2],strings:i,ctor:"."===a[1]?R:"?"===a[1]?F:"@"===a[1]?D:T}),o.removeAttribute(e)}else e.startsWith(l)&&(H.push({type:6,index:r}),o.removeAttribute(e));if(_.test(o.tagName)){let e=o.textContent.split(l),t=e.length-1;if(t>0){o.textContent=a?a.emptyScript:"";for(let i=0;i<t;i++)o.append(e[i],V()),Z.nextNode(),H.push({type:2,index:++r});o.append(e[t],V())}}}else if(8===o.nodeType)if(o.data===C)H.push({type:2,index:r});else{let e=-1;for(;-1!==(e=o.data.indexOf(l,e+1));)H.push({type:7,index:r}),e+=l.length-1}r++}}static createElement(e,t){let i=H.createElement("template");return i.innerHTML=e,i}}function E(e,t,i=e,o){if(t===y)return t;let r=void 0!==o?i._$Co?.[o]:i._$Cl,a=c(t)?void 0:t._$litDirective$;return r?.constructor!==a&&(r?._$AO?.(!1),void 0===a?r=void 0:(r=new a(e))._$AT(e,i,o),void 0!==o?(i._$Co??=[])[o]=r:i._$Cl=r),void 0!==r&&(t=E(e,r._$AS(e,t.values),r,o)),t}class z{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:i}=this._$AD,o=(e?.creationScope??H).importNode(t,!0);Z.currentNode=o;let r=Z.nextNode(),a=0,n=0,s=i[0];for(;void 0!==s;){if(a===s.index){let t;2===s.type?t=new P(r,r.nextSibling,this,e):1===s.type?t=new s.ctor(r,s.name,s.strings,this,e):6===s.type&&(t=new B(r,this,e)),this._$AV.push(t),s=i[++n]}a!==s?.index&&(r=Z.nextNode(),a++)}return Z.currentNode=H,o}p(e){let t=0;for(let i of this._$AV)void 0!==i&&(void 0!==i.strings?(i._$AI(e,i,t),t+=i.strings.length-2):i._$AI(e[t])),t++}}class P{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,i,o){this.type=2,this._$AH=S,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=i,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return void 0!==t&&11===e?.nodeType&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){c(e=E(this,e,t))?e===S||null==e||""===e?(this._$AH!==S&&this._$AR(),this._$AH=S):e!==this._$AH&&e!==y&&this._(e):void 0!==e._$litType$?this.$(e):void 0!==e.nodeType?this.T(e):h(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!==S&&c(this._$AH)?this._$AA.nextSibling.data=e:this.T(H.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:i}=e,o="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=$.createElement(x(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===o)this._$AH.p(t);else{let e=new z(o,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=k.get(e.strings);return void 0===t&&k.set(e.strings,t=new $(e)),t}k(e){L(this._$AH)||(this._$AH=[],this._$AR());let t=this._$AH,i,o=0;for(let r of e)o===t.length?t.push(i=new P(this.O(V()),this.O(V()),this,this.options)):i=t[o],i._$AI(r),o++;o<t.length&&(this._$AR(i&&i._$AB.nextSibling,o),t.length=o)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let t=r(e).nextSibling;r(e).remove(),e=t}}setConnected(e){void 0===this._$AM&&(this._$Cv=e,this._$AP?.(e))}}class T{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,i,o,r){this.type=1,this._$AH=S,this._$AN=void 0,this.element=e,this.name=t,this._$AM=o,this.options=r,i.length>2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=S}_$AI(e,t=this,i,o){let r=this.strings,a=!1;if(void 0===r)(a=!c(e=E(this,e,t,0))||e!==this._$AH&&e!==y)&&(this._$AH=e);else{let o,n,s=e;for(e=r[0],o=0;o<r.length-1;o++)(n=E(this,s[i+o],t,o))===y&&(n=this._$AH[o]),a||=!c(n)||n!==this._$AH[o],n===S?e=S:e!==S&&(e+=(n??"")+r[o+1]),this._$AH[o]=n}a&&!o&&this.j(e)}j(e){e===S?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}}class R extends T{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===S?void 0:e}}class F extends T{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==S)}}class D extends T{constructor(e,t,i,o,r){super(e,t,i,o,r),this.type=5}_$AI(e,t=this){if((e=E(this,e,t,0)??S)===y)return;let i=this._$AH,o=e===S&&i!==S||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,r=e!==S&&(i===S||o);o&&this.element.removeEventListener(this.name,this,i),r&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){"function"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}}class B{constructor(e,t,i){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(e){E(this,e)}}let I=o.litHtmlPolyfillSupport;I?.($,P),(o.litHtmlVersions??=[]).push("3.3.3"),i.d(t,{},{JW:v,XX:(e,t,i)=>{let o=i?.renderBefore??t,r=o._$litPart$;if(void 0===r){let e=i?.renderBefore??null;o._$litPart$=r=new P(t.insertBefore(V(),e),e,void 0,i??{})}return r._$AI(e),r},c0:y,ge:{M:s,P:l,A:C,C:1,L:O,R:z,D:h,V:E,I:P,H:T,N:F,U:D,B:R,F:B},qy:w,s6:S})},6745(e,t,i){"use strict";var o=i(6697);i.d(t,{Kq:()=>o.Kq,u$:()=>o.u$})},9356(e,t,i){"use strict";let o;i.d(t,{EM:()=>r,MZ:()=>s,P:()=>d,YG:()=>H,wk:()=>l});let r=e=>(t,i)=>{void 0!==i?i.addInitializer(()=>{customElements.define(e,t)}):customElements.define(e,t)};var a=i(1292);let n={attribute:!0,type:String,converter:a.W3,reflect:!1,hasChanged:a.Ec};function s(e){return(t,i)=>{let o;return"object"==typeof i?((e=n,t,i)=>{let{kind:o,metadata:r}=i,a=globalThis.litPropertyMetadata.get(r);if(void 0===a&&globalThis.litPropertyMetadata.set(r,a=new Map),"setter"===o&&((e=Object.create(e)).wrapped=!0),a.set(i.name,e),"accessor"===o){let{name:o}=i;return{set(i){let r=t.get.call(this);t.set.call(this,i),this.requestUpdate(o,r,e,!0,i)},init(t){return void 0!==t&&this.C(o,void 0,e,t),t}}}if("setter"===o){let{name:o}=i;return function(i){let r=this[o];t.call(this,i),this.requestUpdate(o,r,e,!0,i)}}throw Error("Unsupported decorator location: "+o)})(e,t,i):(o=t.hasOwnProperty(i),t.constructor.createProperty(i,e),o?Object.getOwnPropertyDescriptor(t,i):void 0)}}function l(e){return s({...e,state:!0,attribute:!1})}let C=(e,t,i)=>(i.configurable=!0,i.enumerable=!0,Reflect.decorate&&"object"!=typeof t&&Object.defineProperty(e,t,i),i);function d(e,t){return(i,o,r)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let e,{get:t,set:n}="object"==typeof o?i:r??(e=Symbol(),{get(){return this[e]},set(t){this[e]=t}});return C(i,o,{get(){let e=t.call(this);return void 0===e&&(null!==(e=a(this))||this.hasUpdated)&&n.call(this,e),e}})}return C(i,o,{get(){return a(this)}})}}function H(e){return(t,i)=>C(t,i,{get(){return(this.renderRoot??(o??=document.createDocumentFragment())).querySelectorAll(e)}})}},9898(e,t,i){"use strict";i.d(t,{H:()=>a});var o=i(496),r=i(3356);let a=(0,r.u$)(class extends r.WL{constructor(e){if(super(e),e.type!==r.OA.ATTRIBUTE||"class"!==e.name||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return" "+Object.keys(e).filter(t=>e[t]).join(" ")+" "}update(e,[t]){if(void 0===this.st){for(let i in this.st=new Set,void 0!==e.strings&&(this.nt=new Set(e.strings.join(" ").split(/\s/).filter(e=>""!==e))),t)t[i]&&!this.nt?.has(i)&&this.st.add(i);return this.render(t)}let i=e.element.classList;for(let e of this.st)e in t||(i.remove(e),this.st.delete(e));for(let e in t){let o=!!t[e];o===this.st.has(e)||this.nt?.has(e)||(o?(i.add(e),this.st.add(e)):(i.remove(e),this.st.delete(e)))}return o.c0}})},7288(e,t,i){"use strict";i.d(t,{J:()=>r});var o=i(496);let r=e=>e??o.s6},2974(e,t,i){"use strict";i.d(t,{V:()=>n});var o=i(496),r=i(3356),a=i(8632);let n=(0,r.u$)(class extends r.WL{constructor(e){if(super(e),e.type!==r.OA.PROPERTY&&e.type!==r.OA.ATTRIBUTE&&e.type!==r.OA.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!(0,a.Rt)(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===o.c0||t===o.s6)return t;let i=e.element,n=e.name;if(e.type===r.OA.PROPERTY){if(t===i[n])return o.c0}else if(e.type===r.OA.BOOLEAN_ATTRIBUTE){if(!!t===i.hasAttribute(n))return o.c0}else if(e.type===r.OA.ATTRIBUTE&&i.getAttribute(n)===t+"")return o.c0;return(0,a.mY)(e),t}})},1165(e,t,i){"use strict";i.d(t,{_:()=>n,K:()=>C});var o=i(496),r=i(6697),a=i(3356);let n=()=>new s;class s{}let l=new WeakMap,C=(0,a.u$)(class extends r.Kq{render(e){return o.s6}update(e,[t]){let i=t!==this.G;return i&&this.rt(void 0),(i||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),o.s6}rt(e){if(void 0!==this.G)if(this.isConnected||(e=void 0),"function"==typeof this.G){let t=this.ht??globalThis,i=l.get(t);void 0===i&&(i=new WeakMap,l.set(t,i)),void 0!==i.get(this.G)&&this.G.call(this.ht,void 0),i.set(this.G,e),void 0!==e&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return"function"==typeof this.G?l.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}})},5077(e,t,i){"use strict";i.d(t,{WF:()=>n,AH:()=>o.AH,qy:()=>r.qy,S$:()=>!1,c0:()=>r.c0,s6:()=>r.s6,XX:()=>r.XX,JW:()=>r.JW,iz:()=>o.iz});var o=i(1292),r=i(496);let a=globalThis;class n extends o.mN{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=(0,r.XX)(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r.c0}}n._$litElement$=!0,n.finalized=!0,a.litElementHydrateSupport?.({LitElement:n});let s=a.litElementPolyfillSupport;s?.({LitElement:n}),(a.litElementVersions??=[]).push("4.2.2")},389(e){"use strict";e.exports=JSON.parse('{"language":"English","flag":"🇬🇧","dashboard":{"title":"ESPHome Device Builder","subtitle":"Create and make your smart devices and automations","discovered_count":"{count, plural, one {Discovered # device} other {Discovered # devices}}","discovered_status":"Discovered","discovered_ignored":"Ignored","show":"Show","hide":"Hide","show_ignored":"Show ignored ({count})","hide_ignored":"Hide ignored","action_take_control":"Take control","action_ignore":"Ignore","action_unignore":"Unignore","action_ignore_failed":"Failed to ignore \\"{name}\\"","action_unignore_failed":"Failed to unignore \\"{name}\\"","adopt_title":"Take control","adopt_description":"Taking control of {name} creates a local ESPHome configuration. From now on you manage updates from the dashboard — vendor-provided firmware updates won\'t apply automatically.","adopt_source_label":"Configuration source","adopt_rename_hint":"Changing the hostname will build and install new firmware over the network.","adopt_field_friendly_name":"Friendly name (optional)","adopt_encryption_title":"Enable API encryption","adopt_encryption_hint":"Generates a fresh key for the Native API. Recommended; required for Home Assistant integration.","adopt_submit":"Take control","adopt_submit_busy":"Taking control…","adopt_error_generic":"Failed to take control of this device","adopt_package_warning":"Adopted, but its remote package needs a repair in the editor","create_package_warning":"Created, but its remote package needs a repair in the editor","add_new_device":"Add new device","add_new_device_hint":"Create a new ESPHome configuration","esphome_web":"ESPHome web","update":"Update","update_available_version":"Update available: {installed} → {target}","edit":"Edit","logs":"Logs","create_device":"Create device","offline":"Offline","online":"Online","unknown":"Unknown","status_untracked":"No status","status_untracked_tooltip":"Status tracking is unavailable while name_add_mac_suffix is set","delete":"Delete","search_placeholder":"Search devices…","search_clear":"Clear search","device_count":"{count, plural, one {device} other {devices}}","search_of":"of {total}","no_results_title":"No devices found","no_results_desc":"No devices match \\"{query}\\". Try a different name or configuration file.","no_results_desc_filtered":"No devices match the current filters.","no_results_clear":"Clear filters","logs_title":"Logs - {name}","logs_doc_view":"View documentation","logs_doc_actionable_link_title":"Show documentation for this message","logs_doc_component_link_title":"Open {component} documentation","logs_doc_embedded_title":"ESPHome documentation","logs_doc_embedded_body":"This log message links to the ESPHome documentation.","logs_doc_bootloader_title":"Bootloader too old for OTA rollback","logs_doc_bootloader_body":"Flash this device once over USB to update the bootloader, then OTA rollback works again.","logs_doc_chip_revision_title":"Set minimum_chip_revision","logs_doc_chip_revision_body":"Setting a minimum chip revision lets ESPHome drop older-revision workarounds and shrink the binary.","logs_doc_crash_title":"Crash detected on previous boot","logs_doc_crash_body":"The device rebooted after a crash. The troubleshooting guide explains how to read the crash log and find the cause.","logs_doc_slow_component_title":"A component is blocking too long","logs_doc_slow_component_body":"Something is stalling the main loop, which can cause disconnects and missed updates. The troubleshooting guide explains how to find and fix the slow component.","logs_doc_wifi_reconnect_title":"Wi-Fi keeps disconnecting","logs_doc_wifi_reconnect_body":"The FAQ covers the common causes of unstable Wi-Fi, from signal and power problems to router settings.","logs_doc_wifi_ap_no_portal_title":"Access point can\'t serve config","logs_doc_wifi_ap_no_portal_body":"The fallback access point has no captive portal or web server, so it can\'t show a configuration page. The captive portal documentation explains how to add one.","logs_doc_boot_loop_title":"Repeated resets detected","logs_doc_boot_loop_body":"The device is resetting before boot completes and will enter safe mode soon. The troubleshooting guide explains how to find the cause.","logs_doc_ota_rollback_title":"OTA update rolled back","logs_doc_ota_rollback_body":"The previous update failed to boot and the bootloader restored the old firmware. The troubleshooting guide explains how to diagnose the failed boot.","logs_doc_nvs_title":"Saved states unavailable","logs_doc_nvs_body":"The device could not open its NVS storage, so component states may not restore after reboot. The FAQ explains recovery options.","logs_doc_ble_slots_title":"No free BLE connection slots","logs_doc_ble_slots_body":"Every active connection slot is in use. The Bluetooth proxy documentation explains how active connections and slot limits work.","logs_doc_tcp_buffer_title":"Outgoing TCP buffer full","logs_doc_tcp_buffer_body":"The device\'s outgoing TCP send buffer filled up, so a message was dropped or delayed. Raising tcp_send_buffer under network: gives bursty senders like Bluetooth proxies more headroom.","logs_doc_sram1_title":"Reclaim SRAM1 as IRAM","logs_doc_sram1_body":"This device\'s bootloader can use SRAM1 as instruction RAM. Setting sram1_as_iram frees about 40KB.","logs_source_web_serial":"Web Serial","logs_placeholder":"Waiting for logs…","logs_stop":"Stop","logs_start":"Start","logs_clear":"Clear","logs_expand":"Expand","logs_collapse":"Collapse","logs_download":"Download","logs_states":"States","logs_reset_device":"Reset device","logs_reset_failed":"Failed to reset the device.","logs_web_serial_open_failed":"Failed to open the serial port.","logs_hide_states":"Hide states","logs_show_states":"Show states","logs_back_to_install":"Back to install","logs_back_to_install_tooltip":"Return to the install output","logs_port_reopen_failed":"Failed to reopen the serial port for logs ({port}). The device may still be restarting — click Start to reconnect.","logs_no_serial_output":"No serial output from the device yet. {network_action}","logs_serial_unavailable":"Serial isn\'t available. {network_action}","logs_switch_to_network":"Stream network logs instead","logs_switched_to_network":"Switched to network logs; waiting for the device to come online…","logs_connection_lost":"Connection to the dashboard lost. Reconnecting…","logs_reconnected":"Reconnected to the dashboard; resuming logs…","select_all":"Select all","deselect_all":"Deselect all","selected_count":"{count} selected","update_selected":"Update","compile_selected":"Compile only","update_more_options_aria":"More update options","delete_selected":"Delete","delete_selected_title":"Delete devices","delete_selected_desc":"Are you sure you want to delete {count, plural, one {# device} other {# devices}}? This will remove their configuration files and cannot be undone.","delete_selected_confirm":"Delete","delete_single_title":"Delete device","delete_single_desc":"Are you sure you want to delete \\"{name}\\"? This will remove its configuration files and cannot be undone.","delete_all_none":"No devices selected to delete","delete_bulk_success":"{count, plural, one {# device deleted} other {# devices deleted}}","delete_bulk_failed":"Bulk delete failed","archive_selected":"Archive","archive_selected_title":"Archive devices","archive_selected_desc":"Archive {count, plural, one {# device} other {# devices}}? Their build files will be removed and you\'ll need to recompile from scratch when you restore them. You can find archived devices later from the menu (⋮) at the top right of the dashboard under \\"Archived devices\\".","archive_selected_confirm":"Archive","archive_all_none":"No devices selected to archive","archive_bulk_success":"{count, plural, one {# device archived} other {# devices archived}}","archive_bulk_failed":"Bulk archive failed","bulk_failure_unknown_error":"Unknown error","delete_failed":"Failed to delete \\"{name}\\"","deleted":"\\"{name}\\" deleted","more_options":"More options","action_validate":"Validate","action_install":"Install","action_show_encryption_key":"Show encryption key","action_download_yaml":"Download YAML","action_rename":"Rename hostname","action_clone":"Duplicate","action_edit_friendly_name":"Edit friendly name","action_clean_build":"Clean build files","action_clean_build_busy":"Wait for the current build to finish before cleaning","action_download":"Download","action_visit_web_ui":"Visit web UI","serial_recognized":"Recognized \\"{name}\\"","serial_starterkit_detected":"Detected {name}","serial_connect_failed":"Could not connect to the device: {error}","action_download_yaml_failed":"Failed to download YAML for \\"{name}\\"","action_rename_title":"Rename device","action_rename_label":"Device name","action_rename_confirm":"Rename","action_rename_success":"\\"{name}\\" renamed successfully","action_rename_failed":"Failed to rename \\"{name}\\": {reason}","action_rename_offline_title":"Device isn\'t reachable","action_rename_offline_desc":"\\"{name}\\" can\'t be reached right now, so it can\'t be reflashed. Rename the config anyway? The device keeps its current name until you reinstall, and since it won\'t answer to the new name yet, you may need to reinstall using Advanced options and enter its IP address.","action_rename_offline_confirm":"Rename config","action_clone_title":"Duplicate {name}","action_clone_friendly_name_label":"New friendly name","action_clone_friendly_name_placeholder":"e.g. Smart Plug","action_clone_friendly_name_helper":"Shown in Home Assistant. The hostname below is derived from it as you type.","action_clone_confirm":"Duplicate","action_clone_same_name":"New hostname must differ from the source","action_clone_success":"Duplicated to \\"{name}\\"","action_clone_failed":"Failed to duplicate \\"{name}\\": {reason}","action_friendly_name_title":"Edit friendly name — {name}","action_friendly_name_label":"Friendly name","action_friendly_name_helper":"Shown in Home Assistant and the dashboard list. The hostname stays the same.","action_friendly_name_required":"Friendly name is required","action_friendly_name_install_after":"Install immediately so the device announces the new name","action_friendly_name_install_skipped":"The new name lands in the YAML now; flash the device to apply.","action_friendly_name_confirm":"Save","action_friendly_name_success":"Renamed to \\"{name}\\"","action_friendly_name_unchanged":"Friendly name unchanged","action_friendly_name_failed":"Failed to rename \\"{name}\\": {reason}","action_encryption_key_title":"Encryption Key","action_encryption_key_show":"Show","action_encryption_key_hide":"Hide","action_encryption_key_copy":"Copy","action_encryption_key_copied":"Encryption key copied to clipboard","action_encryption_key_not_found":"Unable to automatically extract the encryption key. It may not be set. Open the configuration editor and look for an encryption key under api: or under the esphome OTA platform.","action_encryption_key_failed":"Failed to read the encryption key for \\"{name}\\": {error}","logs_method_title":"How to get the logs for your device?","logs_method_wireless":"On the network","logs_method_wireless_desc":"Requires the device to be online","logs_method_web_serial":"Plug into this computer","logs_method_web_serial_desc":"Opens ESPHome Web, where you can connect over USB and view serial logs (this page can\'t use USB over an insecure connection).","logs_method_network_address_submit":"View logs over network","logs_web_serial_unsupported":"Web Serial is not supported in this browser","logs_serial_disabled_fallback":"Serial logging is disabled for this device (logger baud_rate is 0). Showing network logs instead.","logs_serial_wrong_port_fallback":"This port can\'t show the device\'s logs (the logger outputs on {interface}). Showing network logs instead.","install_method_title":"How do you want to install the firmware?","install_method_network":"On the network","install_method_network_desc":"Compile and upload over the network","install_method_network_desc_offline":"Device is offline; the update will compile now and install when the device comes back online","install_method_network_desc_never_flashed":"Compiles now, but the firmware can\'t reach the device until its first USB install","install_method_first_install_notice":"This device hasn\'t been installed yet. The first install needs a USB cable; you only need to do this once, later updates can install over the network.","install_method_offline_notice":"This device is offline. A network install will compile now and install automatically when the device comes back online.","install_method_advanced_toggle":"Advanced options","install_method_network_address_label":"Device IP or hostname","install_method_network_address_desc":"Target a specific address instead of the auto-detected one","install_method_network_address_submit":"Install over network","install_method_usb_local":"Plug into this computer","install_method_usb_local_desc":"For devices connected via USB to this computer","install_method_usb_remote_desc":"Opens the USB flasher in a new tab; the firmware stays in your browser and is flashed 100% locally","install_method_usb_remote_loopback":"Opens a flasher tab; the firmware stays in your browser and is flashed 100% locally. Or open the dashboard at {link} to flash directly from this computer.","install_method_usb_local_unsupported":"Requires a browser with Web Serial support (e.g. Chrome, Edge, or Firefox 151+)","install_method_usb_server":"Plug into computer running ESPHome Device Builder","install_method_usb_server_desc":"For devices connected via USB to the server","install_method_usb_server_localhost":"Use a serial port on this computer","install_method_usb_server_localhost_desc":"ESPHome on this computer flashes it over USB","install_method_usb_server_ha":"Plug into your Home Assistant server","install_method_usb_server_ha_desc":"For devices connected via USB to your Home Assistant server","install_method_manual_download":"Download firmware binary","install_method_manual_download_desc":"Compile here and download the binary, then flash it manually with your preferred tool","install_method_bootloader":"Update bootloader","install_method_bootloader_desc":"Flash a new bootloader over the network. Keep the device powered; a power loss or reset during the update can require a USB flash to recover","install":"Install","install_method_select_port":"Select a serial port","install_method_no_ports":"No serial ports found. Make sure the device is connected to the server.","install_method_loading_ports":"Scanning for serial ports…","install_method_back":"Back","serial_port_new":"New","serial_port_esp":"ESP device","serial_port_unsure_hint":"Not sure which port? Unplug the device, plug it back in, then pick the port marked New.","table_columns":"Columns","table_toggle_columns":"Toggle columns","view_cards":"Card view","view_table":"List view","view_toggle_group_label":"View","table_col_status":"Status","table_col_name":"Name","table_col_hostname":"Hostname","table_col_ip":"IP Address","table_col_mac":"MAC Address","table_col_platform":"Platform","table_col_version":"ESPHome Version","table_col_comment":"Comment","device_comment":"Comment: {comment}","table_col_area":"Area","table_col_labels":"Labels","table_col_config":"Config File","table_col_build_size":"Build Size","table_col_actions":"Actions","table_action_view_progress":"View install progress","table_action_edit":"Edit configuration","table_action_logs":"View logs","table_action_install":"Install pending changes","table_action_update":"Update to latest version","toggle_select_mode":"Select multiple","table_status_online":"Online","table_status_offline":"Offline","table_status_unknown":"Unknown","table_status_encrypted":"Encrypted","table_status_unencrypted":"Not encrypted","table_status_encryption_pending":"Pending install","table_status_encryption_mismatch":"Encryption mismatch","table_status_encrypted_tooltip":"API traffic is encrypted","table_status_unencrypted_tooltip":"API traffic is unencrypted — anyone on the LAN can access this device","table_status_unencrypted_action_tooltip":"API traffic is unencrypted — anyone on the LAN can access this device. Open the API settings to enable encryption","table_status_encryption_pending_tooltip":"Encryption is configured in the YAML but the device is still running plaintext — install the firmware to apply","table_status_encryption_mismatch_tooltip":"YAML enables encryption but the device is broadcasting plaintext — reinstall the firmware to apply","table_no_results":"No results found.","pagination_total":"{count, plural, one {# row total} other {# rows total}}","pagination_rows_per_page":"Rows per page","pagination_all":"All","pagination_page_of":"Page {current} of {total}","pagination_first_page":"First page","pagination_previous_page":"Previous page","pagination_next_page":"Next page","pagination_last_page":"Last page","drawer_close":"Close","drawer_device_online":"Device Online","drawer_device_offline":"Device Offline","drawer_device_unknown":"Status Unknown","drawer_edit":"Edit","drawer_update":"Update","drawer_logs":"Logs","drawer_device_info":"Device Information","drawer_name":"Name","drawer_hostname":"Hostname","drawer_reachability":"Reachability","drawer_source_mdns":"mDNS","drawer_source_ping":"Ping","drawer_source_mqtt":"MQTT","drawer_source_active":"active","drawer_round_trip_ms":"{n} ms","drawer_waiting_for_signal":"Waiting for first signal…","drawer_waiting_for_mdns":"Waiting for mDNS discovery…","drawer_no_native_api":"This device does not have Native API","drawer_show_mdns_txt_records":"{count, plural, one {Show # mDNS TXT record} other {Show # mDNS TXT records}}","drawer_mdns_expires_in":"Expires in {t}","drawer_mdns_expires_soon":"Expires soon","drawer_mdns_expires_explainer":"Its mDNS record lasts {lifetime}, so a device that drops off without a goodbye shows online until that elapses. The countdown runs from when it was last heard; a device that is still online refreshes the record before then.","drawer_mdns_stale_warning":"Not reachable via mDNS, some details may be stale","drawer_mdns_stale_detail":"This device is reachable over {source} but not via mDNS; the MAC address, ESPHome version, and config hash are read from mDNS, so those values and the Modified and Update available indicators may be stale, for example if the dashboard and the device are on different subnets.","drawer_ip_address":"IP Address","drawer_ip_show_more":"Show {n} more","drawer_ip_hide_extra":"Hide","drawer_mac_address":"MAC Address","drawer_ethernet_mac":"Ethernet MAC","drawer_bluetooth_mac":"Bluetooth MAC","drawer_build_size":"Build Size","drawer_platform":"Platform","drawer_version":"Version","drawer_current_version":"Current Version","drawer_deployed_version":"Deployed Version","drawer_configuration":"Configuration","drawer_config_file":"Config File","drawer_comment":"Comment","drawer_area":"Area","drawer_labels":"Labels","labels_none":"No labels","labels_edit":"Add labels","labels_dialog_title":"Edit labels","labels_dialog_empty":"No labels yet — create one below.","labels_remove":"Remove {name}","labels_create":"Create new label","labels_create_placeholder":"Label name","labels_create_submit":"Create","labels_create_cancel":"Cancel","labels_create_failed":"Could not create label","labels_save_failed":"Could not save labels","labels_save_submit":"Save","labels_bulk_button":"Labels","labels_bulk_dialog_title":"{count, plural, one {Labels for # device} other {Labels for # devices}}","labels_bulk_apply":"Apply","labels_bulk_cancel":"Cancel","labels_bulk_save_failed":"{count, plural, one {Could not save labels for # device} other {Could not save labels for # devices}}","labels_bulk_saved":"{count, plural, one {Labels updated on # device} other {Labels updated on # devices}}","labels_bulk_mixed_title":"{name}: Some selected devices already have this label","labels_bulk_group_aria":"Labels to apply","labels_bulk_no_changes":"No changes to apply","labels_bulk_dialog_empty":"No labels yet. Create one from any device\'s drawer to assign it in bulk.","labels_edit_label":"Edit label","labels_rename":"Rename label","labels_update_failed":"Could not save label changes","labels_delete":"Delete label","labels_delete_title":"Delete label?","labels_delete_confirm":"{count, plural, =0 {Are you sure you want to delete \\"{name}\\"? It isn\'t currently assigned to any device.} one {Are you sure you want to delete \\"{name}\\"? It will be removed from # device.} other {Are you sure you want to delete \\"{name}\\"? It will be removed from # devices.}}","labels_delete_submit":"Delete","labels_delete_failed":"Could not delete label","labels_color":"Color","labels_color_none":"No color","labels_suggestions":"Smart plug,Light bulb,Light switch,Relay,Displays","labels_suggestions_hint":"Suggestions","filter_labels":"Labels","filter_clear_all":"Clear filters","filter_menu_button":"Filters","filter_menu_active":"{count, plural, one {# active filter} other {# active filters}}","filter_area":"Area","filter_platform":"Platform","filter_status":"Status","filter_update_status":"Updates","filter_no_options":"No options","filter_no_matches":"No matches","drawer_loaded_integrations":"Loaded Integrations","drawer_auto_loaded_integrations":"Show {count, plural, one {# auto-loaded dependency} other {# auto-loaded dependencies}}","drawer_config_hash_title":"Config Hash","drawer_config_hash_local":"Local","drawer_config_hash_deployed":"Deployed","drawer_config_hash_value":"Hash","drawer_config_hash_in_sync":"In sync","drawer_config_hash_out_of_sync":"Out of sync — flash to update","drawer_version_in_sync":"In sync","drawer_version_out_of_sync":"Out of sync — flash to update","context_select":"Select","status_modified":"Modified","status_update_available":"Update available","status_migration_available":"Config migration available","status_migration_available_action":"Config migration available. Open the editor to update.","status_installing":"Installing…","status_compiling":"Compiling…","status_renaming":"Renaming…","status_queued_update":"Update queued; installs when the device comes back online","action_clear_queued":"Clear queued update","queued_successfully":"Update queued. It will install when the device comes back online.","queued_first_install":"Firmware compiled. This device hasn\'t been installed yet; connect it with a USB cable to do the first install, later updates install over the network.","queued_update_confirm_title":"Clear queued update?","queued_update_confirm_desc":"\\"{name}\\" will no longer install the compiled update when it comes back online.","queued_update_cleared":"Cleared queued update for \\"{name}\\"","queued_update_clear_failed":"Failed to clear queued update for \\"{name}\\": {error}","action_archive":"Archive","archive_title":"Archive device","archive_desc":"Archive \\"{name}\\"? Its build files will be removed and you\'ll need to recompile from scratch when you restore it. You can find archived devices later from the menu (⋮) at the top right of the dashboard under \\"Archived devices\\".","archive_confirm":"Archive","action_archive_success":"\\"{name}\\" archived","action_archive_success_hint":"Restore from the menu (⋮) at the top right under \\"Archived devices\\".","action_archive_failed":"Failed to archive \\"{name}\\": {error}","action_unarchive":"Unarchive","action_unarchive_success":"\\"{name}\\" restored from archive","action_unarchive_failed":"Failed to unarchive \\"{name}\\": {error}","action_delete_permanently":"Delete permanently","action_delete_archived_success":"\\"{name}\\" permanently deleted","action_delete_archived_failed":"Failed to permanently delete \\"{name}\\": {error}","delete_archived_title":"Permanently delete archived device","delete_archived_desc":"Are you sure you want to permanently delete the archived device \\"{name}\\"? This will remove its YAML and stored configuration. This cannot be undone.","archived_dialog_title":"Archived devices","archived_dialog_desc":"Devices you\'ve archived are kept here so you can restore them later. Use Unarchive to put one back in your active device list, or Delete permanently to remove it for good.","archived_dialog_loading":"Loading…","archived_dialog_empty":"You haven\'t archived any devices yet.","archived_dialog_close":"Close","labels_bulk_aria":"Labels on {count} selected","archive_selected_aria":"Archive {count} selected","delete_selected_aria":"Delete {count} selected","update_selected_aria":"Update {count} selected","compile_selected_aria":"Compile {count} selected without installing","builder_stack_heading":"Device builder","builder_stack_tagline":"create and manage your devices","logs_serial_probe_failed":"Could not check for serial ports; showing logs over the network."},"command":{"install_title":"Install — {name}","compile_title":"Compile — {name}","offline_compile_title":"Offline compile — {name}","offline_compile_success":"Offline compile successful","offline_compile_failed":"Offline compile failed","validate_title":"Validate — {name}","clean_title":"Clean — {name}","reset_title":"Reset build environment","stop":"Stop","retry":"Retry","close":"Close","download":"Download output","download_firmware":"Download firmware","done":"Done","failed":"Failed","stopped":"Stopped by user.","install_success":"Install complete!","install_failed":"Install failed.","install_no_compatible_peer_offline":"Paired build servers are offline — wait for one to reconnect, or relax the policy in Settings → Build server.","install_no_compatible_peer_version":"No paired build server runs ESPHome {local} — update one, or relax the policy in Settings → Build server.","install_no_compatible_peer_mixed":"No compatible build server (you\'re on {local}) — wait for a reconnect, or relax the policy in Settings → Build server.","compile_success":"Compilation complete!","compile_failed":"Compilation failed.","try_reset_suggestion":"It looks like you\'re having trouble with your build. Try {clean_action} first; if that doesn\'t help, try {reset_action}.","try_reset_suggestion_remote":"It looks like you\'re having trouble with your build. Try {clean_action} first; if that doesn\'t help, ask the operator of {receiver} to reset the build environment from their own dashboard.","try_reset_suggestion_remote_capable":"It looks like you\'re having trouble with your build. Try {clean_action} first; if that doesn\'t help, try {reset_remote_action}.","try_reset_remote_button":"resetting the build environment on the build server","try_clean_button":"cleaning the build files for this device","try_reset_button":"resetting the build environment","validation_failed_suggestion":"Looks like a configuration error. Try {editor_action} to fix the YAML.","try_open_editor_button":"opening this device in the editor","offload_hint":"Compiling is taking a while. You can send builds to a faster machine on your network to speed this up. {action}.","offload_hint_action":"Set up a build server","run_elapsed_title":"Total build time. Click for the compile-only breakdown","timer_detail_title":"Build time breakdown","compile_time_label":"Compile time","total_run_time_label":"Total run time","timer_offload_hint":"This compile took a while. Send builds to a faster machine on your network to speed it up.","validate_success":"Configuration is valid!","validate_failed":"Validation failed.","connection_interrupted":"Connection to the dashboard was lost. Run again to retry.","show_secrets":"Show secrets","hide_secrets":"Hide secrets","show_secrets_tooltip":"Reveal resolved !secret values in the validate output","hide_secrets_tooltip":"Redact resolved !secret values back to <removed>","show_logs_after_install":"Logs after","show_logs_after_install_tooltip":"Toggle whether to open device logs automatically after a successful install (like esphome run)","show_logs":"Logs","clean_success":"Build files cleaned.","clean_failed":"Clean failed.","reset_success":"Build environment reset. The next compile will redownload the toolchain.","reset_failed":"Failed to reset the build environment.","rename_title":"Rename — {name}","rename_success":"Rename complete!","rename_failed":"Rename failed.","queued_title":"Waiting in queue","queued_message":"Another firmware task is running. This task will start when it finishes.","queued_waiting_for":"Waiting for {name} to finish.","queued_waiting_for_build_server":"Waiting for another job running on the build server.","queued_view_all":"View firmware tasks","remote_builder_sub_line":"Building on {receiver}","force_local_action":"Build locally instead","force_local_switching":"Switching…","force_local_failed":"Couldn\'t switch to a local build"},"firmware":{"install_title":"Install — {name}","download_title":"Download — {name}","compile_continues_background":"The build keeps running in the background. Find it under Firmware tasks.","download_type_factory":"Factory image","download_type_factory_desc":"Full image for ESPHome Web and other flashing tools.","download_type_ota":"OTA update","download_type_ota_desc":"For updating a device over the network.","download_type_elf":"ELF (debug symbols)","download_type_elf_desc":"For decoding crash backtraces with the ESP stack trace decoder.","download_type_bin":"Firmware image","download_type_bin_desc":"Single-image firmware for flashing.","download_type_uf2":"UF2 package","download_type_uf2_desc":"Drag-and-drop flashing over USB mass storage.","status_connecting":"Connecting to device…","status_verifying":"Verifying chip…","status_compiling":"Compiling firmware…","status_queued":"Waiting for server…","status_waiting_build":"Waiting for the current build to finish…","status_installing":"Compiling and installing firmware…","status_downloading":"Downloading firmware…","status_flashing":"Flashing firmware to device…","flashing_keep_visible":"Keep this window visible — switching to another tab or window can interrupt the flash.","status_resetting":"Restarting device…","status_done":"Installation complete!","status_failed":"Installation failed","install_failed":"Installation failed.","compile_failed":"Compilation failed.","download_failed":"Failed to download firmware.","no_flashable_binary":"No flashable binary available for this device. web.esphome.io supports ESP32 and ESP8266 only.","no_binaries":"No binaries were produced for this device. Make sure the build completed successfully.","no_binaries_remote":"The build on {receiver} reported success, but no firmware binaries came back to this dashboard.","no_binaries_remote_detail":"The build server may have failed to package or transfer the firmware. Check the build server logs, then try again.","no_binaries_remote_server":"the build server","flash_failed":"Failed to flash firmware to device.","chip_mismatch":"Chip mismatch: detected {detected} but device expects {expected}.","change_board_action":"Change board","validate_success":"Configuration is valid!","validate_failed":"Validation failed.","show_details":"Show details","hide_details":"Hide details","usb_built_title":"Firmware built","usb_built_body":"This page can\'t flash over USB because it isn\'t on a secure (HTTPS) connection or localhost. The button below opens {host} in a new tab to connect to your device and install over USB. The firmware is handed directly to that tab inside your browser and is never uploaded to any server; the flash is 100% local.","usb_open_button":"Open USB flasher","usb_flashing":"Installing over USB…","usb_flashing_detail":"Flashing in the flasher tab; keep it open until it finishes.","usb_done":"Installed over USB","usb_failed":"USB install failed","usb_popup_blocked":"Allow pop-ups for this site to open the USB flasher","usb_window_closed":"Lost contact with the flasher tab before flashing finished","usb_unsupported_browser":"This browser doesn\'t support Web Serial. Open the dashboard in Chrome, Edge, or Firefox 151+ to install over USB.","binary_download_done_title":"Firmware binary downloaded","binary_download_done_body":"Saved as {filename}. Flash it to your device with your preferred tool.","elf_download_done_title":"Debug symbols downloaded","elf_download_done_body":"Saved as {filename}. Use it with the ESP stack trace decoder to decode crash backtraces.","choose_binary_title":"Choose what to download","choose_binary_desc":"Each option explains what it\'s for.","choose_binary_again":"Download another format"},"serial":{"title":"USB Device","detecting":"Detecting chip…","create_device":"Create device","no_firmware":"No firmware binary found — compile the device first.","downloading":"Downloading {file}…","flashing":"Flashing firmware…","resetting":"Resetting device…","connect_failed":"Could not connect to the device. Unplug and replug the cable, hold the BOOT button while plugging in, or try another USB port or browser.","unsupported_chip":"This looks like an {chip}, which browser flashing doesn\'t support yet. Download the firmware and flash it from the command line with esptool instead."},"wizard":{"title_create":"Create configuration","title_board":"Select your board","title_setup":"Set up your ESPHome board","search_boards_placeholder":"Search boards…","loading_boards":"Loading boards…","no_boards_found":"No boards found. Try a different search.","boards_load_error":"Could not load boards. Check your connection and try again.","boards_load_more_error":"Couldn\'t load more boards.","dont_know_board":"I don\'t know what board I have","connect_your_board":"Connect your board","connect_your_board_select_port_localhost":"Connect the board to a USB port of your computer","connect_your_board_select_port_ha":"Connect the board to your Home Assistant server","connect_your_board_select_port_remote":"Connect the board to the computer running the device builder","connect_your_board_loading_ports":"Scanning for serial ports…","connect_your_board_no_ports":"No serial ports found. Plug in the board and try again.","connect_your_board_back":"Back","connect_your_board_detecting":"Detecting the connected board…","connect_your_board_detect_failed":"Could not detect the connected board. Check the cable and try another port.","detected_chip_family":"{family} detected — pick your specific board","show_all_boards":"Show all boards","how_create":"How would you like to create your project?","create_new":"Create new project","create_new_desc":"A guided process to get you started with a starter kit or any other ESP boards","advanced_options":"Advanced set up options","import_file":"Import from file","import_file_desc":"Use an existing ESPHome configuration (.yaml) or a bundle.","empty_config":"Empty Configuration","empty_config_desc":"For manually writing or pasting a configuration.","drop_yaml":"You can also drag and drop a .yaml file or a bundle here","title_empty_config":"Create empty configuration","device_name":"Device name","device_name_placeholder":"e.g. Smart Plug","device_name_placeholder_board":"e.g. {board}","cancel":"Cancel","next":"Next","back":"Back","finish_setup":"Finish setup","section_name_device":"Name your device","section_name_device_desc":"Shown in the dashboard and in Home Assistant. Choose a recognisable, descriptive and memorable name; the network hostname is derived from it below. You can edit both after you finish this project.","full_setup":"Set up with all recommended components","full_setup_desc":"Adds this device\'s onboard components (relays, sensors, and more) so it\'s ready to use. You can change them afterwards in the editor.","package_config_desc":"This device uses a ready-made configuration and automatically stays up to date with it. You can add more components afterwards in the editor.","full_setup_partial":"{count, plural, one {Couldn\'t add recommended component {names}} other {Couldn\'t add recommended components {names}{extra, plural, =0 {} other { and # more}}}}; finish in the editor.","wifi_configuration":"Wi-Fi Configuration","wifi_required_desc":"This board connects over Wi-Fi. Enter your network once and Device Builder will securely reuse it for future Wi-Fi devices.","wifi_saved_title":"Wi-Fi credentials already saved","wifi_saved_desc":"This board uses the shared Wi-Fi credentials already stored by Device Builder.","wifi_saved_reuse":"The saved values stay hidden and will be reused automatically.","wifi_use_saved":"Use saved credentials","other_boards":"Other boards","starter_kit":"Featured","expand_board":"Expand details","more_info":"More info","add_board":"Select","import_read_error":"Failed to read the file.","import_general_error":"Failed to import the config file. Please try again.","import_unsupported_type":"Unsupported file type. Import a YAML config (.yaml, .yml) or an ESPHome bundle (.tar.gz, .tgz, or .esphomebundle).","import_invalid_filename":"The filename \\"{name}\\" can\'t be used as-is — it contains only characters that aren\'t allowed in a configuration filename. Rename the file to something with letters, digits, hyphens, or underscores and try again.","importing_device":"Creating device from imported file…","import_bundle_conflicts_title":"Some files already exist","import_bundle_conflicts_desc":"These files from the bundle already exist in your configuration. Check the ones you want to overwrite; unchecked files are kept as they are.","import_bundle_overwrite":"Overwrite","import_bundle_keep":"Keep existing","import_bundle_button":"Import","import_bundle_secrets_note":"Secrets from the bundle are merged into your secrets.yaml; existing values are kept.","import_bundle_main_config":"(device config, replacing keeps your labels)","overwrite_device_title":"Device already exists","overwrite_device_message":"A device named \\"{name}\\" already exists. Overwriting replaces its configuration but keeps your labels, comment, and board.","overwrite_device_button":"Overwrite","import_partial_title":"Imported, some files kept","import_partial_desc":"The bundle was imported, but {count, plural, one {# existing file you chose to keep was not replaced} other {# existing files you chose to keep were not replaced}}. The device may still use its previous configuration for those.","import_partial_open":"Open device","tag":{"esp32":"ESP32","esp32s2":"ESP32-S2","esp32s3":"ESP32-S3","esp32c2":"ESP32-C2","esp32c3":"ESP32-C3","esp32c5":"ESP32-C5","esp32c6":"ESP32-C6","esp32c61":"ESP32-C61","esp32h2":"ESP32-H2","esp32p4":"ESP32-P4","esp8266":"ESP8266","rp2":"RP2","rp2040":"RP2040","rp2350":"RP2350","bk72xx":"BK72xx","rtl87xx":"RTL87xx","bk7231":"BK7231","bk7238":"BK7238","bk7251":"BK7251","rtl8710b":"RTL8710B","rtl8720c":"RTL8720C","ln882h":"LN882H","compact":"Compact","dev-kit":"Dev kit","starter-kit":"Starter kit","module":"Module","breakout":"Breakout","display":"Display","camera":"Camera","rgb-led":"RGB LED","relay":"Relay","motor-driver":"Motor driver","sd-card":"SD card","microphone":"Microphone","speaker":"Speaker","imu":"IMU","wifi":"WiFi","lipo":"LiPo","poe":"PoE","usb-c":"USB-C","external-antenna":"External antenna","solar":"Solar","battery":"Battery","sonoff":"Sonoff","tuya":"Tuya","shelly":"Shelly"},"create_general_error":"Failed to create the device. Please try again.","create_with_board_error":"Failed to create device for {board}: {message}","open_secrets":"Open secrets","board_load_failed":"Couldn\'t load the board details. Please try again."},"device":{"navigator_title":"Device navigator","navigator_search_placeholder":"Filter by name or ID…","navigator_search_toggle":"Search","navigator_search_clear":"Clear filter","navigator_search_count":"{count} of {total}","navigator_search_none":"No matches","navigator_error_count":"{count, plural, one {# validation error} other {# validation errors}}","navigator_desc":"Navigate, add and remove options to define your ESP device and its functionality.","section_core":"Core configuration","section_components":"Components","section_automations":"Automations","section_core_desc":"Your base functionality to allow your ESP board to run/function.","section_components_desc":"You can add components after finishing your core configuration e.g. sensors.","section_automations_desc":"You can set up automations once the core config and at least one component is added.","editor_title_ready":"Editing {name}","editor_invalid_more":"…and {count} more","layout_components_only":"Show components only","layout_split":"Split view","layout_yaml_only":"Show YAML editor only","resize_panes":"Resize panes","resize_panes_value":"{percent}% components","yaml_reveal_sensitive":"Reveal sensitive values","yaml_mask_sensitive":"Hide sensitive values","yaml_editor":"YAML editor","add_config":"Add configuration","add_component":"Add component","add_automation":"Add automation","delete_section":"Delete section","confirm_delete_section":"Are you sure you want to delete the \'{name}\' section?","section_saved":"Section saved","section_save_error":"Failed to save section","section_deleted":"\'{name}\' section deleted","delete_superseded":"Section deleted on disk","delete_superseded_detail":"Your unsaved buffer changed during the delete and may still include it. Review before saving.","draft_superseded":"Change not applied","draft_superseded_detail":"It finished after the buffer changed and no longer applies. Redo it if needed.","section_delete_error":"Failed to delete section","leave_last_change_unsaved":"Your last change failed to save. Fix or discard it before leaving.","yaml_saved":"YAML saved","yaml_save_error":"Failed to save YAML","yaml_invalid_title":"Configuration has errors","yaml_invalid_message":"{count, plural, one {ESPHome reported # error in this configuration. Save anyway, jump to it to fix it, or cancel.} other {ESPHome reported # errors in this configuration. Save anyway, jump to the first one to fix it, or cancel.}}","yaml_invalid_go_to_error":"Go to error","yaml_invalid_in_included_file":"The first error is in {file} (line {line}), an included file that can\'t be opened here; open that file to fix it.","yaml_invalid_save_anyway":"Save anyway","more_info":"More info","change_board_link":"Change board","change_board_title":"Change board","change_board_desc":"Pick the board that matches your hardware. These are all built on the same chip as {name}, so they\'re interchangeable.","change_board_generic_tag":"Generic","change_board_success":"Board changed","change_board_error":"Failed to change board","change_board_unsaved":"Save or discard your changes before changing the board","board_reselect_title":"Select matching board","board_reselect_desc":"Your configuration targets \\"{board}\\", which does not match the device\'s selected board. Pick the board that matches your configuration.","board_reselect_none":"No boards in the catalog match \\"{board}\\".","board_reselect_no_platform":"No board or variant found in the configuration.","board_check_failed":"Could not verify the board selection, continuing anyway.","install_start_failed":"Failed to start the install.","welcome_banner_title":"Congratulations, you just configured your {name}!","welcome_banner_body":"A minimal default configuration has been applied. From here you can refine the core settings, add components like sensors or lights, and set up automations. Use the Device navigator on the left or the panels below to get started.","welcome_banner_dismiss":"Dismiss welcome message","welcome_banner_first_install":"The first install onto the board happens over a USB cable. After that, updates install over the network.","welcome_banner_install_button":"Install now","step_core":"1. Core configuration","step_core_desc":"The core configuration components are the base building blocks that let your board run ESPHome. They cover settings such as the device name, Wi-Fi or Ethernet network, OTA updates, the API connection to Home Assistant, and optional add-ons like MQTT. Use the Device navigator on the left to view, edit or add core components.","step_components":"2. Components","step_components_desc":"Components are the building blocks that bring your device to life — sensors, switches, lights, displays, buses, and more. Each one represents a piece of hardware on your board or a virtual entity exposed to Home Assistant. Use the Device navigator on the left to view, edit or add components.","step_automations":"3. Automations","step_automations_desc":"Automations let your device react to events on its own — turning on a light when a button is pressed, sending a notification when a sensor changes, scheduling tasks, and so on. They run locally on the device. Use the Device navigator on the left to view, edit or add automations.","show_core_configuration":"Show core configuration","show_components":"Show components","show_automations":"Show automations","add_core_configuration":"Add core configuration","add_config_dialog_title":"Add configuration to {name}","add_component_dialog_title":"Choose components for your {name} board","add_automation_dialog_title":"New automation for {name}","component_categories":"Categories","component_category_all":"All","component_category_featured":"Recommended","recommended_chip_tooltip":"Pre-configured for the {board}","search_components_placeholder":"Search components…","no_components_found":"No components found","components_load_error":"Could not load components. Check your connection and try again.","components_load_more_error":"Couldn\'t load more components.","components_count":"{visible} of {total} components","add_component_action":"Add","component_added":"Added {name}","featured_bundle_badge":"Bundle","field_locked_by_board":"Set by the board","bundle_added":"Added {name}","bundle_already_present":"{name} is already set up","bundle_step_progress":"Step {current} of {total} — Adding {name}","adding_prerequisites_for":"prerequisites for {name}","prereq_unresolved":"Can\'t add {name}: required prerequisites missing from the board catalog: {ids}","docs":"Docs","see_also":"See also:","advanced_options":"Advanced options","show_advanced":"Show advanced settings","show_advanced_count":"Show advanced settings ({count})","enable_entity":"Enable {name}","multi_value_empty":"No items yet — click + to add one.","multi_value_add":"Add","multi_value_remove":"Remove","multi_value_yaml_only":"This list contains YAML the visual editor can\'t model — edit it directly in the YAML pane on the right.","value_yaml_only":"This value can\'t be modeled by the visual editor — edit it directly in the YAML pane on the right.","value_set_in_yaml":"Set to {value} in YAML; edit it in the YAML pane on the right.","exclusive_group_label":"Type","exclusive_group_placeholder":"Select one…","exclusive_group_conflict":"Only one can be set. Choosing one removes the others.","registry_list_loading":"Loading catalog…","registry_list_select":"Select an option…","registry_list_empty_catalog":"No options available for this registry.","registry_list_no_applicable_options":"No options apply to this section.","registry_list_row_label":"Row {index}","registry_list_error":"Couldn\'t load the catalog.","registry_list_retry":"Retry","registry_list_unsupported":"This field references a registry the visual editor doesn\'t recognise — edit it directly in the YAML pane.","map_empty":"No entries yet — click + to add one.","map_add":"Add entry","map_remove":"Remove entry","map_value_edit_in_yaml":"Complex value — edit in YAML","password_reveal":"Show password","password_hide":"Hide password","value_from_secret":"Using stored secret:","generate_encryption_key":"Generate a new key","default_option_tag":"default","constraint_exactly_one":"Set exactly one of: {keys}","constraint_exactly_one_radio":"Set exactly one of:","constraint_at_least_one":"Set at least one of: {keys}","constraint_at_most_one":"Set at most one of: {keys}","constraint_none_or_all":"Set all of these together, or leave them all blank: {keys}","constraint_all_or_none":"Set these together, or leave them all blank: {keys}","substitution_resolves_to":"Resolved substitution value","substitution_unresolved":"Not defined in this file","substitution_unresolved_hint":"Substitutions from packages, included files, or the command line aren\'t previewed here; they\'re still resolved when the device is built.","secret_picker_label":"Use secret","secret_picker_aria":"Pick a stored secret for {field}","secret_picker_create":"Create new secret…","secret_picker_empty":"No secrets yet","secret_picker_related":"Related","secret_picker_shared":"Shared secrets","secret_picker_manual":"Enter a value manually","secret_picker_manual_error":"Couldn\'t read the stored secret","secret_picker_migrate":"Make secret \\"{key}\\"","secret_picker_migrated":"Saved {key} to secrets.yaml","secret_picker_linked":"Linked to existing secret \\"{key}\\"","secret_picker_migrate_error":"Couldn\'t save the secret","secret_picker_value":"Value","secret_picker_reveal_error":"Couldn\'t read the secret value","secret_picker_aria_missing":"Stored secret for {field} is missing; pick another or create it","secret_picker_missing":"Secret \\"{key}\\" isn\'t in secrets.yaml","secret_picker_value_label":"Value for secret {key}","secret_picker_missing_placeholder":"Enter a value to create it","secret_picker_missing_create":"Create","secret_picker_missing_created":"Created {key} in secrets.yaml","secret_picker_missing_error":"Couldn\'t create the secret","secret_picker_save":"Save","secret_picker_saved":"Updated {key} in secrets.yaml","secret_picker_retry":"Retry","secret_picker_shared_confirm_title":"Change shared secret?","secret_picker_shared_confirm_message":"\\"{key}\\" is shared; other devices that use it will get the new value too.","secret_picker_save_error":"Couldn\'t save the secret","secret_reveal_copy":"Copy value","secret_reveal_copied":"Copied to clipboard","pin_unavailable":"Unavailable","pin_occupied_by":"Reserved for {name}","pin_used_by":"Already used by {name}","pin_input_only":"Input only — can\'t be used as output","pin_on_expander":"{provider} {hub} · channel {channel}","pin_group_supports":"Supports {features}","pin_group_other":"Other pins","pin_group_reserved":"Reserved","pin_advanced":"Advanced","pin_wiring_summary":"Wiring: {value}","pin_wiring_summary_with_tech":"Wiring: {value} ({tech})","pin_wiring_group_label":"Wiring","pin_wiring_guard":"Preconfigured for this board","pin_wiring_guard_hint":"These settings match how the board is wired. If you really need something different, edit the YAML.","pin_wiring_guard_tooltip":"Preconfigured for this board. Edit the YAML to change it.","pin_wiring_default":"Default","pin_wiring_custom":"Custom","pin_wiring_custom_description":"Set direction, pull resistor, and inversion yourself.","pin_wiring_recommended":"Most common","pin_wiring_ground_switch":"Button or switch to ground","pin_wiring_ground_switch_description":"Pressing connects the pin to a ground (GND) wire. Just two wires and no extra parts; the chip handles the rest.","pin_wiring_vcc_switch":"Button or switch to 3.3V","pin_wiring_vcc_switch_description":"Pressing connects the pin to a 3.3V wire. Just two wires and no extra parts; the chip handles the rest.","pin_wiring_driven_signal":"Sensor module with a signal wire","pin_wiring_driven_signal_description":"A PIR, radar, or other sensor module drives the pin itself.","pin_wiring_output_standard":"Standard output","pin_wiring_output_standard_description":"ON puts 3.3V on the pin. Fits most LED and relay modules.","pin_wiring_output_active_low":"Active low output","pin_wiring_output_active_low_description":"ON connects the pin to ground (GND). Many relay boards switch this way. Try this if yours works backwards.","pin_wiring_output_open_drain":"Open drain output","pin_wiring_output_open_drain_description":"The pin can only connect to ground; the circuit needs its own resistor up to 3.3V.","pin_wiring_unavailable_input_only":"Not possible on {pin}","pin_wiring_input_only_banner":"{pin} can\'t hold a steady level on its own, so a bare button or switch won\'t work here. Pick a different pin, or add an external resistor and use Custom.","pin_wiring_input_only_banner_output":"{pin} can only read; it has no output driver. Pick an output-capable pin.","pin_wiring_direction":"Direction","pin_wiring_direction_description":"Input listens to the pin, for buttons and sensors. Output drives the pin, for relays and LEDs. Both is rare; it\'s for lines that take turns doing each.","pin_wiring_direction_input":"Input","pin_wiring_direction_output":"Output","pin_wiring_direction_both":"Input and output","pin_wiring_pull":"Pull resistor","pin_wiring_pull_description":"With nothing connected, a pin reads random noise. A pull resistor gives it a steady resting level until something drives it: pull-up rests at 3.3V, pull-down rests at ground. Pick the opposite of what your wiring connects the pin to, so a switch to ground needs a pull-up and a switch to 3.3V needs a pull-down. A module that always drives its signal wire needs none.","pin_wiring_pull_none":"None","pin_wiring_pull_up":"Pull-up (rests at 3.3V)","pin_wiring_pull_down":"Pull-down (rests at ground)","pin_wiring_open_drain":"Open drain","pin_wiring_open_drain_description":"The pin can only connect to ground, never puts out 3.3V itself.","install_choose_method":"Choose install method","save":"Save","save_yaml":"Save YAML","validate":"Validate","validate_disabled_pending":"Save changes first to validate","loading_config_catalog":"Loading configuration catalog…","loading_automation_catalog":"Loading automation catalog…","loading_components":"Loading components…","automation_target":"Target","automation_target_name":"Target component name","automation_target_placeholder":"e.g. my_sensor","automation_target_device":"The device itself","automation_target_component":"A configured component","automation_target_interval":"On an interval","automation_target_script":"A reusable script","automation_target_api_action":"An action exposed to Home Assistant","automation_target_component_label":"Which component?","automation_target_script_label":"Which script?","automation_target_api_action_label":"Which API action?","automation_target_light_label":"Which light?","automation_target_no_components":"No components are configured yet — add one first, then come back to wire up an automation.","automation_target_no_scripts":"No script: blocks declared yet. Add one in the YAML or pick a different target.","automation_target_no_lights":"No light components configured — add one first to wire effects.","automation_target_script_new_id_label":"Name for the new script","automation_target_script_id_placeholder":"e.g. morning_alarm","automation_target_api_action_new_id_label":"Name for the new API action","automation_target_api_action_id_placeholder":"e.g. start_laundry","add_script":"Add script","add_script_dialog_title":"New script for {name}","add_api_action":"Add API action","add_api_action_dialog_title":"New API action for {name}","api_actions_list_title":"API actions","api_actions_list_edit":"Edit","api_actions_list_delete":"Delete","api_actions_list_empty":"No API actions defined yet.","automations_list_title":"Automations","automations_list_title_device":"Device-level automations","automations_list_edit":"Edit","automations_list_delete":"Delete","automations_list_empty":"No automations defined yet.","action_field_label":"{name} action","action_fields_list_title":"Component actions","action_fields_list_edit":"Edit","action_fields_list_delete":"Delete","api_action_header_title_static":"API action","api_action_header_description":"A named action your Home Assistant can invoke. Declare typed `variables:` to accept arguments from the caller, then list the actions that run when it\'s called.","api_action_id_label":"Action name","api_action_id_description":"The name Home Assistant uses to call this action. Renaming it requires updating any callers that reference the old name.","api_action_variables":"Variables","api_action_variables_description":"Typed values the caller can pass when invoking this action. Reference them inside actions via `id(name)`.","api_action_add_variable":"Add variable","api_action_variable_name_placeholder":"name","api_action_actions_description":"The ordered list of actions to run when this API action is invoked.","script_header_title":"Script: {id}","script_header_title_static":"Script","script_header_description":"A reusable list of actions. Once declared, call it from any automation with `script.execute`.","automation_target_interval_n":"Interval #{index}","script_id_label":"Script ID","script_id_description":"The unique id used to invoke this script via `script.execute`. Renaming requires updating any callers that reference the old id.","script_mode_description":"How concurrent invocations behave. `single` ignores new calls while the script is running; `restart` cancels and restarts; `queued` lines them up; `parallel` runs them concurrently.","script_parameters_description":"Typed parameters callers can pass to the script. Reference them inside actions via `id(name)`.","script_add_parameter":"Add parameter","script_parameter_name_placeholder":"name","script_actions_description":"The ordered list of actions this script runs when called.","automation_header_title":"{label}","automation_header_title_static":"Automation","automation_header_description":"Runs when the trigger fires. Define the list of actions below.","automation_actions_description":"The ordered list of actions to run when the trigger fires.","automation_actions_empty":"No actions defined yet.","delete_automation":"Delete automation","delete_script":"Delete script","delete_api_action":"Delete action","confirm_delete_automation":"Are you sure you want to delete the \'{name}\' automation?","confirm_delete_script":"Are you sure you want to delete the \'{name}\' script?","confirm_delete_api_action":"Are you sure you want to delete the \'{name}\' action?","automation_trigger_options":"Trigger options","automation_wizard_pick_target":"What should this automation react to?","automation_wizard_pick_trigger":"Which trigger?","automation_wizard_pick_component":"Which configured component?","add_automation_continue":"Continue","automation_pick_action":"Add action","automation_pick_condition":"Add condition","automation_pick_search":"Search…","automation_pick_tab_by_target":"By target","automation_pick_tab_by_type":"By type","automation_pick_tab_building_blocks":"Building blocks","automation_pick_no_targets":"No configured components to target — add a component first.","automation_pick_no_results":"Nothing matched your search.","automation_trigger_on_component":"Trigger fired by {component} ({domain})","automation_trigger_none_available":"No triggers available for this target.","automation_container_no_entities":"This component has no entities enabled yet. Enable one of its entities first, then add the automation.","automation_trigger":"Trigger","automation_trigger_label":"When","automation_action_field_edit":"Edit actions","automation_action":"Actions","automation_action_label":"Then do","automation_condition":"Condition","automation_only_when":"Only run when","automation_else":"Otherwise","automation_literal":"Value","automation_lambda":"λ Lambda","automation_script_parameters":"Parameters","automation_script_mode":"Run mode","automation_interval_every":"Every","automation_interval_every_n":"Every {time}","automation_interval_label":"Interval","automation_action_delay_value":"Value","automation_action_delay_unit":"Unit","automation_action_collapse":"Collapse","automation_action_expand":"Expand","automation_action_pick":"Change action","automation_action_unknown":"This action isn\'t in the catalog (it comes from an external component, or the id is a typo), so its settings can\'t be edited here. Edit them in the YAML view, or use the change-action button to replace it. It\'s kept as-is when you save the rest of the automation.","automation_action_delay_unit_us":"Microseconds","automation_action_delay_unit_ms":"Milliseconds","automation_action_delay_unit_s":"Seconds","automation_action_delay_unit_min":"Minutes","automation_action_delay_unit_h":"Hours","automation_action_delay_unit_d":"Days","automation_light_effect":"Effect","automation_parse_error":"Could not parse this automation. Edit the YAML directly to recover.","automation_partial_hydration":"{count, plural, one {# automation form could not be loaded. It may render empty.} other {# automation forms could not be loaded. Some forms may render empty.}}","automation_save_error":"Failed to save automation","automation_yaml_only_fallback":"This automation uses a value the editor doesn\'t recognise yet. Edit the YAML directly.","add_action":"Add action","add_condition":"Add condition","automation_move_up":"Move up","automation_move_down":"Move down","automation_remove":"Remove","adding":"Adding…","saving":"Saving…","external_component_title":"External component","platform_section_title":"Platform section","platform_domain_section":"Each entry under \\"{key}\\" is a platform component (like \\"- platform: gpio\\"). Add one to configure it.","load_config_error":"Failed to load section config","yaml_only_section":"This section doesn\'t have a structured editor — edit it directly in the YAML pane on the right.","security_generate":"Generate","security_applied":"Install the device to apply the new credentials.","api_encryption_notice":"API is enabled without encryption. Anyone on your network can read or control this device.","api_encryption_enable":"Enable encryption","api_encryption_dialog_title":"Enable API encryption","api_encryption_dialog_body":"Encryption will be enabled using a unique key stored in secrets.yaml as {key} and referenced from this config.","api_encryption_error":"Couldn\'t generate the encryption key","ota_password_notice":"OTA updates are enabled without a password. Anyone on your network can upload firmware to this device.","ota_password_enable":"Add password","ota_password_dialog_title":"Add an OTA password","ota_password_dialog_body":"A strong password will be stored in secrets.yaml as {key} and referenced from this config.","ota_password_error":"Couldn\'t generate the OTA password","ota_encryption_notice_add":"This device already offers encrypted OTA updates with its API key. Add encryption: to the OTA settings so plaintext uploads are refused.","ota_encryption_notice_replace_password":"This device already offers encrypted OTA updates with its API key. The OTA password only serves uploaders without encryption support and costs about 3.5 KB of flash and 60 bytes of RAM on an ESP8266; replace it with encryption:.","ota_encryption_notice_drop_own_key":"The OTA settings carry their own encryption key next to the API encryption key. The device encrypts OTA updates with the API key, so the extra key only has to be kept identical or the config stops validating; remove it and the OTA settings inherit the API key.","ota_encryption_enable":"Require encrypted OTA","ota_encryption_use_api_key":"Use the API key","ota_encryption_key_dropped":"The OTA settings now inherit the API encryption key in the draft. Save and install to apply.","ota_encryption_applied":"OTA encryption added to the draft. Save and install to require it.","ota_encryption_dismiss":"Dismiss","web_auth_notice":"The web server is enabled without authentication. Anyone on your network can view and control this device.","web_auth_enable":"Enable authentication","web_auth_dialog_title":"Enable web server authentication","web_auth_dialog_body":"A random username (inline) and password will be generated; the password is stored in secrets.yaml as {key} and referenced from this config.","web_auth_error":"Couldn\'t generate the web server credentials","config_migration_lead":"Config migration available:","config_migration_notice_generic":"Config migration available. This config uses options ESPHome has renamed or replaced; it can be brought up to date automatically.","config_migration_change_key":"The {old} block changed to {new}.","config_migration_change_field":"{old} changed to {new} in {scope}.","config_migration_change_fold":"{old} and its flags folded into {new} in {scope}.","config_migration_change_convert":"{old} changed to a {new} block in {scope}.","config_migration_change_action":"The {old} action changed to {new}.","config_migration_change_since":"Changed in ESPHome {version}.","config_migration_change_since_removed_in":"Changed in ESPHome {version}, the old spelling is removed in {removed_in}.","config_migration_change_removed_in":"The old spelling is removed in ESPHome {removed_in}.","config_migration_change_required":"The installed ESPHome no longer accepts the old spelling; update the config before it will compile.","config_migration_migrate":"Update config","config_migration_preview":"Preview","config_migration_preview_title":"Config update preview for {configuration}","config_migration_applied":"Config updated in the draft. Save to apply.","config_migration_failed":"Could not update the config.","config_migration_none":"Nothing to update.","config_migration_dismiss":"Dismiss","mac_suffix_notice":"This config sets name_add_mac_suffix, so the device announces itself under a different name and its online status can\'t be tracked. The option is meant for provisioning; adopt the device, or turn it off and keep this config\'s name unique.","mac_suffix_learn_more":"Learn more","mac_suffix_disable":"Turn off","mac_suffix_applied":"name_add_mac_suffix turned off in the draft. Save and install to apply.","mac_suffix_dismiss":"Dismiss","entry_render_error_title":"Could not render this field","show_yaml_editor":"Show YAML editor","save_error":"Failed to save","section_saved_toast":"\\"{title}\\" saved","add_component_error":"Failed to add component","add_component_load_failed":"Couldn\'t load this component. Try reloading the page.","add_component_hidden_validation_error":"Can\'t add this component: a hidden field has invalid input. Please report the fields listed below — they should be visible.","missing_dependencies_title":"{name} requires other components","missing_dependencies_body":"Configure these first, then come back to add this one:","missing_dependencies_add":"Add {domain}","bus_dependency_in_use_title":"No available bus for {name}","bus_dependency_in_use_body":"No existing bus can host this component; each is already in use by another component or configured incompatibly. Add a new one for it:","id_reference_empty":"No {domain} configured yet","id_reference_auto_configured":"Auto (uses the configured {domain})","id_reference_add":"Add {domain}","id_reference_auto":"Auto","id_reference_auto_detail":"Let ESPHome pick the {domain}","id_reference_unresolved":"{domain} not defined in this file","id_reference_unknown_error":"ID \\"{id}\\" is not defined in this configuration.","return_to_after_dep_prefix":"Adding a dependency. We\'ll bring you back to","return_to_after_dep_suffix":"after.","add_automation_error":"Failed to add automation","add_config_error":"Failed to add config section","editor_layout_label":"Editor layout","back":"Back","hide_navigator":"Hide navigator","show_navigator":"Show navigator","actions_menu":"Device actions","show_logs":"Logs","yaml_preview":"YAML preview","yaml_preview_toggle":"Show YAML","diff_view_diff":"Show diff against saved","diff_view_editor":"Back to editor","diff_no_changes":"No unsaved changes","unsaved_title":"Unsaved changes","unsaved_message":"You have unsaved changes in this device. If you leave without saving, they will be lost.","leave_anyway":"Leave anyway","discard_changes":"Discard","save_and_leave":"Save","loading_config":"Loading configuration…","load_failed":"The configuration could not be loaded. Check your connection and retry.","load_not_found":"This configuration no longer exists. It may have been deleted or renamed.","back_to_dashboard":"Back to devices"},"naming":{"hostname_disclosure":"Hostname: {hostname}","hostname_label":"Hostname","hostname_helper":"Used on the network (mDNS) and as the YAML filename.","hostname_required":"A hostname is required: lowercase letters a-z, digits, and hyphens. Type one here.","hostname_edge_hyphen":"A hostname can\'t start or end with a hyphen.","hostname_taken":"A device named {hostname} already exists.","hostname_help_label":"About the hostname","hostname_help":"The hostname identifies this device on your network (mDNS) and names its YAML file. It is derived from the name; expand to override it. Tip: set the device\'s room with an area in Home Assistant rather than putting it in the name."},"validation":{"required":"This field is required","min":"Must be at least {min}","max":"Must be at most {max}","min_length":"Must be at least {min} characters","max_length":"Must be at most {max} characters","not_a_number":"Must be a number","not_an_integer":"Must be a whole number","not_a_boolean":"Must be true or false","invalid_option":"Not a valid option","invalid_encryption_key":"Must be a 32-byte base64 key","backend":"{message}","invalid_device_name":"Only lowercase letters, digits, hyphens and underscores","device_name_underscore":"Underscores work but aren\'t valid mDNS hostnames — the device may not resolve on RFC-strict networks","device_name_edge_hyphen":"Names starting or ending with a hyphen aren\'t valid mDNS hostnames — the device may not resolve on RFC-strict networks","did_you_mean":"Did you mean \\"{suggestion}\\"?"},"onboarding":{"menu_item_setup_wifi":"Set up Wi-Fi","menu_item_change_wifi":"Change Wi-Fi credentials","wifi":{"title":"Set up Wi-Fi credentials","title_change":"Change Wi-Fi credentials","intro":"Your devices use these to join your network. They\'re stored once in secrets.yaml and shared across every config you create.","ssid_label":"Wi-Fi network name (SSID)","ssid_placeholder":"MyHomeWifi","password_label":"Wi-Fi password","password_placeholder":"Leave blank for an open network","password_too_short":"Wi-Fi password must be at least 8 characters","save":"Save credentials","saving":"Saving…","save_success":"Wi-Fi credentials saved","save_failed":"Failed to save Wi-Fi credentials","load_failed":"Couldn\'t read the stored Wi-Fi credentials","advanced_value":"{key} can\'t be edited here; change it on the Secrets page","cancel":"Cancel"},"wizard":{"back":"Back","continue":"Continue","dismiss":"Maybe later","done":"Done","recommended":"RECOMMENDED","start_tour":"Start guided tour","saving":"Saving…","ack_failed":"Saved your choices, but the wizard couldn\'t be marked as completed — it may reappear next time.","welcome":{"title":"Welcome to ESPHome Device Builder","intro":"We’ll help you tailor your ESPHome experience in a few quick steps."},"usage":{"title":"How will you use the ESPHome Desktop app?","intro":"Please tell us how you intend to use the ESPHome Desktop app. This helps tailor the dashboard to what you need.","standalone_title":"Installation of the ESPHome Device Builder","standalone_desc":"I want to create, configure, build, flash and manage ESPHome devices, from this device/computer.","remote_title":"Remote build","remote_desc":"Recommended for existing users of ESPHome Device Builder to use this app for compute power to build your device firmware."},"existing_server":{"title":"You already have ESPHome Device Builder","found":"Found on your network: {name}","found_overflow":"Found on your network: {name}, and {count} more","intro":"This app is a full ESPHome Device Builder and is ready to build firmware for the others. To send builds here, open Settings → Send builds on your existing dashboard and pair it with this machine.","remote_only_title":"Use the remote compute dashboard","remote_only_desc":"Lead with pairing and the build queue when you open this dashboard. Device creation stays available; the builder section just starts collapsed."},"experience":{"title":"Choose your experience","intro":"You can change this any time in Settings.","existing_notice":"We have detected an existing instance of ESPHome Device Builder on your network: {name}.","existing_notice_overflow":"We have detected existing instances of ESPHome Device Builder on your network: {name}, and {count} more.","existing_notice_link":"Would you like to change to remote build mode?","beginner_title":"New to ESPHome","beginner_desc":"Start with a simple, guided interface.","expert_title":"Expert","expert_desc":"Unlock the diff viewer, navigator search, and YAML search."},"tour":{"title":"You’re ready to build","ready":"Everything is set up and ready to use.","intro":"Take a guided tour to see how to create, configure, and install your first device. It takes about 5 minutes.","later":"You can always start the tour later from the menu in the top-right corner.","remote_title":"Setup complete","remote_ready":"Your remote build server is ready.","remote_intro":"This dashboard is configured to receive build jobs from other Device Builder installations."}}},"tour":{"header":"Quickstart tour","step_counter":"Step {current} of {total}","skip":"Skip tour","pause":"Close for now","unavailable_title":"This tour step isn’t available","unavailable_body":"The highlighted control could not be shown. Close for now and try again later, or skip the tour.","next":"Next","got_it":"Got it!","finish":"Finish","continue":"Continue","steps":{"create":{"title":"Create your first device","body":"Everything starts here. Open the guided setup to add a device.","hint":"Click “Create device” to continue"},"method":{"title":"Choose how to start","body":"“Create new project” guides you through choosing and configuring your board step by step.","hint":"Click “Create new project”"},"board":{"title":"Pick a board","body":"You can configure any board from the catalog. For this tour, we’ll use the featured Starter Kit as an example; the same workflow applies to other supported boards.","hint":"Click “Select” on the featured Starter Kit"},"name":{"title":"Name your device","body":"We’ve suggested a name and generated a working configuration. Keep it or choose a name of your own.","hint":"Continue when the name looks right"},"wifi":{"title":"Connect your device","body":"Enter your Wi-Fi details, or confirm the saved credentials. Device Builder stores them securely for future devices.","hint":"Enter or confirm Wi-Fi to continue"},"navigator":{"title":"Your device navigator","body":"Core Configuration contains essentials such as Wi-Fi, device identity, and hardware settings. Components add sensors and features; Automations define behavior.","hint":"Expand Core Configuration, then open ESPHome Core"},"central":{"title":"The main editor","body":"Select a section in the navigator to open it here. Configure your board, components, and automations visually; every change updates the YAML on the right."},"yaml":{"title":"Your configuration in YAML","body":"YAML is the text version of your device configuration—the source ESPHome uses to build the firmware. It stays in sync with the visual editor. We show it by default, but you can hide it and configure everything visually if you prefer."},"layout":{"title":"Switch your view","body":"Switch between the visual editor, YAML, or both side by side. Choose whichever view suits your workflow."},"install":{"title":"Install to your board","body":"Flash firmware to your device over USB or the network. Your edits are saved automatically first — that’s the whole loop: configure and install."},"dashboard":{"title":"Your device is ready","body":"Your device has been added to the dashboard. From here you can monitor its status, edit its configuration, install updates, and return to it whenever you need."}},"suggested_name":"ESPHome Starter"},"layout":{"release_notes":"View release notes","secrets":"Secrets","update_all_started":"{count, plural, one {# device update started} other {# device updates started}}","update_all_none":"No online devices to update","update_all_error":"Failed to start updates","compile_all_started":"{count, plural, one {# device compilation started} other {# device compilations started}}","compile_all_none":"No devices selected to compile","compile_all_error":"Failed to start compilations","update_all_no_compatible_peer_offline":"Paired build servers are offline — wait for one to reconnect, or relax the policy in Settings → Build server.","update_all_no_compatible_peer_version":"No paired build server runs ESPHome {local} — update one, or relax the policy in Settings → Build server.","update_all_no_compatible_peer_mixed":"No compatible build server (you\'re on {local}) — wait for a reconnect, or relax the policy in Settings → Build server.","cancel":"Cancel","usb_device_connected":"USB device connected","usb_device_setup":"Set it up","theme":"Theme","theme_light":"Light","theme_dark":"Dark","theme_system":"System","settings":"Settings","search":"Search commands","search_shortcut":"Ctrl+K","guided_tour":"Take a tour","archived_devices":"Archived devices","show_ignored_discoveries":"Show ignored discoveries ({count})","hide_ignored_discoveries":"Hide ignored discoveries","reset_build_env":"Reset build environment","check_for_updates":"Check for updates","feedback_menu":"Found a bug? Have an idea?","back":"Back","close":"Close","more_options_with_count":"More options ({count, plural, one {# firmware task active} other {# firmware tasks active}})","editor":"Editor","preview_badge":"Beta","page_load_failed":"The page failed to load. Check your connection and try again.","reconnecting":"Connection lost. Reconnecting…"},"feedback":{"title":"Found a bug? Have an idea?","description":"Help us improve ESPHome Device Builder by reporting issues or sharing your ideas.","survey":"Join feedback survey","group_bug":"Report a bug","group_feature":"Suggest a feature","group_community":"Community","browse_issues":"Browse open issues","new_issue":"Report a new issue","device_title":"Which device is this about?","device_includes_heading":"Picking a device pre-fills the GitHub report with:","device_includes_config":"Its YAML config, known credentials masked","device_includes_facts":"Device details: name, board, platform, versions, installation","device_includes_facts_status":"Device details: name, board, platform, versions, installation, online state, reachability source, IP network prefix","device_hint":"Nothing is filed until you review and submit the form. GitHub only shows the pre-filled form when you\'re signed in.","device_skip":"No specific device","device_filter":"Filter devices","device_no_matches":"No devices match your filter","device_none":"No devices are configured yet","device_capture_failed":"Couldn\'t capture the device config; the form opens without it","device_ready":"A pre-filled GitHub issue form should have opened in a new tab. If it didn\'t, or GitHub showed an error because you weren\'t signed in, sign in to GitHub and use the button below.","device_ready_truncated":"A pre-filled GitHub issue form should have opened in a new tab; the config was trimmed to fit, so paste the rest into the form if needed. If the tab didn\'t open, or GitHub showed an error because you weren\'t signed in, sign in to GitHub and use the button below.","open_form":"Open GitHub issue","back":"Back","browse_builder":"Device Builder issues","browse_builder_desc":"Open issues filed against Device Builder.","browse_esphome":"ESPHome issues","browse_esphome_desc":"Open issues in the ESPHome core repo.","bug_builder":"Device Builder bug","bug_builder_desc":"A problem with Device Builder itself (UI, backend, or install).","bug_status":"Device status looks wrong","bug_status_desc":"Online/offline, sync, or detection state doesn\'t match reality.","bug_remote_build":"Remote build pairing problem","bug_remote_build_desc":"Two dashboards can\'t discover each other, pair, stay connected, or run builds for each other.","bug_esphome":"ESPHome firmware or compile issue","bug_esphome_desc":"Compile errors, firmware crashes, boot loops, or component bugs in ESPHome itself; these belong in the core repo, not Device Builder.","browse_features":"Browse feature requests","new_feature":"Request a new feature","discord":"Chat on the ESPHome Discord","write_in_english":"Please write in English so the ESPHome maintainers can read your report."},"command_palette":{"title":"Command palette","placeholder":"Type a command — or / to search YAML content","placeholder_basic":"Type a command…","no_results":"No results found","group_navigation":"Navigation","group_devices":"Devices","group_yaml_matches":"YAML matches","go_dashboard":"Go to dashboard","group_language":"Language","enable_expert_mode":"Enable Expert Mode","disable_expert_mode":"Disable Expert Mode","navigate_hint":"to navigate","select_hint":"to select","close_hint":"to close","yaml_search_hint":"search YAML content","switch_to_yaml":"Switch to YAML content search","switch_to_commands":"Switch to command search","update_all":"Update All"},"desktop_update_dialog":{"title":"Check for updates","checking":"Checking for updates…","updating":"Updating; the app will restart when it finishes.","all_up_to_date":"Everything is up to date.","up_to_date":"Up to date","not_installed":"Not installed","check_failed":"Check failed","check_error":"Could not check for updates.","update_error":"Could not start the update.","retry":"Try again","update_now":"Update now","component_app":"ESPHome Desktop","component_esphome":"ESPHome","component_device_builder":"Device Builder"},"update_all_dialog":{"title":"Update All","count":"{count, plural, one {# device will be updated} other {# devices will be updated}}","supersede_note":"{count, plural, one {# device is building now — its build will restart} other {# devices are building now — their builds will restart}}","confirm":"Update"},"yaml_search":{"searching":"Searching…","no_matches":"No matches","match_count":"{count, plural, one {match} other {matches}}","match_count_of":"of {total, plural, one {# match} other {# matches}}","switch_to_yaml":"Search YAML content","placeholder":"Search YAML content…","no_match_yaml_preview":"{count, plural, one {Try YAML search — found # match across your configs} other {Try YAML search — found # matches across your configs}}"},"yaml_editor":{"sticky_jump_to_line":"Jump to line {line}","error_indent_fix":"Indentation mismatch: line {line} \\"- {key}\\" is indented less than its properties. Indent line {line} by {spaces, plural, one {# space} other {# spaces}} so \\"- {key}\\" lines up with them.","error_misaligned_indent_fix":"Indentation mismatch: line {line} \\"{key}\\" is indented too little. Indent line {line} by {spaces, plural, one {# space} other {# spaces}} so it lines up.","error_misaligned_dedent_fix":"Indentation mismatch: line {line} \\"{key}\\" is indented too deep. Remove {spaces, plural, one {# space} other {# spaces}} from the start of line {line} so it lines up.","error_nested_list_hint":"The \\"- \\" items below \\"{key}\\" are indented as its value. If they should be separate list entries, dedent them to line up with \\"- {key}\\".","error_indent_hint":"YAML indentation problem near line {line}. Make sure the line and its neighbours are indented consistently with their block; an over-indented or under-indented line, or a stray \\":\\" in a value, causes this.","error_missing_colon_hint":"Line {line}: \\"{key}\\" looks like an option name without a value. Add \\":\\" and a value after it, or remove the line.","error_commented_block_hint":"Line {line}: everything under \\"{key}\\" is commented out, so it has no options. Uncomment an option, or comment out \\"{key}\\" too.","error_empty_block_hint":"Line {line}: \\"{key}\\" has nothing indented under it, so its value is empty. Add at least one option under it, or remove the line.","error_tab_hint":"A tab is used for indentation near line {line}; YAML needs spaces. Replace the tab with spaces.","error_char_hint":"Unexpected character near line {line}; a value starting with a symbol such as @, %, or * must be wrapped in quotes.","error_unterminated_string_hint":"Unterminated string near line {line}; a quote was opened but not closed. Add the missing closing quote.","error_duplicate_key_hint":"Duplicate key near line {line}; the same option is set twice in this block. Remove or rename one.","error_flow_hint":"Unclosed bracket near line {line}; a \\"[\\" list or \\"{\\" mapping is missing its closing \\"]\\" or \\"}\\".","error_go_to_line":"Go to line {line}","error_dash_space_fix":"Missing space: line {line} \\"-{key}\\" is a list item missing the space after its \\"-\\". Add the space so it reads \\"- {key}\\".","error_nest_under_fix":"Indentation mismatch: line {line} \\"{key}\\" is not an option of the block it sits in, but it is a valid option of \\"{target}\\". Indent line {line} by {spaces, plural, one {# space} other {# spaces}} to nest it under \\"{target}\\".","error_indent_under_section_fix":"Line {line} \\"{key}\\" is not a component, but it is a valid option of \\"{section}\\". Indent line {line} by {spaces, plural, one {# space} other {# spaces}} to move it inside \\"{section}\\".","error_unnest_fix":"Indentation mismatch: line {line} \\"{key}\\" is not an option of \\"{parent}\\", but it is a valid option of \\"{target}\\". Remove {spaces, plural, one {# space} other {# spaces}} from the start of line {line} to move it out of \\"{parent}\\".","error_auto_fix":"Try auto-fix","error_auto_fix_hint":"Best-effort guess: it edits only the marked line. Review the result and undo it if that is not the fix you wanted.","auto_fix_failed":"Couldn\'t run auto-fix; the config could not be validated. Please try again.","auto_fix_stale":"The config changed; re-check the error and try again.","auto_fix_confirm_heading":"Apply the fix anyway?","auto_fix_confirm_message":"This fixes the reported error, but the config still has other YAML errors. Apply the fix anyway?","auto_fix_confirm_apply":"Apply fix"},"editor_search":{"find":"Find","replace_placeholder":"Replace","next":"next","previous":"previous","all":"all","match_case":"match case","by_word":"by word","regexp":"regexp","replace":"replace","replace_all":"replace all","close":"close","go_to_line":"Go to line","go":"go","current_match":"current match","on_line":"on line","replaced_matches":"replaced $ matches","replaced_match_on_line":"replaced match on line $"},"settings":{"title":"Settings","appearance":"Appearance","experience_save_failed":"Failed to save your preference","remote_compute_only":"Remote compute dashboard","hide_device_builder":"Hide the Device builder","hide_device_builder_desc":"Show only the Build server view. Device creation and the device list come back the moment this is turned off.","remote_compute_only_desc":"Put this install\'s remote build server dashboard front and center. Nothing is removed; the device builder section just starts collapsed.","remote_compute_features_title":"What the remote compute dashboard changes","remote_compute_feature_dashboard":"Build server front and center","remote_compute_feature_dashboard_desc":"The dashboard opens with pairing requests, paired dashboards, and the build queue expanded.","remote_compute_feature_builder":"Device builder stays available","remote_compute_feature_builder_desc":"Device creation and your devices keep working; the builder section starts collapsed and expands with one click.","remote_compute_feature_paired":"Appears automatically once paired","remote_compute_feature_paired_desc":"Even with this off, a collapsed Build server bar appears once another dashboard pairs with this one; the Device builder stays front and center.","version_history":"Save version history","version_history_desc":"Keep a local Git history of your config changes so you can view and restore earlier versions. Turn this off to stop the automatic commits.","language":"Language","language_desc":"Choose the language used across the interface.","language_system":"System","language_completeness":"{percent}% translated","language_completeness_note":"Percentages show how much of each language is translated. Untranslated text falls back to English. Component library documentation is only available in English.","language_help":"Is your language missing or incomplete?","language_help_link":"Help translate ESPHome","theme_desc":"Choose between light, dark, or follow your system preference.","expert_mode":"Expert Mode","expert_mode_desc":"Enabling Expert Mode will unlock some additional powerful options in the Device Builder for experienced power users of ESPHome.","expert_mode_features_title":"What Expert Mode adds","expert_mode_feature_diff":"Editor diff view","expert_mode_feature_diff_desc":"Compare your unsaved YAML against the last saved version from the editor toolbar.","expert_mode_feature_navigator":"Device navigator search","expert_mode_feature_navigator_desc":"Filter the device navigator by component name or ID.","expert_mode_feature_yaml":"YAML content search","expert_mode_feature_yaml_desc":"Search across all your configs from the command palette and the dashboard.","build_server":"Build server","pairing_requests":"Pairing requests","build_offload":"Send builds","nav_item_attention_aria":"{label}, attention needed","remote_build_enable":"Enable remote build","remote_build_enable_desc":"Lets other dashboards on your network compile their YAML here. A paired peer can run arbitrary code on this machine; only pair with dashboards you\'d give ssh access to.","remote_build_known_dashboards":"Known dashboards","remote_build_peers_loading":"Loading…","remote_build_peers_empty":"No dashboards discovered yet.","remote_build_peer_version_line":"ESPHome {esphome}","remote_build_save_failed":"Could not save remote build settings; the toggle was reverted.","remote_build_cleanup_ttl_title":"Cache retention","remote_build_cleanup_ttl_desc":"Hours of inactivity before a cached remote build is reclaimed from disk. The receiver keeps the cached build to skip cold rebuilds on subsequent submissions; lower this to free disk sooner, raise it to keep the cache warm longer. 24 hours is a sensible default.","remote_build_cleanup_ttl_unit":"hours","pair_build_server_section_heading":"Pair with another dashboard","pair_build_server_section_desc":"Add a build server outside this LAN — different subnet, VLAN, or container network where mDNS discovery doesn\'t reach. Same-subnet receivers show up in the list above automatically.","pair_build_server_row_helper":"Type the receiver\'s hostname and port to start a pair request.","pair_build_server_open_action":"Pair with a build server","pair_build_server_input_title":"Pair with a build server","pair_build_server_input_desc":"Enter the receiver\'s hostname and peer-link port. The next step shows the receiver\'s fingerprint so you can verify it before sending the request.","pair_build_server_hostname_label":"Hostname or IP","pair_build_server_hostname_placeholder":"buildserver.lan or 10.0.0.5","pair_build_server_port_label":"Port","pair_build_server_port_helper":"Default 6055 — the receiver\'s peer-link port.","pair_build_server_input_invalid":"Hostname is required and port must be between 1 and 65535.","pair_build_server_preview_action":"Continue","pair_build_server_previewing":"Connecting…","pair_build_server_preview_unreachable":"Couldn\'t reach a build server at {hostname}:{port}. Check the address and that the receiver\'s peer-link port is open.","pair_build_server_preview_failed":"Couldn\'t preview the receiver\'s identity. Try again or check the dashboard logs.","pair_build_server_confirm_title":"Confirm receiver","pair_build_server_confirm_desc":"Compare the fingerprint below to what the receiver shows under Settings → Pairing requests. They must match.","pair_build_server_trust_warning":"A paired receiver compiles your YAML and sees your secrets; only pair receivers you trust.","pair_build_server_pairing_key_label":"Pairing key","pair_build_server_pairing_key_placeholder":"XXXX-XXXX-XXXX-XXXX","pair_build_server_pairing_key_helper":"This build server needs the one-time pairing key shown on its console next to the fingerprint.","pair_build_server_pairing_key_required":"Enter the pairing key shown on the build server\'s console.","pair_build_server_pin_label":"Receiver fingerprint (SHA-256)","pair_build_server_pin_hex_summary":"Show hex bytes","pair_build_server_target":"Connected to {hostname}:{port}","pair_build_server_connecting":"Connecting to {hostname}:{port}…","pair_build_server_receiver_label_label":"Name for this receiver","pair_build_server_receiver_label_placeholder":"e.g. desktop, lab-pc","pair_build_server_receiver_label_helper":"Shown to you in the paired-receivers list. Local to this dashboard.","pair_build_server_offloader_label_label":"How this dashboard introduces itself","pair_build_server_offloader_label_placeholder":"e.g. kitchen pi, ha-green","pair_build_server_offloader_label_helper":"Shown to the receiver\'s admin in their pairing requests inbox.","pair_build_server_label_required":"Both names are required before sending the request.","pair_build_server_request_action":"Send pair request","pair_build_server_sending":"Sending…","pair_build_server_pin_changed":"The receiver\'s fingerprint changed since you confirmed it. Go back, re-enter the address, and verify the new fingerprint before pairing.","pair_build_server_no_window":"The receiver isn\'t accepting pair requests right now. For a headless build server, check that its pairing window is open and the pairing key matches its console. Otherwise ask the receiver\'s admin to open their Settings → Pairing requests page, then try again.","pair_build_server_request_unreachable":"Couldn\'t reach the receiver at {hostname}:{port}. Check the address and try again.","pair_build_server_request_failed":"Couldn\'t send the pair request. Try again or check the dashboard logs.","pair_build_server_invalid_args":"The receiver rejected the request: {details}","pair_build_server_sent_title":"Pair request sent","pair_build_server_sent_desc":"Open Settings → Pairing requests on the receiver dashboard at {hostname}:{port} and click Accept. The pair will complete once the admin there approves it.","pair_build_server_sent_dashboard_id_label":"Dashboard ID","pair_build_server_sent_pin_label":"Your fingerprint (the receiver shows this on its Pairing request screen)","pair_build_server_sent_toast":"Pair request sent to {hostname}:{port}. Waiting for the receiver\'s admin to accept.","pair_build_server_approved_toast":"Pairing with {hostname}:{port} accepted.","pair_build_server_rejected_toast":"Pair request to {hostname}:{port} was declined or removed.","pair_build_server_row_action":"Pair","pair_build_server_row_aria":"Pair with {name}","paired_build_servers_heading":"Paired build servers","paired_build_servers_desc":"Compiling firmware is CPU-heavy and can take a while on a low-power system. Pair a faster machine on your network, another dashboard or {desktop_link}, to cut compile times; flashing still happens here. Pending rows are waiting for the receiver\'s admin to accept.","paired_build_servers_desc_desktop":"Pair a faster machine on your network running another Device Builder to cut compile times; flashing still happens here. Pending rows are waiting for the receiver\'s admin to accept.","esphome_desktop":"ESPHome Desktop","paired_build_servers_loading":"Loading pairings…","paired_build_servers_empty":"No build servers paired yet.","pairing_status_pending":"Pending","offloader_remote_builds_enabled":"Auto-route installs to remote build","offloader_remote_builds_enabled_desc":"When enabled, the dashboard picks a paired remote build server for each install when one is available; turn off to keep every install local while leaving your pairings in place.","offloader_remote_builds_enabled_loading":"Loading…","offloader_version_match_policy_heading":"ESPHome version match","offloader_version_match_policy_any":"Allow any release-line mismatch (default)","offloader_version_match_policy_any_desc":"Route to any paired build server regardless of its ESPHome version.","offloader_version_match_policy_release":"Require matching release line","offloader_version_match_policy_release_desc":"Only route to servers on the same release line (year + month, e.g. 2026.5). Patch differences (2026.5.0 ↔ 2026.5.1) are allowed.","offloader_version_match_policy_exact":"Require exact version match","offloader_version_match_policy_exact_desc":"Only route to servers running the exact same ESPHome version. Fall back to a local build if no server matches.","offloader_version_match_policy_exact_required":"Require exact match — fail install if no compatible peer","offloader_version_match_policy_exact_required_desc":"Like \\"Require exact version match\\", but refuses to fall back to a local build when no server is eligible; the install fails until a compatible server is reachable and version-matched or the policy is relaxed. A briefly-disconnected server surfaces the same failure as a version-mismatched one.","offloader_include_local":"Include this machine in the build pool","offloader_include_local_desc":"When enabled, this dashboard compiles a build itself whenever every paired build server is busy, so local and remote builds run at the same time. A single build still prefers an idle remote server, so the default of offloading a single build is unchanged.","offloader_include_local_loading":"Loading…","build_offload_pairing_connected":"Connected","build_offload_pairing_connecting":"Connecting…","build_offload_pairing_disconnected":"Disconnected","build_offload_pairing_last_error":"Last connection error: {detail}","build_offload_pairing_enabled_aria":"Use {label} for remote builds","build_offload_pairing_enabled_title":"Use this server when auto-routing installs","build_offload_pairing_version_auto_provision":"Build server runs ESPHome {peer}; your builds use {local} automatically","build_offload_pairing_version_mismatch_patch":"Build server runs ESPHome {peer}; you\'re on {local}","build_offload_pairing_version_mismatch_release":"Build server runs ESPHome {peer}; you\'re on {local}. YAML may not compile across this release gap.","edit_pairing_endpoint_aria":"Edit hostname or port for {label}","edit_pairing_endpoint_title":"Edit endpoint for {label}","edit_pairing_endpoint_desc":"Update where this dashboard reaches the paired build server. Use this when the receiver moved to a hostname or port your network can reach but mDNS doesn\'t broadcast.","edit_pairing_endpoint_hostname_label":"Hostname or IP","edit_pairing_endpoint_port_label":"Port","edit_pairing_endpoint_save":"Save","edit_pairing_endpoint_saving":"Saving…","edit_pairing_endpoint_unavailable":"Couldn\'t reach {host}:{port}. Check the new address and try again.","edit_pairing_endpoint_precondition_failed":"Couldn\'t update the endpoint: {detail}","edit_pairing_endpoint_not_found":"The pairing is gone. Close this dialog and re-pair if you still want to send builds here.","edit_pairing_endpoint_invalid_args":"The hostname or port wasn\'t valid: {detail}","edit_pairing_endpoint_generic_error":"Couldn\'t update the endpoint. Check the dashboard logs for details.","reset_peer_env_aria":"Reset the build environment on {label}","unpair_action":"Unpair","unpair_aria":"Unpair {label}","unpair_confirm_title":"Unpair this build server?","unpair_confirm_body":"This dashboard will no longer be able to send compile jobs to the paired build server. You can pair again later if you change your mind.","unpair_confirm_body_named":"This dashboard will no longer be able to send compile jobs to {label} ({hostname}:{port}). You can pair again later if you change your mind.","unpair_confirm_confirm":"Unpair","unpair_success":"Unpaired {label}.","unpair_failed":"Couldn\'t unpair {label}.","offloader_alert_pin_mismatch_title":"{label}\'s identity changed","offloader_alert_pin_mismatch_desc":"The fingerprint at {target} doesn\'t match what was confirmed when you paired. The receiver\'s identity rotated, or the host has been replaced. Re-pair to confirm the new fingerprint, or unpair if you don\'t recognise the change.","offloader_alert_peer_revoked_title":"{label} removed this dashboard","offloader_alert_peer_revoked_desc":"The receiver at {target} no longer accepts builds from this dashboard. Reach out to the receiver\'s admin if this was a mistake; otherwise unpair to clear this alert.","offloader_alert_repair_action":"Re-pair","offloader_alert_repair_aria":"Re-pair with {label}","offloader_alert_unpair_aria":"Unpair {label}","reauth_wizard_step1_title":"What we noticed","reauth_wizard_step2_title":"What this could mean","reauth_wizard_step3_title":"Verify with the receiver admin","reauth_wizard_step_progress":"Step {step} of {total}","reauth_wizard_step1_body":"{label} at {target} responded with a different cryptographic identity than the one you confirmed when you paired. Both fingerprints are shown below; they should match if nothing has changed about the receiver.","reauth_wizard_expected_label":"Originally confirmed","reauth_wizard_observed_label":"Now observed","reauth_wizard_step2_lede":"An identity change like this has two very different real-world causes. Read both before you re-pair.","reauth_wizard_step2_benign_title":"The receiver admin rotated the identity","reauth_wizard_step2_benign_body":"An identity rotation, an OS reinstall, or a server rebuild can all produce a fresh cryptographic key. The receiver admin will see the new fingerprint on their Build server card; re-pairing confirms it.","reauth_wizard_step2_malign_title":"Something is impersonating the receiver","reauth_wizard_step2_malign_body":"A different host on the network is answering on the same address. Re-pairing here would trust the impersonator with your YAML and your secrets. Do not re-pair; talk to the receiver admin first.","reauth_wizard_step3_lede":"Before you re-pair {label}, open the receiver\'s Settings → Build server card and compare the fingerprint it shows for itself with the one below. Only continue if the two match.","reauth_wizard_verified_checkbox":"I\'ve confirmed with the receiver admin that this new fingerprint is correct.","reauth_wizard_back":"Back","reauth_wizard_continue":"Continue","reauth_wizard_repair_action":"Re-pair this receiver","reauth_wizard_repair_in_progress":"Re-pairing…","reauth_wizard_repair_retry":"Try again","reauth_repair_success":"Re-paired with {label}.","reauth_repair_pin_changed":"{label}\'s identity changed again between the wizard and the re-pair attempt — the receiver responded with a different fingerprint than the one you just verified. Re-open the alert and verify the new fingerprint before retrying.","reauth_repair_unreachable":"Couldn\'t reach {label}. Check that the host is up, then click Try again.","reauth_repair_no_window":"{label}\'s pairing window isn\'t open. Ask the receiver admin to open Settings → Pairing requests, then click Try again.","reauth_repair_failed":"Couldn\'t re-pair with {label}. Click Try again to retry.","build_server_card_heading":"This dashboard\'s build server identity","build_server_card_desc":"Other dashboards pair with this one by confirming the identity fingerprint shown here. Read it back to the operator pairing from the other side; it\'s the only way to detect a man-in-the-middle on first connection.","remote_build_pin_label":"Identity fingerprint (SHA-256)","remote_build_pin_hex_summary":"Show hex bytes","remote_build_pin_copy":"Copy","remote_build_pin_copied":"Fingerprint copied to clipboard.","remote_build_pin_copy_failed":"Couldn\'t copy to the clipboard. Please select and copy the fingerprint manually.","remote_build_dashboard_id_label":"Dashboard ID","remote_build_address_label":"Pairing address","remote_build_address_copy":"Copy address","remote_build_address_copy_aria":"Copy {address} to the clipboard","remote_build_address_copied":"Address copied to clipboard.","remote_build_address_copy_failed":"Couldn\'t copy to the clipboard. Please select and copy the address manually.","remote_build_server_version_label":"Dashboard version","remote_build_esphome_version_label":"ESPHome version","remote_build_listener_up":"Listener active","remote_build_listener_down":"Listener offline","remote_build_listener_disabled":"Disabled","remote_build_listener_turn_on":"Turn on","remote_build_listener_turn_on_aria":"Turn on remote build","remote_build_identity_loading":"Loading identity…","remote_build_identity_load_failed":"Could not load this dashboard\'s identity. Please reopen Settings to retry.","remote_build_rotate":"Rotate identity","remote_build_rotate_in_progress":"Rotating…","remote_build_rotate_confirm_title":"Rotate this dashboard\'s identity?","remote_build_rotate_confirm_body":"Every paired sender will see a different identity fingerprint on its next connection and will need to be re-paired. Do this if you suspect the keypair was compromised, or if you\'re rotating as part of a regular hygiene schedule.","remote_build_rotate_confirm_confirm":"Rotate identity","remote_build_rotate_success":"Identity rotated. Every paired sender needs to be re-paired.","remote_build_rotate_listener_down":"Identity rotated, but the receiver listener didn\'t come back up. Check the dashboard logs.","remote_build_rotate_already_in_progress":"Another rotation is already running on this dashboard. Wait for it to finish before retrying.","remote_build_rotate_failed":"Could not rotate the identity.","build_server_pairing_requests_heading":"Pairing requests","build_server_pairing_requests_desc":"Senders that have asked to pair with this dashboard. Open Review to compare the fingerprint shown there with the one on the sending dashboard, then accept or reject.","build_server_pairing_requests_loading":"Loading pairing requests…","build_server_pairing_requests_empty":"No pairing requests yet.","build_server_pairing_window_open":"Open","build_server_pairing_window_closed":"Closed","build_server_pairing_window_open_failed":"Couldn\'t open the pairing window. Re-enter Settings to retry.","build_server_pairing_window_extend":"Extend","build_server_pairing_window_extend_failed":"Couldn\'t extend the pairing window. Try again.","build_server_pairing_window_remaining_aria":"{duration} remaining before the window closes","build_server_paired_senders_heading":"Paired senders","build_server_paired_senders_desc":"Other dashboards approved to send compile jobs to this one.","build_server_paired_senders_loading":"Loading pairings…","build_server_paired_senders_empty":"No paired senders yet.","build_server_peer_ip_label":"From IP","build_server_peer_review":"Review","build_server_peer_review_aria":"Review pairing request from {label}","build_server_peer_approve_success":"Sender approved.","build_server_peer_approve_already_gone":"That request is no longer pending.","build_server_peer_approve_failed":"Couldn\'t approve the sender.","build_server_peer_approve_failed_detail":"Couldn\'t approve the sender: {reason}","build_server_peer_accept_confirm_title":"Pairing request","build_server_peer_accept_confirm_warning":"Accepting will let this remote dashboard run compile jobs on this host. Treat that as full code-execution access.","build_server_peer_accept_confirm_checklist_pin":"The fingerprint below should match what the sending dashboard shows out-of-band.","build_server_peer_accept_confirm_checklist_access":"Only accept if you recognise the sender — once paired, they can dispatch builds until you remove them.","build_server_peer_accept_confirm_dashboard_id":"Dashboard ID","build_server_peer_accept_confirm_pin_label":"OOB fingerprint (compare with sender)","build_server_peer_accept_confirm_pin_hex_summary":"Show hex bytes","build_server_peer_accept_confirm_confirm":"Accept","build_server_peer_accept_confirm_reject":"Reject","build_server_peer_reject_success":"Pairing request rejected.","build_server_peer_reject_already_gone":"That pairing request is no longer pending.","build_server_peer_reject_failed":"Couldn\'t reject the pairing request.","build_server_peer_reject_failed_detail":"Couldn\'t reject the pairing request: {reason}","build_server_peer_connected":"Connected","build_server_peer_disconnected":"Disconnected","build_server_peer_details_summary":"Show details","build_server_peer_paired_at_label":"Paired","build_server_peer_dashboard_id_label":"Dashboard ID","build_server_peer_dashboard_id_desc":"Internal pairings-table key. The label and out-of-band fingerprint identify this sender; the ID is shown for support / debugging.","build_server_peer_remove":"Remove","build_server_peer_remove_aria":"Remove paired sender {label}","build_server_peer_remove_confirm_title":"Remove this sender?","build_server_peer_remove_confirm_body":"The sender will no longer be able to send compile jobs to this dashboard. They can re-pair if you change your mind.","build_server_peer_remove_confirm_confirm":"Remove","build_server_peer_remove_success":"Sender removed.","build_server_peer_remove_already_gone":"That sender is already gone.","build_server_peer_remove_failed":"Couldn\'t remove the sender.","layout_split":"Split view","layout_yaml":"YAML only"},"secrets":{"title":"Secrets","desc":"Manage sensitive values referenced in your device configurations with !secret","save":"Save","saving":"Saving…","saved":"Secrets saved","save_error":"Failed to save secrets","reveal_values":"Reveal values","hide_values":"Hide values","layout_label":"Editor layout","layout_form":"Form","layout_yaml":"YAML","add_secret":"Add secret","key_placeholder":"Name","value_placeholder":"Value","remove_secret":"Remove secret","group_shared":"Shared","open_device":"Open this device","edit_out_of_sync":"That change couldn\'t be applied; the editor was out of sync and has been refreshed.","unsaved_title":"Unsaved secrets","unsaved_message":"You have unsaved changes to your secrets. If you leave without saving, they will be lost.","wipe_title":"Remove all secrets?","wipe_message":"This clears every secret from secrets.yaml. Device configs that reference these !secret values will fail to build until you add them back. This can\'t be undone.","wipe_confirm":"Remove all secrets","add_dialog_title":"Add a secret","add_dialog_target":"Where should this secret live?","advanced_badge":"Advanced — edit in YAML","empty":"No secrets yet. Add one below or switch to YAML.","invalid_key":"Names may use letters, numbers, dots, dashes and underscores, and can\'t start with a number.","duplicate_key":"A secret with this name already exists.","duplicate_row":"Duplicate name; ESPHome rejects secrets.yaml until only one remains.","file_header":"# Secrets — store sensitive values here and reference them\\n# in your device configurations using !secret <key>\\n#\\n# Example:\\n# wifi_ssid: \\"your-network-name\\"\\n# wifi_password: \\"your-password\\"\\n","loading":"Loading secrets…","load_failed":"Secrets could not be loaded. Check your connection and retry.","reload_failed":"Couldn\'t refresh secrets after an external change; the editor may be out of date."},"auth":{"connecting":"Connecting…","sign_in":"Sign in","description":"Sign in to manage your ESPHome devices.","username":"Username","password":"Password","submit":"Sign in","submitting":"Signing in…","invalid_credentials":"Invalid username or password.","rate_limited":"Too many failed attempts. Try again in {seconds}s.","rate_limited_generic":"Too many failed attempts. Try again later.","unexpected_error":"Sign-in failed. Please try again."},"firmware_jobs":{"menu_item":"Firmware tasks","title":"Firmware tasks","empty_title":"No firmware tasks yet","empty_desc":"Compile, install, or clean jobs you start will show up here.","group_active":"Active","group_history":"Recent","status_queued":"Queued","status_running":"Running…","status_completed":"Completed","status_failed":"Failed","status_cancelled":"Cancelled","cancel":"Cancel","cancel_failed":"Couldn\'t cancel the job. Try again.","cancel_failed_detail":"Couldn\'t cancel the job: {reason}","clear_history":"Clear history","build_env_label":"(build environment)","reset_build_env":"Reset build environment","reset_confirm_title":"Reset build environment?","reset_confirm_message":"This wipes the toolchain cache and platform/library installs. The next compile will be slow because everything has to re-download. Continue?","reset_confirm_button":"Reset","reset_peer_confirm_title":"Reset the build environment on {label}?","reset_peer_confirm_message":"This wipes the entire build environment on {label}: the shared compiler toolchain, every cached ESPHome version, and the build files of every dashboard paired to that server, not just this one. It typically takes several minutes, and the next build from any dashboard re-downloads everything from scratch. It can\'t start while the server is running other jobs.","reset_peer_confirm_button":"Reset build environment","reset_peer_failed":"Couldn\'t start the build environment reset on {label}: {detail}","type_compile":"Compile","type_offline_compile":"Offline compile","type_upload":"Upload","type_install":"Install","type_clean":"Clean","type_reset_build_env":"Reset","type_rename":"Rename","time_queued":"queued {time}","time_started":"started {time}","time_finished":"finished {time}","building_on":"Building on {label}","waiting_for_build_server":"Waiting for a build server","submitted_by":"from {label}"},"web":{"header":{"title":"ESPHome Web","subtitle":"Install and manage your devices from the browser","switch_to_pico":"Raspberry Pi","switch_to_esp":"ESP device","more_options":"More options","report_issue":"Report an issue"},"footer":{"tagline":"Runs 100% in your browser — no data leaves your computer."},"status":{"connected":"Connected","not_connected":"Not connected"},"actions":{"connect":"Connect","disconnect":"Disconnect","prepare":"Prepare for first use","configure_wifi":"Configure Wi-Fi"},"connect":{"failed":"Failed to connect: {error}"},"improv":{"open_failed":"Could not open the serial port for Wi-Fi setup. If the device just restarted, unplug it, plug it back in and retry.","port_busy":"The device is busy with another operation. Close it and try again.","load_failed":"Could not load the Wi-Fi setup dialog. Check your connection and try again."},"flash":{"title":"Install firmware","status":"USB flasher","hint_opener":"Plug the board into this computer over USB, then press Connect & install.","hint_direct":"Pick a factory .bin below, plug in the board, then press Connect & install.","firmware_ready":"Firmware received from your dashboard tab. Press Connect & install.","firmware_ready_named":"Firmware received from your dashboard tab: {name}. Press Connect & install.","erasing":"Erasing device…","done":"Installed and rebooting.","done_opener":"Installed and rebooting. Close this tab when finished.","malformed":"Received a malformed firmware payload.","handoff_timeout":"The dashboard didn\'t send the firmware in time. Return to your ESPHome Device Builder and try again, or pick a factory .bin below.","tab_title":"Flashing {name} — ESPHome Web","invalid_image":"This does not look like ESP32/ESP8266 firmware.","no_port":"No serial port selected.","choose_file":"Choose a factory .bin file first.","connect_install":"Connect & install","close_tab":"Close this tab","log_placeholder":"Waiting…","manual":"No firmware received? Flash a factory .bin manually:","logs_unavailable":"Serial logs unavailable: {error}","no_reenumerate":"the device did not re-enumerate in time"},"no_port":{"title":"No port selected","intro":"If you didn\'t select a port because you didn\'t see your device listed, try the following steps:","step_connected":"Make sure that the device is connected to this computer (the one that runs the browser that shows this website).","step_light":"Most devices have a tiny light when it is powered on. If yours has one, make sure it is on.","step_cable":"Make sure that the USB cable you use can be used for data and is not a power-only cable.","step_drivers":"Make sure you have the right drivers installed. Below are the drivers for common chips used in ESP devices:","windows_mac":"Windows & Mac","windows":"Windows","mac":"Mac","try_again":"Try again"},"esp":{"title":"ESP Device","connect_hint":"Connect an ESP32 or ESP8266 to your computer, then click Connect to start managing it.","connected_hint":"Your device is connected. Use the actions below to install firmware, view logs, or configure Wi-Fi."},"pico":{"title":"Raspberry Pi Pico W","connect_hint":"Connect a Raspberry Pi Pico W already running ESPHome, or run the first-time setup to install it.","connected_hint":"Your Pico is connected. Use the actions below to view logs or configure Wi-Fi.","first_time_setup":"First-time setup","manifest_failed":"Could not load the firmware manifest: {error}","setup_title":"Prepare your Raspberry Pi Pico W for first use","setup_intro":"To get started, ESPHome needs to be installed on your Pico. You can do this with your computer\'s file explorer — no extra programs required.","setup_step_1":"Disconnect your Raspberry Pi Pico from your computer.","setup_step_2":"Hold the BOOTSEL button and connect the Pico to your computer. It appears as a USB drive named RPI-RP2.","setup_download":"Download ESPHome for Pico","setup_download_loading":"Loading download link…","setup_download_failed":"Could not load the download link. Close and reopen to try again.","setup_step_4":"Drag the downloaded file onto the RPI-RP2 drive. The install is complete when the drive disappears.","setup_step_5":"Your Pico now runs ESPHome 🎉","setup_continue_hint":"Click Continue to connect it to Wi-Fi. Once connected, it shows up automatically on your ESPHome Device Builder."},"unsupported":{"status":"Unsupported","heading":"Web Serial unavailable","insecure":"ESPHome Web needs a secure connection. Reopen this page over https (or on localhost) to connect to a device.","browser":"ESPHome Web requires a browser that supports Web Serial. Open this site on a desktop using Google Chrome, Microsoft Edge, another Chromium-based browser, or Firefox 151 or newer. Safari does not support Web Serial, and Firefox managed by an organization may have it disabled by policy."},"logs":{"title_named":"{name} logs","waiting":"Waiting for serial output…","download":"Download logs","open_failed":"Could not open the serial port: {error}","reset_failed":"Could not reset the device.","port_busy":"The device is busy with another operation. Close it and try again.","terminal_disconnected":"Terminal disconnected","reconnecting":"Waiting for the device to come back…","reconnected":"Reconnected","reconnect_failed":"The device did not come back. Close the logs and reconnect it.","reconnect_gave_up":"Stopped reconnecting — no output after several attempts. Close the logs and reconnect."},"dashboard_hint":{"logs":"Connect your device below, then click Logs to view its output.","install":"Connect your device below, then click Install to flash your downloaded project.","wizard":"Connect your device below, then Prepare it for first use to add it to your ESPHome Device Builder."},"intro":{"welcome":"Welcome to ESPHome Web!","body_esp":"ESPHome Web lets you prepare your device for first use, install new versions, and check the device logs directly from your browser.","body_pico":"ESPHome Web lets you prepare your Raspberry Pi Pico W for first use and check the device logs directly from your browser.","privacy":"ESPHome Web runs 100% in your browser. No data will leave your computer.","lite":"This page is a lite variant of the ESPHome Device Builder. To create and edit ESPHome projects, install it on your computer or inside Home Assistant (it\'s free!).","get_esphome":"Get ESPHome"},"install":{"preparing":"Preparing firmware…","erasing":"Erasing device…","done":"Installation complete","unsupported_chip":"There\'s no ready-made ESPHome Web firmware for the {chip} (for example, chips without built-in Wi-Fi). Create a device in your ESPHome Device Builder and install it from there instead.","upload_title":"Install your existing ESPHome project","upload_intro":"Select the factory binary you want to install on your device.","upload_howto_title":"To get the factory file of your ESPHome project:","upload_howto_1":"Open your ESPHome Device Builder and find your device.","upload_howto_2":"From the device menu, choose Install, then Manual download.","upload_howto_3":"Choose the Factory format and save the .bin file.","adoptable_title":"Prepare your device for first use","adoptable_intro":"This installs a basic version of ESPHome on your device and helps you connect it to your network.","adoptable_detail":"Once installed, your ESPHome Device Builder shows the device and lets you take control, creating a local configuration you can manage over the network.","adoptable_done":"Your device is ready. Continue to connect it to Wi-Fi.","adoptable_erase":"Erase the device first","adoptable_erase_helper":"Wipes everything on the device, including saved Wi-Fi credentials. Use this if the device ran other firmware before; it takes a little longer.","connect_failed_hint":"Failed to initialize. Try resetting your device or holding the BOOT button while selecting your serial port until it starts preparing the installation.","no_firmware":"No firmware to flash."}},"remote_build_dashboard":{"title":"Build server","tagline":"builds firmware for other dashboards","badge_requests":"{count, plural, one {# pairing request} other {# pairing requests}}","badge_active":"{count, plural, one {# active job} other {# active jobs}}","intro_empty":"No dashboards are paired yet. Pair one to start receiving builds.","step_open_window_label":"Step 1 — here","step_open_window_title":"Open the pairing window","step_open_window_desc":"Pair requests are only accepted while the window is open.","step_send_request_label":"Step 2 — on the sending dashboard","step_send_request_title":"Send a pair request","step_send_request_desc":"Open Settings → Send builds on the dashboard that should build here, then pair with this build server.","step_send_request_address":"This build server:","step_accept_request_label":"Step 3 — back here","step_accept_request_title":"Review and accept","step_accept_request_desc":"Compare the fingerprint below with what the sender shows, then accept the request.","open_pairing_window":"Open pairing window","open_pairing_window_tooltip":"Lets other dashboards send pair requests to this build server until the window closes again.","request_title":"{label} wants to pair","request_review":"Review request","peers_heading":"Paired dashboards","peers_manage":"Manage","queue_heading":"Build queue","queue_active_count":"{count} active","disabled_title":"Remote builds are disabled","disabled_desc":"This install is set up as a remote build server, but the remote build listener is turned off.","disabled_cta":"Open build server settings"},"crash_report":{"banner":"This device crashed","report_button":"Report this crash","title":"Report crash - {name}","collecting":"Collecting crash details...","includes_backtrace_decoded":"Decoded backtrace captured","includes_backtrace_raw":"Backtrace captured, but it was not decoded in this session","crash_scrolled_out":"The crash output scrolled out of the log buffer","includes_log_lines":"{warnings} warning/error lines and {config} config lines included","includes_config":"Configuration included, known credentials masked","hint":"When you continue, the full report downloads first, then a pre-filled GitHub issue opens in a new tab with the crash details, config, and logs.","delivered_hint":"The full report was downloaded and a pre-filled GitHub issue opened in a new tab. Some sections were too large for the form; drag the downloaded file onto the issue\'s \\"Additional information\\" field to include everything. If the tab didn\'t open, use \\"Open GitHub issue\\" below.","download_report":"Download report","copied":"Report copied to clipboard","copy_failed":"Copying the report failed","open_issue":"Open GitHub issue","title_label":"Issue title","title_placeholder":"e.g. ESP32: crash in BLEClientBase::gattc_event_handler","title_note":"Suggested from the crash location. Sharpen it if you know more about what went wrong.","title_note_undecoded":"The crash didn\'t decode to a location we could name, so please describe what crashed.","title_required":"Give the issue a title that says what crashed; reports sharing one generic title can\'t be told apart","title_too_short":"Use at least {min} characters, so the title says what crashed rather than that something did","describe_label":"What was the device doing when it crashed?","describe_placeholder":"e.g. Pressed the garage button in Home Assistant; crashes every time a BLE device connects","describe_required":"Describe what the device was doing first; a report without context is hard to act on","describe_english":"Please write in English so the ESPHome maintainers can read your report.","banner_previous_boot":"This device crashed on a previous boot","delivered_hint_complete":"The full report was downloaded and a pre-filled GitHub issue opened in a new tab; everything fit, so nothing needs to be pasted. If the tab didn\'t open, use \\"Open GitHub issue\\" below. You can also re-download or copy the report here.","copy_report":"Copy report","download_and_open":"Download report & open GitHub issue","config_capture_failed":"The configuration could not be captured, so it is not included"},"troubleshoot":{"title":"Troubleshoot connectivity","title_device":"Troubleshoot {name} connectivity","open":"Troubleshoot","open_tooltip":"Click to troubleshoot connectivity","check_again":"Check again","checking":"Checking connectivity…","check_failed":"The connectivity check did not complete. Try again in a moment.","learn_more":"Learn more","result_dns_ok":"{address} resolves to {ips}","result_dns_fail":"{address} does not resolve from the dashboard server","result_mdns_off":"mDNS is not running on the dashboard server","result_mdns_ok":"mDNS answered with {ips}","result_mdns_silent":"No mDNS answer for this device","result_dns_inconclusive":"The DNS check did not complete; check again","result_mdns_inconclusive":"The mDNS check did not complete; check again","result_mdns_disabled":"mDNS is disabled in this configuration","result_ping_ok":"Ping reply from {target} in {rtt} ms","result_ping_ok_last_known":"Reply from the last known address {target} in {rtt} ms; not verified as this device","result_ping_fail":"No ping reply from {target}","result_ping_skipped":"Ping skipped, no reachable address is known","result_ping_probing":"Ping support is still starting up, check again shortly","result_ping_unavailable":"Ping is unavailable in this deployment","no_network_title":"This configuration has no network component","no_network_body":"It sets up no wifi, ethernet, or openthread, so the device can never be reached over the network. Add a network component in the editor and install to bring it online.","never_flashed_title":"This device may never have been installed","never_flashed_body":"The dashboard has never seen this device online; no address, version, or identity has ever been recorded. If the hardware has not been flashed with this configuration yet, connect it by USB and run the first install; the network checks below only apply after that.","untracked_title":"Status tracking is off for this configuration","untracked_body":"name_add_mac_suffix is enabled, so a device flashed from this configuration announces itself with a MAC suffix that never matches it. Only firmware that also sets dashboard_import appears in the discovered list for adoption; if that is not the case here, turn the option off and give this configuration a unique name.","deep_sleep_title":"This device uses deep sleep","deep_sleep_body":"A sleeping device does not answer on the network, so showing offline between wake windows is normal. Queued updates are delivered on the next wake.","icmp_unavailable_title":"The dashboard cannot ping devices","icmp_unavailable_body":"The server was denied an ICMP socket, so the ping fallback is off and status relies on mDNS or MQTT alone. Grant the container CAP_NET_RAW, or widen net.ipv4.ping_group_range to cover its group.","zeroconf_down_title":"mDNS is not running on the dashboard server","zeroconf_down_body":"The dashboard could not start its mDNS listener, so devices are only discovered by ping or MQTT. Check the server logs for the zeroconf startup error.","mdns_dark_title":"No mDNS traffic from this device","mdns_dark_docker_body":"The dashboard has never heard this device over mDNS. Docker bridge networking blocks multicast; run the container with host networking so mDNS can reach it. On Docker Desktop for macOS or Windows host networking is not available; use an mDNS repeater or set a manual address instead.","mdns_dark_body":"The dashboard has never heard this device over mDNS. Make sure the device and the dashboard are on the same network segment.","mdns_dark_vlan_body":"Across VLANs or subnets, multicast does not cross routers. Use an mDNS repeater such as an Avahi reflector, or give the device a fixed address below.","mdns_disabled_title":"mDNS is disabled in this configuration","mdns_disabled_body":"The configuration sets mdns: disabled, so the device never broadcasts and the dashboard cannot discover it. Remove the option and install, or give the device a manual address below.","mqtt_title":"Check the MQTT connection","mqtt_body":"This device is configured for MQTT, but the dashboard has not heard it from the broker recently. Verify the device and the dashboard point at the same broker with working credentials, and that the broker is reachable.","dns_fail_title":"The device hostname does not resolve","dns_fail_body":"{address} cannot be resolved from the dashboard server. Container images usually cannot resolve .local names; a fixed address below avoids the lookup entirely.","dynamic_ip_title":"The last known IP no longer answers","dynamic_ip_body":"The device was last seen at {ip}, which no longer answers; it probably received a new DHCP lease. Give it a DHCP reservation or a static IP in your router, or pin the address below.","unverified_ping_title":"Something answers at the last known address","unverified_ping_body":"{ip} replies to ping, but the hostname does not resolve and mDNS is silent, so the reply may come from another device that took over the address. Confirm the device is actually there before trusting the Online state.","generic_title":"Check power and network basics","generic_body":"Confirm the device has power and is on the same network as the dashboard. Power-cycling the device often recovers a stuck network stack.","use_address_title":"Set the address manually","use_address_title_device":"Set the address for {name}","use_address_body":"If the device has a fixed IP address or a DNS name, set use_address in its network configuration. The dashboard and the installer then contact that address directly instead of relying on mDNS.","use_address_set_title":"A manual address is set","use_address_set_body":"use_address pins this device to {address}; mDNS is not used to find it. If the device is no longer at this address, update or remove use_address.","result_manual_address":"Using the manually configured address {address}","use_address_ownership":"With use_address set, the dashboard always uses this address. If the device\'s address changes later, installs and logs fail until you update it here yourself, so pair it with a DHCP reservation or a static IP.","use_address_current":"use_address is set to {address}","use_address_remove":"Remove","use_address_removed":"use_address removed. The dashboard goes back to finding the device via mDNS and ping; run Check again to confirm.","use_address_label":"IP address or hostname","use_address_save":"Save","use_address_invalid":"Enter a valid IP address or hostname","use_address_error":"Saving failed. Edit the configuration in the editor instead.","back":"Back","use_address_saved":"Saved. The dashboard and installs now contact this address directly; run Check again to confirm it answers.","use_address_network_unknown":"This configuration\'s network settings come from a package or include and it has not been compiled yet, so the dashboard cannot tell which block to write. Compile or install it once, then set the address here.","use_address_no_network":"This configuration has no network component (wifi, ethernet, or openthread), so use_address does not apply.","use_address_remove_packaged":"This configuration keeps its network settings in a package or include; remove use_address from that file instead.","use_address_copy":"Copy","use_address_copied":"Copied","use_address_copy_failed":"Copying failed; select the text and copy it manually","use_address_snippet":"This configuration\'s network block cannot be edited from here. Add this line to the network block where it is defined:"}}')}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return o[e](i,i.exports,a),i.exports}a.m=o,a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},s=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,t){if(1&t&&(e=this(e)),8&t||"object"==typeof e&&e&&(4&t&&e.__esModule||16&t&&"function"==typeof e.then))return e;var i=Object.create(null);a.r(i);var o={};n=n||[null,s({}),s([]),s(s)];for(var r=2&t&&e;("object"==typeof r||"function"==typeof r)&&!~n.indexOf(r);r=s(r))Object.getOwnPropertyNames(r).forEach(t=>{o[t]=()=>e[t]});return o.default=()=>e,a.d(i,o),i},a.d=(e,t,i)=>{var o=(t,i)=>{for(var o in t)a.o(t,o)&&!a.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,[i]:t[o]})};o(t,"get"),o(i,"value")},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((t,i)=>(a.f[i](e,t),t),[])),a.u=e=>""+(545===e?"vendors":e)+"."+({16:"70a4e106a196a44a",170:"0a95e6a58f6783c9",204:"9e71e35f7f796d87",377:"cf7eba64c95f57b7",508:"9dac8def7150dfc3",545:"15351e3132852a11",57:"e771fbe8f5fc4c0a",577:"413ba4865ab075af",602:"3377f7caecba040a",658:"bfbb4f73993720ef",778:"be5afb20ddef4c5b",795:"707276f1f502691c",820:"23206f1b0e2fd64e",839:"48798448f7e34101",846:"226462cb67c4ba40",870:"2a518ff19d7db391",886:"dab7ca741c745068",945:"9dcf314922bd6a88",967:"79b76d4257be9be3",979:"bbab3ab9a82f95d8",98:"b15bee24d06c813c",990:"3abfa9ff422f3763"})[e]+".js",a.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l={},a.l=function(e,t,i,o){if(l[e])return void l[e].push(t);if(void 0!==i)for(var r,n,s=document.getElementsByTagName("script"),C=0;C<s.length;C++){var d=s[C];if(d.getAttribute("src")==e||d.getAttribute("data-rspack")=="esphome-frontend:"+i){r=d;break}}r||(n=!0,(r=document.createElement("script")).timeout=30,a.nc&&r.setAttribute("nonce",a.nc),r.setAttribute("data-rspack","esphome-frontend:"+i),r.src=e),l[e]=[t];var H=function(t,i){r.onerror=r.onload=null,clearTimeout(V);var o=l[e];if(delete l[e],r.parentNode&&r.parentNode.removeChild(r),o&&o.forEach(function(e){return e(i)}),t)return t(i)},V=setTimeout(H.bind(null,void 0,{type:"timeout",target:r}),3e4);r.onerror=H.bind(null,r.onerror),r.onload=H.bind(null,r.onload),n&&document.head.appendChild(r)},a.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},C=[],a.O=(e,t,i,o)=>{if(t){o=o||0;for(var r=C.length;r>0&&C[r-1][2]>o;r--)C[r]=C[r-1];C[r]=[t,i,o];return}for(var n=1/0,r=0;r<C.length;r++){for(var[t,i,o]=C[r],s=!0,l=0;l<t.length;l++)(!1&o||n>=o)&&Object.keys(a.O).every(e=>a.O[e](t[l]))?t.splice(l--,1):(s=!1,o<n&&(n=o));if(s){C.splice(r--,1);var d=i();void 0!==d&&(e=d)}}return e},a.F={},a.E=e=>{Object.keys(a.F).map(t=>{a.F[t](e)})},a.g.importScripts&&(d=a.g.location+"");var n,s,l,C,d,H=a.g.document;if(!d&&H&&(H.currentScript&&"SCRIPT"===H.currentScript.tagName.toUpperCase()&&(d=H.currentScript.src),!d)){var V=H.getElementsByTagName("script");if(V.length)for(var c=V.length-1;c>-1&&(!d||!/^http(s?):/.test(d));)d=V[c--].src}if(!d)throw Error("Automatic publicPath is not supported in this browser");a.p=d=d.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e={509:0},a.f.j=function(t,i){var o=a.o(e,t)?e[t]:void 0;if(0!==o)if(o)i.push(o[2]);else{var r=new Promise((i,r)=>o=e[t]=[i,r]);i.push(o[2]=r);var n=a.p+a.u(t),s=Error();a.l(n,function(i){if(a.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=i&&("load"===i.type?"missing":i.type),n=i&&i.target&&i.target.src;s.message="Loading chunk "+t+" failed.\n("+r+": "+n+")",s.name="ChunkLoadError",s.type=r,s.request=n,o[1](s)}},"chunk-"+t,t)}},a.F.j=t=>{if(!a.o(e,t)||void 0===e[t]){e[t]=null;var i=document.createElement("link");a.nc&&i.setAttribute("nonce",a.nc),i.rel="prefetch",i.as="script",i.href=a.p+a.u(t),document.head.appendChild(i)}},a.O.j=t=>0===e[t],t=(t,i)=>{var o,r,[n,s,l]=i,C=0;if(n.some(t=>0!==e[t])){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);if(l)var d=l(a)}for(t&&t(i);C<n.length;C++)r=n[C],a.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return a.O(d)},(i=globalThis.rspackChunkesphome_frontend||=[]).forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i)),a.O(0,[509],()=>{[545,945,98,170].map(a.E)},5);var L=a(5593);L=a.O(L)})();
|
|
23642
|
-
//# sourceMappingURL=app.
|
|
23642
|
+
//# sourceMappingURL=app.68fb37bca6569874.js.map
|
|
@@ -24,8 +24,8 @@ esphome_device_builder_frontend/979.bbab3ab9a82f95d8.js
|
|
|
24
24
|
esphome_device_builder_frontend/98.b15bee24d06c813c.js
|
|
25
25
|
esphome_device_builder_frontend/990.3abfa9ff422f3763.js
|
|
26
26
|
esphome_device_builder_frontend/__init__.py
|
|
27
|
-
esphome_device_builder_frontend/app.
|
|
28
|
-
esphome_device_builder_frontend/app.
|
|
27
|
+
esphome_device_builder_frontend/app.68fb37bca6569874.js
|
|
28
|
+
esphome_device_builder_frontend/app.68fb37bca6569874.js.LICENSE.txt
|
|
29
29
|
esphome_device_builder_frontend/index.html
|
|
30
30
|
esphome_device_builder_frontend/vendors.15351e3132852a11.js
|
|
31
31
|
esphome_device_builder_frontend/vendors.15351e3132852a11.js.LICENSE.txt
|
|
File without changes
|
{esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/MANIFEST.in
RENAMED
|
File without changes
|
{esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{esphome_device_builder_frontend-0.1.331 → esphome_device_builder_frontend-0.1.332}/setup.cfg
RENAMED
|
File without changes
|