mbg-val-input 0.4.3 → 0.5.1
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/README.md +135 -6
- package/demo/index.html +6 -0
- package/dist/src/MbgValInput.d.ts +2 -2
- package/dist/src/MbgValInput.js +26 -15
- package/dist/src/MbgValInput.js.map +1 -1
- package/dist/src/currency-input.d.ts +1 -1
- package/dist/src/currency-input.js +3 -3
- package/dist/src/currency-input.js.map +1 -1
- package/dist/src/design-tokens.d.ts +1 -0
- package/dist/src/design-tokens.js +32 -0
- package/dist/src/design-tokens.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/MbgValInput.ts +27 -15
- package/src/currency-input.ts +3 -3
- package/src/design-tokens.ts +37 -0
package/README.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.
|
|
4
4
|
|
|
5
|
+
## Table of contents
|
|
6
|
+
|
|
7
|
+
- [Installation](#installation)
|
|
8
|
+
- [Usage](#usage)
|
|
9
|
+
- [Theming](#theming)
|
|
10
|
+
- [Supported basic types (bTypes)](#supported-basic-types-btypes)
|
|
11
|
+
- [Boolean](#boolean)
|
|
12
|
+
- [Integers](#integers)
|
|
13
|
+
- [Floats](#floats)
|
|
14
|
+
- [Octet strings](#octet-strings)
|
|
15
|
+
- [Visible and Unicode strings](#visible-and-unicode-strings)
|
|
16
|
+
- [Bit strings](#bit-strings)
|
|
17
|
+
- [Enumerations](#enumerations)
|
|
18
|
+
- [Other](#other)
|
|
19
|
+
- [Development Workflow](#development-workflow)
|
|
20
|
+
- [Linting and formatting](#linting-and-formatting)
|
|
21
|
+
- [Testing with Web Test Runner](#testing-with-web-test-runner)
|
|
22
|
+
- [Demoing with Storybook](#demoing-with-storybook)
|
|
23
|
+
- [Tooling configs](#tooling-configs)
|
|
24
|
+
- [Local Demo with web-dev-server](#local-demo-with-web-dev-server)
|
|
25
|
+
|
|
5
26
|
## Installation
|
|
6
27
|
|
|
7
28
|
```bash
|
|
@@ -18,7 +39,116 @@ npm i mbg-val-input
|
|
|
18
39
|
<mbg-val-input></mbg-val-input>
|
|
19
40
|
```
|
|
20
41
|
|
|
21
|
-
##
|
|
42
|
+
## Theming
|
|
43
|
+
|
|
44
|
+
`<mbg-val-input>` exposes CSS custom properties (design tokens) so you can adjust its appearance without overriding internal styles. The default values are based on what is defined in the Material Web toolkit.
|
|
45
|
+
|
|
46
|
+
| Token | Default | Description |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `--mbg-val-input-shape` | `4px` | Border radius of the input container |
|
|
49
|
+
| `--mbg-val-input-space` | `16px` | Top and bottom padding inside the field |
|
|
50
|
+
| `--mbg-val-input-height` | `56px` | Height of the component |
|
|
51
|
+
| `--mbg-val-input-width` | `auto` | Width of the component |
|
|
52
|
+
| `--mbg-val-input-min-width` | `100px` | Minimum width |
|
|
53
|
+
| `--mbg-val-input-max-width` | `100%` | Maximum width |
|
|
54
|
+
|
|
55
|
+
Set any of these on the element or a parent selector:
|
|
56
|
+
|
|
57
|
+
```css
|
|
58
|
+
mbg-val-input {
|
|
59
|
+
--mbg-val-input-shape: 8px;
|
|
60
|
+
--mbg-val-input-height: 48px;
|
|
61
|
+
--mbg-val-input-width: 320px;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Supported basic types (bTypes)
|
|
66
|
+
|
|
67
|
+
`<mbg-val-input>` supports the following basic types, as defined in the IEC 61850 standard. Pass the type via the `bType` attribute.
|
|
68
|
+
|
|
69
|
+
### Boolean
|
|
70
|
+
|
|
71
|
+
| bType | Input | Notes |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| `BOOLEAN` | Toggle switch | Accepts `true`/`1` or `false`/`0` as default value |
|
|
74
|
+
|
|
75
|
+
### Integers
|
|
76
|
+
|
|
77
|
+
| bType | Input | Range |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| `INT8` | Number field | -128 to 127 |
|
|
80
|
+
| `INT16` | Number field | -32,768 to 32,767 |
|
|
81
|
+
| `INT24` | Number field | -8,388,608 to 8,388,607 |
|
|
82
|
+
| `INT32` | Number field | -2,147,483,648 to 2,147,483,647 |
|
|
83
|
+
| `INT64` | Text field | 64-bit signed (parsed as BigInt) |
|
|
84
|
+
| `INT128` | Text field | 128-bit signed (parsed as BigInt) |
|
|
85
|
+
| `INT8U` | Number field | 0 to 255 |
|
|
86
|
+
| `INT16U` | Number field | 0 to 65,535 |
|
|
87
|
+
| `INT24U` | Number field | 0 to 16,777,215 |
|
|
88
|
+
| `INT32U` | Number field | 0 to 4,294,967,295 |
|
|
89
|
+
| `Check` | Number field | 8-bit unsigned (0 to 255) |
|
|
90
|
+
|
|
91
|
+
### Floats
|
|
92
|
+
|
|
93
|
+
| bType | Input | Range |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| `FLOAT32` | Text field | IEEE 754 single precision |
|
|
96
|
+
| `FLOAT64` | Text field | IEEE 754 double precision |
|
|
97
|
+
|
|
98
|
+
### Octet strings
|
|
99
|
+
|
|
100
|
+
Accepts hexadecimal characters only. Max length is `size × 2` hex characters.
|
|
101
|
+
|
|
102
|
+
| bType | Input | Max length |
|
|
103
|
+
| --- | --- | --- |
|
|
104
|
+
| `Octet6` | Text field | 12 hex chars |
|
|
105
|
+
| `Octet16` | Text field | 32 hex chars |
|
|
106
|
+
| `Octet64` | Text field | 128 hex chars |
|
|
107
|
+
| `EntryID` | Text field | 16 hex chars |
|
|
108
|
+
| `EntryTime` | Text field | 12 hex chars |
|
|
109
|
+
|
|
110
|
+
### Visible and Unicode strings
|
|
111
|
+
|
|
112
|
+
| bType | Input | Max length |
|
|
113
|
+
| --- | --- | --- |
|
|
114
|
+
| `VisString32` | Text field | 32 |
|
|
115
|
+
| `VisString64` | Text field | 64 |
|
|
116
|
+
| `VisString65` | Text field | 65 |
|
|
117
|
+
| `VisString129` | Text field | 129 |
|
|
118
|
+
| `VisString255` | Text field | 255 |
|
|
119
|
+
| `Unicode255` | Text field | 255 |
|
|
120
|
+
|
|
121
|
+
### Bit strings
|
|
122
|
+
|
|
123
|
+
Accepts only `0` and `1` characters.
|
|
124
|
+
|
|
125
|
+
| bType | Input | Length |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| `Quality` | Text field | 14 bits |
|
|
128
|
+
| `TrgOps` | Text field | 6 bits |
|
|
129
|
+
| `OptFlds` | Text field | 10 bits |
|
|
130
|
+
| `SvOptFlds` | Text field | 6 bits |
|
|
131
|
+
| `LogOptFlds` | Text field | 5 bits |
|
|
132
|
+
|
|
133
|
+
### Enumerations
|
|
134
|
+
|
|
135
|
+
| bType | Input | Notes |
|
|
136
|
+
| --- | --- | --- |
|
|
137
|
+
| `Enum` | Dropdown | Options driven by `enumOrdinals` and `enumLabels` properties |
|
|
138
|
+
| `Dbpos` | Dropdown | Fixed: `0` intermediate-state, `1` off, `2` on, `3` bad-state |
|
|
139
|
+
| `Tcmd` | Dropdown | Fixed: `0` neutral, `1` lower, `2` higher, `3` reserved |
|
|
140
|
+
|
|
141
|
+
### Other
|
|
142
|
+
|
|
143
|
+
| bType | Input | Notes |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| `Timestamp` | Text field | Format: `YYYY-MM-DDTHH:MM:SS.sss` |
|
|
146
|
+
| `ObjRef` | Text field | Alphanumeric and `_`, `/`, `$`; max 255 chars |
|
|
147
|
+
| `Currency` | Currency field | Custom currency input |
|
|
148
|
+
|
|
149
|
+
## Development Workflow
|
|
150
|
+
|
|
151
|
+
### Linting and formatting
|
|
22
152
|
|
|
23
153
|
To scan the project for linting and formatting errors, run
|
|
24
154
|
|
|
@@ -32,7 +162,7 @@ To automatically fix linting and formatting errors, run
|
|
|
32
162
|
npm run format
|
|
33
163
|
```
|
|
34
164
|
|
|
35
|
-
|
|
165
|
+
### Testing with Web Test Runner
|
|
36
166
|
|
|
37
167
|
To execute a single test run:
|
|
38
168
|
|
|
@@ -46,7 +176,7 @@ To run the tests in interactive watch mode run:
|
|
|
46
176
|
npm run test:watch
|
|
47
177
|
```
|
|
48
178
|
|
|
49
|
-
|
|
179
|
+
### Demoing with Storybook
|
|
50
180
|
|
|
51
181
|
To run a local instance of Storybook for your component, run
|
|
52
182
|
|
|
@@ -60,14 +190,13 @@ To build a production version of Storybook, run
|
|
|
60
190
|
npm run storybook:build
|
|
61
191
|
```
|
|
62
192
|
|
|
63
|
-
|
|
64
|
-
## Tooling configs
|
|
193
|
+
### Tooling configs
|
|
65
194
|
|
|
66
195
|
For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.
|
|
67
196
|
|
|
68
197
|
If you customize the configuration a lot, you can consider moving them to individual files.
|
|
69
198
|
|
|
70
|
-
|
|
199
|
+
### Local Demo with `web-dev-server`
|
|
71
200
|
|
|
72
201
|
```bash
|
|
73
202
|
npm start
|
package/demo/index.html
CHANGED
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
|
6
6
|
<style>
|
|
7
|
+
* {
|
|
8
|
+
--mbg-val-input-shape: 10px;
|
|
9
|
+
--mbg-val-input-space: 8px;
|
|
10
|
+
--mbg-val-input-height: 40px;
|
|
11
|
+
}
|
|
12
|
+
|
|
7
13
|
body {
|
|
8
14
|
background: #fafafa;
|
|
9
15
|
font-family: sans-serif;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { LitElement, TemplateResult } from 'lit';
|
|
2
2
|
import '@material/web/textfield/outlined-text-field.js';
|
|
3
|
-
import '@material/web/select/
|
|
3
|
+
import '@material/web/select/outlined-select.js';
|
|
4
4
|
import '@material/web/select/select-option.js';
|
|
5
5
|
import '@material/web/switch/switch.js';
|
|
6
6
|
/** Web Component for inputting IEC61850-6 "Val" values */
|
|
7
7
|
export declare class MbgValInput extends LitElement {
|
|
8
|
-
static styles: import("lit").CSSResult;
|
|
8
|
+
static styles: import("lit").CSSResult[];
|
|
9
9
|
bType?: string;
|
|
10
10
|
readOnly: boolean;
|
|
11
11
|
default: string;
|
package/dist/src/MbgValInput.js
CHANGED
|
@@ -3,8 +3,9 @@ import { __decorate } from "tslib";
|
|
|
3
3
|
import { html, css, LitElement, nothing } from 'lit';
|
|
4
4
|
import { property, query } from 'lit/decorators.js';
|
|
5
5
|
import { currencyInput } from './currency-input.js';
|
|
6
|
+
import { designTokens } from './design-tokens.js';
|
|
6
7
|
import '@material/web/textfield/outlined-text-field.js';
|
|
7
|
-
import '@material/web/select/
|
|
8
|
+
import '@material/web/select/outlined-select.js';
|
|
8
9
|
import '@material/web/select/select-option.js';
|
|
9
10
|
import '@material/web/switch/switch.js';
|
|
10
11
|
function xmlBoolean(val) {
|
|
@@ -319,7 +320,7 @@ export class MbgValInput extends LitElement {
|
|
|
319
320
|
labels = JSON.parse(this.enumLabels);
|
|
320
321
|
}
|
|
321
322
|
return html `
|
|
322
|
-
<md-
|
|
323
|
+
<md-outlined-select
|
|
323
324
|
id="input"
|
|
324
325
|
label="${this.label}"
|
|
325
326
|
?disabled="${this.readOnly}"
|
|
@@ -333,7 +334,7 @@ export class MbgValInput extends LitElement {
|
|
|
333
334
|
<div slot="headline">${ordinal} - ${labels[index]}</div>
|
|
334
335
|
</md-select-option>
|
|
335
336
|
`)}
|
|
336
|
-
</md-
|
|
337
|
+
</md-outlined-select>
|
|
337
338
|
`;
|
|
338
339
|
}
|
|
339
340
|
handleTimestampInput(event) {
|
|
@@ -382,7 +383,7 @@ export class MbgValInput extends LitElement {
|
|
|
382
383
|
}
|
|
383
384
|
dbposInput() {
|
|
384
385
|
return html `
|
|
385
|
-
<md-
|
|
386
|
+
<md-outlined-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
|
|
386
387
|
<md-select-option value="0" ?selected=${this.default === '0'}>
|
|
387
388
|
<div slot="headline">0 - intermediate-state</div>
|
|
388
389
|
</md-select-option>
|
|
@@ -397,12 +398,12 @@ export class MbgValInput extends LitElement {
|
|
|
397
398
|
<md-select-option value="3" ?selected=${this.default === '3'}>
|
|
398
399
|
<div slot="headline">3 - bad-state</div>
|
|
399
400
|
</md-select-option>
|
|
400
|
-
</md-
|
|
401
|
+
</md-outlined-select>
|
|
401
402
|
`;
|
|
402
403
|
}
|
|
403
404
|
tcmdInput() {
|
|
404
405
|
return html `
|
|
405
|
-
<md-
|
|
406
|
+
<md-outlined-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
|
|
406
407
|
<md-select-option value="0" ?selected=${this.default === '0'}>
|
|
407
408
|
<div slot="headline">0 - neutral</div>
|
|
408
409
|
</md-select-option>
|
|
@@ -417,7 +418,7 @@ export class MbgValInput extends LitElement {
|
|
|
417
418
|
<md-select-option value="3" ?selected=${this.default === '3'}>
|
|
418
419
|
<div slot="headline">3 - reserved</div>
|
|
419
420
|
</md-select-option>
|
|
420
|
-
</md-
|
|
421
|
+
</md-outlined-select>
|
|
421
422
|
`;
|
|
422
423
|
}
|
|
423
424
|
handleBitStringInput(event) {
|
|
@@ -451,12 +452,13 @@ export class MbgValInput extends LitElement {
|
|
|
451
452
|
}
|
|
452
453
|
get inputs() {
|
|
453
454
|
return {
|
|
454
|
-
BOOLEAN: html `<label
|
|
455
|
+
BOOLEAN: html `<label class="boolean-input"
|
|
455
456
|
>${this.label}
|
|
456
457
|
<md-switch
|
|
457
458
|
id="input"
|
|
458
459
|
?disabled="${this.readOnly}"
|
|
459
460
|
?selected=${xmlBoolean(this.default)}
|
|
461
|
+
icons
|
|
460
462
|
></md-switch
|
|
461
463
|
></label>`,
|
|
462
464
|
INT8: this.intInput(8),
|
|
@@ -506,13 +508,22 @@ export class MbgValInput extends LitElement {
|
|
|
506
508
|
></md-outlined-text-field>`);
|
|
507
509
|
}
|
|
508
510
|
}
|
|
509
|
-
MbgValInput.styles =
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
511
|
+
MbgValInput.styles = [
|
|
512
|
+
designTokens,
|
|
513
|
+
css `
|
|
514
|
+
md-outlined-text-field.Timestamp {
|
|
515
|
+
min-width: 250px;
|
|
516
|
+
max-width: 100%;
|
|
517
|
+
width: auto;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.boolean-input {
|
|
521
|
+
display: flex;
|
|
522
|
+
align-items: center;
|
|
523
|
+
gap: 0.5rem;
|
|
524
|
+
}
|
|
525
|
+
`,
|
|
526
|
+
];
|
|
516
527
|
__decorate([
|
|
517
528
|
property({ type: String })
|
|
518
529
|
], MbgValInput.prototype, "bType", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MbgValInput.js","sourceRoot":"","sources":["../../src/MbgValInput.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAkB,OAAO,EAAE,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,gDAAgD,CAAC;AACxD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,uCAAuC,CAAC;AAC/C,OAAO,gCAAgC,CAAC;AAExC,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,IAAY,EAAE,MAAe;IAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACzD,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AACtC,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,IAAc;IAClD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,KAAK,IAAI,CAAC,oBAAoB,IAAI,KAAK,IAAI,oBAAoB,CAAC;IACzE,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,CACL,KAAK,IAAI,CAAC,wCAAwC;YAClD,KAAK,IAAI,wCAAwC,CAClD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAa,EACb,IAAY,EACZ,WAAoB,EACpB,QAAQ,GAAG,IAAI;IAEf,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,8BAA8B;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,GAAG,CAAC;IAEhC,8CAA8C;IAC9C,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEtE,uBAAuB;IACvB,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACjC,CAAC;IACD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,sCAAsC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4DAA4D;IAC5D,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAqB;IACrB,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;gBACnE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACtC,IACE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;gBACzB,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,EACxC,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,IAAa;IAChD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,YAAY,CAAC;IACzD,CAAC;IACD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,KAAK,IAAI,CAAC,sBAAsB,IAAI,KAAK,IAAI,sBAAsB,CAAC;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,SAAS,wBAAwB,CAC/B,KAAa,EACb,WAAoB,EACpB,IAAa;IAEb,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,8BAA8B;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,GAAG,CAAC;IAEhC,6BAA6B;IAC7B,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpC,SAAS,GAAG,uBAAuB,CAAC;QACpC,OAAO,MAAM,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,8CAA8C;IAC9C,SAAS,GAAG,KAAK;SACd,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAEzC,4BAA4B;IAC5B,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACxD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,SAAS,IAAI,GAAG,CAAC;IACnB,CAAC;IAED,iCAAiC;IACjC,MAAM,gBAAgB,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzD,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,uBAAuB;IACvB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC/C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAEjD,uBAAuB;IACvB,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACjC,CAAC;IACD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,sCAAsC;IACtC,MAAM,UAAU,GAAG,gCAAgC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4DAA4D;IAC5D,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gCAAgC;IAChC,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;YAClE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,EAAE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,EAAE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAExC,gBAAgB;IAChB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB;IAElE,IAAI,SAAS,GAAG,GAAG,IAAI,EAAE,CAAC;IAC1B,IAAI,KAAK;QAAE,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC;IACpC,IAAI,GAAG;QAAE,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;IAChC,IAAI,IAAI;QAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;IAClC,IAAI,MAAM;QAAE,SAAS,IAAI,IAAI,MAAM,EAAE,CAAC;IACtC,IAAI,MAAM;QAAE,SAAS,IAAI,IAAI,MAAM,EAAE,CAAC;IACtC,IAAI,WAAW;QAAE,SAAS,IAAI,IAAI,WAAW,EAAE,CAAC;IAEhD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,0DAA0D;AAC1D,MAAM,OAAO,WAAY,SAAQ,UAAU;IAA3C;;QAW+B,aAAQ,GAAG,KAAK,CAAC;QAE9C,uDAAuD;QAC3B,YAAO,GAAG,EAAE,CAAC;QAEzC,uCAAuC;QACZ,iBAAY,GAAa,EAAE,CAAC;QAEvD,sCAAsC;QACX,eAAU,GAAa,EAAE,CAAC;QAEzB,UAAK,GAAG,KAAK,CAAC;IAmY5C,CAAC;IA/XS,WAAW,CAAC,KAAY,EAAE,SAAiB;QACjD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,6CAA6C;QAC5C,KAAK,CAAC,MAA2B,CAAC,KAAK,GAAG,SAAS,CAAC;IACvD,CAAC;IAEO,cAAc;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,iBAAiB,CAAC,KAAY;QACpC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,MAAM,cAAc,GAAG,sBAAsB,CAC3C,KAAK,EACL,IAAI,CAAC,cAAc,EAAE,EACrB,IAAI,CACL,CAAC;QACF,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,EAAE,EACrB,KAAK,CACN,CAAC;QAEF,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,IAAI,GAAG,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAEO,cAAc,CAAC,KAAY;QACjC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEhE,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,IAAI,CAAC,OAAO,EACZ,IAAI,EACJ,KAAK,EACL,MAAM,CACP,CAAC;QAEF,gCAAgC;QAChC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAiC,EAAE,MAAM,GAAG,IAAI;QACvD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAEzD,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,IAAI,CAAC,OAAO,EACZ,IAAI,EACJ,KAAK,EACL,MAAM,CACP,CAAC;QAEF,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;;iBAEA,IAAI,CAAC,KAAK;;iBAEV,gBAAgB,IAAI,OAAO;kBAC1B,IAAI,CAAC,iBAAiB;qBACnB,IAAI,CAAC,QAAQ;iCACD,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAA;;eAEA,IAAI,CAAC,KAAK;;;aAGZ,GAAG;aACH,GAAG;eACD,gBAAgB,IAAI,OAAO;gBAC1B,IAAI,CAAC,cAAc;mBAChB,IAAI,CAAC,QAAQ;+BACD,CAAC;IAC9B,CAAC;IAEO,gBAAgB,CAAC,KAAY;QACnC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,MAAM,cAAc,GAAG,wBAAwB,CAC7C,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC;QACF,MAAM,gBAAgB,GAAG,wBAAwB,CAC/C,IAAI,CAAC,OAAO,EACZ,KAAK,EACL,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC;QAEF,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,IAAI,GAAG,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU;QACR,MAAM,gBAAgB,GAAG,wBAAwB,CAC/C,IAAI,CAAC,OAAO,EACZ,KAAK,EACL,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CACnC,CAAC;QACF,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;;iBAEV,gBAAgB,IAAI,OAAO;kBAC1B,IAAI,CAAC,gBAAgB;qBAClB,IAAI,CAAC,QAAQ;;KAE7B,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,KAAY;QACnC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,IAAI,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,IAAqB;QAC9B,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;iBACV,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO;qBAClC,IAAI,GAAG,CAAC;kBACX,IAAI,CAAC,gBAAgB;qBAClB,IAAI,CAAC,QAAQ;;KAE7B,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,KAAY;QACpC,IAAI,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACrD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,IAA8B;QACxC,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;iBACV,IAAI,CAAC,OAAO,IAAI,OAAO;qBACnB,IAAI;kBACP,IAAI,CAAC,iBAAiB;qBACnB,IAAI,CAAC,QAAQ;;KAE7B,CAAC;IACJ,CAAC;IAED,SAAS;QACP,IAAI,QAAQ,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAa,EAAE,CAAC;QAE1B,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC1C,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAa,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAa,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;qBACN,IAAI,CAAC,QAAQ;;UAExB,QAAQ,CAAC,GAAG,CACZ,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAA;;uBAEX,MAAM,CAAC,KAAK,CAAC;0BACV,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC;YAC1C,IAAI,CAAC,OAAO,KAAK,OAAO;;qCAED,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC;;WAEpD,CACF;;KAEJ,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,KAAY;QACvC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc;QACZ,MAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAA;;;;;iBAKE,IAAI,CAAC,KAAK;iBACV,gBAAgB,IAAI,OAAO;kBAC1B,IAAI,CAAC,oBAAoB;qBACtB,IAAI,CAAC,QAAQ;;KAE7B,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,KAAY;QACpC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,IAAI,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;iBACV,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO;;kBAEtC,IAAI,CAAC,iBAAiB;qBACnB,IAAI,CAAC,QAAQ;;KAE7B,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAA;4CAC6B,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,QAAQ;gDACnC,IAAI,CAAC,OAAO,KAAK,GAAG;;;gDAGpB,IAAI,CAAC,OAAO,KAAK,GAAG;;;;gDAIpB,IAAI,CAAC,OAAO,KAAK,GAAG;;;;gDAIpB,IAAI,CAAC,OAAO,KAAK,GAAG;;;;KAI/D,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAA;4CAC6B,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,QAAQ;gDACnC,IAAI,CAAC,OAAO,KAAK,GAAG;;;gDAGpB,IAAI,CAAC,OAAO,KAAK,GAAG;;;;gDAIpB,IAAI,CAAC,OAAO,KAAK,GAAG;;;;gDAIpB,IAAI,CAAC,OAAO,KAAK,GAAG;;;;KAI/D,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,KAAY;QACvC,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QACvD,IAAI,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;YAC1B,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,IAAqB;QAClC,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,KAAK;iBACV,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO;qBACtC,IAAI;kBACP,IAAI,CAAC,oBAAoB;qBACtB,IAAI,CAAC,QAAQ;;KAE7B,CAAC;IACJ,CAAC;IAED,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAQ,IAAI,CAAC,KAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,CAAC,GAAW;QACnB,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM;QACR,OAAO;YACL,OAAO,EAAE,IAAI,CAAA;WACR,IAAI,CAAC,KAAK;;;uBAGE,IAAI,CAAC,QAAQ;sBACd,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;gBAE9B;YACV,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACnC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACnC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE;YACtB,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE;YAChC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;YAC1B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7B,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACjC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAClC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAA;;iBAEO,IAAI,CAAC,KAAK;iBACV,IAAI,CAAC,OAAO,IAAI,OAAO;qBACnB,IAAI,CAAC,QAAQ;iCACD,CAC5B,CAAC;IACJ,CAAC;;AAvZM,kBAAM,GAAG,GAAG,CAAA;;;;;;GAMlB,AANY,CAMX;AAE0B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAgB;AAEd;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6CAAkB;AAGlB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4CAAc;AAGd;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;iDAA6B;AAG5B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;+CAA2B;AAEzB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAe;AAEzB;IAAhB,KAAK,CAAC,QAAQ,CAAC;0CAA0B","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { html, css, LitElement, TemplateResult, nothing } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport type { MdSwitch } from '@material/web/switch/switch.js';\nimport { currencyInput } from './currency-input.js';\n\nimport '@material/web/textfield/outlined-text-field.js';\nimport '@material/web/select/filled-select.js';\nimport '@material/web/select/select-option.js';\nimport '@material/web/switch/switch.js';\n\nfunction xmlBoolean(val?: string) {\n return ['true', '1'].includes(val?.toLowerCase().trim() ?? 'false');\n}\n\nfunction isValidInt(value: number, size: number, signed: boolean): boolean {\n const min = signed ? -(2 ** (size - 1)) : 0;\n const max = signed ? 2 ** (size - 1) - 1 : 2 ** size - 1;\n return value >= min && value <= max;\n}\n\nfunction isValidBigInt(value: bigint, size: 64 | 128): boolean {\n if (size === 64) {\n return value >= -9223372036854775808n && value <= 9223372036854775807n;\n }\n if (size === 128) {\n return (\n value >= -170141183460469231731687303715884105728n &&\n value <= 170141183460469231731687303715884105727n\n );\n }\n return false;\n}\n\nfunction sanitizeAndValidateInt(\n value: string,\n size: number,\n isUserInput: boolean,\n isSigned = true,\n) {\n if (!value) return '';\n\n // allow leading negative sign\n const signed = value[0] === '-' ? '-' : '';\n const negative = signed === '-';\n\n // remove leading zeros and invalid characters\n let sanitized = value.replace(/[^0-9]/g, '').replace(/^0+(?=\\d)/, '');\n\n // handle special cases\n if (negative && !sanitized.startsWith('-')) {\n sanitized = signed + sanitized;\n }\n if (sanitized === '-0') {\n sanitized = '0';\n }\n\n // ensure input was properly sanitized\n const intRegex = /^-?\\d*$/;\n if (!intRegex.test(sanitized)) {\n return '';\n }\n\n // allow leading negative sign only if it is from user input\n if (sanitized === '') {\n if (isUserInput) {\n return sanitized;\n }\n return '';\n }\n\n // parse and validate\n if (sanitized !== '') {\n if (size === 64 || size === 128) {\n const parsedValue = BigInt(sanitized);\n if (Number.isNaN(parsedValue) || !isValidBigInt(parsedValue, size)) {\n return '';\n }\n } else {\n const parsedValue = Number(sanitized);\n if (\n Number.isNaN(parsedValue) ||\n !isValidInt(parsedValue, size, isSigned)\n ) {\n return '';\n }\n }\n }\n\n return sanitized;\n}\n\nfunction isValidFloat(value: number, size: 32 | 64): boolean {\n if (size === 32) {\n return value >= -3.4028235e38 && value <= 3.4028235e38;\n }\n if (size === 64) {\n return value >= -1.7976931348623157e308 && value <= 1.7976931348623157e308;\n }\n return false;\n}\n\n/** Removes invalid characters and validates the float value input */\nfunction sanitizeAndValidateFloat(\n value: string,\n isUserInput: boolean,\n size: 32 | 64,\n) {\n if (!value) return '';\n\n let sanitized = '';\n\n // allow leading negative sign\n const signed = value[0] === '-' ? '-' : '';\n const negative = signed === '-';\n\n // account for Euler's number\n if (value === 'e' || value === '-e') {\n sanitized = '2.7182818284590452354';\n return signed + sanitized;\n }\n\n // remove leading zeros and invalid characters\n sanitized = value\n .replace(/[^0-9eE.+-]/g, '')\n .replace(/(?<![eE])\\+|(?<![eE])-/, '');\n\n // handle multiple exponents\n const numExponents = sanitized.split(/[eE]/).length - 1;\n if (numExponents > 1) {\n sanitized = sanitized.replace(/[eE].*?[eE]/g, 'E0');\n }\n if (sanitized.endsWith('e') || sanitized.endsWith('E')) {\n sanitized += '0';\n }\n\n // handle multiple decimal points\n const numDecimalPoints = sanitized.split('.').length - 1;\n if (numDecimalPoints > 1) {\n sanitized = sanitized.replace(/\\.(?=.*\\.)/g, '');\n }\n\n // remove leading zeros\n sanitized = sanitized.replace(/^0+(?=\\d)/, '');\n sanitized = sanitized.replace(/^-0+(?=\\d)/, '-');\n\n // handle special cases\n if (sanitized === '0e' || sanitized === '-0e') {\n return '0';\n }\n if (negative && !sanitized.startsWith('-')) {\n sanitized = signed + sanitized;\n }\n if (sanitized === '.') {\n sanitized = '0.';\n }\n\n // ensure input was properly sanitized\n const floatRegex = /^-?\\d*(\\.\\d*)?([eE][-+]?\\d*)?$/;\n if (!floatRegex.test(sanitized)) {\n return '';\n }\n\n // allow leading negative sign only if it is from user input\n if (sanitized === '-') {\n if (isUserInput) {\n return sanitized;\n }\n return '';\n }\n\n // parse into float and validate\n if (sanitized !== '') {\n const parsedValue = parseFloat(sanitized);\n if (Number.isNaN(parsedValue) || !isValidFloat(parsedValue, size)) {\n return '';\n }\n }\n\n return sanitized;\n}\n\nfunction sanitizeOctet(value: string) {\n return value?.replace(/[^0-9a-fA-F]/g, '');\n}\n\nfunction sanitizeObjRef(value: string) {\n return value?.replace(/[^A-Za-z0-9_/$]/g, '');\n}\n\nfunction sanitizeBitString(value: string) {\n return value?.replace(/[^01]/g, '');\n}\n\nfunction formatTimestamp(input: string) {\n if (!input) return '';\n\n const digits = input.replace(/\\D/g, '');\n\n // Extract parts\n const year = digits.slice(0, 4);\n const month = digits.slice(4, 6);\n const day = digits.slice(6, 8);\n const hour = digits.slice(8, 10);\n const minute = digits.slice(10, 12);\n const second = digits.slice(12, 14);\n const millisecond = digits.slice(14, 17); // Optional milliseconds\n\n let formatted = `${year}`;\n if (month) formatted += `-${month}`;\n if (day) formatted += `-${day}`;\n if (hour) formatted += `T${hour}`;\n if (minute) formatted += `:${minute}`;\n if (second) formatted += `:${second}`;\n if (millisecond) formatted += `.${millisecond}`;\n\n return formatted;\n}\n\n/** Web Component for inputting IEC61850-6 \"Val\" values */\nexport class MbgValInput extends LitElement {\n static styles = css`\n md-outlined-text-field.Timestamp {\n min-width: 250px;\n max-width: 100%;\n width: auto;\n }\n `;\n\n @property({ type: String }) bType?: string;\n\n @property({ type: Boolean }) readOnly = false;\n\n // If the DA/BDA is assigned a Val in DataTypeTemplates\n @property({ type: String }) default = '';\n\n // if bType === \"Enum\" - ordinal values\n @property({ type: Array }) enumOrdinals: string[] = [];\n\n // if bType === \"Enum\" - string labels\n @property({ type: Array }) enumLabels: string[] = [];\n\n @property({ type: String }) label = 'Val';\n\n @query('#input') input?: HTMLInputElement;\n\n private updateValue(event: Event, userValue: string) {\n this.value = userValue;\n // eslint-disable-next-line no-param-reassign\n (event.target as HTMLInputElement).value = userValue;\n }\n\n private parseBTypeSize() {\n const match = this.bType?.match(/INT(\\d+)/);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n private handleBigIntInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const validatedInput = sanitizeAndValidateInt(\n input,\n this.parseBTypeSize(),\n true,\n );\n const validatedDefault = sanitizeAndValidateInt(\n this.default,\n this.parseBTypeSize(),\n false,\n );\n\n if (validatedInput === '') {\n this.updateValue(event, validatedDefault ?? '0');\n return;\n }\n\n this.updateValue(event, validatedInput);\n }\n\n private handleIntInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const signed = !(this.bType?.endsWith('U') || this.bType === 'Check');\n const size = this.bType === 'Check' ? 8 : this.parseBTypeSize();\n\n const validatedDefault = sanitizeAndValidateInt(\n this.default,\n size,\n false,\n signed,\n );\n\n // set default if input is empty\n if (input === '') {\n this.updateValue(event, validatedDefault ?? 0);\n }\n }\n\n intInput(size: 8 | 16 | 24 | 32 | 64 | 128, signed = true) {\n const min = signed ? -(2 ** (size - 1)) : 0;\n const max = signed ? 2 ** (size - 1) - 1 : 2 ** size - 1;\n\n const validatedDefault = sanitizeAndValidateInt(\n this.default,\n size,\n false,\n signed,\n );\n\n if (size > 52) {\n return html`<md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n type=\"text\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleBigIntInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>`;\n }\n\n return html`<md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n type=\"number\"\n step=\"1\"\n min=\"${min}\"\n max=\"${max}\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleIntInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>`;\n }\n\n private handleFloatInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const validatedInput = sanitizeAndValidateFloat(\n input,\n true,\n this.bType === 'FLOAT32' ? 32 : 64,\n );\n const validatedDefault = sanitizeAndValidateFloat(\n this.default,\n false,\n this.bType === 'FLOAT32' ? 32 : 64,\n );\n\n if (validatedInput === '') {\n this.updateValue(event, validatedDefault ?? '0');\n return;\n }\n\n this.updateValue(event, validatedInput);\n }\n\n floatInput() {\n const validatedDefault = sanitizeAndValidateFloat(\n this.default,\n false,\n this.bType === 'FLOAT32' ? 32 : 64,\n );\n return html`\n <md-outlined-text-field\n id=\"$input\"\n label=\"${this.label}\"\n type=\"text\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleFloatInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n private handleOctetInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n let sanitizedInput = sanitizeOctet(input);\n if (sanitizedInput === '') {\n sanitizedInput = sanitizeOctet(this.default) ?? '';\n }\n this.updateValue(event, sanitizedInput);\n }\n\n octetInput(size: 6 | 8 | 16 | 64) {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${sanitizeOctet(this.default) ?? nothing}\"\n maxlength=\"${size * 2}\"\n @input=\"${this.handleOctetInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n private handleStringInput(event: Event) {\n let input = (event.target as HTMLInputElement).value;\n if (input === '') {\n input = this.default ?? '';\n }\n this.updateValue(event, input);\n }\n\n stringInput(size: 32 | 64 | 65 | 129 | 255) {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${this.default ?? nothing}\"\n maxlength=\"${size}\"\n @input=\"${this.handleStringInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n enumInput() {\n let ordinals: string[] = [];\n let labels: string[] = [];\n\n if (typeof this.enumOrdinals === 'string') {\n ordinals = JSON.parse(this.enumOrdinals) as string[];\n }\n if (typeof this.enumLabels === 'string') {\n labels = JSON.parse(this.enumLabels) as string[];\n }\n\n return html`\n <md-filled-select\n id=\"input\"\n label=\"${this.label}\"\n ?disabled=\"${this.readOnly}\"\n >\n ${ordinals.map(\n (ordinal, index) => html`\n <md-select-option\n value=\"${labels[index]}\"\n ?selected=${this.default === labels[index] ||\n this.default === ordinal}\n >\n <div slot=\"headline\">${ordinal} - ${labels[index]}</div>\n </md-select-option>\n `,\n )}\n </md-filled-select>\n `;\n }\n\n private handleTimestampInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const validatedInput = formatTimestamp(input);\n\n if (validatedInput === '') {\n const validatedDefault = formatTimestamp(this.default);\n this.updateValue(event, validatedDefault ?? '');\n return;\n }\n\n this.updateValue(event, validatedInput);\n }\n\n timestampInput() {\n const validatedDefault = formatTimestamp(this.default);\n return html`\n <md-outlined-text-field\n class=\"Timestamp\"\n id=\"input\"\n placeholder=\"YYYY-MM-DDTHH:MM:SS.sss\"\n label=\"${this.label}\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleTimestampInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n private handleObjRefInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n let sanitizedInput = sanitizeObjRef(input);\n if (sanitizedInput === '') {\n sanitizedInput = sanitizeObjRef(this.default) ?? '';\n }\n this.updateValue(event, sanitizedInput);\n }\n\n objrefInput() {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${sanitizeObjRef(this.default) ?? nothing}\"\n maxlength=\"255\"\n @input=\"${this.handleObjRefInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n dbposInput() {\n return html`\n <md-filled-select id=\"input\" label=\"${this.label}\" ?disabled=\"${this.readOnly}\">\n <md-select-option value=\"0\" ?selected=${this.default === '0'}>\n <div slot=\"headline\">0 - intermediate-state</div>\n </md-select-option>\n <md-select-option value=\"1\" ?selected=${this.default === '1'}>\n <div slot=\"headline\">1 - off</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"2\" ?selected=${this.default === '2'}>\n <div slot=\"headline\">2 - on</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"3\" ?selected=${this.default === '3'}>\n <div slot=\"headline\">3 - bad-state</div>\n </md-select-option>\n </md-filled-select>\n `;\n }\n\n tcmdInput() {\n return html`\n <md-filled-select id=\"input\" label=\"${this.label}\" ?disabled=\"${this.readOnly}\">\n <md-select-option value=\"0\" ?selected=${this.default === '0'}>\n <div slot=\"headline\">0 - neutral</div>\n </md-select-option>\n <md-select-option value=\"1\" ?selected=${this.default === '1'}>\n <div slot=\"headline\">1 - lower</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"2\" ?selected=${this.default === '2'}>\n <div slot=\"headline\">2 - higher</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"3\" ?selected=${this.default === '3'}>\n <div slot=\"headline\">3 - reserved</div>\n </md-select-option>\n </md-filled-select>\n `;\n }\n\n private handleBitStringInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n let sanitizedInput = sanitizeBitString(input);\n if (sanitizedInput === '') {\n sanitizedInput = sanitizeBitString(this.default) ?? '';\n }\n this.updateValue(event, sanitizedInput);\n }\n\n bitstringInput(size: 5 | 6 | 10 | 14) {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${sanitizeBitString(this.default) ?? nothing}\"\n maxlength=\"${size}\"\n @input=\"${this.handleBitStringInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n get value() {\n if (this.bType === 'BOOLEAN') {\n return (this.input as unknown as MdSwitch).selected ? 'true' : 'false';\n }\n return this.input?.value ?? '';\n }\n\n set value(val: string) {\n this.input?.setAttribute('value', val);\n }\n\n get inputs(): Partial<Record<string, TemplateResult>> {\n return {\n BOOLEAN: html`<label\n >${this.label}\n <md-switch\n id=\"input\"\n ?disabled=\"${this.readOnly}\"\n ?selected=${xmlBoolean(this.default)}\n ></md-switch\n ></label>`,\n INT8: this.intInput(8),\n INT16: this.intInput(16),\n INT24: this.intInput(24),\n INT32: this.intInput(32),\n INT64: this.intInput(64),\n INT128: this.intInput(128),\n INT8U: this.intInput(8, false),\n INT16U: this.intInput(16, false),\n INT24U: this.intInput(24, false),\n INT32U: this.intInput(32, false),\n FLOAT32: this.floatInput(),\n FLOAT64: this.floatInput(),\n Octet6: this.octetInput(6),\n Octet16: this.octetInput(16),\n Octet64: this.octetInput(64),\n VisString32: this.stringInput(32),\n VisString64: this.stringInput(64),\n VisString65: this.stringInput(65),\n VisString129: this.stringInput(129),\n VisString255: this.stringInput(255),\n Unicode255: this.stringInput(255),\n Quality: this.bitstringInput(14),\n Currency: currencyInput(this.label, this.default, this.readOnly),\n Enum: this.enumInput(),\n Timestamp: this.timestampInput(),\n ObjRef: this.objrefInput(),\n Dbpos: this.dbposInput(),\n Tcmd: this.tcmdInput(),\n EntryTime: this.octetInput(6),\n Check: this.intInput(8, false),\n TrgOps: this.bitstringInput(6),\n OptFlds: this.bitstringInput(10),\n SvOptFlds: this.bitstringInput(6),\n LogOptFlds: this.bitstringInput(5),\n EntryID: this.octetInput(8),\n };\n }\n\n render() {\n return (\n this.inputs[this.bType ?? ''] ??\n html`<md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${this.default ?? nothing}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>`\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MbgValInput.js","sourceRoot":"","sources":["../../src/MbgValInput.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { html, css, LitElement, TemplateResult, nothing } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport type { MdSwitch } from '@material/web/switch/switch.js';\nimport { currencyInput } from './currency-input.js';\n\nimport { designTokens } from './design-tokens.js';\n\nimport '@material/web/textfield/outlined-text-field.js';\nimport '@material/web/select/outlined-select.js';\nimport '@material/web/select/select-option.js';\nimport '@material/web/switch/switch.js';\n\nfunction xmlBoolean(val?: string) {\n return ['true', '1'].includes(val?.toLowerCase().trim() ?? 'false');\n}\n\nfunction isValidInt(value: number, size: number, signed: boolean): boolean {\n const min = signed ? -(2 ** (size - 1)) : 0;\n const max = signed ? 2 ** (size - 1) - 1 : 2 ** size - 1;\n return value >= min && value <= max;\n}\n\nfunction isValidBigInt(value: bigint, size: 64 | 128): boolean {\n if (size === 64) {\n return value >= -9223372036854775808n && value <= 9223372036854775807n;\n }\n if (size === 128) {\n return (\n value >= -170141183460469231731687303715884105728n &&\n value <= 170141183460469231731687303715884105727n\n );\n }\n return false;\n}\n\nfunction sanitizeAndValidateInt(\n value: string,\n size: number,\n isUserInput: boolean,\n isSigned = true,\n) {\n if (!value) return '';\n\n // allow leading negative sign\n const signed = value[0] === '-' ? '-' : '';\n const negative = signed === '-';\n\n // remove leading zeros and invalid characters\n let sanitized = value.replace(/[^0-9]/g, '').replace(/^0+(?=\\d)/, '');\n\n // handle special cases\n if (negative && !sanitized.startsWith('-')) {\n sanitized = signed + sanitized;\n }\n if (sanitized === '-0') {\n sanitized = '0';\n }\n\n // ensure input was properly sanitized\n const intRegex = /^-?\\d*$/;\n if (!intRegex.test(sanitized)) {\n return '';\n }\n\n // allow leading negative sign only if it is from user input\n if (sanitized === '') {\n if (isUserInput) {\n return sanitized;\n }\n return '';\n }\n\n // parse and validate\n if (sanitized !== '') {\n if (size === 64 || size === 128) {\n const parsedValue = BigInt(sanitized);\n if (Number.isNaN(parsedValue) || !isValidBigInt(parsedValue, size)) {\n return '';\n }\n } else {\n const parsedValue = Number(sanitized);\n if (\n Number.isNaN(parsedValue) ||\n !isValidInt(parsedValue, size, isSigned)\n ) {\n return '';\n }\n }\n }\n\n return sanitized;\n}\n\nfunction isValidFloat(value: number, size: 32 | 64): boolean {\n if (size === 32) {\n return value >= -3.4028235e38 && value <= 3.4028235e38;\n }\n if (size === 64) {\n return value >= -1.7976931348623157e308 && value <= 1.7976931348623157e308;\n }\n return false;\n}\n\n/** Removes invalid characters and validates the float value input */\nfunction sanitizeAndValidateFloat(\n value: string,\n isUserInput: boolean,\n size: 32 | 64,\n) {\n if (!value) return '';\n\n let sanitized = '';\n\n // allow leading negative sign\n const signed = value[0] === '-' ? '-' : '';\n const negative = signed === '-';\n\n // account for Euler's number\n if (value === 'e' || value === '-e') {\n sanitized = '2.7182818284590452354';\n return signed + sanitized;\n }\n\n // remove leading zeros and invalid characters\n sanitized = value\n .replace(/[^0-9eE.+-]/g, '')\n .replace(/(?<![eE])\\+|(?<![eE])-/, '');\n\n // handle multiple exponents\n const numExponents = sanitized.split(/[eE]/).length - 1;\n if (numExponents > 1) {\n sanitized = sanitized.replace(/[eE].*?[eE]/g, 'E0');\n }\n if (sanitized.endsWith('e') || sanitized.endsWith('E')) {\n sanitized += '0';\n }\n\n // handle multiple decimal points\n const numDecimalPoints = sanitized.split('.').length - 1;\n if (numDecimalPoints > 1) {\n sanitized = sanitized.replace(/\\.(?=.*\\.)/g, '');\n }\n\n // remove leading zeros\n sanitized = sanitized.replace(/^0+(?=\\d)/, '');\n sanitized = sanitized.replace(/^-0+(?=\\d)/, '-');\n\n // handle special cases\n if (sanitized === '0e' || sanitized === '-0e') {\n return '0';\n }\n if (negative && !sanitized.startsWith('-')) {\n sanitized = signed + sanitized;\n }\n if (sanitized === '.') {\n sanitized = '0.';\n }\n\n // ensure input was properly sanitized\n const floatRegex = /^-?\\d*(\\.\\d*)?([eE][-+]?\\d*)?$/;\n if (!floatRegex.test(sanitized)) {\n return '';\n }\n\n // allow leading negative sign only if it is from user input\n if (sanitized === '-') {\n if (isUserInput) {\n return sanitized;\n }\n return '';\n }\n\n // parse into float and validate\n if (sanitized !== '') {\n const parsedValue = parseFloat(sanitized);\n if (Number.isNaN(parsedValue) || !isValidFloat(parsedValue, size)) {\n return '';\n }\n }\n\n return sanitized;\n}\n\nfunction sanitizeOctet(value: string) {\n return value?.replace(/[^0-9a-fA-F]/g, '');\n}\n\nfunction sanitizeObjRef(value: string) {\n return value?.replace(/[^A-Za-z0-9_/$]/g, '');\n}\n\nfunction sanitizeBitString(value: string) {\n return value?.replace(/[^01]/g, '');\n}\n\nfunction formatTimestamp(input: string) {\n if (!input) return '';\n\n const digits = input.replace(/\\D/g, '');\n\n // Extract parts\n const year = digits.slice(0, 4);\n const month = digits.slice(4, 6);\n const day = digits.slice(6, 8);\n const hour = digits.slice(8, 10);\n const minute = digits.slice(10, 12);\n const second = digits.slice(12, 14);\n const millisecond = digits.slice(14, 17); // Optional milliseconds\n\n let formatted = `${year}`;\n if (month) formatted += `-${month}`;\n if (day) formatted += `-${day}`;\n if (hour) formatted += `T${hour}`;\n if (minute) formatted += `:${minute}`;\n if (second) formatted += `:${second}`;\n if (millisecond) formatted += `.${millisecond}`;\n\n return formatted;\n}\n\n/** Web Component for inputting IEC61850-6 \"Val\" values */\nexport class MbgValInput extends LitElement {\n static styles = [\n designTokens,\n css`\n md-outlined-text-field.Timestamp {\n min-width: 250px;\n max-width: 100%;\n width: auto;\n }\n\n .boolean-input {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n }\n `,\n ];\n\n @property({ type: String }) bType?: string;\n\n @property({ type: Boolean }) readOnly = false;\n\n // If the DA/BDA is assigned a Val in DataTypeTemplates\n @property({ type: String }) default = '';\n\n // if bType === \"Enum\" - ordinal values\n @property({ type: Array }) enumOrdinals: string[] = [];\n\n // if bType === \"Enum\" - string labels\n @property({ type: Array }) enumLabels: string[] = [];\n\n @property({ type: String }) label = 'Val';\n\n @query('#input') input?: HTMLInputElement;\n\n private updateValue(event: Event, userValue: string) {\n this.value = userValue;\n // eslint-disable-next-line no-param-reassign\n (event.target as HTMLInputElement).value = userValue;\n }\n\n private parseBTypeSize() {\n const match = this.bType?.match(/INT(\\d+)/);\n return match ? parseInt(match[1], 10) : 0;\n }\n\n private handleBigIntInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const validatedInput = sanitizeAndValidateInt(\n input,\n this.parseBTypeSize(),\n true,\n );\n const validatedDefault = sanitizeAndValidateInt(\n this.default,\n this.parseBTypeSize(),\n false,\n );\n\n if (validatedInput === '') {\n this.updateValue(event, validatedDefault ?? '0');\n return;\n }\n\n this.updateValue(event, validatedInput);\n }\n\n private handleIntInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const signed = !(this.bType?.endsWith('U') || this.bType === 'Check');\n const size = this.bType === 'Check' ? 8 : this.parseBTypeSize();\n\n const validatedDefault = sanitizeAndValidateInt(\n this.default,\n size,\n false,\n signed,\n );\n\n // set default if input is empty\n if (input === '') {\n this.updateValue(event, validatedDefault ?? 0);\n }\n }\n\n intInput(size: 8 | 16 | 24 | 32 | 64 | 128, signed = true) {\n const min = signed ? -(2 ** (size - 1)) : 0;\n const max = signed ? 2 ** (size - 1) - 1 : 2 ** size - 1;\n\n const validatedDefault = sanitizeAndValidateInt(\n this.default,\n size,\n false,\n signed,\n );\n\n if (size > 52) {\n return html`<md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n type=\"text\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleBigIntInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>`;\n }\n\n return html`<md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n type=\"number\"\n step=\"1\"\n min=\"${min}\"\n max=\"${max}\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleIntInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>`;\n }\n\n private handleFloatInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const validatedInput = sanitizeAndValidateFloat(\n input,\n true,\n this.bType === 'FLOAT32' ? 32 : 64,\n );\n const validatedDefault = sanitizeAndValidateFloat(\n this.default,\n false,\n this.bType === 'FLOAT32' ? 32 : 64,\n );\n\n if (validatedInput === '') {\n this.updateValue(event, validatedDefault ?? '0');\n return;\n }\n\n this.updateValue(event, validatedInput);\n }\n\n floatInput() {\n const validatedDefault = sanitizeAndValidateFloat(\n this.default,\n false,\n this.bType === 'FLOAT32' ? 32 : 64,\n );\n return html`\n <md-outlined-text-field\n id=\"$input\"\n label=\"${this.label}\"\n type=\"text\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleFloatInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n private handleOctetInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n let sanitizedInput = sanitizeOctet(input);\n if (sanitizedInput === '') {\n sanitizedInput = sanitizeOctet(this.default) ?? '';\n }\n this.updateValue(event, sanitizedInput);\n }\n\n octetInput(size: 6 | 8 | 16 | 64) {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${sanitizeOctet(this.default) ?? nothing}\"\n maxlength=\"${size * 2}\"\n @input=\"${this.handleOctetInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n private handleStringInput(event: Event) {\n let input = (event.target as HTMLInputElement).value;\n if (input === '') {\n input = this.default ?? '';\n }\n this.updateValue(event, input);\n }\n\n stringInput(size: 32 | 64 | 65 | 129 | 255) {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${this.default ?? nothing}\"\n maxlength=\"${size}\"\n @input=\"${this.handleStringInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n enumInput() {\n let ordinals: string[] = [];\n let labels: string[] = [];\n\n if (typeof this.enumOrdinals === 'string') {\n ordinals = JSON.parse(this.enumOrdinals) as string[];\n }\n if (typeof this.enumLabels === 'string') {\n labels = JSON.parse(this.enumLabels) as string[];\n }\n\n return html`\n <md-outlined-select\n id=\"input\"\n label=\"${this.label}\"\n ?disabled=\"${this.readOnly}\"\n >\n ${ordinals.map(\n (ordinal, index) => html`\n <md-select-option\n value=\"${labels[index]}\"\n ?selected=${this.default === labels[index] ||\n this.default === ordinal}\n >\n <div slot=\"headline\">${ordinal} - ${labels[index]}</div>\n </md-select-option>\n `,\n )}\n </md-outlined-select>\n `;\n }\n\n private handleTimestampInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n const validatedInput = formatTimestamp(input);\n\n if (validatedInput === '') {\n const validatedDefault = formatTimestamp(this.default);\n this.updateValue(event, validatedDefault ?? '');\n return;\n }\n\n this.updateValue(event, validatedInput);\n }\n\n timestampInput() {\n const validatedDefault = formatTimestamp(this.default);\n return html`\n <md-outlined-text-field\n class=\"Timestamp\"\n id=\"input\"\n placeholder=\"YYYY-MM-DDTHH:MM:SS.sss\"\n label=\"${this.label}\"\n value=\"${validatedDefault ?? nothing}\"\n @input=\"${this.handleTimestampInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n private handleObjRefInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n let sanitizedInput = sanitizeObjRef(input);\n if (sanitizedInput === '') {\n sanitizedInput = sanitizeObjRef(this.default) ?? '';\n }\n this.updateValue(event, sanitizedInput);\n }\n\n objrefInput() {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${sanitizeObjRef(this.default) ?? nothing}\"\n maxlength=\"255\"\n @input=\"${this.handleObjRefInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n dbposInput() {\n return html`\n <md-outlined-select id=\"input\" label=\"${this.label}\" ?disabled=\"${this.readOnly}\">\n <md-select-option value=\"0\" ?selected=${this.default === '0'}>\n <div slot=\"headline\">0 - intermediate-state</div>\n </md-select-option>\n <md-select-option value=\"1\" ?selected=${this.default === '1'}>\n <div slot=\"headline\">1 - off</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"2\" ?selected=${this.default === '2'}>\n <div slot=\"headline\">2 - on</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"3\" ?selected=${this.default === '3'}>\n <div slot=\"headline\">3 - bad-state</div>\n </md-select-option>\n </md-outlined-select>\n `;\n }\n\n tcmdInput() {\n return html`\n <md-outlined-select id=\"input\" label=\"${this.label}\" ?disabled=\"${this.readOnly}\">\n <md-select-option value=\"0\" ?selected=${this.default === '0'}>\n <div slot=\"headline\">0 - neutral</div>\n </md-select-option>\n <md-select-option value=\"1\" ?selected=${this.default === '1'}>\n <div slot=\"headline\">1 - lower</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"2\" ?selected=${this.default === '2'}>\n <div slot=\"headline\">2 - higher</div>\n </md-select-option>\n </md-select-option>\n <md-select-option value=\"3\" ?selected=${this.default === '3'}>\n <div slot=\"headline\">3 - reserved</div>\n </md-select-option>\n </md-outlined-select>\n `;\n }\n\n private handleBitStringInput(event: Event) {\n const input = (event.target as HTMLInputElement).value;\n let sanitizedInput = sanitizeBitString(input);\n if (sanitizedInput === '') {\n sanitizedInput = sanitizeBitString(this.default) ?? '';\n }\n this.updateValue(event, sanitizedInput);\n }\n\n bitstringInput(size: 5 | 6 | 10 | 14) {\n return html`\n <md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${sanitizeBitString(this.default) ?? nothing}\"\n maxlength=\"${size}\"\n @input=\"${this.handleBitStringInput}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>\n `;\n }\n\n get value() {\n if (this.bType === 'BOOLEAN') {\n return (this.input as unknown as MdSwitch).selected ? 'true' : 'false';\n }\n return this.input?.value ?? '';\n }\n\n set value(val: string) {\n this.input?.setAttribute('value', val);\n }\n\n get inputs(): Partial<Record<string, TemplateResult>> {\n return {\n BOOLEAN: html`<label class=\"boolean-input\"\n >${this.label}\n <md-switch\n id=\"input\"\n ?disabled=\"${this.readOnly}\"\n ?selected=${xmlBoolean(this.default)}\n icons\n ></md-switch\n ></label>`,\n INT8: this.intInput(8),\n INT16: this.intInput(16),\n INT24: this.intInput(24),\n INT32: this.intInput(32),\n INT64: this.intInput(64),\n INT128: this.intInput(128),\n INT8U: this.intInput(8, false),\n INT16U: this.intInput(16, false),\n INT24U: this.intInput(24, false),\n INT32U: this.intInput(32, false),\n FLOAT32: this.floatInput(),\n FLOAT64: this.floatInput(),\n Octet6: this.octetInput(6),\n Octet16: this.octetInput(16),\n Octet64: this.octetInput(64),\n VisString32: this.stringInput(32),\n VisString64: this.stringInput(64),\n VisString65: this.stringInput(65),\n VisString129: this.stringInput(129),\n VisString255: this.stringInput(255),\n Unicode255: this.stringInput(255),\n Quality: this.bitstringInput(14),\n Currency: currencyInput(this.label, this.default, this.readOnly),\n Enum: this.enumInput(),\n Timestamp: this.timestampInput(),\n ObjRef: this.objrefInput(),\n Dbpos: this.dbposInput(),\n Tcmd: this.tcmdInput(),\n EntryTime: this.octetInput(6),\n Check: this.intInput(8, false),\n TrgOps: this.bitstringInput(6),\n OptFlds: this.bitstringInput(10),\n SvOptFlds: this.bitstringInput(6),\n LogOptFlds: this.bitstringInput(5),\n EntryID: this.octetInput(8),\n };\n }\n\n render() {\n return (\n this.inputs[this.bType ?? ''] ??\n html`<md-outlined-text-field\n id=\"input\"\n label=\"${this.label}\"\n value=\"${this.default ?? nothing}\"\n ?disabled=\"${this.readOnly}\"\n ></md-outlined-text-field>`\n );\n }\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import '@material/web/select/
|
|
1
|
+
import '@material/web/select/outlined-select.js';
|
|
2
2
|
import '@material/web/select/select-option.js';
|
|
3
3
|
export declare function currencyInput(label: string, defaultVal: string, readOnly: boolean): import("lit-html").TemplateResult<1>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { html } from 'lit';
|
|
2
|
-
import '@material/web/select/
|
|
2
|
+
import '@material/web/select/outlined-select.js';
|
|
3
3
|
import '@material/web/select/select-option.js';
|
|
4
4
|
export function currencyInput(label, defaultVal, readOnly) {
|
|
5
5
|
return html `
|
|
6
|
-
<md-
|
|
6
|
+
<md-outlined-select id="input" label="${label}" ?disabled="${readOnly}">
|
|
7
7
|
<md-select-option value="AED" ?selected=${defaultVal === 'AED'}>
|
|
8
8
|
<div slot="headline">AED (UAE Dirham)</div>
|
|
9
9
|
</md-select-option>
|
|
@@ -490,7 +490,7 @@ export function currencyInput(label, defaultVal, readOnly) {
|
|
|
490
490
|
<md-select-option value="ZWG" ?selected=${defaultVal === 'ZWG'}>
|
|
491
491
|
<div slot="headline">ZWG (Zimbabwe Gold)</div>
|
|
492
492
|
</md-select-option>
|
|
493
|
-
</md-
|
|
493
|
+
</md-outlined-select>
|
|
494
494
|
`;
|
|
495
495
|
}
|
|
496
496
|
//# sourceMappingURL=currency-input.js.map
|