From 365ed158b9f1fbae3553fafa310cfb040626fbe9 Mon Sep 17 00:00:00 2001 From: Max Gramser Date: Sat, 19 Sep 2026 16:57:35 +0200 Subject: [PATCH] The editor's mockup writes like the screens, and speaks its own language around them - Numbers in the mockup follow what the app sends the screens (style, grouping from five digits, the space before %), a state without a unit stays as it is, and built-in cards carry the screens' names (Instellingen, not the editor's Einstellungen). - Automatic in Language & region is labelled with what it means now (Home Assistant's language decides). - A screen's status (Synced, Loading tiles, ...) shows in the editor's language; the screens keep reporting it in English, which the app reads. - The doorbell example uses the alert examples of the editor's language; control labels keep their capitals. - Editor bundle rebuilt with every language's texts. Co-Authored-By: Claude Opus 5 --- screen_manager/app/i18n.py | 5 +++- screen_manager/app/server.py | 23 ++++++++++++--- .../app/static/assets/de-B5ljNtf2.js | 1 - .../app/static/assets/de-Cl47viL4.js | 1 + .../app/static/assets/es-2dmn4vz_.js | 1 + .../app/static/assets/es-DUs4hvEG.js | 1 - .../app/static/assets/fr-C0TB0UkD.js | 1 - .../app/static/assets/fr-hu4FKHEL.js | 1 + .../app/static/assets/index-BtUedJUv.js | 28 ------------------- .../app/static/assets/index-CRR4xeFy.js | 28 +++++++++++++++++++ .../app/static/assets/it-OWvw4Kib.js | 1 - .../app/static/assets/it-XNNJYTR_.js | 1 + .../app/static/assets/nl-CwiIFXXi.js | 1 + .../app/static/assets/nl-DV7drWRf.js | 1 - .../app/static/assets/pl-CGqJEGr1.js | 1 - .../app/static/assets/pl-CMPJmoaL.js | 1 + .../app/static/assets/pt-Brrep2mC.js | 1 + .../app/static/assets/pt-Brv5sHYu.js | 1 - screen_manager/app/static/index.html | 2 +- screen_manager/translations/de.json | 14 +++++++++- screen_manager/translations/en.json | 14 +++++++++- screen_manager/translations/es.json | 14 +++++++++- screen_manager/translations/fr.json | 14 +++++++++- screen_manager/translations/it.json | 14 +++++++++- screen_manager/translations/nl.json | 14 +++++++++- screen_manager/translations/pl.json | 14 +++++++++- screen_manager/translations/pt.json | 14 +++++++++- tests/test_language_region.py | 3 ++ web/src/components/AlertsView.vue | 12 ++++---- web/src/components/AppSettingsView.vue | 6 ++-- web/src/components/TileCard.vue | 17 +++++++---- web/src/model/layout.ts | 3 +- web/src/store.ts | 25 +++++++++++++---- web/src/types.ts | 6 +++- web/tests/i18n.spec.ts | 3 +- web/tests/language.spec.ts | 1 + web/tests/layout.spec.ts | 2 +- 37 files changed, 217 insertions(+), 73 deletions(-) delete mode 100644 screen_manager/app/static/assets/de-B5ljNtf2.js create mode 100644 screen_manager/app/static/assets/de-Cl47viL4.js create mode 100644 screen_manager/app/static/assets/es-2dmn4vz_.js delete mode 100644 screen_manager/app/static/assets/es-DUs4hvEG.js delete mode 100644 screen_manager/app/static/assets/fr-C0TB0UkD.js create mode 100644 screen_manager/app/static/assets/fr-hu4FKHEL.js delete mode 100644 screen_manager/app/static/assets/index-BtUedJUv.js create mode 100644 screen_manager/app/static/assets/index-CRR4xeFy.js delete mode 100644 screen_manager/app/static/assets/it-OWvw4Kib.js create mode 100644 screen_manager/app/static/assets/it-XNNJYTR_.js create mode 100644 screen_manager/app/static/assets/nl-CwiIFXXi.js delete mode 100644 screen_manager/app/static/assets/nl-DV7drWRf.js delete mode 100644 screen_manager/app/static/assets/pl-CGqJEGr1.js create mode 100644 screen_manager/app/static/assets/pl-CMPJmoaL.js create mode 100644 screen_manager/app/static/assets/pt-Brrep2mC.js delete mode 100644 screen_manager/app/static/assets/pt-Brv5sHYu.js diff --git a/screen_manager/app/i18n.py b/screen_manager/app/i18n.py index 956a40b..11ee940 100644 --- a/screen_manager/app/i18n.py +++ b/screen_manager/app/i18n.py @@ -344,7 +344,10 @@ class Region: 'ha': self.ha_language(), 'languages': self.tr.languages(), 'clock': self.clock, 'clock_effective': '24' if self.clock_24h() else '12', 'numbers': self.numbers, 'numbers_effective': self.number_style(), - 'group_min': self.group_min(), 'percent_space': self.percent_space()} + 'group_min': self.group_min(), 'percent_space': self.percent_space(), + # What Automatic means now, for its label: the clock and the numbers of the language. + 'clock_auto': '12' if self.written().get('clock') == '12' else '24', + 'numbers_auto': self.written().get('numbers', 'point'), 'group_min_auto': int(self.written().get('group_min', 1))} diff --git a/screen_manager/app/server.py b/screen_manager/app/server.py index 412c2bb..6617f67 100644 --- a/screen_manager/app/server.py +++ b/screen_manager/app/server.py @@ -53,6 +53,20 @@ RESEND_STATES = frozenset({ 'Klaar voor tegelconfiguratie', 'Indeling opnieuw nodig', 'Tegels laden', }) RESEND_GUARD_SECONDS = 120 +# What a screen reports stays English, the app reads it (protocol); the editor shows it in its own language (app 0.2.90). +SCREEN_STATUS_WORDS = {'Synced': 'synced', 'Loading tiles': 'loading_tiles', 'Layout received': 'layout_received', + 'Resend needed': 'resend_needed', 'Ready for tile configuration': 'ready'} + + +def status_text(status): + """A screen's status for the editor: its protocol words in the editor's language, ours as they were made.""" + status = shown(status) + if isinstance(status, str) and not isinstance(status, i18n.Text): + if status in SCREEN_STATUS_WORDS: + return t(f'addon.status.screen.{SCREEN_STATUS_WORDS[status]}') + if status.startswith('Error: '): + return t('addon.status.screen.error', reason=status[len('Error: '):]) + return status FORECAST_SECONDS = 1800 # A screen that answers its ping (firmware 0.2.49+) is asked with this timeout, so a busy screen never holds # up the others. An answer that the screen lacks something repeats everything, after this many seconds right @@ -1794,7 +1808,7 @@ def create_app(manager, development=False): # The delivery and our own word for a screen that reports nothing, in the editor's language (app 0.2.90). status = manager.status.get(screen['id']) screen['delivery'] = shown(status) if status else t('addon.status.first_tiles') - screen['status'] = shown(screen.get('status')) + screen['status'] = status_text(screen.get('status')) screen['update'] = manager.updates.state_for(screen, profiles) screen['alert_action'] = alert_service(screen.get('node')) screen['dismiss_action'] = alert_service(screen.get('node'), 'dismiss_alert') @@ -1822,8 +1836,9 @@ def create_app(manager, development=False): # What's new for the Update badge: here only, not in every live update (app 0.2.78). payload['changelog'] = manager.updates.changelog payload['claude_skill'] = claude_skill.status(manager.skill_dir) - payload['builtin'] = [{'id': key, 'name': builtin_name(key, t), 'device': t('addon.labels.built_into_screen'), 'area': '', 'state': 'ok'} - for key in BUILTIN] + # The name in the editor's language for the library, and as the screens show it for the mockup (app 0.2.90). + payload['builtin'] = [{'id': key, 'name': builtin_name(key, t), 'screen_name': builtin_name(key), + 'device': t('addon.labels.built_into_screen'), 'area': '', 'state': 'ok'} for key in BUILTIN] payload['header'] = {**header_bar.catalogue(), 'suggestions': { screen['id']: header_bar.suggestions(screen, entities, manager.ha.states, manager.registry_index()) for screen in payload['screens']}} return web.json_response(payload) @@ -1920,7 +1935,7 @@ def create_app(manager, development=False): inbox=manager.aliases.get(request.match_info['inbox'], request.match_info['inbox']) if screen is None: raise ValueError(t('addon.errors.unknown_screen')) layout=manager.layouts.get(inbox,{'tiles':[]}) - return web.json_response({'screen':{**screen, 'status':shown(screen.get('status'))}, + return web.json_response({'screen':{**screen, 'status':status_text(screen.get('status'))}, 'delivery':shown(manager.status.get(inbox)), 'layout':layout, 'tiles':[{'entity':t['entity'],'state':manager.ha.states.get(t['entity'],{}).get('state'), # Home Assistant's word for the state, as its own pages show it ("Heat/Cool", app 0.2.67). diff --git a/screen_manager/app/static/assets/de-B5ljNtf2.js b/screen_manager/app/static/assets/de-B5ljNtf2.js deleted file mode 100644 index 2ad105f..0000000 --- a/screen_manager/app/static/assets/de-B5ljNtf2.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ein"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Nicht verfügbar"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heizbetrieb"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Kühlbetrieb"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heizen/Kühlen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Entfeuchtung"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Nur Lüftung"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heizbetrieb"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Kühlbetrieb"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Leerlauf"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Entfeuchtung"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Lüftung"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Vorheizen"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Enteisung"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Wird geöffnet"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Wird geschlossen"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Wiedergabe"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausiert"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Leerlauf"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Zuhause"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Abwesend"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Über dem Horizont"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Unter dem Horizont"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Angedockt"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Reinigt"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausiert"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Rückkehr zur Ladestation"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Leerlauf"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sonnig"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Klare Nacht"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Bewölkt"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Teilweise bewölkt"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Regnerisch"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Strömender Regen"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Schneefall"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Schneeregen"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebel"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hagel"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Gewitter"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Gewitter, regnerisch"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windig"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Außergewöhnlich"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Niedrig"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Wird geladen"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Wird nicht geladen"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Kalt"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Verbunden"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Getrennt"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Heiß"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Licht erkannt"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Kein Licht"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Aufgeschlossen"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Abgeschlossen"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Nass"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Trocken"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Bewegt sich"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Bewegt sich nicht"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Eingesteckt"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausgesteckt"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Ein"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Zuhause"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Abwesend"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In Betrieb"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Außer Betrieb"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsicher"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicher"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Manipulation erkannt"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update verfügbar"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aktuell"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktivieren"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Ausführen"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Drücken"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Gerade eben"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Min."}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Stunde"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Stunden"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Gestern"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Tag"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Tagen"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Woche"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Wochen"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Monat"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Monaten"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Jahr"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Jahren"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" Min."}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 Stunde"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" Stunden"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Morgen"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 Tag"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" Tagen"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sonntag"}},{t:0,b:{t:2,i:[{t:3}],s:"Montag"}},{t:0,b:{t:2,i:[{t:3}],s:"Dienstag"}},{t:0,b:{t:2,i:[{t:3}],s:"Mittwoch"}},{t:0,b:{t:2,i:[{t:3}],s:"Donnerstag"}},{t:0,b:{t:2,i:[{t:3}],s:"Freitag"}},{t:0,b:{t:2,i:[{t:3}],s:"Samstag"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"So"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Di"}},{t:0,b:{t:2,i:[{t:3}],s:"Mi"}},{t:0,b:{t:2,i:[{t:3}],s:"Do"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"So"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Di"}},{t:0,b:{t:2,i:[{t:3}],s:"Mi"}},{t:0,b:{t:2,i:[{t:3}],s:"Do"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"Januar"}},{t:0,b:{t:2,i:[{t:3}],s:"Februar"}},{t:0,b:{t:2,i:[{t:3}],s:"März"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"Mai"}},{t:0,b:{t:2,i:[{t:3}],s:"Juni"}},{t:0,b:{t:2,i:[{t:3}],s:"Juli"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"Oktober"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"Dezember"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan."}},{t:0,b:{t:2,i:[{t:3}],s:"Feb."}},{t:0,b:{t:2,i:[{t:3}],s:"März"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr."}},{t:0,b:{t:2,i:[{t:3}],s:"Mai"}},{t:0,b:{t:2,i:[{t:3}],s:"Juni"}},{t:0,b:{t:2,i:[{t:3}],s:"Juli"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug."}},{t:0,b:{t:2,i:[{t:3}],s:"Sept."}},{t:0,b:{t:2,i:[{t:3}],s:"Okt."}},{t:0,b:{t:2,i:[{t:3}],s:"Nov."}},{t:0,b:{t:2,i:[{t:3}],s:"Dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:". "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:". "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:". "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Seite "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/de-Cl47viL4.js b/screen_manager/app/static/assets/de-Cl47viL4.js new file mode 100644 index 0000000..483e4cc --- /dev/null +++ b/screen_manager/app/static/assets/de-Cl47viL4.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Rückgängig"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"unbekannt"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Nicht gespeicherte Änderungen"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Abbrechen"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Geräte & Dienste öffnen"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Speichern & senden"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Wird gespeichert…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Aktuelle Daten abrufen"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 Ergebnis. Tippe weiter, um die Suche einzugrenzen."},{t:2,i:[{t:4,k:"n"},{t:3,v:" Ergebnisse. Tippe weiter, um die Suche einzugrenzen."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Schließen"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Entfernen"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Ändern"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Wird geladen…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Zurück"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopieren"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Neuer Bildschirm"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Meldungen"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Einstellungen"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Verbinden und installieren"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Das hat nicht geklappt. Lade die Seite neu und versuche es noch einmal."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API-Schlüssel kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API-Schlüssel ist markiert. Kopiere ihn mit Ctrl+C oder Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Layout-JSON kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Layout-JSON ist markiert. Kopiere es mit Ctrl+C oder Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Aktionsname kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Aktionsname ist markiert. Kopiere ihn mit Ctrl+C oder Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML ist markiert. Kopiere es mit Ctrl+C oder Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Symbolname kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Symbolname ist markiert. Kopiere ihn mit Ctrl+C oder Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Leerer Farbwert kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Leerer Farbwert ist markiert. Kopiere ihn mit Ctrl+C oder Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Farbname kopiert."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Farbname ist markiert. Kopiere ihn mit Ctrl+C oder Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Verwaltungsseite nicht erreichbar · neuer Versuch…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant verbunden"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Verbinde erneut mit Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Suchen"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirme"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mehr"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Neu laden"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktualisieren"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Für das Update vorgemerkt"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Kein ESPHome-Profil mit diesem Gerätenamen gefunden."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Was ist neu"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Ganzes Protokoll"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Gib einmal die IP-Adresse ein; neue Firmware meldet sie selbst."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP-Adresse, z. B. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP-Adresse"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Starten"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installiert, aber noch nicht in Home Assistant. Füge das entdeckte ESPHome-Gerät unter Einstellungen → Geräte & Dienste hinzu, gib dort den API-Schlüssel ein und aktiviere unter „Konfigurieren“ die Option „Dem Gerät erlauben, Home Assistant-Aktionen auszuführen“."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware heruntergeladen, noch nicht in Home Assistant. Spiele sie mit ESPHome Web auf den Bildschirm, füge dann das entdeckte ESPHome-Gerät unter Einstellungen → Geräte & Dienste hinzu, gib dort den API-Schlüssel ein und erlaube unter „Konfigurieren“ die Home Assistant-Aktionen."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Noch nicht in Home Assistant. Schon geflasht? Füge das ESPHome-Gerät unter Einstellungen → Geräte & Dienste hinzu und erlaube dann unter „Konfigurieren“ die Home Assistant-Aktionen. Noch nicht geflasht? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-Schlüssel kopieren"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirme"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Aktionen"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Zu diesem Bildschirm hinzufügen"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Spickzettel und eine Testmeldung"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nichts zu speichern"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Diesen Bildschirm identifizieren"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Lässt die Hintergrundbeleuchtung blinken und zeigt eine Karte"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Braucht eine neuere Firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Layout exportieren"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Als JSON herunterladen und kopieren"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirme, Entitäten, Aktionen suchen…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nichts gefunden. Gib einen Teil eines Bildschirm-, Entitäts- oder Aktionsnamens ein."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wähle einen Bildschirm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Wähle links einen deiner Bildschirme, um seine Kacheln, Kopfleiste und Einstellungen zu ändern."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Starte mit einem Bildschirm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Schließe ein CYD oder Guition per USB an deinen Home Assistant-Rechner an. Profil, Firmware und das erste Flashen laufen in einem Rutsch."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Neuen Bildschirm installieren"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Du hast nicht gespeicherte Änderungen. Trotzdem einen anderen Bildschirm öffnen?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Das nicht gespeicherte Layout durch eine Kopie vom anderen Bildschirm ersetzen?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Das nicht gespeicherte Layout durch das importierte ersetzen?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert. Dein Bildschirm wird aktualisiert."}},other:{t:0,b:{t:2,i:[{t:3,v:"Gespeichert. "},{t:4,k:"name"},{t:3,v:" wird aktualisiert."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert. Der Bildschirm wird aktualisiert."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert. Deine neueste Änderung ist noch nicht gesendet: Drücke noch einmal auf „Speichern & senden“."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" blinkt und zeigt ein paar Sekunden lang eine Karte."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · Änderungen werden gespeichert"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirmeinstellungen"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert · gesendet"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Alles gespeichert"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mehr"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifizieren"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm blinken lassen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Braucht Firmware 0.2.31 oder neuer"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"aus Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Layout kopieren von…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" Bildschirm"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" Bildschirme"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"kein anderer Bildschirm"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" Kachel"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" Kacheln"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Layout exportieren"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Layout importieren…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML-Anpassung"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"erweitert"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Kein ESPHome-Profil für diesen Bildschirm gefunden"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Firmware aktualisieren"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" entfernt"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Auf Seite "},{t:4,k:"page"},{t:3,v:" ist kein Platz für diese Kachel."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Keine Seite ist frei für eine ganzseitige Kachel. Mach zuerst eine Seite frei."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Dieser Bildschirm hat schon eine Kachel, die zu Seite "},{t:4,k:"page"},{t:3,v:" führt."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout von "},{t:4,k:"name"},{t:3,v:" kopiert. Drücke „Speichern & senden“, wenn alles passt."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout von "},{t:4,k:"name"},{t:3,v:" kopiert: "},{t:4,k:"kept"},{t:3,v:" von "},{t:4,k:"total"},{t:3,v:" Kacheln passen zur Firmware dieses Bildschirms. Drücke „Speichern & senden“, wenn alles passt."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout importiert. Drücke „Speichern & senden“, wenn alles passt."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout importiert: "},{t:4,k:"kept"},{t:3,v:" von "},{t:4,k:"total"},{t:3,v:" Kacheln passen zur Firmware dieses Bildschirms. Drücke „Speichern & senden“, wenn alles passt."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Das ist kein JSON. Exportiere zuerst ein Layout oder füge eines aus einer anderen ESP Screens-Installation ein."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Keine Kacheln in dieser Datei. Erwartet wird ein aus ESP Screens exportiertes Layout."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" Seite · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" Kacheln"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" Seiten · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" Kacheln"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Füge aus der Bibliothek deine erste Leuchte, Szene oder dein erstes Gerät hinzu."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tippe auf die Kopfleiste oder eine Kachel, um sie zu ändern. Ziehen verschiebt; Ablegen auf der nächsten Seite legt eine neue an."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Freie Plätze und feste Positionen funktionieren ab Firmware 0.2.26. Bis zu diesem Update rückt dieser Bildschirm (Firmware "},{t:4,k:"firmware"},{t:3,v:") die Kacheln auf den ersten freien Platz vor."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm-Layout"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Seite hinzufügen"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Höchstens 1 Seite"},{t:2,i:[{t:3,v:"Höchstens "},{t:4,k:"n"},{t:3,v:" Seiten"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Seite "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Seite entfernen"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Die folgenden Seiten rücken um eine Stelle nach vorn"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Kopfleiste bearbeiten"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Freier Platz. Klicke, um hier eine Kachel hinzuzufügen, oder ziehe eine hierher."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Freier Platz "},{t:4,k:"slot"},{t:3,v:" auf Seite "},{t:4,k:"page"},{t:3,v:": nächste Kachel hier hinzufügen"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Nächste Kachel kommt hierhin"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Leer"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bibliothek"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" Entität"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" Entitäten"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Nach Name, Gerät oder Bereich suchen…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Entität hinzufügen"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Alle"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Leuchten"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klima"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schalter"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktionen"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skripte"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatoren"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Abdeckungen"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Szenen"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Staubsauger"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensoren"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Medien"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Wetter"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Werte"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Auswahl"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personen"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Bereich"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Alle Bereiche"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Platzierte ausblenden"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ausblenden, was schon auf diesem Bildschirm ist"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Alles hier ist schon auf diesem Bildschirm."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Keine Entitäten gefunden. Versuche einen anderen Namen, Bereich oder Filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Dieser Bildschirm fasst 1 Kachel."},{t:2,i:[{t:3,v:"Dieser Bildschirm fasst "},{t:4,k:"n"},{t:3,v:" Kacheln."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Dieser Bildschirm fasst 1 Kachel; mit einem Firmware-Update sind es 48."},{t:2,i:[{t:3,v:"Dieser Bildschirm fasst "},{t:4,k:"n"},{t:3,v:" Kacheln; mit einem Firmware-Update sind es 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Ziehe eine Entität auf eine Seite oder tippe auf +, um sie auf den ersten freien Platz zu setzen. ⌘K durchsucht alles."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Leuchte"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klima"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Staubsauger"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Abdeckung"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Medien"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schalter"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Schalter"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Szene"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skript"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Wetter"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wert"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Wert"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Auswahl"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Auswahl"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktion"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Aktion"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sonne"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Person"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Kamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Bild"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entität"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"Standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"großer Wert"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Wettervorhersage"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Diagramm"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digitaluhr"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analoguhr"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sonnenbahn"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doppelt"}},full:{t:0,b:{t:2,i:[{t:3}],s:"ganze Seite"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Name auf dem Bildschirm"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (aus Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (Standard)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ein gewähltes Symbol zeigt der Bildschirm ab Firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Führt zu Seite"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (leer)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigationskacheln brauchen Firmware 0.2.62: Drücke zuerst beim Bildschirm auf „Aktualisieren“."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Dieser Bildschirm hat keine Seite "},{t:4,k:"page"},{t:3,v:", daher öffnet ein Tippen seine letzte Seite. Wähle eine andere Seite."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Ein Tippen auf die Kachel öffnet diese Seite."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Anzeige"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digitaluhr"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analoguhr"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Name und Status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Großer Wert"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Wettervorhersage"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Diagramm"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sonnenbahn"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant hat für diese Entität keine Zahlen, daher bleibt das Diagramm leer. Wähle eine andere Anzeige."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Dieser Wetterdienst hat in Home Assistant keine Tagesvorhersage. Wähle eine andere Anzeige."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Größe"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Doppelt breit"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Ganze Seite"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Ganze Seite: eine große Taste, die im eingeschalteten Zustand leuchtet; am unteren Rand sitzen ein Schieberegler, Bedienelemente oder ein Diagramm."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Eine ganzseitige Kachel braucht Firmware 0.2.62: Drücke zuerst beim Bildschirm auf „Aktualisieren“."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Seite"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Neue Seite"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Direkte Steuerung auf der Kachel"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant bietet diese Steuerung für diese Entität nicht an, daher bleibt sie auf dem Bildschirm leer. Wähle eine andere."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Am unteren Rand der ganzseitigen Kachel; ein Tippen woanders wirkt wie unten eingestellt."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Rechts auf der doppelt breiten Kachel, wie die Zeilen in Home Assistant. Ein Tippen auf den Namen wirkt wie unten eingestellt."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Der Bildschirm zeigt die direkte Steuerung ab Firmware 0.2.19; bis dahin bleibt die Kachel, wie sie war."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Beim Tippen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Steuerung öffnen"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nur anzeigen"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Ein / Aus"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Aktion ausführen"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant kann dies nicht ein- und ausschalten, daher bewirkt ein Tippen nichts. Wähle eine andere Option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ab Firmware 0.2.58 schaltet der Bildschirm das ein und aus: Drücke beim Bildschirm auf „Aktualisieren“. Bis dahin öffnet ein Tippen die Karte."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Halte die Kachel gedrückt, um ihre Karte zu öffnen."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Kleiner Schieberegler auf der Kachel"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nein"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Ja, direkt steuern"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant hat für diese Entität nichts, was ein Schieberegler ändern kann. Wähle „Nein“."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Verlauf"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" Stunde"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" Stunden"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastellhintergrund"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Hintergrund: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", Platz "},{t:4,k:"slot"},{t:3,v:" auf Seite "},{t:4,k:"page"},{t:3,v:". Enter: einstellen, Pfeiltasten: verschieben"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Kachel entfernen"}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" entfernen"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Aktion"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Frage Home Assistant, welche Aktionen diese Entität hat…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant antwortet gerade nicht. Versuche es gleich noch einmal."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wähle eine Aktion"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Suchen, z. B. umschalten, Position oder wiedergeben"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Aktion suchen"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Keine Aktion gefunden."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant bietet diese Aktion für diese Entität nicht mehr an, daher bewirkt ein Tippen nichts. Wähle eine andere."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Nicht gesetzt"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ein"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant braucht "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Der Bildschirm führt Aktionen ab Firmware 0.2.58 aus: Drücke beim Bildschirm auf „Aktualisieren“. Bis dahin wirkt ein Tippen wie „Automatisch“."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Symbol"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Kein Symbol"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Suchen, z. B. Lampe, Musik oder Tür"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Symbol suchen"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Kein Symbol, nur Text"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Symbol: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Kein Symbol gefunden."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Aktuelle Daten"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Verbindung, Status und unterstützte Eigenschaften"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Wird abgerufen…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Aktueller HA-Status wird abgerufen…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Kleiner Schieberegler: "},{t:4,k:"slider"},{t:3,v:" · Anzeige: "},{t:4,k:"display"},{t:3,v:" · Größe: "},{t:4,k:"size"},{t:3,v:" · Steuerung: "},{t:4,k:"control"},{t:3,v:" · Hintergrund: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"ja"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nein"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"keine"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Standard"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Erneut abrufen"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" aus der Kopfleiste entfernt"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In der Kopfleiste ist Platz für 1 Element."},{t:2,i:[{t:3,v:"In der Kopfleiste ist Platz für "},{t:4,k:"n"},{t:3,v:" Elemente."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Das ist schon in der Kopfleiste."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Kopfleiste"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Kopfleiste: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Vom Bildschirm selbst, funktioniert auch ohne Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" von "},{t:4,k:"n"},{t:3,v:" Element"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" von "},{t:4,k:"n"},{t:3,v:" Elementen"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Links: Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Zum Beispiel: Wohnzimmer"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Rechts: Uhrzeit, Sensoren oder eine Uhr"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", Platz "},{t:4,k:"slot"},{t:3,v:". Enter: einstellen, Pfeile: verschieben"}]}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" aus der Kopfleiste entfernen"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Höchstens 1 Element"},{t:2,i:[{t:3,v:"Höchstens "},{t:4,k:"n"},{t:3,v:" Elemente"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Uhrzeit, Datum, Analoguhr oder eine Entität hinzufügen"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Uhrzeit, Datum oder Entität hinzufügen"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nicht alles passt neben den Namen: Der Bildschirm lässt die gestrichelten Elemente weg. Entferne eines oder wähle einen kürzeren Namen."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Zum Umsortieren ziehen; zum Einstellen auf ein Element tippen."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensoren, Datum und Analoguhr erscheinen ab Firmware "},{t:4,k:"version"},{t:3,v:"; bis zu diesem Update zeigt dieser Bildschirm den Namen und, falls die Uhrzeit in der Leiste ist, die Uhr."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Ausgeblendet: gerade nicht aktiv"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Passt nicht neben den Namen"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Zifferblatt"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Gerade ausgeblendet: nicht aktiv"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Passt gerade nicht neben den Namen"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"So sieht es auf dem Bildschirm aus"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Kleines Zifferblatt mit der Uhrzeit"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Inhalt"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Zuletzt geändert“ zählt auf dem Bildschirm selbst weiter: „Gerade eben“, „Vor 5 Min.“, „Gestern“."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (wie Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Anzeigen"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Nur wenn aktiv“ blendet das Element aus, solange es aus, geschlossen, abwesend oder 0 ist. Praktisch für eine offene Tür, eine laufende Waschmaschine oder wer zu Hause ist."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24-Stunden-Uhr · ändern unter "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12-Stunden-Uhr · ändern unter "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Einstellungen → Sprache & Region"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Heute: "},{t:4,k:"date"},{t:3,v:". Das Datum folgt der eigenen Uhr des Bildschirms."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Nach oben"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Nach unten"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Zur Kopfleiste hinzufügen"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" von "},{t:4,k:"n"},{t:3,v:" Platz belegt"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" von "},{t:4,k:"n"},{t:3,v:" Plätzen belegt"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Vom Bildschirm selbst"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Schon hinzugefügt"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Vorschläge aus Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Eine Entität"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Nach Name, Bereich oder Entität suchen, z. B. Temperatur oder Tür"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Entität für die Kopfleiste suchen"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Keine Entitäten gefunden."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helligkeit"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Nacht"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helligkeit"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Dunkler Modus"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto-Standby"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby nach"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helligkeit Standby"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Nachtmodus"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Beginnt"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Endet"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helligkeit nachts"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Zurück zu Seite 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Nach"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Auch im Standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Zwischen Seiten wischen"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Seitentasten"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Drehung"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" Sek."}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" Min."}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" Std."}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" Std. "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Die Einstellungen des anderen Bildschirms werden noch gespeichert. Versuche es gleich noch einmal."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Seitentasten und Wischen sind aus, daher wechseln nur Navigationskacheln die Seite."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Seite "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"den Seiten "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Du hast "},{t:4,k:"n"},{t:3,v:" Navigationskachel zu "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Du hast "},{t:4,k:"n"},{t:3,v:" Navigationskacheln zu "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Du hast "},{t:4,k:"n"},{t:3,v:" Navigationskachel zu "},{t:4,k:"targets"},{t:3,v:", aber keine zu "},{t:4,k:"missing"},{t:3,v:", daher erreichst du sie nicht."}]},{t:2,i:[{t:3,v:"Du hast "},{t:4,k:"n"},{t:3,v:" Navigationskacheln zu "},{t:4,k:"targets"},{t:3,v:", aber keine zu "},{t:4,k:"missing"},{t:3,v:", daher erreichst du sie nicht."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Du hast "},{t:4,k:"n"},{t:3,v:" Navigationskachel zu "},{t:4,k:"targets"},{t:3,v:", aber keine zu "},{t:4,k:"missing"},{t:3,v:", daher erreichst du sie nicht."}]},{t:2,i:[{t:3,v:"Du hast "},{t:4,k:"n"},{t:3,v:" Navigationskacheln zu "},{t:4,k:"targets"},{t:3,v:", aber keine zu "},{t:4,k:"missing"},{t:3,v:", daher erreichst du sie nicht."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Du hast keine Navigationskacheln."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Du hast keine Navigationskacheln zu "},{t:4,k:"missing"},{t:3,v:", daher erreichst du sie nicht."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Du hast keine Navigationskacheln zu "},{t:4,k:"missing"},{t:3,v:", daher erreichst du sie nicht."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Die Kacheln zu "},{t:4,k:"pages"},{t:3,v:" liegen nur auf Seiten, die du nicht erreichst."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Von "},{t:4,k:"pages"},{t:3,v:" führt keine Kachel zurück zu Seite 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Dieser Bildschirm ist offline. Seine Einstellungen lassen sich ändern, sobald er wieder da ist."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Änderungen gelten sofort auf dem Bildschirm und erscheinen hier, wenn sie dort geändert werden."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Änderungen gelten sofort. Ab Firmware 0.2.49 speichert der Bildschirm sie selbst."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Diese Entität ist in Home Assistant deaktiviert, oder der Bildschirm startet neu."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verringern"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" erhöhen"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Update wird gestartet…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware wird erstellt…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Firmware wird per Wi-Fi übertragen…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Wird erstellt und installiert…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Warte, bis der Bildschirm wieder da ist…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Prüfe, ob er stabil bleibt…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Neue Sprache: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Die Bildschirme aktualisieren sich jetzt nachts automatisch."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatische Updates sind aus."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware-Updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aktualisiere auf Firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Noch kein Bildschirm gekoppelt. Neue Bildschirme bekommen Firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" ist für "},{t:4,k:"n"},{t:3,v:" Bildschirm verfügbar."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" ist für "},{t:4,k:"n"},{t:3,v:" Bildschirme verfügbar."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Alle Bildschirme haben Firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 Bildschirm aktualisieren"},{t:2,i:[{t:3,v:"Alle "},{t:4,k:"n"},{t:3,v:" Bildschirme aktualisieren"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Neu in Firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Jede Nacht automatisch aktualisieren"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Zwischen 03:00 und 06:00 Uhr, ein Bildschirm nach dem anderen. Stoppt bei einem Fehler und meldet ihn in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installiert. Claude Code nutzt ihn sofort."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installiert. Starte Claude Code einmal neu, damit es den neuen Skills-Ordner findet."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Bring Claude ESP Screens bei und frag dann: „Zeig eine Meldung auf allen meinen Bildschirmen, wenn der Briefkasten voll ist.“ Claude kennt die Meldungs-Ereignisse und jedes Feld, jede Farbe und jedes Symbol."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Für Claude Code installieren"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Erneut installieren"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Skill aktualisieren"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Nicht installiert"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installiert"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installiert · eine neuere Version ist bereit"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Für Claude Code in Home Assistant. Schreibt eine Datei nach "},{t:4,k:"path"},{t:3,v:"; erneutes Installieren ersetzt sie."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Für claude.ai herunterladen"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Lade die ZIP-Datei in Claude unter Anpassen → Skills hoch."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Alles rund um deine Bildschirme."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Meine Bildschirme"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirme"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Füge einen Bildschirm hinzu oder erstelle und installiere die Firmware eines vorhandenen neu."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Per USB oder Wi-Fi erstellen und installieren"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Sprache & Region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirmsprache"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Sprache von Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Sprache von Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Die Bildschirme zeigen Englisch, bis die Sprache von Home Assistant verfügbar ist."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · noch nicht geprüft, Hilfe willkommen"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" ist noch nicht geprüft, Hilfe ist willkommen: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"Anleitung zum Übersetzen"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Nach einer Änderung braucht jeder Bildschirm ein eigenes Firmware-Update: über seine Schaltfläche „Aktualisieren“ oder mit den nächtlichen Updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Uhrzeitformat"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, folgt der Sprache ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 Stunden"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 Stunden"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Zahlenformat"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, folgt der Sprache ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Dein Home Assistant-Profil: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Diese verwenden"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"Der Editor selbst folgt der Sprache deines Home Assistant-Profils."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert. Jeder Bildschirm übernimmt die neue Sprache mit seinem nächsten Update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Eine Karte über den ganzen Bildschirm, ausgelöst von einer Automation, auf einem Bildschirm oder auf allen. Der Spickzettel enthält die Aktionsnamen, Felder, Symbole und Farben und ein Formular zum Ausprobieren."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Vollbild-Benachrichtigungen aus einer Automation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm-Firmware erstellen und installieren"}},intro:{t:0,b:{t:2,i:[{t:3,v:"Die eingebaute ESPHome CLI nutzt dein eigenes Profil (YAML mit Schlüsseln) und deine Secrets. Wähle das Profil des Bildschirms, dann einen USB-Port (Bildschirm am Home Assistant-Rechner angeschlossen), "},{t:4,k:"ota"},{t:3,v:" mit dem Hostnamen oder "},{t:4,k:"download"},{t:3,v:", um die Firmware von deinem eigenen Computer aus auf den Bildschirm zu spielen. "},{t:4,k:"check"},{t:3,v:" validiert nur, "},{t:4,k:"build"},{t:3,v:" kompiliert, "},{t:4,k:"install"},{t:3,v:" spielt die Firmware auf den Bildschirm. Deine Kacheln bleiben in ESP Screens, wie sie sind. Das erste Erstellen dauert ein paar Minuten."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Prüfen"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Nur erstellen"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Erstellen & installieren"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Erstellen & herunterladen"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Die ESPHome CLI fehlt. Aktualisiere die App auf 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wähle das gewünschte Profil, dann einen USB-Port, eine IP-Adresse oder „Download“."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome-Profil"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installieren auf"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · noch kein Board am Home Assistant-Rechner gefunden"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Download · von deinem eigenen Computer flashen"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP-Adresse oder Hostname"}},download_file:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" herunterladen"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Spiele sie mit "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome oder Edge auf den Bildschirm: „Connect“ klicken, den USB-Port des Bildschirms wählen, „Install“ klicken und diese Datei auswählen. Sie enthält dein Wi-Fi-Passwort und die Schlüssel des Bildschirms: Behalte sie für dich."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Verbinden und installieren."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil gespeichert."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Einen Moment…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Bereit zum Herunterladen."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fertig."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Das hat nicht geklappt."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens legt das eigene Profil des Bildschirms mit eindeutigen Schlüsseln an und erstellt die Firmware. Schließe den Bildschirm mit einem USB-Datenkabel an den Rechner an, auf dem Home Assistant läuft, oder lade die Firmware herunter und spiele sie von deinem eigenen Computer aus auf den Bildschirm."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Welchen Bildschirm hast du?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 Zoll"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 Zoll"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm Wohnzimmer"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Gerätename"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"anpassen"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Jeder Bildschirm bekommt ein eigenes Profil mit eigenen Schlüsseln. Vier Bildschirme? Dann das Ganze viermal, mit je einem anderen Namen."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Kleinbuchstaben, Ziffern und Bindestriche. Für jeden Bildschirm ein anderer Name."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-Name (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-Passwort"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Einmal ausfüllen: ESP Screens speichert das in der secrets.yaml von ESPHome, weitere Bildschirme nutzen es automatisch."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"In deiner secrets.yaml von ESPHome fehlen noch Wi-Fi-Angaben. ESP Screens ergänzt nur die fehlenden Zeilen."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Die Wi-Fi-Daten kommen aus deiner secrets.yaml von ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Die secrets.yaml im ESPHome-Ordner ist kein gültiges YAML. Korrigiere zuerst die Datei; sie wird nicht überschrieben."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installieren über"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Später · nur Profil speichern"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Schließe den Bildschirm mit einem USB-Datenkabel an den Home Assistant-Rechner an; die Liste aktualisiert sich von selbst. Oder wähle „Download“, um deinen eigenen Computer zu nutzen."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Lade die Firmware herunter und spiele sie in Chrome oder Edge von deinem eigenen Computer aus auf den Bildschirm. Danach laufen Updates über Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Das Profil kommt in den ESPHome-Ordner. Installieren kannst du später über Firmware & USB oder im ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Mehr als ein Board angeschlossen: Wähle den Port dieses Bildschirms."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Einmal per USB; danach läuft alles drahtlos."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installieren"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil speichern"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Es wird schon eine Firmware erstellt oder installiert ("},{t:4,k:"file"},{t:3,v:"). Warte, bis das fertig ist."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"In dieser Installation fehlt die ESPHome CLI; nur das Speichern des Profils ist möglich."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" liegt im ESPHome-Ordner"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Firmware wird auf "},{t:4,k:"name"},{t:3,v:" geschrieben…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware wird erstellt…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware für "},{t:4,k:"name"},{t:3,v:" ist fertig"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware ist auf "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Erstellen fehlgeschlagen"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installation fehlgeschlagen"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installiere es später über Firmware & USB: Wähle dieses Profil, dann den USB-Port des Home Assistant-Rechners oder „Download“, um die Firmware von deinem eigenen Computer aus auf den Bildschirm zu spielen. Speichere den API-Schlüssel für die Kopplung:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Zieh das USB-Kabel noch nicht ab."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Das erste Erstellen dauert auf einem Raspberry Pi ein paar Minuten. Du kannst diese Seite verlassen: Die Installation läuft weiter, und du findest sie unter „Neuer Bildschirm“ wieder."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Das erste Erstellen dauert auf einem Raspberry Pi ein paar Minuten. Du kannst diese Seite verlassen: Die Firmware wird weiter erstellt, und du findest sie unter „Neuer Bildschirm“ wieder."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Spiele sie von deinem eigenen Computer aus auf den Bildschirm und kopple den Bildschirm dann mit Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Der Bildschirm startet und verbindet sich mit deinem Wi-Fi. Kopple ihn jetzt mit Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Der Bildschirm startet und verbindet sich mit deinem Wi-Fi. Das CYD fragt zuerst nach einer Touch-Kalibrierung: Tippe auf die Kreuze. Kopple ihn jetzt mit Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Siehe das Protokoll unten."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" – mit einem USB-Datenkabel."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Schließe den Bildschirm an deinen Computer an"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome oder Edge, klicke auf „Connect“ und wähle den USB-Port des Bildschirms."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Öffne "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" und wähle "},{t:4,k:"file"},{t:3,v:". Der Bildschirm startet neu und verbindet sich mit deinem Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" und wähle "},{t:4,k:"file"},{t:3,v:". Der Bildschirm startet neu und verbindet sich mit deinem Wi-Fi. Das CYD fragt zuerst nach einer Touch-Kalibrierung: Tippe auf die Kreuze."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Klicke auf „Install“"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Die Datei enthält dein Wi-Fi-Passwort und die Schlüssel des Bildschirms: Behalte sie für dich."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-Schlüssel"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Das passiert außerhalb von ESP Screens. Home Assistant entdeckt "},{t:4,k:"name"},{t:3,v:" als ESPHome-Gerät; klicke auf „Hinzufügen“. Nicht entdeckt? Füge ESPHome manuell mit der IP-Adresse des Bildschirms hinzu."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Öffne in Home Assistant Einstellungen → Geräte & Dienste."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:", wenn Home Assistant nach einem Verschlüsselungscode fragt."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Füge den API-Schlüssel von oben ein"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome-Integration → Konfigurieren → „Dem Gerät erlauben, Home Assistant-Aktionen auszuführen“. Ohne das sieht der Bildschirm alles, steuert aber nichts."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"HA-Aktionen erlauben:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Zurück in ESP Screens erscheint der Bildschirm innerhalb von etwa dreißig Sekunden links in der Liste; bis dahin steht er dort als „noch nicht in Home Assistant“."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wähle deine Kacheln."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome-Protokoll"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Erneut versuchen"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Weiteren Bildschirm installieren"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Neu beginnen"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fertig"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Meldungen · Spickzettel"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Eine Vollbild-Benachrichtigung aus einer Automation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Jeder Bildschirm hat die Aktion "},{t:4,k:"action"},{t:3,v:". Sie legt eine Karte über alles, weckt den Bildschirm und hält die Hintergrundbeleuchtung auf normaler Helligkeit, bis jemand auf die Taste tippt oder das Timeout abläuft. Home Assistant selbst zeigt für ESPHome-Aktionen keine Erklärungen oder Auswahllisten; alles, was du ausfüllen kannst, steht hier."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Der Spickzettel wird noch geladen; einen Moment."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Jemand ist an der Tür"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Tür 3, hinten"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Komme"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Abschnitte"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Ausprobieren"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Deine Bildschirme"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In einer Automation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Alle Bildschirme"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Die Felder"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Symbole"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Farben"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Verhalten"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Ereignisse"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tipps"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Sende jetzt eine Meldung mit denselben Feldern, die auch eine Automation sendet. Der Bildschirm zeigt die Karte und lässt bei eingeschaltetem Blinken seine Hintergrundbeleuchtung blinken."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Bildschirm"}},all:{t:0,b:{t:2,i:[{t:3,v:"Alle Bildschirme ("},{t:4,k:"ready"},{t:3,v:" bereit)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · nicht bereit"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titel"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Untertitel"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Symbol"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Farbe"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Tastentext"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (Sekunden, 0 wartet auf die Taste)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Hintergrundbeleuchtung blinken lassen"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Viermal, wenn die Meldung ankommt."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Wird gesendet…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Meldung senden"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"An "},{t:4,k:"n"},{t:3,v:" Bildschirm gesendet."}]},{t:2,i:[{t:3,v:"An "},{t:4,k:"n"},{t:3,v:" Bildschirme gesendet."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"An "},{t:4,k:"name"},{t:3,v:" gesendet."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"An den Bildschirm gesendet."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 übersprungen (offline oder alte Firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" übersprungen (offline oder alte Firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Leer gelassen: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Kein Bildschirm konnte sie anzeigen: Prüfe, ob ein Bildschirm mit Firmware "},{t:4,k:"version"},{t:3,v:" oder neuer online ist."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Weiß (Standard)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Jeder Bildschirm hat seine eigene Aktion, mit dem Gerätenamen darin. Ab Firmware "},{t:4,k:"version"},{t:3,v:"; aktualisiere einen älteren Bildschirm mit seiner Schaltfläche „Aktualisieren“ unter „Bildschirme“."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Noch kein Bildschirm gekoppelt. Installiere einen über „Neuer Bildschirm“; die Aktion erscheint, sobald Home Assistant den Bildschirm sieht."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● Firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update nötig · Firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Gerätename unbekannt · Bildschirm aktualisieren"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Meldung anzeigen"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Meldung schließen"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Klicke auf "},{t:4,k:"add"},{t:3,v:" und suche nach "},{t:4,k:"esphome"},{t:3,v:". Wähle die Aktion deines Bildschirms: Home Assistant nennt sie „Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"“."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aktion hinzufügen"}},device:{t:0,b:{t:2,i:[{t:3}],s:"Gerätename"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant fragt nach allen sieben; lass leer, was du nicht brauchst ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", aus)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fülle die Felder aus."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Lieber YAML? Wähle an der Aktion "},{t:4,k:"edit"},{t:3,v:" und füge das Beispiel unten ein."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Beispiel für"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"einen Bildschirm (noch nicht gekoppelt)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"In YAML bearbeiten"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"YAML kopieren"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Alle Bildschirme auf einmal"}},text:{t:0,b:{t:2,i:[{t:3,v:"Löse das Ereignis "},{t:4,k:"show"},{t:3,v:" mit denselben Feldern aus, und ESP Screens gibt die Meldung an jeden Bildschirm weiter, der online ist, auch an später hinzugefügte. "},{t:4,k:"dismiss"},{t:3,v:" entfernt sie überall. Nimm in einer Automation die Aktion "},{t:4,k:"event"},{t:3,v:" oder füge das Beispiel unter "},{t:4,k:"edit"},{t:3,v:" ein. Lass die Felder weg, die du nicht brauchst. Dafür muss ESP Screens laufen."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Manuelles Ereignis auslösen"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Text ist frei wählbar; das Limit gilt in Bytes, und ein Umlaut oder Buchstabe mit Akzent zählt doppelt. Was nicht passt, bekommt Auslassungspunkte (Titel) oder fällt weg (Untertitel)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Feld"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Typ"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Funktion"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Beispiel"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"Text"}},int:{t:0,b:{t:2,i:[{t:3}],s:"Zahl"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"ein / aus"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entität"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" Bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 bis 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, Firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Trage den Namen in "},{t:4,k:"field"},{t:3,v:" ein, zum Beispiel "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" und der Hex-Codepoint ("},{t:4,k:"hex"},{t:3,v:") gehen auch. Nur diese Symbole sind in der Firmware enthalten; jeder andere Name zeigt das Warndreieck. Tippe auf ein Symbol, um seinen Namen zu kopieren."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Praktisch für Benachrichtigungen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Symbol suchen"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Nach Name oder Beschreibung suchen…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Außerdem verfügbar: Steuerungs- und Wettersymbole"}},copy:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" kopieren"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Kein Symbol für „"},{t:4,k:"query"},{t:3,v:"“. Unbekannte Namen zeigen das Warndreieck ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Trage den Namen in "},{t:4,k:"field"},{t:3,v:" ein. Das sind die Pastelltöne der Kacheln, mit dunklem Text. Leer oder unbekannt ergibt die weiße Karte. Zum Kopieren tippen."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Eine Meldung weckt einen gedimmten oder dunklen Bildschirm sofort und erscheint über jeder Seite, jeder offenen Lichtkarte und der Standby-Ebene."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Weckt den Bildschirm."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Solange die Karte zu sehen ist, bleibt die Hintergrundbeleuchtung auf normaler Helligkeit. Standby und Nachtzeit warten. Nach dem Drücken der Taste beginnt die normale Standby-Zeit von vorn."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"An bis zur Taste."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" wartet auf die Taste, egal wie lange das dauert. Mit "},{t:4,k:"minute"},{t:3,v:" verschwindet die Karte nach einer Minute, aber die Taste schließt sie früher."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" lässt die Hintergrundbeleuchtung beim Eintreffen der Meldung viermal blinken (etwa eine Sekunde lang) und lässt den Bildschirm danach an."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Blinken."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Eine neue Meldung ersetzt die aktuelle; es gibt keinen Stapel. Die ersetzte Meldung endet mit "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ersetzen."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" entfernt die Karte, zum Beispiel wenn die Tür schon offen ist. Ohne Meldung bewirkt diese Aktion nichts."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aus der Ferne schließen."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" bewirkt nichts; nur die Taste schließt sie. So schließt ein Tippen zum Aufwecken die Meldung nie aus Versehen."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tippen neben die Karte"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Wenn eine Meldung endet, löst sie das Ereignis "},{t:4,k:"event"},{t:3,v:" aus, mit "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (dem Gerätenamen) und der "},{t:4,k:"device_id"},{t:3,v:", die Home Assistant hinzufügt. Zu sehen unter Einstellungen → Werkzeuge → Ereignisse."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Wann"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Warten, bis jemand die Taste drückt"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Nutze eine "},{t:4,k:"bold"},{t:3,v:": Orange für die Tür, Rot für Rauch oder Wasser, Grün für „erledigt“. Der Text bleibt immer dunkel und lesbar."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"Farbe je Art der Benachrichtigung"}},short:{t:0,b:{t:2,i:[{t:3,v:"Halte den Titel "},{t:4,k:"bold"},{t:3,v:"; ein Bildschirm zeigt etwa zwanzig Zeichen in einer Zeile und kürzt einen längeren Titel mit Auslassungspunkten. Details gehören in den Untertitel."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"kurz"}},button:{t:0,b:{t:2,i:[{t:3,v:"Ein "},{t:4,k:"bold"},{t:3,v:" macht aus der Benachrichtigung eine Frage: „Komme“, „Gesehen“, „Ausschalten“. Das Ereignis verrät dann, wer reagiert hat."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"eigener Tastentext"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Eine Meldung, die sich von selbst erledigt (die Tür geht auf, die Wäsche wird herausgenommen), schließt du in derselben Automation mit "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Alle Bildschirme? Löse "},{t:4,k:"event"},{t:3,v:" einmal aus (siehe „Alle Bildschirme auf einmal“). Die Bildschirme arbeiten trotzdem unabhängig, und jeder meldet sich mit seinem eigenen "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Für die Automation lieber "},{t:4,k:"bold"},{t:3,v:"? Installiere den ESP Screens-Skill unter Einstellungen → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"Claude fragen"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Türklingel: die Meldung zeigen und warten, bis jemand die Taste drückt."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Jemand kommt zur Tür."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Erweitert · lokale Anpassung"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML-Anpassung"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML-Anpassung · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Diese kleine Datei gehört dir. Sie wird nach dem gemeinsamen Bildschirm-Paket geladen und bleibt erhalten, wenn ESP Screens aktualisiert wird. Ändere hier hardwarespezifische Details, etwa ein Display-Modell."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Was kann ich gefahrlos ändern?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, Touchscreen, Substitutions, Pins und andere Gerätedetails. Name, Wi-Fi, API, OTA und Paket-Links bleiben von ESP Screens verwaltet."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Aktiv"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Bereit zum Einbinden"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokale YAML-Anpassung"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Beispiel verwenden"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Leeren"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 Zeichen"},{t:2,i:[{t:4,k:"n"},{t:3,v:" Zeichen"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 Zeile"},{t:2,i:[{t:4,k:"n"},{t:3,v:" Zeilen"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Speichern & prüfen"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Anpassung speichern"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Für diesen Bildschirm wurde kein ESPHome-Profil gefunden."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Änderungen hier gelten ab dem nächsten Erstellen der Firmware."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Speichere einmal, um diese Datei in das Profil einzubinden."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Wird geprüft und gespeichert…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert. Die Anpassung bleibt bei Firmware-Updates erhalten."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML-Anpassung gespeichert."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Gespeichert. ESPHome prüft das vollständige Profil…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome prüft das Profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome prüft das Profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Das vollständige Profil ist gültig. Du kannst es gefahrlos erstellen und installieren."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome hat das vollständige Profil abgelehnt. Das ganze Protokoll findest du unter Firmware & USB."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Den aktuellen Text durch das Beispiel ersetzen?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Beispiel geladen. Speichere es, wenn du so weit bist."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Die lokale Anpassung leeren?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Nach dem Speichern ist die Anpassung leer."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Zuhause"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Unbekannt"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ein"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Nicht verfügbar"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heizbetrieb"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Kühlbetrieb"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heizen/Kühlen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Entfeuchtung"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Nur Lüftung"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heizbetrieb"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Kühlbetrieb"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Leerlauf"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Entfeuchtung"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Lüftung"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Vorheizen"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Enteisung"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Wird geöffnet"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Wird geschlossen"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Wiedergabe"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausiert"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Leerlauf"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Zuhause"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Abwesend"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Über dem Horizont"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Unter dem Horizont"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Angedockt"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Reinigt"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausiert"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Rückkehr zur Ladestation"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Leerlauf"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sonnig"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Klare Nacht"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Bewölkt"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Teilweise bewölkt"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Regnerisch"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Strömender Regen"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Schneefall"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Schneeregen"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebel"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hagel"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Gewitter"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Gewitter, regnerisch"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windig"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Außergewöhnlich"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Niedrig"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Wird geladen"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Wird nicht geladen"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Kalt"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Verbunden"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Getrennt"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Heiß"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Licht erkannt"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Kein Licht"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Aufgeschlossen"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Abgeschlossen"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Nass"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Trocken"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Bewegt sich"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Bewegt sich nicht"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Eingesteckt"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausgesteckt"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Ein"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Aus"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Zuhause"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Abwesend"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In Betrieb"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Außer Betrieb"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsicher"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicher"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Manipulation erkannt"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update verfügbar"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aktuell"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Erkannt"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Frei"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Geöffnet"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Geschlossen"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktivieren"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Ausführen"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Drücken"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Gerade eben"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Min."}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Stunde"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Stunden"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Gestern"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Tag"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Tagen"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Woche"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Wochen"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Monat"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Monaten"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Vor 1 Jahr"},{t:2,i:[{t:3,v:"Vor "},{t:4,k:"n"},{t:3,v:" Jahren"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" Min."}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 Stunde"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" Stunden"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Morgen"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 Tag"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" Tagen"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sonntag"}},{t:0,b:{t:2,i:[{t:3}],s:"Montag"}},{t:0,b:{t:2,i:[{t:3}],s:"Dienstag"}},{t:0,b:{t:2,i:[{t:3}],s:"Mittwoch"}},{t:0,b:{t:2,i:[{t:3}],s:"Donnerstag"}},{t:0,b:{t:2,i:[{t:3}],s:"Freitag"}},{t:0,b:{t:2,i:[{t:3}],s:"Samstag"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"So"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Di"}},{t:0,b:{t:2,i:[{t:3}],s:"Mi"}},{t:0,b:{t:2,i:[{t:3}],s:"Do"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"So"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Di"}},{t:0,b:{t:2,i:[{t:3}],s:"Mi"}},{t:0,b:{t:2,i:[{t:3}],s:"Do"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"Januar"}},{t:0,b:{t:2,i:[{t:3}],s:"Februar"}},{t:0,b:{t:2,i:[{t:3}],s:"März"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"Mai"}},{t:0,b:{t:2,i:[{t:3}],s:"Juni"}},{t:0,b:{t:2,i:[{t:3}],s:"Juli"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"Oktober"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"Dezember"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan."}},{t:0,b:{t:2,i:[{t:3}],s:"Feb."}},{t:0,b:{t:2,i:[{t:3}],s:"März"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr."}},{t:0,b:{t:2,i:[{t:3}],s:"Mai"}},{t:0,b:{t:2,i:[{t:3}],s:"Juni"}},{t:0,b:{t:2,i:[{t:3}],s:"Juli"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug."}},{t:0,b:{t:2,i:[{t:3}],s:"Sept."}},{t:0,b:{t:2,i:[{t:3}],s:"Okt."}},{t:0,b:{t:2,i:[{t:3}],s:"Nov."}},{t:0,b:{t:2,i:[{t:3}],s:"Dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:". "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:". "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:". "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:" %"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Seite "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/es-2dmn4vz_.js b/screen_manager/app/static/assets/es-2dmn4vz_.js new file mode 100644 index 0000000..d83afb4 --- /dev/null +++ b/screen_manager/app/static/assets/es-2dmn4vz_.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Deshacer"}},online:{t:0,b:{t:2,i:[{t:3}],s:"En línea"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Sin conexión"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"desconocido"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Cambios no guardados"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancelar"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Abrir Dispositivos y servicios"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Guardar y enviar"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Guardando…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Leer datos actuales"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 resultado. Sigue escribiendo para acotar."},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultados. Sigue escribiendo para acotar."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Cerrar"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Eliminar"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Cambiar"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Cargando…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Volver"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nueva pantalla"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware y USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertas"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Configuración"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Conectar e instalar"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"No ha funcionado. Recarga la página y vuelve a intentarlo."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Clave API copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La clave API está seleccionada. Cópiala con Ctrl+C o Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON del diseño copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"El JSON del diseño está seleccionado. Cópialo con Ctrl+C o Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nombre de la acción copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"El nombre de la acción está seleccionado. Cópialo con Ctrl+C o Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"El YAML está seleccionado. Cópialo con Ctrl+C o Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nombre del icono copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"El nombre del icono está seleccionado. Cópialo con Ctrl+C o Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Color vacío copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"El color vacío está seleccionado. Cópialo con Ctrl+C o Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nombre del color copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"El nombre del color está seleccionado. Cópialo con Ctrl+C o Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Página de gestión inaccesible · reintentando…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Conectado a Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconectando con Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Buscar"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Pantallas"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Más"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Recargar"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Actualizar"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actualizar"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"En cola para actualizar"}},available:{t:0,b:{t:2,i:[{t:3,v:"Actualización a "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No se ha encontrado ningún perfil de ESPHome con este nombre de dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novedades"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registro completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"La dirección IP, solo esta vez; el firmware nuevo la comunica por sí mismo."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Dirección IP, p. ej. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Dirección IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Instalada, pero aún no está en Home Assistant. Añade el dispositivo ESPHome descubierto en Configuración → Dispositivos y servicios, pega allí la clave API y activa «Permite que el dispositivo realice acciones de Home Assistant» en Configurar."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware descargado; aún no está en Home Assistant. Instálalo en la pantalla con ESPHome Web y luego añade el dispositivo ESPHome descubierto en Configuración → Dispositivos y servicios, pega allí la clave API y permite las acciones de Home Assistant en Configurar."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Aún no está en Home Assistant. ¿Ya has instalado el firmware? Añade el dispositivo ESPHome en Configuración → Dispositivos y servicios y luego permite las acciones de Home Assistant en Configurar. ¿Todavía no? Firmware y USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copiar clave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Pantallas"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Acciones"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Añadir a esta pantalla"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guía rápida y una alerta de prueba"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Actualizaciones, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nada que guardar"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar esta pantalla"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Hace parpadear la retroiluminación y muestra una tarjeta"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Necesita un firmware más reciente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar diseño"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Descargar y copiar como JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Busca pantallas, entidades, acciones…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"No hay coincidencias. Escribe parte del nombre de una pantalla, entidad o acción."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Elige una pantalla"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Elige una de tus pantallas a la izquierda para cambiar sus mosaicos, su barra superior y su configuración."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Empieza con una pantalla"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Conecta un CYD o un Guition por USB al equipo de Home Assistant. El perfil, el firmware y la primera instalación se hacen de una vez."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Instalar pantalla nueva"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Tienes cambios sin guardar. ¿Abrir otra pantalla de todos modos?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"¿Sustituir el diseño sin guardar por una copia del de la otra pantalla?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"¿Sustituir el diseño sin guardar por el importado?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Tu pantalla se está actualizando."}},other:{t:0,b:{t:2,i:[{t:3,v:"Guardado. "},{t:4,k:"name"},{t:3,v:" se está actualizando."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. La pantalla se está actualizando."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Tu último cambio aún no se ha enviado: vuelve a pulsar Guardar y enviar."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" parpadea y muestra una tarjeta durante unos segundos."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Sin conexión · los cambios se guardan"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Diseño"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Configuración de pantalla"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Guardado · enviado a la pantalla"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Todo guardado"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Más"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"hace parpadear la pantalla"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Necesita el firmware 0.2.31 o posterior"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"de Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar diseño de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pantalla"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pantallas"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"no hay otra pantalla"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaico"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaicos"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar diseño"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importar diseño…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avanzado"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"No se ha encontrado ningún perfil de ESPHome para esta pantalla"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Actualizar firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Se ha eliminado "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"No hay sitio para este mosaico en la página "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"No hay ninguna página libre para un mosaico de página completa. Libera antes una página."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Esta pantalla ya tiene un mosaico que lleva a la página "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Diseño de "},{t:4,k:"name"},{t:3,v:" copiado. Pulsa Guardar y enviar cuando te parezca bien."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Diseño de "},{t:4,k:"name"},{t:3,v:" copiado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos son compatibles con el firmware de esta pantalla. Pulsa Guardar y enviar cuando te parezca bien."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Diseño importado. Pulsa Guardar y enviar cuando te parezca bien."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Diseño importado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos son compatibles con el firmware de esta pantalla. Pulsa Guardar y enviar cuando te parezca bien."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Eso no es JSON. Exporta antes un diseño o pega uno de otro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Este archivo no tiene mosaicos. Se esperaba un diseño exportado desde ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" página · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" páginas · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Añade tu primera luz, escena o dispositivo desde la biblioteca."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Toca la barra superior o un mosaico para cambiarlo. Arrastra para mover; suelta en la página siguiente para crear una nueva."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Los huecos vacíos y las posiciones fijas funcionan a partir del firmware 0.2.26. Hasta esa actualización, esta pantalla (firmware "},{t:4,k:"firmware"},{t:3,v:") sube los mosaicos al primer hueco libre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Diseño de la pantalla"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Añadir página"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Máximo 1 página"},{t:2,i:[{t:3,v:"Máximo "},{t:4,k:"n"},{t:3,v:" páginas"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Eliminar página"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Las páginas siguientes suben un puesto"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Editar barra superior"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Hueco vacío. Haz clic para añadir aquí un mosaico o arrastra uno hasta aquí."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Hueco vacío "},{t:4,k:"slot"},{t:3,v:" en la página "},{t:4,k:"page"},{t:3,v:": añade aquí el siguiente mosaico"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"El siguiente mosaico va aquí"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vacío"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteca"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entidad"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entidades"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Busca por nombre, dispositivo o habitación…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Añadir una entidad"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Todo"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luces"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatización"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptores"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Acciones"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventiladores"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Persianas"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Escenas"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspiradora"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensores"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimedia"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valores"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selectores"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personas"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizadores"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Pantalla"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Habitación"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Todas las habitaciones"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar añadidas"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar lo que ya está en esta pantalla"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Todo lo de aquí ya está en esta pantalla."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No se han encontrado entidades. Prueba con otro nombre, habitación o filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En esta pantalla cabe 1 mosaico."},{t:2,i:[{t:3,v:"En esta pantalla caben "},{t:4,k:"n"},{t:3,v:" mosaicos."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En esta pantalla cabe 1 mosaico; actualiza su firmware para tener 48."},{t:2,i:[{t:3,v:"En esta pantalla caben "},{t:4,k:"n"},{t:3,v:" mosaicos; actualiza su firmware para tener 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Arrastra a una página o toca + para añadir al primer hueco libre. ⌘K busca en todo."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luz"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatización"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspiradora"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilador"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Persiana"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimedia"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Escena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selector"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selector"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Acción"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Acción"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Pantalla"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sol"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizador"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persona"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Cámara"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Imagen"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entidad"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"estándar"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsión del tiempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"gráfico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"reloj digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"reloj analógico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"recorrido del sol"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doble"}},full:{t:0,b:{t:2,i:[{t:3}],s:"página completa"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nombre en la pantalla"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automático (de Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automático (predeterminado)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"La pantalla muestra el icono elegido a partir del firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Lleva a la página"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vacía)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Los mosaicos de navegación necesitan el firmware 0.2.62: pulsa antes Actualizar en la lista de pantallas."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Esta pantalla no tiene página "},{t:4,k:"page"},{t:3,v:", así que un toque abre su última página. Elige otra página."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Al tocar el mosaico se abre esa página."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Presentación"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Reloj digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Reloj analógico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nombre y estado"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsión del tiempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Gráfico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Recorrido del sol"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant no tiene valores numéricos para esta entidad, así que el gráfico queda vacío. Elige otra presentación."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Este servicio meteorológico no tiene previsión diaria en Home Assistant. Elige otra presentación."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tamaño"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Doble ancho"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Página completa"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Página completa: un botón grande que se ilumina mientras está encendido; en la parte inferior va un control deslizante, unos controles o un gráfico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un mosaico de página completa necesita el firmware 0.2.62: pulsa antes Actualizar en la lista de pantallas."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Página"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Página nueva"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Control directo en el mosaico"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant no ofrece este control para esta entidad, así que en la pantalla queda vacío. Elige otro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"En la parte inferior del mosaico de página completa; un toque en cualquier otro sitio funciona como se indica más abajo."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"A la derecha del mosaico de doble ancho, como las filas de Home Assistant. Tocar el nombre funciona como se indica más abajo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"La pantalla muestra el control directo a partir del firmware 0.2.19; hasta entonces, el mosaico se queda como estaba."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Al tocar"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automático"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Abrir control"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Solo ver"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Encender / apagar"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Realizar una acción"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant no puede encender y apagar esto, así que un toque no hace nada. Elige otra opción."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"La pantalla lo enciende y apaga a partir del firmware 0.2.58: pulsa Actualizar en la lista de pantallas. Hasta entonces, un toque abre su tarjeta."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Mantén pulsado el mosaico para abrir su tarjeta."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Control deslizante pequeño en el mosaico"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sí, control directo"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant no tiene nada que un control deslizante pueda cambiar en esta entidad. Elige No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historial"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" horas"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fondo pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fondo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", hueco "},{t:4,k:"slot"},{t:3,v:" de la página "},{t:4,k:"page"},{t:3,v:". Enter: configurar; teclas de flecha: mover"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Eliminar mosaico"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Eliminar "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Acción"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Preguntando a Home Assistant qué acciones tiene esta entidad…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant no responde ahora mismo. Vuelve a intentarlo en un momento."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Elige una acción"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Busca, por ejemplo alternar, posición o reproducir"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Buscar una acción"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No se ha encontrado ninguna acción."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant ya no ofrece esta acción para esta entidad, así que un toque no hace nada. Elige otra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Sin definir"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Activado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desactivado"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant necesita "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"La pantalla realiza acciones a partir del firmware 0.2.58: pulsa Actualizar en la lista de pantallas. Hasta entonces, un toque funciona como Automático."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icono"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Sin icono"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Busca, por ejemplo lámpara, música o puerta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Buscar un icono"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Sin icono, solo texto"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icono: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No se ha encontrado ningún icono."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Datos actuales"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Conexión, estado y propiedades compatibles"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Leyendo…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Obteniendo el estado actual de HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Estado: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Control deslizante pequeño: "},{t:4,k:"slider"},{t:3,v:" · Presentación: "},{t:4,k:"display"},{t:3,v:" · Tamaño: "},{t:4,k:"size"},{t:3,v:" · Control: "},{t:4,k:"control"},{t:3,v:" · Fondo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sí"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"ninguno"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predeterminado"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Volver a leer"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Se ha eliminado "},{t:4,k:"name"},{t:3,v:" de la barra superior"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En la barra superior cabe 1 elemento."},{t:2,i:[{t:3,v:"En la barra superior caben "},{t:4,k:"n"},{t:3,v:" elementos."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Esto ya está en la barra superior."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superior"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superior: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"De la propia pantalla; también funciona sin Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Izquierda: nombre"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Por ejemplo: Salón"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Derecha: hora, sensores o un reloj"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", hueco "},{t:4,k:"slot"},{t:3,v:". Enter: configurar; flechas: mover"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Eliminar "},{t:4,k:"name"},{t:3,v:" de la barra superior"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Máximo 1 elemento"},{t:2,i:[{t:3,v:"Máximo "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Añade la hora, la fecha, el reloj analógico o una entidad"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Añadir hora, fecha o una entidad"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"No todo cabe junto al nombre: la pantalla omite los elementos con borde discontinuo. Elimina uno o elige un nombre más corto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Arrastra para reordenar; toca un elemento para configurarlo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Los sensores, la fecha y el reloj analógico aparecen a partir del firmware "},{t:4,k:"version"},{t:3,v:"; hasta esa actualización, esta pantalla muestra el nombre y, si la hora está en la barra, el reloj."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto: ahora no está activo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"No cabe junto al nombre"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Esfera"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto ahora mismo: no está activo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Ahora mismo no cabe junto al nombre"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Así se ve en la pantalla"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Esfera pequeña con la hora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Qué mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Último cambio» sigue contando en la propia pantalla: «Justo ahora», «Hace 5 min», «Ayer»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automático (como en Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Solo cuando está activo» oculta el elemento mientras está apagado, cerrado, fuera o en 0. Útil para una puerta abierta, una lavadora en marcha o quién está en casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Reloj de 24 horas · cámbialo en "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Reloj de 12 horas · cámbialo en "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Configuración → Idioma y región"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Hoy: "},{t:4,k:"date"},{t:3,v:". La fecha sigue el reloj de la propia pantalla."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Subir"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Bajar"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Añadir a la barra superior"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" hueco usado"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" huecos usados"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"De la propia pantalla"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Ya añadido"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Sugerencias de Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Una entidad"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Busca por nombre, habitación o entidad, p. ej. temperatura o puerta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Buscar una entidad para la barra superior"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No se han encontrado entidades."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brillo"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noche"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Pantalla"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brillo"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modo oscuro"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Reposo automático"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Reposo tras"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brillo en reposo"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modo noche"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Empieza"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Termina"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brillo nocturno"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Volver a la página 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Tras"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"También en reposo"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Deslizar entre páginas"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Botones de página"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotación"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" a. m."}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" p. m."}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Aún se está guardando la configuración de la otra pantalla. Vuelve a intentarlo en un momento."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Los botones de página y el deslizamiento están desactivados, así que solo los mosaicos «Ir a la página» cambian de página."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"la página "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"las páginas "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tienes "},{t:4,k:"n"},{t:3,v:" mosaico «Ir a la página», que lleva a "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Tienes "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir a la página», que llevan a "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tienes "},{t:4,k:"n"},{t:3,v:" mosaico «Ir a la página», que lleva a "},{t:4,k:"targets"},{t:3,v:", pero ninguno a "},{t:4,k:"missing"},{t:3,v:", así que no puedes llegar a ella."}]},{t:2,i:[{t:3,v:"Tienes "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir a la página», que llevan a "},{t:4,k:"targets"},{t:3,v:", pero ninguno a "},{t:4,k:"missing"},{t:3,v:", así que no puedes llegar a ella."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tienes "},{t:4,k:"n"},{t:3,v:" mosaico «Ir a la página», que lleva a "},{t:4,k:"targets"},{t:3,v:", pero ninguno a "},{t:4,k:"missing"},{t:3,v:", así que no puedes llegar a ellas."}]},{t:2,i:[{t:3,v:"Tienes "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir a la página», que llevan a "},{t:4,k:"targets"},{t:3,v:", pero ninguno a "},{t:4,k:"missing"},{t:3,v:", así que no puedes llegar a ellas."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"No tienes mosaicos «Ir a la página»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"No tienes mosaicos «Ir a la página» que lleven a "},{t:4,k:"missing"},{t:3,v:", así que no puedes llegar a ella."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"No tienes mosaicos «Ir a la página» que lleven a "},{t:4,k:"missing"},{t:3,v:", así que no puedes llegar a ellas."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Los mosaicos que llevan a "},{t:4,k:"pages"},{t:3,v:" solo están en páginas a las que no puedes llegar."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Desde "},{t:4,k:"pages"},{t:3,v:" ningún mosaico lleva de vuelta a la página 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Esta pantalla está sin conexión. Podrás cambiar su configuración cuando vuelva."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Los cambios se aplican al instante en la pantalla, y aparecen aquí cuando se cambian allí."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Los cambios se aplican al instante. Con el firmware 0.2.49, la pantalla los guarda ella misma."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Esta entidad está desactivada en Home Assistant o la pantalla se está reiniciando."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": menos"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": más"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Iniciando la actualización…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilando el firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Grabando el firmware por Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilando e instalando…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Esperando a que vuelva la pantalla…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Comprobando que se mantiene estable…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Idioma nuevo: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Ahora las pantallas se actualizarán automáticamente por la noche."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Las actualizaciones automáticas están desactivadas."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Actualizaciones de firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Actualizando al firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Aún no hay ninguna pantalla emparejada. Las pantallas nuevas reciben el firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"El firmware "},{t:4,k:"version"},{t:3,v:" está disponible para "},{t:4,k:"n"},{t:3,v:" pantalla."}]},{t:2,i:[{t:3,v:"El firmware "},{t:4,k:"version"},{t:3,v:" está disponible para "},{t:4,k:"n"},{t:3,v:" pantallas."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Todas las pantallas tienen el firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Actualizar 1 pantalla"},{t:2,i:[{t:3,v:"Actualizar las "},{t:4,k:"n"},{t:3,v:" pantallas"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novedades del firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Actualizar automáticamente cada noche"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre las 03:00 y las 06:00, una pantalla cada vez. Se detiene si hay un error y lo notifica en Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Habilidad instalada. Claude Code la detecta al momento."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Habilidad instalada. Reinicia Claude Code una vez para que encuentre la nueva carpeta de habilidades."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Enseña a Claude a usar ESP Screens y luego pídele: «Muestra una alerta en todas mis pantallas cuando el buzón esté lleno». Claude conoce los eventos de alerta y cada campo, color e icono."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar para Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Volver a instalar"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Actualizar la habilidad"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"No instalada"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Instalada"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Instalada · hay una versión más reciente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Para Claude Code en Home Assistant. Escribe un archivo en "},{t:4,k:"path"},{t:3,v:"; al volver a instalar se sustituye."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descargar para claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Sube el zip en Claude, en Personalizar → Habilidades."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Todo lo que rodea a tus pantallas."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Mis pantallas"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Pantallas"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Añade una pantalla, o compila y reinstala el firmware de una que ya tengas."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar por USB o Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Idioma y región"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Idioma de las pantallas"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Idioma de Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Idioma de Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Las pantallas usan el inglés hasta que el idioma de Home Assistant esté disponible."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · aún sin revisar, se agradece ayuda"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" aún no está revisado; se agradece ayuda: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"cómo traducir"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tras un cambio, cada pantalla necesita una actualización de firmware, una compilación por pantalla: con su botón Actualizar o en las actualizaciones nocturnas."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato de hora"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, según el idioma ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 horas"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 horas"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formato numérico"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, según el idioma ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Tu perfil de Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usar estos"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"El propio editor usa el idioma de tu perfil de Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Cada pantalla adoptará el nuevo idioma con su próxima actualización."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Una tarjeta a pantalla completa desde una automatización, en una pantalla o en todas. La guía rápida tiene los nombres de las acciones, los campos, los iconos y los colores, y un formulario para probar una alerta."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notificaciones a pantalla completa, desde una automatización"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar el firmware de las pantallas"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI de ESPHome integrada usa tu propio perfil (YAML con claves) y tus secretos. Elige el perfil de la pantalla y luego un puerto USB (pantalla conectada al equipo de Home Assistant), "},{t:4,k:"ota"},{t:3,v:" con el nombre de host, o "},{t:4,k:"download"},{t:3,v:" para instalar el firmware en la pantalla desde tu propio ordenador. "},{t:4,k:"check"},{t:3,v:" solo valida, "},{t:4,k:"build"},{t:3,v:" compila y "},{t:4,k:"install"},{t:3,v:" instala el firmware en la pantalla. Tus mosaicos se quedan como están en ESP Screens. La primera compilación tarda unos minutos."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descargar"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Comprobar"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Solo compilar"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compilar y descargar"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta la CLI de ESPHome. Actualiza la aplicación a la versión 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Elige el perfil que corresponda y luego un puerto USB, una dirección IP o Descargar."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Perfil de ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Instalar en"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · aún no se ha encontrado ninguna placa en el equipo de Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Descargar · instalar desde tu propio ordenador"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Dirección IP o nombre de host"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Descargar "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Instálalo en la pantalla con "},{t:4,k:"esphome_web"},{t:3,v:" en Chrome o Edge: Connect, elige el puerto USB de la pantalla, Install y selecciona este archivo. Contiene tu contraseña de Wi-Fi y las claves de la pantalla: no lo compartas."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Conectar e instalar."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Perfil guardado."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un momento…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Listo para descargar."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Hecho."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"No ha funcionado."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crea el perfil propio de la pantalla con claves únicas y compila el firmware. Conecta la pantalla con un cable USB de datos al equipo donde se ejecuta Home Assistant, o descarga el firmware e instálalo en la pantalla desde tu propio ordenador."}},board:{t:0,b:{t:2,i:[{t:3}],s:"¿Qué pantalla tienes?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pulgadas"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pulgadas"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nombre"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Pantalla del salón"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nombre del dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizar"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cada pantalla tiene su propio perfil con sus propias claves. ¿Cuatro pantallas? Haz esto cuatro veces con un nombre distinto."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Letras minúsculas, números y guiones. Un nombre distinto para cada pantalla."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nombre de la red Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Contraseña de la Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Rellénalo una sola vez: ESP Screens lo guarda en el secrets.yaml de ESPHome y las siguientes pantallas lo usan automáticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"A tu secrets.yaml de ESPHome aún le faltan los datos de la Wi-Fi. ESP Screens solo rellena las líneas que faltan."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"La Wi-Fi se toma de tu secrets.yaml de ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"El secrets.yaml de la carpeta de ESPHome no es un YAML válido. Corrige antes el archivo; no se sobrescribirá."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Instalar mediante"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Más tarde · solo guardar el perfil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Conecta la pantalla con un cable USB de datos al equipo de Home Assistant; la lista se actualiza sola. O elige Descargar para usar tu propio ordenador."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarga el firmware e instálalo en la pantalla desde tu propio ordenador, con Chrome o Edge. Después, las actualizaciones van por Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"El perfil se guarda en la carpeta de ESPHome. Puedes instalarlo más tarde desde Firmware y USB o desde ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Hay más de una placa conectada: elige el puerto de esta pantalla."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Una vez por USB; después, todo es inalámbrico."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Guardar perfil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Ya hay una compilación o instalación en curso ("},{t:4,k:"file"},{t:3,v:"). Espera a que termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"A esta instalación le falta la CLI de ESPHome; solo se puede guardar el perfil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" está en la carpeta de ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Grabando el firmware en "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilando el firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"El firmware para "},{t:4,k:"name"},{t:3,v:" está listo"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"El firmware ya está en "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Error en la compilación"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Error en la instalación"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Instálalo más tarde desde Firmware y USB: elige este perfil y luego el puerto USB del equipo de Home Assistant, o Descargar para instalar el firmware en la pantalla desde tu propio ordenador. Guarda la clave API para el emparejamiento:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"No desconectes todavía el cable USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"La primera compilación tarda unos minutos en una Raspberry Pi. Puedes salir de esta página: la instalación sigue en marcha y la volverás a encontrar en Nueva pantalla."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"La primera compilación tarda unos minutos en una Raspberry Pi. Puedes salir de esta página: la compilación sigue en marcha y la volverás a encontrar en Nueva pantalla."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Instálalo en la pantalla desde tu propio ordenador y luego empareja la pantalla con Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"La pantalla arranca y se conecta a tu Wi-Fi. Empareja ahora la pantalla con Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"La pantalla arranca y se conecta a tu Wi-Fi. El CYD pide primero una calibración táctil: toca las cruces. Empareja ahora la pantalla con Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Consulta el registro de abajo."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" con un cable USB de datos."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Conecta la pantalla a tu ordenador"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en Chrome o Edge, haz clic en Connect y elige el puerto USB de la pantalla."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Abre "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" y selecciona "},{t:4,k:"file"},{t:3,v:". La pantalla se reinicia y se conecta a tu Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" y selecciona "},{t:4,k:"file"},{t:3,v:". La pantalla se reinicia y se conecta a tu Wi-Fi. El CYD pide primero una calibración táctil: toca las cruces."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Haz clic en Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"El archivo contiene tu contraseña de Wi-Fi y las claves de la pantalla: no lo compartas."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Clave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Esto se hace fuera de ESP Screens. Home Assistant descubre "},{t:4,k:"name"},{t:3,v:" como dispositivo ESPHome; haz clic en Añadir. ¿No aparece? Añade ESPHome manualmente con la dirección IP de la pantalla."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ve a Home Assistant → Configuración → Dispositivos y servicios."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" de arriba cuando Home Assistant pida la clave de cifrado."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Pega la clave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integración ESPHome → Configurar → «Permite que el dispositivo realice acciones de Home Assistant». Sin esto, la pantalla lo ve todo pero no controla nada."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Permite las acciones de HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De vuelta en ESP Screens, la pantalla aparece en la lista de la izquierda en unos treinta segundos; hasta entonces se muestra ahí como «aún no está en Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Elige tus mosaicos."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registro de ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Reintentar"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Instalar otra pantalla"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Empezar de nuevo"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Hecho"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertas · guía rápida"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Una notificación a pantalla completa, desde una automatización."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Cada pantalla tiene la acción "},{t:4,k:"action"},{t:3,v:". Coloca una tarjeta por encima de todo, despierta la pantalla y mantiene la retroiluminación al brillo normal hasta que alguien toque el botón o se agote el tiempo de espera. Home Assistant no muestra explicaciones ni desplegables para las acciones de ESPHome; aquí tienes todo lo que puedes rellenar."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"La guía rápida aún se está cargando; un momento."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Hay alguien en la puerta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Puerta 3, trasera"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Voy"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Secciones"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Pruébalo"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Tus pantallas"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"En una automatización"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Todas las pantallas"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Los campos"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Iconos"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colores"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamiento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventos"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Consejos"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envía ahora una alerta, con los mismos campos que envía una automatización. La pantalla muestra la tarjeta y, con el parpadeo activado, hace parpadear la retroiluminación."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Pantalla"}},all:{t:0,b:{t:2,i:[{t:3,v:"Todas las pantallas (listas: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · no está lista"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Título"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtítulo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icono"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Color"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texto del botón"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Tiempo de espera (segundos; 0 espera al botón)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Hacer parpadear la retroiluminación"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cuatro veces cuando llega la alerta."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Enviando…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Enviar alerta"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Enviada a "},{t:4,k:"n"},{t:3,v:" pantalla."}]},{t:2,i:[{t:3,v:"Enviada a "},{t:4,k:"n"},{t:3,v:" pantallas."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Enviada a "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Enviada a la pantalla."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Se ha omitido 1 pantalla (sin conexión o firmware antiguo)."},{t:2,i:[{t:3,v:"Se han omitido "},{t:4,k:"n"},{t:3,v:" pantallas (sin conexión o firmware antiguo)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Se dejaron vacíos: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Ninguna pantalla ha podido mostrarla: comprueba que haya una pantalla en línea con el firmware "},{t:4,k:"version"},{t:3,v:" o posterior."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Blanco (predeterminado)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada pantalla tiene su propia acción, con el nombre del dispositivo en ella. A partir del firmware "},{t:4,k:"version"},{t:3,v:"; actualiza una pantalla más antigua con su botón Actualizar en Pantallas."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Aún no hay ninguna pantalla emparejada. Instala una desde Nueva pantalla; la acción aparece en cuanto Home Assistant ve la pantalla."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Hay que actualizar · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nombre del dispositivo desconocido · actualiza la pantalla"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar alerta"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Descartar alerta"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Pulsa "},{t:4,k:"add"},{t:3,v:" y busca "},{t:4,k:"esphome"},{t:3,v:". Elige la acción de tu pantalla: Home Assistant la llama «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Añadir acción"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nombre del dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant pide los siete; deja vacío lo que no uses ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", desactivado)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Rellena los campos."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"¿Prefieres YAML? Elige "},{t:4,k:"edit"},{t:3,v:" en la acción y pega el ejemplo de abajo."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Ejemplo para"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"una pantalla (aún sin emparejar)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Editar en YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copiar YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Todas las pantallas a la vez"}},text:{t:0,b:{t:2,i:[{t:3,v:"Dispara el evento "},{t:4,k:"show"},{t:3,v:" con los mismos campos y ESP Screens pasa la alerta a todas las pantallas en línea, incluidas las que añadas más tarde. "},{t:4,k:"dismiss"},{t:3,v:" la quita en todas. En una automatización, añade la acción "},{t:4,k:"event"},{t:3,v:" o pega el ejemplo en "},{t:4,k:"edit"},{t:3,v:". Omite los campos que no uses. Para esto, ESP Screens tiene que estar en marcha."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Disparar evento manual"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"El texto es libre; el límite es en bytes, y una letra acentuada cuenta como dos. Lo que no cabe acaba en puntos suspensivos (título) o se descarta (subtítulo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Qué hace"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Ejemplo"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Límite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texto"}},int:{t:0,b:{t:2,i:[{t:3}],s:"número"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"activado / desactivado"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entidad"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"de 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Escribe el nombre en "},{t:4,k:"field"},{t:3,v:", por ejemplo "},{t:4,k:"example"},{t:3,v:". También funcionan "},{t:4,k:"mdi"},{t:3,v:" y el código hexadecimal ("},{t:4,k:"hex"},{t:3,v:"). El firmware solo incluye estos iconos; cualquier otro nombre muestra el triángulo de advertencia. Toca un icono para copiar su nombre."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Útiles para notificaciones"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Buscar un icono"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Busca por nombre o descripción…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"También disponibles: iconos de control y del tiempo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copiar "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"No hay ningún icono para «"},{t:4,k:"query"},{t:3,v:"». Los nombres desconocidos muestran el triángulo de advertencia ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Escribe el nombre en "},{t:4,k:"field"},{t:3,v:". Son los tonos pastel de los mosaicos, con texto oscuro. Vacío o desconocido da la tarjeta blanca. Toca para copiar."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Una alerta despierta al instante una pantalla atenuada u oscura y aparece por encima de cualquier página, de cualquier tarjeta de luz abierta y de la capa de reposo."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Despierta la pantalla."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Mientras se muestra la tarjeta, la retroiluminación se mantiene al brillo normal. El reposo y el modo noche quedan en pausa. Tras pulsar el botón, el tiempo de reposo normal vuelve a empezar."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Encendida hasta pulsar el botón."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" espera al botón, tarde lo que tarde. Con "},{t:4,k:"minute"},{t:3,v:" la tarjeta desaparece al cabo de un minuto, pero el botón la cierra antes."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tiempo de espera."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" hace parpadear la retroiluminación cuatro veces al llegar la alerta (alrededor de un segundo) y luego deja la pantalla encendida."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Parpadeo."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Una alerta nueva sustituye a la actual; no se apilan. La alerta sustituida se notifica como "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sustitución."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" quita la tarjeta, por ejemplo si la puerta ya está abierta. Sin alerta, esa acción no hace nada."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cierre remoto."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" no hace nada; solo el botón la cierra. Así, un toque para despertar la pantalla nunca descarta la alerta por accidente."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tocar fuera de la tarjeta"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada vez que termina una alerta se dispara el evento "},{t:4,k:"event"},{t:3,v:" con "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (el nombre del dispositivo) y el "},{t:4,k:"device_id"},{t:3,v:" que añade Home Assistant. Se puede ver en Configuración → Herramientas → Eventos."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Cuándo"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Esperar a que alguien pulse el botón"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Usa un "},{t:4,k:"bold"},{t:3,v:": naranja para la puerta, rojo para humo o agua, verde para «hecho». El texto siempre se queda oscuro y legible."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"color para cada tipo de notificación"}},short:{t:0,b:{t:2,i:[{t:3,v:"Mantén el título "},{t:4,k:"bold"},{t:3,v:"; una pantalla muestra unos veinte caracteres en una línea y termina un título más largo con puntos suspensivos. Pon los detalles en el subtítulo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"corto"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" convierte la notificación en una pregunta: «Voy», «Visto», «Apagar». Después, el evento te dice quién respondió."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texto de botón propio"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Para una alerta que se resuelve sola (se abre la puerta, alguien saca la ropa de la lavadora), ciérrala en la misma automatización con "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"¿Todas las pantallas? Dispara "},{t:4,k:"event"},{t:3,v:" una vez (consulta «Todas las pantallas a la vez»). Las pantallas siguen funcionando por separado y cada una informa con su propio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"¿Prefieres "},{t:4,k:"bold"},{t:3,v:" que te haga la automatización? Instala la habilidad de ESP Screens en Configuración → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"pedirle a Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Timbre: muestra la alerta y espera a que alguien pulse el botón."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Alguien va a abrir la puerta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avanzado · personalización local"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizado · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Este pequeño archivo es tuyo. Se carga después del paquete común de las pantallas y se mantiene cuando ESP Screens se actualiza. Cambia aquí detalles propios del hardware, como el modelo de pantalla."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"¿Qué se puede cambiar sin riesgo?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Las secciones display, touchscreen y substitutions, los pines y otros detalles del dispositivo. El nombre, la Wi-Fi, la API, OTA y los enlaces a los paquetes los sigue gestionando ESP Screens."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Activo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Listo para vincular"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usar ejemplo"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Vaciar"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 carácter"},{t:2,i:[{t:4,k:"n"},{t:3,v:" caracteres"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 línea"},{t:2,i:[{t:4,k:"n"},{t:3,v:" líneas"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Guardar y comprobar"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Guardar YAML"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No se ha encontrado ningún perfil de ESPHome para esta pantalla."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Los cambios de aquí se aplican en la próxima compilación."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Guarda una vez para vincular este archivo al perfil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Comprobando y guardando…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. El YAML personalizado se conserva en las actualizaciones de firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado guardado."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. ESPHome está comprobando el perfil completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome está comprobando el perfil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome está comprobando el perfil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"El perfil completo es válido. Ya puedes compilar e instalar sin riesgo."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome ha rechazado el perfil completo. Consulta Firmware y USB para ver el registro completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"¿Sustituir el texto actual por el ejemplo?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Ejemplo cargado. Guárdalo cuando estés listo."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"¿Vaciar el YAML personalizado local?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"El YAML personalizado quedará vacío cuando guardes."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Desconocido"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Encendido"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"No disponible"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Calor"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Frío"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Calor/Frío"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Solo ventilador"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Calefacción"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Refrigeración"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Secando"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilador"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Precalentamiento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Antihielo"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Abriendo"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Cerrando"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Reproduciendo"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"En espera"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"En casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuera"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sobre el horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Bajo el horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"En la base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Limpiando"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Volviendo a la base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Despejado, de noche"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lluvioso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Lluvia torrencial"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevado"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevado, lluvioso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Niebla"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Relámpagos"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Relámpagos, lluvioso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excepcional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Bajo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Cargando"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"No está cargando"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frío"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Conectado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desconectado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caliente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detectada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sin luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Desbloqueado"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloqueado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmedo"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"En movimiento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"No se mueve"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Enchufado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desenchufado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Encendido"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"En casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuera"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Ejecutando"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"No se está ejecutando"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Manipulación detectada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Actualización disponible"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Actualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Ejecutar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pulsa"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Justo ahora"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 hora"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ayer"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 día"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" días"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 semana"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 mes"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 año"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" años"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"En "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En 1 hora"},{t:2,i:[{t:3,v:"En "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Mañana"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En 1 día"},{t:2,i:[{t:3,v:"En "},{t:4,k:"n"},{t:3,v:" días"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"a. m."}},pm:{t:0,b:{t:2,i:[{t:3}],s:"p. m."}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"lunes"}},{t:0,b:{t:2,i:[{t:3}],s:"martes"}},{t:0,b:{t:2,i:[{t:3}],s:"miércoles"}},{t:0,b:{t:2,i:[{t:3}],s:"jueves"}},{t:0,b:{t:2,i:[{t:3}],s:"viernes"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mié"}},{t:0,b:{t:2,i:[{t:3}],s:"jue"}},{t:0,b:{t:2,i:[{t:3}],s:"vie"}},{t:0,b:{t:2,i:[{t:3}],s:"sáb"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mié"}},{t:0,b:{t:2,i:[{t:3}],s:"jue"}},{t:0,b:{t:2,i:[{t:3}],s:"vie"}},{t:0,b:{t:2,i:[{t:3}],s:"sáb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"enero"}},{t:0,b:{t:2,i:[{t:3}],s:"febrero"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"mayo"}},{t:0,b:{t:2,i:[{t:3}],s:"junio"}},{t:0,b:{t:2,i:[{t:3}],s:"julio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"septiembre"}},{t:0,b:{t:2,i:[{t:3}],s:"octubre"}},{t:0,b:{t:2,i:[{t:3}],s:"noviembre"}},{t:0,b:{t:2,i:[{t:3}],s:"diciembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"ene"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"abr"}},{t:0,b:{t:2,i:[{t:3}],s:"may"}},{t:0,b:{t:2,i:[{t:3}],s:"jun"}},{t:0,b:{t:2,i:[{t:3}],s:"jul"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"sept"}},{t:0,b:{t:2,i:[{t:3}],s:"oct"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/es-DUs4hvEG.js b/screen_manager/app/static/assets/es-DUs4hvEG.js deleted file mode 100644 index 5831974..0000000 --- a/screen_manager/app/static/assets/es-DUs4hvEG.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Encendido"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"No disponible"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Calor"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Frío"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Calor/Frío"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Solo ventilador"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Calefacción"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Refrigeración"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Secando"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilador"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Precalentamiento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Antihielo"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Abriendo"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Cerrando"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Reproduciendo"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"En espera"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"En casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuera"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sobre el horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Bajo el horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"En la base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Limpiando"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Volviendo a la base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Despejado, de noche"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lluvioso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Lluvia torrencial"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevado"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevado, lluvioso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Niebla"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Relámpagos"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Relámpagos, lluvioso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excepcional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Bajo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Cargando"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"No está cargando"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frío"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Conectado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desconectado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caliente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detectada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sin luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Desbloqueado"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloqueado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmedo"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"En movimiento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"No se mueve"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Enchufado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desenchufado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Encendido"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Apagado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"En casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuera"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Ejecutando"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"No se está ejecutando"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Manipulación detectada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Actualización disponible"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Actualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detectado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"No detectado"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Abierto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Cerrado"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Ejecutar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pulsa"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Justo ahora"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 hora"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ayer"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 día"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" días"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 semana"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 mes"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Hace 1 año"},{t:2,i:[{t:3,v:"Hace "},{t:4,k:"n"},{t:3,v:" años"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"En "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En 1 hora"},{t:2,i:[{t:3,v:"En "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Mañana"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"En 1 día"},{t:2,i:[{t:3,v:"En "},{t:4,k:"n"},{t:3,v:" días"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"a. m."}},pm:{t:0,b:{t:2,i:[{t:3}],s:"p. m."}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"lunes"}},{t:0,b:{t:2,i:[{t:3}],s:"martes"}},{t:0,b:{t:2,i:[{t:3}],s:"miércoles"}},{t:0,b:{t:2,i:[{t:3}],s:"jueves"}},{t:0,b:{t:2,i:[{t:3}],s:"viernes"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mié"}},{t:0,b:{t:2,i:[{t:3}],s:"jue"}},{t:0,b:{t:2,i:[{t:3}],s:"vie"}},{t:0,b:{t:2,i:[{t:3}],s:"sáb"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mié"}},{t:0,b:{t:2,i:[{t:3}],s:"jue"}},{t:0,b:{t:2,i:[{t:3}],s:"vie"}},{t:0,b:{t:2,i:[{t:3}],s:"sáb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"enero"}},{t:0,b:{t:2,i:[{t:3}],s:"febrero"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"mayo"}},{t:0,b:{t:2,i:[{t:3}],s:"junio"}},{t:0,b:{t:2,i:[{t:3}],s:"julio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"septiembre"}},{t:0,b:{t:2,i:[{t:3}],s:"octubre"}},{t:0,b:{t:2,i:[{t:3}],s:"noviembre"}},{t:0,b:{t:2,i:[{t:3}],s:"diciembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"ene"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"abr"}},{t:0,b:{t:2,i:[{t:3}],s:"may"}},{t:0,b:{t:2,i:[{t:3}],s:"jun"}},{t:0,b:{t:2,i:[{t:3}],s:"jul"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"sept"}},{t:0,b:{t:2,i:[{t:3}],s:"oct"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/fr-C0TB0UkD.js b/screen_manager/app/static/assets/fr-C0TB0UkD.js deleted file mode 100644 index 9e6a135..0000000 --- a/screen_manager/app/static/assets/fr-C0TB0UkD.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Activé"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Désactivé"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponible"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Éteint"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Chauffage"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Climatisation"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Chauffage/Climatisation"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Déshumidification"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilation uniquement"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Chauffe"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Rafraîchit"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactif"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Éteint"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Déshumidifie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventile"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Préchauffage"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Dégivrage"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Ouverture"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Fermeture"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Lecture en cours"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pause"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactif"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"En veille"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Maison"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Absent"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Au-dessus de l'horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sous l'horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"À la station d'accueil"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Nettoyage"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pause"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Retour à la station d'accueil"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactif"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensoleillé"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Nuit dégagée"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuageux"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Éclaircies"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Pluvieux"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Averses"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Neigeux"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Neigeux, pluvieux"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Brouillard"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grêle"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Orage"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Orage / Pluie"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Venteux"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptionnel"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Faible"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"En charge"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Pas en charge"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Froid"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connecté"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Déconnecté"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Chaud"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Lumière détectée"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Pas de lumière"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Déverrouillé"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Verrouillé"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Humide"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Sec"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"En mouvement"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Immobile"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Branché"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Débranché"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Activé"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Désactivé"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Maison"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Absent"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problème"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"En cours"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Arrêté"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Dangereux"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sûr"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Détectée"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détectée"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Manipulation détectée"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détectée"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Mise à jour disponible"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"À jour"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Détectée"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détectée"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activer"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Exécuter"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Appuyer"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"À l'instant"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" heure"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" heures"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Hier"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" jour"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" jours"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" semaine"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" semaines"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" mois"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" mois"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" an"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" ans"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" heure"}]},{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" heures"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Demain"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" jour"}]},{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" jours"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"dimanche"}},{t:0,b:{t:2,i:[{t:3}],s:"lundi"}},{t:0,b:{t:2,i:[{t:3}],s:"mardi"}},{t:0,b:{t:2,i:[{t:3}],s:"mercredi"}},{t:0,b:{t:2,i:[{t:3}],s:"jeudi"}},{t:0,b:{t:2,i:[{t:3}],s:"vendredi"}},{t:0,b:{t:2,i:[{t:3}],s:"samedi"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dim."}},{t:0,b:{t:2,i:[{t:3}],s:"lun."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"mer."}},{t:0,b:{t:2,i:[{t:3}],s:"jeu."}},{t:0,b:{t:2,i:[{t:3}],s:"ven."}},{t:0,b:{t:2,i:[{t:3}],s:"sam."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dim."}},{t:0,b:{t:2,i:[{t:3}],s:"lun."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"mer."}},{t:0,b:{t:2,i:[{t:3}],s:"jeu."}},{t:0,b:{t:2,i:[{t:3}],s:"ven."}},{t:0,b:{t:2,i:[{t:3}],s:"sam."}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janvier"}},{t:0,b:{t:2,i:[{t:3}],s:"février"}},{t:0,b:{t:2,i:[{t:3}],s:"mars"}},{t:0,b:{t:2,i:[{t:3}],s:"avril"}},{t:0,b:{t:2,i:[{t:3}],s:"mai"}},{t:0,b:{t:2,i:[{t:3}],s:"juin"}},{t:0,b:{t:2,i:[{t:3}],s:"juillet"}},{t:0,b:{t:2,i:[{t:3}],s:"août"}},{t:0,b:{t:2,i:[{t:3}],s:"septembre"}},{t:0,b:{t:2,i:[{t:3}],s:"octobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"décembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"janv."}},{t:0,b:{t:2,i:[{t:3}],s:"févr."}},{t:0,b:{t:2,i:[{t:3}],s:"mars"}},{t:0,b:{t:2,i:[{t:3}],s:"avr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai"}},{t:0,b:{t:2,i:[{t:3}],s:"juin"}},{t:0,b:{t:2,i:[{t:3}],s:"juil."}},{t:0,b:{t:2,i:[{t:3}],s:"août"}},{t:0,b:{t:2,i:[{t:3}],s:"sept."}},{t:0,b:{t:2,i:[{t:3}],s:"oct."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"déc."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/fr-hu4FKHEL.js b/screen_manager/app/static/assets/fr-hu4FKHEL.js new file mode 100644 index 0000000..94b4b22 --- /dev/null +++ b/screen_manager/app/static/assets/fr-hu4FKHEL.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Annuler"}},online:{t:0,b:{t:2,i:[{t:3}],s:"En ligne"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Hors ligne"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"inconnu"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Modifications non enregistrées"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annuler"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Ouvrir Appareils et services"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Enregistrer et envoyer"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Enregistrement…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Lire les données actuelles"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" résultat. Continuez la saisie pour affiner la liste."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" résultats. Continuez la saisie pour affiner la liste."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Fermer"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Retirer"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Modifier"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Chargement…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Retour"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copier"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nouvel écran"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware et USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertes"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Paramètres"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Connecter et installer"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Cela n'a pas fonctionné. Actualisez la page et réessayez."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Clé API copiée."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La clé API est sélectionnée. Copiez-la avec Ctrl+C ou Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON de la mise en page copié."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Le JSON de la mise en page est sélectionné. Copiez-le avec Ctrl+C ou Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nom de l'action copié."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Le nom de l'action est sélectionné. Copiez-le avec Ctrl+C ou Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copié."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Le YAML est sélectionné. Copiez-le avec Ctrl+C ou Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nom de l'icône copié."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Le nom de l'icône est sélectionné. Copiez-le avec Ctrl+C ou Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Couleur vide copiée."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La couleur vide est sélectionnée. Copiez-la avec Ctrl+C ou Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nom de la couleur copié."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Le nom de la couleur est sélectionné. Copiez-le avec Ctrl+C ou Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Page de gestion injoignable · nouvelle tentative…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connecté"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconnexion à Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Écrans"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Plus"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Actualiser"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Mise à jour"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Mettre à jour"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"En attente de mise à jour"}},available:{t:0,b:{t:2,i:[{t:3,v:"Mise à jour "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Aucun profil ESPHome trouvé avec ce nom d'appareil."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Nouveautés"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Journal complet"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"L'adresse IP, une seule fois ; le nouveau firmware la communique ensuite lui-même."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Adresse IP, p. ex. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Adresse IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Démarrer"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installé, mais pas encore dans Home Assistant. Ajoutez l'appareil ESPHome découvert dans Paramètres → Appareils et services, collez-y la clé API, puis activez « Autoriser l'appareil à effectuer des actions Home Assistant » sous Configurer."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware téléchargé, pas encore dans Home Assistant. Installez-le sur l'écran avec ESPHome Web, puis ajoutez l'appareil ESPHome découvert dans Paramètres → Appareils et services, collez-y la clé API et autorisez les actions Home Assistant sous Configurer."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Pas encore dans Home Assistant. Firmware déjà installé ? Ajoutez l'appareil ESPHome dans Paramètres → Appareils et services, puis autorisez les actions Home Assistant sous Configurer. Pas encore installé ? Firmware et USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copier la clé API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Écrans"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Ajouter à cet écran"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aide-mémoire et alerte de test"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Mises à jour, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Rien à enregistrer"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifier cet écran"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Fait clignoter le rétroéclairage et affiche une carte"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Nécessite un firmware plus récent"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exporter la mise en page"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Télécharger et copier en JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher des écrans, entités, actions…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Aucun résultat. Saisissez une partie du nom d'un écran, d'une entité ou d'une action."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Choisissez un écran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Choisissez un de vos écrans à gauche pour modifier ses tuiles, sa barre supérieure et ses paramètres."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Commencez par un écran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Branchez un CYD ou un Guition en USB sur votre machine Home Assistant. Le profil, le firmware et la première installation se font en une seule fois."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Installer un nouvel écran"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Vous avez des modifications non enregistrées. Ouvrir quand même un autre écran ?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Remplacer la mise en page non enregistrée par une copie de celle de l'autre écran ?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Remplacer la mise en page non enregistrée par celle importée ?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré. Votre écran est en cours de mise à jour."}},other:{t:0,b:{t:2,i:[{t:3,v:"Enregistré. "},{t:4,k:"name"},{t:3,v:" est en cours de mise à jour."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré. L'écran est en cours de mise à jour."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré. Votre dernière modification n'est pas encore envoyée : appuyez à nouveau sur Enregistrer et envoyer."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" clignote et affiche une carte pendant quelques secondes."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Hors ligne · modifications enregistrées"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Mise en page"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Paramètres de l'écran"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré · envoyé à l'écran"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tout est enregistré"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Plus"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifier"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"faire clignoter l'écran"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Nécessite le firmware 0.2.31 ou plus récent"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"depuis Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copier la mise en page de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" écran"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" écrans"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"aucun autre écran"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tuile"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tuiles"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exporter la mise en page"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importer une mise en page…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personnalisé"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avancé"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Aucun profil ESPHome trouvé pour cet écran"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Mettre à jour le firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Tuile retirée : "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Il n'y a pas de place pour cette tuile sur la page "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Aucune page n'est libre pour une tuile pleine page. Libérez d'abord une page."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Cet écran a déjà une tuile qui mène à la page "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Mise en page de "},{t:4,k:"name"},{t:3,v:" copiée. Appuyez sur Enregistrer et envoyer quand elle vous convient."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Mise en page de "},{t:4,k:"name"},{t:3,v:" copiée. Tuiles compatibles avec le firmware de cet écran : "},{t:4,k:"kept"},{t:3,v:" sur "},{t:4,k:"total"},{t:3,v:". Appuyez sur Enregistrer et envoyer quand elle vous convient."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Mise en page importée. Appuyez sur Enregistrer et envoyer quand elle vous convient."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Mise en page importée. Tuiles compatibles avec le firmware de cet écran : "},{t:4,k:"kept"},{t:3,v:" sur "},{t:4,k:"total"},{t:3,v:". Appuyez sur Enregistrer et envoyer quand elle vous convient."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Ce n'est pas du JSON. Exportez d'abord une mise en page, ou collez-en une d'un autre ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Aucune tuile dans ce fichier. Une mise en page exportée depuis ESP Screens était attendue."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tuiles"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tuiles"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Ajoutez votre première lumière, scène ou appareil depuis la bibliothèque."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Appuyez sur la barre supérieure ou sur une tuile pour la modifier. Faites glisser pour déplacer ; déposez sur la page suivante pour en créer une nouvelle."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Les emplacements vides et les positions fixes fonctionnent à partir du firmware 0.2.26. D'ici cette mise à jour, cet écran (firmware "},{t:4,k:"firmware"},{t:3,v:") décale les tuiles vers le premier emplacement libre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Mise en page de l'écran"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Ajouter une page"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page au maximum"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages au maximum"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Supprimer la page"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Les pages suivantes remontent d'un rang"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Modifier la barre supérieure"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Emplacement vide. Cliquez pour ajouter une tuile ici, ou faites-en glisser une."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Emplacement vide "},{t:4,k:"slot"},{t:3,v:" sur la page "},{t:4,k:"page"},{t:3,v:" : ajouter la prochaine tuile ici"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"La prochaine tuile va ici"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vide"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bibliothèque"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entité"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entités"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher par nom, appareil ou pièce…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Ajouter une entité"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tout"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lumières"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatisation"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interrupteurs"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"État"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilateurs"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Ouvertures"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scènes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirateurs"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Capteurs"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Médias"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Météo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valeurs"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Sélecteurs"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personnes"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minuteurs"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Écran"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Pièce"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Toutes les pièces"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Masquer celles déjà placées"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Masquer ce qui est déjà sur cet écran"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tout ce qui est ici est déjà sur cet écran."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Aucune entité trouvée. Essayez un autre nom, une autre pièce ou un autre filtre."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Cet écran peut contenir "},{t:4,k:"n"},{t:3,v:" tuile."}]},{t:2,i:[{t:3,v:"Cet écran peut contenir "},{t:4,k:"n"},{t:3,v:" tuiles."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Cet écran peut contenir "},{t:4,k:"n"},{t:3,v:" tuile ; mettez à jour son firmware pour en avoir 48."}]},{t:2,i:[{t:3,v:"Cet écran peut contenir "},{t:4,k:"n"},{t:3,v:" tuiles ; mettez à jour son firmware pour en avoir 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Faites glisser sur une page, ou appuyez sur + pour ajouter au premier emplacement libre. ⌘K recherche partout."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Lumière"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatisation"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirateur"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilateur"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Ouverture"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Média"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Capteur"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"État"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interrupteur"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interrupteur"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scène"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Météo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valeur"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valeur"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Sélecteur"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Sélecteur"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Écran"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Soleil"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minuteur"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personne"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Caméra"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Image"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entité"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"grande valeur"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"prévisions météo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"graphique"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"horloge numérique"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"horloge analogique"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"course du soleil"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"double"}},full:{t:0,b:{t:2,i:[{t:3}],s:"pleine page"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nom sur l'écran"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatique (depuis Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatique (par défaut)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"L'écran affiche l'icône choisie à partir du firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mène à la page"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vide)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Les tuiles de navigation nécessitent le firmware 0.2.62 : appuyez d'abord sur Mettre à jour pour cet écran."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Cet écran n'a pas de page "},{t:4,k:"page"},{t:3,v:" : toucher la tuile ouvre donc sa dernière page. Choisissez une autre page."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Toucher la tuile ouvre cette page."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Affichage"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Horloge numérique"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Horloge analogique"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nom et état"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Grande valeur"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Prévisions météo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Graphique"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Course du soleil"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant n'a pas de valeurs numériques pour cette entité : le graphique reste donc vide. Choisissez un autre affichage."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Ce service météo n'a pas de prévisions journalières dans Home Assistant. Choisissez un autre affichage."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Taille"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Double largeur"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Pleine page"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Pleine page : un grand bouton qui s'illumine quand l'entité est allumée ; un curseur, des commandes ou un graphique se placent en bas."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Une tuile pleine page nécessite le firmware 0.2.62 : appuyez d'abord sur Mettre à jour pour cet écran."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Page"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nouvelle page"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Commande directe sur la tuile"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant ne propose pas cette commande pour cette entité : elle reste donc vide sur l'écran. Choisissez-en une autre."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"En bas de la tuile pleine page ; toucher ailleurs agit comme réglé ci-dessous."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"À droite de la tuile double largeur, comme les lignes dans Home Assistant. Toucher le nom agit comme réglé ci-dessous."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"L'écran affiche la commande directe à partir du firmware 0.2.19 ; d'ici là, la tuile reste comme avant."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Au toucher"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatique"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Ouvrir les commandes"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Affichage seul"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Allumer / éteindre"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Effectuer une action"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant ne peut pas allumer ni éteindre ceci : toucher la tuile ne fait donc rien. Choisissez une autre option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"L'écran allume et éteint ceci à partir du firmware 0.2.58 : appuyez sur Mettre à jour pour cet écran. D'ici là, toucher la tuile ouvre sa carte."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Maintenez le doigt sur la tuile pour ouvrir sa carte."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Petit curseur sur la tuile"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Non"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Oui, commande directe"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant n'a rien qu'un curseur puisse régler pour cette entité. Choisissez Non."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historique"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" heure"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" heures"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fond pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fond : "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", emplacement "},{t:4,k:"slot"},{t:3,v:" de la page "},{t:4,k:"page"},{t:3,v:". Enter : configurer, touches fléchées : déplacer"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Retirer la tuile"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Retirer "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Récupération auprès de Home Assistant des actions de cette entité…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant ne répond pas pour le moment. Réessayez dans un instant."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choisissez une action"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher, par exemple allumer, position ou lecture"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher une action"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Aucune action trouvée."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant ne propose plus cette action pour cette entité : toucher la tuile ne fait donc rien. Choisissez-en une autre."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (facultatif)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Non défini"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Activé"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Désactivé"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant a besoin de : "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"L'écran effectue une action à partir du firmware 0.2.58 : appuyez sur Mettre à jour pour cet écran. D'ici là, toucher la tuile agit comme Automatique."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icône"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Aucune icône"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher, par exemple lampe, musique ou porte"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher une icône"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Aucune icône, texte seul"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icône : "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Aucune icône trouvée."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Données actuelles"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connexion, état et propriétés prises en charge"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lecture…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Récupération de l'état actuel dans HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"État : "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Petit curseur : "},{t:4,k:"slider"},{t:3,v:" · Affichage : "},{t:4,k:"display"},{t:3,v:" · Taille : "},{t:4,k:"size"},{t:3,v:" · Commande : "},{t:4,k:"control"},{t:3,v:" · Fond : "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"oui"}},no:{t:0,b:{t:2,i:[{t:3}],s:"non"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"aucune"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Par défaut"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Relire"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Retiré de la barre supérieure : "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"La barre supérieure a de la place pour "},{t:4,k:"n"},{t:3,v:" élément."}]},{t:2,i:[{t:3,v:"La barre supérieure a de la place pour "},{t:4,k:"n"},{t:3,v:" éléments."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"C'est déjà dans la barre supérieure."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barre supérieure"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barre supérieure : "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Fourni par l'écran lui-même, fonctionne aussi sans Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" sur "},{t:4,k:"n"},{t:3,v:" élément"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" sur "},{t:4,k:"n"},{t:3,v:" éléments"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Gauche : nom"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Par exemple : Salon"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Droite : heure, capteurs ou horloge"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", emplacement "},{t:4,k:"slot"},{t:3,v:". Enter : configurer, flèches : déplacer"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Retirer "},{t:4,k:"name"},{t:3,v:" de la barre supérieure"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" élément au maximum"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" éléments au maximum"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Ajouter l'heure, la date, l'horloge analogique ou une entité"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Ajouter l'heure, la date ou une entité"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Tout ne tient pas à côté du nom : l'écran laisse de côté les éléments en pointillés. Retirez-en un ou choisissez un nom plus court."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Faites glisser pour réorganiser ; appuyez sur un élément pour le configurer."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Les capteurs, la date et l'horloge analogique apparaissent à partir du firmware "},{t:4,k:"version"},{t:3,v:" ; d'ici cette mise à jour, cet écran affiche le nom et, si l'heure est dans la barre, l'horloge."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Masqué : pas actif en ce moment"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Ne tient pas à côté du nom"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Cadran"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Masqué en ce moment : pas actif"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Ne tient pas à côté du nom pour l'instant"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Aperçu sur l'écran"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Petit cadran avec l'heure"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Contenu affiché"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"« Dernière modification » continue de compter sur l'écran lui-même : « À l'instant », « Il y a 5 min », « Hier »."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatique (comme Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Afficher"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"« Seulement si actif » masque l'élément tant qu'il est éteint, fermé, absent ou à 0. Pratique pour une porte ouverte, un lave-linge en marche ou pour savoir qui est à la maison."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Horloge 24 heures · à modifier dans "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Horloge 12 heures · à modifier dans "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Paramètres → Langue et région"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Aujourd'hui : "},{t:4,k:"date"},{t:3,v:". La date suit l'horloge propre à l'écran."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Monter"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Descendre"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ajouter à la barre supérieure"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" sur "},{t:4,k:"n"},{t:3,v:" emplacement utilisé"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" sur "},{t:4,k:"n"},{t:3,v:" emplacements utilisés"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Fourni par l'écran lui-même"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Déjà ajouté"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggestions de Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Une entité"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher par nom, pièce ou entité, p. ex. température ou porte"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher une entité pour la barre supérieure"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Aucune entité trouvée."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosité"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Nuit"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Écran"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosité"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Mode sombre"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Veille auto"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Veille après"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosité en veille"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Mode nuit"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Début"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fin"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosité de nuit"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Retour à la page 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Après"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Aussi en veille"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Balayer entre les pages"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Boutons de page"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotation"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Les paramètres de l'autre écran sont encore en cours d'enregistrement. Réessayez dans un instant."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Les boutons de page et le balayage sont désactivés : seules les tuiles « Aller à la page » changent de page."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"la page "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"les pages "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Vous avez "},{t:4,k:"n"},{t:3,v:" tuile « Aller à la page », vers "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Vous avez "},{t:4,k:"n"},{t:3,v:" tuiles « Aller à la page », vers "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Vous avez "},{t:4,k:"n"},{t:3,v:" tuile « Aller à la page », vers "},{t:4,k:"targets"},{t:3,v:", mais aucune vers "},{t:4,k:"missing"},{t:3,v:" : vous ne pouvez donc pas l'atteindre."}]},{t:2,i:[{t:3,v:"Vous avez "},{t:4,k:"n"},{t:3,v:" tuiles « Aller à la page », vers "},{t:4,k:"targets"},{t:3,v:", mais aucune vers "},{t:4,k:"missing"},{t:3,v:" : vous ne pouvez donc pas l'atteindre."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Vous avez "},{t:4,k:"n"},{t:3,v:" tuile « Aller à la page », vers "},{t:4,k:"targets"},{t:3,v:", mais aucune vers "},{t:4,k:"missing"},{t:3,v:" : vous ne pouvez donc pas les atteindre."}]},{t:2,i:[{t:3,v:"Vous avez "},{t:4,k:"n"},{t:3,v:" tuiles « Aller à la page », vers "},{t:4,k:"targets"},{t:3,v:", mais aucune vers "},{t:4,k:"missing"},{t:3,v:" : vous ne pouvez donc pas les atteindre."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Vous n'avez aucune tuile « Aller à la page »."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Vous n'avez aucune tuile « Aller à la page » vers "},{t:4,k:"missing"},{t:3,v:" : vous ne pouvez donc pas l'atteindre."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Vous n'avez aucune tuile « Aller à la page » vers "},{t:4,k:"missing"},{t:3,v:" : vous ne pouvez donc pas les atteindre."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Les tuiles vers "},{t:4,k:"pages"},{t:3,v:" se trouvent uniquement sur des pages que vous ne pouvez pas atteindre."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Depuis "},{t:4,k:"pages"},{t:3,v:", aucune tuile ne ramène à la page 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Cet écran est hors ligne. Ses paramètres pourront être modifiés à son retour."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Les modifications s'appliquent tout de suite sur l'écran, et celles faites sur l'écran s'affichent ici."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Les modifications s'appliquent tout de suite. À partir du firmware 0.2.49, l'écran les conserve lui-même."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Cette entité est désactivée dans Home Assistant, ou l'écran redémarre."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" : diminuer"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" : augmenter"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Démarrage de la mise à jour…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilation du firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Écriture du firmware via le Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilation et installation…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"En attente du retour de l'écran…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Vérification de la stabilité…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nouvelle langue : "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Les écrans se mettront désormais à jour automatiquement la nuit."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Les mises à jour automatiques sont désactivées."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Mises à jour du firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Mise à jour vers le firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Aucun écran associé pour l'instant. Les nouveaux écrans reçoivent le firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Le firmware "},{t:4,k:"version"},{t:3,v:" est disponible pour "},{t:4,k:"n"},{t:3,v:" écran."}]},{t:2,i:[{t:3,v:"Le firmware "},{t:4,k:"version"},{t:3,v:" est disponible pour "},{t:4,k:"n"},{t:3,v:" écrans."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Tous les écrans ont le firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Mettre à jour "},{t:4,k:"n"},{t:3,v:" écran"}]},{t:2,i:[{t:3,v:"Mettre à jour les "},{t:4,k:"n"},{t:3,v:" écrans"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Nouveautés du firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Mettre à jour automatiquement chaque nuit"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre 03:00 et 06:00, un écran à la fois. S'arrête en cas d'erreur et la signale dans Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Compétence installée. Claude Code la prend en compte tout de suite."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Compétence installée. Redémarrez Claude Code une fois pour qu'il trouve le nouveau dossier de compétences."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Apprenez ESP Screens à Claude, puis demandez-lui : « Affiche une alerte sur tous mes écrans quand la boîte aux lettres est pleine. » Claude connaît les événements d'alerte, chaque champ, chaque couleur et chaque icône."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installer pour Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Réinstaller"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Mettre à jour la compétence"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Non installée"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installée"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installée · une version plus récente est prête"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Pour Claude Code dans Home Assistant. Écrit un fichier dans "},{t:4,k:"path"},{t:3,v:" ; une nouvelle installation le remplace."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Télécharger pour claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Importez le zip dans Claude sous Personnaliser → Compétences."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tout ce qui entoure vos écrans."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Mes écrans"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Écrans"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ajoutez un écran, ou compilez et réinstallez le firmware d'un écran que vous avez déjà."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compiler et installer via USB ou Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Langue et région"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Langue des écrans"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Langue de Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Langue de Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Les écrans utilisent l'anglais tant que la langue de Home Assistant n'est pas disponible."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · pas encore vérifié, aide bienvenue"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" n'est pas encore vérifié, votre aide est la bienvenue : "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"comment traduire"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Après un changement, chaque écran a besoin d'une mise à jour du firmware, soit une compilation par écran : avec son bouton Mettre à jour, ou lors des mises à jour nocturnes."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Format de l'heure"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatique, selon la langue ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 heures"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 heures"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Format de nombre"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatique, selon la langue ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Votre profil Home Assistant : "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Utiliser ceux-ci"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"L'éditeur suit la langue de votre profil Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré. Chaque écran passe à la nouvelle langue lors de sa prochaine mise à jour."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Une carte sur tout l'écran, déclenchée par une automatisation, sur un écran ou sur tous. L'aide-mémoire donne les noms des actions, les champs, les icônes et les couleurs, avec un formulaire pour en essayer une."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notifications plein écran, depuis une automatisation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compiler et installer le firmware des écrans"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI ESPHome intégrée utilise votre propre profil (YAML avec les clés) et vos secrets. Choisissez le profil de l'écran, puis un port USB (écran branché sur la machine Home Assistant), "},{t:4,k:"ota"},{t:3,v:" avec le nom d'hôte, ou "},{t:4,k:"download"},{t:3,v:" pour installer le firmware sur l'écran depuis votre propre ordinateur. "},{t:4,k:"check"},{t:3,v:" ne fait que valider, "},{t:4,k:"build"},{t:3,v:" compile, "},{t:4,k:"install"},{t:3,v:" installe le firmware sur l'écran. Vos tuiles restent telles quelles dans ESP Screens. La première compilation prend quelques minutes."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Télécharger"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Vérifier"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Compiler seulement"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compiler et installer"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compiler et télécharger"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"La CLI ESPHome est absente. Mettez à jour l'application vers la version 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choisissez le profil voulu, puis un port USB, une adresse IP ou Télécharger."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installer sur"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · aucun écran détecté pour l'instant sur la machine Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Télécharger · installer depuis votre propre ordinateur"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Adresse IP ou nom d'hôte"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Télécharger "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Installez-le sur l'écran avec "},{t:4,k:"esphome_web"},{t:3,v:" dans Chrome ou Edge : Connect, choisissez le port USB de l'écran, Install, puis sélectionnez ce fichier. Il contient votre mot de passe Wi-Fi et les clés de l'écran : gardez-le pour vous."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Connecter et installer."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil enregistré."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un instant…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Prêt à télécharger."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Terminé."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Cela n'a pas fonctionné."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crée le profil propre à l'écran, avec des clés uniques, et compile le firmware. Branchez l'écran avec un câble USB de données sur la machine qui fait tourner Home Assistant, ou téléchargez le firmware et installez-le sur l'écran depuis votre propre ordinateur."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Quel écran avez-vous ?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pouces"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pouces"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nom"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Écran du salon"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nom de l'appareil"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personnaliser"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Chaque écran reçoit son propre profil avec ses propres clés. Quatre écrans ? Refaites ces étapes quatre fois avec un nom différent."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lettres minuscules, chiffres et tirets. Un nom différent pour chaque écran."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nom du Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Mot de passe Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"À remplir une seule fois : ESP Screens l'enregistre dans le secrets.yaml d'ESPHome, et les écrans suivants l'utilisent automatiquement."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Il manque encore les informations Wi-Fi dans votre secrets.yaml d'ESPHome. ESP Screens ne remplit que les lignes manquantes."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Le Wi-Fi vient de votre secrets.yaml d'ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Le secrets.yaml du dossier ESPHome n'est pas un YAML valide. Corrigez d'abord le fichier ; il ne sera pas écrasé."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installer via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Plus tard · enregistrer seulement le profil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Branchez l'écran avec un câble USB de données sur la machine Home Assistant ; la liste s'actualise d'elle-même. Ou choisissez Télécharger pour utiliser votre propre ordinateur."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Téléchargez le firmware et installez-le sur l'écran depuis votre propre ordinateur, dans Chrome ou Edge. Ensuite, les mises à jour passent par le Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Le profil va dans le dossier ESPHome. Vous pourrez l'installer plus tard via Firmware et USB, ou depuis ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Plusieurs écrans sont branchés : choisissez le port de cet écran."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Une seule fois en USB ; ensuite, tout se fait sans fil."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installer"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Enregistrer le profil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Une compilation ou une installation est déjà en cours ("},{t:4,k:"file"},{t:3,v:"). Attendez qu'elle se termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"La CLI ESPHome est absente de cette installation ; seul l'enregistrement du profil est possible."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" est dans le dossier ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Écriture du firmware sur "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilation du firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Le firmware pour "},{t:4,k:"name"},{t:3,v:" est prêt"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Le firmware est sur "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Échec de la compilation"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Échec de l'installation"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installez-le plus tard depuis Firmware et USB : choisissez ce profil, puis le port USB de la machine Home Assistant, ou Télécharger pour installer le firmware sur l'écran depuis votre propre ordinateur. Conservez la clé API pour l'association :"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Ne débranchez pas encore le câble USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Une première compilation prend quelques minutes sur un Raspberry Pi. Vous pouvez quitter cette page : l'installation continue et vous la retrouverez sous Nouvel écran."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Une première compilation prend quelques minutes sur un Raspberry Pi. Vous pouvez quitter cette page : la compilation continue et vous la retrouverez sous Nouvel écran."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Installez-le sur l'écran depuis votre propre ordinateur, puis associez l'écran à Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"L'écran démarre et se connecte à votre Wi-Fi. Associez-le maintenant à Home Assistant :"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"L'écran démarre et se connecte à votre Wi-Fi. Le CYD demande d'abord un étalonnage tactile : touchez les croix. Associez-le maintenant à Home Assistant :"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Voir le journal ci-dessous."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" avec un câble USB de données."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Branchez l'écran sur votre ordinateur"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" dans Chrome ou Edge, cliquez sur Connect et choisissez le port USB de l'écran."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Ouvrez "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" et sélectionnez "},{t:4,k:"file"},{t:3,v:". L'écran redémarre et rejoint votre Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" et sélectionnez "},{t:4,k:"file"},{t:3,v:". L'écran redémarre et rejoint votre Wi-Fi. Le CYD demande d'abord un étalonnage tactile : touchez les croix."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cliquez sur Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Le fichier contient votre mot de passe Wi-Fi et les clés de l'écran : gardez-le pour vous."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Clé API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Cela se passe en dehors d'ESP Screens. Home Assistant découvre "},{t:4,k:"name"},{t:3,v:" comme appareil ESPHome ; cliquez sur Ajouter. Pas découvert ? Ajoutez ESPHome manuellement avec l'adresse IP de l'écran."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allez dans Home Assistant → Paramètres → Appareils et services."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ci-dessus quand Home Assistant demande une clé de chiffrement."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Collez la clé API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" intégration ESPHome → Configurer → « Autoriser l'appareil à effectuer des actions Home Assistant ». Sans cela, l'écran voit tout mais ne commande rien."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Autorisez les actions HA :"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De retour dans ESP Screens, l'écran apparaît dans la liste à gauche en une trentaine de secondes ; d'ici là, il y figure comme « pas encore dans Home Assistant »."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Choisissez vos tuiles."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Journal ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Réessayer"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Installer un autre écran"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Recommencer"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Terminé"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertes · aide-mémoire"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Une notification plein écran, depuis une automatisation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Chaque écran a l'action "},{t:4,k:"action"},{t:3,v:". Elle place une carte par-dessus tout, réveille l'écran et garde le rétroéclairage à luminosité normale jusqu'à ce que quelqu'un touche le bouton ou que le délai expire. Home Assistant n'affiche lui-même ni explication ni listes déroulantes pour les actions ESPHome ; tout ce que vous pouvez remplir est listé ici."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"L'aide-mémoire est encore en cours de chargement ; un instant."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Quelqu'un est à la porte"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porte 3, arrière"}},button:{t:0,b:{t:2,i:[{t:3}],s:"J'arrive"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sections"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Essayer"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Vos écrans"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"Dans une automatisation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Tous les écrans"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Les champs"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icônes"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Couleurs"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportement"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Événements"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Astuces"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envoyez une alerte maintenant, avec les mêmes champs qu'une automatisation. L'écran affiche la carte et, si le clignotement est activé, fait clignoter son rétroéclairage."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Écran"}},all:{t:0,b:{t:2,i:[{t:3,v:"Tous les écrans (prêts : "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · pas prêt"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titre"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Sous-titre"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icône"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Couleur"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texte du bouton"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Délai (secondes, 0 attend le bouton)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Faire clignoter le rétroéclairage"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quatre fois à l'arrivée de l'alerte."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Envoi…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Envoyer l'alerte"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Envoyée à "},{t:4,k:"n"},{t:3,v:" écran."}]},{t:2,i:[{t:3,v:"Envoyée à "},{t:4,k:"n"},{t:3,v:" écrans."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Envoyée à "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Envoyée à l'écran."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" écran ignoré (hors ligne ou firmware trop ancien)."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" écrans ignorés (hors ligne ou firmware trop ancien)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Champs laissés vides : "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Aucun écran n'a pu l'afficher : vérifiez qu'un écran est en ligne avec le firmware "},{t:4,k:"version"},{t:3,v:" ou plus récent."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Blanc (par défaut)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Chaque écran a sa propre action, qui contient le nom de l'appareil. À partir du firmware "},{t:4,k:"version"},{t:3,v:" ; mettez à jour un écran plus ancien avec son bouton Mettre à jour, sous Écrans."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Aucun écran associé pour l'instant. Installez-en un via Nouvel écran ; l'action apparaît dès que Home Assistant voit l'écran."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Mise à jour nécessaire · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nom d'appareil inconnu · mettez à jour l'écran"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Afficher l'alerte"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Fermer l'alerte"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" et recherchez "},{t:4,k:"esphome"},{t:3,v:". Choisissez l'action de votre écran : Home Assistant l'appelle « Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:" »."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ajouter une action"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nom de l'appareil"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant les demande tous les sept ; laissez vide ce que vous n'utilisez pas ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", désactivé)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Remplissez les champs."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Vous préférez le YAML ? Choisissez "},{t:4,k:"edit"},{t:3,v:" sur l'action et collez l'exemple ci-dessous."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Exemple pour"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"un écran (pas encore associé)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Modifier en YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copier le YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Tous les écrans à la fois"}},text:{t:0,b:{t:2,i:[{t:3,v:"Déclenchez l'événement "},{t:4,k:"show"},{t:3,v:" avec les mêmes champs, et ESP Screens transmet l'alerte à chaque écran en ligne, y compris ceux que vous ajouterez plus tard. "},{t:4,k:"dismiss"},{t:3,v:" la retire partout. Dans une automatisation, ajoutez l'action "},{t:4,k:"event"},{t:3,v:" ou collez l'exemple sous "},{t:4,k:"edit"},{t:3,v:". Omettez les champs que vous n'utilisez pas. ESP Screens doit être en marche pour cela."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Déclencher un événement manuel"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Le texte est libre ; la limite est en octets, et une lettre accentuée compte pour deux. Ce qui ne tient pas se termine par des points de suspension (titre) ou est coupé (sous-titre)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Champ"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Ce qu'il fait"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Exemple"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texte"}},int:{t:0,b:{t:2,i:[{t:3}],s:"nombre"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"activé / désactivé"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entité"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" octets"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 à 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Indiquez le nom dans "},{t:4,k:"field"},{t:3,v:", par exemple "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" et le code hexadécimal ("},{t:4,k:"hex"},{t:3,v:") fonctionnent aussi. Seules ces icônes sont incluses dans le firmware ; tout autre nom affiche le triangle d'avertissement. Appuyez sur une icône pour copier son nom."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Pratiques pour les notifications"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher une icône"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Rechercher par nom ou description…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Également disponibles : icônes de commande et de météo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copier "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Aucune icône pour « "},{t:4,k:"query"},{t:3,v:" ». Les noms inconnus affichent le triangle d'avertissement ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Indiquez le nom dans "},{t:4,k:"field"},{t:3,v:". Ce sont les teintes pastel des tuiles, avec un texte foncé. Un nom vide ou inconnu donne la carte blanche. Appuyez pour copier."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Une alerte réveille immédiatement un écran assombri ou éteint et s'affiche par-dessus chaque page, chaque carte de lumière ouverte et la couche de veille."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Réveille l'écran."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Tant que la carte est affichée, le rétroéclairage reste à luminosité normale. La veille et les heures de nuit attendent. Après le bouton, le délai de veille habituel recommence."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allumé jusqu'au bouton."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" attend le bouton, aussi longtemps qu'il le faut. Avec "},{t:4,k:"minute"},{t:3,v:", la carte disparaît au bout d'une minute, mais le bouton la ferme plus tôt."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Délai."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" fait clignoter le rétroéclairage quatre fois à l'arrivée de l'alerte (environ une seconde), puis laisse l'écran allumé."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Clignotement."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Une nouvelle alerte remplace l'actuelle ; il n'y a pas de pile. L'alerte remplacée se signale comme "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Remplacement."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" retire la carte, par exemple si la porte est déjà ouverte. Sans alerte, cette action ne fait rien."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fermeture à distance."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ne fait rien ; seul le bouton la ferme. Ainsi, toucher l'écran pour le réveiller ne ferme jamais l'alerte par accident."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Toucher à côté de la carte"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Chaque fin d'alerte déclenche l'événement "},{t:4,k:"event"},{t:3,v:" avec "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (le nom de l'appareil) et le "},{t:4,k:"device_id"},{t:3,v:" qu'ajoute Home Assistant. Visible dans Paramètres → Outils → Événements."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quand"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Attendre que quelqu'un appuie sur le bouton"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Utilisez une "},{t:4,k:"bold"},{t:3,v:" : orange pour la porte, rouge pour la fumée ou l'eau, vert pour « terminé ». Le texte reste toujours foncé et lisible."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"couleur par type de notification"}},short:{t:0,b:{t:2,i:[{t:3,v:"Gardez un titre "},{t:4,k:"bold"},{t:3,v:" ; un écran affiche une vingtaine de caractères sur une ligne et termine un titre plus long par des points de suspension. Mettez les détails dans le sous-titre."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"court"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" transforme la notification en question : « J'arrive », « Vu », « Éteindre ». L'événement vous dit alors qui a répondu."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texte de bouton personnalisé"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Pour une alerte qui se règle d'elle-même (la porte s'ouvre, le linge est sorti), fermez-la dans la même automatisation avec "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Tous les écrans ? Déclenchez "},{t:4,k:"event"},{t:3,v:" une seule fois (voir Tous les écrans à la fois). Les écrans restent indépendants et chacun répond avec son propre "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Vous préférez "},{t:4,k:"bold"},{t:3,v:" pour l'automatisation ? Installez la compétence ESP Screens dans Paramètres → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"demander à Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Sonnette : afficher l’alerte et attendre qu’on appuie sur le bouton."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Quelqu’un arrive à la porte."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avancé · personnalisation locale"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personnalisé"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personnalisé · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Ce petit fichier est à vous. Il est chargé après le paquet commun des écrans et reste en place quand ESP Screens se met à jour. Modifiez ici les détails propres au matériel, comme un modèle d'écran."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Que peut-on modifier sans risque ?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Écran (display), tactile (touchscreen), substitutions, broches et autres détails de l'appareil. Le nom, le Wi-Fi, l'API, l'OTA et les liens vers les paquets restent gérés automatiquement."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Actif"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Prêt à être rattaché"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personnalisé local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Utiliser l'exemple"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Effacer"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" caractère"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" caractères"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ligne"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lignes"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Enregistrer et vérifier"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Enregistrer le YAML personnalisé"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Aucun profil ESPHome n'a été trouvé pour cet écran."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Les modifications faites ici s'appliquent à la prochaine compilation."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Enregistrez une fois pour rattacher ce fichier au profil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Vérification et enregistrement…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré. Le YAML personnalisé est conservé lors des mises à jour du firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personnalisé enregistré."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Enregistré. ESPHome vérifie le profil complet…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome vérifie le profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome vérifie le profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Le profil complet est valide. Vous pouvez compiler et installer sans risque."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome a refusé le profil complet. Consultez Firmware et USB pour le journal complet."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Remplacer le texte actuel par l'exemple ?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Exemple chargé. Enregistrez-le quand vous le souhaitez."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Effacer le YAML personnalisé local ?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Le YAML personnalisé sera vide après l'enregistrement."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Accueil"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Inconnu"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Activé"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Désactivé"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponible"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Éteint"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Chauffage"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Climatisation"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Chauffage/Climatisation"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Déshumidification"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilation uniquement"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Chauffe"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Rafraîchit"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactif"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Éteint"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Déshumidifie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventile"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Préchauffage"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Dégivrage"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Ouverture"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Fermeture"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Lecture en cours"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pause"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactif"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"En veille"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Maison"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Absent"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Au-dessus de l'horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sous l'horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"À la station d'accueil"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Nettoyage"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"En pause"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Retour à la station d'accueil"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactif"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensoleillé"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Nuit dégagée"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuageux"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Éclaircies"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Pluvieux"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Averses"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Neigeux"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Neigeux, pluvieux"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Brouillard"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grêle"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Orage"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Orage / Pluie"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Venteux"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptionnel"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Faible"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"En charge"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Pas en charge"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Froid"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connecté"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Déconnecté"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Chaud"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Lumière détectée"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Pas de lumière"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Déverrouillé"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Verrouillé"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Humide"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Sec"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"En mouvement"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Immobile"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Branché"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Débranché"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Activé"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Désactivé"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Maison"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Absent"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problème"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"En cours"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Arrêté"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Dangereux"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sûr"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Détectée"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détectée"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Détecté"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détecté"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Manipulation détectée"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détectée"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Mise à jour disponible"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"À jour"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Détectée"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Non détectée"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Ouvert"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fermé"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activer"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Exécuter"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Appuyer"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"À l'instant"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" heure"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" heures"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Hier"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" jour"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" jours"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" semaine"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" semaines"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" mois"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" mois"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" an"}]},{t:2,i:[{t:3,v:"Il y a "},{t:4,k:"n"},{t:3,v:" ans"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" heure"}]},{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" heures"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Demain"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" jour"}]},{t:2,i:[{t:3,v:"Dans "},{t:4,k:"n"},{t:3,v:" jours"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"dimanche"}},{t:0,b:{t:2,i:[{t:3}],s:"lundi"}},{t:0,b:{t:2,i:[{t:3}],s:"mardi"}},{t:0,b:{t:2,i:[{t:3}],s:"mercredi"}},{t:0,b:{t:2,i:[{t:3}],s:"jeudi"}},{t:0,b:{t:2,i:[{t:3}],s:"vendredi"}},{t:0,b:{t:2,i:[{t:3}],s:"samedi"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dim."}},{t:0,b:{t:2,i:[{t:3}],s:"lun."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"mer."}},{t:0,b:{t:2,i:[{t:3}],s:"jeu."}},{t:0,b:{t:2,i:[{t:3}],s:"ven."}},{t:0,b:{t:2,i:[{t:3}],s:"sam."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dim"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"jeu"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sam"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janvier"}},{t:0,b:{t:2,i:[{t:3}],s:"février"}},{t:0,b:{t:2,i:[{t:3}],s:"mars"}},{t:0,b:{t:2,i:[{t:3}],s:"avril"}},{t:0,b:{t:2,i:[{t:3}],s:"mai"}},{t:0,b:{t:2,i:[{t:3}],s:"juin"}},{t:0,b:{t:2,i:[{t:3}],s:"juillet"}},{t:0,b:{t:2,i:[{t:3}],s:"août"}},{t:0,b:{t:2,i:[{t:3}],s:"septembre"}},{t:0,b:{t:2,i:[{t:3}],s:"octobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"décembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"janv."}},{t:0,b:{t:2,i:[{t:3}],s:"févr."}},{t:0,b:{t:2,i:[{t:3}],s:"mars"}},{t:0,b:{t:2,i:[{t:3}],s:"avr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai"}},{t:0,b:{t:2,i:[{t:3}],s:"juin"}},{t:0,b:{t:2,i:[{t:3}],s:"juil."}},{t:0,b:{t:2,i:[{t:3}],s:"août"}},{t:0,b:{t:2,i:[{t:3}],s:"sept."}},{t:0,b:{t:2,i:[{t:3}],s:"oct."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"déc."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:" %"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/index-BtUedJUv.js b/screen_manager/app/static/assets/index-BtUedJUv.js deleted file mode 100644 index c1d05f5..0000000 --- a/screen_manager/app/static/assets/index-BtUedJUv.js +++ /dev/null @@ -1,28 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(i){if(i.ep)return;i.ep=!0;const l=n(i);fetch(i.href,l)}})();function Go(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Ne={},Nn=[],Wt=()=>{},pr=()=>!1,Ti=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ei=e=>e.startsWith("onUpdate:"),tt=Object.assign,Jo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Nu=Object.prototype.hasOwnProperty,Ee=(e,t)=>Nu.call(e,t),pe=Array.isArray,gn=e=>Us(e)==="[object Map]",sn=e=>Us(e)==="[object Set]",Il=e=>Us(e)==="[object Date]",_e=e=>typeof e=="function",Be=e=>typeof e=="string",Kt=e=>typeof e=="symbol",Oe=e=>e!==null&&typeof e=="object",hr=e=>(Oe(e)||_e(e))&&_e(e.then)&&_e(e.catch),mr=Object.prototype.toString,Us=e=>mr.call(e),Fu=e=>Us(e).slice(8,-1),br=e=>Us(e)==="[object Object]",Xo=e=>Be(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,gs=Go(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ai=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Du=/-\w/g,ct=Ai(e=>e.replace(Du,t=>t.slice(1).toUpperCase())),Uu=/\B([A-Z])/g,Cn=Ai(e=>e.replace(Uu,"-$1").toLowerCase()),Pi=Ai(e=>e.charAt(0).toUpperCase()+e.slice(1)),zi=Ai(e=>e?`on${Pi(e)}`:""),Vt=(e,t)=>!Object.is(e,t),ni=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Oi=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ll;const Ii=()=>Ll||(Ll=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function je(e){if(pe(e)){const t={};for(let n=0;nn.startsWith("/*")?"":n).split(ju).forEach(n=>{if(n){const s=n.split(Hu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function me(e){let t="";if(Be(e))t=e;else if(pe(e))for(let n=0;nLt(n,t))}const _r=e=>!!(e&&e.__v_isRef===!0),d=e=>Be(e)?e:e==null?"":pe(e)||Oe(e)&&(e.toString===mr||!_e(e.toString))?_r(e)?d(e.value):JSON.stringify(e,yr,2):String(e),yr=(e,t)=>_r(t)?yr(e,t.value):gn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],l)=>(n[Yi(s,l)+" =>"]=i,n),{})}:sn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Yi(n))}:Kt(t)?Yi(t):Oe(t)&&!pe(t)&&!br(t)?String(t):t,Yi=(e,t="")=>{var n;return Kt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Je;class wr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Je&&(Je.active?(this.parent=Je,this.index=(Je.scopes||(Je.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Je===this)Je=this.prevScope;else{let t=Je;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(ys){let t=ys;for(ys=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;_s;){let t=_s;for(_s=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Cr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Tr(e){let t,n=e.depsTail,s=n;for(;s;){const i=s.prevDep;s.version===-1?(s===n&&(n=i),tl(s),Ju(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=i}e.deps=t,e.depsTail=n}function go(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Er(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Er(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ss)||(e.globalVersion=Ss,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!go(e))))return;e.flags|=2;const t=e.dep,n=Fe,s=It;Fe=e,It=!0;try{Cr(e);const i=e.fn(e._value);(t.version===0||Vt(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{Fe=n,It=s,Tr(e),e.flags&=-3}}function tl(e,t=!1){const{dep:n,prevSub:s,nextSub:i}=e;if(s&&(s.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let l=n.computed.deps;l;l=l.nextDep)tl(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ju(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let It=!0;const Ar=[];function on(){Ar.push(It),It=!1}function ln(){const e=Ar.pop();It=e===void 0?!0:e}function Nl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Fe;Fe=void 0;try{t()}finally{Fe=n}}}let Ss=0;class Xu{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class nl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Fe||!It||Fe===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Fe)n=this.activeLink=new Xu(Fe,this),Fe.deps?(n.prevDep=Fe.depsTail,Fe.depsTail.nextDep=n,Fe.depsTail=n):Fe.deps=Fe.depsTail=n,Pr(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Fe.depsTail,n.nextDep=void 0,Fe.depsTail.nextDep=n,Fe.depsTail=n,Fe.deps===n&&(Fe.deps=s)}return n}trigger(t){this.version++,Ss++,this.notify(t)}notify(t){Qo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{el()}}}function Pr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Pr(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const _o=new WeakMap,Dn=Symbol(""),yo=Symbol(""),Cs=Symbol("");function nt(e,t,n){if(It&&Fe){let s=_o.get(e);s||_o.set(e,s=new Map);let i=s.get(n);i||(s.set(n,i=new nl),i.map=s,i.key=n),i.track()}}function Xt(e,t,n,s,i,l){const r=_o.get(e);if(!r){Ss++;return}const u=f=>{f&&f.trigger()};if(Qo(),t==="clear")r.forEach(u);else{const f=pe(e),h=f&&Xo(n);if(f&&n==="length"){const p=Number(s);r.forEach((b,v)=>{(v==="length"||v===Cs||!Kt(v)&&v>=p)&&u(b)})}else switch((n!==void 0||r.has(void 0))&&u(r.get(n)),h&&u(r.get(Cs)),t){case"add":f?h&&u(r.get("length")):(u(r.get(Dn)),gn(e)&&u(r.get(yo)));break;case"delete":f||(u(r.get(Dn)),gn(e)&&u(r.get(yo)));break;case"set":gn(e)&&u(r.get(Dn));break}}el()}function zn(e){const t=xe(e);return t===e||(nt(t,"iterate",Cs),xt(e))?t:qt(e)?_n(e)?t.map(n=>wn(Et(n))):t.map(wn):t.map(Et)}function Li(e){return nt(e=xe(e),"iterate",Cs),e}function jt(e,t){return qt(e)?wn(_n(e)?Et(t):t):Et(t)}const Zu={__proto__:null,[Symbol.iterator](){return Ji(this,Symbol.iterator,e=>jt(this,e))},concat(...e){return zn(this).concat(...e.map(t=>pe(t)?zn(t):t))},entries(){return Ji(this,"entries",e=>(e[1]=jt(this,e[1]),e))},every(e,t){return zt(this,"every",e,t,void 0,arguments)},filter(e,t){return zt(this,"filter",e,t,n=>n.map(s=>jt(this,s)),arguments)},find(e,t){return zt(this,"find",e,t,n=>jt(this,n),arguments)},findIndex(e,t){return zt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return zt(this,"findLast",e,t,n=>jt(this,n),arguments)},findLastIndex(e,t){return zt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return zt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Xi(this,"includes",e)},indexOf(...e){return Xi(this,"indexOf",e)},join(e){return zn(this).join(e)},lastIndexOf(...e){return Xi(this,"lastIndexOf",e)},map(e,t){return zt(this,"map",e,t,void 0,arguments)},pop(){return cs(this,"pop")},push(...e){return cs(this,"push",e)},reduce(e,...t){return Fl(this,"reduce",e,t)},reduceRight(e,...t){return Fl(this,"reduceRight",e,t)},shift(){return cs(this,"shift")},some(e,t){return zt(this,"some",e,t,void 0,arguments)},splice(...e){return cs(this,"splice",e)},toReversed(){return zn(this).toReversed()},toSorted(e){return zn(this).toSorted(e)},toSpliced(...e){return zn(this).toSpliced(...e)},unshift(...e){return cs(this,"unshift",e)},values(){return Ji(this,"values",e=>jt(this,e))}};function Ji(e,t,n){const s=Li(e),i=s[t]();return s!==e&&!xt(e)&&(i._next=i.next,i.next=()=>{const l=i._next();return l.done||(l.value=n(l.value)),l}),i}const Qu=Array.prototype;function zt(e,t,n,s,i,l){const r=Li(e),u=r!==e&&!xt(e),f=r[t];if(f!==Qu[t]){const b=f.apply(e,l);return u?Et(b):b}let h=n;r!==e&&(u?h=function(b,v){return n.call(this,jt(e,b),v,e)}:n.length>2&&(h=function(b,v){return n.call(this,b,v,e)}));const p=f.call(r,h,s);return u&&i?i(p):p}function Fl(e,t,n,s){const i=Li(e),l=i!==e&&!xt(e);let r=n,u=!1;i!==e&&(l?(u=s.length===0,r=function(h,p,b){return u&&(u=!1,h=jt(e,h)),n.call(this,h,jt(e,p),b,e)}):n.length>3&&(r=function(h,p,b){return n.call(this,h,p,b,e)}));const f=i[t](r,...s);return u?jt(e,f):f}function Xi(e,t,n){const s=xe(e);nt(s,"iterate",Cs);const i=s[t](...n);return(i===-1||i===!1)&&ol(n[0])?(n[0]=xe(n[0]),s[t](...n)):i}function cs(e,t,n=[]){on(),Qo();const s=xe(e)[t].apply(e,n);return el(),ln(),s}const ed=Go("__proto__,__v_isRef,__isVue"),Or=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Kt));function td(e){Kt(e)||(e=String(e));const t=xe(this);return nt(t,"has",e),t.hasOwnProperty(e)}class Ir{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const i=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return l;if(n==="__v_raw")return s===(i?l?dd:Nr:l?Rr:Mr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=pe(t);if(!i){let f;if(r&&(f=Zu[n]))return f;if(n==="hasOwnProperty")return td}const u=Reflect.get(t,n,et(t)?t:s);if((Kt(n)?Or.has(n):ed(n))||(i||nt(t,"get",n),l))return u;if(et(u)){const f=r&&Xo(n)?u:u.value;return i&&Oe(f)?ko(f):f}return Oe(u)?i?ko(u):Bn(u):u}}class Lr extends Ir{constructor(t=!1){super(!1,t)}set(t,n,s,i){let l=t[n];const r=pe(t)&&Xo(n);if(!this._isShallow){const h=qt(l);if(!xt(s)&&!qt(s)&&(l=xe(l),s=xe(s)),!r&&et(l)&&!et(s))return h||(l.value=s),!0}const u=r?Number(n)e,Ys=e=>Reflect.getPrototypeOf(e);function ld(e,t,n){return function(...s){const i=this.__v_raw,l=xe(i),r=gn(l),u=e==="entries"||e===Symbol.iterator&&r,f=e==="keys"&&r,h=i[e](...s),p=n?wo:t?wn:Et;return!t&&nt(l,"iterate",f?yo:Dn),tt(Object.create(h),{next(){const{value:b,done:v}=h.next();return v?{value:b,done:v}:{value:u?[p(b[0]),p(b[1])]:p(b),done:v}}})}}function Gs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ad(e,t){const n={get(i){const l=this.__v_raw,r=xe(l),u=xe(i);e||(Vt(i,u)&&nt(r,"get",i),nt(r,"get",u));const{has:f}=Ys(r),h=t?wo:e?wn:Et;if(f.call(r,i))return h(l.get(i));if(f.call(r,u))return h(l.get(u));l!==r&&l.get(i)},get size(){const i=this.__v_raw;return!e&&nt(xe(i),"iterate",Dn),i.size},has(i){const l=this.__v_raw,r=xe(l),u=xe(i);return e||(Vt(i,u)&&nt(r,"has",i),nt(r,"has",u)),i===u?l.has(i):l.has(i)||l.has(u)},forEach(i,l){const r=this,u=r.__v_raw,f=xe(u),h=t?wo:e?wn:Et;return!e&&nt(f,"iterate",Dn),u.forEach((p,b)=>i.call(l,h(p),h(b),r))}};return tt(n,e?{add:Gs("add"),set:Gs("set"),delete:Gs("delete"),clear:Gs("clear")}:{add(i){const l=xe(this),r=Ys(l),u=xe(i),f=!t&&!xt(i)&&!qt(i)?u:i;return r.has.call(l,f)||Vt(i,f)&&r.has.call(l,i)||Vt(u,f)&&r.has.call(l,u)||(l.add(f),Xt(l,"add",f,f)),this},set(i,l){!t&&!xt(l)&&!qt(l)&&(l=xe(l));const r=xe(this),{has:u,get:f}=Ys(r);let h=u.call(r,i);h||(i=xe(i),h=u.call(r,i));const p=f.call(r,i);return r.set(i,l),h?Vt(l,p)&&Xt(r,"set",i,l):Xt(r,"add",i,l),this},delete(i){const l=xe(this),{has:r,get:u}=Ys(l);let f=r.call(l,i);f||(i=xe(i),f=r.call(l,i)),u&&u.call(l,i);const h=l.delete(i);return f&&Xt(l,"delete",i,void 0),h},clear(){const i=xe(this),l=i.size!==0,r=i.clear();return l&&Xt(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=ld(i,e,t)}),n}function sl(e,t){const n=ad(e,t);return(s,i,l)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Ee(n,i)&&i in s?n:s,i,l)}const rd={get:sl(!1,!1)},cd={get:sl(!1,!0)},ud={get:sl(!0,!1)};const Mr=new WeakMap,Rr=new WeakMap,Nr=new WeakMap,dd=new WeakMap;function fd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Bn(e){return qt(e)?e:il(e,!1,sd,rd,Mr)}function pd(e){return il(e,!1,od,cd,Rr)}function ko(e){return il(e,!0,id,ud,Nr)}function il(e,t,n,s,i){if(!Oe(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=i.get(e);if(l)return l;const r=fd(Fu(e));if(r===0)return e;const u=new Proxy(e,r===2?s:n);return i.set(e,u),u}function _n(e){return qt(e)?_n(e.__v_raw):!!(e&&e.__v_isReactive)}function qt(e){return!!(e&&e.__v_isReadonly)}function xt(e){return!!(e&&e.__v_isShallow)}function ol(e){return e?!!e.__v_raw:!1}function xe(e){const t=e&&e.__v_raw;return t?xe(t):e}function hd(e){return!Ee(e,"__v_skip")&&Object.isExtensible(e)&&vr(e,"__v_skip",!0),e}const Et=e=>Oe(e)?Bn(e):e,wn=e=>Oe(e)?ko(e):e;function et(e){return e?e.__v_isRef===!0:!1}function ke(e){return Fr(e,!1)}function md(e){return Fr(e,!0)}function Fr(e,t){return et(e)?e:new bd(e,t)}class bd{constructor(t,n){this.dep=new nl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:xe(t),this._value=n?t:Et(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||xt(t)||qt(t);t=s?t:xe(t),Vt(t,n)&&(this._rawValue=t,this._value=s?t:Et(t),this.dep.trigger())}}function a(e){return et(e)?e.value:e}const vd={get:(e,t,n)=>t==="__v_raw"?e:a(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return et(i)&&!et(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Dr(e){return _n(e)?e:new Proxy(e,vd)}class gd{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new nl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ss-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Fe!==this)return Sr(this,!0),!0}get value(){const t=this.dep.track();return Er(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function _d(e,t,n=!1){let s,i;return _e(e)?s=e:(s=e.get,i=e.set),new gd(s,i,n)}const Js={},li=new WeakMap;let Mn;function yd(e,t=!1,n=Mn){if(n){let s=li.get(n);s||li.set(n,s=[]),s.push(e)}}function wd(e,t,n=Ne){const{immediate:s,deep:i,once:l,scheduler:r,augmentJob:u,call:f}=n,h=T=>i?T:xt(T)||i===!1||i===0?Zt(T,1):Zt(T);let p,b,v,y,M=!1,E=!1;if(et(e)?(b=()=>e.value,M=xt(e)):_n(e)?(b=()=>h(e),M=!0):pe(e)?(E=!0,M=e.some(T=>_n(T)||xt(T)),b=()=>e.map(T=>{if(et(T))return T.value;if(_n(T))return h(T);if(_e(T))return f?f(T,2):T()})):_e(e)?t?b=f?()=>f(e,2):e:b=()=>{if(v){on();try{v()}finally{ln()}}const T=Mn;Mn=p;try{return f?f(e,3,[y]):e(y)}finally{Mn=T}}:b=Wt,t&&i){const T=b,V=i===!0?1/0:i;b=()=>Zt(T(),V)}const x=kr(),O=()=>{p.stop(),x&&x.active&&Jo(x.effects,p)};if(l&&t){const T=t;t=(...V)=>{const L=T(...V);return O(),L}}let C=E?new Array(e.length).fill(Js):Js;const F=T=>{if(!(!(p.flags&1)||!p.dirty&&!T))if(t){const V=p.run();if(T||i||M||(E?V.some((L,k)=>Vt(L,C[k])):Vt(V,C))){v&&v();const L=Mn;Mn=p;try{const k=[V,C===Js?void 0:E&&C[0]===Js?[]:C,y];C=V,f?f(t,3,k):t(...k)}finally{Mn=L}}}else p.run()};return u&&u(F),p=new $r(b),p.scheduler=r?()=>r(F,!1):F,y=T=>yd(T,!1,p),v=p.onStop=()=>{const T=li.get(p);if(T){if(f)f(T,4);else for(const V of T)V();li.delete(p)}},t?s?F(!0):C=p.run():r?r(F.bind(null,!0),!0):p.run(),O.pause=p.pause.bind(p),O.resume=p.resume.bind(p),O.stop=O,O}function Zt(e,t=1/0,n){if(t<=0||!Oe(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,et(e))Zt(e.value,t,n);else if(pe(e))for(let s=0;s{Zt(s,t,n)});else if(br(e)){for(const s in e)Zt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Zt(e[s],t,n)}return e}function js(e,t,n,s){try{return s?e(...s):e()}catch(i){Mi(i,t,n)}}function Mt(e,t,n,s){if(_e(e)){const i=js(e,t,n,s);return i&&hr(i)&&i.catch(l=>{Mi(l,t,n)}),i}if(pe(e)){const i=[];for(let l=0;l>>1,i=rt[s],l=Ts(i);l=Ts(n)?rt.push(e):rt.splice($d(t),0,e),e.flags|=1,jr()}}function jr(){ai||(ai=Ur.then(Vr))}function xd(e){if(!pe(e))mn&&e.id===-1?mn.splice(Yn+1,0,e):e.flags&1||(Xn.push(e),e.flags|=1);else for(let t=0;tTs(n)-Ts(s));if(Xn.length=0,mn){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Vr(e){try{for(Dt=0;Dt{s._d&&di(-1);const l=ri(t),r=Un.length;let u;try{u=e(...i)}finally{for(let f=Un.length;f>r;f--)mc();ri(l),s._d&&di(1)}return u};return s._n=!0,s._c=!0,s._d=!0,s}function Ae(e,t){if(mt===null)return e;const n=Ui(mt),s=e.dirs||(e.dirs=[]);for(let i=0;i1)return n&&_e(t)?t.call(s&&s.proxy):t}}const Cd=Symbol.for("v-scx"),Td=()=>ws(Cd);function St(e,t,n){return Br(e,t,n)}function Br(e,t,n=Ne){const{immediate:s,deep:i,flush:l,once:r}=n,u=tt({},n),f=t&&s||!t&&l!=="post";let h;if(Ps){if(l==="sync"){const y=Td();h=y.__watcherHandles||(y.__watcherHandles=[])}else if(!f){const y=()=>{};return y.stop=Wt,y.resume=Wt,y.pause=Wt,y}}const p=st;u.call=(y,M,E)=>Mt(y,p,M,E);let b=!1;l==="post"?u.scheduler=y=>{dt(y,p&&p.suspense)}:l!=="sync"&&(b=!0,u.scheduler=(y,M)=>{M?y():ll(y)}),u.augmentJob=y=>{t&&(y.flags|=4),b&&(y.flags|=2,p&&(y.id=p.uid,y.i=p))};const v=wd(e,t,u);return Ps&&(h?h.push(v):f&&v()),v}function Ed(e,t,n){const s=this.proxy,i=Be(e)?e.includes(".")?Kr(s,e):()=>s[e]:e.bind(s,s);let l;_e(t)?l=t:(l=t.handler,n=t);const r=Ws(this),u=Br(i,l.bind(s),n);return r(),u}function Kr(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;ie.__isTeleport,Zi=Symbol("_leaveCb");function Pd(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==an){t=n;break}}return t}function qr(e){if(!rl(e))return Ni(e.type)&&e.children?Pd(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&_e(n.default))return n.default()}}function al(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;al(Ni(n.type)&&qr(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Me(e,t){return _e(e)?tt({name:e.name},t,{setup:e}):e}function zr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ul(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const ci=new WeakMap;function ks(e,t,n,s,i=!1){if(pe(e)){e.forEach((E,x)=>ks(E,t&&(pe(t)?t[x]:t),n,s,i));return}if($s(s)&&!i){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&ks(e,t,n,s.component.subTree);return}const l=s.shapeFlag&4?Ui(s.component):s.el,r=i?null:l,{i:u,r:f}=e,h=t&&t.r,p=u.refs===Ne?u.refs={}:u.refs,b=u.setupState,v=xe(b),y=b===Ne?pr:E=>Ul(p,E)?!1:Ee(v,E),M=(E,x)=>!(x&&Ul(p,x));if(h!=null&&h!==f){if(jl(t),Be(h))p[h]=null,y(h)&&(b[h]=null);else if(et(h)){const E=t;M(h,E.k)&&(h.value=null),E.k&&(p[E.k]=null)}}if(_e(f))js(f,u,12,[r,p]);else{const E=Be(f),x=et(f);if(E||x){const O=()=>{if(e.f){const C=E?y(f)?b[f]:p[f]:M()||!e.k?f.value:p[e.k];if(i)pe(C)&&Jo(C,l);else if(pe(C))C.includes(l)||C.push(l);else if(E)p[f]=[l],y(f)&&(b[f]=p[f]);else{const F=[l];M(f,e.k)&&(f.value=F),e.k&&(p[e.k]=F)}}else E?(p[f]=r,y(f)&&(b[f]=r)):x&&(M(f,e.k)&&(f.value=r),e.k&&(p[e.k]=r))};if(r){const C=()=>{O(),ci.delete(e)};C.id=-1,ci.set(e,C),dt(C,n)}else jl(e),O()}}}function jl(e){const t=ci.get(e);t&&(t.flags|=8,ci.delete(e))}Ii().requestIdleCallback;Ii().cancelIdleCallback;const $s=e=>!!e.type.__asyncLoader,rl=e=>e.type.__isKeepAlive;function Od(e,t){Yr(e,"a",t)}function Id(e,t){Yr(e,"da",t)}function Yr(e,t,n=st){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Fi(t,s,n),n){let i=n.parent;for(;i&&i.parent;)rl(i.parent.vnode)&&Ld(s,t,n,i),i=i.parent}}function Ld(e,t,n,s){const i=Fi(t,e,s,!0);cl(()=>{Jo(s[t],i)},n)}function Fi(e,t,n=st,s=!1){if(n){const i=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...r)=>{on();const u=Ws(n),f=Mt(t,n,e,r);return u(),ln(),f});return s?i.unshift(l):i.push(l),l}}const dn=e=>(t,n=st)=>{(!Ps||e==="sp")&&Fi(e,(...s)=>t(...s),n)},Md=dn("bm"),Tn=dn("m"),Rd=dn("bu"),Nd=dn("u"),os=dn("bum"),cl=dn("um"),Fd=dn("sp"),Dd=dn("rtg"),Ud=dn("rtc");function jd(e,t=st){Fi("ec",e,t)}const Gr="components";function Hs(e,t){return Xr(Gr,e,!0,t)||e}const Jr=Symbol.for("v-ndc");function Hd(e){return Be(e)?Xr(Gr,e,!1)||e:e||Jr}function Xr(e,t,n=!0,s=!1){const i=mt||st;if(i){const l=i.type;{const u=Sf(l,!1);if(u&&(u===t||u===ct(t)||u===Pi(ct(t))))return l}const r=Hl(i[e]||l[e],t)||Hl(i.appContext[e],t);return!r&&s?l:r}}function Hl(e,t){return e&&(e[t]||e[ct(t)]||e[Pi(ct(t))])}function he(e,t,n,s){let i;const l=n,r=pe(e);if(r||Be(e)){const u=r&&_n(e);let f=!1,h=!1;u&&(f=!xt(e),h=qt(e),e=Li(e)),i=new Array(e.length);for(let p=0,b=e.length;pt(u,f,void 0,l));else{const u=Object.keys(e);i=new Array(u.length);for(let f=0,h=u.length;fe?_c(e)?Ui(e):$o(e.parent):null,xs=tt(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>$o(e.parent),$root:e=>$o(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Qr(e),$forceUpdate:e=>e.f||(e.f=()=>{ll(e.update)}),$nextTick:e=>e.n||(e.n=Ri.bind(e.proxy)),$watch:e=>Ed.bind(e)}),Qi=(e,t)=>e!==Ne&&!e.__isScriptSetup&&Ee(e,t),Vd={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:l,accessCache:r,type:u,appContext:f}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return l[t]}else{if(Qi(s,t))return r[t]=1,s[t];if(i!==Ne&&Ee(i,t))return r[t]=2,i[t];if(Ee(l,t))return r[t]=3,l[t];if(n!==Ne&&Ee(n,t))return r[t]=4,n[t];xo&&(r[t]=0)}}const h=xs[t];let p,b;if(h)return t==="$attrs"&&nt(e.attrs,"get",""),h(e);if((p=u.__cssModules)&&(p=p[t]))return p;if(n!==Ne&&Ee(n,t))return r[t]=4,n[t];if(b=f.config.globalProperties,Ee(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:l}=e;return Qi(i,t)?(i[t]=n,!0):s!==Ne&&Ee(s,t)?(s[t]=n,!0):Ee(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,props:l,type:r}},u){let f;return!!(n[u]||e!==Ne&&u[0]!=="$"&&Ee(e,u)||Qi(t,u)||Ee(l,u)||Ee(s,u)||Ee(xs,u)||Ee(i.config.globalProperties,u)||(f=r.__cssModules)&&f[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Ee(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vl(e){return pe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let xo=!0;function Wd(e){const t=Qr(e),n=e.proxy,s=e.ctx;xo=!1,t.beforeCreate&&Wl(t.beforeCreate,e,"bc");const{data:i,computed:l,methods:r,watch:u,provide:f,inject:h,created:p,beforeMount:b,mounted:v,beforeUpdate:y,updated:M,activated:E,deactivated:x,beforeDestroy:O,beforeUnmount:C,destroyed:F,unmounted:T,render:V,renderTracked:L,renderTriggered:k,errorCaptured:A,serverPrefetch:z,expose:P,inheritAttrs:ge,components:G,directives:ie,filters:be}=t;if(h&&Bd(h,s,null),r)for(const ye in r){const $e=r[ye];_e($e)&&(s[ye]=$e.bind(n))}if(i){const ye=i.call(n,n);Oe(ye)&&(e.data=Bn(ye))}if(xo=!0,l)for(const ye in l){const $e=l[ye],Ye=_e($e)?$e.bind(n,n):_e($e.get)?$e.get.bind(n,n):Wt,le=!_e($e)&&_e($e.set)?$e.set.bind(n):Wt,ee=$({get:Ye,set:le});Object.defineProperty(s,ye,{enumerable:!0,configurable:!0,get:()=>ee.value,set:ae=>ee.value=ae})}if(u)for(const ye in u)Zr(u[ye],s,n,ye);if(f){const ye=_e(f)?f.call(n):f;Reflect.ownKeys(ye).forEach($e=>{Sd($e,ye[$e])})}p&&Wl(p,e,"c");function ue(ye,$e){pe($e)?$e.forEach(Ye=>ye(Ye.bind(n))):$e&&ye($e.bind(n))}if(ue(Md,b),ue(Tn,v),ue(Rd,y),ue(Nd,M),ue(Od,E),ue(Id,x),ue(jd,A),ue(Ud,L),ue(Dd,k),ue(os,C),ue(cl,T),ue(Fd,z),pe(P))if(P.length){const ye=e.exposed||(e.exposed={});P.forEach($e=>{Object.defineProperty(ye,$e,{get:()=>n[$e],set:Ye=>n[$e]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});V&&e.render===Wt&&(e.render=V),ge!=null&&(e.inheritAttrs=ge),G&&(e.components=G),ie&&(e.directives=ie),z&&zr(e)}function Bd(e,t,n=Wt){pe(e)&&(e=So(e));for(const s in e){const i=e[s];let l;Oe(i)?"default"in i?l=ws(i.from||s,i.default,!0):l=ws(i.from||s):l=ws(i),et(l)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[s]=l}}function Wl(e,t,n){Mt(pe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Zr(e,t,n,s){let i=s.includes(".")?Kr(n,s):()=>n[s];if(Be(e)){const l=t[e];_e(l)&&St(i,l)}else if(_e(e))St(i,e.bind(n));else if(Oe(e))if(pe(e))e.forEach(l=>Zr(l,t,n,s));else{const l=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(l)&&St(i,l,e)}}function Qr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,u=l.get(t);let f;return u?f=u:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(h=>ui(f,h,r,!0)),ui(f,t,r)),Oe(t)&&l.set(t,f),f}function ui(e,t,n,s=!1){const{mixins:i,extends:l}=t;l&&ui(e,l,n,!0),i&&i.forEach(r=>ui(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const u=Kd[r]||n&&n[r];e[r]=u?u(e[r],t[r]):t[r]}return e}const Kd={data:Bl,props:Kl,emits:Kl,methods:ps,computed:ps,beforeCreate:lt,created:lt,beforeMount:lt,mounted:lt,beforeUpdate:lt,updated:lt,beforeDestroy:lt,beforeUnmount:lt,destroyed:lt,unmounted:lt,activated:lt,deactivated:lt,errorCaptured:lt,serverPrefetch:lt,components:ps,directives:ps,watch:zd,provide:Bl,inject:qd};function Bl(e,t){return t?e?function(){return tt(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function qd(e,t){return ps(So(e),So(t))}function So(e){if(pe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ct(t)}Modifiers`]||e[`${Cn(t)}Modifiers`];function Xd(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Ne;let i=n;const l=t.startsWith("update:"),r=l&&Jd(s,t.slice(7));r&&(r.trim&&(i=n.map(p=>Be(p)?p.trim():p)),r.number&&(i=i.map(Oi)));let u,f=s[u=zi(t)]||s[u=zi(ct(t))];!f&&l&&(f=s[u=zi(Cn(t))]),f&&Mt(f,e,6,i);const h=s[u+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,Mt(h,e,6,i)}}const Zd=new WeakMap;function tc(e,t,n=!1){const s=n?Zd:t.emitsCache,i=s.get(e);if(i!==void 0)return i;const l=e.emits;let r={},u=!1;if(!_e(e)){const f=h=>{const p=tc(h,t,!0);p&&(u=!0,tt(r,p))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!l&&!u?(Oe(e)&&s.set(e,null),null):(pe(l)?l.forEach(f=>r[f]=null):tt(r,l),Oe(e)&&s.set(e,r),r)}function Di(e,t){return!e||!Ti(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Ee(e,t[0].toLowerCase()+t.slice(1))||Ee(e,Cn(t))||Ee(e,t))}function ql(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[l],slots:r,attrs:u,emit:f,render:h,renderCache:p,props:b,data:v,setupState:y,ctx:M,inheritAttrs:E}=e,x=ri(e);let O,C;try{if(n.shapeFlag&4){const T=i||s,V=T;O=Ht(h.call(V,T,p,b,y,v,M)),C=u}else{const T=t;O=Ht(T.length>1?T(b,{attrs:u,slots:r,emit:f}):T(b,null)),C=t.props?u:Qd(u)}}catch(T){Un.length=0,Mi(T,e,1),O=te(an)}let F=O;if(C&&E!==!1){const T=Object.keys(C),{shapeFlag:V}=F;T.length&&V&7&&(l&&T.some(Ei)&&(C=ef(C,l)),F=ts(F,C,!1,!0))}if(n.dirs&&(F=ts(F,null,!1,!0),F.dirs=F.dirs?F.dirs.concat(n.dirs):n.dirs),n.transition){const T=Ni(F.type)&&qr(F)||F;al(T,n.transition)}return O=F,ri(x),O}const Qd=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ti(n))&&((t||(t={}))[n]=e[n]);return t},ef=(e,t)=>{const n={};for(const s in e)(!Ei(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tf(e,t,n){const{props:s,children:i,component:l}=e,{props:r,children:u,patchFlag:f}=t,h=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zl(s,r,h):!!r;if(f&8){const p=t.dynamicProps;for(let b=0;bObject.create(sc),oc=e=>Object.getPrototypeOf(e)===sc;function sf(e,t,n,s=!1){const i={},l=ic();e.propsDefaults=Object.create(null),lc(e,t,i,l);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);n?e.props=s?i:pd(i):e.type.props?e.props=i:e.props=l,e.attrs=l}function of(e,t,n,s){const{props:i,attrs:l,vnode:{patchFlag:r}}=e,u=xe(i),[f]=e.propsOptions;let h=!1;if((s||r>0)&&!(r&16)){if(r&8){const p=e.vnode.dynamicProps;for(let b=0;b{f=!0;const[v,y]=ac(b,t,!0);tt(r,v),y&&u.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!l&&!f)return Oe(e)&&s.set(e,Nn),Nn;if(pe(l))for(let p=0;pe==="_"||e==="_ctx"||e==="$stable",dl=e=>pe(e)?e.map(Ht):[Ht(e)],af=(e,t,n)=>{if(t._n)return t;const s=ne((...i)=>dl(t(...i)),n);return s._c=!1,s},rc=(e,t,n)=>{const s=e._ctx;for(const i in e){if(ul(i))continue;const l=e[i];if(_e(l))t[i]=af(i,l,s);else if(l!=null){const r=dl(l);t[i]=()=>r}}},cc=(e,t)=>{const n=dl(t);e.slots.default=()=>n},uc=(e,t,n)=>{for(const s in t)(n||!ul(s))&&(e[s]=t[s])},rf=(e,t,n)=>{const s=e.slots=ic();if(e.vnode.shapeFlag&32){const i=t._;i?(uc(s,t,n),n&&vr(s,"_",i,!0)):rc(t,s)}else t&&cc(e,t)},cf=(e,t,n)=>{const{vnode:s,slots:i}=e;let l=!0,r=Ne;if(s.shapeFlag&32){const u=t._;u?n&&u===1?l=!1:uc(i,t,n):(l=!t.$stable,rc(t,i)),r=t}else t&&(cc(e,t),r={default:1});if(l)for(const u in i)!ul(u)&&r[u]==null&&delete i[u]},dt=hf;function uf(e){return df(e)}function df(e,t){const n=Ii();n.__VUE__=!0;const{insert:s,remove:i,patchProp:l,createElement:r,createText:u,createComment:f,setText:h,setElementText:p,parentNode:b,nextSibling:v,setScopeId:y=Wt,insertStaticContent:M}=e,E=(w,S,R,W=null,D=null,j=null,J=void 0,Y=null,q=!!S.dynamicChildren)=>{if(w===S)return;w&&!us(w,S)&&(W=we(w),ae(w,D,j,!0),w=null),S.patchFlag===-2&&(q=!1,S.dynamicChildren=null),S.dynamicChildren&&w&&w.dynamicChildren&&w.dynamicChildren.hasOnce&&(S.dynamicChildren===Nn&&(S.dynamicChildren=[]),S.dynamicChildren.hasOnce=!0);const{type:U,ref:ce,shapeFlag:Q}=S;switch(U){case Vs:x(w,S,R,W);break;case an:O(w,S,R,W);break;case to:w==null&&C(S,R,W,J);break;case B:G(w,S,R,W,D,j,J,Y,q);break;default:Q&1?V(w,S,R,W,D,j,J,Y,q):Q&6?ie(w,S,R,W,D,j,J,Y,q):(Q&64||Q&128)&&U.process(w,S,R,W,D,j,J,Y,q,On)}ce!=null&&D?ks(ce,w&&w.ref,j,S||w,!S):ce==null&&w&&w.ref!=null&&ks(w.ref,null,j,w,!0)},x=(w,S,R,W)=>{if(w==null)s(S.el=u(S.children),R,W);else{const D=S.el=w.el;S.children!==w.children&&h(D,S.children)}},O=(w,S,R,W)=>{w==null?s(S.el=f(S.children||""),R,W):S.el=w.el},C=(w,S,R,W)=>{[w.el,w.anchor]=M(w.children,S,R,W,w.el,w.anchor)},F=({el:w,anchor:S},R,W)=>{let D;for(;w&&w!==S;)D=v(w),s(w,R,W),w=D;s(S,R,W)},T=({el:w,anchor:S})=>{let R;for(;w&&w!==S;)R=v(w),i(w),w=R;i(S)},V=(w,S,R,W,D,j,J,Y,q)=>{if(S.type==="svg"?J="svg":S.type==="math"&&(J="mathml"),w==null)L(S,R,W,D,j,J,Y,q);else{const U=w.el&&w.el._isVueCE?w.el:null;try{U&&U._beginPatch(),z(w,S,D,j,J,Y,q)}finally{U&&U._endPatch()}}},L=(w,S,R,W,D,j,J,Y)=>{let q,U;const{props:ce,shapeFlag:Q,transition:Z,dirs:I}=w;if(q=w.el=r(w.type,j,ce&&ce.is,ce),Q&8?p(q,w.children):Q&16&&A(w.children,q,null,W,D,eo(w,j),J,Y),I&&In(w,null,W,"created"),k(q,w,w.scopeId,J,W),ce){for(const re in ce)re!=="value"&&!gs(re)&&l(q,re,null,ce[re],j,W);"value"in ce&&l(q,"value",null,ce.value,j),(U=ce.onVnodeBeforeMount)&&Ft(U,W,w)}I&&In(w,null,W,"beforeMount");const N=ff(D,Z);N&&Z.beforeEnter(q),s(q,S,R),((U=ce&&ce.onVnodeMounted)||N||I)&&dt(()=>{U&&Ft(U,W,w),N&&Z.enter(q),I&&In(w,null,W,"mounted")},D)},k=(w,S,R,W,D)=>{if(R&&y(w,R),W)for(let j=0;j{for(let U=q;U{const Y=S.el=w.el;let{patchFlag:q,dynamicChildren:U,dirs:ce}=S;q|=w.patchFlag&16;const Q=w.props||Ne,Z=S.props||Ne;let I;if(R&&Ln(R,!1),(I=Z.onVnodeBeforeUpdate)&&Ft(I,R,S,w),ce&&In(S,w,R,"beforeUpdate"),R&&Ln(R,!0),U&&(!w.dynamicChildren||w.dynamicChildren.length!==U.length)&&(q=0,J=!1,U=null),(Q.innerHTML&&Z.innerHTML==null||Q.textContent&&Z.textContent==null)&&p(Y,""),U?P(w.dynamicChildren,U,Y,R,W,eo(S,D),j):J||$e(w,S,Y,null,R,W,eo(S,D),j,!1),q>0){if(q&16)ge(Y,Q,Z,R,D);else if(q&2&&Q.class!==Z.class&&l(Y,"class",null,Z.class,D),q&4&&l(Y,"style",Q.style,Z.style,D),q&8){const N=S.dynamicProps;for(let re=0;re{I&&Ft(I,R,S,w),ce&&In(S,w,R,"updated")},W)},P=(w,S,R,W,D,j,J)=>{for(let Y=0;Y{if(S!==R){if(S!==Ne)for(const j in S)!gs(j)&&!(j in R)&&l(w,j,S[j],null,D,W);for(const j in R){if(gs(j))continue;const J=R[j],Y=S[j];J!==Y&&j!=="value"&&l(w,j,Y,J,D,W)}"value"in R&&l(w,"value",S.value,R.value,D)}},G=(w,S,R,W,D,j,J,Y,q)=>{const U=S.el=w?w.el:u(""),ce=S.anchor=w?w.anchor:u("");let{patchFlag:Q,dynamicChildren:Z,slotScopeIds:I}=S;I&&(Y=Y?Y.concat(I):I),w==null?(s(U,R,W),s(ce,R,W),A(S.children||[],R,ce,D,j,J,Y,q)):Q>0&&Q&64&&Z&&w.dynamicChildren&&w.dynamicChildren.length===Z.length?(P(w.dynamicChildren,Z,R,D,j,J,Y),(S.key!=null||D&&S===D.subTree)&&dc(w,S,!0)):$e(w,S,R,ce,D,j,J,Y,q)},ie=(w,S,R,W,D,j,J,Y,q)=>{S.slotScopeIds=Y,w==null?S.shapeFlag&512?D.ctx.activate(S,R,W,J,q):be(S,R,W,D,j,J,q):se(w,S,q)},be=(w,S,R,W,D,j,J)=>{const Y=w.component=yf(w,W,D);if(rl(w)&&(Y.ctx.renderer=On),wf(Y,!1,J),Y.asyncDep){if(D&&D.registerDep(Y,ue,J),!w.el){const q=Y.subTree=te(an);O(null,q,S,R),w.placeholder=q.el}}else ue(Y,w,S,R,D,j,J)},se=(w,S,R)=>{const W=S.component=w.component;if(tf(w,S,R))if(W.asyncDep&&!W.asyncResolved){S.el=w.el,ye(W,S,R);return}else W.next=S,W.update();else S.el=w.el,W.vnode=S},ue=(w,S,R,W,D,j,J)=>{const Y=()=>{if(w.isMounted){let{next:Q,bu:Z,u:I,parent:N,vnode:re}=w;{const yt=fc(w);if(yt){Q&&(Q.el=re.el,ye(w,Q,J)),yt.asyncDep.then(()=>{dt(()=>{w.isUnmounted||U()},D)});return}}let fe=Q,Ie;Ln(w,!1),Q?(Q.el=re.el,ye(w,Q,J)):Q=re,Z&&ni(Z),(Ie=Q.props&&Q.props.onVnodeBeforeUpdate)&&Ft(Ie,N,Q,re),Ln(w,!0);const Ue=ql(w),We=w.subTree;w.subTree=Ue,E(We,Ue,b(We.el),we(We),w,D,j),Q.el=Ue.el,fe===null&&nf(w,Ue.el),I&&dt(I,D),(Ie=Q.props&&Q.props.onVnodeUpdated)&&dt(()=>Ft(Ie,N,Q,re),D)}else{let Q;const{el:Z,props:I}=S,{bm:N,m:re,parent:fe,root:Ie,type:Ue}=w,We=$s(S);Ln(w,!1),N&&ni(N),!We&&(Q=I&&I.onVnodeBeforeMount)&&Ft(Q,fe,S),Ln(w,!0);{Ie.ce&&Ie.ce._hasShadowRoot()&&Ie.ce._injectChildStyle(Ue,w.parent?w.parent.type:void 0);const yt=w.subTree=ql(w);E(null,yt,R,W,w,D,j),S.el=yt.el}if(re&&dt(re,D),!We&&(Q=I&&I.onVnodeMounted)){const yt=S;dt(()=>Ft(Q,fe,yt),D)}(S.shapeFlag&256||fe&&$s(fe.vnode)&&fe.vnode.shapeFlag&256)&&w.a&&dt(w.a,D),w.isMounted=!0,S=R=W=null}};w.scope.on();const q=w.effect=new $r(Y);w.scope.off();const U=w.update=q.run.bind(q),ce=w.job=q.runIfDirty.bind(q);ce.i=w,ce.id=w.uid,q.scheduler=()=>ll(ce),Ln(w,!0),U()},ye=(w,S,R)=>{S.component=w;const W=w.vnode.props;w.vnode=S,w.next=null,of(w,S.props,W,R),cf(w,S.children,R),on(),Dl(w),ln()},$e=(w,S,R,W,D,j,J,Y,q=!1)=>{const U=w&&w.children,ce=w?w.shapeFlag:0,Q=S.children,{patchFlag:Z,shapeFlag:I}=S;if(Z>0){if(Z&128){le(U,Q,R,W,D,j,J,Y,q);return}else if(Z&256){Ye(U,Q,R,W,D,j,J,Y,q);return}}I&8?(ce&16&&Te(U,D,j),Q!==U&&p(R,Q)):ce&16?I&16?le(U,Q,R,W,D,j,J,Y,q):Te(U,D,j,!0):(ce&8&&p(R,""),I&16&&A(Q,R,W,D,j,J,Y,q))},Ye=(w,S,R,W,D,j,J,Y,q)=>{w=w||Nn,S=S||Nn;const U=w.length,ce=S.length,Q=Math.min(U,ce);let Z;for(Z=0;Zce?Te(w,D,j,!0,!1,Q):A(S,R,W,D,j,J,Y,q,Q)},le=(w,S,R,W,D,j,J,Y,q)=>{let U=0;const ce=S.length;let Q=w.length-1,Z=ce-1;for(;U<=Q&&U<=Z;){const I=w[U],N=S[U]=q?Gt(S[U]):Ht(S[U]);if(us(I,N))E(I,N,R,null,D,j,J,Y,q);else break;U++}for(;U<=Q&&U<=Z;){const I=w[Q],N=S[Z]=q?Gt(S[Z]):Ht(S[Z]);if(us(I,N))E(I,N,R,null,D,j,J,Y,q);else break;Q--,Z--}if(U>Q){if(U<=Z){const I=Z+1,N=IZ)for(;U<=Q;)ae(w[U],D,j,!0),U++;else{const I=U,N=U,re=new Map;for(U=N;U<=Z;U++){const ht=S[U]=q?Gt(S[U]):Ht(S[U]);ht.key!=null&&re.set(ht.key,U)}let fe,Ie=0;const Ue=Z-N+1;let We=!1,yt=0;const qn=new Array(Ue);for(U=0;U=Ue){ae(ht,D,j,!0);continue}let Nt;if(ht.key!=null)Nt=re.get(ht.key);else for(fe=N;fe<=Z;fe++)if(qn[fe-N]===0&&us(ht,S[fe])){Nt=fe;break}Nt===void 0?ae(ht,D,j,!0):(qn[Nt-N]=U+1,Nt>=yt?yt=Nt:We=!0,E(ht,S[Nt],R,null,D,j,J,Y,q),Ie++)}const Al=We?pf(qn):Nn;for(fe=Al.length-1,U=Ue-1;U>=0;U--){const ht=N+U,Nt=S[ht],Pl=S[ht+1],Ol=ht+1{const{el:j,type:J,transition:Y,children:q,shapeFlag:U}=w;if(U&6){ee(w.component.subTree,S,R,W);return}if(U&128){w.suspense.move(S,R,W);return}if(U&64){J.move(w,S,R,On);return}if(J===B){s(j,S,R);for(let Q=0;QY.enter(j),D));else{const{leave:Q,delayLeave:Z,afterLeave:I}=Y,N=()=>{w.ctx.isUnmounted?i(j):s(j,S,R)},re=()=>{const fe=j._isLeaving||!!j[Zi];j._isLeaving&&j[Zi](!0),Y.persisted&&!fe?N():Q(j,()=>{N(),I&&I()})};Z?Z(j,N,re):re()}else s(j,S,R)},ae=(w,S,R,W=!1,D=!1)=>{const{type:j,props:J,ref:Y,children:q,dynamicChildren:U,shapeFlag:ce,patchFlag:Q,dirs:Z,cacheIndex:I,memo:N}=w;if((Q===-2||U&&U.hasOnce)&&(D=!1),Y!=null&&(on(),ks(Y,null,R,w,!0),ln()),I!=null&&(!w.ctx||w.ctx===S)&&(S.renderCache[I]=void 0),ce&256){S.ctx.deactivate(w);return}const re=ce&1&&Z,fe=!$s(w);let Ie;if(fe&&(Ie=J&&J.onVnodeBeforeUnmount)&&Ft(Ie,S,w),ce&6)K(w.component,R,W);else{if(ce&128){w.suspense.unmount(R,W);return}re&&In(w,null,S,"beforeUnmount"),ce&64?w.type.remove(w,S,R,On,W):U&&!U.hasOnce&&(j!==B||Q>0&&Q&64)?Te(U,S,R,!1,!0):(j===B&&Q&384||!D&&ce&16)&&Te(q,S,R),W&&de(w)}const Ue=N!=null&&I==null;(fe&&(Ie=J&&J.onVnodeUnmounted)||re||Ue)&&dt(()=>{Ie&&Ft(Ie,S,w),re&&In(w,null,S,"unmounted"),Ue&&(w.el=null)},R)},de=w=>{const{type:S,el:R,anchor:W,transition:D}=w;if(S===B){X(R,W);return}if(S===to){T(w),D&&!D.persisted&&D.afterLeave&&D.afterLeave();return}const j=()=>{i(R),D&&!D.persisted&&D.afterLeave&&D.afterLeave()};if(w.shapeFlag&1&&D&&!D.persisted){const{leave:J,delayLeave:Y}=D,q=()=>J(R,j);Y?Y(w.el,j,q):q()}else j()},X=(w,S)=>{let R;for(;w!==S;)R=v(w),i(w),w=R;i(S)},K=(w,S,R)=>{const{bum:W,scope:D,job:j,subTree:J,um:Y,m:q,a:U}=w;Gl(q),Gl(U),W&&ni(W),D.stop(),j?(j.flags|=8,ae(J,w,S,R)):w.vnode.el&&J&&(J.transition=w.vnode.transition,ae(J,w,S,R)),Y&&dt(Y,S),dt(()=>{w.isUnmounted=!0},S)},Te=(w,S,R,W=!1,D=!1,j=0)=>{for(let J=j;J{if(w.shapeFlag&6)return we(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const S=v(w.anchor||w.el),R=S&&S[Ad];return R?v(R):S};let rs=!1;const zs=(w,S,R)=>{let W;w==null?S._vnode&&(ae(S._vnode,null,null,!0),W=S._vnode.component):E(S._vnode||null,w,S,null,null,null,R),S._vnode=w,rs||(rs=!0,Dl(W),Hr(),rs=!1)},On={p:E,um:ae,m:ee,r:de,mt:be,mc:A,pc:$e,pbc:P,n:we,o:e};return{render:zs,hydrate:void 0,createApp:Gd(zs)}}function eo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ln({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ff(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function dc(e,t,n=!1){const s=e.children,i=t.children;if(pe(s)&&pe(i))for(let l=0;l>1,e[n[u]]0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function fc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:fc(t)}function Gl(e){if(e)for(let t=0;te.__isSuspense;function hf(e,t){t&&t.pendingBranch?pe(e)?t.effects.push(...e):t.effects.push(e):xd(e)}const B=Symbol.for("v-fgt"),Vs=Symbol.for("v-txt"),an=Symbol.for("v-cmt"),to=Symbol.for("v-stc"),Un=[];let bt=null;function g(e=!1){Un.push(bt=e?null:[])}function mc(){Un.pop(),bt=Un[Un.length-1]||null}let Es=1;function di(e,t=!1){Es+=e,e<0&&bt&&t&&(bt.hasOnce=!0)}function bc(e){return e.dynamicChildren=Es>0?bt||Nn:null,mc(),Es>0&&bt&&bt.push(e),e}function _(e,t,n,s,i,l){return bc(o(e,t,n,s,i,l,!0))}function it(e,t,n,s,i){return bc(te(e,t,n,s,i,!0))}function fi(e){return e?e.__v_isVNode===!0:!1}function us(e,t){return e.type===t.type&&e.key===t.key}const vc=({key:e})=>e??null,si=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Be(e)||et(e)||_e(e)?{i:mt,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,s=0,i=null,l=e===B?0:1,r=!1,u=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&vc(t),ref:t&&si(t),scopeId:Wr,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:mt};return u?(pi(f,n),l&128&&e.normalize(f)):n&&(f.shapeFlag|=Be(n)?8:16),Es>0&&!r&&bt&&(f.patchFlag>0||l&6)&&f.patchFlag!==32&&bt.push(f),f}const te=mf;function mf(e,t=null,n=null,s=0,i=null,l=!1){if((!e||e===Jr)&&(e=an),fi(e)){const u=ts(e,t,!0);return n&&pi(u,n),Es>0&&!l&&bt&&(u.shapeFlag&6?bt[bt.indexOf(e)]=u:bt.push(u)),u.patchFlag=-2,u}if(Cf(e)&&(e=e.__vccOpts),t){t=bf(t);let{class:u,style:f}=t;u&&!Be(u)&&(t.class=me(u)),Oe(f)&&(ol(f)&&!pe(f)&&(f=tt({},f)),t.style=je(f))}const r=Be(e)?1:hc(e)?128:Ni(e)?64:Oe(e)?4:_e(e)?2:0;return o(e,t,n,s,i,r,l,!0)}function bf(e){return e?ol(e)||oc(e)?tt({},e):e:null}function ts(e,t,n=!1,s=!1){const{props:i,ref:l,patchFlag:r,children:u,transition:f}=e,h=t?vf(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&vc(h),ref:t&&t.ref?n&&l?pe(l)?l.concat(si(t)):[l,si(t)]:si(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==B?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ts(e.ssContent),ssFallback:e.ssFallback&&ts(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return f&&s&&al(p,f.clone(p)),p}function Re(e=" ",t=0){return te(Vs,null,e,t)}function H(e="",t=!1){return t?(g(),it(an,null,e)):te(an,null,e)}function Ht(e){return e==null||typeof e=="boolean"?te(an):pe(e)?te(B,null,e.slice()):fi(e)?Gt(e):te(Vs,null,String(e))}function Gt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ts(e)}function pi(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(pe(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),pi(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!oc(t)?t._ctx=mt:i===3&&mt&&(mt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(_e(t)){if(s&65){pi(e,{default:t});return}t={default:t,_ctx:mt},n=32}else t=String(t),s&64?(n=16,t=[Re(t)]):n=8;e.children=t,e.shapeFlag|=n}function vf(...e){const t={};for(let n=0;nst||mt;let hi,As;{const e=Ii(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),l=>{i.length>1?i.forEach(r=>r(l)):i[0](l)}};hi=t("__VUE_INSTANCE_SETTERS__",n=>st=n),As=t("__VUE_SSR_SETTERS__",n=>Ps=n)}const Ws=e=>{const t=st;return hi(e),e.scope.on(),()=>{e.scope.off(),hi(t)}},Jl=()=>{st&&st.scope.off(),hi(null)};function _c(e){return e.vnode.shapeFlag&4}let Ps=!1;function wf(e,t=!1,n=!1){t&&As(t);const{props:s,children:i}=e.vnode,l=_c(e);sf(e,s,l,t),rf(e,i,n||t);const r=l?kf(e,t):void 0;return t&&As(!1),r}function kf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vd);const{setup:s}=n;if(s){on();const i=e.setupContext=s.length>1?xf(e):null,l=Ws(e),r=js(s,e,0,[e.props,i]),u=hr(r);if(ln(),l(),(u||e.sp)&&!$s(e)&&zr(e),u){if(r.then(Jl,Jl),t)return r.then(f=>{As(!0);try{Xl(e,f,t)}finally{As(!1)}}).catch(f=>{Mi(f,e,0)});e.asyncDep=r}else Xl(e,r)}else yc(e)}function Xl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Oe(t)&&(e.setupState=Dr(t)),yc(e)}function yc(e,t,n){const s=e.type;e.render||(e.render=s.render||Wt);{const i=Ws(e);on();try{Wd(e)}finally{ln(),i()}}}const $f={get(e,t){return nt(e,"get",""),e[t]}};function xf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,$f),slots:e.slots,emit:e.emit,expose:t}}function Ui(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Dr(hd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in xs)return xs[n](e)},has(t,n){return n in t||n in xs}})):e.proxy}function Sf(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function Cf(e){return _e(e)&&"__vccOpts"in e}const $=(e,t)=>_d(e,t,Ps);function mi(e,t,n){try{di(-1);const s=arguments.length;return s===2?Oe(t)&&!pe(t)?fi(t)?te(e,null,[t]):te(e,t):te(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&fi(n)&&(n=[n]),te(e,t,n))}finally{di(1)}}const Tf="3.5.43";let To;const Zl=typeof window<"u"&&window.trustedTypes;if(Zl)try{To=Zl.createPolicy("vue",{createHTML:e=>e})}catch{}const wc=To?e=>To.createHTML(e):e=>e,Ef="http://www.w3.org/2000/svg",Af="http://www.w3.org/1998/Math/MathML",Yt=typeof document<"u"?document:null,Ql=Yt&&Yt.createElement("template"),Pf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?Yt.createElementNS(Ef,e):t==="mathml"?Yt.createElementNS(Af,e):n?Yt.createElement(e,{is:n}):Yt.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>Yt.createTextNode(e),createComment:e=>Yt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Yt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,l){const r=n?n.previousSibling:t.lastChild;if(i&&(i===l||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===l||!(i=i.nextSibling)););else{Ql.innerHTML=wc(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const u=Ql.content;if(s==="svg"||s==="mathml"){const f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Of=Symbol("_vtc");function If(e,t,n){const s=e[Of];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ea=Symbol("_vod"),Lf=Symbol("_vsh"),Mf=Symbol(""),Rf=/(?:^|;)\s*display\s*:/;function Nf(e,t,n){const s=e.style,i=Be(n);let l=!1;if(n&&!i){if(t)if(Be(t))for(const r of t.split(";")){const u=r.slice(0,r.indexOf(":")).trim();n[u]==null&&hs(s,u,"")}else for(const r in t)n[r]==null&&hs(s,r,"");for(const r in n){r==="display"&&(l=!0);const u=n[r];u!=null?Df(e,r,!Be(t)&&t?t[r]:void 0,u)||hs(s,r,u):hs(s,r,"")}}else if(i){if(t!==n){const r=s[Mf];r&&(n+=";"+r),s.cssText=n,l=Rf.test(n)}}else t&&e.removeAttribute("style");ea in e&&(e[ea]=l?s.display:"",e[Lf]&&(s.display="none"))}const Xs=/\s*!important$/;function hs(e,t,n){if(pe(n))n.forEach(s=>hs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))Xs.test(n)?e.setProperty(t,n.replace(Xs,""),"important"):e.setProperty(t,n);else{const s=Ff(e,t);Xs.test(n)?e.setProperty(Cn(s),n.replace(Xs,""),"important"):e[s]=n}}const ta=["Webkit","Moz","ms"],no={};function Ff(e,t){const n=no[t];if(n)return n;let s=ct(t);if(s!=="filter"&&s in e)return no[t]=s;s=Pi(s);for(let i=0;iso||(Bf.then(()=>so=0),so=Date.now());function qf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const i=n.value;if(pe(i)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=i.slice(),u=[s];for(let f=0;fe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,zf=(e,t,n,s,i,l)=>{const r=i==="svg";t==="class"?If(e,s,r):t==="style"?Nf(e,n,s):Ti(t)?Ei(t)||jf(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yf(e,t,s,r))?(ia(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&sa(e,t,s,r,l,t!=="value")):e._isVueCE&&(Gf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Be(s)))?ia(e,ct(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),sa(e,t,s,r))};function Yf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&la(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return la(t)&&Be(n)?!1:t in e}function Gf(e,t){const n=e._def.props;if(!n)return!1;const s=ct(t);return Array.isArray(n)?n.some(i=>ct(i)===s):Object.keys(n).some(i=>ct(i)===s)}const kn=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pe(t)?n=>ni(t,n):t};function Jf(e){e.target.composing=!0}function aa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vt=Symbol("_assign"),Zs=Symbol("_initialValue");function io(e,t,n){return t&&(e=e.trim()),n&&(e=Oi(e)),e}const Xe={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e.parentNode&&(e.type==="text"?e[Zs]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Zs]=e.defaultValue.replace(/\r\n?/g,` -`))),e[vt]=kn(i);const l=s||i.props&&i.props.type==="number";Qt(e,t?"change":"input",r=>{r.target.composing||e[vt](io(e.value,n,l))}),(n||l)&&Qt(e,"change",()=>{e.value=io(e.value,n,l)}),t||(Qt(e,"compositionstart",Jf),Qt(e,"compositionend",aa),Qt(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const i=t??"",l=e[Zs];delete e[Zs],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[vt](io(e.value,n,s)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:l}},r){if(e[vt]=kn(r),e.composing)return;const u=(l||e.type==="number")&&!/^0\d/.test(e.value)?Oi(e.value):e.value,f=t??"";if(u===f)return;const h=e.getRootNode();(h instanceof Document||h instanceof ShadowRoot)&&h.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f)}},Xf={deep:!0,created(e,t,n){e[vt]=kn(n),Qt(e,"change",()=>{const s=e._modelValue,i=ns(e),l=e.checked,r=e[vt];if(pe(s)){const u=Zo(s,i),f=u!==-1;if(l&&!f)r(s.concat(i));else if(!l&&f){const h=[...s];h.splice(u,1),r(h)}}else if(sn(s)){const u=new Set(s);l?u.add(i):u.delete(i),r(u)}else r(kc(e,l))})},mounted:ra,beforeUpdate(e,t,n){e[vt]=kn(n),ra(e,t,n)}};function ra(e,{value:t,oldValue:n},s){e._modelValue=t;let i;if(pe(t))i=Zo(t,s.props.value)>-1;else if(sn(t))i=t.has(s.props.value);else{if(t===n)return;i=Lt(t,kc(e,!0))}e.checked!==i&&(e.checked=i)}const ca={created(e,{value:t},n){e.checked=Lt(t,n.props.value),e[vt]=kn(n),Qt(e,"change",()=>{e[vt](ns(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vt]=kn(s),t!==n&&(e.checked=Lt(t,s.props.value))}},jn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,Qt(e,"change",()=>{const i=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>n?Oi(ns(f)):ns(f)),l=e.multiple,r=l?sn(e._modelValue)?new Set(i):i:i[0],u=e._pendingValue=[l,l?pe(r)?i.slice():i:r];try{e[vt](r)}finally{Ri(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[vt]=kn(s)},mounted(e,{value:t}){ua(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[vt]=kn(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Zf(t,n[1],n[0]))&&ua(e,t)}};function Zf(e,t,n){if(!n||pe(e))return Lt(e,t);if(sn(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function ua(e,t){const n=e.multiple,s=pe(t);if(!(n&&!s&&!sn(t))){for(let i=0,l=e.options.length;iString(h)===String(u)):r.selected=Zo(t,u)>-1}else r.selected=t.has(u);else if(Lt(ns(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function ns(e){return"_value"in e?e._value:e.value}function kc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Qf=["ctrl","shift","alt","meta"],ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qf.some(n=>e[`${n}Key`]&&!t.includes(n))},At=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((i,...l)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(i=>{if(!("key"in i))return;const l=Cn(i.key);if(t.some(r=>r===l||tp[r]===l))return e(i)}))},np=tt({patchProp:zf},Pf);let da;function sp(){return da||(da=uf(np))}const ip=((...e)=>{const t=sp().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=lp(s);if(!i)return;const l=t._component;!_e(l)&&!l.render&&!l.template&&(l.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,op(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function op(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lp(e){return Be(e)?document.querySelector(e):e}const ap="modulepreload",rp=function(e,t){return new URL(e,t).href},fa={},fn=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){let h=function(p){return Promise.all(p.map(b=>Promise.resolve(b).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const r=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),f=u?.nonce||u?.getAttribute("nonce");i=h(n.map(p=>{if(p=rp(p,s),p in fa)return;fa[p]=!0;const b=p.endsWith(".css"),v=b?'[rel="stylesheet"]':"";if(s)for(let M=r.length-1;M>=0;M--){const E=r[M];if(E.href===p&&(!b||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${p}"]${v}`))return;const y=document.createElement("link");if(y.rel=b?"stylesheet":ap,b||(y.as="script"),y.crossOrigin="",y.href=p,f&&y.setAttribute("nonce",f),document.head.appendChild(y),b)return new Promise((M,E)=>{y.addEventListener("load",M),y.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${p}`)))})}))}function l(r){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=r,window.dispatchEvent(u),!u.defaultPrevented)throw r}return i.then(r=>{for(const u of r||[])u.status==="rejected"&&l(u.reason);return t().catch(l)})},cp={de:{name:"Deutsch",english:"German",script:"latin",plural:"one_other",clock:"24",checked:!1},"en-GB":{name:"English (UK)",english:"English (UK)",script:"latin",plural:"one_other",clock:"24",checked:!0},en:{name:"English (US)",english:"English (US)",script:"latin",plural:"one_other",clock:"12",checked:!0},es:{name:"Español",english:"Spanish",script:"latin",plural:"one_other",clock:"24",checked:!1},fr:{name:"Français",english:"French",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},it:{name:"Italiano",english:"Italian",script:"latin",plural:"one_other",clock:"24",checked:!1},nl:{name:"Nederlands",english:"Dutch",script:"latin",plural:"one_other",clock:"24",checked:!1},pl:{name:"Polski",english:"Polish",script:"latin",plural:"slavic_pl",clock:"24",checked:!1},pt:{name:"Português",english:"Portuguese",script:"latin",plural:"one_upto_1",clock:"24",checked:!1}};const bi=typeof window<"u",En=(e,t=!1)=>t?Symbol.for(e):Symbol(e),up=(e,t,n)=>dp({l:e,k:t,s:n}),dp=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),Ge=e=>typeof e=="number"&&isFinite(e),xc=e=>pl(e)==="[object Date]",vi=e=>pl(e)==="[object RegExp]",fl=e=>De(e)&&Object.keys(e).length===0,ot=Object.assign,fp=Object.create,Le=(e=null)=>fp(e);let pa;const pp=()=>pa||(pa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Le()),hp=Object.prototype.hasOwnProperty;function $t(e,t){return hp.call(e,t)}const He=Array.isArray,Ke=e=>typeof e=="function",oe=e=>typeof e=="string",qe=e=>typeof e=="boolean",Se=e=>e!==null&&typeof e=="object",mp=e=>Se(e)&&Ke(e.then)&&Ke(e.catch),Sc=Object.prototype.toString,pl=e=>Sc.call(e),De=e=>pl(e)==="[object Object]",bp=e=>e==null?"":He(e)||De(e)&&e.toString===Sc?JSON.stringify(e,null,2):String(e);function vp(e,t=""){return e.reduce((n,s,i)=>i===0?n+s:n+t+s,"")}function gp(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}function ha(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function _p(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}const yp=/^javascript:/i,wp=/^(?:href|src|action|formaction)$/i,kp=/&#(?:x([0-9a-f]+)|(\d+));?/gi,$p=/&(?:Tab|NewLine);/g,xp=/:?/gi,Sp=/[\u0000-\u0020\u007f-\u009f]/g,Cp=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Tp=/(^|[\s"'<>/])on(\w+\s*=)/gi,Ep=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function Ap(e,t,n){const s=t||n;if(!s)return e;const i=Number.parseInt(s,t?16:10);return i<=127?String.fromCharCode(i):e}function hl(e){const t=e.replace(kp,Ap).replace($p,"").replace(xp,":").replace(Sp,"");return yp.test(t)}function Pp(e){const t=/url\s*\(/gi;let n="",s=0,i;for(;(i=t.exec(e))!==null;){const l=i.index,r=t.lastIndex-1;let u=r+1,f=1,h=null;for(;u`${n}="${ma(n,s)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(t,n,s)=>`${n}='${ma(n,s)}'`),Cp.test(e)&&(e=e.replace(Tp,"$1on$2")),e=e.replace(Ep,(t,n,s,i)=>hl(i)?`${n}${s}about:blank`:t),e}const ba=e=>!Se(e)||He(e);function ii(e,t){if(ba(e)||ba(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:s,des:i}=n.pop();Object.keys(s).forEach(l=>{if(l==="__proto__")return;const r=s[l];if(He(r)){const u=[];u.length=r.length,i[l]=u,n.push({src:r,des:u})}else Se(r)?((!Se(i[l])||He(i[l]))&&(i[l]=Le()),n.push({src:r,des:i[l]})):i[l]=r})}}const Ip=17;function Cc(e,t,n={}){const{domain:s,messages:i,args:l}=n,r=e,u=new SyntaxError(String(r));return u.code=e,u.domain=s,u}function Bt(e){return Se(e)&&ml(e)===0&&($t(e,"b")||$t(e,"body"))}const Tc=["b","body"];function Lp(e){return An(e,Tc)}const Ec=["c","cases"];function Mp(e){return An(e,Ec,[])}const Ac=["s","static"];function Rp(e){return An(e,Ac)}const Pc=["i","items"];function Np(e){return An(e,Pc,[])}const Oc=["t","type"];function ml(e){return An(e,Oc)}const Ic=["v","value"];function Qs(e,t){const n=An(e,Ic);if(n!=null)return n;throw Os(t)}const Lc=["m","modifier"];function Fp(e){return An(e,Lc)}const Mc=["k","key"];function Dp(e){const t=An(e,Mc);if(t)return t;throw Os(6)}function An(e,t,n){for(let s=0;sUp(n,e)}function Up(e,t){const n=Lp(t);if(n==null)throw Os(0);if(ml(n)===1){const l=Mp(n);return e.plural(l.reduce((r,u)=>[...r,ga(e,u)],[]))}else return ga(e,n)}function ga(e,t){const n=Rp(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const s=Np(t).reduce((i,l)=>[...i,Eo(e,l)],[]);return e.normalize(s)}}function Eo(e,t){const n=ml(t);switch(n){case 3:return Qs(t,n);case 9:return Qs(t,n);case 4:{const s=t;if($t(s,"k")&&s.k)return e.interpolate(e.named(s.k));if($t(s,"key")&&s.key)return e.interpolate(e.named(s.key));throw Os(n)}case 5:{const s=t;if($t(s,"i")&&Ge(s.i))return e.interpolate(e.list(s.i));if($t(s,"index")&&Ge(s.index))return e.interpolate(e.list(s.index));throw Os(n)}case 6:{const s=t,i=Fp(s),l=Dp(s);return e.linked(Eo(e,l),i?Eo(e,i):void 0,e.type)}case 7:return Qs(t,n);case 8:return Qs(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}let _a=Le();function jp(e,t){{const n=e.cacheKey;if(n){const s=_a[n];return s||(_a[n]=va(e))}else return va(e)}}const en={INVALID_ARGUMENT:Ip,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},Hp=24;function tn(e){return Cc(e,null,void 0)}function bl(e,t){return t.locale!=null?ya(t.locale):ya(e.locale)}let oo;function ya(e){if(oe(e))return e;if(Ke(e)){if(e.resolvedOnce&&oo!=null)return oo;if(e.constructor.name==="Function"){const t=e();if(mp(t))throw tn(en.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return oo=t}else throw tn(en.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw tn(en.NOT_SUPPORT_LOCALE_TYPE)}function Vp(e,t,n){return[...new Set([n,...He(t)?t:Se(t)?Object.keys(t).filter(s=>s!=="default"):oe(t)?[t]:[n]])]}function Ao(e,t,n){const s=oe(n)?n:gi,i=e;let l;Se(t)?(i.__localeChainObjectCache||(i.__localeChainObjectCache=new WeakMap),l=i.__localeChainObjectCache.get(t),l||(l=new Map,i.__localeChainObjectCache.set(t,l))):(i.__localeChainCache||(i.__localeChainCache=new Map),l=i.__localeChainCache.get(t),l||(l=new Map,i.__localeChainCache.set(t,l)));const r=l.get(s);if(r)return r;const u=[];let f=[n];for(;He(f);)f=wa(u,f,t);const h=He(t)||!De(t)?t:t.default?t.default:null;return f=oe(h)?[h]:h,He(f)&&wa(u,f,!1),l.set(s,u),u}function wa(e,t,n){let s=!0;for(let i=0;i{r===void 0?r=u:r+=u},v[1]=()=>{r!==void 0&&(t.push(r),r=void 0)},v[2]=()=>{v[0](),i++},v[3]=()=>{if(i>0)i--,s=4,v[0]();else{if(i=0,r===void 0||(r=Gp(r),r===!1))return!1;v[1]()}};function y(){const M=e[n+1];if(s===5&&M==="'"||s===6&&M==='"')return n++,u="\\"+M,v[0](),!0}for(;s!==null;)if(n++,l=e[n],!(l==="\\"&&y())){if(f=Yp(l),b=Pn[s],h=b[f]||b.l||8,h===8||(s=h[0],h[1]!==void 0&&(p=v[h[1]],p&&(u=l,p()===!1))))return;if(s===7)return t}}const ka=new Map;function Xp(e,t){return Se(e)?e[t]:null}function Zp(e,t){if(!Se(e))return null;let n=ka.get(t);if(n||(n=Jp(t),n&&ka.set(t,n)),!n)return null;const s=n.length;let i=e,l=0;for(;l`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function eh(){return{upper:(e,t)=>t==="text"&&oe(e)?e.toUpperCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&oe(e)?e.toLowerCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&oe(e)?$a(e):t==="vnode"&&Se(e)&&"__v_isVNode"in e?$a(e.children):e}}let Nc;function th(e){Nc=e}let Fc;function nh(e){Fc=e}let Dc;function sh(e){Dc=e}let Uc=null;const xa=e=>{Uc=e},Sa=()=>Uc;let Ca=0;function ih(e={}){const t=Ke(e.onWarn)?e.onWarn:gp,n=oe(e.version)?e.version:Qp,s=oe(e.locale)||Ke(e.locale)?e.locale:gi,i=Ke(s)?gi:s,l=He(e.fallbackLocale)||De(e.fallbackLocale)||oe(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,r=De(e.messages)?e.messages:lo(i),u=De(e.datetimeFormats)?e.datetimeFormats:lo(i),f=De(e.numberFormats)?e.numberFormats:lo(i),h=ot(Le(),e.modifiers,eh()),p=e.pluralRules||Le(),b=Ke(e.missing)?e.missing:null,v=qe(e.missingWarn)||vi(e.missingWarn)?e.missingWarn:!0,y=qe(e.fallbackWarn)||vi(e.fallbackWarn)?e.fallbackWarn:!0,M=!!e.fallbackFormat,E=!!e.unresolving,x=Ke(e.postTranslation)?e.postTranslation:null,O=De(e.processor)?e.processor:null,C=qe(e.warnHtmlMessage)?e.warnHtmlMessage:!0,F=!!e.escapeParameter,T=Ke(e.messageCompiler)?e.messageCompiler:Nc,V=Ke(e.messageResolver)?e.messageResolver:Fc||Xp,L=Ke(e.localeFallbacker)?e.localeFallbacker:Dc||Vp,k=Se(e.fallbackContext)?e.fallbackContext:void 0,A=e,z=Se(A.__datetimeFormatters)?A.__datetimeFormatters:new Map,P=Se(A.__numberFormatters)?A.__numberFormatters:new Map,ge=Se(A.__meta)?A.__meta:{};Ca++;const G={version:n,cid:Ca,locale:s,fallbackLocale:l,messages:r,modifiers:h,pluralRules:p,missing:b,missingWarn:v,fallbackWarn:y,fallbackFormat:M,unresolving:E,postTranslation:x,processor:O,warnHtmlMessage:C,escapeParameter:F,messageCompiler:T,messageResolver:V,localeFallbacker:L,fallbackContext:k,onWarn:t,__meta:ge};return G.datetimeFormats=u,G.numberFormats=f,G.__datetimeFormatters=z,G.__numberFormatters=P,G}const lo=e=>({[e]:Le()});function jc(e,t,n,s,i){const{missing:l,onWarn:r}=e;if(l!==null){const u=l(e,n,t,i);return oe(u)?u:t}else return t}function Ta(e,t){const n=e;Se(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ei(e,t,n){Ta(e,n),e.fallbackContext&&Ta(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function oh(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function lh(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let s=n+1;s{s.includes(f)?u[f]=i[f]:t[f]=i[f]}),oe(l)?t.locale=l:De(l)&&(u=l),De(r)&&(u=r),u}function Ea(e,...t){const{datetimeFormats:n,unresolving:s,onWarn:i}=e,{__datetimeFormatters:l}=e;if(!oe(t[0])&&!xc(t[0])&&!Ge(t[0]))return _i;const[r,u,f,h]=Po(...t),p=qe(f.missingWarn)?f.missingWarn:e.missingWarn,b=qe(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!oe(r)||r===""){const C=new Intl.DateTimeFormat(y.replace(/!/g,""),h);return v?C.formatToParts(u):C.format(u)}const M=Hc(e,r,y,n,p,b,"datetime format");if(!oe(M))return s?ji:r;const E=n[M][r],x=Vc(M,r,h);let O=l.get(x);return O||(O=new Intl.DateTimeFormat(M,ot({},E,h)),l.set(x,O)),v?O.formatToParts(u):O.format(u)}const Kc=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Po(...e){const[t]=e,n=Le(),s=Le();let i;if(oe(t)){const r=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!r)throw tn(en.INVALID_ISO_DATE_ARGUMENT);const u=r[3]?r[3].trim().startsWith("T")?`${r[1].trim()}${r[3].trim()}`:`${r[1].trim()}T${r[3].trim()}`:r[1].trim();i=new Date(u);try{i.toISOString()}catch{throw tn(en.INVALID_ISO_DATE_ARGUMENT)}}else if(xc(t)){if(isNaN(t.getTime()))throw tn(en.INVALID_DATE_ARGUMENT);i=t}else if(Ge(t))i=t;else throw tn(en.INVALID_ARGUMENT);const l=Bc(e,n,s,Kc);return[n.key||"",i,n,l]}function Aa(e,t,n){Wc(e.__datetimeFormatters,t,n)}function Pa(e,...t){const{numberFormats:n,unresolving:s,onWarn:i}=e,{__numberFormatters:l}=e;if(!Ge(t[0]))return _i;const[r,u,f,h]=Oo(...t),p=qe(f.missingWarn)?f.missingWarn:e.missingWarn,b=qe(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!oe(r)||r===""){const C=new Intl.NumberFormat(y.replace(/!/g,""),h);return v?C.formatToParts(u):C.format(u)}const M=Hc(e,r,y,n,p,b,"number format");if(!oe(M))return s?ji:r;const E=n[M][r],x=Vc(M,r,h);let O=l.get(x);return O||(O=new Intl.NumberFormat(M,ot({},E,h)),l.set(x,O)),v?O.formatToParts(u):O.format(u)}const qc=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Oo(...e){const[t]=e,n=Le(),s=Le();if(!Ge(t))throw tn(en.INVALID_ARGUMENT);const i=t,l=Bc(e,n,s,qc);return[n.key||"",i,n,l]}function Oa(e,t,n){Wc(e.__numberFormatters,t,n)}const ah=e=>e,rh=e=>"",ch="text",uh=e=>e.length===0?"":vp(e),dh=bp;function ao(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function fh(e){const t=Ge(e.pluralIndex)?e.pluralIndex:-1;return Ge(e.named?.count)?e.named.count:Ge(e.named?.n)?e.named.n:t}function ph(e={}){const t=e.locale,n=fh(e),s=oe(t)&&Ke(e.pluralRules?.[t])?e.pluralRules[t]:ao,i=s===ao?void 0:ao,l=O=>O[s(n,O.length,i)],r=e.list||[],u=O=>r[O],f=e.named||Le();Ge(e.pluralIndex)&&(f.count||=e.pluralIndex,f.n||=e.pluralIndex);const h=O=>f[O];function p(O,C){const F=Ke(e.messages)?e.messages(O,!!C):Se(e.messages)?e.messages[O]:!1;return F||(e.parent?e.parent.message(O):rh)}const b=O=>e.modifiers?e.modifiers[O]:ah,v=Ke(e.processor?.normalize)?e.processor.normalize:uh,y=Ke(e.processor?.interpolate)?e.processor.interpolate:dh,M=oe(e.processor?.type)?e.processor.type:ch,x={list:u,named:h,plural:l,linked:(O,...C)=>{const[F,T]=C;let V="text",L="";C.length===1?Se(F)?(L=F.modifier||L,V=F.type||V):oe(F)&&(L=F||L):C.length===2&&(oe(F)&&(L=F||L),oe(T)&&(V=T||V));const k=p(O,!0)(x),A=k===""||k===void 0?O:k,z=V==="vnode"&&He(A)&&L?A[0]:A;return L?b(L)(z,V):z},message:p,type:M,interpolate:y,normalize:v,values:ot(Le(),r,f)};return x}const Ia=()=>"",nn=e=>Ke(e);function La(e,...t){const{fallbackFormat:n,postTranslation:s,unresolving:i,messageCompiler:l,fallbackLocale:r,messages:u}=e,[f,h]=Io(...t),p=qe(h.missingWarn)?h.missingWarn:e.missingWarn,b=qe(h.fallbackWarn)?h.fallbackWarn:e.fallbackWarn,v=qe(h.escapeParameter)?h.escapeParameter:e.escapeParameter,y=!!h.resolvedMessage,M=oe(h.default)||qe(h.default)?qe(h.default)?l?f:()=>f:h.default:n?l?f:()=>f:null,E=n||M!=null&&(oe(M)||Ke(M)),x=bl(e,h);v&&hh(h);let[O,C,F]=y?[f,x,u[x]||Le()]:zc(e,f,x,r,b,p),T=O,V=f;if(!y&&!(oe(T)||Bt(T)||nn(T))&&E&&(T=M,V=T),!y&&(!(oe(T)||Bt(T)||nn(T))||!oe(C)))return i?ji:f;let L=!1;const k=()=>{L=!0},A=nn(T)?T:Yc(e,f,C,T,V,k);if(L)return T;const z=vh(e,C,F,h),P=ph(z),ge=mh(e,A,P);let G=s?s(ge,f):ge;return v&&oe(G)&&(G=Op(G)),G}function hh(e){He(e.list)?e.list=e.list.map(t=>oe(t)?ha(t):t):Se(e.named)&&Object.keys(e.named).forEach(t=>{oe(e.named[t])&&(e.named[t]=ha(e.named[t]))})}function zc(e,t,n,s,i,l){const{messages:r,onWarn:u,messageResolver:f,localeFallbacker:h}=e,p=h(e,s,n);let b=Le(),v,y=null;const M="translate";for(let E=0;Es);return h.locale=n,h.key=t,h}const f=r(s,bh(e,n,i,s,u,l));return f.locale=n,f.key=t,f.source=s,f}function mh(e,t,n){return t(n)}function Io(...e){const[t,n,s]=e,i=Le();if(!oe(t)&&!Ge(t)&&!nn(t)&&!Bt(t))throw tn(en.INVALID_ARGUMENT);const l=Ge(t)?String(t):(nn(t),t);return Ge(n)?i.plural=n:oe(n)?i.default=n:De(n)&&!fl(n)?i.named=n:He(n)&&(i.list=n),Ge(s)?i.plural=s:oe(s)?i.default=s:De(s)&&ot(i,s),[l,i]}function bh(e,t,n,s,i,l){return{locale:t,key:n,warnHtmlMessage:i,onError:r=>{throw l&&l(r),r},onCacheKey:r=>up(t,n,r)}}function vh(e,t,n,s){const{modifiers:i,pluralRules:l,messageResolver:r,fallbackLocale:u,fallbackWarn:f,missingWarn:h,fallbackContext:p}=e,v={locale:t,modifiers:i,pluralRules:l,messages:(y,M)=>{let E=r(n,y);if(E==null&&(p||M)){const[x,,O]=zc(p||e,y,t,u,f,h);E=x??r(O,y)}if(oe(E)||Bt(E)){let x=!1;const C=Yc(e,y,t,E,y,()=>{x=!0});return x?Ia:C}else return nn(E)?E:Ia}};return e.processor&&(v.processor=e.processor),s.list&&(v.list=s.list),s.named&&(v.named=s.named),Ge(s.plural)&&(v.pluralIndex=s.plural),v}const gh="11.4.12",gt={UNEXPECTED_RETURN_TYPE:Hp,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Ct(e,...t){return Cc(e,null,void 0)}const Lo=En("__translateVNode"),Mo=En("__datetimeParts"),Ro=En("__numberParts"),_h=En("__setPluralRules"),yh=En("__injectWithOption"),Jn=En("__dispose");let Gc=null;{const e=pp().__VUE_INSTANCE_SETTERS__;He(e)&&e.push(t=>{Gc=t})}function Is(e){if(!Se(e)||Bt(e))return e;for(const t in e)if($t(e,t))if(!t.includes("."))Se(e[t])&&Is(e[t]);else{const n=t.split("."),s=n.length-1;let i=e,l=!1;for(let r=0;r{if("locale"in u&&"resource"in u){const{locale:f,resource:h}=u;f?(r[f]=r[f]||Le(),ii(h,r[f])):ii(h,r)}else oe(u)&&ii(JSON.parse(u),r)}),i==null&&l)for(const u in r)$t(r,u)&&Is(r[u]);return r}function wh(e){return e.type}function kh(e,t,n){let s=Se(t.messages)?t.messages:Le();"__i18nGlobal"in n&&(s=Jc(e.locale.value,{messages:s,__i18n:n.__i18nGlobal}));const i=Object.keys(s);i.length&&i.forEach(l=>{e.mergeLocaleMessage(l,s[l])});{if(Se(t.datetimeFormats)){const l=Object.keys(t.datetimeFormats);l.length&&l.forEach(r=>{e.mergeDateTimeFormat(r,t.datetimeFormats[r])})}if(Se(t.numberFormats)){const l=Object.keys(t.numberFormats);l.length&&l.forEach(r=>{e.mergeNumberFormat(r,t.numberFormats[r])})}}}function Ma(e){return te(Vs,null,e,0)}function Xc(){return Gc??gc()}const Ra=()=>[],$h=()=>!1;let Na=0;function Fa(e){return((t,n,s,i)=>e(n,s,Xc()||void 0,i))}function No(e={}){const{__root:t,__injectWithOption:n}=e,s=t===void 0,i=e.flatJson,l=bi?ke:md;let r=qe(e.inheritLocale)?e.inheritLocale:!0;const u=l(t&&r?t.locale.value:oe(e.locale)?e.locale:gi),f=l(t&&r?t.fallbackLocale.value:oe(e.fallbackLocale)||He(e.fallbackLocale)||De(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),h=l(Jc(u.value,e)),p=l(De(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),b=l(De(e.numberFormats)?e.numberFormats:{[u.value]:{}});let v=t?t.missingWarn:qe(e.missingWarn)||vi(e.missingWarn)?e.missingWarn:!0,y=t?t.fallbackWarn:qe(e.fallbackWarn)||vi(e.fallbackWarn)?e.fallbackWarn:!0,M=t?t.fallbackRoot:qe(e.fallbackRoot)?e.fallbackRoot:!0,E=!!e.fallbackFormat,x=Ke(e.missing)?e.missing:null,O=Ke(e.missing)?Fa(e.missing):null,C=Ke(e.postTranslation)?e.postTranslation:null,F=t?t.warnHtmlMessage:qe(e.warnHtmlMessage)?e.warnHtmlMessage:!0,T=!!e.escapeParameter;const V=t?t.modifiers:De(e.modifiers)?e.modifiers:{};let L=e.pluralRules||t&&t.pluralRules,k;k=(()=>{s&&xa(null);const I={version:gh,locale:u.value,fallbackLocale:f.value,messages:h.value,modifiers:V,pluralRules:L,missing:O===null?void 0:O,missingWarn:v,fallbackWarn:y,fallbackFormat:E,unresolving:!0,postTranslation:C===null?void 0:C,warnHtmlMessage:F,escapeParameter:T,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};I.datetimeFormats=p.value,I.numberFormats=b.value,I.__datetimeFormatters=De(k)?k.__datetimeFormatters:void 0,I.__numberFormatters=De(k)?k.__numberFormatters:void 0;const N=ih(I);return s&&xa(N),N})(),ei(k,u.value,f.value);function z(){return[u.value,f.value,h.value,p.value,b.value]}const P=$({get:()=>u.value,set:I=>{k.locale=I,u.value=I}});function ge(I){s||(k.fallbackContext=t?Sa():void 0);try{ei(k,u.value,I)}finally{s||(k.fallbackContext=void 0)}}const G=$({get:()=>f.value,set:I=>{f.value=I,k.fallbackLocale=f.value,ge(f.value)}}),ie=$(()=>h.value),be=$(()=>p.value),se=$(()=>b.value);function ue(){return Ke(C)?C:null}function ye(I){C=I,k.postTranslation=I}function $e(){return x}function Ye(I){I!==null&&(O=Fa(I)),x=I,k.missing=O}const le=(I,N,re,fe,Ie,Ue)=>{z();let We;try{s||(k.fallbackContext=t?Sa():void 0),We=I(k)}finally{s||(k.fallbackContext=void 0)}if(re!=="translate exists"&&Ge(We)&&We===ji||re==="translate exists"&&!We){const[yt,qn]=N();return t&&M?fe(t):Ie(yt)}else{if(Ue(We))return We;throw Ct(gt.UNEXPECTED_RETURN_TYPE)}};function ee(...I){return le(N=>Reflect.apply(La,null,[N,...I]),()=>Io(...I),"translate",N=>Reflect.apply(N.t,N,[...I]),N=>N,N=>oe(N))}function ae(...I){const[N,re,fe]=I;if(fe&&!Se(fe))throw Ct(gt.INVALID_ARGUMENT);return ee(N,re,ot({resolvedMessage:!0},fe||{}))}function de(...I){return le(N=>Reflect.apply(Ea,null,[N,...I]),()=>Po(...I),"datetime format",N=>Reflect.apply(N.d,N,[...I]),()=>_i,N=>oe(N)||He(N))}function X(...I){return le(N=>Reflect.apply(Pa,null,[N,...I]),()=>Oo(...I),"number format",N=>Reflect.apply(N.n,N,[...I]),()=>_i,N=>oe(N)||He(N))}function K(I){return I.map(N=>oe(N)||Ge(N)||qe(N)?Ma(String(N)):N)}const we={normalize:K,interpolate:I=>I,type:"vnode"};function rs(...I){return le(N=>{let re;const fe=N;try{fe.processor=we,re=Reflect.apply(La,null,[fe,...I])}finally{fe.processor=null}return re},()=>Io(...I),"translate",N=>N[Lo](...I),N=>[Ma(N)],N=>He(N))}function zs(...I){return le(N=>Reflect.apply(Pa,null,[N,...I]),()=>Oo(...I),"number format",N=>N[Ro](...I),Ra,N=>oe(N)||He(N))}function On(...I){return le(N=>Reflect.apply(Ea,null,[N,...I]),()=>Po(...I),"datetime format",N=>N[Mo](...I),Ra,N=>oe(N)||He(N))}function El(I){L=I,k.pluralRules=L}function w(I,N){return le(()=>{if(!I)return!1;const re=oe(N)?N:u.value,fe=oe(N)?[re]:Ao(k,f.value,re);for(let Ie=0;Ie[I],"translate exists",re=>Reflect.apply(re.te,re,[I,N]),$h,re=>qe(re))}function S(I){let N=null;const re=Ao(k,f.value,u.value);for(let fe=0;fege(f.value),{deep:!0,flush:"sync"}),t&&bi&&(St(t.locale,I=>{r&&(u.value=I,k.locale=I,ei(k,u.value,f.value))}),St(t.fallbackLocale,I=>{r&&(f.value=I,k.fallbackLocale=f.value,ei(k,u.value,f.value))}));const Z={id:Na,locale:P,fallbackLocale:G,get inheritLocale(){return r},set inheritLocale(I){r=I,I&&t&&(P.value=t.locale.value,G.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(h.value).sort()},messages:ie,get modifiers(){return V},get pluralRules(){return L||{}},get isGlobal(){return s},get missingWarn(){return v},set missingWarn(I){v=I,k.missingWarn=v},get fallbackWarn(){return y},set fallbackWarn(I){y=I,k.fallbackWarn=y},get fallbackRoot(){return M},set fallbackRoot(I){M=I},get fallbackFormat(){return E},set fallbackFormat(I){E=I,k.fallbackFormat=E},get warnHtmlMessage(){return F},set warnHtmlMessage(I){F=I,k.warnHtmlMessage=I},get escapeParameter(){return T},set escapeParameter(I){T=I,k.escapeParameter=I},t:ee,getLocaleMessage:W,setLocaleMessage:D,mergeLocaleMessage:j,getPostTranslationHandler:ue,setPostTranslationHandler:ye,getMissingHandler:$e,setMissingHandler:Ye,[_h]:El};return Z.datetimeFormats=be,Z.numberFormats=se,Z.rt=ae,Z.te=w,Z.tm=R,Z.d=de,Z.n=X,Z.getDateTimeFormat=J,Z.setDateTimeFormat=Y,Z.mergeDateTimeFormat=q,Z.getNumberFormat=U,Z.setNumberFormat=ce,Z.mergeNumberFormat=Q,Z[yh]=n,Z[Lo]=rs,Z[Mo]=On,Z[Ro]=zs,Z}const vl={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function xh({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((s,i)=>[...s,...i.type===B?i.children:[i]],[]):t.reduce((n,s)=>{const i=e[s];return i&&(n[s]=i()),n},Le())}function Zc(){return B}const Sh=Me({name:"i18n-t",props:ot({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>Ge(e)||!isNaN(e)}},vl),setup(e,t){const{slots:n,attrs:s}=t,i=e.i18n||gl({useScope:e.scope,__useComponent:!0});return()=>{const l=()=>{const f=Object.keys(n).filter(b=>b[0]!=="_"),h=Le();e.locale&&(h.locale=e.locale),e.plural!==void 0&&(h.plural=oe(e.plural)?+e.plural:e.plural);const p=xh(t,f);return i[Lo](e.keypath,p,h)},r=ot(Le(),s),u=oe(e.tag)||Se(e.tag)?e.tag:Zc();return Se(u)?mi(u,r,{default:l}):mi(u,r,l())}}}),Da=Sh;function Ch(e){return He(e)&&!oe(e[0])}function Qc(e,t,n,s){const{slots:i,attrs:l}=t;return()=>{const r=()=>{const h={part:!0};let p=Le();e.locale&&(h.locale=e.locale),oe(e.format)?h.key=e.format:Se(e.format)&&(oe(e.format.key)&&(h.key=e.format.key),p=Object.keys(e.format).reduce((y,M)=>n.includes(M)?ot(Le(),y,{[M]:e.format[M]}):y,Le()));const b=s(e.value,h,p);let v=[h.key];return He(b)?v=b.map((y,M)=>{const E=i[y.type],x=E?E({[y.type]:y.value,index:M,parts:b}):[y.value];return Ch(x)&&(x[0].key=`${y.type}-${M}`),x}):oe(b)&&(v=[b]),v},u=ot(Le(),l),f=oe(e.tag)||Se(e.tag)?e.tag:Zc();return Se(f)?mi(f,u,{default:r}):mi(f,u,r())}}const Th=Me({name:"i18n-n",props:ot({value:{type:Number,required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return Qc(e,t,qc,(...s)=>n[Ro](...s))}}),Ua=Th;function Eh(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const s=n.__getInstance(t);return s!=null?s.__composer:e.global.__composer}}function Ah(e){const t=r=>{const{instance:u,value:f}=r;if(!u||!u.$)throw Ct(gt.UNEXPECTED_ERROR);const h=Eh(e,u.$),p=ja(f);return[Reflect.apply(h.t,h,[...Ha(p)]),h]};return{created:(r,u)=>{const[f,h]=t(u);bi&&(r.__i18nWatcher=St(h.locale,()=>{u.instance&&u.instance.$forceUpdate()})),r.__composer=h,r.textContent=f},unmounted:r=>{bi&&r.__i18nWatcher&&(r.__i18nWatcher(),r.__i18nWatcher=void 0,delete r.__i18nWatcher),r.__composer&&(r.__composer=void 0,delete r.__composer)},beforeUpdate:(r,{value:u})=>{if(r.__composer){const f=r.__composer,h=ja(u);r.textContent=Reflect.apply(f.t,f,[...Ha(h)])}},getSSRProps:r=>{const[u]=t(r);return{textContent:u}}}}function ja(e){if(oe(e))return{path:e};if(De(e)){if(!("path"in e))throw Ct(gt.REQUIRED_VALUE,"path");return e}else throw Ct(gt.INVALID_VALUE)}function Ha(e){const{path:t,locale:n,args:s,choice:i,plural:l}=e,r={},u=s||{};return oe(n)&&(r.locale=n),Ge(i)&&(r.plural=i),Ge(l)&&(r.plural=l),[t,u,r]}function Ph(e,t,...n){const s=De(n[0])?n[0]:{};(!qe(s.globalInstall)||s.globalInstall)&&([Da.name,"I18nT"].forEach(l=>e.component(l,Da)),[Ua.name,"I18nN"].forEach(l=>e.component(l,Ua)),[Ba.name,"I18nD"].forEach(l=>e.component(l,Ba))),e.directive("t",Ah(t))}const Oh=En("global-vue-i18n");function Ih(e={}){const t=qe(e.globalInjection)?e.globalInjection:!0,n=new Map,[s,i]=Lh(e),l=En("");function r(p){return n.get(p)||null}function u(p,b){n.set(p,b)}function f(p){n.delete(p)}const h={get mode(){return"composition"},async install(p,...b){if(p.__VUE_I18N_SYMBOL__=l,p.provide(p.__VUE_I18N_SYMBOL__,h),De(b[0])){const M=b[0];h.__composerExtend=M.__composerExtend,h.__vueI18nExtend=M.__vueI18nExtend}let v=null;t&&(v=jh(p,h.global)),Ph(p,h,...b);const y=p.unmount;p.unmount=()=>{v&&v(),h.dispose(),y()}},get global(){return i},dispose(){s.stop()},__instances:n,__getInstance:r,__setInstance:u,__deleteInstance:f};return h}function gl(e={}){const t=Xc();if(t==null)throw Ct(gt.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Ct(gt.NOT_INSTALLED);const n=Mh(t),s=Nh(n),i=wh(t),l=Rh(e,i);if(l==="global")return kh(s,e,i),s;if(l==="parent"){let f=Va(n,t,e.__useComponent);return f==null&&(f=s),f}if(l==="isolated"){if(n.mode!=="composition")throw Ct(gt.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const f=n,h=ot({},e),p=Va(n,t);h.__root=p||s;const b=No(h);return f.__composerExtend&&(b[Jn]=f.__composerExtend(b)),kr()&&Gu(()=>{const y=b[Jn];y&&(y(),delete b[Jn])}),b}const r=n;let u=r.__getInstance(t);if(u==null){const f=ot({},e);"__i18n"in i&&(f.__i18n=i.__i18n),s&&(f.__root=s),u=No(f),r.__composerExtend&&(u[Jn]=r.__composerExtend(u)),Dh(r,t,u),r.__setInstance(t,u)}return u}function Lh(e,t){const n=Yu(),s=n.run(()=>No(e));if(s==null)throw Ct(gt.UNEXPECTED_ERROR);return[n,s]}function Mh(e){const t=ws(e.isCE?Oh:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Ct(e.isCE?gt.NOT_INSTALLED_WITH_PROVIDE:gt.UNEXPECTED_ERROR);return t}function Rh(e,t){return fl(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Nh(e){return e.mode==="composition"?e.global:e.global.__composer}function Va(e,t,n=!1){let s=null;const i=t.root;let l=Fh(t,n);for(;l!=null;){const r=e;if(e.mode==="composition"&&(s=r.__getInstance(l)),s!=null||i===l)break;l=l.parent}return s}function Fh(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Dh(e,t,n){Tn(()=>{},t),cl(()=>{const s=n;e.__deleteInstance(t);const i=s[Jn];i&&(i(),delete s[Jn])},t)}const Uh=["locale","fallbackLocale","availableLocales"],Wa=["t","rt","d","n","tm","te"];function jh(e,t){const n=Object.create(null);return Uh.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l)throw Ct(gt.UNEXPECTED_ERROR);const r=et(l.value)?{get(){return l.value.value},set(u){l.value.value=u}}:{get(){return l.get&&l.get()}};Object.defineProperty(n,i,r)}),e.config.globalProperties.$i18n=n,Wa.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l||!l.value)throw Ct(gt.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,l)}),()=>{delete e.config.globalProperties.$i18n,Wa.forEach(i=>{delete e.config.globalProperties[`$${i}`]})}}const Hh=Me({name:"i18n-d",props:ot({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return Qc(e,t,Kc,(...s)=>n[Mo](...s))}}),Ba=Hh;th(jp);nh(Zp);sh(Ao);const Vh={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Undo"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"unknown"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Unsaved changes"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancel"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Open Devices & services"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Save & send"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Saving…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Read current data"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 result. Keep typing to narrow it down."},{t:2,i:[{t:4,k:"n"},{t:3,v:" results. Keep typing to narrow it down."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Close"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Change"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Loading…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Back"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"New screen"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work. Refresh the page and try again."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API key copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API key is selected. Copy with Ctrl+C or Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON is selected. Copy with Ctrl+C or Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Action name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Action name is selected. Copy with Ctrl+C or Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is selected. Copy with Ctrl+C or Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icon name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icon name is selected. Copy with Ctrl+C or Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Empty color copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Empty color is selected. Copy with Ctrl+C or Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Color name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Color name is selected. Copy with Ctrl+C or Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Management page unreachable · retrying…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connected"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconnecting to Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Refresh"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Queued for the update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found with this device name."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"What's new"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Full log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"The IP address, once; new firmware reports it itself."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP address, e.g. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP address"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Start"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installed, but not yet in Home Assistant. Add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and turn on “Allow the device to perform Home Assistant actions” under Configure."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware downloaded, not yet in Home Assistant. Put it on the screen with ESPHome Web, then add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and allow the Home Assistant actions under Configure."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Not yet in Home Assistant. Already flashed? Add the ESPHome device under Settings → Devices & services, then allow the Home Assistant actions under Configure. Not flashed yet? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copy API key"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Add to this screen"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet and a test alert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nothing to save"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify this screen"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Blinks the backlight and shows a card"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs a newer firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Download and copy as JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Search screens, entities, actions…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nothing matches. Type part of a screen, entity or action."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Choose a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Pick one of your screens on the left to change its tiles, top bar and settings."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Start with a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Connect a CYD or Guition via USB to your Home Assistant machine. Profile, firmware, and the first flash happen in one go."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Install new screen"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"You have unsaved changes. Open a different screen anyway?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with a copy of the other screen's?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with the imported one?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your screen is being updated."}},other:{t:0,b:{t:2,i:[{t:3,v:"Saved. "},{t:4,k:"name"},{t:3,v:" is being updated."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The screen is being updated."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your newest change isn't sent yet: press Save & send again."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" blinks and shows a card for a few seconds."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · changes are saved"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Screen settings"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Saved · sent to screen"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"All saved"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"blink the screen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs firmware 0.2.31 or newer"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"from Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy layout from…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" screen"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" screens"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"no other screen"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tile"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tiles"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Import layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"advanced"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found for this screen"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"There is no room for this tile on page "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"No page is free for a full-page tile. Free a page first."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"This screen already has a tile that goes to page "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied. Save & send when it looks right."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout imported. Save & send when it looks right."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout imported: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"That isn't JSON. Export a layout first, or paste one from another ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"No tiles in this file. Expected a layout exported from ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Add your first light, scene, or device from the library."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tap the top bar or a tile to change it. Drag to move; drop on the next page for a new one."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Empty slots and fixed positions work from firmware 0.2.26. This screen (firmware "},{t:4,k:"firmware"},{t:3,v:") shifts the tiles up to the first free slot until that update."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Screen layout"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Add page"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 page is the most"},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages is the most"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove page"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"The pages after this one shift up one slot"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edit top bar"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Empty slot. Click to add a tile here, or drag one over."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Empty slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:": add the next tile here"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Next tile goes here"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Empty"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Library"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entity"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entities"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, device, or room…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Add an entity"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"All"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lights"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switches"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fans"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Covers"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scenes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensors"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Values"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selects"}},person:{t:0,b:{t:2,i:[{t:3}],s:"People"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Room"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"All rooms"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Hide placed"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Hide what is already on this screen"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Everything here is already on this screen."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found. Try a different name, room or filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile; update its firmware for 48."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles; update its firmware for 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Drag onto a page, or tap + to add to the first free slot. ⌘K searches everything."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Light"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cover"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Person"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Image"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entity"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"graph"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analog clock"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"sun path"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"double"}},full:{t:0,b:{t:2,i:[{t:3}],s:"full page"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Name on the screen"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (from Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (default)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows a chosen icon from firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Goes to page"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (empty)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigation tiles need firmware 0.2.62: press Update on the screen first."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"This screen has no page "},{t:4,k:"page"},{t:3,v:", so a tap opens its last page. Choose another page."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"A tap on the tile opens that page."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Display"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analog clock"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Name and status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Graph"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sun path"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has no numbers for this entity, so the graph stays empty. Choose another display."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"This weather service has no daily forecast in Home Assistant. Choose another display."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Size"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Double-width"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Full page"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Full page: one big button that lights up while on; a slider, controls or a graph sit at the bottom of it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"A full-page tile needs firmware 0.2.62: press Update on the screen first."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Page"}},new:{t:0,b:{t:2,i:[{t:3}],s:"New page"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Direct control on the tile"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this control for this entity, so it stays empty on the screen. Choose another one."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"At the bottom of the full-page tile; a tap anywhere else works as set below."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"On the right of the double-width tile, like the rows in Home Assistant. Tapping the name works as set below."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows direct control from firmware 0.2.19; until then the tile stays as it was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"On tap"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatic"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Open control"}},none:{t:0,b:{t:2,i:[{t:3}],s:"View only"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"On / off"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Perform action"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant can't turn this on and off, so a tap does nothing. Choose another option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen switches this from firmware 0.2.58: press Update on the screen. Until then a tap opens its card."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Hold the tile to open its card."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Small slider on the tile"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Yes, control directly"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has nothing a slider can change for this entity. Choose No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"History"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hour"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastel background"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Background: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:". Enter: configure, arrow keys: move"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove tile"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Asking Home Assistant which actions this entity has…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant isn't answering right now. Try again in a moment."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose an action"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example toggle, position, or play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an action"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No action found."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this action for this entity any more, so a tap does nothing. Choose another one."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Not set"}},on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant needs "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen performs an action from firmware 0.2.58: press Update on the screen. Until then a tap works as Automatic."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"No icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example lamp, music, or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"No icon, text only"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No icon found."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Current data"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connection, status, and supported properties"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Reading…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Fetching current HA status..."}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Small slider: "},{t:4,k:"slider"},{t:3,v:" · Display: "},{t:4,k:"display"},{t:3,v:" · Size: "},{t:4,k:"size"},{t:3,v:" · Control: "},{t:4,k:"control"},{t:3,v:" · Background: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"yes"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"none"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Default"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Read again"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed from the top bar"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"The top bar has room for 1 item."},{t:2,i:[{t:3,v:"The top bar has room for "},{t:4,k:"n"},{t:3,v:" items."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"This is already in the top bar."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Top bar"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Top bar: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself, also works without Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" item"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" items"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Left: name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"For example: Living room"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Right: time, sensors, or a clock"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:". Enter: configure, arrows: move"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"},{t:3,v:" from the top bar"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximum 1 item"},{t:2,i:[{t:3,v:"Maximum "},{t:4,k:"n"},{t:3,v:" items"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Add the time, date, analog clock, or an entity"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Add time, date, or an entity"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Not everything fits next to the name: the screen drops the dashed items. Remove one or choose a shorter name."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Drag to reorder; tap an item to configure it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensors, the date, and the analog clock appear from firmware "},{t:4,k:"version"},{t:3,v:"; until that update, this screen shows the name and, if the time is in the bar, the clock."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden: not active right now"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't fit next to the name"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Dial"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden right now: not active"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't currently fit next to the name"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"How it looks on the screen"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Small dial with the time"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"What to show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Last changed keeps counting on the screen itself: “Just now”, “5 min ago”, “Yesterday”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (like Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Only when active hides the item as long as it's off, closed, away, or 0. Handy for an open door, a running washing machine, or who's home."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24 hour clock · change under "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12 hour clock · change under "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings → Language & region"}},date_hint:{t:0,b:{t:2,i:[{t:4,k:"date"},{t:3,v:" today. The date follows the screen's own clock."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Up"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Down"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Add to the top bar"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slot used"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slots used"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Already added"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggestions from Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"An entity"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, room, or entity, e.g. temperature or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an entity for the top bar"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Night"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Dark mode"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto standby"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby after"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Standby brightness"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Night mode"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Starts"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Ends"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Night brightness"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Back to page 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"After"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Also on standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Swipe between pages"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotation"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Still saving the other screen's settings. Try again in a moment."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons and swiping are off, so only Go to page tiles change the page."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"page "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pages "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"You have no Go to page tiles."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"The tiles to "},{t:4,k:"pages"},{t:3,v:" are only on pages you can't reach."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"From "},{t:4,k:"pages"},{t:3,v:" no tile leads back to page 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"This screen is offline. Its settings can change once it's back."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply on the screen at once, and show up here when they change there."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply at once. Firmware 0.2.49 lets the screen keep them itself."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"This entity is off in Home Assistant, or the screen is restarting."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lower"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" higher"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Starting update…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building the firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Writing the firmware over Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Building and installing…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Waiting for the screen to come back…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Checking that it stays stable…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"New language: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Screens will now update automatically at night."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatic updates are off."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Updating to firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"No screen paired yet. New screens get firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"All screens have firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Update 1 screen"},{t:2,i:[{t:3,v:"Update all "},{t:4,k:"n"},{t:3,v:" screens"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"What's new in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Update automatically every night"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Between 03:00 and 06:00, one screen at a time. Stops on an error and reports it in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Claude Code picks it up right away."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Restart Claude Code once so it finds the new skills folder."}},text:{t:0,b:{t:2,i:[{t:3}],s:'Teach Claude about ESP Screens, then ask: "Show an alert on all my screens when the mailbox is full." Claude knows the alert events, every field, color, and icon.'}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install for Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Install again"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update the skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Not installed"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installed"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installed · a newer version is ready"}},writes:{t:0,b:{t:2,i:[{t:3,v:"For Claude Code in Home Assistant. Writes one file to "},{t:4,k:"path"},{t:3,v:"; installing again replaces it."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download for claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload the zip in Claude under Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Everything around your screens."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← My screens"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Add a screen, or build and reinstall the firmware of one you already have."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Build and install via USB or Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Language & region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Screen language"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant's language ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant's language"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"The screens use English until Home Assistant's language is available."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not checked yet, help welcome"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is not checked yet, help welcome: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"how to translate"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"After a change every screen needs a firmware update, one build each: with its Update button, or in the nightly updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Time format"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 hour"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 hour"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Number format"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Your Home Assistant profile: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Use these"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"The editor itself follows the language of your Home Assistant profile."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Every screen takes the new language with its next update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"A card over the whole screen from an automation, on one screen or on all of them. The cheatsheet has the action names, fields, icons, and colors, and a form to try one."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Full-screen notifications, from an automation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Build and install screen firmware"}},intro:{t:0,b:{t:2,i:[{t:3,v:"The built-in ESPHome CLI uses your own profile (YAML with keys) and secrets. Choose the screen's profile, then a USB port (screen connected to the Home Assistant machine), "},{t:4,k:"ota"},{t:3,v:" with the hostname, or "},{t:4,k:"download"},{t:3,v:" to put the firmware on the screen from your own computer. "},{t:4,k:"check"},{t:3,v:" only validates, "},{t:4,k:"build"},{t:3,v:" compiles, "},{t:4,k:"install"},{t:3,v:" puts the firmware on the screen. Your tiles stay as they are in ESP Screens. The first build takes a few minutes."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Check"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Build only"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Build & install"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Build & download"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing. Update the app to 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose the intended profile, then a USB port, an IP address, or Download."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome profile"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Install to"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · no board found on the Home Assistant machine yet"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Download · flash from your own computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP address or hostname"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Download "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Put it on the screen with "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome or Edge: Connect, choose the screen's USB port, Install, and select this file. It holds your Wi-Fi password and the screen's keys: keep it to yourself."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profile saved."}},running:{t:0,b:{t:2,i:[{t:3}],s:"One moment…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to download."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens creates the screen's own profile with unique keys and builds the firmware. Connect the screen with a USB data cable to the machine running Home Assistant, or download the firmware and put it on the screen from your own computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Which screen do you have?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2.8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Living room screen"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Device name"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"customize"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Every screen gets its own profile with its own keys. Four screens? Go through this four times with a different name."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lowercase letters, digits, and dashes. A different name for each screen."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi name (2.4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi password"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Fill in once: ESP Screens saves this in ESPHome secrets.yaml, later screens use it automatically."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Your ESPHome secrets.yaml is still missing Wi-Fi details. ESP Screens only fills in the missing lines."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi comes from your ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in the ESPHome folder isn't valid YAML. Fix the file first; it won't be overwritten."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Install via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · save profile only"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Connect the screen with a USB data cable to the Home Assistant machine; the list refreshes on its own. Or choose Download to use your own computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download the firmware and put it on the screen from your own computer, in Chrome or Edge. After that, updates go over Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"The profile goes into the ESPHome folder. You can install later via Firmware & USB, or from ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"More than one board connected: choose this screen's port."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Once over USB; after that, everything is wireless."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Save profile"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A build or installation is already running ("},{t:4,k:"file"},{t:3,v:"). Wait for it to finish."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing from this installation; only saving the profile is possible."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" is in the ESPHome folder"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Writing firmware to "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware for "},{t:4,k:"name"},{t:3,v:" is ready"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware is on "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Build failed"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Install failed"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Install it later from Firmware & USB: choose this profile, then the USB port of the Home Assistant machine, or Download to put the firmware on the screen from your own computer. Save the API key for pairing:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Don't disconnect the USB cable yet."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the installation keeps running and you'll find it again under New screen."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the build keeps running and you'll find it again under New screen."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Put it on the screen from your own computer, then pair the screen with Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. Pair it with Home Assistant now:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs. Pair it with Home Assistant now:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"See the log below."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" with a USB data cable."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plug the screen into your computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome or Edge, click Connect and choose the screen's USB port."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Click Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"The file holds your Wi-Fi password and the screen's keys: keep it to yourself."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API key"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" This happens outside ESP Screens. Home Assistant discovers "},{t:4,k:"name"},{t:3,v:" as an ESPHome device; click Add. Not discovered? Add ESPHome manually with the screen's IP address."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Go to Home Assistant → Settings → Devices & services."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" above when Home Assistant asks for an encryption key."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Paste the API key"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome integration → Configure → “Allow the device to perform Home Assistant actions”. Without this, the screen sees everything but controls nothing."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allow HA actions:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Back in ESP Screens, the screen appears in the list on the left within about thirty seconds; until then it's shown there as “not yet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Choose your tiles."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome log"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Retry"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Install another screen"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Start over"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"A full-screen notification, from an automation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Every screen has the "},{t:4,k:"action"},{t:3,v:" action. It places a card over everything, wakes the screen, and keeps the backlight at normal brightness until someone taps the button or the timeout runs out. Home Assistant itself shows no explanation or dropdowns for ESPHome actions; everything you can fill in is listed here."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"The cheatsheet is still loading; one moment."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Someone is at the door"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Door 3, back"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Coming"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sections"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Try it"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Your screens"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In an automation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"All screens"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"The fields"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icons"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colors"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Behavior"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Events"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Send one alert now, with the same fields an automation sends. The screen shows the card and, with blinking on, flashes its backlight."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},all:{t:0,b:{t:2,i:[{t:3,v:"All screens ("},{t:4,k:"ready"},{t:3,v:" ready)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not ready"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Title"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtitle"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Color"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Button text"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconds, 0 waits for the button)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Blink the backlight"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Four times when the alert arrives."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Sending…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Send alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Sent to the screen."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 skipped (offline or old firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" skipped (offline or old firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Left empty: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"No screen could show it: check that a screen is online with firmware "},{t:4,k:"version"},{t:3,v:" or newer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"White (default)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Every screen has its own action, with the device name in it. From firmware "},{t:4,k:"version"},{t:3,v:"; update an older screen with its Update button under Screens."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"No screen paired yet. Install one via New screen; the action appears once Home Assistant sees the screen."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update needed · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Device name unknown · update the screen"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Show alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Dismiss alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" and search for "},{t:4,k:"esphome"},{t:3,v:`. Choose your screen's action: Home Assistant calls it "Performs the action show_alert of the node `},{t:4,k:"device"},{t:3,v:'".'}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Add action"}},device:{t:0,b:{t:2,i:[{t:3}],s:"device name"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant asks for all seven; leave what you don't use empty ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", off)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fill in the fields."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefer YAML? Choose "},{t:4,k:"edit"},{t:3,v:" on the action and paste the example below."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Example for"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"a screen (not paired yet)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edit in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copy YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"All screens at once"}},text:{t:0,b:{t:2,i:[{t:3,v:"Fire the event "},{t:4,k:"show"},{t:3,v:" with the same fields, and ESP Screens passes the alert on to every screen that is online, including screens you add later. "},{t:4,k:"dismiss"},{t:3,v:" clears it everywhere. In an automation, add the "},{t:4,k:"event"},{t:3,v:" action or paste the example under "},{t:4,k:"edit"},{t:3,v:". Leave out the fields you don't use. ESP Screens has to be running for this."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Event"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Text is free-form; the limit is in bytes, and an accented letter counts as two. What doesn't fit gets an ellipsis (title) or is dropped (subtitle)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Field"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"What it does"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Example"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"text"}},int:{t:0,b:{t:2,i:[{t:3}],s:"number"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"on / off"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entity"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 to 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:", for example "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" and the hex codepoint ("},{t:4,k:"hex"},{t:3,v:") also work. Only these icons are included in the firmware; any other name shows the warning triangle. Tap an icon to copy its name."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handy for notifications"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name or description…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Also available: control and weather icons"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copy "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:'No icon for "'},{t:4,k:"query"},{t:3,v:'". Unknown names show the warning triangle ('},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:". These are the pastel shades of the tiles, with dark text. Empty or unknown gives the white card. Tap to copy."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" An alert immediately wakes a dimmed or dark screen and appears above every page, every open light card, and the standby layer."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wakes the screen."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" As long as the card is showing, the backlight stays at normal brightness. Standby and night hours wait. After the button, the regular standby time starts again."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"On until the button."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" waits for the button, however long that takes. With "},{t:4,k:"minute"},{t:3,v:" the card disappears after a minute, but the button closes it sooner."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" blinks the backlight four times when the alert arrives (about a second) and leaves the screen on afterward."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Blinking."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" A new alert replaces the current one; there's no stack. The replaced alert reports itself as "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Replacing."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" clears the card, for example if the door is already open. Without an alert, that action does nothing."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Closing remotely."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" does nothing; only the button closes it. That way a wake-up tap never accidentally dismisses the alert."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tapping beside the card"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Every end fires the event "},{t:4,k:"event"},{t:3,v:" with "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (the device name) and the "},{t:4,k:"device_id"},{t:3,v:" that Home Assistant adds. Visible under Settings → Tools → Events."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"When"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Waiting until someone presses the button"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use a "},{t:4,k:"bold"},{t:3,v:': orange for the door, red for smoke or water, green for "done". The text always stays dark and readable.'}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"color per kind of notification"}},short:{t:0,b:{t:2,i:[{t:3,v:"Keep the title "},{t:4,k:"bold"},{t:3,v:"; a screen shows about twenty characters on one line and ends a longer title with an ellipsis. Put details in the subtitle."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"short"}},button:{t:0,b:{t:2,i:[{t:3,v:"A "},{t:4,k:"bold"},{t:3,v:' turns the notification into a question: "Coming", "Seen", "Turn off". The event then tells you who responded.'}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"custom button text"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"For an alert that resolves itself (the door opens, the laundry gets taken out) close it in the same automation with "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Every screen? Fire "},{t:4,k:"event"},{t:3,v:" once (see All screens at once). The screens still work independently and each reports with its own "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Rather "},{t:4,k:"bold"},{t:3,v:" for the automation? Install the ESP Screens skill under Settings → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"ask Claude"}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Advanced · local override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Override YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"This small file is yours. It is loaded after the shared screen package and stays in place when ESP Screen Manager updates. Change hardware-specific details here, such as a display model."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"What is safe to change?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pins and other device details. Name, Wi-Fi, API, OTA and package links remain managed."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Active"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to attach"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Local override YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Use example"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 character"},{t:2,i:[{t:4,k:"n"},{t:3,v:" characters"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 line"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lines"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Save & check"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Save override"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile was found for this screen."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Changes here apply on the next build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Save once to attach this file to the profile."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Checking and saving…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The override is kept during firmware updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML saved."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Saved. ESPHome is checking the complete profile…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome is checking the profile…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome is checking the profile… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"The complete profile is valid. Safe to build and install."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome rejected the complete profile. See Firmware & USB for the full log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Replace the current text with the example?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Example loaded. Save it when you are ready."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear the local override?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"The override will be empty after you save."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Unknown"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Unavailable"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heat"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Cool"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heat/Cool"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Fan only"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heating"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Cooling"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drying"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preheating"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Opening"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Closing"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Playing"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Away"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Above horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Below horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Docked"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Cleaning"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Returning to dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sunny"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Clear, night"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Cloudy"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Partly cloudy"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Rainy"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Pouring"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy, rainy"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Fog"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hail"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Lightning"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lightning, rainy"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windy"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Not charging"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Cold"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connected"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnected"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Hot"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Light detected"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"No light"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Unlocked"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Locked"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Wet"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Moving"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Not moving"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Plugged in"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Unplugged"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Running"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Not running"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsafe"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Safe"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update available"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activate"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Run"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Press"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Just now"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min ago"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 hour ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours ago"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Yesterday"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 day ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" days ago"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weeks ago"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 month ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" months ago"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 year ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" years ago"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 hour"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" hours"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Tomorrow"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 day"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" days"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sunday"}},{t:0,b:{t:2,i:[{t:3}],s:"Monday"}},{t:0,b:{t:2,i:[{t:3}],s:"Tuesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Wednesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Thursday"}},{t:0,b:{t:2,i:[{t:3}],s:"Friday"}},{t:0,b:{t:2,i:[{t:3}],s:"Saturday"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},{t:0,b:{t:2,i:[{t:3}],s:"Mon"}},{t:0,b:{t:2,i:[{t:3}],s:"Tue"}},{t:0,b:{t:2,i:[{t:3}],s:"Wed"}},{t:0,b:{t:2,i:[{t:3}],s:"Thu"}},{t:0,b:{t:2,i:[{t:3}],s:"Fri"}},{t:0,b:{t:2,i:[{t:3}],s:"Sat"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"Su"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Tu"}},{t:0,b:{t:2,i:[{t:3}],s:"We"}},{t:0,b:{t:2,i:[{t:3}],s:"Th"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"January"}},{t:0,b:{t:2,i:[{t:3}],s:"February"}},{t:0,b:{t:2,i:[{t:3}],s:"March"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"June"}},{t:0,b:{t:2,i:[{t:3}],s:"July"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"October"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"December"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan"}},{t:0,b:{t:2,i:[{t:3}],s:"Feb"}},{t:0,b:{t:2,i:[{t:3}],s:"Mar"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"Jun"}},{t:0,b:{t:2,i:[{t:3}],s:"Jul"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug"}},{t:0,b:{t:2,i:[{t:3}],s:"Sep"}},{t:0,b:{t:2,i:[{t:3}],s:"Oct"}},{t:0,b:{t:2,i:[{t:3}],s:"Nov"}},{t:0,b:{t:2,i:[{t:3}],s:"Dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:"."}},group:{t:0,b:{t:2,i:[{t:3}],s:","}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}},Wh=Vh,Ka=e=>e%10>=2&&e%10<=4&&(e%100<12||e%100>14),qa={one_other:e=>e===1?0:1,one_upto_1:e=>Math.abs(e)<=1?0:1,slavic_pl:e=>e===1?0:Ka(e)?1:2,east_slavic:e=>e%10===1&&e%100!==11?0:Ka(e)?1:2,none:()=>0},Bh=Object.assign({"../../screen_manager/translations/de.json":()=>fn(()=>import("./de-B5ljNtf2.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/en-GB.json":()=>fn(()=>import("./en-GB-v9zPRS2K.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/es.json":()=>fn(()=>import("./es-DUs4hvEG.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/fr.json":()=>fn(()=>import("./fr-C0TB0UkD.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/it.json":()=>fn(()=>import("./it-OWvw4Kib.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/nl.json":()=>fn(()=>import("./nl-DV7drWRf.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pl.json":()=>fn(()=>import("./pl-CGqJEGr1.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pt.json":()=>fn(()=>import("./pt-Brv5sHYu.js"),[],import.meta.url).then(e=>e.default)}),Kh=Object.fromEntries(Object.entries(Bh).map(([e,t])=>[e.slice(e.lastIndexOf("/")+1,-5),t])),Ls={...cp},eu=new Set(["en"]),_l={},tu=e=>_l[e]=(t,n)=>Math.min((qa[Ls[e]?.plural]||qa.one_other)(t),n-1),yl=()=>["en",...Object.keys(Ls).filter(e=>e!=="en").sort()];yl().forEach(tu);const ls=Ih({locale:"en",fallbackLocale:"en",messages:{en:Wh},pluralRules:_l,missingWarn:!1,fallbackWarn:!1,missing:(e,t)=>{}}),c=ls.global.t,qh=(e,t="en")=>ls.global.te(e,t),wl=()=>ls.global.locale.value,zh=e=>Ls[e];function Yh(e=window){try{if(e.parent!==e){const t=e.parent.document.documentElement.lang;if(t)return t}}catch{}return e.navigator.language||"en"}function nu(e,t=yl()){const n=i=>t.find(l=>l.toLowerCase()===i.toLowerCase()),s=(e||"").trim();return s?n(s)||n(s.split("-")[0]):void 0}const su=(e,t=yl())=>nu(e,t)||"en";function Gh(e,t,n=Ls[e]){n&&(Ls[e]=n),_l[e]||tu(e),ls.global.setLocaleMessage(e,t),eu.add(e)}const za={};function iu(e){if(eu.has(e))return Promise.resolve(!0);const t=Kh[e];return t?za[e]??=t().then(n=>(Gh(e,n),!0),()=>(delete za[e],!1)):Promise.resolve(!1)}async function Jh(e=su(Yh())){const t=await iu(e)?e:"en";return ls.global.locale.value=t,document.documentElement.lang=t,t}const Fo={point:{decimal:".",group:",",from:4},comma:{decimal:",",group:".",from:4},space:{decimal:",",group:" ",from:4}};function Xh(e){const t=n=>c(`screen.number.${n}`,{},{locale:e});return{decimal:t("decimal"),group:t("group"),from:Number(t("group_min"))>=2?5:4}}function ou(e,t){const n=String(e),s=/^(-?)(\d+)(?:\.(\d+))?$/.exec(n);if(!s)return n;const i=s[2].length>=t.from?s[2].replace(/\B(?=(\d{3})+$)/g,t.group):s[2];return`${s[1]}${i}${s[3]!==void 0?t.decimal+s[3]:""}`}const Ya={comma_decimal:"point",decimal_comma:"comma",space_comma:"space"};function Zh(e=window){try{if(e.parent===e)return{};const t=e.parent.document.querySelector("home-assistant")?.hass?.locale,n=["12","24"].includes(t?.time_format)?t.time_format:void 0;return{...n?{clock:n}:{},...Ya[t?.number_format]?{numbers:Ya[t.number_format]}:{}}}catch{return{}}}const Qh=(e,t=wl())=>new Intl.ListFormat(t==="en"?"en-GB":t,{type:"conjunction"}).format(e.map(String)),ze=6,rn=8,Ms=rn*ze,lu=["single","wide","full"],$n=e=>e===!0?"wide":e===!1?"single":e,as=e=>/^screen\.page_[1-8]$/.test(e)?Number(e.slice(-1)):0,ut=e=>lu.includes(e.options?.size)?e.options.size:"single",Do=e=>ut(e)!=="single",au=e=>ut(e)==="full",ru=e=>e-e%ze,cu=e=>e-e%2,Tt=e=>Math.floor(e/ze),kl=e=>$n(e)==="full"?ze:$n(e)==="wide"?2:1,Hn=(e,t)=>$n(t)==="full"?Array.from({length:ze},(n,s)=>ru(e)+s):$n(t)==="wide"?[e,e+1]:[e],Ga=(e,t)=>$n(t)==="full"?ru(e):$n(t)==="wide"?cu(e):e,Ze=e=>e.tiles.map(t=>({tile:t,slot:t.slot}));function uu(e){let t=0;return e.map(n=>{const s=ut(n);s==="full"&&t%ze?t+=ze-t%ze:s==="wide"&&t%2===1&&t++;const i=t;return t+=kl(s),i})}function em(e){const t=uu(e);return e.some((n,s)=>n.slot!==t[s])}function Hi(e){if(e.tiles.some(t=>!Number.isInteger(t.slot))){const t=uu(e.tiles);e.tiles.forEach((n,s)=>n.slot=t[s])}e.tiles.sort((t,n)=>t.slot-n.slot)}function Qn(e){const t=new Set;for(const{tile:n,slot:s}of e)for(const i of Hn(s,ut(n)))t.add(i);return t}const Rs=(e,t,n)=>Number.isInteger(t)&&t>=0&&t!e.has(s));function yi(e,t,n=0){for(let s=n;si.includes(h))?u.push(f):r.push({tile:f,slot:f.slot}));for(const f of u){const h=ut(f),p=Qn(r);let b=l.map(v=>Ga(v,h)).find(v=>Rs(p,v,h));if(b===void 0&&(b=du(p,h,f.slot)),b<0)return null;r.push({tile:f,slot:b})}return r.sort((f,h)=>f.slot-h.slot)}function Pt(e,t=1){const n=Math.max(0,...e.map(({tile:s,slot:i})=>i+kl(ut(s))));return Math.min(rn,Math.max(1,Math.ceil(n/ze),t||1))}function tm(e,t){const n=Array.from({length:t},()=>new Set);let s=0;for(const{tile:h,slot:p}of e){const b=as(h.entity)-1,v=Tt(p);b<0||b>=t||v>=t||(s++,n[v].add(b))}const i=h=>{const p=new Set([0]),b=[0];for(;b.length;)for(const v of h(b.shift()))p.has(v)||(p.add(v),b.push(v));return p},l=i(h=>[...n[h]]),r=i(h=>n.flatMap((p,b)=>p.has(h)?[b]:[])),u=Array.from({length:t},(h,p)=>p),f=h=>h.map(p=>p+1);return{tiles:s,targets:f(u.filter(h=>n.some(p=>p.has(h)))),unreachable:f(u.filter(h=>!l.has(h))),noWayBack:f(u.filter(h=>l.has(h)&&!r.has(h)))}}function nm(e){const t=e.split(".")[0];return t==="sun"?{options:{display:"sunpath",size:"wide"}}:t==="weather"?{options:{display:"forecast",size:"wide"}}:as(e)?{}:t==="screen"?{options:{display:"digital",size:"wide"}}:{}}const pu=e=>({entity:e,name:"",slot:-1,...nm(e)});function hu(e,t){const n=e.entity.split(".")[0],s=t.controls?.[n],i=e.options||{};if(!s||!["wide","full"].includes(i.size)||(i.display||"standard")!=="standard"||i.inline==="slider")return null;const l=i.controls??(i.size==="full"?"none":s.default);return l==="none"?null:l}function sm(e,t){const n=hu(e,t);return n?t.controls?.[e.entity.split(".")[0]]?.choices.find(s=>s.key===n)?.label.toLocaleLowerCase()||n:c("editor.inspect.control_none")}const Uo=e=>(/^(\d+)\.(\d+)\.(\d+)$/.exec(e||"")||[]).slice(1).map(Number);function cn(e,t){const[n,s]=[Uo(e),Uo(t)];if(n.length!==3||s.length!==3)return!1;for(let i=0;i<3;i++)if(n[i]!==s[i])return n[i]>s[i];return!0}const im=(e,t,n,s)=>cn(e,`${t}.${n}.${s}`),om=Ms;function lm(e){return Uo(e).length!==3?10:cn(e,"0.2.62")?om:cn(e,"0.2.7")?20:10}const am=["standard","watch","forecast","graph","digital","analog","sunpath"],mu=e=>am.includes(e)?c(`editor.displays.${e}`):e,rm=e=>c(`editor.sizes.${lu.includes(e)?e:"single"}`),Ja=["light","switch","input_boolean","fan","media_player","climate"],cm=["light","fan","cover","number","input_number","media_player"],um={light:["☀","#ad7600","#fff3d3"],climate:["❄","#c86620","#ffebdc"],vacuum:["◉","#008577","#def3ed"],fan:["✣","#008aab","#def5fa"],cover:["▤","#8053af","#eee5f8"],media_player:["▶","#007cad","#def2fc"],sensor:["⌁","#3476b1","#e5effa"],binary_sensor:["◈","#ad7600","#fff3d3"],switch:["⏻","#ad7600","#fff3d3"],input_boolean:["⏻","#ad7600","#fff3d3"],scene:["✦","#8053af","#eee5f8"],script:["▷","#8053af","#eee5f8"],weather:["☁","#007cad","#def2fc"],number:["±","#008577","#def3ed"],input_number:["±","#008577","#def3ed"],select:["≡","#5862af","#eaecfa"],input_select:["≡","#5862af","#eaecfa"],button:["↗","#5862af","#eaecfa"],input_button:["↗","#5862af","#eaecfa"],screen:["◷","#25282c","#e9ecf1"],sun:["☼","#c86620","#ffebdc"],timer:["⏱","#008577","#def3ed"],person:["☺","#2f7d32","#e1f2e2"],camera:["◧","#3d4a57","#e6ebf0"],image:["◧","#3d4a57","#e6ebf0"]};function Ut(e){const t=e.split(".")[0],n=um[t];return n?[c(`editor.domains.${t}`),...n]:[c("editor.domains.entity"),"◇","#637184","#edf0f4"]}const bu={clock:"clock-outline",analog:"clock-outline",date:"calendar"},at=e=>JSON.stringify(e),Pe=e=>String.fromCodePoint(parseInt(e,16));function Vi(e,t=new Date){let n=t.getHours();return e||(n=n%12||12),`${String(n).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}const $l=(e=new Date,t="en")=>c("screen.date.top_bar",{weekday:c(`screen.date.weekdays_min.${e.getDay()}`,{},{locale:t}),day:e.getDate(),month:c(`screen.date.months_short.${e.getMonth()}`,{},{locale:t})},{locale:t});function dm(e,t=Math.floor(Date.now()/1e3),n="en"){const s=t-e,i=Math.abs(s),l=u=>Math.floor(i/u),r=(u,f)=>f===void 0?c(`screen.time.${u}`,{},{locale:n}):c(`screen.time.${u}`,f,{locale:n});return s<0?i<3600?r("in_minutes",Math.max(1,l(60))):i<86400?r("in_hours",l(3600)):i<172800?r("tomorrow"):r("in_days",l(86400)):i<60?r("just_now"):i<3600?r("minutes_ago",l(60)):i<86400?r("hours_ago",l(3600)):i<172800?r("yesterday"):i<604800?r("days_ago",l(86400)):i<2592e3?r("weeks_ago",l(604800)):i<31536e3?r("months_ago",l(2592e3)):r("years_ago",l(31536e3))}const fm={guition:{width:448,top:36,name:27,text:21,icon:26},cyd:{width:298,top:24,name:18,text:14,icon:18}};let ds;const jo=new Map,pm=()=>jo.clear();function Rn(e,t){const n=`${t}|${e}`;let s=jo.get(n);if(!s){if(ds===void 0&&(ds=document.createElement("canvas").getContext("2d")),ds){ds.font=t;const i=ds.measureText(e);s={left:-i.actualBoundingBoxLeft,right:i.actualBoundingBoxRight,top:-i.actualBoundingBoxAscent,bottom:i.actualBoundingBoxDescent,advance:i.width}}else{const i=Number(/(\d+(?:\.\d+)?)px/.exec(t)?.[1]||14),l=[...e].length*i*.55;s={left:0,right:l,top:-i*.72,bottom:i*.02,advance:l}}jo.set(n,s)}return s}const hm=e=>({name:`500 ${e.name}px "Bar Roboto"`,text:`400 ${e.text}px "Bar Roboto"`,icon:`${e.icon}px "Tile Icons"`});function mm(e){return{icon:Math.max(2,Math.floor((e*4+5)/10)),item:Math.max(6,Math.floor((e*125+50)/100)),name:Math.max(8,Math.floor((e*16+5)/10))}}function vu(e,t,n,s){const i=hm(t),l=Rn("0",i.text),r=Math.round(l.bottom-l.top),u=mm(r),f=Rn(String.fromCodePoint(983376),i.icon),h=Math.round(f.bottom-f.top),p=e.map((T,V)=>{const L=s(T),k={index:V,item:T,view:L,shown:L.shown,width:0};return L.analog?(k.dial=h,k.width=h,k):(L.icon&&(k.icon={glyph:Pe(L.icon),ink:Rn(Pe(L.icon),i.icon)},k.width+=k.icon.ink.right-k.icon.ink.left),L.text&&(k.text={value:L.text,ink:Rn(L.text,i.text)},k.width+=(k.icon?u.icon:0)+k.text.ink.right-k.text.ink.left),k)}),b=p.filter(T=>T.shown),v=Rn(n,i.name).advance,y=Math.min(v,Math.floor(t.width*35/100)),M=T=>T.reduce((V,L)=>V+L.width,0)+Math.max(0,T.length-1)*u.item;let E=0;for(;Et.width;)E++;const x=b.slice(E),O=new Set(b.slice(0,E).map(T=>T.index));let C=t.width-M(x);for(const T of x)T.x=C,C+=T.width+u.item;const F=x.length?x[0].x-u.name:t.width;return{metrics:t,fonts:i,cap:r,zero:l,gaps:u,parts:p,placed:x,dropped:O,nameText:n,natural:v,nameRoom:F}}function bm(e,t,n){if(Rn(e,t).advance<=n)return e;const s=[...e];for(;s.length&&Rn(s.join("")+"...",t).advance>n;)s.pop();return s.join("")+"..."}function vm(e){"fonts"in document&&Promise.all([document.fonts.load('500 27px "Bar Roboto"',"Studio 0"),document.fonts.load('400 21px "Bar Roboto"',"Away 0"),document.fonts.load('26px "Tile Icons"',String.fromCodePoint(983376))]).then(()=>{pm(),e()}).catch(()=>{})}let gu="";function gm(e){gu=e||""}async function xl(e,t={}){const n=await fetch(`api/${e}`,{...t,headers:{"Content-Type":"application/json","X-Screen-CSRF":gu,"X-ESP-Screens-Language":wl(),...t.headers}});if(!n.ok){let s=c("editor.api.failed");try{const i=(await n.json())?.error;typeof i=="string"&&i.trim()&&(s=i)}catch{}throw new Error(s)}return n}const Rt=async e=>(await xl(e)).json(),ft=async(e,t,n,s={})=>{const l=await(await xl(e,{method:t,body:n===void 0?void 0:JSON.stringify(n),...s})).text();return l?JSON.parse(l):null},m=Bn({inventory:{screens:[],entities:[]},connected:!1,reachable:!0,selected:null,layout:null,dirty:!1,busy:!1,saved:0,tab:"layout",selectedTile:null,inspector:null,iconPickerOpen:!1,actionPickerOpen:!1,actionSearch:"",insertAt:-1,filter:"",search:"",capabilities:{},entityActions:{},topbarPreviews:{},topbarAdded:null,topbarOverflow:[],settingEdits:{},settingPending:!1,updating:[],toast:null,now:Date.now(),fontsVersion:0,route:location.hash,overrideProfile:null,overrideFriendly:"",drag:{active:!1,moving:null,preview:null},menuOpen:!1,liveStates:{},room:"",hidePlaced:!1,palette:!1,firmwareJob:null}),_t=$(()=>m.inventory.screens.find(e=>e.id===m.selected)),ss=e=>(e&&"firmware_known"in e?e.firmware_known:e?.firmware)||"",_u=$(()=>ss(_t.value)),yn=(e,t,n)=>im(_u.value,e,t,n),Vn=$(()=>{const e=_t.value?.tile_limit;return typeof e=="number"&&Number.isInteger(e)&&e>0?e:lm(_u.value)}),Xa=$(()=>{const e=_t.value?.full_page;return typeof e=="boolean"?e:yn(0,2,62)}),_m=$(()=>{const e=_t.value?.page_tiles_repeat;return typeof e=="boolean"?e:yn(0,2,65)}),Wi=e=>_m.value&&as(e)>0,Sl=$(()=>_t.value?.board==="guition"),yu=$(()=>fm[Sl.value?"guition":"cyd"]),ro=$(()=>m.selectedTile&&m.layout?.tiles.includes(m.selectedTile)?m.selectedTile:void 0),Cl=e=>!!m.selectedTile&&xe(m.selectedTile)===xe(e);let Za=0;function Ce(e,t){m.toast={message:e,action:t},clearTimeout(Za),Za=window.setTimeout(()=>m.toast=null,t?8e3:5e3)}function ym(){m.toast=null}async function Ot(e,t,n="api_key"){try{if(!navigator.clipboard||!window.isSecureContext)throw new Error;await navigator.clipboard.writeText(e),Ce(c(`editor.copy.${n}.copied`))}catch{if(t){const s=document.createRange();s.selectNodeContents(t);const i=window.getSelection();i?.removeAllRanges(),i?.addRange(s)}Ce(c(document.execCommand("copy")?`editor.copy.${n}.copied`:`editor.copy.${n}.selected`))}}function wi(){const e="/config/integrations/dashboard";try{window.top.location.assign(e)}catch{window.open(e,"_blank")}}const wm=["","#settings","#new-screen","#firmware","#alerts","#override"],kt=$(()=>wm.includes(m.route)?m.route:"");function Ve(e){if(location.hash===e){m.route=e;return}location.hash=e}window.addEventListener("hashchange",()=>{m.route=location.hash,window.scrollTo(0,0)});function Bs(e){return m.inventory.entities.find(t=>t.id===e)?.name||m.inventory.builtin?.find(t=>t.id===e)?.name||e}let co={source:null,byName:{}};function Ks(e){return co.source!==m.inventory.icons&&(co={source:m.inventory.icons,byName:Object.fromEntries((m.inventory.icons?.groups||[]).flatMap(t=>t.icons.map(n=>[n.name,n])))}),e?co.byName[e]:void 0}function xn(e){const t=m.inventory.icons;if(!t)return"F0335";const n=m.inventory.entities.find(i=>i.id===e),s=e.split(".")[0];return t.builtin?.[e]?t.builtin[e]:n?.icon?n.icon:s==="weather"?t.weather[n?.state||""]||t.weather.partlycloudy:s==="sun"?t.sun[n?.state||""]||t.sun.below_horizon:t.defaults[s]||t.fallback}const ms=e=>Ks(e.options?.icon)?.cp||xn(e.entity),uo=new Set;async function Bi(e){const t=[...new Set(e)].filter(n=>!uo.has(n)&&!n.startsWith("screen."));if(t.length){t.forEach(n=>uo.add(n));try{for(let n=0;n`entity=${encodeURIComponent(i)}`).join("&");Object.assign(m.capabilities,(await Rt(`capabilities?${s}`)).capabilities||{})}}catch{t.forEach(n=>uo.delete(n))}}}const fo=new Set;async function km(e){if(!fo.has(e)){fo.add(e);try{m.entityActions[e]=(await Rt(`entity-actions?entity=${encodeURIComponent(e)}`)).actions}catch{fo.delete(e)}}}let po=!1;async function Ki(){const e=[...new Set((m.layout?.tiles||[]).map(t=>t.entity).filter(t=>!t.startsWith("screen.")))];if(!(!e.length||po)){po=!0;try{for(let t=0;t`entity=${encodeURIComponent(s)}`).join("&");Object.assign(m.liveStates,(await Rt(`states?${n}`)).states||{})}}catch{}finally{po=!1}}}function $m(e){const t=m.liveStates[e];if(t)return t;const n=m.inventory.entities.find(s=>s.id===e);return n?.state?{state:n.state,word:null,a:{}}:null}let Ho=0;function pt(){m.dirty=!0,m.saved=0,Ho++}function wu(e){if(e===m.selected&&m.layout&&m.dirty){Qe(),m.tab="layout",m.menuOpen=!1,Ve("");return}if(e!==m.selected&&m.dirty&&!confirm(c("editor.screen_view.confirm.switch")))return;e!==m.selected&&(Fs(),m.settingEdits={}),m.selected=e,m.selectedTile=null,m.inspector=null,m.tab="layout",m.menuOpen=!1;const t=m.inventory.screens.find(s=>s.id===e);if(!t){m.layout=null;return}const n=JSON.parse(JSON.stringify(t.layout));Hi(n),n.pages=Pt(Ze(n),n.pages),m.layout=n,m.insertAt=-1,m.dirty=!1,m.saved=0,qi(0),Bi(n.tiles.map(s=>s.entity)),Ki(),Ve("")}const xm=()=>m.layout?Ze(m.layout):[];function Sm(e){const t=m.layout,n=t.tiles.map(i=>`${i.entity}@${i.slot}`).join();for(const{tile:i,slot:l}of e)i.slot=l,t.tiles.includes(i)||t.tiles.push(i);Hi(t),t.pages=Pt(Ze(t),t.pages);const s=t.tiles.map(i=>`${i.entity}@${i.slot}`).join()!==n;return s&&pt(),s}function qs(e,t){if(!m.layout)return!1;Bi([e.entity]);const n=fu(m.layout.tiles,e,t),s=n?Sm(n):!1;return s&&!m.liveStates[e.entity]&&Ki(),s}function ku(e){const t=m.layout;if(!t||!Wi(e)&&t.tiles.some(i=>i.entity===e)||t.tiles.length>=Vn.value)return;const n=pu(e),s=m.insertAt>=0?m.insertAt:yi(Qn(Ze(t)),ut(n));m.insertAt=-1,s>=0&&qs(n,s)&&Vo(n)}function $u(e){const t=m.layout;if(!t)return;const n=t.tiles.indexOf(e);n<0||(t.tiles.splice(n,1),Cl(e)&&Qe(),pt(),t.pages=Pt(Ze(t),t.pages),Ce(c("editor.layout.removed",{name:e.name||Bs(e.entity)}),{label:c("editor.common.undo"),run:()=>qs(e,e.slot)}))}function Qa(){const e=m.layout;e&&(e.pages=Math.min(rn,Pt(Ze(e),e.pages)+1),pt())}function Cm(e){const t=m.layout;if(t){for(const n of t.tiles)Tt(n.slot)>e&&(n.slot-=ze);t.pages=Math.max(1,Pt(Ze(t),t.pages)-1),pt()}}function Tm(e,t){const n=m.layout;if(!n||!Number.isInteger(t)||t<0||t>=rn||t===Tt(e.slot))return!1;const s=yi(Qn(Ze(n).filter(l=>l.tile!==e)),ut(e),t*ze),i=qs(e,s>=0&&Tt(s)===t?s:t*ze);return i||Ce(c("editor.layout.no_room",{page:t+1})),i}function Em(){const e=m.layout;if(!e)return 1;const t=m.drag.preview||Ze(e),n=Pt(t,e.pages);return m.drag.active&&nh.key!=="none"&&i.controls.includes(h.key))?.key||"none"),pt();const f=m.layout;if(f){if(au(e)&&r!=="full"){const h=Tt(e.slot),p=f.tiles.filter(y=>y!==e&&Tt(y.slot)===h),b=Qn(Ze(f).filter(y=>y.tile!==e&&!p.includes(y.tile))),v=[];for(const y of p){const M=yi(b,ut(y),(h+1)*ze);if(M<0){v.length=0;break}v.push([y,M]);for(const E of Hn(M,ut(y)))b.add(E)}if(v.length===p.length){for(const[y,M]of v)y.slot=M;e.slot=h*ze}else{const y=yi(Qn(Ze(f).filter(M=>M.tile!==e)),"full");y>=0?e.slot=y:(e.options.size=r,Ce(c("editor.layout.no_free_page")))}}else if(Do(e)&&!l){const h=Qn(Ze(f).filter(v=>v.tile!==e)),p=cu(e.slot),b=Rs(h,p,"wide")?p:du(h,"wide",p);b>=0&&(e.slot=b)}Hi(f),f.pages=Pt(Ze(f),f.pages)}}function Am(e,t){const n=`screen.page_${t}`,s=m.layout;return!s||n===e.entity||!as(n)?!1:!Wi(n)&&s.tiles.some(i=>i.entity===n)?(Ce(c("editor.layout.page_taken",{page:t})),!1):(e.entity=n,s.pages=Math.max(Pt(Ze(s),s.pages),t),pt(),!0)}function Vo(e){Cl(e)||(m.iconPickerOpen=!1,m.actionPickerOpen=!1,m.actionSearch=""),m.selectedTile=e,m.inspector={kind:"tile"},Bi([e.entity])}function Jt(e){m.inspector?.kind==="bar"&&m.inspector.index===e||(m.iconPickerOpen=!1),m.selectedTile=null,m.inspector={kind:"bar",index:e}}function er(){m.selectedTile=null,m.inspector={kind:"bar-add"}}function Qe(){m.inspector=null,m.selectedTile=null}async function Wo(){if(m.busy||!m.layout||!m.selected)return;m.busy=!0;const e=Ho,t=m.selected;try{const{settings:n,...s}=m.layout;if(await ft(`screens/${encodeURIComponent(m.selected)}`,"PUT",s),m.selected!==t){const i=m.inventory.screens.find(l=>l.id===t)?.name;Ce(i?c("editor.screen_view.saved.other",{name:i}):c("editor.screen_view.saved.other_unnamed"))}else Ho===e?(m.dirty=!1,m.saved=Date.now(),Ce(c("editor.screen_view.saved.current"))):Ce(c("editor.screen_view.saved.newer_edit"));await Sn()}catch(n){Ce(n.message)}finally{m.busy=!1}}const Wn=e=>!!(e&&e.alert_action&&cn(ss(e),m.inventory.alerts?.min_firmware||"0.2.31"));async function xu(e){try{await ft(`screens/${encodeURIComponent(e.id)}/identify`,"POST"),Ce(c("editor.screen_view.identified",{name:e.name}))}catch(t){Ce(t.message)}}async function Pm(e,t){return await ft("alerts/test","POST",{screen:e,data:t})}const Om=["title","tiles","header","pages"];function Su(e,t){const n=m.layout;if(!n)return;const s=(Array.isArray(e.tiles)?e.tiles:[]).filter(u=>!!(u&&typeof u=="object"&&typeof u.entity=="string"&&u.entity.includes("."))).map(u=>({entity:u.entity,name:typeof u.name=="string"?u.name:"",slot:Number.isInteger(u.slot)?u.slot:-1,...u.options&&typeof u.options=="object"?{options:{...u.options}}:{}})),i=new Set,l=s.filter(u=>Wi(u.entity)||!i.has(u.entity)&&i.add(u.entity)),r=l.slice(0,Vn.value);n.tiles=r,e.header&&Array.isArray(e.header.items)?n.header={items:e.header.items.map(u=>({...u}))}:delete n.header,n.pages=Number.isInteger(e.pages)?e.pages:1,Hi(n),n.pages=Pt(Ze(n),n.pages),Qe(),pt(),Bi(r.map(u=>u.entity)),Ki(),qi(0),Ce(t(r.lengthn.id===e);!t||!m.layout||Su(JSON.parse(JSON.stringify(t.layout)),n=>n?c("editor.layout.copied_part",{name:t.name,...n}):c("editor.layout.copied",{name:t.name}))}function Lm(){const e=m.layout;if(!e)return"";const t={esp_screens_layout:1};for(const n of Om)e[n]!==void 0&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Cu(){const e=Lm();if(!e)return;const t=`${(_t.value?.name||"screen").toLowerCase().replace(/[^a-z0-9]+/g,"-")}.layout.json`,n=URL.createObjectURL(new Blob([e],{type:"application/json"})),s=document.createElement("a");s.href=n,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(n),5e3),Ot(e,void 0,"layout_json")}function Mm(e){let t;try{t=JSON.parse(e)}catch{Ce(c("editor.layout.not_json"));return}if(!t||typeof t!="object"||!Array.isArray(t.tiles)){Ce(c("editor.layout.no_tiles_in_file"));return}Su(t,n=>n?c("editor.layout.imported_part",n):c("editor.layout.imported"))}function Rm(e){const t=m.inventory.updates?.target,n=m.inventory.changelog;if(!Array.isArray(n)||!t)return[];const s=ss(e),i=[];for(const l of n)if(!(cn(l.firmware,t)&&l.firmware!==t)&&!(s&&cn(s,l.firmware)))for(const r of l.lines)i.includes(r)||i.push(r);return i}let ho=!1;async function Nm(){if(!ho){ho=!0;try{const e=await Rt("firmware");m.firmwareJob={job:e.job,logs:e.logs||[]}}catch{}finally{ho=!1}}}const Bo=()=>m.inventory.screens.some(e=>e.update?.state==="running")||m.updating.length>0;function Gn(e){const t=e.update||{};if(!(t.state==="running"||m.updating.includes(e.id)))return null;const n=m.firmwareJob?.job?.stage;return t.phase==="verify"?{percent:78,text:vs("verify")}:t.phase==="settle"?{percent:92,text:vs("settle")}:t.phase==="install"||!t.phase?n==="upload"?{percent:66,text:c("editor.update.writing")}:n?{percent:40,text:c("editor.update.building")}:{percent:12,text:vs("install")}:{percent:12,text:vs(t.phase)}}const un=()=>m.layout?.header?.items??(m.layout?.settings?.show_clock??!0?[{type:"clock"}]:[]),bn=()=>m.inventory.header?.max_items||6;function Ns(e){m.layout&&(m.layout.header={items:e},pt(),qi())}let tr=0;function qi(e=150){clearTimeout(tr),tr=window.setTimeout(async()=>{const t=un();if(t.some(n=>n.type==="entity"))try{const n=await ft("header-preview","POST",{header:{items:t}});t.forEach((s,i)=>m.topbarPreviews[at(s)]=n.items[i])}catch{}},e)}function bs(e){return e.type==="entity"?Bs(e.entity):m.inventory.header?.builtin.find(t=>t.type===e.type)?.label||e.type}function hn(e){const t=new Date(m.now);if(e.type==="clock")return{text:Vi(is.value,t),shown:!0};if(e.type==="date")return{text:$l(t,Kn.value),shown:!0};if(e.type==="analog")return{analog:!0,shown:!0};const n=m.topbarPreviews[at(e)];return n?{icon:n.i||null,text:n.k==="ago"?dm(n.e,Math.floor(m.now/1e3),Kn.value):n.t,color:n.c?`#${n.c}`:null,shown:n.shown}:{icon:e.icon==="none"?null:Ks(e.icon)?.cp||xn(e.entity),text:"…",shown:!0,loading:!0}}function mo(e,t){const n=[...un()];return t<0||t>=n.length||e===t?!1:(n.splice(t,0,...n.splice(e,1)),Ns(n),!0)}function nr(e){const t=[...un()],[n]=t.splice(e,1);n&&(m.inspector?.kind==="bar"&&Qe(),Ns(t),Ce(c("editor.topbar.removed",{name:bs(n)}),{label:c("editor.common.undo"),run:()=>{const s=[...un()];s.splice(Math.min(e,s.length),0,n),Ns(s)}}))}function bo(e){const t=un();if(t.length>=bn())return Ce(c("editor.topbar.full",bn()));if(t.some(n=>at(n)===at(e)))return Ce(c("editor.topbar.already"));m.topbarAdded={key:at(e),time:Date.now()},Ns([...t,e]),Jt(t.length)}const Fm=[{group:"brightness",icon:"F0599",rows:[{key:"brightness",kind:"number",min:5,max:100,step:5,unit:"%"},{key:"dark_mode",kind:"toggle"},{key:"standby_enabled",kind:"toggle"},{key:"standby_seconds",kind:"duration",min:60,max:86400,needs:"standby_enabled"},{key:"standby_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"standby_enabled",cap:"brightness"}]},{group:"night",icon:"F0594",rows:[{key:"night_enabled",kind:"toggle"},{key:"night_start",kind:"moment",needs:"night_enabled"},{key:"night_end",kind:"moment",needs:"night_enabled"},{key:"night_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"night_enabled",cap:"brightness"}]},{group:"screen",icon:"F0379",rows:[{key:"auto_home",kind:"toggle"},{key:"auto_home_seconds",kind:"duration",min:30,max:3600,needs:"auto_home"},{key:"home_on_standby",kind:"toggle"},{key:"swipe_pages",kind:"toggle"},{key:"page_buttons",kind:"toggle"},{key:"rotation",kind:"choice",options:[0,90,180,270]}]}],vo=e=>c(`editor.screen_settings.rows.${e.key}`),Dm=(e,t)=>`${t}°`;function Tu(e=xm(),t=m.layout?Pt(e,m.layout.pages):1){const n=$i();if(t<2||n.page_buttons!==!1||n.swipe_pages!==!1)return"";const{tiles:s,targets:i,unreachable:l,noWayBack:r}=tm(e,t);if(!l.length&&!r.length)return"";const u=v=>c("editor.screen_settings.reach.pages",{list:Qh(v)},v.length),f=l.filter(v=>!i.includes(v)),h=l.filter(v=>i.includes(v)),p=f.length===1?"one":"more",b=[c("editor.screen_settings.reach.intro")];return s&&f.length?b.push(c(`editor.screen_settings.reach.tiles_missing_${p}`,{targets:u(i),missing:u(f)},s)):s?b.push(c("editor.screen_settings.reach.tiles",{targets:u(i)},s)):f.length?b.push(c(`editor.screen_settings.reach.none_missing_${p}`,{missing:u(f)})):b.push(c("editor.screen_settings.reach.none")),h.length&&b.push(c("editor.screen_settings.reach.cut_off",{pages:u(h)})),r.length&&b.push(c("editor.screen_settings.reach.no_way_back",{pages:u(r)})),b.join(" ")}const Eu=4e3;let vn={},es=null,ki=0,oi=null;const Tl=()=>_t.value?.settings;function $i(){const e=Tl(),t={...e?.values||{}};for(const[n,s]of Object.entries(m.settingEdits))t[n]=s.value;return t}const Um=e=>e<300?30:e<900?60:e<3600?300:e<7200?900:1800;function sr(e,t,n,s,i){if(e.kind==="moment"){let u=s&&t%60?Math.floor(t/60)*60+(n>0?60:0):t+n*(s?60:15);return u%=1440,u<0?u+1440:u}const l=e.kind==="duration"?Um(n<0?t-1:t):e.step,r=e.cap?Math.min(e.max,i[e.cap]):e.max;return Math.min(r,Math.max(e.min,t+n*l))}function jm(e){if(e<60)return c("editor.screen_settings.duration.seconds",{n:e});if(e<3600)return c("editor.screen_settings.duration.minutes",{n:Math.floor(e/60)});const t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n?c("editor.screen_settings.duration.hours_minutes",{h:t,m:String(n).padStart(2,"0")}):c("editor.screen_settings.duration.hours",{n:t})}function Hm(e,t){const n=Math.floor(e/60),s=String(e%60).padStart(2,"0");return t?`${String(n).padStart(2,"0")}:${s}`:c(n<12?"editor.screen_settings.time.am":"editor.screen_settings.time.pm",{time:`${n%12||12}:${s}`})}function Vm(e,t){const n=t[e.key];return n==null?"—":e.kind==="number"?`${n}${e.unit||""}`:e.kind==="duration"?jm(n):e.kind==="moment"?Hm(n,is.value):""}function ti(e,t,n){if(es&&es!==m.selected&&Object.keys(vn).length){Fs(),Ce(c("editor.screen_settings.other_screen_busy"));return}es=m.selected;const s=$i();if(m.settingEdits[e]={value:t,at:Date.now()},vn[e]=t,e==="brightness")for(const i of["standby_brightness","night_brightness"])s[i]>t&&(m.settingEdits[i]={value:t,at:Date.now()});m.settingPending=!0,clearTimeout(ki),ki=window.setTimeout(()=>Fs(),n)}async function Fs(e=!1){if(clearTimeout(ki),oi||!Object.keys(vn).length||!es)return;const t=es,n=vn;vn={};const s=xl(`screens/${encodeURIComponent(t)}/settings`,{method:"PUT",body:JSON.stringify({settings:n}),keepalive:e});oi=s;try{const i=await(await s).json(),l=m.inventory.screens.find(r=>r.id===t);l&&(l.settings=i)}catch(i){if(Ce(i.message),t===m.selected)for(const l of Object.keys(n))delete m.settingEdits[l];if(t===m.selected&&n.brightness!==void 0)for(const l of["standby_brightness","night_brightness"])delete m.settingEdits[l]}finally{oi=null,Object.keys(vn).length?ki=window.setTimeout(()=>Fs(),150):es=null,m.settingPending=!!Object.keys(vn).length,t===m.selected&&xi(),setTimeout(()=>{t===m.selected&&xi()},Eu+100)}}function xi(){const e=Tl();for(const[t,n]of Object.entries(m.settingEdits))vn[t]!==void 0||oi||(e&&e.values[t]===n.value||Date.now()-n.at>Eu)&&delete m.settingEdits[t]}const vs=e=>["install","verify","settle"].includes(e||"")?c(`editor.update.phases.${e}`):c("editor.update.starting");async function Ko(e,t){m.updating.push(e.id);try{await ft(`screens/${encodeURIComponent(e.id)}/update`,"POST",t?{host:t}:{}),await Sn()}catch(n){m.updating=m.updating.filter(s=>s!==e.id),Ce(n.message)}}async function ir(){try{await ft("updates/run","POST"),await Sn()}catch(e){Ce(e.message)}}async function Wm(e){try{await ft("updates","PUT",{auto:e}),m.inventory.updates&&(m.inventory.updates.auto=e),Ce(c(e?"editor.settings.updates.auto_on":"editor.settings.updates.auto_off"))}catch(t){Ce(t.message)}}async function Bm(){try{m.inventory.claude_skill=await ft("claude-skill","POST"),Ce(c(m.inventory.claude_skill?.restart?"editor.settings.claude.installed_restart":"editor.settings.claude.installed"))}catch(e){Ce(e.message)}}const Kn=$(()=>su(m.inventory.language?.effective));St(Kn,e=>iu(e),{immediate:!0});const Fn=(e,t={})=>c(e,t,{locale:Kn.value}),Km=e=>m.inventory.language?.languages?.find(t=>t.code===e)?.name||zh(e||"")?.name||e||"",Au=e=>!!(e.update?.available||e.update?.language),or=()=>c("editor.update.new_language",{name:Km(m.inventory.language?.effective)}),is=$(()=>m.inventory.language?.clock_effective!=="12"),Pu=$(()=>Xh(Kn.value)),qm=$(()=>{const e=m.inventory.language?m.inventory.language.numbers||"auto":"point";return e==="auto"?Pu.value:Fo[e]});async function lr(e){try{const t=await ft("language","PUT",e);return t?.language&&(m.inventory.language=t.language),Ce(c(e.setting===void 0?"editor.settings.language.saved":"editor.settings.language.saved_language")),await Sn(),!0}catch(t){return Ce(t.message),!1}}async function Sn(e=!0){try{const t=await Rt(e?"inventory":"inventory?light=1");m.inventory=e?t:{...m.inventory,...t},t.csrf&&gm(t.csrf),m.connected=!!m.inventory.connected,m.reachable=!0;for(const n of m.inventory.screens)n.update?.state==="running"&&(m.updating=m.updating.filter(s=>s!==n.id));m.selected&&xi()}catch{m.reachable=!1}}function zm(e){m.inventory={...m.inventory,...e},m.connected=!!m.inventory.connected;for(const t of m.inventory.screens)t.update?.state==="running"&&(m.updating=m.updating.filter(n=>n!==t.id));m.selected&&xi()}let ar=0,qo=Date.now(),Si=!1,fs=null;function Ym(){fs||typeof EventSource>"u"||(fs=new EventSource(`api/events?language=${encodeURIComponent(wl())}`),fs.onopen=()=>{Si=!0,Ds()},fs.onmessage=e=>{document.hidden||zm(JSON.parse(e.data))},fs.onerror=()=>{Si=!1,Ds()})}function Ds(){clearTimeout(ar);const e=Si?6e4:m.inventory.updates?.busy?3e3:1e4;ar=window.setTimeout(async()=>{if(!document.hidden){const t=Date.now()-qo>=3e5;t&&(qo=Date.now()),(t||!Si)&&await Sn(t)}Ds()},e)}let rr=!1;function Gm(){rr||(rr=!0,Sn(),Ym(),Ds(),vm(()=>m.fontsVersion++),setInterval(()=>{!m.layout||document.hidden||m.drag.active||(m.now=Date.now(),qi(0))},3e4),setInterval(()=>{!document.hidden&&m.layout&&m.tab==="layout"&&kt.value===""&&Ki()},8e3),setInterval(()=>{!document.hidden&&Bo()?Nm():m.firmwareJob&&!Bo()&&(m.firmwareJob=null)},3e3),document.addEventListener("visibilitychange",async()=>{document.hidden||(qo=Date.now(),m.now=Date.now(),await Sn(),Ds())}),window.addEventListener("pagehide",()=>Fs(!0)),window.addEventListener("beforeunload",e=>{m.dirty&&(e.preventDefault(),e.returnValue="")}))}const Jm={class:"side"},Xm={class:"label"},Zm={id:"screens"},Qm=["aria-current","onClick"],eb={class:"txt"},tb=["aria-label","title"],nb={key:1,class:"pill"},sb={key:2,class:"spin small"},ib=["onSubmit"],ob=["placeholder","aria-label"],lb={type:"submit",class:"btn mini primary"},ab=["aria-label"],rb=["disabled","title","onClick"],cb={key:2,class:"whatsnew"},ub=["aria-valuenow"],db={class:"progress-text"},fb=["title"],pb=["title"],hb={id:"pending"},mb={class:"pending-actions"},bb=["onClick"],vb=["aria-current"],gb={class:"txt"},_b={class:"more"},yb={class:"label"},wb=["aria-current"],kb={class:"mdi"},$b={class:"txt"},xb=["aria-current"],Sb={class:"mdi"},Cb={class:"txt"},Tb=["aria-current"],Eb={class:"mdi"},Ab={class:"txt"},Pb={class:"txt"},Ob=Me({__name:"Sidebar",setup(e){const t=ke(null),n=ke(""),s=p=>{const b=p.update||{};return!!b.language&&(!b.target||cn(ss(p),b.target))};function i(p){const b=p.update||{};return b.state==="running"||m.updating.includes(p.id)?{kind:"running",text:vs(b.phase)}:b.state==="queued"?{kind:"queued",text:c("editor.sidebar.update.queued")}:Au(p)&&p.online?{kind:"available",text:s(p)?or():c("editor.sidebar.update.available",{version:b.target})}:b.result&&Date.now()/1e3-b.result.time<86400?{kind:b.result.state==="failed"?"failed":"done",text:b.result.message}:null}const l=p=>[...p.update?.language&&!s(p)?[or()]:[],...Rm(p)];function r(p){const b=p.update||{};b.host&&b.profile?Ko(p):b.profile&&(t.value=p.id,n.value="")}function u(p){const b=n.value.trim();b&&(t.value=null,Ko(p,b))}const f=()=>{const p=m.firmwareJob?.logs||[];return p.length?p[p.length-1]:""},h=p=>p.installed?c("editor.sidebar.pending.installed"):p.downloaded?c("editor.sidebar.pending.downloaded"):c("editor.sidebar.pending.not_flashed",{file:p.file});return(p,b)=>(g(),_("aside",Jm,[b[13]||(b[13]=o("div",{class:"brand"},[o("span",{class:"mark"},"▦"),o("span",null,"ESP Screens")],-1)),o("span",{id:"connection",class:me(["conn",{online:a(m).connected}]),role:"status"},d(a(m).reachable?a(m).connected?a(c)("editor.sidebar.connection.connected"):a(c)("editor.sidebar.connection.reconnecting"):a(c)("editor.sidebar.connection.unreachable")),3),o("button",{type:"button",class:"search-btn",id:"open-palette",onClick:b[0]||(b[0]=v=>a(m).palette=!0)},[Re("⌕ "+d(a(c)("editor.sidebar.search")),1),b[10]||(b[10]=o("kbd",null,"⌘K",-1))]),o("div",Xm,d(a(c)("editor.sidebar.screens")),1),o("div",Zm,[(g(!0),_(B,null,he(a(m).inventory.screens,v=>(g(),_("div",{key:v.id,class:me(["screen-item",{selected:v.id===a(m).selected&&a(kt)===""}])},[o("button",{type:"button",class:"nav-item","aria-current":v.id===a(m).selected&&a(kt)===""?"true":"false",onClick:y=>a(wu)(v.id)},[o("span",{class:me(["dot",{off:!v.online}])},null,2),o("span",eb,[o("span",null,d(v.name),1),o("small",null,d(v.online?a(c)("editor.common.online"):a(c)("editor.common.offline"))+d(v.area?" · "+v.area:"")+" · "+d(v.firmware||a(c)("editor.common.unknown")),1)]),v.id===a(m).selected&&a(m).dirty?(g(),_("span",{key:0,class:"unsaved",role:"img","aria-label":a(c)("editor.common.unsaved"),title:a(c)("editor.common.unsaved")},null,8,tb)):H("",!0),i(v)?.kind==="available"?(g(),_("span",nb,d(a(c)("editor.sidebar.update.pill")),1)):i(v)?.kind==="running"?(g(),_("span",sb)):H("",!0)],8,Qm),i(v)?(g(),_("div",{key:0,class:me(["screen-update",i(v).kind])},[i(v).kind==="available"?(g(),_(B,{key:0},[t.value===v.id?(g(),_(B,{key:0},[o("small",null,d(a(c)("editor.sidebar.host.hint")),1),o("form",{class:"screen-host",onSubmit:At(y=>u(v),["prevent"])},[Ae(o("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>n.value=y),placeholder:a(c)("editor.sidebar.host.placeholder"),required:"",pattern:"[A-Za-z0-9][A-Za-z0-9.\\-]*","aria-label":a(c)("editor.sidebar.host.label"),autofocus:""},null,8,ob),[[Xe,n.value]]),o("button",lb,d(a(c)("editor.sidebar.host.start")),1),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.cancel"),onClick:b[2]||(b[2]=y=>t.value=null)},"✕",8,ab)],40,ib)],64)):(g(),_(B,{key:1},[o("small",null,d(i(v).text),1),o("button",{type:"button",class:"btn mini primary",disabled:!v.update?.profile,title:v.update?.profile?"":a(c)("editor.sidebar.update.no_profile"),onClick:y=>r(v)},d(a(c)("editor.sidebar.update.button")),9,rb)],64)),l(v).length?(g(),_("details",cb,[o("summary",null,d(a(c)("editor.sidebar.update.whats_new")),1),o("ul",null,[(g(!0),_(B,null,he(l(v).slice(0,8),y=>(g(),_("li",{key:y},d(y),1))),128))])])):H("",!0)],64)):i(v).kind==="running"&&a(Gn)(v)?(g(),_(B,{key:1},[o("div",{class:"progress",role:"progressbar","aria-valuenow":a(Gn)(v).percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:je({width:a(Gn)(v).percent+"%"})},null,4)],8,ub),o("div",db,[o("span",null,d(a(Gn)(v).percent)+" %",1),o("span",{title:f()},d(a(Gn)(v).text),9,fb)]),f()?(g(),_("small",{key:0,title:f(),style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},d(f()),9,pb)):H("",!0),o("button",{type:"button",class:"btn link mini",style:{"justify-self":"start"},onClick:b[3]||(b[3]=y=>a(Ve)("#firmware"))},d(a(c)("editor.sidebar.update.full_log")),1)],64)):(g(),_("small",{key:2,class:me({failed:i(v).kind==="failed"})},d(i(v).text),3))],2)):H("",!0)],2))),128))]),o("div",hb,[(g(!0),_(B,null,he(a(m).inventory.pending||[],v=>(g(),_("div",{key:v.file,class:"pending"},[o("strong",null,d(v.friendly),1),o("small",null,d(h(v)),1),o("div",mb,[o("button",{type:"button",class:"btn mini quiet",onClick:b[4]||(b[4]=(...y)=>a(wi)&&a(wi)(...y))},d(a(c)("editor.common.open_integrations")),1),v.api_key?(g(),_("button",{key:0,type:"button",class:"btn mini quiet",onClick:y=>a(Ot)(v.api_key)},d(a(c)("editor.sidebar.copy_api_key")),9,bb)):H("",!0)])]))),128))]),o("button",{id:"new-screen",type:"button",class:"nav-item ghost","aria-current":a(kt)==="#new-screen"?"true":"false",onClick:b[5]||(b[5]=v=>a(Ve)("#new-screen"))},[b[11]||(b[11]=o("span",{class:"plus"},"+",-1)),o("span",gb,d(a(c)("editor.nav.new_screen")),1)],8,vb),b[14]||(b[14]=o("div",{class:"spacer"},null,-1)),o("div",_b,[o("div",yb,d(a(c)("editor.sidebar.more")),1),o("button",{id:"open-firmware",type:"button",class:"nav-item","aria-current":a(kt)==="#firmware"?"true":"false",onClick:b[6]||(b[6]=v=>a(Ve)("#firmware"))},[o("span",kb,d(a(Pe)("F0241")),1),o("span",$b,d(a(c)("editor.nav.firmware")),1)],8,wb),o("button",{id:"open-alerts",type:"button",class:"nav-item","aria-current":a(kt)==="#alerts"?"true":"false",onClick:b[7]||(b[7]=v=>a(Ve)("#alerts"))},[o("span",Sb,d(a(Pe)("F0594")),1),o("span",Cb,d(a(c)("editor.nav.alerts")),1)],8,xb),o("button",{id:"open-settings",type:"button",class:"nav-item","aria-current":a(kt)==="#settings"?"true":"false",onClick:b[8]||(b[8]=v=>a(Ve)("#settings"))},[o("span",Eb,d(a(Pe)("F0493")),1),o("span",Ab,d(a(c)("editor.nav.settings")),1)],8,Tb),o("button",{id:"refresh",type:"button",class:"nav-item ghost",onClick:b[9]||(b[9]=v=>a(Sn)())},[b[12]||(b[12]=o("span",{class:"plus"},"↻",-1)),o("span",Pb,d(a(c)("editor.sidebar.refresh")),1)])])]))}}),Ib={key:0,id:"toast",class:"toast",role:"status"},Lb=Me({__name:"Toast",setup(e){return(t,n)=>a(m).toast?(g(),_("div",Ib,[o("span",null,d(a(m).toast.message),1),a(m).toast.action?(g(),_("button",{key:0,type:"button",onClick:n[0]||(n[0]=s=>{a(m).toast.action.run(),a(ym)()})},d(a(m).toast.action.label),1)):H("",!0)])):H("",!0)}}),Mb=["aria-label"],Rb=["placeholder","aria-label"],Nb={class:"palette-list"},Fb={class:"palette-group"},Db=["onMouseenter","onClick"],Ub={key:0,class:"mdi"},jb={key:1,class:"glyph"},Hb={class:"tx"},Vb={key:0},Wb={key:2,class:"hint-key"},Bb={key:0,class:"palette-empty"},Kb=Me({__name:"CommandPalette",setup(e){const t=ke(""),n=ke(0),s=ke(null),i=$(()=>{const h=t.value.trim().toLocaleLowerCase(),p=[],b=c("editor.palette.groups.screens"),v=c("editor.palette.groups.actions");for(const E of m.inventory.screens)p.push({group:b,label:E.name,detail:`${E.online?c("editor.common.online"):c("editor.common.offline")} · ${E.firmware||c("editor.common.unknown")}`,glyphText:"▦",run:()=>wu(E.id)});const y=_t.value,M=[{group:v,label:c("editor.nav.new_screen"),detail:c("editor.nav.new_screen_detail"),glyphText:"+",run:()=>Ve("#new-screen")},{group:v,label:c("editor.nav.firmware"),icon:"F0241",run:()=>Ve("#firmware")},{group:v,label:c("editor.nav.alerts"),detail:c("editor.palette.alerts_detail"),icon:"F0594",run:()=>Ve("#alerts")},{group:v,label:c("editor.nav.settings"),detail:c("editor.palette.settings_detail"),icon:"F0493",run:()=>Ve("#settings")}];if(y&&m.layout&&M.unshift({group:v,label:c("editor.common.save_send"),detail:m.dirty?c("editor.common.unsaved"):c("editor.palette.nothing_to_save"),key:"⌘S",run:()=>Wo()},{group:v,label:c("editor.screen_view.tabs.layout"),detail:y.name,run:()=>{Ve(""),m.tab="layout"}},{group:v,label:c("editor.screen_view.tabs.settings"),detail:y.name,run:()=>{Ve(""),m.tab="settings"}},{group:v,label:c("editor.palette.identify"),detail:Wn(y)?c("editor.palette.identify_detail"):c("editor.palette.identify_needs"),run:()=>{Wn(y)&&xu(y)}},{group:v,label:c("editor.palette.export"),detail:c("editor.palette.export_detail"),run:Cu}),p.push(...M),y&&m.layout&&h){const E=new Set(m.layout.tiles.map(O=>O.entity)),x=m.layout.tiles.length>=Vn.value;for(const O of m.inventory.entities)if(!(O.tile===!1||E.has(O.id))&&`${O.name} ${O.id} ${O.area||""} ${O.device||""}`.toLocaleLowerCase().includes(h)&&(p.push({group:c("editor.palette.groups.add"),label:O.name,detail:[Ut(O.id)[0],O.area].filter(Boolean).join(" · "),icon:m.inventory.icons?xn(O.id):void 0,run:()=>{x||ku(O.id)}}),p.length>60))break}return h?p.filter(E=>`${E.label} ${E.detail||""}`.toLocaleLowerCase().includes(h)):p}),l=$(()=>{const h=[];return i.value.forEach((p,b)=>{(h.find(y=>y.group===p.group)||(h.push({group:p.group,items:[]}),h[h.length-1])).items.push({item:p,index:b})}),h});function r(){m.palette=!1}function u(h){r(),h.run()}function f(h){if(h.key==="Escape")h.preventDefault(),r();else if(h.key==="ArrowDown")h.preventDefault(),n.value=Math.min(i.value.length-1,n.value+1);else if(h.key==="ArrowUp")h.preventDefault(),n.value=Math.max(0,n.value-1);else if(h.key==="Enter"){h.preventDefault();const p=i.value[n.value];p&&u(p)}}return St(t,()=>n.value=0),St(()=>m.palette,async h=>{h&&(t.value="",n.value=0,await Ri(),s.value?.focus())}),(h,p)=>a(m).palette?(g(),_("div",{key:0,class:"palette-backdrop",onClick:r},[o("div",{class:"palette",role:"dialog","aria-label":a(c)("editor.sidebar.search"),onClick:p[1]||(p[1]=At(()=>{},["stop"])),onKeydown:f},[Ae(o("input",{ref_key:"input",ref:s,"onUpdate:modelValue":p[0]||(p[0]=b=>t.value=b),id:"palette-input",placeholder:a(c)("editor.palette.placeholder"),"aria-label":a(c)("editor.sidebar.search"),autocomplete:"off"},null,8,Rb),[[Xe,t.value]]),o("div",Nb,[(g(!0),_(B,null,he(l.value,b=>(g(),_(B,{key:b.group},[o("div",Fb,d(b.group),1),(g(!0),_(B,null,he(b.items,({item:v,index:y})=>(g(),_("button",{key:y,type:"button",class:me(["palette-item",{active:y===n.value}]),onMouseenter:M=>n.value=y,onClick:M=>u(v)},[v.icon?(g(),_("span",Ub,d(a(Pe)(v.icon)),1)):(g(),_("span",jb,d(v.glyphText||"›"),1)),o("span",Hb,[o("span",null,d(v.label),1),v.detail?(g(),_("small",Vb,d(v.detail),1)):H("",!0)]),v.key?(g(),_("kbd",Wb,d(v.key),1)):H("",!0)],42,Db))),128))],64))),128)),i.value.length?H("",!0):(g(),_("p",Bb,d(a(c)("editor.palette.empty")),1))])],40,Mb)])):H("",!0)}}),ve={source:null,element:null,ghost:null,timer:0,start:null,offset:{x:0,y:0},pointerId:null,suppressUntil:0,last:null,scroller:0,target:null},Ou={mounted(e,t){e.__dragSource=t.value,e.addEventListener("pointerdown",s=>{const i=e.__dragSource;if(!(s.button!==0||e.disabled||s.target.closest(".remove"))){s.pointerType!=="touch"&&s.preventDefault(),Object.assign(ve,{source:i,element:e,start:{x:s.clientX,y:s.clientY},pointerId:s.pointerId});try{e.setPointerCapture(s.pointerId)}catch{}clearTimeout(ve.timer),s.pointerType==="touch"&&(ve.timer=window.setTimeout(()=>cr(s),260))}}),e.addEventListener("pointermove",s=>{if(m.drag.active||!ve.start||ve.element!==e)return;const i=Math.hypot(s.clientX-ve.start.x,s.clientY-ve.start.y);if(s.pointerType==="touch"){i>10&&(clearTimeout(ve.timer),ve.start=null);return}i>=6&&cr(s)});const n=()=>{ve.element===e&&!m.drag.active&&(clearTimeout(ve.timer),ve.start=null)};e.addEventListener("pointerup",n),e.addEventListener("pointercancel",n)},updated(e,t){e.__dragSource=t.value}};function cr(e){if(m.drag.active||!ve.start||!ve.source||!ve.element)return;m.drag.active=!0,m.drag.moving=ve.source.kind==="tile"?ve.source.tile:pu(ve.source.id),m.drag.preview=null,ve.target=null,getSelection()?.removeAllRanges();const t=ve.element.getBoundingClientRect(),n=ve.element.cloneNode(!0);n.classList.add("drag-ghost"),n.style.width=`${t.width}px`,n.style.height=`${t.height}px`,ve.offset={x:e.clientX-t.left,y:e.clientY-t.top},document.body.append(n),ve.ghost=n,document.addEventListener("pointermove",zo),document.addEventListener("pointerup",Ci),document.addEventListener("pointercancel",Ci);try{ve.element.releasePointerCapture(ve.pointerId)}catch{}try{document.documentElement.setPointerCapture(ve.pointerId)}catch{}document.addEventListener("touchmove",Iu,{passive:!1}),ve.scroller=window.setInterval(()=>{if(!ve.last)return;const{x:s,y:i}=qb(document),l=s?fr(ve.last.x,dr(s,"x")):0,r=i?fr(ve.last.y,dr(i,"y")):0;l&&s.scrollBy(l,0),r&&i.scrollBy(0,r),(l||r)&&Yo(Lu(ve.last.x,ve.last.y))},16),Yo(-1),zo(e)}function ur(e,t){if(!e)return!1;const n=t==="x"?e.scrollWidth>e.clientWidth:e.scrollHeight>e.clientHeight,s=getComputedStyle(e)[t==="x"?"overflowX":"overflowY"];return n&&(s==="auto"||s==="scroll")}function qb(e){const t=e.querySelector(".pages"),n=e.querySelector(".canvas");return{x:ur(t,"x")?t:n,y:ur(n,"y")?n:e.scrollingElement}}function dr(e,t){const n=t==="x"?window.innerWidth:window.innerHeight;if(e===e.ownerDocument.scrollingElement)return[0,n];const s=e.getBoundingClientRect();return t==="x"?[Math.max(s.left,0),Math.min(s.right,n)]:[Math.max(s.top,0),Math.min(s.bottom,n)]}function fr(e,[t,n]){return en-60?12:0}function Iu(e){m.drag.active&&e.preventDefault()}function Ci(e){e.pointerId===ve.pointerId&&zb(e.type==="pointerup")}function zo(e){!ve.ghost||e.pointerId!==ve.pointerId||(ve.last={x:e.clientX,y:e.clientY},ve.ghost.style.transform=`translate(${e.clientX-ve.offset.x}px, ${e.clientY-ve.offset.y}px)`,Yo(Lu(e.clientX,e.clientY)))}function Lu(e,t){let n=null,s=1/0;for(const l of document.querySelectorAll(".pages [data-slot]")){const r=l.getBoundingClientRect(),u=Math.hypot(Math.max(r.left-e,0,e-r.right),Math.max(r.top-t,0,t-r.bottom));u16)return-1;let i=Number(n.cell.dataset.slot);return n.cell.classList.contains("wide")&&e>(n.r.left+n.r.right)/2&&(i+=1),i}function Yo(e){ve.target===e||!m.layout||!m.drag.moving||(ve.target=e,m.drag.preview=e>=0?fu(m.layout.tiles,m.drag.moving,e):null)}function zb(e){const t=m.drag.preview,n=m.drag.moving;document.removeEventListener("pointermove",zo),document.removeEventListener("pointerup",Ci),document.removeEventListener("pointercancel",Ci),document.removeEventListener("touchmove",Iu);try{document.documentElement.releasePointerCapture(ve.pointerId)}catch{}if(ve.ghost?.remove(),Object.assign(ve,{ghost:null,suppressUntil:Date.now()+400,last:null,start:null,target:null,element:null,source:null}),clearInterval(ve.scroller),m.drag.active=!1,m.drag.preview=null,m.drag.moving=null,e&&t&&n&&m.layout){const s=m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join(),i=!m.layout.tiles.includes(n);for(const{tile:l,slot:r}of t)l.slot=r,m.layout.tiles.includes(l)||m.layout.tiles.push(l);m.layout.tiles.sort((l,r)=>l.slot-r.slot),m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join()!==s&&pt(),i&&qs(n,n.slot)}}window.addEventListener("click",e=>{Date.now()t.tile.name||Bs(t.tile.entity)),s=$(()=>au(t.tile)),i=$(()=>Do(t.tile)&&!s.value),l=$(()=>as(t.tile.entity)),r=$(()=>m.inventory.backgrounds?.[t.tile.options?.background||""]?.color),u=$(()=>t.tile.options?.background==="none"),f=$(()=>t.tile.options?.display||"standard"),h=$(()=>f.value!=="standard"?mu(f.value):""),p=$(()=>hu(t.tile,m.inventory)),b=$(()=>t.tile.entity.split(".")[0]),v=$(()=>m.inventory.icons?.controls||{}),y=de=>v.value[de]?Pe(v.value[de]):"",M=$(()=>Cl(t.tile)&&m.inspector?.kind==="tile"),E=$(()=>!t.placeholder&&m.layout?.tiles.includes(t.tile)),x=$(()=>c("editor.tile_card.label",{name:n.value,slot:t.slot%ze+1,page:Tt(t.slot)+1})),O=$(()=>new Date(m.now)),C=$(()=>(O.value.getHours()%12+O.value.getMinutes()/60)*30),F=$(()=>O.value.getMinutes()*6),T=$(()=>b.value==="screen"?null:$m(t.tile.entity)),V=$(()=>!T.value||["unavailable","unknown",""].includes(T.value.state)),L=$(()=>!!T.value&&!V.value&&T.value.state!=="off"&&T.value.state!=="closed"&&T.value.state!=="standby"&&T.value.state!=="idle"&&T.value.state!=="docked"),k=$(()=>["light","switch","input_boolean","fan"].includes(b.value)&&T.value?.state==="on"),A=$(()=>T.value?.a?.unit_of_measurement),z=de=>de.charAt(0).toUpperCase()+de.slice(1).replace(/_/g," "),P=de=>ou(de,qm.value),ge={climate:"climate",cover:"cover",media_player:"media",person:"person",sun:"sun",vacuum:"vacuum",weather:"weather"};function G(de){const X=Te=>qh(`screen.ha.${Te}`)?Fn(`screen.ha.${Te}`):"",K=de.state==="windy-variant"?"windy":de.state.replace(/-/g,"_");return b.value==="binary_sensor"&&["on","off"].includes(K)?X(`binary.${de.a?.device_class}_${K}`)||X(K):ge[b.value]?X(`${ge[b.value]}.${K}`)||(["on","off"].includes(K)?X(K):""):["on","off"].includes(K)?X(K):""}const ie=["scene","script","button","input_button"],be=$(()=>{const de=T.value;if(!de||ie.includes(b.value))return h.value;if(V.value)return Fn(de.state==="unknown"?"editor.mockup.unknown":"screen.ha.unavailable");const X=de.a||{},K=de.word||G(de)||z(de.state);return b.value==="climate"?`${X.current_temperature!==void 0?`${P(X.current_temperature)}° · `:""}${K}`:b.value==="weather"?`${K}${X.temperature!==void 0?` · ${P(X.temperature)}°`:""}`:b.value==="cover"&&X.current_position!==void 0&&X.current_position>0&&X.current_position<100?`${K} · ${X.current_position} %`:b.value==="media_player"&&X.media_title?`${K} · ${X.media_title}`:b.value==="sensor"?`${P(de.state)}${A.value?` ${A.value}`:""}`:K}),se=$(()=>T.value&&!V.value?P(T.value.state):"—"),ue=$(()=>{const de=T.value;if(!de||V.value)return 0;const X=de.a||{};if(b.value==="light")return de.state==="on"?X.brightness!==void 0?Math.round(X.brightness/255*100):100:0;if(b.value==="fan")return de.state==="on"?X.percentage??100:0;if(b.value==="cover")return 100-(X.current_position??(de.state==="open"?100:0));if(b.value==="media_player")return Math.round((X.volume_level??0)*100);if(b.value==="number"||b.value==="input_number"){const K=Number(de.state),Te=Number(X.min??0),we=Number(X.max??100);return Number.isFinite(K)&&we>Te?Math.round((K-Te)/(we-Te)*100):0}return 0}),ye=$(()=>Fn(`screen.ha.button.${{scene:"activate",script:"run"}[b.value]||"press"}`)),$e=$(()=>`${Fn("screen.tile.page",{n:l.value})} ›`),Ye=$(()=>({background:`linear-gradient(to right, ${ue.value?"#ffbf38":"#c9ccd1"} ${ue.value}%, ${ue.value?"#fff1d3":"#e6e8ec"} ${ue.value}%)`})),le=$(()=>({background:`linear-gradient(to right, #2196f3 ${ue.value}%, #d3e8fb ${ue.value}%)`})),ee=$(()=>{const de=T.value?.a?.temperature;return de!=null?`${P(de)}°`:"—"});async function ae(de){if(de.key==="Enter"||de.key===" "){de.preventDefault(),Vo(t.tile);return}const X={ArrowLeft:-1,ArrowRight:1,ArrowUp:-2,ArrowDown:2}[de.key];X&&(de.preventDefault(),qs(t.tile,t.tile.slot+(s.value?Math.sign(X)*ze:i.value?Math.sign(X)*2:X))&&(await Ri(),document.querySelector(`.pages [data-slot="${t.tile.slot}"]`)?.focus()))}return(de,X)=>Ae((g(),_("div",{class:me(["tile",{wide:i.value,full:s.value,bare:u.value,placeholder:e.placeholder||!E.value,chosen:M.value}]),"data-slot":e.slot,style:je(r.value&&!u.value?{backgroundColor:r.value}:void 0),tabindex:E.value?0:-1,role:E.value?"button":void 0,"aria-label":E.value?x.value:void 0,onClick:X[1]||(X[1]=K=>E.value&&a(Vo)(e.tile)),onKeydown:X[2]||(X[2]=K=>E.value&&ae(K))},[f.value==="analog"?(g(),_(B,{key:0},[(g(),_("svg",Gb,[X[3]||(X[3]=o("circle",{cx:"30",cy:"30",r:"27",fill:"#fff",stroke:"#c9ccd1"},null,-1)),(g(),_(B,null,he([0,90,180,270],K=>o("line",{key:K,x1:"30",y1:"5",x2:"30",y2:"9",stroke:"#1b1b1b","stroke-width":"1.5",transform:`rotate(${K} 30 30)`},null,8,Jb)),64)),o("line",{x1:"30",y1:"30",x2:"30",y2:"16",stroke:"#1b1b1b","stroke-width":"2.4","stroke-linecap":"round",transform:`rotate(${C.value} 30 30)`},null,8,Xb),o("line",{x1:"30",y1:"30",x2:"30",y2:"11",stroke:"#1b1b1b","stroke-width":"1.6","stroke-linecap":"round",transform:`rotate(${F.value} 30 30)`},null,8,Zb),X[4]||(X[4]=o("circle",{cx:"30",cy:"30",r:"1.8",fill:"#1b1b1b"},null,-1))])),i.value?(g(),_("span",Qb,[o("span",ev,[o("span",tv,d(n.value),1),o("span",nv,d(h.value),1)])])):H("",!0)],64)):f.value==="digital"&&b.value==="screen"?(g(),_(B,{key:1},[o("span",sv,d(a(Pe)(a(ms)(e.tile))),1),o("span",iv,[o("span",ov,d(a(Vi)(a(is),O.value)),1),o("span",lv,d(n.value),1)])],64)):s.value?(g(),_(B,{key:2},[o("span",{class:me(["ic mdi",{lit:k.value}])},d(a(Pe)(a(ms)(e.tile))),3),o("span",av,[o("span",rv,d(n.value),1),l.value?(g(),_("span",cv,d($e.value),1)):f.value==="watch"?(g(),_("span",uv,[Re(d(se.value),1),A.value&&!V.value?(g(),_("small",dv,d(A.value),1)):H("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:V.value}])},d(be.value),3)):H("",!0)]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:je(Ye.value)},null,4)):H("",!0),p.value?(g(),_("span",fv,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!L.value}])},null,2)):p.value==="setpoint"?(g(),_("span",pv,[o("span",hv,d(y("minus")||"−"),1),o("b",null,d(ee.value),1),o("span",mv,d(y("plus")||"+"),1)])):p.value==="volume"?(g(),_(B,{key:2},[o("span",{class:"range",style:je(le.value)},null,4),o("span",bv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(B,{key:3},[o("span",vv,d(y("skip-previous")),1),o("span",gv,d(y(L.value?"pause":"play")||y("play")),1),o("span",_v,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(B,{key:4},[o("span",yv,d(y("arrow-expand-horizontal")),1),o("span",wv,d(y("stop")),1),o("span",kv,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="run"?(g(),_("span",$v,d(ye.value),1)):(g(),_("span",{key:6,class:"range",style:je({background:`linear-gradient(to right, #2196f3 ${ue.value}%, #d3e8fb ${ue.value}%)`})},null,4))])):H("",!0)],64)):i.value?(g(),_(B,{key:3},[o("span",xv,[o("span",{class:me(["ic mdi",{lit:k.value}])},d(a(Pe)(a(ms)(e.tile))),3),o("span",Sv,[o("span",Cv,d(n.value),1),l.value?(g(),_("span",Tv,d($e.value),1)):f.value==="watch"?(g(),_("span",Ev,[Re(d(se.value),1),A.value&&!V.value?(g(),_("small",Av,d(A.value),1)):H("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:V.value}])},d(be.value),3)):H("",!0)])]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:je(Ye.value)},null,4)):H("",!0),p.value?(g(),_("span",Pv,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!L.value}])},null,2)):p.value==="setpoint"?(g(),_("span",Ov,[o("span",Iv,d(y("minus")||"−"),1),o("b",null,d(ee.value),1),o("span",Lv,d(y("plus")||"+"),1)])):p.value==="stepper"&&b.value.endsWith("select")?(g(),_(B,{key:2},[o("span",Mv,d(y("chevron-left")),1),o("span",Rv,d(y("chevron-right")),1)],64)):p.value==="stepper"?(g(),_("span",Nv,[o("span",Fv,d(y("minus")||"−"),1),o("b",null,d(se.value),1),o("span",Dv,d(y("plus")||"+"),1)])):p.value==="mode"?(g(),_(B,{key:4},[o("span",Uv,d(y("power")),1),o("span",jv,d(y("fire")),1),o("span",Hv,d(y("snowflake")),1)],64)):p.value==="volume"?(g(),_(B,{key:5},[o("span",{class:"range",style:je(le.value)},null,4),o("span",Vv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(B,{key:6},[o("span",Wv,d(y("skip-previous")),1),o("span",Bv,d(y(L.value?"pause":"play")||y("play")),1),o("span",Kv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(B,{key:7},[o("span",qv,d(y("arrow-expand-horizontal")),1),o("span",zv,d(y("stop")),1),o("span",Yv,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="buttons"&&b.value==="vacuum"?(g(),_(B,{key:8},[o("span",Gv,d(y("play")),1),o("span",Jv,d(y("stop")),1),o("span",Xv,d(y("home-map-marker")),1)],64)):p.value==="buttons"&&b.value==="timer"?(g(),_(B,{key:9},[o("span",Zv,d(y("play")),1),o("span",Qv,d(y("close")),1)],64)):p.value==="run"?(g(),_("span",eg,d(ye.value),1)):(g(),_("span",{key:11,class:"range",style:je({background:`linear-gradient(to right, #2196f3 ${ue.value}%, #d3e8fb ${ue.value}%)`})},null,4))])):H("",!0)],64)):(g(),_(B,{key:4},[o("span",{class:me(["head",{top:f.value==="watch"}])},[o("span",{class:me(["ic mdi",{lit:k.value}])},d(a(Pe)(a(ms)(e.tile))),3),o("span",tg,[o("span",ng,d(n.value),1),l.value?(g(),_("span",sg,d($e.value),1)):f.value!=="watch"&&be.value?(g(),_("span",{key:1,class:me(["st",{off:V.value}])},d(be.value),3)):H("",!0)])],2),f.value==="watch"?(g(),_("span",ig,[Re(d(se.value),1),A.value&&!V.value?(g(),_("small",og,d(A.value),1)):H("",!0)])):H("",!0),e.tile.options?.inline==="slider"?(g(),_("span",{key:1,class:"mini-slider",style:je(Ye.value)},null,4)):H("",!0)],64)),E.value?(g(),_("button",{key:5,type:"button",class:"remove",title:a(c)("editor.tile_card.remove"),"aria-label":a(c)("editor.tile_card.remove_named",{name:n.value}),onClick:X[0]||(X[0]=At(K=>a($u)(e.tile),["stop"]))},"✕",8,lg)):H("",!0)],46,Yb)),[[a(Ou),{kind:"tile",tile:e.tile}]])}}),rg=["viewBox","aria-label"],cg=["y"],ug=["cx","cy","r","stroke","stroke-width"],dg=["x1","y1","x2","y2","stroke","stroke-width"],fg=["x","y","fill"],pg=["x","y"],Mu=Me({__name:"TopbarSvg",props:{items:{},nameText:{},single:{type:Boolean}},setup(e,{expose:t}){const n=e,s=$(()=>{m.fontsVersion,m.now,m.topbarPreviews;const x=n.items||un();return vu(x,yu.value,n.nameText??(m.layout?.title||Fn("editor.mockup.home")),hn)}),i=$(()=>s.value.metrics),l=$(()=>n.single?Math.round(i.value.text*1.4):i.value.top+Math.round(i.value.name*.45)),r=$(()=>n.single?Math.round(i.value.text*1.05):i.value.top),u=$(()=>{if(!n.single)return s.value.placed;const x=s.value.parts[0];return x&&(x.x=0),x?[x]:[]}),f=$(()=>n.single?`-2 0 ${Math.max(1,u.value[0]?.width||1)+4} ${l.value}`:`0 0 ${i.value.width} ${l.value}`),h=$(()=>r.value+(s.value.zero.top+s.value.zero.bottom)/2),p=$(()=>bm(s.value.nameText,s.value.fonts.name,Math.min(s.value.natural,s.value.nameRoom))),b=$(()=>new Date(m.now));function v(x){const O=b.value;return[[(O.getHours()%12+O.getMinutes()/60)*30,x*.24],[O.getMinutes()*6,x*.34]].map(([C,F])=>{const T=C*Math.PI/180;return{x2:F*Math.sin(T),y2:-F*Math.cos(T)}})}const y=x=>x.x-x.icon.ink.left,M=x=>(x.icon?x.x+(x.icon.ink.right-x.icon.ink.left)+s.value.gaps.icon:x.x)-x.text.ink.left,E=$(()=>`${(Math.max(1,u.value[0]?.width||1)+4)*(26/i.value.icon)}px`);return t({lay:s}),(x,O)=>(g(),_("svg",{viewBox:f.value,role:"img","aria-label":e.single?a(c)("editor.topbar.live.looks"):a(c)("editor.topbar.aria",{name:s.value.nameText}),style:je(e.single?{width:E.value}:void 0)},[e.single?H("",!0):(g(),_("text",{key:0,x:"0",y:i.value.top,fill:"#1b1b1b",style:je({font:s.value.fonts.name})},d(p.value),13,cg)),o("g",null,[(g(!0),_(B,null,he(u.value,C=>(g(),_(B,{key:C.index},[C.dial?(g(),_(B,{key:0},[o("circle",{cx:C.x+C.dial/2,cy:h.value,r:C.dial/2-Math.max(1,Math.round(C.dial/10))/2,fill:"none",stroke:C.view.color||"#46525e","stroke-width":Math.max(1,Math.round(C.dial/10))},null,8,ug),(g(!0),_(B,null,he(v(C.dial),(F,T)=>(g(),_("line",{key:T,x1:C.x+C.dial/2,y1:h.value,x2:C.x+C.dial/2+F.x2,y2:h.value+F.y2,stroke:C.view.color||"#46525e","stroke-width":Math.max(1,Math.round(C.dial*.075)),"stroke-linecap":"round"},null,8,dg))),128))],64)):(g(),_(B,{key:1},[C.icon?(g(),_("text",{key:0,x:y(C),y:h.value-(C.icon.ink.top+C.icon.ink.bottom)/2,fill:C.view.color||"#46525e",style:je({font:s.value.fonts.icon})},d(C.icon.glyph),13,fg)):H("",!0),C.text?(g(),_("text",{key:1,x:M(C),y:r.value,fill:"#46525e",style:je({font:s.value.fonts.text})},d(C.text.value),13,pg)):H("",!0)],64))],64))),128))])],12,rg))}}),hg={class:"page"},mg={class:"page-label"},bg=["title"],vg={key:1},gg=["title"],_g={class:"tiles"},yg=["data-slot","title","aria-label","onClick"],wg=Me({__name:"DevicePage",props:{page:{},entries:{},pages:{},moving:{}},setup(e){const t=e,n=$(()=>new Map(t.entries.map(h=>[h.slot,h]))),s=$(()=>new Set(t.entries.flatMap(h=>Hn(h.slot,ut(h.tile)).slice(1)))),i=$(()=>Array.from({length:ze},(h,p)=>t.page*ze+p).filter(h=>!s.value.has(h))),l=$(()=>t.pages>1&&!t.entries.some(h=>Tt(h.slot)===t.page)),r=$(()=>m.inspector?.kind==="bar"||m.inspector?.kind==="bar-add"),u=$(()=>t.entries.filter(h=>Tt(h.slot)===t.page).reduce((h,p)=>h+kl(ut(p.tile)),0));function f(h){const p=m.insertAt===h;m.insertAt=p?-1:h,m.insertAt>=0&&document.querySelector("#search")?.focus()}return(h,p)=>(g(),_("div",hg,[o("div",mg,[o("span",null,d(a(c)("editor.page.label",{page:e.page+1})),1),l.value?(g(),_("button",{key:0,type:"button",class:"btn mini",title:a(c)("editor.page.remove_title"),onClick:p[0]||(p[0]=b=>a(Cm)(e.page))},d(a(c)("editor.page.remove")),9,bg)):(g(),_("span",vg,d(u.value)+" / "+d(a(ze)),1))]),o("div",{class:me(["device",{cyd:!a(Sl)}])},[o("div",{class:me(["bar-wrap",{selected:r.value}]),title:a(c)("editor.page.edit_bar"),role:"button",tabindex:"0",onClick:p[1]||(p[1]=b=>a(Jt)(0)),onKeydown:p[2]||(p[2]=$c(At(b=>a(Jt)(0),["prevent"]),["enter"]))},[te(Mu)],42,gg),o("div",_g,[(g(!0),_(B,null,he(i.value,b=>(g(),_(B,{key:b},[n.value.get(b)?(g(),it(ag,{key:0,tile:n.value.get(b).tile,slot:b,placeholder:n.value.get(b).tile===e.moving},null,8,["tile","slot","placeholder"])):(g(),_("button",{key:1,type:"button",class:me(["cell",{"insert-here":a(m).insertAt===b}]),"data-slot":b,title:a(c)("editor.page.cell.title"),"aria-label":a(c)("editor.page.cell.aria",{slot:b%a(ze)+1,page:e.page+1}),onClick:v=>f(b)},[p[3]||(p[3]=o("span",null,"+",-1)),o("small",null,d(a(m).insertAt===b?a(c)("editor.page.cell.next"):a(c)("editor.page.cell.empty")),1)],10,yg))],64))),128))])],2)]))}}),kg={class:"library",id:"library"},$g={class:"lib-head"},xg={class:"lib-title"},Sg=["placeholder","aria-label"],Cg={class:"filters",id:"filters"},Tg=["aria-pressed","onClick"],Eg={class:"lib-row"},Ag=["aria-label"],Pg={value:""},Og=["value"],Ig=["aria-pressed","title"],Lg={class:"lib-list",id:"results","aria-live":"polite"},Mg=["title","disabled","onClick"],Rg={class:"tx"},Ng={key:0,class:"hint"},Fg={key:1,class:"hint"},Dg={class:"lib-foot"},Ug=Me({__name:"Library",setup(e){const t=["","light","climate","switch","binary_sensor","button","script","fan","cover","scene","vacuum","sensor","media_player","weather","number","select","person","timer","screen"],n={switch:"input_boolean",number:"input_number",select:"input_select",weather:"sun",button:"input_button"},s=$(()=>new Set(m.layout?.tiles.map(p=>p.entity)||[])),i=p=>s.value.has(p)&&!Wi(p),l=$(()=>[...new Set(m.inventory.entities.map(p=>p.area).filter(p=>!!p))].sort((p,b)=>p.localeCompare(b))),r=$(()=>{const p=m.search.toLocaleLowerCase(),b=m.filter,v=m.room;return[...m.inventory.builtin||[],...m.inventory.entities].filter(y=>y.tile!==!1&&(Sl.value||!["camera","image"].includes(y.id.split(".")[0]))&&(!b||y.id.startsWith(b+".")||n[b]===y.id.split(".")[0])&&(!v||y.area===v)&&(!m.hidePlaced||!i(y.id))&&`${y.name} ${y.id} ${y.device||""} ${y.area||""}`.toLocaleLowerCase().includes(p))}),u=$(()=>(m.layout?.tiles.length||0)>=Vn.value),f=$(()=>m.inventory.entities.length),h=p=>{const b=p.id.split(".")[0];return p.state==="unavailable"||p.state==="unknown"?"gone":["light","switch","input_boolean","fan"].includes(b)&&p.state==="on"?"on":""};return(p,b)=>(g(),_("aside",kg,[o("div",$g,[o("div",xg,[Re(d(a(c)("editor.library.title"))+" ",1),o("small",null,d(a(c)("editor.library.entities",f.value)),1)]),Ae(o("input",{id:"search","onUpdate:modelValue":b[0]||(b[0]=v=>a(m).search=v),type:"search",placeholder:a(c)("editor.library.search"),autocomplete:"off","aria-label":a(c)("editor.library.search_label")},null,8,Sg),[[Xe,a(m).search]]),o("div",Cg,[(g(),_(B,null,he(t,v=>o("button",{key:v,type:"button","aria-pressed":a(m).filter===v?"true":"false",onClick:y=>a(m).filter=v},[v?(g(),_("span",{key:0,class:"domain-icon",style:je({color:a(Ut)(v+".")[2],background:a(Ut)(v+".")[3]}),"aria-hidden":"true"},d(a(Ut)(v+".")[1]),5)):H("",!0),Re(d(a(c)(`editor.library.filters.${v||"all"}`)),1)],8,Tg)),64))]),o("div",Eg,[Ae(o("select",{id:"room","onUpdate:modelValue":b[1]||(b[1]=v=>a(m).room=v),"aria-label":a(c)("editor.library.room")},[o("option",Pg,d(a(c)("editor.library.all_rooms")),1),(g(!0),_(B,null,he(l.value,v=>(g(),_("option",{key:v,value:v},d(v),9,Og))),128))],8,Ag),[[jn,a(m).room]]),o("button",{type:"button",class:"chip-toggle",id:"hide-placed","aria-pressed":a(m).hidePlaced?"true":"false",title:a(c)("editor.library.hide_placed_title"),onClick:b[2]||(b[2]=v=>a(m).hidePlaced=!a(m).hidePlaced)},d(a(c)("editor.library.hide_placed")),9,Ig)])]),o("div",Lg,[(g(!0),_(B,null,he(r.value.slice(0,80),v=>Ae((g(),_("button",{key:v.id,type:"button",class:"ent",title:v.id,disabled:i(v.id)||u.value,onClick:y=>a(ku)(v.id)},[o("span",{class:me(["av mdi",h(v)]),style:je({color:a(Ut)(v.id)[2],background:a(Ut)(v.id)[3]})},d(a(m).inventory.icons?a(Pe)(a(xn)(v.id)):a(Ut)(v.id)[1]),7),o("span",Rg,[o("b",null,d(v.name),1),o("small",null,d([a(Ut)(v.id)[0],v.area,v.device].filter(Boolean).join(" · ")),1)]),o("span",{class:me(["add",{done:i(v.id)}])},d(i(v.id)?"✓":"+"),3)],8,Mg)),[[a(Ou),{kind:"entity",id:v.id}]])),128)),r.value.length?r.value.length>80?(g(),_("p",Fg,d(a(c)("editor.common.results",r.value.length)),1)):H("",!0):(g(),_("p",Ng,d(a(m).hidePlaced&&!a(m).search&&!a(m).filter&&!a(m).room?a(c)("editor.library.all_placed"):a(c)("editor.library.none_found")),1))]),o("div",Dg,d(u.value?a(c)(a(Vn)<48?"editor.library.full_update":"editor.library.full",a(Vn)):a(c)("editor.library.hint")),1)]))}}),jg={class:"canvas-head"},Hg={id:"count"},Vg={key:0,id:"no-tiles"},Wg={key:1},Bg={key:2,id:"positions-hint",class:"warn"},Kg={key:3,id:"page-reach-hint",class:"warn"},qg=["aria-label"],zg={class:"page-label"},Yg=["tabindex"],Gg=Me({__name:"LayoutView",setup(e){const t=$(()=>m.layout),n=$(()=>m.drag.preview||Ze(t.value)),s=$(()=>Pt(n.value,t.value.pages)),i=$(()=>Em()),l=$(()=>s.valueem(t.value.tiles)&&!yn(0,2,26)?c("editor.layout.positions_hint",{firmware:_t.value?.firmware||c("editor.common.unknown")}):""),u=$(()=>Tu(n.value,s.value));function f(h){h.target.closest(".device, .page-label, .canvas-head")||m.inspector&&Qe()}return(h,p)=>(g(),_(B,null,[o("div",{class:"canvas",id:"canvas",onClick:f},[o("div",jg,[o("b",Hg,d(a(c)("editor.layout.count",{tiles:t.value.tiles.length,limit:a(Vn)},s.value)),1),t.value.tiles.length?(g(),_("span",Wg,d(a(c)("editor.layout.how_to")),1)):(g(),_("span",Vg,d(a(c)("editor.layout.no_tiles")),1)),r.value?(g(),_("span",Bg,d(r.value),1)):H("",!0),u.value?(g(),_("span",Kg,d(u.value),1)):H("",!0)]),o("div",{class:"pages",id:"layout-preview","aria-label":a(c)("editor.layout.aria")},[(g(!0),_(B,null,he(i.value,b=>(g(),it(wg,{key:b,page:b-1,entries:n.value,pages:s.value,moving:a(m).drag.moving},null,8,["page","entries","pages","moving"]))),128)),o("div",{class:me(["page ghost",{disabled:!l.value}])},[o("div",zg,[o("span",null,d(a(c)("editor.page.label",{page:i.value+1})),1)]),o("div",{class:me(["device",{cyd:a(_t)?.board!=="guition"}]),id:"add-page",role:"button",tabindex:l.value?0:-1,onClick:p[0]||(p[0]=b=>l.value&&a(Qa)()),onKeydown:p[1]||(p[1]=$c(At(b=>l.value&&a(Qa)(),["prevent"]),["enter"]))},d(l.value?a(c)("editor.layout.add_page"):a(c)("editor.layout.max_pages",a(rn))),43,Yg)],2)],8,qg)]),te(Ug)],64))}}),Jg={class:"status",id:"settings-status",role:"status"},Xg={key:0,class:"set-grid",id:"settings-groups"},Zg={class:"mdi"},Qg=["data-setting","title","onClick"],e_=["id"],t_={class:"s-control"},n_=["id","aria-checked","aria-labelledby","disabled","onClick"],s_=["aria-labelledby"],i_=["aria-pressed","disabled","onClick"],o_={key:2,class:"step"},l_=["aria-label","disabled","onPointerdown","onClick"],a_={class:"mdi"},r_=["id","aria-labelledby"],c_=["aria-label","disabled","onPointerdown","onClick"],u_={class:"mdi"},d_={key:0,class:"hint warn",id:"settings-page-reach"},f_=Me({__name:"SettingsTab",setup(e){const t=$(()=>Tl()),n=$(()=>$i()),s=$(()=>t.value?.owner==="screen"&&!_t.value?.online),i=$(()=>Fm.map(E=>({...E,rows:E.rows.filter(x=>t.value?.keys.includes(x.key))})).filter(E=>E.rows.length)),l=$(()=>Tu()),r=E=>s.value||!!t.value?.unavailable.includes(E.key),u=E=>E.needs?!!n.value[E.needs]:!0,f=$(()=>s.value?c("editor.screen_settings.status.offline"):m.settingPending?c("editor.common.saving"):t.value?.owner==="screen"?c("editor.screen_settings.status.screen"):c("editor.screen_settings.status.app")),h=(E,x)=>{const O=n.value[E.key];return r(E)||!u(E)||O===null||O===void 0?!0:E.kind!=="moment"&&sr(E,O,x,!1,n.value)===O},p=new WeakMap;function b(E,x,O){const C=$i(),F=sr(E,C[E.key],x,O,C);F!==C[E.key]&&ti(E.key,F,600)}function v(E,x,O){const C=E.currentTarget;if(C.disabled||E.button!==0)return;const F={timer:0,held:!1};p.set(C,F);let T=0;F.timer=window.setTimeout(function V(){F.held=!0,T+=1,b(x,O,T>5),F.timer=window.setTimeout(V,180)},450)}function y(E){const x=p.get(E.currentTarget);x&&clearTimeout(x.timer)}function M(E,x,O){const C=p.get(E.currentTarget);if(C?.held){C.held=!1;return}b(x,O,!1)}return(E,x)=>(g(),_("div",{class:me(["settings",{offline:s.value}]),id:"general-settings"},[o("span",Jg,d(f.value),1),t.value?(g(),_("div",Xg,[(g(!0),_(B,null,he(i.value,O=>(g(),_("section",{key:O.group,class:"set-card"},[o("h4",null,[o("span",Zg,d(a(Pe)(O.icon)),1),Re(d(a(c)(`editor.screen_settings.groups.${O.group}`)),1)]),(g(!0),_(B,null,he(O.rows,C=>(g(),_("div",{key:C.key,class:me(["srow",[`setting-${C.kind}`,{inactive:!u(C)||r(C)}]]),"data-setting":C.key,title:r(C)&&!s.value?a(c)("editor.screen_settings.unavailable"):"",onClick:F=>C.kind==="toggle"&&F.target.closest(".srow")===F.currentTarget&&!F.target.closest("button")&&!r(C)&&a(ti)(C.key,!n.value[C.key],150)},[o("span",{class:"s-label",id:`setting-label-${C.key}`},d(a(vo)(C)),9,e_),o("div",t_,[C.kind==="toggle"?(g(),_("button",{key:0,type:"button",class:me(["switch",{unknown:n.value[C.key]===null||n.value[C.key]===void 0}]),role:"switch",id:`setting-${C.key}`,"aria-checked":n.value[C.key]?"true":"false","aria-labelledby":`setting-label-${C.key}`,disabled:r(C),onClick:At(F=>a(ti)(C.key,!n.value[C.key],150),["stop"])},null,10,n_)):C.kind==="choice"?(g(),_("div",{key:1,class:"seg",role:"group","aria-labelledby":`setting-label-${C.key}`},[(g(!0),_(B,null,he(C.options,F=>(g(),_("button",{key:String(F),type:"button","aria-pressed":n.value[C.key]===F?"true":"false",disabled:r(C),onClick:T=>a(ti)(C.key,F,150)},d(a(Dm)(C,F)),9,i_))),128))],8,s_)):(g(),_("div",o_,[o("button",{type:"button","aria-label":a(c)("editor.screen_settings.lower",{name:a(vo)(C)}),disabled:h(C,-1),onPointerdown:F=>v(F,C,-1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:F=>M(F,C,-1)},[o("span",a_,d(a(Pe)("F0374")),1)],40,l_),o("output",{id:`setting-${C.key}`,"aria-labelledby":`setting-label-${C.key}`},d(a(Vm)(C,n.value)),9,r_),o("button",{type:"button","aria-label":a(c)("editor.screen_settings.higher",{name:a(vo)(C)}),disabled:h(C,1),onPointerdown:F=>v(F,C,1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:F=>M(F,C,1)},[o("span",u_,d(a(Pe)("F0415")),1)],40,c_)]))])],10,Qg))),128)),l.value&&O.rows.some(C=>C.key==="page_buttons")?(g(),_("p",d_,d(l.value),1)):H("",!0)]))),128))])):H("",!0)],2))}}),p_={class:"seg wrap",role:"group"},h_=["disabled","aria-pressed","onClick"],wt=Me({__name:"Segmented",props:{choices:{},value:{},disabled:{type:Boolean}},emits:["pick"],setup(e,{emit:t}){const n=t;return(s,i)=>(g(),_("div",p_,[(g(!0),_(B,null,he(e.choices,([l,r])=>(g(),_("button",{key:String(l),type:"button",disabled:e.disabled,"aria-pressed":String(l)===String(e.value)?"true":"false",onClick:u=>n("pick",l)},d(r),9,h_))),128))]))}}),m_={class:"f"},b_={class:"f-label"},v_={key:0},g_={key:1,class:"warn"},__=["aria-expanded"],y_={class:"tx"},w_={key:0,class:"mono"},k_={class:"link"},$_={key:0,class:"picker"},x_=["placeholder","aria-label"],S_={class:"action-list"},C_=["aria-pressed","onClick"],T_={key:0,class:"hint"},E_={key:1,class:"warn"},A_={class:"f-label"},P_=["aria-label","value","onChange"],O_={value:""},I_=["value"],L_={key:3,class:"action-number"},M_=["aria-label","value","onInput"],R_=["onClick"],N_={key:4,class:"action-number"},F_=["aria-label","min","max","step","value","placeholder","onInput"],D_={key:0},U_=["aria-label","value","placeholder","onInput"],j_={key:6},H_={key:0,class:"warn"},V_={key:3},W_=Me({__name:"ActionPicker",props:{tile:{}},setup(e){const t=e,n=$(()=>m.entityActions[t.tile.entity]),s=$(()=>t.tile.options?.action),i=$(()=>n.value?.find(T=>T.action===s.value?.action)),l=$(()=>m.actionPickerOpen||!s.value),r=$(()=>{const T=m.actionSearch.trim().toLocaleLowerCase();return(n.value||[]).filter(V=>`${V.name} ${V.action} ${V.description}`.toLocaleLowerCase().includes(T))});n.value===void 0&&km(t.tile.entity);function u(T){const V=T.action===s.value?.action;t.tile.options={...t.tile.options,action:V?s.value:{action:T.action}},m.actionPickerOpen=!1,pt()}function f(T,V){const L={...t.tile.options?.action?.data||{}};V===void 0?delete L[T]:L[T]=V,t.tile.options={...t.tile.options,action:{action:s.value.action,...Object.keys(L).length?{data:L}:{}}},pt()}const h=$(()=>{if(!i.value)return[];const T=t.tile.options?.action?.data||{};return i.value.fields.filter(V=>V.required&&T[V.key]===void 0).map(V=>V.name)}),p=T=>Object.keys(T.selector||{})[0]||"text",b=T=>(T.selector||{})[p(T)]||{},v=T=>T.example===void 0?"":typeof T.example=="string"?T.example:JSON.stringify(T.example);function y(T){const V=b(T),L=p(T);return Array.isArray(T.options)?T.options.map(k=>[k,k]):L==="select"&&Array.isArray(V.options)&&!V.multiple?V.options.map(k=>k&&typeof k=="object"?[String(k.value),String(k.label??k.value)]:[String(k),String(k)]):null}const M=T=>"#"+T.map(V=>Math.max(0,Math.min(255,Number(V)||0)).toString(16).padStart(2,"0")).join(""),E=T=>Array.isArray(T)&&T.length===3?M(T):"#ffffff",x=T=>T===void 0?"":typeof T=="string"?T:JSON.stringify(T);function O(T,V){const L=V.trim();if(!L)return f(T.key,void 0);if(p(T)==="text")return f(T.key,V);try{f(T.key,JSON.parse(L))}catch{f(T.key,V)}}function C(T,V){f(T.key,V===""||!Number.isFinite(Number(V))?void 0:Number(V))}const F=T=>b(T).unit_of_measurement||p(T)==="color_temp"&&b(T).unit||"";return(T,V)=>(g(),_("div",m_,[o("span",b_,d(a(c)("editor.action.label")),1),n.value===void 0?(g(),_("small",v_,d(a(c)("editor.action.asking")),1)):n.value===null?(g(),_("small",g_,d(a(c)("editor.action.not_answering")),1)):(g(),_(B,{key:2},[o("button",{type:"button",class:"row","aria-expanded":l.value?"true":"false",onClick:V[0]||(V[0]=L=>a(m).actionPickerOpen=!l.value)},[o("span",y_,[o("b",null,d(i.value?i.value.name:s.value?s.value.action:a(c)("editor.action.choose")),1),s.value?(g(),_("small",w_,d(s.value.action),1)):H("",!0)]),o("span",k_,d(l.value?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,__),l.value?(g(),_("div",$_,[Ae(o("input",{"onUpdate:modelValue":V[1]||(V[1]=L=>a(m).actionSearch=L),type:"search",placeholder:a(c)("editor.action.search"),"aria-label":a(c)("editor.action.search_label")},null,8,x_),[[Xe,a(m).actionSearch]]),o("div",S_,[(g(!0),_(B,null,he(r.value,L=>(g(),_("button",{key:L.action,type:"button",class:"action-choice","aria-pressed":L.action===s.value?.action?"true":"false",onClick:k=>u(L)},[o("strong",null,d(L.name),1),o("small",null,d(L.description?`${L.action} · ${L.description}`:L.action),1)],8,C_))),128)),r.value.length?H("",!0):(g(),_("p",T_,d(a(c)("editor.action.none_found")),1))])])):H("",!0),s.value&&!i.value?(g(),_("small",E_,d(a(c)("editor.action.gone")),1)):H("",!0),i.value&&!l.value?(g(),_(B,{key:2},[(g(!0),_(B,null,he(i.value.fields,L=>(g(),_("div",{key:L.key,class:"f"},[o("span",A_,d(L.required?L.name:a(c)("editor.action.optional",{name:L.name})),1),p(L)==="boolean"?(g(),it(wt,{key:0,choices:[["",a(c)("editor.action.not_set")],["true",a(c)("editor.action.on")],["false",a(c)("editor.action.off")]],value:s.value?.data?.[L.key]===void 0?"":String(s.value?.data?.[L.key]),onPick:k=>f(L.key,k===""?void 0:k==="true")},null,8,["choices","value","onPick"])):y(L)&&y(L).length<=4?(g(),it(wt,{key:1,choices:[["",a(c)("editor.action.not_set")],...y(L)],value:s.value?.data?.[L.key]===void 0?"":String(s.value?.data?.[L.key]),onPick:k=>f(L.key,k===""?void 0:k)},null,8,["choices","value","onPick"])):y(L)?(g(),_("select",{key:2,"aria-label":L.name,value:String(s.value?.data?.[L.key]??""),onChange:k=>f(L.key,k.target.value===""?void 0:k.target.value)},[o("option",O_,d(a(c)("editor.action.not_set")),1),(g(!0),_(B,null,he(y(L),([k,A])=>(g(),_("option",{key:k,value:k},d(A),9,I_))),128))],40,P_)):p(L)==="color_rgb"?(g(),_("div",L_,[o("input",{type:"color","aria-label":L.name,value:E(s.value?.data?.[L.key]),onInput:k=>f(L.key,[1,3,5].map(A=>parseInt(k.target.value.slice(A,A+2),16)))},null,40,M_),o("button",{type:"button",class:"btn quiet mini",onClick:k=>f(L.key,void 0)},d(a(c)("editor.action.not_set")),9,R_)])):p(L)==="number"||p(L)==="color_temp"?(g(),_("div",N_,[o("input",{type:"number","aria-label":L.name,min:b(L).min,max:b(L).max,step:b(L).step==="any"?"any":b(L).step,value:s.value?.data?.[L.key]??"",placeholder:v(L),onInput:k=>C(L,k.target.value)},null,40,F_),F(L)?(g(),_("span",D_,d(F(L)),1)):H("",!0)])):(g(),_("input",{key:5,type:"text","aria-label":L.name,value:x(s.value?.data?.[L.key]),placeholder:v(L),onInput:k=>O(L,k.target.value)},null,40,U_)),L.description?(g(),_("small",j_,d(L.description),1)):H("",!0)]))),128)),h.value.length?(g(),_("small",H_,d(a(c)("editor.action.needs",{fields:h.value.join(", ")})),1)):H("",!0)],64)):H("",!0),a(yn)(0,2,58)?H("",!0):(g(),_("small",V_,d(a(c)("editor.action.needs_firmware")),1))],64))]))}}),B_={class:"f"},K_={class:"f-label"},q_=["aria-expanded"],z_={class:"av mdi"},Y_={class:"tx"},G_={class:"link"},J_={key:0,class:"picker"},X_=["placeholder","aria-label"],Z_=["aria-pressed","title"],Q_={class:"mdi"},ey=["aria-pressed","title"],ty={class:"icon-list"},ny={class:"icon-grid"},sy=["title","aria-label","aria-pressed","onClick"],iy={class:"mdi"},oy={key:0,class:"hint"},ly={key:1},Ru=Me({__name:"IconPicker",props:{selected:{},automatic:{},autoLabel:{},allowNone:{type:Boolean},note:{}},emits:["pick"],setup(e,{emit:t}){const n=e,s=t,i=ke(""),l=$(()=>Ks(n.selected)),r=$(()=>n.selected==="none"?"":Pe(l.value?.cp||n.automatic)),u=$(()=>n.selected==="none"?c("editor.icon.none"):l.value?.label||n.autoLabel),f=$(()=>{const h=i.value.trim().toLocaleLowerCase();return(m.inventory.icons?.groups||[]).map(p=>({label:p.label,icons:p.icons.filter(b=>!h||`${b.label} ${b.name.replaceAll("-"," ")} ${p.label}`.toLocaleLowerCase().includes(h))})).filter(p=>p.icons.length)});return(h,p)=>(g(),_("div",B_,[o("span",K_,d(a(c)("editor.icon.label")),1),o("button",{type:"button",class:"row","aria-expanded":a(m).iconPickerOpen?"true":"false",onClick:p[0]||(p[0]=b=>a(m).iconPickerOpen=!a(m).iconPickerOpen)},[o("span",z_,d(r.value),1),o("span",Y_,[o("b",null,d(u.value),1)]),o("span",G_,d(a(m).iconPickerOpen?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,q_),a(m).iconPickerOpen?(g(),_("div",J_,[Ae(o("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>i.value=b),type:"search",placeholder:a(c)("editor.icon.search"),"aria-label":a(c)("editor.icon.search_label")},null,8,X_),[[Xe,i.value]]),o("button",{type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="auto"?"true":"false",title:e.autoLabel,onClick:p[2]||(p[2]=b=>s("pick","auto"))},[o("span",Q_,d(a(Pe)(e.automatic)),1),o("span",null,d(e.autoLabel),1)],8,Z_),e.allowNone?(g(),_("button",{key:0,type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="none"?"true":"false",title:a(c)("editor.icon.none"),onClick:p[3]||(p[3]=b=>s("pick","none"))},[p[4]||(p[4]=o("span",{class:"mdi"},null,-1)),o("span",null,d(a(c)("editor.icon.none_text_only")),1)],8,ey)):H("",!0),o("div",ty,[(g(!0),_(B,null,he(f.value,b=>(g(),_("section",{key:b.label},[o("small",null,d(b.label),1),o("div",ny,[(g(!0),_(B,null,he(b.icons,v=>(g(),_("button",{key:v.name,type:"button",class:"icon-choice",title:v.label,"aria-label":a(c)("editor.icon.aria",{name:v.label}),"aria-pressed":e.selected===v.name?"true":"false",onClick:y=>s("pick",v.name)},[o("span",iy,d(a(Pe)(v.cp)),1)],8,sy))),128))])]))),128)),f.value.length?H("",!0):(g(),_("p",oy,d(a(c)("editor.icon.none_found")),1))])])):H("",!0),e.note?(g(),_("small",ly,d(e.note),1)):H("",!0)]))}}),ay={class:"dr-head"},ry={class:"tx"},cy={class:"mono"},uy=["aria-label"],dy={class:"dr-body"},fy={class:"f"},py={class:"f-label",for:"tile-name"},hy=["value","placeholder"],my={key:1,class:"f"},by={class:"f-label"},vy={key:2,class:"f"},gy={class:"f-label"},_y={key:0,class:"warn"},yy={class:"f"},wy={class:"f-label"},ky={key:0},$y={key:3,class:"f"},xy={class:"f-label"},Sy={key:4,class:"f"},Cy={class:"f-label"},Ty={key:5,class:"f"},Ey={class:"f-label"},Ay={key:7,class:"f"},Py={class:"f-label"},Oy={key:0,class:"warn"},Iy={key:8,class:"f"},Ly={class:"f-label"},My={class:"f"},Ry={class:"f-label"},Ny={class:"sw"},Fy=["aria-label","aria-pressed","onClick"],Dy={class:"dr-foot"},Uy=Me({__name:"TileInspector",props:{tile:{}},setup(e){const t=e,n=$(()=>t.tile.entity.split(".")[0]),s=$(()=>Bs(t.tile.entity)),i=$(()=>as(t.tile.entity)),l=$(()=>m.layout?Pt(Ze(m.layout),m.layout.pages):1),r=$(()=>Tt(t.tile.slot)+1),u=le=>!m.layout?.tiles.some(ee=>Tt(ee.slot)===le-1),f=$(()=>{const le=Array.from({length:Math.min(rn,l.value+1)},(ee,ae)=>ae+1);return i.value>le.length&&le.push(i.value),le.map(ee=>[ee,u(ee)?c("editor.tile.goes_to.empty",{page:ee}):String(ee)])}),h=$(()=>Xa.value?i.value>l.value?{text:c("editor.tile.goes_to.no_page",{page:i.value}),warn:!0}:{text:c("editor.tile.goes_to.hint"),warn:!1}:{text:c("editor.tile.goes_to.needs_firmware"),warn:!1}),p=$(()=>!m.layout?.tiles.some(le=>xe(le)!==xe(t.tile)&&Tt(le.slot)===r.value-1)),b=$(()=>{const le=Array.from({length:l.value},(ee,ae)=>[ae+1,String(ae+1)]);return l.value(i.value?["single","wide"]:["single","wide","full"]).map(le=>[le,c(`editor.tile.size.${le}`)])),y=$(()=>i.value?"":Xa.value?c("editor.tile.size.full_hint"):c("editor.tile.size.needs_firmware")),M=$(()=>m.capabilities[t.tile.entity]),E=(le,ee)=>t.tile.options?.[le]??ee,x=$(()=>E("display",n.value==="screen"?"digital":"standard")),O=$(()=>{const le=n.value==="screen"?["digital","analog"]:["standard","watch"],ee=M.value;return n.value==="weather"&&(!ee||ee.displays.includes("forecast")||x.value==="forecast")&&le.push("forecast"),n.value==="sensor"&&(!ee||ee.displays.includes("graph")||x.value==="graph")&&le.push("graph"),n.value==="sun"&&le.push("sunpath"),le.map(ae=>[ae,c(`editor.tile.display.${ae}`)])}),C=$(()=>{const le=M.value;return le&&x.value==="graph"&&!le.displays.includes("graph")?c("editor.tile.display.no_graph"):le&&x.value==="forecast"&&!le.displays.includes("forecast")?c("editor.tile.display.no_forecast"):""}),F=$(()=>E("size","single")),T=$(()=>m.inventory.controls?.[n.value]),V=$(()=>E("controls",F.value==="full"?"none":T.value?.default)),L=$(()=>{const le=M.value;return(T.value?.choices||[]).filter(ee=>!le||ee.key==="none"||ee.key===V.value||le.controls.includes(ee.key)).map(ee=>[ee.key,ee.label])}),k=$(()=>{const le=M.value;return le&&V.value!=="none"&&!le.controls.includes(V.value)?{text:c("editor.tile.controls.not_offered"),warn:!0}:{text:yn(0,2,19)?c(F.value==="full"?"editor.tile.controls.full_hint":"editor.tile.controls.wide_hint"):c("editor.tile.controls.needs_firmware"),warn:!1}}),A=$(()=>E("tap","auto")),z=$(()=>{const le=["auto","detail","none"];return((M.value?M.value.toggle:Ja.includes(n.value))||A.value==="toggle")&&le.push("toggle"),le.push("action"),le.map(ee=>[ee,c(`editor.tile.tap.${ee}`)])}),P=$(()=>A.value==="toggle"&&M.value&&!M.value.toggle?{text:c("editor.tile.tap.no_toggle"),warn:!0}:A.value==="toggle"&&!Ja.includes(n.value)&&!yn(0,2,58)?{text:c("editor.tile.tap.toggle_needs_firmware"),warn:!1}:A.value==="toggle"?{text:c("editor.tile.tap.hold"),warn:!1}:null),ge=$(()=>E("inline","none")),G=$(()=>cm.includes(n.value)&&(!M.value||M.value.inline||ge.value==="slider")),ie=$(()=>ge.value==="slider"&&M.value&&!M.value.inline),be=$(()=>E("history_hours",24)),se=$(()=>Object.entries(m.inventory.backgrounds||{})),ue=$(()=>!!m.inventory.entities.find(le=>le.id===t.tile.entity)?.icon),ye=$(()=>!!m.inventory.icons&&(n.value!=="screen"||i.value>0)&&!["forecast","sunpath"].includes(x.value));function $e(le){t.tile.name=le,pt()}function Ye(){m.inspector={kind:"inspect",entity:t.tile.entity}}return(le,ee)=>(g(),_(B,null,[o("div",ay,[o("span",{class:"av mdi",style:je({color:a(Ut)(e.tile.entity)[2],background:a(Ut)(e.tile.entity)[3]})},d(a(Pe)(a(ms)(e.tile))),5),o("span",ry,[o("b",null,d(e.tile.name||s.value),1),o("small",cy,d(e.tile.entity),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:ee[0]||(ee[0]=(...ae)=>a(Qe)&&a(Qe)(...ae))},"✕",8,uy)]),o("div",dy,[o("div",fy,[o("label",py,d(a(c)("editor.tile.name")),1),o("input",{id:"tile-name",value:e.tile.name,placeholder:s.value,maxlength:"60",onInput:ee[1]||(ee[1]=ae=>$e(ae.target.value))},null,40,hy)]),ye.value?(g(),it(Ru,{key:0,selected:e.tile.options?.icon||"auto",automatic:a(xn)(e.tile.entity),"auto-label":a(c)(ue.value?"editor.tile.icon.auto_ha":"editor.tile.icon.auto_default"),note:a(yn)(0,2,18)?"":a(c)("editor.tile.icon.needs_firmware"),onPick:ee[2]||(ee[2]=ae=>a(pn)(e.tile,"icon",ae))},null,8,["selected","automatic","auto-label","note"])):H("",!0),i.value?(g(),_("div",my,[o("span",by,d(a(c)("editor.tile.goes_to.label")),1),te(wt,{choices:f.value,value:i.value,onPick:ee[3]||(ee[3]=ae=>a(Am)(e.tile,Number(ae)))},null,8,["choices","value"]),o("small",{class:me({warn:h.value.warn})},d(h.value.text),3)])):(g(),_("div",vy,[o("span",gy,d(a(c)("editor.tile.display.label")),1),te(wt,{choices:O.value,value:x.value,onPick:ee[4]||(ee[4]=ae=>a(pn)(e.tile,"display",ae))},null,8,["choices","value"]),C.value?(g(),_("small",_y,d(C.value),1)):H("",!0)])),o("div",yy,[o("span",wy,d(a(c)("editor.tile.size.label")),1),te(wt,{choices:v.value,value:F.value,onPick:ee[5]||(ee[5]=ae=>a(pn)(e.tile,"size",ae))},null,8,["choices","value"]),y.value?(g(),_("small",ky,d(y.value),1)):H("",!0)]),b.value.length>1?(g(),_("div",$y,[o("span",xy,d(a(c)("editor.tile.page.label")),1),te(wt,{choices:b.value,value:r.value,onPick:ee[6]||(ee[6]=ae=>a(Tm)(e.tile,Number(ae)-1))},null,8,["choices","value"])])):H("",!0),T.value&&F.value!=="single"&&!i.value?(g(),_("div",Sy,[o("span",Cy,d(a(c)("editor.tile.controls.label")),1),te(wt,{choices:L.value,value:V.value,onPick:ee[7]||(ee[7]=ae=>a(pn)(e.tile,"controls",ae))},null,8,["choices","value"]),o("small",{class:me({warn:k.value.warn})},d(k.value.text),3)])):H("",!0),n.value!=="screen"&&!i.value?(g(),_("div",Ty,[o("span",Ey,d(a(c)("editor.tile.tap.label")),1),te(wt,{choices:z.value,value:A.value,onPick:ee[8]||(ee[8]=ae=>a(pn)(e.tile,"tap",ae))},null,8,["choices","value"]),P.value?(g(),_("small",{key:0,class:me({warn:P.value.warn})},d(P.value.text),3)):H("",!0)])):H("",!0),n.value!=="screen"&&!i.value&&A.value==="action"?(g(),it(W_,{key:6,tile:e.tile},null,8,["tile"])):H("",!0),G.value&&!i.value?(g(),_("div",Ay,[o("span",Py,d(a(c)("editor.tile.slider.label")),1),te(wt,{choices:[["none",a(c)("editor.tile.slider.no")],["slider",a(c)("editor.tile.slider.yes")]],value:ge.value,onPick:ee[9]||(ee[9]=ae=>a(pn)(e.tile,"inline",ae))},null,8,["choices","value"]),ie.value?(g(),_("small",Oy,d(a(c)("editor.tile.slider.nothing")),1)):H("",!0)])):H("",!0),n.value==="sensor"&&!i.value?(g(),_("div",Iy,[o("span",Ly,d(a(c)("editor.tile.history.label")),1),te(wt,{choices:[1,6,24].map(ae=>[ae,a(c)("editor.tile.history.hours",ae)]),value:be.value,onPick:ee[10]||(ee[10]=ae=>a(pn)(e.tile,"history_hours",Number(ae)))},null,8,["choices","value"])])):H("",!0),o("div",My,[o("span",Ry,d(a(c)("editor.tile.background.label")),1),o("div",Ny,[(g(!0),_(B,null,he(se.value,([ae,de])=>(g(),_("button",{key:ae,type:"button","aria-label":a(c)("editor.tile.background.aria",{name:de.label}),"aria-pressed":(e.tile.options?.background||"auto")===ae?"true":"false",onClick:X=>a(pn)(e.tile,"background",ae)},[o("i",{class:me(de.color?"":ae==="none"?"none":"auto"),style:je(de.color?{background:de.color}:void 0)},null,6),Re(d(de.label),1)],8,Fy))),128))])])]),o("div",Dy,[o("button",{type:"button",class:"btn danger",onClick:ee[11]||(ee[11]=ae=>a($u)(e.tile))},d(a(c)("editor.common.remove")),1),ee[12]||(ee[12]=o("span",{class:"spacer"},null,-1)),n.value!=="screen"?(g(),_("button",{key:0,type:"button",class:"btn quiet",onClick:Ye},d(a(c)("editor.common.read_current_data")),1)):H("",!0)])],64))}}),jy={class:"dr-head"},Hy={class:"av mdi",style:{background:"var(--seg)",color:"var(--ink-2)"}},Vy={class:"tx"},Wy=["aria-label"],By={class:"dr-body"},Ky={class:"f"},qy={class:"f-label",for:"title"},zy=["value","placeholder"],Yy={class:"f"},Gy={class:"f-label",id:"topbar-caption"},Jy={style:{"text-transform":"none","letter-spacing":"0","font-weight":"500"}},Xy={class:"items",id:"topbar-chips",role:"list","aria-labelledby":"topbar-caption"},Zy=["data-index","aria-label","onPointerdown","onClick","onKeydown"],Qy={class:"tx"},e0=["aria-label","onClick"],t0=["disabled","title"],n0={class:"live",id:"topbar-live"},s0={class:"f"},i0={class:"f-label"},o0={class:"f"},l0={class:"f-label"},a0={href:"#settings"},r0={key:2},c0={key:0,class:"dr-foot"},u0=["disabled"],d0=["disabled"],f0=Me({__name:"TopbarInspector",props:{index:{}},setup(e){const t=e,n=$(()=>un()),s=$(()=>n.value[t.index]),i=$(()=>(m.fontsVersion,m.now,m.topbarPreviews,vu(n.value,yu.value,m.layout?.title||Fn("editor.mockup.home"),hn))),l=$(()=>i.value.dropped),r=$(()=>m.inventory.header?.min_firmware||"0.2.32"),u=$(()=>{const[G,ie,be]=r.value.split(".").map(Number);return yn(G,ie,be)}),f=$(()=>u.value?c(l.value.size?"editor.topbar.hint.overflow":"editor.topbar.hint.reorder"):c("editor.topbar.hint.needs_firmware",{version:r.value})),h=(G,ie)=>{const be=hn(G);return be.shown?l.value.has(ie)?c("editor.topbar.detail.overflow"):be.analog?c("editor.topbar.detail.dial"):be.text:c("editor.topbar.detail.hidden")},p=G=>{const ie=hn(G);return ie.analog||G.type!=="entity"?Ks(bu[G.type])?.cp:ie.icon},b=G=>m.topbarAdded?.key===at(G)&&Date.now()-m.topbarAdded.time<1200;function v(G){m.layout&&(m.layout.title=G,pt())}function y(G){const ie=[...n.value];ie[t.index]={...ie[t.index],...G},Ns(ie)}const M=$(()=>s.value?hn(s.value).shown?l.value.has(t.index)?c("editor.topbar.live.overflow"):c("editor.topbar.live.looks"):c("editor.topbar.live.hidden"):""),E=$(()=>({clock:Vi(is.value,new Date(m.now)),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),Kn.value)})),x=ke({index:-1,active:!1,moved:!1});let O=null,C=0,F=null,T=0;function V(G,ie){G.button!==0||G.target.closest(".x")||(G.pointerType!=="touch"&&G.preventDefault(),x.value={index:ie,active:!1,moved:!1},O={x:G.clientX,y:G.clientY},F=G.pointerId,clearTimeout(C),G.pointerType==="touch"&&(C=window.setTimeout(L,260)),document.addEventListener("pointermove",A),document.addEventListener("pointerup",z),document.addEventListener("pointercancel",z))}function L(){x.value.active=!0,document.addEventListener("touchmove",k,{passive:!1})}function k(G){x.value.active&&G.preventDefault()}function A(G){if(G.pointerId!==F||!O)return;if(!x.value.active){const se=Math.hypot(G.clientX-O.x,G.clientY-O.y);if(G.pointerType==="touch"){se>10&&(clearTimeout(C),O=null);return}if(se<6)return;L()}const ie=[...document.querySelectorAll(".items .item[data-index]")];let be=x.value.index;if(ie.forEach((se,ue)=>{const ye=se.getBoundingClientRect();uex.value.index&&G.clientY>ye.top+ye.height/2&&(be=Math.max(be,ue))}),be!==x.value.index&&m.layout){const se=[...n.value];se.splice(be,0,...se.splice(x.value.index,1)),m.layout.header={items:se};const ue=t.index===x.value.index;x.value.index=be,x.value.moved=!0,ue&&Jt(be)}}function z(G){G.pointerId===F&&(clearTimeout(C),document.removeEventListener("pointermove",A),document.removeEventListener("pointerup",z),document.removeEventListener("pointercancel",z),document.removeEventListener("touchmove",k),x.value.active&&(T=Date.now()+400,x.value.moved&&pt()),x.value={index:-1,active:!1,moved:!1},O=null,F=null)}function P(G){Date.now(){const be=Hs("i18n-t");return g(),_(B,null,[o("div",jy,[o("span",Hy,d(s.value?a(Pe)(p(s.value)||"F0150"):a(Pe)("F0150")),1),o("span",Vy,[o("b",null,d(s.value?s.value.type==="entity"?a(Bs)(s.value.entity):a(bs)(s.value):a(c)("editor.topbar.title")),1),o("small",{class:me({mono:s.value?.type==="entity"})},d(s.value?s.value.type==="entity"?s.value.entity:a(c)("editor.topbar.builtin"):a(c)("editor.topbar.items",{used:n.value.length},a(bn)())),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:ie[0]||(ie[0]=(...se)=>a(Qe)&&a(Qe)(...se))},"✕",8,Wy)]),o("div",By,[o("div",Ky,[o("label",qy,d(a(c)("editor.topbar.name")),1),o("input",{id:"title",value:a(m).layout?.title,maxlength:"60",placeholder:a(c)("editor.topbar.name_placeholder"),onInput:ie[1]||(ie[1]=se=>v(se.target.value))},null,40,zy)]),o("div",Yy,[o("span",Gy,[Re(d(a(c)("editor.topbar.right"))+" ",1),o("span",Jy," · "+d(n.value.length)+" / "+d(a(bn)()),1)]),o("div",Xy,[(g(!0),_(B,null,he(n.value,(se,ue)=>(g(),_("div",{key:a(at)(se)+ue,class:me(["item",{selected:ue===e.index,"is-hidden":!a(hn)(se).shown,"is-overflow":l.value.has(ue),"just-added":b(se),"dragging-chip":x.value.active&&x.value.index===ue}]),role:"listitem",tabindex:"0","data-index":ue,"aria-label":a(c)("editor.topbar.item_label",{name:a(bs)(se),slot:ue+1}),onPointerdown:ye=>V(ye,ue),onClick:ye=>P(ue),onKeydown:ye=>ge(ye,ue)},[ie[9]||(ie[9]=o("span",{class:"grip","aria-hidden":"true"},"⋮⋮",-1)),o("span",{class:"av mdi",style:je(a(hn)(se).color?{color:a(hn)(se).color}:void 0)},d(p(se)?a(Pe)(p(se)):""),5),o("span",Qy,[o("b",null,d(a(bs)(se)),1),o("small",null,d(h(se,ue)),1)]),o("button",{type:"button",class:"x","aria-label":a(c)("editor.topbar.remove_named",{name:a(bs)(se)}),onClick:At(ye=>a(nr)(ue),["stop"])},"✕",8,e0)],42,Zy))),128)),o("button",{type:"button",class:"ghost-btn",id:"topbar-add",disabled:n.value.length>=a(bn)(),title:n.value.length>=a(bn)()?a(c)("editor.topbar.max",a(bn)()):a(c)("editor.topbar.add_title"),onClick:ie[2]||(ie[2]=(...se)=>a(er)&&a(er)(...se))},d(a(c)("editor.topbar.add_button")),9,t0)]),o("small",{id:"topbar-hint",class:me({warn:l.value.size>0&&u.value})},d(f.value),3)]),s.value?(g(),_(B,{key:0},[o("div",n0,[o("small",null,d(M.value),1),te(Mu,{items:[s.value],single:""},null,8,["items"])]),s.value.type==="entity"?(g(),_(B,{key:0},[o("div",s0,[o("span",i0,d(a(c)("editor.topbar.content.label")),1),te(wt,{choices:(a(m).inventory.header?.contents||[]).map(se=>[se.key,se.label]),value:s.value.content,onPick:ie[3]||(ie[3]=se=>y({content:se}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.content.hint")),1)]),te(Ru,{selected:s.value.icon||"auto",automatic:a(m).topbarPreviews[a(at)(s.value)]?.auto_icon||a(xn)(s.value.entity),"auto-label":a(c)("editor.topbar.auto_icon"),"allow-none":"",onPick:ie[4]||(ie[4]=se=>y({icon:se}))},null,8,["selected","automatic","auto-label"]),o("div",o0,[o("span",l0,d(a(c)("editor.topbar.show.label")),1),te(wt,{choices:(a(m).inventory.header?.shows||[]).map(se=>[se.key,se.label]),value:s.value.show,onPick:ie[5]||(ie[5]=se=>y({show:se}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.show.hint")),1)])],64)):s.value.type!=="date"?(g(),it(be,{key:1,keypath:a(is)?"editor.topbar.clock_24":"editor.topbar.clock_12",tag:"small",id:"topbar-clock",scope:"global"},{settings:ne(()=>[o("a",a0,d(a(c)("editor.topbar.clock_settings")),1)]),_:1},8,["keypath"])):(g(),_("small",r0,d(a(c)("editor.topbar.date_hint",{date:E.value.date})),1))],64)):H("",!0)]),s.value?(g(),_("div",c0,[o("button",{type:"button",class:"btn danger",onClick:ie[6]||(ie[6]=se=>a(nr)(e.index))},d(a(c)("editor.common.remove")),1),ie[10]||(ie[10]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",disabled:e.index===0,onClick:ie[7]||(ie[7]=se=>a(mo)(e.index,e.index-1)&&a(Jt)(e.index-1))},d(a(c)("editor.topbar.up")),9,u0),o("button",{type:"button",class:"btn quiet",disabled:e.index>=n.value.length-1,onClick:ie[8]||(ie[8]=se=>a(mo)(e.index,e.index+1)&&a(Jt)(e.index+1))},d(a(c)("editor.topbar.down")),9,d0)])):H("",!0)],64)}}}),p0={class:"dr-head"},h0={class:"tx"},m0=["aria-label"],b0={class:"dr-body"},v0={class:"f"},g0={class:"f-label"},_0={class:"options"},y0=["disabled","onClick"],w0={class:"mdi"},k0={class:"tx"},$0={key:0,class:"f"},x0={class:"f-label"},S0={class:"options"},C0=["disabled","onClick"],T0={class:"mdi"},E0={class:"tx"},A0={class:"f"},P0={class:"f-label",for:"topbar-search"},O0=["placeholder","aria-label"],I0={class:"options"},L0=["disabled","onClick"],M0={class:"mdi"},R0={class:"tx"},N0={key:0,class:"hint"},F0={key:1,class:"hint"},D0={class:"dr-foot"},U0=Me({__name:"TopbarAdd",setup(e){const t=ke(""),n=$(()=>new Set(un().map(at))),s=$(()=>({clock:Vi(is.value,new Date(m.now)),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),Kn.value)})),i=$(()=>m.inventory.header?.suggestions?.[m.selected||""]||[]),l=$(()=>{const u=t.value.trim().toLocaleLowerCase();return m.inventory.entities.filter(f=>`${f.name} ${f.id} ${f.area||""} ${f.device||""}`.toLocaleLowerCase().includes(u))}),r=u=>({type:"entity",entity:u,content:"state",icon:"auto",show:"always"});return(u,f)=>(g(),_(B,null,[o("div",p0,[f[3]||(f[3]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"18px"}},"+",-1)),o("span",h0,[o("b",null,d(a(c)("editor.topbar.add.title")),1),o("small",null,d(a(c)("editor.topbar.add.slots",{used:a(un)().length},a(bn)())),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Qe)&&a(Qe)(...h))},"✕",8,m0)]),o("div",b0,[o("div",v0,[o("span",g0,d(a(c)("editor.topbar.add.builtin")),1),o("div",_0,[(g(!0),_(B,null,he(a(m).inventory.header?.builtin||[],h=>(g(),_("button",{key:h.type,type:"button",class:"option",disabled:n.value.has(a(at)({type:h.type})),onClick:p=>a(bo)({type:h.type})},[o("span",w0,d(a(Pe)(a(Ks)(a(bu)[h.type])?.cp||"F0150")),1),o("span",k0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)({type:h.type}))?a(c)("editor.topbar.add.added"):s.value[h.type]),1)])],8,y0))),128))])]),i.value.length?(g(),_("div",$0,[o("span",x0,d(a(c)("editor.topbar.add.suggestions")),1),o("div",S0,[(g(!0),_(B,null,he(i.value,h=>(g(),_("button",{key:a(at)(h.item),type:"button",class:"option",disabled:n.value.has(a(at)(h.item)),onClick:p=>a(bo)(h.item)},[o("span",T0,d(a(Pe)(h.icon||a(xn)(h.item.entity))),1),o("span",E0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)(h.item))?a(c)("editor.topbar.add.added"):[h.name,h.area].filter(Boolean).join(" · ")),1)])],8,C0))),128))])])):H("",!0),o("div",A0,[o("label",P0,d(a(c)("editor.topbar.add.entity")),1),Ae(o("input",{id:"topbar-search","onUpdate:modelValue":f[1]||(f[1]=h=>t.value=h),type:"search",placeholder:a(c)("editor.topbar.add.search"),"aria-label":a(c)("editor.topbar.add.search_label")},null,8,O0),[[Xe,t.value]]),o("div",I0,[(g(!0),_(B,null,he(l.value.slice(0,40),h=>(g(),_("button",{key:h.id,type:"button",class:"option",disabled:n.value.has(a(at)(r(h.id))),onClick:p=>a(bo)(r(h.id))},[o("span",M0,d(a(Pe)(a(xn)(h.id))),1),o("span",R0,[o("strong",null,d(h.name),1),o("small",null,d([h.area,h.id].filter(Boolean).join(" · ")),1)])],8,L0))),128)),l.value.length?l.value.length>40?(g(),_("p",F0,d(a(c)("editor.common.results",l.value.length)),1)):H("",!0):(g(),_("p",N0,d(a(c)("editor.topbar.add.none_found")),1))])])]),o("div",D0,[f[4]||(f[4]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",onClick:f[2]||(f[2]=(...h)=>a(Qe)&&a(Qe)(...h))},d(a(c)("editor.common.cancel")),1)])],64))}}),j0={class:"dr-head"},H0={class:"tx"},V0=["aria-label"],W0={class:"dr-body",id:"inspector-section"},B0={id:"inspection-summary"},K0={key:0,class:"hint warn"},q0={key:1,class:"hint"},z0={id:"inspection"},Y0={class:"dr-foot"},G0=Me({__name:"InspectPanel",props:{entity:{}},setup(e){const t=e,n=ke(null),s=ke(c("editor.inspect.reading")),i=ke("");async function l(){if(m.selected){n.value=null,i.value="",s.value=c("editor.inspect.fetching");try{const u=await Rt(`screens/${encodeURIComponent(m.selected)}/inspect`),f=t.entity?u.tiles.filter(h=>h.entity===t.entity):u.tiles;n.value=f,s.value=JSON.stringify(t.entity?f[0]:u,null,2)}catch(u){i.value=u.message,s.value="",Ce(u.message)}}}const r=u=>{const f=m.layout?.tiles.find(h=>h.entity===u)?.options||{};return c("editor.inspect.options",{slider:c(f.inline==="slider"?"editor.inspect.yes":"editor.inspect.no"),display:mu(f.display||"standard"),size:rm(f.size),control:sm({entity:u,options:f},m.inventory),background:m.inventory.backgrounds?.[f.background||"auto"]?.label||c("editor.inspect.background_default")})};return Tn(l),St(()=>t.entity,l),(u,f)=>(g(),_(B,null,[o("div",j0,[f[1]||(f[1]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"16px"}},"⌕",-1)),o("span",H0,[o("b",null,d(a(c)("editor.inspect.title")),1),o("small",{class:me({mono:e.entity})},d(e.entity||a(c)("editor.inspect.subtitle")),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Qe)&&a(Qe)(...h))},"✕",8,V0)]),o("div",W0,[o("div",B0,[i.value?(g(),_("p",K0,d(i.value),1)):n.value?H("",!0):(g(),_("p",q0,d(a(c)("editor.inspect.fetching")),1)),(g(!0),_(B,null,he(n.value||[],(h,p)=>(g(),_("article",{key:p,class:"inspection-tile"},[o("strong",null,d(h.entity),1),o("span",null,d(a(c)("editor.inspect.status",{status:h.word||h.state})),1),o("small",null,d(r(h.entity)),1)]))),128))]),o("pre",z0,d(s.value),1)]),o("div",Y0,[o("button",{type:"button",class:"btn quiet",onClick:l},d(a(c)("editor.inspect.read_again")),1),f[2]||(f[2]=o("span",{class:"spacer"},null,-1))])],64))}}),J0=["aria-hidden"],X0=Me({__name:"Drawer",setup(e){const t=$(()=>!!(m.inspector&&(m.inspector.kind!=="tile"||ro.value)));return(n,s)=>(g(),_("aside",{class:me(["drawer",{open:t.value}]),id:"tile-sheet","aria-hidden":t.value?"false":"true",onClick:s[0]||(s[0]=At(()=>{},["stop"]))},[a(m).inspector?(g(),_(B,{key:0},[a(m).inspector.kind==="tile"&&a(ro)?(g(),it(Uy,{key:0,tile:a(ro)},null,8,["tile"])):a(m).inspector.kind==="bar"?(g(),it(f0,{key:1,index:a(m).inspector.index},null,8,["index"])):a(m).inspector.kind==="bar-add"?(g(),it(U0,{key:2})):a(m).inspector.kind==="inspect"?(g(),it(G0,{key:3,entity:a(m).inspector.entity},null,8,["entity"])):H("",!0)],64)):H("",!0)],10,J0))}}),Z0={class:"main-head"},Q0={class:"eyebrow",id:"screen-name"},e1=["title"],t1={class:"head-right"},n1={class:"seg",role:"tablist"},s1=["aria-pressed"],i1=["aria-pressed"],o1={key:1,id:"dirty",class:"chip dirty"},l1=["disabled"],a1={key:0,class:"spin small"},r1=["aria-label","aria-expanded"],c1={key:3,class:"menu",role:"menu"},u1=["disabled","title"],d1=["disabled","aria-expanded"],f1={key:0,class:"sub"},p1=["onClick"],h1=["disabled","title"],m1={class:"body",id:"body"},b1=Me({__name:"ScreenView",setup(e){const t=$(()=>_t.value),n=$(()=>t.value.online?`${t.value.delivery} · ${t.value.status}`:c("editor.screen_view.offline")),s=$(()=>Au(t.value)&&t.value.online&&t.value.update?.profile&&t.value.update?.host),i=$(()=>m.inventory.screens.filter(E=>E.id!==t.value.id&&E.layout?.tiles?.length)),l=ke(!1),r=ke(null);function u(){m.menuOpen=!1,l.value=!1}function f(){u(),m.overrideProfile=t.value.update?.profile||null,m.overrideFriendly=t.value.name,Ve("#override")}function h(){u(),m.selectedTile=null,m.inspector={kind:"inspect"}}function p(E){u(),!(m.dirty&&!confirm(c("editor.screen_view.confirm.copy")))&&Im(E)}function b(){u(),r.value?.click()}async function v(E){const x=E.target,O=x.files?.[0];x.value="",O&&(m.dirty&&!confirm(c("editor.screen_view.confirm.import"))||Mm(await O.text()))}function y(E){if(E.key==="Escape")if(m.menuOpen)u();else{if(m.palette)return;m.inspector&&!E.target?.closest?.(".picker")&&Qe()}else(E.metaKey||E.ctrlKey)&&E.key.toLowerCase()==="s"&&(E.preventDefault(),m.dirty&&Wo())}function M(E){m.menuOpen&&!E.target.closest(".head-right .menu, #more")&&u()}return Tn(()=>{document.addEventListener("keydown",y),document.addEventListener("click",M)}),os(()=>{document.removeEventListener("keydown",y),document.removeEventListener("click",M)}),(E,x)=>(g(),_(B,null,[o("header",Z0,[o("div",null,[o("span",Q0,d(t.value.name),1),o("h1",null,d(a(m).layout?.title||a(Fn)("editor.mockup.home")),1)]),o("span",{id:"delivery",class:me(["chip",{off:!t.value.online}]),title:n.value},[x[9]||(x[9]=o("span",{class:"dot"},null,-1)),Re(d(n.value),1)],10,e1),o("div",t1,[o("div",n1,[o("button",{type:"button",id:"tab-layout",role:"tab","aria-pressed":a(m).tab==="layout"?"true":"false",onClick:x[0]||(x[0]=O=>a(m).tab="layout")},d(a(c)("editor.screen_view.tabs.layout")),9,s1),o("button",{type:"button",id:"tab-settings",role:"tab","aria-pressed":a(m).tab==="settings"?"true":"false",onClick:x[1]||(x[1]=O=>{a(m).tab="settings",a(Qe)()})},d(a(c)("editor.screen_view.tabs.settings")),9,i1)]),a(m).dirty?(g(),_("span",o1,d(a(c)("editor.common.unsaved")),1)):(g(),_("span",{key:0,id:"dirty",class:me(["chip",{sent:a(m).saved}])},d(a(m).saved?a(c)("editor.screen_view.sent"):a(c)("editor.screen_view.all_saved")),3)),a(m).dirty?(g(),_("button",{key:2,id:"save",type:"button",class:"btn primary",disabled:a(m).busy,title:"⌘S",onClick:x[2]||(x[2]=O=>a(Wo)())},[a(m).busy?(g(),_("span",a1)):H("",!0),Re(d(a(m).busy?a(c)("editor.common.saving"):a(c)("editor.common.save_send")),1)],8,l1)):H("",!0),o("button",{id:"more",type:"button",class:"icon-btn","aria-label":a(c)("editor.screen_view.more"),"aria-haspopup":"menu","aria-expanded":a(m).menuOpen?"true":"false",onClick:x[3]||(x[3]=At(O=>{a(m).menuOpen=!a(m).menuOpen,l.value=!1},["stop"]))},"···",8,r1),a(m).menuOpen?(g(),_("div",c1,[o("button",{type:"button",role:"menuitem",id:"identify",disabled:!a(Wn)(t.value)||!t.value.online,title:a(Wn)(t.value)?"":a(c)("editor.screen_view.menu.identify_needs"),onClick:x[4]||(x[4]=O=>{u(),a(xu)(t.value)})},[Re(d(a(c)("editor.screen_view.menu.identify"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.identify_hint")),1)],8,u1),o("button",{type:"button",role:"menuitem",id:"inspect",onClick:h},[Re(d(a(c)("editor.common.read_current_data"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.inspect_hint")),1)]),x[12]||(x[12]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"copy-layout",disabled:!i.value.length,"aria-expanded":l.value?"true":"false",onClick:x[5]||(x[5]=At(O=>l.value=!l.value,["stop"]))},[Re(d(a(c)("editor.screen_view.menu.copy"))+" ",1),o("small",null,d(i.value.length?a(c)("editor.screen_view.menu.copy_screens",i.value.length):a(c)("editor.screen_view.menu.copy_none")),1)],8,d1),l.value?(g(),_("div",f1,[(g(!0),_(B,null,he(i.value,O=>(g(),_("button",{key:O.id,type:"button",role:"menuitem",onClick:C=>p(O.id)},[Re(d(O.name)+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.copy_tiles",O.layout.tiles.length)),1)],8,p1))),128))])):H("",!0),o("button",{type:"button",role:"menuitem",id:"export-layout",onClick:x[6]||(x[6]=O=>{u(),a(Cu)()})},[Re(d(a(c)("editor.screen_view.menu.export"))+" ",1),x[10]||(x[10]=o("small",null,"JSON",-1))]),o("button",{type:"button",role:"menuitem",id:"import-layout",onClick:b},[Re(d(a(c)("editor.screen_view.menu.import"))+" ",1),x[11]||(x[11]=o("small",null,"JSON",-1))]),x[13]||(x[13]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"open-override",disabled:!t.value.update?.profile,title:t.value.update?.profile?"":a(c)("editor.screen_view.menu.override_none"),onClick:f},[Re(d(a(c)("editor.screen_view.menu.override"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.override_hint")),1)],8,h1),o("button",{type:"button",role:"menuitem",onClick:x[7]||(x[7]=O=>{u(),a(Ve)("#firmware")})},d(a(c)("editor.nav.firmware")),1),s.value?(g(),_("button",{key:1,type:"button",role:"menuitem",onClick:x[8]||(x[8]=O=>{u(),a(Ko)(t.value)})},[Re(d(a(c)("editor.screen_view.menu.update"))+" ",1),o("small",null,d(t.value.update?.target),1)])):H("",!0)])):H("",!0),o("input",{ref_key:"fileInput",ref:r,type:"file",accept:"application/json,.json",hidden:"",onChange:v},null,544)])]),o("div",m1,[a(m).tab==="layout"?(g(),it(Gg,{key:0})):(g(),it(f_,{key:1})),te(X0)])],64))}}),v1={key:0,id:"choose",class:"empty"},g1={key:1,id:"empty",class:"empty"},_1=Me({__name:"EmptyState",setup(e){return(t,n)=>a(m).inventory.screens.length?(g(),_("section",v1,[n[1]||(n[1]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.choose.title")),1),o("p",null,d(a(c)("editor.empty.choose.text")),1)])):(g(),_("section",g1,[n[2]||(n[2]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.start.title")),1),o("p",null,d(a(c)("editor.empty.start.text")),1),o("button",{id:"start",type:"button",class:"btn primary",onClick:n[0]||(n[0]=s=>a(Ve)("#new-screen"))},d(a(c)("editor.empty.start.button")),1)]))}}),y1={class:"panel",id:"settings-view"},w1={class:"panel-head"},k1={class:"tx"},$1={class:"eyebrow"},x1={id:"settings-title"},S1={class:"card-grid"},C1={class:"card"},T1={class:"tools"},E1={class:"tx"},A1={class:"tx"},P1={key:0,class:"card updates",id:"updates"},O1={id:"updates-hint"},I1=["aria-valuenow"],L1={class:"progress-text"},M1={key:0,class:"log-lines"},R1={key:2,class:"whatsnew"},N1={class:"check"},F1=["checked"],D1={key:1,class:"card",id:"language"},U1={class:"field"},j1={class:"f-label",for:"screen-language"},H1=["value","disabled"],V1={value:"auto"},W1=["value"],B1={key:0,id:"language-ha-missing"},K1={class:"field"},q1={class:"f-label",for:"time-format"},z1=["value","disabled"],Y1={value:"auto"},G1={value:"24"},J1={value:"12"},X1={class:"field"},Z1={class:"f-label",for:"number-format"},Q1=["value","disabled"],e2={value:"auto"},t2=["value"],n2={key:0,class:"actions",id:"language-profile"},s2=["disabled"],i2={class:"card"},o2={class:"tools"},l2={class:"tx"},a2={class:"card",id:"claude"},r2={class:"actions"},c2=["disabled"],u2={id:"claude-path"},d2={class:"actions"},f2={class:"btn quiet",id:"claude-download",href:"api/claude-skill.zip",download:"esp-screens.zip"},p2="https://github.com/MaxGramser/homeassistant_espscreen/blob/main/docs/TRANSLATING.md",h2=Me({__name:"AppSettingsView",setup(e){const t=$(()=>m.inventory.updates),n=$(()=>m.inventory.screens.filter(k=>k.update?.available).length),s=$(()=>t.value?t.value.busy?c("editor.settings.updates.busy",{version:t.value.target}):m.inventory.screens.length?n.value?c("editor.settings.updates.available",{version:t.value.target},n.value):c("editor.settings.updates.current",{version:t.value.target}):c("editor.settings.updates.no_screens",{version:t.value.target}):""),i=$(()=>m.inventory.screens.find(k=>k.update?.state==="running"||m.updating.includes(k.id))),l=$(()=>i.value?Gn(i.value):null),r=$(()=>(m.firmwareJob?.logs||[]).slice(-12).join(` -`)),u=$(()=>{const k=m.inventory.changelog,A=t.value?.target;return!Array.isArray(k)||!A?[]:k.filter(z=>z.firmware===A).flatMap(z=>z.lines).slice(0,10)}),f=$(()=>m.inventory.claude_skill),h=ke(!1);async function p(){h.value=!0;try{await Bm()}finally{h.value=!1}}const b=["point","comma","space"],v=$(()=>m.inventory.language),y=$(()=>{const k=v.value,A=k?.ha?nu(k.ha,k.languages.map(z=>z.code)):void 0;return k?.languages.find(z=>z.code===A)?.name}),M=$(()=>v.value?.languages.find(k=>k.code===v.value.effective&&!k.checked)),E=k=>c(k==="12"?"editor.settings.language.clock_12":"editor.settings.language.clock_24"),x=k=>ou("1234.5",k),O=Zh(),C=$(()=>{const k=v.value;return k?{...O.clock&&O.clock!==(k.clock_effective||"24")?{clock:O.clock}:{},...O.numbers&&O.numbers!==(k.numbers_effective||"point")?{numbers:O.numbers}:{}}:{}}),F=$(()=>[C.value.clock&&E(C.value.clock),C.value.numbers&&x(Fo[C.value.numbers])].filter(Boolean).join(" · ")),T=ke(!1);async function V(k,A){const z=A.target;T.value=!0;const P=await lr({[k]:z.value});T.value=!1,P||(z.value=String(v.value?.[k]??"auto"))}async function L(){T.value=!0,await lr(C.value),T.value=!1}return(k,A)=>{const z=Hs("i18n-t");return g(),_("div",y1,[o("div",w1,[o("div",k1,[o("span",$1,d(a(c)("editor.nav.settings")),1),o("h1",x1,d(a(c)("editor.settings.title")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-settings",onClick:A[0]||(A[0]=P=>a(Ve)(""))},d(a(c)("editor.settings.back")),1)]),o("div",S1,[o("section",C1,[o("h2",null,d(a(c)("editor.settings.screens.title")),1),o("p",null,d(a(c)("editor.settings.screens.text")),1),o("div",T1,[o("button",{type:"button",class:"tool",onClick:A[1]||(A[1]=P=>a(Ve)("#new-screen"))},[A[9]||(A[9]=o("span",{class:"tool-icon"},"+",-1)),o("span",E1,[o("b",null,d(a(c)("editor.nav.new_screen")),1),o("small",null,d(a(c)("editor.nav.new_screen_detail")),1)])]),o("button",{type:"button",class:"tool",onClick:A[2]||(A[2]=P=>a(Ve)("#firmware"))},[A[10]||(A[10]=o("span",{class:"tool-icon"},"⇪",-1)),o("span",A1,[o("b",null,d(a(c)("editor.nav.firmware")),1),o("small",null,d(a(c)("editor.settings.screens.firmware_detail")),1)])])])]),t.value?(g(),_("section",P1,[o("h2",null,d(a(c)("editor.settings.updates.title")),1),o("p",O1,d(s.value),1),i.value&&l.value?(g(),_(B,{key:0},[o("div",{class:"progress",role:"progressbar","aria-valuenow":l.value.percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:je({width:l.value.percent+"%"})},null,4)],8,I1),o("div",L1,[o("span",null,d(i.value.name)+" · "+d(l.value.percent)+" %",1),o("span",null,d(l.value.text),1)]),r.value?(g(),_("pre",M1,d(r.value),1)):H("",!0)],64)):H("",!0),t.value.pending&&!t.value.busy&&t.value.pending>=2?(g(),_("button",{key:1,id:"update-all",type:"button",class:"btn primary",onClick:A[3]||(A[3]=(...P)=>a(ir)&&a(ir)(...P))},d(a(c)("editor.settings.updates.all",t.value.pending)),1)):H("",!0),u.value.length&&!a(Bo)()?(g(),_("details",R1,[o("summary",null,d(a(c)("editor.settings.updates.whats_new",{version:t.value.target})),1),o("ul",null,[(g(!0),_(B,null,he(u.value,P=>(g(),_("li",{key:P},d(P),1))),128))])])):H("",!0),o("label",N1,[o("input",{type:"checkbox",id:"auto-update",checked:!!t.value.auto,onChange:A[4]||(A[4]=P=>a(Wm)(P.target.checked))},null,40,F1),o("span",null,[Re(d(a(c)("editor.settings.updates.auto_label")),1),o("small",null,d(a(c)("editor.settings.updates.auto_hint")),1)])])])):H("",!0),v.value?(g(),_("section",D1,[o("h2",null,d(a(c)("editor.settings.language.title")),1),o("div",U1,[o("label",j1,d(a(c)("editor.settings.language.screen_language")),1),o("select",{id:"screen-language",value:v.value.setting,disabled:T.value,onChange:A[5]||(A[5]=P=>V("setting",P))},[o("option",V1,d(y.value?a(c)("editor.settings.language.auto",{name:y.value}):a(c)("editor.settings.language.auto_plain")),1),(g(!0),_(B,null,he(v.value.languages,P=>(g(),_("option",{key:P.code,value:P.code},d(P.checked?P.name:a(c)("editor.settings.language.unchecked",{name:P.name})),9,W1))),128))],40,H1),v.value.setting==="auto"&&!y.value?(g(),_("small",B1,d(a(c)("editor.settings.language.ha_missing")),1)):H("",!0),M.value?(g(),it(z,{key:1,keypath:"editor.settings.language.help",tag:"small",id:"language-help",scope:"global"},{name:ne(()=>[Re(d(M.value.name),1)]),guide:ne(()=>[o("a",{href:p2,target:"_blank",rel:"noopener"},d(a(c)("editor.settings.language.guide")),1)]),_:1})):H("",!0),o("small",null,d(a(c)("editor.settings.language.update_hint")),1)]),o("div",K1,[o("label",q1,d(a(c)("editor.settings.language.time")),1),o("select",{id:"time-format",value:v.value.clock||"auto",disabled:T.value,onChange:A[6]||(A[6]=P=>V("clock",P))},[o("option",Y1,d(a(c)("editor.settings.language.time_auto",{clock:E(v.value.clock_effective)})),1),o("option",G1,d(E("24")),1),o("option",J1,d(E("12")),1)],40,z1)]),o("div",X1,[o("label",Z1,d(a(c)("editor.settings.language.numbers")),1),o("select",{id:"number-format",value:v.value.numbers||"auto",disabled:T.value,onChange:A[7]||(A[7]=P=>V("numbers",P))},[o("option",e2,d(a(c)("editor.settings.language.numbers_auto",{example:x(a(Pu))})),1),(g(),_(B,null,he(b,P=>o("option",{key:P,value:P},d(x(a(Fo)[P])),9,t2)),64))],40,Q1)]),F.value?(g(),_("div",n2,[o("small",null,d(a(c)("editor.settings.language.profile",{formats:F.value})),1),o("button",{type:"button",class:"btn quiet mini",disabled:T.value,onClick:L},d(a(c)("editor.settings.language.use_profile")),9,s2)])):H("",!0),o("small",null,d(a(c)("editor.settings.language.editor_hint")),1)])):H("",!0),o("section",i2,[o("h2",null,d(a(c)("editor.nav.alerts")),1),o("p",null,d(a(c)("editor.settings.alerts.text")),1),o("div",o2,[o("button",{type:"button",class:"tool",onClick:A[8]||(A[8]=P=>a(Ve)("#alerts"))},[A[11]||(A[11]=o("span",{class:"tool-icon"},"!",-1)),o("span",l2,[o("b",null,d(a(c)("editor.nav.alerts")),1),o("small",null,d(a(c)("editor.settings.alerts.detail")),1)])])])]),o("section",a2,[A[12]||(A[12]=o("h2",null,"Claude",-1)),o("p",null,d(a(c)("editor.settings.claude.text")),1),o("div",r2,[o("button",{type:"button",id:"claude-install",class:me(["btn",f.value?.installed&&f.value.current?"quiet":"primary"]),disabled:!f.value||h.value,onClick:p},d(!f.value||!f.value.installed?a(c)("editor.settings.claude.install"):f.value.current?a(c)("editor.settings.claude.install_again"):a(c)("editor.settings.claude.update")),11,c2),o("span",{id:"claude-status",class:me(["chip",f.value&&f.value.installed?f.value.current?"good":"update":""]),role:"status"},d(f.value?f.value.installed?f.value.current?a(c)("editor.settings.claude.installed_chip"):a(c)("editor.settings.claude.newer"):a(c)("editor.settings.claude.not_installed"):a(c)("editor.common.loading")),3)]),te(z,{keypath:"editor.settings.claude.writes",tag:"small",scope:"global"},{path:ne(()=>[o("code",u2,d(f.value?.path||"/homeassistant/.claude/skills/esp-screens"),1)]),_:1}),o("div",d2,[o("a",f2,d(a(c)("editor.settings.claude.download")),1),o("small",null,d(a(c)("editor.settings.claude.upload")),1)])])])])}}}),m2={class:"panel",id:"installer"},b2={class:"panel-head"},v2={class:"tx"},g2={class:"eyebrow"},_2={id:"install-title"},y2={key:0},w2=["aria-label"],k2={class:"boards"},$2={class:"board"},x2={class:"board"},S2={class:"field"},C2={class:"f-label",for:"friendly_name"},T2=["placeholder"],E2={class:"node-line"},A2={id:"node-preview"},P2={key:0,class:"field",id:"node-label"},O2={class:"f-label",for:"node-name"},I2={key:1,id:"wifi-fields",class:"wifi"},L2={class:"hint",id:"wifi-status"},M2={key:0,class:"field",id:"wifi-ssid-label"},R2={class:"f-label",for:"wifi_ssid"},N2={key:1,class:"field",id:"wifi-password-label"},F2={class:"f-label",for:"wifi_password"},D2={class:"field"},U2={class:"f-label",for:"install-target"},j2={key:0,value:"usb"},H2=["value"],V2={value:"download"},W2={value:""},B2={id:"target-hint"},K2={key:2,class:"hint",id:"install-note"},q2={class:"actions"},z2=["disabled"],Y2={id:"install-status",class:"status-line error",role:"status"},G2={key:1,id:"install-progress",class:"card"},J2={class:"progress-head"},X2={key:0,class:"spin",id:"progress-spin"},Z2={id:"progress-title"},Q2={id:"progress-detail"},ew={key:0,id:"install-download",class:"card",style:{background:"var(--surface-2)"}},tw=["href","download"],nw={class:"steps",id:"download-steps"},sw={key:1,id:"install-result",class:"field"},iw={class:"key-box"},ow={class:"steps",id:"install-steps"},lw=["open"],aw={id:"install-log",class:"log"},rw={class:"actions"},cw="https://web.esphome.io/?dashboard_install",uw=Me({__name:"InstallerView",setup(e){const t=Bn({board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),n=Bn({view:"setup",file:null,friendly:"",board:"cyd",target:"",apiKey:null,nodeEdited:!1,jobState:null,picked:!1,action:null}),s=ke(!1),i=ke(null),l=ke(null),r=ke([]),u=ke(""),f=ke(""),h=ke(!1),p=ke(!1),b=ke(null);let v=0;function y(X){return X.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^[^a-z]+/,"").slice(0,30).replace(/-+$/,"")||"screen"}function M(X){const K=X.replace(/^\/dev\/serial\/by-id\/usb-/,"").replace(/-if\d+(-port\d+)?$/,"").replace(/_/g," ");return`USB · ${K===X?X.replace(/^\/dev\//,""):K}`}St(()=>t.friendly_name,()=>{n.nodeEdited||(t.name=y(t.friendly_name))});const E=$(()=>t.name||"…"),x=$(()=>i.value?.ports||[]),O=$(()=>i.value?.wifi),C=$(()=>O.value?.state==="new"||O.value?.state==="missing"),F=$(()=>O.value?.missing||[]),T=$(()=>c(O.value?.state==="new"?"editor.installer.wifi.new":"editor.installer.wifi.missing")),V=$(()=>O.value?.state==="ready"?c("editor.installer.wifi.ready"):O.value?.state==="invalid"?c("editor.installer.wifi.invalid"):""),L=$(()=>c(t.target==="usb"?"editor.installer.target.usb":t.target==="download"?"editor.installer.target.download":t.target?x.value.length>1?"editor.installer.target.several":"editor.installer.target.once":"editor.installer.target.later")),k=$(()=>t.target==="download"?c("editor.firmware.build_download"):t.target?c("editor.installer.install"):c("editor.installer.save_profile")),A=$(()=>i.value?.job?.state==="running"&&!(n.file&&i.value.job.file===n.file)),z=$(()=>h.value||O.value?.state==="invalid"||t.target==="usb"||!!t.target&&(A.value||!i.value?.available));function P(){const X=t.target;(X==="download"||X===""?n.picked:x.value.includes(X))||(t.target=x.value[0]||"usb")}async function ge(){let X;try{X=await Rt("firmware")}catch(we){u.value=we.message;return}i.value=X;const K=X.job,Te=K&&n.file&&K.file===n.file;if(Te&&(n.jobState=K.state),n.view==="setup"){if(Te&&K.state==="running"){G(K,X.logs||[]);return}P(),u.value=A.value?c("editor.installer.busy",{file:K.file}):!X.available&&t.target?c("editor.installer.no_cli"):V.value}else n.view==="progress"&&Te&&(l.value=K,r.value=X.logs||[],K.state!=="running"&&K.state!=="success"&&(p.value=!0))}function G(X,K){n.view="progress",n.jobState=X.state,n.action=X.action,l.value=X,r.value=K}const ie=$(()=>l.value?.state==="running"),be=$(()=>n.view==="done"||l.value?.state==="success"),se=$(()=>n.action==="download"),ue=$(()=>c(n.view==="done"?"editor.installer.title.saved":ie.value?"editor.installer.title.running":be.value?se.value?"editor.installer.title.ready":"editor.installer.title.done":"editor.installer.title.failed")),ye=$(()=>n.view==="done"?c("editor.installer.progress.saved",{file:n.file}):ie.value?l.value?.stage==="upload"?c("editor.installer.progress.writing",{name:n.friendly}):c("editor.installer.progress.building"):be.value?se.value?c("editor.installer.progress.ready",{name:n.friendly}):c("editor.installer.progress.installed",{name:n.friendly}):c(se.value?"editor.installer.progress.build_failed":"editor.installer.progress.install_failed")),$e=$(()=>n.view==="done"?c("editor.installer.detail.saved"):ie.value?l.value?.stage==="upload"?c("editor.installer.detail.uploading"):c(se.value?"editor.installer.detail.building_download":"editor.installer.detail.building"):be.value?se.value?c("editor.installer.detail.downloaded"):c(n.board==="cyd"?"editor.installer.detail.booted_cyd":"editor.installer.detail.booted"):r.value.filter(X=>/error/i.test(X)).pop()||r.value.filter(X=>/failed/i.test(X)).pop()||c("editor.installer.detail.see_log")),Ye=$(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.file||"")}/download`,name:(n.file||"").replace(/\.yaml$/,"")+".factory.bin"}));async function le(X){const K=X.target;if(n.nodeEdited||(t.name=y(t.friendly_name)),!!K.reportValidity()){h.value=!0,f.value="";try{const Te={board:t.board,friendly_name:t.friendly_name,name:t.name,target:t.target};C.value&&(F.value.includes("wifi_ssid")&&(Te.wifi_ssid=t.wifi_ssid),F.value.includes("wifi_password")&&(Te.wifi_password=t.wifi_password));const we=await ft("firmware/profiles","POST",Te);Object.assign(n,{file:we.file,apiKey:we.api_key,friendly:t.friendly_name.trim(),board:t.board,target:t.target}),t.wifi_password="",we.job?G(we.job,[]):n.view="done"}catch(Te){f.value=Te.message}finally{h.value=!1}}}async function ee(){try{if(!se.value){const{ports:K}=await Rt("firmware");!K.includes(n.target)&&K.length===1&&(n.target=K[0])}const X=await ft("firmware/jobs","POST",se.value?{file:n.file,action:"download"}:{file:n.file,action:"install",target:n.target});G(X,[])}catch(X){Ce(X.message)}}function ae(){Object.assign(n,{view:"setup",file:null,apiKey:null,nodeEdited:!1,jobState:null,target:"",picked:!1,action:null}),Object.assign(t,{board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),s.value=!1,l.value=null,r.value=[],f.value="",u.value="",p.value=!1,ge()}function de(){n.view==="progress"&&n.jobState!=="running"&&(n.view="done"),Ve("")}return Tn(()=>{ge(),v=window.setInterval(ge,3e3)}),os(()=>clearInterval(v)),(X,K)=>{const Te=Hs("i18n-t");return g(),_("div",m2,[o("div",b2,[o("div",v2,[o("span",g2,d(a(c)("editor.nav.new_screen")),1),o("h1",_2,d(n.view==="setup"?a(c)("editor.installer.title.setup"):ue.value),1),n.view==="setup"?(g(),_("p",y2,d(a(c)("editor.installer.intro")),1)):H("",!0)]),o("button",{type:"button",class:"btn quiet",id:"close-install","aria-label":a(c)("editor.common.close"),onClick:de},d(a(c)("editor.common.back")),9,w2)]),n.view==="setup"?(g(),_("form",{key:0,id:"install-form",class:"card",onSubmit:At(le,["prevent"])},[o("fieldset",null,[o("legend",null,d(a(c)("editor.installer.board")),1),o("div",k2,[o("label",$2,[Ae(o("input",{type:"radio",name:"board",value:"cyd","onUpdate:modelValue":K[0]||(K[0]=we=>t.board=we)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_cyd")),1),K[13]||(K[13]=o("small",null,"ESP32-2432S028 · 320 × 240",-1))])]),o("label",x2,[Ae(o("input",{type:"radio",name:"board",value:"guition","onUpdate:modelValue":K[1]||(K[1]=we=>t.board=we)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_guition")),1),K[14]||(K[14]=o("small",null,"ESP32-S3-4848S040 · 480 × 480 · GT911",-1))])])])]),o("div",S2,[o("label",C2,d(a(c)("editor.installer.name")),1),Ae(o("input",{id:"friendly_name",name:"friendly_name","onUpdate:modelValue":K[2]||(K[2]=we=>t.friendly_name=we),required:"",maxlength:"60",placeholder:a(c)("editor.installer.name_placeholder"),autocomplete:"off"},null,8,T2),[[Xe,t.friendly_name]]),o("small",E2,[Re(d(a(c)("editor.installer.device_name"))+" ",1),o("code",A2,d(E.value),1),o("button",{type:"button",class:"btn link mini",id:"edit-node",onClick:K[3]||(K[3]=we=>{n.nodeEdited=!0,s.value=!0})},d(a(c)("editor.installer.customize")),1)]),o("small",null,d(a(c)("editor.installer.name_hint")),1)]),s.value?(g(),_("div",P2,[o("label",O2,d(a(c)("editor.installer.device_name")),1),Ae(o("input",{id:"node-name",name:"name","onUpdate:modelValue":K[4]||(K[4]=we=>t.name=we),pattern:"[a-z][a-z0-9\\-]{0,29}",maxlength:"30",autocomplete:"off",onInput:K[5]||(K[5]=we=>n.nodeEdited=!0)},null,544),[[Xe,t.name]]),o("small",null,d(a(c)("editor.installer.device_name_hint")),1)])):H("",!0),C.value?(g(),_("fieldset",I2,[o("legend",null,d(a(c)("editor.installer.wifi.title")),1),o("p",L2,d(T.value),1),F.value.includes("wifi_ssid")?(g(),_("div",M2,[o("label",R2,d(a(c)("editor.installer.wifi.ssid")),1),Ae(o("input",{id:"wifi_ssid",name:"wifi_ssid","onUpdate:modelValue":K[6]||(K[6]=we=>t.wifi_ssid=we),autocomplete:"off"},null,512),[[Xe,t.wifi_ssid]])])):H("",!0),F.value.includes("wifi_password")?(g(),_("div",N2,[o("label",F2,d(a(c)("editor.installer.wifi.password")),1),Ae(o("input",{id:"wifi_password",name:"wifi_password",type:"password","onUpdate:modelValue":K[7]||(K[7]=we=>t.wifi_password=we),autocomplete:"new-password"},null,512),[[Xe,t.wifi_password]])])):H("",!0)])):H("",!0),o("div",D2,[o("label",U2,d(a(c)("editor.installer.install_via")),1),Ae(o("select",{id:"install-target",name:"target","onUpdate:modelValue":K[8]||(K[8]=we=>t.target=we),onChange:K[9]||(K[9]=we=>{n.picked=!0,ge()})},[x.value.length?H("",!0):(g(),_("option",j2,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(B,null,he(x.value,we=>(g(),_("option",{key:we,value:we},d(M(we)),9,H2))),128)),o("option",V2,d(a(c)("editor.firmware.download_target")),1),o("option",W2,d(a(c)("editor.installer.later")),1)],544),[[jn,t.target]]),o("small",B2,d(L.value),1)]),u.value?(g(),_("p",K2,d(u.value),1)):H("",!0),o("div",q2,[o("button",{type:"submit",class:"btn primary",id:"install-go",disabled:z.value},d(k.value),9,z2),o("span",Y2,d(f.value),1)])],32)):(g(),_("div",G2,[o("div",J2,[ie.value?(g(),_("span",X2)):(g(),_("span",{key:1,class:me(["outcome",be.value?"ok":"bad"]),id:"progress-mark"},d(be.value?"✓":"✕"),3)),o("strong",Z2,d(ye.value),1)]),o("p",Q2,d($e.value),1),be.value&&se.value&&n.view!=="done"?(g(),_("div",ew,[o("a",{class:"btn primary",id:"download-firmware",href:Ye.value.href,download:Ye.value.name},d(a(c)("editor.firmware.download_file",{name:Ye.value.name})),9,tw),o("ol",nw,[o("li",null,[te(Te,{keypath:"editor.installer.download_steps.plug",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.installer.download_steps.plug_bold")),1)]),_:1})]),o("li",null,[te(Te,{keypath:"editor.installer.download_steps.open",scope:"global"},{bold:ne(()=>[o("b",null,[te(Te,{keypath:"editor.installer.download_steps.open_bold",scope:"global"},{esphome_web:ne(()=>[o("a",{href:cw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])]),_:1})]),o("li",null,[te(Te,{keypath:n.board==="cyd"?"editor.installer.download_steps.install_cyd":"editor.installer.download_steps.install",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.installer.download_steps.install_bold")),1)]),file:ne(()=>[Re(d(Ye.value.name),1)]),_:1},8,["keypath"])])]),o("small",null,d(a(c)("editor.installer.download_keep")),1)])):H("",!0),be.value?(g(),_("div",sw,[o("div",iw,[o("span",null,d(a(c)("editor.installer.api_key")),1),o("code",{id:"api-key",ref_key:"keyBox",ref:b},d(n.apiKey||""),513),o("button",{type:"button",class:"btn quiet mini",id:"copy-key",onClick:K[10]||(K[10]=we=>a(Ot)(n.apiKey||"",b.value))},d(a(c)("editor.common.copy")),1)]),o("ol",ow,[o("li",null,[te(Te,{keypath:"editor.installer.pairing.ha",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.installer.pairing.ha_bold")),1)]),name:ne(()=>[Re(d(n.friendly),1)]),_:1}),K[15]||(K[15]=Re()),o("button",{type:"button",class:"btn quiet mini",onClick:K[11]||(K[11]=(...we)=>a(wi)&&a(wi)(...we))},d(a(c)("editor.common.open_integrations")),1)]),o("li",null,[te(Te,{keypath:"editor.installer.pairing.key",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.installer.pairing.key_bold")),1)]),_:1})]),o("li",null,[te(Te,{keypath:"editor.installer.pairing.actions",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.installer.pairing.actions_bold")),1)]),_:1})]),o("li",null,[te(Te,{keypath:"editor.installer.pairing.tiles",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.installer.pairing.tiles_bold")),1)]),_:1})])])])):H("",!0),n.view!=="done"?(g(),_("details",{key:2,id:"install-log-wrap",class:"log-wrap",open:p.value,onToggle:K[12]||(K[12]=we=>p.value=we.target.open)},[o("summary",null,d(a(c)("editor.installer.log")),1),o("pre",aw,d(r.value.join(` -`)),1)],40,lw)):H("",!0),o("div",rw,[!ie.value&&!be.value?(g(),_("button",{key:0,type:"button",class:"btn primary",id:"install-retry",onClick:ee},d(a(c)("editor.installer.retry")),1)):H("",!0),o("button",{type:"button",class:"btn quiet",id:"install-close",onClick:ae},d(be.value?a(c)("editor.installer.another"):a(c)("editor.installer.start_over")),1),o("button",{type:"button",class:me(["btn",be.value?"primary":"quiet"]),onClick:de},d(be.value?a(c)("editor.installer.done"):a(c)("editor.common.close")),3)])]))])}}}),dw={class:"panel",id:"firmware-dialog"},fw={class:"panel-head"},pw={class:"tx"},hw={class:"eyebrow"},mw={class:"card"},bw={class:"card-grid"},vw={class:"field"},gw={class:"f-label",for:"firmware-file"},_w=["value"],yw={class:"field"},ww={class:"f-label",for:"firmware-port"},kw={value:"ota"},$w={key:0,value:"usb"},xw=["value"],Sw={value:"download"},Cw={key:0,class:"field",id:"firmware-host-label"},Tw={class:"f-label",for:"firmware-host"},Ew=["placeholder"],Aw={class:"actions"},Pw=["disabled"],Ow=["disabled"],Iw=["disabled"],Lw={key:0,class:"spin"},Mw={id:"firmware-status",class:"status-line",role:"status"},Rw={key:0,id:"firmware-download",class:"card",style:{background:"var(--surface-2)"}},Nw=["href","download"],Fw={id:"firmware-log",class:"log"},Dw="https://web.esphome.io/?dashboard_install",Uw=Me({__name:"FirmwareView",setup(e){const t=ke(null),n=ke(""),s=ke("ota"),i=ke("");let l=0;async function r(E=!1){try{const x=await Rt("firmware");t.value=x,(E||!n.value)&&(n.value=x.profiles[0]?.file||"");const O=x.ports||[];s.value.startsWith("/")&&!O.includes(s.value)&&(s.value=O[0]||"usb"),s.value==="usb"&&O.length&&(s.value=O[0])}catch(x){Ce(x.message)}}const u=$(()=>t.value?.job?.state==="running"),f=$(()=>!t.value||u.value||!t.value.available||!t.value.profiles?.length),h=$(()=>f.value||s.value==="usb"),p=$(()=>t.value?.ports||[]),b=$(()=>t.value?t.value.available?t.value.job?`${t.value.job.file} · ${t.value.job.action} · ${t.value.job.state}`:c("editor.firmware.choose"):c("editor.firmware.no_cli"):c("editor.common.loading")),v=$(()=>s.value==="download"&&!!n.value&&!!t.value?.downloads?.includes(n.value)),y=$(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.value)}/download`,name:n.value.replace(/\.yaml$/,"")+".factory.bin"}));async function M(E){try{await ft("firmware/jobs","POST",{file:n.value,action:E==="validate"?"validate":E==="build"?"build":s.value==="download"?"download":"install",target:s.value==="ota"?i.value.trim():s.value==="download"?"":s.value}),await r()}catch(x){Ce(x.message)}}return Tn(()=>{r(!0),l=window.setInterval(()=>r(),3e3)}),os(()=>clearInterval(l)),(E,x)=>{const O=Hs("i18n-t");return g(),_("div",dw,[o("div",fw,[o("div",pw,[o("span",hw,d(a(c)("editor.nav.firmware")),1),o("h1",null,d(a(c)("editor.firmware.title")),1),te(O,{keypath:"editor.firmware.intro",tag:"p",scope:"global"},{ota:ne(()=>[o("b",null,d(a(c)("editor.firmware.ota")),1)]),download:ne(()=>[o("b",null,d(a(c)("editor.firmware.download")),1)]),check:ne(()=>[o("b",null,d(a(c)("editor.firmware.check")),1)]),build:ne(()=>[o("b",null,d(a(c)("editor.firmware.build")),1)]),install:ne(()=>[o("b",null,d(a(c)("editor.firmware.install")),1)]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-firmware",onClick:x[0]||(x[0]=C=>a(Ve)(""))},d(a(c)("editor.common.back")),1)]),o("div",mw,[o("div",bw,[o("div",vw,[o("label",gw,d(a(c)("editor.firmware.profile")),1),Ae(o("select",{id:"firmware-file","onUpdate:modelValue":x[1]||(x[1]=C=>n.value=C)},[(g(!0),_(B,null,he(t.value?.profiles||[],C=>(g(),_("option",{key:C.file,value:C.file},d(C.file),9,_w))),128))],512),[[jn,n.value]])]),o("div",yw,[o("label",ww,d(a(c)("editor.firmware.install_to")),1),Ae(o("select",{id:"firmware-port","onUpdate:modelValue":x[2]||(x[2]=C=>s.value=C)},[o("option",kw,d(a(c)("editor.firmware.ota")),1),p.value.length?H("",!0):(g(),_("option",$w,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(B,null,he(p.value,C=>(g(),_("option",{key:C,value:C},d(C),9,xw))),128)),o("option",Sw,d(a(c)("editor.firmware.download_target")),1)],512),[[jn,s.value]])]),s.value==="ota"?(g(),_("div",Cw,[o("label",Tw,d(a(c)("editor.firmware.host")),1),Ae(o("input",{id:"firmware-host","onUpdate:modelValue":x[3]||(x[3]=C=>i.value=C),placeholder:n.value?n.value.replace(/\.yaml$/,".local"):"screen-livingroom.local"},null,8,Ew),[[Xe,i.value]])])):H("",!0)]),o("div",Aw,[o("button",{type:"button",class:"btn quiet",id:"firmware-validate",disabled:f.value,onClick:x[4]||(x[4]=C=>M("validate"))},d(a(c)("editor.firmware.check")),9,Pw),o("button",{type:"button",class:"btn quiet",id:"firmware-build",disabled:f.value,onClick:x[5]||(x[5]=C=>M("build"))},d(a(c)("editor.firmware.build")),9,Ow),o("button",{type:"button",class:"btn primary",id:"firmware-install",disabled:h.value,onClick:x[6]||(x[6]=C=>M("install"))},d(s.value==="download"?a(c)("editor.firmware.build_download"):a(c)("editor.firmware.install")),9,Iw),u.value?(g(),_("span",Lw)):H("",!0)]),o("p",Mw,d(b.value),1),v.value?(g(),_("div",Rw,[o("a",{class:"btn primary",id:"firmware-download-link",href:y.value.href,download:y.value.name},d(a(c)("editor.firmware.download_file",{name:y.value.name})),9,Nw),te(O,{keypath:"editor.firmware.download_how",tag:"small",scope:"global"},{esphome_web:ne(()=>[o("a",{href:Dw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])):H("",!0)]),o("pre",Fw,d((t.value?.logs||[]).join(` -`)),1)])}}}),jw={class:"panel wide alerts",id:"alerts-dialog"},Hw={class:"panel-head"},Vw={class:"tx"},Ww={class:"eyebrow"},Bw={key:0,class:"hint"},Kw={class:"alert-hero"},qw={class:"alert-mock",id:"alert-mock","aria-hidden":"true"},zw={class:"mdi alert-mock-icon",id:"alert-mock-icon"},Yw={id:"alert-mock-title"},Gw={id:"alert-mock-subtitle"},Jw={class:"fake",id:"alert-mock-button"},Xw=["aria-label"],Zw=["data-jump","onClick"],Qw={id:"alerts-try",class:"card"},ek={class:"field"},tk={class:"f-label",for:"try-screen"},nk={value:"all"},sk=["value","disabled"],ik={class:"field"},ok={class:"f-label",for:"try-title"},lk={class:"field"},ak={class:"f-label",for:"try-subtitle"},rk={class:"field"},ck={class:"f-label",for:"try-icon"},uk={id:"try-icons"},dk=["value"],fk={class:"field"},pk={class:"f-label",for:"try-color"},hk={value:""},mk=["value"],bk={class:"field"},vk={class:"f-label",for:"try-button"},gk={class:"field"},_k={class:"f-label",for:"try-timeout"},yk={class:"check field"},wk={class:"actions field wide"},kk=["disabled"],$k={class:"status-line",id:"try-result",role:"status"},xk={id:"alerts-screens",class:"card"},Sk={id:"alerts-min-firmware"},Ck={id:"alerts-screen-list",class:"options"},Tk={key:0,class:"hint"},Ek={class:"alert-screen-head"},Ak={class:"copy-label"},Pk=["onClick"],Ok={id:"alerts-howto",class:"card"},Ik={class:"steps"},Lk={class:"field"},Mk={class:"f-label",for:"alerts-example-screen"},Rk=["value"],Nk={key:0,value:""},Fk={class:"copy-line"},Dk={id:"alerts-example"},Uk={id:"alerts-all",class:"card"},jk={id:"alerts-all-event"},Hk={id:"alerts-all-dismiss"},Vk={class:"copy-line"},Wk={id:"alerts-all-example"},Bk={id:"alerts-fields",class:"card"},Kk={class:"table-scroll"},qk={id:"alerts-field-table"},zk={key:0},Yk={id:"alerts-icons",class:"card"},Gk={class:"subhead"},Jk={class:"chips",id:"alerts-suggested"},Xk=["onClick"],Zk={class:"mdi"},Qk={class:"field"},e3={class:"f-label",for:"alerts-icon-search"},t3=["placeholder"],n3={id:"alerts-icon-groups"},s3={class:"subhead"},i3={class:"alert-icon-grid"},o3=["title","onClick"],l3={class:"mdi"},a3={key:0},r3={key:0,class:"hint"},c3={id:"alerts-colors",class:"card"},u3={class:"swatches",id:"alerts-swatches"},d3=["onClick"],f3={id:"alerts-behaviour",class:"card"},p3={class:"alerts-list"},h3={id:"alerts-events",class:"card"},m3={id:"alerts-event-name"},b3={class:"table-scroll"},v3={id:"alerts-ending-table"},g3={class:"subhead"},_3={class:"copy-line"},y3={id:"alerts-wait-example"},w3={id:"alerts-tips",class:"card"},k3={class:"alerts-list"},$3=Me({__name:"AlertsView",setup(e){const t=$(()=>m.inventory.alerts),n=Bn({screen:"all",title:c("editor.alerts.example.title"),subtitle:c("editor.alerts.example.subtitle"),icon:"doorbell",color:"orange",button_text:c("editor.alerts.example.button"),timeout:30,flash:!0}),s=ke(!1),i=ke(""),l=$(()=>m.inventory.screens.filter(k=>Wn(k)&&k.online));async function r(){s.value=!0,i.value="";try{const{screen:k,...A}=n,z=await Pm(k,A),P=m.inventory.screens.find(G=>G.id===k)?.name,ge=k==="all"?c("editor.alerts.try.sent_all",z.sent):P?c("editor.alerts.try.sent_to",{name:P}):c("editor.alerts.try.sent_one");i.value=z.sent?[ge,z.skipped?c("editor.alerts.try.skipped",z.skipped):"",z.unusable?.length?c("editor.alerts.try.left_empty",{fields:z.unusable.join(", ")}):""].filter(Boolean).join(" "):c("editor.alerts.try.nothing",{version:t.value?.min_firmware||"0.2.31"})}catch(k){i.value=k.message}finally{s.value=!1}}const u=$(()=>m.inventory.icons),f=ke(""),h=ke(""),p=k=>`"${String(k).replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,b=k=>k.type==="string"?/^[a-z][a-z0-9-]*$/.test(k.example)?k.example:p(k.example):k.example===!0?"true":k.example===!1?"false":String(k.example),v=$(()=>m.inventory.screens.filter(k=>k.alert_action)),y=$(()=>f.value||v.value[0]?.alert_action||""),M=$(()=>{const k=(t.value?.fields||[]).map(A=>` ${A.name}: ${b(A)}`);return`action: ${y.value||"esphome._show_alert"} -data: -${k.join(` -`)}`}),E=$(()=>["# Doorbell: show the alert and wait until someone presses the button.","actions:",` - action: ${y.value||"esphome._show_alert"}`," data:",' title: "Someone is at the door"',' subtitle: "Door 3, back"'," icon: doorbell"," color: orange",' button_text: "Coming"'," timeout: 0"," flash: true"," - wait_for_trigger:"," - trigger: event",` event_type: ${t.value?.event||"esphome.screen_alert"}`," event_data:"," action: ok",' timeout: "00:05:00"'," - if:"," - condition: template",' value_template: "{{ wait.trigger is not none }}"'," then:"," - action: notify.notify"," data:",' message: "Someone is coming to the door."'].join(` -`)),x=$(()=>{const k=(t.value?.fields||[]).map(z=>` ${z.name}: ${b(z)}`),A=t.value?.camera;return A&&k.push(` # ${A.name}: ${A.example} # a Guition shows its picture on the card`),`event: ${t.value?.broadcast?.show||"esp_screens_show_alert"} -event_data: -${k.join(` -`)}`}),O=$(()=>{if(!t.value||!u.value)return[];const k=h.value.trim().toLowerCase();return[...u.value.groups,{label:c("editor.alerts.icons.extra"),icons:t.value.extra_icons}].map(z=>({label:z.label,icons:z.icons.filter(P=>!k||P.name.includes(k)||(P.label||"").toLowerCase().includes(k))})).filter(z=>z.icons.length)}),C=$(()=>t.value?.suggested_icons?.find(k=>k.name==="doorbell")),F=$(()=>t.value?.colors?.find(k=>k.name==="orange")),T=k=>["string","int","bool"].includes(k)?c(`editor.alerts.fields.types.${k}`):k;function V(k){document.getElementById(k)?.scrollIntoView({behavior:"smooth",block:"start"})}const L=["alerts-try","alerts-screens","alerts-howto","alerts-all","alerts-fields","alerts-icons","alerts-colors","alerts-behaviour","alerts-events","alerts-tips"];return(k,A)=>{const z=Hs("i18n-t");return g(),_("div",jw,[o("div",Hw,[o("div",Vw,[o("span",Ww,d(a(c)("editor.alerts.eyebrow")),1),o("h1",null,d(a(c)("editor.alerts.title")),1),te(z,{keypath:"editor.alerts.intro",tag:"p",scope:"global"},{action:ne(()=>[...A[15]||(A[15]=[o("code",null,"show_alert",-1)])]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-alerts",onClick:A[0]||(A[0]=P=>a(Ve)(""))},d(a(c)("editor.common.back")),1)]),t.value?(g(),_(B,{key:1},[o("div",Kw,[o("div",qw,[o("div",{class:"alert-mock-card",style:je(F.value?{background:F.value.color}:void 0)},[o("span",zw,d(C.value?a(Pe)(C.value.cp):""),1),o("strong",Yw,d(a(c)("editor.alerts.example.title")),1),o("span",Gw,d(a(c)("editor.alerts.example.subtitle")),1),o("span",Jw,d(a(c)("editor.alerts.example.button")),1)],4)]),o("nav",{class:"alerts-nav","aria-label":a(c)("editor.alerts.sections")},[(g(),_(B,null,he(L,P=>o("button",{key:P,type:"button","data-jump":P,onClick:ge=>V(P)},d(a(c)(`editor.alerts.nav.${P.slice(7)}`)),9,Zw)),64))],8,Xw)]),o("section",Qw,[o("h2",null,d(a(c)("editor.alerts.nav.try")),1),o("p",null,d(a(c)("editor.alerts.try.text")),1),o("form",{class:"try-grid",onSubmit:At(r,["prevent"])},[o("div",ek,[o("label",tk,d(a(c)("editor.alerts.try.screen")),1),Ae(o("select",{id:"try-screen","onUpdate:modelValue":A[1]||(A[1]=P=>n.screen=P)},[o("option",nk,d(a(c)("editor.alerts.try.all",{ready:l.value.length})),1),(g(!0),_(B,null,he(a(m).inventory.screens,P=>(g(),_("option",{key:P.id,value:P.id,disabled:!a(Wn)(P)||!P.online},d(a(Wn)(P)&&P.online?P.name:a(c)("editor.alerts.try.not_ready",{name:P.name})),9,sk))),128))],512),[[jn,n.screen]])]),o("div",ik,[o("label",ok,d(a(c)("editor.alerts.try.title")),1),Ae(o("input",{id:"try-title","onUpdate:modelValue":A[2]||(A[2]=P=>n.title=P),maxlength:"64"},null,512),[[Xe,n.title]])]),o("div",lk,[o("label",ak,d(a(c)("editor.alerts.try.subtitle")),1),Ae(o("input",{id:"try-subtitle","onUpdate:modelValue":A[3]||(A[3]=P=>n.subtitle=P),maxlength:"240"},null,512),[[Xe,n.subtitle]])]),o("div",rk,[o("label",ck,d(a(c)("editor.alerts.try.icon")),1),Ae(o("input",{id:"try-icon","onUpdate:modelValue":A[4]||(A[4]=P=>n.icon=P),list:"try-icons",placeholder:"doorbell"},null,512),[[Xe,n.icon]]),o("datalist",uk,[(g(!0),_(B,null,he(t.value.suggested_icons,P=>(g(),_("option",{key:P.name,value:P.name},d(P.label||P.name),9,dk))),128))])]),o("div",fk,[o("label",pk,d(a(c)("editor.alerts.try.color")),1),Ae(o("select",{id:"try-color","onUpdate:modelValue":A[5]||(A[5]=P=>n.color=P)},[o("option",hk,d(a(c)("editor.alerts.white")),1),(g(!0),_(B,null,he(t.value.colors,P=>(g(),_("option",{key:P.name,value:P.name},d(P.label),9,mk))),128))],512),[[jn,n.color]])]),o("div",bk,[o("label",vk,d(a(c)("editor.alerts.try.button")),1),Ae(o("input",{id:"try-button","onUpdate:modelValue":A[6]||(A[6]=P=>n.button_text=P),maxlength:"16"},null,512),[[Xe,n.button_text]])]),o("div",gk,[o("label",_k,d(a(c)("editor.alerts.try.timeout")),1),Ae(o("input",{id:"try-timeout","onUpdate:modelValue":A[7]||(A[7]=P=>n.timeout=P),type:"number",min:"0",max:"86400"},null,512),[[Xe,n.timeout,void 0,{number:!0}]])]),o("label",yk,[Ae(o("input",{type:"checkbox",id:"try-flash","onUpdate:modelValue":A[8]||(A[8]=P=>n.flash=P)},null,512),[[Xf,n.flash]]),o("span",null,[Re(d(a(c)("editor.alerts.try.flash")),1),o("small",null,d(a(c)("editor.alerts.try.flash_hint")),1)])]),o("div",wk,[o("button",{type:"submit",class:"btn primary",id:"try-send",disabled:s.value||!l.value.length},d(s.value?a(c)("editor.alerts.try.sending"):a(c)("editor.alerts.try.send")),9,kk),o("span",$k,d(i.value),1)])],32)]),o("section",xk,[o("h2",null,d(a(c)("editor.alerts.nav.screens")),1),te(z,{keypath:"editor.alerts.screens.text",tag:"p",scope:"global"},{version:ne(()=>[o("code",Sk,d(t.value.min_firmware),1)]),_:1}),o("div",Ck,[a(m).inventory.screens.length?H("",!0):(g(),_("p",Tk,d(a(c)("editor.alerts.screens.none")),1)),(g(!0),_(B,null,he(a(m).inventory.screens,P=>(g(),_("div",{key:P.id,class:"alert-screen"},[o("div",Ek,[o("strong",null,d(P.name),1),o("span",{class:me(["chip",a(cn)(a(ss)(P),t.value.min_firmware)&&P.alert_action?"good":"update"])},d(a(cn)(a(ss)(P),t.value.min_firmware)&&P.alert_action?a(c)("editor.alerts.screens.ready",{version:P.firmware}):P.alert_action?a(c)("editor.alerts.screens.update",{version:P.firmware||a(c)("editor.common.unknown")}):a(c)("editor.alerts.screens.unknown")),3)]),(g(!0),_(B,null,he([[a(c)("editor.alerts.screens.show"),P.alert_action],[a(c)("editor.alerts.screens.dismiss"),P.dismiss_action]],([ge,G])=>(g(),_("div",{key:ge,class:"copy-line"},[o("span",Ak,d(ge),1),o("code",null,d(G||"esphome._show_alert"),1),G?(g(),_("button",{key:0,type:"button",class:"btn quiet mini",onClick:ie=>a(Ot)(G,void 0,"action_name")},d(a(c)("editor.common.copy")),9,Pk)):H("",!0)]))),128))]))),128))])]),o("section",Ok,[o("h2",null,d(a(c)("editor.alerts.nav.howto")),1),o("ol",Ik,[te(z,{keypath:"editor.alerts.howto.add",tag:"li",scope:"global"},{add:ne(()=>[o("b",null,d(a(c)("editor.alerts.howto.add_bold")),1)]),esphome:ne(()=>[...A[16]||(A[16]=[o("b",null,"ESPHome",-1)])]),device:ne(()=>[o("i",null,d(a(c)("editor.alerts.howto.device")),1)]),_:1}),te(z,{keypath:"editor.alerts.howto.fields",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.howto.fields_bold")),1)]),empty:ne(()=>[...A[17]||(A[17]=[o("code",null,'""',-1)])]),zero:ne(()=>[...A[18]||(A[18]=[o("code",null,"0",-1)])]),_:1}),te(z,{keypath:"editor.alerts.howto.yaml",tag:"li",scope:"global"},{edit:ne(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1})]),o("div",Lk,[o("label",Mk,d(a(c)("editor.alerts.howto.example_for")),1),Ae(o("select",{id:"alerts-example-screen","onUpdate:modelValue":A[9]||(A[9]=P=>f.value=P),style:{"max-width":"360px"}},[(g(!0),_(B,null,he(v.value,P=>(g(),_("option",{key:P.id,value:P.alert_action},d(P.name),9,Rk))),128)),v.value.length?H("",!0):(g(),_("option",Nk,d(a(c)("editor.alerts.howto.no_screen")),1))],512),[[jn,f.value]])]),o("div",Fk,[o("pre",Dk,d(M.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-example-copy",onClick:A[10]||(A[10]=P=>a(Ot)(M.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",Uk,[o("h2",null,d(a(c)("editor.alerts.all.title")),1),te(z,{keypath:"editor.alerts.all.text",tag:"p",scope:"global"},{show:ne(()=>[o("code",jk,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),dismiss:ne(()=>[o("code",Hk,d(t.value.broadcast?.dismiss||"esp_screens_dismiss_alert"),1)]),event:ne(()=>[o("b",null,d(a(c)("editor.alerts.all.event")),1)]),edit:ne(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1}),o("div",Vk,[o("pre",Wk,d(x.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-all-copy",onClick:A[11]||(A[11]=P=>a(Ot)(x.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",Bk,[o("h2",null,d(a(c)("editor.alerts.nav.fields")),1),o("p",null,d(a(c)("editor.alerts.fields.text")),1),o("div",Kk,[o("table",qk,[o("tr",null,[o("th",null,d(a(c)("editor.alerts.fields.field")),1),o("th",null,d(a(c)("editor.alerts.fields.type")),1),o("th",null,d(a(c)("editor.alerts.fields.what")),1),o("th",null,d(a(c)("editor.alerts.fields.example")),1),o("th",null,d(a(c)("editor.alerts.fields.limit")),1)]),(g(!0),_(B,null,he(t.value.fields,P=>(g(),_("tr",{key:P.name},[o("td",null,[o("code",null,d(P.name),1),o("small",null,d(P.label),1)]),o("td",null,d(T(P.type)),1),o("td",null,d(P.help),1),o("td",null,[o("code",null,d(typeof P.example=="string"?P.example:String(P.example)),1)]),o("td",null,d(t.value.limits.cyd[P.name]?a(c)("editor.alerts.fields.bytes",{cyd:t.value.limits.cyd[P.name],guition:t.value.limits.guition[P.name]}):P.type==="int"?a(c)("editor.alerts.fields.seconds"):"—"),1)]))),128)),t.value.camera?(g(),_("tr",zk,[o("td",null,[o("code",null,d(t.value.camera.name),1),o("small",null,d(t.value.camera.label),1)]),o("td",null,d(a(c)("editor.alerts.fields.types.entity")),1),o("td",null,d(t.value.camera.help),1),o("td",null,[o("code",null,d(t.value.camera.example),1)]),o("td",null,d(a(c)("editor.alerts.fields.camera_limit")),1)])):H("",!0)])])]),o("section",Yk,[o("h2",null,d(a(c)("editor.alerts.nav.icons")),1),te(z,{keypath:"editor.alerts.icons.text",tag:"p",scope:"global"},{field:ne(()=>[...A[19]||(A[19]=[o("code",null,"icon",-1)])]),example:ne(()=>[...A[20]||(A[20]=[o("code",null,"doorbell",-1)])]),mdi:ne(()=>[...A[21]||(A[21]=[o("code",null,"mdi:doorbell",-1)])]),hex:ne(()=>[...A[22]||(A[22]=[o("code",null,"F12E6",-1)])]),_:1}),o("p",Gk,d(a(c)("editor.alerts.icons.handy")),1),o("div",Jk,[(g(!0),_(B,null,he(t.value.suggested_icons,P=>(g(),_("button",{key:P.name,type:"button",class:"chip",onClick:ge=>a(Ot)(P.name,void 0,"icon_name")},[o("span",Zk,d(a(Pe)(P.cp)),1),o("code",null,d(P.name),1)],8,Xk))),128))]),o("div",Qk,[o("label",e3,d(a(c)("editor.alerts.icons.search_label")),1),Ae(o("input",{id:"alerts-icon-search","onUpdate:modelValue":A[12]||(A[12]=P=>h.value=P),type:"search",placeholder:a(c)("editor.alerts.icons.search"),autocomplete:"off"},null,8,t3),[[Xe,h.value]])]),o("div",n3,[(g(!0),_(B,null,he(O.value,P=>(g(),_("div",{key:P.label,class:"field"},[o("p",s3,d(P.label)+" · "+d(P.icons.length),1),o("div",i3,[(g(!0),_(B,null,he(P.icons,ge=>(g(),_("button",{key:ge.name,type:"button",class:"alert-icon",title:a(c)("editor.alerts.icons.copy",{name:ge.name}),onClick:G=>a(Ot)(ge.name,void 0,"icon_name")},[o("span",l3,d(a(Pe)(ge.cp)),1),o("code",null,d(ge.name),1),ge.label?(g(),_("small",a3,d(ge.label),1)):H("",!0)],8,o3))),128))])]))),128)),O.value.length?H("",!0):(g(),_("p",r3,d(a(c)("editor.alerts.icons.none",{query:h.value,fallback:t.value.fallback_icon})),1))])]),o("section",c3,[o("h2",null,d(a(c)("editor.alerts.nav.colors")),1),te(z,{keypath:"editor.alerts.colors.text",tag:"p",scope:"global"},{field:ne(()=>[...A[23]||(A[23]=[o("code",null,"color",-1)])]),_:1}),o("div",u3,[o("button",{type:"button",class:"swatch",onClick:A[13]||(A[13]=P=>a(Ot)("",void 0,"empty_color"))},[A[25]||(A[25]=o("i",{style:{background:"#ffffff"}},null,-1)),o("span",null,[A[24]||(A[24]=o("code",null,"empty",-1)),o("small",null,d(a(c)("editor.alerts.white")),1)])]),(g(!0),_(B,null,he(t.value.colors,P=>(g(),_("button",{key:P.name,type:"button",class:"swatch",onClick:ge=>a(Ot)(P.name,void 0,"color_name")},[o("i",{style:je({background:P.color})},null,4),o("span",null,[o("code",null,d(P.name),1),o("small",null,d(P.label)+" · "+d(P.color),1)])],8,d3))),128))])]),o("section",f3,[o("h2",null,d(a(c)("editor.alerts.nav.behaviour")),1),o("ul",p3,[te(z,{keypath:"editor.alerts.behaviour.wakes",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.wakes_bold")),1)]),_:1}),te(z,{keypath:"editor.alerts.behaviour.on",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.on_bold")),1)]),_:1}),te(z,{keypath:"editor.alerts.behaviour.timeout",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.timeout_bold")),1)]),zero:ne(()=>[...A[26]||(A[26]=[o("code",null,"timeout: 0",-1)])]),minute:ne(()=>[...A[27]||(A[27]=[o("code",null,"timeout: 60",-1)])]),_:1}),te(z,{keypath:"editor.alerts.behaviour.blinking",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.blinking_bold")),1)]),flash:ne(()=>[...A[28]||(A[28]=[o("code",null,"flash: true",-1)])]),_:1}),te(z,{keypath:"editor.alerts.behaviour.replacing",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.replacing_bold")),1)]),replaced:ne(()=>[...A[29]||(A[29]=[o("code",null,"replaced",-1)])]),_:1}),te(z,{keypath:"editor.alerts.behaviour.closing",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.closing_bold")),1)]),dismiss:ne(()=>[...A[30]||(A[30]=[o("code",null,"dismiss_alert",-1)])]),_:1}),te(z,{keypath:"editor.alerts.behaviour.beside",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.beside_bold")),1)]),_:1})])]),o("section",h3,[o("h2",null,d(a(c)("editor.alerts.nav.events")),1),te(z,{keypath:"editor.alerts.events.text",tag:"p",scope:"global"},{event:ne(()=>[o("code",m3,d(t.value.event),1)]),action:ne(()=>[...A[31]||(A[31]=[o("code",null,"action",-1)])]),title:ne(()=>[...A[32]||(A[32]=[o("code",null,"title",-1)])]),screen:ne(()=>[...A[33]||(A[33]=[o("code",null,"screen",-1)])]),device_id:ne(()=>[...A[34]||(A[34]=[o("code",null,"device_id",-1)])]),_:1}),o("div",b3,[o("table",v3,[o("tr",null,[A[35]||(A[35]=o("th",null,"action",-1)),o("th",null,d(a(c)("editor.alerts.events.when")),1)]),(g(!0),_(B,null,he(t.value.endings,P=>(g(),_("tr",{key:P.action},[o("td",null,[o("code",null,d(P.action),1)]),o("td",null,d(P.label),1)]))),128))])]),o("p",g3,d(a(c)("editor.alerts.events.wait")),1),o("div",_3,[o("pre",y3,d(E.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-wait-copy",onClick:A[14]||(A[14]=P=>a(Ot)(E.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",w3,[o("h2",null,d(a(c)("editor.alerts.nav.tips")),1),o("ul",k3,[te(z,{keypath:"editor.alerts.tips.color",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.tips.color_bold")),1)]),_:1}),te(z,{keypath:"editor.alerts.tips.short",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.tips.short_bold")),1)]),_:1}),te(z,{keypath:"editor.alerts.tips.button",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.tips.button_bold")),1)]),_:1}),te(z,{keypath:"editor.alerts.tips.resolve",tag:"li",scope:"global"},{dismiss:ne(()=>[...A[36]||(A[36]=[o("code",null,"dismiss_alert",-1)])]),_:1}),te(z,{keypath:"editor.alerts.tips.every",tag:"li",scope:"global"},{event:ne(()=>[o("code",null,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),screen:ne(()=>[...A[37]||(A[37]=[o("code",null,"screen",-1)])]),_:1}),te(z,{keypath:"editor.alerts.tips.claude",tag:"li",scope:"global"},{bold:ne(()=>[o("b",null,d(a(c)("editor.alerts.tips.claude_bold")),1)]),_:1})])])],64)):(g(),_("p",Bw,d(a(c)("editor.alerts.loading")),1))])}}}),x3={class:"panel",id:"override-dialog"},S3={class:"panel-head"},C3={class:"tx"},T3={class:"eyebrow"},E3={id:"override-title"},A3={class:"notice"},P3={class:"mdi"},O3={class:"file-row"},I3={id:"override-file"},L3={class:"yaml-editor",id:"yaml-editor-wrap"},M3=["aria-label"],R3={class:"actions"},N3={id:"override-count",class:"hint"},F3={class:"actions"},D3=["disabled"],U3=["disabled"],j3=`# Hardware-specific changes for this screen. -# This file is kept when the shared firmware package updates. -# Do not add esphome:, api:, ota:, wifi: or packages: here. - -# Example: a CYD with the ST7789V display controller. -# "!extend" changes the display the shared package already defines; -# a bare id would add a second, incomplete display and fail the build. -display: - - id: !extend my_display - model: ST7789V -`,H3=Me({__name:"OverrideView",setup(e){const t=$(()=>m.overrideProfile),n=ke(""),s=ke(""),i=ke(!1),l=ke(c("editor.common.loading")),r=ke(""),u=ke(!1),f=ke(null),h=ke(null),p=$(()=>n.value.split(` -`).length),b=$(()=>Array.from({length:p.value},(L,k)=>k+1).join(` -`)),v=$(()=>`${c("editor.override.characters",n.value.length)} · ${c("editor.override.lines",p.value)}`);let y=!0;function M(L,k=""){l.value=L,r.value=k}async function E(){if(!t.value){M(c("editor.override.no_profile"),"error");return}M(c("editor.common.loading"));try{const L=await Rt(`firmware/profiles/${encodeURIComponent(t.value)}/override`);s.value=L.override_file,i.value=!!L.attached,n.value=L.exists&&L.content!==`{} -`?L.content:"",M(c(L.attached?"editor.override.attached":"editor.override.not_attached"))}catch(L){M(L.message,"error")}}async function x(L=!1){if(!(!t.value||u.value)){u.value=!0,M(c("editor.override.saving"));try{const k=await ft(`firmware/profiles/${encodeURIComponent(t.value)}/override`,"PUT",{content:n.value});if(s.value=k.override_file,i.value=!0,!L){M(c("editor.override.saved"),"ok"),Ce(c("editor.override.saved_toast"));return}M(c("editor.override.checking")),await ft("firmware/jobs","POST",{file:t.value,action:"validate"}),O()}catch(k){M(k.message,"error")}finally{u.value=!1}}}function O(){const L=Date.now(),k=t.value,A=async()=>{if(!(!y||t.value!==k))try{const z=await Rt("firmware"),P=z.job;if(P&&P.file===k&&P.state==="running")M(P.stage?c("editor.override.checking_stage",{stage:P.stage}):c("editor.override.checking_profile"));else if(P&&P.file===k&&P.state==="success"){M(c("editor.override.valid"),"ok");return}else if(P&&P.file===k&&P.state==="failed"){const ge=(z.logs||[]).filter(G=>/error|failed/i.test(G)).pop();M(ge||c("editor.override.rejected"),"error");return}Date.now()-L<72e5&&setTimeout(A,1200)}catch(z){M(z.message,"error")}};A()}function C(){(!n.value.trim()||confirm(c("editor.override.confirm_example")))&&(n.value=j3,M(c("editor.override.example_loaded")),f.value?.focus())}function F(){(!n.value.trim()||confirm(c("editor.override.confirm_clear")))&&(n.value="",M(c("editor.override.cleared")),f.value?.focus())}function T(L){const k=f.value;if(L.key==="Tab"){L.preventDefault();const A=k.selectionStart,z=k.selectionEnd;k.setRangeText(" ",A,z,"end"),n.value=k.value}else(L.ctrlKey||L.metaKey)&&L.key.toLowerCase()==="s"&&(L.preventDefault(),x(!1))}function V(){h.value&&f.value&&(h.value.scrollTop=f.value.scrollTop)}return Tn(E),os(()=>{y=!1}),(L,k)=>(g(),_("div",x3,[o("div",S3,[o("div",C3,[o("span",T3,d(a(c)("editor.override.eyebrow")),1),o("h1",E3,d(a(m).overrideFriendly?a(c)("editor.override.title_named",{name:a(m).overrideFriendly}):a(c)("editor.override.title")),1),o("p",null,d(a(c)("editor.override.intro")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-override",onClick:k[0]||(k[0]=A=>a(Ve)(""))},d(a(c)("editor.common.back")),1)]),o("div",A3,[o("span",P3,d(a(Pe)("F0493")),1),o("div",null,[o("strong",null,d(a(c)("editor.override.safe_title")),1),o("span",null,d(a(c)("editor.override.safe_text")),1)])]),o("div",O3,[o("code",I3,d(s.value||t.value||""),1),o("span",{id:"override-state",class:me(["chip",{good:i.value}])},d(i.value?a(c)("editor.override.active"):a(c)("editor.override.ready")),3)]),o("div",L3,[o("div",{ref_key:"gutter",ref:h,class:"yaml-gutter",id:"override-gutter","aria-hidden":"true"},d(b.value),513),Ae(o("textarea",{ref_key:"editor",ref:f,id:"override-editor","onUpdate:modelValue":k[1]||(k[1]=A=>n.value=A),spellcheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","aria-label":a(c)("editor.override.editor_label"),placeholder:`# Example -display: - - id: !extend my_display - model: ST7789V`,onKeydown:T,onScroll:V},null,40,M3),[[Xe,n.value]])]),o("div",R3,[o("button",{type:"button",class:"btn quiet mini",id:"override-example",onClick:C},d(a(c)("editor.override.use_example")),1),o("button",{type:"button",class:"btn quiet mini",id:"override-empty",onClick:F},d(a(c)("editor.override.clear")),1),o("span",N3,d(v.value),1)]),o("p",{id:"override-status",class:me(["status-line",r.value]),role:"status"},d(l.value),3),o("div",F3,[o("button",{type:"button",class:"btn quiet",id:"override-check",disabled:u.value||!t.value,onClick:k[2]||(k[2]=A=>x(!0))},d(a(c)("editor.override.save_check")),9,D3),o("button",{type:"button",class:"btn primary",id:"override-save",disabled:u.value||!t.value,onClick:k[3]||(k[3]=A=>x(!1))},d(a(c)("editor.override.save")),9,U3)])]))}}),V3={class:"main"},W3=Me({__name:"App",setup(e){const t=$(()=>kt.value==="#settings"?h2:kt.value==="#new-screen"?uw:kt.value==="#firmware"?Uw:kt.value==="#alerts"?$3:kt.value==="#override"?H3:_t.value&&m.layout?b1:_1);function n(s){(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="k"&&(s.preventDefault(),m.palette=!m.palette)}return Tn(()=>document.addEventListener("keydown",n)),os(()=>document.removeEventListener("keydown",n)),(s,i)=>(g(),_("div",{class:me(["app",{dragging:a(m).drag.active}])},[te(Ob),o("main",V3,[(g(),it(Hd(t.value)))]),te(Lb),te(Kb)],2))}});Jh().finally(()=>{ip(W3).use(ls).mount("#app"),Gm()}); diff --git a/screen_manager/app/static/assets/index-CRR4xeFy.js b/screen_manager/app/static/assets/index-CRR4xeFy.js new file mode 100644 index 0000000..a1bea2b --- /dev/null +++ b/screen_manager/app/static/assets/index-CRR4xeFy.js @@ -0,0 +1,28 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const r of l.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(i){if(i.ep)return;i.ep=!0;const l=n(i);fetch(i.href,l)}})();function Go(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Re={},Dn=[],Bt=()=>{},hr=()=>!1,Ei=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ai=e=>e.startsWith("onUpdate:"),et=Object.assign,Jo=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Nu=Object.prototype.hasOwnProperty,Te=(e,t)=>Nu.call(e,t),pe=Array.isArray,_n=e=>Hs(e)==="[object Map]",on=e=>Hs(e)==="[object Set]",Il=e=>Hs(e)==="[object Date]",_e=e=>typeof e=="function",We=e=>typeof e=="string",qt=e=>typeof e=="symbol",Pe=e=>e!==null&&typeof e=="object",mr=e=>(Pe(e)||_e(e))&&_e(e.then)&&_e(e.catch),br=Object.prototype.toString,Hs=e=>br.call(e),Fu=e=>Hs(e).slice(8,-1),vr=e=>Hs(e)==="[object Object]",Xo=e=>We(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ys=Go(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pi=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Du=/-\w/g,ct=Pi(e=>e.replace(Du,t=>t.slice(1).toUpperCase())),Uu=/\B([A-Z])/g,Tn=Pi(e=>e.replace(Uu,"-$1").toLowerCase()),Oi=Pi(e=>e.charAt(0).toUpperCase()+e.slice(1)),Yi=Pi(e=>e?`on${Oi(e)}`:""),Wt=(e,t)=>!Object.is(e,t),si=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ii=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ll;const Li=()=>Ll||(Ll=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ue(e){if(pe(e)){const t={};for(let n=0;nn.startsWith("/*")?"":n).split(ju).forEach(n=>{if(n){const s=n.split(Hu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function me(e){let t="";if(We(e))t=e;else if(pe(e))for(let n=0;nMt(n,t))}const yr=e=>!!(e&&e.__v_isRef===!0),d=e=>We(e)?e:e==null?"":pe(e)||Pe(e)&&(e.toString===br||!_e(e.toString))?yr(e)?d(e.value):JSON.stringify(e,wr,2):String(e),wr=(e,t)=>yr(t)?wr(e,t.value):_n(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],l)=>(n[Gi(s,l)+" =>"]=i,n),{})}:on(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Gi(n))}:qt(t)?Gi(t):Pe(t)&&!pe(t)&&!vr(t)?String(t):t,Gi=(e,t="")=>{var n;return qt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Ge;class kr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Ge&&(Ge.active?(this.parent=Ge,this.index=(Ge.scopes||(Ge.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Ge===this)Ge=this.prevScope;else{let t=Ge;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(ks){let t=ks;for(ks=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ws;){let t=ws;for(ws=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Tr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Er(e){let t,n=e.depsTail,s=n;for(;s;){const i=s.prevDep;s.version===-1?(s===n&&(n=i),tl(s),Ju(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=i}e.deps=t,e.depsTail=n}function _o(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ar(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ar(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ts)||(e.globalVersion=Ts,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!_o(e))))return;e.flags|=2;const t=e.dep,n=Ne,s=Lt;Ne=e,Lt=!0;try{Tr(e);const i=e.fn(e._value);(t.version===0||Wt(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{Ne=n,Lt=s,Er(e),e.flags&=-3}}function tl(e,t=!1){const{dep:n,prevSub:s,nextSub:i}=e;if(s&&(s.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let l=n.computed.deps;l;l=l.nextDep)tl(l,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ju(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Lt=!0;const Pr=[];function ln(){Pr.push(Lt),Lt=!1}function an(){const e=Pr.pop();Lt=e===void 0?!0:e}function Nl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Ne;Ne=void 0;try{t()}finally{Ne=n}}}let Ts=0;class Xu{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class nl{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Ne||!Lt||Ne===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Ne)n=this.activeLink=new Xu(Ne,this),Ne.deps?(n.prevDep=Ne.depsTail,Ne.depsTail.nextDep=n,Ne.depsTail=n):Ne.deps=Ne.depsTail=n,Or(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Ne.depsTail,n.nextDep=void 0,Ne.depsTail.nextDep=n,Ne.depsTail=n,Ne.deps===n&&(Ne.deps=s)}return n}trigger(t){this.version++,Ts++,this.notify(t)}notify(t){Qo();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{el()}}}function Or(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Or(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const yo=new WeakMap,jn=Symbol(""),wo=Symbol(""),Es=Symbol("");function nt(e,t,n){if(Lt&&Ne){let s=yo.get(e);s||yo.set(e,s=new Map);let i=s.get(n);i||(s.set(n,i=new nl),i.map=s,i.key=n),i.track()}}function Zt(e,t,n,s,i,l){const r=yo.get(e);if(!r){Ts++;return}const u=f=>{f&&f.trigger()};if(Qo(),t==="clear")r.forEach(u);else{const f=pe(e),h=f&&Xo(n);if(f&&n==="length"){const p=Number(s);r.forEach((b,v)=>{(v==="length"||v===Es||!qt(v)&&v>=p)&&u(b)})}else switch((n!==void 0||r.has(void 0))&&u(r.get(n)),h&&u(r.get(Es)),t){case"add":f?h&&u(r.get("length")):(u(r.get(jn)),_n(e)&&u(r.get(wo)));break;case"delete":f||(u(r.get(jn)),_n(e)&&u(r.get(wo)));break;case"set":_n(e)&&u(r.get(jn));break}}el()}function Yn(e){const t=xe(e);return t===e||(nt(t,"iterate",Es),St(e))?t:zt(e)?yn(e)?t.map(n=>kn(At(n))):t.map(kn):t.map(At)}function Mi(e){return nt(e=xe(e),"iterate",Es),e}function Ht(e,t){return zt(e)?kn(yn(e)?At(t):t):At(t)}const Zu={__proto__:null,[Symbol.iterator](){return Xi(this,Symbol.iterator,e=>Ht(this,e))},concat(...e){return Yn(this).concat(...e.map(t=>pe(t)?Yn(t):t))},entries(){return Xi(this,"entries",e=>(e[1]=Ht(this,e[1]),e))},every(e,t){return Yt(this,"every",e,t,void 0,arguments)},filter(e,t){return Yt(this,"filter",e,t,n=>n.map(s=>Ht(this,s)),arguments)},find(e,t){return Yt(this,"find",e,t,n=>Ht(this,n),arguments)},findIndex(e,t){return Yt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Yt(this,"findLast",e,t,n=>Ht(this,n),arguments)},findLastIndex(e,t){return Yt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Yt(this,"forEach",e,t,void 0,arguments)},includes(...e){return Zi(this,"includes",e)},indexOf(...e){return Zi(this,"indexOf",e)},join(e){return Yn(this).join(e)},lastIndexOf(...e){return Zi(this,"lastIndexOf",e)},map(e,t){return Yt(this,"map",e,t,void 0,arguments)},pop(){return ds(this,"pop")},push(...e){return ds(this,"push",e)},reduce(e,...t){return Fl(this,"reduce",e,t)},reduceRight(e,...t){return Fl(this,"reduceRight",e,t)},shift(){return ds(this,"shift")},some(e,t){return Yt(this,"some",e,t,void 0,arguments)},splice(...e){return ds(this,"splice",e)},toReversed(){return Yn(this).toReversed()},toSorted(e){return Yn(this).toSorted(e)},toSpliced(...e){return Yn(this).toSpliced(...e)},unshift(...e){return ds(this,"unshift",e)},values(){return Xi(this,"values",e=>Ht(this,e))}};function Xi(e,t,n){const s=Mi(e),i=s[t]();return s!==e&&!St(e)&&(i._next=i.next,i.next=()=>{const l=i._next();return l.done||(l.value=n(l.value)),l}),i}const Qu=Array.prototype;function Yt(e,t,n,s,i,l){const r=Mi(e),u=r!==e&&!St(e),f=r[t];if(f!==Qu[t]){const b=f.apply(e,l);return u?At(b):b}let h=n;r!==e&&(u?h=function(b,v){return n.call(this,Ht(e,b),v,e)}:n.length>2&&(h=function(b,v){return n.call(this,b,v,e)}));const p=f.call(r,h,s);return u&&i?i(p):p}function Fl(e,t,n,s){const i=Mi(e),l=i!==e&&!St(e);let r=n,u=!1;i!==e&&(l?(u=s.length===0,r=function(h,p,b){return u&&(u=!1,h=Ht(e,h)),n.call(this,h,Ht(e,p),b,e)}):n.length>3&&(r=function(h,p,b){return n.call(this,h,p,b,e)}));const f=i[t](r,...s);return u?Ht(e,f):f}function Zi(e,t,n){const s=xe(e);nt(s,"iterate",Es);const i=s[t](...n);return(i===-1||i===!1)&&ol(n[0])?(n[0]=xe(n[0]),s[t](...n)):i}function ds(e,t,n=[]){ln(),Qo();const s=xe(e)[t].apply(e,n);return el(),an(),s}const ed=Go("__proto__,__v_isRef,__isVue"),Ir=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(qt));function td(e){qt(e)||(e=String(e));const t=xe(this);return nt(t,"has",e),t.hasOwnProperty(e)}class Lr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const i=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return l;if(n==="__v_raw")return s===(i?l?dd:Fr:l?Nr:Rr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=pe(t);if(!i){let f;if(r&&(f=Zu[n]))return f;if(n==="hasOwnProperty")return td}const u=Reflect.get(t,n,Qe(t)?t:s);if((qt(n)?Ir.has(n):ed(n))||(i||nt(t,"get",n),l))return u;if(Qe(u)){const f=r&&Xo(n)?u:u.value;return i&&Pe(f)?$o(f):f}return Pe(u)?i?$o(u):qn(u):u}}class Mr extends Lr{constructor(t=!1){super(!1,t)}set(t,n,s,i){let l=t[n];const r=pe(t)&&Xo(n);if(!this._isShallow){const h=zt(l);if(!St(s)&&!zt(s)&&(l=xe(l),s=xe(s)),!r&&Qe(l)&&!Qe(s))return h||(l.value=s),!0}const u=r?Number(n)e,Gs=e=>Reflect.getPrototypeOf(e);function ld(e,t,n){return function(...s){const i=this.__v_raw,l=xe(i),r=_n(l),u=e==="entries"||e===Symbol.iterator&&r,f=e==="keys"&&r,h=i[e](...s),p=n?ko:t?kn:At;return!t&&nt(l,"iterate",f?wo:jn),et(Object.create(h),{next(){const{value:b,done:v}=h.next();return v?{value:b,done:v}:{value:u?[p(b[0]),p(b[1])]:p(b),done:v}}})}}function Js(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function ad(e,t){const n={get(i){const l=this.__v_raw,r=xe(l),u=xe(i);e||(Wt(i,u)&&nt(r,"get",i),nt(r,"get",u));const{has:f}=Gs(r),h=t?ko:e?kn:At;if(f.call(r,i))return h(l.get(i));if(f.call(r,u))return h(l.get(u));l!==r&&l.get(i)},get size(){const i=this.__v_raw;return!e&&nt(xe(i),"iterate",jn),i.size},has(i){const l=this.__v_raw,r=xe(l),u=xe(i);return e||(Wt(i,u)&&nt(r,"has",i),nt(r,"has",u)),i===u?l.has(i):l.has(i)||l.has(u)},forEach(i,l){const r=this,u=r.__v_raw,f=xe(u),h=t?ko:e?kn:At;return!e&&nt(f,"iterate",jn),u.forEach((p,b)=>i.call(l,h(p),h(b),r))}};return et(n,e?{add:Js("add"),set:Js("set"),delete:Js("delete"),clear:Js("clear")}:{add(i){const l=xe(this),r=Gs(l),u=xe(i),f=!t&&!St(i)&&!zt(i)?u:i;return r.has.call(l,f)||Wt(i,f)&&r.has.call(l,i)||Wt(u,f)&&r.has.call(l,u)||(l.add(f),Zt(l,"add",f,f)),this},set(i,l){!t&&!St(l)&&!zt(l)&&(l=xe(l));const r=xe(this),{has:u,get:f}=Gs(r);let h=u.call(r,i);h||(i=xe(i),h=u.call(r,i));const p=f.call(r,i);return r.set(i,l),h?Wt(l,p)&&Zt(r,"set",i,l):Zt(r,"add",i,l),this},delete(i){const l=xe(this),{has:r,get:u}=Gs(l);let f=r.call(l,i);f||(i=xe(i),f=r.call(l,i)),u&&u.call(l,i);const h=l.delete(i);return f&&Zt(l,"delete",i,void 0),h},clear(){const i=xe(this),l=i.size!==0,r=i.clear();return l&&Zt(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=ld(i,e,t)}),n}function sl(e,t){const n=ad(e,t);return(s,i,l)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(Te(n,i)&&i in s?n:s,i,l)}const rd={get:sl(!1,!1)},cd={get:sl(!1,!0)},ud={get:sl(!0,!1)};const Rr=new WeakMap,Nr=new WeakMap,Fr=new WeakMap,dd=new WeakMap;function fd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qn(e){return zt(e)?e:il(e,!1,sd,rd,Rr)}function pd(e){return il(e,!1,od,cd,Nr)}function $o(e){return il(e,!0,id,ud,Fr)}function il(e,t,n,s,i){if(!Pe(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const l=i.get(e);if(l)return l;const r=fd(Fu(e));if(r===0)return e;const u=new Proxy(e,r===2?s:n);return i.set(e,u),u}function yn(e){return zt(e)?yn(e.__v_raw):!!(e&&e.__v_isReactive)}function zt(e){return!!(e&&e.__v_isReadonly)}function St(e){return!!(e&&e.__v_isShallow)}function ol(e){return e?!!e.__v_raw:!1}function xe(e){const t=e&&e.__v_raw;return t?xe(t):e}function hd(e){return!Te(e,"__v_skip")&&Object.isExtensible(e)&&gr(e,"__v_skip",!0),e}const At=e=>Pe(e)?qn(e):e,kn=e=>Pe(e)?$o(e):e;function Qe(e){return e?e.__v_isRef===!0:!1}function ke(e){return Dr(e,!1)}function md(e){return Dr(e,!0)}function Dr(e,t){return Qe(e)?e:new bd(e,t)}class bd{constructor(t,n){this.dep=new nl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:xe(t),this._value=n?t:At(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||St(t)||zt(t);t=s?t:xe(t),Wt(t,n)&&(this._rawValue=t,this._value=s?t:At(t),this.dep.trigger())}}function a(e){return Qe(e)?e.value:e}const vd={get:(e,t,n)=>t==="__v_raw"?e:a(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return Qe(i)&&!Qe(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Ur(e){return yn(e)?e:new Proxy(e,vd)}class gd{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new nl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ts-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Ne!==this)return Cr(this,!0),!0}get value(){const t=this.dep.track();return Ar(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function _d(e,t,n=!1){let s,i;return _e(e)?s=e:(s=e.get,i=e.set),new gd(s,i,n)}const Xs={},ai=new WeakMap;let Nn;function yd(e,t=!1,n=Nn){if(n){let s=ai.get(n);s||ai.set(n,s=[]),s.push(e)}}function wd(e,t,n=Re){const{immediate:s,deep:i,once:l,scheduler:r,augmentJob:u,call:f}=n,h=C=>i?C:St(C)||i===!1||i===0?Qt(C,1):Qt(C);let p,b,v,y,I=!1,T=!1;if(Qe(e)?(b=()=>e.value,I=St(e)):yn(e)?(b=()=>h(e),I=!0):pe(e)?(T=!0,I=e.some(C=>yn(C)||St(C)),b=()=>e.map(C=>{if(Qe(C))return C.value;if(yn(C))return h(C);if(_e(C))return f?f(C,2):C()})):_e(e)?t?b=f?()=>f(e,2):e:b=()=>{if(v){ln();try{v()}finally{an()}}const C=Nn;Nn=p;try{return f?f(e,3,[y]):e(y)}finally{Nn=C}}:b=Bt,t&&i){const C=b,B=i===!0?1/0:i;b=()=>Qt(C(),B)}const $=$r(),A=()=>{p.stop(),$&&$.active&&Jo($.effects,p)};if(l&&t){const C=t;t=(...B)=>{const O=C(...B);return A(),O}}let S=T?new Array(e.length).fill(Xs):Xs;const D=C=>{if(!(!(p.flags&1)||!p.dirty&&!C))if(t){const B=p.run();if(C||i||I||(T?B.some((O,E)=>Wt(O,S[E])):Wt(B,S))){v&&v();const O=Nn;Nn=p;try{const E=[B,S===Xs?void 0:T&&S[0]===Xs?[]:S,y];S=B,f?f(t,3,E):t(...E)}finally{Nn=O}}}else p.run()};return u&&u(D),p=new xr(b),p.scheduler=r?()=>r(D,!1):D,y=C=>yd(C,!1,p),v=p.onStop=()=>{const C=ai.get(p);if(C){if(f)f(C,4);else for(const B of C)B();ai.delete(p)}},t?s?D(!0):S=p.run():r?r(D.bind(null,!0),!0):p.run(),A.pause=p.pause.bind(p),A.resume=p.resume.bind(p),A.stop=A,A}function Qt(e,t=1/0,n){if(t<=0||!Pe(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Qe(e))Qt(e.value,t,n);else if(pe(e))for(let s=0;s{Qt(s,t,n)});else if(vr(e)){for(const s in e)Qt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Qt(e[s],t,n)}return e}function Vs(e,t,n,s){try{return s?e(...s):e()}catch(i){Ri(i,t,n)}}function Rt(e,t,n,s){if(_e(e)){const i=Vs(e,t,n,s);return i&&mr(i)&&i.catch(l=>{Ri(l,t,n)}),i}if(pe(e)){const i=[];for(let l=0;l>>1,i=rt[s],l=As(i);l=As(n)?rt.push(e):rt.splice($d(t),0,e),e.flags|=1,Hr()}}function Hr(){ri||(ri=jr.then(Wr))}function xd(e){if(!pe(e))bn&&e.id===-1?bn.splice(Gn+1,0,e):e.flags&1||(Zn.push(e),e.flags|=1);else for(let t=0;tAs(n)-As(s));if(Zn.length=0,bn){for(let n=0;ne.id==null?e.flags&2?-1:1/0:e.id;function Wr(e){try{for(Ut=0;Ut{s._d&&fi(-1);const l=ci(t),r=Hn.length;let u;try{u=e(...i)}finally{for(let f=Hn.length;f>r;f--)bc();ci(l),s._d&&fi(1)}return u};return s._n=!0,s._c=!0,s._d=!0,s}function Ee(e,t){if(mt===null)return e;const n=ji(mt),s=e.dirs||(e.dirs=[]);for(let i=0;i1)return n&&_e(t)?t.call(s&&s.proxy):t}}const Cd=Symbol.for("v-scx"),Td=()=>$s(Cd);function Ct(e,t,n){return Kr(e,t,n)}function Kr(e,t,n=Re){const{immediate:s,deep:i,flush:l,once:r}=n,u=et({},n),f=t&&s||!t&&l!=="post";let h;if(Is){if(l==="sync"){const y=Td();h=y.__watcherHandles||(y.__watcherHandles=[])}else if(!f){const y=()=>{};return y.stop=Bt,y.resume=Bt,y.pause=Bt,y}}const p=st;u.call=(y,I,T)=>Rt(y,p,I,T);let b=!1;l==="post"?u.scheduler=y=>{dt(y,p&&p.suspense)}:l!=="sync"&&(b=!0,u.scheduler=(y,I)=>{I?y():ll(y)}),u.augmentJob=y=>{t&&(y.flags|=4),b&&(y.flags|=2,p&&(y.id=p.uid,y.i=p))};const v=wd(e,t,u);return Is&&(h?h.push(v):f&&v()),v}function Ed(e,t,n){const s=this.proxy,i=We(e)?e.includes(".")?qr(s,e):()=>s[e]:e.bind(s,s);let l;_e(t)?l=t:(l=t.handler,n=t);const r=Ks(this),u=Kr(i,l.bind(s),n);return r(),u}function qr(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;ie.__isTeleport,Qi=Symbol("_leaveCb");function Pd(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==rn){t=n;break}}return t}function zr(e){if(!rl(e))return Fi(e.type)&&e.children?Pd(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&_e(n.default))return n.default()}}function al(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;al(Fi(n.type)&&zr(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Le(e,t){return _e(e)?et({name:e.name},t,{setup:e}):e}function Yr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function Ul(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}const ui=new WeakMap;function xs(e,t,n,s,i=!1){if(pe(e)){e.forEach((T,$)=>xs(T,t&&(pe(t)?t[$]:t),n,s,i));return}if(Ss(s)&&!i){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&xs(e,t,n,s.component.subTree);return}const l=s.shapeFlag&4?ji(s.component):s.el,r=i?null:l,{i:u,r:f}=e,h=t&&t.r,p=u.refs===Re?u.refs={}:u.refs,b=u.setupState,v=xe(b),y=b===Re?hr:T=>Ul(p,T)?!1:Te(v,T),I=(T,$)=>!($&&Ul(p,$));if(h!=null&&h!==f){if(jl(t),We(h))p[h]=null,y(h)&&(b[h]=null);else if(Qe(h)){const T=t;I(h,T.k)&&(h.value=null),T.k&&(p[T.k]=null)}}if(_e(f))Vs(f,u,12,[r,p]);else{const T=We(f),$=Qe(f);if(T||$){const A=()=>{if(e.f){const S=T?y(f)?b[f]:p[f]:I()||!e.k?f.value:p[e.k];if(i)pe(S)&&Jo(S,l);else if(pe(S))S.includes(l)||S.push(l);else if(T)p[f]=[l],y(f)&&(b[f]=p[f]);else{const D=[l];I(f,e.k)&&(f.value=D),e.k&&(p[e.k]=D)}}else T?(p[f]=r,y(f)&&(b[f]=r)):$&&(I(f,e.k)&&(f.value=r),e.k&&(p[e.k]=r))};if(r){const S=()=>{A(),ui.delete(e)};S.id=-1,ui.set(e,S),dt(S,n)}else jl(e),A()}}}function jl(e){const t=ui.get(e);t&&(t.flags|=8,ui.delete(e))}Li().requestIdleCallback;Li().cancelIdleCallback;const Ss=e=>!!e.type.__asyncLoader,rl=e=>e.type.__isKeepAlive;function Od(e,t){Gr(e,"a",t)}function Id(e,t){Gr(e,"da",t)}function Gr(e,t,n=st){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Di(t,s,n),n){let i=n.parent;for(;i&&i.parent;)rl(i.parent.vnode)&&Ld(s,t,n,i),i=i.parent}}function Ld(e,t,n,s){const i=Di(t,e,s,!0);cl(()=>{Jo(s[t],i)},n)}function Di(e,t,n=st,s=!1){if(n){const i=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...r)=>{ln();const u=Ks(n),f=Rt(t,n,e,r);return u(),an(),f});return s?i.unshift(l):i.push(l),l}}const fn=e=>(t,n=st)=>{(!Is||e==="sp")&&Di(e,(...s)=>t(...s),n)},Md=fn("bm"),En=fn("m"),Rd=fn("bu"),Nd=fn("u"),rs=fn("bum"),cl=fn("um"),Fd=fn("sp"),Dd=fn("rtg"),Ud=fn("rtc");function jd(e,t=st){Di("ec",e,t)}const Jr="components";function Ws(e,t){return Zr(Jr,e,!0,t)||e}const Xr=Symbol.for("v-ndc");function Hd(e){return We(e)?Zr(Jr,e,!1)||e:e||Xr}function Zr(e,t,n=!0,s=!1){const i=mt||st;if(i){const l=i.type;{const u=Sf(l,!1);if(u&&(u===t||u===ct(t)||u===Oi(ct(t))))return l}const r=Hl(i[e]||l[e],t)||Hl(i.appContext[e],t);return!r&&s?l:r}}function Hl(e,t){return e&&(e[t]||e[ct(t)]||e[Oi(ct(t))])}function he(e,t,n,s){let i;const l=n,r=pe(e);if(r||We(e)){const u=r&&yn(e);let f=!1,h=!1;u&&(f=!St(e),h=zt(e),e=Mi(e)),i=new Array(e.length);for(let p=0,b=e.length;pt(u,f,void 0,l));else{const u=Object.keys(e);i=new Array(u.length);for(let f=0,h=u.length;fe?yc(e)?ji(e):xo(e.parent):null,Cs=et(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>xo(e.parent),$root:e=>xo(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ec(e),$forceUpdate:e=>e.f||(e.f=()=>{ll(e.update)}),$nextTick:e=>e.n||(e.n=Ni.bind(e.proxy)),$watch:e=>Ed.bind(e)}),eo=(e,t)=>e!==Re&&!e.__isScriptSetup&&Te(e,t),Vd={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:i,props:l,accessCache:r,type:u,appContext:f}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return l[t]}else{if(eo(s,t))return r[t]=1,s[t];if(i!==Re&&Te(i,t))return r[t]=2,i[t];if(Te(l,t))return r[t]=3,l[t];if(n!==Re&&Te(n,t))return r[t]=4,n[t];So&&(r[t]=0)}}const h=Cs[t];let p,b;if(h)return t==="$attrs"&&nt(e.attrs,"get",""),h(e);if((p=u.__cssModules)&&(p=p[t]))return p;if(n!==Re&&Te(n,t))return r[t]=4,n[t];if(b=f.config.globalProperties,Te(b,t))return b[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:l}=e;return eo(i,t)?(i[t]=n,!0):s!==Re&&Te(s,t)?(s[t]=n,!0):Te(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,props:l,type:r}},u){let f;return!!(n[u]||e!==Re&&u[0]!=="$"&&Te(e,u)||eo(t,u)||Te(l,u)||Te(s,u)||Te(Cs,u)||Te(i.config.globalProperties,u)||(f=r.__cssModules)&&f[u])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Te(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vl(e){return pe(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let So=!0;function Wd(e){const t=ec(e),n=e.proxy,s=e.ctx;So=!1,t.beforeCreate&&Wl(t.beforeCreate,e,"bc");const{data:i,computed:l,methods:r,watch:u,provide:f,inject:h,created:p,beforeMount:b,mounted:v,beforeUpdate:y,updated:I,activated:T,deactivated:$,beforeDestroy:A,beforeUnmount:S,destroyed:D,unmounted:C,render:B,renderTracked:O,renderTriggered:E,errorCaptured:L,serverPrefetch:M,expose:U,inheritAttrs:R,components:Y,directives:te,filters:ye}=t;if(h&&Bd(h,s,null),r)for(const ge in r){const we=r[ge];_e(we)&&(s[ge]=we.bind(n))}if(i){const ge=i.call(n,n);Pe(ge)&&(e.data=qn(ge))}if(So=!0,l)for(const ge in l){const we=l[ge],Ye=_e(we)?we.bind(n,n):_e(we.get)?we.get.bind(n,n):Bt,le=!_e(we)&&_e(we.set)?we.set.bind(n):Bt,ee=k({get:Ye,set:le});Object.defineProperty(s,ge,{enumerable:!0,configurable:!0,get:()=>ee.value,set:ce=>ee.value=ce})}if(u)for(const ge in u)Qr(u[ge],s,n,ge);if(f){const ge=_e(f)?f.call(n):f;Reflect.ownKeys(ge).forEach(we=>{Sd(we,ge[we])})}p&&Wl(p,e,"c");function be(ge,we){pe(we)?we.forEach(Ye=>ge(Ye.bind(n))):we&&ge(we.bind(n))}if(be(Md,b),be(En,v),be(Rd,y),be(Nd,I),be(Od,T),be(Id,$),be(jd,L),be(Ud,O),be(Dd,E),be(rs,S),be(cl,C),be(Fd,M),pe(U))if(U.length){const ge=e.exposed||(e.exposed={});U.forEach(we=>{Object.defineProperty(ge,we,{get:()=>n[we],set:Ye=>n[we]=Ye,enumerable:!0})})}else e.exposed||(e.exposed={});B&&e.render===Bt&&(e.render=B),R!=null&&(e.inheritAttrs=R),Y&&(e.components=Y),te&&(e.directives=te),M&&Yr(e)}function Bd(e,t,n=Bt){pe(e)&&(e=Co(e));for(const s in e){const i=e[s];let l;Pe(i)?"default"in i?l=$s(i.from||s,i.default,!0):l=$s(i.from||s):l=$s(i),Qe(l)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>l.value,set:r=>l.value=r}):t[s]=l}}function Wl(e,t,n){Rt(pe(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Qr(e,t,n,s){let i=s.includes(".")?qr(n,s):()=>n[s];if(We(e)){const l=t[e];_e(l)&&Ct(i,l)}else if(_e(e))Ct(i,e.bind(n));else if(Pe(e))if(pe(e))e.forEach(l=>Qr(l,t,n,s));else{const l=_e(e.handler)?e.handler.bind(n):t[e.handler];_e(l)&&Ct(i,l,e)}}function ec(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:l,config:{optionMergeStrategies:r}}=e.appContext,u=l.get(t);let f;return u?f=u:!i.length&&!n&&!s?f=t:(f={},i.length&&i.forEach(h=>di(f,h,r,!0)),di(f,t,r)),Pe(t)&&l.set(t,f),f}function di(e,t,n,s=!1){const{mixins:i,extends:l}=t;l&&di(e,l,n,!0),i&&i.forEach(r=>di(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const u=Kd[r]||n&&n[r];e[r]=u?u(e[r],t[r]):t[r]}return e}const Kd={data:Bl,props:Kl,emits:Kl,methods:ms,computed:ms,beforeCreate:lt,created:lt,beforeMount:lt,mounted:lt,beforeUpdate:lt,updated:lt,beforeDestroy:lt,beforeUnmount:lt,destroyed:lt,unmounted:lt,activated:lt,deactivated:lt,errorCaptured:lt,serverPrefetch:lt,components:ms,directives:ms,watch:zd,provide:Bl,inject:qd};function Bl(e,t){return t?e?function(){return et(_e(e)?e.call(this,this):e,_e(t)?t.call(this,this):t)}:t:e}function qd(e,t){return ms(Co(e),Co(t))}function Co(e){if(pe(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ct(t)}Modifiers`]||e[`${Tn(t)}Modifiers`];function Xd(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Re;let i=n;const l=t.startsWith("update:"),r=l&&Jd(s,t.slice(7));r&&(r.trim&&(i=n.map(p=>We(p)?p.trim():p)),r.number&&(i=i.map(Ii)));let u,f=s[u=Yi(t)]||s[u=Yi(ct(t))];!f&&l&&(f=s[u=Yi(Tn(t))]),f&&Rt(f,e,6,i);const h=s[u+"Once"];if(h){if(!e.emitted)e.emitted={};else if(e.emitted[u])return;e.emitted[u]=!0,Rt(h,e,6,i)}}const Zd=new WeakMap;function nc(e,t,n=!1){const s=n?Zd:t.emitsCache,i=s.get(e);if(i!==void 0)return i;const l=e.emits;let r={},u=!1;if(!_e(e)){const f=h=>{const p=nc(h,t,!0);p&&(u=!0,et(r,p))};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}return!l&&!u?(Pe(e)&&s.set(e,null),null):(pe(l)?l.forEach(f=>r[f]=null):et(r,l),Pe(e)&&s.set(e,r),r)}function Ui(e,t){return!e||!Ei(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),Te(e,t[0].toLowerCase()+t.slice(1))||Te(e,Tn(t))||Te(e,t))}function ql(e){const{type:t,vnode:n,proxy:s,withProxy:i,propsOptions:[l],slots:r,attrs:u,emit:f,render:h,renderCache:p,props:b,data:v,setupState:y,ctx:I,inheritAttrs:T}=e,$=ci(e);let A,S;try{if(n.shapeFlag&4){const C=i||s,B=C;A=Vt(h.call(B,C,p,b,y,v,I)),S=u}else{const C=t;A=Vt(C.length>1?C(b,{attrs:u,slots:r,emit:f}):C(b,null)),S=t.props?u:Qd(u)}}catch(C){Hn.length=0,Ri(C,e,1),A=se(rn)}let D=A;if(S&&T!==!1){const C=Object.keys(S),{shapeFlag:B}=D;C.length&&B&7&&(l&&C.some(Ai)&&(S=ef(S,l)),D=ns(D,S,!1,!0))}if(n.dirs&&(D=ns(D,null,!1,!0),D.dirs=D.dirs?D.dirs.concat(n.dirs):n.dirs),n.transition){const C=Fi(D.type)&&zr(D)||D;al(C,n.transition)}return A=D,ci($),A}const Qd=e=>{let t;for(const n in e)(n==="class"||n==="style"||Ei(n))&&((t||(t={}))[n]=e[n]);return t},ef=(e,t)=>{const n={};for(const s in e)(!Ai(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function tf(e,t,n){const{props:s,children:i,component:l}=e,{props:r,children:u,patchFlag:f}=t,h=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&f>=0){if(f&1024)return!0;if(f&16)return s?zl(s,r,h):!!r;if(f&8){const p=t.dynamicProps;for(let b=0;bObject.create(ic),lc=e=>Object.getPrototypeOf(e)===ic;function sf(e,t,n,s=!1){const i={},l=oc();e.propsDefaults=Object.create(null),ac(e,t,i,l);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);n?e.props=s?i:pd(i):e.type.props?e.props=i:e.props=l,e.attrs=l}function of(e,t,n,s){const{props:i,attrs:l,vnode:{patchFlag:r}}=e,u=xe(i),[f]=e.propsOptions;let h=!1;if((s||r>0)&&!(r&16)){if(r&8){const p=e.vnode.dynamicProps;for(let b=0;b{f=!0;const[v,y]=rc(b,t,!0);et(r,v),y&&u.push(...y)};!n&&t.mixins.length&&t.mixins.forEach(p),e.extends&&p(e.extends),e.mixins&&e.mixins.forEach(p)}if(!l&&!f)return Pe(e)&&s.set(e,Dn),Dn;if(pe(l))for(let p=0;pe==="_"||e==="_ctx"||e==="$stable",dl=e=>pe(e)?e.map(Vt):[Vt(e)],af=(e,t,n)=>{if(t._n)return t;const s=oe((...i)=>dl(t(...i)),n);return s._c=!1,s},cc=(e,t,n)=>{const s=e._ctx;for(const i in e){if(ul(i))continue;const l=e[i];if(_e(l))t[i]=af(i,l,s);else if(l!=null){const r=dl(l);t[i]=()=>r}}},uc=(e,t)=>{const n=dl(t);e.slots.default=()=>n},dc=(e,t,n)=>{for(const s in t)(n||!ul(s))&&(e[s]=t[s])},rf=(e,t,n)=>{const s=e.slots=oc();if(e.vnode.shapeFlag&32){const i=t._;i?(dc(s,t,n),n&&gr(s,"_",i,!0)):cc(t,s)}else t&&uc(e,t)},cf=(e,t,n)=>{const{vnode:s,slots:i}=e;let l=!0,r=Re;if(s.shapeFlag&32){const u=t._;u?n&&u===1?l=!1:dc(i,t,n):(l=!t.$stable,cc(t,i)),r=t}else t&&(uc(e,t),r={default:1});if(l)for(const u in i)!ul(u)&&r[u]==null&&delete i[u]},dt=hf;function uf(e){return df(e)}function df(e,t){const n=Li();n.__VUE__=!0;const{insert:s,remove:i,patchProp:l,createElement:r,createText:u,createComment:f,setText:h,setElementText:p,parentNode:b,nextSibling:v,setScopeId:y=Bt,insertStaticContent:I}=e,T=(w,x,N,q=null,j=null,V=null,X=void 0,J=null,G=!!x.dynamicChildren)=>{if(w===x)return;w&&!fs(w,x)&&(q=ie(w),ce(w,j,V,!0),w=null),x.patchFlag===-2&&(G=!1,x.dynamicChildren=null),x.dynamicChildren&&w&&w.dynamicChildren&&w.dynamicChildren.hasOnce&&(x.dynamicChildren===Dn&&(x.dynamicChildren=[]),x.dynamicChildren.hasOnce=!0);const{type:H,ref:de,shapeFlag:Q}=x;switch(H){case Bs:$(w,x,N,q);break;case rn:A(w,x,N,q);break;case no:w==null&&S(x,N,q,X);break;case z:Y(w,x,N,q,j,V,X,J,G);break;default:Q&1?B(w,x,N,q,j,V,X,J,G):Q&6?te(w,x,N,q,j,V,X,J,G):(Q&64||Q&128)&&H.process(w,x,N,q,j,V,X,J,G,Ln)}de!=null&&j?xs(de,w&&w.ref,V,x||w,!x):de==null&&w&&w.ref!=null&&xs(w.ref,null,V,w,!0)},$=(w,x,N,q)=>{if(w==null)s(x.el=u(x.children),N,q);else{const j=x.el=w.el;x.children!==w.children&&h(j,x.children)}},A=(w,x,N,q)=>{w==null?s(x.el=f(x.children||""),N,q):x.el=w.el},S=(w,x,N,q)=>{[w.el,w.anchor]=I(w.children,x,N,q,w.el,w.anchor)},D=({el:w,anchor:x},N,q)=>{let j;for(;w&&w!==x;)j=v(w),s(w,N,q),w=j;s(x,N,q)},C=({el:w,anchor:x})=>{let N;for(;w&&w!==x;)N=v(w),i(w),w=N;i(x)},B=(w,x,N,q,j,V,X,J,G)=>{if(x.type==="svg"?X="svg":x.type==="math"&&(X="mathml"),w==null)O(x,N,q,j,V,X,J,G);else{const H=w.el&&w.el._isVueCE?w.el:null;try{H&&H._beginPatch(),M(w,x,j,V,X,J,G)}finally{H&&H._endPatch()}}},O=(w,x,N,q,j,V,X,J)=>{let G,H;const{props:de,shapeFlag:Q,transition:Z,dirs:P}=w;if(G=w.el=r(w.type,V,de&&de.is,de),Q&8?p(G,w.children):Q&16&&L(w.children,G,null,q,j,to(w,V),X,J),P&&Mn(w,null,q,"created"),E(G,w,w.scopeId,X,q),de){for(const ue in de)ue!=="value"&&!ys(ue)&&l(G,ue,null,de[ue],V,q);"value"in de&&l(G,"value",null,de.value,V),(H=de.onVnodeBeforeMount)&&Dt(H,q,w)}P&&Mn(w,null,q,"beforeMount");const F=ff(j,Z);F&&Z.beforeEnter(G),s(G,x,N),((H=de&&de.onVnodeMounted)||F||P)&&dt(()=>{H&&Dt(H,q,w),F&&Z.enter(G),P&&Mn(w,null,q,"mounted")},j)},E=(w,x,N,q,j)=>{if(N&&y(w,N),q)for(let V=0;V{for(let H=G;H{const J=x.el=w.el;let{patchFlag:G,dynamicChildren:H,dirs:de}=x;G|=w.patchFlag&16;const Q=w.props||Re,Z=x.props||Re;let P;if(N&&Rn(N,!1),(P=Z.onVnodeBeforeUpdate)&&Dt(P,N,x,w),de&&Mn(x,w,N,"beforeUpdate"),N&&Rn(N,!0),H&&(!w.dynamicChildren||w.dynamicChildren.length!==H.length)&&(G=0,X=!1,H=null),(Q.innerHTML&&Z.innerHTML==null||Q.textContent&&Z.textContent==null)&&p(J,""),H?U(w.dynamicChildren,H,J,N,q,to(x,j),V):X||we(w,x,J,null,N,q,to(x,j),V,!1),G>0){if(G&16)R(J,Q,Z,N,j);else if(G&2&&Q.class!==Z.class&&l(J,"class",null,Z.class,j),G&4&&l(J,"style",Q.style,Z.style,j),G&8){const F=x.dynamicProps;for(let ue=0;ue{P&&Dt(P,N,x,w),de&&Mn(x,w,N,"updated")},q)},U=(w,x,N,q,j,V,X)=>{for(let J=0;J{if(x!==N){if(x!==Re)for(const V in x)!ys(V)&&!(V in N)&&l(w,V,x[V],null,j,q);for(const V in N){if(ys(V))continue;const X=N[V],J=x[V];X!==J&&V!=="value"&&l(w,V,J,X,j,q)}"value"in N&&l(w,"value",x.value,N.value,j)}},Y=(w,x,N,q,j,V,X,J,G)=>{const H=x.el=w?w.el:u(""),de=x.anchor=w?w.anchor:u("");let{patchFlag:Q,dynamicChildren:Z,slotScopeIds:P}=x;P&&(J=J?J.concat(P):P),w==null?(s(H,N,q),s(de,N,q),L(x.children||[],N,de,j,V,X,J,G)):Q>0&&Q&64&&Z&&w.dynamicChildren&&w.dynamicChildren.length===Z.length?(U(w.dynamicChildren,Z,N,j,V,X,J),(x.key!=null||j&&x===j.subTree)&&fc(w,x,!0)):we(w,x,N,de,j,V,X,J,G)},te=(w,x,N,q,j,V,X,J,G)=>{x.slotScopeIds=J,w==null?x.shapeFlag&512?j.ctx.activate(x,N,q,X,G):ye(x,N,q,j,V,X,G):re(w,x,G)},ye=(w,x,N,q,j,V,X)=>{const J=w.component=yf(w,q,j);if(rl(w)&&(J.ctx.renderer=Ln),wf(J,!1,X),J.asyncDep){if(j&&j.registerDep(J,be,X),!w.el){const G=J.subTree=se(rn);A(null,G,x,N),w.placeholder=G.el}}else be(J,w,x,N,j,V,X)},re=(w,x,N)=>{const q=x.component=w.component;if(tf(w,x,N))if(q.asyncDep&&!q.asyncResolved){x.el=w.el,ge(q,x,N);return}else q.next=x,q.update();else x.el=w.el,q.vnode=x},be=(w,x,N,q,j,V,X)=>{const J=()=>{if(w.isMounted){let{next:Q,bu:Z,u:P,parent:F,vnode:ue}=w;{const wt=pc(w);if(wt){Q&&(Q.el=ue.el,ge(w,Q,X)),wt.asyncDep.then(()=>{dt(()=>{w.isUnmounted||H()},j)});return}}let fe=Q,Oe;Rn(w,!1),Q?(Q.el=ue.el,ge(w,Q,X)):Q=ue,Z&&si(Z),(Oe=Q.props&&Q.props.onVnodeBeforeUpdate)&&Dt(Oe,F,Q,ue),Rn(w,!0);const De=ql(w),Ve=w.subTree;w.subTree=De,T(Ve,De,b(Ve.el),ie(Ve),w,j,V),Q.el=De.el,fe===null&&nf(w,De.el),P&&dt(P,j),(Oe=Q.props&&Q.props.onVnodeUpdated)&&dt(()=>Dt(Oe,F,Q,ue),j)}else{let Q;const{el:Z,props:P}=x,{bm:F,m:ue,parent:fe,root:Oe,type:De}=w,Ve=Ss(x);Rn(w,!1),F&&si(F),!Ve&&(Q=P&&P.onVnodeBeforeMount)&&Dt(Q,fe,x),Rn(w,!0);{Oe.ce&&Oe.ce._hasShadowRoot()&&Oe.ce._injectChildStyle(De,w.parent?w.parent.type:void 0);const wt=w.subTree=ql(w);T(null,wt,N,q,w,j,V),x.el=wt.el}if(ue&&dt(ue,j),!Ve&&(Q=P&&P.onVnodeMounted)){const wt=x;dt(()=>Dt(Q,fe,wt),j)}(x.shapeFlag&256||fe&&Ss(fe.vnode)&&fe.vnode.shapeFlag&256)&&w.a&&dt(w.a,j),w.isMounted=!0,x=N=q=null}};w.scope.on();const G=w.effect=new xr(J);w.scope.off();const H=w.update=G.run.bind(G),de=w.job=G.runIfDirty.bind(G);de.i=w,de.id=w.uid,G.scheduler=()=>ll(de),Rn(w,!0),H()},ge=(w,x,N)=>{x.component=w;const q=w.vnode.props;w.vnode=x,w.next=null,of(w,x.props,q,N),cf(w,x.children,N),ln(),Dl(w),an()},we=(w,x,N,q,j,V,X,J,G=!1)=>{const H=w&&w.children,de=w?w.shapeFlag:0,Q=x.children,{patchFlag:Z,shapeFlag:P}=x;if(Z>0){if(Z&128){le(H,Q,N,q,j,V,X,J,G);return}else if(Z&256){Ye(H,Q,N,q,j,V,X,J,G);return}}P&8?(de&16&&ne(H,j,V),Q!==H&&p(N,Q)):de&16?P&16?le(H,Q,N,q,j,V,X,J,G):ne(H,j,V,!0):(de&8&&p(N,""),P&16&&L(Q,N,q,j,V,X,J,G))},Ye=(w,x,N,q,j,V,X,J,G)=>{w=w||Dn,x=x||Dn;const H=w.length,de=x.length,Q=Math.min(H,de);let Z;for(Z=0;Zde?ne(w,j,V,!0,!1,Q):L(x,N,q,j,V,X,J,G,Q)},le=(w,x,N,q,j,V,X,J,G)=>{let H=0;const de=x.length;let Q=w.length-1,Z=de-1;for(;H<=Q&&H<=Z;){const P=w[H],F=x[H]=G?Jt(x[H]):Vt(x[H]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;H++}for(;H<=Q&&H<=Z;){const P=w[Q],F=x[Z]=G?Jt(x[Z]):Vt(x[Z]);if(fs(P,F))T(P,F,N,null,j,V,X,J,G);else break;Q--,Z--}if(H>Q){if(H<=Z){const P=Z+1,F=PZ)for(;H<=Q;)ce(w[H],j,V,!0),H++;else{const P=H,F=H,ue=new Map;for(H=F;H<=Z;H++){const ht=x[H]=G?Jt(x[H]):Vt(x[H]);ht.key!=null&&ue.set(ht.key,H)}let fe,Oe=0;const De=Z-F+1;let Ve=!1,wt=0;const zn=new Array(De);for(H=0;H=De){ce(ht,j,V,!0);continue}let Ft;if(ht.key!=null)Ft=ue.get(ht.key);else for(fe=F;fe<=Z;fe++)if(zn[fe-F]===0&&fs(ht,x[fe])){Ft=fe;break}Ft===void 0?ce(ht,j,V,!0):(zn[Ft-F]=H+1,Ft>=wt?wt=Ft:Ve=!0,T(ht,x[Ft],N,null,j,V,X,J,G),Oe++)}const Al=Ve?pf(zn):Dn;for(fe=Al.length-1,H=De-1;H>=0;H--){const ht=F+H,Ft=x[ht],Pl=x[ht+1],Ol=ht+1{const{el:V,type:X,transition:J,children:G,shapeFlag:H}=w;if(H&6){ee(w.component.subTree,x,N,q);return}if(H&128){w.suspense.move(x,N,q);return}if(H&64){X.move(w,x,N,Ln);return}if(X===z){s(V,x,N);for(let Q=0;QJ.enter(V),j));else{const{leave:Q,delayLeave:Z,afterLeave:P}=J,F=()=>{w.ctx.isUnmounted?i(V):s(V,x,N)},ue=()=>{const fe=V._isLeaving||!!V[Qi];V._isLeaving&&V[Qi](!0),J.persisted&&!fe?F():Q(V,()=>{F(),P&&P()})};Z?Z(V,F,ue):ue()}else s(V,x,N)},ce=(w,x,N,q=!1,j=!1)=>{const{type:V,props:X,ref:J,children:G,dynamicChildren:H,shapeFlag:de,patchFlag:Q,dirs:Z,cacheIndex:P,memo:F}=w;if((Q===-2||H&&H.hasOnce)&&(j=!1),J!=null&&(ln(),xs(J,null,N,w,!0),an()),P!=null&&(!w.ctx||w.ctx===x)&&(x.renderCache[P]=void 0),de&256){x.ctx.deactivate(w);return}const ue=de&1&&Z,fe=!Ss(w);let Oe;if(fe&&(Oe=X&&X.onVnodeBeforeUnmount)&&Dt(Oe,x,w),de&6)K(w.component,N,q);else{if(de&128){w.suspense.unmount(N,q);return}ue&&Mn(w,null,x,"beforeUnmount"),de&64?w.type.remove(w,x,N,Ln,q):H&&!H.hasOnce&&(V!==z||Q>0&&Q&64)?ne(H,x,N,!1,!0):(V===z&&Q&384||!j&&de&16)&&ne(G,x,N),q&&tt(w)}const De=F!=null&&P==null;(fe&&(Oe=X&&X.onVnodeUnmounted)||ue||De)&&dt(()=>{Oe&&Dt(Oe,x,w),ue&&Mn(w,null,x,"unmounted"),De&&(w.el=null)},N)},tt=w=>{const{type:x,el:N,anchor:q,transition:j}=w;if(x===z){$e(N,q);return}if(x===no){C(w),j&&!j.persisted&&j.afterLeave&&j.afterLeave();return}const V=()=>{i(N),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(w.shapeFlag&1&&j&&!j.persisted){const{leave:X,delayLeave:J}=j,G=()=>X(N,V);J?J(w.el,V,G):G()}else V()},$e=(w,x)=>{let N;for(;w!==x;)N=v(w),i(w),w=N;i(x)},K=(w,x,N)=>{const{bum:q,scope:j,job:V,subTree:X,um:J,m:G,a:H}=w;Gl(G),Gl(H),q&&si(q),j.stop(),V?(V.flags|=8,ce(X,w,x,N)):w.vnode.el&&X&&(X.transition=w.vnode.transition,ce(X,w,x,N)),J&&dt(J,x),dt(()=>{w.isUnmounted=!0},x)},ne=(w,x,N,q=!1,j=!1,V=0)=>{for(let X=V;X{if(w.shapeFlag&6)return ie(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const x=v(w.anchor||w.el),N=x&&x[Ad];return N?v(N):x};let yt=!1;const In=(w,x,N)=>{let q;w==null?x._vnode&&(ce(x._vnode,null,null,!0),q=x._vnode.component):T(x._vnode||null,w,x,null,null,null,N),x._vnode=w,yt||(yt=!0,Dl(q),Vr(),yt=!1)},Ln={p:T,um:ce,m:ee,r:tt,mt:ye,mc:L,pc:we,pbc:U,n:ie,o:e};return{render:In,hydrate:void 0,createApp:Gd(In)}}function to({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Rn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ff(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function fc(e,t,n=!1){const s=e.children,i=t.children;if(pe(s)&&pe(i))for(let l=0;l>1,e[n[u]]0&&(t[s]=n[l-1]),n[l]=s)}}for(l=n.length,r=n[l-1];l-- >0;)n[l]=r,r=t[r];return n}function pc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pc(t)}function Gl(e){if(e)for(let t=0;te.__isSuspense;function hf(e,t){t&&t.pendingBranch?pe(e)?t.effects.push(...e):t.effects.push(e):xd(e)}const z=Symbol.for("v-fgt"),Bs=Symbol.for("v-txt"),rn=Symbol.for("v-cmt"),no=Symbol.for("v-stc"),Hn=[];let bt=null;function g(e=!1){Hn.push(bt=e?null:[])}function bc(){Hn.pop(),bt=Hn[Hn.length-1]||null}let Ps=1;function fi(e,t=!1){Ps+=e,e<0&&bt&&t&&(bt.hasOnce=!0)}function vc(e){return e.dynamicChildren=Ps>0?bt||Dn:null,bc(),Ps>0&&bt&&bt.push(e),e}function _(e,t,n,s,i,l){return vc(o(e,t,n,s,i,l,!0))}function it(e,t,n,s,i){return vc(se(e,t,n,s,i,!0))}function pi(e){return e?e.__v_isVNode===!0:!1}function fs(e,t){return e.type===t.type&&e.key===t.key}const gc=({key:e})=>e??null,ii=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?We(e)||Qe(e)||_e(e)?{i:mt,r:e,k:t,f:!!n}:e:null);function o(e,t=null,n=null,s=0,i=null,l=e===z?0:1,r=!1,u=!1){const f={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&gc(t),ref:t&&ii(t),scopeId:Br,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:mt};return u?(hi(f,n),l&128&&e.normalize(f)):n&&(f.shapeFlag|=We(n)?8:16),Ps>0&&!r&&bt&&(f.patchFlag>0||l&6)&&f.patchFlag!==32&&bt.push(f),f}const se=mf;function mf(e,t=null,n=null,s=0,i=null,l=!1){if((!e||e===Xr)&&(e=rn),pi(e)){const u=ns(e,t,!0);return n&&hi(u,n),Ps>0&&!l&&bt&&(u.shapeFlag&6?bt[bt.indexOf(e)]=u:bt.push(u)),u.patchFlag=-2,u}if(Cf(e)&&(e=e.__vccOpts),t){t=bf(t);let{class:u,style:f}=t;u&&!We(u)&&(t.class=me(u)),Pe(f)&&(ol(f)&&!pe(f)&&(f=et({},f)),t.style=Ue(f))}const r=We(e)?1:mc(e)?128:Fi(e)?64:Pe(e)?4:_e(e)?2:0;return o(e,t,n,s,i,r,l,!0)}function bf(e){return e?ol(e)||lc(e)?et({},e):e:null}function ns(e,t,n=!1,s=!1){const{props:i,ref:l,patchFlag:r,children:u,transition:f}=e,h=t?vf(i||{},t):i,p={__v_isVNode:!0,__v_skip:!0,type:e.type,props:h,key:h&&gc(h),ref:t&&t.ref?n&&l?pe(l)?l.concat(ii(t)):[l,ii(t)]:ii(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:u,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==z?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:f,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ns(e.ssContent),ssFallback:e.ssFallback&&ns(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return f&&s&&al(p,f.clone(p)),p}function Me(e=" ",t=0){return se(Bs,null,e,t)}function W(e="",t=!1){return t?(g(),it(rn,null,e)):se(rn,null,e)}function Vt(e){return e==null||typeof e=="boolean"?se(rn):pe(e)?se(z,null,e.slice()):pi(e)?Jt(e):se(Bs,null,String(e))}function Jt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ns(e)}function hi(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(pe(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),hi(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!lc(t)?t._ctx=mt:i===3&&mt&&(mt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(_e(t)){if(s&65){hi(e,{default:t});return}t={default:t,_ctx:mt},n=32}else t=String(t),s&64?(n=16,t=[Me(t)]):n=8;e.children=t,e.shapeFlag|=n}function vf(...e){const t={};for(let n=0;nst||mt;let mi,Os;{const e=Li(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),l=>{i.length>1?i.forEach(r=>r(l)):i[0](l)}};mi=t("__VUE_INSTANCE_SETTERS__",n=>st=n),Os=t("__VUE_SSR_SETTERS__",n=>Is=n)}const Ks=e=>{const t=st;return mi(e),e.scope.on(),()=>{e.scope.off(),mi(t)}},Jl=()=>{st&&st.scope.off(),mi(null)};function yc(e){return e.vnode.shapeFlag&4}let Is=!1;function wf(e,t=!1,n=!1){t&&Os(t);const{props:s,children:i}=e.vnode,l=yc(e);sf(e,s,l,t),rf(e,i,n||t);const r=l?kf(e,t):void 0;return t&&Os(!1),r}function kf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Vd);const{setup:s}=n;if(s){ln();const i=e.setupContext=s.length>1?xf(e):null,l=Ks(e),r=Vs(s,e,0,[e.props,i]),u=mr(r);if(an(),l(),(u||e.sp)&&!Ss(e)&&Yr(e),u){if(r.then(Jl,Jl),t)return r.then(f=>{Os(!0);try{Xl(e,f,t)}finally{Os(!1)}}).catch(f=>{Ri(f,e,0)});e.asyncDep=r}else Xl(e,r)}else wc(e)}function Xl(e,t,n){_e(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Pe(t)&&(e.setupState=Ur(t)),wc(e)}function wc(e,t,n){const s=e.type;e.render||(e.render=s.render||Bt);{const i=Ks(e);ln();try{Wd(e)}finally{an(),i()}}}const $f={get(e,t){return nt(e,"get",""),e[t]}};function xf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,$f),slots:e.slots,emit:e.emit,expose:t}}function ji(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ur(hd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cs)return Cs[n](e)},has(t,n){return n in t||n in Cs}})):e.proxy}function Sf(e,t=!0){return _e(e)?e.displayName||e.name:e.name||t&&e.__name}function Cf(e){return _e(e)&&"__vccOpts"in e}const k=(e,t)=>_d(e,t,Is);function bi(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Pe(t)&&!pe(t)?pi(t)?se(e,null,[t]):se(e,t):se(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&pi(n)&&(n=[n]),se(e,t,n))}finally{fi(1)}}const Tf="3.5.43";let Eo;const Zl=typeof window<"u"&&window.trustedTypes;if(Zl)try{Eo=Zl.createPolicy("vue",{createHTML:e=>e})}catch{}const kc=Eo?e=>Eo.createHTML(e):e=>e,Ef="http://www.w3.org/2000/svg",Af="http://www.w3.org/1998/Math/MathML",Gt=typeof document<"u"?document:null,Ql=Gt&&Gt.createElement("template"),Pf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?Gt.createElementNS(Ef,e):t==="mathml"?Gt.createElementNS(Af,e):n?Gt.createElement(e,{is:n}):Gt.createElement(e);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>Gt.createTextNode(e),createComment:e=>Gt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Gt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,l){const r=n?n.previousSibling:t.lastChild;if(i&&(i===l||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===l||!(i=i.nextSibling)););else{Ql.innerHTML=kc(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const u=Ql.content;if(s==="svg"||s==="mathml"){const f=u.firstChild;for(;f.firstChild;)u.appendChild(f.firstChild);u.removeChild(f)}t.insertBefore(u,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Of=Symbol("_vtc");function If(e,t,n){const s=e[Of];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ea=Symbol("_vod"),Lf=Symbol("_vsh"),Mf=Symbol(""),Rf=/(?:^|;)\s*display\s*:/;function Nf(e,t,n){const s=e.style,i=We(n);let l=!1;if(n&&!i){if(t)if(We(t))for(const r of t.split(";")){const u=r.slice(0,r.indexOf(":")).trim();n[u]==null&&bs(s,u,"")}else for(const r in t)n[r]==null&&bs(s,r,"");for(const r in n){r==="display"&&(l=!0);const u=n[r];u!=null?Df(e,r,!We(t)&&t?t[r]:void 0,u)||bs(s,r,u):bs(s,r,"")}}else if(i){if(t!==n){const r=s[Mf];r&&(n+=";"+r),s.cssText=n,l=Rf.test(n)}}else t&&e.removeAttribute("style");ea in e&&(e[ea]=l?s.display:"",e[Lf]&&(s.display="none"))}const Zs=/\s*!important$/;function bs(e,t,n){if(pe(n))n.forEach(s=>bs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))Zs.test(n)?e.setProperty(t,n.replace(Zs,""),"important"):e.setProperty(t,n);else{const s=Ff(e,t);Zs.test(n)?e.setProperty(Tn(s),n.replace(Zs,""),"important"):e[s]=n}}const ta=["Webkit","Moz","ms"],so={};function Ff(e,t){const n=so[t];if(n)return n;let s=ct(t);if(s!=="filter"&&s in e)return so[t]=s;s=Oi(s);for(let i=0;iio||(Bf.then(()=>io=0),io=Date.now());function qf(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const i=n.value;if(pe(i)){const l=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{l.call(s),s._stopped=!0};const r=i.slice(),u=[s];for(let f=0;fe.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,zf=(e,t,n,s,i,l)=>{const r=i==="svg";t==="class"?If(e,s,r):t==="style"?Nf(e,n,s):Ei(t)?Ai(t)||jf(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yf(e,t,s,r))?(ia(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&sa(e,t,s,r,l,t!=="value")):e._isVueCE&&(Gf(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!We(s)))?ia(e,ct(t),s,l,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),sa(e,t,s,r))};function Yf(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&la(t)&&_e(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return la(t)&&We(n)?!1:t in e}function Gf(e,t){const n=e._def.props;if(!n)return!1;const s=ct(t);return Array.isArray(n)?n.some(i=>ct(i)===s):Object.keys(n).some(i=>ct(i)===s)}const $n=e=>{const t=e.props["onUpdate:modelValue"]||!1;return pe(t)?n=>si(t,n):t};function Jf(e){e.target.composing=!0}function aa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vt=Symbol("_assign"),Qs=Symbol("_initialValue");function oo(e,t,n){return t&&(e=e.trim()),n&&(e=Ii(e)),e}const Je={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e.parentNode&&(e.type==="text"?e[Qs]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[Qs]=e.defaultValue.replace(/\r\n?/g,` +`))),e[vt]=$n(i);const l=s||i.props&&i.props.type==="number";en(e,t?"change":"input",r=>{r.target.composing||e[vt](oo(e.value,n,l))}),(n||l)&&en(e,"change",()=>{e.value=oo(e.value,n,l)}),t||(en(e,"compositionstart",Jf),en(e,"compositionend",aa),en(e,"change",aa))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const i=t??"",l=e[Qs];delete e[Qs],l!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==l?e[vt](oo(e.value,n,s)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:i,number:l}},r){if(e[vt]=$n(r),e.composing)return;const u=(l||e.type==="number")&&!/^0\d/.test(e.value)?Ii(e.value):e.value,f=t??"";if(u===f)return;const h=e.getRootNode();(h instanceof Document||h instanceof ShadowRoot)&&h.activeElement===e&&e.type!=="range"&&(s&&t===n||i&&e.value.trim()===f)||(e.value=f)}},Xf={deep:!0,created(e,t,n){e[vt]=$n(n),en(e,"change",()=>{const s=e._modelValue,i=ss(e),l=e.checked,r=e[vt];if(pe(s)){const u=Zo(s,i),f=u!==-1;if(l&&!f)r(s.concat(i));else if(!l&&f){const h=[...s];h.splice(u,1),r(h)}}else if(on(s)){const u=new Set(s);l?u.add(i):u.delete(i),r(u)}else r($c(e,l))})},mounted:ra,beforeUpdate(e,t,n){e[vt]=$n(n),ra(e,t,n)}};function ra(e,{value:t,oldValue:n},s){e._modelValue=t;let i;if(pe(t))i=Zo(t,s.props.value)>-1;else if(on(t))i=t.has(s.props.value);else{if(t===n)return;i=Mt(t,$c(e,!0))}e.checked!==i&&(e.checked=i)}const ca={created(e,{value:t},n){e.checked=Mt(t,n.props.value),e[vt]=$n(n),en(e,"change",()=>{e[vt](ss(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vt]=$n(s),t!==n&&(e.checked=Mt(t,s.props.value))}},Vn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,en(e,"change",()=>{const i=Array.prototype.filter.call(e.options,f=>f.selected).map(f=>n?Ii(ss(f)):ss(f)),l=e.multiple,r=l?on(e._modelValue)?new Set(i):i:i[0],u=e._pendingValue=[l,l?pe(r)?i.slice():i:r];try{e[vt](r)}finally{Ni(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[vt]=$n(s)},mounted(e,{value:t}){ua(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[vt]=$n(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Zf(t,n[1],n[0]))&&ua(e,t)}};function Zf(e,t,n){if(!n||pe(e))return Mt(e,t);if(on(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function ua(e,t){const n=e.multiple,s=pe(t);if(!(n&&!s&&!on(t))){for(let i=0,l=e.options.length;iString(h)===String(u)):r.selected=Zo(t,u)>-1}else r.selected=t.has(u);else if(Mt(ss(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function ss(e){return"_value"in e?e._value:e.value}function $c(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Qf=["ctrl","shift","alt","meta"],ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qf.some(n=>e[`${n}Key`]&&!t.includes(n))},Pt=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((i,...l)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(i=>{if(!("key"in i))return;const l=Tn(i.key);if(t.some(r=>r===l||tp[r]===l))return e(i)}))},np=et({patchProp:zf},Pf);let da;function sp(){return da||(da=uf(np))}const ip=((...e)=>{const t=sp().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=lp(s);if(!i)return;const l=t._component;!_e(l)&&!l.render&&!l.template&&(l.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,op(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t});function op(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lp(e){return We(e)?document.querySelector(e):e}const ap="modulepreload",rp=function(e,t){return new URL(e,t).href},fa={},pn=function(t,n,s){let i=Promise.resolve();if(n&&n.length>0){let h=function(p){return Promise.all(p.map(b=>Promise.resolve(b).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const r=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),f=u?.nonce||u?.getAttribute("nonce");i=h(n.map(p=>{if(p=rp(p,s),p in fa)return;fa[p]=!0;const b=p.endsWith(".css"),v=b?'[rel="stylesheet"]':"";if(s)for(let I=r.length-1;I>=0;I--){const T=r[I];if(T.href===p&&(!b||T.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${p}"]${v}`))return;const y=document.createElement("link");if(y.rel=b?"stylesheet":ap,b||(y.as="script"),y.crossOrigin="",y.href=p,f&&y.setAttribute("nonce",f),document.head.appendChild(y),b)return new Promise((I,T)=>{y.addEventListener("load",I),y.addEventListener("error",()=>T(new Error(`Unable to preload CSS for ${p}`)))})}))}function l(r){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=r,window.dispatchEvent(u),!u.defaultPrevented)throw r}return i.then(r=>{for(const u of r||[])u.status==="rejected"&&l(u.reason);return t().catch(l)})},cp={de:{name:"Deutsch",english:"German",script:"latin",plural:"one_other",clock:"24",checked:!1},"en-GB":{name:"English (UK)",english:"English (UK)",script:"latin",plural:"one_other",clock:"24",checked:!0},en:{name:"English (US)",english:"English (US)",script:"latin",plural:"one_other",clock:"12",checked:!0},es:{name:"Español",english:"Spanish",script:"latin",plural:"one_other",clock:"24",checked:!1},fr:{name:"Français",english:"French",script:"latin",plural:"one_upto_1",clock:"24",checked:!1},it:{name:"Italiano",english:"Italian",script:"latin",plural:"one_other",clock:"24",checked:!1},nl:{name:"Nederlands",english:"Dutch",script:"latin",plural:"one_other",clock:"24",checked:!1},pl:{name:"Polski",english:"Polish",script:"latin",plural:"slavic_pl",clock:"24",checked:!1},pt:{name:"Português",english:"Portuguese",script:"latin",plural:"one_other",clock:"24",checked:!1}};const vi=typeof window<"u",An=(e,t=!1)=>t?Symbol.for(e):Symbol(e),up=(e,t,n)=>dp({l:e,k:t,s:n}),dp=e=>JSON.stringify(e).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029").replace(/\u0027/g,"\\u0027"),ze=e=>typeof e=="number"&&isFinite(e),Sc=e=>pl(e)==="[object Date]",gi=e=>pl(e)==="[object RegExp]",fl=e=>Fe(e)&&Object.keys(e).length===0,ot=Object.assign,fp=Object.create,Ie=(e=null)=>fp(e);let pa;const pp=()=>pa||(pa=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:Ie()),hp=Object.prototype.hasOwnProperty;function xt(e,t){return hp.call(e,t)}const je=Array.isArray,Be=e=>typeof e=="function",ae=e=>typeof e=="string",Ke=e=>typeof e=="boolean",Se=e=>e!==null&&typeof e=="object",mp=e=>Se(e)&&Be(e.then)&&Be(e.catch),Cc=Object.prototype.toString,pl=e=>Cc.call(e),Fe=e=>pl(e)==="[object Object]",bp=e=>e==null?"":je(e)||Fe(e)&&e.toString===Cc?JSON.stringify(e,null,2):String(e);function vp(e,t=""){return e.reduce((n,s,i)=>i===0?n+s:n+t+s,"")}function gp(e,t){typeof console<"u"&&(console.warn("[intlify] "+e),t&&console.warn(t.stack))}function ha(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/").replace(/=/g,"=")}function _p(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}const yp=/^javascript:/i,wp=/^(?:href|src|action|formaction)$/i,kp=/&#(?:x([0-9a-f]+)|(\d+));?/gi,$p=/&(?:Tab|NewLine);/g,xp=/:?/gi,Sp=/[\u0000-\u0020\u007f-\u009f]/g,Cp=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Tp=/(^|[\s"'<>/])on(\w+\s*=)/gi,Ep=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function Ap(e,t,n){const s=t||n;if(!s)return e;const i=Number.parseInt(s,t?16:10);return i<=127?String.fromCharCode(i):e}function hl(e){const t=e.replace(kp,Ap).replace($p,"").replace(xp,":").replace(Sp,"");return yp.test(t)}function Pp(e){const t=/url\s*\(/gi;let n="",s=0,i;for(;(i=t.exec(e))!==null;){const l=i.index,r=t.lastIndex-1;let u=r+1,f=1,h=null;for(;u`${n}="${ma(n,s)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(t,n,s)=>`${n}='${ma(n,s)}'`),Cp.test(e)&&(e=e.replace(Tp,"$1on$2")),e=e.replace(Ep,(t,n,s,i)=>hl(i)?`${n}${s}about:blank`:t),e}const ba=e=>!Se(e)||je(e);function oi(e,t){if(ba(e)||ba(t))throw new Error("Invalid value");const n=[{src:e,des:t}];for(;n.length;){const{src:s,des:i}=n.pop();Object.keys(s).forEach(l=>{if(l==="__proto__")return;const r=s[l];if(je(r)){const u=[];u.length=r.length,i[l]=u,n.push({src:r,des:u})}else Se(r)?((!Se(i[l])||je(i[l]))&&(i[l]=Ie()),n.push({src:r,des:i[l]})):i[l]=r})}}const Ip=17;function Tc(e,t,n={}){const{domain:s,messages:i,args:l}=n,r=e,u=new SyntaxError(String(r));return u.code=e,u.domain=s,u}function Kt(e){return Se(e)&&ml(e)===0&&(xt(e,"b")||xt(e,"body"))}const Ec=["b","body"];function Lp(e){return Pn(e,Ec)}const Ac=["c","cases"];function Mp(e){return Pn(e,Ac,[])}const Pc=["s","static"];function Rp(e){return Pn(e,Pc)}const Oc=["i","items"];function Np(e){return Pn(e,Oc,[])}const Ic=["t","type"];function ml(e){return Pn(e,Ic)}const Lc=["v","value"];function ei(e,t){const n=Pn(e,Lc);if(n!=null)return n;throw Ls(t)}const Mc=["m","modifier"];function Fp(e){return Pn(e,Mc)}const Rc=["k","key"];function Dp(e){const t=Pn(e,Rc);if(t)return t;throw Ls(6)}function Pn(e,t,n){for(let s=0;sUp(n,e)}function Up(e,t){const n=Lp(t);if(n==null)throw Ls(0);if(ml(n)===1){const l=Mp(n);return e.plural(l.reduce((r,u)=>[...r,ga(e,u)],[]))}else return ga(e,n)}function ga(e,t){const n=Rp(t);if(n!=null)return e.type==="text"?n:e.normalize([n]);{const s=Np(t).reduce((i,l)=>[...i,Ao(e,l)],[]);return e.normalize(s)}}function Ao(e,t){const n=ml(t);switch(n){case 3:return ei(t,n);case 9:return ei(t,n);case 4:{const s=t;if(xt(s,"k")&&s.k)return e.interpolate(e.named(s.k));if(xt(s,"key")&&s.key)return e.interpolate(e.named(s.key));throw Ls(n)}case 5:{const s=t;if(xt(s,"i")&&ze(s.i))return e.interpolate(e.list(s.i));if(xt(s,"index")&&ze(s.index))return e.interpolate(e.list(s.index));throw Ls(n)}case 6:{const s=t,i=Fp(s),l=Dp(s);return e.linked(Ao(e,l),i?Ao(e,i):void 0,e.type)}case 7:return ei(t,n);case 8:return ei(t,n);default:throw new Error(`unhandled node on format message part: ${n}`)}}let _a=Ie();function jp(e,t){{const n=e.cacheKey;if(n){const s=_a[n];return s||(_a[n]=va(e))}else return va(e)}}const tn={INVALID_ARGUMENT:Ip,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},Hp=24;function nn(e){return Tc(e,null,void 0)}function bl(e,t){return t.locale!=null?ya(t.locale):ya(e.locale)}let lo;function ya(e){if(ae(e))return e;if(Be(e)){if(e.resolvedOnce&&lo!=null)return lo;if(e.constructor.name==="Function"){const t=e();if(mp(t))throw nn(tn.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return lo=t}else throw nn(tn.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw nn(tn.NOT_SUPPORT_LOCALE_TYPE)}function Vp(e,t,n){return[...new Set([n,...je(t)?t:Se(t)?Object.keys(t).filter(s=>s!=="default"):ae(t)?[t]:[n]])]}function Po(e,t,n){const s=ae(n)?n:_i,i=e;let l;Se(t)?(i.__localeChainObjectCache||(i.__localeChainObjectCache=new WeakMap),l=i.__localeChainObjectCache.get(t),l||(l=new Map,i.__localeChainObjectCache.set(t,l))):(i.__localeChainCache||(i.__localeChainCache=new Map),l=i.__localeChainCache.get(t),l||(l=new Map,i.__localeChainCache.set(t,l)));const r=l.get(s);if(r)return r;const u=[];let f=[n];for(;je(f);)f=wa(u,f,t);const h=je(t)||!Fe(t)?t:t.default?t.default:null;return f=ae(h)?[h]:h,je(f)&&wa(u,f,!1),l.set(s,u),u}function wa(e,t,n){let s=!0;for(let i=0;i{r===void 0?r=u:r+=u},v[1]=()=>{r!==void 0&&(t.push(r),r=void 0)},v[2]=()=>{v[0](),i++},v[3]=()=>{if(i>0)i--,s=4,v[0]();else{if(i=0,r===void 0||(r=Gp(r),r===!1))return!1;v[1]()}};function y(){const I=e[n+1];if(s===5&&I==="'"||s===6&&I==='"')return n++,u="\\"+I,v[0](),!0}for(;s!==null;)if(n++,l=e[n],!(l==="\\"&&y())){if(f=Yp(l),b=On[s],h=b[f]||b.l||8,h===8||(s=h[0],h[1]!==void 0&&(p=v[h[1]],p&&(u=l,p()===!1))))return;if(s===7)return t}}const ka=new Map;function Xp(e,t){return Se(e)?e[t]:null}function Zp(e,t){if(!Se(e))return null;let n=ka.get(t);if(n||(n=Jp(t),n&&ka.set(t,n)),!n)return null;const s=n.length;let i=e,l=0;for(;l`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function eh(){return{upper:(e,t)=>t==="text"&&ae(e)?e.toUpperCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toUpperCase():e,lower:(e,t)=>t==="text"&&ae(e)?e.toLowerCase():t==="vnode"&&Se(e)&&"__v_isVNode"in e?e.children.toLowerCase():e,capitalize:(e,t)=>t==="text"&&ae(e)?$a(e):t==="vnode"&&Se(e)&&"__v_isVNode"in e?$a(e.children):e}}let Fc;function th(e){Fc=e}let Dc;function nh(e){Dc=e}let Uc;function sh(e){Uc=e}let jc=null;const xa=e=>{jc=e},Sa=()=>jc;let Ca=0;function ih(e={}){const t=Be(e.onWarn)?e.onWarn:gp,n=ae(e.version)?e.version:Qp,s=ae(e.locale)||Be(e.locale)?e.locale:_i,i=Be(s)?_i:s,l=je(e.fallbackLocale)||Fe(e.fallbackLocale)||ae(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,r=Fe(e.messages)?e.messages:ao(i),u=Fe(e.datetimeFormats)?e.datetimeFormats:ao(i),f=Fe(e.numberFormats)?e.numberFormats:ao(i),h=ot(Ie(),e.modifiers,eh()),p=e.pluralRules||Ie(),b=Be(e.missing)?e.missing:null,v=Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=!!e.fallbackFormat,T=!!e.unresolving,$=Be(e.postTranslation)?e.postTranslation:null,A=Fe(e.processor)?e.processor:null,S=Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,D=!!e.escapeParameter,C=Be(e.messageCompiler)?e.messageCompiler:Fc,B=Be(e.messageResolver)?e.messageResolver:Dc||Xp,O=Be(e.localeFallbacker)?e.localeFallbacker:Uc||Vp,E=Se(e.fallbackContext)?e.fallbackContext:void 0,L=e,M=Se(L.__datetimeFormatters)?L.__datetimeFormatters:new Map,U=Se(L.__numberFormatters)?L.__numberFormatters:new Map,R=Se(L.__meta)?L.__meta:{};Ca++;const Y={version:n,cid:Ca,locale:s,fallbackLocale:l,messages:r,modifiers:h,pluralRules:p,missing:b,missingWarn:v,fallbackWarn:y,fallbackFormat:I,unresolving:T,postTranslation:$,processor:A,warnHtmlMessage:S,escapeParameter:D,messageCompiler:C,messageResolver:B,localeFallbacker:O,fallbackContext:E,onWarn:t,__meta:R};return Y.datetimeFormats=u,Y.numberFormats=f,Y.__datetimeFormatters=M,Y.__numberFormatters=U,Y}const ao=e=>({[e]:Ie()});function Hc(e,t,n,s,i){const{missing:l,onWarn:r}=e;if(l!==null){const u=l(e,n,t,i);return ae(u)?u:t}else return t}function Ta(e,t){const n=e;Se(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ti(e,t,n){Ta(e,n),e.fallbackContext&&Ta(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function oh(e,t){return e===t?!1:e.split("-")[0]===t.split("-")[0]}function lh(e,t){const n=t.indexOf(e);if(n===-1)return!1;for(let s=n+1;s{s.includes(f)?u[f]=i[f]:t[f]=i[f]}),ae(l)?t.locale=l:Fe(l)&&(u=l),Fe(r)&&(u=r),u}function Ea(e,...t){const{datetimeFormats:n,unresolving:s,onWarn:i}=e,{__datetimeFormatters:l}=e;if(!ae(t[0])&&!Sc(t[0])&&!ze(t[0]))return yi;const[r,u,f,h]=Oo(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.DateTimeFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"datetime format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.DateTimeFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const qc=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Oo(...e){const[t]=e,n=Ie(),s=Ie();let i;if(ae(t)){const r=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!r)throw nn(tn.INVALID_ISO_DATE_ARGUMENT);const u=r[3]?r[3].trim().startsWith("T")?`${r[1].trim()}${r[3].trim()}`:`${r[1].trim()}T${r[3].trim()}`:r[1].trim();i=new Date(u);try{i.toISOString()}catch{throw nn(tn.INVALID_ISO_DATE_ARGUMENT)}}else if(Sc(t)){if(isNaN(t.getTime()))throw nn(tn.INVALID_DATE_ARGUMENT);i=t}else if(ze(t))i=t;else throw nn(tn.INVALID_ARGUMENT);const l=Kc(e,n,s,qc);return[n.key||"",i,n,l]}function Aa(e,t,n){Bc(e.__datetimeFormatters,t,n)}function Pa(e,...t){const{numberFormats:n,unresolving:s,onWarn:i}=e,{__numberFormatters:l}=e;if(!ze(t[0]))return yi;const[r,u,f,h]=Io(...t),p=Ke(f.missingWarn)?f.missingWarn:e.missingWarn,b=Ke(f.fallbackWarn)?f.fallbackWarn:e.fallbackWarn,v=!!f.part,y=bl(e,f);if(!ae(r)||r===""){const S=new Intl.NumberFormat(y.replace(/!/g,""),h);return v?S.formatToParts(u):S.format(u)}const I=Vc(e,r,y,n,p,b,"number format");if(!ae(I))return s?Hi:r;const T=n[I][r],$=Wc(I,r,h);let A=l.get($);return A||(A=new Intl.NumberFormat(I,ot({},T,h)),l.set($,A)),v?A.formatToParts(u):A.format(u)}const zc=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Io(...e){const[t]=e,n=Ie(),s=Ie();if(!ze(t))throw nn(tn.INVALID_ARGUMENT);const i=t,l=Kc(e,n,s,zc);return[n.key||"",i,n,l]}function Oa(e,t,n){Bc(e.__numberFormatters,t,n)}const ah=e=>e,rh=e=>"",ch="text",uh=e=>e.length===0?"":vp(e),dh=bp;function ro(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function fh(e){const t=ze(e.pluralIndex)?e.pluralIndex:-1;return ze(e.named?.count)?e.named.count:ze(e.named?.n)?e.named.n:t}function ph(e={}){const t=e.locale,n=fh(e),s=ae(t)&&Be(e.pluralRules?.[t])?e.pluralRules[t]:ro,i=s===ro?void 0:ro,l=A=>A[s(n,A.length,i)],r=e.list||[],u=A=>r[A],f=e.named||Ie();ze(e.pluralIndex)&&(f.count||=e.pluralIndex,f.n||=e.pluralIndex);const h=A=>f[A];function p(A,S){const D=Be(e.messages)?e.messages(A,!!S):Se(e.messages)?e.messages[A]:!1;return D||(e.parent?e.parent.message(A):rh)}const b=A=>e.modifiers?e.modifiers[A]:ah,v=Be(e.processor?.normalize)?e.processor.normalize:uh,y=Be(e.processor?.interpolate)?e.processor.interpolate:dh,I=ae(e.processor?.type)?e.processor.type:ch,$={list:u,named:h,plural:l,linked:(A,...S)=>{const[D,C]=S;let B="text",O="";S.length===1?Se(D)?(O=D.modifier||O,B=D.type||B):ae(D)&&(O=D||O):S.length===2&&(ae(D)&&(O=D||O),ae(C)&&(B=C||B));const E=p(A,!0)($),L=E===""||E===void 0?A:E,M=B==="vnode"&&je(L)&&O?L[0]:L;return O?b(O)(M,B):M},message:p,type:I,interpolate:y,normalize:v,values:ot(Ie(),r,f)};return $}const Ia=()=>"",sn=e=>Be(e);function La(e,...t){const{fallbackFormat:n,postTranslation:s,unresolving:i,messageCompiler:l,fallbackLocale:r,messages:u}=e,[f,h]=Lo(...t),p=Ke(h.missingWarn)?h.missingWarn:e.missingWarn,b=Ke(h.fallbackWarn)?h.fallbackWarn:e.fallbackWarn,v=Ke(h.escapeParameter)?h.escapeParameter:e.escapeParameter,y=!!h.resolvedMessage,I=ae(h.default)||Ke(h.default)?Ke(h.default)?l?f:()=>f:h.default:n?l?f:()=>f:null,T=n||I!=null&&(ae(I)||Be(I)),$=bl(e,h);v&&hh(h);let[A,S,D]=y?[f,$,u[$]||Ie()]:Yc(e,f,$,r,b,p),C=A,B=f;if(!y&&!(ae(C)||Kt(C)||sn(C))&&T&&(C=I,B=C),!y&&(!(ae(C)||Kt(C)||sn(C))||!ae(S)))return i?Hi:f;let O=!1;const E=()=>{O=!0},L=sn(C)?C:Gc(e,f,S,C,B,E);if(O)return C;const M=vh(e,S,D,h),U=ph(M),R=mh(e,L,U);let Y=s?s(R,f):R;return v&&ae(Y)&&(Y=Op(Y)),Y}function hh(e){je(e.list)?e.list=e.list.map(t=>ae(t)?ha(t):t):Se(e.named)&&Object.keys(e.named).forEach(t=>{ae(e.named[t])&&(e.named[t]=ha(e.named[t]))})}function Yc(e,t,n,s,i,l){const{messages:r,onWarn:u,messageResolver:f,localeFallbacker:h}=e,p=h(e,s,n);let b=Ie(),v,y=null;const I="translate";for(let T=0;Ts);return h.locale=n,h.key=t,h}const f=r(s,bh(e,n,i,s,u,l));return f.locale=n,f.key=t,f.source=s,f}function mh(e,t,n){return t(n)}function Lo(...e){const[t,n,s]=e,i=Ie();if(!ae(t)&&!ze(t)&&!sn(t)&&!Kt(t))throw nn(tn.INVALID_ARGUMENT);const l=ze(t)?String(t):(sn(t),t);return ze(n)?i.plural=n:ae(n)?i.default=n:Fe(n)&&!fl(n)?i.named=n:je(n)&&(i.list=n),ze(s)?i.plural=s:ae(s)?i.default=s:Fe(s)&&ot(i,s),[l,i]}function bh(e,t,n,s,i,l){return{locale:t,key:n,warnHtmlMessage:i,onError:r=>{throw l&&l(r),r},onCacheKey:r=>up(t,n,r)}}function vh(e,t,n,s){const{modifiers:i,pluralRules:l,messageResolver:r,fallbackLocale:u,fallbackWarn:f,missingWarn:h,fallbackContext:p}=e,v={locale:t,modifiers:i,pluralRules:l,messages:(y,I)=>{let T=r(n,y);if(T==null&&(p||I)){const[$,,A]=Yc(p||e,y,t,u,f,h);T=$??r(A,y)}if(ae(T)||Kt(T)){let $=!1;const S=Gc(e,y,t,T,y,()=>{$=!0});return $?Ia:S}else return sn(T)?T:Ia}};return e.processor&&(v.processor=e.processor),s.list&&(v.list=s.list),s.named&&(v.named=s.named),ze(s.plural)&&(v.pluralIndex=s.plural),v}const gh="11.4.12",gt={UNEXPECTED_RETURN_TYPE:Hp,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Tt(e,...t){return Tc(e,null,void 0)}const Mo=An("__translateVNode"),Ro=An("__datetimeParts"),No=An("__numberParts"),_h=An("__setPluralRules"),yh=An("__injectWithOption"),Xn=An("__dispose");let Jc=null;{const e=pp().__VUE_INSTANCE_SETTERS__;je(e)&&e.push(t=>{Jc=t})}function Ms(e){if(!Se(e)||Kt(e))return e;for(const t in e)if(xt(e,t))if(!t.includes("."))Se(e[t])&&Ms(e[t]);else{const n=t.split("."),s=n.length-1;let i=e,l=!1;for(let r=0;r{if("locale"in u&&"resource"in u){const{locale:f,resource:h}=u;f?(r[f]=r[f]||Ie(),oi(h,r[f])):oi(h,r)}else ae(u)&&oi(JSON.parse(u),r)}),i==null&&l)for(const u in r)xt(r,u)&&Ms(r[u]);return r}function wh(e){return e.type}function kh(e,t,n){let s=Se(t.messages)?t.messages:Ie();"__i18nGlobal"in n&&(s=Xc(e.locale.value,{messages:s,__i18n:n.__i18nGlobal}));const i=Object.keys(s);i.length&&i.forEach(l=>{e.mergeLocaleMessage(l,s[l])});{if(Se(t.datetimeFormats)){const l=Object.keys(t.datetimeFormats);l.length&&l.forEach(r=>{e.mergeDateTimeFormat(r,t.datetimeFormats[r])})}if(Se(t.numberFormats)){const l=Object.keys(t.numberFormats);l.length&&l.forEach(r=>{e.mergeNumberFormat(r,t.numberFormats[r])})}}}function Ma(e){return se(Bs,null,e,0)}function Zc(){return Jc??_c()}const Ra=()=>[],$h=()=>!1;let Na=0;function Fa(e){return((t,n,s,i)=>e(n,s,Zc()||void 0,i))}function Fo(e={}){const{__root:t,__injectWithOption:n}=e,s=t===void 0,i=e.flatJson,l=vi?ke:md;let r=Ke(e.inheritLocale)?e.inheritLocale:!0;const u=l(t&&r?t.locale.value:ae(e.locale)?e.locale:_i),f=l(t&&r?t.fallbackLocale.value:ae(e.fallbackLocale)||je(e.fallbackLocale)||Fe(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:u.value),h=l(Xc(u.value,e)),p=l(Fe(e.datetimeFormats)?e.datetimeFormats:{[u.value]:{}}),b=l(Fe(e.numberFormats)?e.numberFormats:{[u.value]:{}});let v=t?t.missingWarn:Ke(e.missingWarn)||gi(e.missingWarn)?e.missingWarn:!0,y=t?t.fallbackWarn:Ke(e.fallbackWarn)||gi(e.fallbackWarn)?e.fallbackWarn:!0,I=t?t.fallbackRoot:Ke(e.fallbackRoot)?e.fallbackRoot:!0,T=!!e.fallbackFormat,$=Be(e.missing)?e.missing:null,A=Be(e.missing)?Fa(e.missing):null,S=Be(e.postTranslation)?e.postTranslation:null,D=t?t.warnHtmlMessage:Ke(e.warnHtmlMessage)?e.warnHtmlMessage:!0,C=!!e.escapeParameter;const B=t?t.modifiers:Fe(e.modifiers)?e.modifiers:{};let O=e.pluralRules||t&&t.pluralRules,E;E=(()=>{s&&xa(null);const P={version:gh,locale:u.value,fallbackLocale:f.value,messages:h.value,modifiers:B,pluralRules:O,missing:A===null?void 0:A,missingWarn:v,fallbackWarn:y,fallbackFormat:T,unresolving:!0,postTranslation:S===null?void 0:S,warnHtmlMessage:D,escapeParameter:C,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:"vue"}};P.datetimeFormats=p.value,P.numberFormats=b.value,P.__datetimeFormatters=Fe(E)?E.__datetimeFormatters:void 0,P.__numberFormatters=Fe(E)?E.__numberFormatters:void 0;const F=ih(P);return s&&xa(F),F})(),ti(E,u.value,f.value);function M(){return[u.value,f.value,h.value,p.value,b.value]}const U=k({get:()=>u.value,set:P=>{E.locale=P,u.value=P}});function R(P){s||(E.fallbackContext=t?Sa():void 0);try{ti(E,u.value,P)}finally{s||(E.fallbackContext=void 0)}}const Y=k({get:()=>f.value,set:P=>{f.value=P,E.fallbackLocale=f.value,R(f.value)}}),te=k(()=>h.value),ye=k(()=>p.value),re=k(()=>b.value);function be(){return Be(S)?S:null}function ge(P){S=P,E.postTranslation=P}function we(){return $}function Ye(P){P!==null&&(A=Fa(P)),$=P,E.missing=A}const le=(P,F,ue,fe,Oe,De)=>{M();let Ve;try{s||(E.fallbackContext=t?Sa():void 0),Ve=P(E)}finally{s||(E.fallbackContext=void 0)}if(ue!=="translate exists"&&ze(Ve)&&Ve===Hi||ue==="translate exists"&&!Ve){const[wt,zn]=F();return t&&I?fe(t):Oe(wt)}else{if(De(Ve))return Ve;throw Tt(gt.UNEXPECTED_RETURN_TYPE)}};function ee(...P){return le(F=>Reflect.apply(La,null,[F,...P]),()=>Lo(...P),"translate",F=>Reflect.apply(F.t,F,[...P]),F=>F,F=>ae(F))}function ce(...P){const[F,ue,fe]=P;if(fe&&!Se(fe))throw Tt(gt.INVALID_ARGUMENT);return ee(F,ue,ot({resolvedMessage:!0},fe||{}))}function tt(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>Reflect.apply(F.d,F,[...P]),()=>yi,F=>ae(F)||je(F))}function $e(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>Reflect.apply(F.n,F,[...P]),()=>yi,F=>ae(F)||je(F))}function K(P){return P.map(F=>ae(F)||ze(F)||Ke(F)?Ma(String(F)):F)}const ie={normalize:K,interpolate:P=>P,type:"vnode"};function yt(...P){return le(F=>{let ue;const fe=F;try{fe.processor=ie,ue=Reflect.apply(La,null,[fe,...P])}finally{fe.processor=null}return ue},()=>Lo(...P),"translate",F=>F[Mo](...P),F=>[Ma(F)],F=>je(F))}function In(...P){return le(F=>Reflect.apply(Pa,null,[F,...P]),()=>Io(...P),"number format",F=>F[No](...P),Ra,F=>ae(F)||je(F))}function Ln(...P){return le(F=>Reflect.apply(Ea,null,[F,...P]),()=>Oo(...P),"datetime format",F=>F[Ro](...P),Ra,F=>ae(F)||je(F))}function El(P){O=P,E.pluralRules=O}function w(P,F){return le(()=>{if(!P)return!1;const ue=ae(F)?F:u.value,fe=ae(F)?[ue]:Po(E,f.value,ue);for(let Oe=0;Oe[P],"translate exists",ue=>Reflect.apply(ue.te,ue,[P,F]),$h,ue=>Ke(ue))}function x(P){let F=null;const ue=Po(E,f.value,u.value);for(let fe=0;feR(f.value),{deep:!0,flush:"sync"}),t&&vi&&(Ct(t.locale,P=>{r&&(u.value=P,E.locale=P,ti(E,u.value,f.value))}),Ct(t.fallbackLocale,P=>{r&&(f.value=P,E.fallbackLocale=f.value,ti(E,u.value,f.value))}));const Z={id:Na,locale:U,fallbackLocale:Y,get inheritLocale(){return r},set inheritLocale(P){r=P,P&&t&&(U.value=t.locale.value,Y.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(h.value).sort()},messages:te,get modifiers(){return B},get pluralRules(){return O||{}},get isGlobal(){return s},get missingWarn(){return v},set missingWarn(P){v=P,E.missingWarn=v},get fallbackWarn(){return y},set fallbackWarn(P){y=P,E.fallbackWarn=y},get fallbackRoot(){return I},set fallbackRoot(P){I=P},get fallbackFormat(){return T},set fallbackFormat(P){T=P,E.fallbackFormat=T},get warnHtmlMessage(){return D},set warnHtmlMessage(P){D=P,E.warnHtmlMessage=P},get escapeParameter(){return C},set escapeParameter(P){C=P,E.escapeParameter=P},t:ee,getLocaleMessage:q,setLocaleMessage:j,mergeLocaleMessage:V,getPostTranslationHandler:be,setPostTranslationHandler:ge,getMissingHandler:we,setMissingHandler:Ye,[_h]:El};return Z.datetimeFormats=ye,Z.numberFormats=re,Z.rt=ce,Z.te=w,Z.tm=N,Z.d=tt,Z.n=$e,Z.getDateTimeFormat=X,Z.setDateTimeFormat=J,Z.mergeDateTimeFormat=G,Z.getNumberFormat=H,Z.setNumberFormat=de,Z.mergeNumberFormat=Q,Z[yh]=n,Z[Mo]=yt,Z[Ro]=Ln,Z[No]=In,Z}const vl={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e==="parent"||e==="global",default:"parent"},i18n:{type:Object}};function xh({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((s,i)=>[...s,...i.type===z?i.children:[i]],[]):t.reduce((n,s)=>{const i=e[s];return i&&(n[s]=i()),n},Ie())}function Qc(){return z}const Sh=Le({name:"i18n-t",props:ot({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>ze(e)||!isNaN(e)}},vl),setup(e,t){const{slots:n,attrs:s}=t,i=e.i18n||gl({useScope:e.scope,__useComponent:!0});return()=>{const l=()=>{const f=Object.keys(n).filter(b=>b[0]!=="_"),h=Ie();e.locale&&(h.locale=e.locale),e.plural!==void 0&&(h.plural=ae(e.plural)?+e.plural:e.plural);const p=xh(t,f);return i[Mo](e.keypath,p,h)},r=ot(Ie(),s),u=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(u)?bi(u,r,{default:l}):bi(u,r,l())}}}),Da=Sh;function Ch(e){return je(e)&&!ae(e[0])}function eu(e,t,n,s){const{slots:i,attrs:l}=t;return()=>{const r=()=>{const h={part:!0};let p=Ie();e.locale&&(h.locale=e.locale),ae(e.format)?h.key=e.format:Se(e.format)&&(ae(e.format.key)&&(h.key=e.format.key),p=Object.keys(e.format).reduce((y,I)=>n.includes(I)?ot(Ie(),y,{[I]:e.format[I]}):y,Ie()));const b=s(e.value,h,p);let v=[h.key];return je(b)?v=b.map((y,I)=>{const T=i[y.type],$=T?T({[y.type]:y.value,index:I,parts:b}):[y.value];return Ch($)&&($[0].key=`${y.type}-${I}`),$}):ae(b)&&(v=[b]),v},u=ot(Ie(),l),f=ae(e.tag)||Se(e.tag)?e.tag:Qc();return Se(f)?bi(f,u,{default:r}):bi(f,u,r())}}const Th=Le({name:"i18n-n",props:ot({value:{type:Number,required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,zc,(...s)=>n[No](...s))}}),Ua=Th;function Eh(e,t){const n=e;if(e.mode==="composition")return n.__getInstance(t)||e.global;{const s=n.__getInstance(t);return s!=null?s.__composer:e.global.__composer}}function Ah(e){const t=r=>{const{instance:u,value:f}=r;if(!u||!u.$)throw Tt(gt.UNEXPECTED_ERROR);const h=Eh(e,u.$),p=ja(f);return[Reflect.apply(h.t,h,[...Ha(p)]),h]};return{created:(r,u)=>{const[f,h]=t(u);vi&&(r.__i18nWatcher=Ct(h.locale,()=>{u.instance&&u.instance.$forceUpdate()})),r.__composer=h,r.textContent=f},unmounted:r=>{vi&&r.__i18nWatcher&&(r.__i18nWatcher(),r.__i18nWatcher=void 0,delete r.__i18nWatcher),r.__composer&&(r.__composer=void 0,delete r.__composer)},beforeUpdate:(r,{value:u})=>{if(r.__composer){const f=r.__composer,h=ja(u);r.textContent=Reflect.apply(f.t,f,[...Ha(h)])}},getSSRProps:r=>{const[u]=t(r);return{textContent:u}}}}function ja(e){if(ae(e))return{path:e};if(Fe(e)){if(!("path"in e))throw Tt(gt.REQUIRED_VALUE,"path");return e}else throw Tt(gt.INVALID_VALUE)}function Ha(e){const{path:t,locale:n,args:s,choice:i,plural:l}=e,r={},u=s||{};return ae(n)&&(r.locale=n),ze(i)&&(r.plural=i),ze(l)&&(r.plural=l),[t,u,r]}function Ph(e,t,...n){const s=Fe(n[0])?n[0]:{};(!Ke(s.globalInstall)||s.globalInstall)&&([Da.name,"I18nT"].forEach(l=>e.component(l,Da)),[Ua.name,"I18nN"].forEach(l=>e.component(l,Ua)),[Ba.name,"I18nD"].forEach(l=>e.component(l,Ba))),e.directive("t",Ah(t))}const Oh=An("global-vue-i18n");function Ih(e={}){const t=Ke(e.globalInjection)?e.globalInjection:!0,n=new Map,[s,i]=Lh(e),l=An("");function r(p){return n.get(p)||null}function u(p,b){n.set(p,b)}function f(p){n.delete(p)}const h={get mode(){return"composition"},async install(p,...b){if(p.__VUE_I18N_SYMBOL__=l,p.provide(p.__VUE_I18N_SYMBOL__,h),Fe(b[0])){const I=b[0];h.__composerExtend=I.__composerExtend,h.__vueI18nExtend=I.__vueI18nExtend}let v=null;t&&(v=jh(p,h.global)),Ph(p,h,...b);const y=p.unmount;p.unmount=()=>{v&&v(),h.dispose(),y()}},get global(){return i},dispose(){s.stop()},__instances:n,__getInstance:r,__setInstance:u,__deleteInstance:f};return h}function gl(e={}){const t=Zc();if(t==null)throw Tt(gt.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Tt(gt.NOT_INSTALLED);const n=Mh(t),s=Nh(n),i=wh(t),l=Rh(e,i);if(l==="global")return kh(s,e,i),s;if(l==="parent"){let f=Va(n,t,e.__useComponent);return f==null&&(f=s),f}if(l==="isolated"){if(n.mode!=="composition")throw Tt(gt.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const f=n,h=ot({},e),p=Va(n,t);h.__root=p||s;const b=Fo(h);return f.__composerExtend&&(b[Xn]=f.__composerExtend(b)),$r()&&Gu(()=>{const y=b[Xn];y&&(y(),delete b[Xn])}),b}const r=n;let u=r.__getInstance(t);if(u==null){const f=ot({},e);"__i18n"in i&&(f.__i18n=i.__i18n),s&&(f.__root=s),u=Fo(f),r.__composerExtend&&(u[Xn]=r.__composerExtend(u)),Dh(r,t,u),r.__setInstance(t,u)}return u}function Lh(e,t){const n=Yu(),s=n.run(()=>Fo(e));if(s==null)throw Tt(gt.UNEXPECTED_ERROR);return[n,s]}function Mh(e){const t=$s(e.isCE?Oh:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Tt(e.isCE?gt.NOT_INSTALLED_WITH_PROVIDE:gt.UNEXPECTED_ERROR);return t}function Rh(e,t){return fl(e)?"__i18n"in t?"local":"global":e.useScope?e.useScope:"local"}function Nh(e){return e.mode==="composition"?e.global:e.global.__composer}function Va(e,t,n=!1){let s=null;const i=t.root;let l=Fh(t,n);for(;l!=null;){const r=e;if(e.mode==="composition"&&(s=r.__getInstance(l)),s!=null||i===l)break;l=l.parent}return s}function Fh(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Dh(e,t,n){En(()=>{},t),cl(()=>{const s=n;e.__deleteInstance(t);const i=s[Xn];i&&(i(),delete s[Xn])},t)}const Uh=["locale","fallbackLocale","availableLocales"],Wa=["t","rt","d","n","tm","te"];function jh(e,t){const n=Object.create(null);return Uh.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l)throw Tt(gt.UNEXPECTED_ERROR);const r=Qe(l.value)?{get(){return l.value.value},set(u){l.value.value=u}}:{get(){return l.get&&l.get()}};Object.defineProperty(n,i,r)}),e.config.globalProperties.$i18n=n,Wa.forEach(i=>{const l=Object.getOwnPropertyDescriptor(t,i);if(!l||!l.value)throw Tt(gt.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${i}`,l)}),()=>{delete e.config.globalProperties.$i18n,Wa.forEach(i=>{delete e.config.globalProperties[`$${i}`]})}}const Hh=Le({name:"i18n-d",props:ot({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},vl),setup(e,t){const n=e.i18n||gl({useScope:e.scope,__useComponent:!0});return eu(e,t,qc,(...s)=>n[Ro](...s))}}),Ba=Hh;th(jp);nh(Zp);sh(Po);const Vh={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Undo"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"unknown"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Unsaved changes"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancel"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Open Devices & services"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Save & send"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Saving…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Read current data"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 result. Keep typing to narrow it down."},{t:2,i:[{t:4,k:"n"},{t:3,v:" results. Keep typing to narrow it down."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Close"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Change"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Loading…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Back"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"New screen"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work. Refresh the page and try again."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API key copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API key is selected. Copy with Ctrl+C or Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Layout JSON is selected. Copy with Ctrl+C or Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Action name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Action name is selected. Copy with Ctrl+C or Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is selected. Copy with Ctrl+C or Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icon name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icon name is selected. Copy with Ctrl+C or Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Empty color copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Empty color is selected. Copy with Ctrl+C or Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Color name copied."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Color name is selected. Copy with Ctrl+C or Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Management page unreachable · retrying…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connected"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Reconnecting to Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Refresh"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Queued for the update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found with this device name."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"What's new"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Full log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"The IP address, once; new firmware reports it itself."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP address, e.g. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP address"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Start"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installed, but not yet in Home Assistant. Add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and turn on “Allow the device to perform Home Assistant actions” under Configure."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware downloaded, not yet in Home Assistant. Put it on the screen with ESPHome Web, then add the discovered ESPHome device under Settings → Devices & services, paste the API key there, and allow the Home Assistant actions under Configure."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Not yet in Home Assistant. Already flashed? Add the ESPHome device under Settings → Devices & services, then allow the Home Assistant actions under Configure. Not flashed yet? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copy API key"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Add to this screen"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet and a test alert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nothing to save"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify this screen"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Blinks the backlight and shows a card"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs a newer firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Download and copy as JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Search screens, entities, actions…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nothing matches. Type part of a screen, entity or action."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Choose a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Pick one of your screens on the left to change its tiles, top bar and settings."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Start with a screen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Connect a CYD or Guition via USB to your Home Assistant machine. Profile, firmware, and the first flash happen in one go."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Install new screen"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"You have unsaved changes. Open a different screen anyway?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with a copy of the other screen's?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Replace the unsaved layout with the imported one?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your screen is being updated."}},other:{t:0,b:{t:2,i:[{t:3,v:"Saved. "},{t:4,k:"name"},{t:3,v:" is being updated."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The screen is being updated."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Your newest change isn't sent yet: press Save & send again."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" blinks and shows a card for a few seconds."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · changes are saved"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Screen settings"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Saved · sent to screen"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"All saved"}},more:{t:0,b:{t:2,i:[{t:3}],s:"More"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identify"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"blink the screen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Needs firmware 0.2.31 or newer"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"from Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copy layout from…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" screen"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" screens"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"no other screen"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tile"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tiles"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Export layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Import layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"advanced"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile found for this screen"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"There is no room for this tile on page "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"No page is free for a full-page tile. Free a page first."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"This screen already has a tile that goes to page "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied. Save & send when it looks right."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout of "},{t:4,k:"name"},{t:3,v:" copied: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout imported. Save & send when it looks right."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout imported: "},{t:4,k:"kept"},{t:3,v:" of "},{t:4,k:"total"},{t:3,v:" tiles fit this screen's firmware. Save & send when it looks right."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"That isn't JSON. Export a layout first, or paste one from another ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"No tiles in this file. Expected a layout exported from ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" page · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tiles"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Add your first light, scene, or device from the library."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tap the top bar or a tile to change it. Drag to move; drop on the next page for a new one."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Empty slots and fixed positions work from firmware 0.2.26. This screen (firmware "},{t:4,k:"firmware"},{t:3,v:") shifts the tiles up to the first free slot until that update."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Screen layout"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Add page"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 page is the most"},{t:2,i:[{t:4,k:"n"},{t:3,v:" pages is the most"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove page"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"The pages after this one shift up one slot"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edit top bar"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Empty slot. Click to add a tile here, or drag one over."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Empty slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:": add the next tile here"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Next tile goes here"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Empty"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Library"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entity"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entities"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, device, or room…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Add an entity"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"All"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lights"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switches"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actions"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fans"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Covers"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scenes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensors"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Values"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selects"}},person:{t:0,b:{t:2,i:[{t:3}],s:"People"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Room"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"All rooms"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Hide placed"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Hide what is already on this screen"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Everything here is already on this screen."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found. Try a different name, room or filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"This screen holds 1 tile; update its firmware for 48."},{t:2,i:[{t:3,v:"This screen holds "},{t:4,k:"n"},{t:3,v:" tiles; update its firmware for 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Drag onto a page, or tap + to add to the first free slot. ⌘K searches everything."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Light"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climate"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Vacuum"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cover"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Switch"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weather"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Value"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Select"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Person"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Image"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entity"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"graph"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analog clock"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"sun path"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"double"}},full:{t:0,b:{t:2,i:[{t:3}],s:"full page"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Name on the screen"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (from Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (default)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows a chosen icon from firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Goes to page"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (empty)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigation tiles need firmware 0.2.62: press Update on the screen first."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"This screen has no page "},{t:4,k:"page"},{t:3,v:", so a tap opens its last page. Choose another page."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"A tap on the tile opens that page."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Display"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digital clock"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analog clock"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Name and status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Large value"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weather forecast"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Graph"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Sun path"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has no numbers for this entity, so the graph stays empty. Choose another display."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"This weather service has no daily forecast in Home Assistant. Choose another display."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Size"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Double-width"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Full page"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Full page: one big button that lights up while on; a slider, controls or a graph sit at the bottom of it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"A full-page tile needs firmware 0.2.62: press Update on the screen first."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Page"}},new:{t:0,b:{t:2,i:[{t:3}],s:"New page"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Direct control on the tile"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this control for this entity, so it stays empty on the screen. Choose another one."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"At the bottom of the full-page tile; a tap anywhere else works as set below."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"On the right of the double-width tile, like the rows in Home Assistant. Tapping the name works as set below."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen shows direct control from firmware 0.2.19; until then the tile stays as it was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"On tap"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatic"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Open control"}},none:{t:0,b:{t:2,i:[{t:3}],s:"View only"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"On / off"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Perform action"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant can't turn this on and off, so a tap does nothing. Choose another option."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen switches this from firmware 0.2.58: press Update on the screen. Until then a tap opens its card."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Hold the tile to open its card."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Small slider on the tile"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Yes, control directly"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant has nothing a slider can change for this entity. Choose No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"History"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hour"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastel background"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Background: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:" on page "},{t:4,k:"page"},{t:3,v:". Enter: configure, arrow keys: move"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remove tile"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Action"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Asking Home Assistant which actions this entity has…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant isn't answering right now. Try again in a moment."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose an action"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example toggle, position, or play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an action"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No action found."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant doesn't offer this action for this entity any more, so a tap does nothing. Choose another one."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Not set"}},on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant needs "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"The screen performs an action from firmware 0.2.58: press Update on the screen. Until then a tap works as Automatic."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"No icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search, for example lamp, music, or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"No icon, text only"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No icon found."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Current data"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connection, status, and supported properties"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Reading…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Fetching current HA status…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Small slider: "},{t:4,k:"slider"},{t:3,v:" · Display: "},{t:4,k:"display"},{t:3,v:" · Size: "},{t:4,k:"size"},{t:3,v:" · Control: "},{t:4,k:"control"},{t:3,v:" · Background: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"yes"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"none"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Default"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Read again"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" removed from the top bar"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"The top bar has room for 1 item."},{t:2,i:[{t:3,v:"The top bar has room for "},{t:4,k:"n"},{t:3,v:" items."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"This is already in the top bar."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Top bar"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Top bar: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself, also works without Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" item"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" items"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Left: name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"For example: Living room"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Right: time, sensors, or a clock"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", slot "},{t:4,k:"slot"},{t:3,v:". Enter: configure, arrows: move"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remove "},{t:4,k:"name"},{t:3,v:" from the top bar"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximum 1 item"},{t:2,i:[{t:3,v:"Maximum "},{t:4,k:"n"},{t:3,v:" items"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Add the time, date, analog clock, or an entity"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Add time, date, or an entity"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Not everything fits next to the name: the screen drops the dashed items. Remove one or choose a shorter name."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Drag to reorder; tap an item to configure it."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensors, the date, and the analog clock appear from firmware "},{t:4,k:"version"},{t:3,v:"; until that update, this screen shows the name and, if the time is in the bar, the clock."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden: not active right now"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't fit next to the name"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Dial"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Hidden right now: not active"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Doesn't currently fit next to the name"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"How it looks on the screen"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Small dial with the time"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"What to show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Last changed keeps counting on the screen itself: “Just now”, “5 min ago”, “Yesterday”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatic (like Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Show"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Only when active hides the item as long as it's off, closed, away, or 0. Handy for an open door, a running washing machine, or who's home."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24 hour clock · change under "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12 hour clock · change under "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Settings → Language & region"}},date_hint:{t:0,b:{t:2,i:[{t:4,k:"date"},{t:3,v:" today. The date follows the screen's own clock."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Up"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Down"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Add to the top bar"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slot used"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" of "},{t:4,k:"n"},{t:3,v:" slots used"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"From the screen itself"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Already added"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggestions from Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"An entity"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name, room, or entity, e.g. temperature or door"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an entity for the top bar"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"No entities found."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Night"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brightness"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Dark mode"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto standby"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby after"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Standby brightness"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Night mode"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Starts"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Ends"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Night brightness"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Back to page 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"After"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Also on standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Swipe between pages"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotation"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Still saving the other screen's settings. Try again in a moment."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Page buttons and swiping are off, so only Go to page tiles change the page."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"page "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pages "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tile, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]},{t:2,i:[{t:3,v:"You have "},{t:4,k:"n"},{t:3,v:" Go to page tiles, to "},{t:4,k:"targets"},{t:3,v:", but none to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"You have no Go to page tiles."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach it."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"You have no Go to page tiles to "},{t:4,k:"missing"},{t:3,v:", so you can't reach them."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"The tiles to "},{t:4,k:"pages"},{t:3,v:" are only on pages you can't reach."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"From "},{t:4,k:"pages"},{t:3,v:" no tile leads back to page 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"This screen is offline. Its settings can change once it's back."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply on the screen at once, and show up here when they change there."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Changes apply at once. Firmware 0.2.49 lets the screen keep them itself."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"This entity is off in Home Assistant, or the screen is restarting."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lower"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" higher"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Starting update…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building the firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Writing the firmware over Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Building and installing…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Waiting for the screen to come back…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Checking that it stays stable…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"New language: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Screens will now update automatically at night."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatic updates are off."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Updating to firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"No screen paired yet. New screens get firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is available for "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"All screens have firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Update 1 screen"},{t:2,i:[{t:3,v:"Update all "},{t:4,k:"n"},{t:3,v:" screens"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"What's new in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Update automatically every night"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Between 03:00 and 06:00, one screen at a time. Stops on an error and reports it in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Claude Code picks it up right away."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installed. Restart Claude Code once so it finds the new skills folder."}},text:{t:0,b:{t:2,i:[{t:3}],s:'Teach Claude about ESP Screens, then ask: "Show an alert on all my screens when the mailbox is full." Claude knows the alert events, every field, color, and icon.'}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install for Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Install again"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Update the skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Not installed"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installed"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installed · a newer version is ready"}},writes:{t:0,b:{t:2,i:[{t:3,v:"For Claude Code in Home Assistant. Writes one file to "},{t:4,k:"path"},{t:3,v:"; installing again replaces it."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download for claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload the zip in Claude under Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Everything around your screens."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← My screens"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Screens"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Add a screen, or build and reinstall the firmware of one you already have."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Build and install via USB or Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Language & region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Screen language"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant's language ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant's language"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"The screens use English until Home Assistant's language is available."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not checked yet, help welcome"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is not checked yet, help welcome: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"how to translate"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"After a change every screen needs a firmware update, one build each: with its Update button, or in the nightly updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Time format"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 hour"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 hour"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Number format"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatic, follows the language ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Your Home Assistant profile: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Use these"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"The editor itself follows the language of your Home Assistant profile."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Saved. Every screen takes the new language with its next update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"A card over the whole screen from an automation, on one screen or on all of them. The cheatsheet has the action names, fields, icons, and colors, and a form to try one."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Full-screen notifications, from an automation"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Build and install screen firmware"}},intro:{t:0,b:{t:2,i:[{t:3,v:"The built-in ESPHome CLI uses your own profile (YAML with keys) and secrets. Choose the screen's profile, then a USB port (screen connected to the Home Assistant machine), "},{t:4,k:"ota"},{t:3,v:" with the hostname, or "},{t:4,k:"download"},{t:3,v:" to put the firmware on the screen from your own computer. "},{t:4,k:"check"},{t:3,v:" only validates, "},{t:4,k:"build"},{t:3,v:" compiles, "},{t:4,k:"install"},{t:3,v:" puts the firmware on the screen. Your tiles stay as they are in ESP Screens. The first build takes a few minutes."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Check"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Build only"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Build & install"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Build & download"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing. Update the app to 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Choose the intended profile, then a USB port, an IP address, or Download."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome profile"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Install to"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · no board found on the Home Assistant machine yet"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Download · flash from your own computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP address or hostname"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Download "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Put it on the screen with "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome or Edge: Connect, choose the screen's USB port, Install, and select this file. It holds your Wi-Fi password and the screen's keys: keep it to yourself."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Connect and install."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profile saved."}},running:{t:0,b:{t:2,i:[{t:3}],s:"One moment…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to download."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"That didn't work."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens creates the screen's own profile with unique keys and builds the firmware. Connect the screen with a USB data cable to the machine running Home Assistant, or download the firmware and put it on the screen from your own computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Which screen do you have?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2.8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Name"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Living room screen"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Device name"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"customize"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Every screen gets its own profile with its own keys. Four screens? Go through this four times with a different name."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lowercase letters, digits, and dashes. A different name for each screen."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi name (2.4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi password"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Fill in once: ESP Screens saves this in ESPHome secrets.yaml, later screens use it automatically."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Your ESPHome secrets.yaml is still missing Wi-Fi details. ESP Screens only fills in the missing lines."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi comes from your ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in the ESPHome folder isn't valid YAML. Fix the file first; it won't be overwritten."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Install via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · save profile only"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Connect the screen with a USB data cable to the Home Assistant machine; the list refreshes on its own. Or choose Download to use your own computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download the firmware and put it on the screen from your own computer, in Chrome or Edge. After that, updates go over Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"The profile goes into the ESPHome folder. You can install later via Firmware & USB, or from ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"More than one board connected: choose this screen's port."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Once over USB; after that, everything is wireless."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Install"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Save profile"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A build or installation is already running ("},{t:4,k:"file"},{t:3,v:"). Wait for it to finish."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"The ESPHome CLI is missing from this installation; only saving the profile is possible."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" is in the ESPHome folder"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Writing firmware to "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Building firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware for "},{t:4,k:"name"},{t:3,v:" is ready"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware is on "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Build failed"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Install failed"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Install it later from Firmware & USB: choose this profile, then the USB port of the Home Assistant machine, or Download to put the firmware on the screen from your own computer. Save the API key for pairing:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Don't disconnect the USB cable yet."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the installation keeps running and you'll find it again under New screen."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A first build takes a few minutes on a Raspberry Pi. You can leave this page: the build keeps running and you'll find it again under New screen."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Put it on the screen from your own computer, then pair the screen with Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. Pair it with Home Assistant now:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"The screen boots up and connects to your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs. Pair it with Home Assistant now:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"See the log below."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" with a USB data cable."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plug the screen into your computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome or Edge, click Connect and choose the screen's USB port."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" and select "},{t:4,k:"file"},{t:3,v:". The screen restarts and joins your Wi-Fi. The CYD first asks for a touch calibration: tap the crosshairs."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Click Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"The file holds your Wi-Fi password and the screen's keys: keep it to yourself."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API key"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" This happens outside ESP Screens. Home Assistant discovers "},{t:4,k:"name"},{t:3,v:" as an ESPHome device; click Add. Not discovered? Add ESPHome manually with the screen's IP address."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Go to Home Assistant → Settings → Devices & services."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" above when Home Assistant asks for an encryption key."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Paste the API key"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome integration → Configure → “Allow the device to perform Home Assistant actions”. Without this, the screen sees everything but controls nothing."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Allow HA actions:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Back in ESP Screens, the screen appears in the list on the left within about thirty seconds; until then it's shown there as “not yet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Choose your tiles."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome log"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Retry"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Install another screen"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Start over"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Done"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"A full-screen notification, from an automation."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Every screen has the "},{t:4,k:"action"},{t:3,v:" action. It places a card over everything, wakes the screen, and keeps the backlight at normal brightness until someone taps the button or the timeout runs out. Home Assistant itself shows no explanation or dropdowns for ESPHome actions; everything you can fill in is listed here."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"The cheatsheet is still loading; one moment."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Someone is at the door"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Door 3, back"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Coming"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sections"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Try it"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Your screens"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In an automation"}},all:{t:0,b:{t:2,i:[{t:3}],s:"All screens"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"The fields"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icons"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colors"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Behavior"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Events"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Send one alert now, with the same fields an automation sends. The screen shows the card and, with blinking on, flashes its backlight."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Screen"}},all:{t:0,b:{t:2,i:[{t:3,v:"All screens ("},{t:4,k:"ready"},{t:3,v:" ready)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · not ready"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Title"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtitle"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Color"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Button text"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconds, 0 waits for the button)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Blink the backlight"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Four times when the alert arrives."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Sending…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Send alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screen."}]},{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"n"},{t:3,v:" screens."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Sent to "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Sent to the screen."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 skipped (offline or old firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" skipped (offline or old firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Left empty: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"No screen could show it: check that a screen is online with firmware "},{t:4,k:"version"},{t:3,v:" or newer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"White (default)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Every screen has its own action, with the device name in it. From firmware "},{t:4,k:"version"},{t:3,v:"; update an older screen with its Update button under Screens."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"No screen paired yet. Install one via New screen; the action appears once Home Assistant sees the screen."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update needed · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Device name unknown · update the screen"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Show alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Dismiss alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" and search for "},{t:4,k:"esphome"},{t:3,v:`. Choose your screen's action: Home Assistant calls it "Performs the action show_alert of the node `},{t:4,k:"device"},{t:3,v:'".'}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Add action"}},device:{t:0,b:{t:2,i:[{t:3}],s:"device name"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant asks for all seven; leave what you don't use empty ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", off)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fill in the fields."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefer YAML? Choose "},{t:4,k:"edit"},{t:3,v:" on the action and paste the example below."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Example for"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"a screen (not paired yet)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edit in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copy YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"All screens at once"}},text:{t:0,b:{t:2,i:[{t:3,v:"Fire the event "},{t:4,k:"show"},{t:3,v:" with the same fields, and ESP Screens passes the alert on to every screen that is online, including screens you add later. "},{t:4,k:"dismiss"},{t:3,v:" clears it everywhere. In an automation, add the "},{t:4,k:"event"},{t:3,v:" action or paste the example under "},{t:4,k:"edit"},{t:3,v:". Leave out the fields you don't use. ESP Screens has to be running for this."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Fire manual event"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Text is free-form; the limit is in bytes, and an accented letter counts as two. What doesn't fit gets an ellipsis (title) or is dropped (subtitle)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Field"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"What it does"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Example"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"text"}},int:{t:0,b:{t:2,i:[{t:3}],s:"number"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"on / off"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entity"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 to 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:", for example "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" and the hex codepoint ("},{t:4,k:"hex"},{t:3,v:") also work. Only these icons are included in the firmware; any other name shows the warning triangle. Tap an icon to copy its name."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handy for notifications"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Search for an icon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Search by name or description…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Also available: control and weather icons"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copy "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:'No icon for "'},{t:4,k:"query"},{t:3,v:'". Unknown names show the warning triangle ('},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Fill in the name in "},{t:4,k:"field"},{t:3,v:". These are the pastel shades of the tiles, with dark text. Empty or unknown gives the white card. Tap to copy."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" An alert immediately wakes a dimmed or dark screen and appears above every page, every open light card, and the standby layer."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wakes the screen."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" As long as the card is showing, the backlight stays at normal brightness. Standby and night hours wait. After the button, the regular standby time starts again."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"On until the button."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" waits for the button, however long that takes. With "},{t:4,k:"minute"},{t:3,v:" the card disappears after a minute, but the button closes it sooner."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" blinks the backlight four times when the alert arrives (about a second) and leaves the screen on afterward."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Blinking."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" A new alert replaces the current one; there's no stack. The replaced alert reports itself as "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Replacing."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" clears the card, for example if the door is already open. Without an alert, that action does nothing."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Closing remotely."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" does nothing; only the button closes it. That way a wake-up tap never accidentally dismisses the alert."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tapping beside the card"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Every end fires the event "},{t:4,k:"event"},{t:3,v:" with "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (the device name) and the "},{t:4,k:"device_id"},{t:3,v:" that Home Assistant adds. Visible under Settings → Tools → Events."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"When"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Waiting until someone presses the button"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use a "},{t:4,k:"bold"},{t:3,v:': orange for the door, red for smoke or water, green for "done". The text always stays dark and readable.'}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"color per kind of notification"}},short:{t:0,b:{t:2,i:[{t:3,v:"Keep the title "},{t:4,k:"bold"},{t:3,v:"; a screen shows about twenty characters on one line and ends a longer title with an ellipsis. Put details in the subtitle."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"short"}},button:{t:0,b:{t:2,i:[{t:3,v:"A "},{t:4,k:"bold"},{t:3,v:' turns the notification into a question: "Coming", "Seen", "Turn off". The event then tells you who responded.'}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"custom button text"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"For an alert that resolves itself (the door opens, the laundry gets taken out) close it in the same automation with "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Every screen? Fire "},{t:4,k:"event"},{t:3,v:" once (see All screens at once). The screens still work independently and each reports with its own "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Rather "},{t:4,k:"bold"},{t:3,v:" for the automation? Install the ESP Screens skill under Settings → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"ask Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Doorbell: show the alert and wait until someone presses the button."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Someone is coming to the door."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Advanced · local override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Override YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"This small file is yours. It is loaded after the shared screen package and stays in place when ESP Screens updates. Change hardware-specific details here, such as a display model."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"What is safe to change?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pins and other device details. Name, Wi-Fi, API, OTA and package links remain managed."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Active"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Ready to attach"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Local override YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Use example"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 character"},{t:2,i:[{t:4,k:"n"},{t:3,v:" characters"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 line"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lines"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Save & check"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Save override"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"No ESPHome profile was found for this screen."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Changes here apply on the next build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Save once to attach this file to the profile."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Checking and saving…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Saved. The override is kept during firmware updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Override YAML saved."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Saved. ESPHome is checking the complete profile…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome is checking the profile…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome is checking the profile… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"The complete profile is valid. Safe to build and install."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome rejected the complete profile. See Firmware & USB for the full log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Replace the current text with the example?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Example loaded. Save it when you are ready."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Clear the local override?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"The override will be empty after you save."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Unknown"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Unavailable"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Heat"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Cool"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Heat/Cool"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Fan only"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Heating"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Cooling"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drying"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Fan"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preheating"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Opening"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Closing"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Playing"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Away"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Above horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Below horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Docked"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Cleaning"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Paused"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Returning to dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Idle"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Sunny"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Clear, night"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Cloudy"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Partly cloudy"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Rainy"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Pouring"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Snowy, rainy"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Fog"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hail"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Lightning"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Lightning, rainy"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Windy"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Exceptional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Not charging"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Cold"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connected"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnected"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Hot"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Light detected"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"No light"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Unlocked"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Locked"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Wet"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Dry"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Moving"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Not moving"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Plugged in"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Unplugged"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"On"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Off"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Running"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Not running"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Unsafe"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Safe"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update available"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detected"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Clear"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Closed"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Activate"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Run"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Press"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Just now"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min ago"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 hour ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" hours ago"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Yesterday"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 day ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" days ago"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weeks ago"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 month ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" months ago"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 year ago"},{t:2,i:[{t:4,k:"n"},{t:3,v:" years ago"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 hour"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" hours"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Tomorrow"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"In 1 day"},{t:2,i:[{t:3,v:"In "},{t:4,k:"n"},{t:3,v:" days"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"Sunday"}},{t:0,b:{t:2,i:[{t:3}],s:"Monday"}},{t:0,b:{t:2,i:[{t:3}],s:"Tuesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Wednesday"}},{t:0,b:{t:2,i:[{t:3}],s:"Thursday"}},{t:0,b:{t:2,i:[{t:3}],s:"Friday"}},{t:0,b:{t:2,i:[{t:3}],s:"Saturday"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"Sun"}},{t:0,b:{t:2,i:[{t:3}],s:"Mon"}},{t:0,b:{t:2,i:[{t:3}],s:"Tue"}},{t:0,b:{t:2,i:[{t:3}],s:"Wed"}},{t:0,b:{t:2,i:[{t:3}],s:"Thu"}},{t:0,b:{t:2,i:[{t:3}],s:"Fri"}},{t:0,b:{t:2,i:[{t:3}],s:"Sat"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"Su"}},{t:0,b:{t:2,i:[{t:3}],s:"Mo"}},{t:0,b:{t:2,i:[{t:3}],s:"Tu"}},{t:0,b:{t:2,i:[{t:3}],s:"We"}},{t:0,b:{t:2,i:[{t:3}],s:"Th"}},{t:0,b:{t:2,i:[{t:3}],s:"Fr"}},{t:0,b:{t:2,i:[{t:3}],s:"Sa"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"January"}},{t:0,b:{t:2,i:[{t:3}],s:"February"}},{t:0,b:{t:2,i:[{t:3}],s:"March"}},{t:0,b:{t:2,i:[{t:3}],s:"April"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"June"}},{t:0,b:{t:2,i:[{t:3}],s:"July"}},{t:0,b:{t:2,i:[{t:3}],s:"August"}},{t:0,b:{t:2,i:[{t:3}],s:"September"}},{t:0,b:{t:2,i:[{t:3}],s:"October"}},{t:0,b:{t:2,i:[{t:3}],s:"November"}},{t:0,b:{t:2,i:[{t:3}],s:"December"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"Jan"}},{t:0,b:{t:2,i:[{t:3}],s:"Feb"}},{t:0,b:{t:2,i:[{t:3}],s:"Mar"}},{t:0,b:{t:2,i:[{t:3}],s:"Apr"}},{t:0,b:{t:2,i:[{t:3}],s:"May"}},{t:0,b:{t:2,i:[{t:3}],s:"Jun"}},{t:0,b:{t:2,i:[{t:3}],s:"Jul"}},{t:0,b:{t:2,i:[{t:3}],s:"Aug"}},{t:0,b:{t:2,i:[{t:3}],s:"Sep"}},{t:0,b:{t:2,i:[{t:3}],s:"Oct"}},{t:0,b:{t:2,i:[{t:3}],s:"Nov"}},{t:0,b:{t:2,i:[{t:3}],s:"Dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:"."}},group:{t:0,b:{t:2,i:[{t:3}],s:","}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Page "},{t:4,k:"n"}]}}}}},Wh=Vh,Ka=e=>e%10>=2&&e%10<=4&&(e%100<12||e%100>14),qa={one_other:e=>e===1?0:1,one_upto_1:e=>Math.abs(e)<=1?0:1,slavic_pl:e=>e===1?0:Ka(e)?1:2,east_slavic:e=>e%10===1&&e%100!==11?0:Ka(e)?1:2,none:()=>0},Bh=Object.assign({"../../screen_manager/translations/de.json":()=>pn(()=>import("./de-Cl47viL4.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/en-GB.json":()=>pn(()=>import("./en-GB-v9zPRS2K.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/es.json":()=>pn(()=>import("./es-2dmn4vz_.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/fr.json":()=>pn(()=>import("./fr-hu4FKHEL.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/it.json":()=>pn(()=>import("./it-XNNJYTR_.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/nl.json":()=>pn(()=>import("./nl-CwiIFXXi.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pl.json":()=>pn(()=>import("./pl-CMPJmoaL.js"),[],import.meta.url).then(e=>e.default),"../../screen_manager/translations/pt.json":()=>pn(()=>import("./pt-Brrep2mC.js"),[],import.meta.url).then(e=>e.default)}),Kh=Object.fromEntries(Object.entries(Bh).map(([e,t])=>[e.slice(e.lastIndexOf("/")+1,-5),t])),Rs={...cp},tu=new Set(["en"]),_l={},nu=e=>_l[e]=(t,n)=>Math.min((qa[Rs[e]?.plural]||qa.one_other)(t),n-1),yl=()=>["en",...Object.keys(Rs).filter(e=>e!=="en").sort()];yl().forEach(nu);const cs=Ih({locale:"en",fallbackLocale:"en",messages:{en:Wh},pluralRules:_l,missingWarn:!1,fallbackWarn:!1,missing:(e,t)=>{}}),c=cs.global.t,qh=(e,t="en")=>cs.global.te(e,t),wl=()=>cs.global.locale.value,zh=e=>Rs[e];function Yh(e=window){try{if(e.parent!==e){const t=e.parent.document.documentElement.lang;if(t)return t}}catch{}return e.navigator.language||"en"}function su(e,t=yl()){const n=i=>t.find(l=>l.toLowerCase()===i.toLowerCase()),s=(e||"").trim();return s?n(s)||n(s.split("-")[0]):void 0}const iu=(e,t=yl())=>su(e,t)||"en";function Gh(e,t,n=Rs[e]){n&&(Rs[e]=n),_l[e]||nu(e),cs.global.setLocaleMessage(e,t),tu.add(e)}const za={};function ou(e){if(tu.has(e))return Promise.resolve(!0);const t=Kh[e];return t?za[e]??=t().then(n=>(Gh(e,n),!0),()=>(delete za[e],!1)):Promise.resolve(!1)}async function Jh(e=iu(Yh())){const t=await ou(e)?e:"en";return cs.global.locale.value=t,document.documentElement.lang=t,t}const is={point:{decimal:".",group:",",from:4},comma:{decimal:",",group:".",from:4},space:{decimal:",",group:" ",from:4}};function lu(e,t){const n=String(e),s=/^(-?)(\d+)(?:\.(\d+))?$/.exec(n);if(!s)return n;const i=s[2].length>=t.from?s[2].replace(/\B(?=(\d{3})+$)/g,t.group):s[2];return`${s[1]}${i}${s[3]!==void 0?t.decimal+s[3]:""}`}const Ya={comma_decimal:"point",decimal_comma:"comma",space_comma:"space"};function Xh(e=window){try{if(e.parent===e)return{};const t=e.parent.document.querySelector("home-assistant")?.hass?.locale,n=["12","24"].includes(t?.time_format)?t.time_format:void 0;return{...n?{clock:n}:{},...Ya[t?.number_format]?{numbers:Ya[t.number_format]}:{}}}catch{return{}}}const Zh=(e,t=wl())=>new Intl.ListFormat(t==="en"?"en-GB":t,{type:"conjunction"}).format(e.map(String)),qe=6,cn=8,Ns=cn*qe,au=["single","wide","full"],xn=e=>e===!0?"wide":e===!1?"single":e,us=e=>/^screen\.page_[1-8]$/.test(e)?Number(e.slice(-1)):0,ut=e=>au.includes(e.options?.size)?e.options.size:"single",Do=e=>ut(e)!=="single",ru=e=>ut(e)==="full",cu=e=>e-e%qe,uu=e=>e-e%2,Et=e=>Math.floor(e/qe),kl=e=>xn(e)==="full"?qe:xn(e)==="wide"?2:1,Wn=(e,t)=>xn(t)==="full"?Array.from({length:qe},(n,s)=>cu(e)+s):xn(t)==="wide"?[e,e+1]:[e],Ga=(e,t)=>xn(t)==="full"?cu(e):xn(t)==="wide"?uu(e):e,Xe=e=>e.tiles.map(t=>({tile:t,slot:t.slot}));function du(e){let t=0;return e.map(n=>{const s=ut(n);s==="full"&&t%qe?t+=qe-t%qe:s==="wide"&&t%2===1&&t++;const i=t;return t+=kl(s),i})}function Qh(e){const t=du(e);return e.some((n,s)=>n.slot!==t[s])}function Vi(e){if(e.tiles.some(t=>!Number.isInteger(t.slot))){const t=du(e.tiles);e.tiles.forEach((n,s)=>n.slot=t[s])}e.tiles.sort((t,n)=>t.slot-n.slot)}function es(e){const t=new Set;for(const{tile:n,slot:s}of e)for(const i of Wn(s,ut(n)))t.add(i);return t}const Fs=(e,t,n)=>Number.isInteger(t)&&t>=0&&t!e.has(s));function wi(e,t,n=0){for(let s=n;si.includes(h))?u.push(f):r.push({tile:f,slot:f.slot}));for(const f of u){const h=ut(f),p=es(r);let b=l.map(v=>Ga(v,h)).find(v=>Fs(p,v,h));if(b===void 0&&(b=fu(p,h,f.slot)),b<0)return null;r.push({tile:f,slot:b})}return r.sort((f,h)=>f.slot-h.slot)}function Ot(e,t=1){const n=Math.max(0,...e.map(({tile:s,slot:i})=>i+kl(ut(s))));return Math.min(cn,Math.max(1,Math.ceil(n/qe),t||1))}function em(e,t){const n=Array.from({length:t},()=>new Set);let s=0;for(const{tile:h,slot:p}of e){const b=us(h.entity)-1,v=Et(p);b<0||b>=t||v>=t||(s++,n[v].add(b))}const i=h=>{const p=new Set([0]),b=[0];for(;b.length;)for(const v of h(b.shift()))p.has(v)||(p.add(v),b.push(v));return p},l=i(h=>[...n[h]]),r=i(h=>n.flatMap((p,b)=>p.has(h)?[b]:[])),u=Array.from({length:t},(h,p)=>p),f=h=>h.map(p=>p+1);return{tiles:s,targets:f(u.filter(h=>n.some(p=>p.has(h)))),unreachable:f(u.filter(h=>!l.has(h))),noWayBack:f(u.filter(h=>l.has(h)&&!r.has(h)))}}function tm(e){const t=e.split(".")[0];return t==="sun"?{options:{display:"sunpath",size:"wide"}}:t==="weather"?{options:{display:"forecast",size:"wide"}}:us(e)?{}:t==="screen"?{options:{display:"digital",size:"wide"}}:{}}const hu=e=>({entity:e,name:"",slot:-1,...tm(e)});function mu(e,t){const n=e.entity.split(".")[0],s=t.controls?.[n],i=e.options||{};if(!s||!["wide","full"].includes(i.size)||(i.display||"standard")!=="standard"||i.inline==="slider")return null;const l=i.controls??(i.size==="full"?"none":s.default);return l==="none"?null:l}function nm(e,t){const n=mu(e,t);return n?t.controls?.[e.entity.split(".")[0]]?.choices.find(s=>s.key===n)?.label||n:c("editor.inspect.control_none")}const Uo=e=>(/^(\d+)\.(\d+)\.(\d+)$/.exec(e||"")||[]).slice(1).map(Number);function un(e,t){const[n,s]=[Uo(e),Uo(t)];if(n.length!==3||s.length!==3)return!1;for(let i=0;i<3;i++)if(n[i]!==s[i])return n[i]>s[i];return!0}const sm=(e,t,n,s)=>un(e,`${t}.${n}.${s}`),im=Ns;function om(e){return Uo(e).length!==3?10:un(e,"0.2.62")?im:un(e,"0.2.7")?20:10}const lm=["standard","watch","forecast","graph","digital","analog","sunpath"],bu=e=>lm.includes(e)?c(`editor.displays.${e}`):e,am=e=>c(`editor.sizes.${au.includes(e)?e:"single"}`),Ja=["light","switch","input_boolean","fan","media_player","climate"],rm=["light","fan","cover","number","input_number","media_player"],cm={light:["☀","#ad7600","#fff3d3"],climate:["❄","#c86620","#ffebdc"],vacuum:["◉","#008577","#def3ed"],fan:["✣","#008aab","#def5fa"],cover:["▤","#8053af","#eee5f8"],media_player:["▶","#007cad","#def2fc"],sensor:["⌁","#3476b1","#e5effa"],binary_sensor:["◈","#ad7600","#fff3d3"],switch:["⏻","#ad7600","#fff3d3"],input_boolean:["⏻","#ad7600","#fff3d3"],scene:["✦","#8053af","#eee5f8"],script:["▷","#8053af","#eee5f8"],weather:["☁","#007cad","#def2fc"],number:["±","#008577","#def3ed"],input_number:["±","#008577","#def3ed"],select:["≡","#5862af","#eaecfa"],input_select:["≡","#5862af","#eaecfa"],button:["↗","#5862af","#eaecfa"],input_button:["↗","#5862af","#eaecfa"],screen:["◷","#25282c","#e9ecf1"],sun:["☼","#c86620","#ffebdc"],timer:["⏱","#008577","#def3ed"],person:["☺","#2f7d32","#e1f2e2"],camera:["◧","#3d4a57","#e6ebf0"],image:["◧","#3d4a57","#e6ebf0"]};function jt(e){const t=e.split(".")[0],n=cm[t];return n?[c(`editor.domains.${t}`),...n]:[c("editor.domains.entity"),"◇","#637184","#edf0f4"]}const vu={clock:"clock-outline",analog:"clock-outline",date:"calendar"},at=e=>JSON.stringify(e),Ae=e=>String.fromCodePoint(parseInt(e,16));function Wi(e,t=new Date){let n=t.getHours();return e||(n=n%12||12),`${String(n).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}const $l=(e=new Date,t="en")=>c("screen.date.top_bar",{weekday:c(`screen.date.weekdays_min.${e.getDay()}`,{},{locale:t}),day:e.getDate(),month:c(`screen.date.months_short.${e.getMonth()}`,{},{locale:t})},{locale:t});function um(e,t=Math.floor(Date.now()/1e3),n="en"){const s=t-e,i=Math.abs(s),l=u=>Math.floor(i/u),r=(u,f)=>f===void 0?c(`screen.time.${u}`,{},{locale:n}):c(`screen.time.${u}`,f,{locale:n});return s<0?i<3600?r("in_minutes",Math.max(1,l(60))):i<86400?r("in_hours",l(3600)):i<172800?r("tomorrow"):r("in_days",l(86400)):i<60?r("just_now"):i<3600?r("minutes_ago",l(60)):i<86400?r("hours_ago",l(3600)):i<172800?r("yesterday"):i<604800?r("days_ago",l(86400)):i<2592e3?r("weeks_ago",l(604800)):i<31536e3?r("months_ago",l(2592e3)):r("years_ago",l(31536e3))}const dm={guition:{width:448,top:36,name:27,text:21,icon:26},cyd:{width:298,top:24,name:18,text:14,icon:18}};let ps;const jo=new Map,fm=()=>jo.clear();function Fn(e,t){const n=`${t}|${e}`;let s=jo.get(n);if(!s){if(ps===void 0&&(ps=document.createElement("canvas").getContext("2d")),ps){ps.font=t;const i=ps.measureText(e);s={left:-i.actualBoundingBoxLeft,right:i.actualBoundingBoxRight,top:-i.actualBoundingBoxAscent,bottom:i.actualBoundingBoxDescent,advance:i.width}}else{const i=Number(/(\d+(?:\.\d+)?)px/.exec(t)?.[1]||14),l=[...e].length*i*.55;s={left:0,right:l,top:-i*.72,bottom:i*.02,advance:l}}jo.set(n,s)}return s}const pm=e=>({name:`500 ${e.name}px "Bar Roboto"`,text:`400 ${e.text}px "Bar Roboto"`,icon:`${e.icon}px "Tile Icons"`});function hm(e){return{icon:Math.max(2,Math.floor((e*4+5)/10)),item:Math.max(6,Math.floor((e*125+50)/100)),name:Math.max(8,Math.floor((e*16+5)/10))}}function gu(e,t,n,s){const i=pm(t),l=Fn("0",i.text),r=Math.round(l.bottom-l.top),u=hm(r),f=Fn(String.fromCodePoint(983376),i.icon),h=Math.round(f.bottom-f.top),p=e.map((C,B)=>{const O=s(C),E={index:B,item:C,view:O,shown:O.shown,width:0};return O.analog?(E.dial=h,E.width=h,E):(O.icon&&(E.icon={glyph:Ae(O.icon),ink:Fn(Ae(O.icon),i.icon)},E.width+=E.icon.ink.right-E.icon.ink.left),O.text&&(E.text={value:O.text,ink:Fn(O.text,i.text)},E.width+=(E.icon?u.icon:0)+E.text.ink.right-E.text.ink.left),E)}),b=p.filter(C=>C.shown),v=Fn(n,i.name).advance,y=Math.min(v,Math.floor(t.width*35/100)),I=C=>C.reduce((B,O)=>B+O.width,0)+Math.max(0,C.length-1)*u.item;let T=0;for(;Tt.width;)T++;const $=b.slice(T),A=new Set(b.slice(0,T).map(C=>C.index));let S=t.width-I($);for(const C of $)C.x=S,S+=C.width+u.item;const D=$.length?$[0].x-u.name:t.width;return{metrics:t,fonts:i,cap:r,zero:l,gaps:u,parts:p,placed:$,dropped:A,nameText:n,natural:v,nameRoom:D}}function mm(e,t,n){if(Fn(e,t).advance<=n)return e;const s=[...e];for(;s.length&&Fn(s.join("")+"...",t).advance>n;)s.pop();return s.join("")+"..."}function bm(e){"fonts"in document&&Promise.all([document.fonts.load('500 27px "Bar Roboto"',"Studio 0"),document.fonts.load('400 21px "Bar Roboto"',"Away 0"),document.fonts.load('26px "Tile Icons"',String.fromCodePoint(983376))]).then(()=>{fm(),e()}).catch(()=>{})}let _u="";function vm(e){_u=e||""}async function xl(e,t={}){const n=await fetch(`api/${e}`,{...t,headers:{"Content-Type":"application/json","X-Screen-CSRF":_u,"X-ESP-Screens-Language":wl(),...t.headers}});if(!n.ok){let s=c("editor.api.failed");try{const i=(await n.json())?.error;typeof i=="string"&&i.trim()&&(s=i)}catch{}throw new Error(s)}return n}const Nt=async e=>(await xl(e)).json(),ft=async(e,t,n,s={})=>{const l=await(await xl(e,{method:t,body:n===void 0?void 0:JSON.stringify(n),...s})).text();return l?JSON.parse(l):null},m=qn({inventory:{screens:[],entities:[]},connected:!1,reachable:!0,selected:null,layout:null,dirty:!1,busy:!1,saved:0,tab:"layout",selectedTile:null,inspector:null,iconPickerOpen:!1,actionPickerOpen:!1,actionSearch:"",insertAt:-1,filter:"",search:"",capabilities:{},entityActions:{},topbarPreviews:{},topbarAdded:null,topbarOverflow:[],settingEdits:{},settingPending:!1,updating:[],toast:null,now:Date.now(),fontsVersion:0,route:location.hash,overrideProfile:null,overrideFriendly:"",drag:{active:!1,moving:null,preview:null},menuOpen:!1,liveStates:{},room:"",hidePlaced:!1,palette:!1,firmwareJob:null}),_t=k(()=>m.inventory.screens.find(e=>e.id===m.selected)),os=e=>(e&&"firmware_known"in e?e.firmware_known:e?.firmware)||"",yu=k(()=>os(_t.value)),wn=(e,t,n)=>sm(yu.value,e,t,n),Bn=k(()=>{const e=_t.value?.tile_limit;return typeof e=="number"&&Number.isInteger(e)&&e>0?e:om(yu.value)}),Xa=k(()=>{const e=_t.value?.full_page;return typeof e=="boolean"?e:wn(0,2,62)}),gm=k(()=>{const e=_t.value?.page_tiles_repeat;return typeof e=="boolean"?e:wn(0,2,65)}),Bi=e=>gm.value&&us(e)>0,Sl=k(()=>_t.value?.board==="guition"),wu=k(()=>dm[Sl.value?"guition":"cyd"]),co=k(()=>m.selectedTile&&m.layout?.tiles.includes(m.selectedTile)?m.selectedTile:void 0),Cl=e=>!!m.selectedTile&&xe(m.selectedTile)===xe(e);let Za=0;function Ce(e,t){m.toast={message:e,action:t},clearTimeout(Za),Za=window.setTimeout(()=>m.toast=null,t?8e3:5e3)}function _m(){m.toast=null}async function It(e,t,n="api_key"){try{if(!navigator.clipboard||!window.isSecureContext)throw new Error;await navigator.clipboard.writeText(e),Ce(c(`editor.copy.${n}.copied`))}catch{if(t){const s=document.createRange();s.selectNodeContents(t);const i=window.getSelection();i?.removeAllRanges(),i?.addRange(s)}Ce(c(document.execCommand("copy")?`editor.copy.${n}.copied`:`editor.copy.${n}.selected`))}}function ki(){const e="/config/integrations/dashboard";try{window.top.location.assign(e)}catch{window.open(e,"_blank")}}const ym=["","#settings","#new-screen","#firmware","#alerts","#override"],$t=k(()=>ym.includes(m.route)?m.route:"");function He(e){if(location.hash===e){m.route=e;return}location.hash=e}window.addEventListener("hashchange",()=>{m.route=location.hash,window.scrollTo(0,0)});function qs(e){return m.inventory.entities.find(t=>t.id===e)?.name||m.inventory.builtin?.find(t=>t.id===e)?.name||e}let uo={source:null,byName:{}};function zs(e){return uo.source!==m.inventory.icons&&(uo={source:m.inventory.icons,byName:Object.fromEntries((m.inventory.icons?.groups||[]).flatMap(t=>t.icons.map(n=>[n.name,n])))}),e?uo.byName[e]:void 0}function Sn(e){const t=m.inventory.icons;if(!t)return"F0335";const n=m.inventory.entities.find(i=>i.id===e),s=e.split(".")[0];return t.builtin?.[e]?t.builtin[e]:n?.icon?n.icon:s==="weather"?t.weather[n?.state||""]||t.weather.partlycloudy:s==="sun"?t.sun[n?.state||""]||t.sun.below_horizon:t.defaults[s]||t.fallback}const vs=e=>zs(e.options?.icon)?.cp||Sn(e.entity),fo=new Set;async function Ki(e){const t=[...new Set(e)].filter(n=>!fo.has(n)&&!n.startsWith("screen."));if(t.length){t.forEach(n=>fo.add(n));try{for(let n=0;n`entity=${encodeURIComponent(i)}`).join("&");Object.assign(m.capabilities,(await Nt(`capabilities?${s}`)).capabilities||{})}}catch{t.forEach(n=>fo.delete(n))}}}const po=new Set;async function wm(e){if(!po.has(e)){po.add(e);try{m.entityActions[e]=(await Nt(`entity-actions?entity=${encodeURIComponent(e)}`)).actions}catch{po.delete(e)}}}let ho=!1;async function qi(){const e=[...new Set((m.layout?.tiles||[]).map(t=>t.entity).filter(t=>!t.startsWith("screen.")))];if(!(!e.length||ho)){ho=!0;try{for(let t=0;t`entity=${encodeURIComponent(s)}`).join("&");Object.assign(m.liveStates,(await Nt(`states?${n}`)).states||{})}}catch{}finally{ho=!1}}}function km(e){const t=m.liveStates[e];if(t)return t;const n=m.inventory.entities.find(s=>s.id===e);return n?.state?{state:n.state,word:null,a:{}}:null}let Ho=0;function pt(){m.dirty=!0,m.saved=0,Ho++}function ku(e){if(e===m.selected&&m.layout&&m.dirty){Ze(),m.tab="layout",m.menuOpen=!1,He("");return}if(e!==m.selected&&m.dirty&&!confirm(c("editor.screen_view.confirm.switch")))return;e!==m.selected&&(Us(),m.settingEdits={}),m.selected=e,m.selectedTile=null,m.inspector=null,m.tab="layout",m.menuOpen=!1;const t=m.inventory.screens.find(s=>s.id===e);if(!t){m.layout=null;return}const n=JSON.parse(JSON.stringify(t.layout));Vi(n),n.pages=Ot(Xe(n),n.pages),m.layout=n,m.insertAt=-1,m.dirty=!1,m.saved=0,zi(0),Ki(n.tiles.map(s=>s.entity)),qi(),He("")}const $m=()=>m.layout?Xe(m.layout):[];function xm(e){const t=m.layout,n=t.tiles.map(i=>`${i.entity}@${i.slot}`).join();for(const{tile:i,slot:l}of e)i.slot=l,t.tiles.includes(i)||t.tiles.push(i);Vi(t),t.pages=Ot(Xe(t),t.pages);const s=t.tiles.map(i=>`${i.entity}@${i.slot}`).join()!==n;return s&&pt(),s}function Ys(e,t){if(!m.layout)return!1;Ki([e.entity]);const n=pu(m.layout.tiles,e,t),s=n?xm(n):!1;return s&&!m.liveStates[e.entity]&&qi(),s}function $u(e){const t=m.layout;if(!t||!Bi(e)&&t.tiles.some(i=>i.entity===e)||t.tiles.length>=Bn.value)return;const n=hu(e),s=m.insertAt>=0?m.insertAt:wi(es(Xe(t)),ut(n));m.insertAt=-1,s>=0&&Ys(n,s)&&Vo(n)}function xu(e){const t=m.layout;if(!t)return;const n=t.tiles.indexOf(e);n<0||(t.tiles.splice(n,1),Cl(e)&&Ze(),pt(),t.pages=Ot(Xe(t),t.pages),Ce(c("editor.layout.removed",{name:e.name||qs(e.entity)}),{label:c("editor.common.undo"),run:()=>Ys(e,e.slot)}))}function Qa(){const e=m.layout;e&&(e.pages=Math.min(cn,Ot(Xe(e),e.pages)+1),pt())}function Sm(e){const t=m.layout;if(t){for(const n of t.tiles)Et(n.slot)>e&&(n.slot-=qe);t.pages=Math.max(1,Ot(Xe(t),t.pages)-1),pt()}}function Cm(e,t){const n=m.layout;if(!n||!Number.isInteger(t)||t<0||t>=cn||t===Et(e.slot))return!1;const s=wi(es(Xe(n).filter(l=>l.tile!==e)),ut(e),t*qe),i=Ys(e,s>=0&&Et(s)===t?s:t*qe);return i||Ce(c("editor.layout.no_room",{page:t+1})),i}function Tm(){const e=m.layout;if(!e)return 1;const t=m.drag.preview||Xe(e),n=Ot(t,e.pages);return m.drag.active&&nh.key!=="none"&&i.controls.includes(h.key))?.key||"none"),pt();const f=m.layout;if(f){if(ru(e)&&r!=="full"){const h=Et(e.slot),p=f.tiles.filter(y=>y!==e&&Et(y.slot)===h),b=es(Xe(f).filter(y=>y.tile!==e&&!p.includes(y.tile))),v=[];for(const y of p){const I=wi(b,ut(y),(h+1)*qe);if(I<0){v.length=0;break}v.push([y,I]);for(const T of Wn(I,ut(y)))b.add(T)}if(v.length===p.length){for(const[y,I]of v)y.slot=I;e.slot=h*qe}else{const y=wi(es(Xe(f).filter(I=>I.tile!==e)),"full");y>=0?e.slot=y:(e.options.size=r,Ce(c("editor.layout.no_free_page")))}}else if(Do(e)&&!l){const h=es(Xe(f).filter(v=>v.tile!==e)),p=uu(e.slot),b=Fs(h,p,"wide")?p:fu(h,"wide",p);b>=0&&(e.slot=b)}Vi(f),f.pages=Ot(Xe(f),f.pages)}}function Em(e,t){const n=`screen.page_${t}`,s=m.layout;return!s||n===e.entity||!us(n)?!1:!Bi(n)&&s.tiles.some(i=>i.entity===n)?(Ce(c("editor.layout.page_taken",{page:t})),!1):(e.entity=n,s.pages=Math.max(Ot(Xe(s),s.pages),t),pt(),!0)}function Vo(e){Cl(e)||(m.iconPickerOpen=!1,m.actionPickerOpen=!1,m.actionSearch=""),m.selectedTile=e,m.inspector={kind:"tile"},Ki([e.entity])}function Xt(e){m.inspector?.kind==="bar"&&m.inspector.index===e||(m.iconPickerOpen=!1),m.selectedTile=null,m.inspector={kind:"bar",index:e}}function er(){m.selectedTile=null,m.inspector={kind:"bar-add"}}function Ze(){m.inspector=null,m.selectedTile=null}async function Wo(){if(m.busy||!m.layout||!m.selected)return;m.busy=!0;const e=Ho,t=m.selected;try{const{settings:n,...s}=m.layout;if(await ft(`screens/${encodeURIComponent(m.selected)}`,"PUT",s),m.selected!==t){const i=m.inventory.screens.find(l=>l.id===t)?.name;Ce(i?c("editor.screen_view.saved.other",{name:i}):c("editor.screen_view.saved.other_unnamed"))}else Ho===e?(m.dirty=!1,m.saved=Date.now(),Ce(c("editor.screen_view.saved.current"))):Ce(c("editor.screen_view.saved.newer_edit"));await Cn()}catch(n){Ce(n.message)}finally{m.busy=!1}}const Kn=e=>!!(e&&e.alert_action&&un(os(e),m.inventory.alerts?.min_firmware||"0.2.31"));async function Su(e){try{await ft(`screens/${encodeURIComponent(e.id)}/identify`,"POST"),Ce(c("editor.screen_view.identified",{name:e.name}))}catch(t){Ce(t.message)}}async function Am(e,t){return await ft("alerts/test","POST",{screen:e,data:t})}const Pm=["title","tiles","header","pages"];function Cu(e,t){const n=m.layout;if(!n)return;const s=(Array.isArray(e.tiles)?e.tiles:[]).filter(u=>!!(u&&typeof u=="object"&&typeof u.entity=="string"&&u.entity.includes("."))).map(u=>({entity:u.entity,name:typeof u.name=="string"?u.name:"",slot:Number.isInteger(u.slot)?u.slot:-1,...u.options&&typeof u.options=="object"?{options:{...u.options}}:{}})),i=new Set,l=s.filter(u=>Bi(u.entity)||!i.has(u.entity)&&i.add(u.entity)),r=l.slice(0,Bn.value);n.tiles=r,e.header&&Array.isArray(e.header.items)?n.header={items:e.header.items.map(u=>({...u}))}:delete n.header,n.pages=Number.isInteger(e.pages)?e.pages:1,Vi(n),n.pages=Ot(Xe(n),n.pages),Ze(),pt(),Ki(r.map(u=>u.entity)),qi(),zi(0),Ce(t(r.lengthn.id===e);!t||!m.layout||Cu(JSON.parse(JSON.stringify(t.layout)),n=>n?c("editor.layout.copied_part",{name:t.name,...n}):c("editor.layout.copied",{name:t.name}))}function Im(){const e=m.layout;if(!e)return"";const t={esp_screens_layout:1};for(const n of Pm)e[n]!==void 0&&(t[n]=e[n]);return JSON.stringify(t,null,2)}function Tu(){const e=Im();if(!e)return;const t=`${(_t.value?.name||"screen").toLowerCase().replace(/[^a-z0-9]+/g,"-")}.layout.json`,n=URL.createObjectURL(new Blob([e],{type:"application/json"})),s=document.createElement("a");s.href=n,s.download=t,s.click(),setTimeout(()=>URL.revokeObjectURL(n),5e3),It(e,void 0,"layout_json")}function Lm(e){let t;try{t=JSON.parse(e)}catch{Ce(c("editor.layout.not_json"));return}if(!t||typeof t!="object"||!Array.isArray(t.tiles)){Ce(c("editor.layout.no_tiles_in_file"));return}Cu(t,n=>n?c("editor.layout.imported_part",n):c("editor.layout.imported"))}function Mm(e){const t=m.inventory.updates?.target,n=m.inventory.changelog;if(!Array.isArray(n)||!t)return[];const s=os(e),i=[];for(const l of n)if(!(un(l.firmware,t)&&l.firmware!==t)&&!(s&&un(s,l.firmware)))for(const r of l.lines)i.includes(r)||i.push(r);return i}let mo=!1;async function Rm(){if(!mo){mo=!0;try{const e=await Nt("firmware");m.firmwareJob={job:e.job,logs:e.logs||[]}}catch{}finally{mo=!1}}}const Bo=()=>m.inventory.screens.some(e=>e.update?.state==="running")||m.updating.length>0;function Jn(e){const t=e.update||{};if(!(t.state==="running"||m.updating.includes(e.id)))return null;const n=m.firmwareJob?.job?.stage;return t.phase==="verify"?{percent:78,text:_s("verify")}:t.phase==="settle"?{percent:92,text:_s("settle")}:t.phase==="install"||!t.phase?n==="upload"?{percent:66,text:c("editor.update.writing")}:n?{percent:40,text:c("editor.update.building")}:{percent:12,text:_s("install")}:{percent:12,text:_s(t.phase)}}const dn=()=>m.layout?.header?.items??(m.layout?.settings?.show_clock??!0?[{type:"clock"}]:[]),vn=()=>m.inventory.header?.max_items||6;function Ds(e){m.layout&&(m.layout.header={items:e},pt(),zi())}let tr=0;function zi(e=150){clearTimeout(tr),tr=window.setTimeout(async()=>{const t=dn();if(t.some(n=>n.type==="entity"))try{const n=await ft("header-preview","POST",{header:{items:t}});t.forEach((s,i)=>m.topbarPreviews[at(s)]=n.items[i])}catch{}},e)}function gs(e){return e.type==="entity"?qs(e.entity):m.inventory.header?.builtin.find(t=>t.type===e.type)?.label||e.type}function mn(e){const t=new Date(m.now);if(e.type==="clock")return{text:Wi(as.value,t),shown:!0};if(e.type==="date")return{text:$l(t,ls.value),shown:!0};if(e.type==="analog")return{analog:!0,shown:!0};const n=m.topbarPreviews[at(e)];return n?{icon:n.i||null,text:n.k==="ago"?um(n.e,Math.floor(m.now/1e3),ls.value):n.t,color:n.c?`#${n.c}`:null,shown:n.shown}:{icon:e.icon==="none"?null:zs(e.icon)?.cp||Sn(e.entity),text:"…",shown:!0,loading:!0}}function bo(e,t){const n=[...dn()];return t<0||t>=n.length||e===t?!1:(n.splice(t,0,...n.splice(e,1)),Ds(n),!0)}function nr(e){const t=[...dn()],[n]=t.splice(e,1);n&&(m.inspector?.kind==="bar"&&Ze(),Ds(t),Ce(c("editor.topbar.removed",{name:gs(n)}),{label:c("editor.common.undo"),run:()=>{const s=[...dn()];s.splice(Math.min(e,s.length),0,n),Ds(s)}}))}function vo(e){const t=dn();if(t.length>=vn())return Ce(c("editor.topbar.full",vn()));if(t.some(n=>at(n)===at(e)))return Ce(c("editor.topbar.already"));m.topbarAdded={key:at(e),time:Date.now()},Ds([...t,e]),Xt(t.length)}const Nm=[{group:"brightness",icon:"F0599",rows:[{key:"brightness",kind:"number",min:5,max:100,step:5,unit:"%"},{key:"dark_mode",kind:"toggle"},{key:"standby_enabled",kind:"toggle"},{key:"standby_seconds",kind:"duration",min:60,max:86400,needs:"standby_enabled"},{key:"standby_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"standby_enabled",cap:"brightness"}]},{group:"night",icon:"F0594",rows:[{key:"night_enabled",kind:"toggle"},{key:"night_start",kind:"moment",needs:"night_enabled"},{key:"night_end",kind:"moment",needs:"night_enabled"},{key:"night_brightness",kind:"number",min:0,max:100,step:5,unit:"%",needs:"night_enabled",cap:"brightness"}]},{group:"screen",icon:"F0379",rows:[{key:"auto_home",kind:"toggle"},{key:"auto_home_seconds",kind:"duration",min:30,max:3600,needs:"auto_home"},{key:"home_on_standby",kind:"toggle"},{key:"swipe_pages",kind:"toggle"},{key:"page_buttons",kind:"toggle"},{key:"rotation",kind:"choice",options:[0,90,180,270]}]}],go=e=>c(`editor.screen_settings.rows.${e.key}`),Fm=(e,t)=>`${t}°`;function Eu(e=$m(),t=m.layout?Ot(e,m.layout.pages):1){const n=xi();if(t<2||n.page_buttons!==!1||n.swipe_pages!==!1)return"";const{tiles:s,targets:i,unreachable:l,noWayBack:r}=em(e,t);if(!l.length&&!r.length)return"";const u=v=>c("editor.screen_settings.reach.pages",{list:Zh(v)},v.length),f=l.filter(v=>!i.includes(v)),h=l.filter(v=>i.includes(v)),p=f.length===1?"one":"more",b=[c("editor.screen_settings.reach.intro")];return s&&f.length?b.push(c(`editor.screen_settings.reach.tiles_missing_${p}`,{targets:u(i),missing:u(f)},s)):s?b.push(c("editor.screen_settings.reach.tiles",{targets:u(i)},s)):f.length?b.push(c(`editor.screen_settings.reach.none_missing_${p}`,{missing:u(f)})):b.push(c("editor.screen_settings.reach.none")),h.length&&b.push(c("editor.screen_settings.reach.cut_off",{pages:u(h)})),r.length&&b.push(c("editor.screen_settings.reach.no_way_back",{pages:u(r)})),b.join(" ")}const Au=4e3;let gn={},ts=null,$i=0,li=null;const Tl=()=>_t.value?.settings;function xi(){const e=Tl(),t={...e?.values||{}};for(const[n,s]of Object.entries(m.settingEdits))t[n]=s.value;return t}const Dm=e=>e<300?30:e<900?60:e<3600?300:e<7200?900:1800;function sr(e,t,n,s,i){if(e.kind==="moment"){let u=s&&t%60?Math.floor(t/60)*60+(n>0?60:0):t+n*(s?60:15);return u%=1440,u<0?u+1440:u}const l=e.kind==="duration"?Dm(n<0?t-1:t):e.step,r=e.cap?Math.min(e.max,i[e.cap]):e.max;return Math.min(r,Math.max(e.min,t+n*l))}function Um(e){if(e<60)return c("editor.screen_settings.duration.seconds",{n:e});if(e<3600)return c("editor.screen_settings.duration.minutes",{n:Math.floor(e/60)});const t=Math.floor(e/3600),n=Math.floor(e%3600/60);return n?c("editor.screen_settings.duration.hours_minutes",{h:t,m:String(n).padStart(2,"0")}):c("editor.screen_settings.duration.hours",{n:t})}function jm(e,t){const n=Math.floor(e/60),s=String(e%60).padStart(2,"0");return t?`${String(n).padStart(2,"0")}:${s}`:c(n<12?"editor.screen_settings.time.am":"editor.screen_settings.time.pm",{time:`${n%12||12}:${s}`})}function Hm(e,t){const n=t[e.key];return n==null?"—":e.kind==="number"?`${n}${e.unit||""}`:e.kind==="duration"?Um(n):e.kind==="moment"?jm(n,as.value):""}function ni(e,t,n){if(ts&&ts!==m.selected&&Object.keys(gn).length){Us(),Ce(c("editor.screen_settings.other_screen_busy"));return}ts=m.selected;const s=xi();if(m.settingEdits[e]={value:t,at:Date.now()},gn[e]=t,e==="brightness")for(const i of["standby_brightness","night_brightness"])s[i]>t&&(m.settingEdits[i]={value:t,at:Date.now()});m.settingPending=!0,clearTimeout($i),$i=window.setTimeout(()=>Us(),n)}async function Us(e=!1){if(clearTimeout($i),li||!Object.keys(gn).length||!ts)return;const t=ts,n=gn;gn={};const s=xl(`screens/${encodeURIComponent(t)}/settings`,{method:"PUT",body:JSON.stringify({settings:n}),keepalive:e});li=s;try{const i=await(await s).json(),l=m.inventory.screens.find(r=>r.id===t);l&&(l.settings=i)}catch(i){if(Ce(i.message),t===m.selected)for(const l of Object.keys(n))delete m.settingEdits[l];if(t===m.selected&&n.brightness!==void 0)for(const l of["standby_brightness","night_brightness"])delete m.settingEdits[l]}finally{li=null,Object.keys(gn).length?$i=window.setTimeout(()=>Us(),150):ts=null,m.settingPending=!!Object.keys(gn).length,t===m.selected&&Si(),setTimeout(()=>{t===m.selected&&Si()},Au+100)}}function Si(){const e=Tl();for(const[t,n]of Object.entries(m.settingEdits))gn[t]!==void 0||li||(e&&e.values[t]===n.value||Date.now()-n.at>Au)&&delete m.settingEdits[t]}const _s=e=>["install","verify","settle"].includes(e||"")?c(`editor.update.phases.${e}`):c("editor.update.starting");async function Ko(e,t){m.updating.push(e.id);try{await ft(`screens/${encodeURIComponent(e.id)}/update`,"POST",t?{host:t}:{}),await Cn()}catch(n){m.updating=m.updating.filter(s=>s!==e.id),Ce(n.message)}}async function ir(){try{await ft("updates/run","POST"),await Cn()}catch(e){Ce(e.message)}}async function Vm(e){try{await ft("updates","PUT",{auto:e}),m.inventory.updates&&(m.inventory.updates.auto=e),Ce(c(e?"editor.settings.updates.auto_on":"editor.settings.updates.auto_off"))}catch(t){Ce(t.message)}}async function Wm(){try{m.inventory.claude_skill=await ft("claude-skill","POST"),Ce(c(m.inventory.claude_skill?.restart?"editor.settings.claude.installed_restart":"editor.settings.claude.installed"))}catch(e){Ce(e.message)}}const ls=k(()=>iu(m.inventory.language?.effective));Ct(ls,e=>ou(e),{immediate:!0});const Un=(e,t={})=>c(e,t,{locale:ls.value}),Bm=e=>m.inventory.language?.languages?.find(t=>t.code===e)?.name||zh(e||"")?.name||e||"",Pu=e=>!!(e.update?.available||e.update?.language),or=()=>c("editor.update.new_language",{name:Bm(m.inventory.language?.effective)}),as=k(()=>m.inventory.language?.clock_effective!=="12"),Km=k(()=>{const e=m.inventory.language;return{...is[e?.numbers_effective||"point"]||is.point,from:(e?.group_min||1)>=2?5:4}}),qm=k(()=>{const e=m.inventory.language;return{...is[e?.numbers_auto||"point"]||is.point,from:(e?.group_min_auto||1)>=2?5:4}});function lr(e){return!e||e==="°"?e||"":e==="%"?m.inventory.language?.percent_space?" %":"%":` ${e}`}const zm=e=>m.inventory.builtin?.find(t=>t.id===e)?.screen_name;async function ar(e){try{const t=await ft("language","PUT",e);return t?.language&&(m.inventory.language=t.language),Ce(c(e.setting===void 0?"editor.settings.language.saved":"editor.settings.language.saved_language")),await Cn(),!0}catch(t){return Ce(t.message),!1}}async function Cn(e=!0){try{const t=await Nt(e?"inventory":"inventory?light=1");m.inventory=e?t:{...m.inventory,...t},t.csrf&&vm(t.csrf),m.connected=!!m.inventory.connected,m.reachable=!0;for(const n of m.inventory.screens)n.update?.state==="running"&&(m.updating=m.updating.filter(s=>s!==n.id));m.selected&&Si()}catch{m.reachable=!1}}function Ym(e){m.inventory={...m.inventory,...e},m.connected=!!m.inventory.connected;for(const t of m.inventory.screens)t.update?.state==="running"&&(m.updating=m.updating.filter(n=>n!==t.id));m.selected&&Si()}let rr=0,qo=Date.now(),Ci=!1,hs=null;function Gm(){hs||typeof EventSource>"u"||(hs=new EventSource(`api/events?language=${encodeURIComponent(wl())}`),hs.onopen=()=>{Ci=!0,js()},hs.onmessage=e=>{document.hidden||Ym(JSON.parse(e.data))},hs.onerror=()=>{Ci=!1,js()})}function js(){clearTimeout(rr);const e=Ci?6e4:m.inventory.updates?.busy?3e3:1e4;rr=window.setTimeout(async()=>{if(!document.hidden){const t=Date.now()-qo>=3e5;t&&(qo=Date.now()),(t||!Ci)&&await Cn(t)}js()},e)}let cr=!1;function Jm(){cr||(cr=!0,Cn(),Gm(),js(),bm(()=>m.fontsVersion++),setInterval(()=>{!m.layout||document.hidden||m.drag.active||(m.now=Date.now(),zi(0))},3e4),setInterval(()=>{!document.hidden&&m.layout&&m.tab==="layout"&&$t.value===""&&qi()},8e3),setInterval(()=>{!document.hidden&&Bo()?Rm():m.firmwareJob&&!Bo()&&(m.firmwareJob=null)},3e3),document.addEventListener("visibilitychange",async()=>{document.hidden||(qo=Date.now(),m.now=Date.now(),await Cn(),js())}),window.addEventListener("pagehide",()=>Us(!0)),window.addEventListener("beforeunload",e=>{m.dirty&&(e.preventDefault(),e.returnValue="")}))}const Xm={class:"side"},Zm={class:"label"},Qm={id:"screens"},eb=["aria-current","onClick"],tb={class:"txt"},nb=["aria-label","title"],sb={key:1,class:"pill"},ib={key:2,class:"spin small"},ob=["onSubmit"],lb=["placeholder","aria-label"],ab={type:"submit",class:"btn mini primary"},rb=["aria-label"],cb=["disabled","title","onClick"],ub={key:2,class:"whatsnew"},db=["aria-valuenow"],fb={class:"progress-text"},pb=["title"],hb=["title"],mb={id:"pending"},bb={class:"pending-actions"},vb=["onClick"],gb=["aria-current"],_b={class:"txt"},yb={class:"more"},wb={class:"label"},kb=["aria-current"],$b={class:"mdi"},xb={class:"txt"},Sb=["aria-current"],Cb={class:"mdi"},Tb={class:"txt"},Eb=["aria-current"],Ab={class:"mdi"},Pb={class:"txt"},Ob={class:"txt"},Ib=Le({__name:"Sidebar",setup(e){const t=ke(null),n=ke(""),s=p=>{const b=p.update||{};return!!b.language&&(!b.target||un(os(p),b.target))};function i(p){const b=p.update||{};return b.state==="running"||m.updating.includes(p.id)?{kind:"running",text:_s(b.phase)}:b.state==="queued"?{kind:"queued",text:c("editor.sidebar.update.queued")}:Pu(p)&&p.online?{kind:"available",text:s(p)?or():c("editor.sidebar.update.available",{version:b.target})}:b.result&&Date.now()/1e3-b.result.time<86400?{kind:b.result.state==="failed"?"failed":"done",text:b.result.message}:null}const l=p=>[...p.update?.language&&!s(p)?[or()]:[],...Mm(p)];function r(p){const b=p.update||{};b.host&&b.profile?Ko(p):b.profile&&(t.value=p.id,n.value="")}function u(p){const b=n.value.trim();b&&(t.value=null,Ko(p,b))}const f=()=>{const p=m.firmwareJob?.logs||[];return p.length?p[p.length-1]:""},h=p=>p.installed?c("editor.sidebar.pending.installed"):p.downloaded?c("editor.sidebar.pending.downloaded"):c("editor.sidebar.pending.not_flashed",{file:p.file});return(p,b)=>(g(),_("aside",Xm,[b[13]||(b[13]=o("div",{class:"brand"},[o("span",{class:"mark"},"▦"),o("span",null,"ESP Screens")],-1)),o("span",{id:"connection",class:me(["conn",{online:a(m).connected}]),role:"status"},d(a(m).reachable?a(m).connected?a(c)("editor.sidebar.connection.connected"):a(c)("editor.sidebar.connection.reconnecting"):a(c)("editor.sidebar.connection.unreachable")),3),o("button",{type:"button",class:"search-btn",id:"open-palette",onClick:b[0]||(b[0]=v=>a(m).palette=!0)},[Me("⌕ "+d(a(c)("editor.sidebar.search")),1),b[10]||(b[10]=o("kbd",null,"⌘K",-1))]),o("div",Zm,d(a(c)("editor.sidebar.screens")),1),o("div",Qm,[(g(!0),_(z,null,he(a(m).inventory.screens,v=>(g(),_("div",{key:v.id,class:me(["screen-item",{selected:v.id===a(m).selected&&a($t)===""}])},[o("button",{type:"button",class:"nav-item","aria-current":v.id===a(m).selected&&a($t)===""?"true":"false",onClick:y=>a(ku)(v.id)},[o("span",{class:me(["dot",{off:!v.online}])},null,2),o("span",tb,[o("span",null,d(v.name),1),o("small",null,d(v.online?a(c)("editor.common.online"):a(c)("editor.common.offline"))+d(v.area?" · "+v.area:"")+" · "+d(v.firmware||a(c)("editor.common.unknown")),1)]),v.id===a(m).selected&&a(m).dirty?(g(),_("span",{key:0,class:"unsaved",role:"img","aria-label":a(c)("editor.common.unsaved"),title:a(c)("editor.common.unsaved")},null,8,nb)):W("",!0),i(v)?.kind==="available"?(g(),_("span",sb,d(a(c)("editor.sidebar.update.pill")),1)):i(v)?.kind==="running"?(g(),_("span",ib)):W("",!0)],8,eb),i(v)?(g(),_("div",{key:0,class:me(["screen-update",i(v).kind])},[i(v).kind==="available"?(g(),_(z,{key:0},[t.value===v.id?(g(),_(z,{key:0},[o("small",null,d(a(c)("editor.sidebar.host.hint")),1),o("form",{class:"screen-host",onSubmit:Pt(y=>u(v),["prevent"])},[Ee(o("input",{"onUpdate:modelValue":b[1]||(b[1]=y=>n.value=y),placeholder:a(c)("editor.sidebar.host.placeholder"),required:"",pattern:"[A-Za-z0-9][A-Za-z0-9.\\-]*","aria-label":a(c)("editor.sidebar.host.label"),autofocus:""},null,8,lb),[[Je,n.value]]),o("button",ab,d(a(c)("editor.sidebar.host.start")),1),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.cancel"),onClick:b[2]||(b[2]=y=>t.value=null)},"✕",8,rb)],40,ob)],64)):(g(),_(z,{key:1},[o("small",null,d(i(v).text),1),o("button",{type:"button",class:"btn mini primary",disabled:!v.update?.profile,title:v.update?.profile?"":a(c)("editor.sidebar.update.no_profile"),onClick:y=>r(v)},d(a(c)("editor.sidebar.update.button")),9,cb)],64)),l(v).length?(g(),_("details",ub,[o("summary",null,d(a(c)("editor.sidebar.update.whats_new")),1),o("ul",null,[(g(!0),_(z,null,he(l(v).slice(0,8),y=>(g(),_("li",{key:y},d(y),1))),128))])])):W("",!0)],64)):i(v).kind==="running"&&a(Jn)(v)?(g(),_(z,{key:1},[o("div",{class:"progress",role:"progressbar","aria-valuenow":a(Jn)(v).percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:a(Jn)(v).percent+"%"})},null,4)],8,db),o("div",fb,[o("span",null,d(a(Jn)(v).percent)+" %",1),o("span",{title:f()},d(a(Jn)(v).text),9,pb)]),f()?(g(),_("small",{key:0,title:f(),style:{"white-space":"nowrap",overflow:"hidden","text-overflow":"ellipsis"}},d(f()),9,hb)):W("",!0),o("button",{type:"button",class:"btn link mini",style:{"justify-self":"start"},onClick:b[3]||(b[3]=y=>a(He)("#firmware"))},d(a(c)("editor.sidebar.update.full_log")),1)],64)):(g(),_("small",{key:2,class:me({failed:i(v).kind==="failed"})},d(i(v).text),3))],2)):W("",!0)],2))),128))]),o("div",mb,[(g(!0),_(z,null,he(a(m).inventory.pending||[],v=>(g(),_("div",{key:v.file,class:"pending"},[o("strong",null,d(v.friendly),1),o("small",null,d(h(v)),1),o("div",bb,[o("button",{type:"button",class:"btn mini quiet",onClick:b[4]||(b[4]=(...y)=>a(ki)&&a(ki)(...y))},d(a(c)("editor.common.open_integrations")),1),v.api_key?(g(),_("button",{key:0,type:"button",class:"btn mini quiet",onClick:y=>a(It)(v.api_key)},d(a(c)("editor.sidebar.copy_api_key")),9,vb)):W("",!0)])]))),128))]),o("button",{id:"new-screen",type:"button",class:"nav-item ghost","aria-current":a($t)==="#new-screen"?"true":"false",onClick:b[5]||(b[5]=v=>a(He)("#new-screen"))},[b[11]||(b[11]=o("span",{class:"plus"},"+",-1)),o("span",_b,d(a(c)("editor.nav.new_screen")),1)],8,gb),b[14]||(b[14]=o("div",{class:"spacer"},null,-1)),o("div",yb,[o("div",wb,d(a(c)("editor.sidebar.more")),1),o("button",{id:"open-firmware",type:"button",class:"nav-item","aria-current":a($t)==="#firmware"?"true":"false",onClick:b[6]||(b[6]=v=>a(He)("#firmware"))},[o("span",$b,d(a(Ae)("F0241")),1),o("span",xb,d(a(c)("editor.nav.firmware")),1)],8,kb),o("button",{id:"open-alerts",type:"button",class:"nav-item","aria-current":a($t)==="#alerts"?"true":"false",onClick:b[7]||(b[7]=v=>a(He)("#alerts"))},[o("span",Cb,d(a(Ae)("F0594")),1),o("span",Tb,d(a(c)("editor.nav.alerts")),1)],8,Sb),o("button",{id:"open-settings",type:"button",class:"nav-item","aria-current":a($t)==="#settings"?"true":"false",onClick:b[8]||(b[8]=v=>a(He)("#settings"))},[o("span",Ab,d(a(Ae)("F0493")),1),o("span",Pb,d(a(c)("editor.nav.settings")),1)],8,Eb),o("button",{id:"refresh",type:"button",class:"nav-item ghost",onClick:b[9]||(b[9]=v=>a(Cn)())},[b[12]||(b[12]=o("span",{class:"plus"},"↻",-1)),o("span",Ob,d(a(c)("editor.sidebar.refresh")),1)])])]))}}),Lb={key:0,id:"toast",class:"toast",role:"status"},Mb=Le({__name:"Toast",setup(e){return(t,n)=>a(m).toast?(g(),_("div",Lb,[o("span",null,d(a(m).toast.message),1),a(m).toast.action?(g(),_("button",{key:0,type:"button",onClick:n[0]||(n[0]=s=>{a(m).toast.action.run(),a(_m)()})},d(a(m).toast.action.label),1)):W("",!0)])):W("",!0)}}),Rb=["aria-label"],Nb=["placeholder","aria-label"],Fb={class:"palette-list"},Db={class:"palette-group"},Ub=["onMouseenter","onClick"],jb={key:0,class:"mdi"},Hb={key:1,class:"glyph"},Vb={class:"tx"},Wb={key:0},Bb={key:2,class:"hint-key"},Kb={key:0,class:"palette-empty"},qb=Le({__name:"CommandPalette",setup(e){const t=ke(""),n=ke(0),s=ke(null),i=k(()=>{const h=t.value.trim().toLocaleLowerCase(),p=[],b=c("editor.palette.groups.screens"),v=c("editor.palette.groups.actions");for(const T of m.inventory.screens)p.push({group:b,label:T.name,detail:`${T.online?c("editor.common.online"):c("editor.common.offline")} · ${T.firmware||c("editor.common.unknown")}`,glyphText:"▦",run:()=>ku(T.id)});const y=_t.value,I=[{group:v,label:c("editor.nav.new_screen"),detail:c("editor.nav.new_screen_detail"),glyphText:"+",run:()=>He("#new-screen")},{group:v,label:c("editor.nav.firmware"),icon:"F0241",run:()=>He("#firmware")},{group:v,label:c("editor.nav.alerts"),detail:c("editor.palette.alerts_detail"),icon:"F0594",run:()=>He("#alerts")},{group:v,label:c("editor.nav.settings"),detail:c("editor.palette.settings_detail"),icon:"F0493",run:()=>He("#settings")}];if(y&&m.layout&&I.unshift({group:v,label:c("editor.common.save_send"),detail:m.dirty?c("editor.common.unsaved"):c("editor.palette.nothing_to_save"),key:"⌘S",run:()=>Wo()},{group:v,label:c("editor.screen_view.tabs.layout"),detail:y.name,run:()=>{He(""),m.tab="layout"}},{group:v,label:c("editor.screen_view.tabs.settings"),detail:y.name,run:()=>{He(""),m.tab="settings"}},{group:v,label:c("editor.palette.identify"),detail:Kn(y)?c("editor.palette.identify_detail"):c("editor.palette.identify_needs"),run:()=>{Kn(y)&&Su(y)}},{group:v,label:c("editor.palette.export"),detail:c("editor.palette.export_detail"),run:Tu}),p.push(...I),y&&m.layout&&h){const T=new Set(m.layout.tiles.map(A=>A.entity)),$=m.layout.tiles.length>=Bn.value;for(const A of m.inventory.entities)if(!(A.tile===!1||T.has(A.id))&&`${A.name} ${A.id} ${A.area||""} ${A.device||""}`.toLocaleLowerCase().includes(h)&&(p.push({group:c("editor.palette.groups.add"),label:A.name,detail:[jt(A.id)[0],A.area].filter(Boolean).join(" · "),icon:m.inventory.icons?Sn(A.id):void 0,run:()=>{$||$u(A.id)}}),p.length>60))break}return h?p.filter(T=>`${T.label} ${T.detail||""}`.toLocaleLowerCase().includes(h)):p}),l=k(()=>{const h=[];return i.value.forEach((p,b)=>{(h.find(y=>y.group===p.group)||(h.push({group:p.group,items:[]}),h[h.length-1])).items.push({item:p,index:b})}),h});function r(){m.palette=!1}function u(h){r(),h.run()}function f(h){if(h.key==="Escape")h.preventDefault(),r();else if(h.key==="ArrowDown")h.preventDefault(),n.value=Math.min(i.value.length-1,n.value+1);else if(h.key==="ArrowUp")h.preventDefault(),n.value=Math.max(0,n.value-1);else if(h.key==="Enter"){h.preventDefault();const p=i.value[n.value];p&&u(p)}}return Ct(t,()=>n.value=0),Ct(()=>m.palette,async h=>{h&&(t.value="",n.value=0,await Ni(),s.value?.focus())}),(h,p)=>a(m).palette?(g(),_("div",{key:0,class:"palette-backdrop",onClick:r},[o("div",{class:"palette",role:"dialog","aria-label":a(c)("editor.sidebar.search"),onClick:p[1]||(p[1]=Pt(()=>{},["stop"])),onKeydown:f},[Ee(o("input",{ref_key:"input",ref:s,"onUpdate:modelValue":p[0]||(p[0]=b=>t.value=b),id:"palette-input",placeholder:a(c)("editor.palette.placeholder"),"aria-label":a(c)("editor.sidebar.search"),autocomplete:"off"},null,8,Nb),[[Je,t.value]]),o("div",Fb,[(g(!0),_(z,null,he(l.value,b=>(g(),_(z,{key:b.group},[o("div",Db,d(b.group),1),(g(!0),_(z,null,he(b.items,({item:v,index:y})=>(g(),_("button",{key:y,type:"button",class:me(["palette-item",{active:y===n.value}]),onMouseenter:I=>n.value=y,onClick:I=>u(v)},[v.icon?(g(),_("span",jb,d(a(Ae)(v.icon)),1)):(g(),_("span",Hb,d(v.glyphText||"›"),1)),o("span",Vb,[o("span",null,d(v.label),1),v.detail?(g(),_("small",Wb,d(v.detail),1)):W("",!0)]),v.key?(g(),_("kbd",Bb,d(v.key),1)):W("",!0)],42,Ub))),128))],64))),128)),i.value.length?W("",!0):(g(),_("p",Kb,d(a(c)("editor.palette.empty")),1))])],40,Rb)])):W("",!0)}}),ve={source:null,element:null,ghost:null,timer:0,start:null,offset:{x:0,y:0},pointerId:null,suppressUntil:0,last:null,scroller:0,target:null},Ou={mounted(e,t){e.__dragSource=t.value,e.addEventListener("pointerdown",s=>{const i=e.__dragSource;if(!(s.button!==0||e.disabled||s.target.closest(".remove"))){s.pointerType!=="touch"&&s.preventDefault(),Object.assign(ve,{source:i,element:e,start:{x:s.clientX,y:s.clientY},pointerId:s.pointerId});try{e.setPointerCapture(s.pointerId)}catch{}clearTimeout(ve.timer),s.pointerType==="touch"&&(ve.timer=window.setTimeout(()=>ur(s),260))}}),e.addEventListener("pointermove",s=>{if(m.drag.active||!ve.start||ve.element!==e)return;const i=Math.hypot(s.clientX-ve.start.x,s.clientY-ve.start.y);if(s.pointerType==="touch"){i>10&&(clearTimeout(ve.timer),ve.start=null);return}i>=6&&ur(s)});const n=()=>{ve.element===e&&!m.drag.active&&(clearTimeout(ve.timer),ve.start=null)};e.addEventListener("pointerup",n),e.addEventListener("pointercancel",n)},updated(e,t){e.__dragSource=t.value}};function ur(e){if(m.drag.active||!ve.start||!ve.source||!ve.element)return;m.drag.active=!0,m.drag.moving=ve.source.kind==="tile"?ve.source.tile:hu(ve.source.id),m.drag.preview=null,ve.target=null,getSelection()?.removeAllRanges();const t=ve.element.getBoundingClientRect(),n=ve.element.cloneNode(!0);n.classList.add("drag-ghost"),n.style.width=`${t.width}px`,n.style.height=`${t.height}px`,ve.offset={x:e.clientX-t.left,y:e.clientY-t.top},document.body.append(n),ve.ghost=n,document.addEventListener("pointermove",zo),document.addEventListener("pointerup",Ti),document.addEventListener("pointercancel",Ti);try{ve.element.releasePointerCapture(ve.pointerId)}catch{}try{document.documentElement.setPointerCapture(ve.pointerId)}catch{}document.addEventListener("touchmove",Iu,{passive:!1}),ve.scroller=window.setInterval(()=>{if(!ve.last)return;const{x:s,y:i}=zb(document),l=s?pr(ve.last.x,fr(s,"x")):0,r=i?pr(ve.last.y,fr(i,"y")):0;l&&s.scrollBy(l,0),r&&i.scrollBy(0,r),(l||r)&&Yo(Lu(ve.last.x,ve.last.y))},16),Yo(-1),zo(e)}function dr(e,t){if(!e)return!1;const n=t==="x"?e.scrollWidth>e.clientWidth:e.scrollHeight>e.clientHeight,s=getComputedStyle(e)[t==="x"?"overflowX":"overflowY"];return n&&(s==="auto"||s==="scroll")}function zb(e){const t=e.querySelector(".pages"),n=e.querySelector(".canvas");return{x:dr(t,"x")?t:n,y:dr(n,"y")?n:e.scrollingElement}}function fr(e,t){const n=t==="x"?window.innerWidth:window.innerHeight;if(e===e.ownerDocument.scrollingElement)return[0,n];const s=e.getBoundingClientRect();return t==="x"?[Math.max(s.left,0),Math.min(s.right,n)]:[Math.max(s.top,0),Math.min(s.bottom,n)]}function pr(e,[t,n]){return en-60?12:0}function Iu(e){m.drag.active&&e.preventDefault()}function Ti(e){e.pointerId===ve.pointerId&&Yb(e.type==="pointerup")}function zo(e){!ve.ghost||e.pointerId!==ve.pointerId||(ve.last={x:e.clientX,y:e.clientY},ve.ghost.style.transform=`translate(${e.clientX-ve.offset.x}px, ${e.clientY-ve.offset.y}px)`,Yo(Lu(e.clientX,e.clientY)))}function Lu(e,t){let n=null,s=1/0;for(const l of document.querySelectorAll(".pages [data-slot]")){const r=l.getBoundingClientRect(),u=Math.hypot(Math.max(r.left-e,0,e-r.right),Math.max(r.top-t,0,t-r.bottom));u16)return-1;let i=Number(n.cell.dataset.slot);return n.cell.classList.contains("wide")&&e>(n.r.left+n.r.right)/2&&(i+=1),i}function Yo(e){ve.target===e||!m.layout||!m.drag.moving||(ve.target=e,m.drag.preview=e>=0?pu(m.layout.tiles,m.drag.moving,e):null)}function Yb(e){const t=m.drag.preview,n=m.drag.moving;document.removeEventListener("pointermove",zo),document.removeEventListener("pointerup",Ti),document.removeEventListener("pointercancel",Ti),document.removeEventListener("touchmove",Iu);try{document.documentElement.releasePointerCapture(ve.pointerId)}catch{}if(ve.ghost?.remove(),Object.assign(ve,{ghost:null,suppressUntil:Date.now()+400,last:null,start:null,target:null,element:null,source:null}),clearInterval(ve.scroller),m.drag.active=!1,m.drag.preview=null,m.drag.moving=null,e&&t&&n&&m.layout){const s=m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join(),i=!m.layout.tiles.includes(n);for(const{tile:l,slot:r}of t)l.slot=r,m.layout.tiles.includes(l)||m.layout.tiles.push(l);m.layout.tiles.sort((l,r)=>l.slot-r.slot),m.layout.tiles.map(l=>`${l.entity}@${l.slot}`).join()!==s&&pt(),i&&Ys(n,n.slot)}}window.addEventListener("click",e=>{Date.now()t.tile.name||b.value==="screen"&&zm(t.tile.entity)||qs(t.tile.entity)),s=k(()=>ru(t.tile)),i=k(()=>Do(t.tile)&&!s.value),l=k(()=>us(t.tile.entity)),r=k(()=>m.inventory.backgrounds?.[t.tile.options?.background||""]?.color),u=k(()=>t.tile.options?.background==="none"),f=k(()=>t.tile.options?.display||"standard"),h=k(()=>f.value!=="standard"?bu(f.value):""),p=k(()=>mu(t.tile,m.inventory)),b=k(()=>t.tile.entity.split(".")[0]),v=k(()=>m.inventory.icons?.controls||{}),y=K=>v.value[K]?Ae(v.value[K]):"",I=k(()=>Cl(t.tile)&&m.inspector?.kind==="tile"),T=k(()=>!t.placeholder&&m.layout?.tiles.includes(t.tile)),$=k(()=>c("editor.tile_card.label",{name:n.value,slot:t.slot%qe+1,page:Et(t.slot)+1})),A=k(()=>new Date(m.now)),S=k(()=>(A.value.getHours()%12+A.value.getMinutes()/60)*30),D=k(()=>A.value.getMinutes()*6),C=k(()=>b.value==="screen"?null:km(t.tile.entity)),B=k(()=>!C.value||["unavailable","unknown",""].includes(C.value.state)),O=k(()=>!!C.value&&!B.value&&C.value.state!=="off"&&C.value.state!=="closed"&&C.value.state!=="standby"&&C.value.state!=="idle"&&C.value.state!=="docked"),E=k(()=>["light","switch","input_boolean","fan"].includes(b.value)&&C.value?.state==="on"),L=k(()=>C.value?.a?.unit_of_measurement),M=K=>K.charAt(0).toUpperCase()+K.slice(1).replace(/_/g," "),U=K=>lu(K,Km.value),R=["number","input_number","counter"],Y=K=>L.value||R.includes(b.value)?`${U(K)}${lr(L.value)}`:K,te={climate:"climate",cover:"cover",media_player:"media",person:"person",sun:"sun",vacuum:"vacuum",weather:"weather"};function ye(K){const ne=yt=>qh(`screen.ha.${yt}`)?Un(`screen.ha.${yt}`):"",ie=K.state==="windy-variant"?"windy":K.state.replace(/-/g,"_");return b.value==="binary_sensor"&&["on","off"].includes(ie)?ne(`binary.${K.a?.device_class}_${ie}`)||ne(ie):te[b.value]?ne(`${te[b.value]}.${ie}`)||(["on","off"].includes(ie)?ne(ie):""):["on","off"].includes(ie)?ne(ie):""}const re=["scene","script","button","input_button"],be=k(()=>{const K=C.value;if(!K||re.includes(b.value))return h.value;if(B.value)return Un(K.state==="unknown"?"editor.mockup.unknown":"screen.ha.unavailable");const ne=K.a||{},ie=K.word||ye(K)||M(K.state);return b.value==="climate"?`${ne.current_temperature!==void 0?`${U(ne.current_temperature)}° · `:""}${ie}`:b.value==="weather"?`${ie}${ne.temperature!==void 0?` · ${U(ne.temperature)}°`:""}`:b.value==="cover"&&ne.current_position!==void 0&&ne.current_position>0&&ne.current_position<100?`${ie} · ${ne.current_position}${lr("%")}`:b.value==="media_player"&&ne.media_title?`${ie} · ${ne.media_title}`:b.value==="sensor"||R.includes(b.value)?Y(K.state):ie}),ge=k(()=>C.value&&!B.value?L.value||R.includes(b.value)?U(C.value.state):C.value.state:"—"),we=k(()=>{const K=C.value;if(!K||B.value)return 0;const ne=K.a||{};if(b.value==="light")return K.state==="on"?ne.brightness!==void 0?Math.round(ne.brightness/255*100):100:0;if(b.value==="fan")return K.state==="on"?ne.percentage??100:0;if(b.value==="cover")return 100-(ne.current_position??(K.state==="open"?100:0));if(b.value==="media_player")return Math.round((ne.volume_level??0)*100);if(b.value==="number"||b.value==="input_number"){const ie=Number(K.state),yt=Number(ne.min??0),In=Number(ne.max??100);return Number.isFinite(ie)&&In>yt?Math.round((ie-yt)/(In-yt)*100):0}return 0}),Ye=k(()=>Un(`screen.ha.button.${{scene:"activate",script:"run"}[b.value]||"press"}`)),le=k(()=>`${Un("screen.tile.page",{n:l.value})} ›`),ee=k(()=>({background:`linear-gradient(to right, ${we.value?"#ffbf38":"#c9ccd1"} ${we.value}%, ${we.value?"#fff1d3":"#e6e8ec"} ${we.value}%)`})),ce=k(()=>({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})),tt=k(()=>{const K=C.value?.a?.temperature;return K!=null?`${U(K)}°`:"—"});async function $e(K){if(K.key==="Enter"||K.key===" "){K.preventDefault(),Vo(t.tile);return}const ne={ArrowLeft:-1,ArrowRight:1,ArrowUp:-2,ArrowDown:2}[K.key];ne&&(K.preventDefault(),Ys(t.tile,t.tile.slot+(s.value?Math.sign(ne)*qe:i.value?Math.sign(ne)*2:ne))&&(await Ni(),document.querySelector(`.pages [data-slot="${t.tile.slot}"]`)?.focus()))}return(K,ne)=>Ee((g(),_("div",{class:me(["tile",{wide:i.value,full:s.value,bare:u.value,placeholder:e.placeholder||!T.value,chosen:I.value}]),"data-slot":e.slot,style:Ue(r.value&&!u.value?{backgroundColor:r.value}:void 0),tabindex:T.value?0:-1,role:T.value?"button":void 0,"aria-label":T.value?$.value:void 0,onClick:ne[1]||(ne[1]=ie=>T.value&&a(Vo)(e.tile)),onKeydown:ne[2]||(ne[2]=ie=>T.value&&$e(ie))},[f.value==="analog"?(g(),_(z,{key:0},[(g(),_("svg",Jb,[ne[3]||(ne[3]=o("circle",{cx:"30",cy:"30",r:"27",fill:"#fff",stroke:"#c9ccd1"},null,-1)),(g(),_(z,null,he([0,90,180,270],ie=>o("line",{key:ie,x1:"30",y1:"5",x2:"30",y2:"9",stroke:"#1b1b1b","stroke-width":"1.5",transform:`rotate(${ie} 30 30)`},null,8,Xb)),64)),o("line",{x1:"30",y1:"30",x2:"30",y2:"16",stroke:"#1b1b1b","stroke-width":"2.4","stroke-linecap":"round",transform:`rotate(${S.value} 30 30)`},null,8,Zb),o("line",{x1:"30",y1:"30",x2:"30",y2:"11",stroke:"#1b1b1b","stroke-width":"1.6","stroke-linecap":"round",transform:`rotate(${D.value} 30 30)`},null,8,Qb),ne[4]||(ne[4]=o("circle",{cx:"30",cy:"30",r:"1.8",fill:"#1b1b1b"},null,-1))])),i.value?(g(),_("span",ev,[o("span",tv,[o("span",nv,d(n.value),1),o("span",sv,d(h.value),1)])])):W("",!0)],64)):f.value==="digital"&&b.value==="screen"?(g(),_(z,{key:1},[o("span",iv,d(a(Ae)(a(vs)(e.tile))),1),o("span",ov,[o("span",lv,d(a(Wi)(a(as),A.value)),1),o("span",av,d(n.value),1)])],64)):s.value?(g(),_(z,{key:2},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",rv,[o("span",cv,d(n.value),1),l.value?(g(),_("span",uv,d(le.value),1)):f.value==="watch"?(g(),_("span",dv,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",fv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",pv,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",hv,[o("span",mv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",bv,d(y("plus")||"+"),1)])):p.value==="volume"?(g(),_(z,{key:2},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",vv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(z,{key:3},[o("span",gv,d(y("skip-previous")),1),o("span",_v,d(y(O.value?"pause":"play")||y("play")),1),o("span",yv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(z,{key:4},[o("span",wv,d(y("arrow-expand-horizontal")),1),o("span",kv,d(y("stop")),1),o("span",$v,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="run"?(g(),_("span",xv,d(Ye.value),1)):(g(),_("span",{key:6,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):i.value?(g(),_(z,{key:3},[o("span",Sv,[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",Cv,[o("span",Tv,d(n.value),1),l.value?(g(),_("span",Ev,d(le.value),1)):f.value==="watch"?(g(),_("span",Av,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",Pv,d(L.value),1)):W("",!0)])):be.value?(g(),_("span",{key:2,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])]),e.tile.options?.inline==="slider"?(g(),_("span",{key:0,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0),p.value?(g(),_("span",Ov,[p.value==="toggle"?(g(),_("span",{key:0,class:me(["tog",{off:!O.value}])},null,2)):p.value==="setpoint"?(g(),_("span",Iv,[o("span",Lv,d(y("minus")||"−"),1),o("b",null,d(tt.value),1),o("span",Mv,d(y("plus")||"+"),1)])):p.value==="stepper"&&b.value.endsWith("select")?(g(),_(z,{key:2},[o("span",Rv,d(y("chevron-left")),1),o("span",Nv,d(y("chevron-right")),1)],64)):p.value==="stepper"?(g(),_("span",Fv,[o("span",Dv,d(y("minus")||"−"),1),o("b",null,d(ge.value),1),o("span",Uv,d(y("plus")||"+"),1)])):p.value==="mode"?(g(),_(z,{key:4},[o("span",jv,d(y("power")),1),o("span",Hv,d(y("fire")),1),o("span",Vv,d(y("snowflake")),1)],64)):p.value==="volume"?(g(),_(z,{key:5},[o("span",{class:"range",style:Ue(ce.value)},null,4),o("span",Wv,d(y("volume-high")),1)],64)):p.value==="playback"?(g(),_(z,{key:6},[o("span",Bv,d(y("skip-previous")),1),o("span",Kv,d(y(O.value?"pause":"play")||y("play")),1),o("span",qv,d(y("skip-next")),1)],64)):p.value==="buttons"&&b.value==="cover"?(g(),_(z,{key:7},[o("span",zv,d(y("arrow-expand-horizontal")),1),o("span",Yv,d(y("stop")),1),o("span",Gv,d(y("arrow-collapse-horizontal")),1)],64)):p.value==="buttons"&&b.value==="vacuum"?(g(),_(z,{key:8},[o("span",Jv,d(y("play")),1),o("span",Xv,d(y("stop")),1),o("span",Zv,d(y("home-map-marker")),1)],64)):p.value==="buttons"&&b.value==="timer"?(g(),_(z,{key:9},[o("span",Qv,d(y("play")),1),o("span",eg,d(y("close")),1)],64)):p.value==="run"?(g(),_("span",tg,d(Ye.value),1)):(g(),_("span",{key:11,class:"range",style:Ue({background:`linear-gradient(to right, #2196f3 ${we.value}%, #d3e8fb ${we.value}%)`})},null,4))])):W("",!0)],64)):(g(),_(z,{key:4},[o("span",{class:me(["head",{top:f.value==="watch"}])},[o("span",{class:me(["ic mdi",{lit:E.value}])},d(a(Ae)(a(vs)(e.tile))),3),o("span",ng,[o("span",sg,d(n.value),1),l.value?(g(),_("span",ig,d(le.value),1)):f.value!=="watch"&&be.value?(g(),_("span",{key:1,class:me(["st",{off:B.value}])},d(be.value),3)):W("",!0)])],2),f.value==="watch"?(g(),_("span",og,[Me(d(ge.value),1),L.value&&!B.value?(g(),_("small",lg,d(L.value),1)):W("",!0)])):W("",!0),e.tile.options?.inline==="slider"?(g(),_("span",{key:1,class:"mini-slider",style:Ue(ee.value)},null,4)):W("",!0)],64)),T.value?(g(),_("button",{key:5,type:"button",class:"remove",title:a(c)("editor.tile_card.remove"),"aria-label":a(c)("editor.tile_card.remove_named",{name:n.value}),onClick:ne[0]||(ne[0]=Pt(ie=>a(xu)(e.tile),["stop"]))},"✕",8,ag)):W("",!0)],46,Gb)),[[a(Ou),{kind:"tile",tile:e.tile}]])}}),cg=["viewBox","aria-label"],ug=["y"],dg=["cx","cy","r","stroke","stroke-width"],fg=["x1","y1","x2","y2","stroke","stroke-width"],pg=["x","y","fill"],hg=["x","y"],Mu=Le({__name:"TopbarSvg",props:{items:{},nameText:{},single:{type:Boolean}},setup(e,{expose:t}){const n=e,s=k(()=>{m.fontsVersion,m.now,m.topbarPreviews;const $=n.items||dn();return gu($,wu.value,n.nameText??(m.layout?.title||Un("editor.mockup.home")),mn)}),i=k(()=>s.value.metrics),l=k(()=>n.single?Math.round(i.value.text*1.4):i.value.top+Math.round(i.value.name*.45)),r=k(()=>n.single?Math.round(i.value.text*1.05):i.value.top),u=k(()=>{if(!n.single)return s.value.placed;const $=s.value.parts[0];return $&&($.x=0),$?[$]:[]}),f=k(()=>n.single?`-2 0 ${Math.max(1,u.value[0]?.width||1)+4} ${l.value}`:`0 0 ${i.value.width} ${l.value}`),h=k(()=>r.value+(s.value.zero.top+s.value.zero.bottom)/2),p=k(()=>mm(s.value.nameText,s.value.fonts.name,Math.min(s.value.natural,s.value.nameRoom))),b=k(()=>new Date(m.now));function v($){const A=b.value;return[[(A.getHours()%12+A.getMinutes()/60)*30,$*.24],[A.getMinutes()*6,$*.34]].map(([S,D])=>{const C=S*Math.PI/180;return{x2:D*Math.sin(C),y2:-D*Math.cos(C)}})}const y=$=>$.x-$.icon.ink.left,I=$=>($.icon?$.x+($.icon.ink.right-$.icon.ink.left)+s.value.gaps.icon:$.x)-$.text.ink.left,T=k(()=>`${(Math.max(1,u.value[0]?.width||1)+4)*(26/i.value.icon)}px`);return t({lay:s}),($,A)=>(g(),_("svg",{viewBox:f.value,role:"img","aria-label":e.single?a(c)("editor.topbar.live.looks"):a(c)("editor.topbar.aria",{name:s.value.nameText}),style:Ue(e.single?{width:T.value}:void 0)},[e.single?W("",!0):(g(),_("text",{key:0,x:"0",y:i.value.top,fill:"#1b1b1b",style:Ue({font:s.value.fonts.name})},d(p.value),13,ug)),o("g",null,[(g(!0),_(z,null,he(u.value,S=>(g(),_(z,{key:S.index},[S.dial?(g(),_(z,{key:0},[o("circle",{cx:S.x+S.dial/2,cy:h.value,r:S.dial/2-Math.max(1,Math.round(S.dial/10))/2,fill:"none",stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial/10))},null,8,dg),(g(!0),_(z,null,he(v(S.dial),(D,C)=>(g(),_("line",{key:C,x1:S.x+S.dial/2,y1:h.value,x2:S.x+S.dial/2+D.x2,y2:h.value+D.y2,stroke:S.view.color||"#46525e","stroke-width":Math.max(1,Math.round(S.dial*.075)),"stroke-linecap":"round"},null,8,fg))),128))],64)):(g(),_(z,{key:1},[S.icon?(g(),_("text",{key:0,x:y(S),y:h.value-(S.icon.ink.top+S.icon.ink.bottom)/2,fill:S.view.color||"#46525e",style:Ue({font:s.value.fonts.icon})},d(S.icon.glyph),13,pg)):W("",!0),S.text?(g(),_("text",{key:1,x:I(S),y:r.value,fill:"#46525e",style:Ue({font:s.value.fonts.text})},d(S.text.value),13,hg)):W("",!0)],64))],64))),128))])],12,cg))}}),mg={class:"page"},bg={class:"page-label"},vg=["title"],gg={key:1},_g=["title"],yg={class:"tiles"},wg=["data-slot","title","aria-label","onClick"],kg=Le({__name:"DevicePage",props:{page:{},entries:{},pages:{},moving:{}},setup(e){const t=e,n=k(()=>new Map(t.entries.map(h=>[h.slot,h]))),s=k(()=>new Set(t.entries.flatMap(h=>Wn(h.slot,ut(h.tile)).slice(1)))),i=k(()=>Array.from({length:qe},(h,p)=>t.page*qe+p).filter(h=>!s.value.has(h))),l=k(()=>t.pages>1&&!t.entries.some(h=>Et(h.slot)===t.page)),r=k(()=>m.inspector?.kind==="bar"||m.inspector?.kind==="bar-add"),u=k(()=>t.entries.filter(h=>Et(h.slot)===t.page).reduce((h,p)=>h+kl(ut(p.tile)),0));function f(h){const p=m.insertAt===h;m.insertAt=p?-1:h,m.insertAt>=0&&document.querySelector("#search")?.focus()}return(h,p)=>(g(),_("div",mg,[o("div",bg,[o("span",null,d(a(c)("editor.page.label",{page:e.page+1})),1),l.value?(g(),_("button",{key:0,type:"button",class:"btn mini",title:a(c)("editor.page.remove_title"),onClick:p[0]||(p[0]=b=>a(Sm)(e.page))},d(a(c)("editor.page.remove")),9,vg)):(g(),_("span",gg,d(u.value)+" / "+d(a(qe)),1))]),o("div",{class:me(["device",{cyd:!a(Sl)}])},[o("div",{class:me(["bar-wrap",{selected:r.value}]),title:a(c)("editor.page.edit_bar"),role:"button",tabindex:"0",onClick:p[1]||(p[1]=b=>a(Xt)(0)),onKeydown:p[2]||(p[2]=xc(Pt(b=>a(Xt)(0),["prevent"]),["enter"]))},[se(Mu)],42,_g),o("div",yg,[(g(!0),_(z,null,he(i.value,b=>(g(),_(z,{key:b},[n.value.get(b)?(g(),it(rg,{key:0,tile:n.value.get(b).tile,slot:b,placeholder:n.value.get(b).tile===e.moving},null,8,["tile","slot","placeholder"])):(g(),_("button",{key:1,type:"button",class:me(["cell",{"insert-here":a(m).insertAt===b}]),"data-slot":b,title:a(c)("editor.page.cell.title"),"aria-label":a(c)("editor.page.cell.aria",{slot:b%a(qe)+1,page:e.page+1}),onClick:v=>f(b)},[p[3]||(p[3]=o("span",null,"+",-1)),o("small",null,d(a(m).insertAt===b?a(c)("editor.page.cell.next"):a(c)("editor.page.cell.empty")),1)],10,wg))],64))),128))])],2)]))}}),$g={class:"library",id:"library"},xg={class:"lib-head"},Sg={class:"lib-title"},Cg=["placeholder","aria-label"],Tg={class:"filters",id:"filters"},Eg=["aria-pressed","onClick"],Ag={class:"lib-row"},Pg=["aria-label"],Og={value:""},Ig=["value"],Lg=["aria-pressed","title"],Mg={class:"lib-list",id:"results","aria-live":"polite"},Rg=["title","disabled","onClick"],Ng={class:"tx"},Fg={key:0,class:"hint"},Dg={key:1,class:"hint"},Ug={class:"lib-foot"},jg=Le({__name:"Library",setup(e){const t=["","light","climate","switch","binary_sensor","button","script","fan","cover","scene","vacuum","sensor","media_player","weather","number","select","person","timer","screen"],n={switch:"input_boolean",number:"input_number",select:"input_select",weather:"sun",button:"input_button"},s=k(()=>new Set(m.layout?.tiles.map(p=>p.entity)||[])),i=p=>s.value.has(p)&&!Bi(p),l=k(()=>[...new Set(m.inventory.entities.map(p=>p.area).filter(p=>!!p))].sort((p,b)=>p.localeCompare(b))),r=k(()=>{const p=m.search.toLocaleLowerCase(),b=m.filter,v=m.room;return[...m.inventory.builtin||[],...m.inventory.entities].filter(y=>y.tile!==!1&&(Sl.value||!["camera","image"].includes(y.id.split(".")[0]))&&(!b||y.id.startsWith(b+".")||n[b]===y.id.split(".")[0])&&(!v||y.area===v)&&(!m.hidePlaced||!i(y.id))&&`${y.name} ${y.id} ${y.device||""} ${y.area||""}`.toLocaleLowerCase().includes(p))}),u=k(()=>(m.layout?.tiles.length||0)>=Bn.value),f=k(()=>m.inventory.entities.length),h=p=>{const b=p.id.split(".")[0];return p.state==="unavailable"||p.state==="unknown"?"gone":["light","switch","input_boolean","fan"].includes(b)&&p.state==="on"?"on":""};return(p,b)=>(g(),_("aside",$g,[o("div",xg,[o("div",Sg,[Me(d(a(c)("editor.library.title"))+" ",1),o("small",null,d(a(c)("editor.library.entities",f.value)),1)]),Ee(o("input",{id:"search","onUpdate:modelValue":b[0]||(b[0]=v=>a(m).search=v),type:"search",placeholder:a(c)("editor.library.search"),autocomplete:"off","aria-label":a(c)("editor.library.search_label")},null,8,Cg),[[Je,a(m).search]]),o("div",Tg,[(g(),_(z,null,he(t,v=>o("button",{key:v,type:"button","aria-pressed":a(m).filter===v?"true":"false",onClick:y=>a(m).filter=v},[v?(g(),_("span",{key:0,class:"domain-icon",style:Ue({color:a(jt)(v+".")[2],background:a(jt)(v+".")[3]}),"aria-hidden":"true"},d(a(jt)(v+".")[1]),5)):W("",!0),Me(d(a(c)(`editor.library.filters.${v||"all"}`)),1)],8,Eg)),64))]),o("div",Ag,[Ee(o("select",{id:"room","onUpdate:modelValue":b[1]||(b[1]=v=>a(m).room=v),"aria-label":a(c)("editor.library.room")},[o("option",Og,d(a(c)("editor.library.all_rooms")),1),(g(!0),_(z,null,he(l.value,v=>(g(),_("option",{key:v,value:v},d(v),9,Ig))),128))],8,Pg),[[Vn,a(m).room]]),o("button",{type:"button",class:"chip-toggle",id:"hide-placed","aria-pressed":a(m).hidePlaced?"true":"false",title:a(c)("editor.library.hide_placed_title"),onClick:b[2]||(b[2]=v=>a(m).hidePlaced=!a(m).hidePlaced)},d(a(c)("editor.library.hide_placed")),9,Lg)])]),o("div",Mg,[(g(!0),_(z,null,he(r.value.slice(0,80),v=>Ee((g(),_("button",{key:v.id,type:"button",class:"ent",title:v.id,disabled:i(v.id)||u.value,onClick:y=>a($u)(v.id)},[o("span",{class:me(["av mdi",h(v)]),style:Ue({color:a(jt)(v.id)[2],background:a(jt)(v.id)[3]})},d(a(m).inventory.icons?a(Ae)(a(Sn)(v.id)):a(jt)(v.id)[1]),7),o("span",Ng,[o("b",null,d(v.name),1),o("small",null,d([a(jt)(v.id)[0],v.area,v.device].filter(Boolean).join(" · ")),1)]),o("span",{class:me(["add",{done:i(v.id)}])},d(i(v.id)?"✓":"+"),3)],8,Rg)),[[a(Ou),{kind:"entity",id:v.id}]])),128)),r.value.length?r.value.length>80?(g(),_("p",Dg,d(a(c)("editor.common.results",r.value.length)),1)):W("",!0):(g(),_("p",Fg,d(a(m).hidePlaced&&!a(m).search&&!a(m).filter&&!a(m).room?a(c)("editor.library.all_placed"):a(c)("editor.library.none_found")),1))]),o("div",Ug,d(u.value?a(c)(a(Bn)<48?"editor.library.full_update":"editor.library.full",a(Bn)):a(c)("editor.library.hint")),1)]))}}),Hg={class:"canvas-head"},Vg={id:"count"},Wg={key:0,id:"no-tiles"},Bg={key:1},Kg={key:2,id:"positions-hint",class:"warn"},qg={key:3,id:"page-reach-hint",class:"warn"},zg=["aria-label"],Yg={class:"page-label"},Gg=["tabindex"],Jg=Le({__name:"LayoutView",setup(e){const t=k(()=>m.layout),n=k(()=>m.drag.preview||Xe(t.value)),s=k(()=>Ot(n.value,t.value.pages)),i=k(()=>Tm()),l=k(()=>s.valueQh(t.value.tiles)&&!wn(0,2,26)?c("editor.layout.positions_hint",{firmware:_t.value?.firmware||c("editor.common.unknown")}):""),u=k(()=>Eu(n.value,s.value));function f(h){h.target.closest(".device, .page-label, .canvas-head")||m.inspector&&Ze()}return(h,p)=>(g(),_(z,null,[o("div",{class:"canvas",id:"canvas",onClick:f},[o("div",Hg,[o("b",Vg,d(a(c)("editor.layout.count",{tiles:t.value.tiles.length,limit:a(Bn)},s.value)),1),t.value.tiles.length?(g(),_("span",Bg,d(a(c)("editor.layout.how_to")),1)):(g(),_("span",Wg,d(a(c)("editor.layout.no_tiles")),1)),r.value?(g(),_("span",Kg,d(r.value),1)):W("",!0),u.value?(g(),_("span",qg,d(u.value),1)):W("",!0)]),o("div",{class:"pages",id:"layout-preview","aria-label":a(c)("editor.layout.aria")},[(g(!0),_(z,null,he(i.value,b=>(g(),it(kg,{key:b,page:b-1,entries:n.value,pages:s.value,moving:a(m).drag.moving},null,8,["page","entries","pages","moving"]))),128)),o("div",{class:me(["page ghost",{disabled:!l.value}])},[o("div",Yg,[o("span",null,d(a(c)("editor.page.label",{page:i.value+1})),1)]),o("div",{class:me(["device",{cyd:a(_t)?.board!=="guition"}]),id:"add-page",role:"button",tabindex:l.value?0:-1,onClick:p[0]||(p[0]=b=>l.value&&a(Qa)()),onKeydown:p[1]||(p[1]=xc(Pt(b=>l.value&&a(Qa)(),["prevent"]),["enter"]))},d(l.value?a(c)("editor.layout.add_page"):a(c)("editor.layout.max_pages",a(cn))),43,Gg)],2)],8,zg)]),se(jg)],64))}}),Xg={class:"status",id:"settings-status",role:"status"},Zg={key:0,class:"set-grid",id:"settings-groups"},Qg={class:"mdi"},e_=["data-setting","title","onClick"],t_=["id"],n_={class:"s-control"},s_=["id","aria-checked","aria-labelledby","disabled","onClick"],i_=["aria-labelledby"],o_=["aria-pressed","disabled","onClick"],l_={key:2,class:"step"},a_=["aria-label","disabled","onPointerdown","onClick"],r_={class:"mdi"},c_=["id","aria-labelledby"],u_=["aria-label","disabled","onPointerdown","onClick"],d_={class:"mdi"},f_={key:0,class:"hint warn",id:"settings-page-reach"},p_=Le({__name:"SettingsTab",setup(e){const t=k(()=>Tl()),n=k(()=>xi()),s=k(()=>t.value?.owner==="screen"&&!_t.value?.online),i=k(()=>Nm.map(T=>({...T,rows:T.rows.filter($=>t.value?.keys.includes($.key))})).filter(T=>T.rows.length)),l=k(()=>Eu()),r=T=>s.value||!!t.value?.unavailable.includes(T.key),u=T=>T.needs?!!n.value[T.needs]:!0,f=k(()=>s.value?c("editor.screen_settings.status.offline"):m.settingPending?c("editor.common.saving"):t.value?.owner==="screen"?c("editor.screen_settings.status.screen"):c("editor.screen_settings.status.app")),h=(T,$)=>{const A=n.value[T.key];return r(T)||!u(T)||A===null||A===void 0?!0:T.kind!=="moment"&&sr(T,A,$,!1,n.value)===A},p=new WeakMap;function b(T,$,A){const S=xi(),D=sr(T,S[T.key],$,A,S);D!==S[T.key]&&ni(T.key,D,600)}function v(T,$,A){const S=T.currentTarget;if(S.disabled||T.button!==0)return;const D={timer:0,held:!1};p.set(S,D);let C=0;D.timer=window.setTimeout(function B(){D.held=!0,C+=1,b($,A,C>5),D.timer=window.setTimeout(B,180)},450)}function y(T){const $=p.get(T.currentTarget);$&&clearTimeout($.timer)}function I(T,$,A){const S=p.get(T.currentTarget);if(S?.held){S.held=!1;return}b($,A,!1)}return(T,$)=>(g(),_("div",{class:me(["settings",{offline:s.value}]),id:"general-settings"},[o("span",Xg,d(f.value),1),t.value?(g(),_("div",Zg,[(g(!0),_(z,null,he(i.value,A=>(g(),_("section",{key:A.group,class:"set-card"},[o("h4",null,[o("span",Qg,d(a(Ae)(A.icon)),1),Me(d(a(c)(`editor.screen_settings.groups.${A.group}`)),1)]),(g(!0),_(z,null,he(A.rows,S=>(g(),_("div",{key:S.key,class:me(["srow",[`setting-${S.kind}`,{inactive:!u(S)||r(S)}]]),"data-setting":S.key,title:r(S)&&!s.value?a(c)("editor.screen_settings.unavailable"):"",onClick:D=>S.kind==="toggle"&&D.target.closest(".srow")===D.currentTarget&&!D.target.closest("button")&&!r(S)&&a(ni)(S.key,!n.value[S.key],150)},[o("span",{class:"s-label",id:`setting-label-${S.key}`},d(a(go)(S)),9,t_),o("div",n_,[S.kind==="toggle"?(g(),_("button",{key:0,type:"button",class:me(["switch",{unknown:n.value[S.key]===null||n.value[S.key]===void 0}]),role:"switch",id:`setting-${S.key}`,"aria-checked":n.value[S.key]?"true":"false","aria-labelledby":`setting-label-${S.key}`,disabled:r(S),onClick:Pt(D=>a(ni)(S.key,!n.value[S.key],150),["stop"])},null,10,s_)):S.kind==="choice"?(g(),_("div",{key:1,class:"seg",role:"group","aria-labelledby":`setting-label-${S.key}`},[(g(!0),_(z,null,he(S.options,D=>(g(),_("button",{key:String(D),type:"button","aria-pressed":n.value[S.key]===D?"true":"false",disabled:r(S),onClick:C=>a(ni)(S.key,D,150)},d(a(Fm)(S,D)),9,o_))),128))],8,i_)):(g(),_("div",l_,[o("button",{type:"button","aria-label":a(c)("editor.screen_settings.lower",{name:a(go)(S)}),disabled:h(S,-1),onPointerdown:D=>v(D,S,-1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,-1)},[o("span",r_,d(a(Ae)("F0374")),1)],40,a_),o("output",{id:`setting-${S.key}`,"aria-labelledby":`setting-label-${S.key}`},d(a(Hm)(S,n.value)),9,c_),o("button",{type:"button","aria-label":a(c)("editor.screen_settings.higher",{name:a(go)(S)}),disabled:h(S,1),onPointerdown:D=>v(D,S,1),onPointerup:y,onPointercancel:y,onPointerleave:y,onClick:D=>I(D,S,1)},[o("span",d_,d(a(Ae)("F0415")),1)],40,u_)]))])],10,e_))),128)),l.value&&A.rows.some(S=>S.key==="page_buttons")?(g(),_("p",f_,d(l.value),1)):W("",!0)]))),128))])):W("",!0)],2))}}),h_={class:"seg wrap",role:"group"},m_=["disabled","aria-pressed","onClick"],kt=Le({__name:"Segmented",props:{choices:{},value:{},disabled:{type:Boolean}},emits:["pick"],setup(e,{emit:t}){const n=t;return(s,i)=>(g(),_("div",h_,[(g(!0),_(z,null,he(e.choices,([l,r])=>(g(),_("button",{key:String(l),type:"button",disabled:e.disabled,"aria-pressed":String(l)===String(e.value)?"true":"false",onClick:u=>n("pick",l)},d(r),9,m_))),128))]))}}),b_={class:"f"},v_={class:"f-label"},g_={key:0},__={key:1,class:"warn"},y_=["aria-expanded"],w_={class:"tx"},k_={key:0,class:"mono"},$_={class:"link"},x_={key:0,class:"picker"},S_=["placeholder","aria-label"],C_={class:"action-list"},T_=["aria-pressed","onClick"],E_={key:0,class:"hint"},A_={key:1,class:"warn"},P_={class:"f-label"},O_=["aria-label","value","onChange"],I_={value:""},L_=["value"],M_={key:3,class:"action-number"},R_=["aria-label","value","onInput"],N_=["onClick"],F_={key:4,class:"action-number"},D_=["aria-label","min","max","step","value","placeholder","onInput"],U_={key:0},j_=["aria-label","value","placeholder","onInput"],H_={key:6},V_={key:0,class:"warn"},W_={key:3},B_=Le({__name:"ActionPicker",props:{tile:{}},setup(e){const t=e,n=k(()=>m.entityActions[t.tile.entity]),s=k(()=>t.tile.options?.action),i=k(()=>n.value?.find(C=>C.action===s.value?.action)),l=k(()=>m.actionPickerOpen||!s.value),r=k(()=>{const C=m.actionSearch.trim().toLocaleLowerCase();return(n.value||[]).filter(B=>`${B.name} ${B.action} ${B.description}`.toLocaleLowerCase().includes(C))});n.value===void 0&&wm(t.tile.entity);function u(C){const B=C.action===s.value?.action;t.tile.options={...t.tile.options,action:B?s.value:{action:C.action}},m.actionPickerOpen=!1,pt()}function f(C,B){const O={...t.tile.options?.action?.data||{}};B===void 0?delete O[C]:O[C]=B,t.tile.options={...t.tile.options,action:{action:s.value.action,...Object.keys(O).length?{data:O}:{}}},pt()}const h=k(()=>{if(!i.value)return[];const C=t.tile.options?.action?.data||{};return i.value.fields.filter(B=>B.required&&C[B.key]===void 0).map(B=>B.name)}),p=C=>Object.keys(C.selector||{})[0]||"text",b=C=>(C.selector||{})[p(C)]||{},v=C=>C.example===void 0?"":typeof C.example=="string"?C.example:JSON.stringify(C.example);function y(C){const B=b(C),O=p(C);return Array.isArray(C.options)?C.options.map(E=>[E,E]):O==="select"&&Array.isArray(B.options)&&!B.multiple?B.options.map(E=>E&&typeof E=="object"?[String(E.value),String(E.label??E.value)]:[String(E),String(E)]):null}const I=C=>"#"+C.map(B=>Math.max(0,Math.min(255,Number(B)||0)).toString(16).padStart(2,"0")).join(""),T=C=>Array.isArray(C)&&C.length===3?I(C):"#ffffff",$=C=>C===void 0?"":typeof C=="string"?C:JSON.stringify(C);function A(C,B){const O=B.trim();if(!O)return f(C.key,void 0);if(p(C)==="text")return f(C.key,B);try{f(C.key,JSON.parse(O))}catch{f(C.key,B)}}function S(C,B){f(C.key,B===""||!Number.isFinite(Number(B))?void 0:Number(B))}const D=C=>b(C).unit_of_measurement||p(C)==="color_temp"&&b(C).unit||"";return(C,B)=>(g(),_("div",b_,[o("span",v_,d(a(c)("editor.action.label")),1),n.value===void 0?(g(),_("small",g_,d(a(c)("editor.action.asking")),1)):n.value===null?(g(),_("small",__,d(a(c)("editor.action.not_answering")),1)):(g(),_(z,{key:2},[o("button",{type:"button",class:"row","aria-expanded":l.value?"true":"false",onClick:B[0]||(B[0]=O=>a(m).actionPickerOpen=!l.value)},[o("span",w_,[o("b",null,d(i.value?i.value.name:s.value?s.value.action:a(c)("editor.action.choose")),1),s.value?(g(),_("small",k_,d(s.value.action),1)):W("",!0)]),o("span",$_,d(l.value?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,y_),l.value?(g(),_("div",x_,[Ee(o("input",{"onUpdate:modelValue":B[1]||(B[1]=O=>a(m).actionSearch=O),type:"search",placeholder:a(c)("editor.action.search"),"aria-label":a(c)("editor.action.search_label")},null,8,S_),[[Je,a(m).actionSearch]]),o("div",C_,[(g(!0),_(z,null,he(r.value,O=>(g(),_("button",{key:O.action,type:"button",class:"action-choice","aria-pressed":O.action===s.value?.action?"true":"false",onClick:E=>u(O)},[o("strong",null,d(O.name),1),o("small",null,d(O.description?`${O.action} · ${O.description}`:O.action),1)],8,T_))),128)),r.value.length?W("",!0):(g(),_("p",E_,d(a(c)("editor.action.none_found")),1))])])):W("",!0),s.value&&!i.value?(g(),_("small",A_,d(a(c)("editor.action.gone")),1)):W("",!0),i.value&&!l.value?(g(),_(z,{key:2},[(g(!0),_(z,null,he(i.value.fields,O=>(g(),_("div",{key:O.key,class:"f"},[o("span",P_,d(O.required?O.name:a(c)("editor.action.optional",{name:O.name})),1),p(O)==="boolean"?(g(),it(kt,{key:0,choices:[["",a(c)("editor.action.not_set")],["true",a(c)("editor.action.on")],["false",a(c)("editor.action.off")]],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E==="true")},null,8,["choices","value","onPick"])):y(O)&&y(O).length<=4?(g(),it(kt,{key:1,choices:[["",a(c)("editor.action.not_set")],...y(O)],value:s.value?.data?.[O.key]===void 0?"":String(s.value?.data?.[O.key]),onPick:E=>f(O.key,E===""?void 0:E)},null,8,["choices","value","onPick"])):y(O)?(g(),_("select",{key:2,"aria-label":O.name,value:String(s.value?.data?.[O.key]??""),onChange:E=>f(O.key,E.target.value===""?void 0:E.target.value)},[o("option",I_,d(a(c)("editor.action.not_set")),1),(g(!0),_(z,null,he(y(O),([E,L])=>(g(),_("option",{key:E,value:E},d(L),9,L_))),128))],40,O_)):p(O)==="color_rgb"?(g(),_("div",M_,[o("input",{type:"color","aria-label":O.name,value:T(s.value?.data?.[O.key]),onInput:E=>f(O.key,[1,3,5].map(L=>parseInt(E.target.value.slice(L,L+2),16)))},null,40,R_),o("button",{type:"button",class:"btn quiet mini",onClick:E=>f(O.key,void 0)},d(a(c)("editor.action.not_set")),9,N_)])):p(O)==="number"||p(O)==="color_temp"?(g(),_("div",F_,[o("input",{type:"number","aria-label":O.name,min:b(O).min,max:b(O).max,step:b(O).step==="any"?"any":b(O).step,value:s.value?.data?.[O.key]??"",placeholder:v(O),onInput:E=>S(O,E.target.value)},null,40,D_),D(O)?(g(),_("span",U_,d(D(O)),1)):W("",!0)])):(g(),_("input",{key:5,type:"text","aria-label":O.name,value:$(s.value?.data?.[O.key]),placeholder:v(O),onInput:E=>A(O,E.target.value)},null,40,j_)),O.description?(g(),_("small",H_,d(O.description),1)):W("",!0)]))),128)),h.value.length?(g(),_("small",V_,d(a(c)("editor.action.needs",{fields:h.value.join(", ")})),1)):W("",!0)],64)):W("",!0),a(wn)(0,2,58)?W("",!0):(g(),_("small",W_,d(a(c)("editor.action.needs_firmware")),1))],64))]))}}),K_={class:"f"},q_={class:"f-label"},z_=["aria-expanded"],Y_={class:"av mdi"},G_={class:"tx"},J_={class:"link"},X_={key:0,class:"picker"},Z_=["placeholder","aria-label"],Q_=["aria-pressed","title"],ey={class:"mdi"},ty=["aria-pressed","title"],ny={class:"icon-list"},sy={class:"icon-grid"},iy=["title","aria-label","aria-pressed","onClick"],oy={class:"mdi"},ly={key:0,class:"hint"},ay={key:1},Ru=Le({__name:"IconPicker",props:{selected:{},automatic:{},autoLabel:{},allowNone:{type:Boolean},note:{}},emits:["pick"],setup(e,{emit:t}){const n=e,s=t,i=ke(""),l=k(()=>zs(n.selected)),r=k(()=>n.selected==="none"?"":Ae(l.value?.cp||n.automatic)),u=k(()=>n.selected==="none"?c("editor.icon.none"):l.value?.label||n.autoLabel),f=k(()=>{const h=i.value.trim().toLocaleLowerCase();return(m.inventory.icons?.groups||[]).map(p=>({label:p.label,icons:p.icons.filter(b=>!h||`${b.label} ${b.name.replaceAll("-"," ")} ${p.label}`.toLocaleLowerCase().includes(h))})).filter(p=>p.icons.length)});return(h,p)=>(g(),_("div",K_,[o("span",q_,d(a(c)("editor.icon.label")),1),o("button",{type:"button",class:"row","aria-expanded":a(m).iconPickerOpen?"true":"false",onClick:p[0]||(p[0]=b=>a(m).iconPickerOpen=!a(m).iconPickerOpen)},[o("span",Y_,d(r.value),1),o("span",G_,[o("b",null,d(u.value),1)]),o("span",J_,d(a(m).iconPickerOpen?a(c)("editor.common.close"):a(c)("editor.common.change")),1)],8,z_),a(m).iconPickerOpen?(g(),_("div",X_,[Ee(o("input",{"onUpdate:modelValue":p[1]||(p[1]=b=>i.value=b),type:"search",placeholder:a(c)("editor.icon.search"),"aria-label":a(c)("editor.icon.search_label")},null,8,Z_),[[Je,i.value]]),o("button",{type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="auto"?"true":"false",title:e.autoLabel,onClick:p[2]||(p[2]=b=>s("pick","auto"))},[o("span",ey,d(a(Ae)(e.automatic)),1),o("span",null,d(e.autoLabel),1)],8,Q_),e.allowNone?(g(),_("button",{key:0,type:"button",class:"icon-choice icon-auto","aria-pressed":e.selected==="none"?"true":"false",title:a(c)("editor.icon.none"),onClick:p[3]||(p[3]=b=>s("pick","none"))},[p[4]||(p[4]=o("span",{class:"mdi"},null,-1)),o("span",null,d(a(c)("editor.icon.none_text_only")),1)],8,ty)):W("",!0),o("div",ny,[(g(!0),_(z,null,he(f.value,b=>(g(),_("section",{key:b.label},[o("small",null,d(b.label),1),o("div",sy,[(g(!0),_(z,null,he(b.icons,v=>(g(),_("button",{key:v.name,type:"button",class:"icon-choice",title:v.label,"aria-label":a(c)("editor.icon.aria",{name:v.label}),"aria-pressed":e.selected===v.name?"true":"false",onClick:y=>s("pick",v.name)},[o("span",oy,d(a(Ae)(v.cp)),1)],8,iy))),128))])]))),128)),f.value.length?W("",!0):(g(),_("p",ly,d(a(c)("editor.icon.none_found")),1))])])):W("",!0),e.note?(g(),_("small",ay,d(e.note),1)):W("",!0)]))}}),ry={class:"dr-head"},cy={class:"tx"},uy={class:"mono"},dy=["aria-label"],fy={class:"dr-body"},py={class:"f"},hy={class:"f-label",for:"tile-name"},my=["value","placeholder"],by={key:1,class:"f"},vy={class:"f-label"},gy={key:2,class:"f"},_y={class:"f-label"},yy={key:0,class:"warn"},wy={class:"f"},ky={class:"f-label"},$y={key:0},xy={key:3,class:"f"},Sy={class:"f-label"},Cy={key:4,class:"f"},Ty={class:"f-label"},Ey={key:5,class:"f"},Ay={class:"f-label"},Py={key:7,class:"f"},Oy={class:"f-label"},Iy={key:0,class:"warn"},Ly={key:8,class:"f"},My={class:"f-label"},Ry={class:"f"},Ny={class:"f-label"},Fy={class:"sw"},Dy=["aria-label","aria-pressed","onClick"],Uy={class:"dr-foot"},jy=Le({__name:"TileInspector",props:{tile:{}},setup(e){const t=e,n=k(()=>t.tile.entity.split(".")[0]),s=k(()=>qs(t.tile.entity)),i=k(()=>us(t.tile.entity)),l=k(()=>m.layout?Ot(Xe(m.layout),m.layout.pages):1),r=k(()=>Et(t.tile.slot)+1),u=le=>!m.layout?.tiles.some(ee=>Et(ee.slot)===le-1),f=k(()=>{const le=Array.from({length:Math.min(cn,l.value+1)},(ee,ce)=>ce+1);return i.value>le.length&&le.push(i.value),le.map(ee=>[ee,u(ee)?c("editor.tile.goes_to.empty",{page:ee}):String(ee)])}),h=k(()=>Xa.value?i.value>l.value?{text:c("editor.tile.goes_to.no_page",{page:i.value}),warn:!0}:{text:c("editor.tile.goes_to.hint"),warn:!1}:{text:c("editor.tile.goes_to.needs_firmware"),warn:!1}),p=k(()=>!m.layout?.tiles.some(le=>xe(le)!==xe(t.tile)&&Et(le.slot)===r.value-1)),b=k(()=>{const le=Array.from({length:l.value},(ee,ce)=>[ce+1,String(ce+1)]);return l.value(i.value?["single","wide"]:["single","wide","full"]).map(le=>[le,c(`editor.tile.size.${le}`)])),y=k(()=>i.value?"":Xa.value?c("editor.tile.size.full_hint"):c("editor.tile.size.needs_firmware")),I=k(()=>m.capabilities[t.tile.entity]),T=(le,ee)=>t.tile.options?.[le]??ee,$=k(()=>T("display",n.value==="screen"?"digital":"standard")),A=k(()=>{const le=n.value==="screen"?["digital","analog"]:["standard","watch"],ee=I.value;return n.value==="weather"&&(!ee||ee.displays.includes("forecast")||$.value==="forecast")&&le.push("forecast"),n.value==="sensor"&&(!ee||ee.displays.includes("graph")||$.value==="graph")&&le.push("graph"),n.value==="sun"&&le.push("sunpath"),le.map(ce=>[ce,c(`editor.tile.display.${ce}`)])}),S=k(()=>{const le=I.value;return le&&$.value==="graph"&&!le.displays.includes("graph")?c("editor.tile.display.no_graph"):le&&$.value==="forecast"&&!le.displays.includes("forecast")?c("editor.tile.display.no_forecast"):""}),D=k(()=>T("size","single")),C=k(()=>m.inventory.controls?.[n.value]),B=k(()=>T("controls",D.value==="full"?"none":C.value?.default)),O=k(()=>{const le=I.value;return(C.value?.choices||[]).filter(ee=>!le||ee.key==="none"||ee.key===B.value||le.controls.includes(ee.key)).map(ee=>[ee.key,ee.label])}),E=k(()=>{const le=I.value;return le&&B.value!=="none"&&!le.controls.includes(B.value)?{text:c("editor.tile.controls.not_offered"),warn:!0}:{text:wn(0,2,19)?c(D.value==="full"?"editor.tile.controls.full_hint":"editor.tile.controls.wide_hint"):c("editor.tile.controls.needs_firmware"),warn:!1}}),L=k(()=>T("tap","auto")),M=k(()=>{const le=["auto","detail","none"];return((I.value?I.value.toggle:Ja.includes(n.value))||L.value==="toggle")&&le.push("toggle"),le.push("action"),le.map(ee=>[ee,c(`editor.tile.tap.${ee}`)])}),U=k(()=>L.value==="toggle"&&I.value&&!I.value.toggle?{text:c("editor.tile.tap.no_toggle"),warn:!0}:L.value==="toggle"&&!Ja.includes(n.value)&&!wn(0,2,58)?{text:c("editor.tile.tap.toggle_needs_firmware"),warn:!1}:L.value==="toggle"?{text:c("editor.tile.tap.hold"),warn:!1}:null),R=k(()=>T("inline","none")),Y=k(()=>rm.includes(n.value)&&(!I.value||I.value.inline||R.value==="slider")),te=k(()=>R.value==="slider"&&I.value&&!I.value.inline),ye=k(()=>T("history_hours",24)),re=k(()=>Object.entries(m.inventory.backgrounds||{})),be=k(()=>!!m.inventory.entities.find(le=>le.id===t.tile.entity)?.icon),ge=k(()=>!!m.inventory.icons&&(n.value!=="screen"||i.value>0)&&!["forecast","sunpath"].includes($.value));function we(le){t.tile.name=le,pt()}function Ye(){m.inspector={kind:"inspect",entity:t.tile.entity}}return(le,ee)=>(g(),_(z,null,[o("div",ry,[o("span",{class:"av mdi",style:Ue({color:a(jt)(e.tile.entity)[2],background:a(jt)(e.tile.entity)[3]})},d(a(Ae)(a(vs)(e.tile))),5),o("span",cy,[o("b",null,d(e.tile.name||s.value),1),o("small",uy,d(e.tile.entity),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:ee[0]||(ee[0]=(...ce)=>a(Ze)&&a(Ze)(...ce))},"✕",8,dy)]),o("div",fy,[o("div",py,[o("label",hy,d(a(c)("editor.tile.name")),1),o("input",{id:"tile-name",value:e.tile.name,placeholder:s.value,maxlength:"60",onInput:ee[1]||(ee[1]=ce=>we(ce.target.value))},null,40,my)]),ge.value?(g(),it(Ru,{key:0,selected:e.tile.options?.icon||"auto",automatic:a(Sn)(e.tile.entity),"auto-label":a(c)(be.value?"editor.tile.icon.auto_ha":"editor.tile.icon.auto_default"),note:a(wn)(0,2,18)?"":a(c)("editor.tile.icon.needs_firmware"),onPick:ee[2]||(ee[2]=ce=>a(hn)(e.tile,"icon",ce))},null,8,["selected","automatic","auto-label","note"])):W("",!0),i.value?(g(),_("div",by,[o("span",vy,d(a(c)("editor.tile.goes_to.label")),1),se(kt,{choices:f.value,value:i.value,onPick:ee[3]||(ee[3]=ce=>a(Em)(e.tile,Number(ce)))},null,8,["choices","value"]),o("small",{class:me({warn:h.value.warn})},d(h.value.text),3)])):(g(),_("div",gy,[o("span",_y,d(a(c)("editor.tile.display.label")),1),se(kt,{choices:A.value,value:$.value,onPick:ee[4]||(ee[4]=ce=>a(hn)(e.tile,"display",ce))},null,8,["choices","value"]),S.value?(g(),_("small",yy,d(S.value),1)):W("",!0)])),o("div",wy,[o("span",ky,d(a(c)("editor.tile.size.label")),1),se(kt,{choices:v.value,value:D.value,onPick:ee[5]||(ee[5]=ce=>a(hn)(e.tile,"size",ce))},null,8,["choices","value"]),y.value?(g(),_("small",$y,d(y.value),1)):W("",!0)]),b.value.length>1?(g(),_("div",xy,[o("span",Sy,d(a(c)("editor.tile.page.label")),1),se(kt,{choices:b.value,value:r.value,onPick:ee[6]||(ee[6]=ce=>a(Cm)(e.tile,Number(ce)-1))},null,8,["choices","value"])])):W("",!0),C.value&&D.value!=="single"&&!i.value?(g(),_("div",Cy,[o("span",Ty,d(a(c)("editor.tile.controls.label")),1),se(kt,{choices:O.value,value:B.value,onPick:ee[7]||(ee[7]=ce=>a(hn)(e.tile,"controls",ce))},null,8,["choices","value"]),o("small",{class:me({warn:E.value.warn})},d(E.value.text),3)])):W("",!0),n.value!=="screen"&&!i.value?(g(),_("div",Ey,[o("span",Ay,d(a(c)("editor.tile.tap.label")),1),se(kt,{choices:M.value,value:L.value,onPick:ee[8]||(ee[8]=ce=>a(hn)(e.tile,"tap",ce))},null,8,["choices","value"]),U.value?(g(),_("small",{key:0,class:me({warn:U.value.warn})},d(U.value.text),3)):W("",!0)])):W("",!0),n.value!=="screen"&&!i.value&&L.value==="action"?(g(),it(B_,{key:6,tile:e.tile},null,8,["tile"])):W("",!0),Y.value&&!i.value?(g(),_("div",Py,[o("span",Oy,d(a(c)("editor.tile.slider.label")),1),se(kt,{choices:[["none",a(c)("editor.tile.slider.no")],["slider",a(c)("editor.tile.slider.yes")]],value:R.value,onPick:ee[9]||(ee[9]=ce=>a(hn)(e.tile,"inline",ce))},null,8,["choices","value"]),te.value?(g(),_("small",Iy,d(a(c)("editor.tile.slider.nothing")),1)):W("",!0)])):W("",!0),n.value==="sensor"&&!i.value?(g(),_("div",Ly,[o("span",My,d(a(c)("editor.tile.history.label")),1),se(kt,{choices:[1,6,24].map(ce=>[ce,a(c)("editor.tile.history.hours",ce)]),value:ye.value,onPick:ee[10]||(ee[10]=ce=>a(hn)(e.tile,"history_hours",Number(ce)))},null,8,["choices","value"])])):W("",!0),o("div",Ry,[o("span",Ny,d(a(c)("editor.tile.background.label")),1),o("div",Fy,[(g(!0),_(z,null,he(re.value,([ce,tt])=>(g(),_("button",{key:ce,type:"button","aria-label":a(c)("editor.tile.background.aria",{name:tt.label}),"aria-pressed":(e.tile.options?.background||"auto")===ce?"true":"false",onClick:$e=>a(hn)(e.tile,"background",ce)},[o("i",{class:me(tt.color?"":ce==="none"?"none":"auto"),style:Ue(tt.color?{background:tt.color}:void 0)},null,6),Me(d(tt.label),1)],8,Dy))),128))])])]),o("div",Uy,[o("button",{type:"button",class:"btn danger",onClick:ee[11]||(ee[11]=ce=>a(xu)(e.tile))},d(a(c)("editor.common.remove")),1),ee[12]||(ee[12]=o("span",{class:"spacer"},null,-1)),n.value!=="screen"?(g(),_("button",{key:0,type:"button",class:"btn quiet",onClick:Ye},d(a(c)("editor.common.read_current_data")),1)):W("",!0)])],64))}}),Hy={class:"dr-head"},Vy={class:"av mdi",style:{background:"var(--seg)",color:"var(--ink-2)"}},Wy={class:"tx"},By=["aria-label"],Ky={class:"dr-body"},qy={class:"f"},zy={class:"f-label",for:"title"},Yy=["value","placeholder"],Gy={class:"f"},Jy={class:"f-label",id:"topbar-caption"},Xy={style:{"text-transform":"none","letter-spacing":"0","font-weight":"500"}},Zy={class:"items",id:"topbar-chips",role:"list","aria-labelledby":"topbar-caption"},Qy=["data-index","aria-label","onPointerdown","onClick","onKeydown"],e0={class:"tx"},t0=["aria-label","onClick"],n0=["disabled","title"],s0={class:"live",id:"topbar-live"},i0={class:"f"},o0={class:"f-label"},l0={class:"f"},a0={class:"f-label"},r0={href:"#settings"},c0={key:2},u0={key:0,class:"dr-foot"},d0=["disabled"],f0=["disabled"],p0=Le({__name:"TopbarInspector",props:{index:{}},setup(e){const t=e,n=k(()=>dn()),s=k(()=>n.value[t.index]),i=k(()=>(m.fontsVersion,m.now,m.topbarPreviews,gu(n.value,wu.value,m.layout?.title||Un("editor.mockup.home"),mn))),l=k(()=>i.value.dropped),r=k(()=>m.inventory.header?.min_firmware||"0.2.32"),u=k(()=>{const[Y,te,ye]=r.value.split(".").map(Number);return wn(Y,te,ye)}),f=k(()=>u.value?c(l.value.size?"editor.topbar.hint.overflow":"editor.topbar.hint.reorder"):c("editor.topbar.hint.needs_firmware",{version:r.value})),h=(Y,te)=>{const ye=mn(Y);return ye.shown?l.value.has(te)?c("editor.topbar.detail.overflow"):ye.analog?c("editor.topbar.detail.dial"):ye.text:c("editor.topbar.detail.hidden")},p=Y=>{const te=mn(Y);return te.analog||Y.type!=="entity"?zs(vu[Y.type])?.cp:te.icon},b=Y=>m.topbarAdded?.key===at(Y)&&Date.now()-m.topbarAdded.time<1200;function v(Y){m.layout&&(m.layout.title=Y,pt())}function y(Y){const te=[...n.value];te[t.index]={...te[t.index],...Y},Ds(te)}const I=k(()=>s.value?mn(s.value).shown?l.value.has(t.index)?c("editor.topbar.live.overflow"):c("editor.topbar.live.looks"):c("editor.topbar.live.hidden"):""),T=k(()=>({clock:Wi(as.value,new Date(m.now)),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),ls.value)})),$=ke({index:-1,active:!1,moved:!1});let A=null,S=0,D=null,C=0;function B(Y,te){Y.button!==0||Y.target.closest(".x")||(Y.pointerType!=="touch"&&Y.preventDefault(),$.value={index:te,active:!1,moved:!1},A={x:Y.clientX,y:Y.clientY},D=Y.pointerId,clearTimeout(S),Y.pointerType==="touch"&&(S=window.setTimeout(O,260)),document.addEventListener("pointermove",L),document.addEventListener("pointerup",M),document.addEventListener("pointercancel",M))}function O(){$.value.active=!0,document.addEventListener("touchmove",E,{passive:!1})}function E(Y){$.value.active&&Y.preventDefault()}function L(Y){if(Y.pointerId!==D||!A)return;if(!$.value.active){const re=Math.hypot(Y.clientX-A.x,Y.clientY-A.y);if(Y.pointerType==="touch"){re>10&&(clearTimeout(S),A=null);return}if(re<6)return;O()}const te=[...document.querySelectorAll(".items .item[data-index]")];let ye=$.value.index;if(te.forEach((re,be)=>{const ge=re.getBoundingClientRect();be<$.value.index&&Y.clientY$.value.index&&Y.clientY>ge.top+ge.height/2&&(ye=Math.max(ye,be))}),ye!==$.value.index&&m.layout){const re=[...n.value];re.splice(ye,0,...re.splice($.value.index,1)),m.layout.header={items:re};const be=t.index===$.value.index;$.value.index=ye,$.value.moved=!0,be&&Xt(ye)}}function M(Y){Y.pointerId===D&&(clearTimeout(S),document.removeEventListener("pointermove",L),document.removeEventListener("pointerup",M),document.removeEventListener("pointercancel",M),document.removeEventListener("touchmove",E),$.value.active&&(C=Date.now()+400,$.value.moved&&pt()),$.value={index:-1,active:!1,moved:!1},A=null,D=null)}function U(Y){Date.now(){const ye=Ws("i18n-t");return g(),_(z,null,[o("div",Hy,[o("span",Vy,d(s.value?a(Ae)(p(s.value)||"F0150"):a(Ae)("F0150")),1),o("span",Wy,[o("b",null,d(s.value?s.value.type==="entity"?a(qs)(s.value.entity):a(gs)(s.value):a(c)("editor.topbar.title")),1),o("small",{class:me({mono:s.value?.type==="entity"})},d(s.value?s.value.type==="entity"?s.value.entity:a(c)("editor.topbar.builtin"):a(c)("editor.topbar.items",{used:n.value.length},a(vn)())),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:te[0]||(te[0]=(...re)=>a(Ze)&&a(Ze)(...re))},"✕",8,By)]),o("div",Ky,[o("div",qy,[o("label",zy,d(a(c)("editor.topbar.name")),1),o("input",{id:"title",value:a(m).layout?.title,maxlength:"60",placeholder:a(c)("editor.topbar.name_placeholder"),onInput:te[1]||(te[1]=re=>v(re.target.value))},null,40,Yy)]),o("div",Gy,[o("span",Jy,[Me(d(a(c)("editor.topbar.right"))+" ",1),o("span",Xy," · "+d(n.value.length)+" / "+d(a(vn)()),1)]),o("div",Zy,[(g(!0),_(z,null,he(n.value,(re,be)=>(g(),_("div",{key:a(at)(re)+be,class:me(["item",{selected:be===e.index,"is-hidden":!a(mn)(re).shown,"is-overflow":l.value.has(be),"just-added":b(re),"dragging-chip":$.value.active&&$.value.index===be}]),role:"listitem",tabindex:"0","data-index":be,"aria-label":a(c)("editor.topbar.item_label",{name:a(gs)(re),slot:be+1}),onPointerdown:ge=>B(ge,be),onClick:ge=>U(be),onKeydown:ge=>R(ge,be)},[te[9]||(te[9]=o("span",{class:"grip","aria-hidden":"true"},"⋮⋮",-1)),o("span",{class:"av mdi",style:Ue(a(mn)(re).color?{color:a(mn)(re).color}:void 0)},d(p(re)?a(Ae)(p(re)):""),5),o("span",e0,[o("b",null,d(a(gs)(re)),1),o("small",null,d(h(re,be)),1)]),o("button",{type:"button",class:"x","aria-label":a(c)("editor.topbar.remove_named",{name:a(gs)(re)}),onClick:Pt(ge=>a(nr)(be),["stop"])},"✕",8,t0)],42,Qy))),128)),o("button",{type:"button",class:"ghost-btn",id:"topbar-add",disabled:n.value.length>=a(vn)(),title:n.value.length>=a(vn)()?a(c)("editor.topbar.max",a(vn)()):a(c)("editor.topbar.add_title"),onClick:te[2]||(te[2]=(...re)=>a(er)&&a(er)(...re))},d(a(c)("editor.topbar.add_button")),9,n0)]),o("small",{id:"topbar-hint",class:me({warn:l.value.size>0&&u.value})},d(f.value),3)]),s.value?(g(),_(z,{key:0},[o("div",s0,[o("small",null,d(I.value),1),se(Mu,{items:[s.value],single:""},null,8,["items"])]),s.value.type==="entity"?(g(),_(z,{key:0},[o("div",i0,[o("span",o0,d(a(c)("editor.topbar.content.label")),1),se(kt,{choices:(a(m).inventory.header?.contents||[]).map(re=>[re.key,re.label]),value:s.value.content,onPick:te[3]||(te[3]=re=>y({content:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.content.hint")),1)]),se(Ru,{selected:s.value.icon||"auto",automatic:a(m).topbarPreviews[a(at)(s.value)]?.auto_icon||a(Sn)(s.value.entity),"auto-label":a(c)("editor.topbar.auto_icon"),"allow-none":"",onPick:te[4]||(te[4]=re=>y({icon:re}))},null,8,["selected","automatic","auto-label"]),o("div",l0,[o("span",a0,d(a(c)("editor.topbar.show.label")),1),se(kt,{choices:(a(m).inventory.header?.shows||[]).map(re=>[re.key,re.label]),value:s.value.show,onPick:te[5]||(te[5]=re=>y({show:re}))},null,8,["choices","value"]),o("small",null,d(a(c)("editor.topbar.show.hint")),1)])],64)):s.value.type!=="date"?(g(),it(ye,{key:1,keypath:a(as)?"editor.topbar.clock_24":"editor.topbar.clock_12",tag:"small",id:"topbar-clock",scope:"global"},{settings:oe(()=>[o("a",r0,d(a(c)("editor.topbar.clock_settings")),1)]),_:1},8,["keypath"])):(g(),_("small",c0,d(a(c)("editor.topbar.date_hint",{date:T.value.date})),1))],64)):W("",!0)]),s.value?(g(),_("div",u0,[o("button",{type:"button",class:"btn danger",onClick:te[6]||(te[6]=re=>a(nr)(e.index))},d(a(c)("editor.common.remove")),1),te[10]||(te[10]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",disabled:e.index===0,onClick:te[7]||(te[7]=re=>a(bo)(e.index,e.index-1)&&a(Xt)(e.index-1))},d(a(c)("editor.topbar.up")),9,d0),o("button",{type:"button",class:"btn quiet",disabled:e.index>=n.value.length-1,onClick:te[8]||(te[8]=re=>a(bo)(e.index,e.index+1)&&a(Xt)(e.index+1))},d(a(c)("editor.topbar.down")),9,f0)])):W("",!0)],64)}}}),h0={class:"dr-head"},m0={class:"tx"},b0=["aria-label"],v0={class:"dr-body"},g0={class:"f"},_0={class:"f-label"},y0={class:"options"},w0=["disabled","onClick"],k0={class:"mdi"},$0={class:"tx"},x0={key:0,class:"f"},S0={class:"f-label"},C0={class:"options"},T0=["disabled","onClick"],E0={class:"mdi"},A0={class:"tx"},P0={class:"f"},O0={class:"f-label",for:"topbar-search"},I0=["placeholder","aria-label"],L0={class:"options"},M0=["disabled","onClick"],R0={class:"mdi"},N0={class:"tx"},F0={key:0,class:"hint"},D0={key:1,class:"hint"},U0={class:"dr-foot"},j0=Le({__name:"TopbarAdd",setup(e){const t=ke(""),n=k(()=>new Set(dn().map(at))),s=k(()=>({clock:Wi(as.value,new Date(m.now)),analog:c("editor.topbar.analog_sample"),date:$l(new Date(m.now),ls.value)})),i=k(()=>m.inventory.header?.suggestions?.[m.selected||""]||[]),l=k(()=>{const u=t.value.trim().toLocaleLowerCase();return m.inventory.entities.filter(f=>`${f.name} ${f.id} ${f.area||""} ${f.device||""}`.toLocaleLowerCase().includes(u))}),r=u=>({type:"entity",entity:u,content:"state",icon:"auto",show:"always"});return(u,f)=>(g(),_(z,null,[o("div",h0,[f[3]||(f[3]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"18px"}},"+",-1)),o("span",m0,[o("b",null,d(a(c)("editor.topbar.add.title")),1),o("small",null,d(a(c)("editor.topbar.add.slots",{used:a(dn)().length},a(vn)())),1)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,b0)]),o("div",v0,[o("div",g0,[o("span",_0,d(a(c)("editor.topbar.add.builtin")),1),o("div",y0,[(g(!0),_(z,null,he(a(m).inventory.header?.builtin||[],h=>(g(),_("button",{key:h.type,type:"button",class:"option",disabled:n.value.has(a(at)({type:h.type})),onClick:p=>a(vo)({type:h.type})},[o("span",k0,d(a(Ae)(a(zs)(a(vu)[h.type])?.cp||"F0150")),1),o("span",$0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)({type:h.type}))?a(c)("editor.topbar.add.added"):s.value[h.type]),1)])],8,w0))),128))])]),i.value.length?(g(),_("div",x0,[o("span",S0,d(a(c)("editor.topbar.add.suggestions")),1),o("div",C0,[(g(!0),_(z,null,he(i.value,h=>(g(),_("button",{key:a(at)(h.item),type:"button",class:"option",disabled:n.value.has(a(at)(h.item)),onClick:p=>a(vo)(h.item)},[o("span",E0,d(a(Ae)(h.icon||a(Sn)(h.item.entity))),1),o("span",A0,[o("strong",null,d(h.label),1),o("small",null,d(n.value.has(a(at)(h.item))?a(c)("editor.topbar.add.added"):[h.name,h.area].filter(Boolean).join(" · ")),1)])],8,T0))),128))])])):W("",!0),o("div",P0,[o("label",O0,d(a(c)("editor.topbar.add.entity")),1),Ee(o("input",{id:"topbar-search","onUpdate:modelValue":f[1]||(f[1]=h=>t.value=h),type:"search",placeholder:a(c)("editor.topbar.add.search"),"aria-label":a(c)("editor.topbar.add.search_label")},null,8,I0),[[Je,t.value]]),o("div",L0,[(g(!0),_(z,null,he(l.value.slice(0,40),h=>(g(),_("button",{key:h.id,type:"button",class:"option",disabled:n.value.has(a(at)(r(h.id))),onClick:p=>a(vo)(r(h.id))},[o("span",R0,d(a(Ae)(a(Sn)(h.id))),1),o("span",N0,[o("strong",null,d(h.name),1),o("small",null,d([h.area,h.id].filter(Boolean).join(" · ")),1)])],8,M0))),128)),l.value.length?l.value.length>40?(g(),_("p",D0,d(a(c)("editor.common.results",l.value.length)),1)):W("",!0):(g(),_("p",F0,d(a(c)("editor.topbar.add.none_found")),1))])])]),o("div",U0,[f[4]||(f[4]=o("span",{class:"spacer"},null,-1)),o("button",{type:"button",class:"btn quiet",onClick:f[2]||(f[2]=(...h)=>a(Ze)&&a(Ze)(...h))},d(a(c)("editor.common.cancel")),1)])],64))}}),H0={class:"dr-head"},V0={class:"tx"},W0=["aria-label"],B0={class:"dr-body",id:"inspector-section"},K0={id:"inspection-summary"},q0={key:0,class:"hint warn"},z0={key:1,class:"hint"},Y0={id:"inspection"},G0={class:"dr-foot"},J0=Le({__name:"InspectPanel",props:{entity:{}},setup(e){const t=e,n=ke(null),s=ke(c("editor.inspect.reading")),i=ke("");async function l(){if(m.selected){n.value=null,i.value="",s.value=c("editor.inspect.fetching");try{const u=await Nt(`screens/${encodeURIComponent(m.selected)}/inspect`),f=t.entity?u.tiles.filter(h=>h.entity===t.entity):u.tiles;n.value=f,s.value=JSON.stringify(t.entity?f[0]:u,null,2)}catch(u){i.value=u.message,s.value="",Ce(u.message)}}}const r=u=>{const f=m.layout?.tiles.find(h=>h.entity===u)?.options||{};return c("editor.inspect.options",{slider:c(f.inline==="slider"?"editor.inspect.yes":"editor.inspect.no"),display:bu(f.display||"standard"),size:am(f.size),control:nm({entity:u,options:f},m.inventory),background:m.inventory.backgrounds?.[f.background||"auto"]?.label||c("editor.inspect.background_default")})};return En(l),Ct(()=>t.entity,l),(u,f)=>(g(),_(z,null,[o("div",H0,[f[1]||(f[1]=o("span",{class:"av",style:{background:"var(--seg)",color:"var(--ink-2)","font-size":"16px"}},"⌕",-1)),o("span",V0,[o("b",null,d(a(c)("editor.inspect.title")),1),o("small",{class:me({mono:e.entity})},d(e.entity||a(c)("editor.inspect.subtitle")),3)]),o("button",{type:"button",class:"icon-btn","aria-label":a(c)("editor.common.close"),onClick:f[0]||(f[0]=(...h)=>a(Ze)&&a(Ze)(...h))},"✕",8,W0)]),o("div",B0,[o("div",K0,[i.value?(g(),_("p",q0,d(i.value),1)):n.value?W("",!0):(g(),_("p",z0,d(a(c)("editor.inspect.fetching")),1)),(g(!0),_(z,null,he(n.value||[],(h,p)=>(g(),_("article",{key:p,class:"inspection-tile"},[o("strong",null,d(h.entity),1),o("span",null,d(a(c)("editor.inspect.status",{status:h.word||h.state})),1),o("small",null,d(r(h.entity)),1)]))),128))]),o("pre",Y0,d(s.value),1)]),o("div",G0,[o("button",{type:"button",class:"btn quiet",onClick:l},d(a(c)("editor.inspect.read_again")),1),f[2]||(f[2]=o("span",{class:"spacer"},null,-1))])],64))}}),X0=["aria-hidden"],Z0=Le({__name:"Drawer",setup(e){const t=k(()=>!!(m.inspector&&(m.inspector.kind!=="tile"||co.value)));return(n,s)=>(g(),_("aside",{class:me(["drawer",{open:t.value}]),id:"tile-sheet","aria-hidden":t.value?"false":"true",onClick:s[0]||(s[0]=Pt(()=>{},["stop"]))},[a(m).inspector?(g(),_(z,{key:0},[a(m).inspector.kind==="tile"&&a(co)?(g(),it(jy,{key:0,tile:a(co)},null,8,["tile"])):a(m).inspector.kind==="bar"?(g(),it(p0,{key:1,index:a(m).inspector.index},null,8,["index"])):a(m).inspector.kind==="bar-add"?(g(),it(j0,{key:2})):a(m).inspector.kind==="inspect"?(g(),it(J0,{key:3,entity:a(m).inspector.entity},null,8,["entity"])):W("",!0)],64)):W("",!0)],10,X0))}}),Q0={class:"main-head"},e1={class:"eyebrow",id:"screen-name"},t1=["title"],n1={class:"head-right"},s1={class:"seg",role:"tablist"},i1=["aria-pressed"],o1=["aria-pressed"],l1={key:1,id:"dirty",class:"chip dirty"},a1=["disabled"],r1={key:0,class:"spin small"},c1=["aria-label","aria-expanded"],u1={key:3,class:"menu",role:"menu"},d1=["disabled","title"],f1=["disabled","aria-expanded"],p1={key:0,class:"sub"},h1=["onClick"],m1=["disabled","title"],b1={class:"body",id:"body"},v1=Le({__name:"ScreenView",setup(e){const t=k(()=>_t.value),n=k(()=>t.value.online?`${t.value.delivery} · ${t.value.status}`:c("editor.screen_view.offline")),s=k(()=>Pu(t.value)&&t.value.online&&t.value.update?.profile&&t.value.update?.host),i=k(()=>m.inventory.screens.filter(T=>T.id!==t.value.id&&T.layout?.tiles?.length)),l=ke(!1),r=ke(null);function u(){m.menuOpen=!1,l.value=!1}function f(){u(),m.overrideProfile=t.value.update?.profile||null,m.overrideFriendly=t.value.name,He("#override")}function h(){u(),m.selectedTile=null,m.inspector={kind:"inspect"}}function p(T){u(),!(m.dirty&&!confirm(c("editor.screen_view.confirm.copy")))&&Om(T)}function b(){u(),r.value?.click()}async function v(T){const $=T.target,A=$.files?.[0];$.value="",A&&(m.dirty&&!confirm(c("editor.screen_view.confirm.import"))||Lm(await A.text()))}function y(T){if(T.key==="Escape")if(m.menuOpen)u();else{if(m.palette)return;m.inspector&&!T.target?.closest?.(".picker")&&Ze()}else(T.metaKey||T.ctrlKey)&&T.key.toLowerCase()==="s"&&(T.preventDefault(),m.dirty&&Wo())}function I(T){m.menuOpen&&!T.target.closest(".head-right .menu, #more")&&u()}return En(()=>{document.addEventListener("keydown",y),document.addEventListener("click",I)}),rs(()=>{document.removeEventListener("keydown",y),document.removeEventListener("click",I)}),(T,$)=>(g(),_(z,null,[o("header",Q0,[o("div",null,[o("span",e1,d(t.value.name),1),o("h1",null,d(a(m).layout?.title||a(Un)("editor.mockup.home")),1)]),o("span",{id:"delivery",class:me(["chip",{off:!t.value.online}]),title:n.value},[$[9]||($[9]=o("span",{class:"dot"},null,-1)),Me(d(n.value),1)],10,t1),o("div",n1,[o("div",s1,[o("button",{type:"button",id:"tab-layout",role:"tab","aria-pressed":a(m).tab==="layout"?"true":"false",onClick:$[0]||($[0]=A=>a(m).tab="layout")},d(a(c)("editor.screen_view.tabs.layout")),9,i1),o("button",{type:"button",id:"tab-settings",role:"tab","aria-pressed":a(m).tab==="settings"?"true":"false",onClick:$[1]||($[1]=A=>{a(m).tab="settings",a(Ze)()})},d(a(c)("editor.screen_view.tabs.settings")),9,o1)]),a(m).dirty?(g(),_("span",l1,d(a(c)("editor.common.unsaved")),1)):(g(),_("span",{key:0,id:"dirty",class:me(["chip",{sent:a(m).saved}])},d(a(m).saved?a(c)("editor.screen_view.sent"):a(c)("editor.screen_view.all_saved")),3)),a(m).dirty?(g(),_("button",{key:2,id:"save",type:"button",class:"btn primary",disabled:a(m).busy,title:"⌘S",onClick:$[2]||($[2]=A=>a(Wo)())},[a(m).busy?(g(),_("span",r1)):W("",!0),Me(d(a(m).busy?a(c)("editor.common.saving"):a(c)("editor.common.save_send")),1)],8,a1)):W("",!0),o("button",{id:"more",type:"button",class:"icon-btn","aria-label":a(c)("editor.screen_view.more"),"aria-haspopup":"menu","aria-expanded":a(m).menuOpen?"true":"false",onClick:$[3]||($[3]=Pt(A=>{a(m).menuOpen=!a(m).menuOpen,l.value=!1},["stop"]))},"···",8,c1),a(m).menuOpen?(g(),_("div",u1,[o("button",{type:"button",role:"menuitem",id:"identify",disabled:!a(Kn)(t.value)||!t.value.online,title:a(Kn)(t.value)?"":a(c)("editor.screen_view.menu.identify_needs"),onClick:$[4]||($[4]=A=>{u(),a(Su)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.identify"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.identify_hint")),1)],8,d1),o("button",{type:"button",role:"menuitem",id:"inspect",onClick:h},[Me(d(a(c)("editor.common.read_current_data"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.inspect_hint")),1)]),$[12]||($[12]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"copy-layout",disabled:!i.value.length,"aria-expanded":l.value?"true":"false",onClick:$[5]||($[5]=Pt(A=>l.value=!l.value,["stop"]))},[Me(d(a(c)("editor.screen_view.menu.copy"))+" ",1),o("small",null,d(i.value.length?a(c)("editor.screen_view.menu.copy_screens",i.value.length):a(c)("editor.screen_view.menu.copy_none")),1)],8,f1),l.value?(g(),_("div",p1,[(g(!0),_(z,null,he(i.value,A=>(g(),_("button",{key:A.id,type:"button",role:"menuitem",onClick:S=>p(A.id)},[Me(d(A.name)+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.copy_tiles",A.layout.tiles.length)),1)],8,h1))),128))])):W("",!0),o("button",{type:"button",role:"menuitem",id:"export-layout",onClick:$[6]||($[6]=A=>{u(),a(Tu)()})},[Me(d(a(c)("editor.screen_view.menu.export"))+" ",1),$[10]||($[10]=o("small",null,"JSON",-1))]),o("button",{type:"button",role:"menuitem",id:"import-layout",onClick:b},[Me(d(a(c)("editor.screen_view.menu.import"))+" ",1),$[11]||($[11]=o("small",null,"JSON",-1))]),$[13]||($[13]=o("div",{class:"sep"},null,-1)),o("button",{type:"button",role:"menuitem",id:"open-override",disabled:!t.value.update?.profile,title:t.value.update?.profile?"":a(c)("editor.screen_view.menu.override_none"),onClick:f},[Me(d(a(c)("editor.screen_view.menu.override"))+" ",1),o("small",null,d(a(c)("editor.screen_view.menu.override_hint")),1)],8,m1),o("button",{type:"button",role:"menuitem",onClick:$[7]||($[7]=A=>{u(),a(He)("#firmware")})},d(a(c)("editor.nav.firmware")),1),s.value?(g(),_("button",{key:1,type:"button",role:"menuitem",onClick:$[8]||($[8]=A=>{u(),a(Ko)(t.value)})},[Me(d(a(c)("editor.screen_view.menu.update"))+" ",1),o("small",null,d(t.value.update?.target),1)])):W("",!0)])):W("",!0),o("input",{ref_key:"fileInput",ref:r,type:"file",accept:"application/json,.json",hidden:"",onChange:v},null,544)])]),o("div",b1,[a(m).tab==="layout"?(g(),it(Jg,{key:0})):(g(),it(p_,{key:1})),se(Z0)])],64))}}),g1={key:0,id:"choose",class:"empty"},_1={key:1,id:"empty",class:"empty"},y1=Le({__name:"EmptyState",setup(e){return(t,n)=>a(m).inventory.screens.length?(g(),_("section",g1,[n[1]||(n[1]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.choose.title")),1),o("p",null,d(a(c)("editor.empty.choose.text")),1)])):(g(),_("section",_1,[n[2]||(n[2]=o("span",{class:"empty-icon"},"▦",-1)),o("h2",null,d(a(c)("editor.empty.start.title")),1),o("p",null,d(a(c)("editor.empty.start.text")),1),o("button",{id:"start",type:"button",class:"btn primary",onClick:n[0]||(n[0]=s=>a(He)("#new-screen"))},d(a(c)("editor.empty.start.button")),1)]))}}),w1={class:"panel",id:"settings-view"},k1={class:"panel-head"},$1={class:"tx"},x1={class:"eyebrow"},S1={id:"settings-title"},C1={class:"card-grid"},T1={class:"card"},E1={class:"tools"},A1={class:"tx"},P1={class:"tx"},O1={key:0,class:"card updates",id:"updates"},I1={id:"updates-hint"},L1=["aria-valuenow"],M1={class:"progress-text"},R1={key:0,class:"log-lines"},N1={key:2,class:"whatsnew"},F1={class:"check"},D1=["checked"],U1={key:1,class:"card",id:"language"},j1={class:"field"},H1={class:"f-label",for:"screen-language"},V1=["value","disabled"],W1={value:"auto"},B1=["value"],K1={key:0,id:"language-ha-missing"},q1={class:"field"},z1={class:"f-label",for:"time-format"},Y1=["value","disabled"],G1={value:"auto"},J1={value:"24"},X1={value:"12"},Z1={class:"field"},Q1={class:"f-label",for:"number-format"},e2=["value","disabled"],t2={value:"auto"},n2=["value"],s2={key:0,class:"actions",id:"language-profile"},i2=["disabled"],o2={class:"card"},l2={class:"tools"},a2={class:"tx"},r2={class:"card",id:"claude"},c2={class:"actions"},u2=["disabled"],d2={id:"claude-path"},f2={class:"actions"},p2={class:"btn quiet",id:"claude-download",href:"api/claude-skill.zip",download:"esp-screens.zip"},h2="https://github.com/MaxGramser/homeassistant_espscreen/blob/main/docs/TRANSLATING.md",m2=Le({__name:"AppSettingsView",setup(e){const t=k(()=>m.inventory.updates),n=k(()=>m.inventory.screens.filter(E=>E.update?.available).length),s=k(()=>t.value?t.value.busy?c("editor.settings.updates.busy",{version:t.value.target}):m.inventory.screens.length?n.value?c("editor.settings.updates.available",{version:t.value.target},n.value):c("editor.settings.updates.current",{version:t.value.target}):c("editor.settings.updates.no_screens",{version:t.value.target}):""),i=k(()=>m.inventory.screens.find(E=>E.update?.state==="running"||m.updating.includes(E.id))),l=k(()=>i.value?Jn(i.value):null),r=k(()=>(m.firmwareJob?.logs||[]).slice(-12).join(` +`)),u=k(()=>{const E=m.inventory.changelog,L=t.value?.target;return!Array.isArray(E)||!L?[]:E.filter(M=>M.firmware===L).flatMap(M=>M.lines).slice(0,10)}),f=k(()=>m.inventory.claude_skill),h=ke(!1);async function p(){h.value=!0;try{await Wm()}finally{h.value=!1}}const b=["point","comma","space"],v=k(()=>m.inventory.language),y=k(()=>{const E=v.value,L=E?.ha?su(E.ha,E.languages.map(M=>M.code)):void 0;return E?.languages.find(M=>M.code===L)?.name}),I=k(()=>v.value?.languages.find(E=>E.code===v.value.effective&&!E.checked)),T=E=>c(E==="12"?"editor.settings.language.clock_12":"editor.settings.language.clock_24"),$=E=>lu("1234.5",E),A=Xh(),S=k(()=>{const E=v.value;return E?{...A.clock&&A.clock!==(E.clock_effective||"24")?{clock:A.clock}:{},...A.numbers&&A.numbers!==(E.numbers_effective||"point")?{numbers:A.numbers}:{}}:{}}),D=k(()=>[S.value.clock&&T(S.value.clock),S.value.numbers&&$(is[S.value.numbers])].filter(Boolean).join(" · ")),C=ke(!1);async function B(E,L){const M=L.target;C.value=!0;const U=await ar({[E]:M.value});C.value=!1,U||(M.value=String(v.value?.[E]??"auto"))}async function O(){C.value=!0,await ar(S.value),C.value=!1}return(E,L)=>{const M=Ws("i18n-t");return g(),_("div",w1,[o("div",k1,[o("div",$1,[o("span",x1,d(a(c)("editor.nav.settings")),1),o("h1",S1,d(a(c)("editor.settings.title")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-settings",onClick:L[0]||(L[0]=U=>a(He)(""))},d(a(c)("editor.settings.back")),1)]),o("div",C1,[o("section",T1,[o("h2",null,d(a(c)("editor.settings.screens.title")),1),o("p",null,d(a(c)("editor.settings.screens.text")),1),o("div",E1,[o("button",{type:"button",class:"tool",onClick:L[1]||(L[1]=U=>a(He)("#new-screen"))},[L[9]||(L[9]=o("span",{class:"tool-icon"},"+",-1)),o("span",A1,[o("b",null,d(a(c)("editor.nav.new_screen")),1),o("small",null,d(a(c)("editor.nav.new_screen_detail")),1)])]),o("button",{type:"button",class:"tool",onClick:L[2]||(L[2]=U=>a(He)("#firmware"))},[L[10]||(L[10]=o("span",{class:"tool-icon"},"⇪",-1)),o("span",P1,[o("b",null,d(a(c)("editor.nav.firmware")),1),o("small",null,d(a(c)("editor.settings.screens.firmware_detail")),1)])])])]),t.value?(g(),_("section",O1,[o("h2",null,d(a(c)("editor.settings.updates.title")),1),o("p",I1,d(s.value),1),i.value&&l.value?(g(),_(z,{key:0},[o("div",{class:"progress",role:"progressbar","aria-valuenow":l.value.percent,"aria-valuemin":"0","aria-valuemax":"100"},[o("i",{style:Ue({width:l.value.percent+"%"})},null,4)],8,L1),o("div",M1,[o("span",null,d(i.value.name)+" · "+d(l.value.percent)+" %",1),o("span",null,d(l.value.text),1)]),r.value?(g(),_("pre",R1,d(r.value),1)):W("",!0)],64)):W("",!0),t.value.pending&&!t.value.busy&&t.value.pending>=2?(g(),_("button",{key:1,id:"update-all",type:"button",class:"btn primary",onClick:L[3]||(L[3]=(...U)=>a(ir)&&a(ir)(...U))},d(a(c)("editor.settings.updates.all",t.value.pending)),1)):W("",!0),u.value.length&&!a(Bo)()?(g(),_("details",N1,[o("summary",null,d(a(c)("editor.settings.updates.whats_new",{version:t.value.target})),1),o("ul",null,[(g(!0),_(z,null,he(u.value,U=>(g(),_("li",{key:U},d(U),1))),128))])])):W("",!0),o("label",F1,[o("input",{type:"checkbox",id:"auto-update",checked:!!t.value.auto,onChange:L[4]||(L[4]=U=>a(Vm)(U.target.checked))},null,40,D1),o("span",null,[Me(d(a(c)("editor.settings.updates.auto_label")),1),o("small",null,d(a(c)("editor.settings.updates.auto_hint")),1)])])])):W("",!0),v.value?(g(),_("section",U1,[o("h2",null,d(a(c)("editor.settings.language.title")),1),o("div",j1,[o("label",H1,d(a(c)("editor.settings.language.screen_language")),1),o("select",{id:"screen-language",value:v.value.setting,disabled:C.value,onChange:L[5]||(L[5]=U=>B("setting",U))},[o("option",W1,d(y.value?a(c)("editor.settings.language.auto",{name:y.value}):a(c)("editor.settings.language.auto_plain")),1),(g(!0),_(z,null,he(v.value.languages,U=>(g(),_("option",{key:U.code,value:U.code},d(U.checked?U.name:a(c)("editor.settings.language.unchecked",{name:U.name})),9,B1))),128))],40,V1),v.value.setting==="auto"&&!y.value?(g(),_("small",K1,d(a(c)("editor.settings.language.ha_missing")),1)):W("",!0),I.value?(g(),it(M,{key:1,keypath:"editor.settings.language.help",tag:"small",id:"language-help",scope:"global"},{name:oe(()=>[Me(d(I.value.name),1)]),guide:oe(()=>[o("a",{href:h2,target:"_blank",rel:"noopener"},d(a(c)("editor.settings.language.guide")),1)]),_:1})):W("",!0),o("small",null,d(a(c)("editor.settings.language.update_hint")),1)]),o("div",q1,[o("label",z1,d(a(c)("editor.settings.language.time")),1),o("select",{id:"time-format",value:v.value.clock||"auto",disabled:C.value,onChange:L[6]||(L[6]=U=>B("clock",U))},[o("option",G1,d(a(c)("editor.settings.language.time_auto",{clock:T(v.value.clock_auto||v.value.clock_effective)})),1),o("option",J1,d(T("24")),1),o("option",X1,d(T("12")),1)],40,Y1)]),o("div",Z1,[o("label",Q1,d(a(c)("editor.settings.language.numbers")),1),o("select",{id:"number-format",value:v.value.numbers||"auto",disabled:C.value,onChange:L[7]||(L[7]=U=>B("numbers",U))},[o("option",t2,d(a(c)("editor.settings.language.numbers_auto",{example:$(a(qm))})),1),(g(),_(z,null,he(b,U=>o("option",{key:U,value:U},d($(a(is)[U])),9,n2)),64))],40,e2)]),D.value?(g(),_("div",s2,[o("small",null,d(a(c)("editor.settings.language.profile",{formats:D.value})),1),o("button",{type:"button",class:"btn quiet mini",disabled:C.value,onClick:O},d(a(c)("editor.settings.language.use_profile")),9,i2)])):W("",!0),o("small",null,d(a(c)("editor.settings.language.editor_hint")),1)])):W("",!0),o("section",o2,[o("h2",null,d(a(c)("editor.nav.alerts")),1),o("p",null,d(a(c)("editor.settings.alerts.text")),1),o("div",l2,[o("button",{type:"button",class:"tool",onClick:L[8]||(L[8]=U=>a(He)("#alerts"))},[L[11]||(L[11]=o("span",{class:"tool-icon"},"!",-1)),o("span",a2,[o("b",null,d(a(c)("editor.nav.alerts")),1),o("small",null,d(a(c)("editor.settings.alerts.detail")),1)])])])]),o("section",r2,[L[12]||(L[12]=o("h2",null,"Claude",-1)),o("p",null,d(a(c)("editor.settings.claude.text")),1),o("div",c2,[o("button",{type:"button",id:"claude-install",class:me(["btn",f.value?.installed&&f.value.current?"quiet":"primary"]),disabled:!f.value||h.value,onClick:p},d(!f.value||!f.value.installed?a(c)("editor.settings.claude.install"):f.value.current?a(c)("editor.settings.claude.install_again"):a(c)("editor.settings.claude.update")),11,u2),o("span",{id:"claude-status",class:me(["chip",f.value&&f.value.installed?f.value.current?"good":"update":""]),role:"status"},d(f.value?f.value.installed?f.value.current?a(c)("editor.settings.claude.installed_chip"):a(c)("editor.settings.claude.newer"):a(c)("editor.settings.claude.not_installed"):a(c)("editor.common.loading")),3)]),se(M,{keypath:"editor.settings.claude.writes",tag:"small",scope:"global"},{path:oe(()=>[o("code",d2,d(f.value?.path||"/homeassistant/.claude/skills/esp-screens"),1)]),_:1}),o("div",f2,[o("a",p2,d(a(c)("editor.settings.claude.download")),1),o("small",null,d(a(c)("editor.settings.claude.upload")),1)])])])])}}}),b2={class:"panel",id:"installer"},v2={class:"panel-head"},g2={class:"tx"},_2={class:"eyebrow"},y2={id:"install-title"},w2={key:0},k2=["aria-label"],$2={class:"boards"},x2={class:"board"},S2={class:"board"},C2={class:"field"},T2={class:"f-label",for:"friendly_name"},E2=["placeholder"],A2={class:"node-line"},P2={id:"node-preview"},O2={key:0,class:"field",id:"node-label"},I2={class:"f-label",for:"node-name"},L2={key:1,id:"wifi-fields",class:"wifi"},M2={class:"hint",id:"wifi-status"},R2={key:0,class:"field",id:"wifi-ssid-label"},N2={class:"f-label",for:"wifi_ssid"},F2={key:1,class:"field",id:"wifi-password-label"},D2={class:"f-label",for:"wifi_password"},U2={class:"field"},j2={class:"f-label",for:"install-target"},H2={key:0,value:"usb"},V2=["value"],W2={value:"download"},B2={value:""},K2={id:"target-hint"},q2={key:2,class:"hint",id:"install-note"},z2={class:"actions"},Y2=["disabled"],G2={id:"install-status",class:"status-line error",role:"status"},J2={key:1,id:"install-progress",class:"card"},X2={class:"progress-head"},Z2={key:0,class:"spin",id:"progress-spin"},Q2={id:"progress-title"},ew={id:"progress-detail"},tw={key:0,id:"install-download",class:"card",style:{background:"var(--surface-2)"}},nw=["href","download"],sw={class:"steps",id:"download-steps"},iw={key:1,id:"install-result",class:"field"},ow={class:"key-box"},lw={class:"steps",id:"install-steps"},aw=["open"],rw={id:"install-log",class:"log"},cw={class:"actions"},uw="https://web.esphome.io/?dashboard_install",dw=Le({__name:"InstallerView",setup(e){const t=qn({board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),n=qn({view:"setup",file:null,friendly:"",board:"cyd",target:"",apiKey:null,nodeEdited:!1,jobState:null,picked:!1,action:null}),s=ke(!1),i=ke(null),l=ke(null),r=ke([]),u=ke(""),f=ke(""),h=ke(!1),p=ke(!1),b=ke(null);let v=0;function y($e){return $e.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^[^a-z]+/,"").slice(0,30).replace(/-+$/,"")||"screen"}function I($e){const K=$e.replace(/^\/dev\/serial\/by-id\/usb-/,"").replace(/-if\d+(-port\d+)?$/,"").replace(/_/g," ");return`USB · ${K===$e?$e.replace(/^\/dev\//,""):K}`}Ct(()=>t.friendly_name,()=>{n.nodeEdited||(t.name=y(t.friendly_name))});const T=k(()=>t.name||"…"),$=k(()=>i.value?.ports||[]),A=k(()=>i.value?.wifi),S=k(()=>A.value?.state==="new"||A.value?.state==="missing"),D=k(()=>A.value?.missing||[]),C=k(()=>c(A.value?.state==="new"?"editor.installer.wifi.new":"editor.installer.wifi.missing")),B=k(()=>A.value?.state==="ready"?c("editor.installer.wifi.ready"):A.value?.state==="invalid"?c("editor.installer.wifi.invalid"):""),O=k(()=>c(t.target==="usb"?"editor.installer.target.usb":t.target==="download"?"editor.installer.target.download":t.target?$.value.length>1?"editor.installer.target.several":"editor.installer.target.once":"editor.installer.target.later")),E=k(()=>t.target==="download"?c("editor.firmware.build_download"):t.target?c("editor.installer.install"):c("editor.installer.save_profile")),L=k(()=>i.value?.job?.state==="running"&&!(n.file&&i.value.job.file===n.file)),M=k(()=>h.value||A.value?.state==="invalid"||t.target==="usb"||!!t.target&&(L.value||!i.value?.available));function U(){const $e=t.target;($e==="download"||$e===""?n.picked:$.value.includes($e))||(t.target=$.value[0]||"usb")}async function R(){let $e;try{$e=await Nt("firmware")}catch(ie){u.value=ie.message;return}i.value=$e;const K=$e.job,ne=K&&n.file&&K.file===n.file;if(ne&&(n.jobState=K.state),n.view==="setup"){if(ne&&K.state==="running"){Y(K,$e.logs||[]);return}U(),u.value=L.value?c("editor.installer.busy",{file:K.file}):!$e.available&&t.target?c("editor.installer.no_cli"):B.value}else n.view==="progress"&&ne&&(l.value=K,r.value=$e.logs||[],K.state!=="running"&&K.state!=="success"&&(p.value=!0))}function Y($e,K){n.view="progress",n.jobState=$e.state,n.action=$e.action,l.value=$e,r.value=K}const te=k(()=>l.value?.state==="running"),ye=k(()=>n.view==="done"||l.value?.state==="success"),re=k(()=>n.action==="download"),be=k(()=>c(n.view==="done"?"editor.installer.title.saved":te.value?"editor.installer.title.running":ye.value?re.value?"editor.installer.title.ready":"editor.installer.title.done":"editor.installer.title.failed")),ge=k(()=>n.view==="done"?c("editor.installer.progress.saved",{file:n.file}):te.value?l.value?.stage==="upload"?c("editor.installer.progress.writing",{name:n.friendly}):c("editor.installer.progress.building"):ye.value?re.value?c("editor.installer.progress.ready",{name:n.friendly}):c("editor.installer.progress.installed",{name:n.friendly}):c(re.value?"editor.installer.progress.build_failed":"editor.installer.progress.install_failed")),we=k(()=>n.view==="done"?c("editor.installer.detail.saved"):te.value?l.value?.stage==="upload"?c("editor.installer.detail.uploading"):c(re.value?"editor.installer.detail.building_download":"editor.installer.detail.building"):ye.value?re.value?c("editor.installer.detail.downloaded"):c(n.board==="cyd"?"editor.installer.detail.booted_cyd":"editor.installer.detail.booted"):r.value.filter($e=>/error/i.test($e)).pop()||r.value.filter($e=>/failed/i.test($e)).pop()||c("editor.installer.detail.see_log")),Ye=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.file||"")}/download`,name:(n.file||"").replace(/\.yaml$/,"")+".factory.bin"}));async function le($e){const K=$e.target;if(n.nodeEdited||(t.name=y(t.friendly_name)),!!K.reportValidity()){h.value=!0,f.value="";try{const ne={board:t.board,friendly_name:t.friendly_name,name:t.name,target:t.target};S.value&&(D.value.includes("wifi_ssid")&&(ne.wifi_ssid=t.wifi_ssid),D.value.includes("wifi_password")&&(ne.wifi_password=t.wifi_password));const ie=await ft("firmware/profiles","POST",ne);Object.assign(n,{file:ie.file,apiKey:ie.api_key,friendly:t.friendly_name.trim(),board:t.board,target:t.target}),t.wifi_password="",ie.job?Y(ie.job,[]):n.view="done"}catch(ne){f.value=ne.message}finally{h.value=!1}}}async function ee(){try{if(!re.value){const{ports:K}=await Nt("firmware");!K.includes(n.target)&&K.length===1&&(n.target=K[0])}const $e=await ft("firmware/jobs","POST",re.value?{file:n.file,action:"download"}:{file:n.file,action:"install",target:n.target});Y($e,[])}catch($e){Ce($e.message)}}function ce(){Object.assign(n,{view:"setup",file:null,apiKey:null,nodeEdited:!1,jobState:null,target:"",picked:!1,action:null}),Object.assign(t,{board:"cyd",friendly_name:"",name:"",wifi_ssid:"",wifi_password:"",target:""}),s.value=!1,l.value=null,r.value=[],f.value="",u.value="",p.value=!1,R()}function tt(){n.view==="progress"&&n.jobState!=="running"&&(n.view="done"),He("")}return En(()=>{R(),v=window.setInterval(R,3e3)}),rs(()=>clearInterval(v)),($e,K)=>{const ne=Ws("i18n-t");return g(),_("div",b2,[o("div",v2,[o("div",g2,[o("span",_2,d(a(c)("editor.nav.new_screen")),1),o("h1",y2,d(n.view==="setup"?a(c)("editor.installer.title.setup"):be.value),1),n.view==="setup"?(g(),_("p",w2,d(a(c)("editor.installer.intro")),1)):W("",!0)]),o("button",{type:"button",class:"btn quiet",id:"close-install","aria-label":a(c)("editor.common.close"),onClick:tt},d(a(c)("editor.common.back")),9,k2)]),n.view==="setup"?(g(),_("form",{key:0,id:"install-form",class:"card",onSubmit:Pt(le,["prevent"])},[o("fieldset",null,[o("legend",null,d(a(c)("editor.installer.board")),1),o("div",$2,[o("label",x2,[Ee(o("input",{type:"radio",name:"board",value:"cyd","onUpdate:modelValue":K[0]||(K[0]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_cyd")),1),K[13]||(K[13]=o("small",null,"ESP32-2432S028 · 320 × 240",-1))])]),o("label",S2,[Ee(o("input",{type:"radio",name:"board",value:"guition","onUpdate:modelValue":K[1]||(K[1]=ie=>t.board=ie)},null,512),[[ca,t.board]]),o("span",null,[o("b",null,d(a(c)("editor.installer.board_guition")),1),K[14]||(K[14]=o("small",null,"ESP32-S3-4848S040 · 480 × 480 · GT911",-1))])])])]),o("div",C2,[o("label",T2,d(a(c)("editor.installer.name")),1),Ee(o("input",{id:"friendly_name",name:"friendly_name","onUpdate:modelValue":K[2]||(K[2]=ie=>t.friendly_name=ie),required:"",maxlength:"60",placeholder:a(c)("editor.installer.name_placeholder"),autocomplete:"off"},null,8,E2),[[Je,t.friendly_name]]),o("small",A2,[Me(d(a(c)("editor.installer.device_name"))+" ",1),o("code",P2,d(T.value),1),o("button",{type:"button",class:"btn link mini",id:"edit-node",onClick:K[3]||(K[3]=ie=>{n.nodeEdited=!0,s.value=!0})},d(a(c)("editor.installer.customize")),1)]),o("small",null,d(a(c)("editor.installer.name_hint")),1)]),s.value?(g(),_("div",O2,[o("label",I2,d(a(c)("editor.installer.device_name")),1),Ee(o("input",{id:"node-name",name:"name","onUpdate:modelValue":K[4]||(K[4]=ie=>t.name=ie),pattern:"[a-z][a-z0-9\\-]{0,29}",maxlength:"30",autocomplete:"off",onInput:K[5]||(K[5]=ie=>n.nodeEdited=!0)},null,544),[[Je,t.name]]),o("small",null,d(a(c)("editor.installer.device_name_hint")),1)])):W("",!0),S.value?(g(),_("fieldset",L2,[o("legend",null,d(a(c)("editor.installer.wifi.title")),1),o("p",M2,d(C.value),1),D.value.includes("wifi_ssid")?(g(),_("div",R2,[o("label",N2,d(a(c)("editor.installer.wifi.ssid")),1),Ee(o("input",{id:"wifi_ssid",name:"wifi_ssid","onUpdate:modelValue":K[6]||(K[6]=ie=>t.wifi_ssid=ie),autocomplete:"off"},null,512),[[Je,t.wifi_ssid]])])):W("",!0),D.value.includes("wifi_password")?(g(),_("div",F2,[o("label",D2,d(a(c)("editor.installer.wifi.password")),1),Ee(o("input",{id:"wifi_password",name:"wifi_password",type:"password","onUpdate:modelValue":K[7]||(K[7]=ie=>t.wifi_password=ie),autocomplete:"new-password"},null,512),[[Je,t.wifi_password]])])):W("",!0)])):W("",!0),o("div",U2,[o("label",j2,d(a(c)("editor.installer.install_via")),1),Ee(o("select",{id:"install-target",name:"target","onUpdate:modelValue":K[8]||(K[8]=ie=>t.target=ie),onChange:K[9]||(K[9]=ie=>{n.picked=!0,R()})},[$.value.length?W("",!0):(g(),_("option",H2,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(z,null,he($.value,ie=>(g(),_("option",{key:ie,value:ie},d(I(ie)),9,V2))),128)),o("option",W2,d(a(c)("editor.firmware.download_target")),1),o("option",B2,d(a(c)("editor.installer.later")),1)],544),[[Vn,t.target]]),o("small",K2,d(O.value),1)]),u.value?(g(),_("p",q2,d(u.value),1)):W("",!0),o("div",z2,[o("button",{type:"submit",class:"btn primary",id:"install-go",disabled:M.value},d(E.value),9,Y2),o("span",G2,d(f.value),1)])],32)):(g(),_("div",J2,[o("div",X2,[te.value?(g(),_("span",Z2)):(g(),_("span",{key:1,class:me(["outcome",ye.value?"ok":"bad"]),id:"progress-mark"},d(ye.value?"✓":"✕"),3)),o("strong",Q2,d(ge.value),1)]),o("p",ew,d(we.value),1),ye.value&&re.value&&n.view!=="done"?(g(),_("div",tw,[o("a",{class:"btn primary",id:"download-firmware",href:Ye.value.href,download:Ye.value.name},d(a(c)("editor.firmware.download_file",{name:Ye.value.name})),9,nw),o("ol",sw,[o("li",null,[se(ne,{keypath:"editor.installer.download_steps.plug",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.plug_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.download_steps.open",scope:"global"},{bold:oe(()=>[o("b",null,[se(ne,{keypath:"editor.installer.download_steps.open_bold",scope:"global"},{esphome_web:oe(()=>[o("a",{href:uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])]),_:1})]),o("li",null,[se(ne,{keypath:n.board==="cyd"?"editor.installer.download_steps.install_cyd":"editor.installer.download_steps.install",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.download_steps.install_bold")),1)]),file:oe(()=>[Me(d(Ye.value.name),1)]),_:1},8,["keypath"])])]),o("small",null,d(a(c)("editor.installer.download_keep")),1)])):W("",!0),ye.value?(g(),_("div",iw,[o("div",ow,[o("span",null,d(a(c)("editor.installer.api_key")),1),o("code",{id:"api-key",ref_key:"keyBox",ref:b},d(n.apiKey||""),513),o("button",{type:"button",class:"btn quiet mini",id:"copy-key",onClick:K[10]||(K[10]=ie=>a(It)(n.apiKey||"",b.value))},d(a(c)("editor.common.copy")),1)]),o("ol",lw,[o("li",null,[se(ne,{keypath:"editor.installer.pairing.ha",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.ha_bold")),1)]),name:oe(()=>[Me(d(n.friendly),1)]),_:1}),K[15]||(K[15]=Me()),o("button",{type:"button",class:"btn quiet mini",onClick:K[11]||(K[11]=(...ie)=>a(ki)&&a(ki)(...ie))},d(a(c)("editor.common.open_integrations")),1)]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.key",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.key_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.actions",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.actions_bold")),1)]),_:1})]),o("li",null,[se(ne,{keypath:"editor.installer.pairing.tiles",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.installer.pairing.tiles_bold")),1)]),_:1})])])])):W("",!0),n.view!=="done"?(g(),_("details",{key:2,id:"install-log-wrap",class:"log-wrap",open:p.value,onToggle:K[12]||(K[12]=ie=>p.value=ie.target.open)},[o("summary",null,d(a(c)("editor.installer.log")),1),o("pre",rw,d(r.value.join(` +`)),1)],40,aw)):W("",!0),o("div",cw,[!te.value&&!ye.value?(g(),_("button",{key:0,type:"button",class:"btn primary",id:"install-retry",onClick:ee},d(a(c)("editor.installer.retry")),1)):W("",!0),o("button",{type:"button",class:"btn quiet",id:"install-close",onClick:ce},d(ye.value?a(c)("editor.installer.another"):a(c)("editor.installer.start_over")),1),o("button",{type:"button",class:me(["btn",ye.value?"primary":"quiet"]),onClick:tt},d(ye.value?a(c)("editor.installer.done"):a(c)("editor.common.close")),3)])]))])}}}),fw={class:"panel",id:"firmware-dialog"},pw={class:"panel-head"},hw={class:"tx"},mw={class:"eyebrow"},bw={class:"card"},vw={class:"card-grid"},gw={class:"field"},_w={class:"f-label",for:"firmware-file"},yw=["value"],ww={class:"field"},kw={class:"f-label",for:"firmware-port"},$w={value:"ota"},xw={key:0,value:"usb"},Sw=["value"],Cw={value:"download"},Tw={key:0,class:"field",id:"firmware-host-label"},Ew={class:"f-label",for:"firmware-host"},Aw=["placeholder"],Pw={class:"actions"},Ow=["disabled"],Iw=["disabled"],Lw=["disabled"],Mw={key:0,class:"spin"},Rw={id:"firmware-status",class:"status-line",role:"status"},Nw={key:0,id:"firmware-download",class:"card",style:{background:"var(--surface-2)"}},Fw=["href","download"],Dw={id:"firmware-log",class:"log"},Uw="https://web.esphome.io/?dashboard_install",jw=Le({__name:"FirmwareView",setup(e){const t=ke(null),n=ke(""),s=ke("ota"),i=ke("");let l=0;async function r(T=!1){try{const $=await Nt("firmware");t.value=$,(T||!n.value)&&(n.value=$.profiles[0]?.file||"");const A=$.ports||[];s.value.startsWith("/")&&!A.includes(s.value)&&(s.value=A[0]||"usb"),s.value==="usb"&&A.length&&(s.value=A[0])}catch($){Ce($.message)}}const u=k(()=>t.value?.job?.state==="running"),f=k(()=>!t.value||u.value||!t.value.available||!t.value.profiles?.length),h=k(()=>f.value||s.value==="usb"),p=k(()=>t.value?.ports||[]),b=k(()=>t.value?t.value.available?t.value.job?`${t.value.job.file} · ${t.value.job.action} · ${t.value.job.state}`:c("editor.firmware.choose"):c("editor.firmware.no_cli"):c("editor.common.loading")),v=k(()=>s.value==="download"&&!!n.value&&!!t.value?.downloads?.includes(n.value)),y=k(()=>({href:`api/firmware/profiles/${encodeURIComponent(n.value)}/download`,name:n.value.replace(/\.yaml$/,"")+".factory.bin"}));async function I(T){try{await ft("firmware/jobs","POST",{file:n.value,action:T==="validate"?"validate":T==="build"?"build":s.value==="download"?"download":"install",target:s.value==="ota"?i.value.trim():s.value==="download"?"":s.value}),await r()}catch($){Ce($.message)}}return En(()=>{r(!0),l=window.setInterval(()=>r(),3e3)}),rs(()=>clearInterval(l)),(T,$)=>{const A=Ws("i18n-t");return g(),_("div",fw,[o("div",pw,[o("div",hw,[o("span",mw,d(a(c)("editor.nav.firmware")),1),o("h1",null,d(a(c)("editor.firmware.title")),1),se(A,{keypath:"editor.firmware.intro",tag:"p",scope:"global"},{ota:oe(()=>[o("b",null,d(a(c)("editor.firmware.ota")),1)]),download:oe(()=>[o("b",null,d(a(c)("editor.firmware.download")),1)]),check:oe(()=>[o("b",null,d(a(c)("editor.firmware.check")),1)]),build:oe(()=>[o("b",null,d(a(c)("editor.firmware.build")),1)]),install:oe(()=>[o("b",null,d(a(c)("editor.firmware.install")),1)]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-firmware",onClick:$[0]||($[0]=S=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",bw,[o("div",vw,[o("div",gw,[o("label",_w,d(a(c)("editor.firmware.profile")),1),Ee(o("select",{id:"firmware-file","onUpdate:modelValue":$[1]||($[1]=S=>n.value=S)},[(g(!0),_(z,null,he(t.value?.profiles||[],S=>(g(),_("option",{key:S.file,value:S.file},d(S.file),9,yw))),128))],512),[[Vn,n.value]])]),o("div",ww,[o("label",kw,d(a(c)("editor.firmware.install_to")),1),Ee(o("select",{id:"firmware-port","onUpdate:modelValue":$[2]||($[2]=S=>s.value=S)},[o("option",$w,d(a(c)("editor.firmware.ota")),1),p.value.length?W("",!0):(g(),_("option",xw,d(a(c)("editor.firmware.no_board")),1)),(g(!0),_(z,null,he(p.value,S=>(g(),_("option",{key:S,value:S},d(S),9,Sw))),128)),o("option",Cw,d(a(c)("editor.firmware.download_target")),1)],512),[[Vn,s.value]])]),s.value==="ota"?(g(),_("div",Tw,[o("label",Ew,d(a(c)("editor.firmware.host")),1),Ee(o("input",{id:"firmware-host","onUpdate:modelValue":$[3]||($[3]=S=>i.value=S),placeholder:n.value?n.value.replace(/\.yaml$/,".local"):"screen-livingroom.local"},null,8,Aw),[[Je,i.value]])])):W("",!0)]),o("div",Pw,[o("button",{type:"button",class:"btn quiet",id:"firmware-validate",disabled:f.value,onClick:$[4]||($[4]=S=>I("validate"))},d(a(c)("editor.firmware.check")),9,Ow),o("button",{type:"button",class:"btn quiet",id:"firmware-build",disabled:f.value,onClick:$[5]||($[5]=S=>I("build"))},d(a(c)("editor.firmware.build")),9,Iw),o("button",{type:"button",class:"btn primary",id:"firmware-install",disabled:h.value,onClick:$[6]||($[6]=S=>I("install"))},d(s.value==="download"?a(c)("editor.firmware.build_download"):a(c)("editor.firmware.install")),9,Lw),u.value?(g(),_("span",Mw)):W("",!0)]),o("p",Rw,d(b.value),1),v.value?(g(),_("div",Nw,[o("a",{class:"btn primary",id:"firmware-download-link",href:y.value.href,download:y.value.name},d(a(c)("editor.firmware.download_file",{name:y.value.name})),9,Fw),se(A,{keypath:"editor.firmware.download_how",tag:"small",scope:"global"},{esphome_web:oe(()=>[o("a",{href:Uw,target:"_blank",rel:"noopener"},"ESPHome Web")]),_:1})])):W("",!0)]),o("pre",Dw,d((t.value?.logs||[]).join(` +`)),1)])}}}),Hw={class:"panel wide alerts",id:"alerts-dialog"},Vw={class:"panel-head"},Ww={class:"tx"},Bw={class:"eyebrow"},Kw={key:0,class:"hint"},qw={class:"alert-hero"},zw={class:"alert-mock",id:"alert-mock","aria-hidden":"true"},Yw={class:"mdi alert-mock-icon",id:"alert-mock-icon"},Gw={id:"alert-mock-title"},Jw={id:"alert-mock-subtitle"},Xw={class:"fake",id:"alert-mock-button"},Zw=["aria-label"],Qw=["data-jump","onClick"],ek={id:"alerts-try",class:"card"},tk={class:"field"},nk={class:"f-label",for:"try-screen"},sk={value:"all"},ik=["value","disabled"],ok={class:"field"},lk={class:"f-label",for:"try-title"},ak={class:"field"},rk={class:"f-label",for:"try-subtitle"},ck={class:"field"},uk={class:"f-label",for:"try-icon"},dk={id:"try-icons"},fk=["value"],pk={class:"field"},hk={class:"f-label",for:"try-color"},mk={value:""},bk=["value"],vk={class:"field"},gk={class:"f-label",for:"try-button"},_k={class:"field"},yk={class:"f-label",for:"try-timeout"},wk={class:"check field"},kk={class:"actions field wide"},$k=["disabled"],xk={class:"status-line",id:"try-result",role:"status"},Sk={id:"alerts-screens",class:"card"},Ck={id:"alerts-min-firmware"},Tk={id:"alerts-screen-list",class:"options"},Ek={key:0,class:"hint"},Ak={class:"alert-screen-head"},Pk={class:"copy-label"},Ok=["onClick"],Ik={id:"alerts-howto",class:"card"},Lk={class:"steps"},Mk={class:"field"},Rk={class:"f-label",for:"alerts-example-screen"},Nk=["value"],Fk={key:0,value:""},Dk={class:"copy-line"},Uk={id:"alerts-example"},jk={id:"alerts-all",class:"card"},Hk={id:"alerts-all-event"},Vk={id:"alerts-all-dismiss"},Wk={class:"copy-line"},Bk={id:"alerts-all-example"},Kk={id:"alerts-fields",class:"card"},qk={class:"table-scroll"},zk={id:"alerts-field-table"},Yk={key:0},Gk={id:"alerts-icons",class:"card"},Jk={class:"subhead"},Xk={class:"chips",id:"alerts-suggested"},Zk=["onClick"],Qk={class:"mdi"},e3={class:"field"},t3={class:"f-label",for:"alerts-icon-search"},n3=["placeholder"],s3={id:"alerts-icon-groups"},i3={class:"subhead"},o3={class:"alert-icon-grid"},l3=["title","onClick"],a3={class:"mdi"},r3={key:0},c3={key:0,class:"hint"},u3={id:"alerts-colors",class:"card"},d3={class:"swatches",id:"alerts-swatches"},f3=["onClick"],p3={id:"alerts-behaviour",class:"card"},h3={class:"alerts-list"},m3={id:"alerts-events",class:"card"},b3={id:"alerts-event-name"},v3={class:"table-scroll"},g3={id:"alerts-ending-table"},_3={class:"subhead"},y3={class:"copy-line"},w3={id:"alerts-wait-example"},k3={id:"alerts-tips",class:"card"},$3={class:"alerts-list"},x3=Le({__name:"AlertsView",setup(e){const t=k(()=>m.inventory.alerts),n=qn({screen:"all",title:c("editor.alerts.example.title"),subtitle:c("editor.alerts.example.subtitle"),icon:"doorbell",color:"orange",button_text:c("editor.alerts.example.button"),timeout:30,flash:!0}),s=ke(!1),i=ke(""),l=k(()=>m.inventory.screens.filter(L=>Kn(L)&&L.online));async function r(){s.value=!0,i.value="";try{const{screen:L,...M}=n,U=await Am(L,M),R=m.inventory.screens.find(te=>te.id===L)?.name,Y=L==="all"?c("editor.alerts.try.sent_all",U.sent):R?c("editor.alerts.try.sent_to",{name:R}):c("editor.alerts.try.sent_one");i.value=U.sent?[Y,U.skipped?c("editor.alerts.try.skipped",U.skipped):"",U.unusable?.length?c("editor.alerts.try.left_empty",{fields:U.unusable.join(", ")}):""].filter(Boolean).join(" "):c("editor.alerts.try.nothing",{version:t.value?.min_firmware||"0.2.31"})}catch(L){i.value=L.message}finally{s.value=!1}}const u=k(()=>m.inventory.icons),f=ke(""),h=ke(""),p=L=>`"${String(L).replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,b=L=>L.type==="string"?/^[a-z][a-z0-9-]*$/.test(L.example)?L.example:p(L.example):L.example===!0?"true":L.example===!1?"false":String(L.example),v=k(()=>m.inventory.screens.filter(L=>L.alert_action)),y=k(()=>f.value||v.value[0]?.alert_action||""),I=k(()=>{const L=(t.value?.fields||[]).map(M=>` ${M.name}: ${b(M)}`);return`action: ${y.value||"esphome._show_alert"} +data: +${L.join(` +`)}`}),T=(L,M)=>p((t.value?.fields||[]).find(U=>U.name===L)?.example||M),$=k(()=>[`# ${c("editor.alerts.wait_yaml.comment")}`,"actions:",` - action: ${y.value||"esphome._show_alert"}`," data:",` title: ${T("title","Someone is at the door")}`,` subtitle: ${T("subtitle","Door 3, back")}`," icon: doorbell"," color: orange",` button_text: ${T("button_text","Coming")}`," timeout: 0"," flash: true"," - wait_for_trigger:"," - trigger: event",` event_type: ${t.value?.event||"esphome.screen_alert"}`," event_data:"," action: ok",' timeout: "00:05:00"'," - if:"," - condition: template",' value_template: "{{ wait.trigger is not none }}"'," then:"," - action: notify.notify"," data:",` message: ${p(c("editor.alerts.wait_yaml.message"))}`].join(` +`)),A=k(()=>{const L=(t.value?.fields||[]).map(U=>` ${U.name}: ${b(U)}`),M=t.value?.camera;return M&&L.push(` # ${M.name}: ${M.example} # a Guition shows its picture on the card`),`event: ${t.value?.broadcast?.show||"esp_screens_show_alert"} +event_data: +${L.join(` +`)}`}),S=k(()=>{if(!t.value||!u.value)return[];const L=h.value.trim().toLowerCase();return[...u.value.groups,{label:c("editor.alerts.icons.extra"),icons:t.value.extra_icons}].map(U=>({label:U.label,icons:U.icons.filter(R=>!L||R.name.includes(L)||(R.label||"").toLowerCase().includes(L))})).filter(U=>U.icons.length)}),D=k(()=>t.value?.suggested_icons?.find(L=>L.name==="doorbell")),C=k(()=>t.value?.colors?.find(L=>L.name==="orange")),B=L=>["string","int","bool"].includes(L)?c(`editor.alerts.fields.types.${L}`):L;function O(L){document.getElementById(L)?.scrollIntoView({behavior:"smooth",block:"start"})}const E=["alerts-try","alerts-screens","alerts-howto","alerts-all","alerts-fields","alerts-icons","alerts-colors","alerts-behaviour","alerts-events","alerts-tips"];return(L,M)=>{const U=Ws("i18n-t");return g(),_("div",Hw,[o("div",Vw,[o("div",Ww,[o("span",Bw,d(a(c)("editor.alerts.eyebrow")),1),o("h1",null,d(a(c)("editor.alerts.title")),1),se(U,{keypath:"editor.alerts.intro",tag:"p",scope:"global"},{action:oe(()=>[...M[15]||(M[15]=[o("code",null,"show_alert",-1)])]),_:1})]),o("button",{type:"button",class:"btn quiet",id:"close-alerts",onClick:M[0]||(M[0]=R=>a(He)(""))},d(a(c)("editor.common.back")),1)]),t.value?(g(),_(z,{key:1},[o("div",qw,[o("div",zw,[o("div",{class:"alert-mock-card",style:Ue(C.value?{background:C.value.color}:void 0)},[o("span",Yw,d(D.value?a(Ae)(D.value.cp):""),1),o("strong",Gw,d(a(c)("editor.alerts.example.title")),1),o("span",Jw,d(a(c)("editor.alerts.example.subtitle")),1),o("span",Xw,d(a(c)("editor.alerts.example.button")),1)],4)]),o("nav",{class:"alerts-nav","aria-label":a(c)("editor.alerts.sections")},[(g(),_(z,null,he(E,R=>o("button",{key:R,type:"button","data-jump":R,onClick:Y=>O(R)},d(a(c)(`editor.alerts.nav.${R.slice(7)}`)),9,Qw)),64))],8,Zw)]),o("section",ek,[o("h2",null,d(a(c)("editor.alerts.nav.try")),1),o("p",null,d(a(c)("editor.alerts.try.text")),1),o("form",{class:"try-grid",onSubmit:Pt(r,["prevent"])},[o("div",tk,[o("label",nk,d(a(c)("editor.alerts.try.screen")),1),Ee(o("select",{id:"try-screen","onUpdate:modelValue":M[1]||(M[1]=R=>n.screen=R)},[o("option",sk,d(a(c)("editor.alerts.try.all",{ready:l.value.length})),1),(g(!0),_(z,null,he(a(m).inventory.screens,R=>(g(),_("option",{key:R.id,value:R.id,disabled:!a(Kn)(R)||!R.online},d(a(Kn)(R)&&R.online?R.name:a(c)("editor.alerts.try.not_ready",{name:R.name})),9,ik))),128))],512),[[Vn,n.screen]])]),o("div",ok,[o("label",lk,d(a(c)("editor.alerts.try.title")),1),Ee(o("input",{id:"try-title","onUpdate:modelValue":M[2]||(M[2]=R=>n.title=R),maxlength:"64"},null,512),[[Je,n.title]])]),o("div",ak,[o("label",rk,d(a(c)("editor.alerts.try.subtitle")),1),Ee(o("input",{id:"try-subtitle","onUpdate:modelValue":M[3]||(M[3]=R=>n.subtitle=R),maxlength:"240"},null,512),[[Je,n.subtitle]])]),o("div",ck,[o("label",uk,d(a(c)("editor.alerts.try.icon")),1),Ee(o("input",{id:"try-icon","onUpdate:modelValue":M[4]||(M[4]=R=>n.icon=R),list:"try-icons",placeholder:"doorbell"},null,512),[[Je,n.icon]]),o("datalist",dk,[(g(!0),_(z,null,he(t.value.suggested_icons,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label||R.name),9,fk))),128))])]),o("div",pk,[o("label",hk,d(a(c)("editor.alerts.try.color")),1),Ee(o("select",{id:"try-color","onUpdate:modelValue":M[5]||(M[5]=R=>n.color=R)},[o("option",mk,d(a(c)("editor.alerts.white")),1),(g(!0),_(z,null,he(t.value.colors,R=>(g(),_("option",{key:R.name,value:R.name},d(R.label),9,bk))),128))],512),[[Vn,n.color]])]),o("div",vk,[o("label",gk,d(a(c)("editor.alerts.try.button")),1),Ee(o("input",{id:"try-button","onUpdate:modelValue":M[6]||(M[6]=R=>n.button_text=R),maxlength:"16"},null,512),[[Je,n.button_text]])]),o("div",_k,[o("label",yk,d(a(c)("editor.alerts.try.timeout")),1),Ee(o("input",{id:"try-timeout","onUpdate:modelValue":M[7]||(M[7]=R=>n.timeout=R),type:"number",min:"0",max:"86400"},null,512),[[Je,n.timeout,void 0,{number:!0}]])]),o("label",wk,[Ee(o("input",{type:"checkbox",id:"try-flash","onUpdate:modelValue":M[8]||(M[8]=R=>n.flash=R)},null,512),[[Xf,n.flash]]),o("span",null,[Me(d(a(c)("editor.alerts.try.flash")),1),o("small",null,d(a(c)("editor.alerts.try.flash_hint")),1)])]),o("div",kk,[o("button",{type:"submit",class:"btn primary",id:"try-send",disabled:s.value||!l.value.length},d(s.value?a(c)("editor.alerts.try.sending"):a(c)("editor.alerts.try.send")),9,$k),o("span",xk,d(i.value),1)])],32)]),o("section",Sk,[o("h2",null,d(a(c)("editor.alerts.nav.screens")),1),se(U,{keypath:"editor.alerts.screens.text",tag:"p",scope:"global"},{version:oe(()=>[o("code",Ck,d(t.value.min_firmware),1)]),_:1}),o("div",Tk,[a(m).inventory.screens.length?W("",!0):(g(),_("p",Ek,d(a(c)("editor.alerts.screens.none")),1)),(g(!0),_(z,null,he(a(m).inventory.screens,R=>(g(),_("div",{key:R.id,class:"alert-screen"},[o("div",Ak,[o("strong",null,d(R.name),1),o("span",{class:me(["chip",a(un)(a(os)(R),t.value.min_firmware)&&R.alert_action?"good":"update"])},d(a(un)(a(os)(R),t.value.min_firmware)&&R.alert_action?a(c)("editor.alerts.screens.ready",{version:R.firmware}):R.alert_action?a(c)("editor.alerts.screens.update",{version:R.firmware||a(c)("editor.common.unknown")}):a(c)("editor.alerts.screens.unknown")),3)]),(g(!0),_(z,null,he([[a(c)("editor.alerts.screens.show"),R.alert_action],[a(c)("editor.alerts.screens.dismiss"),R.dismiss_action]],([Y,te])=>(g(),_("div",{key:Y,class:"copy-line"},[o("span",Pk,d(Y),1),o("code",null,d(te||"esphome._show_alert"),1),te?(g(),_("button",{key:0,type:"button",class:"btn quiet mini",onClick:ye=>a(It)(te,void 0,"action_name")},d(a(c)("editor.common.copy")),9,Ok)):W("",!0)]))),128))]))),128))])]),o("section",Ik,[o("h2",null,d(a(c)("editor.alerts.nav.howto")),1),o("ol",Lk,[se(U,{keypath:"editor.alerts.howto.add",tag:"li",scope:"global"},{add:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.add_bold")),1)]),esphome:oe(()=>[...M[16]||(M[16]=[o("b",null,"ESPHome",-1)])]),device:oe(()=>[o("i",null,d(a(c)("editor.alerts.howto.device")),1)]),_:1}),se(U,{keypath:"editor.alerts.howto.fields",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.howto.fields_bold")),1)]),empty:oe(()=>[...M[17]||(M[17]=[o("code",null,'""',-1)])]),zero:oe(()=>[...M[18]||(M[18]=[o("code",null,"0",-1)])]),_:1}),se(U,{keypath:"editor.alerts.howto.yaml",tag:"li",scope:"global"},{edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1})]),o("div",Mk,[o("label",Rk,d(a(c)("editor.alerts.howto.example_for")),1),Ee(o("select",{id:"alerts-example-screen","onUpdate:modelValue":M[9]||(M[9]=R=>f.value=R),style:{"max-width":"360px"}},[(g(!0),_(z,null,he(v.value,R=>(g(),_("option",{key:R.id,value:R.alert_action},d(R.name),9,Nk))),128)),v.value.length?W("",!0):(g(),_("option",Fk,d(a(c)("editor.alerts.howto.no_screen")),1))],512),[[Vn,f.value]])]),o("div",Dk,[o("pre",Uk,d(I.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-example-copy",onClick:M[10]||(M[10]=R=>a(It)(I.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",jk,[o("h2",null,d(a(c)("editor.alerts.all.title")),1),se(U,{keypath:"editor.alerts.all.text",tag:"p",scope:"global"},{show:oe(()=>[o("code",Hk,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),dismiss:oe(()=>[o("code",Vk,d(t.value.broadcast?.dismiss||"esp_screens_dismiss_alert"),1)]),event:oe(()=>[o("b",null,d(a(c)("editor.alerts.all.event")),1)]),edit:oe(()=>[o("b",null,d(a(c)("editor.alerts.edit_yaml")),1)]),_:1}),o("div",Wk,[o("pre",Bk,d(A.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-all-copy",onClick:M[11]||(M[11]=R=>a(It)(A.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",Kk,[o("h2",null,d(a(c)("editor.alerts.nav.fields")),1),o("p",null,d(a(c)("editor.alerts.fields.text")),1),o("div",qk,[o("table",zk,[o("tr",null,[o("th",null,d(a(c)("editor.alerts.fields.field")),1),o("th",null,d(a(c)("editor.alerts.fields.type")),1),o("th",null,d(a(c)("editor.alerts.fields.what")),1),o("th",null,d(a(c)("editor.alerts.fields.example")),1),o("th",null,d(a(c)("editor.alerts.fields.limit")),1)]),(g(!0),_(z,null,he(t.value.fields,R=>(g(),_("tr",{key:R.name},[o("td",null,[o("code",null,d(R.name),1),o("small",null,d(R.label),1)]),o("td",null,d(B(R.type)),1),o("td",null,d(R.help),1),o("td",null,[o("code",null,d(typeof R.example=="string"?R.example:String(R.example)),1)]),o("td",null,d(t.value.limits.cyd[R.name]?a(c)("editor.alerts.fields.bytes",{cyd:t.value.limits.cyd[R.name],guition:t.value.limits.guition[R.name]}):R.type==="int"?a(c)("editor.alerts.fields.seconds"):"—"),1)]))),128)),t.value.camera?(g(),_("tr",Yk,[o("td",null,[o("code",null,d(t.value.camera.name),1),o("small",null,d(t.value.camera.label),1)]),o("td",null,d(a(c)("editor.alerts.fields.types.entity")),1),o("td",null,d(t.value.camera.help),1),o("td",null,[o("code",null,d(t.value.camera.example),1)]),o("td",null,d(a(c)("editor.alerts.fields.camera_limit")),1)])):W("",!0)])])]),o("section",Gk,[o("h2",null,d(a(c)("editor.alerts.nav.icons")),1),se(U,{keypath:"editor.alerts.icons.text",tag:"p",scope:"global"},{field:oe(()=>[...M[19]||(M[19]=[o("code",null,"icon",-1)])]),example:oe(()=>[...M[20]||(M[20]=[o("code",null,"doorbell",-1)])]),mdi:oe(()=>[...M[21]||(M[21]=[o("code",null,"mdi:doorbell",-1)])]),hex:oe(()=>[...M[22]||(M[22]=[o("code",null,"F12E6",-1)])]),_:1}),o("p",Jk,d(a(c)("editor.alerts.icons.handy")),1),o("div",Xk,[(g(!0),_(z,null,he(t.value.suggested_icons,R=>(g(),_("button",{key:R.name,type:"button",class:"chip",onClick:Y=>a(It)(R.name,void 0,"icon_name")},[o("span",Qk,d(a(Ae)(R.cp)),1),o("code",null,d(R.name),1)],8,Zk))),128))]),o("div",e3,[o("label",t3,d(a(c)("editor.alerts.icons.search_label")),1),Ee(o("input",{id:"alerts-icon-search","onUpdate:modelValue":M[12]||(M[12]=R=>h.value=R),type:"search",placeholder:a(c)("editor.alerts.icons.search"),autocomplete:"off"},null,8,n3),[[Je,h.value]])]),o("div",s3,[(g(!0),_(z,null,he(S.value,R=>(g(),_("div",{key:R.label,class:"field"},[o("p",i3,d(R.label)+" · "+d(R.icons.length),1),o("div",o3,[(g(!0),_(z,null,he(R.icons,Y=>(g(),_("button",{key:Y.name,type:"button",class:"alert-icon",title:a(c)("editor.alerts.icons.copy",{name:Y.name}),onClick:te=>a(It)(Y.name,void 0,"icon_name")},[o("span",a3,d(a(Ae)(Y.cp)),1),o("code",null,d(Y.name),1),Y.label?(g(),_("small",r3,d(Y.label),1)):W("",!0)],8,l3))),128))])]))),128)),S.value.length?W("",!0):(g(),_("p",c3,d(a(c)("editor.alerts.icons.none",{query:h.value,fallback:t.value.fallback_icon})),1))])]),o("section",u3,[o("h2",null,d(a(c)("editor.alerts.nav.colors")),1),se(U,{keypath:"editor.alerts.colors.text",tag:"p",scope:"global"},{field:oe(()=>[...M[23]||(M[23]=[o("code",null,"color",-1)])]),_:1}),o("div",d3,[o("button",{type:"button",class:"swatch",onClick:M[13]||(M[13]=R=>a(It)("",void 0,"empty_color"))},[M[25]||(M[25]=o("i",{style:{background:"#ffffff"}},null,-1)),o("span",null,[M[24]||(M[24]=o("code",null,"empty",-1)),o("small",null,d(a(c)("editor.alerts.white")),1)])]),(g(!0),_(z,null,he(t.value.colors,R=>(g(),_("button",{key:R.name,type:"button",class:"swatch",onClick:Y=>a(It)(R.name,void 0,"color_name")},[o("i",{style:Ue({background:R.color})},null,4),o("span",null,[o("code",null,d(R.name),1),o("small",null,d(R.label)+" · "+d(R.color),1)])],8,f3))),128))])]),o("section",p3,[o("h2",null,d(a(c)("editor.alerts.nav.behaviour")),1),o("ul",h3,[se(U,{keypath:"editor.alerts.behaviour.wakes",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.wakes_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.on",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.on_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.behaviour.timeout",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.timeout_bold")),1)]),zero:oe(()=>[...M[26]||(M[26]=[o("code",null,"timeout: 0",-1)])]),minute:oe(()=>[...M[27]||(M[27]=[o("code",null,"timeout: 60",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.blinking",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.blinking_bold")),1)]),flash:oe(()=>[...M[28]||(M[28]=[o("code",null,"flash: true",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.replacing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.replacing_bold")),1)]),replaced:oe(()=>[...M[29]||(M[29]=[o("code",null,"replaced",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.closing",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.closing_bold")),1)]),dismiss:oe(()=>[...M[30]||(M[30]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.behaviour.beside",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.behaviour.beside_bold")),1)]),_:1})])]),o("section",m3,[o("h2",null,d(a(c)("editor.alerts.nav.events")),1),se(U,{keypath:"editor.alerts.events.text",tag:"p",scope:"global"},{event:oe(()=>[o("code",b3,d(t.value.event),1)]),action:oe(()=>[...M[31]||(M[31]=[o("code",null,"action",-1)])]),title:oe(()=>[...M[32]||(M[32]=[o("code",null,"title",-1)])]),screen:oe(()=>[...M[33]||(M[33]=[o("code",null,"screen",-1)])]),device_id:oe(()=>[...M[34]||(M[34]=[o("code",null,"device_id",-1)])]),_:1}),o("div",v3,[o("table",g3,[o("tr",null,[M[35]||(M[35]=o("th",null,"action",-1)),o("th",null,d(a(c)("editor.alerts.events.when")),1)]),(g(!0),_(z,null,he(t.value.endings,R=>(g(),_("tr",{key:R.action},[o("td",null,[o("code",null,d(R.action),1)]),o("td",null,d(R.label),1)]))),128))])]),o("p",_3,d(a(c)("editor.alerts.events.wait")),1),o("div",y3,[o("pre",w3,d($.value),1),o("button",{type:"button",class:"btn quiet mini",id:"alerts-wait-copy",onClick:M[14]||(M[14]=R=>a(It)($.value,void 0,"yaml"))},d(a(c)("editor.alerts.copy_yaml")),1)])]),o("section",k3,[o("h2",null,d(a(c)("editor.alerts.nav.tips")),1),o("ul",$3,[se(U,{keypath:"editor.alerts.tips.color",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.color_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.short",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.short_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.button",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.button_bold")),1)]),_:1}),se(U,{keypath:"editor.alerts.tips.resolve",tag:"li",scope:"global"},{dismiss:oe(()=>[...M[36]||(M[36]=[o("code",null,"dismiss_alert",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.every",tag:"li",scope:"global"},{event:oe(()=>[o("code",null,d(t.value.broadcast?.show||"esp_screens_show_alert"),1)]),screen:oe(()=>[...M[37]||(M[37]=[o("code",null,"screen",-1)])]),_:1}),se(U,{keypath:"editor.alerts.tips.claude",tag:"li",scope:"global"},{bold:oe(()=>[o("b",null,d(a(c)("editor.alerts.tips.claude_bold")),1)]),_:1})])])],64)):(g(),_("p",Kw,d(a(c)("editor.alerts.loading")),1))])}}}),S3={class:"panel",id:"override-dialog"},C3={class:"panel-head"},T3={class:"tx"},E3={class:"eyebrow"},A3={id:"override-title"},P3={class:"notice"},O3={class:"mdi"},I3={class:"file-row"},L3={id:"override-file"},M3={class:"yaml-editor",id:"yaml-editor-wrap"},R3=["aria-label"],N3={class:"actions"},F3={id:"override-count",class:"hint"},D3={class:"actions"},U3=["disabled"],j3=["disabled"],H3=`# Hardware-specific changes for this screen. +# This file is kept when the shared firmware package updates. +# Do not add esphome:, api:, ota:, wifi: or packages: here. + +# Example: a CYD with the ST7789V display controller. +# "!extend" changes the display the shared package already defines; +# a bare id would add a second, incomplete display and fail the build. +display: + - id: !extend my_display + model: ST7789V +`,V3=Le({__name:"OverrideView",setup(e){const t=k(()=>m.overrideProfile),n=ke(""),s=ke(""),i=ke(!1),l=ke(c("editor.common.loading")),r=ke(""),u=ke(!1),f=ke(null),h=ke(null),p=k(()=>n.value.split(` +`).length),b=k(()=>Array.from({length:p.value},(O,E)=>E+1).join(` +`)),v=k(()=>`${c("editor.override.characters",n.value.length)} · ${c("editor.override.lines",p.value)}`);let y=!0;function I(O,E=""){l.value=O,r.value=E}async function T(){if(!t.value){I(c("editor.override.no_profile"),"error");return}I(c("editor.common.loading"));try{const O=await Nt(`firmware/profiles/${encodeURIComponent(t.value)}/override`);s.value=O.override_file,i.value=!!O.attached,n.value=O.exists&&O.content!==`{} +`?O.content:"",I(c(O.attached?"editor.override.attached":"editor.override.not_attached"))}catch(O){I(O.message,"error")}}async function $(O=!1){if(!(!t.value||u.value)){u.value=!0,I(c("editor.override.saving"));try{const E=await ft(`firmware/profiles/${encodeURIComponent(t.value)}/override`,"PUT",{content:n.value});if(s.value=E.override_file,i.value=!0,!O){I(c("editor.override.saved"),"ok"),Ce(c("editor.override.saved_toast"));return}I(c("editor.override.checking")),await ft("firmware/jobs","POST",{file:t.value,action:"validate"}),A()}catch(E){I(E.message,"error")}finally{u.value=!1}}}function A(){const O=Date.now(),E=t.value,L=async()=>{if(!(!y||t.value!==E))try{const M=await Nt("firmware"),U=M.job;if(U&&U.file===E&&U.state==="running")I(U.stage?c("editor.override.checking_stage",{stage:U.stage}):c("editor.override.checking_profile"));else if(U&&U.file===E&&U.state==="success"){I(c("editor.override.valid"),"ok");return}else if(U&&U.file===E&&U.state==="failed"){const R=(M.logs||[]).filter(Y=>/error|failed/i.test(Y)).pop();I(R||c("editor.override.rejected"),"error");return}Date.now()-O<72e5&&setTimeout(L,1200)}catch(M){I(M.message,"error")}};L()}function S(){(!n.value.trim()||confirm(c("editor.override.confirm_example")))&&(n.value=H3,I(c("editor.override.example_loaded")),f.value?.focus())}function D(){(!n.value.trim()||confirm(c("editor.override.confirm_clear")))&&(n.value="",I(c("editor.override.cleared")),f.value?.focus())}function C(O){const E=f.value;if(O.key==="Tab"){O.preventDefault();const L=E.selectionStart,M=E.selectionEnd;E.setRangeText(" ",L,M,"end"),n.value=E.value}else(O.ctrlKey||O.metaKey)&&O.key.toLowerCase()==="s"&&(O.preventDefault(),$(!1))}function B(){h.value&&f.value&&(h.value.scrollTop=f.value.scrollTop)}return En(T),rs(()=>{y=!1}),(O,E)=>(g(),_("div",S3,[o("div",C3,[o("div",T3,[o("span",E3,d(a(c)("editor.override.eyebrow")),1),o("h1",A3,d(a(m).overrideFriendly?a(c)("editor.override.title_named",{name:a(m).overrideFriendly}):a(c)("editor.override.title")),1),o("p",null,d(a(c)("editor.override.intro")),1)]),o("button",{type:"button",class:"btn quiet",id:"close-override",onClick:E[0]||(E[0]=L=>a(He)(""))},d(a(c)("editor.common.back")),1)]),o("div",P3,[o("span",O3,d(a(Ae)("F0493")),1),o("div",null,[o("strong",null,d(a(c)("editor.override.safe_title")),1),o("span",null,d(a(c)("editor.override.safe_text")),1)])]),o("div",I3,[o("code",L3,d(s.value||t.value||""),1),o("span",{id:"override-state",class:me(["chip",{good:i.value}])},d(i.value?a(c)("editor.override.active"):a(c)("editor.override.ready")),3)]),o("div",M3,[o("div",{ref_key:"gutter",ref:h,class:"yaml-gutter",id:"override-gutter","aria-hidden":"true"},d(b.value),513),Ee(o("textarea",{ref_key:"editor",ref:f,id:"override-editor","onUpdate:modelValue":E[1]||(E[1]=L=>n.value=L),spellcheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","aria-label":a(c)("editor.override.editor_label"),placeholder:`# Example +display: + - id: !extend my_display + model: ST7789V`,onKeydown:C,onScroll:B},null,40,R3),[[Je,n.value]])]),o("div",N3,[o("button",{type:"button",class:"btn quiet mini",id:"override-example",onClick:S},d(a(c)("editor.override.use_example")),1),o("button",{type:"button",class:"btn quiet mini",id:"override-empty",onClick:D},d(a(c)("editor.override.clear")),1),o("span",F3,d(v.value),1)]),o("p",{id:"override-status",class:me(["status-line",r.value]),role:"status"},d(l.value),3),o("div",D3,[o("button",{type:"button",class:"btn quiet",id:"override-check",disabled:u.value||!t.value,onClick:E[2]||(E[2]=L=>$(!0))},d(a(c)("editor.override.save_check")),9,U3),o("button",{type:"button",class:"btn primary",id:"override-save",disabled:u.value||!t.value,onClick:E[3]||(E[3]=L=>$(!1))},d(a(c)("editor.override.save")),9,j3)])]))}}),W3={class:"main"},B3=Le({__name:"App",setup(e){const t=k(()=>$t.value==="#settings"?m2:$t.value==="#new-screen"?dw:$t.value==="#firmware"?jw:$t.value==="#alerts"?x3:$t.value==="#override"?V3:_t.value&&m.layout?v1:y1);function n(s){(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="k"&&(s.preventDefault(),m.palette=!m.palette)}return En(()=>document.addEventListener("keydown",n)),rs(()=>document.removeEventListener("keydown",n)),(s,i)=>(g(),_("div",{class:me(["app",{dragging:a(m).drag.active}])},[se(Ib),o("main",W3,[(g(),it(Hd(t.value)))]),se(Mb),se(qb)],2))}});Jh().finally(()=>{ip(B3).use(cs).mount("#app"),Jm()}); diff --git a/screen_manager/app/static/assets/it-OWvw4Kib.js b/screen_manager/app/static/assets/it-OWvw4Kib.js deleted file mode 100644 index d62cf1e..0000000 --- a/screen_manager/app/static/assets/it-OWvw4Kib.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Non disponibile"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Caldo/Freddo"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Deumidificazione"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilazione"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Raffreddando"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"In deumidificazione"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preriscaldamento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"In apertura"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"In chiusura"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"In attesa"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sopra l'orizzonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sotto l'orizzonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Alla base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"In pulizia"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Ritornando alla base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleggiato"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Sereno, notte"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuvoloso"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parzialmente nuvoloso"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Piovoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Rovescio"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, piovoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebbia"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grandine"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Temporale"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Temporale, piovoso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Eccezionale"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"In carica"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in carica"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connesso"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnesso"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caldo"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luce rilevata"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna luce"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Sbloccato/a"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloccato/a"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Bagnato"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Asciutto"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"In movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Non si muove"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Collegato"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Scollegato"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in esecuzione"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Non Sicuro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicuro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevata manomissione"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento disponibile"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornato"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Attiva"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Esegui"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Premi"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Proprio ora"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min fa"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 ora fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore fa"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ieri"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 giorno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" giorni fa"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 settimana fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" settimane fa"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 mese fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" mesi fa"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 anno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" anni fa"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 ora"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" ore"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Domani"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 giorno"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" giorni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domenica"}},{t:0,b:{t:2,i:[{t:3}],s:"lunedì"}},{t:0,b:{t:2,i:[{t:3}],s:"martedì"}},{t:0,b:{t:2,i:[{t:3}],s:"mercoledì"}},{t:0,b:{t:2,i:[{t:3}],s:"giovedì"}},{t:0,b:{t:2,i:[{t:3}],s:"venerdì"}},{t:0,b:{t:2,i:[{t:3}],s:"sabato"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"gennaio"}},{t:0,b:{t:2,i:[{t:3}],s:"febbraio"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"aprile"}},{t:0,b:{t:2,i:[{t:3}],s:"maggio"}},{t:0,b:{t:2,i:[{t:3}],s:"giugno"}},{t:0,b:{t:2,i:[{t:3}],s:"luglio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"settembre"}},{t:0,b:{t:2,i:[{t:3}],s:"ottobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"dicembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"gen"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mag"}},{t:0,b:{t:2,i:[{t:3}],s:"giu"}},{t:0,b:{t:2,i:[{t:3}],s:"lug"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"set"}},{t:0,b:{t:2,i:[{t:3}],s:"ott"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/it-XNNJYTR_.js b/screen_manager/app/static/assets/it-XNNJYTR_.js new file mode 100644 index 0000000..319e42d --- /dev/null +++ b/screen_manager/app/static/assets/it-XNNJYTR_.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"sconosciuto"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Modifiche non salvate"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annulla"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apri Dispositivi e servizi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Salva e invia"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Salvataggio…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Leggi i dati attuali"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 risultato. Continua a scrivere per restringere l'elenco."},{t:2,i:[{t:4,k:"n"},{t:3,v:" risultati. Continua a scrivere per restringere l'elenco."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Cambia"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Caricamento…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Indietro"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nuovo schermo"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato. Ricarica la pagina e riprova."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API copiata."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"La chiave API è selezionata. Copiala con Ctrl+C o Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON della disposizione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il JSON della disposizione è selezionato. Copialo con Ctrl+C o Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'azione copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'azione è selezionato. Copialo con Ctrl+C o Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML è selezionato. Copialo con Ctrl+C o Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome dell'icona copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome dell'icona è selezionato. Copialo con Ctrl+C o Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Colore vuoto copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il colore vuoto è selezionato. Copialo con Ctrl+C o Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome del colore copiato."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Il nome del colore è selezionato. Copialo con Ctrl+C o Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Pagina di gestione non raggiungibile · nuovo tentativo…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant connesso"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Riconnessione a Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Ricarica"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In coda per l'aggiornamento"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato con questo nome dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novità"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registro completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"L'indirizzo IP, una sola volta; poi il nuovo firmware lo comunica da solo."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP, es. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Avvia"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Installato, ma non ancora in Home Assistant. Aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e attiva «Allow the device to perform Home Assistant actions» in Configura."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware scaricato, non ancora in Home Assistant. Mettilo sullo schermo con ESPHome Web, poi aggiungi il dispositivo ESPHome rilevato in Impostazioni → Dispositivi e servizi, incolla lì la chiave API e consenti le azioni di Home Assistant in Configura."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Non ancora in Home Assistant. Firmware già installato? Aggiungi il dispositivo ESPHome in Impostazioni → Dispositivi e servizi, poi consenti le azioni di Home Assistant in Configura. Non ancora installato? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copia chiave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi a questo schermo"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guida rapida e avviso di prova"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niente da salvare"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica questo schermo"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Fa lampeggiare la retroilluminazione e mostra una scheda"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede un firmware più recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Scarica e copia come JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Cerca schermi, entità, azioni…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Nessun risultato. Scrivi parte del nome di uno schermo, di un'entità o di un'azione."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Scegli uno dei tuoi schermi a sinistra per modificarne i riquadri, la barra superiore e le impostazioni."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Inizia con uno schermo"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Collega un CYD o un Guition via USB alla macchina di Home Assistant. Profilo, firmware e prima installazione in un colpo solo."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Installa un nuovo schermo"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Hai modifiche non salvate. Aprire comunque un altro schermo?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con una copia di quella dell'altro schermo?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire la disposizione non salvata con quella importata?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Il tuo schermo si sta aggiornando."}},other:{t:0,b:{t:2,i:[{t:3,v:"Salvato. "},{t:4,k:"name"},{t:3,v:" si sta aggiornando."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo schermo si sta aggiornando."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. La tua ultima modifica non è ancora stata inviata: premi di nuovo Salva e invia."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" lampeggia e mostra una scheda per qualche secondo."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · modifiche salvate"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni schermo"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Salvato · inviato allo schermo"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tutto salvato"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Altro"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identifica"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"fa lampeggiare lo schermo"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Richiede il firmware 0.2.31 o più recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"da Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copia disposizione da…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" schermo"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nessun altro schermo"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadro"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" riquadri"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Esporta disposizione"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importa disposizione…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avanzato"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nessun profilo ESPHome trovato per questo schermo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Riquadro rimosso: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Non c'è spazio per questo riquadro a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna pagina è libera per un riquadro a pagina intera. Libera prima una pagina."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo ha già un riquadro che porta a pagina "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Salva e invia quando ti sembra giusta."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione di "},{t:4,k:"name"},{t:3,v:" copiata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione importata. Salva e invia quando ti sembra giusta."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Disposizione importata. Riquadri compatibili con il firmware di questo schermo: "},{t:4,k:"kept"},{t:3,v:" su "},{t:4,k:"total"},{t:3,v:". Salva e invia quando ti sembra giusta."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Questo non è JSON. Esporta prima una disposizione, oppure incollane una da un altro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Nessun riquadro in questo file. Serve una disposizione esportata da ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagine · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" riquadri"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi la tua prima luce, scena o dispositivo dalla libreria."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tocca la barra superiore o un riquadro per cambiarne le impostazioni. Trascina per spostare; rilascia sulla pagina successiva per crearne una nuova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Gli spazi vuoti e le posizioni fisse funzionano a partire dal firmware 0.2.26. Fino a quell'aggiornamento, questo schermo (firmware "},{t:4,k:"firmware"},{t:3,v:") sposta i riquadri verso il primo spazio libero."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Disposizione dello schermo"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi pagina"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Al massimo 1 pagina"},{t:2,i:[{t:3,v:"Al massimo "},{t:4,k:"n"},{t:3,v:" pagine"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi pagina"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Le pagine successive scalano di un posto"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Modifica barra superiore"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Spazio vuoto. Fai clic per aggiungere un riquadro qui, o trascinane uno."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Spazio vuoto "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:": aggiungi qui il prossimo riquadro"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Il prossimo riquadro va qui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vuoto"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Libreria"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entità"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, dispositivo o area…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi un'entità"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luci"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttori"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azioni"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatori"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coperture"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scene"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensori"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valori"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezioni"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persone"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Area"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Tutte le aree"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi quelle già inserite"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Nascondi ciò che è già su questo schermo"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che è qui è già su questo schermo."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata. Prova un altro nome, un'altra area o un altro filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Questo schermo può contenere 1 riquadro; aggiorna il suo firmware per averne 48."},{t:2,i:[{t:3,v:"Questo schermo può contenere "},{t:4,k:"n"},{t:3,v:" riquadri; aggiorna il suo firmware per averne 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Trascina su una pagina, o tocca + per aggiungere al primo spazio libero. ⌘K cerca ovunque."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luce"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirapolvere"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Copertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensore"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stato"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruttore"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Meteo"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valore"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selezione"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sole"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persona"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Telecamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Immagine"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entità"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"orologio analogico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"percorso del sole"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"pagina intera"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome sullo schermo"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (da Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (predefinita)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra l'icona scelta a partire dal firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Porta alla pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vuota)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"I riquadri di navigazione richiedono il firmware 0.2.62: premi prima Aggiorna per questo schermo."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Questo schermo non ha la pagina "},{t:4,k:"page"},{t:3,v:", quindi un tocco apre la sua ultima pagina. Scegli un'altra pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Un tocco sul riquadro apre quella pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Visualizzazione"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Orologio digitale"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Orologio analogico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e stato"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valore grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsioni meteo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Percorso del sole"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha valori numerici per questa entità, quindi il grafico resta vuoto. Scegli un'altra visualizzazione."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Questo servizio meteo non ha previsioni giornaliere in Home Assistant. Scegli un'altra visualizzazione."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Dimensione"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Larghezza doppia"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Pagina intera: un grande pulsante che si illumina quando è acceso; in basso trovano posto un cursore, i comandi o un grafico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Un riquadro a pagina intera richiede il firmware 0.2.62: premi prima Aggiorna per questo schermo."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nuova pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controllo diretto sul riquadro"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre questo controllo per questa entità, quindi sullo schermo resta vuoto. Scegline un altro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"In basso nel riquadro a pagina intera; un tocco altrove funziona come impostato qui sotto."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"A destra del riquadro a larghezza doppia, come le righe in Home Assistant. Un tocco sul nome funziona come impostato qui sotto."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo mostra il controllo diretto a partire dal firmware 0.2.19; fino ad allora il riquadro resta com'era."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Al tocco"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Apri i controlli"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Solo visualizzazione"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Accendi / spegni"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Esegui azione"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non può accendere e spegnere questa entità, quindi un tocco non fa nulla. Scegli un'altra opzione."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo accende e spegne questa entità a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco apre la sua scheda."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Tieni premuto il riquadro per aprire la sua scheda."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo cursore sul riquadro"}},no:{t:0,b:{t:2,i:[{t:3}],s:"No"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sì, controllo diretto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non ha nulla che un cursore possa regolare per questa entità. Scegli No."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Storico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Sfondo pastello"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Sfondo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:" a pagina "},{t:4,k:"page"},{t:3,v:". Enter: configura, tasti freccia: sposta"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Rimuovi riquadro"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Azione"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Chiedo a Home Assistant quali azioni ha questa entità…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non risponde al momento. Riprova tra poco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli un'azione"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio toggle, position o play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'azione"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna azione trovata."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant non offre più questa azione per questa entità, quindi un tocco non fa nulla. Scegline un'altra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (facoltativo)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Non impostato"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Disattivo"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant richiede: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo esegue un'azione a partire dal firmware 0.2.58: premi Aggiorna per questo schermo. Fino ad allora un tocco funziona come Automatico."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca, per esempio lampada, musica o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona, solo testo"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna icona trovata."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dati attuali"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Connessione, stato e proprietà supportate"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lettura…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Recupero dello stato attuale da HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stato: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Piccolo cursore: "},{t:4,k:"slider"},{t:3,v:" · Visualizzazione: "},{t:4,k:"display"},{t:3,v:" · Dimensione: "},{t:4,k:"size"},{t:3,v:" · Controllo: "},{t:4,k:"control"},{t:3,v:" · Sfondo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sì"}},no:{t:0,b:{t:2,i:[{t:3}],s:"no"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nessuno"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinito"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Leggi di nuovo"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Rimosso dalla barra superiore: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"La barra superiore ha spazio per 1 elemento."},{t:2,i:[{t:3,v:"La barra superiore ha spazio per "},{t:4,k:"n"},{t:3,v:" elementi."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"È già nella barra superiore."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superiore"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superiore: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso, funziona anche senza Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Sinistra: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Per esempio: Soggiorno"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Destra: ora, sensori o orologio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", spazio "},{t:4,k:"slot"},{t:3,v:". Enter: configura, frecce: sposta"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Rimuovi "},{t:4,k:"name"},{t:3,v:" dalla barra superiore"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Massimo 1 elemento"},{t:2,i:[{t:3,v:"Massimo "},{t:4,k:"n"},{t:3,v:" elementi"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi l'ora, la data, l'orologio analogico o un'entità"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Aggiungi ora, data o un'entità"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non tutto sta accanto al nome: lo schermo tralascia gli elementi tratteggiati. Rimuovine uno o scegli un nome più corto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Trascina per riordinare; tocca un elemento per configurarlo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensori, data e orologio analogico compaiono a partire dal firmware "},{t:4,k:"version"},{t:3,v:"; fino a quell'aggiornamento questo schermo mostra il nome e, se l'ora è nella barra, l'orologio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto: non attivo al momento"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Non sta accanto al nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Quadrante"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nascosto al momento: non attivo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Al momento non sta accanto al nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Come appare sullo schermo"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Piccolo quadrante con l'ora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Cosa mostrare"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Ultima modifica» continua a contare sullo schermo stesso: «Proprio ora», «5 min fa», «Ieri»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatica (come Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostra"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Solo quando attivo» nasconde l'elemento finché è spento, chiuso, fuori casa o a 0. Utile per una porta aperta, una lavatrice in funzione o per sapere chi è a casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 24 ore · si cambia in "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Orologio a 12 ore · si cambia in "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Impostazioni → Lingua e regione"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Oggi: "},{t:4,k:"date"},{t:3,v:". La data segue l'orologio dello schermo stesso."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Su"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Giù"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi alla barra superiore"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazio usato"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" di "},{t:4,k:"n"},{t:3,v:" spazi usati"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Dallo schermo stesso"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Già aggiunto"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti da Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Un'entità"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome, area o entità, es. temperatura o porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'entità per la barra superiore"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna entità trovata."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Notte"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modalità scura"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Standby automatico"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Standby dopo"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità standby"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modalità notte"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Inizio"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fine"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Luminosità notte"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Torna a pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Dopo"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Anche in standby"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Scorri tra le pagine"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Pulsanti pagina"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotazione"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Sto ancora salvando le impostazioni dell'altro schermo. Riprova tra poco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"I pulsanti pagina e lo scorrimento sono disattivati, quindi solo i riquadri «Vai alla pagina» cambiano pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagine "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadro «Vai alla pagina», che porta a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]},{t:2,i:[{t:3,v:"Hai "},{t:4,k:"n"},{t:3,v:" riquadri «Vai alla pagina», che portano a "},{t:4,k:"targets"},{t:3,v:", ma nessuno a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Non hai riquadri «Vai alla pagina»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerla."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Non hai riquadri «Vai alla pagina» che portano a "},{t:4,k:"missing"},{t:3,v:", quindi non puoi raggiungerle."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"I riquadri che portano a "},{t:4,k:"pages"},{t:3,v:" sono solo su pagine che non puoi raggiungere."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Da "},{t:4,k:"pages"},{t:3,v:" nessun riquadro riporta a pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Questo schermo è offline. Le sue impostazioni si potranno cambiare quando torna online."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito sullo schermo, e quelle fatte sullo schermo compaiono qui."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche si applicano subito. A partire dal firmware 0.2.49 lo schermo le conserva da solo."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Questa entità è disattivata in Home Assistant, oppure lo schermo si sta riavviando."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": diminuisci"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": aumenta"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Avvio dell'aggiornamento…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Scrittura del firmware via Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione e installazione…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"In attesa che lo schermo torni online…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Verifica della stabilità…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nuova lingua: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi ora si aggiorneranno automaticamente di notte."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Gli aggiornamenti automatici sono disattivati."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamenti del firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento al firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo associato finora. I nuovi schermi ricevono il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Il firmware "},{t:4,k:"version"},{t:3,v:" è disponibile per "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi hanno il firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aggiorna 1 schermo"},{t:2,i:[{t:3,v:"Aggiorna tutti i "},{t:4,k:"n"},{t:3,v:" schermi"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novità del firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna automaticamente ogni notte"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tra le 03:00 e le 06:00, uno schermo alla volta. Si ferma in caso di errore e lo segnala in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Claude Code la rileva subito."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill installata. Riavvia Claude Code una volta perché trovi la nuova cartella delle skill."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Insegna ESP Screens a Claude, poi chiedi: «Mostra un avviso su tutti i miei schermi quando la cassetta della posta è piena». Claude conosce gli eventi degli avvisi, ogni campo, colore e icona."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa per Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Installa di nuovo"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aggiorna la skill"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Non installata"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Installata"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Installata · è pronta una versione più recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Per Claude Code in Home Assistant. Scrive un file in "},{t:4,k:"path"},{t:3,v:"; installando di nuovo lo sostituisci."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica per claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carica lo zip in Claude, in Personalizza → Skill."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tutto ciò che riguarda i tuoi schermi."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← I miei schermi"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermi"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi uno schermo, oppure compila e reinstalla il firmware di uno che hai già."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa via USB o Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lingua e regione"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Lingua degli schermi"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Lingua di Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Lingua di Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Gli schermi usano l'inglese finché la lingua di Home Assistant non è disponibile."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non ancora verificato, aiuto benvenuto"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" non è ancora verificato, ogni aiuto è benvenuto: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"come tradurre"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Dopo una modifica ogni schermo ha bisogno di un aggiornamento del firmware, una compilazione per schermo: con il suo pulsante Aggiorna, o con gli aggiornamenti notturni."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato orario"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 ore"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 ore"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formato numerico"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatico, segue la lingua ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Il tuo profilo Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usa questi"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"L'editor segue la lingua del tuo profilo Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Ogni schermo passa alla nuova lingua con il suo prossimo aggiornamento."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Una scheda a tutto schermo da un'automazione, su uno schermo o su tutti. La guida rapida contiene i nomi delle azioni, i campi, le icone e i colori, e un modulo per provarne uno."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notifiche a schermo intero, da un'automazione"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa il firmware degli schermi"}},intro:{t:0,b:{t:2,i:[{t:3,v:"La CLI di ESPHome integrata usa il tuo profilo (YAML con le chiavi) e i tuoi segreti. Scegli il profilo dello schermo, poi una porta USB (schermo collegato alla macchina di Home Assistant), "},{t:4,k:"ota"},{t:3,v:" con il nome host, oppure "},{t:4,k:"download"},{t:3,v:" per mettere il firmware sullo schermo dal tuo computer. "},{t:4,k:"check"},{t:3,v:" verifica soltanto, "},{t:4,k:"build"},{t:3,v:" compila, "},{t:4,k:"install"},{t:3,v:" mette il firmware sullo schermo. I tuoi riquadri restano come sono in ESP Screens. La prima compilazione richiede qualche minuto."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verifica"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Solo compilazione"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compila e installa"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compila e scarica"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Manca la CLI di ESPHome. Aggiorna l'app alla versione 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Scegli il profilo giusto, poi una porta USB, un indirizzo IP o Scarica."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profilo ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installa su"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nessuno schermo rilevato finora sulla macchina di Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Scarica · installa dal tuo computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Indirizzo IP o nome host"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Scarica "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Mettilo sullo schermo con "},{t:4,k:"esphome_web"},{t:3,v:" in Chrome o Edge: Connect, scegli la porta USB dello schermo, Install e seleziona questo file. Contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Collega e installa."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profilo salvato."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Un attimo…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da scaricare."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Non ha funzionato."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens crea il profilo dello schermo con chiavi uniche e compila il firmware. Collega lo schermo con un cavo USB dati alla macchina su cui gira Home Assistant, oppure scarica il firmware e mettilo sullo schermo dal tuo computer."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Quale schermo hai?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 pollici"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 pollici"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Schermo del soggiorno"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizza"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Ogni schermo ha il suo profilo con le sue chiavi. Quattro schermi? Ripeti questi passaggi quattro volte con un nome diverso."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Lettere minuscole, cifre e trattini. Un nome diverso per ogni schermo."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Password Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Da compilare una sola volta: ESP Screens lo salva nel secrets.yaml di ESPHome e gli schermi successivi lo usano automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Nel tuo secrets.yaml di ESPHome mancano ancora i dati Wi-Fi. ESP Screens compila solo le righe mancanti."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Il Wi-Fi viene dal tuo secrets.yaml di ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Il secrets.yaml nella cartella di ESPHome non è YAML valido. Correggi prima il file; non verrà sovrascritto."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installa tramite"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Più tardi · salva solo il profilo"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo con un cavo USB dati alla macchina di Home Assistant; l'elenco si aggiorna da solo. Oppure scegli Scarica per usare il tuo computer."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Scarica il firmware e mettilo sullo schermo dal tuo computer, in Chrome o Edge. Dopo, gli aggiornamenti arrivano via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo va nella cartella di ESPHome. Puoi installarlo più tardi da Firmware e USB, o da ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Più schermi collegati: scegli la porta di questo schermo."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Una sola volta via USB; dopo, tutto senza fili."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installa"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Salva profilo"}},busy:{t:0,b:{t:2,i:[{t:3,v:"È già in corso una compilazione o un'installazione ("},{t:4,k:"file"},{t:3,v:"). Attendi che finisca."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"In questa installazione manca la CLI di ESPHome; puoi solo salvare il profilo."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" è nella cartella di ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Scrittura del firmware su "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione del firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Il firmware per "},{t:4,k:"name"},{t:3,v:" è pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Il firmware è su "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Compilazione non riuscita"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installazione non riuscita"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installalo più tardi da Firmware e USB: scegli questo profilo, poi la porta USB della macchina di Home Assistant, oppure Scarica per mettere il firmware sullo schermo dal tuo computer. Conserva la chiave API per l'associazione:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Non scollegare ancora il cavo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: l'installazione continua e la ritrovi in Nuovo schermo."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Una prima compilazione richiede qualche minuto su un Raspberry Pi. Puoi lasciare questa pagina: la compilazione continua e la ritrovi in Nuovo schermo."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Mettilo sullo schermo dal tuo computer, poi associa lo schermo a Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Ora associalo a Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Lo schermo si avvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci. Ora associalo a Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Vedi il registro qui sotto."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" con un cavo USB dati."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Collega lo schermo al tuo computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome o Edge, fai clic su Connect e scegli la porta USB dello schermo."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Apri "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e seleziona "},{t:4,k:"file"},{t:3,v:". Lo schermo si riavvia e si collega al tuo Wi-Fi. Il CYD chiede prima una calibrazione del touch: tocca le croci."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fai clic su Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Il file contiene la tua password Wi-Fi e le chiavi dello schermo: tienilo per te."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chiave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Questo avviene fuori da ESP Screens. Home Assistant rileva "},{t:4,k:"name"},{t:3,v:" come dispositivo ESPHome; fai clic su Aggiungi. Non rilevato? Aggiungi ESPHome manualmente con l'indirizzo IP dello schermo."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vai in Home Assistant → Impostazioni → Dispositivi e servizi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" qui sopra quando Home Assistant chiede una chiave di cifratura."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Incolla la chiave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integrazione ESPHome → Configura → «Allow the device to perform Home Assistant actions». Senza questo, lo schermo vede tutto ma non controlla nulla."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Consenti le azioni di HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" In ESP Screens lo schermo compare nell'elenco a sinistra entro una trentina di secondi; fino ad allora è indicato lì come «non ancora in Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Scegli i tuoi riquadri."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registro ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Riprova"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Installa un altro schermo"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Ricomincia"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Fatto"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avvisi · guida rapida"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Una notifica a schermo intero, da un'automazione."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha l'azione "},{t:4,k:"action"},{t:3,v:". Mette una scheda sopra tutto, riattiva lo schermo e mantiene la retroilluminazione a luminosità normale finché qualcuno non tocca il pulsante o non scade il timeout. Home Assistant da solo non mostra spiegazioni né menu a tendina per le azioni ESPHome; qui trovi tutto quello che puoi compilare."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"La guida rapida si sta ancora caricando; un attimo."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"C'è qualcuno alla porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, retro"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Arrivo"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sezioni"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Prova"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"I tuoi schermi"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In un'automazione"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"I campi"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Icone"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Colori"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventi"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Suggerimenti"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Invia subito un avviso, con gli stessi campi che invia un'automazione. Lo schermo mostra la scheda e, con il lampeggio attivo, fa lampeggiare la retroilluminazione."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Schermo"}},all:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi (pronti: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · non pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titolo"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Sottotitolo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Colore"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Testo del pulsante"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (secondi, 0 aspetta il pulsante)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fai lampeggiare la retroilluminazione"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quattro volte all'arrivo dell'avviso."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Invio…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Invia avviso"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermo."}]},{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"n"},{t:3,v:" schermi."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Inviato a "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Inviato allo schermo."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 schermo saltato (offline o firmware troppo vecchio)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermi saltati (offline o firmware troppo vecchio)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Campi lasciati vuoti: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nessuno schermo ha potuto mostrarlo: verifica che uno schermo sia online con il firmware "},{t:4,k:"version"},{t:3,v:" o più recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Bianco (predefinito)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni schermo ha la sua azione, con il nome del dispositivo. A partire dal firmware "},{t:4,k:"version"},{t:3,v:"; aggiorna uno schermo più vecchio con il suo pulsante Aggiorna in Schermi."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nessuno schermo associato finora. Installane uno da Nuovo schermo; l'azione compare appena Home Assistant vede lo schermo."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Aggiornamento necessario · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome dispositivo sconosciuto · aggiorna lo schermo"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostra avviso"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Chiudi avviso"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" e cerca "},{t:4,k:"esphome"},{t:3,v:". Scegli l'azione del tuo schermo: Home Assistant la chiama «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aggiungi azione"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant li chiede tutti e sette; lascia vuoto ciò che non usi ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", disattivo)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Compila i campi."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Preferisci lo YAML? Scegli "},{t:4,k:"edit"},{t:3,v:" sull'azione e incolla l'esempio qui sotto."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Esempio per"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"uno schermo (non ancora associato)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Modifica in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copia YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Tutti gli schermi insieme"}},text:{t:0,b:{t:2,i:[{t:3,v:"Attiva l'evento "},{t:4,k:"show"},{t:3,v:" con gli stessi campi ed ESP Screens inoltra l'avviso a ogni schermo online, compresi quelli che aggiungerai in seguito. "},{t:4,k:"dismiss"},{t:3,v:" lo rimuove ovunque. In un'automazione, aggiungi l'azione "},{t:4,k:"event"},{t:3,v:" o incolla l'esempio in "},{t:4,k:"edit"},{t:3,v:". Tralascia i campi che non usi. Perché funzioni, ESP Screens deve essere in esecuzione."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Attiva manualmente evento"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Il testo è libero; il limite è in byte e una lettera accentata conta per due. Ciò che non ci sta finisce con i puntini di sospensione (titolo) o viene tagliato (sottotitolo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Cosa fa"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Esempio"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"testo"}},int:{t:0,b:{t:2,i:[{t:3}],s:"numero"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"attivo / disattivo"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entità"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" byte"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"da 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:", per esempio "},{t:4,k:"example"},{t:3,v:". Funzionano anche "},{t:4,k:"mdi"},{t:3,v:" e il codice esadecimale ("},{t:4,k:"hex"},{t:3,v:"). Nel firmware ci sono solo queste icone; qualsiasi altro nome mostra il triangolo di avvertimento. Tocca un'icona per copiarne il nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Utili per le notifiche"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Cerca un'icona"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Cerca per nome o descrizione…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Disponibili anche: icone di controllo e meteo"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copia "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nessuna icona per «"},{t:4,k:"query"},{t:3,v:"». I nomi sconosciuti mostrano il triangolo di avvertimento ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Inserisci il nome in "},{t:4,k:"field"},{t:3,v:". Sono le tonalità pastello dei riquadri, con testo scuro. Un nome vuoto o sconosciuto dà la scheda bianca. Tocca per copiare."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un avviso riattiva subito uno schermo attenuato o spento e compare sopra ogni pagina, ogni scheda luce aperta e il livello di standby."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Riattiva lo schermo."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Finché la scheda è visibile, la retroilluminazione resta a luminosità normale. Standby e ore notturne aspettano. Dopo il pulsante, riparte il normale tempo di standby."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acceso fino al pulsante."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" aspetta il pulsante, per tutto il tempo necessario. Con "},{t:4,k:"minute"},{t:3,v:" la scheda sparisce dopo un minuto, ma il pulsante la chiude prima."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" fa lampeggiare la retroilluminazione quattro volte all'arrivo dell'avviso (circa un secondo) e poi lascia lo schermo acceso."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Lampeggio."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Un nuovo avviso sostituisce quello attuale; gli avvisi non si accumulano. L'avviso sostituito si segnala come "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sostituzione."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" rimuove la scheda, per esempio se la porta è già aperta. Senza un avviso, quell'azione non fa nulla."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Chiusura a distanza."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" non fa nulla; solo il pulsante la chiude. Così un tocco per riattivare lo schermo non chiude mai l'avviso per sbaglio."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Toccare accanto alla scheda"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Ogni volta che un avviso termina, parte l'evento "},{t:4,k:"event"},{t:3,v:" con "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (il nome del dispositivo) e il "},{t:4,k:"device_id"},{t:3,v:" che aggiunge Home Assistant. Visibile in Impostazioni → Strumenti → Eventi."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Aspettare che qualcuno prema il pulsante"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Usa un "},{t:4,k:"bold"},{t:3,v:": arancione per la porta, rosso per fumo o acqua, verde per «fatto». Il testo resta sempre scuro e leggibile."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"colore per ogni tipo di notifica"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tieni il titolo "},{t:4,k:"bold"},{t:3,v:": uno schermo mostra circa venti caratteri su una riga e chiude un titolo più lungo con i puntini di sospensione. Metti i dettagli nel sottotitolo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"breve"}},button:{t:0,b:{t:2,i:[{t:3,v:"Un "},{t:4,k:"bold"},{t:3,v:" trasforma la notifica in una domanda: «Arrivo», «Visto», «Spegni». L'evento poi ti dice chi ha risposto."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"testo del pulsante personalizzato"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Per un avviso che si risolve da solo (la porta si apre, il bucato viene ritirato), chiudilo nella stessa automazione con "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Tutti gli schermi? Attiva "},{t:4,k:"event"},{t:3,v:" una sola volta (vedi Tutti gli schermi insieme). Gli schermi restano indipendenti e ognuno risponde con il proprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Preferisci "},{t:4,k:"bold"},{t:3,v:" l'automazione? Installa la skill di ESP Screens in Impostazioni → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"chiedere a Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campanello: mostra l’avviso e aspetta che qualcuno prema il pulsante."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Qualcuno sta arrivando alla porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avanzate · personalizzazione locale"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizzato · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Questo piccolo file è tuo. Viene caricato dopo il pacchetto condiviso degli schermi e resta al suo posto quando ESP Screens si aggiorna. Cambia qui i dettagli specifici dell'hardware, come il modello del display."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Cosa si può cambiare senza rischi?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pin e altri dettagli del dispositivo. Nome, Wi-Fi, API, OTA e collegamenti ai package restano gestiti automaticamente."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Attivo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto da collegare"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato locale"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usa l'esempio"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancella"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 carattere"},{t:2,i:[{t:4,k:"n"},{t:3,v:" caratteri"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 riga"},{t:2,i:[{t:4,k:"n"},{t:3,v:" righe"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Salva e verifica"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Salva YAML personalizzato"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Non è stato trovato nessun profilo ESPHome per questo schermo."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Le modifiche fatte qui valgono dalla prossima compilazione."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Salva una volta per collegare questo file al profilo."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Verifica e salvataggio…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. Lo YAML personalizzato viene mantenuto negli aggiornamenti del firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizzato salvato."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Salvato. ESPHome sta verificando il profilo completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sta verificando il profilo…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sta verificando il profilo… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Il profilo completo è valido. Puoi compilare e installare senza rischi."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome ha rifiutato il profilo completo. Vedi Firmware e USB per il registro completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Sostituire il testo attuale con l'esempio?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Esempio caricato. Salvalo quando vuoi."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Cancellare lo YAML personalizzato locale?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Lo YAML personalizzato sarà vuoto dopo il salvataggio."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Sconosciuto"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Non disponibile"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Caldo/Freddo"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatico"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Deumidificazione"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilazione"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Riscaldamento"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Raffreddando"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"In deumidificazione"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatore"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Preriscaldamento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Defrosting"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"In apertura"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"In chiusura"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"In attesa"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sopra l'orizzonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Sotto l'orizzonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Alla base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"In pulizia"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"In pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Ritornando alla base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inattivo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Soleggiato"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Sereno, notte"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nuvoloso"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parzialmente nuvoloso"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Piovoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Rovescio"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, piovoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nebbia"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Grandine"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Temporale"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Temporale, piovoso"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Eccezionale"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Basso/a"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"In carica"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in carica"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Freddo"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Connesso"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Disconnesso"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Caldo"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normale"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luce rilevata"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Nessuna luce"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Sbloccato/a"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Bloccato/a"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Bagnato"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Asciutto"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"In movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Non si muove"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Collegato"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Scollegato"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Acceso"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Spento"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"In casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Fuori casa"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"In esecuzione"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Non in esecuzione"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Non Sicuro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Sicuro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevata manomissione"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornamento disponibile"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Aggiornato"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Rilevato"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Assente"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aperto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Chiuso"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Attiva"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Esegui"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Premi"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Proprio ora"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min fa"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 ora fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" ore fa"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ieri"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 giorno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" giorni fa"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 settimana fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" settimane fa"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 mese fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" mesi fa"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 anno fa"},{t:2,i:[{t:4,k:"n"},{t:3,v:" anni fa"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 ora"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" ore"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Domani"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Tra 1 giorno"},{t:2,i:[{t:3,v:"Tra "},{t:4,k:"n"},{t:3,v:" giorni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domenica"}},{t:0,b:{t:2,i:[{t:3}],s:"lunedì"}},{t:0,b:{t:2,i:[{t:3}],s:"martedì"}},{t:0,b:{t:2,i:[{t:3}],s:"mercoledì"}},{t:0,b:{t:2,i:[{t:3}],s:"giovedì"}},{t:0,b:{t:2,i:[{t:3}],s:"venerdì"}},{t:0,b:{t:2,i:[{t:3}],s:"sabato"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"lun"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"mer"}},{t:0,b:{t:2,i:[{t:3}],s:"gio"}},{t:0,b:{t:2,i:[{t:3}],s:"ven"}},{t:0,b:{t:2,i:[{t:3}],s:"sab"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"gennaio"}},{t:0,b:{t:2,i:[{t:3}],s:"febbraio"}},{t:0,b:{t:2,i:[{t:3}],s:"marzo"}},{t:0,b:{t:2,i:[{t:3}],s:"aprile"}},{t:0,b:{t:2,i:[{t:3}],s:"maggio"}},{t:0,b:{t:2,i:[{t:3}],s:"giugno"}},{t:0,b:{t:2,i:[{t:3}],s:"luglio"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"settembre"}},{t:0,b:{t:2,i:[{t:3}],s:"ottobre"}},{t:0,b:{t:2,i:[{t:3}],s:"novembre"}},{t:0,b:{t:2,i:[{t:3}],s:"dicembre"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"gen"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mag"}},{t:0,b:{t:2,i:[{t:3}],s:"giu"}},{t:0,b:{t:2,i:[{t:3}],s:"lug"}},{t:0,b:{t:2,i:[{t:3}],s:"ago"}},{t:0,b:{t:2,i:[{t:3}],s:"set"}},{t:0,b:{t:2,i:[{t:3}],s:"ott"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dic"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/nl-CwiIFXXi.js b/screen_manager/app/static/assets/nl-CwiIFXXi.js new file mode 100644 index 0000000..ff560cb --- /dev/null +++ b/screen_manager/app/static/assets/nl-CwiIFXXi.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Ongedaan maken"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"onbekend"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niet-opgeslagen wijzigingen"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Annuleren"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Apparaten & diensten openen"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan & versturen"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Actuele gegevens lezen"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 resultaat. Typ verder om te verfijnen."},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultaten. Typ verder om te verfijnen."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Verwijderen"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigen"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Laden…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Terug"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiëren"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nieuw scherm"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware & USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerts"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Instellingen"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aansluiten en installeren"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Dat lukte niet. Vernieuw de pagina en probeer het opnieuw."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON van de indeling gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON van de indeling is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Actienaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Actienaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Icoonnaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Icoonnaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Lege kleur gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Lege kleur is geselecteerd. Kopieer met Ctrl+C of Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Kleurnaam gekopieerd."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Kleurnaam is geselecteerd. Kopieer met Ctrl+C of Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Beheerpagina niet bereikbaar · opnieuw proberen…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant verbonden"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Verbinding met Home Assistant herstellen…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoeken"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Meer"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Vernieuwen"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Update"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Bijwerken"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"In de wachtrij voor de update"}},available:{t:0,b:{t:2,i:[{t:3,v:"Update "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Geen ESPHome-profiel met deze apparaatnaam gevonden."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Wat is er nieuw"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Volledig log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Eenmalig het IP-adres; nieuwe firmware meldt het zelf."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres, bijv. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Starten"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Geïnstalleerd, maar nog niet in Home Assistant. Voeg het ontdekte ESPHome-apparaat toe onder Instellingen → Apparaten & diensten, plak daar de API-sleutel en zet bij Configureren “Allow the device to perform Home Assistant actions” aan."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware gedownload, nog niet in Home Assistant. Zet die met ESPHome Web op het scherm, voeg daarna het ontdekte ESPHome-apparaat toe onder Instellingen → Apparaten & diensten, plak daar de API-sleutel en sta bij Configureren de Home Assistant-acties toe."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Nog niet in Home Assistant. Al geflasht? Voeg het ESPHome-apparaat toe onder Instellingen → Apparaten & diensten en sta daarna bij Configureren de Home Assistant-acties toe. Nog niet geflasht? Firmware & USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel kopiëren"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Acties"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Toevoegen aan dit scherm"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Cheatsheet en een testalert"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Updates, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Niets om op te slaan"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Dit scherm identificeren"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Laat de backlight knipperen en toont een kaart"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Nieuwere firmware nodig"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Indeling exporteren"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Als JSON downloaden en kopiëren"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Zoek schermen, entiteiten, acties…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Niets gevonden. Typ een deel van een scherm, entiteit of actie."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kies een scherm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Kies links een van je schermen om de tegels, de bovenbalk en de instellingen aan te passen."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Begin met een scherm"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Sluit een CYD of Guition via USB aan op je Home Assistant-machine. Profiel, firmware en de eerste flash gebeuren in één keer."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Nieuw scherm installeren"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Je hebt niet-opgeslagen wijzigingen. Toch een ander scherm openen?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"De niet-opgeslagen indeling vervangen door een kopie van die van het andere scherm?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"De niet-opgeslagen indeling vervangen door de geïmporteerde?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Je scherm wordt bijgewerkt."}},other:{t:0,b:{t:2,i:[{t:3,v:"Opgeslagen. "},{t:4,k:"name"},{t:3,v:" wordt bijgewerkt."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Het scherm wordt bijgewerkt."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Je laatste wijziging is nog niet verstuurd: druk nog eens op Opslaan & versturen."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" knippert en toont een paar seconden een kaart."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · wijzigingen worden bewaard"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Indeling"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Scherminstellingen"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen · naar scherm verstuurd"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Alles opgeslagen"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Meer"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificeren"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"scherm laten knipperen"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Firmware 0.2.31 of nieuwer nodig"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"uit Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Indeling kopiëren van…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" scherm"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" schermen"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"geen ander scherm"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" tegel"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tegels"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Indeling exporteren"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Indeling importeren…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"geavanceerd"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Geen ESPHome-profiel gevonden voor dit scherm"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bijwerken"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verwijderd"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Er is geen plek voor deze tegel op pagina "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Er is geen lege pagina voor een paginavullende tegel. Maak eerst een pagina vrij."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Dit scherm heeft al een tegel die naar pagina "},{t:4,k:"page"},{t:3,v:" gaat."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Indeling van "},{t:4,k:"name"},{t:3,v:" gekopieerd. Druk op Opslaan & versturen als alles klopt."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Indeling van "},{t:4,k:"name"},{t:3,v:" gekopieerd: "},{t:4,k:"kept"},{t:3,v:" van de "},{t:4,k:"total"},{t:3,v:" tegels passen bij de firmware van dit scherm. Druk op Opslaan & versturen als alles klopt."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Indeling geïmporteerd. Druk op Opslaan & versturen als alles klopt."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Indeling geïmporteerd: "},{t:4,k:"kept"},{t:3,v:" van de "},{t:4,k:"total"},{t:3,v:" tegels passen bij de firmware van dit scherm. Druk op Opslaan & versturen als alles klopt."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Dat is geen JSON. Exporteer eerst een indeling, of plak er een uit een andere ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Dit bestand heeft geen tegels. Gebruik een indeling die uit ESP Screens is geëxporteerd."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tegels"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" pagina's · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" tegels"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Voeg je eerste lamp, scène of apparaat toe uit de bibliotheek."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Tik op de bovenbalk of een tegel om die aan te passen. Sleep om te verplaatsen, of naar de volgende pagina voor een nieuwe pagina."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Lege plekken en vaste posities werken vanaf firmware 0.2.26. Tot die update schuift dit scherm (firmware "},{t:4,k:"firmware"},{t:3,v:") de tegels op naar de eerste vrije plek."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Schermindeling"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Pagina toevoegen"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximaal 1 pagina"},{t:2,i:[{t:3,v:"Maximaal "},{t:4,k:"n"},{t:3,v:" pagina's"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Pagina weghalen"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"De pagina's erna schuiven een plek op"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Bovenbalk aanpassen"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Lege plek. Klik om hier een tegel toe te voegen, of sleep er een naartoe."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Lege plek "},{t:4,k:"slot"},{t:3,v:" op pagina "},{t:4,k:"page"},{t:3,v:": hier de volgende tegel toevoegen"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Volgende tegel komt hier"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Leeg"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bibliotheek"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entiteit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entiteiten"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam, apparaat of ruimte…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Voeg een entiteit toe"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Alles"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Lampen"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimaat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaars"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Acties"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilatoren"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Raambekleding"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scènes"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Stofzuigers"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensoren"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weer"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Waarden"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijsten"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Personen"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timers"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Ruimte"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Alle ruimtes"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Geplaatste verbergen"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Verberg wat al op dit scherm staat"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Alles hier staat al op dit scherm."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen entiteiten gevonden. Probeer een andere naam, ruimte of filter."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Op dit scherm past 1 tegel."},{t:2,i:[{t:3,v:"Op dit scherm passen "},{t:4,k:"n"},{t:3,v:" tegels."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Op dit scherm past 1 tegel; werk de firmware bij voor 48."},{t:2,i:[{t:3,v:"Op dit scherm passen "},{t:4,k:"n"},{t:3,v:" tegels; werk de firmware bij voor 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Sleep naar een pagina, of tik op + voor de eerste vrije plek. ⌘K doorzoekt alles."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Licht"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimaat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Stofzuiger"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Raambekleding"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Status"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaar"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Schakelaar"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scène"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Weer"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Waarde"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Waarde"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijst"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Keuzelijst"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Zon"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Timer"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Persoon"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Camera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Afbeelding"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entiteit"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standaard"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"grote waarde"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"weersverwachting"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"grafiek"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"digitale klok"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"analoge klok"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"zonnebaan"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normaal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"dubbel"}},full:{t:0,b:{t:2,i:[{t:3}],s:"hele pagina"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Naam op het scherm"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (uit Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (standaard)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm toont een gekozen icoon vanaf firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Gaat naar pagina"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (leeg)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Navigatietegels hebben firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Dit scherm heeft geen pagina "},{t:4,k:"page"},{t:3,v:", dus een tik opent de laatste pagina. Kies een andere pagina."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Een tik op de tegel opent die pagina."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Weergave"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Digitale klok"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Analoge klok"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Naam en status"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Grote waarde"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Weersverwachting"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Grafiek"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Zonnebaan"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant heeft geen getallen voor deze entiteit, dus de grafiek blijft leeg. Kies een andere weergave."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Deze weerdienst heeft geen dagverwachting in Home Assistant. Kies een andere weergave."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Grootte"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Dubbelbreed"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Hele pagina"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Hele pagina: één grote knop die oplicht zolang hij aan is; onderaan staat een slider, bediening of grafiek."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Een paginavullende tegel heeft firmware 0.2.62 nodig: druk eerst bij het scherm op Bijwerken."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pagina"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nieuwe pagina"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Directe bediening op de tegel"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant biedt deze bediening niet voor deze entiteit, dus die blijft leeg op het scherm. Kies een andere."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Onderaan de paginavullende tegel; een tik ergens anders werkt zoals hieronder ingesteld."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Rechts op de dubbelbrede tegel, zoals de rijen in Home Assistant. Tikken op de naam werkt zoals hieronder ingesteld."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm toont directe bediening vanaf firmware 0.2.19; tot die tijd blijft de tegel zoals hij was."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bij aantikken"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Bediening openen"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Alleen bekijken"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Aan / uit"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Actie uitvoeren"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant kan dit niet aan- en uitzetten, dus een tik doet niets. Kies een andere optie."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm schakelt dit vanaf firmware 0.2.58: druk bij het scherm op Bijwerken. Tot dan opent een tik de kaart."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Houd de tegel vast om de kaart te openen."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Kleine slider op de tegel"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nee"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Ja, direct bedienen"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant heeft niets wat een slider bij deze entiteit kan aanpassen. Kies Nee."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Geschiedenis"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" uur"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelachtergrond"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Achtergrond: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", plek "},{t:4,k:"slot"},{t:3,v:" op pagina "},{t:4,k:"page"},{t:3,v:". Enter: instellen, pijltjestoetsen: verplaatsen"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Tegel verwijderen"}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verwijderen"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Actie"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant vragen welke acties deze entiteit heeft…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant reageert nu niet. Probeer het zo nog eens."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Kies een actie"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek, bijvoorbeeld schakelen, positie of afspelen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een actie"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen actie gevonden."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant biedt deze actie niet meer voor deze entiteit, dus een tik doet niets. Kies een andere."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (optioneel)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Niet ingesteld"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant heeft "},{t:4,k:"fields"},{t:3,v:" nodig."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm voert een actie uit vanaf firmware 0.2.58: druk bij het scherm op Bijwerken. Tot dan werkt een tik als Automatisch."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Icoon"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek, bijvoorbeeld lamp, muziek of deur"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een icoon"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon, alleen tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Icoon: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen icoon gevonden."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Actuele gegevens"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Verbinding, status en ondersteunde eigenschappen"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Lezen…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Actuele HA-status ophalen…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Status: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Kleine slider: "},{t:4,k:"slider"},{t:3,v:" · Weergave: "},{t:4,k:"display"},{t:3,v:" · Grootte: "},{t:4,k:"size"},{t:3,v:" · Bediening: "},{t:4,k:"control"},{t:3,v:" · Achtergrond: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"ja"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nee"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"geen"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Standaard"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw lezen"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" uit de bovenbalk gehaald"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"De bovenbalk heeft plaats voor 1 onderdeel."},{t:2,i:[{t:3,v:"De bovenbalk heeft plaats voor "},{t:4,k:"n"},{t:3,v:" onderdelen."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Dit staat al in de bovenbalk."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Bovenbalk"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Bovenbalk: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Van het scherm zelf, werkt ook zonder Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" onderdeel"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" onderdelen"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Links: naam"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Bijvoorbeeld: Woonkamer"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Rechts: tijd, sensoren of een klok"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", plek "},{t:4,k:"slot"},{t:3,v:". Enter: instellen, pijltjes: verplaatsen"}]}},remove_named:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" uit de bovenbalk halen"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maximaal 1 onderdeel"},{t:2,i:[{t:3,v:"Maximaal "},{t:4,k:"n"},{t:3,v:" onderdelen"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Tijd, datum, analoge klok of een entiteit toevoegen"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Tijd, datum of entiteit toevoegen"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Niet alles past naast de naam: het scherm laat de gestreepte onderdelen weg. Haal er een weg of kies een kortere naam."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Sleep om de volgorde te wijzigen; tik op een onderdeel om het in te stellen."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensoren, de datum en de analoge klok verschijnen vanaf firmware "},{t:4,k:"version"},{t:3,v:"; tot die update toont dit scherm de naam en, als de tijd in de balk staat, de klok."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Verborgen: nu niet actief"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Past niet naast de naam"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Wijzerplaat"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Nu verborgen: niet actief"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Past nu niet naast de naam"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Zo staat het op het scherm"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Kleine wijzerplaat met de tijd"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Wat laten zien"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"“Laatst gewijzigd” telt op het scherm zelf door: “Zojuist”, “5 min geleden”, “Gisteren”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch (zoals Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tonen"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"“Alleen als actief” verbergt het onderdeel zolang het uit, dicht, afwezig of 0 is. Handig voor een open deur, een draaiende wasmachine of wie er thuis is."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"24-uursklok · wijzigen onder "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"12-uursklok · wijzigen onder "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Instellingen → Taal & regio"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Vandaag is het "},{t:4,k:"date"},{t:3,v:". De datum volgt de eigen klok van het scherm."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Omhoog"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Omlaag"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Toevoegen aan de bovenbalk"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" plek gebruikt"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" van "},{t:4,k:"n"},{t:3,v:" plekken gebruikt"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Van het scherm zelf"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Staat er al in"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Suggesties uit Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Een entiteit"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam, ruimte of entiteit, bijv. temperatuur of deur"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een entiteit voor de bovenbalk"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Geen entiteiten gevonden."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Nacht"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Donkere modus"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch stand-by"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by na"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid stand-by"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Nachtmodus"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Begint"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Eindigt"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Helderheid nacht"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Terug naar pagina 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Na"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Ook bij stand-by"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Vegen tussen pagina's"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Paginaknoppen"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotatie"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" sec"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" u"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" u "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" a.m."}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" p.m."}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"De instellingen van het andere scherm worden nog opgeslagen. Probeer het zo nog eens."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Paginaknoppen en vegen staan uit, dus alleen “Ga naar pagina”-tegels wisselen van pagina."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"pagina "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"pagina's "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegel, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]},{t:2,i:[{t:3,v:"Je hebt "},{t:4,k:"n"},{t:3,v:" “Ga naar pagina”-tegels, naar "},{t:4,k:"targets"},{t:3,v:", maar geen naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Je hebt geen “Ga naar pagina”-tegels."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Je hebt geen “Ga naar pagina”-tegels naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Je hebt geen “Ga naar pagina”-tegels naar "},{t:4,k:"missing"},{t:3,v:", dus die kun je niet bereiken."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"De tegels naar "},{t:4,k:"pages"},{t:3,v:" staan alleen op pagina's die je niet kunt bereiken."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Vanaf "},{t:4,k:"pages"},{t:3,v:" leidt geen tegel terug naar pagina 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Dit scherm is offline. Je kunt de instellingen wijzigen zodra het terug is."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen gelden meteen op het scherm en verschijnen hier als ze daar veranderen."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen gelden meteen. Met firmware 0.2.49 bewaart het scherm ze zelf."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Deze entiteit is uitgeschakeld in Home Assistant, of het scherm herstart."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verlagen"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" verhogen"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Update starten…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bouwen…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Firmware via Wi-Fi schrijven…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen en installeren…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Wachten tot het scherm terug is…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Controleren of het stabiel blijft…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nieuwe taal: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Schermen worden voortaan 's nachts automatisch bijgewerkt."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch bijwerken staat uit."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Firmware-updates"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Bezig met bijwerken naar firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nog geen scherm gekoppeld. Nieuwe schermen krijgen firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is beschikbaar voor "},{t:4,k:"n"},{t:3,v:" scherm."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" is beschikbaar voor "},{t:4,k:"n"},{t:3,v:" schermen."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen hebben firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 scherm bijwerken"},{t:2,i:[{t:3,v:"Alle "},{t:4,k:"n"},{t:3,v:" schermen bijwerken"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Nieuw in firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Elke nacht automatisch bijwerken"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Tussen 03:00 en 06:00, één scherm tegelijk. Stopt bij een fout en meldt die in Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Skill geïnstalleerd. Claude Code vindt hem meteen."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Skill geïnstalleerd. Start Claude Code één keer opnieuw, zodat het de nieuwe skills-map vindt."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Leer Claude ESP Screens kennen en vraag dan: “Laat een melding zien op al mijn schermen als de brievenbus vol is.” Claude kent de gebeurtenissen van alerts en elk veld, elke kleur en elk icoon."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installeren voor Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw installeren"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Skill bijwerken"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Niet geïnstalleerd"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Geïnstalleerd"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Geïnstalleerd · er is een nieuwere versie"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Voor Claude Code in Home Assistant. Schrijft één bestand naar "},{t:4,k:"path"},{t:3,v:"; opnieuw installeren vervangt het."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden voor claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Upload de zip in Claude onder Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Alles rond je schermen."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Mijn schermen"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermen"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Voeg een scherm toe, of bouw en installeer de firmware van een bestaand scherm opnieuw."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen en installeren via USB of Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Taal & regio"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Taal van de schermen"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Taal van Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Taal van Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"De schermen gebruiken Engels tot de taal van Home Assistant beschikbaar is."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · nog niet nagekeken, hulp welkom"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" is nog niet nagekeken, hulp welkom: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"zo vertaal je mee"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na een wijziging heeft elk scherm een firmware-update nodig, één build per scherm: met de knop Bijwerken, of via de nachtelijke updates."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Tijdnotatie"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, volgt de taal ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 uur"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 uur"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Getalnotatie"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatisch, volgt de taal ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Je Home Assistant-profiel: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Deze gebruiken"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"De editor zelf volgt de taal van je Home Assistant-profiel."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. Elk scherm krijgt de nieuwe taal bij zijn volgende update."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Een kaart over het hele scherm vanuit een automatisering, op één scherm of op allemaal. De cheatsheet heeft de actienamen, velden, iconen en kleuren, en een formulier om er een te proberen."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Meldingen over het hele scherm, vanuit een automatisering"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Schermfirmware bouwen en installeren"}},intro:{t:0,b:{t:2,i:[{t:3,v:"De ingebouwde ESPHome CLI gebruikt je eigen profiel (YAML met sleutels) en secrets. Kies het profiel van het scherm, dan een USB-poort (scherm aan de Home Assistant-machine), "},{t:4,k:"ota"},{t:3,v:" met de hostnaam, of "},{t:4,k:"download"},{t:3,v:" om de firmware vanaf je eigen computer op het scherm te zetten. "},{t:4,k:"check"},{t:3,v:" valideert alleen, "},{t:4,k:"build"},{t:3,v:" compileert, "},{t:4,k:"install"},{t:3,v:" zet de firmware op het scherm. Je tegels blijven zoals ze in ESP Screens staan. De eerste build duurt enkele minuten."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Controleren"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Alleen bouwen"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen & installeren"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen & downloaden"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"De ESPHome CLI ontbreekt. Werk de app bij naar 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Kies het bedoelde profiel, dan een USB-poort, een IP-adres of Downloaden."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome-profiel"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Installeren naar"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nog geen bord gevonden op de Home Assistant-machine"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Downloaden · flashen vanaf je eigen computer"}},host:{t:0,b:{t:2,i:[{t:3}],s:"IP-adres of hostnaam"}},download_file:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" downloaden"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Zet het met "},{t:4,k:"esphome_web"},{t:3,v:" op het scherm, in Chrome of Edge: klik op Connect, kies de USB-poort van het scherm, klik op Install en selecteer dit bestand. Het bevat je Wi-Fi-wachtwoord en de sleutels van het scherm: houd het voor jezelf."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Aansluiten en installeren."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profiel bewaard."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Even geduld…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Klaar om te downloaden."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Klaar."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Dat lukte niet."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens maakt een eigen profiel voor het scherm, met unieke sleutels, en bouwt de firmware. Sluit het scherm met een USB-datakabel aan op de machine waarop Home Assistant draait, of download de firmware en zet die vanaf je eigen computer op het scherm."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Welk scherm heb je?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 inch"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 inch"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Naam"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Scherm woonkamer"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Apparaatnaam"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"aanpassen"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Elk scherm krijgt een eigen profiel met eigen sleutels. Vier schermen? Doorloop dit vier keer met een andere naam."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Kleine letters, cijfers en streepjes. Elk scherm een andere naam."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-naam (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi-wachtwoord"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Eén keer invullen: ESP Screens bewaart dit in ESPHome secrets.yaml, volgende schermen gebruiken het automatisch."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Je ESPHome secrets.yaml mist nog Wi-Fi-gegevens. ESP Screens vult alleen de ontbrekende regels aan."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi komt uit je ESPHome secrets.yaml."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"secrets.yaml in de ESPHome-map is geen geldige YAML. Herstel het bestand eerst; het wordt niet overschreven."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Installeren via"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Later · alleen het profiel bewaren"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Sluit het scherm met een USB-datakabel aan op de Home Assistant-machine; de lijst ververst vanzelf. Of kies Downloaden om je eigen computer te gebruiken."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Download de firmware en zet die vanaf je eigen computer op het scherm, in Chrome of Edge. Daarna gaan updates via Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Het profiel komt in de ESPHome-map. Installeren kan later via Firmware & USB, of vanuit ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Meer dan één bord aangesloten: kies de poort van dit scherm."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Eén keer via USB; daarna gaat alles draadloos."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Installeren"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Profiel bewaren"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Er loopt al een build of installatie ("},{t:4,k:"file"},{t:3,v:"). Wacht tot die klaar is."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"De ESPHome CLI ontbreekt in deze installatie; alleen het profiel bewaren kan."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" staat in de ESPHome-map"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Firmware naar "},{t:4,k:"name"},{t:3,v:" schrijven…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Firmware bouwen…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware voor "},{t:4,k:"name"},{t:3,v:" is klaar"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware staat op "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Bouwen mislukt"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Installeren mislukt"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Installeren kan later via Firmware & USB: kies dit profiel, dan de USB-poort van de Home Assistant-machine, of Downloaden om de firmware vanaf je eigen computer op het scherm te zetten. Bewaar de API-sleutel voor de koppeling:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Haal de USB-kabel nog niet los."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Een eerste build duurt op een Raspberry Pi enkele minuten. Je kunt deze pagina verlaten: de installatie loopt door en je vindt hem terug onder Nieuw scherm."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Een eerste build duurt op een Raspberry Pi enkele minuten. Je kunt deze pagina verlaten: de build loopt door en je vindt hem terug onder Nieuw scherm."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Zet de firmware vanaf je eigen computer op het scherm en koppel het scherm daarna aan Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm start op en verbindt met je Wi-Fi. Koppel het nu aan Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Het scherm start op en verbindt met je Wi-Fi. De CYD vraagt eerst om een touch-kalibratie: tik op de kruisjes. Koppel het nu aan Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Bekijk het log hieronder."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" met een USB-datakabel."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sluit het scherm aan op je computer"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" in Chrome of Edge, klik op Connect en kies de USB-poort van het scherm."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Open "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en selecteer "},{t:4,k:"file"},{t:3,v:". Het scherm herstart en verbindt met je Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" en selecteer "},{t:4,k:"file"},{t:3,v:". Het scherm herstart en verbindt met je Wi-Fi. De CYD vraagt eerst om een touch-kalibratie: tik op de kruisjes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Klik op Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Het bestand bevat je Wi-Fi-wachtwoord en de sleutels van het scherm: houd het voor jezelf."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"API-sleutel"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dit gebeurt buiten ESP Screens. Home Assistant ontdekt "},{t:4,k:"name"},{t:3,v:" als ESPHome-apparaat; klik op Toevoegen. Niet ontdekt? Voeg ESPHome handmatig toe met het IP-adres van het scherm."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ga naar Home Assistant → Instellingen → Apparaten & diensten."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" van hierboven zodra Home Assistant om een encryptiesleutel vraagt."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Plak de API-sleutel"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" ESPHome-integratie → Configureren → “Allow the device to perform Home Assistant actions”. Zonder dit ziet het scherm alles, maar bedient het niets."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Sta HA-acties toe:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Terug in ESP Screens verschijnt het scherm binnen een halve minuut in de lijst links; tot die tijd staat het daar als “nog niet in Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kies je tegels."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log van ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw proberen"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Nog een scherm installeren"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Opnieuw beginnen"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Klaar"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerts · cheatsheet"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Een melding over het hele scherm, vanuit een automatisering."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Elk scherm heeft de actie "},{t:4,k:"action"},{t:3,v:". Die legt een kaart over alles heen, wekt het scherm en houdt de backlight op de normale helderheid tot iemand op de knop tikt of de timeout verstrijkt. Home Assistant toont bij ESPHome-acties zelf geen uitleg of keuzelijsten; alles wat je kunt invullen staat hier."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"De cheatsheet laadt nog; even geduld."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Iemand belt aan"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Deur 3, achterkant"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ik kom"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Onderdelen"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Uitproberen"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Jouw schermen"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"In een automatisering"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Alle schermen"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"De velden"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Iconen"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kleuren"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Gedrag"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Gebeurtenissen"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Tips"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Stuur nu één alert, met dezelfde velden die een automatisering stuurt. Het scherm toont de kaart en laat, met knipperen aan, de backlight knipperen."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Scherm"}},all:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen ("},{t:4,k:"ready"},{t:3,v:" klaar)"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niet klaar"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Titel"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ondertitel"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Icoon"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kleur"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Knoptekst"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Timeout (seconden, 0 wacht op de knop)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Backlight laten knipperen"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Vier keer als de alert binnenkomt."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Versturen…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Alert versturen"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"n"},{t:3,v:" scherm."}]},{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"n"},{t:3,v:" schermen."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Verstuurd naar "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Verstuurd naar het scherm."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 overgeslagen (offline of oude firmware)."},{t:2,i:[{t:4,k:"n"},{t:3,v:" overgeslagen (offline of oude firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Leeg gelaten: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Geen enkel scherm kon hem tonen: controleer of er een scherm online is met firmware "},{t:4,k:"version"},{t:3,v:" of nieuwer."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Wit (standaard)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Elk scherm heeft zijn eigen actie, met de apparaatnaam erin. Vanaf firmware "},{t:4,k:"version"},{t:3,v:"; een ouder scherm werk je bij met de knop Bijwerken onder Schermen."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nog geen scherm gekoppeld. Installeer er een via Nieuw scherm; de actie verschijnt zodra Home Assistant het scherm ziet."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Update nodig · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Apparaatnaam onbekend · werk het scherm bij"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Alert tonen"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Alert sluiten"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Klik op "},{t:4,k:"add"},{t:3,v:" en zoek op "},{t:4,k:"esphome"},{t:3,v:". Kies de actie van je scherm: Home Assistant noemt die “Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Actie toevoegen"}},device:{t:0,b:{t:2,i:[{t:3}],s:"apparaatnaam"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant vraagt om alle zeven; laat wat je niet gebruikt leeg ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", uit)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vul de velden in."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Liever YAML? Kies "},{t:4,k:"edit"},{t:3,v:" bij de actie en plak het voorbeeld hieronder."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld voor"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"een scherm (nog niet gekoppeld)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Bewerken in YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"YAML kopiëren"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Alle schermen tegelijk"}},text:{t:0,b:{t:2,i:[{t:3,v:"Vuur de gebeurtenis "},{t:4,k:"show"},{t:3,v:" af met dezelfde velden, en ESP Screens geeft de alert door aan elk scherm dat online is, ook aan schermen die je later toevoegt. "},{t:4,k:"dismiss"},{t:3,v:" haalt hem overal weg. Voeg in een automatisering de actie "},{t:4,k:"event"},{t:3,v:" toe, of plak het voorbeeld onder "},{t:4,k:"edit"},{t:3,v:". Laat de velden die je niet gebruikt weg. ESP Screens moet hiervoor draaien."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Handmatige gebeurtenis activeren"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst is vrij in te vullen; de limiet is in bytes en een letter met accent telt voor twee. Wat niet past krijgt puntjes (titel) of valt weg (ondertitel)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Veld"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Type"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Wat het doet"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limiet"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"getal"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"aan / uit"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entiteit"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"0 tot 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Vul de naam in bij "},{t:4,k:"field"},{t:3,v:", bijvoorbeeld "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" en de hex-codepoint ("},{t:4,k:"hex"},{t:3,v:") werken ook. Alleen deze iconen zitten in de firmware; elke andere naam toont de waarschuwingsdriehoek. Tik op een icoon om de naam te kopiëren."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Handig voor meldingen"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Zoek een icoon"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Zoek op naam of omschrijving…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Ook beschikbaar: bedienings- en weericonen"}},copy:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" kopiëren"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Geen icoon voor “"},{t:4,k:"query"},{t:3,v:"”. Onbekende namen tonen de waarschuwingsdriehoek ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Vul de naam in bij "},{t:4,k:"field"},{t:3,v:". Dit zijn de pasteltinten van de tegels, met donkere tekst. Leeg of onbekend geeft de witte kaart. Tik om te kopiëren."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Een alert maakt een gedimd of donker scherm meteen wakker en verschijnt boven elke pagina, elke open lichtkaart en de stand-bylaag."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wekt het scherm."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Zolang de kaart in beeld is, blijft de backlight op de normale helderheid. Stand-by en de nachturen wachten. Na de knop begint de gewone stand-bytijd opnieuw."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aan tot de knop."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" wacht op de knop, hoe lang dat ook duurt. Met "},{t:4,k:"minute"},{t:3,v:" verdwijnt de kaart na een minuut, maar de knop sluit hem eerder."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Timeout."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" laat de backlight vier keer knipperen als de alert binnenkomt (ongeveer een seconde) en laat het scherm daarna aan."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Knipperen."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Een nieuwe alert vervangt de huidige; er is geen stapel. De vervangen alert meldt zich als "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vervangen."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" haalt de kaart weg, bijvoorbeeld als de deur al open is. Zonder alert doet die actie niets."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Op afstand sluiten."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" doet niets; alleen de knop sluit hem. Zo drukt een tik om het scherm te wekken de alert nooit per ongeluk weg."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tikken naast de kaart"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Elk einde vuurt de gebeurtenis "},{t:4,k:"event"},{t:3,v:" af, met "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (de apparaatnaam) en het "},{t:4,k:"device_id"},{t:3,v:" dat Home Assistant toevoegt. Te zien onder Instellingen → Hulpmiddelen → Gebeurtenissen."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Wanneer"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Wachten tot iemand op de knop drukt"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Gebruik een "},{t:4,k:"bold"},{t:3,v:": oranje voor de deur, rood voor rook of water, groen voor “klaar”. De tekst blijft altijd donker en leesbaar."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"kleur per soort melding"}},short:{t:0,b:{t:2,i:[{t:3,v:"Houd de titel "},{t:4,k:"bold"},{t:3,v:"; een scherm toont zo'n twintig tekens op één regel en kort een langere titel af met puntjes. Zet details in de ondertitel."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"kort"}},button:{t:0,b:{t:2,i:[{t:3,v:"Een "},{t:4,k:"bold"},{t:3,v:" maakt van de melding een vraag: “Ik kom”, “Gezien”, “Uitzetten”. De gebeurtenis vertelt je dan wie reageerde."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"eigen knoptekst"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Een alert die zichzelf oplost (de deur gaat open, de was is eruit gehaald) sluit je in dezelfde automatisering met "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Alle schermen? Vuur "},{t:4,k:"event"},{t:3,v:" één keer af (zie Alle schermen tegelijk). De schermen werken nog steeds los van elkaar en melden zich elk met hun eigen "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Liever "},{t:4,k:"bold"},{t:3,v:" om de automatisering te schrijven? Installeer de ESP Screens-skill onder Instellingen → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"Claude vragen"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Deurbel: toon de alert en wacht tot iemand op de knop drukt."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Er komt iemand naar de deur."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Geavanceerd · lokale override"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML-override · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Dit kleine bestand is van jou. Het wordt na het gedeelde schermpakket geladen en blijft staan als ESP Screens wordt bijgewerkt. Pas hier hardwaredetails aan, zoals een displaymodel."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Wat kun je veilig aanpassen?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Display, touchscreen, substitutions, pinnen en andere apparaatdetails. Naam, Wi-Fi, API, OTA en de koppelingen naar de packages beheert ESP Screens zelf."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Klaar om te koppelen"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokale YAML-override"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld gebruiken"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wissen"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 teken"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tekens"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 regel"},{t:2,i:[{t:4,k:"n"},{t:3,v:" regels"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Opslaan & controleren"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Override opslaan"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Er is geen ESPHome-profiel gevonden voor dit scherm."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Wijzigingen hier gelden bij de volgende build."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Sla één keer op om dit bestand aan het profiel te koppelen."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Controleren en opslaan…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. De override blijft bewaard bij firmware-updates."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML-override opgeslagen."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Opgeslagen. ESPHome controleert het complete profiel…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome controleert het profiel…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome controleert het profiel… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Het complete profiel is geldig. Je kunt veilig bouwen en installeren."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome heeft het complete profiel afgekeurd. Zie Firmware & USB voor het volledige log."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"De huidige tekst vervangen door het voorbeeld?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Voorbeeld geladen. Sla het op zodra je klaar bent."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"De lokale override wissen?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Na opslaan is de override leeg."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Onbekend"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen/koelen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Alleen ventilator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drogen"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Voorverwarmen"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Ontdooien"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Openen"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Speelt"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Boven de horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Onder de horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Gedockt"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Schoonmaken"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Terugkeren naar dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Zonnig"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Helder, nacht"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Bewolkt"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Half bewolkt"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Regenachtig"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Regen"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuwachtig"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuw-, regenachtig"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Mist"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hagel"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem, regenachtig"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Winderig"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Uitzonderlijk"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Laag"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Opladen"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet aan het opladen"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Koud"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Verbonden"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Verbroken"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Heet"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Licht gedetecteerd"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen licht"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Ontgrendeld"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Vergrendeld"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Nat"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Beweging"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen beweging"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ingeplugd"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Losgekoppeld"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Probleem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet actief"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Onveilig"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Veilig"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Sabotage ontdekt"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update beschikbaar"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Niet beschikbaar"}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Inschakelen"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uitvoeren"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Klik"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Zojuist"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min geleden"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 uur geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur geleden"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Gisteren"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dag geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dagen geleden"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weken geleden"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 maand geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" maanden geleden"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 jaar geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" jaar geleden"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 uur"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" uur"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Morgen"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 dag"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" dagen"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"a.m."}},pm:{t:0,b:{t:2,i:[{t:3}],s:"p.m."}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"zondag"}},{t:0,b:{t:2,i:[{t:3}],s:"maandag"}},{t:0,b:{t:2,i:[{t:3}],s:"dinsdag"}},{t:0,b:{t:2,i:[{t:3}],s:"woensdag"}},{t:0,b:{t:2,i:[{t:3}],s:"donderdag"}},{t:0,b:{t:2,i:[{t:3}],s:"vrijdag"}},{t:0,b:{t:2,i:[{t:3}],s:"zaterdag"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"januari"}},{t:0,b:{t:2,i:[{t:3}],s:"februari"}},{t:0,b:{t:2,i:[{t:3}],s:"maart"}},{t:0,b:{t:2,i:[{t:3}],s:"april"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"juni"}},{t:0,b:{t:2,i:[{t:3}],s:"juli"}},{t:0,b:{t:2,i:[{t:3}],s:"augustus"}},{t:0,b:{t:2,i:[{t:3}],s:"september"}},{t:0,b:{t:2,i:[{t:3}],s:"oktober"}},{t:0,b:{t:2,i:[{t:3}],s:"november"}},{t:0,b:{t:2,i:[{t:3}],s:"december"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mrt"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"jun"}},{t:0,b:{t:2,i:[{t:3}],s:"jul"}},{t:0,b:{t:2,i:[{t:3}],s:"aug"}},{t:0,b:{t:2,i:[{t:3}],s:"sep"}},{t:0,b:{t:2,i:[{t:3}],s:"okt"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/nl-DV7drWRf.js b/screen_manager/app/static/assets/nl-DV7drWRf.js deleted file mode 100644 index 9dcf6ff..0000000 --- a/screen_manager/app/static/assets/nl-DV7drWRf.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen/koelen"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatisch"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Alleen ventilator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"Verwarmen"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"Koelen"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Drogen"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Voorverwarmen"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Ontdooien"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"Openen"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"Sluiten"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"Speelt"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Stand-by"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Boven de horizon"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Onder de horizon"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Gedockt"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"Schoonmaken"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Gepauzeerd"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"Terugkeren naar dock"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inactief"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Zonnig"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Helder, nacht"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Bewolkt"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Half bewolkt"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Regenachtig"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Regen"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuwachtig"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Sneeuw-, regenachtig"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Mist"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Hagel"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Bliksem, regenachtig"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Winderig"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Uitzonderlijk"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Laag"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normaal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Opladen"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet aan het opladen"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Koud"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Verbonden"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Verbroken"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Heet"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Licht gedetecteerd"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen licht"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Ontgrendeld"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Vergrendeld"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Nat"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Droog"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Beweging"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Geen beweging"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ingeplugd"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Losgekoppeld"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Aan"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Uit"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Thuis"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Afwezig"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Probleem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Actief"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet actief"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Onveilig"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Veilig"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Sabotage ontdekt"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Update beschikbaar"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Up-to-date"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Gedetecteerd"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Niet gedetecteerd"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Open"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Dicht"}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Niet beschikbaar"}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Inschakelen"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uitvoeren"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Klik"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Zojuist"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min geleden"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 uur geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" uur geleden"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Gisteren"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dag geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dagen geleden"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 week geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" weken geleden"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 maand geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" maanden geleden"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 jaar geleden"},{t:2,i:[{t:4,k:"n"},{t:3,v:" jaar geleden"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 uur"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" uur"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Morgen"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Over 1 dag"},{t:2,i:[{t:3,v:"Over "},{t:4,k:"n"},{t:3,v:" dagen"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"a.m."}},pm:{t:0,b:{t:2,i:[{t:3}],s:"p.m."}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"zondag"}},{t:0,b:{t:2,i:[{t:3}],s:"maandag"}},{t:0,b:{t:2,i:[{t:3}],s:"dinsdag"}},{t:0,b:{t:2,i:[{t:3}],s:"woensdag"}},{t:0,b:{t:2,i:[{t:3}],s:"donderdag"}},{t:0,b:{t:2,i:[{t:3}],s:"vrijdag"}},{t:0,b:{t:2,i:[{t:3}],s:"zaterdag"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"zo"}},{t:0,b:{t:2,i:[{t:3}],s:"ma"}},{t:0,b:{t:2,i:[{t:3}],s:"di"}},{t:0,b:{t:2,i:[{t:3}],s:"wo"}},{t:0,b:{t:2,i:[{t:3}],s:"do"}},{t:0,b:{t:2,i:[{t:3}],s:"vr"}},{t:0,b:{t:2,i:[{t:3}],s:"za"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"januari"}},{t:0,b:{t:2,i:[{t:3}],s:"februari"}},{t:0,b:{t:2,i:[{t:3}],s:"maart"}},{t:0,b:{t:2,i:[{t:3}],s:"april"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"juni"}},{t:0,b:{t:2,i:[{t:3}],s:"juli"}},{t:0,b:{t:2,i:[{t:3}],s:"augustus"}},{t:0,b:{t:2,i:[{t:3}],s:"september"}},{t:0,b:{t:2,i:[{t:3}],s:"oktober"}},{t:0,b:{t:2,i:[{t:3}],s:"november"}},{t:0,b:{t:2,i:[{t:3}],s:"december"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan"}},{t:0,b:{t:2,i:[{t:3}],s:"feb"}},{t:0,b:{t:2,i:[{t:3}],s:"mrt"}},{t:0,b:{t:2,i:[{t:3}],s:"apr"}},{t:0,b:{t:2,i:[{t:3}],s:"mei"}},{t:0,b:{t:2,i:[{t:3}],s:"jun"}},{t:0,b:{t:2,i:[{t:3}],s:"jul"}},{t:0,b:{t:2,i:[{t:3}],s:"aug"}},{t:0,b:{t:2,i:[{t:3}],s:"sep"}},{t:0,b:{t:2,i:[{t:3}],s:"okt"}},{t:0,b:{t:2,i:[{t:3}],s:"nov"}},{t:0,b:{t:2,i:[{t:3}],s:"dec"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:" "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:"."}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"1"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Pagina "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pl-CGqJEGr1.js b/screen_manager/app/static/assets/pl-CGqJEGr1.js deleted file mode 100644 index 4f7288e..0000000 --- a/screen_manager/app/static/assets/pl-CGqJEGr1.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"niedostępny"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"grzanie/chłodzenie"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"tylko wentylator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"wentylator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"podgrzewanie wstępne"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"rozmrażanie"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"otwieranie"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"zamykanie"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"odtwarzanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"tryb czuwania"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"w domu"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"poza domem"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"powyżej horyzontu"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"poniżej horyzontu"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"zadokowany"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"sprzątanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"wraca do stacji dokującej"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"słonecznie"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"pogodna noc"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"pochmurno"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"częściowe zachmurzenie"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszczowo"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"ulewa"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"opady śniegu"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszcz ze śniegiem"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"mgła"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"grad"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"wyładowania atmosferyczne"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"burza"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"wietrznie"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"warunki nadzwyczajne"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ładowania"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"zimno"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"połączono"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"rozłączono"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"gorąco"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"odblokowano"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"zablokowano"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"w ruchu"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ruchu"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"podłączono"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"odłączono"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"ok"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"działa"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"nie działa"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"zagrożenie"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"brak zagrożenia"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"dostępna aktualizacja"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"brak aktualizacji"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktywuj"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Naciśnij"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Przed chwilą"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min temu"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 godzinę temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin temu"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Wczoraj"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 tydzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodnie temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodni temu"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 miesiąc temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesiące temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesięcy temu"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 rok temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lata temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lat temu"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 godzinę"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godzin"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Jutro"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 dzień"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"niedziela"}},{t:0,b:{t:2,i:[{t:3}],s:"poniedziałek"}},{t:0,b:{t:2,i:[{t:3}],s:"wtorek"}},{t:0,b:{t:2,i:[{t:3}],s:"środa"}},{t:0,b:{t:2,i:[{t:3}],s:"czwartek"}},{t:0,b:{t:2,i:[{t:3}],s:"piątek"}},{t:0,b:{t:2,i:[{t:3}],s:"sobota"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"stycznia"}},{t:0,b:{t:2,i:[{t:3}],s:"lutego"}},{t:0,b:{t:2,i:[{t:3}],s:"marca"}},{t:0,b:{t:2,i:[{t:3}],s:"kwietnia"}},{t:0,b:{t:2,i:[{t:3}],s:"maja"}},{t:0,b:{t:2,i:[{t:3}],s:"czerwca"}},{t:0,b:{t:2,i:[{t:3}],s:"lipca"}},{t:0,b:{t:2,i:[{t:3}],s:"sierpnia"}},{t:0,b:{t:2,i:[{t:3}],s:"września"}},{t:0,b:{t:2,i:[{t:3}],s:"października"}},{t:0,b:{t:2,i:[{t:3}],s:"listopada"}},{t:0,b:{t:2,i:[{t:3}],s:"grudnia"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"sty"}},{t:0,b:{t:2,i:[{t:3}],s:"lut"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"kwi"}},{t:0,b:{t:2,i:[{t:3}],s:"maj"}},{t:0,b:{t:2,i:[{t:3}],s:"cze"}},{t:0,b:{t:2,i:[{t:3}],s:"lip"}},{t:0,b:{t:2,i:[{t:3}],s:"sie"}},{t:0,b:{t:2,i:[{t:3}],s:"wrz"}},{t:0,b:{t:2,i:[{t:3}],s:"paź"}},{t:0,b:{t:2,i:[{t:3}],s:"lis"}},{t:0,b:{t:2,i:[{t:3}],s:"gru"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pl-CMPJmoaL.js b/screen_manager/app/static/assets/pl-CMPJmoaL.js new file mode 100644 index 0000000..334c30f --- /dev/null +++ b/screen_manager/app/static/assets/pl-CMPJmoaL.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Cofnij"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"nieznany"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Niezapisane zmiany"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Anuluj"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz Urządzenia oraz usługi"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i wyślij"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Zapisywanie…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj bieżące dane"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wynik. Pisz dalej, aby zawęzić."},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyniki. Pisz dalej, aby zawęzić."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wyników. Pisz dalej, aby zawęzić."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Zmień"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ładowanie…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Wstecz"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Nowy ekran"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware i USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alerty"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się. Odśwież stronę i spróbuj ponownie."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano klucz API."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano JSON układu."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"JSON układu jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę akcji."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa akcji jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano YAML."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"YAML jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę ikony."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa ikony jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano pusty kolor."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Pusty kolor jest zaznaczony. Skopiuj skrótem Ctrl+C lub Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Skopiowano nazwę koloru."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa koloru jest zaznaczona. Skopiuj skrótem Ctrl+C lub Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Strona zarządzania nieosiągalna · ponawianie…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Połączono z Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"Ponowne łączenie z Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Odśwież"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacja"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"W kolejce do aktualizacji"}},available:{t:0,b:{t:2,i:[{t:3,v:"Aktualizacja "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome o tej nazwie urządzenia."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Co nowego"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Pełny log"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, tylko ten jeden raz; nowy firmware sam go zgłasza."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP, np. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Rozpocznij"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowany, ale jeszcze nie w Home Assistant. Dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, a potem kliknij „Konfiguruj” i włącz „Zezwól urządzeniu na wykonywanie akcji Home Assistant”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware pobrany, jeszcze nie w Home Assistant. Wgraj go na ekran przez ESPHome Web, potem dodaj wykryte urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, wklej tam klucz API, kliknij „Konfiguruj” i zezwól na akcje Home Assistant."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Jeszcze nie w Home Assistant. Firmware już wgrany? Dodaj urządzenie ESPHome w sekcji Ustawienia → Urządzenia oraz usługi, potem kliknij „Konfiguruj” i zezwól na akcje Home Assistant. Jeszcze nie wgrany? Firmware i USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj klucz API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Polecenia"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do tego ekranu"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga i alert testowy"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nic do zapisania"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Zidentyfikuj ten ekran"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Miga podświetleniem i pokazuje kartę"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga nowszej wersji firmware"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz i skopiuj jako JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ekranów, encji, poleceń…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Brak wyników. Wpisz część nazwy ekranu, encji lub polecenia."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz ekran"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz jeden ze swoich ekranów po lewej, aby zmienić jego kafelki, górny pasek i ustawienia."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od ekranu"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz CYD lub Guition przez USB do komputera z Home Assistant. Profil, firmware i pierwsze wgranie za jednym razem."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj nowy ekran"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Masz niezapisane zmiany. Mimo to otworzyć inny ekran?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ kopią układu innego ekranu?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić niezapisany układ zaimportowanym?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twój ekran jest aktualizowany."}},other:{t:0,b:{t:2,i:[{t:3,v:"Zapisano. Trwa aktualizacja: "},{t:4,k:"name"},{t:3,v:"."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Ekran jest aktualizowany."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Twoja najnowsza zmiana nie została jeszcze wysłana: naciśnij ponownie „Zapisz i wyślij”."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" miga i przez kilka sekund pokazuje kartę."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · zmiany są zapisywane"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Układ"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia ekranu"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano · wysłano na ekran"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko zapisane"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Więcej"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identyfikuj"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"mignij ekranem"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Wymaga wersji firmware 0.2.31 lub nowszej"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"z Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj układ z…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ekran"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekrany"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ekranów"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"brak innych ekranów"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelek"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" kafelków"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Eksportuj układ"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importuj układ…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"zaawansowane"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Na stronie "},{t:4,k:"page"},{t:3,v:" nie ma miejsca na ten kafelek."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Brak wolnej strony dla kafelka na całą stronę. Najpierw zwolnij stronę."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran ma już kafelek, który prowadzi do strony "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Skopiowano układ ekranu "},{t:4,k:"name"},{t:3,v:". Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Zaimportowano układ. Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Zaimportowano układ. Kafelki zgodne z firmware tego ekranu: "},{t:4,k:"kept"},{t:3,v:" z "},{t:4,k:"total"},{t:3,v:". Gdy wygląda dobrze, naciśnij „Zapisz i wyślij”."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"To nie jest JSON. Najpierw wyeksportuj układ albo wklej układ z innej instalacji ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Brak kafelków w tym pliku. Oczekiwano układu wyeksportowanego z ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" strona · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" strony · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" stron · kafelki: "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj pierwsze światło, scenę lub urządzenie z biblioteki."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij górny pasek lub kafelek, aby go zmienić. Przeciągnij, aby przenieść; upuść na następnej stronie, aby utworzyć nową."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsca i stałe pozycje działają od wersji firmware 0.2.26. Do czasu tej aktualizacji ten ekran (firmware "},{t:4,k:"firmware"},{t:3,v:") przesuwa kafelki w górę, na pierwsze wolne miejsce."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Układ ekranu"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj stronę"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 strona"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" strony"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" stron"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń stronę"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"Strony po tej przesuną się o jedno miejsce w górę"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj górny pasek"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Puste miejsce. Kliknij, aby dodać tu kafelek, albo przeciągnij go tutaj."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Puste miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:": dodaj tu następny kafelek"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"Tu trafi następny kafelek"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Puste"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteka"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" encja"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encje"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" encji"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, urządzeniu lub obszarze…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj encję"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Światła"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełączniki"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcje"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypty"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylatory"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłony"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Sceny"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacze"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensory"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartości"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektory"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoby"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutniki"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Obszar"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie obszary"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj dodane"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ukryj to, co już jest na tym ekranie"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko z tej listy jest już na tym ekranie."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji. Spróbuj innej nazwy, obszaru lub filtra."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Ten ekran mieści 1 kafelek; zaktualizuj jego firmware, aby zmieścić 48."},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelki; zaktualizuj jego firmware, aby zmieścić 48."}]},{t:2,i:[{t:3,v:"Ten ekran mieści "},{t:4,k:"n"},{t:3,v:" kafelków; zaktualizuj jego firmware, aby zmieścić 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij na stronę albo kliknij +, aby dodać w pierwszym wolnym miejscu. ⌘K przeszukuje wszystko."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Światło"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Klimat"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Odkurzacz"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Wentylator"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Osłona"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Media"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Stan"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Przełącznik"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Scena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Skrypt"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Pogoda"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Wartość"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Selektor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Słońce"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Minutnik"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Osoba"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Kamera"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Obraz"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"standardowy"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"wykres"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"zegar analogowy"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"tor słońca"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"podwójny"}},full:{t:0,b:{t:2,i:[{t:3}],s:"cała strona"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa na ekranie"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (z Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (domyślna)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje wybraną ikonę od wersji firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Przechodzi do strony"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (pusta)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelki nawigacji wymagają wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Ten ekran nie ma strony "},{t:4,k:"page"},{t:3,v:", więc dotknięcie otwiera jego ostatnią stronę. Wybierz inną stronę."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie kafelka otwiera tę stronę."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Widok"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Zegar cyfrowy"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Zegar analogowy"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa i stan"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Duża wartość"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Prognoza pogody"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Wykres"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Tor słońca"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma wartości liczbowych dla tej encji, więc wykres pozostanie pusty. Wybierz inny widok."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Ta usługa pogodowa nie ma prognozy dziennej w Home Assistant. Wybierz inny widok."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Rozmiar"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normalny"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Podwójna szerokość"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cała strona: jeden duży przycisk, który świeci, gdy encja jest włączona; suwak, przyciski lub wykres są na jego dole."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Kafelek na całą stronę wymaga wersji firmware 0.2.62: najpierw naciśnij „Aktualizuj” przy tym ekranie."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Strona"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nowa strona"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Bezpośrednie sterowanie na kafelku"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje tego sterowania dla tej encji, więc na ekranie to miejsce pozostanie puste. Wybierz inne."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na dole kafelka na całą stronę; dotknięcie w innym miejscu działa zgodnie z ustawieniem poniżej."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej stronie kafelka podwójnej szerokości, jak w wierszach encji w Home Assistant. Dotknięcie nazwy działa zgodnie z ustawieniem poniżej."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran pokazuje bezpośrednie sterowanie od wersji firmware 0.2.19; do tego czasu kafelek pozostaje bez zmian."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Po dotknięciu"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Otwórz sterowanie"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Tylko podgląd"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Włącz / wyłącz"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Wykonaj akcję"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie może tego włączać ani wyłączać, więc dotknięcie nic nie robi. Wybierz inną opcję."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Włączanie i wyłączanie dotknięciem działa od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie otwiera kartę."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Przytrzymaj kafelek, aby otworzyć jego kartę."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mały suwak na kafelku"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Nie"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Tak, steruj bezpośrednio"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie ma dla tej encji niczego, co suwak mógłby zmieniać. Wybierz „Nie”."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Historia"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" godzina"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pastelowe tło"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Tło: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:" na stronie "},{t:4,k:"page"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Usuń kafelek"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Akcja"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie akcji tej encji z Home Assistant…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant teraz nie odpowiada. Spróbuj ponownie za chwilę."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz akcję"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład toggle, position lub play"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj akcji"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono akcji."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"Home Assistant nie oferuje już tej akcji dla tej encji, więc dotknięcie nic nie robi. Wybierz inną."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcjonalnie)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Nie ustawiono"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Włączone"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Wyłączone"}},needs:{t:0,b:{t:2,i:[{t:3,v:"Home Assistant wymaga: "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Ekran wykonuje akcje od wersji firmware 0.2.58: naciśnij „Aktualizuj” przy tym ekranie. Do tego czasu dotknięcie działa jak „Automatycznie”."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj, na przykład lampa, muzyka lub drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Bez ikony, tylko tekst"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ikona: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono ikony."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Bieżące dane"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Połączenie, stan i obsługiwane właściwości"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"Odczytywanie…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"Pobieranie bieżącego stanu z HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Stan: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Mały suwak: "},{t:4,k:"slider"},{t:3,v:" · Widok: "},{t:4,k:"display"},{t:3,v:" · Rozmiar: "},{t:4,k:"size"},{t:3,v:" · Sterowanie: "},{t:4,k:"control"},{t:3,v:" · Tło: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"tak"}},no:{t:0,b:{t:2,i:[{t:3}],s:"nie"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Domyślne"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Odczytaj ponownie"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Usunięto z górnego paska: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Górny pasek mieści 1 element."},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementy."}]},{t:2,i:[{t:3,v:"Górny pasek mieści "},{t:4,k:"n"},{t:3,v:" elementów."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"To już jest na górnym pasku."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Górny pasek"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Górny pasek: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu, działa też bez Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementu"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Po lewej: nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Na przykład: Salon"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Po prawej: godzina, sensory lub zegar"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", miejsce "},{t:4,k:"slot"},{t:3,v:". Enter: konfiguruj, strzałki: przenieś"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Usuń "},{t:4,k:"name"},{t:3,v:" z górnego paska"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Maksymalnie 1 element"},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementy"}]},{t:2,i:[{t:3,v:"Maksymalnie "},{t:4,k:"n"},{t:3,v:" elementów"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj godzinę, datę, zegar analogowy lub encję"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Dodaj godzinę, datę lub encję"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie wszystko mieści się obok nazwy: ekran pomija elementy z przerywaną ramką. Usuń jeden z nich albo wybierz krótszą nazwę."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Przeciągnij, aby zmienić kolejność; kliknij element, aby go skonfigurować."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Sensory, data i zegar analogowy pojawiają się od wersji firmware "},{t:4,k:"version"},{t:3,v:"; do tej aktualizacji ekran pokazuje nazwę oraz zegar, jeśli godzina jest na pasku."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Ukryty: teraz nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nie mieści się obok nazwy"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Tarcza"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Teraz ukryty: nieaktywny"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Obecnie nie mieści się obok nazwy"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Tak wygląda na ekranie"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mała tarcza z godziną"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"Co pokazać"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Ostatnia zmiana” aktualizuje się na samym ekranie: „Przed chwilą”, „5 min temu”, „Wczoraj”."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automatycznie (jak w Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Pokazuj"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"„Tylko gdy aktywne” ukrywa element, dopóki jest wyłączony, zamknięty, poza domem albo równy 0. Przydatne dla otwartych drzwi, pracującej pralki albo tego, kto jest w domu."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Zegar 24-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Zegar 12-godzinny · zmiana: "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Ustawienia → Język i region"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Dziś: "},{t:4,k:"date"},{t:3,v:". Data pochodzi z zegara samego ekranu."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ W górę"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ W dół"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj do górnego paska"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsca"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]},{t:2,i:[{t:3,v:"Zajęto "},{t:4,k:"used"},{t:3,v:" z "},{t:4,k:"n"},{t:3,v:" miejsc"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Z samego ekranu"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Już dodano"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Propozycje z Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Encja"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie, obszarze lub encji, np. temperatura albo drzwi"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj encji dla górnego paska"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono encji."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noc"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Tryb ciemny"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Auto czuwanie"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Czuwanie po"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność czuwania"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Tryb nocny"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Początek"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Koniec"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Jasność nocna"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Wróć do strony 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Po"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Także w czuwaniu"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Przesuwanie stron"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Obrót"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" godz."}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" godz. "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" AM"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" PM"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Trwa jeszcze zapisywanie ustawień innego ekranu. Spróbuj ponownie za chwilę."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Przyciski stron i przesuwanie są wyłączone, więc stronę zmieniają tylko kafelki „Przejdź do strony”."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"strony "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"stron "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:")."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelek „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelki „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]},{t:2,i:[{t:3,v:"Masz "},{t:4,k:"n"},{t:3,v:" kafelków „Przejdź do strony” (do "},{t:4,k:"targets"},{t:3,v:"), ale żadnego do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie masz kafelków „Przejdź do strony”."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do niej dotrzeć."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Żaden kafelek „Przejdź do strony” nie prowadzi do "},{t:4,k:"missing"},{t:3,v:", więc nie możesz do nich dotrzeć."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Kafelki do "},{t:4,k:"pages"},{t:3,v:" są tylko na stronach, do których nie możesz dotrzeć."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Ze "},{t:4,k:"pages"},{t:3,v:" żaden kafelek nie prowadzi z powrotem do strony 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Ten ekran jest offline. Jego ustawienia można zmienić, gdy wróci."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają na ekranie od razu, a gdy zmienisz coś na ekranie, zobaczysz to tutaj."}},app:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany działają od razu. Od wersji firmware 0.2.49 ekran przechowuje je sam."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Ta encja jest wyłączona w Home Assistant albo ekran uruchamia się ponownie."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zmniejsz"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": zwiększ"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"Rozpoczynanie aktualizacji…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"Wgrywanie firmware przez Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie i instalowanie…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"Oczekiwanie na powrót ekranu…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie, czy działa stabilnie…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Nowy język: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany będą teraz aktualizowane automatycznie w nocy."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"Automatyczne aktualizacje są wyłączone."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizacje firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Aktualizowanie do firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Nie sparowano jeszcze żadnego ekranu. Nowe ekrany dostaną firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranu."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]},{t:2,i:[{t:3,v:"Firmware "},{t:4,k:"version"},{t:3,v:" jest dostępny dla "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany mają firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Aktualizuj 1 ekran"},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]},{t:2,i:[{t:3,v:"Aktualizuj wszystkie ekrany ("},{t:4,k:"n"},{t:3,v:")"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Co nowego w firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Aktualizuj automatycznie co noc"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Między 03:00 a 06:00, po jednym ekranie naraz. Przy błędzie zatrzymuje się i zgłasza go w Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Claude Code od razu ją wykrywa."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Umiejętność zainstalowana. Uruchom ponownie Claude Code jeden raz, aby znalazł nowy folder umiejętności."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dzięki tej umiejętności Claude pozna ESP Screens. Potem poproś: „Pokaż alert na wszystkich moich ekranach, gdy skrzynka na listy jest pełna”. Claude zna zdarzenia alertów, każde pole, kolor i ikonę."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj dla Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj ponownie"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Zaktualizuj umiejętność"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Nie zainstalowano"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Zainstalowano"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Zainstalowano · dostępna jest nowsza wersja"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Dla Claude Code w Home Assistant. Zapisuje jeden plik w "},{t:4,k:"path"},{t:3,v:"; ponowna instalacja go zastępuje."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz dla claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Prześlij plik zip w Claude: Customize → Skills."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystko wokół Twoich ekranów."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Moje ekrany"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj ekran albo skompiluj i ponownie zainstaluj firmware ekranu, który już masz."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj przez USB lub Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Język i region"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Język ekranów"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Język Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Język Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Ekrany używają angielskiego, dopóki język Home Assistant nie będzie dostępny."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · jeszcze niesprawdzony, pomoc mile widziana"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" nie jest jeszcze sprawdzony, pomoc mile widziana: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"jak tłumaczyć"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Po zmianie każdy ekran wymaga aktualizacji firmware, po jednej kompilacji na ekran: przyciskiem „Aktualizuj” albo w nocnych aktualizacjach."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Format czasu"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24-godzinny"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12-godzinny"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Format liczbowy"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automatycznie, według języka ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"Twój profil Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Użyj tych"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"Sam edytor używa języka Twojego profilu Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Każdy ekran przejdzie na nowy język przy najbliższej aktualizacji."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Karta na cały ekran uruchamiana z automatyzacji, na jednym ekranie lub na wszystkich. Ściąga zawiera nazwy akcji, pola, ikony i kolory oraz formularz do wypróbowania alertu."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienia na cały ekran, z automatyzacji"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i instaluj firmware ekranu"}},intro:{t:0,b:{t:2,i:[{t:3,v:"Wbudowane narzędzie ESPHome CLI korzysta z Twojego własnego profilu (YAML z kluczami) i sekretów. Wybierz profil ekranu, a potem port USB (ekran podłączony do komputera z Home Assistant), "},{t:4,k:"ota"},{t:3,v:" z nazwą hosta albo "},{t:4,k:"download"},{t:3,v:", aby wgrać firmware na ekran z własnego komputera. "},{t:4,k:"check"},{t:3,v:" tylko sprawdza poprawność, "},{t:4,k:"build"},{t:3,v:" kompiluje, "},{t:4,k:"install"},{t:3,v:" wgrywa firmware na ekran. Twoje kafelki w ESP Screens zostają bez zmian. Pierwsza kompilacja trwa kilka minut."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdź"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Tylko kompiluj"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i zainstaluj"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Kompiluj i pobierz"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Brak narzędzia ESPHome CLI. Zaktualizuj aplikację do wersji 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz właściwy profil, a potem port USB, adres IP lub „Pobierz”."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Profil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj na"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · nie znaleziono jeszcze płytki na komputerze z Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz · wgraj z własnego komputera"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Adres IP lub nazwa hosta"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Pobierz "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Wgraj go na ekran przez "},{t:4,k:"esphome_web"},{t:3,v:" w Chrome lub Edge: „Connect”, wybierz port USB ekranu, „Install” i wskaż ten plik. Zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz i zainstaluj."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Profil zapisany."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Chwileczkę…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do pobrania."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Nie udało się."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"ESP Screens tworzy własny profil ekranu z unikalnymi kluczami i kompiluje firmware. Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant albo pobierz firmware i wgraj go na ekran z własnego komputera."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Jaki masz ekran?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 cala"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 cale"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ekran w salonie"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa urządzenia"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"dostosuj"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Każdy ekran dostaje własny profil z własnymi kluczami. Cztery ekrany? Przejdź przez to cztery razy, za każdym razem z inną nazwą."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Małe litery, cyfry i myślniki. Inna nazwa dla każdego ekranu."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nazwa sieci Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Hasło Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij raz: ESP Screens zapisze to w pliku secrets.yaml ESPHome, a kolejne ekrany użyją tego automatycznie."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"W Twoim pliku secrets.yaml ESPHome wciąż brakuje danych Wi-Fi. ESP Screens uzupełni tylko brakujące wiersze."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Dane Wi-Fi pochodzą z Twojego pliku secrets.yaml ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"Plik secrets.yaml w folderze ESPHome nie jest poprawnym YAML. Najpierw popraw plik; nie zostanie nadpisany."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj przez"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Później · tylko zapisz profil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran kablem USB do transmisji danych do komputera z Home Assistant; lista odświeża się sama. Albo wybierz „Pobierz”, aby użyć własnego komputera."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Pobierz firmware i wgraj go na ekran z własnego komputera, w Chrome lub Edge. Potem aktualizacje idą przez Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"Profil trafi do folderu ESPHome. Zainstalujesz go później w sekcji „Firmware i USB” albo w ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Podłączono więcej niż jedną płytkę: wybierz port tego ekranu."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Raz przez USB; potem wszystko bezprzewodowo."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz profil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Kompilacja lub instalacja już trwa ("},{t:4,k:"file"},{t:3,v:"). Poczekaj, aż się zakończy."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"W tej instalacji brakuje narzędzia ESPHome CLI; można tylko zapisać profil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" jest w folderze ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"Wgrywanie firmware: "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"Kompilowanie firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"Firmware gotowy: "},{t:4,k:"name"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"Firmware wgrany: "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"Kompilacja nieudana"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"Instalacja nieudana"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj go później w sekcji „Firmware i USB”: wybierz ten profil, a potem port USB komputera z Home Assistant albo „Pobierz”, aby wgrać firmware na ekran z własnego komputera. Zachowaj klucz API do parowania:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Nie odłączaj jeszcze kabla USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: instalacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"Pierwsza kompilacja trwa kilka minut na Raspberry Pi. Możesz opuścić tę stronę: kompilacja trwa dalej, a znajdziesz ją ponownie w sekcji „Nowy ekran”."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Wgraj go na ekran z własnego komputera, a potem sparuj ekran z Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. Teraz sparuj go z Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"Ekran się uruchamia i łączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków. Teraz sparuj go z Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Zobacz log poniżej."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" kablem USB do transmisji danych."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Podłącz ekran do komputera"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" w Chrome lub Edge, kliknij „Connect” i wybierz port USB ekranu."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Otwórz "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" i wskaż plik "},{t:4,k:"file"},{t:3,v:". Ekran uruchomi się ponownie i połączy z Twoją siecią Wi-Fi. CYD najpierw poprosi o kalibrację dotyku: dotykaj krzyżyków."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Kliknij „Install”"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"Plik zawiera Twoje hasło Wi-Fi i klucze ekranu: nie udostępniaj go nikomu."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Klucz API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" To dzieje się poza ESP Screens. Home Assistant wykryje "},{t:4,k:"name"},{t:3,v:" jako urządzenie ESPHome; kliknij „Dodaj”. Nie wykryto? Dodaj ESPHome ręcznie, podając adres IP ekranu."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Przejdź do Home Assistant → Ustawienia → Urządzenia oraz usługi."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" widoczny powyżej, gdy Home Assistant poprosi o klucz szyfrujący."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wklej klucz API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integracja ESPHome → Konfiguruj → „Zezwól urządzeniu na wykonywanie akcji Home Assistant”. Bez tego ekran widzi wszystko, ale niczym nie steruje."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zezwól na akcje HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Po powrocie do ESP Screens ekran pojawi się na liście po lewej w ciągu około trzydziestu sekund; do tego czasu jest tam opisany jako „jeszcze nie w Home Assistant”."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wybierz kafelki."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Log ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Ponów"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Zainstaluj kolejny ekran"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Zacznij od nowa"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alerty · ściąga"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Powiadomienie na cały ekran, z automatyzacji."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma akcję "},{t:4,k:"action"},{t:3,v:". Wyświetla ona kartę nad wszystkim, budzi ekran i utrzymuje normalną jasność podświetlenia, dopóki ktoś nie dotknie przycisku albo nie upłynie limit czasu. Sam Home Assistant nie pokazuje dla akcji ESPHome żadnych objaśnień ani list rozwijanych; wszystko, co możesz wypełnić, znajdziesz tutaj."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"Ściąga wciąż się ładuje; chwileczkę."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś jest przy drzwiach"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Drzwi 3, tylne"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Idę"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Sekcje"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Wypróbuj"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Twoje ekrany"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"W automatyzacji"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Pola"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ikony"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Kolory"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Działanie"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Zdarzenia"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Wskazówki"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij teraz jeden alert z tymi samymi polami, które wysyła automatyzacja. Ekran pokaże kartę, a przy włączonym miganiu mignie podświetleniem."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ekran"}},all:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany (gotowe: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · niegotowy"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tytuł"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Podtytuł"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ikona"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Kolor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Tekst przycisku"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu (sekundy, 0 czeka na przycisk)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Migaj podświetleniem"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cztery razy, gdy przychodzi alert."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"Wysyłanie…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Wyślij alert"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekran."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekrany."}]},{t:2,i:[{t:3,v:"Wysłano na "},{t:4,k:"n"},{t:3,v:" ekranów."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Wysłano na ekran "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Wysłano na ekran."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Pominięto 1 ekran (offline lub stary firmware)."},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekrany (offline lub stary firmware)."}]},{t:2,i:[{t:3,v:"Pominięto "},{t:4,k:"n"},{t:3,v:" ekranów (offline lub stary firmware)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Puste pola: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Żaden ekran nie mógł go pokazać: sprawdź, czy któryś ekran jest online i ma firmware "},{t:4,k:"version"},{t:3,v:" lub nowszy."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Biały (domyślny)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Każdy ekran ma własną akcję, której nazwa zawiera nazwę urządzenia. Od wersji firmware "},{t:4,k:"version"},{t:3,v:"; starszy ekran zaktualizuj przyciskiem „Aktualizuj” na liście ekranów."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Nie sparowano jeszcze żadnego ekranu. Zainstaluj go w sekcji „Nowy ekran”; akcja pojawi się, gdy Home Assistant zobaczy ekran."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Potrzebna aktualizacja · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznana nazwa urządzenia · zaktualizuj ekran"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Pokaż alert"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Zamknij alert"}}},howto:{add:{t:0,b:{t:2,i:[{t:4,k:"add"},{t:3,v:" i wyszukaj "},{t:4,k:"esphome"},{t:3,v:". Wybierz akcję swojego ekranu: Home Assistant opisuje ją po angielsku jako „Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"”."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dodaj akcję"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nazwa urządzenia"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Home Assistant pyta o wszystkie siedem; to, czego nie używasz, zostaw puste ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", wyłączone)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Wypełnij pola."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Wolisz YAML? Wybierz "},{t:4,k:"edit"},{t:3,v:" w menu akcji i wklej poniższy przykład."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Przykład dla"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"ekranu (jeszcze niesparowanego)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Edytuj w YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Kopiuj YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wszystkie ekrany naraz"}},text:{t:0,b:{t:2,i:[{t:3,v:"Wywołaj zdarzenie "},{t:4,k:"show"},{t:3,v:" z tymi samymi polami, a ESP Screens przekaże alert każdemu ekranowi, który jest online, także ekranom dodanym później. "},{t:4,k:"dismiss"},{t:3,v:" usuwa go wszędzie. W automatyzacji dodaj akcję "},{t:4,k:"event"},{t:3,v:" albo wybierz "},{t:4,k:"edit"},{t:3,v:" i wklej przykład. Pomiń pola, których nie używasz. ESP Screens musi przy tym działać."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom zdarzenie ręcznie"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"Tekst jest dowolny; limit liczy się w bajtach, a litera ze znakiem diakrytycznym (np. ą, ł, ś) liczy się jako dwa. Co się nie zmieści, kończy się wielokropkiem (tytuł) lub zostaje pominięte (podtytuł)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Pole"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Typ"}},what:{t:0,b:{t:2,i:[{t:3}],s:"Co robi"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Przykład"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limit"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"tekst"}},int:{t:0,b:{t:2,i:[{t:3}],s:"liczba"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"wł. / wył."}},entity:{t:0,b:{t:2,i:[{t:3}],s:"encja"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" B · Guition "},{t:4,k:"guition"},{t:3,v:" B"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"od 0 do 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:", na przykład "},{t:4,k:"example"},{t:3,v:". Działa też "},{t:4,k:"mdi"},{t:3,v:" i kod szesnastkowy ("},{t:4,k:"hex"},{t:3,v:"). Firmware zawiera tylko te ikony; każda inna nazwa pokazuje trójkąt ostrzegawczy. Kliknij ikonę, aby skopiować jej nazwę."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Przydatne do powiadomień"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj ikony"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Szukaj po nazwie lub opisie…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Dostępne też: ikony sterowania i pogody"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Kopiuj "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Brak ikony dla „"},{t:4,k:"query"},{t:3,v:"”. Nieznane nazwy pokazują trójkąt ostrzegawczy ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Wpisz nazwę w polu "},{t:4,k:"field"},{t:3,v:". To pastelowe odcienie kafelków, z ciemnym tekstem. Pusta lub nieznana nazwa daje białą kartę. Kliknij, aby skopiować."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Alert od razu budzi przyciemniony lub wygaszony ekran i pojawia się nad każdą stroną, każdą otwartą kartą światła i warstwą czuwania."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Budzi ekran."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Dopóki karta jest widoczna, podświetlenie ma normalną jasność. Czuwanie i godziny nocne czekają. Po naciśnięciu przycisku zwykły czas do czuwania biegnie od nowa."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Świeci do naciśnięcia przycisku."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" czeka na przycisk bez względu na to, jak długo to trwa. Przy "},{t:4,k:"minute"},{t:3,v:" karta znika po minucie, ale przycisk zamyka ją wcześniej."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Limit czasu."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" miga podświetleniem cztery razy, gdy przychodzi alert (około sekundy), a potem zostawia ekran włączony."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Miganie."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Nowy alert zastępuje bieżący; alerty się nie kumulują. Zastąpiony alert zgłasza się jako "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zastępowanie."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" usuwa kartę, na przykład gdy drzwi są już otwarte. Gdy nie ma alertu, ta akcja nic nie robi."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Zdalne zamykanie."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" nic nie robi; kartę zamyka tylko przycisk. Dzięki temu dotknięcie budzące ekran nigdy przypadkiem nie zamknie alertu."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Dotknięcie obok karty"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Każde zakończenie alertu wywołuje zdarzenie "},{t:4,k:"event"},{t:3,v:" z polami "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (nazwa urządzenia) i "},{t:4,k:"device_id"},{t:3,v:", które dodaje Home Assistant. Zobaczysz je w sekcji Ustawienia → Narzędzia → Zdarzenia."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Kiedy"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Czekanie, aż ktoś naciśnie przycisk"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Użyj "},{t:4,k:"bold"},{t:3,v:": pomarańczowy dla drzwi, czerwony dla dymu lub wody, zielony dla „gotowe”. Tekst zawsze pozostaje ciemny i czytelny."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"osobnego koloru dla każdego rodzaju powiadomienia"}},short:{t:0,b:{t:2,i:[{t:3,v:"Tytuł niech będzie "},{t:4,k:"bold"},{t:3,v:"; ekran pokazuje około dwudziestu znaków w jednym wierszu, a dłuższy tytuł kończy wielokropkiem. Szczegóły umieść w podtytule."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"krótki"}},button:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" zamienia powiadomienie w pytanie: „Idę”, „Widzę”, „Wyłącz”. Zdarzenie powie Ci potem, kto odpowiedział."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"Własny tekst przycisku"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Alert, który sam się rozwiązuje (drzwi się otwierają, ktoś wyjmuje pranie), zamknij w tej samej automatyzacji akcją "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Wszystkie ekrany? Wywołaj "},{t:4,k:"event"},{t:3,v:" raz (zobacz „Wszystkie ekrany naraz”). Ekrany nadal działają niezależnie i każdy zgłasza się z własnym polem "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Wolisz "},{t:4,k:"bold"},{t:3,v:" o automatyzację? Zainstaluj umiejętność ESP Screens w sekcji Ustawienia → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"poprosić Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Dzwonek: pokaż alert i poczekaj, aż ktoś naciśnie przycisk."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Ktoś idzie do drzwi."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Zaawansowane · lokalne nadpisanie"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Nadpisanie YAML"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"Nadpisanie YAML · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Ten mały plik należy do Ciebie. Jest wczytywany po wspólnym pakiecie ekranu i zostaje na miejscu, gdy ESP Screens się aktualizuje. Zmieniaj tu szczegóły sprzętu, na przykład model wyświetlacza."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"Co można bezpiecznie zmieniać?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"Wyświetlacz, ekran dotykowy, substitutions, piny i inne szczegóły urządzenia. Nazwa, Wi-Fi, API, OTA i odnośniki do pakietów pozostają zarządzane przez aplikację."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Aktywne"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Gotowe do dołączenia"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"Lokalne nadpisanie YAML"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Użyj przykładu"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyść"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 znak"},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaki"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" znaków"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 wiersz"},{t:2,i:[{t:4,k:"n"},{t:3,v:" wiersze"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" wierszy"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz i sprawdź"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz nadpisanie"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Nie znaleziono profilu ESPHome dla tego ekranu."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"Zmiany tutaj zadziałają przy następnej kompilacji."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Zapisz raz, aby dołączyć ten plik do profilu."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"Sprawdzanie i zapisywanie…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. Nadpisanie zostaje zachowane podczas aktualizacji firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano nadpisanie YAML."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Zapisano. ESPHome sprawdza cały profil…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome sprawdza profil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"ESPHome sprawdza profil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"Cały profil jest poprawny. Można bezpiecznie kompilować i instalować."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"ESPHome odrzucił cały profil. Pełny log znajdziesz w sekcji „Firmware i USB”."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Zastąpić obecny tekst przykładem?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Wczytano przykład. Zapisz go, kiedy zechcesz."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Wyczyścić lokalne nadpisanie?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"Po zapisaniu nadpisanie będzie puste."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Dom"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nieznany"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"niedostępny"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"grzanie/chłodzenie"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"tylko wentylator"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"grzanie"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"chłodzenie"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"osuszanie"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"wentylator"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"podgrzewanie wstępne"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"rozmrażanie"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"otwieranie"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"zamykanie"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"odtwarzanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"tryb czuwania"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"w domu"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"poza domem"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"powyżej horyzontu"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"poniżej horyzontu"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"zadokowany"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"sprzątanie"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"wstrzymano"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"wraca do stacji dokującej"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"brak aktywności"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"słonecznie"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"pogodna noc"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"pochmurno"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"częściowe zachmurzenie"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszczowo"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"ulewa"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"opady śniegu"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"deszcz ze śniegiem"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"mgła"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"grad"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"wyładowania atmosferyczne"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"burza"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"wietrznie"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"warunki nadzwyczajne"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Low"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"Charging"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ładowania"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"zimno"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"połączono"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"rozłączono"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"gorąco"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"odblokowano"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"zablokowano"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"w ruchu"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"brak ruchu"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"podłączono"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"odłączono"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"włączono"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"wyłączono"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Home"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Away"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"problem"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"ok"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"działa"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"nie działa"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"zagrożenie"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"brak zagrożenia"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Tampering detected"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"dostępna aktualizacja"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"brak aktualizacji"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"wykryto"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"brak"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"otwarto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"zamknięto"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Aktywuj"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Uruchom"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Naciśnij"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Przed chwilą"}},minutes_ago:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min temu"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 godzinę temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" godziny temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" godzin temu"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Wczoraj"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 dzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" dni temu"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 tydzień temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodnie temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" tygodni temu"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 miesiąc temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesiące temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" miesięcy temu"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"1 rok temu"},{t:2,i:[{t:4,k:"n"},{t:3,v:" lata temu"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" lat temu"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 godzinę"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godziny"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" godzin"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Jutro"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3}],s:"Za 1 dzień"},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]},{t:2,i:[{t:3,v:"Za "},{t:4,k:"n"},{t:3,v:" dni"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"AM"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"PM"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"niedziela"}},{t:0,b:{t:2,i:[{t:3}],s:"poniedziałek"}},{t:0,b:{t:2,i:[{t:3}],s:"wtorek"}},{t:0,b:{t:2,i:[{t:3}],s:"środa"}},{t:0,b:{t:2,i:[{t:3}],s:"czwartek"}},{t:0,b:{t:2,i:[{t:3}],s:"piątek"}},{t:0,b:{t:2,i:[{t:3}],s:"sobota"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"niedz."}},{t:0,b:{t:2,i:[{t:3}],s:"pon."}},{t:0,b:{t:2,i:[{t:3}],s:"wt."}},{t:0,b:{t:2,i:[{t:3}],s:"śr."}},{t:0,b:{t:2,i:[{t:3}],s:"czw."}},{t:0,b:{t:2,i:[{t:3}],s:"pt."}},{t:0,b:{t:2,i:[{t:3}],s:"sob."}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"nie"}},{t:0,b:{t:2,i:[{t:3}],s:"pon"}},{t:0,b:{t:2,i:[{t:3}],s:"wt"}},{t:0,b:{t:2,i:[{t:3}],s:"śr"}},{t:0,b:{t:2,i:[{t:3}],s:"czw"}},{t:0,b:{t:2,i:[{t:3}],s:"pt"}},{t:0,b:{t:2,i:[{t:3}],s:"sob"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"stycznia"}},{t:0,b:{t:2,i:[{t:3}],s:"lutego"}},{t:0,b:{t:2,i:[{t:3}],s:"marca"}},{t:0,b:{t:2,i:[{t:3}],s:"kwietnia"}},{t:0,b:{t:2,i:[{t:3}],s:"maja"}},{t:0,b:{t:2,i:[{t:3}],s:"czerwca"}},{t:0,b:{t:2,i:[{t:3}],s:"lipca"}},{t:0,b:{t:2,i:[{t:3}],s:"sierpnia"}},{t:0,b:{t:2,i:[{t:3}],s:"września"}},{t:0,b:{t:2,i:[{t:3}],s:"października"}},{t:0,b:{t:2,i:[{t:3}],s:"listopada"}},{t:0,b:{t:2,i:[{t:3}],s:"grudnia"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"sty"}},{t:0,b:{t:2,i:[{t:3}],s:"lut"}},{t:0,b:{t:2,i:[{t:3}],s:"mar"}},{t:0,b:{t:2,i:[{t:3}],s:"kwi"}},{t:0,b:{t:2,i:[{t:3}],s:"maj"}},{t:0,b:{t:2,i:[{t:3}],s:"cze"}},{t:0,b:{t:2,i:[{t:3}],s:"lip"}},{t:0,b:{t:2,i:[{t:3}],s:"sie"}},{t:0,b:{t:2,i:[{t:3}],s:"wrz"}},{t:0,b:{t:2,i:[{t:3}],s:"paź"}},{t:0,b:{t:2,i:[{t:3}],s:"lis"}},{t:0,b:{t:2,i:[{t:3}],s:"gru"}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Strona "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pt-Brrep2mC.js b/screen_manager/app/static/assets/pt-Brrep2mC.js new file mode 100644 index 0000000..1f671dd --- /dev/null +++ b/screen_manager/app/static/assets/pt-Brrep2mC.js @@ -0,0 +1 @@ +const t={editor:{common:{undo:{t:0,b:{t:2,i:[{t:3}],s:"Desfazer"}},online:{t:0,b:{t:2,i:[{t:3}],s:"Online"}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"desconhecido"}},unsaved:{t:0,b:{t:2,i:[{t:3}],s:"Alterações não guardadas"}},cancel:{t:0,b:{t:2,i:[{t:3}],s:"Cancelar"}},open_integrations:{t:0,b:{t:2,i:[{t:3}],s:"Abrir Dispositivos & serviços"}},save_send:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e enviar"}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A guardar…"}},read_current_data:{t:0,b:{t:2,i:[{t:3}],s:"Ler dados atuais"}},results:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" resultado. Continue a escrever para filtrar."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" resultados. Continue a escrever para filtrar."}]}]}},close:{t:0,b:{t:2,i:[{t:3}],s:"Fechar"}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover"}},change:{t:0,b:{t:2,i:[{t:3}],s:"Alterar"}},loading:{t:0,b:{t:2,i:[{t:3}],s:"A carregar…"}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Voltar"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar"}}},nav:{new_screen:{t:0,b:{t:2,i:[{t:3}],s:"Novo ecrã"}},firmware:{t:0,b:{t:2,i:[{t:3}],s:"Firmware e USB"}},alerts:{t:0,b:{t:2,i:[{t:3}],s:"Alertas"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições"}},new_screen_detail:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar"}}},api:{failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou. Recarregue a página e tente novamente."}}},copy:{api_key:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Chave API copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A chave API está selecionada. Copie-a com Ctrl+C ou Command+C."}}},layout_json:{copied:{t:0,b:{t:2,i:[{t:3}],s:"JSON do layout copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O JSON do layout está selecionado. Copie-o com Ctrl+C ou Command+C."}}},action_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da ação copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da ação está selecionado. Copie-o com Ctrl+C ou Command+C."}}},yaml:{copied:{t:0,b:{t:2,i:[{t:3}],s:"YAML copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O YAML está selecionado. Copie-o com Ctrl+C ou Command+C."}}},icon_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome do ícone copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome do ícone está selecionado. Copie-o com Ctrl+C ou Command+C."}}},empty_color:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Cor vazia copiada."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"A cor vazia está selecionada. Copie-a com Ctrl+C ou Command+C."}}},color_name:{copied:{t:0,b:{t:2,i:[{t:3}],s:"Nome da cor copiado."}},selected:{t:0,b:{t:2,i:[{t:3}],s:"O nome da cor está selecionado. Copie-o com Ctrl+C ou Command+C."}}}},sidebar:{connection:{unreachable:{t:0,b:{t:2,i:[{t:3}],s:"Página de gestão inacessível · a tentar novamente…"}},connected:{t:0,b:{t:2,i:[{t:3}],s:"Ligado ao Home Assistant"}},reconnecting:{t:0,b:{t:2,i:[{t:3}],s:"A ligar novamente ao Home Assistant…"}}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},refresh:{t:0,b:{t:2,i:[{t:3}],s:"Recarregar"}},update:{pill:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar"}},queued:{t:0,b:{t:2,i:[{t:3}],s:"Na fila para atualizar"}},available:{t:0,b:{t:2,i:[{t:3,v:"Atualização para "},{t:4,k:"version"}]}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome com este nome de dispositivo."}},whats_new:{t:0,b:{t:2,i:[{t:3}],s:"Novidades"}},full_log:{t:0,b:{t:2,i:[{t:3}],s:"Registo completo"}}},host:{hint:{t:0,b:{t:2,i:[{t:3}],s:"O endereço IP, só desta vez; o firmware novo passa a comunicá-lo sozinho."}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP, p. ex. 192.168.1.50"}},label:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP"}},start:{t:0,b:{t:2,i:[{t:3}],s:"Iniciar"}}},pending:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Instalado, mas ainda não está no Home Assistant. Adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e ative «Permitir que o dispositivo execute ações do Home Assistant» em Configurar."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Firmware descarregado; ainda não está no Home Assistant. Instale-o no ecrã com o ESPHome Web e depois adicione o dispositivo ESPHome descoberto em Configuração → Dispositivos & serviços, cole lá a chave API e permita as ações do Home Assistant em Configurar."}},not_flashed:{t:0,b:{t:2,i:[{t:3,v:"Ainda não está no Home Assistant. Já instalou o firmware? Adicione o dispositivo ESPHome em Configuração → Dispositivos & serviços e depois permita as ações do Home Assistant em Configurar. Ainda não? Firmware e USB → "},{t:4,k:"file"},{t:3,v:"."}]}}},copy_api_key:{t:0,b:{t:2,i:[{t:3}],s:"Copiar chave API"}}},palette:{groups:{screens:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},actions:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},add:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar a este ecrã"}}},alerts_detail:{t:0,b:{t:2,i:[{t:3}],s:"Guia rápido e um alerta de teste"}},settings_detail:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações, Claude"}},nothing_to_save:{t:0,b:{t:2,i:[{t:3}],s:"Nada para guardar"}},identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar este ecrã"}},identify_detail:{t:0,b:{t:2,i:[{t:3}],s:"Faz piscar a retroiluminação e mostra um cartão"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa de um firmware mais recente"}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},export_detail:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar e copiar como JSON"}},placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Procurar ecrãs, entidades, ações…"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Sem resultados. Escreva parte do nome de um ecrã, entidade ou ação."}}},empty:{choose:{title:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Escolha um dos seus ecrãs à esquerda para alterar os mosaicos, a barra superior e as definições."}}},start:{title:{t:0,b:{t:2,i:[{t:3}],s:"Comece com um ecrã"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ligue um CYD ou um Guition por USB à máquina do Home Assistant. Perfil, firmware e primeira instalação ficam feitos de uma só vez."}},button:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novo ecrã"}}}},screen_view:{confirm:{switch:{t:0,b:{t:2,i:[{t:3}],s:"Tem alterações não guardadas. Abrir outro ecrã mesmo assim?"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado por uma cópia do layout do outro ecrã?"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o layout não guardado pelo importado?"}}},saved:{current:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O seu ecrã está a ser atualizado."}},other:{t:0,b:{t:2,i:[{t:3,v:"Guardado. "},{t:4,k:"name"},{t:3,v:" está a ser atualizado."}]}},other_unnamed:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ecrã está a ser atualizado."}},newer_edit:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. A sua alteração mais recente ainda não foi enviada: prima Guardar e enviar outra vez."}}},identified:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" pisca e mostra um cartão durante alguns segundos."}]}},offline:{t:0,b:{t:2,i:[{t:3}],s:"Offline · as alterações ficam guardadas"}},tabs:{layout:{t:0,b:{t:2,i:[{t:3}],s:"Layout"}},settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições do ecrã"}}},sent:{t:0,b:{t:2,i:[{t:3}],s:"Guardado · enviado para o ecrã"}},all_saved:{t:0,b:{t:2,i:[{t:3}],s:"Tudo guardado"}},more:{t:0,b:{t:2,i:[{t:3}],s:"Mais"}},menu:{identify:{t:0,b:{t:2,i:[{t:3}],s:"Identificar"}},identify_hint:{t:0,b:{t:2,i:[{t:3}],s:"faz piscar o ecrã"}},identify_needs:{t:0,b:{t:2,i:[{t:3}],s:"Precisa do firmware 0.2.31 ou mais recente"}},inspect_hint:{t:0,b:{t:2,i:[{t:3}],s:"do Home Assistant"}},copy:{t:0,b:{t:2,i:[{t:3}],s:"Copiar layout de…"}},copy_screens:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},copy_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum outro ecrã"}},copy_tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaico"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" mosaicos"}]}]}},export:{t:0,b:{t:2,i:[{t:3}],s:"Exportar layout"}},import:{t:0,b:{t:2,i:[{t:3}],s:"Importar layout…"}},override:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},override_hint:{t:0,b:{t:2,i:[{t:3}],s:"avançado"}},override_none:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar firmware"}}}},layout:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido: "},{t:4,k:"name"}]}},no_room:{t:0,b:{t:2,i:[{t:3,v:"Não há espaço para este mosaico na página "},{t:4,k:"page"},{t:3,v:"."}]}},no_free_page:{t:0,b:{t:2,i:[{t:3}],s:"Não há nenhuma página livre para um mosaico de página inteira. Liberte primeiro uma página."}},page_taken:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã já tem um mosaico que leva à página "},{t:4,k:"page"},{t:3,v:"."}]}},copied:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado. Prima Guardar e enviar quando estiver bem."}]}},copied_part:{t:0,b:{t:2,i:[{t:3,v:"Layout de "},{t:4,k:"name"},{t:3,v:" copiado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},imported:{t:0,b:{t:2,i:[{t:3}],s:"Layout importado. Prima Guardar e enviar quando estiver bem."}},imported_part:{t:0,b:{t:2,i:[{t:3,v:"Layout importado: "},{t:4,k:"kept"},{t:3,v:" de "},{t:4,k:"total"},{t:3,v:" mosaicos são compatíveis com o firmware deste ecrã. Prima Guardar e enviar quando estiver bem."}]}},not_json:{t:0,b:{t:2,i:[{t:3}],s:"Isso não é JSON. Exporte primeiro um layout ou cole um de outro ESP Screens."}},no_tiles_in_file:{t:0,b:{t:2,i:[{t:3}],s:"Este ficheiro não tem mosaicos. Era esperado um layout exportado do ESP Screens."}},count:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" página · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" páginas · "},{t:4,k:"tiles"},{t:3,v:" / "},{t:4,k:"limit"},{t:3,v:" mosaicos"}]}]}},no_tiles:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a primeira luz, cena ou dispositivo a partir da biblioteca."}},how_to:{t:0,b:{t:2,i:[{t:3}],s:"Toque na barra superior ou num mosaico para o alterar. Arraste para mover; largue na página seguinte para criar uma nova."}},positions_hint:{t:0,b:{t:2,i:[{t:3,v:"Os espaços vazios e as posições fixas funcionam a partir do firmware 0.2.26. Até essa atualização, este ecrã (firmware "},{t:4,k:"firmware"},{t:3,v:") sobe os mosaicos para o primeiro espaço livre."}]}},aria:{t:0,b:{t:2,i:[{t:3}],s:"Layout do ecrã"}},add_page:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar página"}},max_pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" página"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" páginas"}]}]}}},page:{label:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"page"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover página"}},remove_title:{t:0,b:{t:2,i:[{t:3}],s:"As páginas seguintes sobem uma posição"}},edit_bar:{t:0,b:{t:2,i:[{t:3}],s:"Editar barra superior"}},cell:{title:{t:0,b:{t:2,i:[{t:3}],s:"Espaço vazio. Clique para adicionar aqui um mosaico ou arraste um para cá."}},aria:{t:0,b:{t:2,i:[{t:3,v:"Espaço vazio "},{t:4,k:"slot"},{t:3,v:" na página "},{t:4,k:"page"},{t:3,v:": adicione aqui o próximo mosaico"}]}},next:{t:0,b:{t:2,i:[{t:3}],s:"O próximo mosaico fica aqui"}},empty:{t:0,b:{t:2,i:[{t:3}],s:"Vazio"}}}},library:{title:{t:0,b:{t:2,i:[{t:3}],s:"Biblioteca"}},entities:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" entidade"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" entidades"}]}]}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome, dispositivo ou divisão…"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar uma entidade"}},filters:{all:{t:0,b:{t:2,i:[{t:3}],s:"Tudo"}},light:{t:0,b:{t:2,i:[{t:3}],s:"Luzes"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptores"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ações"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Scripts"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinhas"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Coberturas"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cenas"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensores"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valores"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletores"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoas"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizadores"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},room:{t:0,b:{t:2,i:[{t:3}],s:"Divisão"}},all_rooms:{t:0,b:{t:2,i:[{t:3}],s:"Todas as divisões"}},hide_placed:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar adicionadas"}},hide_placed_title:{t:0,b:{t:2,i:[{t:3}],s:"Ocultar o que já está neste ecrã"}},all_placed:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que está aqui já está neste ecrã."}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada. Experimente outro nome, divisão ou filtro."}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos."}]}]}},full_update:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Neste ecrã cabe "},{t:4,k:"n"},{t:3,v:" mosaico; atualize o firmware para ter 48."}]},{t:2,i:[{t:3,v:"Neste ecrã cabem "},{t:4,k:"n"},{t:3,v:" mosaicos; atualize o firmware para ter 48."}]}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para uma página ou toque em + para adicionar ao primeiro espaço livre. ⌘K procura em tudo."}}},domains:{light:{t:0,b:{t:2,i:[{t:3}],s:"Luz"}},climate:{t:0,b:{t:2,i:[{t:3}],s:"Climatização"}},vacuum:{t:0,b:{t:2,i:[{t:3}],s:"Aspirador"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventoinha"}},cover:{t:0,b:{t:2,i:[{t:3}],s:"Cobertura"}},media_player:{t:0,b:{t:2,i:[{t:3}],s:"Multimédia"}},sensor:{t:0,b:{t:2,i:[{t:3}],s:"Sensor"}},binary_sensor:{t:0,b:{t:2,i:[{t:3}],s:"Estado"}},switch:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},input_boolean:{t:0,b:{t:2,i:[{t:3}],s:"Interruptor"}},scene:{t:0,b:{t:2,i:[{t:3}],s:"Cena"}},script:{t:0,b:{t:2,i:[{t:3}],s:"Script"}},weather:{t:0,b:{t:2,i:[{t:3}],s:"Clima"}},number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},input_number:{t:0,b:{t:2,i:[{t:3}],s:"Valor"}},select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},input_select:{t:0,b:{t:2,i:[{t:3}],s:"Seletor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},input_button:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},sun:{t:0,b:{t:2,i:[{t:3}],s:"Sol"}},timer:{t:0,b:{t:2,i:[{t:3}],s:"Temporizador"}},person:{t:0,b:{t:2,i:[{t:3}],s:"Pessoa"}},camera:{t:0,b:{t:2,i:[{t:3}],s:"Câmara"}},image:{t:0,b:{t:2,i:[{t:3}],s:"Imagem"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Entidade"}}},displays:{standard:{t:0,b:{t:2,i:[{t:3}],s:"padrão"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"gráfico"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"relógio analógico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"trajetória do sol"}}},sizes:{single:{t:0,b:{t:2,i:[{t:3}],s:"normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"duplo"}},full:{t:0,b:{t:2,i:[{t:3}],s:"página inteira"}}},tile:{name:{t:0,b:{t:2,i:[{t:3}],s:"Nome no ecrã"}},icon:{auto_ha:{t:0,b:{t:2,i:[{t:3}],s:"Automático (do Home Assistant)"}},auto_default:{t:0,b:{t:2,i:[{t:3}],s:"Automático (predefinido)"}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o ícone escolhido a partir do firmware 0.2.18."}}},goes_to:{label:{t:0,b:{t:2,i:[{t:3}],s:"Leva à página"}},empty:{t:0,b:{t:2,i:[{t:4,k:"page"},{t:3,v:" (vazia)"}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Os mosaicos de navegação precisam do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}},no_page:{t:0,b:{t:2,i:[{t:3,v:"Este ecrã não tem página "},{t:4,k:"page"},{t:3,v:", por isso um toque abre a última página. Escolha outra página."}]}},hint:{t:0,b:{t:2,i:[{t:3}],s:"Um toque no mosaico abre essa página."}}},display:{label:{t:0,b:{t:2,i:[{t:3}],s:"Apresentação"}},digital:{t:0,b:{t:2,i:[{t:3}],s:"Relógio digital"}},analog:{t:0,b:{t:2,i:[{t:3}],s:"Relógio analógico"}},standard:{t:0,b:{t:2,i:[{t:3}],s:"Nome e estado"}},watch:{t:0,b:{t:2,i:[{t:3}],s:"Valor grande"}},forecast:{t:0,b:{t:2,i:[{t:3}],s:"Previsão do tempo"}},graph:{t:0,b:{t:2,i:[{t:3}],s:"Gráfico"}},sunpath:{t:0,b:{t:2,i:[{t:3}],s:"Trajetória do sol"}},no_graph:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem valores numéricos para esta entidade, por isso o gráfico fica vazio. Escolha outra apresentação."}},no_forecast:{t:0,b:{t:2,i:[{t:3}],s:"Este serviço meteorológico não tem previsão diária no Home Assistant. Escolha outra apresentação."}}},size:{label:{t:0,b:{t:2,i:[{t:3}],s:"Tamanho"}},single:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},wide:{t:0,b:{t:2,i:[{t:3}],s:"Largura dupla"}},full:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira"}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Página inteira: um botão grande que se ilumina enquanto está ligado; em baixo fica um controlo deslizante, controlos ou um gráfico."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"Um mosaico de página inteira precisa do firmware 0.2.62: prima primeiro Atualizar na lista de ecrãs."}}},page:{label:{t:0,b:{t:2,i:[{t:3}],s:"Página"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Nova página"}}},controls:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo direto no mosaico"}},not_offered:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não oferece este controlo para esta entidade, por isso fica vazio no ecrã. Escolha outro."}},full_hint:{t:0,b:{t:2,i:[{t:3}],s:"Na parte de baixo do mosaico de página inteira; um toque em qualquer outro sítio funciona como definido abaixo."}},wide_hint:{t:0,b:{t:2,i:[{t:3}],s:"À direita do mosaico de largura dupla, como as linhas no Home Assistant. Tocar no nome funciona como definido abaixo."}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã mostra o controlo direto a partir do firmware 0.2.19; até lá, o mosaico fica como estava."}}},tap:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ao tocar"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Automático"}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Abrir controlo"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Só ver"}},toggle:{t:0,b:{t:2,i:[{t:3}],s:"Ligar / desligar"}},action:{t:0,b:{t:2,i:[{t:3}],s:"Executar ação"}},no_toggle:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não consegue ligar e desligar isto, por isso um toque não faz nada. Escolha outra opção."}},toggle_needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã liga e desliga isto a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque abre o respetivo cartão."}},hold:{t:0,b:{t:2,i:[{t:3}],s:"Mantenha o mosaico premido para abrir o respetivo cartão."}}},slider:{label:{t:0,b:{t:2,i:[{t:3}],s:"Controlo deslizante pequeno no mosaico"}},no:{t:0,b:{t:2,i:[{t:3}],s:"Não"}},yes:{t:0,b:{t:2,i:[{t:3}],s:"Sim, controlo direto"}},nothing:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não tem nada que um controlo deslizante possa alterar nesta entidade. Escolha Não."}}},history:{label:{t:0,b:{t:2,i:[{t:3}],s:"Histórico"}},hours:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" horas"}]}]}}},background:{label:{t:0,b:{t:2,i:[{t:3}],s:"Fundo pastel"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Fundo: "},{t:4,k:"name"}]}}}},tile_card:{label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:" da página "},{t:4,k:"page"},{t:3,v:". Enter: configurar; teclas de seta: mover"}]}},remove:{t:0,b:{t:2,i:[{t:3}],s:"Remover mosaico"}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"}]}}},action:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ação"}},asking:{t:0,b:{t:2,i:[{t:3}],s:"A perguntar ao Home Assistant que ações tem esta entidade…"}},not_answering:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant não está a responder neste momento. Tente novamente daqui a pouco."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha uma ação"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo alternar, posição ou reproduzir"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma ação"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma ação encontrada."}},gone:{t:0,b:{t:2,i:[{t:3}],s:"O Home Assistant já não oferece esta ação para esta entidade, por isso um toque não faz nada. Escolha outra."}},optional:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" (opcional)"}]}},not_set:{t:0,b:{t:2,i:[{t:3}],s:"Não definido"}},on:{t:0,b:{t:2,i:[{t:3}],s:"Ativado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desativado"}},needs:{t:0,b:{t:2,i:[{t:3,v:"O Home Assistant precisa de "},{t:4,k:"fields"},{t:3,v:"."}]}},needs_firmware:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã executa ações a partir do firmware 0.2.58: prima Atualizar na lista de ecrãs. Até lá, um toque funciona como Automático."}}},icon:{label:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},none:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure, por exemplo candeeiro, música ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},none_text_only:{t:0,b:{t:2,i:[{t:3}],s:"Sem ícone, só texto"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Ícone: "},{t:4,k:"name"}]}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhum ícone encontrado."}}},inspect:{title:{t:0,b:{t:2,i:[{t:3}],s:"Dados atuais"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Ligação, estado e propriedades suportadas"}},reading:{t:0,b:{t:2,i:[{t:3}],s:"A ler…"}},fetching:{t:0,b:{t:2,i:[{t:3}],s:"A obter o estado atual do HA…"}},status:{t:0,b:{t:2,i:[{t:3,v:"Estado: "},{t:4,k:"status"}]}},options:{t:0,b:{t:2,i:[{t:3,v:"Controlo deslizante pequeno: "},{t:4,k:"slider"},{t:3,v:" · Apresentação: "},{t:4,k:"display"},{t:3,v:" · Tamanho: "},{t:4,k:"size"},{t:3,v:" · Controlo: "},{t:4,k:"control"},{t:3,v:" · Fundo: "},{t:4,k:"background"}]}},yes:{t:0,b:{t:2,i:[{t:3}],s:"sim"}},no:{t:0,b:{t:2,i:[{t:3}],s:"não"}},control_none:{t:0,b:{t:2,i:[{t:3}],s:"nenhum"}},background_default:{t:0,b:{t:2,i:[{t:3}],s:"Predefinido"}},read_again:{t:0,b:{t:2,i:[{t:3}],s:"Ler novamente"}}},topbar:{removed:{t:0,b:{t:2,i:[{t:3,v:"Removido da barra superior: "},{t:4,k:"name"}]}},full:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Na barra superior cabe "},{t:4,k:"n"},{t:3,v:" elemento."}]},{t:2,i:[{t:3,v:"Na barra superior cabem "},{t:4,k:"n"},{t:3,v:" elementos."}]}]}},already:{t:0,b:{t:2,i:[{t:3}],s:"Isto já está na barra superior."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Barra superior"}},aria:{t:0,b:{t:2,i:[{t:3,v:"Barra superior: "},{t:4,k:"name"}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã; também funciona sem o Home Assistant"}},items:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},name:{t:0,b:{t:2,i:[{t:3}],s:"Esquerda: nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Por exemplo: Sala de estar"}},right:{t:0,b:{t:2,i:[{t:3}],s:"Direita: hora, sensores ou um relógio"}},item_label:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:", espaço "},{t:4,k:"slot"},{t:3,v:". Enter: configurar; setas: mover"}]}},remove_named:{t:0,b:{t:2,i:[{t:3,v:"Remover "},{t:4,k:"name"},{t:3,v:" da barra superior"}]}},max:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elemento"}]},{t:2,i:[{t:3,v:"No máximo "},{t:4,k:"n"},{t:3,v:" elementos"}]}]}},add_title:{t:0,b:{t:2,i:[{t:3}],s:"Adicione a hora, a data, o relógio analógico ou uma entidade"}},add_button:{t:0,b:{t:2,i:[{t:3}],s:"+ Adicionar hora, data ou uma entidade"}},hint:{overflow:{t:0,b:{t:2,i:[{t:3}],s:"Nem tudo cabe ao lado do nome: o ecrã omite os elementos tracejados. Remova um ou escolha um nome mais curto."}},reorder:{t:0,b:{t:2,i:[{t:3}],s:"Arraste para reordenar; toque num elemento para o configurar."}},needs_firmware:{t:0,b:{t:2,i:[{t:3,v:"Os sensores, a data e o relógio analógico aparecem a partir do firmware "},{t:4,k:"version"},{t:3,v:"; até essa atualização, este ecrã mostra o nome e, se a hora estiver na barra, o relógio."}]}}},detail:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto: agora não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"Não cabe ao lado do nome"}},dial:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador"}}},live:{hidden:{t:0,b:{t:2,i:[{t:3}],s:"Oculto neste momento: não está ativo"}},overflow:{t:0,b:{t:2,i:[{t:3}],s:"De momento não cabe ao lado do nome"}},looks:{t:0,b:{t:2,i:[{t:3}],s:"Assim fica no ecrã"}}},analog_sample:{t:0,b:{t:2,i:[{t:3}],s:"Mostrador pequeno com a hora"}},content:{label:{t:0,b:{t:2,i:[{t:3}],s:"O que mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Última alteração» continua a contar no próprio ecrã: «Agora mesmo», «Há 5 min», «Ontem»."}}},auto_icon:{t:0,b:{t:2,i:[{t:3}],s:"Automático (como no Home Assistant)"}},show:{label:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar"}},hint:{t:0,b:{t:2,i:[{t:3}],s:"«Apenas quando ativo» oculta o elemento enquanto estiver desligado, fechado, ausente ou a 0. Útil para uma porta aberta, uma máquina de lavar a funcionar ou quem está em casa."}}},clock_24:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 24 horas · altere em "},{t:4,k:"settings"}]}},clock_12:{t:0,b:{t:2,i:[{t:3,v:"Relógio de 12 horas · altere em "},{t:4,k:"settings"}]}},clock_settings:{t:0,b:{t:2,i:[{t:3}],s:"Definições → Idioma e região"}},date_hint:{t:0,b:{t:2,i:[{t:3,v:"Hoje: "},{t:4,k:"date"},{t:3,v:". A data segue o relógio do próprio ecrã."}]}},up:{t:0,b:{t:2,i:[{t:3}],s:"↑ Subir"}},down:{t:0,b:{t:2,i:[{t:3}],s:"↓ Descer"}},add:{title:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar à barra superior"}},slots:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaço usado"}]},{t:2,i:[{t:4,k:"used"},{t:3,v:" de "},{t:4,k:"n"},{t:3,v:" espaços usados"}]}]}},builtin:{t:0,b:{t:2,i:[{t:3}],s:"Do próprio ecrã"}},added:{t:0,b:{t:2,i:[{t:3}],s:"Já adicionado"}},suggestions:{t:0,b:{t:2,i:[{t:3}],s:"Sugestões do Home Assistant"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"Uma entidade"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procure por nome, divisão ou entidade, p. ex. temperatura ou porta"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar uma entidade para a barra superior"}},none_found:{t:0,b:{t:2,i:[{t:3}],s:"Nenhuma entidade encontrada."}}}},screen_settings:{groups:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},night:{t:0,b:{t:2,i:[{t:3}],s:"Noite"}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}}},rows:{brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho"}},dark_mode:{t:0,b:{t:2,i:[{t:3}],s:"Modo escuro"}},standby_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Espera automática"}},standby_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Espera após"}},standby_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho em espera"}},night_enabled:{t:0,b:{t:2,i:[{t:3}],s:"Modo noturno"}},night_start:{t:0,b:{t:2,i:[{t:3}],s:"Início"}},night_end:{t:0,b:{t:2,i:[{t:3}],s:"Fim"}},night_brightness:{t:0,b:{t:2,i:[{t:3}],s:"Brilho noturno"}},auto_home:{t:0,b:{t:2,i:[{t:3}],s:"Voltar à página 1"}},auto_home_seconds:{t:0,b:{t:2,i:[{t:3}],s:"Após"}},home_on_standby:{t:0,b:{t:2,i:[{t:3}],s:"Também em espera"}},swipe_pages:{t:0,b:{t:2,i:[{t:3}],s:"Deslizar entre páginas"}},page_buttons:{t:0,b:{t:2,i:[{t:3}],s:"Botões de página"}},rotation:{t:0,b:{t:2,i:[{t:3}],s:"Rotação"}}},duration:{seconds:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" s"}]}},minutes:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" min"}]}},hours:{t:0,b:{t:2,i:[{t:4,k:"n"},{t:3,v:" h"}]}},hours_minutes:{t:0,b:{t:2,i:[{t:4,k:"h"},{t:3,v:" h "},{t:4,k:"m"}]}}},time:{am:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da manhã"}]}},pm:{t:0,b:{t:2,i:[{t:4,k:"time"},{t:3,v:" da tarde"}]}}},other_screen_busy:{t:0,b:{t:2,i:[{t:3}],s:"Ainda se estão a guardar as definições do outro ecrã. Tente novamente daqui a pouco."}},reach:{intro:{t:0,b:{t:2,i:[{t:3}],s:"Os botões de página e o deslizar estão desativados, por isso só os mosaicos «Ir para a página» mudam de página."}},pages:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"a página "},{t:4,k:"list"}]},{t:2,i:[{t:3,v:"as páginas "},{t:4,k:"list"}]}]}},tiles:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:"."}]}]}},tiles_missing_one:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},tiles_missing_more:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaico «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]},{t:2,i:[{t:3,v:"Tem "},{t:4,k:"n"},{t:3,v:" mosaicos «Ir para a página», para "},{t:4,k:"targets"},{t:3,v:", mas nenhum para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Não tem mosaicos «Ir para a página»."}},none_missing_one:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},none_missing_more:{t:0,b:{t:2,i:[{t:3,v:"Não tem mosaicos «Ir para a página» para "},{t:4,k:"missing"},{t:3,v:", por isso não consegue lá chegar."}]}},cut_off:{t:0,b:{t:2,i:[{t:3,v:"Os mosaicos para "},{t:4,k:"pages"},{t:3,v:" só estão em páginas a que não consegue chegar."}]}},no_way_back:{t:0,b:{t:2,i:[{t:3,v:"Desde "},{t:4,k:"pages"},{t:3,v:", nenhum mosaico leva de volta à página 1."}]}}},status:{offline:{t:0,b:{t:2,i:[{t:3}],s:"Este ecrã está offline. Poderá alterar as definições quando voltar."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato no ecrã e aparecem aqui quando são feitas lá."}},app:{t:0,b:{t:2,i:[{t:3}],s:"As alterações aplicam-se de imediato. Com o firmware 0.2.49, o próprio ecrã guarda-as."}}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Esta entidade está desativada no Home Assistant ou o ecrã está a reiniciar."}},lower:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": menos"}]}},higher:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:": mais"}]}}},update:{starting:{t:0,b:{t:2,i:[{t:3}],s:"A iniciar a atualização…"}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},writing:{t:0,b:{t:2,i:[{t:3}],s:"A gravar o firmware por Wi-Fi…"}},phases:{install:{t:0,b:{t:2,i:[{t:3}],s:"A compilar e a instalar…"}},verify:{t:0,b:{t:2,i:[{t:3}],s:"À espera que o ecrã volte…"}},settle:{t:0,b:{t:2,i:[{t:3}],s:"A verificar se se mantém estável…"}}},new_language:{t:0,b:{t:2,i:[{t:3,v:"Novo idioma: "},{t:4,k:"name"}]}}},settings:{updates:{auto_on:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs vão passar a atualizar-se automaticamente à noite."}},auto_off:{t:0,b:{t:2,i:[{t:3}],s:"As atualizações automáticas estão desativadas."}},title:{t:0,b:{t:2,i:[{t:3}],s:"Atualizações de firmware"}},busy:{t:0,b:{t:2,i:[{t:3,v:"A atualizar para o firmware "},{t:4,k:"version"},{t:3,v:"…"}]}},no_screens:{t:0,b:{t:2,i:[{t:3,v:"Ainda não há nenhum ecrã emparelhado. Os novos ecrãs recebem o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},available:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"O firmware "},{t:4,k:"version"},{t:3,v:" está disponível para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},current:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs têm o firmware "},{t:4,k:"version"},{t:3,v:"."}]}},all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Atualizar "},{t:4,k:"n"},{t:3,v:" ecrã"}]},{t:2,i:[{t:3,v:"Atualizar os "},{t:4,k:"n"},{t:3,v:" ecrãs"}]}]}},whats_new:{t:0,b:{t:2,i:[{t:3,v:"Novidades do firmware "},{t:4,k:"version"}]}},auto_label:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar automaticamente todas as noites"}},auto_hint:{t:0,b:{t:2,i:[{t:3}],s:"Entre as 03:00 e as 06:00, um ecrã de cada vez. Para se houver um erro e comunica-o no Home Assistant."}}},claude:{installed:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. O Claude Code deteta-a de imediato."}},installed_restart:{t:0,b:{t:2,i:[{t:3}],s:"Habilidade instalada. Reinicie o Claude Code uma vez para que encontre a nova pasta de habilidades."}},text:{t:0,b:{t:2,i:[{t:3}],s:"Ensine o Claude a usar o ESP Screens e depois peça: «Mostra um alerta em todos os meus ecrãs quando a caixa do correio estiver cheia.» O Claude conhece os eventos de alerta e todos os campos, cores e ícones."}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar para o Claude Code"}},install_again:{t:0,b:{t:2,i:[{t:3}],s:"Instalar novamente"}},update:{t:0,b:{t:2,i:[{t:3}],s:"Atualizar a habilidade"}},not_installed:{t:0,b:{t:2,i:[{t:3}],s:"Não instalada"}},installed_chip:{t:0,b:{t:2,i:[{t:3}],s:"● Instalada"}},newer:{t:0,b:{t:2,i:[{t:3}],s:"Instalada · há uma versão mais recente"}},writes:{t:0,b:{t:2,i:[{t:3,v:"Para o Claude Code no Home Assistant. Escreve um ficheiro em "},{t:4,k:"path"},{t:3,v:"; instalar novamente substitui-o."}]}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar para o claude.ai"}},upload:{t:0,b:{t:2,i:[{t:3}],s:"Carregue o zip no Claude, em Personalizar → Habilidades."}}},title:{t:0,b:{t:2,i:[{t:3}],s:"Tudo o que rodeia os seus ecrãs."}},back:{t:0,b:{t:2,i:[{t:3}],s:"← Os meus ecrãs"}},screens:{title:{t:0,b:{t:2,i:[{t:3}],s:"Ecrãs"}},text:{t:0,b:{t:2,i:[{t:3}],s:"Adicione um ecrã, ou compile e reinstale o firmware de um que já tenha."}},firmware_detail:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar por USB ou Wi-Fi"}}},language:{title:{t:0,b:{t:2,i:[{t:3}],s:"Idioma e região"}},screen_language:{t:0,b:{t:2,i:[{t:3}],s:"Idioma dos ecrãs"}},auto:{t:0,b:{t:2,i:[{t:3,v:"Idioma do Home Assistant ("},{t:4,k:"name"},{t:3,v:")"}]}},auto_plain:{t:0,b:{t:2,i:[{t:3}],s:"Idioma do Home Assistant"}},ha_missing:{t:0,b:{t:2,i:[{t:3}],s:"Os ecrãs usam inglês até o idioma do Home Assistant estar disponível."}},unchecked:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · ainda não revisto, ajuda bem-vinda"}]}},help:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" ainda não foi revisto; toda a ajuda é bem-vinda: "},{t:4,k:"guide"}]}},guide:{t:0,b:{t:2,i:[{t:3}],s:"como traduzir"}},update_hint:{t:0,b:{t:2,i:[{t:3}],s:"Depois de uma alteração, cada ecrã precisa de uma atualização de firmware, uma compilação por ecrã: com o respetivo botão Atualizar ou nas atualizações noturnas."}},time:{t:0,b:{t:2,i:[{t:3}],s:"Formato de hora"}},time_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"clock"},{t:3,v:")"}]}},clock_24:{t:0,b:{t:2,i:[{t:3}],s:"24 horas"}},clock_12:{t:0,b:{t:2,i:[{t:3}],s:"12 horas"}},numbers:{t:0,b:{t:2,i:[{t:3}],s:"Formatação numérica"}},numbers_auto:{t:0,b:{t:2,i:[{t:3,v:"Automático, segue o idioma ("},{t:4,k:"example"},{t:3,v:")"}]}},profile:{t:0,b:{t:2,i:[{t:3,v:"O seu perfil do Home Assistant: "},{t:4,k:"formats"}]}},use_profile:{t:0,b:{t:2,i:[{t:3}],s:"Usar estes"}},editor_hint:{t:0,b:{t:2,i:[{t:3}],s:"O próprio editor segue o idioma do seu perfil do Home Assistant."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado."}},saved_language:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. Cada ecrã passa a usar o novo idioma na próxima atualização."}}},alerts:{text:{t:0,b:{t:2,i:[{t:3}],s:"Um cartão sobre todo o ecrã a partir de uma automatização, num ecrã ou em todos. O guia rápido tem os nomes das ações, os campos, os ícones e as cores, e um formulário para experimentar um alerta."}},detail:{t:0,b:{t:2,i:[{t:3}],s:"Notificações em ecrã inteiro, a partir de uma automatização"}}}},firmware:{title:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar o firmware dos ecrãs"}},intro:{t:0,b:{t:2,i:[{t:3,v:"A CLI do ESPHome integrada usa o seu próprio perfil (YAML com chaves) e os seus segredos. Escolha o perfil do ecrã e depois uma porta USB (ecrã ligado à máquina do Home Assistant), "},{t:4,k:"ota"},{t:3,v:" com o nome do anfitrião, ou "},{t:4,k:"download"},{t:3,v:" para instalar o firmware no ecrã a partir do seu próprio computador. "},{t:4,k:"check"},{t:3,v:" só valida, "},{t:4,k:"build"},{t:3,v:" compila e "},{t:4,k:"install"},{t:3,v:" instala o firmware no ecrã. Os seus mosaicos ficam como estão no ESP Screens. A primeira compilação demora alguns minutos."}]}},ota:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi / OTA"}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar"}},check:{t:0,b:{t:2,i:[{t:3}],s:"Verificar"}},build:{t:0,b:{t:2,i:[{t:3}],s:"Só compilar"}},install:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e instalar"}},build_download:{t:0,b:{t:2,i:[{t:3}],s:"Compilar e descarregar"}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome. Atualize a app para a versão 0.2.0."}},choose:{t:0,b:{t:2,i:[{t:3}],s:"Escolha o perfil pretendido e depois uma porta USB, um endereço IP ou Descarregar."}},profile:{t:0,b:{t:2,i:[{t:3}],s:"Perfil ESPHome"}},install_to:{t:0,b:{t:2,i:[{t:3}],s:"Instalar em"}},no_board:{t:0,b:{t:2,i:[{t:3}],s:"USB · ainda não foi encontrada nenhuma placa na máquina do Home Assistant"}},download_target:{t:0,b:{t:2,i:[{t:3}],s:"Descarregar · instalar a partir do seu próprio computador"}},host:{t:0,b:{t:2,i:[{t:3}],s:"Endereço IP ou nome do anfitrião"}},download_file:{t:0,b:{t:2,i:[{t:3,v:"Descarregar "},{t:4,k:"name"}]}},download_how:{t:0,b:{t:2,i:[{t:3,v:"Instale-o no ecrã com o "},{t:4,k:"esphome_web"},{t:3,v:" no Chrome ou no Edge: Connect, escolha a porta USB do ecrã, Install e selecione este ficheiro. Contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}]}}},installer:{title:{setup:{t:0,b:{t:2,i:[{t:3}],s:"Ligar e instalar."}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Perfil guardado."}},running:{t:0,b:{t:2,i:[{t:3}],s:"Um momento…"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para descarregar."}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído."}},failed:{t:0,b:{t:2,i:[{t:3}],s:"Não funcionou."}}},intro:{t:0,b:{t:2,i:[{t:3}],s:"O ESP Screens cria o perfil próprio do ecrã com chaves únicas e compila o firmware. Ligue o ecrã com um cabo USB de dados à máquina onde corre o Home Assistant, ou descarregue o firmware e instale-o no ecrã a partir do seu próprio computador."}},board:{t:0,b:{t:2,i:[{t:3}],s:"Que ecrã tem?"}},board_cyd:{t:0,b:{t:2,i:[{t:3}],s:"CYD · 2,8 polegadas"}},board_guition:{t:0,b:{t:2,i:[{t:3}],s:"Guition · 4 polegadas"}},name:{t:0,b:{t:2,i:[{t:3}],s:"Nome"}},name_placeholder:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã da sala"}},device_name:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo"}},customize:{t:0,b:{t:2,i:[{t:3}],s:"personalizar"}},name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Cada ecrã tem o seu próprio perfil com as suas próprias chaves. Quatro ecrãs? Faça isto quatro vezes com um nome diferente."}},device_name_hint:{t:0,b:{t:2,i:[{t:3}],s:"Letras minúsculas, algarismos e hífenes. Um nome diferente para cada ecrã."}},wifi:{title:{t:0,b:{t:2,i:[{t:3}],s:"Wi-Fi"}},ssid:{t:0,b:{t:2,i:[{t:3}],s:"Nome da rede Wi-Fi (2,4 GHz)"}},password:{t:0,b:{t:2,i:[{t:3}],s:"Palavra-passe da rede Wi-Fi"}},new:{t:0,b:{t:2,i:[{t:3}],s:"Preencha só uma vez: o ESP Screens guarda isto no secrets.yaml do ESPHome e os ecrãs seguintes usam-no automaticamente."}},missing:{t:0,b:{t:2,i:[{t:3}],s:"Ainda faltam os dados de Wi-Fi no seu secrets.yaml do ESPHome. O ESP Screens só preenche as linhas em falta."}},ready:{t:0,b:{t:2,i:[{t:3}],s:"A rede Wi-Fi vem do seu secrets.yaml do ESPHome."}},invalid:{t:0,b:{t:2,i:[{t:3}],s:"O secrets.yaml na pasta do ESPHome não é YAML válido. Corrija primeiro o ficheiro; não vai ser substituído."}}},install_via:{t:0,b:{t:2,i:[{t:3}],s:"Instalar através de"}},later:{t:0,b:{t:2,i:[{t:3}],s:"Mais tarde · só guardar o perfil"}},target:{usb:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã com um cabo USB de dados à máquina do Home Assistant; a lista atualiza-se sozinha. Ou escolha Descarregar para usar o seu próprio computador."}},download:{t:0,b:{t:2,i:[{t:3}],s:"Descarregue o firmware e instale-o no ecrã a partir do seu próprio computador, no Chrome ou no Edge. Depois disso, as atualizações são feitas por Wi-Fi."}},later:{t:0,b:{t:2,i:[{t:3}],s:"O perfil fica na pasta do ESPHome. Pode instalar mais tarde através de Firmware e USB ou a partir do ESPHome Device Builder."}},several:{t:0,b:{t:2,i:[{t:3}],s:"Há mais do que uma placa ligada: escolha a porta deste ecrã."}},once:{t:0,b:{t:2,i:[{t:3}],s:"Uma vez por USB; depois disso, tudo é sem fios."}}},install:{t:0,b:{t:2,i:[{t:3}],s:"Instalar"}},save_profile:{t:0,b:{t:2,i:[{t:3}],s:"Guardar perfil"}},busy:{t:0,b:{t:2,i:[{t:3,v:"Já está a decorrer uma compilação ou instalação ("},{t:4,k:"file"},{t:3,v:"). Aguarde que termine."}]}},no_cli:{t:0,b:{t:2,i:[{t:3}],s:"Falta a CLI do ESPHome nesta instalação; só é possível guardar o perfil."}},progress:{saved:{t:0,b:{t:2,i:[{t:4,k:"file"},{t:3,v:" está na pasta do ESPHome"}]}},writing:{t:0,b:{t:2,i:[{t:3,v:"A gravar o firmware em "},{t:4,k:"name"},{t:3,v:"…"}]}},building:{t:0,b:{t:2,i:[{t:3}],s:"A compilar o firmware…"}},ready:{t:0,b:{t:2,i:[{t:3,v:"O firmware para "},{t:4,k:"name"},{t:3,v:" está pronto"}]}},installed:{t:0,b:{t:2,i:[{t:3,v:"O firmware já está em "},{t:4,k:"name"}]}},build_failed:{t:0,b:{t:2,i:[{t:3}],s:"A compilação falhou"}},install_failed:{t:0,b:{t:2,i:[{t:3}],s:"A instalação falhou"}}},detail:{saved:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o mais tarde a partir de Firmware e USB: escolha este perfil e depois a porta USB da máquina do Home Assistant, ou Descarregar para instalar o firmware no ecrã a partir do seu próprio computador. Guarde a chave API para o emparelhamento:"}},uploading:{t:0,b:{t:2,i:[{t:3}],s:"Não desligue ainda o cabo USB."}},building:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a instalação continua e volta a encontrá-la em Novo ecrã."}},building_download:{t:0,b:{t:2,i:[{t:3}],s:"A primeira compilação demora alguns minutos num Raspberry Pi. Pode sair desta página: a compilação continua e volta a encontrá-la em Novo ecrã."}},downloaded:{t:0,b:{t:2,i:[{t:3}],s:"Instale-o no ecrã a partir do seu próprio computador e depois emparelhe o ecrã com o Home Assistant."}},booted:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. Emparelhe-o agora com o Home Assistant:"}},booted_cyd:{t:0,b:{t:2,i:[{t:3}],s:"O ecrã arranca e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes. Emparelhe-o agora com o Home Assistant:"}},see_log:{t:0,b:{t:2,i:[{t:3}],s:"Consulte o registo abaixo."}}},download_steps:{plug:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" com um cabo USB de dados."}]}},plug_bold:{t:0,b:{t:2,i:[{t:3}],s:"Ligue o ecrã ao seu computador"}},open:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" no Chrome ou no Edge, clique em Connect e escolha a porta USB do ecrã."}]}},open_bold:{t:0,b:{t:2,i:[{t:3,v:"Abra o "},{t:4,k:"esphome_web"}]}},install:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi."}]}},install_cyd:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" e selecione "},{t:4,k:"file"},{t:3,v:". O ecrã reinicia e liga-se à sua rede Wi-Fi. O CYD pede primeiro uma calibração do toque: toque nas cruzes."}]}},install_bold:{t:0,b:{t:2,i:[{t:3}],s:"Clique em Install"}}},download_keep:{t:0,b:{t:2,i:[{t:3}],s:"O ficheiro contém a sua palavra-passe de Wi-Fi e as chaves do ecrã: não o partilhe."}},api_key:{t:0,b:{t:2,i:[{t:3}],s:"Chave API"}},pairing:{ha:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Isto acontece fora do ESP Screens. O Home Assistant descobre "},{t:4,k:"name"},{t:3,v:" como dispositivo ESPHome; clique em Adicionar. Não foi descoberto? Adicione o ESPHome manualmente com o endereço IP do ecrã."}]}},ha_bold:{t:0,b:{t:2,i:[{t:3}],s:"Vá ao Home Assistant → Configuração → Dispositivos & serviços."}},key:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" acima quando o Home Assistant pedir a chave de encriptação."}]}},key_bold:{t:0,b:{t:2,i:[{t:3}],s:"Cole a chave API"}},actions:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" integração ESPHome → Configurar → «Permitir que o dispositivo execute ações do Home Assistant». Sem isto, o ecrã vê tudo mas não controla nada."}]}},actions_bold:{t:0,b:{t:2,i:[{t:3}],s:"Permita as ações do HA:"}},tiles:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" De volta ao ESP Screens, o ecrã aparece na lista à esquerda em cerca de trinta segundos; até lá, aparece aí como «ainda não está no Home Assistant»."}]}},tiles_bold:{t:0,b:{t:2,i:[{t:3}],s:"Escolha os seus mosaicos."}}},log:{t:0,b:{t:2,i:[{t:3}],s:"Registo do ESPHome"}},retry:{t:0,b:{t:2,i:[{t:3}],s:"Tentar novamente"}},another:{t:0,b:{t:2,i:[{t:3}],s:"Instalar outro ecrã"}},start_over:{t:0,b:{t:2,i:[{t:3}],s:"Recomeçar"}},done:{t:0,b:{t:2,i:[{t:3}],s:"Concluído"}}},alerts:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Alertas · guia rápido"}},title:{t:0,b:{t:2,i:[{t:3}],s:"Uma notificação em ecrã inteiro, a partir de uma automatização."}},intro:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a ação "},{t:4,k:"action"},{t:3,v:". Coloca um cartão por cima de tudo, acorda o ecrã e mantém a retroiluminação no brilho normal até alguém tocar no botão ou o tempo limite acabar. O próprio Home Assistant não mostra explicações nem listas pendentes para as ações do ESPHome; tudo o que pode preencher está aqui."}]}},loading:{t:0,b:{t:2,i:[{t:3}],s:"O guia rápido ainda está a carregar; um momento."}},example:{title:{t:0,b:{t:2,i:[{t:3}],s:"Está alguém à porta"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Porta 3, traseira"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Já vou"}}},sections:{t:0,b:{t:2,i:[{t:3}],s:"Secções"}},nav:{try:{t:0,b:{t:2,i:[{t:3}],s:"Experimente"}},screens:{t:0,b:{t:2,i:[{t:3}],s:"Os seus ecrãs"}},howto:{t:0,b:{t:2,i:[{t:3}],s:"Numa automatização"}},all:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs"}},fields:{t:0,b:{t:2,i:[{t:3}],s:"Os campos"}},icons:{t:0,b:{t:2,i:[{t:3}],s:"Ícones"}},colors:{t:0,b:{t:2,i:[{t:3}],s:"Cores"}},behaviour:{t:0,b:{t:2,i:[{t:3}],s:"Comportamento"}},events:{t:0,b:{t:2,i:[{t:3}],s:"Eventos"}},tips:{t:0,b:{t:2,i:[{t:3}],s:"Dicas"}}},try:{text:{t:0,b:{t:2,i:[{t:3}],s:"Envie agora um alerta, com os mesmos campos que uma automatização envia. O ecrã mostra o cartão e, com a intermitência ativada, faz piscar a retroiluminação."}},screen:{t:0,b:{t:2,i:[{t:3}],s:"Ecrã"}},all:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs (prontos: "},{t:4,k:"ready"},{t:3,v:")"}]}},not_ready:{t:0,b:{t:2,i:[{t:4,k:"name"},{t:3,v:" · não está pronto"}]}},title:{t:0,b:{t:2,i:[{t:3}],s:"Título"}},subtitle:{t:0,b:{t:2,i:[{t:3}],s:"Subtítulo"}},icon:{t:0,b:{t:2,i:[{t:3}],s:"Ícone"}},color:{t:0,b:{t:2,i:[{t:3}],s:"Cor"}},button:{t:0,b:{t:2,i:[{t:3}],s:"Texto do botão"}},timeout:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite (segundos; 0 espera pelo botão)"}},flash:{t:0,b:{t:2,i:[{t:3}],s:"Fazer piscar a retroiluminação"}},flash_hint:{t:0,b:{t:2,i:[{t:3}],s:"Quatro vezes quando o alerta chega."}},sending:{t:0,b:{t:2,i:[{t:3}],s:"A enviar…"}},send:{t:0,b:{t:2,i:[{t:3}],s:"Enviar alerta"}},sent_all:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrã."}]},{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"n"},{t:3,v:" ecrãs."}]}]}},sent_to:{t:0,b:{t:2,i:[{t:3,v:"Enviado para "},{t:4,k:"name"},{t:3,v:"."}]}},sent_one:{t:0,b:{t:2,i:[{t:3}],s:"Enviado para o ecrã."}},skipped:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrã ignorado (offline ou firmware antigo)."}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" ecrãs ignorados (offline ou firmware antigo)."}]}]}},left_empty:{t:0,b:{t:2,i:[{t:3,v:"Deixados vazios: "},{t:4,k:"fields"},{t:3,v:"."}]}},nothing:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ecrã o conseguiu mostrar: verifique se há um ecrã online com o firmware "},{t:4,k:"version"},{t:3,v:" ou mais recente."}]}}},white:{t:0,b:{t:2,i:[{t:3}],s:"Branco (predefinido)"}},screens:{text:{t:0,b:{t:2,i:[{t:3,v:"Cada ecrã tem a sua própria ação, com o nome do dispositivo. A partir do firmware "},{t:4,k:"version"},{t:3,v:"; atualize um ecrã mais antigo com o respetivo botão Atualizar em Ecrãs."}]}},none:{t:0,b:{t:2,i:[{t:3}],s:"Ainda não há nenhum ecrã emparelhado. Instale um através de Novo ecrã; a ação aparece assim que o Home Assistant vir o ecrã."}},ready:{t:0,b:{t:2,i:[{t:3,v:"● firmware "},{t:4,k:"version"}]}},update:{t:0,b:{t:2,i:[{t:3,v:"Atualização necessária · firmware "},{t:4,k:"version"}]}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Nome do dispositivo desconhecido · atualize o ecrã"}},show:{t:0,b:{t:2,i:[{t:3}],s:"Mostrar alerta"}},dismiss:{t:0,b:{t:2,i:[{t:3}],s:"Descartar alerta"}}},howto:{add:{t:0,b:{t:2,i:[{t:3,v:"Clique em "},{t:4,k:"add"},{t:3,v:" e procure "},{t:4,k:"esphome"},{t:3,v:". Escolha a ação do seu ecrã: o Home Assistant chama-lhe «Performs the action show_alert of the node "},{t:4,k:"device"},{t:3,v:"»."}]}},add_bold:{t:0,b:{t:2,i:[{t:3}],s:"Adicionar ação"}},device:{t:0,b:{t:2,i:[{t:3}],s:"nome do dispositivo"}},fields:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" O Home Assistant pede os sete; deixe vazio o que não usar ("},{t:4,k:"empty"},{t:3,v:", "},{t:4,k:"zero"},{t:3,v:", desativado)."}]}},fields_bold:{t:0,b:{t:2,i:[{t:3}],s:"Preencha os campos."}},yaml:{t:0,b:{t:2,i:[{t:3,v:"Prefere YAML? Escolha "},{t:4,k:"edit"},{t:3,v:" na ação e cole o exemplo abaixo."}]}},example_for:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo para"}},no_screen:{t:0,b:{t:2,i:[{t:3}],s:"um ecrã (ainda não emparelhado)"}}},edit_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Editar em YAML"}},copy_yaml:{t:0,b:{t:2,i:[{t:3}],s:"Copiar YAML"}},all:{title:{t:0,b:{t:2,i:[{t:3}],s:"Todos os ecrãs de uma vez"}},text:{t:0,b:{t:2,i:[{t:3,v:"Dispare o evento "},{t:4,k:"show"},{t:3,v:" com os mesmos campos e o ESP Screens passa o alerta a todos os ecrãs online, incluindo os que adicionar mais tarde. "},{t:4,k:"dismiss"},{t:3,v:" remove-o em todo o lado. Numa automatização, adicione a ação "},{t:4,k:"event"},{t:3,v:" ou cole o exemplo em "},{t:4,k:"edit"},{t:3,v:". Omita os campos que não usar. Para isto, o ESP Screens tem de estar em execução."}]}},event:{t:0,b:{t:2,i:[{t:3}],s:"Dispara evento manual"}}},fields:{text:{t:0,b:{t:2,i:[{t:3}],s:"O texto é livre; o limite é em bytes e uma letra acentuada conta como dois. O que não couber termina em reticências (título) ou é descartado (subtítulo)."}},field:{t:0,b:{t:2,i:[{t:3}],s:"Campo"}},type:{t:0,b:{t:2,i:[{t:3}],s:"Tipo"}},what:{t:0,b:{t:2,i:[{t:3}],s:"O que faz"}},example:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo"}},limit:{t:0,b:{t:2,i:[{t:3}],s:"Limite"}},types:{string:{t:0,b:{t:2,i:[{t:3}],s:"texto"}},int:{t:0,b:{t:2,i:[{t:3}],s:"número"}},bool:{t:0,b:{t:2,i:[{t:3}],s:"ativado / desativado"}},entity:{t:0,b:{t:2,i:[{t:3}],s:"entidade"}}},bytes:{t:0,b:{t:2,i:[{t:3,v:"CYD "},{t:4,k:"cyd"},{t:3,v:" · Guition "},{t:4,k:"guition"},{t:3,v:" bytes"}]}},seconds:{t:0,b:{t:2,i:[{t:3}],s:"de 0 a 86400 s"}},camera_limit:{t:0,b:{t:2,i:[{t:3}],s:"Guition, firmware 0.2.57+"}}},icons:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:", por exemplo "},{t:4,k:"example"},{t:3,v:". "},{t:4,k:"mdi"},{t:3,v:" e o código hexadecimal ("},{t:4,k:"hex"},{t:3,v:") também funcionam. O firmware só inclui estes ícones; qualquer outro nome mostra o triângulo de aviso. Toque num ícone para copiar o nome."}]}},handy:{t:0,b:{t:2,i:[{t:3}],s:"Úteis para notificações"}},search_label:{t:0,b:{t:2,i:[{t:3}],s:"Procurar um ícone"}},search:{t:0,b:{t:2,i:[{t:3}],s:"Procurar por nome ou descrição…"}},extra:{t:0,b:{t:2,i:[{t:3}],s:"Também disponíveis: ícones de controlo e de meteorologia"}},copy:{t:0,b:{t:2,i:[{t:3,v:"Copiar "},{t:4,k:"name"}]}},none:{t:0,b:{t:2,i:[{t:3,v:"Nenhum ícone para «"},{t:4,k:"query"},{t:3,v:"». Os nomes desconhecidos mostram o triângulo de aviso ("},{t:4,k:"fallback"},{t:3,v:")."}]}}},colors:{text:{t:0,b:{t:2,i:[{t:3,v:"Preencha o nome em "},{t:4,k:"field"},{t:3,v:". São os tons pastel dos mosaicos, com texto escuro. Vazio ou desconhecido dá o cartão branco. Toque para copiar."}]}}},behaviour:{wakes:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta acorda de imediato um ecrã com brilho reduzido ou apagado e aparece por cima de todas as páginas, de todos os cartões de luz abertos e da camada de espera."}]}},wakes_bold:{t:0,b:{t:2,i:[{t:3}],s:"Acorda o ecrã."}},on:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Enquanto o cartão estiver visível, a retroiluminação mantém o brilho normal. A espera automática e o modo noturno ficam em pausa. Depois de premir o botão, o tempo de espera normal recomeça."}]}},on_bold:{t:0,b:{t:2,i:[{t:3}],s:"Aceso até premir o botão."}},timeout:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"zero"},{t:3,v:" espera pelo botão, demore o que demorar. Com "},{t:4,k:"minute"},{t:3,v:", o cartão desaparece ao fim de um minuto, mas o botão fecha-o mais cedo."}]}},timeout_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tempo limite."}},blinking:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"flash"},{t:3,v:" faz piscar a retroiluminação quatro vezes quando o alerta chega (cerca de um segundo) e depois deixa o ecrã ligado."}]}},blinking_bold:{t:0,b:{t:2,i:[{t:3}],s:"Intermitência."}},replacing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" Um alerta novo substitui o atual; não se acumulam. O alerta substituído é reportado como "},{t:4,k:"replaced"},{t:3,v:"."}]}},replacing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Substituição."}},closing:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" "},{t:4,k:"dismiss"},{t:3,v:" remove o cartão, por exemplo se a porta já estiver aberta. Sem alerta, essa ação não faz nada."}]}},closing_bold:{t:0,b:{t:2,i:[{t:3}],s:"Fecho remoto."}},beside:{t:0,b:{t:2,i:[{t:4,k:"bold"},{t:3,v:" não faz nada; só o botão o fecha. Assim, um toque para acordar o ecrã nunca descarta o alerta por acidente."}]}},beside_bold:{t:0,b:{t:2,i:[{t:3}],s:"Tocar fora do cartão"}}},events:{text:{t:0,b:{t:2,i:[{t:3,v:"Sempre que um alerta termina, é disparado o evento "},{t:4,k:"event"},{t:3,v:" com "},{t:4,k:"action"},{t:3,v:", "},{t:4,k:"title"},{t:3,v:", "},{t:4,k:"screen"},{t:3,v:" (o nome do dispositivo) e o "},{t:4,k:"device_id"},{t:3,v:" que o Home Assistant acrescenta. Visível em Configuração → Ferramentas → Eventos."}]}},when:{t:0,b:{t:2,i:[{t:3}],s:"Quando"}},wait:{t:0,b:{t:2,i:[{t:3}],s:"Esperar que alguém prima o botão"}}},tips:{color:{t:0,b:{t:2,i:[{t:3,v:"Use uma "},{t:4,k:"bold"},{t:3,v:": laranja para a porta, vermelho para fumo ou água, verde para «concluído». O texto fica sempre escuro e legível."}]}},color_bold:{t:0,b:{t:2,i:[{t:3}],s:"cor por tipo de notificação"}},short:{t:0,b:{t:2,i:[{t:3,v:"Mantenha o título "},{t:4,k:"bold"},{t:3,v:"; um ecrã mostra cerca de vinte caracteres numa linha e termina um título mais longo com reticências. Coloque os detalhes no subtítulo."}]}},short_bold:{t:0,b:{t:2,i:[{t:3}],s:"curto"}},button:{t:0,b:{t:2,i:[{t:3,v:"Um "},{t:4,k:"bold"},{t:3,v:" transforma a notificação numa pergunta: «Já vou», «Visto», «Desligar». Depois, o evento diz-lhe quem respondeu."}]}},button_bold:{t:0,b:{t:2,i:[{t:3}],s:"texto de botão personalizado"}},resolve:{t:0,b:{t:2,i:[{t:3,v:"Para um alerta que se resolve sozinho (a porta abre-se, alguém tira a roupa da máquina), feche-o na mesma automatização com "},{t:4,k:"dismiss"},{t:3,v:"."}]}},every:{t:0,b:{t:2,i:[{t:3,v:"Todos os ecrãs? Dispare "},{t:4,k:"event"},{t:3,v:" uma vez (ver «Todos os ecrãs de uma vez»). Os ecrãs continuam a funcionar de forma independente e cada um reporta com o seu próprio "},{t:4,k:"screen"},{t:3,v:"."}]}},claude:{t:0,b:{t:2,i:[{t:3,v:"Prefere "},{t:4,k:"bold"},{t:3,v:" que faça a automatização? Instale a habilidade do ESP Screens em Definições → Claude."}]}},claude_bold:{t:0,b:{t:2,i:[{t:3}],s:"pedir ao Claude"}}},wait_yaml:{comment:{t:0,b:{t:2,i:[{t:3}],s:"Campainha: mostra o alerta e espera que alguém prima o botão."}},message:{t:0,b:{t:2,i:[{t:3}],s:"Vem alguém à porta."}}}},override:{eyebrow:{t:0,b:{t:2,i:[{t:3}],s:"Avançado · personalização local"}},title:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado"}},title_named:{t:0,b:{t:2,i:[{t:3,v:"YAML personalizado · "},{t:4,k:"name"}]}},intro:{t:0,b:{t:2,i:[{t:3}],s:"Este pequeno ficheiro é seu. É carregado depois do pacote partilhado dos ecrãs e mantém-se quando o ESP Screens é atualizado. Altere aqui detalhes específicos do hardware, como o modelo do ecrã."}},safe_title:{t:0,b:{t:2,i:[{t:3}],s:"O que é seguro alterar?"}},safe_text:{t:0,b:{t:2,i:[{t:3}],s:"As secções display, touchscreen e substitutions, os pinos e outros detalhes do dispositivo. O nome, a rede Wi-Fi, a API, a OTA e as ligações aos pacotes continuam a ser geridos pelo ESP Screens."}},active:{t:0,b:{t:2,i:[{t:3}],s:"Ativo"}},ready:{t:0,b:{t:2,i:[{t:3}],s:"Pronto para associar"}},editor_label:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado local"}},use_example:{t:0,b:{t:2,i:[{t:3}],s:"Usar exemplo"}},clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar"}},characters:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" carácter"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" caracteres"}]}]}},lines:{t:0,b:{t:1,c:[{t:2,i:[{t:4,k:"n"},{t:3,v:" linha"}]},{t:2,i:[{t:4,k:"n"},{t:3,v:" linhas"}]}]}},save_check:{t:0,b:{t:2,i:[{t:3}],s:"Guardar e verificar"}},save:{t:0,b:{t:2,i:[{t:3}],s:"Guardar YAML"}},no_profile:{t:0,b:{t:2,i:[{t:3}],s:"Não foi encontrado nenhum perfil ESPHome para este ecrã."}},attached:{t:0,b:{t:2,i:[{t:3}],s:"As alterações feitas aqui aplicam-se na próxima compilação."}},not_attached:{t:0,b:{t:2,i:[{t:3}],s:"Guarde uma vez para associar este ficheiro ao perfil."}},saving:{t:0,b:{t:2,i:[{t:3}],s:"A verificar e a guardar…"}},saved:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O YAML personalizado mantém-se nas atualizações de firmware."}},saved_toast:{t:0,b:{t:2,i:[{t:3}],s:"YAML personalizado guardado."}},checking:{t:0,b:{t:2,i:[{t:3}],s:"Guardado. O ESPHome está a verificar o perfil completo…"}},checking_profile:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome está a verificar o perfil…"}},checking_stage:{t:0,b:{t:2,i:[{t:3,v:"O ESPHome está a verificar o perfil… "},{t:4,k:"stage"}]}},valid:{t:0,b:{t:2,i:[{t:3}],s:"O perfil completo é válido. Pode compilar e instalar com segurança."}},rejected:{t:0,b:{t:2,i:[{t:3}],s:"O ESPHome rejeitou o perfil completo. Consulte Firmware e USB para ver o registo completo."}},confirm_example:{t:0,b:{t:2,i:[{t:3}],s:"Substituir o texto atual pelo exemplo?"}},example_loaded:{t:0,b:{t:2,i:[{t:3}],s:"Exemplo carregado. Guarde-o quando estiver pronto."}},confirm_clear:{t:0,b:{t:2,i:[{t:3}],s:"Limpar o YAML personalizado local?"}},cleared:{t:0,b:{t:2,i:[{t:3}],s:"O YAML personalizado ficará vazio quando guardar."}}},mockup:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},unknown:{t:0,b:{t:2,i:[{t:3}],s:"Desconhecido"}}}},screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponível"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Arrefecer"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer/Arrefecer"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Secar"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"A aquecer"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"A arrefecer"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Desumidificação"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Pré-Aquecimento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Descongelação"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"A abrir"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"A fechar"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"A reproduzir"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausado"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Acima do horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Abaixo do horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Na Base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"A Limpar"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Em pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"A regressar à base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensolarado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Limpo, noite"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Chuvoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Aguaceiros"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, chuvoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nevoeiro"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada, chuva"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excecional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"A carregar"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Não está a carregar"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frio"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Quente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detetada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sem luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Destrancada"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Trancado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmido"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Em movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Em casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Em execução"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Adulteração detetada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Atualização disponível"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Atualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Ativar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Executar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pressione"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Agora mesmo"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ontem"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semana"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" mês"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" ano"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" anos"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Amanhã"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"da manhã"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"da tarde"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"terça-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"dom"}},{t:0,b:{t:2,i:[{t:3}],s:"seg"}},{t:0,b:{t:2,i:[{t:3}],s:"ter"}},{t:0,b:{t:2,i:[{t:3}],s:"qua"}},{t:0,b:{t:2,i:[{t:3}],s:"qui"}},{t:0,b:{t:2,i:[{t:3}],s:"sex"}},{t:0,b:{t:2,i:[{t:3}],s:"sáb"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janeiro"}},{t:0,b:{t:2,i:[{t:3}],s:"fevereiro"}},{t:0,b:{t:2,i:[{t:3}],s:"março"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"maio"}},{t:0,b:{t:2,i:[{t:3}],s:"junho"}},{t:0,b:{t:2,i:[{t:3}],s:"julho"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"setembro"}},{t:0,b:{t:2,i:[{t:3}],s:"outubro"}},{t:0,b:{t:2,i:[{t:3}],s:"novembro"}},{t:0,b:{t:2,i:[{t:3}],s:"dezembro"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan."}},{t:0,b:{t:2,i:[{t:3}],s:"fev."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"abr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai."}},{t:0,b:{t:2,i:[{t:3}],s:"jun."}},{t:0,b:{t:2,i:[{t:3}],s:"jul."}},{t:0,b:{t:2,i:[{t:3}],s:"ago."}},{t:0,b:{t:2,i:[{t:3}],s:"set."}},{t:0,b:{t:2,i:[{t:3}],s:"out."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}},percent:{t:0,b:{t:2,i:[{t:3}],s:"%"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/assets/pt-Brv5sHYu.js b/screen_manager/app/static/assets/pt-Brv5sHYu.js deleted file mode 100644 index 254af28..0000000 --- a/screen_manager/app/static/assets/pt-Brv5sHYu.js +++ /dev/null @@ -1 +0,0 @@ -const t={screen:{ha:{on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},unavailable:{t:0,b:{t:2,i:[{t:3}],s:"Indisponível"}},climate:{off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},heat:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer"}},cool:{t:0,b:{t:2,i:[{t:3}],s:"Arrefecer"}},heat_cool:{t:0,b:{t:2,i:[{t:3}],s:"Aquecer/Arrefecer"}},auto:{t:0,b:{t:2,i:[{t:3}],s:"Auto"}},dry:{t:0,b:{t:2,i:[{t:3}],s:"Secar"}},fan_only:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}}},hvac_action:{heating:{t:0,b:{t:2,i:[{t:3}],s:"A aquecer"}},cooling:{t:0,b:{t:2,i:[{t:3}],s:"A arrefecer"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},drying:{t:0,b:{t:2,i:[{t:3}],s:"Desumidificação"}},fan:{t:0,b:{t:2,i:[{t:3}],s:"Ventilação"}},preheating:{t:0,b:{t:2,i:[{t:3}],s:"Pré-Aquecimento"}},defrosting:{t:0,b:{t:2,i:[{t:3}],s:"Descongelação"}}},cover:{open:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},closed:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},opening:{t:0,b:{t:2,i:[{t:3}],s:"A abrir"}},closing:{t:0,b:{t:2,i:[{t:3}],s:"A fechar"}}},media:{playing:{t:0,b:{t:2,i:[{t:3}],s:"A reproduzir"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Pausado"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}},standby:{t:0,b:{t:2,i:[{t:3}],s:"Standby"}}},person:{home:{t:0,b:{t:2,i:[{t:3}],s:"Casa"}},not_home:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}}},sun:{above_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Acima do horizonte"}},below_horizon:{t:0,b:{t:2,i:[{t:3}],s:"Abaixo do horizonte"}}},vacuum:{docked:{t:0,b:{t:2,i:[{t:3}],s:"Na Base"}},cleaning:{t:0,b:{t:2,i:[{t:3}],s:"A Limpar"}},paused:{t:0,b:{t:2,i:[{t:3}],s:"Em pausa"}},returning:{t:0,b:{t:2,i:[{t:3}],s:"A regressar à base"}},idle:{t:0,b:{t:2,i:[{t:3}],s:"Inativo"}}},weather:{sunny:{t:0,b:{t:2,i:[{t:3}],s:"Ensolarado"}},clear_night:{t:0,b:{t:2,i:[{t:3}],s:"Limpo, noite"}},cloudy:{t:0,b:{t:2,i:[{t:3}],s:"Nublado"}},partlycloudy:{t:0,b:{t:2,i:[{t:3}],s:"Parcialmente nublado"}},rainy:{t:0,b:{t:2,i:[{t:3}],s:"Chuvoso"}},pouring:{t:0,b:{t:2,i:[{t:3}],s:"Aguaceiros"}},snowy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso"}},snowy_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Nevoso, chuvoso"}},fog:{t:0,b:{t:2,i:[{t:3}],s:"Nevoeiro"}},hail:{t:0,b:{t:2,i:[{t:3}],s:"Granizo"}},lightning:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada"}},lightning_rainy:{t:0,b:{t:2,i:[{t:3}],s:"Trovoada, chuva"}},windy:{t:0,b:{t:2,i:[{t:3}],s:"Ventoso"}},exceptional:{t:0,b:{t:2,i:[{t:3}],s:"Excecional"}}},binary:{battery_on:{t:0,b:{t:2,i:[{t:3}],s:"Baixo"}},battery_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},battery_charging_on:{t:0,b:{t:2,i:[{t:3}],s:"A carregar"}},battery_charging_off:{t:0,b:{t:2,i:[{t:3}],s:"Não está a carregar"}},carbon_monoxide_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},carbon_monoxide_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},cold_on:{t:0,b:{t:2,i:[{t:3}],s:"Frio"}},cold_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},connectivity_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},connectivity_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},garage_door_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},garage_door_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechado"}},gas_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},gas_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},heat_on:{t:0,b:{t:2,i:[{t:3}],s:"Quente"}},heat_off:{t:0,b:{t:2,i:[{t:3}],s:"Normal"}},light_on:{t:0,b:{t:2,i:[{t:3}],s:"Luz detetada"}},light_off:{t:0,b:{t:2,i:[{t:3}],s:"Sem luz"}},lock_on:{t:0,b:{t:2,i:[{t:3}],s:"Destrancada"}},lock_off:{t:0,b:{t:2,i:[{t:3}],s:"Trancado"}},moisture_on:{t:0,b:{t:2,i:[{t:3}],s:"Húmido"}},moisture_off:{t:0,b:{t:2,i:[{t:3}],s:"Seco"}},motion_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},motion_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},moving_on:{t:0,b:{t:2,i:[{t:3}],s:"Em movimento"}},moving_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},occupancy_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},occupancy_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},opening_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberta"}},opening_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}},plug_on:{t:0,b:{t:2,i:[{t:3}],s:"Ligado"}},plug_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},power_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},power_off:{t:0,b:{t:2,i:[{t:3}],s:"Desligado"}},presence_on:{t:0,b:{t:2,i:[{t:3}],s:"Em casa"}},presence_off:{t:0,b:{t:2,i:[{t:3}],s:"Ausente"}},problem_on:{t:0,b:{t:2,i:[{t:3}],s:"Problema"}},problem_off:{t:0,b:{t:2,i:[{t:3}],s:"OK"}},running_on:{t:0,b:{t:2,i:[{t:3}],s:"Em execução"}},running_off:{t:0,b:{t:2,i:[{t:3}],s:"Parado"}},safety_on:{t:0,b:{t:2,i:[{t:3}],s:"Inseguro"}},safety_off:{t:0,b:{t:2,i:[{t:3}],s:"Seguro"}},smoke_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},smoke_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},sound_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},sound_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},tamper_on:{t:0,b:{t:2,i:[{t:3}],s:"Adulteração detetada"}},tamper_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},update_on:{t:0,b:{t:2,i:[{t:3}],s:"Atualização disponível"}},update_off:{t:0,b:{t:2,i:[{t:3}],s:"Atualizado"}},vibration_on:{t:0,b:{t:2,i:[{t:3}],s:"Detetado"}},vibration_off:{t:0,b:{t:2,i:[{t:3}],s:"Limpo"}},window_on:{t:0,b:{t:2,i:[{t:3}],s:"Aberto"}},window_off:{t:0,b:{t:2,i:[{t:3}],s:"Fechada"}}},button:{activate:{t:0,b:{t:2,i:[{t:3}],s:"Ativar"}},run:{t:0,b:{t:2,i:[{t:3}],s:"Executar"}},press:{t:0,b:{t:2,i:[{t:3}],s:"Pressione"}}}},time:{just_now:{t:0,b:{t:2,i:[{t:3}],s:"Agora mesmo"}},minutes_ago:{t:0,b:{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" min"}]}},hours_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},yesterday:{t:0,b:{t:2,i:[{t:3}],s:"Ontem"}},days_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},weeks_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semana"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" semanas"}]}]}},months_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" mês"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" meses"}]}]}},years_ago:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" ano"}]},{t:2,i:[{t:3,v:"Há "},{t:4,k:"n"},{t:3,v:" anos"}]}]}},in_minutes:{t:0,b:{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" min"}]}},in_hours:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" hora"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" horas"}]}]}},tomorrow:{t:0,b:{t:2,i:[{t:3}],s:"Amanhã"}},in_days:{t:0,b:{t:1,c:[{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dia"}]},{t:2,i:[{t:3,v:"Daqui a "},{t:4,k:"n"},{t:3,v:" dias"}]}]}},am:{t:0,b:{t:2,i:[{t:3}],s:"da manhã"}},pm:{t:0,b:{t:2,i:[{t:3}],s:"da tarde"}}},date:{weekdays:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"terça-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta-feira"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_short:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],weekdays_min:[{t:0,b:{t:2,i:[{t:3}],s:"domingo"}},{t:0,b:{t:2,i:[{t:3}],s:"segunda"}},{t:0,b:{t:2,i:[{t:3}],s:"terça"}},{t:0,b:{t:2,i:[{t:3}],s:"quarta"}},{t:0,b:{t:2,i:[{t:3}],s:"quinta"}},{t:0,b:{t:2,i:[{t:3}],s:"sexta"}},{t:0,b:{t:2,i:[{t:3}],s:"sábado"}}],months:[{t:0,b:{t:2,i:[{t:3}],s:"janeiro"}},{t:0,b:{t:2,i:[{t:3}],s:"fevereiro"}},{t:0,b:{t:2,i:[{t:3}],s:"março"}},{t:0,b:{t:2,i:[{t:3}],s:"abril"}},{t:0,b:{t:2,i:[{t:3}],s:"maio"}},{t:0,b:{t:2,i:[{t:3}],s:"junho"}},{t:0,b:{t:2,i:[{t:3}],s:"julho"}},{t:0,b:{t:2,i:[{t:3}],s:"agosto"}},{t:0,b:{t:2,i:[{t:3}],s:"setembro"}},{t:0,b:{t:2,i:[{t:3}],s:"outubro"}},{t:0,b:{t:2,i:[{t:3}],s:"novembro"}},{t:0,b:{t:2,i:[{t:3}],s:"dezembro"}}],months_short:[{t:0,b:{t:2,i:[{t:3}],s:"jan."}},{t:0,b:{t:2,i:[{t:3}],s:"fev."}},{t:0,b:{t:2,i:[{t:3}],s:"mar."}},{t:0,b:{t:2,i:[{t:3}],s:"abr."}},{t:0,b:{t:2,i:[{t:3}],s:"mai."}},{t:0,b:{t:2,i:[{t:3}],s:"jun."}},{t:0,b:{t:2,i:[{t:3}],s:"jul."}},{t:0,b:{t:2,i:[{t:3}],s:"ago."}},{t:0,b:{t:2,i:[{t:3}],s:"set."}},{t:0,b:{t:2,i:[{t:3}],s:"out."}},{t:0,b:{t:2,i:[{t:3}],s:"nov."}},{t:0,b:{t:2,i:[{t:3}],s:"dez."}}],top_bar:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},full:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"day"},{t:3,v:" de "},{t:4,k:"month"}]}},day_month:{t:0,b:{t:2,i:[{t:4,k:"day"},{t:3,v:" "},{t:4,k:"month"}]}},weekday_time:{t:0,b:{t:2,i:[{t:4,k:"weekday"},{t:3,v:", "},{t:4,k:"time"}]}}},number:{decimal:{t:0,b:{t:2,i:[{t:3}],s:","}},group:{t:0,b:{t:2,i:[{t:3}],s:" "}},group_min:{t:0,b:{t:2,i:[{t:3}],s:"2"}}},tile:{page:{t:0,b:{t:2,i:[{t:3,v:"Página "},{t:4,k:"n"}]}}}}};export{t as default}; diff --git a/screen_manager/app/static/index.html b/screen_manager/app/static/index.html index 108cb73..e7a6331 100644 --- a/screen_manager/app/static/index.html +++ b/screen_manager/app/static/index.html @@ -5,7 +5,7 @@ ESP Screens - + diff --git a/screen_manager/translations/de.json b/screen_manager/translations/de.json index aa8cc31..fc86229 100644 --- a/screen_manager/translations/de.json +++ b/screen_manager/translations/de.json @@ -560,7 +560,15 @@ "too_large": "Layout gespeichert; zu groß für eine Nachricht an den Bildschirm, entferne ein paar Kacheln", "sent": "An Home Assistant gesendet", "offline": "Bildschirm offline; Änderungen gespeichert", - "retrying": "Senden fehlgeschlagen; wird automatisch wiederholt" + "retrying": "Senden fehlgeschlagen; wird automatisch wiederholt", + "screen": { + "synced": "Synchronisiert", + "loading_tiles": "Kacheln werden geladen", + "layout_received": "Layout empfangen", + "resend_needed": "Erneutes Senden nötig", + "ready": "Bereit für die Kacheln", + "error": "Fehler: {reason}" + } }, "updates": { "offline": "Bildschirm war offline; neuer Versuch beim nächsten Mal.", @@ -1755,6 +1763,10 @@ "every": "Alle Bildschirme? Löse {event} einmal aus (siehe „Alle Bildschirme auf einmal“). Die Bildschirme arbeiten trotzdem unabhängig, und jeder meldet sich mit seinem eigenen {screen}.", "claude": "Für die Automation lieber {bold}? Installiere den ESP Screens-Skill unter Einstellungen → Claude.", "claude_bold": "Claude fragen" + }, + "wait_yaml": { + "comment": "Türklingel: die Meldung zeigen und warten, bis jemand die Taste drückt.", + "message": "Jemand kommt zur Tür." } }, "override": { diff --git a/screen_manager/translations/en.json b/screen_manager/translations/en.json index b3788bf..3f1861f 100644 --- a/screen_manager/translations/en.json +++ b/screen_manager/translations/en.json @@ -560,7 +560,15 @@ "too_large": "Layout saved; too large for one message to the screen, remove a few tiles", "sent": "Sent to Home Assistant", "offline": "Screen offline; changes saved", - "retrying": "Sending failed; retrying automatically" + "retrying": "Sending failed; retrying automatically", + "screen": { + "synced": "Synced", + "loading_tiles": "Loading tiles", + "layout_received": "Layout received", + "resend_needed": "Resend needed", + "ready": "Ready for tile configuration", + "error": "Error: {reason}" + } }, "updates": { "offline": "Screen was offline; will retry next time.", @@ -1755,6 +1763,10 @@ "every": "Every screen? Fire {event} once (see All screens at once). The screens still work independently and each reports with its own {screen}.", "claude": "Rather {bold} for the automation? Install the ESP Screens skill under Settings → Claude.", "claude_bold": "ask Claude" + }, + "wait_yaml": { + "comment": "Doorbell: show the alert and wait until someone presses the button.", + "message": "Someone is coming to the door." } }, "override": { diff --git a/screen_manager/translations/es.json b/screen_manager/translations/es.json index 8b621b1..8eeb908 100644 --- a/screen_manager/translations/es.json +++ b/screen_manager/translations/es.json @@ -560,7 +560,15 @@ "too_large": "Diseño guardado; es demasiado grande para un mensaje a la pantalla, elimina algunos mosaicos", "sent": "Enviado a Home Assistant", "offline": "Pantalla sin conexión; cambios guardados", - "retrying": "Error al enviar; se reintenta automáticamente" + "retrying": "Error al enviar; se reintenta automáticamente", + "screen": { + "synced": "Sincronizado", + "loading_tiles": "Cargando mosaicos", + "layout_received": "Diseño recibido", + "resend_needed": "Hay que volver a enviar", + "ready": "Listo para los mosaicos", + "error": "Error: {reason}" + } }, "updates": { "offline": "La pantalla estaba sin conexión; se volverá a intentar la próxima vez.", @@ -1755,6 +1763,10 @@ "every": "¿Todas las pantallas? Dispara {event} una vez (consulta «Todas las pantallas a la vez»). Las pantallas siguen funcionando por separado y cada una informa con su propio {screen}.", "claude": "¿Prefieres {bold} que te haga la automatización? Instala la habilidad de ESP Screens en Configuración → Claude.", "claude_bold": "pedirle a Claude" + }, + "wait_yaml": { + "comment": "Timbre: muestra la alerta y espera a que alguien pulse el botón.", + "message": "Alguien va a abrir la puerta." } }, "override": { diff --git a/screen_manager/translations/fr.json b/screen_manager/translations/fr.json index ff7fc27..d7acd0a 100644 --- a/screen_manager/translations/fr.json +++ b/screen_manager/translations/fr.json @@ -560,7 +560,15 @@ "too_large": "Mise en page enregistrée ; trop grande pour un seul message à l'écran, retirez quelques tuiles", "sent": "Envoyé à Home Assistant", "offline": "Écran hors ligne ; modifications enregistrées", - "retrying": "Échec de l'envoi ; nouvel essai automatique" + "retrying": "Échec de l'envoi ; nouvel essai automatique", + "screen": { + "synced": "Synchronisé", + "loading_tiles": "Chargement des tuiles", + "layout_received": "Disposition reçue", + "resend_needed": "Nouvel envoi nécessaire", + "ready": "Prêt pour les tuiles", + "error": "Erreur : {reason}" + } }, "updates": { "offline": "L'écran était hors ligne ; nouvel essai la prochaine fois.", @@ -1755,6 +1763,10 @@ "every": "Tous les écrans ? Déclenchez {event} une seule fois (voir Tous les écrans à la fois). Les écrans restent indépendants et chacun répond avec son propre {screen}.", "claude": "Vous préférez {bold} pour l'automatisation ? Installez la compétence ESP Screens dans Paramètres → Claude.", "claude_bold": "demander à Claude" + }, + "wait_yaml": { + "comment": "Sonnette : afficher l’alerte et attendre qu’on appuie sur le bouton.", + "message": "Quelqu’un arrive à la porte." } }, "override": { diff --git a/screen_manager/translations/it.json b/screen_manager/translations/it.json index 58e8b51..052893b 100644 --- a/screen_manager/translations/it.json +++ b/screen_manager/translations/it.json @@ -560,7 +560,15 @@ "too_large": "Disposizione salvata; troppo grande per un solo messaggio allo schermo, rimuovi qualche riquadro", "sent": "Inviato a Home Assistant", "offline": "Schermo offline; modifiche salvate", - "retrying": "Invio non riuscito; nuovo tentativo automatico" + "retrying": "Invio non riuscito; nuovo tentativo automatico", + "screen": { + "synced": "Sincronizzato", + "loading_tiles": "Caricamento dei riquadri", + "layout_received": "Layout ricevuto", + "resend_needed": "Serve un nuovo invio", + "ready": "Pronto per i riquadri", + "error": "Errore: {reason}" + } }, "updates": { "offline": "Lo schermo era offline; nuovo tentativo la prossima volta.", @@ -1755,6 +1763,10 @@ "every": "Tutti gli schermi? Attiva {event} una sola volta (vedi Tutti gli schermi insieme). Gli schermi restano indipendenti e ognuno risponde con il proprio {screen}.", "claude": "Preferisci {bold} l'automazione? Installa la skill di ESP Screens in Impostazioni → Claude.", "claude_bold": "chiedere a Claude" + }, + "wait_yaml": { + "comment": "Campanello: mostra l’avviso e aspetta che qualcuno prema il pulsante.", + "message": "Qualcuno sta arrivando alla porta." } }, "override": { diff --git a/screen_manager/translations/nl.json b/screen_manager/translations/nl.json index 08c967e..3e76c18 100644 --- a/screen_manager/translations/nl.json +++ b/screen_manager/translations/nl.json @@ -560,7 +560,15 @@ "too_large": "Indeling bewaard; te groot voor één bericht aan het scherm, verwijder een paar tegels", "sent": "Verstuurd naar Home Assistant", "offline": "Scherm offline; wijzigingen bewaard", - "retrying": "Versturen mislukt; automatisch opnieuw proberen" + "retrying": "Versturen mislukt; automatisch opnieuw proberen", + "screen": { + "synced": "Gesynchroniseerd", + "loading_tiles": "Tegels laden", + "layout_received": "Indeling ontvangen", + "resend_needed": "Indeling opnieuw nodig", + "ready": "Klaar voor tegelconfiguratie", + "error": "Fout: {reason}" + } }, "updates": { "offline": "Scherm was offline; volgende keer opnieuw.", @@ -1755,6 +1763,10 @@ "every": "Alle schermen? Vuur {event} één keer af (zie Alle schermen tegelijk). De schermen werken nog steeds los van elkaar en melden zich elk met hun eigen {screen}.", "claude": "Liever {bold} om de automatisering te schrijven? Installeer de ESP Screens-skill onder Instellingen → Claude.", "claude_bold": "Claude vragen" + }, + "wait_yaml": { + "comment": "Deurbel: toon de alert en wacht tot iemand op de knop drukt.", + "message": "Er komt iemand naar de deur." } }, "override": { diff --git a/screen_manager/translations/pl.json b/screen_manager/translations/pl.json index ebf9647..d3e3671 100644 --- a/screen_manager/translations/pl.json +++ b/screen_manager/translations/pl.json @@ -560,7 +560,15 @@ "too_large": "Układ zapisany; za duży na jedną wiadomość do ekranu, usuń kilka kafelków", "sent": "Wysłano do Home Assistant", "offline": "Ekran offline; zmiany zapisane", - "retrying": "Wysyłanie nieudane; automatyczne ponawianie" + "retrying": "Wysyłanie nieudane; automatyczne ponawianie", + "screen": { + "synced": "Zsynchronizowano", + "loading_tiles": "Ładowanie kafelków", + "layout_received": "Odebrano układ", + "resend_needed": "Wymagane ponowne wysłanie", + "ready": "Gotowy na kafelki", + "error": "Błąd: {reason}" + } }, "updates": { "offline": "Ekran był offline; kolejna próba następnym razem.", @@ -1755,6 +1763,10 @@ "every": "Wszystkie ekrany? Wywołaj {event} raz (zobacz „Wszystkie ekrany naraz”). Ekrany nadal działają niezależnie i każdy zgłasza się z własnym polem {screen}.", "claude": "Wolisz {bold} o automatyzację? Zainstaluj umiejętność ESP Screens w sekcji Ustawienia → Claude.", "claude_bold": "poprosić Claude" + }, + "wait_yaml": { + "comment": "Dzwonek: pokaż alert i poczekaj, aż ktoś naciśnie przycisk.", + "message": "Ktoś idzie do drzwi." } }, "override": { diff --git a/screen_manager/translations/pt.json b/screen_manager/translations/pt.json index 3c9c50a..2502e48 100644 --- a/screen_manager/translations/pt.json +++ b/screen_manager/translations/pt.json @@ -560,7 +560,15 @@ "too_large": "Layout guardado; demasiado grande para uma mensagem para o ecrã, remova alguns mosaicos", "sent": "Enviado para o Home Assistant", "offline": "Ecrã offline; alterações guardadas", - "retrying": "O envio falhou; a tentar novamente automaticamente" + "retrying": "O envio falhou; a tentar novamente automaticamente", + "screen": { + "synced": "Sincronizado", + "loading_tiles": "A carregar mosaicos", + "layout_received": "Layout recebido", + "resend_needed": "É preciso reenviar", + "ready": "Pronto para os mosaicos", + "error": "Erro: {reason}" + } }, "updates": { "offline": "O ecrã estava offline; vai tentar novamente da próxima vez.", @@ -1755,6 +1763,10 @@ "every": "Todos os ecrãs? Dispare {event} uma vez (ver «Todos os ecrãs de uma vez»). Os ecrãs continuam a funcionar de forma independente e cada um reporta com o seu próprio {screen}.", "claude": "Prefere {bold} que faça a automatização? Instale a habilidade do ESP Screens em Definições → Claude.", "claude_bold": "pedir ao Claude" + }, + "wait_yaml": { + "comment": "Campainha: mostra o alerta e espera que alguém prima o botão.", + "message": "Vem alguém à porta." } }, "override": { diff --git a/tests/test_language_region.py b/tests/test_language_region.py index 381009a..b72849c 100644 --- a/tests/test_language_region.py +++ b/tests/test_language_region.py @@ -251,6 +251,9 @@ class ClockPinTests(unittest.IsolatedAsyncioTestCase): view = (await answer.json())['language'] self.assertEqual((view['effective'], view['numbers_effective'], view['group_min'], view['percent_space']), ('de', 'point', 1, True)) + # What the screen reports stays English (the app reads it); the editor shows it in its own language. + dutch = await (await client.get('/api/inventory?light=1', headers={'X-ESP-Screens-Language': 'nl'})).json() + self.assertEqual((m.screens()[0]['status'], dutch['screens'][0]['status']), ('Synced', 'Gesynchroniseerd')) refused = await client.put('/api/language', json={'clock': '13'}, headers={'X-Screen-CSRF': csrf, 'X-ESP-Screens-Language': 'nl'}) self.assertEqual(refused.status, 400) self.assertEqual((await refused.json())['error'], i18n.TRANSLATIONS.text('addon.errors.region_choice', 'nl')) diff --git a/web/src/components/AlertsView.vue b/web/src/components/AlertsView.vue index 848fa91..a915747 100644 --- a/web/src/components/AlertsView.vue +++ b/web/src/components/AlertsView.vue @@ -47,16 +47,18 @@ const exampleYaml = computed(() => { const lines = (alerts.value?.fields || []).map((f: any) => ` ${f.name}: ${fieldValue(f)}`); return `action: ${chosenAction.value || "esphome._show_alert"}\ndata:\n${lines.join("\n")}`; }); +// The doorbell example in the editor's language: the fields' own examples, and two lines of its own. +const example = (name: string, fallback: string) => yamlString((alerts.value?.fields || []).find((f: any) => f.name === name)?.example || fallback); const waitYaml = computed(() => [ - `# Doorbell: show the alert and wait until someone presses the button.`, + `# ${t("editor.alerts.wait_yaml.comment")}`, `actions:`, ` - action: ${chosenAction.value || "esphome._show_alert"}`, ` data:`, - ` title: "Someone is at the door"`, - ` subtitle: "Door 3, back"`, + ` title: ${example("title", "Someone is at the door")}`, + ` subtitle: ${example("subtitle", "Door 3, back")}`, ` icon: doorbell`, ` color: orange`, - ` button_text: "Coming"`, + ` button_text: ${example("button_text", "Coming")}`, ` timeout: 0`, ` flash: true`, ` - wait_for_trigger:`, @@ -71,7 +73,7 @@ const waitYaml = computed(() => [ ` then:`, ` - action: notify.notify`, ` data:`, - ` message: "Someone is coming to the door."`, + ` message: ${yamlString(t("editor.alerts.wait_yaml.message"))}`, ].join("\n")); // One event for every screen (app 0.2.45): an action for "Edit in YAML" of the Event action. const allYaml = computed(() => { diff --git a/web/src/components/AppSettingsView.vue b/web/src/components/AppSettingsView.vue index ce7aeac..c7b921d 100644 --- a/web/src/components/AppSettingsView.vue +++ b/web/src/components/AppSettingsView.vue @@ -2,7 +2,7 @@ // Everything around the screens: firmware updates, language and region, alerts, Claude. import { computed, ref } from "vue"; import { haProfile, matchLanguage, numberText, type NumberMarks, type NumberStyle, STYLE_MARKS, t } from "../i18n"; -import { anyUpdating, go, installClaudeSkill, runUpdateAll, saveLanguage, screenLanguageMarks, setAutoUpdate, state, updateProgress } from "../store"; +import { anyUpdating, autoMarks, go, installClaudeSkill, runUpdateAll, saveLanguage, setAutoUpdate, state, updateProgress } from "../store"; const u = computed(() => state.inventory.updates); const outdated = computed(() => state.inventory.screens.filter((s) => s.update?.available).length); @@ -125,7 +125,7 @@ async function useProfile() {
@@ -133,7 +133,7 @@ async function useProfile() {
diff --git a/web/src/components/TileCard.vue b/web/src/components/TileCard.vue index 1273025..c7ced76 100644 --- a/web/src/components/TileCard.vue +++ b/web/src/components/TileCard.vue @@ -6,11 +6,12 @@ import { vDrag } from "../drag"; import { numberText, t, te } from "../i18n"; import { displayName, effectiveControls, isFull, isWide, pageOf, pageTarget, SLOTS_PER_PAGE } from "../model/layout"; import { clockText, glyph } from "../model/topbar"; -import { clock24, entityName, isSelected, liveOf, numberMarks, openTile, placeTile, removeTile, screenText, state, tileIconCp } from "../store"; +import { clock24, entityName, isSelected, liveOf, numberMarks, openTile, placeTile, removeTile, screenBuiltinName, screenText, state, tileIconCp, unitSuffix } from "../store"; import type { Tile } from "../types"; const props = defineProps<{ tile: Tile; slot: number; placeholder?: boolean }>(); -const name = computed(() => props.tile.name || entityName(props.tile.entity)); +// A built-in card is named as the screens name it, in their language (app 0.2.90). +const name = computed(() => props.tile.name || (domain.value === "screen" && screenBuiltinName(props.tile.entity)) || entityName(props.tile.entity)); const full = computed(() => isFull(props.tile)); const wide = computed(() => isWide(props.tile) && !full.value); const goesTo = computed(() => pageTarget(props.tile.entity)); @@ -36,8 +37,11 @@ const on = computed(() => Boolean(current.value) && !gone.value && current.value const isOn = computed(() => ["light", "switch", "input_boolean", "fan"].includes(domain.value) && current.value?.state === "on"); const unit = computed(() => current.value?.a?.unit_of_measurement as string | undefined); const capital = (text: string) => text.charAt(0).toUpperCase() + text.slice(1).replace(/_/g, " "); -// Numbers as the screens write them, "1,234.5" or "1.234,5" (app 0.2.90). +// Numbers as the screens write them, "1,234.5" or "1.234,5" (app 0.2.90): a state only with a unit, or of an entity +// that is a number itself, as the firmware does (value_text); an id-like "1234" without a unit stays as it is. const num = (value: unknown) => numberText(value as string | number, numberMarks.value); +const NUMERIC = ["number", "input_number", "counter"]; +const value = (state: string) => (unit.value || NUMERIC.includes(domain.value) ? `${num(state)}${unitSuffix(unit.value)}` : state); // The screens' own words for a state where Home Assistant hands us none (screen.ha, Home Assistant's words in the // screens' language, app 0.2.90): a binary sensor's by its device class, on and off, and the states of the domains // the screen names itself. A weather's windy-variant is windy there too. @@ -60,12 +64,13 @@ const status = computed(() => { const word = c.word || haWord(c) || capital(c.state); if (domain.value === "climate") return `${a.current_temperature !== undefined ? `${num(a.current_temperature)}° · ` : ""}${word}`; if (domain.value === "weather") return `${word}${a.temperature !== undefined ? ` · ${num(a.temperature)}°` : ""}`; - if (domain.value === "cover" && a.current_position !== undefined && a.current_position > 0 && a.current_position < 100) return `${word} · ${a.current_position} %`; + if (domain.value === "cover" && a.current_position !== undefined && a.current_position > 0 && a.current_position < 100) return `${word} · ${a.current_position}${unitSuffix("%")}`; if (domain.value === "media_player" && a.media_title) return `${word} · ${a.media_title}`; - if (domain.value === "sensor") return `${num(c.state)}${unit.value ? ` ${unit.value}` : ""}`; + if (domain.value === "sensor" || NUMERIC.includes(domain.value)) return value(c.state); return word; }); -const bigValue = computed(() => (current.value && !gone.value ? num(current.value.state) : "—")); +// The big value of the watch display; its unit sits beside it in small letters. +const bigValue = computed(() => (current.value && !gone.value ? (unit.value || NUMERIC.includes(domain.value) ? num(current.value.state) : current.value.state) : "—")); // The small slider's fill, from what the entity reports; off is empty, like the screen's grey fill. const fill = computed(() => { const c = current.value; diff --git a/web/src/model/layout.ts b/web/src/model/layout.ts index 0506a00..acc102e 100644 --- a/web/src/model/layout.ts +++ b/web/src/model/layout.ts @@ -156,7 +156,8 @@ export function effectiveControls(tile: Tile, inventory: Inventory): string | nu export function controlsLabel(tile: Tile, inventory: Inventory) { const key = effectiveControls(tile, inventory); if (!key) return t("editor.inspect.control_none"); - return inventory.controls?.[tile.entity.split(".")[0]]?.choices.find((c) => c.key === key)?.label.toLocaleLowerCase() || key; + // As the choice itself is labelled, like the other values in the summary: German writes its nouns with a capital. + return inventory.controls?.[tile.entity.split(".")[0]]?.choices.find((c) => c.key === key)?.label || key; } export const parseVersion = (v: string | undefined | null) => (/^(\d+)\.(\d+)\.(\d+)$/.exec(v || "") || []).slice(1).map(Number); diff --git a/web/src/store.ts b/web/src/store.ts index 263f42c..67b99fd 100644 --- a/web/src/store.ts +++ b/web/src/store.ts @@ -2,7 +2,7 @@ // former app.js state and its calls, with the DOM work moved into the components. import { computed, reactive, toRaw, watch } from "vue"; import { api, getJson, send, setCsrf } from "./api"; -import { andList, editorLanguage, languageMarks, languageMeta, loadLanguage, type NumberMarks, pickLanguage, STYLE_MARKS, t } from "./i18n"; +import { andList, editorLanguage, languageMeta, loadLanguage, type NumberMarks, pickLanguage, STYLE_MARKS, t } from "./i18n"; import { arrange, cellsOf, entriesOf, firstFree, fits, isFull, isWide, MAX_PAGES, nearestFree, newTile, normalize, occupied, pageCount, pageOf, pageTarget, rowStart, sizeOf, SLOTS_PER_PAGE, strandedPages, supportsFirmware as supportsVersion, tileLimit as limitFor, @@ -832,14 +832,27 @@ export const languageName = (code: string | null | undefined) => export const needsUpdate = (screen: Screen) => Boolean(screen.update?.available || screen.update?.language); export const newLanguageText = () => t("editor.update.new_language", { name: languageName(state.inventory.language?.effective) }); // Time and number format, for every screen at once under Settings → Language & region: a 24-hour clock and "1,234.5" -// until the add-on says otherwise. The mockup's clocks and numbers follow them; "auto" numbers are the screens' -// language's own (screen.number), as the firmware writes them. +// until the add-on says otherwise. The mockup's clocks and numbers follow what the add-on sends the screens: the style, +// from how many digits a number is grouped, and the space before "%" (Home Assistant's language decides "auto"). export const clock24 = computed(() => state.inventory.language?.clock_effective !== "12"); -export const screenLanguageMarks = computed(() => languageMarks(screenLanguage.value)); export const numberMarks = computed(() => { - const choice = state.inventory.language ? state.inventory.language.numbers || "auto" : "point"; - return choice === "auto" ? screenLanguageMarks.value : STYLE_MARKS[choice]; + const language = state.inventory.language; + const marks = STYLE_MARKS[language?.numbers_effective || "point"] || STYLE_MARKS.point; + return { ...marks, from: (language?.group_min || 1) >= 2 ? 5 : 4 }; }); +/** How Automatic writes numbers: the marks of the language that decides, for the label of that choice. */ +export const autoMarks = computed(() => { + const language = state.inventory.language; + return { ...(STYLE_MARKS[language?.numbers_auto || "point"] || STYLE_MARKS.point), from: (language?.group_min_auto || 1) >= 2 ? 5 : 4 }; +}); +/** What follows a number for its unit, as Home Assistant spaces it: "°", "%" or " %" by the language, " kWh". */ +export function unitSuffix(unit: string | undefined | null) { + if (!unit || unit === "°") return unit || ""; + if (unit === "%") return state.inventory.language?.percent_space ? " %" : "%"; + return ` ${unit}`; +} +/** A built-in card's name as the screens show it (Settings, Clock, Go to page 2), in their language. */ +export const screenBuiltinName = (id: string) => state.inventory.builtin?.find((e) => e.id === id)?.screen_name; /** Saves any of the screen language, the time format and the number format. */ export async function saveLanguage(changes: { setting?: string; clock?: string; numbers?: string }) { try { diff --git a/web/src/types.ts b/web/src/types.ts index 05d6962..6f99683 100644 --- a/web/src/types.ts +++ b/web/src/types.ts @@ -45,9 +45,13 @@ export type Languages = { setting: string; effective: string; ha: string | null; languages: LanguageInfo[]; clock?: "auto" | "24" | "12"; clock_effective?: "24" | "12"; numbers?: "auto" | "point" | "comma" | "space"; numbers_effective?: "point" | "comma" | "space"; + /** From how many digits a whole number gets separators: 2 is 1234 but 12.345 (CLDR); a space before "%". */ + group_min?: number; percent_space?: boolean; + /** What Automatic means now: the clock and numbers of Home Assistant's language (or the chosen one). */ + clock_auto?: "24" | "12"; numbers_auto?: "point" | "comma" | "space"; group_min_auto?: number; }; export type ChangelogSection = { app: string; firmware: string; lines: string[] }; -export type Entity = { id: string; name: string; area?: string; device?: string; icon?: string; state?: string; tile?: boolean }; +export type Entity = { id: string; name: string; area?: string; device?: string; icon?: string; state?: string; tile?: boolean; screen_name?: string }; export type IconInfo = { name: string; cp: string; label: string }; export type Inventory = { csrf?: string; diff --git a/web/tests/i18n.spec.ts b/web/tests/i18n.spec.ts index f1dd75b..5646dcd 100644 --- a/web/tests/i18n.spec.ts +++ b/web/tests/i18n.spec.ts @@ -181,7 +181,8 @@ describe("the mockup speaks the screens' language", () => { }, meta("one_other")); state.inventory = { screens: [], entities: [{ id: "light.b", name: "Lamp B", state: "unavailable" }], - language: { setting: "td", effective: "td", ha: "en", languages: [], numbers: "auto" }, + // The add-on says how the screens write numbers: Automatic, worked out for their language (1.234,5). + language: { setting: "td", effective: "td", ha: "en", languages: [], numbers: "auto", numbers_effective: "comma", group_min: 2 }, controls: { script: { default: "run", choices: [{ key: "run", label: "Run" }, { key: "none", label: "None" }] } }, } as any; state.layout = { title: "Living room", tiles: [] }; diff --git a/web/tests/language.spec.ts b/web/tests/language.spec.ts index fa4ad0b..0ff3951 100644 --- a/web/tests/language.spec.ts +++ b/web/tests/language.spec.ts @@ -13,6 +13,7 @@ const GUIDE = "https://github.com/MaxGramser/homeassistant_espscreen/blob/main/d function language(extra: Partial = {}): Languages { return { setting: "auto", effective: "nl", ha: "nl", clock: "auto", clock_effective: "24", numbers: "auto", numbers_effective: "comma", + clock_auto: "24", numbers_auto: "comma", group_min: 1, group_min_auto: 1, percent_space: false, languages: [ { code: "en", name: "English (US)", english: "English (US)", checked: true }, { code: "en-GB", name: "English (UK)", english: "English (UK)", checked: true }, diff --git a/web/tests/layout.spec.ts b/web/tests/layout.spec.ts index 3d1892c..c53ba4c 100644 --- a/web/tests/layout.spec.ts +++ b/web/tests/layout.spec.ts @@ -94,7 +94,7 @@ describe("defaults, controls and versions", () => { expect(effectiveControls(tile("light.a", 0, { size: "wide", inline: "slider" }), inventory)).toBeNull(); expect(effectiveControls(tile("light.a", 0, { size: "wide", display: "watch" }), inventory)).toBeNull(); expect(effectiveControls(tile("light.a", 0), inventory)).toBeNull(); - expect(controlsLabel(tile("light.a", 0, { size: "wide" }), inventory)).toBe("on/off switch"); + expect(controlsLabel(tile("light.a", 0, { size: "wide" }), inventory)).toBe("On/off switch"); expect(controlsLabel(tile("sensor.t", 0, { size: "wide" }), inventory)).toBe("none"); }); it("compares firmware versions and knows the tile limit", () => {