@italia/input 0.1.0-alpha.0 → 1.0.0-alpha.10

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,8 +1,9 @@
1
1
  import { directive, Directive } from 'lit/directive.js';
2
2
  import { LitElement, css, html, nothing } from 'lit';
3
- import { property, query, state, customElement } from 'lit/decorators.js';
3
+ import { state, query, property, queryAssignedElements, customElement } from 'lit/decorators.js';
4
4
  import { ifDefined } from 'lit/directives/if-defined.js';
5
5
  import { when } from 'lit/directives/when.js';
6
+ import { live } from 'lit/directives/live.js';
6
7
 
7
8
  /******************************************************************************
8
9
  Copyright (c) Microsoft Corporation.
@@ -37,209 +38,6 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
37
38
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
38
39
  };
39
40
 
40
- /**
41
- * @license
42
- *
43
- * Copyright IBM Corp. 2020, 2022
44
- *
45
- * This source code is licensed under the Apache-2.0 license found in the
46
- * LICENSE file in the root directory of this source tree.
47
- */
48
- /**
49
- * @param Base The base class.
50
- * @returns A mix-in to handle `formdata` event on the containing form.
51
- */
52
- const FormMixin = (Base) => {
53
- /**
54
- * A mix-in class to handle `formdata` event on the containing form.
55
- */
56
- class FormMixinImpl extends Base {
57
- connectedCallback() {
58
- // @ts-ignore
59
- super.connectedCallback();
60
- if (this.closest('form')) {
61
- this.closest('form')?.addEventListener('formdata', this._handleFormdata.bind(this));
62
- }
63
- }
64
- disconnectedCallback() {
65
- // if (this._hFormdata) {
66
- // this._hFormdata = this._hFormdata.release();
67
- // }
68
- // @ts-ignore
69
- super.disconnectedCallback();
70
- }
71
- }
72
- return FormMixinImpl;
73
- };
74
-
75
- /**
76
- * @license
77
- *
78
- * Copyright IBM Corp. 2020, 2022
79
- *
80
- * This source code is licensed under the Apache-2.0 license found in the
81
- * LICENSE file in the root directory of this source tree.
82
- */
83
- /**
84
- * Form validation status.
85
- */
86
- var VALIDATION_STATUS;
87
- (function (VALIDATION_STATUS) {
88
- /**
89
- * One indicating no validation error.
90
- */
91
- VALIDATION_STATUS["NO_ERROR"] = "";
92
- /**
93
- * One indicating that the value is invalid (generic).
94
- */
95
- VALIDATION_STATUS["INVALID"] = "invalid";
96
- /**
97
- * One indicating missing required value.
98
- */
99
- VALIDATION_STATUS["ERROR_REQUIRED"] = "required";
100
- /**
101
- * One indicating that the value does not match the pattern.
102
- */
103
- VALIDATION_STATUS["PATTERN"] = "pattern";
104
- /**
105
- * One indicating that the value is shorter than the minimum length.
106
- */
107
- VALIDATION_STATUS["MINLENGTH"] = "minlength";
108
- /**
109
- * One indicating that the value is less than the maximum length.
110
- */
111
- VALIDATION_STATUS["MAXLENGTH"] = "maxlength";
112
- })(VALIDATION_STATUS || (VALIDATION_STATUS = {}));
113
- /**
114
- * @param Base The base class.
115
- * @returns A mix-in implementing `.setCustomValidity()` method.
116
- */
117
- const ValidityMixin = (Base) => {
118
- class ValidityMixinImpl extends Base {
119
- constructor() {
120
- super(...arguments);
121
- /**
122
- * Field is touched
123
- */
124
- this._touched = false;
125
- }
126
- // Not using TypeScript `protected` due to: microsoft/TypeScript#17744
127
- // Using `string` instead of `VALIDATION_STATUS` until we can require TypeScript 3.8
128
- /**
129
- * @param state The form validation status.
130
- * @returns The form validation error mesasages associated with the given status.
131
- * @protected
132
- */
133
- _getValidityMessage(state, translations) {
134
- return {
135
- [VALIDATION_STATUS.NO_ERROR]: '',
136
- [VALIDATION_STATUS.INVALID]: translations[VALIDATION_STATUS.INVALID],
137
- [VALIDATION_STATUS.ERROR_REQUIRED]: translations[VALIDATION_STATUS.ERROR_REQUIRED],
138
- [VALIDATION_STATUS.PATTERN]: translations[VALIDATION_STATUS.PATTERN],
139
- [VALIDATION_STATUS.MINLENGTH]: translations[VALIDATION_STATUS.MINLENGTH].replace('{minlength}', this.minlength.toString()),
140
- [VALIDATION_STATUS.MAXLENGTH]: translations[VALIDATION_STATUS.MAXLENGTH].replace('{maxlength}', this.maxlength.toString()),
141
- }[state];
142
- }
143
- /**
144
- * Checks if the value meets the constraints.
145
- *
146
- * @returns `true` if the value meets the constraints. `false` otherwise.
147
- */
148
- _checkValidity(translations, htmlValidity = true) {
149
- // htmlValidity = this.inputElement.checkValidity(); //check browser validity
150
- if (this.customValidation) {
151
- return undefined;
152
- }
153
- let validity = htmlValidity;
154
- let message = validity
155
- ? this._getValidityMessage(VALIDATION_STATUS.NO_ERROR, translations)
156
- : this._getValidityMessage(VALIDATION_STATUS.INVALID, translations);
157
- if (this.required || (this._value && (this.pattern || this.minlength > 0 || this.maxlength > 0))) {
158
- if (this.pattern) {
159
- const regex = new RegExp(`^${this.pattern}$`, 'u');
160
- validity = regex.test(this._value.toString());
161
- if (!validity) {
162
- message = this._getValidityMessage(VALIDATION_STATUS.PATTERN, translations);
163
- }
164
- }
165
- if (typeof this.minlength !== 'undefined' && this.minlength > 0) {
166
- validity = validity && this._value.toString().length >= this.minlength;
167
- if (!validity) {
168
- message = this._getValidityMessage(VALIDATION_STATUS.MINLENGTH, translations);
169
- }
170
- }
171
- if (typeof this.maxlength !== 'undefined' && this.maxlength > 0) {
172
- validity = validity && this._value.toString().length <= this.maxlength;
173
- if (!validity) {
174
- message = this._getValidityMessage(VALIDATION_STATUS.MAXLENGTH, translations);
175
- }
176
- }
177
- if (this.required && !this._value) {
178
- validity = false;
179
- message = this._getValidityMessage(VALIDATION_STATUS.ERROR_REQUIRED, translations);
180
- }
181
- }
182
- this.invalid = !validity;
183
- this.validityMessage = message;
184
- return validity;
185
- }
186
- /**
187
- * Sets the given custom validity message.
188
- *
189
- * @param validityMessage The custom validity message
190
- */
191
- setCustomValidity(validityMessage) {
192
- this.invalid = Boolean(validityMessage);
193
- this.validityMessage = validityMessage;
194
- }
195
- _handleBlur() {
196
- this._touched = true;
197
- this.dispatchEvent(new FocusEvent('blur', { bubbles: true, composed: true }));
198
- }
199
- _handleFocus() {
200
- this.dispatchEvent(new FocusEvent('focus', { bubbles: true, composed: true }));
201
- }
202
- _handleClick() {
203
- this.dispatchEvent(new MouseEvent('click', { bubbles: true, composed: true }));
204
- }
205
- _handleChange(e) {
206
- const target = e.target;
207
- let value;
208
- if (target instanceof HTMLInputElement) {
209
- switch (target.type) {
210
- case 'checkbox':
211
- case 'radio':
212
- value = target.checked;
213
- break;
214
- case 'file':
215
- value = target.files; // FileList
216
- break;
217
- default:
218
- value = target.value;
219
- }
220
- }
221
- else if (target instanceof HTMLSelectElement) {
222
- if (target.multiple) {
223
- value = Array.from(target.selectedOptions).map((o) => o.value);
224
- }
225
- else {
226
- value = target.value;
227
- }
228
- }
229
- else {
230
- // textarea o altri input con value
231
- value = target.value;
232
- }
233
- this.dispatchEvent(new CustomEvent('change', {
234
- detail: { value, el: target },
235
- bubbles: true,
236
- composed: true,
237
- }));
238
- }
239
- }
240
- return ValidityMixinImpl;
241
- };
242
-
243
41
  class SetAttributesDirective extends Directive {
244
42
  update(part, [attributes]) {
245
43
  const el = part.element;
@@ -262,6 +60,8 @@ class SetAttributesDirective extends Directive {
262
60
  */
263
61
  const setAttributes = directive(SetAttributesDirective);
264
62
 
63
+ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
64
+
265
65
  const connectedElements = new Set();
266
66
  if (window && !window.translations) {
267
67
  window.translations = new Map();
@@ -316,7 +116,9 @@ function registerTranslation(...translation) {
316
116
  });
317
117
  update();
318
118
  }
319
- window.registerTranslation = registerTranslation;
119
+ if (typeof window !== 'undefined') {
120
+ window.registerTranslation = registerTranslation;
121
+ }
320
122
  /**
321
123
  * Localize Reactive Controller for components built with Lit
322
124
  *
@@ -471,10 +273,11 @@ const LocalizeMixin = (Base) => class extends Base {
471
273
  constructor() {
472
274
  super(...arguments);
473
275
  this.localize = new LocalizeController(this);
474
- // Provide default values to avoid definite assignment errors and avoid decorators
475
- this.dir = '';
476
- this.lang = '';
477
276
  }
277
+ // Provide default values to avoid definite assignment errors and avoid decorators
278
+ // commentati perchè danno problemi su React.js. Sono attributi nativi, e assegnare un valore di default a react da fastidio
279
+ // dir: string = '';
280
+ // lang: string = '';
478
281
  /**
479
282
  * Restituisce tutta l'utility di traduzione
480
283
  *
@@ -567,9 +370,21 @@ class Logger {
567
370
  class BaseComponent extends LitElement {
568
371
  constructor() {
569
372
  super();
570
- this._ariaAttributes = {}; // tutti gli attributi aria-* passati al Web component
373
+ this.composeClass = clsx;
571
374
  this.logger = new Logger(this.tagName.toLowerCase());
572
375
  }
376
+ get _ariaAttributes() {
377
+ const attributes = {};
378
+ for (const attr of this.getAttributeNames()) {
379
+ if (attr === 'it-role') {
380
+ attributes.role = this.getAttribute(attr);
381
+ }
382
+ else if (attr.startsWith('it-aria-')) {
383
+ attributes[attr.replace(/^it-/, '')] = this.getAttribute(attr);
384
+ }
385
+ }
386
+ return attributes;
387
+ }
573
388
  // eslint-disable-next-line class-methods-use-this
574
389
  generateId(prefix) {
575
390
  return `${prefix}-${Math.random().toString(36).slice(2)}`;
@@ -579,25 +394,22 @@ class BaseComponent extends LitElement {
579
394
  // new TrackFocus(element); // per il momento è stato disattivato perchè ci sono le pseudo classi ::focus-visible per fare quello che fa TrackFocus. Si possono aggiungere regole css in bsi-italia 3 dato che stiamo facendo una breaking release di bsi.
580
395
  }
581
396
  // eslint-disable-next-line class-methods-use-this
582
- composeClass(...classes) {
583
- let composedClass = '';
584
- classes
585
- .filter((c) => c.length > 0)
586
- .forEach((newClass) => {
587
- composedClass += ` ${newClass}`;
588
- });
589
- return composedClass.trim();
590
- }
591
- getAriaAttributes() {
592
- for (const attr of this.getAttributeNames()) {
593
- if (attr.startsWith('aria-')) {
594
- this._ariaAttributes[attr] = this.getAttribute(attr);
595
- }
397
+ getActiveElement() {
398
+ let active = document.activeElement;
399
+ while (active && active.shadowRoot && active.shadowRoot.activeElement) {
400
+ active = active.shadowRoot.activeElement;
596
401
  }
402
+ return active;
403
+ }
404
+ get focusElement() {
405
+ return this;
406
+ }
407
+ // eslint-disable-next-line class-methods-use-this
408
+ get prefersReducedMotion() {
409
+ return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
597
410
  }
598
411
  connectedCallback() {
599
- super.connectedCallback?.();
600
- this.getAriaAttributes();
412
+ super.connectedCallback();
601
413
  // generate internal _id
602
414
  const prefix = this.id?.length > 0 ? this.id : this.tagName.toLowerCase();
603
415
  this._id = this.generateId(prefix);
@@ -605,6 +417,686 @@ class BaseComponent extends LitElement {
605
417
  }
606
418
  const BaseLocalizedComponent = LocalizeMixin(BaseComponent);
607
419
 
420
+ //
421
+ // We store a WeakMap of forms + controls so we can keep references to all FormControl within a given form. As
422
+ // elements connect and disconnect to/from the DOM, their containing form is used as the key and the form control is
423
+ // added and removed from the form's set, respectively.
424
+ //
425
+ const formCollections = new WeakMap();
426
+ //
427
+ // We store a WeakMap of reportValidity() overloads so we can override it when form controls connect to the DOM and
428
+ // restore the original behavior when they disconnect.
429
+ //
430
+ const reportValidityOverloads = new WeakMap();
431
+ const checkValidityOverloads = new WeakMap();
432
+ //
433
+ // We store a Set of controls that users have interacted with. This allows us to determine the interaction state
434
+ // without littering the DOM with additional data attributes.
435
+ //
436
+ const userInteractedControls = new WeakSet();
437
+ //
438
+ // We store a WeakMap of interactions for each form control so we can track when all conditions are met for validation.
439
+ //
440
+ const interactions = new WeakMap();
441
+ /** A reactive controller to allow form controls to participate in form submission, validation, etc. */
442
+ class FormControlController {
443
+ constructor(host, options) {
444
+ this.submittedOnce = false;
445
+ this.handleFormData = (event) => {
446
+ // console.log('handleFormData');
447
+ const disabled = this.options.disabled(this.host);
448
+ const name = this.options.name(this.host);
449
+ const value = this.options.value(this.host);
450
+ const tagName = this.host.tagName.toLowerCase();
451
+ // For buttons, we only submit the value if they were the submitter. This is currently done in doAction() by
452
+ // injecting the name/value on a temporary button, so we can just skip them here.
453
+ const isButton = tagName === 'it-button';
454
+ if (this.host.isConnected &&
455
+ !disabled &&
456
+ !isButton &&
457
+ typeof name === 'string' &&
458
+ name.length > 0 &&
459
+ typeof value !== 'undefined') {
460
+ switch (tagName) {
461
+ case 'it-radio':
462
+ if (this.host.checked) {
463
+ event.formData.append(name, value);
464
+ }
465
+ break;
466
+ case 'it-checkbox':
467
+ case 'it-toggle':
468
+ if (this.host.checked) {
469
+ if (event.formData.getAll(name).indexOf(value) < 0) {
470
+ // handle group checkbox
471
+ event.formData.append(name, value);
472
+ }
473
+ }
474
+ break;
475
+ case 'it-checkbox-group':
476
+ case 'it-toggle-group':
477
+ // non settare valori in formData, perchè ogni singola checkbox setta il suo valore
478
+ break;
479
+ case 'it-upload':
480
+ // value is File[] — append each File object directly (not as string)
481
+ if (Array.isArray(value)) {
482
+ value.forEach((file) => {
483
+ event.formData.append(name, file);
484
+ });
485
+ }
486
+ break;
487
+ default:
488
+ if (Array.isArray(value)) {
489
+ value.forEach((val) => {
490
+ event.formData.append(name, val.toString());
491
+ });
492
+ }
493
+ else {
494
+ event.formData.append(name, value.toString());
495
+ }
496
+ }
497
+ }
498
+ };
499
+ this.handleFormSubmit = (event) => {
500
+ const disabled = this.options.disabled(this.host);
501
+ const reportValidity = this.options.reportValidity;
502
+ // Update the interacted state for all controls when the form is submitted
503
+ if (this.form && !this.form.noValidate) {
504
+ formCollections.get(this.form)?.forEach((control) => {
505
+ this.setUserInteracted(control, true);
506
+ });
507
+ }
508
+ const resReportValidity = reportValidity(this.host);
509
+ if (this.form && !this.form.noValidate && !disabled && !resReportValidity) {
510
+ event.preventDefault();
511
+ // event.stopImmediatePropagation(); // se lo attiviamo, valida un campo alla volta
512
+ // Scroll al primo controllo non valido
513
+ const formControls = formCollections.get(this.form);
514
+ if (formControls) {
515
+ for (const control of formControls) {
516
+ if (!control.validity?.valid) {
517
+ // Scroll smooth verso il controllo non valido
518
+ control.scrollIntoView({
519
+ behavior: 'smooth',
520
+ block: 'center',
521
+ });
522
+ break;
523
+ }
524
+ }
525
+ }
526
+ }
527
+ this.submittedOnce = true;
528
+ };
529
+ this.handleFormReset = () => {
530
+ this.options.setValue(this.host, '');
531
+ this.submittedOnce = false;
532
+ this.setUserInteracted(this.host, false);
533
+ interactions.set(this.host, []);
534
+ };
535
+ this.handleInteraction = (event) => {
536
+ const emittedEvents = interactions.get(this.host);
537
+ if (!emittedEvents.includes(event.type)) {
538
+ emittedEvents.push(event.type);
539
+ }
540
+ // Mark it as user-interacted as soon as all associated events have been emitted
541
+ if (emittedEvents.length === this.options.assumeInteractionOn.length) {
542
+ this.setUserInteracted(this.host, true);
543
+ }
544
+ };
545
+ this.checkFormValidity = () => {
546
+ // console.log('checkFormValidity');
547
+ //
548
+ // This is very similar to the `reportFormValidity` function, but it does not trigger native constraint validation
549
+ // Allow the user to simply check if the form is valid and handling validity in their own way.
550
+ //
551
+ // We preserve the original method in a WeakMap, but we don't call it from the overload because that would trigger
552
+ // validations in an unexpected order. When the element disconnects, we revert to the original behavior. This won't
553
+ // be necessary once we can use ElementInternals.
554
+ //
555
+ // Note that we're also honoring the form's novalidate attribute.
556
+ //
557
+ if (this.form && !this.form.noValidate) {
558
+ // This seems sloppy, but checking all elements will cover native inputs, Shoelace inputs, and other custom
559
+ // elements that support the constraint validation API.
560
+ const elements = this.form.querySelectorAll('*');
561
+ for (const element of elements) {
562
+ if (typeof element.checkValidity === 'function') {
563
+ if (!element.checkValidity()) {
564
+ return false;
565
+ }
566
+ }
567
+ }
568
+ }
569
+ return true;
570
+ };
571
+ this.reportFormValidity = () => {
572
+ // console.log('reportFormValidity');
573
+ //
574
+ // FormControl work hard to act like regular form controls. They support the Constraint Validation API
575
+ // and its associated methods such as setCustomValidity() and reportValidity(). However, the HTMLFormElement also
576
+ // has a reportValidity() method that will trigger validation on all child controls. Since we're not yet using
577
+ // ElementInternals, we need to overload this method so it looks for any element with the reportValidity() method.
578
+ //
579
+ // We preserve the original method in a WeakMap, but we don't call it from the overload because that would trigger
580
+ // validations in an unexpected order. When the element disconnects, we revert to the original behavior. This won't
581
+ // be necessary once we can use ElementInternals.
582
+ //
583
+ // Note that we're also honoring the form's novalidate attribute.
584
+ //
585
+ if (this.form && !this.form.noValidate) {
586
+ // This seems sloppy, but checking all elements will cover native inputs, Shoelace inputs, and other custom
587
+ // elements that support the constraint validation API.
588
+ const elements = this.form.querySelectorAll('*');
589
+ for (const element of elements) {
590
+ if (typeof element.reportValidity === 'function') {
591
+ if (!element.reportValidity()) {
592
+ return false;
593
+ }
594
+ }
595
+ }
596
+ }
597
+ return true;
598
+ };
599
+ (this.host = host).addController(this);
600
+ this.options = {
601
+ form: (input) => {
602
+ // If there's a form attribute, use it to find the target form by id
603
+ // Controls may not always reflect the 'form' property. For example, `<it-button>` doesn't reflect.
604
+ const formId = input.form;
605
+ if (formId) {
606
+ const root = input.getRootNode();
607
+ const form = root.querySelector(`#${formId}`);
608
+ if (form) {
609
+ return form;
610
+ }
611
+ }
612
+ return input.closest('form');
613
+ },
614
+ name: (input) => input.name,
615
+ value: (input) => input.value,
616
+ disabled: (input) => input.disabled ?? false,
617
+ reportValidity: (input) => typeof input.reportValidity === 'function' ? input.reportValidity() : true,
618
+ checkValidity: (input) => (typeof input.checkValidity === 'function' ? input.checkValidity() : true),
619
+ setValue: (input, value) => {
620
+ // eslint-disable-next-line no-param-reassign
621
+ input.value = value;
622
+ },
623
+ assumeInteractionOn: ['it-input'],
624
+ ...options,
625
+ };
626
+ }
627
+ hostConnected() {
628
+ const form = this.options.form(this.host);
629
+ if (form) {
630
+ this.attachForm(form);
631
+ }
632
+ // Listen for interactions
633
+ interactions.set(this.host, []);
634
+ this.options.assumeInteractionOn.forEach((event) => {
635
+ this.host.addEventListener(event, this.handleInteraction);
636
+ });
637
+ }
638
+ hostDisconnected() {
639
+ this.detachForm();
640
+ // Clean up interactions
641
+ interactions.delete(this.host);
642
+ this.options.assumeInteractionOn.forEach((event) => {
643
+ this.host.removeEventListener(event, this.handleInteraction);
644
+ });
645
+ }
646
+ hostUpdated() {
647
+ const form = this.options.form(this.host);
648
+ // Detach if the form no longer exists
649
+ if (!form) {
650
+ this.detachForm();
651
+ }
652
+ // If the form has changed, reattach it
653
+ if (form && this.form !== form) {
654
+ this.detachForm();
655
+ this.attachForm(form);
656
+ }
657
+ if (this.host.hasUpdated) {
658
+ this.setValidity(this.host.validity.valid);
659
+ }
660
+ }
661
+ attachForm(form) {
662
+ if (form) {
663
+ this.form = form;
664
+ // Add this element to the form's collection
665
+ if (formCollections.has(this.form)) {
666
+ formCollections.get(this.form).add(this.host);
667
+ }
668
+ else {
669
+ formCollections.set(this.form, new Set([this.host]));
670
+ }
671
+ this.form.addEventListener('formdata', this.handleFormData);
672
+ this.form.addEventListener('submit', this.handleFormSubmit);
673
+ this.form.addEventListener('reset', this.handleFormReset);
674
+ // Overload the form's reportValidity() method so it looks at FormControl
675
+ if (!reportValidityOverloads.has(this.form)) {
676
+ reportValidityOverloads.set(this.form, this.form.reportValidity);
677
+ this.form.reportValidity = () => this.reportFormValidity();
678
+ }
679
+ // Overload the form's checkValidity() method so it looks at FormControl
680
+ if (!checkValidityOverloads.has(this.form)) {
681
+ checkValidityOverloads.set(this.form, this.form.checkValidity);
682
+ this.form.checkValidity = () => this.checkFormValidity();
683
+ }
684
+ }
685
+ else {
686
+ this.form = undefined;
687
+ }
688
+ }
689
+ detachForm() {
690
+ if (!this.form)
691
+ return;
692
+ const formCollection = formCollections.get(this.form);
693
+ if (!formCollection) {
694
+ return;
695
+ }
696
+ this.submittedOnce = false;
697
+ // Remove this host from the form's collection
698
+ formCollection.delete(this.host);
699
+ // Check to make sure there's no other form controls in the collection. If we do this
700
+ // without checking if any other controls are still in the collection, then we will wipe out the
701
+ // validity checks for all other elements.
702
+ // see: https://github.com/shoelace-style/shoelace/issues/1703
703
+ if (formCollection.size <= 0) {
704
+ this.form.removeEventListener('formdata', this.handleFormData);
705
+ this.form.removeEventListener('submit', this.handleFormSubmit);
706
+ this.form.removeEventListener('reset', this.handleFormReset);
707
+ // Remove the overload and restore the original method
708
+ if (reportValidityOverloads.has(this.form)) {
709
+ this.form.reportValidity = reportValidityOverloads.get(this.form);
710
+ reportValidityOverloads.delete(this.form);
711
+ }
712
+ if (checkValidityOverloads.has(this.form)) {
713
+ this.form.checkValidity = checkValidityOverloads.get(this.form);
714
+ checkValidityOverloads.delete(this.form);
715
+ }
716
+ // So it looks weird here to not always set the form to undefined. But I _think_ if we unattach this.form here,
717
+ // we end up in this fun spot where future validity checks don't have a reference to the form validity handler.
718
+ // First form element in sets the validity handler. So we can't clean up `this.form` until there are no other form elements in the form.
719
+ this.form = undefined;
720
+ }
721
+ }
722
+ // eslint-disable-next-line class-methods-use-this
723
+ setUserInteracted(el, hasInteracted) {
724
+ if (hasInteracted) {
725
+ userInteractedControls.add(el);
726
+ }
727
+ else {
728
+ userInteractedControls.delete(el);
729
+ }
730
+ el.requestUpdate();
731
+ }
732
+ doAction(type, submitter) {
733
+ // console.log('doaction', type);
734
+ if (this.form) {
735
+ const button = document.createElement('button');
736
+ button.type = type;
737
+ button.style.position = 'absolute';
738
+ button.style.width = '0';
739
+ button.style.height = '0';
740
+ button.style.clipPath = 'inset(50%)';
741
+ button.style.overflow = 'hidden';
742
+ button.style.whiteSpace = 'nowrap';
743
+ // Pass name, value, and form attributes through to the temporary button
744
+ if (submitter) {
745
+ button.name = submitter.name;
746
+ button.value = submitter.value;
747
+ ['formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget'].forEach((attr) => {
748
+ if (submitter.hasAttribute(attr)) {
749
+ button.setAttribute(attr, submitter.getAttribute(attr));
750
+ }
751
+ });
752
+ }
753
+ this.form.append(button);
754
+ button.click();
755
+ button.remove();
756
+ }
757
+ }
758
+ /** Returns the associated `<form>` element, if one exists. */
759
+ getForm() {
760
+ return this.form ?? null;
761
+ }
762
+ /** Resets the form, restoring all the control to their default value */
763
+ reset(submitter) {
764
+ this.doAction('reset', submitter);
765
+ }
766
+ /** Submits the form, triggering validation and form data injection. */
767
+ submit(submitter) {
768
+ // Calling form.submit() bypasses the submit event and constraint validation. To prevent this, we can inject a
769
+ // native submit button into the form, "click" it, then remove it to simulate a standard form submission.
770
+ this.doAction('submit', submitter);
771
+ }
772
+ /**
773
+ * Synchronously sets the form control's validity. Call this when you know the future validity but need to update
774
+ * the host element immediately, i.e. before Lit updates the component in the next update.
775
+ */
776
+ setValidity(isValid) {
777
+ const host = this.host;
778
+ const hasInteracted = Boolean(userInteractedControls.has(host));
779
+ const required = Boolean(host.required);
780
+ //
781
+ // We're mapping the following "states" to data attributes. In the future, we can use ElementInternals.states to
782
+ // create a similar mapping, but instead of [data-invalid] it will look like :--invalid.
783
+ //
784
+ // See this RFC for more details: https://github.com/shoelace-style/shoelace/issues/1011
785
+ //
786
+ host.toggleAttribute('data-required', required);
787
+ host.toggleAttribute('data-optional', !required);
788
+ host.toggleAttribute('data-invalid', !isValid);
789
+ host.toggleAttribute('data-valid', isValid);
790
+ host.toggleAttribute('data-user-invalid', !isValid && hasInteracted);
791
+ host.toggleAttribute('data-user-valid', isValid && hasInteracted);
792
+ }
793
+ userInteracted() {
794
+ const hasInteracted = Boolean(userInteractedControls.has(this.host));
795
+ return hasInteracted;
796
+ }
797
+ /**
798
+ * Updates the form control's validity based on the current value of `host.validity.valid`. Call this when anything
799
+ * that affects constraint validation changes so the component receives the correct validity states.
800
+ */
801
+ updateValidity() {
802
+ const host = this.host;
803
+ this.setValidity(host.validity.valid);
804
+ }
805
+ /**
806
+ * Dispatches a non-bubbling, cancelable custom event of type `it-invalid`.
807
+ * If the `it-invalid` event will be cancelled then the original `invalid`
808
+ * event (which may have been passed as argument) will also be cancelled.
809
+ * If no original `invalid` event has been passed then the `it-invalid`
810
+ * event will be cancelled before being dispatched.
811
+ */
812
+ emitInvalidEvent(originalInvalidEvent) {
813
+ const itInvalidEvent = new CustomEvent('it-invalid', {
814
+ bubbles: false,
815
+ composed: false,
816
+ cancelable: true,
817
+ detail: {},
818
+ });
819
+ if (!originalInvalidEvent) {
820
+ itInvalidEvent.preventDefault();
821
+ }
822
+ if (!this.host.dispatchEvent(itInvalidEvent)) {
823
+ originalInvalidEvent?.preventDefault();
824
+ }
825
+ }
826
+ }
827
+
828
+ const translation$1 = {
829
+ $code: 'it',
830
+ $name: 'Italiano',
831
+ $dir: 'ltr',
832
+ validityRequired: 'Questo campo è obbligatorio.',
833
+ validityGroupRequired: "Scegli almeno un'opzione",
834
+ validityPattern: 'Il valore non corrisponde al formato richiesto.',
835
+ validityMinlength: 'Il valore deve essere lungo almeno {minlength} caratteri.',
836
+ validityMaxlength: 'Il valore deve essere lungo al massimo {maxlength} caratteri.',
837
+ };
838
+
839
+ registerTranslation(translation$1);
840
+ class FormControl extends BaseLocalizedComponent {
841
+ constructor() {
842
+ super(...arguments);
843
+ this.formControlController = new FormControlController(this, {
844
+ assumeInteractionOn: ['it-input', 'it-blur', 'it-change'],
845
+ });
846
+ // TODO: verificare se serve davvero con il fatto che usiamo form-controller
847
+ // static formAssociated = true;
848
+ // @property()
849
+ // internals = this.attachInternals();
850
+ this._touched = false;
851
+ /** The name of the input, submitted as a name/value pair with form data. */
852
+ this.name = '';
853
+ /** The current value of the input, submitted as a name/value pair with form data. */
854
+ this.value = '';
855
+ /** If the input is disabled. */
856
+ this.disabled = false;
857
+ /**
858
+ * By default, form controls are associated with the nearest containing `<form>` element. This attribute allows you
859
+ * to place the form control outside of a form and associate it with the form that has this `id`. The form must be in
860
+ * the same document or shadow root for this to work.
861
+ */
862
+ this.form = '';
863
+ /** If you implement your custom validation and you won't to trigger default validation */
864
+ this.customValidation = false;
865
+ /** If your input is invalid from your custom validition, set this attribute with message validation */
866
+ this.validationText = '';
867
+ /**
868
+ * Specifies the granularity that the value must adhere to, or the special value `any` which means no stepping is
869
+ * implied, allowing any numeric value. Only applies to date and number input types.
870
+ */
871
+ this.step = 'any';
872
+ /** The input's minimum length. */
873
+ this.minlength = -1;
874
+ /** The input's maximum length. */
875
+ this.maxlength = -1;
876
+ /** If the input is required. */
877
+ this.required = false;
878
+ /* For grouped input, like checkbox-group */
879
+ this.isInGroup = false;
880
+ this.validationMessage = '';
881
+ }
882
+ /** Gets the validity state object */
883
+ get validity() {
884
+ return this.inputElement?.validity;
885
+ }
886
+ /** Gets the associated form, if one exists. */
887
+ getForm() {
888
+ return this.formControlController.getForm();
889
+ }
890
+ // Form validation methods
891
+ checkValidity() {
892
+ const inputValid = this.inputElement?.checkValidity() ?? true; // this.inputElement.checkValidity() è la validazione del browser
893
+ return inputValid;
894
+ }
895
+ /** Checks for validity and shows the browser's validation message if the control is invalid. */
896
+ reportValidity() {
897
+ // const ret = this.inputElement.checkValidity();
898
+ const ret = this.checkValidity(); // chiama la checkValidity, che se è stata overridata chiama quella
899
+ this.handleValidationMessages();
900
+ return ret; // this.inputElement.reportValidity();
901
+ }
902
+ /** Sets a custom validation message. Pass an empty string to restore validity. */
903
+ setCustomValidity(message) {
904
+ this.inputElement.setCustomValidity(message);
905
+ this.validationMessage = this.inputElement.validationMessage;
906
+ this.formControlController.updateValidity();
907
+ }
908
+ // Handlers
909
+ _handleReady() {
910
+ requestAnimationFrame(() => {
911
+ this.dispatchEvent(new CustomEvent('it-input-ready', { bubbles: true, detail: { el: this.inputElement } }));
912
+ });
913
+ }
914
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
915
+ _handleInput(e) {
916
+ this.handleValidationMessages();
917
+ this.dispatchEvent(new CustomEvent('it-input', {
918
+ detail: { value: this.inputElement.value, el: this.inputElement },
919
+ bubbles: true,
920
+ composed: true,
921
+ }));
922
+ }
923
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
924
+ _handleBlur(e) {
925
+ this._touched = true;
926
+ this.handleValidationMessages();
927
+ this.dispatchEvent(new FocusEvent('it-blur', { bubbles: true, composed: true }));
928
+ }
929
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
930
+ _handleFocus(e) {
931
+ this.dispatchEvent(new FocusEvent('it-focus', { bubbles: true, composed: true }));
932
+ }
933
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
934
+ _handleClick(e) {
935
+ this.dispatchEvent(new MouseEvent('it-click', { bubbles: true, composed: true }));
936
+ }
937
+ /*
938
+ Override default browser validation messages
939
+ */
940
+ handleValidationMessages() {
941
+ if (!this.customValidation) {
942
+ const _v = this.inputElement.validity;
943
+ const isRequiredHandledByGroup = this.isInGroup === true;
944
+ if (_v.valueMissing && !isRequiredHandledByGroup) {
945
+ this.setCustomValidity(this.$t('validityRequired'));
946
+ }
947
+ else if (_v.patternMismatch) {
948
+ this.setCustomValidity(this.$t('validityPattern'));
949
+ }
950
+ else if (_v.tooShort) {
951
+ this.setCustomValidity(this.$t('validityMinlength').replace('{minlength}', this.minlength.toString()));
952
+ }
953
+ else if (_v.tooLong) {
954
+ this.setCustomValidity(this.$t('validityMaxlength').replace('{maxlength}', this.maxlength.toString()));
955
+ }
956
+ else {
957
+ /* nothing. Usa il messaggio di errore della validazione
958
+ di default del browser per altri errori di validità come:
959
+ - typeMismatch
960
+ - rangeUnderflow
961
+ - rangeOverflow
962
+ - stepMismatch
963
+ - badInput */
964
+ const otherConstraintErrors = _v.typeMismatch || _v.rangeUnderflow || _v.rangeOverflow || _v.stepMismatch || _v.badInput;
965
+ if (!otherConstraintErrors) {
966
+ this.setCustomValidity('');
967
+ }
968
+ }
969
+ }
970
+ this.validationMessage = this.inputElement.validationMessage;
971
+ }
972
+ _handleInvalid(event) {
973
+ this.formControlController.setValidity(false);
974
+ this.formControlController.emitInvalidEvent(event);
975
+ }
976
+ _handleChange(e) {
977
+ const target = e.target;
978
+ let value;
979
+ if (target instanceof HTMLInputElement) {
980
+ switch (target.type) {
981
+ case 'checkbox':
982
+ case 'radio':
983
+ value = target.checked;
984
+ break;
985
+ case 'file':
986
+ value = target.files; // FileList
987
+ break;
988
+ default:
989
+ value = target.value;
990
+ }
991
+ }
992
+ else if (target instanceof HTMLSelectElement) {
993
+ if (target.multiple) {
994
+ value = Array.from(target.selectedOptions).map((o) => o.value);
995
+ }
996
+ else {
997
+ value = target.value;
998
+ }
999
+ }
1000
+ else {
1001
+ // textarea o altri input con value
1002
+ value = target.value;
1003
+ }
1004
+ this.dispatchEvent(new CustomEvent('it-change', {
1005
+ detail: { value, el: target },
1006
+ bubbles: true,
1007
+ composed: true,
1008
+ }));
1009
+ }
1010
+ updated(changedProperties) {
1011
+ super.updated?.(changedProperties);
1012
+ if (this.customValidation) {
1013
+ this.setCustomValidity(this.validationText ?? '');
1014
+ }
1015
+ else if (this.formControlController.userInteracted()) {
1016
+ this.formControlController.updateValidity();
1017
+ }
1018
+ }
1019
+ }
1020
+ __decorate([
1021
+ state(),
1022
+ __metadata("design:type", Object)
1023
+ ], FormControl.prototype, "_touched", void 0);
1024
+ __decorate([
1025
+ query('.it-form__control'),
1026
+ __metadata("design:type", HTMLInputElement)
1027
+ ], FormControl.prototype, "inputElement", void 0);
1028
+ __decorate([
1029
+ property({ type: String, reflect: true }) // from FormControl
1030
+ ,
1031
+ __metadata("design:type", Object)
1032
+ ], FormControl.prototype, "name", void 0);
1033
+ __decorate([
1034
+ property({ reflect: true }),
1035
+ __metadata("design:type", Object)
1036
+ ], FormControl.prototype, "value", void 0);
1037
+ __decorate([
1038
+ property({ type: Boolean, reflect: true }) // from FormControl
1039
+ ,
1040
+ __metadata("design:type", Object)
1041
+ ], FormControl.prototype, "disabled", void 0);
1042
+ __decorate([
1043
+ property({ reflect: true, type: String }),
1044
+ __metadata("design:type", Object)
1045
+ ], FormControl.prototype, "form", void 0);
1046
+ __decorate([
1047
+ property({ type: Boolean, reflect: true, attribute: 'custom-validation' }),
1048
+ __metadata("design:type", Object)
1049
+ ], FormControl.prototype, "customValidation", void 0);
1050
+ __decorate([
1051
+ property({ attribute: 'validity-message', reflect: true }),
1052
+ __metadata("design:type", String)
1053
+ ], FormControl.prototype, "validationText", void 0);
1054
+ __decorate([
1055
+ property(),
1056
+ __metadata("design:type", String)
1057
+ ], FormControl.prototype, "pattern", void 0);
1058
+ __decorate([
1059
+ property(),
1060
+ __metadata("design:type", Object)
1061
+ ], FormControl.prototype, "min", void 0);
1062
+ __decorate([
1063
+ property(),
1064
+ __metadata("design:type", Object)
1065
+ ], FormControl.prototype, "max", void 0);
1066
+ __decorate([
1067
+ property(),
1068
+ __metadata("design:type", Object)
1069
+ ], FormControl.prototype, "step", void 0);
1070
+ __decorate([
1071
+ property({ type: Number }),
1072
+ __metadata("design:type", Object)
1073
+ ], FormControl.prototype, "minlength", void 0);
1074
+ __decorate([
1075
+ property({ type: Number }),
1076
+ __metadata("design:type", Object)
1077
+ ], FormControl.prototype, "maxlength", void 0);
1078
+ __decorate([
1079
+ property({ type: Boolean, reflect: true }) // from FormControl
1080
+ ,
1081
+ __metadata("design:type", Object)
1082
+ ], FormControl.prototype, "required", void 0);
1083
+ __decorate([
1084
+ property({ type: Boolean }),
1085
+ __metadata("design:type", Object)
1086
+ ], FormControl.prototype, "isInGroup", void 0);
1087
+ __decorate([
1088
+ state(),
1089
+ __metadata("design:type", Object)
1090
+ ], FormControl.prototype, "validationMessage", void 0);
1091
+
1092
+ if (typeof window !== 'undefined') {
1093
+ window._itAnalytics = window._itAnalytics || {};
1094
+ window._itAnalytics = {
1095
+ ...window._itAnalytics,
1096
+ version: '1.0.0-alpha.10',
1097
+ };
1098
+ }
1099
+
608
1100
  /**
609
1101
  * Checks for repetition of characters in
610
1102
  * a string
@@ -776,13 +1268,10 @@ const translation = {
776
1268
  passwordSuggestionSpecial: 'Uno o più caratteri speciali.',
777
1269
  passwordSuggestionFollowed: 'suggerimenti seguiti',
778
1270
  passwordSuggestionFollowedPlural: 'suggerimenti seguiti',
779
- passwordSuggestionOf: 'di',
780
- passwordSuggestionMetLabel: 'Soddisfatto:',
781
- validityRequired: 'Questo campo è obbligatorio.',
782
- validityInvalid: 'Il valore non è corretto.',
783
- validityPattern: 'Il valore non corrisponde al formato richiesto.',
784
- validityMinlength: 'Il valore deve essere lungo almeno {minlength} caratteri.',
785
- validityMaxlength: 'Il valore deve essere lungo al massimo {maxlength} caratteri.',
1271
+ passwordSuggestionOf: 'di',
1272
+ passwordSuggestionMetLabel: 'Soddisfatto:',
1273
+ increaseValue: 'Aumenta il valore',
1274
+ decreaseValue: 'Diminuisci il valore',
786
1275
  };
787
1276
 
788
1277
  var styles = css`@charset "UTF-8";
@@ -802,7 +1291,7 @@ var styles = css`@charset "UTF-8";
802
1291
  .form-check [type=checkbox]:focus + label,
803
1292
  .form-check [type=radio]:focus + label {
804
1293
  border-color: hsl(0, 0%, 0%) !important;
805
- box-shadow: 0 0 0 2px var(--bs-color-border-inverse), 0 0 0 5px var(--bs-color-outline-focus) !important;
1294
+ box-shadow: 0 0 0 2px var(--bsi-color-border-inverse), 0 0 0 5px var(--bsi-color-outline-focus) !important;
806
1295
  outline: 3px solid transparent !important;
807
1296
  outline-offset: 3px !important;
808
1297
  }
@@ -842,7 +1331,7 @@ hr {
842
1331
 
843
1332
  p {
844
1333
  margin-top: 0;
845
- margin-bottom: var(--bs-paragraph-spacing);
1334
+ margin-bottom: var(--bsi-paragraph-spacing);
846
1335
  }
847
1336
 
848
1337
  abbr[title] {
@@ -852,21 +1341,21 @@ abbr[title] {
852
1341
  }
853
1342
 
854
1343
  address {
855
- margin-bottom: var(--bs-spacing-s);
1344
+ margin-bottom: var(--bsi-spacing-s);
856
1345
  font-style: normal;
857
1346
  line-height: inherit;
858
1347
  }
859
1348
 
860
1349
  ol,
861
1350
  ul {
862
- padding-left: var(--bs-spacing-l);
1351
+ padding-left: var(--bsi-spacing-l);
863
1352
  }
864
1353
 
865
1354
  ol,
866
1355
  ul,
867
1356
  dl {
868
1357
  margin-top: 0;
869
- margin-bottom: var(--bs-spacing-s);
1358
+ margin-bottom: var(--bsi-spacing-s);
870
1359
  }
871
1360
 
872
1361
  ol ol,
@@ -877,22 +1366,22 @@ ul ol {
877
1366
  }
878
1367
 
879
1368
  dt {
880
- font-weight: var(--bs-font-weight-strong);
1369
+ font-weight: var(--bsi-font-weight-strong);
881
1370
  }
882
1371
 
883
1372
  dd {
884
- margin-bottom: var(--bs-spacing-xxs);
1373
+ margin-bottom: var(--bsi-spacing-xxs);
885
1374
  margin-left: 0;
886
1375
  }
887
1376
 
888
1377
  blockquote {
889
- margin: 0 0 var(--bs-spacing-s);
1378
+ margin: 0 0 var(--bsi-spacing-s);
890
1379
  }
891
1380
 
892
1381
  sub,
893
1382
  sup {
894
1383
  position: relative;
895
- font-size: var(--bs-font-size-1);
1384
+ font-size: var(--bsi-font-size-1);
896
1385
  line-height: 0;
897
1386
  vertical-align: baseline;
898
1387
  }
@@ -906,19 +1395,14 @@ sup {
906
1395
  }
907
1396
 
908
1397
  a {
909
- color: var(--bs-color-link);
1398
+ color: var(--bsi-color-link);
910
1399
  text-decoration: underline;
911
1400
  text-decoration-skip-ink: auto;
912
1401
  text-underline-offset: 2px;
913
1402
  }
914
- a:hover:not(.btn) {
915
- color: var(--bs-color-link-hover);
916
- text-decoration: underline;
917
- }
918
-
919
- a:not([href]):not([class]), a:not([href]):not([class]):hover {
920
- color: inherit;
921
- text-decoration: none;
1403
+ a:hover {
1404
+ color: var(--bsi-color-link-hover);
1405
+ cursor: pointer;
922
1406
  }
923
1407
 
924
1408
  pre,
@@ -931,7 +1415,7 @@ samp {
931
1415
  pre {
932
1416
  display: block;
933
1417
  margin-top: 0;
934
- margin-bottom: var(--bs-paragraph-spacing);
1418
+ margin-bottom: var(--bsi-paragraph-spacing);
935
1419
  overflow: auto;
936
1420
  }
937
1421
  pre code {
@@ -1051,23 +1535,6 @@ fieldset {
1051
1535
  border: 0;
1052
1536
  }
1053
1537
 
1054
- legend {
1055
- float: left;
1056
- width: 100%;
1057
- padding: 0;
1058
- margin-bottom: 0.5rem;
1059
- font-size: calc(1.275rem + 0.3vw);
1060
- line-height: inherit;
1061
- }
1062
- @media (min-width: 1200px) {
1063
- legend {
1064
- font-size: 1.5rem;
1065
- }
1066
- }
1067
- legend + * {
1068
- clear: left;
1069
- }
1070
-
1071
1538
  ::-webkit-datetime-edit-fields-wrapper,
1072
1539
  ::-webkit-datetime-edit-text,
1073
1540
  ::-webkit-datetime-edit-minute,
@@ -1143,78 +1610,82 @@ progress {
1143
1610
  }
1144
1611
 
1145
1612
  .btn {
1146
- --bs-btn-padding-x: var(--bs-spacing-s);
1147
- --bs-btn-padding-y: var(--bs-spacing-xs);
1148
- --bs-btn-font-family: var(--bs-font-sans);
1149
- --bs-btn-font-weight: var(--bs-font-weight-solid);
1150
- --bs-btn-font-size: var(--bs-label-font-size);
1151
- --bs-btn-line-height: var(--bs-font-line-height-3);
1152
- --bs-btn-text-color: var(--bs-color-text-primary);
1153
- --bs-btn-background: transparent;
1154
- --bs-btn-border-size: 0;
1155
- --bs-btn-border-color: transparent;
1156
- --bs-btn-border-radius: var(--bs-radius-smooth);
1157
- --bs-btn-outline-border-size: 2px;
1158
- --bs-btn-outline-border-color: transparent;
1159
- --bs-btn-disabled-opacity: 0.5;
1160
- }
1161
-
1613
+ --bsi-btn-background: transparent;
1614
+ --bsi-btn-border-color: transparent;
1615
+ --bsi-btn-border-radius: var(--bsi-radius-smooth);
1616
+ --bsi-btn-border-size: 0;
1617
+ --bsi-btn-disabled-opacity: 0.5;
1618
+ --bsi-btn-font-family: var(--bsi-font-sans);
1619
+ --bsi-btn-font-size: var(--bsi-label-font-size);
1620
+ --bsi-btn-font-weight: var(--bsi-font-weight-solid);
1621
+ --bsi-btn-line-height: var(--bsi-font-leading-3);
1622
+ --bsi-btn-outline-border-color: transparent;
1623
+ --bsi-btn-outline-border-size: 2px;
1624
+ --bsi-btn-padding-x: var(--bsi-spacing-s);
1625
+ --bsi-btn-padding-y: var(--bsi-spacing-xs);
1626
+ --bsi-btn-text-color: var(--bsi-color-text-primary);
1627
+ }
1628
+
1629
+ /* stylelint-disable-next-line no-duplicate-selectors */
1162
1630
  .btn {
1163
1631
  display: inline-block;
1164
- padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);
1165
- border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);
1166
- border-radius: var(--bs-btn-border-radius);
1167
- background: var(--bs-btn-background);
1168
- box-shadow: var(--bs-btn-box-shadow, none);
1169
- color: var(--bs-btn-text-color);
1170
- font-family: var(--bs-btn-font-family);
1171
- font-size: var(--bs-btn-font-size);
1172
- font-weight: var(--bs-btn-font-weight);
1173
- line-height: var(--bs-btn-line-height);
1632
+ padding: var(--bsi-btn-padding-y) var(--bsi-btn-padding-x);
1633
+ border: var(--bsi-btn-border-width) solid var(--bsi-btn-border-color);
1634
+ border-radius: var(--bsi-btn-border-radius);
1635
+ background: var(--bsi-btn-background);
1636
+ box-shadow: var(--bsi-btn-box-shadow, none);
1637
+ color: var(--bsi-btn-text-color);
1638
+ font-family: var(--bsi-btn-font-family);
1639
+ font-size: var(--bsi-btn-font-size);
1640
+ font-weight: var(--bsi-btn-font-weight);
1641
+ line-height: var(--bsi-btn-line-height);
1174
1642
  text-align: center;
1175
1643
  text-decoration: none;
1176
1644
  vertical-align: middle;
1177
1645
  white-space: initial;
1178
1646
  width: auto;
1179
- transition: all var(--bs-transition-instant) ease-in-out;
1647
+ transition: all var(--bsi-transition-instant) ease-in-out;
1180
1648
  user-select: none;
1181
1649
  }
