iobroker.eos-admin 7.9.48 → 7.9.50

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.
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./bootstrap-DPWrite50.js","./DefaultPropsProvider-BiXBMQYQ.js","./_commonjsHelpers-CE1G-McA.js","./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js","./emotion-serialize.esm-Q4o_CgeF.js","./iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BywLg1Xe.js","./iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js","./ace-DEUjyTIn.js","./iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-LFZoiUTt.js","./iobroker_admin__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__-CpA7pnS5.js","./iobroker_admin__loadShare__leaflet__loadShare__-CNUAG3AH.js","./ext-language_tools-ylAoucDh.js","./iobroker_admin__loadShare__react_mf_2_dropzone__loadShare__-CwjnV48g.js","./iobroker_admin__loadShare__react_mf_2_dom__loadShare__-CVeAXnkk.js","./preload-helper-BDBacUwf.js","./iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js","./sdk-C-e-e2gd.js","./extends-CF3RwP-h.js","./assertThisInitialized-B0aQ9eG_.js","./useTheme-Bl-M1DYp.js","./createTheme-DFX8CY6F.js","./blue-CagzI6CQ.js","./index-DcK0RDrH.js","./ThemeProvider-BOFFjWAF.js","./emotion-cache.browser.esm-BgJfNZJN.js","./setYear-3ufv5yRD.js","./en-US-DBFJNIH6.js","./bootstrap-D57bMhRi.css"])))=>i.map(i=>d[i]);
2
+ import{_ as c}from"./preload-helper-BDBacUwf.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))s(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c(()=>import("./bootstrap-DPWrite50.js").then(i=>i.o),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]),import.meta.url);
@@ -4,7 +4,7 @@
4
4
  translate="no"
5
5
  >
6
6
  <head>
7
- <script type="module" src="./assets/hostInit-OBG53iVO.js"></script>
7
+ <script type="module" src="./assets/hostInit-DPWrite50.js?v=50"></script>
8
8
 
9
9
  <meta charset="utf-8" />
10
10
  <link
@@ -31,7 +31,7 @@
31
31
  rel="stylesheet"
32
32
  href="css/leaflet.css"
33
33
  />
34
- <link rel="stylesheet" href="./css/eos-branding.css?v=48" />
34
+ <link rel="stylesheet" href="./css/eos-branding.css?v=50" />
35
35
  <link
36
36
  rel="manifest"
37
37
  href="manifest.json"
@@ -151,14 +151,14 @@
151
151
  false,
152
152
  );
153
153
  </script>
154
- <script type="module" crossorigin src="./assets/index-CQZugZ1z.js"></script>
154
+ <script type="module" crossorigin src="./assets/index-DPWrite50.js?v=50"></script>
155
155
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js">
156
156
  <link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js">
157
- <script defer src="./js/eos-branding.js?v=48"></script>
158
- <script defer src="./js/eos-security-ui.js?v=48"></script>
159
- <script defer src="./js/eos-role-ui.js?v=48"></script>
160
- <script defer src="./js/eos-assistant.js?v=48"></script>
161
- <script defer src="./js/eos-objects-state-tools.js?v=48"></script>
157
+ <script defer src="./js/eos-branding.js?v=50"></script>
158
+ <script defer src="./js/eos-security-ui.js?v=50"></script>
159
+ <script defer src="./js/eos-role-ui.js?v=50"></script>
160
+ <script defer src="./js/eos-assistant.js?v=50"></script>
161
+ <script defer src="./js/eos-objects-state-tools.js?v=50"></script>
162
162
  </head>
163
163
  <body>
164
164
  <noscript>You need to enable JavaScript to run this app.</noscript>
@@ -1,7 +1,7 @@
1
1
  (() => {
2
2
  'use strict';
3
3
 
4
- window.NEXOWATT_EOS_UI_VERSION = 'v48-role-guard-fix';
4
+ window.NEXOWATT_EOS_UI_VERSION = 'v50-dp-write-hardfix';
5
5
 
6
6
  const BRAND = 'NexoWatt EOS';
7
7
  const EOS_MEANING = 'Energy Operation System';
@@ -1463,6 +1463,8 @@
1463
1463
  run();
1464
1464
  };
1465
1465
 
1466
+ const isObjectsRoute = () => /#\/?tab-objects\b|#tab-objects\b/.test(String(window.location.hash || '')) || /[?&]tab=objects/.test(String(window.location.href || ''));
1467
+
1466
1468
  const installObserver = () => safe(() => {
1467
1469
  const observer = new MutationObserver(mutations => {
1468
1470
  for (const mutation of mutations) {
@@ -1477,7 +1479,10 @@
1477
1479
  if (node.nodeType === Node.TEXT_NODE) {
1478
1480
  if (isAdapterConfigSurface() && node.parentElement?.closest?.('#app-paper')) patchMojibakeTextNode(node);
1479
1481
  else patchTextNode(node);
1480
- } else if (node.nodeType === Node.ELEMENT_NODE) state.pendingScopes.add(node);
1482
+ } else if (node.nodeType === Node.ELEMENT_NODE) {
1483
+ if (isObjectsRoute() && node.closest?.('.eos-object-value-cell,[data-eos-object-value-cell]')) return;
1484
+ state.pendingScopes.add(node);
1485
+ }
1481
1486
  });
1482
1487
  }
1483
1488
  if (state.pendingScopes.size) scheduleScopePatch();
@@ -1485,7 +1490,9 @@
1485
1490
  observer.observe(document.documentElement, {
1486
1491
  subtree: true,
1487
1492
  childList: true,
1488
- characterData: true,
1493
+ // v50: React changes thousands of text nodes on the data-point page.
1494
+ // Added nodes are still patched; existing text-node mutation tracking is too expensive.
1495
+ characterData: false,
1489
1496
  });
1490
1497
  });
1491
1498
 
