design-angular-kit 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +89 -0
- package/assets/i18n/it.json +89 -0
- package/esm2022/lib/abstracts/abstract-form.component.mjs +19 -6
- package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +8 -6
- package/esm2022/lib/components/core/video-player/video-player-i18n.model.mjs +2 -0
- package/esm2022/lib/components/core/video-player/video-player-i18n.service.mjs +130 -0
- package/esm2022/lib/components/core/video-player/video-player.component.mjs +303 -0
- package/esm2022/lib/components/core/video-player/video-player.config.mjs +43 -0
- package/esm2022/lib/components/core/video-player/video-player.cookie.mjs +25 -0
- package/esm2022/lib/components/core/video-player/video-player.model.mjs +3 -0
- package/esm2022/lib/components/core/video-player/video-player.module.mjs +16 -0
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +144 -78
- package/esm2022/lib/components/form/form.module.mjs +6 -2
- package/esm2022/lib/components/form/input/input.component.mjs +3 -3
- package/esm2022/lib/components/form/search/search.component.mjs +112 -0
- package/esm2022/lib/components/navigation/navscroll/navscroll-list-item.component.mjs +2 -3
- package/esm2022/lib/design-angular-kit.module.mjs +8 -4
- package/esm2022/lib/interfaces/form.mjs +1 -1
- package/esm2022/lib/validators/it-validators.mjs +6 -1
- package/esm2022/public_api.mjs +7 -3
- package/fesm2022/design-angular-kit.mjs +782 -90
- package/fesm2022/design-angular-kit.mjs.map +1 -1
- package/lib/abstracts/abstract-form.component.d.ts +6 -4
- package/lib/components/core/carousel/carousel/carousel.component.d.ts +1 -1
- package/lib/components/core/video-player/video-player-i18n.model.d.ts +179 -0
- package/lib/components/core/video-player/video-player-i18n.service.d.ts +17 -0
- package/lib/components/core/video-player/video-player.component.d.ts +48 -0
- package/lib/components/core/video-player/video-player.config.d.ts +68 -0
- package/lib/components/core/video-player/video-player.cookie.d.ts +6 -0
- package/lib/components/core/video-player/video-player.model.d.ts +44 -0
- package/lib/components/core/video-player/video-player.module.d.ts +7 -0
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +55 -39
- package/lib/components/form/form.module.d.ts +13 -12
- package/lib/components/form/search/search.component.d.ts +59 -0
- package/lib/design-angular-kit.module.d.ts +18 -17
- package/lib/interfaces/form.d.ts +3 -3
- package/lib/validators/it-validators.d.ts +1 -0
- package/package.json +20 -7
- package/public_api.d.ts +6 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Renderer2, ElementRef, ChangeDetectorRef, EventEmitter, Component, Input, Output, booleanAttribute, ChangeDetectionStrategy, ViewChild, InjectionToken, TemplateRef, HostBinding, ContentChildren, NgModule, Directive, Optional, Host, Inject, HostListener, Injectable, Self, ViewChildren, ViewEncapsulation, Pipe, HostAttributeToken, DestroyRef, APP_INITIALIZER, importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
-
import { Collapse, Alert, Dropdown,
|
|
3
|
+
import { Collapse, Alert, Dropdown, Carousel, Modal, Notification, Popover, Tab, Tooltip, InputPassword, ProgressDonut, SelectAutocomplete, BackToTop, NavBarCollapsible, HeaderSticky, loadFonts } from 'bootstrap-italia';
|
|
4
4
|
import * as i1 from '@ngx-translate/core';
|
|
5
5
|
import { TranslateModule, TranslatePipe, TranslateLoader, TranslateService } from '@ngx-translate/core';
|
|
6
6
|
import * as i1$3 from '@angular/common';
|
|
@@ -10,12 +10,14 @@ import { RouterLink, RouterLinkActive, Router, NavigationEnd, Scroll, RouterLink
|
|
|
10
10
|
import { startWith, Subject, filter, debounceTime, distinctUntilChanged, tap, switchMap, of, merge, map, Observable, take, forkJoin, BehaviorSubject, shareReplay, combineLatest, skip, AsyncSubject, withLatestFrom, delay, timer, takeWhile } from 'rxjs';
|
|
11
11
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
12
12
|
import * as i1$1 from '@angular/forms';
|
|
13
|
-
import { FormControl, Validators, ReactiveFormsModule, NgModel, FormControlName } from '@angular/forms';
|
|
13
|
+
import { FormControl, FormGroup, Validators, ReactiveFormsModule, NgModel, FormControlName } from '@angular/forms';
|
|
14
14
|
import * as i1$2 from '@angular/platform-browser';
|
|
15
15
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
16
16
|
import { provideHttpClient, HttpClient } from '@angular/common/http';
|
|
17
17
|
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
|
|
18
18
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
19
|
+
import videojs from 'video.js';
|
|
20
|
+
import { initYoutubePlugin } from 'bootstrap-italia/dist/plugins/util/youtube-video.js';
|
|
19
21
|
import { map as map$1 } from 'rxjs/operators';
|
|
20
22
|
|
|
21
23
|
class ItAbstractComponent {
|
|
@@ -1117,7 +1119,6 @@ class ItCarouselComponent {
|
|
|
1117
1119
|
this.trackClass = '';
|
|
1118
1120
|
}
|
|
1119
1121
|
ngAfterViewInit() {
|
|
1120
|
-
this.carousel = CarouselBI.getOrCreateInstance(this.carouselDiv.nativeElement);
|
|
1121
1122
|
this.items?.changes
|
|
1122
1123
|
.pipe(
|
|
1123
1124
|
// When carousel items changes (dynamic add/remove)
|
|
@@ -1129,22 +1130,25 @@ class ItCarouselComponent {
|
|
|
1129
1130
|
}));
|
|
1130
1131
|
this._changeDetectorRef.detectChanges(); // Force update html render
|
|
1131
1132
|
});
|
|
1133
|
+
setTimeout(() => {
|
|
1134
|
+
this.carousel = Carousel.getOrCreateInstance(this.carouselDiv.nativeElement);
|
|
1135
|
+
}, 100);
|
|
1132
1136
|
}
|
|
1133
1137
|
ngOnDestroy() {
|
|
1134
1138
|
this.itemSubscriptions?.forEach(item => item.unsubscribe());
|
|
1135
1139
|
}
|
|
1136
1140
|
/**
|
|
1137
|
-
* Removes
|
|
1141
|
+
* Removes Carousel features
|
|
1138
1142
|
*/
|
|
1139
1143
|
dispose() {
|
|
1140
1144
|
this.carousel?.dispose();
|
|
1141
1145
|
}
|
|
1142
1146
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItCarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1143
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItCarouselComponent, isStandalone: true, selector: "it-carousel", inputs: { title: "title", type: "type", trackClass: "trackClass", fullCarousel: ["fullCarousel", "fullCarousel", inputToBoolean], bigImg: ["bigImg", "bigImg", inputToBoolean], standardImage: ["standardImage", "standardImage", inputToBoolean], lined: ["lined", "lined", inputToBoolean] }, queries: [{ propertyName: "items", predicate: ItCarouselItemComponent }], viewQueries: [{ propertyName: "carouselDiv", first: true, predicate: ["carousel"], descendants: true }], exportAs: ["itCarousel"], ngImport: i0, template: "<div\n #carousel\n class=\"it-carousel-wrapper splide {{ typeClass }}\"\n [class.it-full-carousel]=\"fullCarousel\"\n [class.it-big-img]=\"bigImg\"\n [class.it-standard-image]=\"standardImage\"
|
|
1147
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItCarouselComponent, isStandalone: true, selector: "it-carousel", inputs: { title: "title", type: "type", trackClass: "trackClass", fullCarousel: ["fullCarousel", "fullCarousel", inputToBoolean], bigImg: ["bigImg", "bigImg", inputToBoolean], standardImage: ["standardImage", "standardImage", inputToBoolean], lined: ["lined", "lined", inputToBoolean] }, queries: [{ propertyName: "items", predicate: ItCarouselItemComponent }], viewQueries: [{ propertyName: "carouselDiv", first: true, predicate: ["carousel"], descendants: true }], exportAs: ["itCarousel"], ngImport: i0, template: "<div\n #carousel\n class=\"it-carousel-wrapper splide {{ typeClass }}\"\n [class.it-full-carousel]=\"fullCarousel\"\n [class.it-big-img]=\"bigImg\"\n [class.it-standard-image]=\"standardImage\">\n @if (title) {\n <div class=\"it-header-block\">\n <div class=\"it-header-block-title\">\n <h2>{{ title }}</h2>\n </div>\n </div>\n }\n\n <div class=\"splide__track {{ trackClass }}\">\n @if (items) {\n <ul class=\"splide__list\">\n @for (item of items; track item) {\n <li class=\"splide__slide\" [class.lined_slide]=\"lined\">\n <div class=\"it-single-slide-wrapper\">\n <ng-container *ngTemplateOutlet=\"item.htmlContent\"></ng-container>\n </div>\n </li>\n }\n </ul>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1144
1148
|
}
|
|
1145
1149
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItCarouselComponent, decorators: [{
|
|
1146
1150
|
type: Component,
|
|
1147
|
-
args: [{ standalone: true, selector: 'it-carousel', exportAs: 'itCarousel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], template: "<div\n #carousel\n class=\"it-carousel-wrapper splide {{ typeClass }}\"\n [class.it-full-carousel]=\"fullCarousel\"\n [class.it-big-img]=\"bigImg\"\n [class.it-standard-image]=\"standardImage\"
|
|
1151
|
+
args: [{ standalone: true, selector: 'it-carousel', exportAs: 'itCarousel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet], template: "<div\n #carousel\n class=\"it-carousel-wrapper splide {{ typeClass }}\"\n [class.it-full-carousel]=\"fullCarousel\"\n [class.it-big-img]=\"bigImg\"\n [class.it-standard-image]=\"standardImage\">\n @if (title) {\n <div class=\"it-header-block\">\n <div class=\"it-header-block-title\">\n <h2>{{ title }}</h2>\n </div>\n </div>\n }\n\n <div class=\"splide__track {{ trackClass }}\">\n @if (items) {\n <ul class=\"splide__list\">\n @for (item of items; track item) {\n <li class=\"splide__slide\" [class.lined_slide]=\"lined\">\n <div class=\"it-single-slide-wrapper\">\n <ng-container *ngTemplateOutlet=\"item.htmlContent\"></ng-container>\n </div>\n </li>\n }\n </ul>\n }\n </div>\n</div>\n" }]
|
|
1148
1152
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { title: [{
|
|
1149
1153
|
type: Input
|
|
1150
1154
|
}], type: [{
|
|
@@ -1978,19 +1982,20 @@ class ItAbstractFormComponent extends ItAbstractComponent {
|
|
|
1978
1982
|
set disabled(isDisabled) {
|
|
1979
1983
|
this.setDisabledState(isDisabled);
|
|
1980
1984
|
}
|
|
1981
|
-
constructor(_translateService, _ngControl) {
|
|
1985
|
+
constructor(_translateService, _ngControl, fgd) {
|
|
1982
1986
|
super();
|
|
1983
1987
|
this._translateService = _translateService;
|
|
1984
1988
|
this._ngControl = _ngControl;
|
|
1989
|
+
this.fgd = fgd;
|
|
1985
1990
|
/**
|
|
1986
1991
|
* Validation color display mode (validation triggered if field is touched or not pristine)
|
|
1987
1992
|
* - <b>true</b>: Always show the validation color
|
|
1988
1993
|
* - <b>false</b>: Never show validation color
|
|
1989
1994
|
* - <b>only-valid</b>: Show only valid validation color
|
|
1990
1995
|
* - <b>only-invalid</b>: Show only invalid validation color
|
|
1991
|
-
* @default <b>
|
|
1996
|
+
* @default <b>false</b>: Do not show the validation color by default
|
|
1992
1997
|
*/
|
|
1993
|
-
this.validationMode =
|
|
1998
|
+
this.validationMode = false;
|
|
1994
1999
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1995
2000
|
this.onChange = (_) => { };
|
|
1996
2001
|
this.onTouched = () => { };
|
|
@@ -2033,6 +2038,7 @@ class ItAbstractFormComponent extends ItAbstractComponent {
|
|
|
2033
2038
|
ngOnInit() {
|
|
2034
2039
|
if (this._ngControl?.control) {
|
|
2035
2040
|
this.control.setValidators(this._ngControl.control.validator);
|
|
2041
|
+
this.setValidationModeWhenInAForm();
|
|
2036
2042
|
}
|
|
2037
2043
|
}
|
|
2038
2044
|
registerOnChange(fn) {
|
|
@@ -2131,7 +2137,16 @@ class ItAbstractFormComponent extends ItAbstractComponent {
|
|
|
2131
2137
|
}
|
|
2132
2138
|
return this.control.getError(errorCode, path);
|
|
2133
2139
|
}
|
|
2134
|
-
|
|
2140
|
+
// This function assurest that validation mode remains complaiant with the Design kit
|
|
2141
|
+
// When the validation mode is `false` and input elements are wrapped in a `FormGroup`
|
|
2142
|
+
// validation mode is automatically set to `true`.
|
|
2143
|
+
setValidationModeWhenInAForm() {
|
|
2144
|
+
const isInAForm = this.fgd?.control instanceof FormGroup;
|
|
2145
|
+
if (isInAForm && this.validationMode == false) {
|
|
2146
|
+
this.validationMode = true;
|
|
2147
|
+
}
|
|
2148
|
+
}
|
|
2149
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAbstractFormComponent, deps: [{ token: i1.TranslateService }, { token: i1$1.NgControl, optional: true, self: true }, { token: i1$1.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2135
2150
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.6", type: ItAbstractFormComponent, selector: "ng-component", inputs: { label: "label", validationMode: "validationMode", disabled: ["disabled", "disabled", inputToBoolean] }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
|
|
2136
2151
|
}
|
|
2137
2152
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAbstractFormComponent, decorators: [{
|
|
@@ -2141,6 +2156,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
2141
2156
|
type: Self
|
|
2142
2157
|
}, {
|
|
2143
2158
|
type: Optional
|
|
2159
|
+
}] }, { type: i1$1.ControlContainer, decorators: [{
|
|
2160
|
+
type: Optional
|
|
2144
2161
|
}] }], propDecorators: { label: [{
|
|
2145
2162
|
type: Input
|
|
2146
2163
|
}], validationMode: [{
|
|
@@ -2285,6 +2302,11 @@ class ItValidators {
|
|
|
2285
2302
|
static get tel() {
|
|
2286
2303
|
return ItValidators.customPattern(PHONE_NUMBER_REGEX, { invalidTel: true });
|
|
2287
2304
|
}
|
|
2305
|
+
static includes(possibleValues) {
|
|
2306
|
+
return formControl => {
|
|
2307
|
+
return possibleValues?.includes(formControl.value) ? null : { invalidSelection: true };
|
|
2308
|
+
};
|
|
2309
|
+
}
|
|
2288
2310
|
/**
|
|
2289
2311
|
* URL validator
|
|
2290
2312
|
*/
|
|
@@ -2481,11 +2503,11 @@ class ItInputComponent extends ItAbstractFormComponent {
|
|
|
2481
2503
|
this.control.setValue(value);
|
|
2482
2504
|
}
|
|
2483
2505
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
2484
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItInputComponent, isStandalone: true, selector: "it-input", inputs: { type: "type", placeholder: "placeholder", description: "description", readonly: "readonly", maxDate: "maxDate", minDate: "minDate", max: "max", min: "min", step: "step", currency: ["currency", "currency", inputToBoolean], percentage: ["percentage", "percentage", inputToBoolean], symbol: "symbol", adaptive: ["adaptive", "adaptive", inputToBoolean], autocomplete: "autocomplete" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <div\n class=\"input-group\"\n [class.disabled]=\"!control.enabled\"\n [class.input-number]=\"type === 'number'\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n <span class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </span>\n @if (label) {\n <label\n [for]=\"id\"\n [class.active]=\"isActiveLabel\"\n [class.input-symbol-label]=\"percentage || currency\"\n [class.input-number-label]=\"type === 'number'\"\n [class.empty-prepend-label]=\"!(percentage || currency) && !prependText.clientWidth\">\n {{ label }}\n </label>\n }\n\n @if (type === 'number') {\n @if (currency || percentage) {\n <span class=\"input-group-text fw-semibold\">{{ symbol }}</span>\n }\n <input\n type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [min]=\"min ?? ''\"\n [max]=\"max ?? ''\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n <span class=\"input-group-text align-buttons flex-column\">\n <button type=\"button\" class=\"input-number-add\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{ 'it.form.increase-value' | translate }}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{ 'it.form.decrease-value' | translate }}</span>\n </button>\n </span>\n } @else {\n <input\n [id]=\"id\"\n [type]=\"type\"\n [max]=\"type === 'date' ? maxDate : undefined\"\n [min]=\"type === 'date' ? minDate : undefined\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n }\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: [".form-group label{z-index:1000}.form-group
|
|
2506
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItInputComponent, isStandalone: true, selector: "it-input", inputs: { type: "type", placeholder: "placeholder", description: "description", readonly: "readonly", maxDate: "maxDate", minDate: "minDate", max: "max", min: "min", step: "step", currency: ["currency", "currency", inputToBoolean], percentage: ["percentage", "percentage", inputToBoolean], symbol: "symbol", adaptive: ["adaptive", "adaptive", inputToBoolean], autocomplete: "autocomplete" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <div\n class=\"input-group\"\n [class.disabled]=\"!control.enabled\"\n [class.input-number]=\"type === 'number'\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n <span class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </span>\n @if (label) {\n <label\n [for]=\"id\"\n [class.active]=\"isActiveLabel\"\n [class.input-symbol-label]=\"percentage || currency\"\n [class.input-number-label]=\"type === 'number'\"\n [class.empty-prepend-label]=\"!(percentage || currency) && !prependText.clientWidth\">\n {{ label }}\n </label>\n }\n\n @if (type === 'number') {\n @if (currency || percentage) {\n <span class=\"input-group-text fw-semibold\">{{ symbol }}</span>\n }\n <input\n type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [min]=\"min ?? ''\"\n [max]=\"max ?? ''\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n <span class=\"input-group-text align-buttons flex-column\">\n <button type=\"button\" class=\"input-number-add\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{ 'it.form.increase-value' | translate }}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{ 'it.form.decrease-value' | translate }}</span>\n </button>\n </span>\n } @else {\n <input\n [id]=\"id\"\n [type]=\"type\"\n [max]=\"type === 'date' ? maxDate : undefined\"\n [min]=\"type === 'date' ? minDate : undefined\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n }\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: [".form-group label{z-index:1000}.form-group .input-number .align-buttons{height:100%}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}.form-group label:not(.active):has(+input:-webkit-autofill){transform:translateY(-75%)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2485
2507
|
}
|
|
2486
2508
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItInputComponent, decorators: [{
|
|
2487
2509
|
type: Component,
|
|
2488
|
-
args: [{ standalone: true, selector: 'it-input', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, TranslateModule, AsyncPipe], template: "<div class=\"form-group\">\n <div\n class=\"input-group\"\n [class.disabled]=\"!control.enabled\"\n [class.input-number]=\"type === 'number'\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n <span class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </span>\n @if (label) {\n <label\n [for]=\"id\"\n [class.active]=\"isActiveLabel\"\n [class.input-symbol-label]=\"percentage || currency\"\n [class.input-number-label]=\"type === 'number'\"\n [class.empty-prepend-label]=\"!(percentage || currency) && !prependText.clientWidth\">\n {{ label }}\n </label>\n }\n\n @if (type === 'number') {\n @if (currency || percentage) {\n <span class=\"input-group-text fw-semibold\">{{ symbol }}</span>\n }\n <input\n type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [min]=\"min ?? ''\"\n [max]=\"max ?? ''\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n <span class=\"input-group-text align-buttons flex-column\">\n <button type=\"button\" class=\"input-number-add\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{ 'it.form.increase-value' | translate }}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{ 'it.form.decrease-value' | translate }}</span>\n </button>\n </span>\n } @else {\n <input\n [id]=\"id\"\n [type]=\"type\"\n [max]=\"type === 'date' ? maxDate : undefined\"\n [min]=\"type === 'date' ? minDate : undefined\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n }\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: [".form-group label{z-index:1000}.form-group
|
|
2510
|
+
args: [{ standalone: true, selector: 'it-input', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, TranslateModule, AsyncPipe], template: "<div class=\"form-group\">\n <div\n class=\"input-group\"\n [class.disabled]=\"!control.enabled\"\n [class.input-number]=\"type === 'number'\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n <span class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </span>\n @if (label) {\n <label\n [for]=\"id\"\n [class.active]=\"isActiveLabel\"\n [class.input-symbol-label]=\"percentage || currency\"\n [class.input-number-label]=\"type === 'number'\"\n [class.empty-prepend-label]=\"!(percentage || currency) && !prependText.clientWidth\">\n {{ label }}\n </label>\n }\n\n @if (type === 'number') {\n @if (currency || percentage) {\n <span class=\"input-group-text fw-semibold\">{{ symbol }}</span>\n }\n <input\n type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [min]=\"min ?? ''\"\n [max]=\"max ?? ''\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n <span class=\"input-group-text align-buttons flex-column\">\n <button type=\"button\" class=\"input-number-add\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{ 'it.form.increase-value' | translate }}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" [disabled]=\"!control.enabled\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{ 'it.form.decrease-value' | translate }}</span>\n </button>\n </span>\n } @else {\n <input\n [id]=\"id\"\n [type]=\"type\"\n [max]=\"type === 'date' ? maxDate : undefined\"\n [min]=\"type === 'date' ? minDate : undefined\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.just-validate-success-field]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [autocomplete]=\"autocomplete\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n }\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", styles: [".form-group label{z-index:1000}.form-group .input-number .align-buttons{height:100%}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}.form-group label:not(.active):has(+input:-webkit-autofill){transform:translateY(-75%)}\n"] }]
|
|
2489
2511
|
}], propDecorators: { type: [{
|
|
2490
2512
|
type: Input
|
|
2491
2513
|
}], placeholder: [{
|
|
@@ -4467,7 +4489,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
4467
4489
|
}]
|
|
4468
4490
|
}], ctorParameters: () => [{ type: i1$2.DomSanitizer }] });
|
|
4469
4491
|
|
|
4470
|
-
class
|
|
4492
|
+
class ItSearchComponent extends ItAbstractFormComponent {
|
|
4471
4493
|
constructor() {
|
|
4472
4494
|
super(...arguments);
|
|
4473
4495
|
/**
|
|
@@ -4489,52 +4511,52 @@ class ItAutocompleteComponent extends ItAbstractFormComponent {
|
|
|
4489
4511
|
*/
|
|
4490
4512
|
this.forceShowLabel = true;
|
|
4491
4513
|
/**
|
|
4492
|
-
* Fired when the
|
|
4514
|
+
* Fired when the Search Item has been selected
|
|
4493
4515
|
*/
|
|
4494
|
-
this.
|
|
4516
|
+
this.searchSelectedEvent = new EventEmitter();
|
|
4495
4517
|
this.showAutocompletion = false;
|
|
4496
4518
|
/** Observable da cui vengono emessi i risultati dell'auto completamento */
|
|
4497
|
-
this.
|
|
4519
|
+
this.searchResults$ = new Observable();
|
|
4498
4520
|
}
|
|
4499
4521
|
ngOnInit() {
|
|
4500
4522
|
super.ngOnInit();
|
|
4501
|
-
this.
|
|
4523
|
+
this.searchResults$ = this.getSearchResults$();
|
|
4502
4524
|
}
|
|
4503
4525
|
/**
|
|
4504
|
-
* Create the
|
|
4526
|
+
* Create the search list
|
|
4505
4527
|
*/
|
|
4506
|
-
|
|
4528
|
+
getSearchResults$() {
|
|
4507
4529
|
return this.control.valueChanges.pipe(debounceTime(this.debounceTime), // Delay filter data after time span has passed without another source emission, useful when the user is typing multiple letters
|
|
4508
4530
|
distinctUntilChanged(), // Only if searchValue is distinct in comparison to the last value
|
|
4509
4531
|
switchMap(searchedValue => {
|
|
4510
|
-
if (!this.
|
|
4532
|
+
if (!this.searchData) {
|
|
4511
4533
|
return of({
|
|
4512
4534
|
searchedValue,
|
|
4513
4535
|
relatedEntries: [],
|
|
4514
4536
|
});
|
|
4515
4537
|
}
|
|
4516
|
-
const autoCompleteData$ = Array.isArray(this.
|
|
4517
|
-
return autoCompleteData$.pipe(map(
|
|
4538
|
+
const autoCompleteData$ = Array.isArray(this.searchData) ? of(this.searchData) : this.searchData(searchedValue);
|
|
4539
|
+
return autoCompleteData$.pipe(map(searchData => {
|
|
4518
4540
|
if (!searchedValue || typeof searchedValue === 'number') {
|
|
4519
4541
|
return { searchedValue, relatedEntries: [] };
|
|
4520
4542
|
}
|
|
4521
4543
|
const lowercaseValue = searchedValue.toLowerCase();
|
|
4522
|
-
const relatedEntries =
|
|
4544
|
+
const relatedEntries = searchData.filter(item => item.value?.toLowerCase().includes(lowercaseValue));
|
|
4523
4545
|
return { searchedValue, relatedEntries };
|
|
4524
4546
|
}));
|
|
4525
4547
|
}));
|
|
4526
4548
|
}
|
|
4527
4549
|
onEntryClick(entry, event) {
|
|
4528
|
-
// Se non è stato definito un link associato all'elemento dell'
|
|
4550
|
+
// Se non è stato definito un link associato all'elemento dell'search, probabilmente il desiderata
|
|
4529
4551
|
// non è effettuare la navigazione al default '#', pertanto in tal caso meglio annullare la navigazione.
|
|
4530
4552
|
if (!entry.link) {
|
|
4531
4553
|
event.preventDefault();
|
|
4532
4554
|
}
|
|
4533
|
-
this.
|
|
4555
|
+
this.searchSelectedEvent.next(entry);
|
|
4534
4556
|
this.control.setValue(entry.value);
|
|
4535
4557
|
this.showAutocompletion = false;
|
|
4536
4558
|
}
|
|
4537
|
-
|
|
4559
|
+
searchItemTrackByValueFn(index, item) {
|
|
4538
4560
|
return item.value;
|
|
4539
4561
|
}
|
|
4540
4562
|
onKeyDown() {
|
|
@@ -4544,13 +4566,13 @@ class ItAutocompleteComponent extends ItAbstractFormComponent {
|
|
|
4544
4566
|
const value = this.control.value;
|
|
4545
4567
|
return this.forceShowLabel && (!!value || !!this.placeholder);
|
|
4546
4568
|
}
|
|
4547
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type:
|
|
4548
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type:
|
|
4569
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
4570
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSearchComponent, isStandalone: true, selector: "it-search", inputs: { searchData: "searchData", big: ["big", "big", inputToBoolean], debounceTime: "debounceTime", placeholder: "placeholder", labelWaria: "labelWaria", forceShowLabel: ["forceShowLabel", "forceShowLabel", inputToBoolean] }, outputs: { searchSelectedEvent: "searchSelectedEvent" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\" [class.autocomplete-wrapper-big]=\"big\">\n @if (label) {\n <label [for]=\"id\" [class.visually-hidden]=\"!isActiveLabel\" [class.active]=\"isActiveLabel\">\n {{ label }}\n </label>\n }\n\n <input\n [id]=\"id\"\n type=\"search\"\n class=\"autocomplete form-control\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n (blur)=\"markAsTouched()\"\n (keydown)=\"onKeyDown()\" />\n\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\n <it-icon [labelWaria]=\"labelWaria\" name=\"search\" size=\"sm\"></it-icon>\n </span>\n\n @if (searchResults$ | async; as autocomplete) {\n <ul class=\"autocomplete-list\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n @for (entry of autocomplete.relatedEntries; track searchItemTrackByValueFn($index, entry)) {\n <li>\n <a [href]=\"entry.link\" (click)=\"onEntryClick(entry, $event)\">\n @if (entry.avatarSrcPath) {\n <div class=\"avatar size-sm\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\" />\n </div>\n }\n @if (entry.icon) {\n <it-icon [name]=\"entry.icon\" size=\"sm\"></it-icon>\n }\n <span class=\"autocomplete-list-text\">\n <span [innerHTML]=\"entry.value | itMarkMatchingText: autocomplete.searchedValue\"></span>\n @if (entry.label) {\n <em>{{ entry.label }}</em>\n }\n </span>\n </a>\n </li>\n }\n </ul>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: ItIconComponent, selector: "it-icon", inputs: ["name", "size", "color", "padded", "svgClass", "title", "labelWaria"] }, { kind: "pipe", type: ItMarkMatchingTextPipe, name: "itMarkMatchingText" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4549
4571
|
}
|
|
4550
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type:
|
|
4572
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSearchComponent, decorators: [{
|
|
4551
4573
|
type: Component,
|
|
4552
|
-
args: [{ standalone: true, selector: 'it-
|
|
4553
|
-
}], propDecorators: {
|
|
4574
|
+
args: [{ standalone: true, selector: 'it-search', imports: [AsyncPipe, ItIconComponent, ItMarkMatchingTextPipe, NgTemplateOutlet, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\" [class.autocomplete-wrapper-big]=\"big\">\n @if (label) {\n <label [for]=\"id\" [class.visually-hidden]=\"!isActiveLabel\" [class.active]=\"isActiveLabel\">\n {{ label }}\n </label>\n }\n\n <input\n [id]=\"id\"\n type=\"search\"\n class=\"autocomplete form-control\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n (blur)=\"markAsTouched()\"\n (keydown)=\"onKeyDown()\" />\n\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\n <it-icon [labelWaria]=\"labelWaria\" name=\"search\" size=\"sm\"></it-icon>\n </span>\n\n @if (searchResults$ | async; as autocomplete) {\n <ul class=\"autocomplete-list\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n @for (entry of autocomplete.relatedEntries; track searchItemTrackByValueFn($index, entry)) {\n <li>\n <a [href]=\"entry.link\" (click)=\"onEntryClick(entry, $event)\">\n @if (entry.avatarSrcPath) {\n <div class=\"avatar size-sm\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\" />\n </div>\n }\n @if (entry.icon) {\n <it-icon [name]=\"entry.icon\" size=\"sm\"></it-icon>\n }\n <span class=\"autocomplete-list-text\">\n <span [innerHTML]=\"entry.value | itMarkMatchingText: autocomplete.searchedValue\"></span>\n @if (entry.label) {\n <em>{{ entry.label }}</em>\n }\n </span>\n </a>\n </li>\n }\n </ul>\n }\n\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n" }]
|
|
4575
|
+
}], propDecorators: { searchData: [{
|
|
4554
4576
|
type: Input,
|
|
4555
4577
|
args: [{ required: true }]
|
|
4556
4578
|
}], big: [{
|
|
@@ -4565,7 +4587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
4565
4587
|
}], forceShowLabel: [{
|
|
4566
4588
|
type: Input,
|
|
4567
4589
|
args: [{ transform: inputToBoolean }]
|
|
4568
|
-
}],
|
|
4590
|
+
}], searchSelectedEvent: [{
|
|
4569
4591
|
type: Output
|
|
4570
4592
|
}] } });
|
|
4571
4593
|
|
|
@@ -5024,8 +5046,181 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
5024
5046
|
type: Output
|
|
5025
5047
|
}] } });
|
|
5026
5048
|
|
|
5049
|
+
class ItAutocompleteComponent extends ItAbstractFormComponent {
|
|
5050
|
+
constructor() {
|
|
5051
|
+
super(...arguments);
|
|
5052
|
+
/**
|
|
5053
|
+
* Autocomplete elements.
|
|
5054
|
+
* @default []
|
|
5055
|
+
*/
|
|
5056
|
+
this.source = [];
|
|
5057
|
+
/**
|
|
5058
|
+
* Autocomplete if required.
|
|
5059
|
+
* @default false
|
|
5060
|
+
*/
|
|
5061
|
+
this.required = false;
|
|
5062
|
+
/**
|
|
5063
|
+
* Prevents suggestions from appearing if fewer than N characters are typed
|
|
5064
|
+
* @default 0
|
|
5065
|
+
*/
|
|
5066
|
+
this.minLength = 0;
|
|
5067
|
+
/**
|
|
5068
|
+
* Default value
|
|
5069
|
+
*/
|
|
5070
|
+
this.defaultValue = '';
|
|
5071
|
+
/**
|
|
5072
|
+
* Function to set assistive hint label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5073
|
+
*/
|
|
5074
|
+
this.assistiveHintLabel = () => 'Quando i risultati del completamento automatico sono disponibili, usa le frecce su e giù per rivedere e Invio per selezionare. Utenti di dispositivi touch, esplora tramite tocco o con gesti di scorrimento';
|
|
5075
|
+
/**
|
|
5076
|
+
* Function to set label in case of no result. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5077
|
+
*/
|
|
5078
|
+
this.noResultsLabel = () => 'Nessun risultato trovato';
|
|
5079
|
+
/**
|
|
5080
|
+
* Function to set label that alerts you that query's too short. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5081
|
+
*/
|
|
5082
|
+
this.statusQueryTooShortLabel = minQueryLength => `Digita ${minQueryLength} o più caratteri per mostrare le opzioni di ricerca`;
|
|
5083
|
+
/**
|
|
5084
|
+
* Function to set no results label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5085
|
+
*/
|
|
5086
|
+
this.statusNoResultsLabel = () => 'Nessun risultato di ricerca';
|
|
5087
|
+
/**
|
|
5088
|
+
* Function to set selected option label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5089
|
+
*/
|
|
5090
|
+
this.statusSelectedOptionLabel = (selectedOption, length, index) => `${selectedOption} ${index + 1} di ${length} è sottolineato`;
|
|
5091
|
+
/**
|
|
5092
|
+
* Function to set status results label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5093
|
+
*/
|
|
5094
|
+
this.statusResultsLabel = (length, contentSelectedOption) => {
|
|
5095
|
+
const words = {
|
|
5096
|
+
result: length === 1 ? 'risultato' : 'risultati',
|
|
5097
|
+
is: length === 1 ? 'è' : 'sono',
|
|
5098
|
+
available: length === 1 ? 'disponibile' : 'disponibili',
|
|
5099
|
+
};
|
|
5100
|
+
return `${length} ${words.result} ${words.is} ${words.available}. ${contentSelectedOption}`;
|
|
5101
|
+
};
|
|
5102
|
+
/**
|
|
5103
|
+
* Fired when value changes
|
|
5104
|
+
*/
|
|
5105
|
+
this.selected = new EventEmitter();
|
|
5106
|
+
this.value = '';
|
|
5107
|
+
this._interval = 0;
|
|
5108
|
+
this._inputEl = null;
|
|
5109
|
+
}
|
|
5110
|
+
ngOnInit() {
|
|
5111
|
+
super.ngOnInit();
|
|
5112
|
+
if (!this.control.value && !!this.value) {
|
|
5113
|
+
this.writeValue(this.value);
|
|
5114
|
+
this.onChange(this.value);
|
|
5115
|
+
}
|
|
5116
|
+
}
|
|
5117
|
+
clear() {
|
|
5118
|
+
this._inputEl.value = '';
|
|
5119
|
+
}
|
|
5120
|
+
_findInput() {
|
|
5121
|
+
this._interval = setInterval(() => {
|
|
5122
|
+
this._inputEl = document.getElementById(this.id);
|
|
5123
|
+
if (this._inputEl) {
|
|
5124
|
+
clearInterval(this._interval);
|
|
5125
|
+
this._initInputEl();
|
|
5126
|
+
}
|
|
5127
|
+
}, 500);
|
|
5128
|
+
}
|
|
5129
|
+
_setAndCheck(value) {
|
|
5130
|
+
this.value = value == '' ? undefined : value;
|
|
5131
|
+
if (this.control.touched) {
|
|
5132
|
+
this.writeValue(this.value);
|
|
5133
|
+
this.onChange(this.value);
|
|
5134
|
+
}
|
|
5135
|
+
if (this.isValid == false && this.isInvalid == false) {
|
|
5136
|
+
this._inputEl?.classList.remove('just-validate-success-field');
|
|
5137
|
+
this._inputEl?.classList.remove('is-invalid');
|
|
5138
|
+
}
|
|
5139
|
+
else if (this.isValid == true) {
|
|
5140
|
+
this._inputEl?.classList.add('just-validate-success-field');
|
|
5141
|
+
this._inputEl?.classList.remove('is-invalid');
|
|
5142
|
+
}
|
|
5143
|
+
else if (this.isInvalid == true) {
|
|
5144
|
+
this._inputEl?.classList.add('is-invalid');
|
|
5145
|
+
this._inputEl?.classList.remove('just-validate-success-field');
|
|
5146
|
+
}
|
|
5147
|
+
}
|
|
5148
|
+
_initInputEl() {
|
|
5149
|
+
if (this._inputEl) {
|
|
5150
|
+
this._inputEl.onfocus = (ev) => this._setAndCheck(ev.target.value);
|
|
5151
|
+
this._inputEl.onblur = (ev) => this._setAndCheck(ev.target.value);
|
|
5152
|
+
this._inputEl.oninput = (ev) => {
|
|
5153
|
+
this.markAsTouched();
|
|
5154
|
+
this._setAndCheck(ev.target.value);
|
|
5155
|
+
};
|
|
5156
|
+
}
|
|
5157
|
+
}
|
|
5158
|
+
ngAfterViewInit() {
|
|
5159
|
+
if (this.selectAutocompleteEl) {
|
|
5160
|
+
super.ngAfterViewInit();
|
|
5161
|
+
const element = this.selectAutocompleteEl.nativeElement;
|
|
5162
|
+
this.selectAutocomplete = new SelectAutocomplete(element, {
|
|
5163
|
+
id: this.id,
|
|
5164
|
+
name: this.name || this.id,
|
|
5165
|
+
source: this.source,
|
|
5166
|
+
required: this.required,
|
|
5167
|
+
minLength: this.minLength,
|
|
5168
|
+
defaultValue: this.defaultValue,
|
|
5169
|
+
tAssistiveHint: this.assistiveHintLabel,
|
|
5170
|
+
tNoResults: this.noResultsLabel,
|
|
5171
|
+
tStatusQueryTooShort: this.statusQueryTooShortLabel,
|
|
5172
|
+
tStatusNoResults: this.statusNoResultsLabel,
|
|
5173
|
+
tStatusSelectedOption: this.statusSelectedOptionLabel,
|
|
5174
|
+
tStatusResults: this.statusResultsLabel,
|
|
5175
|
+
onConfirm: (selectedElement) => {
|
|
5176
|
+
this.markAsTouched();
|
|
5177
|
+
this._setAndCheck(selectedElement);
|
|
5178
|
+
this.selected.emit(selectedElement);
|
|
5179
|
+
},
|
|
5180
|
+
});
|
|
5181
|
+
this._findInput();
|
|
5182
|
+
}
|
|
5183
|
+
}
|
|
5184
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5185
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItAutocompleteComponent, isStandalone: true, selector: "it-autocomplete", inputs: { source: "source", required: "required", name: "name", description: "description", minLength: "minLength", defaultValue: "defaultValue", assistiveHintLabel: "assistiveHintLabel", noResultsLabel: "noResultsLabel", statusQueryTooShortLabel: "statusQueryTooShortLabel", statusNoResultsLabel: "statusNoResultsLabel", statusSelectedOptionLabel: "statusSelectedOptionLabel", statusResultsLabel: "statusResultsLabel" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "selectAutocompleteEl", first: true, predicate: ["selectAutocomplete"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value\">{{ label }}</label>\n }\n <div #selectAutocomplete name=\"region\" [id]=\"id + 'Wrapper'\" class=\"autocomplete-wrapper\"></div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5186
|
+
}
|
|
5187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAutocompleteComponent, decorators: [{
|
|
5188
|
+
type: Component,
|
|
5189
|
+
args: [{ standalone: true, selector: 'it-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, AsyncPipe], template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value\">{{ label }}</label>\n }\n <div #selectAutocomplete name=\"region\" [id]=\"id + 'Wrapper'\" class=\"autocomplete-wrapper\"></div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n" }]
|
|
5190
|
+
}], propDecorators: { source: [{
|
|
5191
|
+
type: Input
|
|
5192
|
+
}], required: [{
|
|
5193
|
+
type: Input
|
|
5194
|
+
}], name: [{
|
|
5195
|
+
type: Input
|
|
5196
|
+
}], description: [{
|
|
5197
|
+
type: Input
|
|
5198
|
+
}], minLength: [{
|
|
5199
|
+
type: Input
|
|
5200
|
+
}], defaultValue: [{
|
|
5201
|
+
type: Input
|
|
5202
|
+
}], assistiveHintLabel: [{
|
|
5203
|
+
type: Input
|
|
5204
|
+
}], noResultsLabel: [{
|
|
5205
|
+
type: Input
|
|
5206
|
+
}], statusQueryTooShortLabel: [{
|
|
5207
|
+
type: Input
|
|
5208
|
+
}], statusNoResultsLabel: [{
|
|
5209
|
+
type: Input
|
|
5210
|
+
}], statusSelectedOptionLabel: [{
|
|
5211
|
+
type: Input
|
|
5212
|
+
}], statusResultsLabel: [{
|
|
5213
|
+
type: Input
|
|
5214
|
+
}], selected: [{
|
|
5215
|
+
type: Output
|
|
5216
|
+
}], selectAutocompleteEl: [{
|
|
5217
|
+
type: ViewChild,
|
|
5218
|
+
args: ['selectAutocomplete']
|
|
5219
|
+
}] } });
|
|
5220
|
+
|
|
5027
5221
|
const formComponents = [
|
|
5028
5222
|
ItAutocompleteComponent,
|
|
5223
|
+
ItSearchComponent,
|
|
5029
5224
|
ItCheckboxComponent,
|
|
5030
5225
|
ItInputComponent,
|
|
5031
5226
|
ItPasswordInputComponent,
|
|
@@ -5041,6 +5236,7 @@ const formComponents = [
|
|
|
5041
5236
|
class ItFormModule {
|
|
5042
5237
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
5043
5238
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItFormModule, imports: [ItAutocompleteComponent,
|
|
5239
|
+
ItSearchComponent,
|
|
5044
5240
|
ItCheckboxComponent,
|
|
5045
5241
|
ItInputComponent,
|
|
5046
5242
|
ItPasswordInputComponent,
|
|
@@ -5052,6 +5248,7 @@ class ItFormModule {
|
|
|
5052
5248
|
ItTransferComponent,
|
|
5053
5249
|
ItUploadDragDropComponent,
|
|
5054
5250
|
ItUploadFileListComponent], exports: [ItAutocompleteComponent,
|
|
5251
|
+
ItSearchComponent,
|
|
5055
5252
|
ItCheckboxComponent,
|
|
5056
5253
|
ItInputComponent,
|
|
5057
5254
|
ItPasswordInputComponent,
|
|
@@ -5597,7 +5794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
5597
5794
|
args: [{
|
|
5598
5795
|
selector: 'it-navscroll-list-item',
|
|
5599
5796
|
standalone: true,
|
|
5600
|
-
imports: [RouterLink, RouterLinkActive, RouterLinkWithHref,
|
|
5797
|
+
imports: [RouterLink, RouterLinkActive, RouterLinkWithHref, AsyncPipe],
|
|
5601
5798
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5602
5799
|
template: `
|
|
5603
5800
|
<a
|
|
@@ -5817,6 +6014,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
5817
6014
|
args: ['class']
|
|
5818
6015
|
}] } });
|
|
5819
6016
|
|
|
6017
|
+
class ItSkiplinkComponent {
|
|
6018
|
+
constructor() {
|
|
6019
|
+
/**
|
|
6020
|
+
* Aria label for `nav` mode
|
|
6021
|
+
* @default 'Scorciatoie di navigazione'
|
|
6022
|
+
*/
|
|
6023
|
+
this.ariaLabel = 'Scorciatoie di navigazione';
|
|
6024
|
+
}
|
|
6025
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6026
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSkiplinkComponent, isStandalone: true, selector: "it-skiplink", inputs: { ariaLabel: "ariaLabel", nav: ["nav", "nav", inputToBoolean] }, exportAs: ["itSkipLink"], ngImport: i0, template: "@if (nav) {\n <nav class=\"skiplinks\">\n <ul>\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </ul>\n </nav>\n} @else {\n <div class=\"skiplinks\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </div>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6027
|
+
}
|
|
6028
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkComponent, decorators: [{
|
|
6029
|
+
type: Component,
|
|
6030
|
+
args: [{ standalone: true, selector: 'it-skiplink', exportAs: 'itSkipLink', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TranslateModule, ItLinkComponent], template: "@if (nav) {\n <nav class=\"skiplinks\">\n <ul>\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </ul>\n </nav>\n} @else {\n <div class=\"skiplinks\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </div>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
6031
|
+
}], propDecorators: { ariaLabel: [{
|
|
6032
|
+
type: Input
|
|
6033
|
+
}], nav: [{
|
|
6034
|
+
type: Input,
|
|
6035
|
+
args: [{ transform: inputToBoolean }]
|
|
6036
|
+
}] } });
|
|
6037
|
+
|
|
6038
|
+
class ItSkiplinkItemComponent {
|
|
6039
|
+
constructor(parent) {
|
|
6040
|
+
this.inNav = parent.nav ? true : false;
|
|
6041
|
+
}
|
|
6042
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkItemComponent, deps: [{ token: ItSkiplinkComponent, host: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6043
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSkiplinkItemComponent, isStandalone: true, selector: "it-skiplink-item", inputs: { href: "href", externalLink: ["externalLink", "externalLink", inputToBoolean] }, exportAs: ["itSkipLinkItem"], ngImport: i0, template: "@if (inNav) {\n <li class=\"visually-hidden-focusable\">\n <it-link [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n </li>\n} @else {\n <it-link class=\"visually-hidden-focusable\" [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: ItLinkComponent, selector: "it-link", inputs: ["href", "externalLink", "disabled", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6044
|
+
}
|
|
6045
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkItemComponent, decorators: [{
|
|
6046
|
+
type: Component,
|
|
6047
|
+
args: [{ standalone: true, selector: 'it-skiplink-item', exportAs: 'itSkipLinkItem', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TranslateModule, ItLinkComponent], template: "@if (inNav) {\n <li class=\"visually-hidden-focusable\">\n <it-link [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n </li>\n} @else {\n <it-link class=\"visually-hidden-focusable\" [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
6048
|
+
}], ctorParameters: () => [{ type: ItSkiplinkComponent, decorators: [{
|
|
6049
|
+
type: Host
|
|
6050
|
+
}] }], propDecorators: { href: [{
|
|
6051
|
+
type: Input
|
|
6052
|
+
}], externalLink: [{
|
|
6053
|
+
type: Input,
|
|
6054
|
+
args: [{ transform: inputToBoolean }]
|
|
6055
|
+
}] } });
|
|
6056
|
+
|
|
6057
|
+
const skiplinkComponents = [ItSkiplinkComponent, ItSkiplinkItemComponent];
|
|
6058
|
+
class ItSkiplinkModule {
|
|
6059
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6060
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, imports: [ItSkiplinkComponent, ItSkiplinkItemComponent], exports: [ItSkiplinkComponent, ItSkiplinkItemComponent] }); }
|
|
6061
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, imports: [skiplinkComponents] }); }
|
|
6062
|
+
}
|
|
6063
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, decorators: [{
|
|
6064
|
+
type: NgModule,
|
|
6065
|
+
args: [{
|
|
6066
|
+
imports: skiplinkComponents,
|
|
6067
|
+
exports: skiplinkComponents,
|
|
6068
|
+
}]
|
|
6069
|
+
}] });
|
|
6070
|
+
|
|
5820
6071
|
class ItErrorPageComponent {
|
|
5821
6072
|
constructor(route) {
|
|
5822
6073
|
this.route = route;
|
|
@@ -6088,60 +6339,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
6088
6339
|
}]
|
|
6089
6340
|
}] });
|
|
6090
6341
|
|
|
6091
|
-
class ItSkiplinkComponent {
|
|
6092
|
-
constructor() {
|
|
6093
|
-
/**
|
|
6094
|
-
* Aria label for `nav` mode
|
|
6095
|
-
* @default 'Scorciatoie di navigazione'
|
|
6096
|
-
*/
|
|
6097
|
-
this.ariaLabel = 'Scorciatoie di navigazione';
|
|
6098
|
-
}
|
|
6099
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6100
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSkiplinkComponent, isStandalone: true, selector: "it-skiplink", inputs: { ariaLabel: "ariaLabel", nav: ["nav", "nav", inputToBoolean] }, exportAs: ["itSkipLink"], ngImport: i0, template: "@if (nav) {\n <nav class=\"skiplinks\">\n <ul>\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </ul>\n </nav>\n} @else {\n <div class=\"skiplinks\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </div>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6101
|
-
}
|
|
6102
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkComponent, decorators: [{
|
|
6103
|
-
type: Component,
|
|
6104
|
-
args: [{ standalone: true, selector: 'it-skiplink', exportAs: 'itSkipLink', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TranslateModule, ItLinkComponent], template: "@if (nav) {\n <nav class=\"skiplinks\">\n <ul>\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </ul>\n </nav>\n} @else {\n <div class=\"skiplinks\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </div>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
6105
|
-
}], propDecorators: { ariaLabel: [{
|
|
6106
|
-
type: Input
|
|
6107
|
-
}], nav: [{
|
|
6108
|
-
type: Input,
|
|
6109
|
-
args: [{ transform: inputToBoolean }]
|
|
6110
|
-
}] } });
|
|
6111
|
-
|
|
6112
|
-
class ItSkiplinkItemComponent {
|
|
6113
|
-
constructor(parent) {
|
|
6114
|
-
this.inNav = parent.nav ? true : false;
|
|
6115
|
-
}
|
|
6116
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkItemComponent, deps: [{ token: ItSkiplinkComponent, host: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6117
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItSkiplinkItemComponent, isStandalone: true, selector: "it-skiplink-item", inputs: { href: "href", externalLink: ["externalLink", "externalLink", inputToBoolean] }, exportAs: ["itSkipLinkItem"], ngImport: i0, template: "@if (inNav) {\n <li class=\"visually-hidden-focusable\">\n <it-link [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n </li>\n} @else {\n <it-link class=\"visually-hidden-focusable\" [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: ItLinkComponent, selector: "it-link", inputs: ["href", "externalLink", "disabled", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
6118
|
-
}
|
|
6119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkItemComponent, decorators: [{
|
|
6120
|
-
type: Component,
|
|
6121
|
-
args: [{ standalone: true, selector: 'it-skiplink-item', exportAs: 'itSkipLinkItem', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TranslateModule, ItLinkComponent], template: "@if (inNav) {\n <li class=\"visually-hidden-focusable\">\n <it-link [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n </li>\n} @else {\n <it-link class=\"visually-hidden-focusable\" [href]=\"href\" [externalLink]=\"externalLink\">\n <ng-container *ngTemplateOutlet=\"linkContent\"></ng-container>\n </it-link>\n}\n\n<ng-template #linkContent>\n <ng-content></ng-content>\n</ng-template>\n" }]
|
|
6122
|
-
}], ctorParameters: () => [{ type: ItSkiplinkComponent, decorators: [{
|
|
6123
|
-
type: Host
|
|
6124
|
-
}] }], propDecorators: { href: [{
|
|
6125
|
-
type: Input
|
|
6126
|
-
}], externalLink: [{
|
|
6127
|
-
type: Input,
|
|
6128
|
-
args: [{ transform: inputToBoolean }]
|
|
6129
|
-
}] } });
|
|
6130
|
-
|
|
6131
|
-
const skiplinkComponents = [ItSkiplinkComponent, ItSkiplinkItemComponent];
|
|
6132
|
-
class ItSkiplinkModule {
|
|
6133
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6134
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, imports: [ItSkiplinkComponent, ItSkiplinkItemComponent], exports: [ItSkiplinkComponent, ItSkiplinkItemComponent] }); }
|
|
6135
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, imports: [skiplinkComponents] }); }
|
|
6136
|
-
}
|
|
6137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, decorators: [{
|
|
6138
|
-
type: NgModule,
|
|
6139
|
-
args: [{
|
|
6140
|
-
imports: skiplinkComponents,
|
|
6141
|
-
exports: skiplinkComponents,
|
|
6142
|
-
}]
|
|
6143
|
-
}] });
|
|
6144
|
-
|
|
6145
6342
|
/**
|
|
6146
6343
|
* Configures DesignAngularKit library
|
|
6147
6344
|
* @param config the DesignAngularKit config
|
|
@@ -6230,6 +6427,7 @@ const core = [
|
|
|
6230
6427
|
ItTableModule,
|
|
6231
6428
|
ItTooltipDirective,
|
|
6232
6429
|
ItTimelineModule,
|
|
6430
|
+
ItVideoPlayerComponent,
|
|
6233
6431
|
];
|
|
6234
6432
|
/**
|
|
6235
6433
|
* Navigation Components
|
|
@@ -6299,7 +6497,8 @@ class DesignAngularKitModule {
|
|
|
6299
6497
|
ItTabModule,
|
|
6300
6498
|
ItTableModule,
|
|
6301
6499
|
ItTooltipDirective,
|
|
6302
|
-
ItTimelineModule,
|
|
6500
|
+
ItTimelineModule,
|
|
6501
|
+
ItVideoPlayerComponent, // Core components
|
|
6303
6502
|
ItFormModule, ItBackButtonComponent,
|
|
6304
6503
|
ItBackToTopComponent,
|
|
6305
6504
|
ItBreadcrumbsModule,
|
|
@@ -6334,7 +6533,8 @@ class DesignAngularKitModule {
|
|
|
6334
6533
|
ItTabModule,
|
|
6335
6534
|
ItTableModule,
|
|
6336
6535
|
ItTooltipDirective,
|
|
6337
|
-
ItTimelineModule,
|
|
6536
|
+
ItTimelineModule,
|
|
6537
|
+
ItVideoPlayerComponent, // Core components
|
|
6338
6538
|
ItFormModule, ItBackButtonComponent,
|
|
6339
6539
|
ItBackToTopComponent,
|
|
6340
6540
|
ItBreadcrumbsModule,
|
|
@@ -6386,6 +6586,498 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
6386
6586
|
}]
|
|
6387
6587
|
}] });
|
|
6388
6588
|
|
|
6589
|
+
class VideoPlayerI18nService {
|
|
6590
|
+
#translate = inject(TranslateService);
|
|
6591
|
+
init(player, destroyRef) {
|
|
6592
|
+
this.#translate.onLangChange
|
|
6593
|
+
.pipe(takeUntilDestroyed(destroyRef), tap({
|
|
6594
|
+
next: e => {
|
|
6595
|
+
const language = e.lang;
|
|
6596
|
+
videojs.addLanguage(language, this.getTranslations());
|
|
6597
|
+
player.language(language);
|
|
6598
|
+
},
|
|
6599
|
+
}))
|
|
6600
|
+
.subscribe(x => {
|
|
6601
|
+
console.log('onLangChange', x);
|
|
6602
|
+
});
|
|
6603
|
+
}
|
|
6604
|
+
getLanguage() {
|
|
6605
|
+
const language = this.#translate.currentLang ?? 'it';
|
|
6606
|
+
return {
|
|
6607
|
+
languages: { [language]: mapToVideoJsTranslation(this.#translate.instant('it.video-player')) },
|
|
6608
|
+
language,
|
|
6609
|
+
};
|
|
6610
|
+
}
|
|
6611
|
+
getTranslations() {
|
|
6612
|
+
return mapToVideoJsTranslation(this.#translate.instant('it.video-player'));
|
|
6613
|
+
}
|
|
6614
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6615
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerI18nService, providedIn: 'root' }); }
|
|
6616
|
+
}
|
|
6617
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerI18nService, decorators: [{
|
|
6618
|
+
type: Injectable,
|
|
6619
|
+
args: [{ providedIn: 'root' }]
|
|
6620
|
+
}] });
|
|
6621
|
+
function mapToVideoJsTranslation(translations) {
|
|
6622
|
+
return {
|
|
6623
|
+
'Audio Player': translations['audio-player'],
|
|
6624
|
+
'Video Player': translations['video-player'],
|
|
6625
|
+
Play: translations.play,
|
|
6626
|
+
Pause: translations.pause,
|
|
6627
|
+
Replay: translations.replay,
|
|
6628
|
+
'Current Time': translations['current-time'],
|
|
6629
|
+
Duration: translations.duration,
|
|
6630
|
+
'Remaining Time': translations['remaining-time'],
|
|
6631
|
+
'Stream Type': translations['stream-type'],
|
|
6632
|
+
LIVE: translations.live,
|
|
6633
|
+
Loaded: translations.loaded,
|
|
6634
|
+
Progress: translations.progress,
|
|
6635
|
+
'Progress Bar': translations['progress-bar'],
|
|
6636
|
+
'progress bar timing: currentTime={1} duration={2}': translations['progress-bar-timing:-currenttime={1}-duration={2}'],
|
|
6637
|
+
Fullscreen: translations.fullscreen,
|
|
6638
|
+
'Exit Fullscreen': translations['exit-fullscreen'],
|
|
6639
|
+
Mute: translations.mute,
|
|
6640
|
+
Unmute: translations.unmute,
|
|
6641
|
+
'Playback Rate': translations['playback-rate'],
|
|
6642
|
+
Subtitles: translations.subtitles,
|
|
6643
|
+
'subtitles off': translations['subtitles-off'],
|
|
6644
|
+
Captions: translations.captions,
|
|
6645
|
+
'captions off': translations['captions-off'],
|
|
6646
|
+
Chapters: translations.chapters,
|
|
6647
|
+
Descriptions: translations.descriptions,
|
|
6648
|
+
'descriptions off': translations['descriptions-off'],
|
|
6649
|
+
'Audio Track': translations['audio-track'],
|
|
6650
|
+
'Volume Level': translations['volume-level'],
|
|
6651
|
+
'You aborted the media playback': translations['you-aborted-the-media-playback'],
|
|
6652
|
+
'A network error caused the media download to fail part-way.': translations['a-network-error-caused-the-media-download-to-fail-part-way.'],
|
|
6653
|
+
'The media could not be loaded, either because the server or network failed or because the format is not supported.': translations['the-media-could-not-be-loaded,-either-because-the-server-or-network-failed-or-because-the-format-is-not-supported.'],
|
|
6654
|
+
'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.': translations['the-media-playback-was-aborted-due-to-a-corruption-problem-or-because-the-media-used-features-your-browser-did-not-support.'],
|
|
6655
|
+
'No compatible source was found for this media.': translations['no-compatible-source-was-found-for-this-media.'],
|
|
6656
|
+
'The media is encrypted and we do not have the keys to decrypt it.': translations['the-media-is-encrypted-and-we-do-not-have-the-keys-to-decrypt-it.'],
|
|
6657
|
+
'Play Video': translations['play-video'],
|
|
6658
|
+
Close: translations.close,
|
|
6659
|
+
'Close Modal Dialog': translations['close-modal-dialog'],
|
|
6660
|
+
'Modal Window': translations['modal-window'],
|
|
6661
|
+
'This is a modal window': translations['this-is-a-modal-window'],
|
|
6662
|
+
'This modal can be closed by pressing the Escape key or activating the close button.': translations['this-modal-can-be-closed-by-pressing-the-escape-key-or-activating-the-close-button.'],
|
|
6663
|
+
', opens captions settings dialog': translations[',-opens-captions-settings-dialog'],
|
|
6664
|
+
', opens subtitles settings dialog': translations[',-opens-subtitles-settings-dialog'],
|
|
6665
|
+
', opens descriptions settings dialog': translations[',-opens-descriptions-settings-dialog'],
|
|
6666
|
+
', selected': translations[',-selected'],
|
|
6667
|
+
'captions settings': translations['captions-settings'],
|
|
6668
|
+
'subtitles settings': translations['subtitles-settings'],
|
|
6669
|
+
'descriptions settings': translations['descriptions-settings'],
|
|
6670
|
+
Text: translations.text,
|
|
6671
|
+
White: translations.white,
|
|
6672
|
+
Black: translations.black,
|
|
6673
|
+
Red: translations.red,
|
|
6674
|
+
Green: translations.green,
|
|
6675
|
+
Blue: translations.blue,
|
|
6676
|
+
Yellow: translations.yellow,
|
|
6677
|
+
Magenta: translations.magenta,
|
|
6678
|
+
Cyan: translations.cyan,
|
|
6679
|
+
Background: translations.background,
|
|
6680
|
+
Window: translations.window,
|
|
6681
|
+
Transparent: translations.transparent,
|
|
6682
|
+
'Semi-Transparent': translations['semi-transparent'],
|
|
6683
|
+
Opaque: translations.opaque,
|
|
6684
|
+
'Font Size': translations['font-size'],
|
|
6685
|
+
'Text Edge Style': translations['text-edge-style'],
|
|
6686
|
+
None: translations.none,
|
|
6687
|
+
Uniform: translations.uniform,
|
|
6688
|
+
'Drop shadow': translations['drop-shadow'],
|
|
6689
|
+
'Font Family': translations['font-family'],
|
|
6690
|
+
'Proportional Sans-Serif': translations['proportional-sans-serif'],
|
|
6691
|
+
'Monospace Sans-Serif': translations['monospace-sans-serif'],
|
|
6692
|
+
'Proportional Serif': translations['proportional-serif'],
|
|
6693
|
+
'Monospace Serif': translations['monospace-serif'],
|
|
6694
|
+
'Small Caps': translations['small-caps'],
|
|
6695
|
+
Reset: translations.reset,
|
|
6696
|
+
'restore all settings to the default values': translations['restore-all-settings-to-the-default-values'],
|
|
6697
|
+
Done: translations.done,
|
|
6698
|
+
'Caption Settings Dialog': translations['caption-settings-dialog'],
|
|
6699
|
+
'Beginning of dialog window. Escape will cancel and close the window.': translations['beginning-of-dialog-window.-escape-will-cancel-and-close-the-window.'],
|
|
6700
|
+
'End of dialog window.': translations['end-of-dialog-window.'],
|
|
6701
|
+
'{1} is loading.': translations['{1}-is-loading.'],
|
|
6702
|
+
'Exit Picture-in-Picture': translations['exit-picture-in-picture'],
|
|
6703
|
+
'Picture-in-Picture': translations['picture-in-picture'],
|
|
6704
|
+
Color: translations.color,
|
|
6705
|
+
Opacity: translations.opacity,
|
|
6706
|
+
'Text Background': translations['text-background'],
|
|
6707
|
+
'Caption Area Background': translations['caption-area-background'],
|
|
6708
|
+
'Skip forward {1} seconds': translations['skip-forward-{1}-seconds'],
|
|
6709
|
+
'Skip backward {1} seconds': translations['skip-backward-{1}-seconds'],
|
|
6710
|
+
};
|
|
6711
|
+
}
|
|
6712
|
+
|
|
6713
|
+
const preferencesMap = { ck3: {} };
|
|
6714
|
+
const STORAGE_KEY = 'bs-ck3';
|
|
6715
|
+
/*
|
|
6716
|
+
Possible choices:
|
|
6717
|
+
false => Accept once
|
|
6718
|
+
true => Accept always
|
|
6719
|
+
*/
|
|
6720
|
+
const rememberChoice = (service, remember) => {
|
|
6721
|
+
preferencesMap.ck3[service] = remember;
|
|
6722
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(preferencesMap.ck3));
|
|
6723
|
+
};
|
|
6724
|
+
const isChoiceRemembered = (service) => {
|
|
6725
|
+
preferencesMap.ck3 = JSON.parse(localStorage.getItem(STORAGE_KEY) || '{}');
|
|
6726
|
+
return Boolean(preferencesMap.ck3[service]) || false;
|
|
6727
|
+
};
|
|
6728
|
+
const clearAllRememberedChoices = () => {
|
|
6729
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
6730
|
+
};
|
|
6731
|
+
const cookies = {
|
|
6732
|
+
rememberChoice,
|
|
6733
|
+
isChoiceRemembered,
|
|
6734
|
+
clearAllRememberedChoices,
|
|
6735
|
+
};
|
|
6736
|
+
|
|
6737
|
+
const hasYoutubeVideo = (options) => options.source?.type === 'video/youtube';
|
|
6738
|
+
class VideoPlayerConfigService {
|
|
6739
|
+
#languageService = inject(VideoPlayerI18nService);
|
|
6740
|
+
async configureTech({ tech }) {
|
|
6741
|
+
if (tech === 'youtube') {
|
|
6742
|
+
initYoutubePlugin(videojs);
|
|
6743
|
+
}
|
|
6744
|
+
}
|
|
6745
|
+
mergeConfig(o) {
|
|
6746
|
+
const options = o;
|
|
6747
|
+
const captions = options.captions ? options.captions.map(c => ({ ...c, kind: 'captions' })) : [];
|
|
6748
|
+
const chapters = options.chapters ? options.chapters.map(c => ({ ...c, kind: 'chapters' })) : [];
|
|
6749
|
+
const isYoutubeVideo = hasYoutubeVideo(options);
|
|
6750
|
+
const DEFAULT_CONFIG = this.#languageService.getLanguage();
|
|
6751
|
+
const tech = isYoutubeVideo ? 'youtube' : 'html5';
|
|
6752
|
+
const techOrder = [tech];
|
|
6753
|
+
//https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#preload
|
|
6754
|
+
const preload = options.preload ?? 'metadata';
|
|
6755
|
+
const config = { ...DEFAULT_CONFIG, ...options, preload, techOrder, tracks: [...captions, ...chapters], tech: 'html5' };
|
|
6756
|
+
return isYoutubeVideo
|
|
6757
|
+
? {
|
|
6758
|
+
...config,
|
|
6759
|
+
sources: [o.source],
|
|
6760
|
+
tech: 'youtube',
|
|
6761
|
+
youtube: { ytControls: 2, rel: 0, fs: 0, modestbranding: 1 },
|
|
6762
|
+
}
|
|
6763
|
+
: config;
|
|
6764
|
+
}
|
|
6765
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6766
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerConfigService, providedIn: 'root' }); }
|
|
6767
|
+
}
|
|
6768
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerConfigService, decorators: [{
|
|
6769
|
+
type: Injectable,
|
|
6770
|
+
args: [{ providedIn: 'root' }]
|
|
6771
|
+
}] });
|
|
6772
|
+
|
|
6773
|
+
var ViewType;
|
|
6774
|
+
(function (ViewType) {
|
|
6775
|
+
ViewType["Default"] = "DEFAULT";
|
|
6776
|
+
ViewType["Overlay"] = "OVERLAY";
|
|
6777
|
+
})(ViewType || (ViewType = {}));
|
|
6778
|
+
/**
|
|
6779
|
+
* Video Player
|
|
6780
|
+
* @description Component that allows playing a video.
|
|
6781
|
+
*/
|
|
6782
|
+
class ItVideoPlayerComponent extends ItAbstractComponent {
|
|
6783
|
+
#destroyRef;
|
|
6784
|
+
get viewType() {
|
|
6785
|
+
return this.viewType$.value;
|
|
6786
|
+
}
|
|
6787
|
+
constructor(config) {
|
|
6788
|
+
super();
|
|
6789
|
+
this.config = config;
|
|
6790
|
+
this.viewTypes = ViewType;
|
|
6791
|
+
this.viewType$ = new BehaviorSubject(undefined);
|
|
6792
|
+
this.cookieAccepted$ = new BehaviorSubject(false);
|
|
6793
|
+
this.i18nService = inject(VideoPlayerI18nService);
|
|
6794
|
+
this.#destroyRef = inject(DestroyRef);
|
|
6795
|
+
}
|
|
6796
|
+
async ngOnInit() {
|
|
6797
|
+
const config = this.config.mergeConfig(this.options);
|
|
6798
|
+
this.setViewType(config);
|
|
6799
|
+
await this.config.configureTech(config);
|
|
6800
|
+
if (!this.videoPlayerRef) {
|
|
6801
|
+
this.cookieAccepted$
|
|
6802
|
+
.pipe(takeUntilDestroyed(this.#destroyRef), delay(0), tap({
|
|
6803
|
+
next: value => {
|
|
6804
|
+
if (value && !this.player) {
|
|
6805
|
+
this.initVideoPlayer();
|
|
6806
|
+
}
|
|
6807
|
+
},
|
|
6808
|
+
}))
|
|
6809
|
+
.subscribe();
|
|
6810
|
+
return;
|
|
6811
|
+
}
|
|
6812
|
+
this.initVideoPlayer();
|
|
6813
|
+
}
|
|
6814
|
+
ngAfterViewInit() {
|
|
6815
|
+
if (this.viewType === ViewType.Overlay && cookies.isChoiceRemembered('youtube.com')) {
|
|
6816
|
+
this.hideOverlay();
|
|
6817
|
+
}
|
|
6818
|
+
}
|
|
6819
|
+
ngOnDestroy() {
|
|
6820
|
+
if (this.player) {
|
|
6821
|
+
this.player.dispose();
|
|
6822
|
+
}
|
|
6823
|
+
}
|
|
6824
|
+
acceptCookieHandler() {
|
|
6825
|
+
this.rememberHandler();
|
|
6826
|
+
this.hideOverlay();
|
|
6827
|
+
this.cookieAccepted$.next(true);
|
|
6828
|
+
}
|
|
6829
|
+
initVideoPlayer() {
|
|
6830
|
+
const config = this.config.mergeConfig(this.options);
|
|
6831
|
+
this.setVideoAttributes(config);
|
|
6832
|
+
this.setVideoPlayer();
|
|
6833
|
+
}
|
|
6834
|
+
setVideoPlayer() {
|
|
6835
|
+
const config = this.config.mergeConfig(this.options);
|
|
6836
|
+
const onPlayerReadyCb = () => {
|
|
6837
|
+
if (!this.player) {
|
|
6838
|
+
return;
|
|
6839
|
+
}
|
|
6840
|
+
this.i18nService.init(this.player, this.#destroyRef);
|
|
6841
|
+
};
|
|
6842
|
+
if (!this.videoPlayerRef) {
|
|
6843
|
+
throw Error('videoPlayerRef is undefined');
|
|
6844
|
+
}
|
|
6845
|
+
this.player = videojs(this.videoPlayerRef.nativeElement, config, onPlayerReadyCb.bind(this));
|
|
6846
|
+
}
|
|
6847
|
+
setViewType(config) {
|
|
6848
|
+
this.viewType$.next(config.tech === 'youtube' ? ViewType.Overlay : ViewType.Default);
|
|
6849
|
+
this.cookieAccepted$.next(this.viewType === ViewType.Overlay && cookies.isChoiceRemembered('youtube.com'));
|
|
6850
|
+
}
|
|
6851
|
+
hideOverlay() {
|
|
6852
|
+
if (!this.acceptOverlayableRef) {
|
|
6853
|
+
return;
|
|
6854
|
+
}
|
|
6855
|
+
const classes = ['show'];
|
|
6856
|
+
this.acceptOverlayableRef.nativeElement.classList.remove(...classes);
|
|
6857
|
+
if (!this.acceptOveralyRef) {
|
|
6858
|
+
return;
|
|
6859
|
+
}
|
|
6860
|
+
this.acceptOveralyRef.nativeElement.classList.remove(...classes);
|
|
6861
|
+
this.acceptOveralyRef.nativeElement.setAttribute('aria-hidden', 'true');
|
|
6862
|
+
}
|
|
6863
|
+
rememberHandler() {
|
|
6864
|
+
if (!this.chrRememberRef) {
|
|
6865
|
+
return;
|
|
6866
|
+
}
|
|
6867
|
+
const remember = this.chrRememberRef.nativeElement.checked;
|
|
6868
|
+
cookies.rememberChoice('youtube.com', remember);
|
|
6869
|
+
}
|
|
6870
|
+
setVideoAttributes(options) {
|
|
6871
|
+
if (!this.videoPlayerRef) {
|
|
6872
|
+
return;
|
|
6873
|
+
}
|
|
6874
|
+
const v = this.videoPlayerRef.nativeElement;
|
|
6875
|
+
const { autoplay, controls, loop, muted, poster, fluid } = options;
|
|
6876
|
+
if (autoplay) {
|
|
6877
|
+
v.setAttribute('autoplay', autoplay.toString());
|
|
6878
|
+
}
|
|
6879
|
+
if (controls) {
|
|
6880
|
+
v.setAttribute('controls', '');
|
|
6881
|
+
}
|
|
6882
|
+
if (loop) {
|
|
6883
|
+
v.setAttribute('loop', '');
|
|
6884
|
+
}
|
|
6885
|
+
if (muted) {
|
|
6886
|
+
v.setAttribute('muted', '');
|
|
6887
|
+
}
|
|
6888
|
+
if (poster) {
|
|
6889
|
+
v.setAttribute('poster', poster);
|
|
6890
|
+
}
|
|
6891
|
+
if (fluid) {
|
|
6892
|
+
v.setAttribute('fluid', '');
|
|
6893
|
+
}
|
|
6894
|
+
v.setAttribute('preload', 'none');
|
|
6895
|
+
v.setAttribute('playsinline', '');
|
|
6896
|
+
}
|
|
6897
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerComponent, deps: [{ token: VideoPlayerConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6898
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItVideoPlayerComponent, isStandalone: true, selector: "it-video-player", inputs: { options: "options" }, viewQueries: [{ propertyName: "videoPlayerRef", first: true, predicate: ["videoPlayer"], descendants: true }, { propertyName: "acceptOveralyRef", first: true, predicate: ["acceptOveraly"], descendants: true }, { propertyName: "acceptOverlayableRef", first: true, predicate: ["acceptOverlayable"], descendants: true }, { propertyName: "chrRememberRef", first: true, predicate: ["chkRemember"], descendants: true }], usesInheritance: true, ngImport: i0, template: `@switch (viewType$ | async) {
|
|
6899
|
+
@case (viewTypes.Default) {
|
|
6900
|
+
<div class="row">
|
|
6901
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
6902
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
6903
|
+
</div>
|
|
6904
|
+
}
|
|
6905
|
+
@case (viewTypes.Overlay) {
|
|
6906
|
+
<div #acceptOverlayable class="acceptoverlayable show">
|
|
6907
|
+
<div #acceptOveraly class="acceptoverlay acceptoverlay-primary fade show">
|
|
6908
|
+
<div class="acceptoverlay-inner">
|
|
6909
|
+
<div class="acceptoverlay-icon">
|
|
6910
|
+
<svg class="icon icon-xl"><use href="/bootstrap-italia/dist/svg/sprites.svg#it-video"></use></svg>
|
|
6911
|
+
</div>
|
|
6912
|
+
<p>
|
|
6913
|
+
Accetta i cookie di YouTube per vedere il video. Puoi gestire le preferenze nella
|
|
6914
|
+
<a href="#" class="text-white">cookie policy</a>.
|
|
6915
|
+
</p>
|
|
6916
|
+
<div class="acceptoverlay-buttons bg-dark">
|
|
6917
|
+
<button type="button" class="btn btn-primary" (click)="acceptCookieHandler()">Accetta</button>
|
|
6918
|
+
<div class="form-check">
|
|
6919
|
+
<input id="chk-remember{{ id }}" type="checkbox" #chkRemember />
|
|
6920
|
+
<label for="chk-remember{{ id }}">Ricorda per tutti i video</label>
|
|
6921
|
+
</div>
|
|
6922
|
+
</div>
|
|
6923
|
+
</div>
|
|
6924
|
+
</div>
|
|
6925
|
+
@if (cookieAccepted$ | async) {
|
|
6926
|
+
<div>
|
|
6927
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
6928
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
6929
|
+
</div>
|
|
6930
|
+
}
|
|
6931
|
+
</div>
|
|
6932
|
+
}
|
|
6933
|
+
@default {
|
|
6934
|
+
<h1>No video provider</h1>
|
|
6935
|
+
}
|
|
6936
|
+
}
|
|
6937
|
+
<ng-template #videoTemplate>
|
|
6938
|
+
<div>
|
|
6939
|
+
<video #videoPlayer class="video-js vjs-theme-bootstrap-italia vjs-fluid vjs-big-play-centered"></video>
|
|
6940
|
+
</div>
|
|
6941
|
+
</ng-template>
|
|
6942
|
+
|
|
6943
|
+
<ng-template #transcriptionTemplate>
|
|
6944
|
+
<div class="vjs-transcription accordion">
|
|
6945
|
+
<div class="accordion-item">
|
|
6946
|
+
<h2 class="accordion-header " id="transcription-{{ id }}-head">
|
|
6947
|
+
<button
|
|
6948
|
+
class="accordion-button collapsed"
|
|
6949
|
+
type="button"
|
|
6950
|
+
data-bs-toggle="collapse"
|
|
6951
|
+
[attr.data-bs-target]="'#transcription-' + id"
|
|
6952
|
+
[attr.aria-controls]="'transcription-' + id"
|
|
6953
|
+
aria-expanded="true">
|
|
6954
|
+
<ng-content select="[transcriptionTitle]">Trascrizione</ng-content>
|
|
6955
|
+
</button>
|
|
6956
|
+
</h2>
|
|
6957
|
+
<div
|
|
6958
|
+
id="transcription-{{ id }}"
|
|
6959
|
+
class="accordion-collapse collapse"
|
|
6960
|
+
role="region"
|
|
6961
|
+
[attr.aria-labelledby]="'transcription-' + id + '-head'">
|
|
6962
|
+
<div class="accordion-body">
|
|
6963
|
+
<ng-content select="[transcriptionText]">-</ng-content>
|
|
6964
|
+
</div>
|
|
6965
|
+
</div>
|
|
6966
|
+
</div>
|
|
6967
|
+
</div>
|
|
6968
|
+
</ng-template> `, isInline: true, dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
6969
|
+
}
|
|
6970
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerComponent, decorators: [{
|
|
6971
|
+
type: Component,
|
|
6972
|
+
args: [{
|
|
6973
|
+
standalone: true,
|
|
6974
|
+
selector: 'it-video-player',
|
|
6975
|
+
template: `@switch (viewType$ | async) {
|
|
6976
|
+
@case (viewTypes.Default) {
|
|
6977
|
+
<div class="row">
|
|
6978
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
6979
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
6980
|
+
</div>
|
|
6981
|
+
}
|
|
6982
|
+
@case (viewTypes.Overlay) {
|
|
6983
|
+
<div #acceptOverlayable class="acceptoverlayable show">
|
|
6984
|
+
<div #acceptOveraly class="acceptoverlay acceptoverlay-primary fade show">
|
|
6985
|
+
<div class="acceptoverlay-inner">
|
|
6986
|
+
<div class="acceptoverlay-icon">
|
|
6987
|
+
<svg class="icon icon-xl"><use href="/bootstrap-italia/dist/svg/sprites.svg#it-video"></use></svg>
|
|
6988
|
+
</div>
|
|
6989
|
+
<p>
|
|
6990
|
+
Accetta i cookie di YouTube per vedere il video. Puoi gestire le preferenze nella
|
|
6991
|
+
<a href="#" class="text-white">cookie policy</a>.
|
|
6992
|
+
</p>
|
|
6993
|
+
<div class="acceptoverlay-buttons bg-dark">
|
|
6994
|
+
<button type="button" class="btn btn-primary" (click)="acceptCookieHandler()">Accetta</button>
|
|
6995
|
+
<div class="form-check">
|
|
6996
|
+
<input id="chk-remember{{ id }}" type="checkbox" #chkRemember />
|
|
6997
|
+
<label for="chk-remember{{ id }}">Ricorda per tutti i video</label>
|
|
6998
|
+
</div>
|
|
6999
|
+
</div>
|
|
7000
|
+
</div>
|
|
7001
|
+
</div>
|
|
7002
|
+
@if (cookieAccepted$ | async) {
|
|
7003
|
+
<div>
|
|
7004
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
7005
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
7006
|
+
</div>
|
|
7007
|
+
}
|
|
7008
|
+
</div>
|
|
7009
|
+
}
|
|
7010
|
+
@default {
|
|
7011
|
+
<h1>No video provider</h1>
|
|
7012
|
+
}
|
|
7013
|
+
}
|
|
7014
|
+
<ng-template #videoTemplate>
|
|
7015
|
+
<div>
|
|
7016
|
+
<video #videoPlayer class="video-js vjs-theme-bootstrap-italia vjs-fluid vjs-big-play-centered"></video>
|
|
7017
|
+
</div>
|
|
7018
|
+
</ng-template>
|
|
7019
|
+
|
|
7020
|
+
<ng-template #transcriptionTemplate>
|
|
7021
|
+
<div class="vjs-transcription accordion">
|
|
7022
|
+
<div class="accordion-item">
|
|
7023
|
+
<h2 class="accordion-header " id="transcription-{{ id }}-head">
|
|
7024
|
+
<button
|
|
7025
|
+
class="accordion-button collapsed"
|
|
7026
|
+
type="button"
|
|
7027
|
+
data-bs-toggle="collapse"
|
|
7028
|
+
[attr.data-bs-target]="'#transcription-' + id"
|
|
7029
|
+
[attr.aria-controls]="'transcription-' + id"
|
|
7030
|
+
aria-expanded="true">
|
|
7031
|
+
<ng-content select="[transcriptionTitle]">Trascrizione</ng-content>
|
|
7032
|
+
</button>
|
|
7033
|
+
</h2>
|
|
7034
|
+
<div
|
|
7035
|
+
id="transcription-{{ id }}"
|
|
7036
|
+
class="accordion-collapse collapse"
|
|
7037
|
+
role="region"
|
|
7038
|
+
[attr.aria-labelledby]="'transcription-' + id + '-head'">
|
|
7039
|
+
<div class="accordion-body">
|
|
7040
|
+
<ng-content select="[transcriptionText]">-</ng-content>
|
|
7041
|
+
</div>
|
|
7042
|
+
</div>
|
|
7043
|
+
</div>
|
|
7044
|
+
</div>
|
|
7045
|
+
</ng-template> `,
|
|
7046
|
+
imports: [AsyncPipe, NgTemplateOutlet],
|
|
7047
|
+
encapsulation: ViewEncapsulation.None,
|
|
7048
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
7049
|
+
}]
|
|
7050
|
+
}], ctorParameters: () => [{ type: VideoPlayerConfigService }], propDecorators: { options: [{
|
|
7051
|
+
type: Input
|
|
7052
|
+
}], videoPlayerRef: [{
|
|
7053
|
+
type: ViewChild,
|
|
7054
|
+
args: ['videoPlayer', { static: false }]
|
|
7055
|
+
}], acceptOveralyRef: [{
|
|
7056
|
+
type: ViewChild,
|
|
7057
|
+
args: ['acceptOveraly', { static: false }]
|
|
7058
|
+
}], acceptOverlayableRef: [{
|
|
7059
|
+
type: ViewChild,
|
|
7060
|
+
args: ['acceptOverlayable', { static: false }]
|
|
7061
|
+
}], chrRememberRef: [{
|
|
7062
|
+
type: ViewChild,
|
|
7063
|
+
args: ['chkRemember', { static: false }]
|
|
7064
|
+
}] } });
|
|
7065
|
+
|
|
7066
|
+
// See options: https://videojs.com/guides/options
|
|
7067
|
+
|
|
7068
|
+
class ItVideoPlayerModule {
|
|
7069
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7070
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule, imports: [ItVideoPlayerComponent], exports: [ItVideoPlayerComponent] }); }
|
|
7071
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule }); }
|
|
7072
|
+
}
|
|
7073
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule, decorators: [{
|
|
7074
|
+
type: NgModule,
|
|
7075
|
+
args: [{
|
|
7076
|
+
imports: [ItVideoPlayerComponent],
|
|
7077
|
+
exports: [ItVideoPlayerComponent],
|
|
7078
|
+
}]
|
|
7079
|
+
}] });
|
|
7080
|
+
|
|
6389
7081
|
//Qs
|
|
6390
7082
|
//Aria hidden?
|
|
6391
7083
|
//state management with service?
|
|
@@ -6727,5 +7419,5 @@ class ItDateUtils {
|
|
|
6727
7419
|
* Generated bundle index. Do not edit.
|
|
6728
7420
|
*/
|
|
6729
7421
|
|
|
6730
|
-
export { CAP_REGEX, DesignAngularKitModule, EMAIL_REGEX, IBAN_REGEX, ITALIAN_TAX_CODE_REGEX, IT_ASSET_BASE_PATH, IT_SORT_DEFAULT_OPTIONS, IconNameArray, ItAccordionComponent, ItAlertComponent, ItAutocompleteComponent, ItAvatarDirective, ItAvatarDropdownComponent, ItAvatarDropdownItemComponent, ItAvatarGroupComponent, ItAvatarGroupItemComponent, ItAvatarModule, ItBackButtonComponent, ItBackToTopComponent, ItBadgeDirective, ItBreadcrumbComponent, ItBreadcrumbItemComponent, ItBreadcrumbsModule, ItButtonDirective, ItCalloutComponent, ItCardComponent, ItCarouselComponent, ItCarouselItemComponent, ItCarouselModule, ItCheckboxComponent, ItChipComponent, ItCollapseComponent, ItDateAgoPipe, ItDateUtils, ItDimmerButtonsComponent, ItDimmerComponent, ItDimmerIconComponent, ItDimmerModule, ItDropdownComponent, ItDropdownItemComponent, ItDropdownModule, ItDurationPipe, ItErrorPageComponent, ItFileUtils, ItFormModule, ItForwardDirective, ItHeaderComponent, ItIconComponent, ItInputComponent, ItLanguageSwitcherComponent, ItLinkComponent, ItListComponent, ItListItemComponent, ItListModule, ItMarkMatchingTextPipe, ItMegamenuComponent, ItModalComponent, ItNavBarComponent, ItNavBarItemComponent, ItNavBarModule, ItNavscrollComponent, ItNotificationService, ItNotificationsComponent, ItPaginationComponent, ItPasswordInputComponent, ItPopoverDirective, ItProgressBarComponent, ItProgressButtonComponent, ItRadioButtonComponent, ItRangeComponent, ItRatingComponent, ItSelectComponent, ItSidebarComponent, ItSkiplinkComponent, ItSkiplinkItemComponent, ItSkiplinkModule, ItSortDirective, ItSortHeaderComponent, ItSpinnerComponent, ItSteppersContainerComponent, ItSteppersItemComponent, ItSteppersModule, ItTabContainerComponent, ItTabItemComponent, ItTabModule, ItTableComponent, ItTableModule, ItTextareaComponent, ItTimelineComponent, ItTimelineItemComponent, ItTimelineModule, ItTooltipDirective, ItTransferComponent, ItUploadDragDropComponent, ItUploadFileListComponent, ItValidators, NotificationPosition, NotificationType, PHONE_NUMBER_REGEX, PLATE_REGEX, URL_REGEX, VAT_NUMBER_REGEX, provideDesignAngularKit };
|
|
7422
|
+
export { CAP_REGEX, DesignAngularKitModule, EMAIL_REGEX, IBAN_REGEX, ITALIAN_TAX_CODE_REGEX, IT_ASSET_BASE_PATH, IT_SORT_DEFAULT_OPTIONS, IconNameArray, ItAccordionComponent, ItAlertComponent, ItAutocompleteComponent, ItAvatarDirective, ItAvatarDropdownComponent, ItAvatarDropdownItemComponent, ItAvatarGroupComponent, ItAvatarGroupItemComponent, ItAvatarModule, ItBackButtonComponent, ItBackToTopComponent, ItBadgeDirective, ItBreadcrumbComponent, ItBreadcrumbItemComponent, ItBreadcrumbsModule, ItButtonDirective, ItCalloutComponent, ItCardComponent, ItCarouselComponent, ItCarouselItemComponent, ItCarouselModule, ItCheckboxComponent, ItChipComponent, ItCollapseComponent, ItDateAgoPipe, ItDateUtils, ItDimmerButtonsComponent, ItDimmerComponent, ItDimmerIconComponent, ItDimmerModule, ItDropdownComponent, ItDropdownItemComponent, ItDropdownModule, ItDurationPipe, ItErrorPageComponent, ItFileUtils, ItFormModule, ItForwardDirective, ItHeaderComponent, ItIconComponent, ItInputComponent, ItLanguageSwitcherComponent, ItLinkComponent, ItListComponent, ItListItemComponent, ItListModule, ItMarkMatchingTextPipe, ItMegamenuComponent, ItModalComponent, ItNavBarComponent, ItNavBarItemComponent, ItNavBarModule, ItNavscrollComponent, ItNotificationService, ItNotificationsComponent, ItPaginationComponent, ItPasswordInputComponent, ItPopoverDirective, ItProgressBarComponent, ItProgressButtonComponent, ItRadioButtonComponent, ItRangeComponent, ItRatingComponent, ItSearchComponent, ItSelectComponent, ItSidebarComponent, ItSkiplinkComponent, ItSkiplinkItemComponent, ItSkiplinkModule, ItSortDirective, ItSortHeaderComponent, ItSpinnerComponent, ItSteppersContainerComponent, ItSteppersItemComponent, ItSteppersModule, ItTabContainerComponent, ItTabItemComponent, ItTabModule, ItTableComponent, ItTableModule, ItTextareaComponent, ItTimelineComponent, ItTimelineItemComponent, ItTimelineModule, ItTooltipDirective, ItTransferComponent, ItUploadDragDropComponent, ItUploadFileListComponent, ItValidators, ItVideoPlayerComponent, ItVideoPlayerModule, NotificationPosition, NotificationType, PHONE_NUMBER_REGEX, PLATE_REGEX, URL_REGEX, VAT_NUMBER_REGEX, provideDesignAngularKit };
|
|
6731
7423
|
//# sourceMappingURL=design-angular-kit.mjs.map
|