1650
+ .btn:hover {
1651
+ color: var(--bsi-btn-text-color);
1652
+ }
1182
1653
  .btn:disabled, .btn.disabled {
1183
- opacity: var(--bs-btn-disabled-opacity);
1654
+ opacity: var(--bsi-btn-disabled-opacity);
1184
1655
  cursor: not-allowed;
1185
1656
  pointer-events: none;
1186
1657
  }
1187
1658
  .btn:focus-visible {
1188
- border-color: var(--bs-btn-hover-border-color);
1659
+ border-color: var(--bsi-btn-hover-border-color);
1189
1660
  outline: 0;
1190
1661
  }
1191
1662
  .btn-check:focus-visible + .btn {
1192
- border-color: var(--bs-btn-hover-border-color);
1663
+ border-color: var(--bsi-btn-hover-border-color);
1193
1664
  outline: 0;
1194
1665
  }
1195
1666
 
1196
1667
  .btn-link {
1197
- --bs-btn-background: transparent;
1198
- --bs-btn-border-color: transparent;
1668
+ --bsi-btn-background: transparent;
1669
+ --bsi-btn-border-color: transparent;
1199
1670
  text-decoration: underline;
1200
1671
  }
1201
1672
  .btn-link:hover {
1202
- color: var(--bs-color-link-hover);
1673
+ color: var(--bsi-color-link-hover);
1203
1674
  }
