mbg-val-input 0.4.2 → 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 +37 -9
- 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 -0
- package/dist/stories/index.stories.js +44 -1
- package/dist/stories/index.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/MbgValInput.ts +33 -8
- package/src/currency-input.ts +6 -2
- package/stories/index.stories.ts +50 -0
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,7 +423,11 @@ 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
|
|
@@ -449,6 +466,7 @@ export class MbgValInput extends LitElement {
|
|
|
449
466
|
label="${this.label}"
|
|
450
467
|
value="${validatedDefault ?? nothing}"
|
|
451
468
|
@input="${this.handleTimestampInput}"
|
|
469
|
+
?disabled="${this.readOnly}"
|
|
452
470
|
></md-outlined-text-field>
|
|
453
471
|
`;
|
|
454
472
|
}
|
|
@@ -470,13 +488,14 @@ export class MbgValInput extends LitElement {
|
|
|
470
488
|
value="${sanitizeObjRef(this.default) ?? nothing}"
|
|
471
489
|
maxlength="255"
|
|
472
490
|
@input="${this.handleObjRefInput}"
|
|
491
|
+
?disabled="${this.readOnly}"
|
|
473
492
|
></md-outlined-text-field>
|
|
474
493
|
`;
|
|
475
494
|
}
|
|
476
495
|
|
|
477
496
|
dbposInput() {
|
|
478
497
|
return html`
|
|
479
|
-
<md-filled-select id="input" label="${this.label}">
|
|
498
|
+
<md-filled-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
|
|
480
499
|
<md-select-option value="0" ?selected=${this.default === '0'}>
|
|
481
500
|
<div slot="headline">0 - intermediate-state</div>
|
|
482
501
|
</md-select-option>
|
|
@@ -497,7 +516,7 @@ export class MbgValInput extends LitElement {
|
|
|
497
516
|
|
|
498
517
|
tcmdInput() {
|
|
499
518
|
return html`
|
|
500
|
-
<md-filled-select id="input" label="${this.label}">
|
|
519
|
+
<md-filled-select id="input" label="${this.label}" ?disabled="${this.readOnly}">
|
|
501
520
|
<md-select-option value="0" ?selected=${this.default === '0'}>
|
|
502
521
|
<div slot="headline">0 - neutral</div>
|
|
503
522
|
</md-select-option>
|
|
@@ -533,6 +552,7 @@ export class MbgValInput extends LitElement {
|
|
|
533
552
|
value="${sanitizeBitString(this.default) ?? nothing}"
|
|
534
553
|
maxlength="${size}"
|
|
535
554
|
@input="${this.handleBitStringInput}"
|
|
555
|
+
?disabled="${this.readOnly}"
|
|
536
556
|
></md-outlined-text-field>
|
|
537
557
|
`;
|
|
538
558
|
}
|
|
@@ -552,7 +572,11 @@ export class MbgValInput extends LitElement {
|
|
|
552
572
|
return {
|
|
553
573
|
BOOLEAN: html`<label
|
|
554
574
|
>${this.label}
|
|
555
|
-
<md-switch
|
|
575
|
+
<md-switch
|
|
576
|
+
id="input"
|
|
577
|
+
?disabled="${this.readOnly}"
|
|
578
|
+
?selected=${xmlBoolean(this.default)}
|
|
579
|
+
></md-switch
|
|
556
580
|
></label>`,
|
|
557
581
|
INT8: this.intInput(8),
|
|
558
582
|
INT16: this.intInput(16),
|
|
@@ -576,7 +600,7 @@ export class MbgValInput extends LitElement {
|
|
|
576
600
|
VisString255: this.stringInput(255),
|
|
577
601
|
Unicode255: this.stringInput(255),
|
|
578
602
|
Quality: this.bitstringInput(14),
|
|
579
|
-
Currency: currencyInput(this.label, this.default),
|
|
603
|
+
Currency: currencyInput(this.label, this.default, this.readOnly),
|
|
580
604
|
Enum: this.enumInput(),
|
|
581
605
|
Timestamp: this.timestampInput(),
|
|
582
606
|
ObjRef: this.objrefInput(),
|
|
@@ -599,6 +623,7 @@ export class MbgValInput extends LitElement {
|
|
|
599
623
|
id="input"
|
|
600
624
|
label="${this.label}"
|
|
601
625
|
value="${this.default ?? nothing}"
|
|
626
|
+
?disabled="${this.readOnly}"
|
|
602
627
|
></md-outlined-text-field>`
|
|
603
628
|
);
|
|
604
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({});
|