iobroker.eos-admin 7.9.99 → 7.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{INSTALL_TEST_V7.9.99.md → INSTALL_TEST_V7.10.0.md} +2 -2
- package/{MERGE_UPDATE_README_V7.9.99.md → MERGE_UPDATE_README_V7.10.0.md} +1 -1
- package/NEXOWATT_EOS_BUILD_INFO.json +21 -21
- package/{PUBLISH_STABLE_V7.9.99.md → PUBLISH_STABLE_V7.10.0.md} +2 -2
- package/README_STABILITY_V7.10.0.md +3 -0
- package/{RELEASE_ACCEPTANCE_V7.9.99.md → RELEASE_ACCEPTANCE_V7.10.0.md} +1 -1
- package/RELEASE_NOTES_V7.10.0.md +17 -0
- package/adminWww/assets/bootstrap-COulQZax-v84.js +1 -1
- package/adminWww/css/eos-auto-update.css +4 -0
- package/adminWww/css/eos-ems-overview.css +1 -1
- package/adminWww/css/nexowatt-native-shell.css +432 -2
- package/adminWww/index.html +21 -19
- package/adminWww/js/eos-account-management.js +1 -1
- package/adminWww/js/eos-assistant.js +1 -1
- package/adminWww/js/eos-auto-update.js +78 -0
- package/adminWww/js/eos-ems-overview.js +1 -1
- package/adminWww/js/eos-release-watch.js +1 -1
- package/adminWww/js/eos-role-bootstrap.js +69 -12
- package/adminWww/js/eos-role-ui.js +2 -2
- package/adminWww/js/nexowatt-native-shell.js +1 -1
- package/adminWww/static/js/nexowatt-stable-login.js +70 -43
- package/adminWww/static/js/nexowatt-stable-v7100.js +111 -0
- package/build/lib/eosAutoUpdate.js +43 -0
- package/build/lib/eosPassword.js +49 -39
- package/build/lib/web.js +142 -19
- package/build/main.js +1 -1
- package/io-package.json +7 -6
- package/package.json +20 -14
- package/src/lib/eosAutoUpdate.ts +320 -0
- package/tools/nexowatt-account-management-selftest.cjs +2 -2
- package/tools/nexowatt-auto-update-selftest.cjs +34 -0
- package/tools/nexowatt-cache-update-selftest.cjs +6 -5
- package/tools/nexowatt-login-layout-selftest.cjs +11 -10
- package/tools/nexowatt-merge-update-selftest.cjs +1 -1
- package/tools/nexowatt-modern-ui-selftest.cjs +1 -1
- package/tools/nexowatt-password-write-selftest.cjs +13 -41
- package/tools/nexowatt-runtime-cleanup-selftest.cjs +6 -4
- package/tools/nexowatt-stable-v7100-selftest.cjs +17 -0
- package/tools/nexowatt-sync-release-version.cjs +4 -1
- package/tools/nexowatt-ui-overview-runtime-selftest.cjs +1 -1
- package/tools/nexowatt-validate-package.cjs +11 -11
- package/README_STABILITY_V7.9.99.md +0 -18
- package/RELEASE_NOTES_V7.9.99.md +0 -9
- package/adminWww/static/js/nexowatt-stable-v99.js +0 -33
- package/tools/nexowatt-stable-v99-selftest.cjs +0 -25
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/* NexoWatt EOS native stable auto-update card */
|
|
2
|
+
.eos-nexowatt-auto-update{box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:28px;width:calc(100% - 32px);margin:0 16px 14px;padding:22px 24px;border:1px solid rgba(0,229,138,.28);border-radius:20px;background:linear-gradient(120deg,rgba(0,71,66,.62),rgba(4,25,39,.96) 52%,rgba(4,21,34,.98));color:#effbff;box-shadow:0 16px 36px rgba(0,0,0,.18)}
|
|
3
|
+
.eos-nexowatt-auto-update[data-enabled="false"]{border-color:rgba(117,145,160,.34);background:linear-gradient(120deg,rgba(31,54,65,.72),rgba(4,21,34,.98))}
|
|
4
|
+
.eos-nau-copy{min-width:0;flex:1}.eos-nau-eyebrow{display:block;margin-bottom:5px;color:#00e58a;font-size:.72rem;font-weight:900;letter-spacing:.13em;text-transform:uppercase}.eos-nau-copy h2{margin:0 0 6px;font-size:1.35rem;line-height:1.2}.eos-nau-copy p{max-width:960px;margin:0;color:#a9c2d0;font-size:.82rem;line-height:1.55}.eos-nau-meta{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:13px;color:#84a8ba;font-size:.72rem}.eos-nau-meta strong{color:#d9f6ee}.eos-nau-adapters{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.eos-nau-adapters span{padding:5px 9px;border:1px solid rgba(0,229,138,.24);border-radius:999px;background:rgba(0,229,138,.08);color:#b9f6db;font-size:.7rem;font-weight:800}.eos-nau-error{margin-top:10px;padding:8px 10px;border:1px solid rgba(255,183,77,.38);border-radius:9px;background:rgba(255,152,0,.09);color:#ffd18d;font-size:.72rem}.eos-nau-switch{display:grid;grid-template-columns:50px auto;grid-template-rows:auto auto;align-items:center;column-gap:10px;min-width:160px;cursor:pointer}.eos-nau-switch input{position:absolute;opacity:0;pointer-events:none}.eos-nau-track{grid-row:1/3;position:relative;width:50px;height:28px;border:1px solid rgba(130,161,176,.55);border-radius:999px;background:#273e4c;transition:.2s}.eos-nau-thumb{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#b6c8d1;box-shadow:0 3px 8px rgba(0,0,0,.28);transition:.2s}.eos-nau-switch input:checked+.eos-nau-track{border-color:#00e58a;background:rgba(0,229,138,.26)}.eos-nau-switch input:checked+.eos-nau-track .eos-nau-thumb{left:25px;background:#00e58a}.eos-nau-switch strong{align-self:end;font-size:.82rem}.eos-nau-switch small{align-self:start;color:#83a2b2;font-size:.67rem}.eos-nau-switch input:focus-visible+.eos-nau-track{outline:2px solid #4bdcff;outline-offset:3px}@media(max-width:760px){.eos-nexowatt-auto-update{align-items:flex-start;flex-direction:column}.eos-nau-switch{align-self:flex-end}}
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
.eos-ems-overview-footer { display:grid; }
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
/*
|
|
62
|
+
/* v100: startup and compatibility messages stay compact. */
|
|
63
63
|
.eos-ems-overview-card.is-loading,
|
|
64
64
|
.eos-ems-overview-card.is-unavailable {
|
|
65
65
|
min-height: 0;
|
|
@@ -1292,7 +1292,7 @@ html.eos-route-intro #app-paper [class*="card"] {
|
|
|
1292
1292
|
.eos-assist-header-root .eos-assist-panel { right: 8px !important; width: calc(100vw - 16px); }
|
|
1293
1293
|
}
|
|
1294
1294
|
|
|
1295
|
-
/* NexoWatt EOS 7.
|
|
1295
|
+
/* NexoWatt EOS 7.10.0 – orderly login, moderately enlarged. */
|
|
1296
1296
|
html.eos-login,
|
|
1297
1297
|
html.eos-login body {
|
|
1298
1298
|
min-height: 100%;
|
|
@@ -1408,7 +1408,7 @@ html.eos-safe-overview-active #app-paper > :not(.MuiSnackbar-root):not([role="pr
|
|
|
1408
1408
|
.eos-intro-admin-edit-hidden { display: none !important; }
|
|
1409
1409
|
|
|
1410
1410
|
|
|
1411
|
-
/* NexoWatt EOS 7.
|
|
1411
|
+
/* NexoWatt EOS 7.10.0 – edit controls belong to the lowest Intro card grid. */
|
|
1412
1412
|
html.eos-route-intro .eos-native-intro-grid {
|
|
1413
1413
|
position: relative !important;
|
|
1414
1414
|
width: 100% !important;
|
|
@@ -1437,3 +1437,433 @@ html.eos-route-intro .eos-overview-edit-controls .MuiFab-root {
|
|
|
1437
1437
|
inset: auto !important;
|
|
1438
1438
|
margin: 0 !important;
|
|
1439
1439
|
}
|
|
1440
|
+
|
|
1441
|
+
|
|
1442
|
+
/* ==========================================================================
|
|
1443
|
+
NexoWatt EOS 7.10.0 – stable login geometry and guaranteed cockpit scroll.
|
|
1444
|
+
========================================================================== */
|
|
1445
|
+
html.eos-login,
|
|
1446
|
+
html.eos-login body {
|
|
1447
|
+
min-height: 100%;
|
|
1448
|
+
margin: 0 !important;
|
|
1449
|
+
overflow-x: hidden !important;
|
|
1450
|
+
overflow-y: auto !important;
|
|
1451
|
+
}
|
|
1452
|
+
html.eos-login #root {
|
|
1453
|
+
min-height: 100dvh !important;
|
|
1454
|
+
display: grid !important;
|
|
1455
|
+
place-items: center !important;
|
|
1456
|
+
box-sizing: border-box !important;
|
|
1457
|
+
padding: 12px 8px !important;
|
|
1458
|
+
}
|
|
1459
|
+
html.eos-login main.MuiPaper-root {
|
|
1460
|
+
position: relative !important;
|
|
1461
|
+
box-sizing: border-box !important;
|
|
1462
|
+
width: 100% !important;
|
|
1463
|
+
min-height: calc(100dvh - 24px) !important;
|
|
1464
|
+
display: grid !important;
|
|
1465
|
+
place-items: center !important;
|
|
1466
|
+
padding: 0 !important;
|
|
1467
|
+
overflow: visible !important;
|
|
1468
|
+
background: transparent !important;
|
|
1469
|
+
border: 0 !important;
|
|
1470
|
+
box-shadow: none !important;
|
|
1471
|
+
}
|
|
1472
|
+
html.eos-login main.MuiPaper-root::before {
|
|
1473
|
+
width: min(414px, calc(100vw - 20px)) !important;
|
|
1474
|
+
height: min(530px, calc(100dvh - 20px)) !important;
|
|
1475
|
+
min-height: 0 !important;
|
|
1476
|
+
border-radius: 24px !important;
|
|
1477
|
+
}
|
|
1478
|
+
html.eos-login main.MuiPaper-root > .eos-login-card-modern,
|
|
1479
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#username),
|
|
1480
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#password) {
|
|
1481
|
+
--nx-login-card-bg: #0b2235;
|
|
1482
|
+
box-sizing: border-box !important;
|
|
1483
|
+
width: min(364px, calc(100vw - 50px)) !important;
|
|
1484
|
+
min-width: 0 !important;
|
|
1485
|
+
min-height: 0 !important;
|
|
1486
|
+
height: auto !important;
|
|
1487
|
+
max-width: 364px !important;
|
|
1488
|
+
max-height: none !important;
|
|
1489
|
+
padding: 25px 27px 22px !important;
|
|
1490
|
+
overflow: visible !important;
|
|
1491
|
+
border-radius: 20px !important;
|
|
1492
|
+
background: linear-gradient(180deg, #102b42 0%, var(--nx-login-card-bg) 42%, #061725 100%) !important;
|
|
1493
|
+
}
|
|
1494
|
+
html.eos-login .eos-login-card-modern > .MuiGrid2-root {
|
|
1495
|
+
width: 100% !important;
|
|
1496
|
+
min-width: 0 !important;
|
|
1497
|
+
align-items: stretch !important;
|
|
1498
|
+
}
|
|
1499
|
+
html.eos-login .eos-login-card-modern .MuiBox-root:has(> img),
|
|
1500
|
+
html.eos-login .eos-login-card-modern .MuiAvatar-root {
|
|
1501
|
+
width: 82px !important;
|
|
1502
|
+
height: 82px !important;
|
|
1503
|
+
align-self: center !important;
|
|
1504
|
+
}
|
|
1505
|
+
html.eos-login .eos-login-card-modern h1.MuiTypography-root {
|
|
1506
|
+
margin: 4px 0 2px !important;
|
|
1507
|
+
line-height: 1.2 !important;
|
|
1508
|
+
text-align: center !important;
|
|
1509
|
+
}
|
|
1510
|
+
html.eos-login .eos-login-card-modern .MuiTextField-root {
|
|
1511
|
+
width: 100% !important;
|
|
1512
|
+
margin-top: 17px !important;
|
|
1513
|
+
margin-bottom: 1px !important;
|
|
1514
|
+
overflow: visible !important;
|
|
1515
|
+
}
|
|
1516
|
+
html.eos-login .eos-login-card-modern .MuiFormControl-root,
|
|
1517
|
+
html.eos-login .eos-login-card-modern .MuiInputBase-root {
|
|
1518
|
+
width: 100% !important;
|
|
1519
|
+
min-width: 0 !important;
|
|
1520
|
+
overflow: visible !important;
|
|
1521
|
+
}
|
|
1522
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root,
|
|
1523
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root.MuiInputLabel-shrink,
|
|
1524
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root[data-shrink="true"] {
|
|
1525
|
+
z-index: 2 !important;
|
|
1526
|
+
transform: translate(14px, -9px) scale(.75) !important;
|
|
1527
|
+
transform-origin: left top !important;
|
|
1528
|
+
padding: 0 5px !important;
|
|
1529
|
+
line-height: 1 !important;
|
|
1530
|
+
color: rgba(226, 243, 251, .82) !important;
|
|
1531
|
+
background: var(--nx-login-card-bg) !important;
|
|
1532
|
+
pointer-events: none !important;
|
|
1533
|
+
}
|
|
1534
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root.Mui-focused { color: #00e58a !important; }
|
|
1535
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-root {
|
|
1536
|
+
min-height: 46px !important;
|
|
1537
|
+
border-radius: 8px !important;
|
|
1538
|
+
background: rgba(3, 15, 26, .58) !important;
|
|
1539
|
+
}
|
|
1540
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-input {
|
|
1541
|
+
min-height: 0 !important;
|
|
1542
|
+
padding: 11px 13px !important;
|
|
1543
|
+
line-height: 24px !important;
|
|
1544
|
+
}
|
|
1545
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline { top: -5px !important; }
|
|
1546
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline legend {
|
|
1547
|
+
width: auto !important;
|
|
1548
|
+
max-width: calc(100% - 24px) !important;
|
|
1549
|
+
height: 11px !important;
|
|
1550
|
+
padding: 0 !important;
|
|
1551
|
+
overflow: hidden !important;
|
|
1552
|
+
}
|
|
1553
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline legend > span {
|
|
1554
|
+
display: inline-block !important;
|
|
1555
|
+
padding: 0 5px !important;
|
|
1556
|
+
font-size: .75em !important;
|
|
1557
|
+
}
|
|
1558
|
+
html.eos-login .eos-login-card-modern .MuiFormControlLabel-root {
|
|
1559
|
+
align-self: center !important;
|
|
1560
|
+
margin: 5px 0 3px !important;
|
|
1561
|
+
}
|
|
1562
|
+
html.eos-login .eos-login-card-modern button[type="submit"] {
|
|
1563
|
+
width: 100% !important;
|
|
1564
|
+
min-height: 42px !important;
|
|
1565
|
+
margin: 5px 0 0 !important;
|
|
1566
|
+
}
|
|
1567
|
+
html.eos-login .eos-login-card-modern > .MuiBox-root:last-child {
|
|
1568
|
+
width: 100% !important;
|
|
1569
|
+
margin-top: 20px !important;
|
|
1570
|
+
padding-top: 0 !important;
|
|
1571
|
+
}
|
|
1572
|
+
html.eos-login .MuiAlert-root,
|
|
1573
|
+
html.eos-login [role="alert"],
|
|
1574
|
+
html.eos-login .eos-login-first-status,
|
|
1575
|
+
html.eos-login .eos-login-first-hint {
|
|
1576
|
+
position: static !important;
|
|
1577
|
+
box-sizing: border-box !important;
|
|
1578
|
+
width: 100% !important;
|
|
1579
|
+
max-width: 100% !important;
|
|
1580
|
+
max-height: none !important;
|
|
1581
|
+
margin-top: 9px !important;
|
|
1582
|
+
overflow: visible !important;
|
|
1583
|
+
white-space: normal !important;
|
|
1584
|
+
overflow-wrap: anywhere !important;
|
|
1585
|
+
flex-shrink: 0 !important;
|
|
1586
|
+
}
|
|
1587
|
+
html.eos-login .eos-login-first-status:empty,
|
|
1588
|
+
html.eos-login .eos-login-first-hint:empty { display: none !important; }
|
|
1589
|
+
html.eos-login [data-nw-login-card="true"]:not(.MuiPaper-root):not(.eos-login-card-modern),
|
|
1590
|
+
html.eos-login [data-nw-login-shell="true"]:not(main):not(.MuiPaper-root) {
|
|
1591
|
+
width: 100% !important;
|
|
1592
|
+
min-width: 0 !important;
|
|
1593
|
+
max-width: 100% !important;
|
|
1594
|
+
min-height: 0 !important;
|
|
1595
|
+
height: auto !important;
|
|
1596
|
+
max-height: none !important;
|
|
1597
|
+
margin: 0 !important;
|
|
1598
|
+
padding: 0 !important;
|
|
1599
|
+
overflow: visible !important;
|
|
1600
|
+
border: 0 !important;
|
|
1601
|
+
background: transparent !important;
|
|
1602
|
+
box-shadow: none !important;
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
/* Header and navigation stay fixed. The complete Intro surface below them has
|
|
1606
|
+
one visible, draggable vertical scrollbar. */
|
|
1607
|
+
html.eos-app.eos-route-intro,
|
|
1608
|
+
html.eos-app.eos-route-intro body,
|
|
1609
|
+
html.eos-app.eos-route-intro #root {
|
|
1610
|
+
height: 100dvh !important;
|
|
1611
|
+
max-height: 100dvh !important;
|
|
1612
|
+
overflow: hidden !important;
|
|
1613
|
+
}
|
|
1614
|
+
html.eos-app.eos-route-intro #app-paper {
|
|
1615
|
+
position: fixed !important;
|
|
1616
|
+
top: var(--nx-content-top, 154px) !important;
|
|
1617
|
+
right: var(--nx-page-x, 12px) !important;
|
|
1618
|
+
bottom: 8px !important;
|
|
1619
|
+
left: var(--nx-page-x, 12px) !important;
|
|
1620
|
+
box-sizing: border-box !important;
|
|
1621
|
+
width: auto !important;
|
|
1622
|
+
height: auto !important;
|
|
1623
|
+
min-height: 0 !important;
|
|
1624
|
+
max-height: none !important;
|
|
1625
|
+
margin: 0 !important;
|
|
1626
|
+
padding-bottom: 0 !important;
|
|
1627
|
+
overflow-x: hidden !important;
|
|
1628
|
+
overflow-y: scroll !important;
|
|
1629
|
+
overscroll-behavior: contain !important;
|
|
1630
|
+
-webkit-overflow-scrolling: touch;
|
|
1631
|
+
scrollbar-gutter: stable both-edges;
|
|
1632
|
+
scrollbar-width: thin;
|
|
1633
|
+
scrollbar-color: #00dc84 rgba(3, 15, 26, .78);
|
|
1634
|
+
}
|
|
1635
|
+
html.eos-app.eos-route-intro #app-paper::-webkit-scrollbar { width: 12px !important; }
|
|
1636
|
+
html.eos-app.eos-route-intro #app-paper::-webkit-scrollbar-track {
|
|
1637
|
+
background: rgba(3, 15, 26, .78) !important;
|
|
1638
|
+
border-radius: 999px !important;
|
|
1639
|
+
}
|
|
1640
|
+
html.eos-app.eos-route-intro #app-paper::-webkit-scrollbar-thumb {
|
|
1641
|
+
border: 2px solid rgba(3, 15, 26, .78) !important;
|
|
1642
|
+
border-radius: 999px !important;
|
|
1643
|
+
background: linear-gradient(180deg, #00dc84, #45d5ff) !important;
|
|
1644
|
+
}
|
|
1645
|
+
html.eos-app.eos-route-intro #app-paper > *,
|
|
1646
|
+
html.eos-app.eos-route-intro #app-paper > .eos-intro-scroll-content,
|
|
1647
|
+
html.eos-app.eos-route-intro #app-paper > [class*="TabContainer"],
|
|
1648
|
+
html.eos-app.eos-route-intro #app-paper > .MuiPaper-root {
|
|
1649
|
+
min-height: max-content !important;
|
|
1650
|
+
height: auto !important;
|
|
1651
|
+
max-height: none !important;
|
|
1652
|
+
overflow: visible !important;
|
|
1653
|
+
flex-shrink: 0 !important;
|
|
1654
|
+
}
|
|
1655
|
+
@media (max-width: 500px) {
|
|
1656
|
+
html.eos-login #root { padding: 8px !important; }
|
|
1657
|
+
html.eos-login main.MuiPaper-root::before { width: calc(100vw - 12px) !important; height: calc(100% - 4px) !important; }
|
|
1658
|
+
html.eos-login main.MuiPaper-root > .eos-login-card-modern,
|
|
1659
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#username),
|
|
1660
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#password) {
|
|
1661
|
+
width: calc(100vw - 38px) !important;
|
|
1662
|
+
max-width: none !important;
|
|
1663
|
+
padding: 22px 20px !important;
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
|
|
1668
|
+
/* NexoWatt EOS 7.10.0 – restored clean login geometry. */
|
|
1669
|
+
html.eos-login main.MuiPaper-root::before {
|
|
1670
|
+
width: min(424px, calc(100vw - 20px)) !important;
|
|
1671
|
+
height: min(548px, calc(100dvh - 20px)) !important;
|
|
1672
|
+
border-radius: 24px !important;
|
|
1673
|
+
}
|
|
1674
|
+
html.eos-login main.MuiPaper-root > .eos-login-card-modern,
|
|
1675
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#username),
|
|
1676
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#password) {
|
|
1677
|
+
--nx-login-card-bg: #0a1f31;
|
|
1678
|
+
width: min(372px, calc(100vw - 48px)) !important;
|
|
1679
|
+
min-height: 0 !important;
|
|
1680
|
+
height: auto !important;
|
|
1681
|
+
max-height: none !important;
|
|
1682
|
+
padding: 26px 28px 24px !important;
|
|
1683
|
+
overflow: visible !important;
|
|
1684
|
+
border-radius: 21px !important;
|
|
1685
|
+
background: linear-gradient(180deg, #102b42 0%, var(--nx-login-card-bg) 42%, #061725 100%) !important;
|
|
1686
|
+
}
|
|
1687
|
+
html.eos-login .eos-login-card-modern .MuiTextField-root {
|
|
1688
|
+
width: 100% !important;
|
|
1689
|
+
margin-top: 16px !important;
|
|
1690
|
+
margin-bottom: 2px !important;
|
|
1691
|
+
}
|
|
1692
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root,
|
|
1693
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root.MuiInputLabel-shrink,
|
|
1694
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root[data-shrink="true"] {
|
|
1695
|
+
z-index: 2 !important;
|
|
1696
|
+
transform: translate(14px, -8px) scale(.75) !important;
|
|
1697
|
+
transform-origin: left top !important;
|
|
1698
|
+
padding: 0 6px !important;
|
|
1699
|
+
line-height: 1.05 !important;
|
|
1700
|
+
color: rgba(226,243,251,.82) !important;
|
|
1701
|
+
background: var(--nx-login-card-bg) !important;
|
|
1702
|
+
pointer-events: none !important;
|
|
1703
|
+
}
|
|
1704
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root.Mui-focused { color: #00e58a !important; }
|
|
1705
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-root {
|
|
1706
|
+
min-height: 46px !important;
|
|
1707
|
+
border-radius: 8px !important;
|
|
1708
|
+
background: rgba(3,15,26,.58) !important;
|
|
1709
|
+
}
|
|
1710
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-input {
|
|
1711
|
+
min-height: 0 !important;
|
|
1712
|
+
padding: 12px 13px !important;
|
|
1713
|
+
line-height: 1.25 !important;
|
|
1714
|
+
}
|
|
1715
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline { top: -5px !important; }
|
|
1716
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline legend {
|
|
1717
|
+
display: block !important;
|
|
1718
|
+
width: auto !important;
|
|
1719
|
+
max-width: 100% !important;
|
|
1720
|
+
height: 11px !important;
|
|
1721
|
+
overflow: hidden !important;
|
|
1722
|
+
}
|
|
1723
|
+
html.eos-login .eos-login-card-modern .MuiFormControlLabel-root {
|
|
1724
|
+
align-self: center !important;
|
|
1725
|
+
margin: 6px 0 4px !important;
|
|
1726
|
+
}
|
|
1727
|
+
html.eos-login .eos-login-card-modern button[type="submit"] { min-height: 42px !important; margin: 5px 0 0 !important; }
|
|
1728
|
+
html.eos-login .eos-login-card-modern > .MuiBox-root:last-child { margin-top: 18px !important; padding-top: 0 !important; }
|
|
1729
|
+
html.eos-login .eos-login-card-modern .MuiBox-root:has(> img),
|
|
1730
|
+
html.eos-login .eos-login-card-modern .MuiAvatar-root { width: 90px !important; height: 90px !important; }
|
|
1731
|
+
@media (max-height: 620px) {
|
|
1732
|
+
html.eos-login main.MuiPaper-root::before { height: calc(100% - 8px) !important; }
|
|
1733
|
+
html.eos-login main.MuiPaper-root > .eos-login-card-modern,
|
|
1734
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#username),
|
|
1735
|
+
html.eos-login main.MuiPaper-root > .MuiPaper-root:has(#password) { padding-top: 20px !important; padding-bottom: 18px !important; }
|
|
1736
|
+
}
|
|
1737
|
+
|
|
1738
|
+
|
|
1739
|
+
/* NexoWatt EOS 7.10.0 – guaranteed scroll surface for the native overview. */
|
|
1740
|
+
html.eos-app.eos-route-intro,
|
|
1741
|
+
html.eos-app.eos-route-intro body,
|
|
1742
|
+
html.eos-app.eos-route-intro #root {
|
|
1743
|
+
height: 100dvh !important;
|
|
1744
|
+
max-height: 100dvh !important;
|
|
1745
|
+
overflow: hidden !important;
|
|
1746
|
+
}
|
|
1747
|
+
html.eos-app.eos-route-intro #app-paper,
|
|
1748
|
+
html.eos-app.eos-intro-scroll-enabled #app-paper {
|
|
1749
|
+
position: fixed !important;
|
|
1750
|
+
top: var(--nx-content-top) !important;
|
|
1751
|
+
right: var(--nx-page-x) !important;
|
|
1752
|
+
bottom: 8px !important;
|
|
1753
|
+
left: var(--nx-page-x) !important;
|
|
1754
|
+
width: auto !important;
|
|
1755
|
+
height: auto !important;
|
|
1756
|
+
min-height: 0 !important;
|
|
1757
|
+
max-height: none !important;
|
|
1758
|
+
margin: 0 !important;
|
|
1759
|
+
padding-bottom: 0 !important;
|
|
1760
|
+
overflow-x: hidden !important;
|
|
1761
|
+
overflow-y: scroll !important;
|
|
1762
|
+
overscroll-behavior: contain !important;
|
|
1763
|
+
scrollbar-gutter: stable !important;
|
|
1764
|
+
scrollbar-width: thin !important;
|
|
1765
|
+
scrollbar-color: rgba(0,229,138,.92) rgba(3,15,26,.78) !important;
|
|
1766
|
+
-webkit-overflow-scrolling: touch;
|
|
1767
|
+
}
|
|
1768
|
+
html.eos-app.eos-route-intro #app-paper::-webkit-scrollbar,
|
|
1769
|
+
html.eos-app.eos-intro-scroll-enabled #app-paper::-webkit-scrollbar { width: 12px !important; }
|
|
1770
|
+
html.eos-app.eos-route-intro #app-paper::-webkit-scrollbar-track,
|
|
1771
|
+
html.eos-app.eos-intro-scroll-enabled #app-paper::-webkit-scrollbar-track {
|
|
1772
|
+
background: rgba(3,15,26,.78) !important;
|
|
1773
|
+
border-radius: 999px !important;
|
|
1774
|
+
}
|
|
1775
|
+
html.eos-app.eos-route-intro #app-paper::-webkit-scrollbar-thumb,
|
|
1776
|
+
html.eos-app.eos-intro-scroll-enabled #app-paper::-webkit-scrollbar-thumb {
|
|
1777
|
+
min-height: 54px !important;
|
|
1778
|
+
border: 2px solid rgba(3,15,26,.78) !important;
|
|
1779
|
+
border-radius: 999px !important;
|
|
1780
|
+
background: linear-gradient(180deg, #00e58a, #45d5ff) !important;
|
|
1781
|
+
}
|
|
1782
|
+
html.eos-app.eos-route-intro #app-paper > *,
|
|
1783
|
+
html.eos-app.eos-intro-scroll-enabled #app-paper > * {
|
|
1784
|
+
flex-shrink: 0 !important;
|
|
1785
|
+
overflow: visible !important;
|
|
1786
|
+
}
|
|
1787
|
+
html.eos-app.eos-route-intro #app-paper > :last-child,
|
|
1788
|
+
html.eos-app.eos-intro-scroll-enabled #app-paper > :last-child { margin-bottom: 28px !important; }
|
|
1789
|
+
|
|
1790
|
+
|
|
1791
|
+
/* 7.10.0 final login fields: localized labels sit above the inputs. This is
|
|
1792
|
+
deliberately not a floating MUI label, so no browser/font combination can
|
|
1793
|
+
draw the field border through the text. */
|
|
1794
|
+
html.eos-login .eos-login-card-modern .MuiTextField-root {
|
|
1795
|
+
display: flex !important;
|
|
1796
|
+
flex-direction: column !important;
|
|
1797
|
+
gap: 6px !important;
|
|
1798
|
+
margin-top: 13px !important;
|
|
1799
|
+
overflow: visible !important;
|
|
1800
|
+
}
|
|
1801
|
+
html.eos-login .eos-login-card-modern .MuiTextField-root[data-eos-login-label]::before,
|
|
1802
|
+
html.eos-login .eos-login-card-modern .MuiFormControl-root[data-eos-login-label]::before {
|
|
1803
|
+
content: attr(data-eos-login-label);
|
|
1804
|
+
display: block !important;
|
|
1805
|
+
min-height: 14px !important;
|
|
1806
|
+
padding-left: 2px !important;
|
|
1807
|
+
color: rgba(230, 245, 252, .88) !important;
|
|
1808
|
+
font-size: 12px !important;
|
|
1809
|
+
font-weight: 700 !important;
|
|
1810
|
+
line-height: 14px !important;
|
|
1811
|
+
letter-spacing: .01em !important;
|
|
1812
|
+
}
|
|
1813
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root {
|
|
1814
|
+
display: none !important;
|
|
1815
|
+
}
|
|
1816
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline {
|
|
1817
|
+
top: 0 !important;
|
|
1818
|
+
}
|
|
1819
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline legend {
|
|
1820
|
+
display: none !important;
|
|
1821
|
+
width: 0 !important;
|
|
1822
|
+
max-width: 0 !important;
|
|
1823
|
+
height: 0 !important;
|
|
1824
|
+
}
|
|
1825
|
+
|
|
1826
|
+
|
|
1827
|
+
/* NexoWatt EOS 7.10.0 final – static labels above login fields. */
|
|
1828
|
+
html.eos-login .eos-login-card-modern .MuiTextField-root {
|
|
1829
|
+
display: flex !important;
|
|
1830
|
+
flex-direction: column !important;
|
|
1831
|
+
align-items: stretch !important;
|
|
1832
|
+
gap: 6px !important;
|
|
1833
|
+
margin-top: 14px !important;
|
|
1834
|
+
overflow: visible !important;
|
|
1835
|
+
}
|
|
1836
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root,
|
|
1837
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root.MuiInputLabel-shrink,
|
|
1838
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root[data-shrink="true"] {
|
|
1839
|
+
display: block !important;
|
|
1840
|
+
position: static !important;
|
|
1841
|
+
order: 0 !important;
|
|
1842
|
+
align-self: flex-start !important;
|
|
1843
|
+
transform: none !important;
|
|
1844
|
+
transform-origin: initial !important;
|
|
1845
|
+
max-width: 100% !important;
|
|
1846
|
+
margin: 0 0 1px 2px !important;
|
|
1847
|
+
padding: 0 !important;
|
|
1848
|
+
line-height: 1.25 !important;
|
|
1849
|
+
font-size: 13px !important;
|
|
1850
|
+
color: rgba(226, 243, 251, .86) !important;
|
|
1851
|
+
background: transparent !important;
|
|
1852
|
+
}
|
|
1853
|
+
html.eos-login .eos-login-card-modern .MuiInputLabel-root.Mui-focused {
|
|
1854
|
+
color: #00e58a !important;
|
|
1855
|
+
}
|
|
1856
|
+
html.eos-login .eos-login-card-modern .MuiInputBase-root {
|
|
1857
|
+
order: 1 !important;
|
|
1858
|
+
width: 100% !important;
|
|
1859
|
+
}
|
|
1860
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline {
|
|
1861
|
+
top: 0 !important;
|
|
1862
|
+
}
|
|
1863
|
+
html.eos-login .eos-login-card-modern .MuiOutlinedInput-notchedOutline legend {
|
|
1864
|
+
display: none !important;
|
|
1865
|
+
width: 0 !important;
|
|
1866
|
+
max-width: 0 !important;
|
|
1867
|
+
height: 0 !important;
|
|
1868
|
+
padding: 0 !important;
|
|
1869
|
+
}
|
package/adminWww/index.html
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
<meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate" />
|
|
9
9
|
<meta http-equiv="Pragma" content="no-cache" />
|
|
10
10
|
<meta http-equiv="Expires" content="0" />
|
|
11
|
-
<script src="./js/eos-release-watch.js?v=
|
|
12
|
-
<script src="./js/eos-manual-write-policy.js?v=
|
|
13
|
-
<script type="module" src="./assets/hostInit-v84.js?v=
|
|
11
|
+
<script src="./js/eos-release-watch.js?v=7100"></script>
|
|
12
|
+
<script src="./js/eos-manual-write-policy.js?v=7100"></script>
|
|
13
|
+
<script type="module" src="./assets/hostInit-v84.js?v=7100"></script>
|
|
14
14
|
|
|
15
15
|
<meta charset="utf-8" />
|
|
16
16
|
<link
|
|
@@ -37,8 +37,9 @@
|
|
|
37
37
|
rel="stylesheet"
|
|
38
38
|
href="css/leaflet.css"
|
|
39
39
|
/>
|
|
40
|
-
<link rel="stylesheet" href="./css/nexowatt-native-shell.css?v=
|
|
41
|
-
<link rel="stylesheet" href="./css/eos-ems-overview.css?v=
|
|
40
|
+
<link rel="stylesheet" href="./css/nexowatt-native-shell.css?v=7100" />
|
|
41
|
+
<link rel="stylesheet" href="./css/eos-ems-overview.css?v=7100" />
|
|
42
|
+
<link rel="stylesheet" href="./css/eos-auto-update.css?v=7100" />
|
|
42
43
|
<link
|
|
43
44
|
rel="manifest"
|
|
44
45
|
href="manifest.json"
|
|
@@ -158,23 +159,24 @@
|
|
|
158
159
|
false,
|
|
159
160
|
);
|
|
160
161
|
</script>
|
|
161
|
-
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js?v=
|
|
162
|
-
<link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js?v=
|
|
163
|
-
<script defer src="./js/eos-role-bootstrap.js?v=
|
|
164
|
-
<script defer src="./js/eos-policy-client.js?v=
|
|
165
|
-
<script defer src="./js/eos-branding-sanitizer.js?v=
|
|
166
|
-
<script defer src="./js/nexowatt-native-shell.js?v=
|
|
167
|
-
<script defer src="./js/eos-native-security.js?v=
|
|
168
|
-
<script defer src="./js/eos-basic-settings.js?v=
|
|
169
|
-
<script defer src="./js/eos-role-ui.js?v=
|
|
170
|
-
<script defer src="./js/eos-ems-overview.js?v=
|
|
171
|
-
<script defer src="./js/eos-account-management.js?v=
|
|
172
|
-
<script defer src="./js/eos-
|
|
162
|
+
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js?v=7100">
|
|
163
|
+
<link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js?v=7100">
|
|
164
|
+
<script defer src="./js/eos-role-bootstrap.js?v=7100" data-eos-entry="./assets/index-CQZugZ1z-v84.js?v=7100"></script>
|
|
165
|
+
<script defer src="./js/eos-policy-client.js?v=7100"></script>
|
|
166
|
+
<script defer src="./js/eos-branding-sanitizer.js?v=7100"></script>
|
|
167
|
+
<script defer src="./js/nexowatt-native-shell.js?v=7100"></script>
|
|
168
|
+
<script defer src="./js/eos-native-security.js?v=7100"></script>
|
|
169
|
+
<script defer src="./js/eos-basic-settings.js?v=7100"></script>
|
|
170
|
+
<script defer src="./js/eos-role-ui.js?v=7100"></script>
|
|
171
|
+
<script defer src="./js/eos-ems-overview.js?v=7100"></script>
|
|
172
|
+
<script defer src="./js/eos-account-management.js?v=7100"></script>
|
|
173
|
+
<script defer src="./js/eos-auto-update.js?v=7100"></script>
|
|
174
|
+
<script defer src="./js/eos-assistant.js?v=7100"></script>
|
|
173
175
|
</head>
|
|
174
176
|
<body>
|
|
175
177
|
<noscript>Für NexoWatt EOS muss JavaScript aktiviert sein.</noscript>
|
|
176
178
|
<div id="root"></div>
|
|
177
|
-
<script defer src="static/js/nexowatt-stable-login.js?v=
|
|
178
|
-
<script defer src="static/js/nexowatt-stable-
|
|
179
|
+
<script defer src="static/js/nexowatt-stable-login.js?v=7100"></script>
|
|
180
|
+
<script defer src="static/js/nexowatt-stable-v7100.js?v=7100"></script>
|
|
179
181
|
</body>
|
|
180
182
|
</html>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const VERSION = '
|
|
4
|
+
const VERSION = 'v7100-account-management-password-write';
|
|
5
5
|
const script = document.currentScript || document.querySelector('script[src*="eos-account-management.js"]');
|
|
6
6
|
const base = new URL('../', script?.src || window.location.href);
|
|
7
7
|
const abort = new AbortController();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
|
-
// NexoWatt EOS stable 7.
|
|
3
|
+
// NexoWatt EOS stable 7.10.0: EOS Assist remains disabled until the
|
|
4
4
|
// read-only system assistant is rebuilt and accepted separately.
|
|
5
5
|
window.NEXOWATT_EOS_ASSIST_DISABLED = true;
|
|
6
6
|
document.documentElement.classList.add('eos-assist-disabled');
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
'use strict';
|
|
3
|
+
const VERSION = 'v7100-nexowatt-stable-auto-update';
|
|
4
|
+
const ROOT_ID = 'eos-nexowatt-auto-update';
|
|
5
|
+
const script = document.currentScript;
|
|
6
|
+
const API = new URL('../nexowatt/updates/', script?.src || document.baseURI).href;
|
|
7
|
+
let busy = false;
|
|
8
|
+
let lastLoad = 0;
|
|
9
|
+
let pollTimer = 0;
|
|
10
|
+
|
|
11
|
+
const role = () => String(window.NEXOWATT_EOS_ACCESS_ROLE || 'admin').toLowerCase();
|
|
12
|
+
const introActive = () => String(location.hash || '').replace(/^#\/?/, '').split(/[/?&]/)[0] === 'tab-intro';
|
|
13
|
+
const esc = value => String(value ?? '').replace(/[&<>'"]/g, char => ({'&':'&','<':'<','>':'>',"'":''','"':'"'}[char]));
|
|
14
|
+
const formatTime = value => value ? new Intl.DateTimeFormat(undefined, { dateStyle: 'short', timeStyle: 'medium' }).format(new Date(value)) : '–';
|
|
15
|
+
|
|
16
|
+
const ensureRoot = () => {
|
|
17
|
+
if (role() !== 'admin' || !introActive()) { document.getElementById(ROOT_ID)?.remove(); return null; }
|
|
18
|
+
let root = document.getElementById(ROOT_ID);
|
|
19
|
+
if (root) return root;
|
|
20
|
+
root = document.createElement('section');
|
|
21
|
+
root.id = ROOT_ID;
|
|
22
|
+
root.className = 'eos-nexowatt-auto-update';
|
|
23
|
+
const hero = document.getElementById('eos-native-overview-hero');
|
|
24
|
+
const ems = document.getElementById('eos-ems-overview-runtime');
|
|
25
|
+
const parent = ems?.parentElement || hero?.parentElement || document.getElementById('app-paper');
|
|
26
|
+
if (!parent) return null;
|
|
27
|
+
if (ems) parent.insertBefore(root, ems); else if (hero?.nextSibling) parent.insertBefore(root, hero.nextSibling); else parent.append(root);
|
|
28
|
+
return root;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const render = status => {
|
|
32
|
+
const root = ensureRoot(); if (!root) return;
|
|
33
|
+
const enabled = status?.enabled !== false;
|
|
34
|
+
const managed = Array.isArray(status?.managedAdapters) ? status.managedAdapters : [];
|
|
35
|
+
const error = String(status?.error || '');
|
|
36
|
+
root.dataset.enabled = String(enabled);
|
|
37
|
+
root.innerHTML = `<div class="eos-nau-copy"><span class="eos-nau-eyebrow">NexoWatt Stable</span><h2>Automatische Adapter-Updates</h2><p>${enabled ? 'Installierte NexoWatt-Adapter werden automatisch aktualisiert, sobald im erkannten Stable-Repository eine neuere stabile Version verfügbar ist.' : 'Automatische NexoWatt-Updates sind deaktiviert. Vorherige ioBroker-Update-Richtlinien wurden wiederhergestellt.'}</p><div class="eos-nau-meta"><span>Repository: <strong>${esc(status?.repository || 'wird erkannt')}</strong></span><span>Letzter Abgleich: <strong>${esc(formatTime(status?.lastSync))}</strong></span><span>Richtlinie: <strong>alle neueren Stable-Versionen</strong></span></div>${managed.length ? `<div class="eos-nau-adapters">${managed.map(name => `<span>${esc(name)}</span>`).join('')}</div>` : ''}${error ? `<div class="eos-nau-error">${esc(error)}</div>` : ''}</div><label class="eos-nau-switch"><input type="checkbox" ${enabled ? 'checked' : ''} ${busy ? 'disabled' : ''}><span class="eos-nau-track"><span class="eos-nau-thumb"></span></span><strong>${enabled ? 'Aktiv' : 'Deaktiviert'}</strong><small>jederzeit änderbar</small></label>`;
|
|
38
|
+
root.querySelector('input')?.addEventListener('change', event => void save(Boolean(event.currentTarget.checked)));
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const request = async (path, options = {}) => {
|
|
42
|
+
const response = await fetch(new URL(path, API), { cache: 'no-store', credentials: 'same-origin', ...options });
|
|
43
|
+
const data = await response.json().catch(() => ({}));
|
|
44
|
+
if (!response.ok) throw new Error(data.error || `HTTP ${response.status}`);
|
|
45
|
+
return data;
|
|
46
|
+
};
|
|
47
|
+
const load = async (force = false) => {
|
|
48
|
+
if (role() !== 'admin' || !introActive()) return;
|
|
49
|
+
if (!force && Date.now() - lastLoad < 5000) return;
|
|
50
|
+
lastLoad = Date.now();
|
|
51
|
+
try { render(await request('status')); }
|
|
52
|
+
catch (error) { render({ enabled: true, error: error?.message || error }); }
|
|
53
|
+
};
|
|
54
|
+
const save = async enabled => {
|
|
55
|
+
if (busy) return;
|
|
56
|
+
busy = true;
|
|
57
|
+
try {
|
|
58
|
+
render({ enabled });
|
|
59
|
+
const status = await request('settings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-NexoWatt-EOS-Auto-Update': '1' }, body: JSON.stringify({ enabled }) });
|
|
60
|
+
render(status);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
render({ enabled: !enabled, error: error?.message || error });
|
|
63
|
+
} finally { busy = false; }
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
let scheduled = false;
|
|
67
|
+
const schedule = () => { if (scheduled) return; scheduled = true; requestAnimationFrame(() => { scheduled = false; void load(); }); };
|
|
68
|
+
const start = () => {
|
|
69
|
+
void load();
|
|
70
|
+
window.addEventListener('hashchange', () => { lastLoad = 0; schedule(); });
|
|
71
|
+
window.addEventListener('nexowatt-eos-admin-socket-ready', schedule);
|
|
72
|
+
document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible') schedule(); });
|
|
73
|
+
new MutationObserver(() => { if (!document.getElementById(ROOT_ID) && introActive()) schedule(); }).observe(document.documentElement, { childList: true, subtree: true });
|
|
74
|
+
pollTimer = window.setInterval(() => void load(true), 30000);
|
|
75
|
+
};
|
|
76
|
+
document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', start, { once: true }) : start();
|
|
77
|
+
window.NEXOWATT_EOS_AUTO_UPDATE_UI = Object.freeze({ version: VERSION, refresh: load });
|
|
78
|
+
})();
|