@everymatrix/general-registration 1.10.12 → 1.10.13

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.
@@ -1,6 +1,722 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
  import { t as translate } from './locale.utils.js';
3
- import '@vaadin/password-field';
3
+ import { r as registerStyles, a as inputFieldShared, j as InputControlMixin, h as html, k as InputController, L as LabelledInputController, n as TooltipController, o as inputFieldShared$1, T as ThemableMixin, p as ElementMixin, P as PolymerElement, i, S as SlotController } from './input-field-shared-styles.js';
4
+ import { P as PatternMixin } from './pattern-mixin.js';
5
+ import { b as button, B as Button } from './vaadin-button.js';
6
+
7
+ /**
8
+ * @license
9
+ * Copyright (c) 2017 - 2022 Vaadin Ltd.
10
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
11
+ */
12
+
13
+ registerStyles('vaadin-text-field', inputFieldShared, {
14
+ moduleId: 'lumo-text-field-styles',
15
+ });
16
+
17
+ /**
18
+ * @license
19
+ * Copyright (c) 2021 - 2022 Vaadin Ltd.
20
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
21
+ */
22
+
23
+ /**
24
+ * A mixin to provide logic for vaadin-text-field and related components.
25
+ *
26
+ * @polymerMixin
27
+ * @mixes InputControlMixin
28
+ */
29
+ const InputFieldMixin = (superclass) =>
30
+ class InputFieldMixinClass extends InputControlMixin(superclass) {
31
+ static get properties() {
32
+ return {
33
+ /**
34
+ * Whether the value of the control can be automatically completed by the browser.
35
+ * List of available options at:
36
+ * https://developer.mozilla.org/en/docs/Web/HTML/Element/input#attr-autocomplete
37
+ */
38
+ autocomplete: {
39
+ type: String,
40
+ },
41
+
42
+ /**
43
+ * This is a property supported by Safari that is used to control whether
44
+ * autocorrection should be enabled when the user is entering/editing the text.
45
+ * Possible values are:
46
+ * on: Enable autocorrection.
47
+ * off: Disable autocorrection.
48
+ */
49
+ autocorrect: {
50
+ type: String,
51
+ },
52
+
53
+ /**
54
+ * This is a property supported by Safari and Chrome that is used to control whether
55
+ * autocapitalization should be enabled when the user is entering/editing the text.
56
+ * Possible values are:
57
+ * characters: Characters capitalization.
58
+ * words: Words capitalization.
59
+ * sentences: Sentences capitalization.
60
+ * none: No capitalization.
61
+ */
62
+ autocapitalize: {
63
+ type: String,
64
+ reflectToAttribute: true,
65
+ },
66
+ };
67
+ }
68
+
69
+ static get delegateAttrs() {
70
+ return [...super.delegateAttrs, 'autocapitalize', 'autocomplete', 'autocorrect'];
71
+ }
72
+
73
+ /**
74
+ * @param {HTMLElement} input
75
+ * @protected
76
+ * @override
77
+ */
78
+ _inputElementChanged(input) {
79
+ super._inputElementChanged(input);
80
+
81
+ if (input) {
82
+ // Discard value set on the custom slotted input.
83
+ if (input.value && input.value !== this.value) {
84
+ console.warn(`Please define value on the <${this.localName}> component!`);
85
+ input.value = '';
86
+ }
87
+
88
+ if (this.value) {
89
+ input.value = this.value;
90
+ }
91
+ }
92
+ }
93
+
94
+ // Workaround for https://github.com/Polymer/polymer/issues/5259
95
+ get __data() {
96
+ return this.__dataValue || {};
97
+ }
98
+
99
+ set __data(value) {
100
+ this.__dataValue = value;
101
+ }
102
+
103
+ /**
104
+ * Override an event listener from `FocusMixin`.
105
+ * @param {boolean} focused
106
+ * @protected
107
+ * @override
108
+ */
109
+ _setFocused(focused) {
110
+ super._setFocused(focused);
111
+
112
+ if (!focused) {
113
+ this.validate();
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Override an event listener from `InputMixin`
119
+ * to mark as valid after user started typing.
120
+ * @param {Event} event
121
+ * @protected
122
+ * @override
123
+ */
124
+ _onInput(event) {
125
+ super._onInput(event);
126
+
127
+ if (this.invalid) {
128
+ this.validate();
129
+ }
130
+ }
131
+
132
+ /**
133
+ * Override an observer from `InputMixin` to validate the field
134
+ * when a new value is set programmatically.
135
+ *
136
+ * @param {string | undefined} newValue
137
+ * @param {string | undefined} oldValue
138
+ * @protected
139
+ * @override
140
+ */
141
+ _valueChanged(newValue, oldValue) {
142
+ super._valueChanged(newValue, oldValue);
143
+
144
+ if (oldValue === undefined) {
145
+ return;
146
+ }
147
+
148
+ if (this.invalid) {
149
+ this.validate();
150
+ }
151
+ }
152
+ };
153
+
154
+ /**
155
+ * @license
156
+ * Copyright (c) 2017 - 2022 Vaadin Ltd.
157
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
158
+ */
159
+
160
+ registerStyles('vaadin-text-field', inputFieldShared$1, { moduleId: 'vaadin-text-field-styles' });
161
+
162
+ /**
163
+ * `<vaadin-text-field>` is a web component that allows the user to input and edit text.
164
+ *
165
+ * ```html
166
+ * <vaadin-text-field label="First Name"></vaadin-text-field>
167
+ * ```
168
+ *
169
+ * ### Prefixes and suffixes
170
+ *
171
+ * These are child elements of a `<vaadin-text-field>` that are displayed
172
+ * inline with the input, before or after.
173
+ * In order for an element to be considered as a prefix, it must have the slot
174
+ * attribute set to `prefix` (and similarly for `suffix`).
175
+ *
176
+ * ```html
177
+ * <vaadin-text-field label="Email address">
178
+ * <div slot="prefix">Sent to:</div>
179
+ * <div slot="suffix">@vaadin.com</div>
180
+ * </vaadin-text-field>
181
+ * ```
182
+ *
183
+ * ### Styling
184
+ *
185
+ * The following custom properties are available for styling:
186
+ *
187
+ * Custom property | Description | Default
188
+ * -------------------------------|----------------------------|---------
189
+ * `--vaadin-field-default-width` | Default width of the field | `12em`
190
+ *
191
+ * The following shadow DOM parts are available for styling:
192
+ *
193
+ * Part name | Description
194
+ * ---------------------|----------------
195
+ * `label` | The label element
196
+ * `input-field` | The element that wraps prefix, value and suffix
197
+ * `clear-button` | The clear button
198
+ * `error-message` | The error message element
199
+ * `helper-text` | The helper text element wrapper
200
+ * `required-indicator` | The `required` state indicator element
201
+ *
202
+ * The following state attributes are available for styling:
203
+ *
204
+ * Attribute | Description | Part name
205
+ * --------------------|-------------|------------
206
+ * `disabled` | Set to a disabled text field | :host
207
+ * `has-value` | Set when the element has a value | :host
208
+ * `has-label` | Set when the element has a label | :host
209
+ * `has-helper` | Set when the element has helper text or slot | :host
210
+ * `has-error-message` | Set when the element has an error message | :host
211
+ * `invalid` | Set when the element is invalid | :host
212
+ * `input-prevented` | Temporarily set when invalid input is prevented | :host
213
+ * `focused` | Set when the element is focused | :host
214
+ * `focus-ring` | Set when the element is keyboard focused | :host
215
+ * `readonly` | Set to a readonly text field | :host
216
+ *
217
+ * See [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.
218
+ *
219
+ * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.
220
+ * @fires {Event} change - Fired when the user commits a value change.
221
+ * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.
222
+ * @fires {CustomEvent} value-changed - Fired when the `value` property changes.
223
+ * @fires {CustomEvent} validated - Fired whenever the field is validated.
224
+ *
225
+ * @extends HTMLElement
226
+ * @mixes ElementMixin
227
+ * @mixes ThemableMixin
228
+ * @mixes PatternMixin
229
+ * @mixes InputFieldMixin
230
+ */
231
+ class TextField extends PatternMixin(InputFieldMixin(ThemableMixin(ElementMixin(PolymerElement)))) {
232
+ static get is() {
233
+ return 'vaadin-text-field';
234
+ }
235
+
236
+ static get template() {
237
+ return html`
238
+ <style>
239
+ [part='input-field'] {
240
+ flex-grow: 0;
241
+ }
242
+ </style>
243
+
244
+ <div class="vaadin-field-container">
245
+ <div part="label">
246
+ <slot name="label"></slot>
247
+ <span part="required-indicator" aria-hidden="true" on-click="focus"></span>
248
+ </div>
249
+
250
+ <vaadin-input-container
251
+ part="input-field"
252
+ readonly="[[readonly]]"
253
+ disabled="[[disabled]]"
254
+ invalid="[[invalid]]"
255
+ theme$="[[_theme]]"
256
+ >
257
+ <slot name="prefix" slot="prefix"></slot>
258
+ <slot name="input"></slot>
259
+ <slot name="suffix" slot="suffix"></slot>
260
+ <div id="clearButton" part="clear-button" slot="suffix" aria-hidden="true"></div>
261
+ </vaadin-input-container>
262
+
263
+ <div part="helper-text">
264
+ <slot name="helper"></slot>
265
+ </div>
266
+
267
+ <div part="error-message">
268
+ <slot name="error-message"></slot>
269
+ </div>
270
+ </div>
271
+ <slot name="tooltip"></slot>
272
+ `;
273
+ }
274
+
275
+ static get properties() {
276
+ return {
277
+ /**
278
+ * Maximum number of characters (in Unicode code points) that the user can enter.
279
+ */
280
+ maxlength: {
281
+ type: Number,
282
+ },
283
+
284
+ /**
285
+ * Minimum number of characters (in Unicode code points) that the user can enter.
286
+ */
287
+ minlength: {
288
+ type: Number,
289
+ },
290
+ };
291
+ }
292
+
293
+ static get delegateAttrs() {
294
+ return [...super.delegateAttrs, 'maxlength', 'minlength'];
295
+ }
296
+
297
+ static get constraints() {
298
+ return [...super.constraints, 'maxlength', 'minlength'];
299
+ }
300
+
301
+ constructor() {
302
+ super();
303
+ this._setType('text');
304
+ }
305
+
306
+ /** @protected */
307
+ get clearElement() {
308
+ return this.$.clearButton;
309
+ }
310
+
311
+ /** @protected */
312
+ ready() {
313
+ super.ready();
314
+
315
+ this.addController(
316
+ new InputController(this, (input) => {
317
+ this._setInputElement(input);
318
+ this._setFocusElement(input);
319
+ this.stateTarget = input;
320
+ this.ariaTarget = input;
321
+ }),
322
+ );
323
+ this.addController(new LabelledInputController(this.inputElement, this._labelController));
324
+
325
+ this._tooltipController = new TooltipController(this);
326
+ this._tooltipController.setPosition('top');
327
+ this.addController(this._tooltipController);
328
+ }
329
+ }
330
+
331
+ customElements.define(TextField.is, TextField);
332
+
333
+ /**
334
+ * @license
335
+ * Copyright (c) 2021 - 2022 Vaadin Ltd.
336
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
337
+ */
338
+
339
+ const passwordFieldButton = i`
340
+ :host {
341
+ position: absolute;
342
+ right: 0;
343
+ top: 0;
344
+ margin: 0;
345
+ padding: 0;
346
+ width: 100%;
347
+ height: 100%;
348
+ min-width: auto;
349
+ background: transparent;
350
+ outline: none;
351
+ }
352
+ `;
353
+
354
+ registerStyles('vaadin-password-field-button', [button, passwordFieldButton], {
355
+ moduleId: 'lumo-password-field-button',
356
+ });
357
+
358
+ /**
359
+ * @license
360
+ * Copyright (c) 2021 - 2022 Vaadin Ltd.
361
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
362
+ */
363
+
364
+ const passwordField = i`
365
+ [part='reveal-button']::before {
366
+ content: var(--lumo-icons-eye);
367
+ }
368
+
369
+ :host([password-visible]) [part='reveal-button']::before {
370
+ content: var(--lumo-icons-eye-disabled);
371
+ }
372
+
373
+ /* Make it easy to hide the button across the whole app */
374
+ [part='reveal-button'] {
375
+ position: relative;
376
+ display: var(--lumo-password-field-reveal-button-display, block);
377
+ }
378
+
379
+ [part='reveal-button'][hidden] {
380
+ display: none !important;
381
+ }
382
+ `;
383
+
384
+ registerStyles('vaadin-password-field', [inputFieldShared, passwordField], { moduleId: 'lumo-password-field' });
385
+
386
+ /**
387
+ * @license
388
+ * Copyright (c) 2021 - 2022 Vaadin Ltd.
389
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
390
+ */
391
+
392
+ /**
393
+ * An element used internally by `<vaadin-password-field>`. Not intended to be used separately.
394
+ *
395
+ * @extends Button
396
+ * @private
397
+ */
398
+ class PasswordFieldButton extends Button {
399
+ static get is() {
400
+ return 'vaadin-password-field-button';
401
+ }
402
+
403
+ static get template() {
404
+ return html`
405
+ <style>
406
+ :host {
407
+ display: block;
408
+ }
409
+
410
+ :host([hidden]) {
411
+ display: none !important;
412
+ }
413
+ </style>
414
+ <slot name="tooltip"></slot>
415
+ `;
416
+ }
417
+ }
418
+
419
+ customElements.define(PasswordFieldButton.is, PasswordFieldButton);
420
+
421
+ /**
422
+ * @license
423
+ * Copyright (c) 2021 - 2022 Vaadin Ltd.
424
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
425
+ */
426
+
427
+ const ownTemplate = html`
428
+ <div part="reveal-button" slot="suffix">
429
+ <slot name="reveal"></slot>
430
+ </div>
431
+ `;
432
+
433
+ let memoizedTemplate;
434
+
435
+ /**
436
+ * `<vaadin-password-field>` is an extension of `<vaadin-text-field>` component for entering passwords.
437
+ *
438
+ * ```html
439
+ * <vaadin-password-field label="Password"></vaadin-password-field>
440
+ * ```
441
+ *
442
+ * ### Styling
443
+ *
444
+ * `<vaadin-password-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.
445
+ * See [`<vaadin-text-field>`](#/elements/vaadin-text-field) for the styling documentation.
446
+ *
447
+ * In addition to `<vaadin-text-field>` parts, the following parts are available for theming:
448
+ *
449
+ * Part name | Description
450
+ * ----------------|----------------------------------------------------
451
+ * `reveal-button` | The eye icon which toggles the password visibility
452
+ *
453
+ * In addition to `<vaadin-text-field>` state attributes, the following state attributes are available for theming:
454
+ *
455
+ * Attribute | Description
456
+ * -------------------|---------------------------------
457
+ * `password-visible` | Set when the password is visible
458
+ *
459
+ * See [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.
460
+ *
461
+ * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.
462
+ * @fires {Event} change - Fired when the user commits a value change.
463
+ * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.
464
+ * @fires {CustomEvent} value-changed - Fired when the `value` property changes.
465
+ * @fires {CustomEvent} validated - Fired whenever the field is validated.
466
+ *
467
+ * @extends TextField
468
+ */
469
+ class PasswordField extends TextField {
470
+ static get is() {
471
+ return 'vaadin-password-field';
472
+ }
473
+
474
+ static get template() {
475
+ if (!memoizedTemplate) {
476
+ // Clone the superclass template
477
+ memoizedTemplate = super.template.cloneNode(true);
478
+
479
+ // Retrieve this element's dom-module template
480
+ const revealButton = ownTemplate.content.querySelector('[part="reveal-button"]');
481
+
482
+ // Append reveal-button and styles to the text-field template
483
+ const inputField = memoizedTemplate.content.querySelector('[part="input-field"]');
484
+ inputField.appendChild(revealButton);
485
+ }
486
+
487
+ return memoizedTemplate;
488
+ }
489
+
490
+ static get properties() {
491
+ return {
492
+ /**
493
+ * Set to true to hide the eye icon which toggles the password visibility.
494
+ * @attr {boolean} reveal-button-hidden
495
+ */
496
+ revealButtonHidden: {
497
+ type: Boolean,
498
+ observer: '_revealButtonHiddenChanged',
499
+ value: false,
500
+ },
501
+
502
+ /**
503
+ * True if the password is visible ([type=text]).
504
+ * @attr {boolean} password-visible
505
+ */
506
+ passwordVisible: {
507
+ type: Boolean,
508
+ value: false,
509
+ reflectToAttribute: true,
510
+ observer: '_passwordVisibleChanged',
511
+ readOnly: true,
512
+ },
513
+
514
+ /**
515
+ * An object with translated strings used for localization.
516
+ * It has the following structure and default values:
517
+ *
518
+ * ```
519
+ * {
520
+ * // Translation of the reveal icon button accessible label
521
+ * reveal: 'Show password'
522
+ * }
523
+ * ```
524
+ */
525
+ i18n: {
526
+ type: Object,
527
+ value: () => {
528
+ return {
529
+ reveal: 'Show password',
530
+ };
531
+ },
532
+ },
533
+ };
534
+ }
535
+
536
+ static get observers() {
537
+ return ['__i18nChanged(i18n.*)'];
538
+ }
539
+
540
+ /** @protected */
541
+ get slotStyles() {
542
+ const tag = this.localName;
543
+ return [
544
+ ...super.slotStyles,
545
+ `
546
+ ${tag} [slot="input"]::-ms-reveal {
547
+ display: none;
548
+ }
549
+ `,
550
+ ];
551
+ }
552
+
553
+ /** @protected */
554
+ get _revealNode() {
555
+ return this._revealButtonController && this._revealButtonController.node;
556
+ }
557
+
558
+ constructor() {
559
+ super();
560
+ this._setType('password');
561
+ this.__boundRevealButtonClick = this._onRevealButtonClick.bind(this);
562
+ this.__boundRevealButtonTouchend = this._onRevealButtonTouchend.bind(this);
563
+ }
564
+
565
+ /** @protected */
566
+ ready() {
567
+ super.ready();
568
+
569
+ this._revealPart = this.shadowRoot.querySelector('[part="reveal-button"]');
570
+
571
+ this._revealButtonController = new SlotController(
572
+ this,
573
+ 'reveal',
574
+ () => document.createElement('vaadin-password-field-button'),
575
+ (host, btn) => {
576
+ btn.disabled = host.disabled;
577
+
578
+ btn.addEventListener('click', host.__boundRevealButtonClick);
579
+ btn.addEventListener('touchend', host.__boundRevealButtonTouchend);
580
+ },
581
+ );
582
+ this.addController(this._revealButtonController);
583
+
584
+ this.__updateAriaLabel(this.i18n);
585
+
586
+ this._updateToggleState(false);
587
+ this._toggleRevealHidden(this.revealButtonHidden);
588
+
589
+ if (this.inputElement) {
590
+ this.inputElement.autocapitalize = 'off';
591
+ }
592
+ }
593
+
594
+ /**
595
+ * Override method inherited from `FocusMixin` to mark field as focused
596
+ * when focus moves to the reveal button using Shift Tab.
597
+ * @param {Event} event
598
+ * @return {boolean}
599
+ * @protected
600
+ */
601
+ _shouldSetFocus(event) {
602
+ return event.target === this.inputElement || event.target === this._revealNode;
603
+ }
604
+
605
+ /**
606
+ * Override method inherited from `FocusMixin` to not hide password
607
+ * when focus moves to the reveal button or back to the input.
608
+ * @param {Event} event
609
+ * @return {boolean}
610
+ * @protected
611
+ */
612
+ _shouldRemoveFocus(event) {
613
+ return !(
614
+ event.relatedTarget === this._revealNode ||
615
+ (event.relatedTarget === this.inputElement && event.target === this._revealNode)
616
+ );
617
+ }
618
+
619
+ /**
620
+ * Override method inherited from `FocusMixin` to toggle password visibility.
621
+ * @param {boolean} focused
622
+ * @protected
623
+ * @override
624
+ */
625
+ _setFocused(focused) {
626
+ super._setFocused(focused);
627
+
628
+ if (!focused) {
629
+ this._setPasswordVisible(false);
630
+ } else {
631
+ const isButtonFocused = this.getRootNode().activeElement === this._revealNode;
632
+ // Remove focus-ring from the field when the reveal button gets focused
633
+ this.toggleAttribute('focus-ring', this._keyboardActive && !isButtonFocused);
634
+ }
635
+ }
636
+
637
+ /** @private */
638
+ __updateAriaLabel(i18n) {
639
+ if (i18n.reveal && this._revealNode) {
640
+ this._revealNode.setAttribute('aria-label', i18n.reveal);
641
+ }
642
+ }
643
+
644
+ /** @private */
645
+ __i18nChanged(i18n) {
646
+ this.__updateAriaLabel(i18n.base);
647
+ }
648
+
649
+ /** @private */
650
+ _revealButtonHiddenChanged(hidden) {
651
+ this._toggleRevealHidden(hidden);
652
+ }
653
+
654
+ /** @private */
655
+ _togglePasswordVisibility() {
656
+ this._setPasswordVisible(!this.passwordVisible);
657
+ }
658
+
659
+ /** @private */
660
+ _onRevealButtonClick() {
661
+ this._togglePasswordVisibility();
662
+ }
663
+
664
+ /** @private */
665
+ _onRevealButtonTouchend(e) {
666
+ // Cancel the following click event
667
+ e.preventDefault();
668
+ this._togglePasswordVisibility();
669
+ // Focus the input to avoid problem with password still visible
670
+ // when user clicks the reveal button and then clicks outside.
671
+ this.inputElement.focus();
672
+ }
673
+
674
+ /** @private */
675
+ _toggleRevealHidden(hidden) {
676
+ if (this._revealNode) {
677
+ if (hidden) {
678
+ this._revealPart.setAttribute('hidden', '');
679
+ this._revealNode.setAttribute('tabindex', '-1');
680
+ this._revealNode.setAttribute('aria-hidden', 'true');
681
+ } else {
682
+ this._revealPart.removeAttribute('hidden');
683
+ this._revealNode.setAttribute('tabindex', '0');
684
+ this._revealNode.removeAttribute('aria-hidden');
685
+ }
686
+ }
687
+ }
688
+
689
+ /** @private */
690
+ _updateToggleState(passwordVisible) {
691
+ if (this._revealNode) {
692
+ this._revealNode.setAttribute('aria-pressed', passwordVisible ? 'true' : 'false');
693
+ }
694
+ }
695
+
696
+ /** @private */
697
+ _passwordVisibleChanged(passwordVisible) {
698
+ this._setType(passwordVisible ? 'text' : 'password');
699
+
700
+ this._updateToggleState(passwordVisible);
701
+ }
702
+
703
+ /**
704
+ * Override method inherited from `DisabledMixin` to synchronize the reveal button
705
+ * disabled state with the password field disabled state.
706
+ * @param {boolean} disabled
707
+ * @param {boolean} oldDisabled
708
+ * @protected
709
+ */
710
+ _disabledChanged(disabled, oldDisabled) {
711
+ super._disabledChanged(disabled, oldDisabled);
712
+
713
+ if (this._revealNode) {
714
+ this._revealNode.disabled = disabled;
715
+ }
716
+ }
717
+ }
718
+
719
+ customElements.define(PasswordField.is, PasswordField);
4
720
 
5
721
  const passwordInputCss = "*,*::before,*::after{padding:0;margin:0;box-sizing:border-box}.password{font-family:\"Roboto\";font-style:normal}.password__wrapper{position:relative;width:100%;padding-top:26px}.password__label{font-family:inherit;font-style:normal;font-weight:500;font-size:16px;line-height:20px;color:#1F1F1F;position:absolute;top:0;left:0}.password__label--required::after{content:\"*\";font-family:inherit;color:#1F1F1F;margin-left:2px}.password__input{width:inherit;border:none}.password__input[focused]::part(input-field){border-color:#3E3E3E}.password__input[invalid]::part(input-field){border-color:#cc0000b3}.password__input::part(input-field){border-radius:4px;background-color:transparent;font-family:inherit;font-style:normal;font-weight:300;font-size:16px;line-height:19px;color:#2A2E3F;width:100%;position:relative;border:2px solid #DEE1EE}.password__error-message{position:absolute;top:calc(100% + 5px);left:0;color:#cc0000b3}";
6
722