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 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
- ## Linting and formatting
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
- ## Testing with Web Test Runner
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
- ## Demoing with Storybook
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
- ## Local Demo with `web-dev-server`
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/filled-select.js';
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;
@@ -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/filled-select.js';
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-filled-select
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-filled-select>
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-filled-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
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-filled-select>
401
+ </md-outlined-select>
401
402
  `;
402
403
  }
403
404
  tcmdInput() {
404
405
  return html `
405
- <md-filled-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
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-filled-select>
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 = css `
510
- md-outlined-text-field.Timestamp {
511
- min-width: 250px;
512
- max-width: 100%;
513
- width: auto;
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":"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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 '@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/filled-select.js';
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/filled-select.js';
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-filled-select id="input" label="${label}" ?disabled="${readOnly}">
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-filled-select>
493
+ </md-outlined-select>
494
494
  `;
495
495
  }
496
496
  //# sourceMappingURL=currency-input.js.map