mbg-val-input 0.4.1 → 0.4.3
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/dist/src/MbgValInput.d.ts +1 -0
- package/dist/src/MbgValInput.js +38 -10
- package/dist/src/MbgValInput.js.map +1 -1
- package/dist/src/currency-input.d.ts +1 -1
- package/dist/src/currency-input.js +2 -2
- package/dist/src/currency-input.js.map +1 -1
- package/dist/stories/index.stories.d.ts +9 -1
- package/dist/stories/index.stories.js +44 -6
- package/dist/stories/index.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/MbgValInput.ts +36 -10
- package/src/currency-input.ts +6 -2
- package/stories/index.stories.ts +50 -0
package/package.json
CHANGED
package/src/MbgValInput.ts
CHANGED
|
@@ -38,6 +38,8 @@ function sanitizeAndValidateInt(
|
|
|
38
38
|
isUserInput: boolean,
|
|
39
39
|
isSigned = true,
|
|
40
40
|
) {
|
|
41
|
+
if (!value) return '';
|
|
42
|
+
|
|
41
43
|
// allow leading negative sign
|
|
42
44
|
const signed = value[0] === '-' ? '-' : '';
|
|
43
45
|
const negative = signed === '-';
|
|
@@ -104,6 +106,8 @@ function sanitizeAndValidateFloat(
|
|
|
104
106
|
isUserInput: boolean,
|
|
105
107
|
size: 32 | 64,
|
|
106
108
|
) {
|
|
109
|
+
if (!value) return '';
|
|
110
|
+
|
|
107
111
|
let sanitized = '';
|
|
108
112
|
|
|
109
113
|
// allow leading negative sign
|
|
@@ -177,18 +181,20 @@ function sanitizeAndValidateFloat(
|
|
|
177
181
|
}
|
|
178
182
|
|
|
179
183
|
function sanitizeOctet(value: string) {
|
|
180
|
-
return value
|
|
184
|
+
return value?.replace(/[^0-9a-fA-F]/g, '');
|
|
181
185
|
}
|
|
182
186
|
|
|
183
187
|
function sanitizeObjRef(value: string) {
|
|
184
|
-
return value
|
|
188
|
+
return value?.replace(/[^A-Za-z0-9_/$]/g, '');
|
|
185
189
|
}
|
|
186
190
|
|
|
187
191
|
function sanitizeBitString(value: string) {
|
|
188
|
-
return value
|
|
192
|
+
return value?.replace(/[^01]/g, '');
|
|
189
193
|
}
|
|
190
194
|
|
|
191
195
|
function formatTimestamp(input: string) {
|
|
196
|
+
if (!input) return '';
|
|
197
|
+
|
|
192
198
|
const digits = input.replace(/\D/g, '');
|
|
193
199
|
|
|
194
200
|
// Extract parts
|
|
@@ -223,6 +229,8 @@ export class MbgValInput extends LitElement {
|
|
|
223
229
|
|
|
224
230
|
@property({ type: String }) bType?: string;
|
|
225
231
|
|
|
232
|
+
@property({ type: Boolean }) readOnly = false;
|
|
233
|
+
|
|
226
234
|
// If the DA/BDA is assigned a Val in DataTypeTemplates
|
|
227
235
|
@property({ type: String }) default = '';
|
|
228
236
|
|
|
@@ -304,6 +312,7 @@ export class MbgValInput extends LitElement {
|
|
|
304
312
|
type="text"
|
|
305
313
|
value="${validatedDefault ?? nothing}"
|
|
306
314
|
@input="${this.handleBigIntInput}"
|
|
315
|
+
?disabled="${this.readOnly}"
|
|
307
316
|
></md-outlined-text-field>`;
|
|
308
317
|
}
|
|
309
318
|
|
|
@@ -316,6 +325,7 @@ export class MbgValInput extends LitElement {
|
|
|
316
325
|
max="${max}"
|
|
317
326
|
value="${validatedDefault ?? nothing}"
|
|
318
327
|
@input="${this.handleIntInput}"
|
|
328
|
+
?disabled="${this.readOnly}"
|
|
319
329
|
></md-outlined-text-field>`;
|
|
320
330
|
}
|
|
321
331
|
|
|
@@ -353,6 +363,7 @@ export class MbgValInput extends LitElement {
|
|
|
353
363
|
type="text"
|
|
354
364
|
value="${validatedDefault ?? nothing}"
|
|
355
365
|
@input="${this.handleFloatInput}"
|
|
366
|
+
?disabled="${this.readOnly}"
|
|
356
367
|
></md-outlined-text-field>
|
|
357
368
|
`;
|
|
358
369
|
}
|
|
@@ -374,6 +385,7 @@ export class MbgValInput extends LitElement {
|
|
|
374
385
|
value="${sanitizeOctet(this.default) ?? nothing}"
|
|
375
386
|
maxlength="${size * 2}"
|
|
376
387
|
@input="${this.handleOctetInput}"
|
|
388
|
+
?disabled="${this.readOnly}"
|
|
377
389
|
></md-outlined-text-field>
|
|
378
390
|
`;
|
|
379
391
|
}
|
|
@@ -394,6 +406,7 @@ export class MbgValInput extends LitElement {
|
|
|
394
406
|
value="${this.default ?? nothing}"
|
|
395
407
|
maxlength="${size}"
|
|
396
408
|
@input="${this.handleStringInput}"
|
|
409
|
+
?disabled="${this.readOnly}"
|
|
397
410
|
></md-outlined-text-field>
|
|
398
411
|
`;
|
|
399
412
|
}
|
|
@@ -410,12 +423,17 @@ export class MbgValInput extends LitElement {
|
|
|
410
423
|
}
|
|
411
424
|
|
|
412
425
|
return html`
|
|
413
|
-
<md-filled-select
|
|
426
|
+
<md-filled-select
|
|
427
|
+
id="input"
|
|
428
|
+
label="${this.label}"
|
|
429
|
+
?disabled="${this.readOnly}"
|
|
430
|
+
>
|
|
414
431
|
${ordinals.map(
|
|
415
432
|
(ordinal, index) => html`
|
|
416
433
|
<md-select-option
|
|
417
|
-
value="${
|
|
418
|
-
?selected=${this.default ===
|
|
434
|
+
value="${labels[index]}"
|
|
435
|
+
?selected=${this.default === labels[index] ||
|
|
436
|
+
this.default === ordinal}
|
|
419
437
|
>
|
|
420
438
|
<div slot="headline">${ordinal} - ${labels[index]}</div>
|
|
421
439
|
</md-select-option>
|
|
@@ -448,6 +466,7 @@ export class MbgValInput extends LitElement {
|
|
|
448
466
|
label="${this.label}"
|
|
449
467
|
value="${validatedDefault ?? nothing}"
|
|
450
468
|
@input="${this.handleTimestampInput}"
|
|
469
|
+
?disabled="${this.readOnly}"
|
|
451
470
|
></md-outlined-text-field>
|
|
452
471
|
`;
|
|
453
472
|
}
|
|
@@ -469,13 +488,14 @@ export class MbgValInput extends LitElement {
|
|
|
469
488
|
value="${sanitizeObjRef(this.default) ?? nothing}"
|
|
470
489
|
maxlength="255"
|
|
471
490
|
@input="${this.handleObjRefInput}"
|
|
491
|
+
?disabled="${this.readOnly}"
|
|
472
492
|
></md-outlined-text-field>
|
|
473
493
|
`;
|
|
474
494
|
}
|
|
475
495
|
|
|
476
496
|
dbposInput() {
|
|
477
497
|
return html`
|
|
478
|
-
<md-filled-select id="input" label="${this.label}">
|
|
498
|
+
<md-filled-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
|
|
479
499
|
<md-select-option value="0" ?selected=${this.default === '0'}>
|
|
480
500
|
<div slot="headline">0 - intermediate-state</div>
|
|
481
501
|
</md-select-option>
|
|
@@ -496,7 +516,7 @@ export class MbgValInput extends LitElement {
|
|
|
496
516
|
|
|
497
517
|
tcmdInput() {
|
|
498
518
|
return html`
|
|
499
|
-
<md-filled-select id="input" label="${this.label}">
|
|
519
|
+
<md-filled-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
|
|
500
520
|
<md-select-option value="0" ?selected=${this.default === '0'}>
|
|
501
521
|
<div slot="headline">0 - neutral</div>
|
|
502
522
|
</md-select-option>
|
|
@@ -532,6 +552,7 @@ export class MbgValInput extends LitElement {
|
|
|
532
552
|
value="${sanitizeBitString(this.default) ?? nothing}"
|
|
533
553
|
maxlength="${size}"
|
|
534
554
|
@input="${this.handleBitStringInput}"
|
|
555
|
+
?disabled="${this.readOnly}"
|
|
535
556
|
></md-outlined-text-field>
|
|
536
557
|
`;
|
|
537
558
|
}
|
|
@@ -551,7 +572,11 @@ export class MbgValInput extends LitElement {
|
|
|
551
572
|
return {
|
|
552
573
|
BOOLEAN: html`<label
|
|
553
574
|
>${this.label}
|
|
554
|
-
<md-switch
|
|
575
|
+
<md-switch
|
|
576
|
+
id="input"
|
|
577
|
+
?disabled="${this.readOnly}"
|
|
578
|
+
?selected=${xmlBoolean(this.default)}
|
|
579
|
+
></md-switch
|
|
555
580
|
></label>`,
|
|
556
581
|
INT8: this.intInput(8),
|
|
557
582
|
INT16: this.intInput(16),
|
|
@@ -575,7 +600,7 @@ export class MbgValInput extends LitElement {
|
|
|
575
600
|
VisString255: this.stringInput(255),
|
|
576
601
|
Unicode255: this.stringInput(255),
|
|
577
602
|
Quality: this.bitstringInput(14),
|
|
578
|
-
Currency: currencyInput(this.label, this.default),
|
|
603
|
+
Currency: currencyInput(this.label, this.default, this.readOnly),
|
|
579
604
|
Enum: this.enumInput(),
|
|
580
605
|
Timestamp: this.timestampInput(),
|
|
581
606
|
ObjRef: this.objrefInput(),
|
|
@@ -598,6 +623,7 @@ export class MbgValInput extends LitElement {
|
|
|
598
623
|
id="input"
|
|
599
624
|
label="${this.label}"
|
|
600
625
|
value="${this.default ?? nothing}"
|
|
626
|
+
?disabled="${this.readOnly}"
|
|
601
627
|
></md-outlined-text-field>`
|
|
602
628
|
);
|
|
603
629
|
}
|
package/src/currency-input.ts
CHANGED
|
@@ -3,9 +3,13 @@ import { html } from 'lit';
|
|
|
3
3
|
import '@material/web/select/filled-select.js';
|
|
4
4
|
import '@material/web/select/select-option.js';
|
|
5
5
|
|
|
6
|
-
export function currencyInput(
|
|
6
|
+
export function currencyInput(
|
|
7
|
+
label: string,
|
|
8
|
+
defaultVal: string,
|
|
9
|
+
readOnly: boolean,
|
|
10
|
+
) {
|
|
7
11
|
return html`
|
|
8
|
-
<md-filled-select id="input" label="${label}">
|
|
12
|
+
<md-filled-select id="input" label="${label}" ?disabled="${readOnly}">
|
|
9
13
|
<md-select-option value="AED" ?selected=${defaultVal === 'AED'}>
|
|
10
14
|
<div slot="headline">AED (UAE Dirham)</div>
|
|
11
15
|
</md-select-option>
|
package/stories/index.stories.ts
CHANGED
|
@@ -6,6 +6,7 @@ export default {
|
|
|
6
6
|
component: 'mbg-val-input',
|
|
7
7
|
argTypes: {
|
|
8
8
|
bType: { control: 'text' },
|
|
9
|
+
readOnly: { control: 'boolean' },
|
|
9
10
|
defaultVal: { control: 'text' },
|
|
10
11
|
enumOrdinals: { control: 'array' },
|
|
11
12
|
enumLabels: { control: 'array' },
|
|
@@ -22,6 +23,7 @@ interface Story<T> {
|
|
|
22
23
|
|
|
23
24
|
interface ArgTypes {
|
|
24
25
|
bType?: string;
|
|
26
|
+
readOnly?: boolean;
|
|
25
27
|
defaultVal?: string;
|
|
26
28
|
enumOrdinals?: string[];
|
|
27
29
|
enumLabels?: string[];
|
|
@@ -31,6 +33,7 @@ interface ArgTypes {
|
|
|
31
33
|
|
|
32
34
|
const Template: Story<ArgTypes> = ({
|
|
33
35
|
bType,
|
|
36
|
+
readOnly,
|
|
34
37
|
defaultVal,
|
|
35
38
|
enumOrdinals,
|
|
36
39
|
enumLabels,
|
|
@@ -39,6 +42,7 @@ const Template: Story<ArgTypes> = ({
|
|
|
39
42
|
}: ArgTypes) => html`
|
|
40
43
|
<mbg-val-input
|
|
41
44
|
.bType=${bType}
|
|
45
|
+
.readOnly=${readOnly}
|
|
42
46
|
.default=${defaultVal}
|
|
43
47
|
.enumOrdinals=${JSON.stringify(enumOrdinals)}
|
|
44
48
|
.enumLabels=${JSON.stringify(enumLabels)}
|
|
@@ -66,6 +70,14 @@ BooleanWithDefault.args = {
|
|
|
66
70
|
label: 'Boolean (Default: true)',
|
|
67
71
|
};
|
|
68
72
|
|
|
73
|
+
export const BooleanReadOnly = Template.bind({});
|
|
74
|
+
BooleanReadOnly.args = {
|
|
75
|
+
bType: 'BOOLEAN',
|
|
76
|
+
defaultVal: 'true',
|
|
77
|
+
readOnly: true,
|
|
78
|
+
label: 'Boolean (Default: true)',
|
|
79
|
+
};
|
|
80
|
+
|
|
69
81
|
export const Int32U = Template.bind({});
|
|
70
82
|
Int32U.args = {
|
|
71
83
|
bType: 'INT32U',
|
|
@@ -82,6 +94,7 @@ export const Int64WithDefault = Template.bind({});
|
|
|
82
94
|
Int64WithDefault.args = {
|
|
83
95
|
bType: 'INT64',
|
|
84
96
|
defaultVal: '-42',
|
|
97
|
+
readOnly: true,
|
|
85
98
|
label: 'INT64 (Default: -42)',
|
|
86
99
|
};
|
|
87
100
|
|
|
@@ -116,6 +129,7 @@ Octet16.args = {
|
|
|
116
129
|
bType: 'Octet16',
|
|
117
130
|
defaultVal: '0123456789ABCDEF0123456789ABCDEF',
|
|
118
131
|
label: 'Octet16',
|
|
132
|
+
readOnly: true,
|
|
119
133
|
};
|
|
120
134
|
|
|
121
135
|
export const VisString32 = Template.bind({});
|
|
@@ -145,6 +159,14 @@ Currency.args = {
|
|
|
145
159
|
label: 'Currency',
|
|
146
160
|
};
|
|
147
161
|
|
|
162
|
+
export const CurrencyReadOnly = Template.bind({});
|
|
163
|
+
CurrencyReadOnly.args = {
|
|
164
|
+
bType: 'Currency',
|
|
165
|
+
defaultVal: 'JPY',
|
|
166
|
+
readOnly: true,
|
|
167
|
+
label: 'Currency',
|
|
168
|
+
};
|
|
169
|
+
|
|
148
170
|
export const EnumHlth = Template.bind({});
|
|
149
171
|
EnumHlth.args = {
|
|
150
172
|
bType: 'Enum',
|
|
@@ -154,6 +176,16 @@ EnumHlth.args = {
|
|
|
154
176
|
defaultVal: '1',
|
|
155
177
|
};
|
|
156
178
|
|
|
179
|
+
export const EnumHlthReadOnly = Template.bind({});
|
|
180
|
+
EnumHlthReadOnly.args = {
|
|
181
|
+
bType: 'Enum',
|
|
182
|
+
enumOrdinals: ['1', '2', '3'],
|
|
183
|
+
enumLabels: ['Ok', 'Warning', 'Alarm'],
|
|
184
|
+
label: 'Enum - HealthKind',
|
|
185
|
+
defaultVal: '1',
|
|
186
|
+
readOnly: true,
|
|
187
|
+
};
|
|
188
|
+
|
|
157
189
|
export const Timestamp = Template.bind({});
|
|
158
190
|
Timestamp.args = {
|
|
159
191
|
bType: 'Timestamp',
|
|
@@ -170,9 +202,17 @@ ObjRef.args = {
|
|
|
170
202
|
|
|
171
203
|
export const Dbpos = Template.bind({});
|
|
172
204
|
Dbpos.args = {
|
|
205
|
+
bType: 'Dbpos',
|
|
206
|
+
label: 'Double-Point Status',
|
|
207
|
+
defaultVal: '0',
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const DbposReadOnly = Template.bind({});
|
|
211
|
+
DbposReadOnly.args = {
|
|
173
212
|
bType: 'Dbpos',
|
|
174
213
|
label: 'Double-Point Status',
|
|
175
214
|
defaultVal: '2',
|
|
215
|
+
readOnly: true,
|
|
176
216
|
};
|
|
177
217
|
|
|
178
218
|
export const Tcmd = Template.bind({});
|
|
@@ -182,6 +222,14 @@ Tcmd.args = {
|
|
|
182
222
|
defaultVal: '2',
|
|
183
223
|
};
|
|
184
224
|
|
|
225
|
+
export const TcmdReadOnly = Template.bind({});
|
|
226
|
+
TcmdReadOnly.args = {
|
|
227
|
+
bType: 'Tcmd',
|
|
228
|
+
label: 'Tap Command',
|
|
229
|
+
defaultVal: '3',
|
|
230
|
+
readOnly: true,
|
|
231
|
+
};
|
|
232
|
+
|
|
185
233
|
export const EntryTime = Template.bind({});
|
|
186
234
|
EntryTime.args = {
|
|
187
235
|
bType: 'EntryTime',
|
|
@@ -206,6 +254,7 @@ OptFlds.args = {
|
|
|
206
254
|
bType: 'OptFlds',
|
|
207
255
|
label: 'Optional Fields',
|
|
208
256
|
defaultVal: '0000000011',
|
|
257
|
+
readOnly: false,
|
|
209
258
|
};
|
|
210
259
|
|
|
211
260
|
export const SvOptFlds = Template.bind({});
|
|
@@ -213,6 +262,7 @@ SvOptFlds.args = {
|
|
|
213
262
|
bType: 'SvOptFlds',
|
|
214
263
|
label: 'Sampled Values Optional Fields',
|
|
215
264
|
defaultVal: '000101',
|
|
265
|
+
readOnly: true,
|
|
216
266
|
};
|
|
217
267
|
|
|
218
268
|
export const LogOptFlds = Template.bind({});
|