1204
1675
 
1205
1676
  .btn-xs {
1206
- --bs-btn-padding-x: var(--bs-spacing-xs);
1207
- --bs-btn-padding-y: var(--bs-spacing-xs);
1208
- --bs-btn-font-size: var(--bs-label-font-size-s);
1209
- --bs-btn-line-height: var(--bs-font-line-height-1);
1210
- --bs-rounded-icon-size: 20px;
1677
+ --bsi-btn-padding-x: var(--bsi-spacing-xs);
1678
+ --bsi-btn-padding-y: var(--bsi-spacing-xs);
1679
+ --bsi-btn-font-size: var(--bsi-label-font-size-s);
1680
+ --bsi-btn-line-height: var(--bsi-font-leading-1);
1681
+ --bsi-rounded-icon-size: 20px;
1211
1682
  }
1212
1683
 
1213
1684
  .btn-lg {
1214
- --bs-btn-padding-x: var(--bs-spacing-m);
1215
- --bs-btn-padding-y: var(--bs-spacing-s);
1216
- --bs-btn-font-size: var(--bs-label-font-size-m);
1217
- --bs-btn-line-height: var(--bs-font-line-height-5);
1685
+ --bsi-btn-padding-x: var(--bsi-spacing-m);
1686
+ --bsi-btn-padding-y: var(--bsi-spacing-s);
1687
+ --bsi-btn-font-size: var(--bsi-label-font-size-l);
1688
+ --bsi-btn-line-height: var(--bsi-font-leading-5);
1218
1689
  }
1219
1690
 
