@matter-server/dashboard 0.2.0-alpha.0-00000000-000000000 → 0.2.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/package.json +3 -3
- package/dist/web/js/commission-node-dialog-DEZ3EqYO.js +0 -78
- package/dist/web/js/commission-node-existing-OK1ybPFI.js +0 -50
- package/dist/web/js/commission-node-thread-DLmclivF.js +0 -75
- package/dist/web/js/commission-node-wifi-C8ho-UYb.js +0 -88
- package/dist/web/js/dialog-box-BPz-oO3d.js +0 -52
- package/dist/web/js/fire_event-BERTqZpV.js +0 -169
- package/dist/web/js/matter-dashboard-app-BazvuIIi.js +0 -16068
- package/dist/web/js/node-binding-dialog-Cw6QEmL3.js +0 -443
- package/dist/web/js/outlined-text-field-Sqd4JHxo.js +0 -2086
- package/dist/web/js/prevent_default-D4GG_QeD.js +0 -814
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
import { a as i, c, n, d as clientContext, e, i as i$1, A, b, t } from './matter-dashboard-app-BazvuIIi.js';
|
|
2
|
-
import { p as preventDefault } from './prevent_default-D4GG_QeD.js';
|
|
3
|
-
import './outlined-text-field-Sqd4JHxo.js';
|
|
4
|
-
import './main.js';
|
|
5
|
-
|
|
6
|
-
var _staticBlock$1;
|
|
7
|
-
/**
|
|
8
|
-
* @license
|
|
9
|
-
* Copyright 2025-2026 Open Home Foundation
|
|
10
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
11
|
-
*/
|
|
12
|
-
class BindingEntryDataTransformer {
|
|
13
|
-
static transform(input) {
|
|
14
|
-
if (!input || typeof input !== "object") {
|
|
15
|
-
throw new Error("Invalid input: expected an object");
|
|
16
|
-
}
|
|
17
|
-
const result = {};
|
|
18
|
-
const keyMapping = BindingEntryDataTransformer.KEY_MAPPING;
|
|
19
|
-
for (const key in input) {
|
|
20
|
-
if (key in keyMapping) {
|
|
21
|
-
const mappedKey = keyMapping[key];
|
|
22
|
-
if (mappedKey) {
|
|
23
|
-
const value = input[key];
|
|
24
|
-
if (value === void 0) {
|
|
25
|
-
continue;
|
|
26
|
-
}
|
|
27
|
-
if (mappedKey === "fabricIndex") {
|
|
28
|
-
result[mappedKey] = value === void 0 ? void 0 : Number(value);
|
|
29
|
-
} else if (mappedKey === "node" || mappedKey === "endpoint") {
|
|
30
|
-
result[mappedKey] = Number(value);
|
|
31
|
-
} else {
|
|
32
|
-
result[mappedKey] = value;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
39
|
-
static #_ = _staticBlock$1 = () => this.KEY_MAPPING = {
|
|
40
|
-
"1": "node",
|
|
41
|
-
"3": "endpoint",
|
|
42
|
-
"4": "cluster",
|
|
43
|
-
"254": "fabricIndex"
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
_staticBlock$1();
|
|
47
|
-
|
|
48
|
-
var _staticBlock, _staticBlock2;
|
|
49
|
-
/**
|
|
50
|
-
* @license
|
|
51
|
-
* Copyright 2025-2026 Open Home Foundation
|
|
52
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
53
|
-
*/
|
|
54
|
-
class AccessControlTargetTransformer {
|
|
55
|
-
static transform(input) {
|
|
56
|
-
if (!input || typeof input !== "object") {
|
|
57
|
-
throw new Error("Invalid input: expected an object");
|
|
58
|
-
}
|
|
59
|
-
const result = {};
|
|
60
|
-
const keyMapping = AccessControlTargetTransformer.KEY_MAPPING;
|
|
61
|
-
for (const key in input) {
|
|
62
|
-
if (key in keyMapping) {
|
|
63
|
-
const mappedKey = keyMapping[key];
|
|
64
|
-
if (mappedKey) {
|
|
65
|
-
const value = input[key];
|
|
66
|
-
if (value === void 0) continue;
|
|
67
|
-
result[mappedKey] = value;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return result;
|
|
72
|
-
}
|
|
73
|
-
static #_ = _staticBlock = () => this.KEY_MAPPING = {
|
|
74
|
-
"0": "cluster",
|
|
75
|
-
"1": "endpoint",
|
|
76
|
-
"2": "deviceType"
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
_staticBlock();
|
|
80
|
-
class AccessControlEntryDataTransformer {
|
|
81
|
-
static transform(input) {
|
|
82
|
-
if (!input || typeof input !== "object") {
|
|
83
|
-
throw new Error("Invalid input: expected an object");
|
|
84
|
-
}
|
|
85
|
-
const result = {};
|
|
86
|
-
const keyMapping = AccessControlEntryDataTransformer.KEY_MAPPING;
|
|
87
|
-
for (const key in input) {
|
|
88
|
-
if (key in keyMapping) {
|
|
89
|
-
const mappedKey = keyMapping[key];
|
|
90
|
-
if (mappedKey) {
|
|
91
|
-
const value = input[key];
|
|
92
|
-
if (value === void 0) continue;
|
|
93
|
-
if (mappedKey === "subjects") {
|
|
94
|
-
result[mappedKey] = Array.isArray(value) ? value : void 0;
|
|
95
|
-
} else if (mappedKey === "targets") {
|
|
96
|
-
if (Array.isArray(value)) {
|
|
97
|
-
const _targets = Object.values(value).map(val => AccessControlTargetTransformer.transform(val));
|
|
98
|
-
result[mappedKey] = _targets;
|
|
99
|
-
} else {
|
|
100
|
-
result[mappedKey] = void 0;
|
|
101
|
-
}
|
|
102
|
-
} else {
|
|
103
|
-
result[mappedKey] = value;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return result;
|
|
109
|
-
}
|
|
110
|
-
static #_ = _staticBlock2 = () => this.KEY_MAPPING = {
|
|
111
|
-
"1": "privilege",
|
|
112
|
-
"2": "authMode",
|
|
113
|
-
"3": "subjects",
|
|
114
|
-
"4": "targets",
|
|
115
|
-
"254": "fabricIndex"
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
_staticBlock2();
|
|
119
|
-
|
|
120
|
-
var __defProp = Object.defineProperty;
|
|
121
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
122
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
123
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
124
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
125
|
-
if (kind && result) __defProp(target, key, result);
|
|
126
|
-
return result;
|
|
127
|
-
};
|
|
128
|
-
let NodeBindingDialog = class extends i$1 {
|
|
129
|
-
fetchBindingEntry() {
|
|
130
|
-
const bindings_raw = this.node.attributes[this.endpoint + "/30/0"];
|
|
131
|
-
if (!bindings_raw) return [];
|
|
132
|
-
return Object.values(bindings_raw).map(value => BindingEntryDataTransformer.transform(value));
|
|
133
|
-
}
|
|
134
|
-
fetchACLEntry(targetNodeId) {
|
|
135
|
-
var _this$client$nodes$ta;
|
|
136
|
-
const acl_cluster_raw = (_this$client$nodes$ta = this.client.nodes[targetNodeId]) === null || _this$client$nodes$ta === void 0 ? void 0 : _this$client$nodes$ta.attributes["0/31/0"];
|
|
137
|
-
if (!acl_cluster_raw) return [];
|
|
138
|
-
return Object.values(acl_cluster_raw).map(value => AccessControlEntryDataTransformer.transform(value));
|
|
139
|
-
}
|
|
140
|
-
async deleteBindingHandler(index) {
|
|
141
|
-
const rawBindings = this.fetchBindingEntry();
|
|
142
|
-
try {
|
|
143
|
-
const targetNodeId = rawBindings[index].node;
|
|
144
|
-
const endpoint = rawBindings[index].endpoint;
|
|
145
|
-
if (targetNodeId === void 0 || endpoint === void 0) return;
|
|
146
|
-
await this.removeNodeAtACLEntry(this.getNodeIdAsNumber(), endpoint, targetNodeId);
|
|
147
|
-
const updatedBindings = this.removeBindingAtIndex(rawBindings, index);
|
|
148
|
-
await this.syncBindingUpdates(updatedBindings, index);
|
|
149
|
-
} catch (error) {
|
|
150
|
-
this.handleBindingDeletionError(error);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
/** Helper to convert node_id (number | bigint) to number for API calls */
|
|
154
|
-
getNodeIdAsNumber() {
|
|
155
|
-
const nodeId = this.node.node_id;
|
|
156
|
-
return typeof nodeId === "bigint" ? Number(nodeId) : nodeId;
|
|
157
|
-
}
|
|
158
|
-
async removeNodeAtACLEntry(sourceNodeId, sourceEndpoint, targetNodeId) {
|
|
159
|
-
const aclEntries = this.fetchACLEntry(targetNodeId);
|
|
160
|
-
const updatedACLEntries = aclEntries.map(entry => this.removeEntryAtACL(sourceNodeId, sourceEndpoint, entry)).filter(entry => entry !== void 0);
|
|
161
|
-
const apiEntries = updatedACLEntries.map(e => this.toAccessControlEntry(e));
|
|
162
|
-
await this.client.setACLEntry(targetNodeId, apiEntries);
|
|
163
|
-
}
|
|
164
|
-
removeEntryAtACL(nodeId, sourceEndpoint, entry) {
|
|
165
|
-
const hasSubject = entry.subjects.includes(nodeId);
|
|
166
|
-
if (!hasSubject) return entry;
|
|
167
|
-
const hasTarget = entry.targets.filter(item => item.endpoint === sourceEndpoint);
|
|
168
|
-
return hasTarget.length > 0 ? void 0 : entry;
|
|
169
|
-
}
|
|
170
|
-
removeBindingAtIndex(bindings, index) {
|
|
171
|
-
return [...bindings.slice(0, index), ...bindings.slice(index + 1)];
|
|
172
|
-
}
|
|
173
|
-
async syncBindingUpdates(updatedBindings, index) {
|
|
174
|
-
const apiBindings = updatedBindings.map(b => this.toBindingTarget(b));
|
|
175
|
-
await this.client.setNodeBinding(this.getNodeIdAsNumber(), this.endpoint, apiBindings);
|
|
176
|
-
const attributePath = `${this.endpoint}/30/0`;
|
|
177
|
-
const currentBindings = this.node.attributes[attributePath];
|
|
178
|
-
const updatedAttributes = {
|
|
179
|
-
...this.node.attributes,
|
|
180
|
-
[attributePath]: currentBindings ? this.removeBindingAtIndex(currentBindings, index) : []
|
|
181
|
-
};
|
|
182
|
-
this.node.attributes = updatedAttributes;
|
|
183
|
-
this.requestUpdate();
|
|
184
|
-
}
|
|
185
|
-
handleBindingDeletionError(error) {
|
|
186
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
187
|
-
console.error(`Binding deletion failed: ${errorMessage}`);
|
|
188
|
-
}
|
|
189
|
-
async add_target_acl(targetNodeId, entry) {
|
|
190
|
-
try {
|
|
191
|
-
var _this$client$nodes$ta2;
|
|
192
|
-
const rawEntries = (_this$client$nodes$ta2 = this.client.nodes[targetNodeId]) === null || _this$client$nodes$ta2 === void 0 ? void 0 : _this$client$nodes$ta2.attributes["0/31/0"];
|
|
193
|
-
const entries = rawEntries ? Object.values(rawEntries).map(v => AccessControlEntryDataTransformer.transform(v)) : [];
|
|
194
|
-
entries.push(entry);
|
|
195
|
-
const apiEntries = entries.map(e => this.toAccessControlEntry(e));
|
|
196
|
-
const result = await this.client.setACLEntry(targetNodeId, apiEntries);
|
|
197
|
-
if (result && result.length > 0) {
|
|
198
|
-
return result[0].status === 0;
|
|
199
|
-
}
|
|
200
|
-
return true;
|
|
201
|
-
} catch (err) {
|
|
202
|
-
console.error("add acl error:", err);
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/** Convert local BindingEntryStruct to API BindingTarget (without fabricIndex) */
|
|
207
|
-
toBindingTarget(entry) {
|
|
208
|
-
return {
|
|
209
|
-
node: entry.node ?? null,
|
|
210
|
-
group: entry.group ?? null,
|
|
211
|
-
endpoint: entry.endpoint ?? null,
|
|
212
|
-
cluster: entry.cluster ?? null
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
/** Convert local AccessControlEntryStruct to API AccessControlEntry (without fabricIndex) */
|
|
216
|
-
toAccessControlEntry(entry) {
|
|
217
|
-
var _entry$targets;
|
|
218
|
-
return {
|
|
219
|
-
privilege: entry.privilege,
|
|
220
|
-
auth_mode: entry.authMode,
|
|
221
|
-
subjects: entry.subjects ?? null,
|
|
222
|
-
targets: ((_entry$targets = entry.targets) === null || _entry$targets === void 0 ? void 0 : _entry$targets.map(t => ({
|
|
223
|
-
cluster: t.cluster ?? null,
|
|
224
|
-
endpoint: t.endpoint ?? null,
|
|
225
|
-
device_type: t.deviceType ?? null
|
|
226
|
-
}))) ?? null
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
async add_bindings(endpoint, bindingEntry) {
|
|
230
|
-
const bindings = this.fetchBindingEntry();
|
|
231
|
-
bindings.push(bindingEntry);
|
|
232
|
-
try {
|
|
233
|
-
const apiBindings = bindings.map(b => this.toBindingTarget(b));
|
|
234
|
-
const result = await this.client.setNodeBinding(this.getNodeIdAsNumber(), endpoint, apiBindings);
|
|
235
|
-
if (result && result.length > 0) {
|
|
236
|
-
return result[0].status === 0;
|
|
237
|
-
}
|
|
238
|
-
return true;
|
|
239
|
-
} catch (err) {
|
|
240
|
-
console.log("add bindings error:", err);
|
|
241
|
-
return false;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
async addBindingHandler() {
|
|
245
|
-
const targetNodeId = this._targetNodeId.value ? parseInt(this._targetNodeId.value, 10) : void 0;
|
|
246
|
-
const targetEndpoint = this._targetEndpoint.value ? parseInt(this._targetEndpoint.value, 10) : void 0;
|
|
247
|
-
const targetCluster = this._targetCluster.value ? parseInt(this._targetCluster.value, 10) : void 0;
|
|
248
|
-
if (targetNodeId === void 0 || targetNodeId <= 0 || targetNodeId > 65535) {
|
|
249
|
-
alert("Please enter a valid target node ID");
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
if (targetEndpoint === void 0 || targetEndpoint <= 0 || targetEndpoint > 65534) {
|
|
253
|
-
alert("Please enter a valid target endpoint");
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
if (targetCluster !== void 0) {
|
|
257
|
-
if (targetCluster < 0 || targetCluster > 32767) {
|
|
258
|
-
alert("Please enter a valid target cluster");
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
const targets = {
|
|
263
|
-
endpoint: targetEndpoint,
|
|
264
|
-
cluster: targetCluster,
|
|
265
|
-
deviceType: void 0
|
|
266
|
-
};
|
|
267
|
-
const acl_entry = {
|
|
268
|
-
privilege: 5,
|
|
269
|
-
authMode: 2,
|
|
270
|
-
subjects: [this.getNodeIdAsNumber()],
|
|
271
|
-
targets: [targets],
|
|
272
|
-
fabricIndex: 0
|
|
273
|
-
// Placeholder - server will use correct fabric index
|
|
274
|
-
};
|
|
275
|
-
const result_acl = await this.add_target_acl(targetNodeId, acl_entry);
|
|
276
|
-
if (!result_acl) {
|
|
277
|
-
alert("add target acl error!");
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
const endpoint = this.endpoint;
|
|
281
|
-
const bindingEntry = {
|
|
282
|
-
node: targetNodeId,
|
|
283
|
-
endpoint: targetEndpoint,
|
|
284
|
-
group: void 0,
|
|
285
|
-
cluster: targetCluster,
|
|
286
|
-
fabricIndex: void 0
|
|
287
|
-
// Server will use correct fabric index
|
|
288
|
-
};
|
|
289
|
-
const result_binding = await this.add_bindings(endpoint, bindingEntry);
|
|
290
|
-
if (result_binding) {
|
|
291
|
-
this._targetNodeId.value = "";
|
|
292
|
-
this._targetEndpoint.value = "";
|
|
293
|
-
this._targetCluster.value = "";
|
|
294
|
-
this.requestUpdate();
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
_close() {
|
|
298
|
-
this.shadowRoot.querySelector("md-dialog").close();
|
|
299
|
-
}
|
|
300
|
-
_handleClosed() {
|
|
301
|
-
this.parentNode.removeChild(this);
|
|
302
|
-
}
|
|
303
|
-
onChange(e) {
|
|
304
|
-
const textfield = e.target;
|
|
305
|
-
const value = parseInt(textfield.value, 10);
|
|
306
|
-
if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
|
|
307
|
-
textfield.error = true;
|
|
308
|
-
textfield.errorText = "value error";
|
|
309
|
-
} else {
|
|
310
|
-
textfield.error = false;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
render() {
|
|
314
|
-
const rawBindings = this.node.attributes[this.endpoint + "/30/0"];
|
|
315
|
-
const bindings = rawBindings ? Object.values(rawBindings).map(entry => BindingEntryDataTransformer.transform(entry)) : [];
|
|
316
|
-
return b`
|
|
317
|
-
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
318
|
-
<div slot="headline">
|
|
319
|
-
<div>Binding</div>
|
|
320
|
-
</div>
|
|
321
|
-
<div slot="content">
|
|
322
|
-
<div>
|
|
323
|
-
<md-list style="padding-bottom:18px;">
|
|
324
|
-
${Object.values(bindings).map((entry, index) => b`
|
|
325
|
-
<md-list-item style="background:cornsilk;">
|
|
326
|
-
<div style="display:flex;gap:10px;">
|
|
327
|
-
<div>node:${entry["node"]}</div>
|
|
328
|
-
<div>endpoint:${entry["endpoint"]}</div>
|
|
329
|
-
${entry["cluster"] ? b` <div>cluster:${entry["cluster"]}</div> ` : A}
|
|
330
|
-
</div>
|
|
331
|
-
<div slot="end">
|
|
332
|
-
<md-text-button
|
|
333
|
-
@click=${() => this.deleteBindingHandler(index)}
|
|
334
|
-
>delete</md-text-button
|
|
335
|
-
</div>
|
|
336
|
-
</md-list-item>
|
|
337
|
-
`)}
|
|
338
|
-
</md-list>
|
|
339
|
-
<div class="inline-group">
|
|
340
|
-
<div class="group-label">target</div>
|
|
341
|
-
<div class="group-input">
|
|
342
|
-
<md-outlined-text-field
|
|
343
|
-
label="node id"
|
|
344
|
-
name="NodeId"
|
|
345
|
-
type="number"
|
|
346
|
-
min="0"
|
|
347
|
-
max="65535"
|
|
348
|
-
class="target-item"
|
|
349
|
-
@change=${this.onChange}
|
|
350
|
-
supporting-text="required"
|
|
351
|
-
></md-outlined-text-field>
|
|
352
|
-
<md-outlined-text-field
|
|
353
|
-
label="endpoint"
|
|
354
|
-
name="Endpoint"
|
|
355
|
-
type="number"
|
|
356
|
-
min="0"
|
|
357
|
-
max="65534"
|
|
358
|
-
@change=${this.onChange}
|
|
359
|
-
class="target-item"
|
|
360
|
-
supporting-text="required"
|
|
361
|
-
></md-outlined-text-field>
|
|
362
|
-
<md-outlined-text-field
|
|
363
|
-
label="cluster"
|
|
364
|
-
name="Cluster"
|
|
365
|
-
type="number"
|
|
366
|
-
min="0"
|
|
367
|
-
max="32767"
|
|
368
|
-
@change=${this.onChange}
|
|
369
|
-
class="target-item"
|
|
370
|
-
supporting-text="optional"
|
|
371
|
-
></md-outlined-text-field>
|
|
372
|
-
</div>
|
|
373
|
-
</div>
|
|
374
|
-
<div style="margin:8px;">
|
|
375
|
-
<Text style="font-size: 10px;font-style: italic;font-weight: bold;">
|
|
376
|
-
Note: The Cluster ID field is optional according to the Matter specification. If you
|
|
377
|
-
leave it blank, the binding applies to all eligible clusters on the target endpoint.
|
|
378
|
-
However, some devices may require a specific cluster to be set in order for the binding
|
|
379
|
-
to function correctly. If you experience unexpected behavior, try specifying the cluster
|
|
380
|
-
explicitly.
|
|
381
|
-
</Text>
|
|
382
|
-
</div>
|
|
383
|
-
</div>
|
|
384
|
-
</div>
|
|
385
|
-
<div slot="actions">
|
|
386
|
-
<md-text-button @click=${this.addBindingHandler}>Add</md-text-button>
|
|
387
|
-
<md-text-button @click=${this._close}>Cancel</md-text-button>
|
|
388
|
-
</div>
|
|
389
|
-
</md-dialog>
|
|
390
|
-
`;
|
|
391
|
-
}
|
|
392
|
-
};
|
|
393
|
-
NodeBindingDialog.styles = i`
|
|
394
|
-
.inline-group {
|
|
395
|
-
display: flex;
|
|
396
|
-
border: 2px solid #673ab7;
|
|
397
|
-
padding: 1px;
|
|
398
|
-
border-radius: 8px;
|
|
399
|
-
position: relative;
|
|
400
|
-
margin: 8px;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
.group-input {
|
|
404
|
-
display: flex;
|
|
405
|
-
width: -webkit-fill-available;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
.target-item {
|
|
409
|
-
display: inline-block;
|
|
410
|
-
padding: 20px 10px 10px 10px;
|
|
411
|
-
border-radius: 4px;
|
|
412
|
-
vertical-align: middle;
|
|
413
|
-
min-width: 80px;
|
|
414
|
-
text-align: center;
|
|
415
|
-
width: -webkit-fill-available;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
.group-label {
|
|
419
|
-
position: absolute;
|
|
420
|
-
left: 15px;
|
|
421
|
-
top: -12px;
|
|
422
|
-
background: #673ab7;
|
|
423
|
-
color: white;
|
|
424
|
-
padding: 3px 15px;
|
|
425
|
-
border-radius: 4px;
|
|
426
|
-
}
|
|
427
|
-
`;
|
|
428
|
-
__decorateClass([c({
|
|
429
|
-
context: clientContext,
|
|
430
|
-
subscribe: true
|
|
431
|
-
}), n({
|
|
432
|
-
attribute: false
|
|
433
|
-
})], NodeBindingDialog.prototype, "client", 2);
|
|
434
|
-
__decorateClass([n()], NodeBindingDialog.prototype, "node", 2);
|
|
435
|
-
__decorateClass([n({
|
|
436
|
-
attribute: false
|
|
437
|
-
})], NodeBindingDialog.prototype, "endpoint", 2);
|
|
438
|
-
__decorateClass([e("md-outlined-text-field[name='NodeId']")], NodeBindingDialog.prototype, "_targetNodeId", 2);
|
|
439
|
-
__decorateClass([e("md-outlined-text-field[name='Endpoint']")], NodeBindingDialog.prototype, "_targetEndpoint", 2);
|
|
440
|
-
__decorateClass([e("md-outlined-text-field[name='Cluster']")], NodeBindingDialog.prototype, "_targetCluster", 2);
|
|
441
|
-
NodeBindingDialog = __decorateClass([t("node-binding-dialog")], NodeBindingDialog);
|
|
442
|
-
|
|
443
|
-
export { NodeBindingDialog };
|