This commit is contained in:
Mateusz Gruszczyński
2026-09-16 11:27:36 +02:00
parent 0d73844f23
commit 0bd33958da
25 changed files with 269 additions and 207 deletions
+63 -62
View File
@@ -24,15 +24,15 @@
<div class="top-actions">
<div class="toolbar-picker" data-i18n-title="controls.language" title="Language">
<span class="toolbar-picker-value" id="languageLabel" aria-hidden="true">EN</span>
<span class="toolbar-picker-chevron" aria-hidden="true"></span>
<span class="toolbar-picker-chevron" data-ui-icon="chevron-down" aria-hidden="true"></span>
<select class="toolbar-picker-select" id="languageSelect" data-i18n-aria="controls.language"
aria-label="Language">
<option value="en">English</option>
</select>
</div>
<div class="toolbar-picker" data-i18n-title="controls.theme" title="Theme">
<span class="toolbar-picker-value theme-picker-value" id="themeIcon" aria-hidden="true"></span>
<span class="toolbar-picker-chevron" aria-hidden="true"></span>
<span class="toolbar-picker-value theme-picker-value" id="themeIcon" data-ui-icon="system" aria-hidden="true"></span>
<span class="toolbar-picker-chevron" data-ui-icon="chevron-down" aria-hidden="true"></span>
<select class="toolbar-picker-select" id="themeSelect" data-i18n-aria="controls.theme" aria-label="Theme">
<option value="system" data-i18n="theme.system">System</option>
<option value="light" data-i18n="theme.light">Light</option>
@@ -40,7 +40,7 @@
</select>
</div>
<button class="icon-button toolbar-icon-control" id="refreshButton" data-i18n-title="actions.refresh"
data-i18n-aria="actions.refresh" title="Refresh" aria-label="Refresh"></button>
data-i18n-aria="actions.refresh" title="Refresh" aria-label="Refresh" data-ui-icon="refresh"></button>
</div>
<div class="connection-banner" id="connectionBanner" role="status" aria-live="polite" hidden>
<span class="connection-banner-dot" aria-hidden="true"></span>
@@ -844,14 +844,14 @@
<section id="flowEditor" class="flow-editor" hidden aria-label="Flow editor">
<header class="flow-editor-bar">
<div class="flow-editor-title"><button type="button" class="icon-button" data-action="close-flow-editor"
aria-label="Back"></button>
aria-label="Back" data-ui-icon="arrow-left"></button>
<div><span class="eyebrow" data-i18n="flow.editorEyebrow">Flow editor</span>
<div class="flow-name-wrap">
<div id="flowNameView" class="flow-name-view" hidden><button id="flowNameText" class="flow-name-text"
type="button" data-action="edit-flow-name" data-i18n-title="flow.editName"
title="Edit Flow name"></button><button class="flow-name-edit" type="button"
data-action="edit-flow-name" data-i18n-title="flow.editName" data-i18n-aria="flow.editName"
title="Edit Flow name" aria-label="Edit Flow name"></button></div><input id="flowName" maxlength="100"
title="Edit Flow name" aria-label="Edit Flow name" data-ui-icon="edit"></button></div><input id="flowName" maxlength="100"
data-i18n-placeholder="flow.namePlaceholder" data-i18n-title="flow.nameAliasHint"
placeholder="My automation">
</div>
@@ -929,7 +929,7 @@
<div class="flow-workspace-wrap">
<div class="flow-workspace-toolbar">
<div class="flow-workspace-primary-actions"><button type="button" class="primary flow-add-block-button"
data-action="flow-add-block"><span aria-hidden="true"></span><span data-i18n="flow.addBlock">Add
data-action="flow-add-block"><span data-ui-icon="plus" aria-hidden="true"></span><span data-i18n="flow.addBlock">Add
block</span></button><button type="button" class="secondary flow-selection-action"
data-action="flow-select-all" data-i18n="flow.selectAll">Zaznacz wszystko</button><button type="button"
class="secondary flow-selection-action" data-action="flow-clear-selection"
@@ -937,11 +937,12 @@
class="badge"></span></div>
<div class="flow-zoom-controls" role="group" data-i18n-aria="flow.zoomControls" aria-label="Canvas zoom">
<button type="button" class="secondary icon-button" data-action="flow-zoom-out"
data-i18n-title="flow.zoomOut" title="Zoom out"></button><span id="flowZoomLabel"
data-i18n-title="flow.zoomOut" title="Zoom out" data-ui-icon="minus"></button><span id="flowZoomLabel"
aria-live="polite">100%</span><button type="button" class="secondary icon-button"
data-action="flow-zoom-in" data-i18n-title="flow.zoomIn" title="Zoom in"></button><button type="button"
class="secondary flow-fit-button" data-action="flow-fit" data-i18n="flow.fitView"
data-i18n-title="flow.fitView" title="Fit">Fit</button>
data-action="flow-zoom-in" data-i18n-title="flow.zoomIn" title="Zoom in" data-ui-icon="plus"></button><button type="button"
class="secondary flow-fit-button" data-action="flow-fit" data-i18n-title="flow.fitView" title="Fit"><span
class="flow-fit-button-icon" data-ui-icon="fit" aria-hidden="true"></span><span
class="flow-fit-button-label" data-i18n="flow.fitView">Fit</span></button>
</div>
</div>
<div id="flowWorkspace" class="flow-workspace" tabindex="0">
@@ -956,7 +957,7 @@
<div class="flow-natural-preview" id="flowNaturalPreview">
<button type="button" class="flow-preview-toggle" data-action="flow-preview-toggle"
aria-expanded="false"><strong data-i18n="flow.previewDetails">Interpretation and Flow cycle</strong><span
class="flow-preview-toggle-icon" aria-hidden="true"></span></button>
class="flow-preview-toggle-icon" data-ui-icon="chevron-down" aria-hidden="true"></span></button>
<div class="flow-preview-details">
<div class="flow-preview-item flow-preview-interpretation"><strong
data-i18n="flow.interpretation">Interpretation</strong><span id="flowInterpretation"></span></div>
@@ -976,7 +977,7 @@
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="flow.blocks">Blocks</span>
<h2 data-i18n="flow.addBlock">Add block</h2>
</div><button type="button" data-close aria-label="Close">×</button>
</div><button type="button" data-close aria-label="Close" data-ui-icon="close"></button>
</div>
<div class="flow-block-search"><input id="flowBlockSearch" type="search" autocomplete="off"
data-i18n-placeholder="flow.searchBlocks" placeholder="Search blocks…"></div>
@@ -985,16 +986,16 @@
<dialog id="flowEditorActionsDialog" class="sheet flow-editor-actions-dialog">
<div class="dialog-head">
<h2 data-i18n="flow.actions">Actions</h2><button type="button" data-close>×</button>
<h2 data-i18n="flow.actions">Actions</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<div class="menu-list">
<button type="button" data-action="flow-templates"><span
data-i18n="flow.templates">Templates</span><span></span></button>
<button type="button" data-action="import-flow"><span data-i18n="flow.import">Import</span><span></span></button>
<button type="button" data-action="export-flow"><span data-i18n="flow.export">Export</span><span></span></button>
data-i18n="flow.templates">Templates</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button type="button" data-action="import-flow"><span data-i18n="flow.import">Import</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button type="button" data-action="export-flow"><span data-i18n="flow.export">Export</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button type="button" data-action="flow-dry-run"><span
data-i18n="flow.dryRun">Dry-run</span><span></span></button>
<button type="button" data-action="flow-logs"><span data-i18n="flow.logs">Logs</span><span></span></button>
data-i18n="flow.dryRun">Dry-run</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button type="button" data-action="flow-logs"><span data-i18n="flow.logs">Logs</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
</div>
</dialog>
@@ -1005,7 +1006,7 @@
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="flow.sharedInputEyebrow">Wspólne dane</span>
<h2 id="flowSharedInputDialogTitle" data-i18n="flow.sharedInputTitle">Wspólne wejście Flow</h2>
</div><button type="button" data-close>×</button>
</div><button type="button" data-close data-ui-icon="close"></button>
</div>
<input type="hidden" name="id">
<label><span data-i18n="common.name">Nazwa</span><input name="name" maxlength="100" required
@@ -1034,7 +1035,7 @@
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="flow.templateLibrary">Flow library</span>
<h2 data-i18n="flow.templates">Templates</h2>
</div><button type="button" data-close>×</button>
</div><button type="button" data-close data-ui-icon="close"></button>
</div>
<p class="field-note" data-i18n="flow.templatesHint">Ready-made layouts create an editable graph using existing
zones, devices and groups.</p>
@@ -1060,7 +1061,7 @@
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="flow.testMode">Flow diagnostics</span>
<h2 id="flowTestTitle" data-i18n="flow.dryRun">Dry-run</h2>
</div><button type="button" data-close>×</button>
</div><button type="button" data-close data-ui-icon="close"></button>
</div>
<div id="flowSimulationControls" class="flow-simulation-controls">
<p class="field-note" data-i18n="flow.dryRunHint">Dry-run does not change thermostat, device, group, schedule or
@@ -1081,53 +1082,53 @@
<nav class="bottom-nav" data-i18n-aria="nav.navigation" aria-label="Navigation">
<span class="nav-section-label desktop-nav-only" data-i18n="nav.sectionControl">Sterowanie</span>
<button class="active" data-nav="dashboard"><span></span><b data-i18n="nav.dashboard">Dashboard</b></button>
<button data-nav="zones"><span></span><b data-i18n="nav.zones">Zones</b></button>
<button class="desktop-nav-only" data-nav="groups"><span></span><b data-i18n="nav.groups">Groups</b></button>
<button class="active" data-nav="dashboard"><span data-ui-icon="home" aria-hidden="true"></span><b data-i18n="nav.dashboard">Dashboard</b></button>
<button data-nav="zones"><span data-ui-icon="zones" aria-hidden="true"></span><b data-i18n="nav.zones">Zones</b></button>
<button class="desktop-nav-only" data-nav="groups"><span data-ui-icon="groups" aria-hidden="true"></span><b data-i18n="nav.groups">Groups</b></button>
<span class="nav-section-label desktop-nav-only" data-i18n="nav.sectionAutomation">Automatyzacja</span>
<button data-nav="flows"><span></span><b data-i18n="nav.flows">Flow</b></button>
<button class="desktop-nav-only" data-nav="schedules"><span></span><b
<button data-nav="flows"><span data-ui-icon="flow" aria-hidden="true"></span><b data-i18n="nav.flows">Flow</b></button>
<button class="desktop-nav-only" data-nav="schedules"><span data-ui-icon="schedule" aria-hidden="true"></span><b
data-i18n="nav.schedules">Schedules</b></button>
<button class="desktop-nav-only" data-nav="automations"><span></span><b
<button class="desktop-nav-only" data-nav="automations"><span data-ui-icon="automation" aria-hidden="true"></span><b
data-i18n="nav.automations">Automations</b></button>
<span class="nav-section-label desktop-nav-only" data-i18n="nav.sectionData">Dane i system</span>
<button data-nav="history"><span></span><b data-i18n="nav.history">History</b></button>
<button class="desktop-nav-only" data-nav="devices"><span></span><b data-i18n="nav.devices">Devices</b></button>
<button data-nav="history"><span data-ui-icon="history" aria-hidden="true"></span><b data-i18n="nav.history">History</b></button>
<button class="desktop-nav-only" data-nav="devices"><span data-ui-icon="devices" aria-hidden="true"></span><b data-i18n="nav.devices">Devices</b></button>
<button class="desktop-nav-only" data-nav="homeassistant"><span>HA</span><b data-i18n="nav.homeAssistantShort">Home
Assistant</b></button>
<button class="desktop-nav-only" data-nav="simulation"><span></span><b
<button class="desktop-nav-only" data-nav="simulation"><span data-ui-icon="play" aria-hidden="true"></span><b
data-i18n="nav.simulation">Simulator</b></button>
<button class="desktop-nav-only" data-nav="night"><span></span><b data-i18n="nav.nightMode">Night mode</b></button>
<button class="desktop-nav-only" data-nav="logs"><span></span><b data-i18n="nav.logs">Events</b></button>
<button class="desktop-nav-only" data-nav="settings"><span></span><b data-i18n="nav.settings">Settings</b></button>
<button class="mobile-nav-only" data-nav="more"><span>•••</span><b data-i18n="nav.more">More</b></button>
<button class="desktop-nav-only" data-nav="night"><span data-ui-icon="moon" aria-hidden="true"></span><b data-i18n="nav.nightMode">Night mode</b></button>
<button class="desktop-nav-only" data-nav="logs"><span data-ui-icon="events" aria-hidden="true"></span><b data-i18n="nav.logs">Events</b></button>
<button class="desktop-nav-only" data-nav="settings"><span data-ui-icon="settings" aria-hidden="true"></span><b data-i18n="nav.settings">Settings</b></button>
<button class="mobile-nav-only" data-nav="more"><span data-ui-icon="more-horizontal" aria-hidden="true"></span><b data-i18n="nav.more">More</b></button>
</nav>
<dialog id="moreDialog" class="sheet">
<div class="dialog-head">
<h2 data-i18n="nav.more">More</h2><button data-close>×</button>
<h2 data-i18n="nav.more">More</h2><button data-close data-ui-icon="close"></button>
</div>
<div class="menu-list more-menu-list">
<span class="menu-section-label" data-i18n="nav.sectionControl">Sterowanie</span>
<button data-go="devices"><span data-i18n="nav.devices">Devices</span><span></span></button>
<button data-go="groups"><span data-i18n="nav.groups">Groups</span><span></span></button>
<button data-go="devices"><span data-i18n="nav.devices">Devices</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button data-go="groups"><span data-i18n="nav.groups">Groups</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<span class="menu-section-label" data-i18n="nav.sectionAutomation">Automatyzacja</span>
<button data-go="schedules"><span data-i18n="nav.schedules">Schedules</span><span></span></button>
<button data-go="automations"><span data-i18n="nav.automations">Automations</span><span></span></button>
<button data-go="schedules"><span data-i18n="nav.schedules">Schedules</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button data-go="automations"><span data-i18n="nav.automations">Automations</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<span class="menu-section-label" data-i18n="nav.sectionData">Dane i system</span>
<button data-go="simulation"><span data-i18n="nav.simulation">Simulator</span><span></span></button>
<button data-go="night"><span data-i18n="nav.nightMode">Night mode</span><span></span></button>
<button data-go="simulation"><span data-i18n="nav.simulation">Simulator</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button data-go="night"><span data-i18n="nav.nightMode">Night mode</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button data-go="homeassistant"><span data-i18n="nav.homeAssistant">Home Assistant /
Sensors</span><span></span></button>
<button data-go="settings"><span data-i18n="nav.settings">Settings</span><span></span></button>
<button data-go="logs"><span data-i18n="nav.logsAndEvents">Events and logs</span><span></span></button>
Sensors</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button data-go="settings"><span data-i18n="nav.settings">Settings</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
<button data-go="logs"><span data-i18n="nav.logsAndEvents">Events and logs</span><span data-ui-icon="chevron-right" aria-hidden="true"></span></button>
</div>
</dialog>
<dialog id="deviceDialog">
<form method="dialog" id="deviceForm" class="dialog-form">
<div class="dialog-head">
<h2 data-i18n="devices.add">Add device</h2><button type="button" data-close>×</button>
<h2 data-i18n="devices.add">Add device</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<label><span data-i18n="common.name">Name</span><input name="name" required
data-i18n-placeholder="placeholder.livingRoom" placeholder="Living room"></label>
@@ -1154,7 +1155,7 @@
<dialog id="cloudDiscoveryDialog" class="dialog-wide">
<div class="dialog-form">
<div class="dialog-head"><div><span class="eyebrow">GREE Cloud</span><h2 data-i18n="devices.cloudDiscoveryTitle">Devices on account</h2></div><button type="button" data-close>×</button></div>
<div class="dialog-head"><div><span class="eyebrow">GREE Cloud</span><h2 data-i18n="devices.cloudDiscoveryTitle">Devices on account</h2></div><button type="button" data-close data-ui-icon="close"></button></div>
<p class="field-note" data-i18n="devices.cloudDiscoveryHint">Devices are loaded from the saved GREE Cloud account. Nothing is added automatically; choose the units you want to register.</p>
<div id="cloudDiscoveryList" class="discovery-name-list"></div>
<div class="form-actions"><button type="button" class="secondary" id="cloudDiscoveryRefresh" data-i18n="actions.refresh">Refresh</button><button type="button" class="primary" data-close data-i18n="actions.done">Done</button></div>
@@ -1164,7 +1165,7 @@
<dialog id="discoverDialog">
<form method="dialog" id="discoverForm" class="dialog-form">
<div class="dialog-head">
<h2 data-i18n="discovery.title">Discover GREE devices</h2><button type="button" data-close>×</button>
<h2 data-i18n="discovery.title">Discover GREE devices</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<p class="field-note" data-i18n="discovery.help">Auto searches both AES-ECB and AES-GCM devices. Multiple passes
improve discovery when several Wi-Fi modules answer the same broadcast.</p>
@@ -1185,7 +1186,7 @@
<dialog id="discoveryNamesDialog">
<form method="dialog" id="discoveryNamesForm" class="dialog-form">
<div class="dialog-head">
<h2 data-i18n="discovery.nameDevices">Name discovered devices</h2><button type="button" data-close>×</button>
<h2 data-i18n="discovery.nameDevices">Name discovered devices</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<p class="field-note" data-i18n="discovery.nameDevicesHelp">Give each new unit a friendly room name. The technical
model and MAC remain available in diagnostics.</p>
@@ -1200,7 +1201,7 @@
<form method="dialog" id="renameDeviceForm" class="dialog-form">
<input type="hidden" name="id">
<div class="dialog-head">
<h2 data-i18n="devices.technicalConfig">Technical configuration</h2><button type="button" data-close>×</button>
<h2 data-i18n="devices.technicalConfig">Technical configuration</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<label><span data-i18n="common.name">Name</span><input name="name" required maxlength="80"></label>
<div class="two"><label><span data-i18n="devices.ipAddress">IP address</span><input name="ip"
@@ -1226,7 +1227,7 @@
<input type="hidden" name="id">
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="devices.cloudDetails">Cloud details</span><h2 id="deviceDetailsTitle">Device details</h2></div>
<button type="button" data-close>×</button>
<button type="button" data-close data-ui-icon="close"></button>
</div>
<label><span data-i18n="common.name">Name</span><input name="name" required maxlength="80"></label>
<div class="technical-device-grid" id="deviceDetailsMeta"></div>
@@ -1249,7 +1250,7 @@
<dialog id="deviceGroupsDialog" class="dialog-wide">
<div class="dialog-form">
<div class="dialog-head"><div><span class="eyebrow" data-i18n="devices.installation">Installation</span><h2 data-i18n="devices.installations">Split / multisplit installations</h2></div><button type="button" data-close>×</button></div>
<div class="dialog-head"><div><span class="eyebrow" data-i18n="devices.installation">Installation</span><h2 data-i18n="devices.installations">Split / multisplit installations</h2></div><button type="button" data-close data-ui-icon="close"></button></div>
<p class="field-note" data-i18n="devices.installationsHint">Group indoor units that share one outdoor unit. Energy and outdoor temperature can use one shared source.</p>
<div id="deviceGroupsList" class="installation-list"></div>
<form id="deviceGroupForm" class="installation-form">
@@ -1271,7 +1272,7 @@
<dialog id="cloudDiagnosticsDialog" class="dialog-wide">
<div class="dialog-form">
<div class="dialog-head"><div><span class="eyebrow">GREE Cloud</span><h2 data-i18n="devices.cloudDiagnostics">Cloud diagnostics</h2></div><button type="button" data-close>×</button></div>
<div class="dialog-head"><div><span class="eyebrow">GREE Cloud</span><h2 data-i18n="devices.cloudDiagnostics">Cloud diagnostics</h2></div><button type="button" data-close data-ui-icon="close"></button></div>
<p class="field-note" data-i18n="devices.cloudDiagnosticsHint">Decrypted and sanitized protocol data. Passwords, tokens and cipher keys are never included.</p>
<pre id="cloudDiagnosticsPayload" class="mono cloud-diagnostics-payload"></pre>
<div class="form-actions"><button type="button" class="secondary" id="cloudDiagnosticsRefresh" data-i18n="actions.refresh">Refresh</button><button type="button" class="primary" data-close data-i18n="actions.done">Done</button></div>
@@ -1284,7 +1285,7 @@
<div><span class="eyebrow" data-i18n="devices.diagnostics">Diagnostics</span>
<h2 data-i18n="devices.pingLive">Live ping</h2>
</div>
<button type="button" data-close>×</button>
<button type="button" data-close data-ui-icon="close"></button>
</div>
<p class="field-note" data-i18n="devices.pingHint">Measures a minimal GREE round-trip without changing device
state, error counters or automation ownership. The chart refreshes while monitoring is enabled.</p>
@@ -1305,7 +1306,7 @@
<form method="dialog" id="zoneForm" class="dialog-form">
<input type="hidden" name="id">
<div class="dialog-head">
<h2 data-i18n="common.zone">Zone</h2><button type="button" data-close>×</button>
<h2 data-i18n="common.zone">Zone</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<label><span data-i18n="common.name">Name</span><input name="name" required
data-i18n-placeholder="placeholder.livingRoom" placeholder="Living room"></label>
@@ -1391,7 +1392,7 @@
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="zones.queueEyebrow">Compressor protection</span>
<h2 data-i18n="zones.queueTitle">Command queue</h2>
</div><button type="button" data-close>×</button>
</div><button type="button" data-close data-ui-icon="close"></button>
</div>
<p class="field-note" data-i18n="zones.queueHint">Commands waiting for the compressor protection window to end.
You can cancel one task or clear the whole queue.</p>
@@ -1411,7 +1412,7 @@
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="zones.quickThermostat">Szybki termostat</span>
<h2 data-i18n="zones.temporaryTitle">Włącz czasowo</h2>
</div><button type="button" data-close>×</button>
</div><button type="button" data-close data-ui-icon="close"></button>
</div>
<div id="temporaryThermostatActive" class="temporary-active-summary" hidden>
<div><small id="temporaryThermostatActiveLabel" data-i18n="zones.temporaryActive">Aktywny tryb
@@ -1498,7 +1499,7 @@
<form method="dialog" id="groupForm" class="dialog-form">
<input type="hidden" name="id">
<div class="dialog-head">
<h2 data-i18n="groups.group">Group</h2><button type="button" data-close>×</button>
<h2 data-i18n="groups.group">Group</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<label><span data-i18n="common.name">Name</span><input name="name" required
data-i18n-placeholder="groups.namePlaceholder" placeholder="Upstairs"></label>
@@ -1518,7 +1519,7 @@
<form method="dialog" id="scheduleForm" class="dialog-form">
<input type="hidden" name="id">
<div class="dialog-head">
<h2 data-i18n="common.schedule">Schedule</h2><button type="button" data-close>×</button>
<h2 data-i18n="common.schedule">Schedule</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<label><span data-i18n="common.name">Name</span><input name="name" required
data-i18n-placeholder="placeholder.night" placeholder="Night"></label>
@@ -1557,7 +1558,7 @@
<form method="dialog" id="automationForm" class="dialog-form">
<input type="hidden" name="id">
<div class="dialog-head">
<h2 data-i18n="common.automation">Automation</h2><button type="button" data-close>×</button>
<h2 data-i18n="common.automation">Automation</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<div class="copy-settings-row"><select id="automationPreset">
<option value="" data-i18n="automations.preset">Preset…</option>
@@ -1638,7 +1639,7 @@
<dialog id="generatedTokenDialog" class="auth-dialog">
<div class="dialog-form">
<div class="dialog-head">
<h2 data-i18n="settings.tokenCreated">Token created</h2><button type="button" data-close>×</button>
<h2 data-i18n="settings.tokenCreated">Token created</h2><button type="button" data-close data-ui-icon="close"></button>
</div>
<p class="field-note" data-i18n="settings.tokenCreatedHint">Copy this token now. It will not be shown again.</p>
<label><span data-i18n="auth.token">Access token</span><input id="generatedAccessToken" class="mono"
@@ -1653,7 +1654,7 @@
<div class="dialog-form">
<div class="dialog-head">
<div><span class="eyebrow" data-i18n="history.24h">24 hours</span><h2 data-i18n="history.allOutdoor">Outdoor temperatures</h2></div>
<button type="button" data-close data-i18n-aria="actions.close" aria-label="Close">×</button>
<button type="button" data-close data-i18n-aria="actions.close" aria-label="Close" data-ui-icon="close"></button>
</div>
<div class="outdoor-history-current"><small data-i18n="house.outdoor">Outdoor</small><strong id="outdoorHistoryCurrent">--</strong></div>
<div id="outdoorHistoryChartHost"></div>