1220
1691
  .btn-progress {
@@ -1226,7 +1697,7 @@ progress {
1226
1697
  flex-direction: row;
1227
1698
  align-items: center;
1228
1699
  justify-content: center;
1229
- gap: var(--bs-icon-spacing);
1700
+ gap: var(--bsi-icon-spacing);
1230
1701
  }
1231
1702
 
1232
1703
  .btn-full {
@@ -1253,16 +1724,16 @@ progress {
1253
1724
 
1254
1725
  .btn-primary,
1255
1726
  a.btn-primary {
1256
- --bs-btn-text-color: var(--bs-color-text-inverse);
1257
- --bs-btn-background: var(--bs-color-background-primary);
1727
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1728
+ --bsi-btn-background: var(--bsi-color-background-primary);
1258
1729
  }
1259
1730
  .btn-primary:hover,
1260
1731
  a.btn-primary:hover {
1261
- --bs-btn-background: var(--bs-color-background-primary-hover);
1732
+ --bsi-btn-background: var(--bsi-color-background-primary-hover);
1262
1733
  }
1263
1734
  .btn-primary:active,
1264
1735
  a.btn-primary:active {
1265
- --bs-btn-background: var(--bs-color-background-primary-active);
1736
+ --bsi-btn-background: var(--bsi-color-background-primary-active);
1266
1737
  }
1267
1738
  .btn-primary.btn-progress,
1268
1739
  a.btn-primary.btn-progress {
@@ -1273,16 +1744,16 @@ a.btn-primary.btn-progress {
1273
1744
 
1274
1745
  .btn-secondary,
1275
1746
  a.btn-secondary {
1276
- --bs-btn-text-color: var(--bs-color-text-inverse);
1277
- --bs-btn-background: var(--bs-color-background-secondary);
1747
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1748
+ --bsi-btn-background: var(--bsi-color-background-secondary);
1278
1749
  }
1279
1750
  .btn-secondary:hover,
1280
1751
  a.btn-secondary:hover {
1281
- --bs-btn-background: var(--bs-color-background-secondary-hover);
1752
+ --bsi-btn-background: var(--bsi-color-background-secondary-hover);
1282
1753
  }
1283
1754
  .btn-secondary:active,
1284
1755
  a.btn-secondary:active {
1285
- --bs-btn-background: var(--bs-color-background-secondary-active);
1756
+ --bsi-btn-background: var(--bsi-color-background-secondary-active);
1286
1757
  }
1287
1758
  .btn-secondary:disabled.btn-progress, .btn-secondary.disabled.btn-progress,
1288
1759
  a.btn-secondary:disabled.btn-progress,
@@ -1294,135 +1765,174 @@ a.btn-secondary.disabled.btn-progress {
1294
1765
 
1295
1766
  .btn-success,
1296
1767
  a.btn-success {
1297
- --bs-btn-text-color: var(--bs-color-text-inverse);
1298
- --bs-btn-background: var(--bs-color-background-success);
1768
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1769
+ --bsi-btn-background: var(--bsi-color-background-success);
1299
1770
  }
1300
1771
  .btn-success:hover,
1301
1772
  a.btn-success:hover {
1302
- --bs-btn-background: var(--bs-color-background-success-hover);
1773
+ --bsi-btn-background: var(--bsi-color-background-success-hover);
1303
1774
  }
1304
1775
  .btn-success:active,
1305
1776
  a.btn-success:active {
1306
- --bs-btn-background: var(--bs-color-background-success-active);
1777
+ --bsi-btn-background: var(--bsi-color-background-success-active);
1307
1778
  }
1308
1779
 
1309
1780
  .btn-warning,
1310
1781
  a.btn-warning {
1311
- --bs-btn-text-color: var(--bs-color-text-inverse);
1312
- --bs-btn-background: var(--bs-color-background-warning);
1782
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1783
+ --bsi-btn-background: var(--bsi-color-background-warning);
1313
1784
  }
1314
1785
  .btn-warning:hover,
1315
1786
  a.btn-warning:hover {
1316
- --bs-btn-background: var(--bs-color-background-warning-hover);
1787
+ --bsi-btn-background: var(--bsi-color-background-warning-hover);
1317
1788
  }
1318
1789
  .btn-warning:active,
1319
1790
  a.btn-warning:active {
1320
- --bs-btn-background: var(--bs-color-background-warning-active);
1791
+ --bsi-btn-background: var(--bsi-color-background-warning-active);
1321
1792
  }
1322
1793
 
1323
1794
  .btn-danger,
1324
1795
  a.btn-danger {
1325
- --bs-btn-text-color: var(--bs-color-text-inverse);
1326
- --bs-btn-background: var(--bs-color-background-danger);
1796
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1797
+ --bsi-btn-background: var(--bsi-color-background-danger);
1327
1798
  }
1328
1799
  .btn-danger:hover,
1329
1800
  a.btn-danger:hover {
1330
- --bs-btn-background: var(--bs-color-background-danger-hover);
1801
+ --bsi-btn-background: var(--bsi-color-background-danger-hover);
1331
1802
  }
1332
1803
  .btn-danger:active,
1333
1804
  a.btn-danger:active {
1334
- --bs-btn-background: var(--bs-color-background-danger-active);
1805
+ --bsi-btn-background: var(--bsi-color-background-danger-active);
1335
1806
  }
1336
1807
 
1337
1808
  .btn[class*=btn-outline-] {
1338
- --bs-btn-box-shadow: inset 0 0 0 var(--bs-btn-outline-border-size) var(--bs-btn-outline-border-color);
1809
+ --bsi-btn-box-shadow: inset 0 0 0 var(--bsi-btn-outline-border-size) var(--bsi-btn-outline-border-color);
1339
1810
  }
1340
1811
 
1341
1812
  .btn-outline-primary,
1342
1813
  a.btn-outline-primary {
1343
- --bs-btn-outline-border-color: var(--bs-color-border-primary);
1344
- --bs-btn-text-color: var(--bs-color-text-primary);
1814
+ --bsi-btn-outline-border-color: var(--bsi-color-border-primary);
1815
+ --bsi-btn-text-color: var(--bsi-color-text-primary);
1345
1816
  }
1346
1817
  .btn-outline-primary:hover,
1347
1818
  a.btn-outline-primary:hover {
1348
- --bs-btn-outline-border-color: var(--bs-color-border-primary-hover);
1349
- --bs-btn-text-color: var(--bs-color-link-hover);
1819
+ --bsi-btn-outline-border-color: color-mix(in srgb, var(--bsi-color-border-primary-hover) 70%, black);
1820
+ --bsi-btn-text-color: var(--bsi-color-link-hover);
1350
1821
  }
1351
1822
  .btn-outline-primary:active,
1352
1823
  a.btn-outline-primary:active {
1353
- --bs-btn-outline-border-color: var(--bs-color-border-primary-active);
1354
- --bs-btn-text-color: var(--bs-color-link-active);
1824
+ --bsi-btn-outline-border-color: var(--bsi-color-border-primary-active);
1825
+ --bsi-btn-text-color: var(--bsi-color-link-active);
1355
1826
  }
1356
1827
  .btn-outline-secondary,
1357
1828
  a.btn-outline-secondary {
1358
- --bs-btn-outline-border-color: var(--bs-color-border-secondary);
1359
- --bs-btn-text-color: var(--bs-color-text-secondary);
1829
+ --bsi-btn-outline-border-color: var(--bsi-color-border-secondary);
1830
+ --bsi-btn-text-color: var(--bsi-color-text-secondary);
1360
1831
  }
1361
1832
  .btn-outline-secondary:hover,
1362
1833
  a.btn-outline-secondary:hover {
1363
- --bs-btn-outline-border-color: var(--bs-color-border-secondary-hover);
1364
- --bs-btn-text-color: var(--bs-color-text-secondary-hover);
1834
+ --bsi-btn-outline-border-color: var(--bsi-color-border-secondary-hover);
1835
+ --bsi-btn-text-color: var(--bsi-color-link-secondary-hover);
1365
1836
  }
1366
1837
  .btn-outline-secondary:active,
1367
1838
  a.btn-outline-secondary:active {
1368
- --bs-btn-outline-border-color: var(--bs-color-border-secondary-active);
1369
- --bs-btn-text-color: var(--bs-color-text-secondary-active);
1839
+ --bsi-btn-outline-border-color: var(--bsi-color-border-secondary-active);
1840
+ --bsi-btn-text-color: var(--bsi-color-link-secondary-active);
1370
1841
  }
1371
1842
  .btn-outline-success,
1372
1843
  a.btn-outline-success {
1373
- --bs-btn-outline-border-color: var(--bs-color-border-success);
1374
- --bs-btn-text-color: var(--bs-color-text-success);
1844
+ --bsi-btn-outline-border-color: var(--bsi-color-border-success);
1845
+ --bsi-btn-text-color: var(--bsi-color-text-success);
1375
1846
  }
1376
1847
  .btn-outline-success:hover,
1377
1848
  a.btn-outline-success:hover {
1378
- --bs-btn-outline-border-color: var(--bs-color-border-success-hover);
1379
- --bs-btn-text-color: var(--bs-color-text-success-hover);
1849
+ /* aumenta contrasto scurendo il bordo rispetto al token base */
1850
+ --bsi-btn-outline-border-color: color-mix(in srgb, var(--bsi-color-border-success-hover) 70%, black);
1851
+ --bsi-btn-text-color: var(--bsi-color-text-success-hover);
1380
1852
  }
1381
1853
  .btn-outline-success:active,
1382
1854
  a.btn-outline-success:active {
1383
- --bs-btn-outline-border-color: var(--bs-color-border-success-active);
1384
- --bs-btn-text-color: var(--bs-color-text-success-active);
1855
+ --bsi-btn-outline-border-color: var(--bsi-color-border-success-active);
1856
+ --bsi-btn-text-color: var(--bsi-color-text-success-active);
1385
1857
  }
1386
1858
  .btn-outline-warning,
1387
1859
  a.btn-outline-warning {
1388
- --bs-btn-outline-border-color: var(--bs-color-border-warning);
1389
- --bs-btn-text-color: var(--bs-color-text-warning);
1860
+ --bsi-btn-outline-border-color: var(--bsi-color-border-warning);
1861
+ --bsi-btn-text-color: var(--bsi-color-text-warning);
1390
1862
  }
1391
1863
  .btn-outline-warning:hover,
1392
1864
  a.btn-outline-warning:hover {
1393
- --bs-btn-outline-border-color: var(--bs-color-border-warning-hover);
1394
- --bs-btn-text-color: var(--bs-color-text-warning-hover);
1865
+ --bsi-btn-outline-border-color: color-mix(in srgb, var(--bsi-color-border-warning-hover) 70%, black);
1866
+ --bsi-btn-text-color: var(--bsi-color-text-warning-hover);
1395
1867
  }
1396
1868
  .btn-outline-warning:active,
1397
1869
  a.btn-outline-warning:active {
1398
- --bs-btn-outline-border-color: var(--bs-color-border-warning-active);
1399
- --bs-btn-text-color: var(--bs-color-text-warning-active);
1870
+ --bsi-btn-outline-border-color: var(--bsi-color-border-warning-active);
1871
+ --bsi-btn-text-color: var(--bsi-color-text-warning-active);
1400
1872
  }
1401
1873
  .btn-outline-danger,
1402
1874
  a.btn-outline-danger {
1403
- --bs-btn-outline-border-color: var(--bs-color-border-danger);
1404
- --bs-btn-text-color: var(--bs-color-text-danger);
1875
+ --bsi-btn-outline-border-color: var(--bsi-color-border-danger);
1876
+ --bsi-btn-text-color: var(--bsi-color-text-danger);
1405
1877
  }
1406
1878
  .btn-outline-danger:hover,
1407
1879
  a.btn-outline-danger:hover {
1408
- --bs-btn-outline-border-color: var(--bs-color-border-danger-hover);
1409
- --bs-btn-text-color: var(--bs-color-text-danger-hover);
1880
+ --bsi-btn-outline-border-color: color-mix(in srgb, var(--bsi-color-border-danger-hover) 70%, black);
1881
+ --bsi-btn-text-color: var(--bsi-color-text-danger-hover);
1410
1882
  }
1411
1883
  .btn-outline-danger:active,
1412
1884
  a.btn-outline-danger:active {
1413
- --bs-btn-outline-border-color: var(--bs-color-border-danger-active);
1414
- --bs-btn-text-color: var(--bs-color-text-danger-active);
1885
+ --bsi-btn-outline-border-color: var(--bsi-color-border-danger-active);
1886
+ --bsi-btn-text-color: var(--bsi-color-text-danger-active);
1415
1887
  }
1416
1888
 
1417
1889
  .bg-dark .btn-link {
1418
- --bs-btn-text-color: var(--bs-color-text-inverse);
1890
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1891
+ }
1892
+ .bg-dark a.btn-primary,
1893
+ .bg-dark .btn-primary {
1894
+ --bsi-btn-text-color: var(--bsi-color-text-primary);
1895
+ --bsi-btn-background: var(--bsi-color-background-inverse);
1896
+ }
1897
+ .bg-dark a.btn-primary:hover,
1898
+ .bg-dark .btn-primary:hover {
1899
+ --bsi-btn-background: color-mix(in srgb, var(--bsi-color-background-inverse) 85%, black);
1900
+ }
1901
+ .bg-dark a.btn-primary:active,
1902
+ .bg-dark .btn-primary:active {
1903
+ --bsi-btn-background: color-mix(in srgb, var(--bsi-color-background-inverse) 80%, black);
1904
+ }
1905
+ .bg-dark a.btn-secondary,
1906
+ .bg-dark .btn-secondary {
1907
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1908
+ --bsi-btn-background: var(--bsi-color-background-secondary);
1909
+ }
1910
+ .bg-dark a.btn-secondary:hover, .bg-dark a.btn-secondary:active,
1911
+ .bg-dark .btn-secondary:hover,
1912
+ .bg-dark .btn-secondary:active {
1913
+ --bsi-btn-background: color-mix(in srgb, var(--bsi-color-background-secondary) 85%, black);
1419
1914
  }
1420
1915
  .bg-dark .btn-outline-primary,
1421
- .bg-dark a.btn-outline-primary,
1916
+ .bg-dark a.btn-outline-primary {
1917
+ --bsi-btn-outline-border-color: var(--bsi-color-border-inverse);
1918
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1919
+ }
1920
+ .bg-dark .btn-outline-primary:hover,
1921
+ .bg-dark a.btn-outline-primary:hover {
1922
+ --bsi-btn-boxshadow-color-darken: color-mix(in srgb, var(--bsi-color-border-inverse) 80%, black);
1923
+ --bsi-btn-boxshadow-color-desaturated: color-mix(in srgb, var(--bsi-btn-boxshadow-color-darken) 80%, gray);
1924
+ --bsi-btn-outline-border-color: var(--bsi-btn-boxshadow-color-desaturated);
1925
+ }
1422
1926
  .bg-dark .btn-outline-secondary,
1423
1927
  .bg-dark a.btn-outline-secondary {
1424
- --bs-btn-outline-border-color: var(--bs-color-border-inverse);
1425
- --bs-btn-text-color: var(--bs-color-text-inverse);
1928
+ --bsi-btn-text-color: var(--bsi-color-text-inverse);
1929
+ }
1930
+ .bg-dark .btn-outline-secondary:hover, .bg-dark .btn-outline-secondary:active,
1931
+ .bg-dark a.btn-outline-secondary:hover,
1932
+ .bg-dark a.btn-outline-secondary:active {
1933
+ --bsi-btn-boxshadow-color-darken: color-mix(in srgb, var(--bsi-color-background-secondary) 80%, black);
1934
+ --bsi-btn-boxshadow-color-desaturated: color-mix(in srgb, var(--bsi-btn-boxshadow-color-darken) 80%, gray);
1935
+ --bsi-btn-outline-border-color: var(--bsi-btn-boxshadow-color-desaturated);
1426
1936
  }
1427
1937
 
1428
1938
  .btn-close {
@@ -1432,25 +1942,24 @@ a.btn-outline-danger:active {
1432
1942
  height: 2.5rem;
1433
1943
  padding: 0;
1434
1944
  border: 0;
1435
- opacity: 0.5;
1436
1945
  background-color: transparent;
1437
- color: var(--bs-color-text-base);
1438
1946
  }
1439
1947
  .btn-close .icon {
1440
1948
  position: absolute;
1441
1949
  top: 50%;
1442
1950
  left: 50%;
1443
1951
  transform: translate(-50%, -50%);
1952
+ fill: var(--bsi-icon-secondary);
1444
1953
  }
1445
- .btn-close:hover {
1446
- opacity: 1;
1954
+ .btn-close .icon:hover {
1955
+ fill: var(--bsi-icon-default);
1447
1956
  text-decoration: none;
1448
1957
  }
1449
1958
  .btn-close:focus {
1450
1959
  opacity: 1;
1451
1960
  }
1452
1961
  .btn-close:disabled, .btn-close.disabled {
1453
- opacity: var(--bs-btn-disabled-opacity);
1962
+ opacity: var(--bsi-btn-disabled-opacity);
1454
1963
  pointer-events: none;
1455
1964
  user-select: none;
1456
1965
  }
@@ -1460,21 +1969,21 @@ a.btn-outline-danger:active {
1460
1969
  }
1461
1970
 
1462
1971
  .row {
1463
- --bs-gutter-x: 24px;
1464
- --bs-gutter-y: 0;
1972
+ --bsi-gutter-x: 24px;
1973
+ --bsi-gutter-y: 0;
1465
1974
  display: flex;
1466
1975
  flex-wrap: wrap;
1467
- margin-top: calc(-1 * var(--bs-gutter-y));
1468
- margin-right: calc(-0.5 * var(--bs-gutter-x));
1469
- margin-left: calc(-0.5 * var(--bs-gutter-x));
1976
+ margin-top: calc(-1 * var(--bsi-gutter-y));
1977
+ margin-right: calc(-0.5 * var(--bsi-gutter-x));
1978
+ margin-left: calc(-0.5 * var(--bsi-gutter-x));
1470
1979
  }
1471
1980
  .row > * {
1472
1981
  flex-shrink: 0;
1473
1982
  width: 100%;
1474
1983
  max-width: 100%;
1475
- padding-right: calc(var(--bs-gutter-x) * 0.5);
1476
- padding-left: calc(var(--bs-gutter-x) * 0.5);
1477
- margin-top: var(--bs-gutter-y);
1984
+ padding-right: calc(var(--bsi-gutter-x) * 0.5);
1985
+ padding-left: calc(var(--bsi-gutter-x) * 0.5);
1986
+ margin-top: var(--bsi-gutter-y);
1478
1987
  }
1479
1988
 
1480
1989
  .col {
@@ -1627,62 +2136,62 @@ a.btn-outline-danger:active {
1627
2136
 
1628
2137
  .g-0,
1629
2138
  .gx-0 {
1630
- --bs-gutter-x: 0;
2139
+ --bsi-gutter-x: 0;
1631
2140
  }
1632
2141
 
1633
2142
  .g-0,
1634
2143
  .gy-0 {
1635
- --bs-gutter-y: 0;
2144
+ --bsi-gutter-y: 0;
1636
2145
  }
1637
2146
 
1638
2147
  .g-1,
1639
2148
  .gx-1 {
1640
- --bs-gutter-x: 0.25rem;
2149
+ --bsi-gutter-x: 0.25rem;
1641
2150
  }
1642
2151
 
1643
2152
  .g-1,
1644
2153
  .gy-1 {
1645
- --bs-gutter-y: 0.25rem;
2154
+ --bsi-gutter-y: 0.25rem;
1646
2155
  }
1647
2156
 
1648
2157
  .g-2,
1649
2158
  .gx-2 {
1650
- --bs-gutter-x: 0.5rem;
2159
+ --bsi-gutter-x: 0.5rem;
1651
2160
  }
1652
2161
 
1653
2162
  .g-2,
1654
2163
  .gy-2 {
1655
- --bs-gutter-y: 0.5rem;
2164
+ --bsi-gutter-y: 0.5rem;
1656
2165
  }
1657
2166
 
1658
2167
  .g-3,
1659
2168
  .gx-3 {
1660
- --bs-gutter-x: 1rem;
2169
+ --bsi-gutter-x: 1rem;
1661
2170
  }
1662
2171
 
1663
2172
  .g-3,
1664
2173
  .gy-3 {
1665
- --bs-gutter-y: 1rem;
2174
+ --bsi-gutter-y: 1rem;
1666
2175
  }
1667
2176
 
1668
2177
  .g-4,
1669
2178
  .gx-4 {
1670
- --bs-gutter-x: 1.5rem;
2179
+ --bsi-gutter-x: 1.5rem;
1671
2180
  }
1672
2181
 
1673
2182
  .g-4,
1674
2183
  .gy-4 {
1675
- --bs-gutter-y: 1.5rem;
2184
+ --bsi-gutter-y: 1.5rem;
1676
2185
  }
1677
2186
 
1678
2187
  .g-5,
1679
2188
  .gx-5 {
1680
- --bs-gutter-x: 3rem;
2189
+ --bsi-gutter-x: 3rem;
1681
2190
  }
1682
2191
 
1683
2192
  .g-5,
1684
2193
  .gy-5 {
1685
- --bs-gutter-y: 3rem;
2194
+ --bsi-gutter-y: 3rem;
1686
2195
  }
1687
2196
 
1688
2197
  @media (min-width: 576px) {
@@ -1807,51 +2316,51 @@ a.btn-outline-danger:active {
1807
2316
  }
1808
2317
  .g-sm-0,
1809
2318
  .gx-sm-0 {
1810
- --bs-gutter-x: 0;
2319
+ --bsi-gutter-x: 0;
1811
2320
  }
1812
2321
  .g-sm-0,
1813
2322
  .gy-sm-0 {
1814
- --bs-gutter-y: 0;
2323
+ --bsi-gutter-y: 0;
1815
2324
  }
1816
2325
  .g-sm-1,
1817
2326
  .gx-sm-1 {
1818
- --bs-gutter-x: 0.25rem;
2327
+ --bsi-gutter-x: 0.25rem;
1819
2328
  }
1820
2329
  .g-sm-1,
1821
2330
  .gy-sm-1 {
1822
- --bs-gutter-y: 0.25rem;
2331
+ --bsi-gutter-y: 0.25rem;
1823
2332
  }
1824
2333
  .g-sm-2,
1825
2334
  .gx-sm-2 {
1826
- --bs-gutter-x: 0.5rem;
2335
+ --bsi-gutter-x: 0.5rem;
1827
2336
  }
1828
2337
  .g-sm-2,
1829
2338
  .gy-sm-2 {
1830
- --bs-gutter-y: 0.5rem;
2339
+ --bsi-gutter-y: 0.5rem;
1831
2340
  }
1832
2341
  .g-sm-3,
1833
2342
  .gx-sm-3 {
1834
- --bs-gutter-x: 1rem;
2343
+ --bsi-gutter-x: 1rem;
1835
2344
  }
1836
2345
  .g-sm-3,
1837
2346
  .gy-sm-3 {
1838
- --bs-gutter-y: 1rem;
2347
+ --bsi-gutter-y: 1rem;
1839
2348
  }
1840
2349
  .g-sm-4,
1841
2350
  .gx-sm-4 {
1842
- --bs-gutter-x: 1.5rem;
2351
+ --bsi-gutter-x: 1.5rem;
1843
2352
  }
1844
2353
  .g-sm-4,
1845
2354
  .gy-sm-4 {
1846
- --bs-gutter-y: 1.5rem;
2355
+ --bsi-gutter-y: 1.5rem;
1847
2356
  }
1848
2357
  .g-sm-5,
1849
2358
  .gx-sm-5 {
1850
- --bs-gutter-x: 3rem;
2359
+ --bsi-gutter-x: 3rem;
1851
2360
  }
1852
2361
  .g-sm-5,
1853
2362
  .gy-sm-5 {
1854
- --bs-gutter-y: 3rem;
2363
+ --bsi-gutter-y: 3rem;
1855
2364
  }
1856
2365
  }
1857
2366
  @media (min-width: 768px) {
@@ -1976,51 +2485,51 @@ a.btn-outline-danger:active {
1976
2485
  }
1977
2486
  .g-md-0,
1978
2487
  .gx-md-0 {
1979
- --bs-gutter-x: 0;
2488
+ --bsi-gutter-x: 0;
1980
2489
  }
1981
2490
  .g-md-0,
1982
2491
  .gy-md-0 {
1983
- --bs-gutter-y: 0;
2492
+ --bsi-gutter-y: 0;
1984
2493
  }
1985
2494
  .g-md-1,
1986
2495
  .gx-md-1 {
1987
- --bs-gutter-x: 0.25rem;
2496
+ --bsi-gutter-x: 0.25rem;
1988
2497
  }
1989
2498
  .g-md-1,
1990
2499
  .gy-md-1 {
1991
- --bs-gutter-y: 0.25rem;
2500
+ --bsi-gutter-y: 0.25rem;
1992
2501
  }
1993
2502
  .g-md-2,
1994
2503
  .gx-md-2 {
1995
- --bs-gutter-x: 0.5rem;
2504
+ --bsi-gutter-x: 0.5rem;
1996
2505
  }
1997
2506
  .g-md-2,
1998
2507
  .gy-md-2 {
1999
- --bs-gutter-y: 0.5rem;
2508
+ --bsi-gutter-y: 0.5rem;
2000
2509
  }
2001
2510
  .g-md-3,
2002
2511
  .gx-md-3 {
2003
- --bs-gutter-x: 1rem;
2512
+ --bsi-gutter-x: 1rem;
2004
2513
  }
2005
2514
  .g-md-3,
2006
2515
  .gy-md-3 {
2007
- --bs-gutter-y: 1rem;
2516
+ --bsi-gutter-y: 1rem;
2008
2517
  }
2009
2518
  .g-md-4,
2010
2519
  .gx-md-4 {
2011
- --bs-gutter-x: 1.5rem;
2520
+ --bsi-gutter-x: 1.5rem;
2012
2521
  }
2013
2522
  .g-md-4,
2014
2523
  .gy-md-4 {
2015
- --bs-gutter-y: 1.5rem;
2524
+ --bsi-gutter-y: 1.5rem;
2016
2525
  }
2017
2526
  .g-md-5,
2018
2527
  .gx-md-5 {
2019
- --bs-gutter-x: 3rem;
2528
+ --bsi-gutter-x: 3rem;
2020
2529
  }
2021
2530
  .g-md-5,
2022
2531
  .gy-md-5 {
2023
- --bs-gutter-y: 3rem;
2532
+ --bsi-gutter-y: 3rem;
2024
2533
  }
2025
2534
  }
2026
2535
  @media (min-width: 992px) {
@@ -2145,51 +2654,51 @@ a.btn-outline-danger:active {
2145
2654
  }
2146
2655
  .g-lg-0,
2147
2656
  .gx-lg-0 {
2148
- --bs-gutter-x: 0;
2657
+ --bsi-gutter-x: 0;
2149
2658
  }
2150
2659
  .g-lg-0,
2151
2660
  .gy-lg-0 {
2152
- --bs-gutter-y: 0;
2661
+ --bsi-gutter-y: 0;
2153
2662
  }
2154
2663
  .g-lg-1,
2155
2664
  .gx-lg-1 {
2156
- --bs-gutter-x: 0.25rem;
2665
+ --bsi-gutter-x: 0.25rem;
2157
2666
  }
2158
2667
  .g-lg-1,
2159
2668
  .gy-lg-1 {
2160
- --bs-gutter-y: 0.25rem;
2669
+ --bsi-gutter-y: 0.25rem;
2161
2670
  }
2162
2671
  .g-lg-2,
2163
2672
  .gx-lg-2 {
2164
- --bs-gutter-x: 0.5rem;
2673
+ --bsi-gutter-x: 0.5rem;
2165
2674
  }
2166
2675
  .g-lg-2,
2167
2676
  .gy-lg-2 {
2168
- --bs-gutter-y: 0.5rem;
2677
+ --bsi-gutter-y: 0.5rem;
2169
2678
  }
2170
2679
  .g-lg-3,
2171
2680
  .gx-lg-3 {
2172
- --bs-gutter-x: 1rem;
2681
+ --bsi-gutter-x: 1rem;
2173
2682
  }
2174
2683
  .g-lg-3,
2175
2684
  .gy-lg-3 {
2176
- --bs-gutter-y: 1rem;
2685
+ --bsi-gutter-y: 1rem;
2177
2686
  }
2178
2687
  .g-lg-4,
2179
2688
  .gx-lg-4 {
2180
- --bs-gutter-x: 1.5rem;
2689
+ --bsi-gutter-x: 1.5rem;
2181
2690
  }
2182
2691
  .g-lg-4,
2183
2692
  .gy-lg-4 {
2184
- --bs-gutter-y: 1.5rem;
2693
+ --bsi-gutter-y: 1.5rem;
2185
2694
  }
2186
2695
  .g-lg-5,
2187
2696
  .gx-lg-5 {
2188
- --bs-gutter-x: 3rem;
2697
+ --bsi-gutter-x: 3rem;
2189
2698
  }
2190
2699
  .g-lg-5,
2191
2700
  .gy-lg-5 {
2192
- --bs-gutter-y: 3rem;
2701
+ --bsi-gutter-y: 3rem;
2193
2702
  }
2194
2703
  }
2195
2704
  @media (min-width: 1200px) {
@@ -2314,51 +2823,51 @@ a.btn-outline-danger:active {
2314
2823
  }
2315
2824
  .g-xl-0,
2316
2825
  .gx-xl-0 {
2317
- --bs-gutter-x: 0;
2826
+ --bsi-gutter-x: 0;
2318
2827
  }
2319
2828
  .g-xl-0,
2320
2829
  .gy-xl-0 {
2321
- --bs-gutter-y: 0;
2830
+ --bsi-gutter-y: 0;
2322
2831
  }
2323
2832
  .g-xl-1,
2324
2833
  .gx-xl-1 {
2325
- --bs-gutter-x: 0.25rem;
2834
+ --bsi-gutter-x: 0.25rem;
2326
2835
  }
2327
2836
  .g-xl-1,
2328
2837
  .gy-xl-1 {
2329
- --bs-gutter-y: 0.25rem;
2838
+ --bsi-gutter-y: 0.25rem;
2330
2839
  }
2331
2840
  .g-xl-2,
2332
2841
  .gx-xl-2 {
2333
- --bs-gutter-x: 0.5rem;
2842
+ --bsi-gutter-x: 0.5rem;
2334
2843
  }
2335
2844
  .g-xl-2,
2336
2845
  .gy-xl-2 {
2337
- --bs-gutter-y: 0.5rem;
2846
+ --bsi-gutter-y: 0.5rem;
2338
2847
  }
2339
2848
  .g-xl-3,
2340
2849
  .gx-xl-3 {
2341
- --bs-gutter-x: 1rem;
2850
+ --bsi-gutter-x: 1rem;
2342
2851
  }
2343
2852
  .g-xl-3,
2344
2853
  .gy-xl-3 {
2345
- --bs-gutter-y: 1rem;
2854
+ --bsi-gutter-y: 1rem;
2346
2855
  }
2347
2856
  .g-xl-4,
2348
2857
  .gx-xl-4 {
2349
- --bs-gutter-x: 1.5rem;
2858
+ --bsi-gutter-x: 1.5rem;
2350
2859
  }
2351
2860
  .g-xl-4,
2352
2861
  .gy-xl-4 {
2353
- --bs-gutter-y: 1.5rem;
2862
+ --bsi-gutter-y: 1.5rem;
2354
2863
  }
2355
2864
  .g-xl-5,
2356
2865
  .gx-xl-5 {
2357
- --bs-gutter-x: 3rem;
2866
+ --bsi-gutter-x: 3rem;
2358
2867
  }
2359
2868
  .g-xl-5,
2360
2869
  .gy-xl-5 {
2361
- --bs-gutter-y: 3rem;
2870
+ --bsi-gutter-y: 3rem;
2362
2871
  }
2363
2872
  }
2364
2873
  @media (min-width: 1400px) {
@@ -2483,64 +2992,66 @@ a.btn-outline-danger:active {
2483
2992
  }
2484
2993
  .g-xxl-0,
2485
2994
  .gx-xxl-0 {
2486
- --bs-gutter-x: 0;
2995
+ --bsi-gutter-x: 0;
2487
2996
  }
2488
2997
  .g-xxl-0,
2489
2998
  .gy-xxl-0 {
2490
- --bs-gutter-y: 0;
2999
+ --bsi-gutter-y: 0;
2491
3000
  }
2492
3001
  .g-xxl-1,
2493
3002
  .gx-xxl-1 {
2494
- --bs-gutter-x: 0.25rem;
3003
+ --bsi-gutter-x: 0.25rem;
2495
3004
  }
2496
3005
  .g-xxl-1,
2497
3006
  .gy-xxl-1 {
2498
- --bs-gutter-y: 0.25rem;
3007
+ --bsi-gutter-y: 0.25rem;
2499
3008
  }
2500
3009
  .g-xxl-2,
2501
3010
  .gx-xxl-2 {
2502
- --bs-gutter-x: 0.5rem;
3011
+ --bsi-gutter-x: 0.5rem;
2503
3012
  }
2504
3013
  .g-xxl-2,
2505
3014
  .gy-xxl-2 {
2506
- --bs-gutter-y: 0.5rem;
3015
+ --bsi-gutter-y: 0.5rem;
2507
3016
  }
2508
3017
  .g-xxl-3,
2509
3018
  .gx-xxl-3 {
2510
- --bs-gutter-x: 1rem;
3019
+ --bsi-gutter-x: 1rem;
2511
3020
  }
2512
3021
  .g-xxl-3,
2513
3022
  .gy-xxl-3 {
2514
- --bs-gutter-y: 1rem;
3023
+ --bsi-gutter-y: 1rem;
2515
3024
  }
2516
3025
  .g-xxl-4,
2517
3026
  .gx-xxl-4 {
2518
- --bs-gutter-x: 1.5rem;
3027
+ --bsi-gutter-x: 1.5rem;
2519
3028
  }
2520
3029
  .g-xxl-4,
2521
3030
  .gy-xxl-4 {
2522
- --bs-gutter-y: 1.5rem;
3031
+ --bsi-gutter-y: 1.5rem;
2523
3032
  }
2524
3033
  .g-xxl-5,
2525
3034
  .gx-xxl-5 {
2526
- --bs-gutter-x: 3rem;
3035
+ --bsi-gutter-x: 3rem;
2527
3036
  }
2528
3037
  .g-xxl-5,
2529
3038
  .gy-xxl-5 {
2530
- --bs-gutter-y: 3rem;
3039
+ --bsi-gutter-y: 3rem;
2531
3040
  }
2532
3041
  }
2533
3042
  .row.variable-gutters {
2534
3043
  margin-right: -12px;
2535
3044
  margin-left: -12px;
2536
- margin-right: -6px;
2537
- margin-left: -6px;
2538
3045
  }
2539
3046
  .row.variable-gutters > .col,
2540
3047
  .row.variable-gutters > [class*=col-] {
2541
3048
  padding-right: 12px;
2542
3049
  padding-left: 12px;
2543
3050
  }
3051
+ .row.variable-gutters {
3052
+ margin-right: -6px;
3053
+ margin-left: -6px;
3054
+ }
2544
3055
  .row.variable-gutters > .col,
2545
3056
  .row.variable-gutters > [class*=col-] {
2546
3057
  padding-right: 6px;
@@ -2603,9 +3114,9 @@ a.btn-outline-danger:active {
2603
3114
  }
2604
3115
 
2605
3116
  .row.row-column-border > [class^=col-] {
2606
- padding-top: var(--bs-spacing-l);
2607
- padding-bottom: var(--bs-spacing-l);
2608
- border-top: var(--bs-border-base) solid var(--bs-color-border-subtle);
3117
+ padding-top: var(--bsi-spacing-l);
3118
+ padding-bottom: var(--bsi-spacing-l);
3119
+ border-top: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
2609
3120
  }
2610
3121
  .row.row-column-border > [class^=col-]:first-child {
2611
3122
  border: none;
@@ -2617,23 +3128,23 @@ a.btn-outline-danger:active {
2617
3128
  padding-right: 0;
2618
3129
  }
2619
3130
  .row.row-column-menu-left > [class^=col-]:first-child {
2620
- padding: var(--bs-spacing-s) 0;
3131
+ padding: var(--bsi-spacing-s) 0;
2621
3132
  }
2622
3133
  .row.row-column-menu-right > [class^=col-]:last-child {
2623
- padding: var(--bs-spacing-s) 0;
3134
+ padding: var(--bsi-spacing-s) 0;
2624
3135
  }
2625
3136
  .row.row-card {
2626
- background-color: var(--bs-color-background-inverse);
3137
+ background-color: var(--bsi-color-background-inverse);
2627
3138
  }
2628
3139
  @media (min-width: 992px) {
2629
3140
  .row.row-column-border {
2630
3141
  margin-top: 1rem;
2631
- border-top: var(--bs-border-base) solid var(--bs-color-border-subtle);
3142
+ border-top: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
2632
3143
  }
2633
3144
  .row.row-column-border > [class^=col-] {
2634
3145
  padding: 3rem 3rem;
2635
3146
  border-top: none;
2636
- border-left: var(--bs-border-base) solid var(--bs-color-border-subtle);
3147
+ border-left: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
2637
3148
  }
2638
3149
  .row.row-column-border > [class^=col-]:first-child {
2639
3150
  border: none;
@@ -2679,40 +3190,40 @@ a.btn-outline-danger:active {
2679
3190
  }
2680
3191
  }
2681
3192
  .row.row-border h1 {
2682
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2683
- padding-bottom: var(--bs-spacing-s);
2684
- margin-bottom: var(--bs-spacing-s);
3193
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3194
+ padding-bottom: var(--bsi-spacing-s);
3195
+ margin-bottom: var(--bsi-spacing-s);
2685
3196
  }
2686
3197
  .row.row-border h2 {
2687
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2688
- padding-bottom: var(--bs-spacing-s);
2689
- margin-bottom: var(--bs-spacing-s);
3198
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3199
+ padding-bottom: var(--bsi-spacing-s);
3200
+ margin-bottom: var(--bsi-spacing-s);
2690
3201
  }
2691
3202
  .row.row-border h3 {
2692
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2693
- padding-bottom: var(--bs-spacing-s);
2694
- margin-bottom: var(--bs-spacing-s);
3203
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3204
+ padding-bottom: var(--bsi-spacing-s);
3205
+ margin-bottom: var(--bsi-spacing-s);
2695
3206
  }
2696
3207
  .row.row-border h4 {
2697
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2698
- padding-bottom: var(--bs-spacing-s);
2699
- margin-bottom: var(--bs-spacing-s);
3208
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3209
+ padding-bottom: var(--bsi-spacing-s);
3210
+ margin-bottom: var(--bsi-spacing-s);
2700
3211
  }
2701
3212
  .row.row-border h5 {
2702
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2703
- padding-bottom: var(--bs-spacing-s);
2704
- margin-bottom: var(--bs-spacing-s);
3213
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3214
+ padding-bottom: var(--bsi-spacing-s);
3215
+ margin-bottom: var(--bsi-spacing-s);
2705
3216
  }
2706
3217
  .row.row-border h6 {
2707
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2708
- padding-bottom: var(--bs-spacing-s);
2709
- margin-bottom: var(--bs-spacing-s);
3218
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3219
+ padding-bottom: var(--bsi-spacing-s);
3220
+ margin-bottom: var(--bsi-spacing-s);
2710
3221
  }
2711
3222
  @media (min-width: 576px) {
2712
3223
  .row.row-border {
2713
- border-bottom: var(--bs-border-base) solid var(--bs-color-border-subtle);
2714
- padding-bottom: var(--bs-spacing-s);
2715
- margin-bottom: var(--bs-spacing-s);
3224
+ border-bottom: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3225
+ padding-bottom: var(--bsi-spacing-s);
3226
+ margin-bottom: var(--bsi-spacing-s);
2716
3227
  }
2717
3228
  .row.row-border h1 {
2718
3229
  border: none;
@@ -2759,9 +3270,9 @@ a.btn-outline-danger:active {
2759
3270
  width: auto;
2760
3271
  }
2761
3272
  .sticky-wrapper.is-sticky.navbar-wrapper .navbar {
2762
- padding-top: var(--bs-spacing-s);
2763
- padding-bottom: var(--bs-spacing-s);
2764
- border-top: var(--bs-border-base) solid var(--bs-color-border-subtle);
3273
+ padding-top: var(--bsi-spacing-s);
3274
+ padding-bottom: var(--bsi-spacing-s);
3275
+ border-top: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
2765
3276
  }
2766
3277
  .sticky-wrapper.is-sticky.navbar-wrapper.sticky-expanded {
2767
3278
  z-index: auto;
@@ -2801,14 +3312,20 @@ a.btn-outline-danger:active {
2801
3312
  bottom: auto;
2802
3313
  }
2803
3314
 
2804
- @keyframes progress-bar-stripes {
2805
- 0% {
2806
- background-position-x: 16px;
2807
- }
3315
+ .progress {
3316
+ --bsi-progress-bg: var(--bsi-color-background-secondary-lighter);
3317
+ --bsi-progress-border-radius: var(--bsi-radius-smooth);
3318
+ --bsi-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
3319
+ --bsi-progress-label-color: var(--bsi-color-text-secondary);
3320
+ --bsi-progress-label-font-size: var(--bsi-label-font-size-xs);
3321
+ --bsi-progress-bar-transition: width 0.5s ease;
3322
+ --bsi-progress-bar-bg: var(--bsi-color-background-secondary);
3323
+ --bsi-progress-height: 4px;
2808
3324
  }
3325
+
2809
3326
  .progress-bar-striped {
2810
3327
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
2811
- background-size: var(--bs-progress-height) var(--bs-progress-height);
3328
+ background-size: var(--bsi-progress-height) var(--bsi-progress-height);
2812
3329
  }
2813
3330
 
2814
3331
  .progress-bar-animated {
@@ -2820,6 +3337,11 @@ a.btn-outline-danger:active {
2820
3337
  }
2821
3338
  }
2822
3339
 
3340
+ @keyframes progress-bar-stripes {
3341
+ 0% {
3342
+ background-position-x: 16px;
3343
+ }
3344
+ }
2823
3345
  @keyframes progressBarIndeterminate {
2824
3346
  0% {
2825
3347
  left: -5%;
@@ -2833,25 +3355,13 @@ a.btn-outline-danger:active {
2833
3355
  }
2834
3356
  }
2835
3357
  .progress {
2836
- --bs-progress-height: 16px;
2837
- --bs-progress-font-size: 0.75rem;
2838
- --bs-progress-bg: hsl(0, 0%, 90%);
2839
- --bs-progress-border-radius: 0;
2840
- --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
2841
- --bs-progress-bar-color: hsl(0, 0%, 100%);
2842
- --bs-progress-bar-bg: hsl(210, 100%, 40%);
2843
- --bs-progress-bar-transition: width 0.6s ease;
2844
3358
  display: flex;
2845
3359
  overflow: hidden;
2846
- font-size: var(--bs-progress-font-size);
2847
- background-color: var(--bs-progress-bg);
2848
- border-radius: var(--bs-progress-border-radius);
2849
- height: 4px;
3360
+ background-color: var(--bsi-progress-bg);
3361
+ border-radius: var(--bsi-progress-border-radius);
3362
+ height: var(--bsi-progress-height);
2850
3363
  box-shadow: none;
2851
3364
  }
2852
- .progress.progress-color {
2853
- background-color: hsl(210, 3%, 85%);
2854
- }
2855
3365
  .progress.progress-indeterminate {
2856
3366
  position: relative;
2857
3367
  }
@@ -2868,22 +3378,23 @@ a.btn-outline-danger:active {
2868
3378
  flex-direction: column;
2869
3379
  justify-content: center;
2870
3380
  overflow: hidden;
2871
- color: var(--bs-progress-bar-color);
2872
3381
  text-align: center;
2873
3382
  white-space: nowrap;
2874
- transition: var(--bs-progress-bar-transition);
2875
- background-color: hsl(210, 17%, 44%);
3383
+ transition: var(--bsi-progress-bar-transition);
2876
3384
  }
2877
3385
  @media (prefers-reduced-motion: reduce) {
2878
3386
  .progress-bar {
2879
3387
  transition: none;
2880
3388
  }
2881
3389
  }
3390
+ .progress-bar {
3391
+ background-color: var(--bsi-progress-bar-bg);
3392
+ }
2882
3393
 
2883
3394
  .progress-bar-label {
2884
3395
  text-align: right;
2885
- font-size: 0.75rem;
2886
- color: hsl(0, 0%, 10%);
3396
+ font-size: var(--bsi-progress-label-font-size);
3397
+ color: var(--bsi-progress-label-color);
2887
3398
  font-weight: 500;
2888
3399
  }
2889
3400
 
@@ -2893,55 +3404,50 @@ a.btn-outline-danger:active {
2893
3404
  bottom: 0;
2894
3405
  width: 100%;
2895
3406
  left: 0;
2896
- border-radius: 0 0 4px 4px;
3407
+ border-radius: 0 0 var(--bsi-progress-border-radius) var(--bsi-progress-border-radius);
2897
3408
  }
2898
3409
  .btn-progress .progress-bar {
2899
- height: 4px;
3410
+ height: var(--bsi-progress-height);
2900
3411
  }
2901
3412
 
2902
- @media (min-width: 576px) {
2903
- .progress-bar-label {
2904
- font-size: 0.75rem;
2905
- }
2906
- }
2907
3413
  body {
2908
- font-family: var(--bs-font-sans);
3414
+ font-family: var(--bsi-font-sans);
2909
3415
  }
2910
3416
 
2911
3417
  p,
2912
3418
  ul,
2913
3419
  ol,
2914
3420
  dl {
2915
- font-size: var(--bs-body-font-size);
2916
- line-height: var(--bs-body-line-height);
3421
+ font-size: var(--bsi-body-font-size);
3422
+ line-height: var(--bsi-body-leading);
2917
3423
  }
2918
3424
 
2919
3425
  caption,
2920
3426
  figcaption {
2921
- font-size: var(--bs-caption-font-size);
2922
- line-height: var(--bs-caption-line-height);
3427
+ font-size: var(--bsi-caption-font-size);
3428
+ line-height: var(--bsi-caption-leading);
2923
3429
  }
2924
3430
 
2925
3431
  b,
2926
3432
  strong {
2927
- font-weight: var(--bs-font-weight-strong);
3433
+ font-weight: var(--bsi-font-weight-strong);
2928
3434
  }
2929
3435
 
2930
3436
  mark,
2931
3437
  code {
2932
- padding: 0 var(--bs-spacing-3xs);
3438
+ padding: 0 var(--bsi-spacing-3xs);
2933
3439
  }
2934
3440
 
2935
3441
  mark {
2936
- background-color: var(--bs-highlight-background);
3442
+ background-color: var(--bsi-highlight-background);
2937
3443
  }
2938
3444
 
2939
3445
  pre,
2940
3446
  code,
2941
3447
  kbd,
2942
3448
  samp {
2943
- border-radius: var(--bs-radius-smooth);
2944
- font-family: var(--bs-font-mono);
3449
+ border-radius: var(--bsi-radius-smooth);
3450
+ font-family: var(--bsi-font-mono);
2945
3451
  }
2946
3452
 
2947
3453
  ins,
@@ -2949,18 +3455,18 @@ del {
2949
3455
  position: relative;
2950
3456
  display: flex;
2951
3457
  align-items: center;
2952
- padding: var(--bs-spacing-3xs) var(--bs-spacing-m);
2953
- font: var(--bs-body-font-size);
3458
+ padding: var(--bsi-spacing-3xs) var(--bsi-spacing-m);
3459
+ font: var(--bsi-body-font-size);
2954
3460
  text-decoration: none;
2955
3461
  }
2956
3462
 
2957
3463
  ins {
2958
- background-color: var(--bs-ins-background);
3464
+ background-color: var(--bsi-ins-background);
2959
3465
  text-decoration: none;
2960
3466
  }
2961
3467
 
2962
3468
  del {
2963
- background-color: var(--bs-del-background);
3469
+ background-color: var(--bsi-del-background);
2964
3470
  }
2965
3471
 
2966
3472
  del::before,
@@ -2979,57 +3485,57 @@ ins::before {
2979
3485
 
2980
3486
  kbd {
2981
3487
  margin: 0 2px;
2982
- padding: 2px var(--bs-spacing-3xs);
2983
- border: var(--bs-border-base) solid var(--bs-color-border-subtle);
2984
- background-color: var(--bs-color-background-secondary-lighter);
2985
- box-shadow: var(--bs-elevation-low), 0 2px 0 0 hsla(255, 0%, 100%, 0.7) inset;
2986
- color: var(--bs-color-text-secondary);
2987
- font-size: var(--bs-font-size-1);
2988
- font-weight: var(--bs-font-weight-solid);
3488
+ padding: 2px var(--bsi-spacing-3xs);
3489
+ border: var(--bsi-border-base) solid var(--bsi-color-border-subtle);
3490
+ background-color: var(--bsi-color-background-secondary-lighter);
3491
+ box-shadow: var(--bsi-elevation-low), 0 2px 0 0 hsla(255, 0%, 100%, 0.7) inset;
3492
+ color: var(--bsi-color-text-secondary);
3493
+ font-size: var(--bsi-font-size-1);
3494
+ font-weight: var(--bsi-font-weight-solid);
2989
3495
  white-space: nowrap;
2990
3496
  }
2991
3497
  kbd kbd {
2992
3498
  padding: 0;
2993
- font-size: var(--bs-code-font-size);
3499
+ font-size: var(--bsi-code-font-size);
2994
3500
  }
2995
3501
 
2996
3502
  small,
2997
3503
  .small {
2998
- font-size: var(--bs-caption-font-size);
3504
+ font-size: var(--bsi-caption-font-size);
2999
3505
  }
3000
3506
 
3001
3507
  .x-small {
3002
- font-size: var(--bs-font-size-1);
3508
+ font-size: var(--bsi-font-size-1);
3003
3509
  }
3004
3510
 
3005
3511
  h1,
3006
3512
  .h1 {
3007
- font-size: var(--bs-heading-1-font-size);
3513
+ font-size: var(--bsi-heading-1-font-size);
3008
3514
  }
3009
3515
 
3010
3516
  h2,
3011
3517
  .h2 {
3012
- font-size: var(--bs-heading-2-font-size);
3518
+ font-size: var(--bsi-heading-2-font-size);
3013
3519
  }
3014
3520
 
3015
3521
  h3,
3016
3522
  .h3 {
3017
- font-size: var(--bs-heading-3-font-size);
3523
+ font-size: var(--bsi-heading-3-font-size);
3018
3524
  }
3019
3525
 
3020
3526
  h4,
3021
3527
  .h4 {
3022
- font-size: var(--bs-heading-4-font-size);
3528
+ font-size: var(--bsi-heading-4-font-size);
3023
3529
  }
3024
3530
 
3025
3531
  h5,
3026
3532
  .h5 {
3027
- font-size: var(--bs-heading-5-font-size);
3533
+ font-size: var(--bsi-heading-5-font-size);
3028
3534
  }
3029
3535
 
3030
3536
  h6,
3031
3537
  .h6 {
3032
- font-size: var(--bs-heading-6-font-size);
3538
+ font-size: var(--bsi-heading-6-font-size);
3033
3539
  }
3034
3540
 
3035
3541
  h1,
@@ -3045,8 +3551,8 @@ h5,
3045
3551
  h6,
3046
3552
  .h6 {
3047
3553
  margin-top: 0;
3048
- margin-bottom: var(--bs-heading-spacing);
3049
- line-height: var(--bs-heading-line-height);
3554
+ margin-bottom: var(--bsi-heading-spacing);
3555
+ line-height: var(--bsi-heading-leading);
3050
3556
  }
3051
3557
  :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + h1, p + h1,
3052
3558
  :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h1,
@@ -3071,7 +3577,7 @@ p + .h5,
3071
3577
  p + h6,
3072
3578
  :is(h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6) + .h6,
3073
3579
  p + .h6 {
3074
- padding-top: var(--bs-spacing-s);
3580
+ padding-top: var(--bsi-spacing-s);
3075
3581
  }
3076
3582
 
3077
3583
  h1,
@@ -3080,7 +3586,7 @@ h3,
3080
3586
  .h1,
3081
3587
  .h2,
3082
3588
  .h3 {
3083
- font-weight: var(--bs-heading-font-weight);
3589
+ font-weight: var(--bsi-heading-font-weight);
3084
3590
  }
3085
3591
 
3086
3592
  h4,
@@ -3089,7 +3595,7 @@ h6,
3089
3595
  .h4,
3090
3596
  .h5,
3091
3597
  .h6 {
3092
- font-weight: var(--bs-heading-font-weight-weak);
3598
+ font-weight: var(--bsi-heading-font-weight-weak);
3093
3599
  }
3094
3600
 
3095
3601
  h1,
@@ -3099,37 +3605,37 @@ h1,
3099
3605
  }
3100
3606
 
3101
3607
  .font-serif {
3102
- font-family: var(--bs-font-serif) !important;
3608
+ font-family: var(--bsi-font-serif) !important;
3103
3609
  }
3104
3610
 
3105
3611
  .font-sans-serif {
3106
- font-family: var(--bs-font-sans) !important;
3612
+ font-family: var(--bsi-font-sans) !important;
3107
3613
  }
3108
3614
 
3109
3615
  .font-monospace {
3110
- font-family: var(--bs-font-mono) !important;
3616
+ font-family: var(--bsi-font-mono) !important;
3111
3617
  }
3112
3618
 
3113
3619
  .display-1 {
3114
- font-size: var(--bs-display-font-size);
3115
- font-weight: var(--bs-heading-font-weight);
3116
- line-height: var(--bs-heading-line-height);
3620
+ font-size: var(--bsi-display-font-size);
3621
+ font-weight: var(--bsi-heading-font-weight);
3622
+ line-height: var(--bsi-heading-leading);
3117
3623
  }
3118
3624
 
3119
3625
  .lead {
3120
- font-size: var(--bs-lead-font-size);
3121
- font-weight: var(--bs-lead-font-weight);
3122
- line-height: var(--bs-lead-line-height);
3626
+ font-size: var(--bsi-lead-font-size);
3627
+ font-weight: var(--bsi-lead-font-weight);
3628
+ line-height: var(--bsi-lead-leading);
3123
3629
  }
3124
3630
 
3125
3631
  blockquote,
3126
3632
  .blockquote {
3127
- margin: var(--bs-spacing-m) 0;
3128
- margin-left: var(--bs-spacin-inline-xs);
3129
- padding: var(--bs-spacing-s);
3130
- border-left: var(--bs-border-thick) solid var(--bs-border-color-secondary);
3131
- font-size: var(--bs-body-font-size);
3132
- line-height: var(--bs-body-line-height);
3633
+ margin: var(--bsi-spacing-m) 0;
3634
+ margin-left: var(--bsi-spacin-inline-xs);
3635
+ padding: var(--bsi-spacing-s);
3636
+ border-left: var(--bsi-border-thick) solid var(--bsi-border-color-secondary);
3637
+ font-size: var(--bsi-body-font-size);
3638
+ line-height: var(--bsi-body-leading);
3133
3639
  }
3134
3640
  blockquote > :last-child,
3135
3641
  .blockquote > :last-child {
@@ -3137,8 +3643,8 @@ blockquote > :last-child,
3137
3643
  }
3138
3644
  blockquote.text-end,
3139
3645
  .blockquote.text-end {
3140
- margin-right: var(--bs-spacin-inline-xs);
3141
- border-right: var(--bs-border-thick) solid var(--bs-border-color-secondary);
3646
+ margin-right: var(--bsi-spacin-inline-xs);
3647
+ border-right: var(--bsi-border-thick) solid var(--bsi-border-color-secondary);
3142
3648
  }
3143
3649
  blockquote.text-center, blockquote.text-end, blockquote.blockquote-simple,
3144
3650
  .blockquote.text-center,
@@ -3160,9 +3666,9 @@ blockquote.blockquote-simple,
3160
3666
  blockquote.blockquote-card,
3161
3667
  .blockquote.blockquote-card {
3162
3668
  margin-left: 0;
3163
- padding: var(--bs-spacing-m);
3164
- background-color: var(--bs-color-background-inverse);
3165
- box-shadow: var(--bs-elevation-low);
3669
+ padding: var(--bsi-spacing-m);
3670
+ background-color: var(--bsi-color-background-inverse);
3671
+ box-shadow: var(--bsi-elevation-low);
3166
3672
  }
3167
3673
  blockquote.blockquote-card .blockquote-footer,
3168
3674
  .blockquote.blockquote-card .blockquote-footer {
@@ -3175,53 +3681,53 @@ blockquote.blockquote-card .blockquote-footer:before,
3175
3681
  blockquote.blockquote-card.dark,
3176
3682
  .blockquote.blockquote-card.dark {
3177
3683
  border-left: none;
3178
- background-color: var(--bs-color-background-primary);
3179
- color: var(--bs-color-text-inverse);
3684
+ background-color: var(--bsi-color-background-primary);
3685
+ color: var(--bsi-color-text-inverse);
3180
3686
  }
3181
3687
  blockquote.blockquote-card.dark .blockquote-footer,
3182
3688
  .blockquote.blockquote-card.dark .blockquote-footer {
3183
- color: var(--bs-color-text-inverse);
3689
+ color: var(--bsi-color-text-inverse);
3184
3690
  }
3185
3691
 
3186
3692
  .blockquote-footer {
3187
3693
  margin-top: 0;
3188
- margin-bottom: var(--bs-spacing-s);
3189
- color: var(--bs-color-text-secondary);
3190
- font-size: var(--bs-label-font-size);
3694
+ margin-bottom: var(--bsi-spacing-s);
3695
+ color: var(--bsi-color-text-secondary);
3696
+ font-size: var(--bsi-label-font-size);
3191
3697
  }
3192
3698
  .blockquote-footer::before {
3193
3699
  content: "— ";
3194
3700
  }
3195
3701
  .bg-dark .blockquote-footer {
3196
- color: var(--bs-color-text-muted);
3702
+ color: var(--bsi-color-text-muted);
3197
3703
  }
3198
3704
 
3199
3705
  .initialism {
3200
- font-size: var(--bs-label-font-size-s);
3706
+ font-size: var(--bsi-label-font-size-s);
3201
3707
  text-transform: uppercase;
3202
3708
  }
3203
3709
 
3204
3710
  :root {
3205
- --bs-form-control-height: 2.5rem;
3206
- --bs-form-control-spacing: var(--bs-spacing-xxs);
3207
- --bs-form-control-background-color: var(--bs-color-background-inverse);
3208
- --bs-form-control-border-color: var(--bs-color-border-secondary);
3209
- --bs-form-control-border-radius: var(--bs-radius-smooth);
3210
- --bs-form-control-placeholder-color: var(--bs-color-text-muted);
3211
- --bs-form-control-label-color: var(--bs-color-text-secondary);
3212
- --bs-form-control-text-color: var(--bs-color-text-base);
3213
- --bs-form-control-font-size: var(--bs-body-font-size);
3214
- --bs-form-group-spacing-y: var(--bs-spacing-m);
3215
- --bs-form-checkbox-border-color: var(--bs-color-border-secondary);
3216
- --bs-form-checkbox-border-radius: var(--bs-radius-smooth);
3217
- --bs-form-checked-color: var(--bs-color-background-primary);
3711
+ --bsi-form-control-height: 2.5rem;
3712
+ --bsi-form-control-spacing: var(--bsi-spacing-xxs);
3713
+ --bsi-form-control-background-color: var(--bsi-color-background-inverse);
3714
+ --bsi-form-control-border-color: var(--bsi-color-border-secondary);
3715
+ --bsi-form-control-border-radius: var(--bsi-radius-smooth);
3716
+ --bsi-form-control-placeholder-color: var(--bsi-color-text-muted);
3717
+ --bsi-form-control-label-color: var(--bsi-color-text-base);
3718
+ --bsi-form-control-text-color: var(--bsi-color-text-secondary);
3719
+ --bsi-form-control-font-size: var(--bsi-body-font-size);
3720
+ --bsi-form-group-spacing-y: var(--bsi-spacing-m);
3721
+ --bsi-form-checkbox-border-color: var(--bsi-color-border-secondary);
3722
+ --bsi-form-checkbox-border-radius: var(--bsi-radius-smooth);
3723
+ --bsi-form-checked-color: var(--bsi-color-background-primary);
3218
3724
  }
3219
3725
 
3220
3726
  input[readonly],
3221
3727
  textarea[readonly],
3222
3728
  select[readonly] {
3223
- --bs-form-control-border-color: var(--bs-color-border-subtle);
3224
- --bs-form-control-background-color: var(--bs-color-background-muted);
3729
+ --bsi-form-control-border-color: var(--bsi-color-border-subtle);
3730
+ --bsi-form-control-background-color: var(--bsi-color-background-muted);
3225
3731
  cursor: not-allowed;
3226
3732
  }
3227
3733
 
@@ -3230,29 +3736,30 @@ textarea,
3230
3736
  select {
3231
3737
  display: block;
3232
3738
  width: 100%;
3233
- padding: var(--bs-form-control-spacing);
3234
- border: 1px solid var(--bs-form-control-border-color);
3235
- border-radius: var(--bs-form-control-border-radius);
3236
- background-color: var(--bs-form-control-background-color);
3237
- color: var(--bs-form-control-text-color);
3238
- font-size: var(--bs-form-control-font-size);
3739
+ padding: var(--bsi-form-control-spacing);
3740
+ border: 1px solid var(--bsi-form-control-border-color);
3741
+ border-radius: var(--bsi-form-control-border-radius);
3742
+ background-color: var(--bsi-form-control-background-color);
3743
+ color: var(--bsi-form-control-text-color);
3744
+ font-size: var(--bsi-form-control-font-size);
3239
3745
  }
3240
3746
  input.disabled, input:disabled,
3241
3747
  textarea.disabled,
3242
3748
  textarea:disabled,
3243
3749
  select.disabled,
3244
3750
  select:disabled {
3245
- border-color: var(--bs-color-border-disabled);
3751
+ border-color: var(--bsi-color-border-disabled);
3246
3752
  opacity: 1;
3247
- background-color: var(--bs-color-background-disabled);
3248
- color: var(--bs-color-text-disabled);
3753
+ background-color: var(--bsi-color-background-disabled);
3754
+ color: var(--bsi-color-text-disabled);
3249
3755
  }
3250
3756
 
3757
+ /* stylelint-disable-next-line no-duplicate-selectors */
3251
3758
  input:focus,
3252
3759
  textarea:focus {
3253
3760
  outline: 3px solid transparent;
3254
3761
  outline-offset: 3px;
3255
- box-shadow: 0 0 0 2px var(--bs-color-border-inverse), 0 0 0 5px var(--bs-color-outline-focus) !important;
3762
+ box-shadow: 0 0 0 2px var(--bsi-color-border-inverse), 0 0 0 5px var(--bsi-color-outline-focus) !important;
3256
3763
  }
3257
3764
 
3258
3765
  input::file-selector-button {
@@ -3290,7 +3797,7 @@ input::-webkit-date-and-time-value {
3290
3797
  select {
3291
3798
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='hsl%280, 0%, 15%%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
3292
3799
  background-repeat: no-repeat;
3293
- background-position: right var(--bs-form-control-spacing) center;
3800
+ background-position: right var(--bsi-form-control-spacing) center;
3294
3801
  background-size: 16px 12px;
3295
3802
  appearance: none;
3296
3803
  }
@@ -3316,6 +3823,9 @@ select:-moz-focusring {
3316
3823
  select option {
3317
3824
  font-weight: normal;
3318
3825
  }
3826
+ select {
3827
+ /* stylelint-disable-next-line no-duplicate-selectors */ /* TO DO check these styles */
3828
+ }
3319
3829
  select:disabled {
3320
3830
  opacity: 1;
3321
3831
  background-color: hsl(210, 3%, 85%);
@@ -3323,7 +3833,7 @@ select:disabled {
3323
3833
 
3324
3834
  textarea {
3325
3835
  height: auto;
3326
- font-size: var(--bs-body-font-size);
3836
+ font-size: var(--bsi-body-font-size);
3327
3837
  line-height: 1.5;
3328
3838
  }
3329
3839
 
@@ -3331,13 +3841,14 @@ label {
3331
3841
  display: inline-block;
3332
3842
  width: auto;
3333
3843
  max-width: 100%;
3334
- margin-bottom: var(--bs-spacing-xxs);
3335
- color: var(--bs-form-control-label-color);
3336
- font-size: var(--bs-label-font-size-s);
3337
- font-weight: var(--bs-font-weight-solid);
3338
- line-height: var(--bs-label-line-height);
3844
+ margin-bottom: var(--bsi-spacing-xxs);
3845
+ color: var(--bsi-form-control-label-color);
3846
+ font-size: var(--bsi-label-font-size-s);
3847
+ font-weight: var(--bsi-font-weight-solid);
3848
+ line-height: var(--bsi-label-leading);
3339
3849
  }
3340
3850
 
3851
+ /* stylelint-disable-next-line no-duplicate-selectors */
3341
3852
  input,
3342
3853
  textarea {
3343
3854
  outline: 0;
@@ -3353,34 +3864,26 @@ input[type=time] {
3353
3864
  }
3354
3865
 
3355
3866
  fieldset legend {
3356
- z-index: 1;
3357
- display: block;
3358
- width: auto;
3359
- max-width: 100%;
3360
- margin-bottom: 0;
3361
- padding: 0 var(--bs-form-input-spacing-x);
3362
- float: none;
3867
+ margin-bottom: var(--bsi-spacing-s);
3868
+ padding: 0 var(--bsi-form-input-spacing-x);
3363
3869
  background-color: transparent;
3364
- color: var(--bs-form-input-color);
3365
- font-size: 0.875rem;
3366
- font-weight: 700;
3367
- line-height: calc(2.5rem - 1px);
3368
- transition: 0.2s ease-out;
3369
- cursor: text;
3870
+ color: var(--bsi-form-control-text-color);
3871
+ font-size: var(--bsi-label-font-size-s);
3872
+ font-weight: var(--bsi-font-weight-solid);
3370
3873
  }
3371
3874
 
3372
3875
  ::placeholder {
3373
- color: var(--bs-form-control-placeholder-color);
3876
+ color: var(--bsi-form-control-placeholder-color);
3374
3877
  }
3375
3878
 
3376
3879
  input::-webkit-datetime-edit {
3377
- background-color: var(--bs-color-background-primary-lighter);
3378
- color: var(--bs-form-contro-text-color);
3880
+ background-color: var(--bsi-color-background-primary-lighter);
3881
+ color: var(--bsi-form-contro-text-color);
3379
3882
  }
3380
3883
 
3381
3884
  .form-group {
3382
3885
  position: relative;
3383
- margin-bottom: var(--bs-form-group-spacing-y);
3886
+ margin-bottom: var(--bsi-form-group-spacing-y);
3384
3887
  }
3385
3888
  .form-group label.input-symbol-label:not(.active) {
3386
3889
  left: 2.25rem;
@@ -3394,8 +3897,8 @@ input::-webkit-datetime-edit {
3394
3897
  }
3395
3898
 
3396
3899
  .form-text {
3397
- margin: var(--bs-spacing-xxs) 0;
3398
- color: var(--bs-color-text-secondary);
3900
+ margin: var(--bsi-spacing-xxs) 0;
3901
+ color: var(--bsi-color-text-secondary);
3399
3902
  }
3400
3903
 
3401
3904
  .form-group.active .form-file-name {
@@ -3406,7 +3909,7 @@ input::-webkit-datetime-edit {
3406
3909
  display: none;
3407
3910
  width: 100%;
3408
3911
  margin-top: 0.25rem;
3409
- color: var(--bs-color-text-warning);
3912
+ color: var(--bsi-color-text-warning);
3410
3913
  font-size: 0.75rem;
3411
3914
  }
3412
3915
 
@@ -3417,7 +3920,7 @@ input::-webkit-datetime-edit {
3417
3920
  }
3418
3921
 
3419
3922
  .input-group .input-group-text .btn {
3420
- border-radius: var(--bs-form-control-border-radius) 0 0 var(--bs-form-control-border-radius);
3923
+ border-radius: var(--bsi-form-control-border-radius) 0 0 var(--bsi-form-control-border-radius);
3421
3924
  }
3422
3925
  .input-group .input-group-append {
3423
3926
  margin-left: 0;
@@ -3427,21 +3930,21 @@ input::-webkit-datetime-edit {
3427
3930
  padding-top: 0;
3428
3931
  padding-bottom: 0;
3429
3932
  border-bottom: 1px solid hsl(210, 17%, 44%);
3430
- border-radius: 0 var(--bs-form-control-border-radius) var(--bs-form-control-border-radius) 0;
3933
+ border-radius: 0 var(--bsi-form-control-border-radius) var(--bsi-form-control-border-radius) 0;
3431
3934
  }
3432
3935
 
3433
3936
  .form-check {
3434
3937
  position: relative;
3435
- margin-bottom: var(--bs-spacing-s);
3436
- padding-left: 0;
3437
3938
  }
3438
3939
  .form-check + .form-check {
3439
- margin-top: var(--bs-spacing-s);
3940
+ margin-top: var(--bsi-spacing-s);
3440
3941
  }
3441
3942
  .form-check [type=checkbox],
3442
3943
  .form-check [type=radio] {
3443
3944
  position: absolute;
3444
- height: 100%;
3945
+ top: 9px;
3946
+ left: 9px;
3947
+ width: auto;
3445
3948
  margin-top: 0;
3446
3949
  margin-left: 0;
3447
3950
  opacity: 0;
@@ -3449,19 +3952,17 @@ input::-webkit-datetime-edit {
3449
3952
  .form-check [type=checkbox] + label,
3450
3953
  .form-check [type=radio] + label {
3451
3954
  position: relative;
3452
- display: flex;
3453
- align-items: center;
3454
- padding-left: 26px;
3455
- font-size: var(--bs-label-font-size);
3456
- font-weight: var(--bs-font-weight-solid);
3457
- line-height: 1;
3955
+ margin-bottom: 0;
3956
+ padding-left: 28px;
3957
+ font-size: var(--bsi-label-font-size);
3958
+ font-weight: var(--bsi-font-weight-solid);
3458
3959
  cursor: pointer;
3459
3960
  user-select: none;
3460
3961
  }
3461
3962
  @media (min-width: 576px) {
3462
3963
  .form-check [type=checkbox] + label,
3463
3964
  .form-check [type=radio] + label {
3464
- font-size: var(--bs-label-font-size-m);
3965
+ font-size: var(--bsi-label-font-size-l);
3465
3966
  }
3466
3967
  }
3467
3968
  .form-check input[type=checkbox] + label::after,
@@ -3472,13 +3973,13 @@ input::-webkit-datetime-edit {
3472
3973
  content: "";
3473
3974
  border-width: 2px;
3474
3975
  border-style: solid;
3475
- transition: all var(--bs-transition-instant) ease-out;
3976
+ transition: all var(--bsi-transition-instant) ease-out;
3476
3977
  }
3477
3978
  .form-check input[type=checkbox] + label::after {
3478
3979
  top: 0;
3479
3980
  width: 20px;
3480
3981
  height: 20px;
3481
- border-radius: var(--bs-form-control-border-radius);
3982
+ border-radius: var(--bsi-form-control-border-radius);
3482
3983
  }
3483
3984
  .form-check input[type=checkbox]:checked + label::before {
3484
3985
  top: 3px;
@@ -3487,7 +3988,7 @@ input::-webkit-datetime-edit {
3487
3988
  height: 12px;
3488
3989
  border-width: 2px;
3489
3990
  border-style: solid;
3490
- border-color: transparent var(--bs-color-border-inverse) var(--bs-color-border-inverse) transparent;
3991
+ border-color: transparent var(--bsi-color-border-inverse) var(--bsi-color-border-inverse) transparent;
3491
3992
  opacity: 1;
3492
3993
  transform: rotate(40deg);
3493
3994
  transform-origin: 100% 100%;
@@ -3495,12 +3996,12 @@ input::-webkit-datetime-edit {
3495
3996
  }
3496
3997
  .form-check input[type=checkbox]:checked + label::after {
3497
3998
  z-index: 0;
3498
- border-color: var(--bs-form-checked-color);
3499
- background-color: var(--bs-form-checked-color);
3999
+ border-color: var(--bsi-form-checked-color);
4000
+ background-color: var(--bsi-form-checked-color);
3500
4001
  }
3501
4002
  .form-check input[type=checkbox]:not(:checked) + label::after {
3502
4003
  z-index: 0;
3503
- border-color: var(--bs-form-checkbox-border-color);
4004
+ border-color: var(--bsi-form-checkbox-border-color);
3504
4005
  background-color: transparent;
3505
4006
  }
3506
4007
  .form-check input[type=checkbox]:not(:checked) + label::before {
@@ -3515,12 +4016,12 @@ input::-webkit-datetime-edit {
3515
4016
  cursor: not-allowed;
3516
4017
  }
3517
4018
  .form-check input[type=checkbox]:disabled:not(:checked) + label::after {
3518
- border-color: var(--bs-color-border-disabled);
4019
+ border-color: var(--bsi-color-border-disabled);
3519
4020
  background-color: transparent;
3520
4021
  }
3521
4022
  .form-check input[type=checkbox]:disabled:checked + label::after {
3522
- border-color: var(--bs-color-border-disabled);
3523
- background-color: var(--bs-color-border-disabled);
4023
+ border-color: var(--bsi-color-border-disabled);
4024
+ background-color: var(--bsi-color-border-disabled);
3524
4025
  }
3525
4026
  .form-check input[type=radio] + label::after, .form-check input[type=radio] + label::before {
3526
4027
  position: absolute;
@@ -3532,11 +4033,11 @@ input::-webkit-datetime-edit {
3532
4033
  height: 20px;
3533
4034
  border-width: 2px;
3534
4035
  border-style: solid;
3535
- border-radius: var(--bs-radius-rounded);
3536
- transition: all var(--bs-transition-instant) ease-out;
4036
+ border-radius: var(--bsi-radius-rounded);
4037
+ transition: all var(--bsi-transition-instant) ease-out;
3537
4038
  }
3538
4039
  .form-check input[type=radio]:not(:checked) + label::after, .form-check input[type=radio]:not(:checked) + label::before {
3539
- border-color: var(var(--bs-form-checkbox-border-color));
4040
+ border-color: var(--bsi-form-checkbox-border-color);
3540
4041
  }
3541
4042
  .form-check input[type=radio]:not(:checked) + label:after {
3542
4043
  z-index: -1;
@@ -3544,25 +4045,30 @@ input::-webkit-datetime-edit {
3544
4045
  }
3545
4046
  .form-check input[type=radio]:checked + label::after {
3546
4047
  z-index: 0;
3547
- border-color: var(--bs-form-checked-color);
3548
- background-color: var(--bs-form-checked-color);
4048
+ border-color: var(--bsi-form-checked-color);
4049
+ background-color: var(--bsi-form-checked-color);
3549
4050
  transform: scale(0.64);
3550
4051
  }
3551
4052
  .form-check input[type=radio]:checked + label::before {
3552
- border-color: var(--bs-form-checked-color);
4053
+ border-color: var(--bsi-form-checked-color);
3553
4054
  }
3554
4055
  .form-check input[type=radio]:disabled + label {
3555
4056
  cursor: not-allowed;
3556
4057
  }
3557
4058
  .form-check input[type=radio]:disabled:not(:checked) + label::after, .form-check input[type=radio]:disabled:not(:checked) + label::before {
3558
- border-color: var(--bs-color-border-disabled);
4059
+ border-color: var(--bsi-color-border-disabled);
3559
4060
  }
3560
4061
  .form-check input[type=radio]:disabled:checked + label::after {
3561
- border-color: var(--bs-color-border-disabled);
3562
- background-color: var(--bs-color-border-disabled);
4062
+ border-color: var(--bsi-color-border-disabled);
4063
+ background-color: var(--bsi-color-border-disabled);
3563
4064
  }
3564
4065
  .form-check input[type=radio]:disabled:checked + label::before {
3565
- border-color: var(--bs-color-border-disabled);
4066
+ border-color: var(--bsi-color-border-disabled);
4067
+ }
4068
+ .form-check .form-text {
4069
+ display: block;
4070
+ margin-bottom: 0.5rem;
4071
+ padding-right: 3.25rem;
3566
4072
  }
3567
4073
  .form-check.form-check-group {
3568
4074
  margin-bottom: 1rem;
@@ -3571,6 +4077,7 @@ input::-webkit-datetime-edit {
3571
4077
  }
3572
4078
  .form-check.form-check-group input[type=checkbox] + label,
3573
4079
  .form-check.form-check-group input[type=radio] + label {
4080
+ position: static;
3574
4081
  padding-right: 3.25rem;
3575
4082
  padding-left: 0;
3576
4083
  }
@@ -3586,17 +4093,12 @@ input::-webkit-datetime-edit {
3586
4093
  .form-check.form-check-group input[type=radio]:checked + label::before {
3587
4094
  right: 0;
3588
4095
  }
3589
- .form-check.form-check-group .form-text {
3590
- display: block;
3591
- margin-bottom: 0.5rem;
3592
- padding-right: 3.25rem;
3593
- }
3594
4096
  .form-check.form-check-group input.semi-checked:not(:checked) + label::before {
3595
4097
  right: 4px;
3596
4098
  left: auto;
3597
4099
  }
3598
4100
  .form-check input.semi-checked:not(:checked) + label::before {
3599
- top: 9px;
4101
+ top: 12px;
3600
4102
  left: 4px;
3601
4103
  width: 12px;
3602
4104
  height: 2px;
@@ -3604,14 +4106,21 @@ input::-webkit-datetime-edit {
3604
4106
  border-style: none;
3605
4107
  border-color: transparent;
3606
4108
  opacity: 1;
3607
- background: var(--bs-color-background-inverse);
4109
+ background: var(--bsi-color-background-inverse);
3608
4110
  transform: none;
3609
4111
  backface-visibility: hidden;
3610
4112
  }
3611
4113
  .form-check input.semi-checked:not(:checked) + label::after {
3612
4114
  z-index: 0;
3613
- border-color: var(--bs-form-checked-color);
3614
- background-color: var(--bs-form-checked-color);
4115
+ border-color: var(--bsi-form-checked-color);
4116
+ background-color: var(--bsi-form-checked-color);
4117
+ }
4118
+
4119
+ .form-check-inline {
4120
+ display: inline-block;
4121
+ }
4122
+ .form-check-inline:not(:last-child) {
4123
+ margin-right: var(--bsi-spacing-m);
3615
4124
  }
3616
4125
 
3617
4126
  @media (prefers-reduced-motion: reduce) {
@@ -3632,7 +4141,7 @@ input::-webkit-datetime-edit {
3632
4141
  .form-check [type=checkbox]:focus + label,
3633
4142
  .form-check [type=radio]:focus + label {
3634
4143
  border-color: hsl(0, 0%, 0%) !important;
3635
- box-shadow: 0 0 0 2px var(--bs-color-border-inverse), 0 0 0 5px var(--bs-color-outline-focus) !important;
4144
+ box-shadow: 0 0 0 2px var(--bsi-color-border-inverse), 0 0 0 5px var(--bsi-color-outline-focus) !important;
3636
4145
  outline: 3px solid transparent !important;
3637
4146
  outline-offset: 3px !important;
3638
4147
  }
@@ -3646,10 +4155,10 @@ input::-webkit-datetime-edit {
3646
4155
 
3647
4156
  .form-control-plaintext {
3648
4157
  border: 0;
3649
- --bs-form-control-border-color: transparent;
3650
- --bs-form-control-border-radius: 0;
3651
- --bs-form-control-background-color: transparent;
3652
- --bs-form-control-spacing: 0;
4158
+ --bsi-form-control-border-color: transparent;
4159
+ --bsi-form-control-border-radius: 0;
4160
+ --bsi-form-control-background-color: transparent;
4161
+ --bsi-form-control-spacing: 0;
3653
4162
  }
3654
4163
  .form-control-plaintext:focus {
3655
4164
  outline: 0;
@@ -3666,31 +4175,28 @@ input::-webkit-datetime-edit {
3666
4175
  }
3667
4176
  .form-control:disabled {
3668
4177
  cursor: not-allowed;
3669
- background: var(--bs-color-background-disabled);
4178
+ background: var(--bsi-color-background-disabled);
3670
4179
  border: 0;
3671
- color: var(--bs-color-text-disabled);
4180
+ color: var(--bsi-color-text-disabled);
3672
4181
  }
3673
4182
  .was-validated .form-control:valid, .form-control.is-valid {
3674
4183
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23008055' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E");
3675
4184
  }
3676
4185
  .was-validated .form-control:invalid, .form-control.is-invalid {
3677
4186
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23cc334d' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E");
3678
- border-color: var(--bs-color-border-danger);
3679
- }
3680
- .was-validated .form-control:invalid[type=number], .form-control.is-invalid[type=number] {
3681
- background-size: 80px 30%;
4187
+ border-color: var(--bsi-color-border-danger);
3682
4188
  }
3683
4189
  .form-control.warning {
3684
4190
  background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%0A%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M2%2012C2%206.47715%206.47715%202%2012%202C14.6522%202%2017.1957%203.05357%2019.0711%204.92893C20.9464%206.8043%2022%209.34784%2022%2012C22%2017.5228%2017.5228%2022%2012%2022C6.47715%2022%202%2017.5228%202%2012ZM3%2012C3%2016.9706%207.02944%2021%2012%2021C16.9706%2021%2021%2016.9706%2021%2012C21%207.02944%2016.9706%203%2012%203C7.02944%203%203%207.02944%203%2012ZM11.5%2014.2V5.7H12.7V14.2H11.5ZM12.6%2018.3V16.5H11.4V18.3H12.6Z%22/%3E%0A%3C/svg%3E") no-repeat;
3685
- border-color: var(--bs-color-border-warning);
4191
+ border-color: var(--bsi-color-border-warning);
3686
4192
  }
3687
4193
  .form-control.is-valid ~ .warning-feedback {
3688
4194
  display: block;
3689
4195
  }
3690
4196
 
3691
4197
  .form-control-sm {
3692
- --bs-form-control-spacing: var(--bs-spacing-xxs) var(--bs-spacing-3xs);
3693
- --bs-form-control-font-size: var(--bs-label-font-size);
4198
+ --bsi-form-control-spacing: var(--bsi-spacing-xxs) var(--bsi-spacing-3xs);
4199
+ --bsi-form-control-font-size: var(--bsi-label-font-size);
3694
4200
  }
3695
4201
  .form-control-sm::file-selector-button {
3696
4202
  padding: 0.25rem 0.5rem;
@@ -3699,7 +4205,7 @@ input::-webkit-datetime-edit {
3699
4205
  }
3700
4206
 
3701
4207
  .form-control-lg {
3702
- --bs-form-control-font-size: var(--bs-lead-font-size);
4208
+ --bsi-form-control-font-size: var(--bsi-lead-font-size);
3703
4209
  }
3704
4210
  .form-control-lg::file-selector-button {
3705
4211
  padding: 0.5rem 1rem;
@@ -3742,15 +4248,15 @@ textarea.form-control-lg {
3742
4248
 
3743
4249
  .password-icon {
3744
4250
  position: absolute;
3745
- top: calc(var(--bs-form-control-spacing) * 4.5);
3746
- right: var(--bs-form-control-spacing);
4251
+ top: calc(var(--bsi-form-control-spacing) * 4.5);
4252
+ right: var(--bsi-form-control-spacing);
3747
4253
  z-index: 10;
3748
- padding: 0 var(--bs-spacing-xxs);
3749
- background-color: var(--bs-form-control-background-color);
4254
+ padding: 0 var(--bsi-spacing-xxs);
4255
+ background-color: var(--bsi-form-control-background-color);
3750
4256
  cursor: pointer;
3751
4257
  }
3752
4258
  .password-icon .icon {
3753
- fill: var(--bs-icon-primary);
4259
+ fill: var(--bsi-icon-primary);
3754
4260
  }
3755
4261
 
3756
4262
  .password-meter {
@@ -3771,6 +4277,106 @@ textarea.form-control-lg {
3771
4277
  display: block;
3772
4278
  }
3773
4279
 
4280
+ .input-number {
4281
+ position: relative;
4282
+ }
4283
+ .input-number.input-number-adaptive {
4284
+ width: fit-content;
4285
+ }
4286
+ .input-number.input-number-adaptive input[type=number] {
4287
+ width: auto;
4288
+ transition: all va(--bsi-transition-instant);
4289
+ }
4290
+ .input-number input[type=number] {
4291
+ appearance: textfield;
4292
+ border-top-right-radius: var(--bsi-form-control-border-radius) !important;
4293
+ border-bottom-right-radius: var(--bsi-form-control-border-radius) !important;
4294
+ }
4295
+ .input-number input[type=number]::-webkit-inner-spin-button, .input-number input[type=number]::-webkit-outer-spin-button {
4296
+ -webkit-appearance: none;
4297
+ }
4298
+ .input-number input[type=number]::-ms-clear {
4299
+ display: none;
4300
+ }
4301
+ .input-number input[type=number]:not(:disabled) {
4302
+ border-left: 1px solid var(--bsi-form-control-border-color);
4303
+ }
4304
+ .input-number input[type=number][readonly] ~ .input-group-text .input-number-add,
4305
+ .input-number input[type=number][readonly] ~ .input-group-text .input-number-sub {
4306
+ display: none;
4307
+ }
4308
+ .input-number.disabled button {
4309
+ display: none;
4310
+ pointer-events: none;
4311
+ }
4312
+ .input-number.disabled button:hover {
4313
+ cursor: not-allowed;
4314
+ }
4315
+ .input-number .input-group-text.align-buttons {
4316
+ position: absolute;
4317
+ top: 0;
4318
+ bottom: 0;
4319
+ right: 0;
4320
+ z-index: 10;
4321
+ padding-right: var(--bsi-form-control-spacing);
4322
+ border: none;
4323
+ background: transparent;
4324
+ }
4325
+ .is-invalid + .input-number .input-group-text.align-buttons {
4326
+ bottom: 0;
4327
+ }
4328
+ .input-number .input-group-text button {
4329
+ position: relative;
4330
+ transition: opacity 0.1s;
4331
+ padding: 0;
4332
+ border: none;
4333
+ height: 50%;
4334
+ width: 16px;
4335
+ background: transparent;
4336
+ }
4337
+ .input-number .input-group-text button:after {
4338
+ position: absolute;
4339
+ top: 50%;
4340
+ left: 50%;
4341
+ transform: translateX(-50%) translateY(-50%);
4342
+ content: "";
4343
+ width: 0;
4344
+ height: 0;
4345
+ border-style: solid;
4346
+ }
4347
+ .input-number .input-group-text button:focus.input-number-add:after, .input-number .input-group-text button:hover.input-number-add:after {
4348
+ border-color: transparent transparent var(--bsi-form-control-border-color) transparent;
4349
+ }
4350
+ .input-number .input-group-text button:focus.input-number-sub:after, .input-number .input-group-text button:hover.input-number-sub:after {
4351
+ border-color: var(--bsi-form-control-border-color) transparent transparent transparent;
4352
+ }
4353
+ .input-number .input-group-text button:focus:not([data-focus-mouse=true]) {
4354
+ opacity: 1;
4355
+ }
4356
+ .input-number .input-group-text button.input-number-add:after {
4357
+ border-width: 0 5px 6px 5px;
4358
+ border-color: transparent transparent var(--bsi-form-control-border-color) transparent;
4359
+ }
4360
+ .input-number .input-group-text button.input-number-sub:after {
4361
+ border-width: 6px 5px 0 5px;
4362
+ border-color: var(--bsi-form-control-border-color) transparent transparent transparent;
4363
+ }
4364
+ .input-number .input-group-text button:hover {
4365
+ cursor: pointer;
4366
+ }
4367
+
4368
+ .input-number .input-group-text + input[type=number] {
4369
+ border-left: 0;
4370
+ }
4371
+
4372
+ @media (min-width: 1200px) {
4373
+ .input-number button {
4374
+ opacity: 0;
4375
+ }
4376
+ .input-number:hover button {
4377
+ opacity: 1;
4378
+ }
4379
+ }
3774
4380
  .input-group {
3775
4381
  position: relative;
3776
4382
  display: flex;
@@ -3805,11 +4411,11 @@ textarea.form-control-lg {
3805
4411
  .input-group-text {
3806
4412
  display: flex;
3807
4413
  align-items: center;
3808
- padding: var(--bs-form-control-spacing) 0 var(--bs-form-control-spacing) var(--bs-form-control-spacing);
3809
- font-size: var(--bs-body-font-size);
3810
- font-weight: var(--bs-font-weight-solid);
3811
- color: var(--bs-form-inpunt-text-color);
3812
- background-color: var(--bs-form-control-background-color);
4414
+ padding: var(--bsi-form-control-spacing) 0 var(--bsi-form-control-spacing) var(--bsi-form-control-spacing);
4415
+ font-size: var(--bsi-body-font-size);
4416
+ font-weight: var(--bsi-font-weight-solid);
4417
+ color: var(--bsi-form-inpunt-text-color);
4418
+ background-color: var(--bsi-form-control-background-color);
3813
4419
  text-align: center;
3814
4420
  white-space: nowrap;
3815
4421
  border-top-width: 1px;
@@ -3817,13 +4423,13 @@ textarea.form-control-lg {
3817
4423
  border-right-width: 0;
3818
4424
  border-bottom-width: 1px;
3819
4425
  border-style: solid;
3820
- border-color: var(--bs-form-control-border-color);
3821
- border-radius: var(--bs-form-control-border-radius);
4426
+ border-color: var(--bsi-form-control-border-color);
4427
+ border-radius: var(--bsi-form-control-border-radius);
3822
4428
  }
3823
4429
  .disabled .input-group-text {
3824
- background-color: var(--bs-color-background-disabled);
3825
- border-color: var(--bs-color-border-disabled);
3826
- color: var(--bs-color-text-disabled);
4430
+ background-color: var(--bsi-color-background-disabled);
4431
+ border-color: var(--bsi-color-border-disabled);
4432
+ color: var(--bsi-color-text-disabled);
3827
4433
  }
3828
4434
 
3829
4435
  .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),
@@ -3857,7 +4463,7 @@ textarea.form-control-lg {
3857
4463
  font-size: 0.75rem;
3858
4464
  }
3859
4465
  .form-feedback.just-validate-error-label {
3860
- color: var(--bs-color-text-danger);
4466
+ color: var(--bsi-color-text-danger);
3861
4467
  }
3862
4468
 
3863
4469
  .input-group-text:has(~ [data-focus-mouse=true]:not(.btn)),
@@ -3873,7 +4479,7 @@ button:has(~ [data-focus-mouse=true]:not(.btn)),
3873
4479
  .is-invalid ~ .input-group-text,
3874
4480
  button:has(~ .is-invalid),
3875
4481
  .is-invalid + button {
3876
- border-color: var(--bs-color-border-danger) !important;
4482
+ border-color: var(--bsi-color-border-danger) !important;
3877
4483
  }
3878
4484
 
3879
4485
  .sr-only-justvalidate-bi {
@@ -3881,7 +4487,7 @@ button:has(~ .is-invalid),
3881
4487
  }
3882
4488
 
3883
4489
  .just-validate-success-field {
3884
- border-color: var(--bs-color-border-success) !important;
4490
+ border-color: var(--bsi-color-border-success) !important;
3885
4491
  padding-right: calc(1.5em + 0.75rem) !important;
3886
4492
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23008055' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E");
3887
4493
  }
@@ -3890,7 +4496,7 @@ button:has(~ .is-invalid),
3890
4496
  .just-validate-success-field ~ .input-group-text,
3891
4497
  button:has(~ .just-validate-success-field),
3892
4498
  .just-validate-success-field + button {
3893
- border-color: var(--bs-color-border-success);
4499
+ border-color: var(--bsi-color-border-success);
3894
4500
  }
3895
4501
 
3896
4502
  .just-validate-success-field + .input-group-text.align-buttons,
@@ -3919,16 +4525,16 @@ textarea.just-validate-success-field {
3919
4525
  border-bottom-width: 1px;
3920
4526
  }
3921
4527
 
3922
- input[type=checkbox].just-validate-success-field + label,
3923
- input[type=radio].just-validate-success-field + label {
3924
- color: var(--bs-color-text-success);
4528
+ input[type=checkbox].is-invalid,
4529
+ input[type=radio].is-invalid {
4530
+ --bsi-form-checkbox-border-color: var(--bsi-color-border-danger);
3925
4531
  }
3926
4532
 
3927
4533
  select.is-invalid {
3928
- border: 1px solid var(--bs-color-border-danger);
4534
+ border: 1px solid var(--bsi-color-border-danger);
3929
4535
  }
3930
4536
  select.just-validate-success-field {
3931
- border: 1px solid var(--bs-color-border-success);
4537
+ border: 1px solid var(--bsi-color-border-success);
3932
4538
  }
3933
4539
 
3934
4540
  .position-absolute {
@@ -3944,27 +4550,27 @@ select.just-validate-success-field {
3944
4550
  }
3945
4551
 
3946
4552
  .bg-muted {
3947
- --bs-bg-opacity: 1;
4553
+ --bsi-bg-opacity: 1;
3948
4554
  background-color: hsl(0, 0%, 96%) !important;
3949
4555
  }
3950
4556
 
3951
4557
  .bg-danger {
3952
- --bs-bg-opacity: 1;
4558
+ --bsi-bg-opacity: 1;
3953
4559
  background-color: hsl(350, 60%, 50%) !important;
3954
4560
  }
3955
4561
 
3956
4562
  .bg-warning {
3957
- --bs-bg-opacity: 1;
4563
+ --bsi-bg-opacity: 1;
3958
4564
  background-color: hsl(36, 100%, 30%) !important;
3959
4565
  }
3960
4566
 
3961
4567
  .bg-success {
3962
- --bs-bg-opacity: 1;
4568
+ --bsi-bg-opacity: 1;
3963
4569
  background-color: hsl(160, 100%, 25%) !important;
3964
4570
  }
3965
4571
 
3966
4572
  .border-start {
3967
- border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
4573
+ border-left: var(--bsi-border-base) var(--bsi-border-style) var(--bsi-border-color) !important;
3968
4574
  }
3969
4575
 
3970
4576
  .border-start-0 {
@@ -3972,7 +4578,7 @@ select.just-validate-success-field {
3972
4578
  }
3973
4579
 
3974
4580
  .border-end {
3975
- border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;
4581
+ border-right: var(--bsi-border-base) var(--bsi-border-style) var(--bsi-border-color) !important;
3976
4582
  }
3977
4583
 
3978
4584
  .border-end-0 {
@@ -3980,127 +4586,126 @@ select.just-validate-success-field {
3980
4586
  }
3981
4587
 
3982
4588
  .border-white {
3983
- --bs-border-opacity: 1;
3984
- border-color: white !important;
4589
+ --bsi-border-color: white;
3985
4590
  }
3986
4591
 
3987
4592
  .text-primary {
3988
- --bs-text-opacity: 1;
3989
- color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;
4593
+ --bsi-text-opacity: 1;
4594
+ color: rgba(var(--bsi-primary-rgb), var(--bsi-text-opacity)) !important;
3990
4595
  }
3991
4596
 
3992
4597
  .text-secondary {
3993
- --bs-text-opacity: 1;
3994
- color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;
4598
+ --bsi-text-opacity: 1;
4599
+ color: hsl(210, 33%, 28%) !important;
3995
4600
  }
3996
4601
 
3997
4602
  .text-success {
3998
- --bs-text-opacity: 1;
3999
- color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;
4603
+ --bsi-text-opacity: 1;
4604
+ color: rgba(var(--bsi-success-rgb), var(--bsi-text-opacity)) !important;
4000
4605
  }
4001
4606
 
4002
4607
  .text-info {
4003
- --bs-text-opacity: 1;
4004
- color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;
4608
+ --bsi-text-opacity: 1;
4609
+ color: rgba(var(--bsi-info-rgb), var(--bsi-text-opacity)) !important;
4005
4610
  }
4006
4611
 
4007
4612
  .text-warning {
4008
- --bs-text-opacity: 1;
4009
- color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;
4613
+ --bsi-text-opacity: 1;
4614
+ color: rgba(var(--bsi-warning-rgb), var(--bsi-text-opacity)) !important;
4010
4615
  }
4011
4616
 
4012
4617
  .text-danger {
4013
- --bs-text-opacity: 1;
4014
- color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;
4618
+ --bsi-text-opacity: 1;
4619
+ color: rgba(var(--bsi-danger-rgb), var(--bsi-text-opacity)) !important;
4015
4620
  }
4016
4621
 
4017
4622
  .text-light {
4018
- --bs-text-opacity: 1;
4019
- color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;
4623
+ --bsi-text-opacity: 1;
4624
+ color: rgba(var(--bsi-light-rgb), var(--bsi-text-opacity)) !important;
4020
4625
  }
4021
4626
 
4022
4627
  .text-dark {
4023
- --bs-text-opacity: 1;
4024
- color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;
4628
+ --bsi-text-opacity: 1;
4629
+ color: rgba(var(--bsi-dark-rgb), var(--bsi-text-opacity)) !important;
4025
4630
  }
4026
4631
 
4027
4632
  .text-black {
4028
- --bs-text-opacity: 1;
4029
- color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;
4633
+ --bsi-text-opacity: 1;
4634
+ color: rgba(var(--bsi-black-rgb), var(--bsi-text-opacity)) !important;
4030
4635
  }
4031
4636
 
4032
4637
  .text-white {
4033
- --bs-text-opacity: 1;
4034
- color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;
4638
+ --bsi-text-opacity: 1;
4639
+ color: rgba(var(--bsi-white-rgb), var(--bsi-text-opacity)) !important;
4035
4640
  }
4036
4641
 
4037
4642
  .text-100 {
4038
- --bs-text-opacity: 1;
4039
- color: rgba(var(--bs-100-rgb), var(--bs-text-opacity)) !important;
4643
+ --bsi-text-opacity: 1;
4644
+ color: rgba(var(--bsi-100-rgb), var(--bsi-text-opacity)) !important;
4040
4645
  }
4041
4646
 
4042
4647
  .text-200 {
4043
- --bs-text-opacity: 1;
4044
- color: rgba(var(--bs-200-rgb), var(--bs-text-opacity)) !important;
4648
+ --bsi-text-opacity: 1;
4649
+ color: rgba(var(--bsi-200-rgb), var(--bsi-text-opacity)) !important;
4045
4650
  }
4046
4651
 
4047
4652
  .text-300 {
4048
- --bs-text-opacity: 1;
4049
- color: rgba(var(--bs-300-rgb), var(--bs-text-opacity)) !important;
4653
+ --bsi-text-opacity: 1;
4654
+ color: rgba(var(--bsi-300-rgb), var(--bsi-text-opacity)) !important;
4050
4655
  }
4051
4656
 
4052
4657
  .text-400 {
4053
- --bs-text-opacity: 1;
4054
- color: rgba(var(--bs-400-rgb), var(--bs-text-opacity)) !important;
4658
+ --bsi-text-opacity: 1;
4659
+ color: rgba(var(--bsi-400-rgb), var(--bsi-text-opacity)) !important;
4055
4660
  }
4056
4661
 
4057
4662
  .text-500 {
4058
- --bs-text-opacity: 1;
4059
- color: rgba(var(--bs-500-rgb), var(--bs-text-opacity)) !important;
4663
+ --bsi-text-opacity: 1;
4664
+ color: rgba(var(--bsi-500-rgb), var(--bsi-text-opacity)) !important;
4060
4665
  }
4061
4666
 
4062
4667
  .text-600 {
4063
- --bs-text-opacity: 1;
4064
- color: rgba(var(--bs-600-rgb), var(--bs-text-opacity)) !important;
4668
+ --bsi-text-opacity: 1;
4669
+ color: rgba(var(--bsi-600-rgb), var(--bsi-text-opacity)) !important;
4065
4670
  }
4066
4671
 
4067
4672
  .text-700 {
4068
- --bs-text-opacity: 1;
4069
- color: rgba(var(--bs-700-rgb), var(--bs-text-opacity)) !important;
4673
+ --bsi-text-opacity: 1;
4674
+ color: rgba(var(--bsi-700-rgb), var(--bsi-text-opacity)) !important;
4070
4675
  }
4071
4676
 
4072
4677
  .text-800 {
4073
- --bs-text-opacity: 1;
4074
- color: rgba(var(--bs-800-rgb), var(--bs-text-opacity)) !important;
4678
+ --bsi-text-opacity: 1;
4679
+ color: rgba(var(--bsi-800-rgb), var(--bsi-text-opacity)) !important;
4075
4680
  }
4076
4681
 
4077
4682
  .text-900 {
4078
- --bs-text-opacity: 1;
4079
- color: rgba(var(--bs-900-rgb), var(--bs-text-opacity)) !important;
4683
+ --bsi-text-opacity: 1;
4684
+ color: rgba(var(--bsi-900-rgb), var(--bsi-text-opacity)) !important;
4080
4685
  }
4081
4686
 
4082
4687
  .text-body {
4083
- --bs-text-opacity: 1;
4084
- color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;
4688
+ --bsi-text-opacity: 1;
4689
+ color: rgba(var(--bsi-body-color-rgb), var(--bsi-text-opacity)) !important;
4085
4690
  }
4086
4691
 
4087
4692
  .text-muted {
4088
- --bs-text-opacity: 1;
4693
+ --bsi-text-opacity: 1;
4089
4694
  color: hsl(210, 17%, 44%) !important;
4090
4695
  }
4091
4696
 
4092
4697
  .text-black-50 {
4093
- --bs-text-opacity: 1;
4698
+ --bsi-text-opacity: 1;
4094
4699
  color: rgba(0, 0, 0, 0.5) !important;
4095
4700
  }
4096
4701
 
4097
4702
  .text-white-50 {
4098
- --bs-text-opacity: 1;
4703
+ --bsi-text-opacity: 1;
4099
4704
  color: rgba(255, 255, 255, 0.5) !important;
4100
4705
  }
4101
4706
 
4102
4707
  .text-reset {
4103
- --bs-text-opacity: 1;
4708
+ --bsi-text-opacity: 1;
4104
4709
  color: inherit !important;
4105
4710
  }
4106
4711
 
@@ -4108,6 +4713,10 @@ select.just-validate-success-field {
4108
4713
  display: none !important;
4109
4714
  }
4110
4715
 
4716
+ .flex-column {
4717
+ flex-direction: column !important;
4718
+ }
4719
+
4111
4720
  @media (min-width: 576px) {
4112
4721
  .m-sm-0 {
4113
4722
  margin: 0 !important;
@@ -4115,6 +4724,9 @@ select.just-validate-success-field {
4115
4724
  .d-sm-none {
4116
4725
  display: none !important;
4117
4726
  }
4727
+ .flex-sm-column {
4728
+ flex-direction: column !important;
4729
+ }
4118
4730
  }
4119
4731
  @media (min-width: 768px) {
4120
4732
  .m-md-0 {
@@ -4123,6 +4735,9 @@ select.just-validate-success-field {
4123
4735
  .d-md-none {
4124
4736
  display: none !important;
4125
4737
  }
4738
+ .flex-md-column {
4739
+ flex-direction: column !important;
4740
+ }
4126
4741
  }
4127
4742
  @media (min-width: 992px) {
4128
4743
  .m-lg-0 {
@@ -4131,6 +4746,9 @@ select.just-validate-success-field {
4131
4746
  .d-lg-none {
4132
4747
  display: none !important;
4133
4748
  }
4749
+ .flex-lg-column {
4750
+ flex-direction: column !important;
4751
+ }
4134
4752
  }
4135
4753
  @media (min-width: 1200px) {
4136
4754
  .m-xl-0 {
@@ -4139,6 +4757,9 @@ select.just-validate-success-field {
4139
4757
  .d-xl-none {
4140
4758
  display: none !important;
4141
4759
  }
4760
+ .flex-xl-column {
4761
+ flex-direction: column !important;
4762
+ }
4142
4763
  }
4143
4764
  @media (min-width: 1400px) {
4144
4765
  .m-xxl-0 {
@@ -4147,153 +4768,86 @@ select.just-validate-success-field {
4147
4768
  .d-xxl-none {
4148
4769
  display: none !important;
4149
4770
  }
4771
+ .flex-xxl-column {
4772
+ flex-direction: column !important;
4773
+ }
4150
4774
  }
4151
4775
  @media print {
4152
4776
  .d-print-none {
4153
4777
  display: none !important;
4154
4778
  }
4155
4779
  }
4156
- :host {
4157
- display: block;
4780
+ .password-icon {
4781
+ top: calc(var(--bsi-form-control-spacing) * 5);
4782
+ --bsi-icon-default: var(--bsi-icon-primary);
4158
4783
  }
4159
4784
 
4160
- .password-icon {
4161
- top: calc(var(--bs-form-control-spacing) * 5);
4162
- --bs-icon-default: var(--bs-icon-primary);
4785
+ .is-invalid + .input-group-text.align-buttons {
4786
+ bottom: 0 !important;
4163
4787
  }`;
4164
4788
 
4789
+ var ItInput_1;
4165
4790
  registerTranslation(translation);
4166
- let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedComponent)) {
4791
+ let ItInput = ItInput_1 = class ItInput extends FormControl {
4167
4792
  constructor() {
4168
4793
  super(...arguments);
4169
- this.internals = this.attachInternals();
4170
- this.slotted = false;
4171
- this.invalid = false;
4172
- this.customValidation = false;
4173
- this.required = false;
4174
- this.validationText = '';
4175
- this.label = '';
4176
- this.labelHidden = false;
4794
+ this._slotPrepend = null;
4795
+ this._slotAppend = null;
4796
+ /**
4797
+ * The type of input. Works the same as a native `<input>` element, but only a subset of types are supported. Defaults
4798
+ * to `text`.
4799
+ */
4177
4800
  this.type = 'text';
4178
- this.name = '';
4801
+ /** If you want number-input to be adaptive in width */
4802
+ this.adaptive = false;
4803
+ /** If you want label to be hidden. */
4804
+ this.labelHidden = false;
4805
+ /** Placeholder text to show as a hint when the input is empty. */
4179
4806
  this.placeholder = '';
4807
+ /** The input's help text. */
4180
4808
  this.supportText = '';
4181
- this.disabled = false;
4809
+ /** If you want the input to be displayed as plaintext. */
4182
4810
  this.plaintext = false;
4811
+ /** If the input is read-only. */
4183
4812
  this.readonly = false;
4813
+ /** If your input is of type 'password' and you want to display a strength meter */
4184
4814
  this.passwordStrengthMeter = false;
4815
+ /** If your input is of type 'password' and you want to show password suggestions. */
4185
4816
  this.suggestions = false;
4186
- this.minlength = -1;
4187
- this.maxlength = -1;
4188
4817
  this._passwordVisible = false;
4189
4818
  this._strengthInfos = '';
4190
4819
  this._score = 0;
4191
- this._value = ''; // from validity mixin
4192
- this._touched = false; // from validity mixin
4193
- this.validityMessage = ''; // from validity mixin
4194
- }
4195
- static get formAssociated() {
4196
- return true;
4197
- }
4198
- get value() {
4199
- if (this._inputElement) {
4200
- return this._inputElement.value;
4201
- }
4202
- return this._value;
4203
- }
4204
- set value(value) {
4205
- const oldValue = this._value;
4206
- this._value = value;
4207
- this.internals.setFormValue(value); // <- Associa il valore al form
4208
- // make sure that lit-element updates the right properties
4209
- this.requestUpdate('value', oldValue);
4210
- // we set the value directly on the input (when available)
4211
- // so that programatic manipulation updates the UI correctly
4212
- if (this._inputElement && this._inputElement.value !== value) {
4213
- this._inputElement.value = value;
4214
- }
4215
- }
4216
- // Getter pubblico per accedere all'input
4217
- get inputElement() {
4218
- return this.shadowRoot?.querySelector('input');
4219
- }
4220
- _handleFormdata(event) {
4221
- // Add name and value to the form's submission data if it's not disabled.
4222
- if (!this.disabled) {
4223
- const { formData } = event;
4224
- formData.append(this.name, this._value);
4225
- }
4226
- }
4227
- _handleInput(e) {
4228
- const input = e.target;
4229
- this.value = input.value;
4230
- if (this.passwordStrengthMeter) {
4231
- this._checkPasswordStrength(input.value);
4232
- }
4233
- this.dispatchEvent(new CustomEvent('on-input', {
4234
- detail: { value: input.value, el: input },
4235
- bubbles: true,
4236
- composed: true,
4237
- }));
4238
4820
  }
4239
- checkValidity() {
4240
- if (!this.customValidation) {
4241
- const inputValid = this._inputElement ? this._inputElement.checkValidity() : true; // this._inputElement.checkValidity() è la validazione del browser
4242
- this._checkValidity({
4243
- [VALIDATION_STATUS.INVALID]: this.$t('validityInvalid'),
4244
- [VALIDATION_STATUS.ERROR_REQUIRED]: this.$t('validityRequired'),
4245
- [VALIDATION_STATUS.PATTERN]: this.$t('validityPattern'),
4246
- [VALIDATION_STATUS.MINLENGTH]: this.$t('validityMinlength'),
4247
- [VALIDATION_STATUS.MAXLENGTH]: this.$t('validityMaxlength'),
4248
- }, inputValid);
4821
+ get label() {
4822
+ if (this.labelElements.length > 0) {
4823
+ return this.labelElements[0].innerText.trim();
4249
4824
  }
4825
+ return '';
4250
4826
  }
4251
- _handleBlur() {
4252
- super._handleBlur();
4253
- this.checkValidity();
4827
+ get slotted() {
4828
+ return this._slotPrepend || this._slotAppend;
4254
4829
  }
4255
4830
  firstUpdated() {
4256
- // this.addFocus(this._inputElement); //NON serve per il momento perche sfruttiamo :focus-visible. Per gli input focus-visible si attiva anche al click perchè è il browser che lo gestisce
4257
- const iconSlot = this.shadowRoot?.querySelector('slot[name="icon"]');
4258
- const appendSlot = this.shadowRoot?.querySelector('slot[name="append"]');
4259
- iconSlot?.addEventListener('slotchange', () => {
4831
+ // this.addFocus(this.inputElement); //NON serve per il momento perche sfruttiamo :focus-visible. Per gli input focus-visible si attiva anche al click perchè è il browser che lo gestisce
4832
+ this._slotPrepend = this.querySelector('[slot="prepend"]');
4833
+ this._slotAppend = this.querySelector('[slot="append"]');
4834
+ this._slotPrepend?.addEventListener('slotchange', () => {
4260
4835
  this.requestUpdate();
4261
4836
  });
4262
- appendSlot?.addEventListener('slotchange', () => {
4837
+ this._slotAppend?.addEventListener('slotchange', () => {
4263
4838
  this.requestUpdate();
4264
4839
  });
4265
4840
  }
4266
4841
  connectedCallback() {
4267
4842
  super.connectedCallback?.();
4268
- /* così quando si scrive <it-input value="ciao"></it-input>, this.value viene impostato con 'ciao' */
4269
- const attrValue = this.getAttribute('value');
4270
- if (attrValue !== null) {
4271
- this.value = attrValue;
4272
- }
4273
4843
  if (this.type === 'password' && this.minlength < 0) {
4274
4844
  this.minlength = 8; // set default minlength for password
4275
4845
  }
4276
- requestAnimationFrame(() => {
4277
- this.dispatchEvent(new CustomEvent('input-ready', { bubbles: true, detail: { el: this.inputElement } }));
4278
- });
4846
+ this._handleReady();
4279
4847
  }
4280
- // protected override update(changedProperties: Map<string | number | symbol, unknown>): void {
4281
- // if (changedProperties.has('value') || (changedProperties.has('required') && this.required)) {
4282
- // this.updateComplete.then(() => {
4283
- // this.checkValidity();
4284
- // });
4285
- // }
4286
- // super.update(changedProperties);
4287
- // }
4288
4848
  updated(changedProperties) {
4289
4849
  super.updated?.(changedProperties);
4290
- if (this.customValidation) {
4291
- this.setCustomValidity(this.validationText);
4292
- }
4293
- if (this.invalid) {
4294
- const message = this.validationText?.length > 0 ? this.validationText : (this.validityMessage ?? 'Campo non valido');
4295
- this.internals.setValidity({ customError: this.invalid }, message);
4296
- }
4850
+ // logger
4297
4851
  if (this.passwordStrengthMeter && this.type !== 'password') {
4298
4852
  this.logger.warn("The strength-meter property is enabled, but type isn't password. Please, remove strength-meter property.");
4299
4853
  }
@@ -4301,13 +4855,24 @@ let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedCompone
4301
4855
  this.logger.warn("The suggestions property is enabled, but type isn't password. Please, remove suggestions this property.");
4302
4856
  }
4303
4857
  if (!this.label || this.label?.length === 0) {
4304
- this.logger.warn(`Label is required to ensure accessibility. Please, define a label for <it-input name="${this.name}" ... /> . Set attribute label-hidden="true" if you don't want to show label.`);
4858
+ this.logger.warn(`Label is required to ensure accessibility. Please, define a label for <it-input name="${this.name}" id="${this.id}" ... /> . Set attribute label-hidden="true" if you don't want to show label.`);
4859
+ }
4860
+ }
4861
+ _handleInput(e) {
4862
+ this.value = this.inputElement.value;
4863
+ if (this.value === '00') {
4864
+ this.value = '0';
4865
+ this.inputElement.value = '0';
4866
+ }
4867
+ if (this.passwordStrengthMeter) {
4868
+ this._checkPasswordStrength(this.inputElement.value);
4305
4869
  }
4870
+ super._handleInput(e);
4306
4871
  }
4307
4872
  _togglePasswordVisibility() {
4308
4873
  this._passwordVisible = !this._passwordVisible;
4309
- if (this._inputElement) {
4310
- this._inputElement.type = this._passwordVisible ? 'text' : 'password';
4874
+ if (this.inputElement) {
4875
+ this.inputElement.type = this._passwordVisible ? 'text' : 'password';
4311
4876
  }
4312
4877
  }
4313
4878
  _checkPasswordStrength(value) {
@@ -4348,6 +4913,28 @@ let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedCompone
4348
4913
  }
4349
4914
  this._strengthInfos = text;
4350
4915
  }
4916
+ static _cleanFloat(num) {
4917
+ return parseFloat(num.toPrecision(15));
4918
+ }
4919
+ _inputNumberIncDec(v) {
4920
+ const step = typeof this.step === 'number' ? this.step : Number(this.step) || 1;
4921
+ const value = typeof this.value === 'number' ? this.value : Number(this.value) || 0;
4922
+ const min = typeof this.min === 'number' ? this.min : Number(this.min);
4923
+ const max = typeof this.max === 'number' ? this.max : Number(this.max);
4924
+ const _v = v * step;
4925
+ const newValue = ItInput_1._cleanFloat(value + _v);
4926
+ if (newValue > max || newValue < min) ;
4927
+ else {
4928
+ const _value = newValue.toString();
4929
+ this.value = _value;
4930
+ this.inputElement.dispatchEvent(new Event('blur', { bubbles: true }));
4931
+ this.inputElement.dispatchEvent(new Event('change', { bubbles: true }));
4932
+ const liveRegion = this.shadowRoot?.querySelector(`#${this._id}-live-region`);
4933
+ if (liveRegion) {
4934
+ liveRegion.textContent = `${_value}`;
4935
+ }
4936
+ }
4937
+ }
4351
4938
  _renderTogglePasswordButton() {
4352
4939
  // Solo se type=password
4353
4940
  if (this.type === 'password') {
@@ -4400,7 +4987,7 @@ let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedCompone
4400
4987
  _renderpasswordStrengthMeter() {
4401
4988
  if (this.type === 'password' && this.passwordStrengthMeter) {
4402
4989
  const perc = this._score < 0 ? 0 : this._score;
4403
- const color = this._value?.length === 0 ? 'muted' : scoreColor(this._score);
4990
+ const color = this.value?.length === 0 ? 'muted' : scoreColor(this._score);
4404
4991
  return html `<div class="password-strength-meter">
4405
4992
  ${this._renderSuggestions()}
4406
4993
 
@@ -4433,9 +5020,9 @@ let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedCompone
4433
5020
  }
4434
5021
  return nothing;
4435
5022
  }
4436
- _renderInput(supportTextId) {
4437
- const ariaDescribedBy = this.composeClass(this.supportText?.length > 0 ? supportTextId : '', this.passwordStrengthMeter ? `strengthMeterInfo_${this._id}` : '', this._ariaAttributes['aria-describedby']?.length > 0 ? this._ariaAttributes['aria-describedby'] : '', this.validityMessage?.length > 0 ? `invalid-feedback-${this._id}` : '');
4438
- const inputClasses = this.composeClass(this.plaintext ? 'form-control-plaintext' : 'form-control', this.size ? `form-control-${this.size}` : '', this.invalid ? 'is-invalid' : '', !this.invalid && this._touched ? 'just-validate-success-field' : '');
5023
+ _renderInput(supportTextId, invalid, validityMessage, showValidation) {
5024
+ const ariaDescribedBy = this.composeClass(this.supportText?.length > 0 ? supportTextId : '', this.passwordStrengthMeter ? `strengthMeterInfo_${this._id}` : '', this._ariaAttributes['aria-describedby']?.length > 0 ? this._ariaAttributes['aria-describedby'] : '', showValidation && validityMessage?.length > 0 ? `invalid-feedback-${this._id}` : '');
5025
+ const inputClasses = this.composeClass('it-form__control', this.plaintext ? 'form-control-plaintext' : 'form-control', this.size ? `form-control-${this.size}` : '', showValidation && invalid ? 'is-invalid' : '', showValidation && !invalid && !this.readonly ? 'just-validate-success-field' : '');
4439
5026
  let inputRender;
4440
5027
  if (this.type === 'textarea') {
4441
5028
  inputRender = html `
@@ -4443,139 +5030,151 @@ let ItInput = class ItInput extends ValidityMixin(FormMixin(BaseLocalizedCompone
4443
5030
  part="textarea focusable"
4444
5031
  ${setAttributes(this._ariaAttributes)}
4445
5032
  aria-describedby=${ifDefined(ariaDescribedBy || undefined)}
4446
- ?aria-invalid=${this.invalid}
5033
+ aria-invalid=${ifDefined(invalid ? 'true' : undefined)}
4447
5034
  @input="${this._handleInput}"
4448
5035
  @blur=${this._handleBlur}
4449
5036
  @focus=${this._handleFocus}
4450
5037
  @click=${this._handleClick}
4451
5038
  @change=${this._handleChange}
5039
+ @invalid=${this._handleInvalid}
4452
5040
  id="${this._id}"
4453
5041
  name="${this.name}"
4454
5042
  ?disabled=${this.disabled}
4455
5043
  ?readonly=${this.readonly}
4456
5044
  ?required=${this.required}
4457
- .value="${this._value}"
5045
+ minlength=${ifDefined(this.minlength)}
5046
+ maxlength=${ifDefined(this.maxlength)}
5047
+ pattern=${ifDefined(this.pattern)}
5048
+ ?formNoValidate=${this.customValidation}
5049
+ .value="${live(this.value)}"
4458
5050
  placeholder=${ifDefined(this.placeholder || undefined)}
4459
5051
  class="${inputClasses}"
4460
5052
  ></textarea>
4461
5053
  `;
4462
5054
  }
4463
5055
  else {
5056
+ let style = null;
5057
+ if (this.type === 'number' && this.adaptive) {
5058
+ style = `width: calc(${this.value.toString().length}ch + 70px);`;
5059
+ }
4464
5060
  inputRender = html `
4465
5061
  <input
4466
5062
  part="input focusable"
4467
5063
  ${setAttributes(this._ariaAttributes)}
4468
5064
  aria-describedby=${ifDefined(ariaDescribedBy || undefined)}
4469
- ?aria-invalid=${this.invalid}
5065
+ aria-invalid=${ifDefined(invalid ? 'true' : undefined)}
4470
5066
  @input="${this._handleInput}"
4471
5067
  @blur=${this._handleBlur}
4472
5068
  @focus=${this._handleFocus}
4473
5069
  @click=${this._handleClick}
4474
5070
  @change=${this._handleChange}
5071
+ @invalid=${this._handleInvalid}
4475
5072
  type="${this.type}"
4476
5073
  id="${this._id}"
4477
5074
  name="${this.name}"
4478
5075
  ?disabled=${this.disabled}
4479
5076
  ?readonly=${this.readonly}
4480
5077
  ?required=${this.required}
4481
- .value="${this._value}"
5078
+ minlength=${ifDefined(this.minlength)}
5079
+ maxlength=${ifDefined(this.maxlength)}
5080
+ min=${ifDefined(this.min)}
5081
+ max=${ifDefined(this.max)}
5082
+ step=${ifDefined(this.step)}
5083
+ autocomplete="off"
5084
+ pattern=${ifDefined(this.pattern)}
5085
+ ?formNoValidate=${this.customValidation}
5086
+ .value="${live(this.value)}"
4482
5087
  placeholder=${ifDefined(this.placeholder || undefined)}
4483
5088
  class="${inputClasses}"
5089
+ style=${ifDefined(style)}
4484
5090
  />${this._renderTogglePasswordButton()}
4485
5091
  `;
4486
5092
  }
4487
- inputRender = html `
4488
- ${inputRender}
4489
- <div
4490
- role="alert"
4491
- id="invalid-feedback-${this._id}"
4492
- class="invalid-feedback form-feedback form-text form-feedback just-validate-error-label"
4493
- ?hidden=${!(this.validityMessage?.length > 0)}
4494
- >
4495
- <span class="visually-hidden">${this.label}: </span>${this.validityMessage}
4496
- </div>
4497
- `;
4498
5093
  return inputRender;
4499
5094
  }
4500
5095
  // Render the UI as a function of component state
4501
5096
  render() {
4502
5097
  const supportTextId = `${this._id}-support-text`;
4503
5098
  const supportTextRender = html ` ${when(this.supportText, () => html ` <small class="form-text" id="${supportTextId}">${this.supportText}</small> `)}`;
5099
+ const showValidation = this.formControlController.submittedOnce || this.customValidation; // true; // this._touched || this.customValidation;
5100
+ const validityMessage = (showValidation ? this.validationMessage : '') ?? '';
5101
+ const invalid = validityMessage?.length > 0 || (!this.customValidation && this.inputElement?.checkValidity() === false);
5102
+ const validityMessageRender = html `<div
5103
+ role="alert"
5104
+ id="invalid-feedback-${this._id}"
5105
+ class="invalid-feedback form-feedback form-text form-feedback just-validate-error-label"
5106
+ ?hidden=${!(validityMessage?.length > 0)}
5107
+ >
5108
+ <span class="visually-hidden">${this.label}: </span>${validityMessage}
5109
+ </div>`;
4504
5110
  return html `
4505
5111
  <div class="form-group" part="input-wrapper">
4506
5112
  <label
4507
5113
  for="${ifDefined(this._id || undefined)}"
4508
5114
  part="label"
4509
5115
  class="${this.composeClass('active', this.labelHidden ? 'visually-hidden' : '')}"
4510
- >${this.label}</label
4511
- >
4512
-
4513
- ${when(this.slotted, () => html ` <div class="input-group">
4514
- <span class="input-group-text">
4515
- <slot name="icon" @slotchange=${() => this.requestUpdate()}></slot
4516
- ></span>
4517
- ${this._renderInput(supportTextId)}
4518
- <div class="input-group-append">
4519
- <slot name="append" @slotchange=${() => this.requestUpdate()}></slot>
4520
- </div>
5116
+ ><slot name="label"></slot
5117
+ ></label>
5118
+
5119
+ ${when(this.slotted || this.type === 'number', () => html `<div
5120
+ class="${this.composeClass('input-group ', this.type === 'number' ? 'input-number' : '', this.type === 'number' && this.adaptive ? 'input-number-adaptive' : '', this.disabled ? 'disabled' : '', this.readonly ? 'readonly' : '')}"
5121
+ >
5122
+ ${when(this._slotPrepend, () => html ` <span class="input-group-text">
5123
+ <slot name="prepend" @slotchange=${() => this.requestUpdate()}></slot
5124
+ ></span>`)}
5125
+ ${this._renderInput(supportTextId, invalid, validityMessage, showValidation)}
5126
+ ${when(this.type === 'number', () => html `<span class="input-group-text align-buttons flex-column">
5127
+ <button
5128
+ class="input-number-add"
5129
+ @click=${() => this._inputNumberIncDec(1)}
5130
+ ?disabled=${this.disabled || this.readonly}
5131
+ >
5132
+ <span class="visually-hidden">${this.$t('increaseValue')}</span>
5133
+ </button>
5134
+ <button
5135
+ class="input-number-sub"
5136
+ @click=${() => this._inputNumberIncDec(-1)}
5137
+ ?disabled=${this.disabled || this.readonly}
5138
+ >
5139
+ <span class="visually-hidden">${this.$t('decreaseValue')}</span>
5140
+ </button>
5141
+ <div aria-live="polite" class="visually-hidden" id="${this._id}-live-region"></div>
5142
+ </span>`)}
5143
+ ${when(this._slotAppend, () => html ` <div class="input-group-append">
5144
+ <slot name="append" @slotchange=${() => this.requestUpdate()}></slot>
5145
+ </div>`)}
4521
5146
  </div>
4522
- ${supportTextRender} ${this._renderpasswordStrengthMeter()}`, () => html ` ${this._renderInput(supportTextId)} ${supportTextRender} ${this._renderpasswordStrengthMeter()}`)}
5147
+ ${validityMessageRender} ${supportTextRender} ${this._renderpasswordStrengthMeter()}`, () => html ` ${this._renderInput(supportTextId, invalid, validityMessage, showValidation)} ${validityMessageRender}
5148
+ ${supportTextRender} ${this._renderpasswordStrengthMeter()}`)}
4523
5149
  </div>
4524
5150
  `;
4525
5151
  }
4526
5152
  };
4527
5153
  ItInput.styles = styles;
4528
5154
  __decorate([
4529
- property(),
4530
- __metadata("design:type", Object)
4531
- ], ItInput.prototype, "internals", void 0);
4532
- __decorate([
4533
- property({ type: Boolean }),
4534
- __metadata("design:type", Object)
4535
- ], ItInput.prototype, "slotted", void 0);
4536
- __decorate([
4537
- property({ type: Boolean, reflect: true }) // from validity mixin
4538
- ,
4539
- __metadata("design:type", Object)
4540
- ], ItInput.prototype, "invalid", void 0);
4541
- __decorate([
4542
- property({ type: Boolean, reflect: true, attribute: 'custom-validation' }) // from validity mixin
4543
- ,
5155
+ state(),
4544
5156
  __metadata("design:type", Object)
4545
- ], ItInput.prototype, "customValidation", void 0);
5157
+ ], ItInput.prototype, "_slotPrepend", void 0);
4546
5158
  __decorate([
4547
- property({ type: Boolean, reflect: true }) // from validity mixin
4548
- ,
5159
+ state(),
4549
5160
  __metadata("design:type", Object)
4550
- ], ItInput.prototype, "required", void 0);
5161
+ ], ItInput.prototype, "_slotAppend", void 0);
4551
5162
  __decorate([
4552
- property({ attribute: 'validity-message' }),
5163
+ property({ type: String }),
4553
5164
  __metadata("design:type", String)
4554
- ], ItInput.prototype, "validationText", void 0);
4555
- __decorate([
4556
- query('input'),
4557
- __metadata("design:type", HTMLInputElement)
4558
- ], ItInput.prototype, "_inputElement", void 0);
5165
+ ], ItInput.prototype, "type", void 0);
4559
5166
  __decorate([
4560
- property({ type: String }),
5167
+ property(),
4561
5168
  __metadata("design:type", Object)
4562
5169
  ], ItInput.prototype, "size", void 0);
4563
5170
  __decorate([
4564
- property({ type: String }),
5171
+ property({ type: Boolean }),
4565
5172
  __metadata("design:type", Object)
4566
- ], ItInput.prototype, "label", void 0);
5173
+ ], ItInput.prototype, "adaptive", void 0);
4567
5174
  __decorate([
4568
5175
  property({ type: Boolean, attribute: 'label-hidden' }),
4569
5176
  __metadata("design:type", Object)
4570
5177
  ], ItInput.prototype, "labelHidden", void 0);
4571
- __decorate([
4572
- property({ type: String }),
4573
- __metadata("design:type", String)
4574
- ], ItInput.prototype, "type", void 0);
4575
- __decorate([
4576
- property({ type: String }),
4577
- __metadata("design:type", Object)
4578
- ], ItInput.prototype, "name", void 0);
4579
5178
  __decorate([
4580
5179
  property({ type: String }),
4581
5180
  __metadata("design:type", Object)
@@ -4584,10 +5183,6 @@ __decorate([
4584
5183
  property({ type: String, attribute: 'support-text' }),
4585
5184
  __metadata("design:type", Object)
4586
5185
  ], ItInput.prototype, "supportText", void 0);
4587
- __decorate([
4588
- property({ type: Boolean }),
4589
- __metadata("design:type", Object)
4590
- ], ItInput.prototype, "disabled", void 0);
4591
5186
  __decorate([
4592
5187
  property({ type: Boolean }),
4593
5188
  __metadata("design:type", Object)
@@ -4605,17 +5200,9 @@ __decorate([
4605
5200
  __metadata("design:type", Object)
4606
5201
  ], ItInput.prototype, "suggestions", void 0);
4607
5202
  __decorate([
4608
- property({ type: Number }),
4609
- __metadata("design:type", Object)
4610
- ], ItInput.prototype, "minlength", void 0);
4611
- __decorate([
4612
- property({ type: Number }),
4613
- __metadata("design:type", Object)
4614
- ], ItInput.prototype, "maxlength", void 0);
4615
- __decorate([
4616
- property({ type: String }),
4617
- __metadata("design:type", String)
4618
- ], ItInput.prototype, "pattern", void 0);
5203
+ queryAssignedElements({ slot: 'label' }),
5204
+ __metadata("design:type", Array)
5205
+ ], ItInput.prototype, "labelElements", void 0);
4619
5206
  __decorate([
4620
5207
  state(),
4621
5208
  __metadata("design:type", Object)
@@ -4628,24 +5215,7 @@ __decorate([
4628
5215
  state(),
4629
5216
  __metadata("design:type", Object)
4630
5217
  ], ItInput.prototype, "_score", void 0);
4631
- __decorate([
4632
- state(),
4633
- __metadata("design:type", Object)
4634
- ], ItInput.prototype, "_value", void 0);
4635
- __decorate([
4636
- state(),
4637
- __metadata("design:type", Object)
4638
- ], ItInput.prototype, "_touched", void 0);
4639
- __decorate([
4640
- property({ type: String }),
4641
- __metadata("design:type", String)
4642
- ], ItInput.prototype, "validityMessage", void 0);
4643
- __decorate([
4644
- property({ reflect: true }),
4645
- __metadata("design:type", Object),
4646
- __metadata("design:paramtypes", [Object])
4647
- ], ItInput.prototype, "value", null);
4648
- ItInput = __decorate([
5218
+ ItInput = ItInput_1 = __decorate([
4649
5219
  customElement('it-input')
4650
5220
  ], ItInput);
4651
5221