Skip to content

Commit cbf887b

Browse files
authored
Merge pull request #418 from com-pas/chore/sync-upstream-0.43.0
chore: sync upstream 0.43.0
2 parents 45bda71 + 2feab99 commit cbf887b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+3442
-407
lines changed

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"packages/openscd": "0.37.0",
33
"packages/core": "0.1.4",
4-
".": "0.42.0"
4+
".": "0.43.0"
55
}

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# Changelog
22

3+
## [0.43.0](https://github.com/openscd/open-scd/compare/v0.42.0...v0.43.0) (2025-10-27)
4+
5+
6+
### Features
7+
8+
* add elements to virtual ied ([#1714](https://github.com/openscd/open-scd/issues/1714)) ([0c1074b](https://github.com/openscd/open-scd/commit/0c1074bf9d4f154a06c8031e593974c1f618fead))
9+
* add virtual ied ([#1712](https://github.com/openscd/open-scd/issues/1712)) ([cf45fe9](https://github.com/openscd/open-scd/commit/cf45fe92e4a09066ca9b426b282486229dfbc43a))
10+
* edit and delete virtual IED elements ([#1715](https://github.com/openscd/open-scd/issues/1715)) ([106688b](https://github.com/openscd/open-scd/commit/106688bd736b449a3182045ecb6fccc5a51067c7))
11+
12+
13+
### Bug Fixes
14+
15+
* Disable experimental require module to make node 20.19 and above work ([#1709](https://github.com/openscd/open-scd/issues/1709)) ([d47a3da](https://github.com/openscd/open-scd/commit/d47a3dac6c57ee814cfbd78f3636fe872a052568))
16+
* Require lnInst only for regular lns ([#1713](https://github.com/openscd/open-scd/issues/1713)) ([003161f](https://github.com/openscd/open-scd/commit/003161fd5a0b363477ece059629ed2c0d6d86aa0))
17+
318
## [0.42.0](https://github.com/openscd/open-scd/compare/v0.41.0...v0.42.0) (2025-09-15)
419

520

package-lock.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compas-open-scd/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "compas-open-scd",
3-
"version": "0.42.0-1",
3+
"version": "0.43.0-1",
44
"repository": "https://github.com/openscd/open-scd.git",
55
"description": "OpenSCD CoMPAS Edition",
66
"directory": "packages/compas-open-scd",

packages/openscd/src/translations/de.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ export const de: Translations = {
229229
missing: 'Kein IED vorhanden',
230230
toggleChildElements: 'Kindelemente umschalten',
231231
settings: 'Services für IED or AccessPoint',
232+
createIed: 'Virtuelles IED erstellen',
233+
addAccessPoint: 'AccessPoint hinzufügen',
232234
wizard: {
233235
daTitle: 'DA Informationen anzeigen',
234236
doTitle: 'DO Informationen anzeigen',
@@ -248,11 +250,57 @@ export const de: Translations = {
248250
daBType: 'DA Typ',
249251
daValue: 'DA Wert',
250252
},
253+
createDialog: {
254+
iedName: 'IED Name',
255+
nameFormatError: 'IED Name darf keine Leerzeichen enthalten',
256+
nameUniqueError: 'IED Name ist bereits vergeben',
257+
},
258+
addAccessPointDialog: {
259+
title: 'AccessPoint hinzufügen',
260+
nameHelper: 'AccessPoint Name',
261+
descHelper: 'AccessPoint Beschreibung',
262+
apName: 'AccessPoint Name',
263+
createServerAt: 'ServerAt hinzufügen',
264+
selectAccessPoint: 'AccessPoint auswählen',
265+
serverAtDesc: 'ServerAt Beschreibung',
266+
nameFormatError: 'AccessPoint Name darf keine Leerzeichen enthalten',
267+
nameUniqueError: 'AccessPoint Name ist bereits vergeben',
268+
nameTooLongError: 'AccessPoint Name ist zu lang',
269+
},
270+
addLDeviceDialog: {
271+
title: 'LDevice hinzufügen',
272+
inst: 'LDevice inst',
273+
desc: 'LDevice Beschreibung',
274+
instRequiredError: 'LDevice inst ist erforderlich',
275+
instFormatError: 'LDevice inst darf keine Leerzeichen enthalten',
276+
instUniqueError: 'LDevice inst ist bereits vergeben',
277+
instTooLongError: 'LDevice inst ist zu lang',
278+
},
279+
addLnDialog: {
280+
title: 'LN hinzufügen',
281+
amount: 'Menge',
282+
prefix: 'Prefix',
283+
filter: 'Logical Node Types filtern',
284+
noResults: 'Keine Logical Node Types gefunden',
285+
},
286+
},
287+
accesspoint: {
288+
wizard: {
289+
nameHelper: 'AccessPoint Name',
290+
descHelper: 'AccessPoint Beschreibung',
291+
title: {
292+
add: 'AccessPoint hinzufügen',
293+
edit: 'AccessPoint bearbeiten',
294+
delete: 'AccessPoint mit Abhängigkeiten entfernen',
295+
references: 'Gelöschte Abhängikeiten',
296+
},
297+
},
251298
},
252299
ied: {
253300
wizard: {
254301
nameHelper: 'Name des IED',
255302
descHelper: 'Beschreibung des IED',
303+
manufacturerHelper: 'Hersteller des IED',
256304
title: {
257305
edit: 'IED bearbeiten',
258306
delete: 'IED mit Abhängigkeiten entfernen',
@@ -269,6 +317,7 @@ export const de: Translations = {
269317
nameHelper: 'Name des Logisches Gerät',
270318
noNameSupportHelper: 'IED unterstützt keine funktionale Benennung',
271319
descHelper: 'Beschreibung des Logisches Gerät',
320+
instHelper: 'Instanz des Logisches Gerät',
272321
title: {
273322
edit: 'Logisches Gerät bearbeiten',
274323
},

packages/openscd/src/translations/en.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ export const en = {
226226
missing: 'No IED',
227227
toggleChildElements: 'Toggle child elements',
228228
settings: 'Show Services the IED/AccessPoint provides',
229+
createIed: 'Create Virtual IED',
230+
addAccessPoint: 'Add AccessPoint',
229231
wizard: {
230232
daTitle: 'Show DA Info',
231233
doTitle: 'Show DO Info',
@@ -245,11 +247,57 @@ export const en = {
245247
daBType: 'Data attribute type',
246248
daValue: 'Data attribute value',
247249
},
250+
createDialog: {
251+
iedName: 'IED name',
252+
nameFormatError: 'IED name cannot contain spaces',
253+
nameUniqueError: 'IED name already exists',
254+
},
255+
addAccessPointDialog: {
256+
title: 'Add AccessPoint',
257+
nameHelper: 'AccessPoint name',
258+
descHelper: 'AccessPoint description',
259+
apName: 'AccessPoint name',
260+
createServerAt: 'Add ServerAt',
261+
selectAccessPoint: 'Select AccessPoint',
262+
serverAtDesc: 'ServerAt description',
263+
nameFormatError: 'AccessPoint name cannot contain spaces',
264+
nameUniqueError: 'AccessPoint name already exists',
265+
nameTooLongError: 'AccessPoint name is too long',
266+
},
267+
addLDeviceDialog: {
268+
title: 'Add LDevice',
269+
inst: 'LDevice inst',
270+
desc: 'LDevice description',
271+
instRequiredError: 'LDevice inst is required',
272+
instFormatError: 'Invalid inst',
273+
instUniqueError: 'LDevice inst already exists',
274+
instTooLongError: 'LDevice inst is too long',
275+
},
276+
addLnDialog: {
277+
title: 'Add LN',
278+
amount: 'Amount',
279+
prefix: 'Prefix',
280+
filter: 'Filter Logical Node Types',
281+
noResults: 'No Logical Node Types found',
282+
},
283+
},
284+
accesspoint: {
285+
wizard: {
286+
nameHelper: 'AccessPoint name',
287+
descHelper: 'AccessPoint description',
288+
title: {
289+
add: 'Add AccessPoint',
290+
edit: 'Edit AccessPoint',
291+
delete: 'Remove AccessPoint with references',
292+
references: 'References to be removed',
293+
},
294+
},
248295
},
249296
ied: {
250297
wizard: {
251298
nameHelper: 'IED name',
252299
descHelper: 'IED description',
300+
manufacturerHelper: 'IED manufacturer',
253301
title: {
254302
edit: 'Edit IED',
255303
delete: 'Remove IED with references',
@@ -266,6 +314,7 @@ export const en = {
266314
nameHelper: 'Logical device name',
267315
noNameSupportHelper: "IED doesn't support Functional Naming",
268316
descHelper: 'Logical device description',
317+
instHelper: 'Logical device inst',
269318
title: {
270319
edit: 'Edit logical device',
271320
},

packages/plugins/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"@material/mwc-switch": "0.22.1",
3030
"@material/mwc-textarea": "0.22.1",
3131
"@material/mwc-textfield": "0.22.1",
32+
"@openenergytools/scl-lib": "^1.8.0",
3233
"@openscd/core": "*",
3334
"@openscd/open-scd": "*",
3435
"@openscd/wizards": "*",
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import {
2+
css,
3+
customElement,
4+
html,
5+
LitElement,
6+
property,
7+
TemplateResult,
8+
} from 'lit-element';
9+
10+
/** A tooltip element that follows the mouse cursor and displays a text box. */
11+
@customElement('oscd-tooltip-4c6027dd')
12+
export class OscdTooltip extends LitElement {
13+
@property({ type: String })
14+
text = '';
15+
16+
@property({ type: Boolean, reflect: true })
17+
visible = false;
18+
19+
@property({ type: Number })
20+
x = 0;
21+
22+
@property({ type: Number })
23+
y = 0;
24+
25+
@property({ type: Number })
26+
offset = 12;
27+
28+
private pendingFrame = 0;
29+
30+
show(text: string, clientX: number, clientY: number): void {
31+
this.text = text;
32+
this.visible = true;
33+
this.updatePosition(clientX, clientY);
34+
}
35+
36+
hide(): void {
37+
this.visible = false;
38+
this.text = '';
39+
if (this.pendingFrame) {
40+
cancelAnimationFrame(this.pendingFrame);
41+
this.pendingFrame = 0;
42+
}
43+
}
44+
45+
updatePosition(clientX: number, clientY: number): void {
46+
this.x = clientX + this.offset;
47+
this.y = clientY + this.offset;
48+
49+
if (this.pendingFrame) return;
50+
51+
this.pendingFrame = requestAnimationFrame(() => {
52+
this.pendingFrame = 0;
53+
if (!this.visible) return;
54+
55+
const tipRect = this.getBoundingClientRect();
56+
let x = this.x;
57+
let y = this.y;
58+
59+
const innerW = window.innerWidth;
60+
const innerH = window.innerHeight;
61+
62+
if (x + tipRect.width + this.offset > innerW) {
63+
x = this.x - this.offset - tipRect.width - this.offset;
64+
}
65+
if (x < this.offset) x = this.offset;
66+
67+
if (y + tipRect.height + this.offset > innerH) {
68+
y = this.y - this.offset - tipRect.height - this.offset;
69+
}
70+
if (y < this.offset) y = this.offset;
71+
72+
this.style.transform = `translate3d(${Math.round(x)}px, ${Math.round(
73+
y
74+
)}px, 0)`;
75+
});
76+
}
77+
78+
render(): TemplateResult {
79+
return html`<slot>${this.text}</slot>`;
80+
}
81+
82+
static styles = css`
83+
:host {
84+
position: fixed;
85+
pointer-events: none;
86+
background: rgba(20, 20, 20, 0.95);
87+
color: rgba(240, 240, 240, 0.98);
88+
padding: 6px 8px;
89+
border-radius: 4px;
90+
font-size: 0.85em;
91+
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4);
92+
z-index: 6000;
93+
max-width: 60vw;
94+
border: 1px solid rgba(255, 255, 255, 0.04);
95+
left: 0;
96+
top: 0;
97+
transform: translate3d(0, 0, 0);
98+
will-change: transform;
99+
opacity: 1;
100+
transition: opacity 0.15s ease-in-out;
101+
}
102+
103+
:host(:not([visible])) {
104+
opacity: 0;
105+
pointer-events: none;
106+
}
107+
108+
:host([hidden]) {
109+
display: none;
110+
}
111+
`;
112+
}

0 commit comments

Comments
 (0)