@@ -1,17 +1,16 @@
1
1
  (() => {
2
2
  'use strict';
3
3
 
4
- window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_VERSION = 'v45-delete-services-hardfix';
4
+ window.NEXOWATT_EOS_OBJECTS_STATE_TOOLS_VERSION = 'v50-dp-write-hardfix';
5
5
 
6
6
  const ACTIVE_CLASS = 'eos-objects-surface';
7
- const safe = fn => { try { return fn(); } catch (e) { return undefined; } };
7
+ const safe = fn => { try { return fn(); } catch (_) { return undefined; } };
8
+ const busyIds = new Set();
8
9
 
9
10
  const isObjectsRoute = () => {
10
11
  const hash = String(window.location.hash || '');
11
- if (/#tab-objects/.test(hash)) return true;
12
- const url = String(window.location.href || '');
13
- if (/[?&]tab=objects/.test(url)) return true;
14
- return false;
12
+ if (/#\/?tab-objects\b|#tab-objects\b/.test(hash)) return true;
13
+ return /[?&]tab=objects/.test(String(window.location.href || ''));
15
14
  };
16
15
 
17
16
  const setSurfaceState = () => {
@@ -52,79 +51,254 @@
52
51
  '[role="tooltip"]'
53
52
  ].join(',');
54
53
 
54
+ const valueCellSelector = [
55
+ '.eos-object-value-cell',
56
+ '[data-eos-object-value-cell]',
57
+ '[title*="Wert schreiben"]',
58
+ '[title*="Wert klicken"]',
59
+ '[title*="Button sofort testen"]'
60
+ ].join(',');
61
+
62
+ const collect = (base, selector) => {
63
+ const out = [];
64
+ if (!base) return out;
65
+ if (base.nodeType === Node.ELEMENT_NODE && base.matches?.(selector)) out.push(base);
66
+ if (base.querySelectorAll) out.push(...Array.from(base.querySelectorAll(selector)));
67
+ return out;
68
+ };
69
+
70
+ const getSocket = () => window.NEXOWATT_EOS_OBJECTS_SOCKET || window.NEXOWATT_EOS_SOCKET || window.socket || null;
71
+
72
+ const normalizeText = value => String(value ?? '').replace(/\s+/g, ' ').trim();
73
+
74
+ const isWritableCell = cell => {
75
+ if (!cell) return false;
76
+ if (cell.getAttribute('data-eos-object-writable') === '1') return true;
77
+ const title = `${cell.getAttribute('title') || ''} ${cell.textContent || ''}`;
78
+ return /wert\s*(klicken|schreiben)|write\s*value|sofort\s*testen/i.test(title);
79
+ };
80
+
55
81
  const releaseNativeControls = root => safe(() => {
56
82
  if (!setSurfaceState()) return;
57
83
  const base = root && root.nodeType ? root : document;
58
- const nodes = [];
59
- if (base.nodeType === Node.ELEMENT_NODE && base.matches?.(interactiveSelector)) nodes.push(base);
60
- nodes.push(...Array.from(base.querySelectorAll?.(interactiveSelector) || []));
61
- nodes.forEach(el => {
84
+ collect(base, `${interactiveSelector},${nativeLayerSelector}`).forEach(el => {
62
85
  if (!el || el.closest?.('#eos-assist-root,.eos-assist-root')) return;
63
86
  el.classList?.remove('eos-security-hidden-delete', 'eos-protected-delete-control', 'eos-disabled-by-security');
64
87
  el.removeAttribute?.('data-eos-security-blocked');
65
88
  el.removeAttribute?.('aria-disabled');
66
- el.style.pointerEvents = 'auto';
67
- if (el.style.visibility === 'hidden') el.style.visibility = 'visible';
68
- if (el.style.display === 'none' && !el.classList?.contains('eos-native-logout-hidden')) el.style.display = '';
69
- });
70
- const layers = [];
71
- if (base.nodeType === Node.ELEMENT_NODE && base.matches?.(nativeLayerSelector)) layers.push(base);
72
- layers.push(...Array.from(base.querySelectorAll?.(nativeLayerSelector) || []));
73
- layers.forEach(el => {
74
- if (!el) return;
75
- el.style.pointerEvents = 'auto';
89
+ if (el.style?.pointerEvents === 'none') el.style.pointerEvents = 'auto';
90
+ if (el.style?.visibility === 'hidden') el.style.visibility = 'visible';
91
+ if (el.style?.display === 'none' && !el.classList?.contains('eos-native-logout-hidden')) el.style.display = '';
76
92
  });
77
93
  });
78
94
 
79
- const formatAge = ts => {
80
- const n = Number(ts);
81
- if (!Number.isFinite(n) || n <= 0) return 'unbekannt';
82
- try { return new Date(n).toLocaleString(); } catch { return String(n); }
83
- };
84
-
85
95
  const annotateValueCells = root => safe(() => {
86
96
  if (!setSurfaceState()) return;
87
97
  const base = root && root.nodeType ? root : document;
88
- const cells = [];
89
- const valueCellSelector = '.eos-object-value-cell,[data-eos-object-value-cell],[title*="Wert schreiben"],[title*="Button sofort testen"]';
90
- if (base.nodeType === Node.ELEMENT_NODE && base.matches?.(valueCellSelector)) cells.push(base);
91
- cells.push(...Array.from(base.querySelectorAll?.(valueCellSelector) || []));
92
- cells.forEach(cell => {
98
+ collect(base, valueCellSelector).forEach(cell => {
93
99
  const id = cell.getAttribute('data-eos-object-value-cell') || cell.closest?.('[id]')?.getAttribute('id') || '';
94
- const title = cell.getAttribute('title') || '';
95
- const writable = cell.getAttribute('data-eos-object-writable') === '1' || /Wert schreiben|Button sofort testen/i.test(title);
96
- const visibleValue = (cell.textContent || '').trim().replace(/\s+/g, ' ') || '(leer)';
100
+ const writable = isWritableCell(cell);
101
+ const visibleValue = normalizeText(cell.textContent || '') || '(leer)';
102
+ const cache = `${id}|${writable ? 1 : 0}|${visibleValue}`;
103
+
97
104
  cell.style.pointerEvents = 'auto';
98
105
  cell.style.cursor = writable ? 'pointer' : 'default';
106
+ cell.classList.add('eos-object-value-cell');
99
107
  cell.classList.toggle('eos-object-value-writable', writable);
100
108
  cell.classList.toggle('eos-object-value-readonly', !writable);
101
- cell.classList.add('eos-object-value-cell');
102
- cell.setAttribute('data-eos-current-visible-value', visibleValue);
103
- const hint = writable
104
- ? 'Klicken: Wert schreiben / Button sofort testen'
105
- : 'Nur lesbarer Wert';
106
- cell.setAttribute('title', [
107
- id ? `ID: ${id}` : null,
108
- `Aktueller Wert: ${visibleValue}`,
109
- `Status: ${writable ? 'beschreibbar' : 'nur lesbar'}`,
110
- `Letzte Anzeige-Aktualisierung: ${formatAge(Date.now())}`,
111
- hint,
112
- 'Zusätzliche Statusdetails zeigt der native EOS/ioBroker-Hover an.'
113
- ].filter(Boolean).join('\n'));
109
+ if (writable) cell.setAttribute('tabindex', '0');
110
+
111
+ if (cell.getAttribute('data-eos-value-cache') !== cache) {
112
+ cell.setAttribute('data-eos-value-cache', cache);
113
+ cell.setAttribute('data-eos-current-visible-value', visibleValue);
114
+ const nextTitle = [
115
+ id ? `ID: ${id}` : null,
116
+ `Aktueller Wert: ${visibleValue}`,
117
+ `Status: ${writable ? 'beschreibbar' : 'nur lesbar'}`,
118
+ writable ? 'Klicken: Wert schreiben' : 'Nur lesbarer Wert'
119
+ ].filter(Boolean).join('\n');
120
+ if (cell.getAttribute('title') !== nextTitle) cell.setAttribute('title', nextTitle);
121
+ }
114
122
  });
115
123
  });
116
124
 
117
- const handlePointerAssist = event => {
118
- if (!setSurfaceState()) return;
119
- const cell = event.target?.closest?.('.eos-object-value-cell');
120
- if (!cell) return;
121
- if (cell.getAttribute('data-eos-object-writable') === '1') {
122
- cell.classList.add('eos-object-value-hover');
125
+ const parseBoolean = value => {
126
+ if (value === true || value === 1) return true;
127
+ if (value === false || value === 0 || value == null) return false;
128
+ const normalized = String(value).trim().toLowerCase();
129
+ return normalized === 'true' || normalized === '1' || normalized === 'on' || normalized === 'yes' || normalized === 'ja';
130
+ };
131
+
132
+ const isNullToken = value => /^\s*(\(null\)|null|undefined)?\s*$/i.test(String(value ?? ''));
133
+
134
+ const coerceValue = (rawValue, type) => {
135
+ const raw = String(rawValue ?? '');
136
+ if (isNullToken(raw) && type !== 'string' && type !== 'json') return null;
137
+ if (type === 'boolean') return parseBoolean(raw);
138
+ if (type === 'number') {
139
+ const normalized = raw.replace(',', '.').trim();
140
+ const number = Number(normalized);
141
+ if (!Number.isFinite(number)) throw new Error(`Ungültige Zahl: ${raw}`);
142
+ return number;
143
+ }
144
+ if (type === 'json' || type === 'object') {
145
+ if (isNullToken(raw)) return null;
146
+ return JSON.parse(raw);
123
147
  }
148
+ return raw;
124
149
  };
125
- const handlePointerLeave = event => {
126
- const cell = event.target?.closest?.('.eos-object-value-cell');
127
- cell?.classList.remove('eos-object-value-hover');
150
+
151
+ const stateToString = value => {
152
+ if (value === null || value === undefined) return 'null';
153
+ if (typeof value === 'object') {
154
+ try { return JSON.stringify(value, null, 2); } catch (_) { return String(value); }
155
+ }
156
+ return String(value);
157
+ };
158
+
159
+ const hasNativeWriteDialog = () => {
160
+ const dialogs = Array.from(document.querySelectorAll('.MuiDialog-root,[role="dialog"]'));
161
+ return dialogs.some(dialog => /write value|wert schreiben|set value|wert setzen/i.test(dialog.textContent || ''));
162
+ };
163
+
164
+ const injectDialogStyle = () => {
165
+ if (document.getElementById('eos-dp-write-style')) return;
166
+ const style = document.createElement('style');
167
+ style.id = 'eos-dp-write-style';
168
+ style.textContent = `
169
+ .eos-dp-write-backdrop{position:fixed;inset:0;z-index:9000;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:18px;font-family:Roboto,Arial,sans-serif}.eos-dp-write-dialog{width:min(620px,calc(100vw - 36px));max-height:calc(100vh - 36px);overflow:auto;background:#061827;color:#fff;border:1px solid rgba(0,255,180,.45);border-radius:16px;box-shadow:0 18px 60px rgba(0,0,0,.65),0 0 34px rgba(0,255,180,.22);padding:18px}.eos-dp-write-dialog h3{margin:0 0 8px;font-size:19px;color:#18f4c0}.eos-dp-write-id{font-family:monospace;font-size:12px;opacity:.82;word-break:break-all;margin-bottom:12px}.eos-dp-write-meta{font-size:12px;opacity:.76;margin-bottom:12px}.eos-dp-write-dialog label{display:block;font-size:13px;margin:12px 0 6px}.eos-dp-write-dialog input[type=text],.eos-dp-write-dialog textarea,.eos-dp-write-dialog select{box-sizing:border-box;width:100%;background:#07111d;color:#fff;border:1px solid rgba(255,255,255,.28);border-radius:8px;padding:10px;font-size:15px;outline:none}.eos-dp-write-dialog textarea{min-height:130px;font-family:monospace}.eos-dp-write-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:18px}.eos-dp-write-actions button{border:0;border-radius:10px;padding:9px 16px;font-weight:700;cursor:pointer}.eos-dp-write-primary{background:#00d6a1;color:#03130f}.eos-dp-write-secondary{background:#273746;color:#fff}.eos-dp-write-actions button:disabled{opacity:.55;cursor:wait}.eos-dp-write-error{color:#ff7676;margin-top:10px;font-size:13px;white-space:pre-wrap}.eos-object-value-cell.eos-dp-write-pulse{outline:2px solid #00d6a1;outline-offset:-2px}`;
170
+ document.head.appendChild(style);
171
+ };
172
+
173
+ const closeExistingDialog = () => document.querySelector('.eos-dp-write-backdrop')?.remove();
174
+
175
+ const openWriteDialog = async (cell, event) => {
176
+ const id = cell?.getAttribute('data-eos-object-value-cell') || cell?.closest?.('[id]')?.id || '';
177
+ if (!id || busyIds.has(id)) return;
178
+ const socket = getSocket();
179
+ if (!socket || typeof socket.setState !== 'function') {
180
+ window.alert('EOS: Socket für Datenpunkt-Schreiben ist noch nicht bereit. Bitte Seite einmal hart neu laden (Strg+F5).');
181
+ return;
182
+ }
183
+
184
+ busyIds.add(id);
185
+ cell?.classList.add('eos-dp-write-pulse');
186
+ window.setTimeout(() => cell?.classList.remove('eos-dp-write-pulse'), 900);
187
+
188
+ try {
189
+ const [objResult, stateResult] = await Promise.allSettled([
190
+ typeof socket.getObject === 'function' ? socket.getObject(id) : Promise.resolve(null),
191
+ typeof socket.getState === 'function' ? socket.getState(id) : Promise.resolve(null),
192
+ ]);
193
+ const obj = objResult.status === 'fulfilled' ? objResult.value : null;
194
+ const state = stateResult.status === 'fulfilled' ? stateResult.value : null;
195
+ const common = obj?.common || {};
196
+ const role = String(common.role || '');
197
+ let type = common.type || typeof state?.val;
198
+ if (!type || type === 'undefined') type = 'string';
199
+ if (type === 'object') type = 'json';
200
+ const current = state?.val;
201
+ const states = common.states && typeof common.states === 'object' ? common.states : null;
202
+
203
+ if (/^button/.test(role)) {
204
+ await socket.setState(id, { val: true, ack: false, q: 0 });
205
+ busyIds.delete(id);
206
+ return;
207
+ }
208
+
209
+ injectDialogStyle();
210
+ closeExistingDialog();
211
+
212
+ const backdrop = document.createElement('div');
213
+ backdrop.className = 'eos-dp-write-backdrop';
214
+ const dialog = document.createElement('div');
215
+ dialog.className = 'eos-dp-write-dialog';
216
+ dialog.setAttribute('role', 'dialog');
217
+ dialog.setAttribute('aria-modal', 'true');
218
+ dialog.innerHTML = `
219
+ <h3>Datenpunkt schreiben</h3>
220
+ <div class="eos-dp-write-id"></div>
221
+ <div class="eos-dp-write-meta"></div>
222
+ <label class="eos-dp-write-label">Neuer Wert</label>
223
+ <div class="eos-dp-write-input-wrap"></div>
224
+ <label style="display:flex;align-items:center;gap:8px;margin-top:12px"><input class="eos-dp-write-ack" type="checkbox"> ack=true schreiben</label>
225
+ <div class="eos-dp-write-error" hidden></div>
226
+ <div class="eos-dp-write-actions"><button class="eos-dp-write-secondary" type="button">Abbrechen</button><button class="eos-dp-write-primary" type="button">Schreiben</button></div>`;
227
+ backdrop.appendChild(dialog);
228
+ document.body.appendChild(backdrop);
229
+
230
+ dialog.querySelector('.eos-dp-write-id').textContent = id;
231
+ dialog.querySelector('.eos-dp-write-meta').textContent = `Typ: ${type}${role ? ` · Rolle: ${role}` : ''}${common.unit ? ` · Einheit: ${common.unit}` : ''}`;
232
+
233
+ const inputWrap = dialog.querySelector('.eos-dp-write-input-wrap');
234
+ let input;
235
+ if (states) {
236
+ input = document.createElement('select');
237
+ Object.keys(states).forEach(key => {
238
+ const option = document.createElement('option');
239
+ option.value = key;
240
+ option.textContent = `${states[key]} (${key})`;
241
+ input.appendChild(option);
242
+ });
243
+ input.value = current == null ? Object.keys(states)[0] || '' : String(current);
244
+ } else if (type === 'boolean') {
245
+ input = document.createElement('select');
246
+ input.innerHTML = '<option value="true">true</option><option value="false">false</option>';
247
+ input.value = parseBoolean(current) ? 'true' : 'false';
248
+ } else if (type === 'json') {
249
+ input = document.createElement('textarea');
250
+ input.value = stateToString(current);
251
+ } else {
252
+ input = document.createElement('input');
253
+ input.type = 'text';
254
+ input.value = stateToString(current);
255
+ }
256
+ input.className = 'eos-dp-write-input';
257
+ inputWrap.appendChild(input);
258
+
259
+ const errorEl = dialog.querySelector('.eos-dp-write-error');
260
+ const cancelBtn = dialog.querySelector('.eos-dp-write-secondary');
261
+ const writeBtn = dialog.querySelector('.eos-dp-write-primary');
262
+ const ackInput = dialog.querySelector('.eos-dp-write-ack');
263
+
264
+ const close = () => {
265
+ backdrop.remove();
266
+ busyIds.delete(id);
267
+ };
268
+
269
+ const write = async () => {
270
+ errorEl.hidden = true;
271
+ writeBtn.disabled = true;
272
+ cancelBtn.disabled = true;
273
+ try {
274
+ let value = input.value;
275
+ const effectiveType = states ? (common.type || type) : type;
276
+ value = coerceValue(value, effectiveType);
277
+ await socket.setState(id, { val: value, ack: !!ackInput.checked, q: 0 });
278
+ close();
279
+ } catch (error) {
280
+ errorEl.textContent = `Schreiben fehlgeschlagen: ${error?.message || error}`;
281
+ errorEl.hidden = false;
282
+ writeBtn.disabled = false;
283
+ cancelBtn.disabled = false;
284
+ }
285
+ };
286
+
287
+ cancelBtn.addEventListener('click', close);
288
+ writeBtn.addEventListener('click', write);
289
+ backdrop.addEventListener('click', e => { if (e.target === backdrop) close(); });
290
+ input.addEventListener('keydown', e => {
291
+ if ((e.key === 'Enter' && type !== 'json') || (e.key === 'Enter' && e.ctrlKey)) {
292
+ e.preventDefault();
293
+ write();
294
+ }
295
+ if (e.key === 'Escape') close();
296
+ });
297
+ window.setTimeout(() => input.focus(), 30);
298
+ } catch (error) {
299
+ busyIds.delete(id);
300
+ window.alert(`EOS: Datenpunkt konnte nicht geschrieben werden: ${error?.message || error}`);
301
+ }
128
302
  };
129
303
 
130
304
  const run = root => {
@@ -133,38 +307,83 @@
133
307
  annotateValueCells(root);
134
308
  };
135
309
 
136
- window.addEventListener('hashchange', () => setTimeout(() => run(document), 30));
137
- window.addEventListener('popstate', () => setTimeout(() => run(document), 30));
310
+ let scheduled = false;
311
+ const pendingRoots = new Set();
312
+ const schedule = root => {
313
+ if (!setSurfaceState()) return;
314
+ if (root) pendingRoots.add(root);
315
+ if (scheduled) return;
316
+ scheduled = true;
317
+ const execute = () => {
318
+ scheduled = false;
319
+ const roots = pendingRoots.size ? Array.from(pendingRoots) : [document];
320
+ pendingRoots.clear();
321
+ roots.slice(0, 80).forEach(run);
322
+ };
323
+ if ('requestIdleCallback' in window) window.requestIdleCallback(execute, { timeout: 500 });
324
+ else window.requestAnimationFrame(execute);
325
+ };
326
+
327
+ const handlePointerAssist = event => {
328
+ if (!setSurfaceState()) return;
329
+ const cell = event.target?.closest?.('.eos-object-value-cell');
330
+ if (isWritableCell(cell)) cell.classList.add('eos-object-value-hover');
331
+ };
332
+
333
+ const handlePointerLeave = event => {
334
+ event.target?.closest?.('.eos-object-value-cell')?.classList.remove('eos-object-value-hover');
335
+ };
336
+
337
+ const shouldSkipFallback = cell => !!cell?.querySelector?.('.MuiSwitch-root,.admin-button,button,.copyButton');
338
+
339
+ const scheduleFallbackWriter = event => {
340
+ if (!setSurfaceState()) return;
341
+ const cell = event.target?.closest?.('.eos-object-value-cell,[data-eos-object-value-cell]');
342
+ if (!cell || !isWritableCell(cell) || shouldSkipFallback(cell)) return;
343
+ const id = cell.getAttribute('data-eos-object-value-cell') || '';
344
+ window.setTimeout(() => {
345
+ if (!setSurfaceState()) return;
346
+ if (!cell.isConnected || hasNativeWriteDialog()) return;
347
+ openWriteDialog(cell, event);
348
+ }, 260);
349
+ };
350
+
351
+ window.addEventListener('hashchange', () => window.setTimeout(() => schedule(document), 30));
352
+ window.addEventListener('popstate', () => window.setTimeout(() => schedule(document), 30));
138
353
  document.addEventListener('mouseover', handlePointerAssist, true);
139
354
  document.addEventListener('mouseout', handlePointerLeave, true);
140
355
  document.addEventListener('click', event => {
141
356
  if (!setSurfaceState()) return;
142
- const nativeInteractive = event.target?.closest?.(interactiveSelector + ',' + nativeLayerSelector + ',.eos-object-value-cell');
357
+ const nativeInteractive = event.target?.closest?.(`${interactiveSelector},${nativeLayerSelector},.eos-object-value-cell,[data-eos-object-value-cell]`);
143
358
  if (nativeInteractive) {
144
- // Intentionally do not stop propagation. This keeps the native ObjectBrowser write dialog and button states working.
145
359
  releaseNativeControls(nativeInteractive);
146
- window.setTimeout(() => releaseNativeControls(document), 50);
147
- window.setTimeout(() => annotateValueCells(document), 120);
360
+ scheduleFallbackWriter(event);
361
+ window.setTimeout(() => schedule(nativeInteractive), 80);
148
362
  }
149
363
  }, false);
364
+ document.addEventListener('keydown', event => {
365
+ if (!setSurfaceState()) return;
366
+ if (event.key !== 'Enter') return;
367
+ const cell = event.target?.closest?.('.eos-object-value-cell,[data-eos-object-value-cell]');
368
+ if (!cell || !isWritableCell(cell) || shouldSkipFallback(cell)) return;
369
+ event.preventDefault();
370
+ openWriteDialog(cell, event);
371
+ }, true);
150
372
 
151
373
  const observer = new MutationObserver(records => {
152
374
  if (!setSurfaceState()) return;
153
- let roots = [];
154
375
  for (const rec of records) {
155
376
  rec.addedNodes?.forEach(node => {
156
- if (node.nodeType === Node.ELEMENT_NODE) roots.push(node);
377
+ if (node.nodeType === Node.ELEMENT_NODE) schedule(node);
157
378
  });
158
379
  }
159
- if (!roots.length) roots = [document];
160
- window.requestAnimationFrame?.(() => roots.forEach(run)) || roots.forEach(run);
161
380
  });
162
381
 
163
382
  const start = () => {
164
383
  setSurfaceState();
165
- run(document);
384
+ schedule(document);
166
385
  observer.observe(document.documentElement, { childList: true, subtree: true });
167
- window.setInterval(() => run(document), 2500);
386
+ window.setInterval(() => schedule(document), 60000);
168
387
  };
169
388
 
170
389
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true });
@@ -1,7 +1,7 @@
1
1
  (() => {
2
2
  'use strict';
3
3
 
4
- window.NEXOWATT_EOS_ROLE_UI_VERSION = 'v48-role-guard-fix';
4
+ window.NEXOWATT_EOS_ROLE_UI_VERSION = 'v50-dp-write-hardfix';
5
5
 
6
6
  const ASSET_BASE = (() => {
7
7
  const script = document.currentScript?.src || document.querySelector('script[src*="eos-role-ui.js"]')?.src || window.location.href;
@@ -38,6 +38,8 @@
38
38
 
39
39
  const stripTab = value => String(value || '').replace(/^#?\/?/, '').replace(/^tab-/, '');
40
40
 
41
+ const isObjectsRoute = () => /#\/?tab-objects\b|#tab-objects\b/.test(String(window.location.hash || '')) || /[?&]tab=objects/.test(String(window.location.href || ''));
42
+
41
43
  const hashTab = () => {
42
44
  const hash = decodeURIComponent(window.location.hash || '');
43
45
  const match = hash.match(/#\/?(tab-[a-z0-9_-]+(?:-\d+)?)\b/i);
@@ -279,8 +281,13 @@
279
281
 
280
282
  const startObserver = () => safe(() => {
281
283
  if (state.observer || !document.documentElement) return;
282
- state.observer = new MutationObserver(scheduleApply);
283
- state.observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['href', 'class', 'aria-label', 'title'] });
284
+ state.observer = new MutationObserver(records => {
285
+ // Large object lists change row classes constantly. Role filtering only needs
286
+ // to react to structural/nav changes there, not every selection highlight.
287
+ if (isObjectsRoute() && records.every(record => record.type === 'attributes' && record.attributeName === 'class')) return;
288
+ scheduleApply();
289
+ });
290
+ state.observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['href', 'class', 'aria-label'] });
284
291
  });
285
292
 
286
293
  const start = () => {
@@ -1,7 +1,7 @@
1
1
  (() => {
2
2
  'use strict';
3
3
 
4
- const VERSION = 'v48-role-guard-fix';
4
+ const VERSION = 'v50-dp-write-hardfix';
5
5
  const LEGACY_ADMIN = 'admin';
6
6
  const LEGACY_ADMIN_INSTANCE = 'admin.0';
7
7
  const CORE_PROTECTED_ADAPTERS = ['admin', 'eos-admin', 'backitup', 'nexowatt-devices', 'nexowatt-device', 'nexowatt-dev', 'nexowatt-ui'];
@@ -1 +1 @@
1
- {"id":"iobroker_admin","name":"iobroker_admin","metaData":{"name":"iobroker_admin","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_admin"},"remoteEntry":{"name":"remoteEntry.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"remoteEntry.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"iobroker_admin","pluginVersion":"0.2.5","publicPath":"./"},"shared":[{"id":"iobroker_admin:@emotion/react","name":"@emotion/react","version":"11.14.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-react.browser.esm-DrKG52pD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@emotion/styled","name":"@emotion/styled","version":"11.14.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-styled.browser.esm-DOdpWCne.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/adapter-react-v5","name":"@iobroker/adapter-react-v5","version":"8.2.9","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-D2ymscJA.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/json-config","name":"@iobroker/json-config","version":"8.4.7","requiredVersion":"*","assets":{"js":{"async":["assets/index-D9Ej0pc9.js"],"sync":["assets/index-mSK_krgD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/dm-gui-components","name":"@iobroker/dm-gui-components","version":"9.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-bCuipom1.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns","name":"date-fns","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-Cqq5gIUF.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns/locale","name":"date-fns/locale","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/locale-CLe3aX4T.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet","name":"leaflet","version":"1.9.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/leaflet-src-B651YTWC.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet-geosearch","name":"leaflet-geosearch","version":"4.2.2","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/geosearch.module-BA4ww39P.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-ace","name":"react-ace","version":"13.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-C_anklzA.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dropzone","name":"react-dropzone","version":"15.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CXZCHHB6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:semver","name":"semver","version":"7.7.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CkI9667U.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/x-date-pickers","name":"@mui/x-date-pickers","version":"7.29.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-uASdmaE6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react","name":"react","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-4wMOc304.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dom","name":"react-dom","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-D2Em8S_O.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/material","name":"@mui/material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-8JYjTPhv.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/icons-material","name":"@mui/icons-material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-jy_3EbfW.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[]}
1
+ {"id":"iobroker_admin","name":"iobroker_admin","metaData":{"name":"iobroker_admin","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"iobroker_admin"},"remoteEntry":{"name":"remoteEntry-DPWrite50.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"remoteEntry-DPWrite50.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"iobroker_admin","pluginVersion":"0.2.5","publicPath":"./"},"shared":[{"id":"iobroker_admin:@emotion/react","name":"@emotion/react","version":"11.14.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-react.browser.esm-DrKG52pD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@emotion/styled","name":"@emotion/styled","version":"11.14.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/emotion-styled.browser.esm-DOdpWCne.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/adapter-react-v5","name":"@iobroker/adapter-react-v5","version":"8.2.9","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-DPAdapter50.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/json-config","name":"@iobroker/json-config","version":"8.4.7","requiredVersion":"*","assets":{"js":{"async":["assets/index-D9Ej0pc9.js"],"sync":["assets/index-mSK_krgD.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@iobroker/dm-gui-components","name":"@iobroker/dm-gui-components","version":"9.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-bCuipom1.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns","name":"date-fns","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-Cqq5gIUF.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:date-fns/locale","name":"date-fns/locale","version":"4.1.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/locale-CLe3aX4T.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet","name":"leaflet","version":"1.9.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/leaflet-src-B651YTWC.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:leaflet-geosearch","name":"leaflet-geosearch","version":"4.2.2","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/geosearch.module-BA4ww39P.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-ace","name":"react-ace","version":"13.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-C_anklzA.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dropzone","name":"react-dropzone","version":"15.0.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CXZCHHB6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:semver","name":"semver","version":"7.7.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-CkI9667U.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/x-date-pickers","name":"@mui/x-date-pickers","version":"7.29.4","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-uASdmaE6.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react","name":"react","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-4wMOc304.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:react-dom","name":"react-dom","version":"18.3.1","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-D2Em8S_O.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/material","name":"@mui/material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-8JYjTPhv.js"]},"css":{"async":[],"sync":[]}}},{"id":"iobroker_admin:@mui/icons-material","name":"@mui/icons-material","version":"6.5.0","requiredVersion":"*","assets":{"js":{"async":[],"sync":["assets/index-jy_3EbfW.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[]}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./assets/emotion-react.browser.esm-DrKG52pD.js","./assets/iobroker_admin__loadShare__react__loadShare__-LM7uyL45.js","./assets/_commonjsHelpers-CE1G-McA.js","./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js","./assets/emotion-cache.browser.esm-BgJfNZJN.js","./assets/extends-CF3RwP-h.js","./assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-D9zECpgL.js","./assets/emotion-serialize.esm-Q4o_CgeF.js","./assets/emotion-styled.browser.esm-DOdpWCne.js","./assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BywLg1Xe.js","./assets/index-DPAdapter50.js","./assets/createTheme-DFX8CY6F.js","./assets/blue-CagzI6CQ.js","./assets/sdk-C-e-e2gd.js","./assets/iobroker_admin__loadShare___mf_0_mui_mf_1_icons_mf_2_material__loadShare__-CJO5yP3h.js","./assets/Google-Cq8JZDSn.js","./assets/index-DcK0RDrH.js","./assets/pl-Dib-_u5L.js","./assets/iobroker_admin__loadShare__react_mf_2_dropzone__loadShare__-CwjnV48g.js","./assets/useTheme-CUNq4tF-.js","./assets/defaultTheme-Cx_JJUAa.js","./assets/useTheme-Bl-M1DYp.js","./assets/index-bCuipom1.js","./assets/iobroker_admin__loadShare___mf_0_iobroker_mf_1_adapter_mf_2_react_mf_2_v5__loadShare__-LFZoiUTt.js","./assets/iobroker_admin__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__-CpA7pnS5.js","./assets/index-mSK_krgD.js","./assets/index-8HslT92O.js","./assets/_commonjs-dynamic-modules-TDtrdbi3.js","./assets/___vite-browser-external_commonjs-proxy-DMh1aSo_.js","./assets/iobroker_admin__loadShare__react_mf_2_dom__loadShare__-CVeAXnkk.js","./assets/ext-language_tools-ylAoucDh.js","./assets/preload-helper-BDBacUwf.js","./assets/index-jy_3EbfW.js","./assets/DefaultPropsProvider-BiXBMQYQ.js","./assets/createSvgIcon-CfRgdNUH.js","./assets/index-8JYjTPhv.js","./assets/amber-D7aVlNg3.js","./assets/TextField-CqVU6uzA.js","./assets/assertThisInitialized-B0aQ9eG_.js","./assets/ThemeProvider-BOFFjWAF.js","./assets/index-uASdmaE6.js","./assets/index-Cqq5gIUF.js","./assets/setYear-3ufv5yRD.js","./assets/en-US-DBFJNIH6.js","./assets/isSameWeek-DzRXk46v.js","./assets/locale-CLe3aX4T.js","./assets/leaflet-src-B651YTWC.js","./assets/geosearch.module-BA4ww39P.js","./assets/iobroker_admin__loadShare__leaflet__loadShare__-CNUAG3AH.js","./assets/index-4wMOc304.js","./assets/index-C_anklzA.js","./assets/ace-DEUjyTIn.js","./assets/index-D2Em8S_O.js","./assets/index-CXZCHHB6.js","./assets/index-CkI9667U.js"])))=>i.map(i=>d[i]);
2
+ import{i as m,a as p}from"./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js";import s from"./assets/virtualExposes-BIHI7g3E.js";import{_ as a}from"./assets/preload-helper-BDBacUwf.js";const n={"@emotion/react":async()=>await a(()=>import("./assets/emotion-react.browser.esm-DrKG52pD.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url),"@emotion/styled":async()=>await a(()=>import("./assets/emotion-styled.browser.esm-DOdpWCne.js"),__vite__mapDeps([8,5,9,3,7,6,1,2]),import.meta.url),"@iobroker/adapter-react-v5":async()=>await a(()=>import("./assets/index-DPAdapter50.js"),__vite__mapDeps([10,11,12,1,2,3,13,14,15,16,17,18,19,20,21,9]),import.meta.url),"@iobroker/dm-gui-components":async()=>await a(()=>import("./assets/index-bCuipom1.js"),__vite__mapDeps([22,1,2,3,14,23,24]),import.meta.url),"@iobroker/json-config":async()=>await a(()=>import("./assets/index-mSK_krgD.js"),__vite__mapDeps([25,1,2,3,26,27,28,14,23,29,12,15,16,30,18,31]),import.meta.url),"@mui/icons-material":async()=>await a(()=>import("./assets/index-jy_3EbfW.js"),__vite__mapDeps([32,33,2,3,7,9,1,34,11,12,20]),import.meta.url),"@mui/material":async()=>await a(()=>import("./assets/index-8JYjTPhv.js"),__vite__mapDeps([35,11,12,1,2,3,36,34,33,7,9,20,37,21,38,19,5,29,16,39,4]),import.meta.url),"@mui/x-date-pickers":async()=>await a(()=>import("./assets/index-uASdmaE6.js"),__vite__mapDeps([40,1,2,3,33,7,9,34,11,12,20,5,37,21,38,19,29,16]),import.meta.url),"date-fns":async()=>await a(()=>import("./assets/index-Cqq5gIUF.js"),__vite__mapDeps([41,42,43,44]),import.meta.url),"date-fns/locale":async()=>await a(()=>import("./assets/locale-CLe3aX4T.js"),__vite__mapDeps([45,43,44]),import.meta.url),leaflet:async()=>await a(()=>import("./assets/leaflet-src-B651YTWC.js").then(t=>t.l),__vite__mapDeps([46,2]),import.meta.url),"leaflet-geosearch":async()=>await a(()=>import("./assets/geosearch.module-BA4ww39P.js"),__vite__mapDeps([47,48,3]),import.meta.url),react:async()=>await a(()=>import("./assets/index-4wMOc304.js").then(t=>t.i),__vite__mapDeps([49,2]),import.meta.url),"react-ace":async()=>await a(()=>import("./assets/index-C_anklzA.js").then(t=>t.i),__vite__mapDeps([50,51,16,2,1,3]),import.meta.url),"react-dom":async()=>await a(()=>import("./assets/index-D2Em8S_O.js").then(t=>t.i),__vite__mapDeps([52,2,1,3]),import.meta.url),"react-dropzone":async()=>await a(()=>import("./assets/index-CXZCHHB6.js"),__vite__mapDeps([53,1,2,3,16]),import.meta.url),semver:async()=>await a(()=>import("./assets/index-CkI9667U.js").then(t=>t.i),__vite__mapDeps([54,2]),import.meta.url)},o={"@emotion/react":{name:"@emotion/react",version:"11.14.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@emotion/react"].loaded=!0;const{"@emotion/react":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@emotion/styled":{name:"@emotion/styled",version:"11.14.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@emotion/styled"].loaded=!0;const{"@emotion/styled":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@iobroker/adapter-react-v5":{name:"@iobroker/adapter-react-v5",version:"8.2.9",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@iobroker/adapter-react-v5"].loaded=!0;const{"@iobroker/adapter-react-v5":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@iobroker/dm-gui-components":{name:"@iobroker/dm-gui-components",version:"9.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@iobroker/dm-gui-components"].loaded=!0;const{"@iobroker/dm-gui-components":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@iobroker/json-config":{name:"@iobroker/json-config",version:"8.4.7",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@iobroker/json-config"].loaded=!0;const{"@iobroker/json-config":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/icons-material":{name:"@mui/icons-material",version:"6.5.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/icons-material"].loaded=!0;const{"@mui/icons-material":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/material":{name:"@mui/material",version:"6.5.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/material"].loaded=!0;const{"@mui/material":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"@mui/x-date-pickers":{name:"@mui/x-date-pickers",version:"7.29.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["@mui/x-date-pickers"].loaded=!0;const{"@mui/x-date-pickers":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"date-fns":{name:"date-fns",version:"4.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["date-fns"].loaded=!0;const{"date-fns":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"date-fns/locale":{name:"date-fns/locale",version:"4.1.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["date-fns/locale"].loaded=!0;const{"date-fns/locale":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},leaflet:{name:"leaflet",version:"1.9.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.leaflet.loaded=!0;const{leaflet:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"leaflet-geosearch":{name:"leaflet-geosearch",version:"4.2.2",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["leaflet-geosearch"].loaded=!0;const{"leaflet-geosearch":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},react:{name:"react",version:"18.3.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.react.loaded=!0;const{react:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-ace":{name:"react-ace",version:"13.0.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-ace"].loaded=!0;const{"react-ace":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-dom":{name:"react-dom",version:"18.3.1",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-dom"].loaded=!0;const{"react-dom":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},"react-dropzone":{name:"react-dropzone",version:"15.0.0",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o["react-dropzone"].loaded=!0;const{"react-dropzone":e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}},semver:{name:"semver",version:"7.7.4",scope:["default"],loaded:!1,from:"iobroker_admin",async get(){o.semver.loaded=!0;const{semver:e}=n,r={...await e()};return Object.defineProperty(r,"__esModule",{value:!0,enumerable:!1}),function(){return r}},shareConfig:{singleton:!0,requiredVersion:"*"}}},f=[],u={},l="default",d="iobroker_admin";async function y(e={},t=[]){const r=m({name:d,remotes:f,shared:o,plugins:[],shareStrategy:"version-first"});var i=u[l];if(i||(i=u[l]={from:d}),!(t.indexOf(i)>=0)){t.push(i),r.initShareScopeMap("default",e);try{await Promise.all(await r.initializeSharing("default",{strategy:"version-first",from:"build",initScope:t}))}catch(c){console.error(c)}return p.initResolve(r),r}}function b(e){if(!(e in s))throw new Error(`Module ${e} does not exist in container.`);return s[e]().then(t=>()=>t)}export{b as get,y as init};