design-angular-kit 1.2.2 → 1.3.1
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 +301 -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 +785 -95
- 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 +46 -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,18 +1,20 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Renderer2, ElementRef, ChangeDetectorRef, EventEmitter, Component, Input, Output,
|
|
3
|
-
import { Collapse, Alert, Dropdown, CarouselBI, Modal, Notification, Popover, Tab, Tooltip, InputPassword, ProgressDonut, BackToTop, NavBarCollapsible, HeaderSticky, loadFonts } from 'bootstrap-italia';
|
|
4
|
-
import * as i1 from '@ngx-translate/core';
|
|
5
|
-
import { TranslateModule, TranslatePipe, TranslateLoader, TranslateService } from '@ngx-translate/core';
|
|
2
|
+
import { inject, Renderer2, ElementRef, ChangeDetectorRef, EventEmitter, Component, Input, Output, Injectable, signal, DestroyRef, NgZone, Injector, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, booleanAttribute, InjectionToken, TemplateRef, HostBinding, ContentChildren, NgModule, Directive, Optional, Host, Inject, HostListener, Self, ViewChildren, Pipe, HostAttributeToken, APP_INITIALIZER, importProvidersFrom, makeEnvironmentProviders } from '@angular/core';
|
|
6
3
|
import * as i1$3 from '@angular/common';
|
|
7
4
|
import { NgTemplateOutlet, NgClass, DOCUMENT, AsyncPipe, LowerCasePipe, DatePipe, NgOptimizedImage, TitleCasePipe, JsonPipe, ViewportScroller } from '@angular/common';
|
|
5
|
+
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { tap, delay, startWith, Subject, filter, debounceTime, distinctUntilChanged, switchMap, of, merge, map, Observable, take, forkJoin, BehaviorSubject, shareReplay, combineLatest, skip, AsyncSubject, withLatestFrom, timer, takeWhile } from 'rxjs';
|
|
7
|
+
import videojs from 'video.js';
|
|
8
|
+
import * as i1 from '@ngx-translate/core';
|
|
9
|
+
import { TranslateService, TranslateModule, TranslatePipe, TranslateLoader } from '@ngx-translate/core';
|
|
10
|
+
import { initYoutubePlugin } from 'bootstrap-italia/dist/plugins/util/youtube-video.js';
|
|
11
|
+
import { Collapse, Alert, Dropdown, Carousel, Modal, Notification, Popover, Tab, Tooltip, InputPassword, ProgressDonut, SelectAutocomplete, BackToTop, NavBarCollapsible, HeaderSticky, loadFonts } from 'bootstrap-italia';
|
|
8
12
|
import * as i1$4 from '@angular/router';
|
|
9
13
|
import { RouterLink, RouterLinkActive, Router, NavigationEnd, Scroll, RouterLinkWithHref } from '@angular/router';
|
|
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
14
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
12
15
|
import * as i1$1 from '@angular/forms';
|
|
13
|
-
import { FormControl, Validators, ReactiveFormsModule, NgModel, FormControlName } from '@angular/forms';
|
|
16
|
+
import { FormControl, FormGroup, Validators, ReactiveFormsModule, NgModel, FormControlName } from '@angular/forms';
|
|
14
17
|
import * as i1$2 from '@angular/platform-browser';
|
|
15
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
16
18
|
import { provideHttpClient, HttpClient } from '@angular/common/http';
|
|
17
19
|
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
|
|
18
20
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
@@ -62,6 +64,481 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
62
64
|
type: Output
|
|
63
65
|
}] } });
|
|
64
66
|
|
|
67
|
+
class VideoPlayerI18nService {
|
|
68
|
+
#translate = inject(TranslateService);
|
|
69
|
+
init(player, destroyRef) {
|
|
70
|
+
this.#translate.onLangChange
|
|
71
|
+
.pipe(takeUntilDestroyed(destroyRef), tap({
|
|
72
|
+
next: e => {
|
|
73
|
+
const language = e.lang;
|
|
74
|
+
videojs.addLanguage(language, this.getTranslations());
|
|
75
|
+
player.language(language);
|
|
76
|
+
},
|
|
77
|
+
}))
|
|
78
|
+
.subscribe(x => {
|
|
79
|
+
console.log('onLangChange', x);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
getLanguage() {
|
|
83
|
+
const language = this.#translate.currentLang ?? 'it';
|
|
84
|
+
return {
|
|
85
|
+
languages: { [language]: mapToVideoJsTranslation(this.#translate.instant('it.video-player')) },
|
|
86
|
+
language,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
getTranslations() {
|
|
90
|
+
return mapToVideoJsTranslation(this.#translate.instant('it.video-player'));
|
|
91
|
+
}
|
|
92
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
93
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerI18nService, providedIn: 'root' }); }
|
|
94
|
+
}
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerI18nService, decorators: [{
|
|
96
|
+
type: Injectable,
|
|
97
|
+
args: [{ providedIn: 'root' }]
|
|
98
|
+
}] });
|
|
99
|
+
function mapToVideoJsTranslation(translations) {
|
|
100
|
+
return {
|
|
101
|
+
'Audio Player': translations['audio-player'],
|
|
102
|
+
'Video Player': translations['video-player'],
|
|
103
|
+
Play: translations.play,
|
|
104
|
+
Pause: translations.pause,
|
|
105
|
+
Replay: translations.replay,
|
|
106
|
+
'Current Time': translations['current-time'],
|
|
107
|
+
Duration: translations.duration,
|
|
108
|
+
'Remaining Time': translations['remaining-time'],
|
|
109
|
+
'Stream Type': translations['stream-type'],
|
|
110
|
+
LIVE: translations.live,
|
|
111
|
+
Loaded: translations.loaded,
|
|
112
|
+
Progress: translations.progress,
|
|
113
|
+
'Progress Bar': translations['progress-bar'],
|
|
114
|
+
'progress bar timing: currentTime={1} duration={2}': translations['progress-bar-timing:-currenttime={1}-duration={2}'],
|
|
115
|
+
Fullscreen: translations.fullscreen,
|
|
116
|
+
'Exit Fullscreen': translations['exit-fullscreen'],
|
|
117
|
+
Mute: translations.mute,
|
|
118
|
+
Unmute: translations.unmute,
|
|
119
|
+
'Playback Rate': translations['playback-rate'],
|
|
120
|
+
Subtitles: translations.subtitles,
|
|
121
|
+
'subtitles off': translations['subtitles-off'],
|
|
122
|
+
Captions: translations.captions,
|
|
123
|
+
'captions off': translations['captions-off'],
|
|
124
|
+
Chapters: translations.chapters,
|
|
125
|
+
Descriptions: translations.descriptions,
|
|
126
|
+
'descriptions off': translations['descriptions-off'],
|
|
127
|
+
'Audio Track': translations['audio-track'],
|
|
128
|
+
'Volume Level': translations['volume-level'],
|
|
129
|
+
'You aborted the media playback': translations['you-aborted-the-media-playback'],
|
|
130
|
+
'A network error caused the media download to fail part-way.': translations['a-network-error-caused-the-media-download-to-fail-part-way.'],
|
|
131
|
+
'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.'],
|
|
132
|
+
'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.'],
|
|
133
|
+
'No compatible source was found for this media.': translations['no-compatible-source-was-found-for-this-media.'],
|
|
134
|
+
'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.'],
|
|
135
|
+
'Play Video': translations['play-video'],
|
|
136
|
+
Close: translations.close,
|
|
137
|
+
'Close Modal Dialog': translations['close-modal-dialog'],
|
|
138
|
+
'Modal Window': translations['modal-window'],
|
|
139
|
+
'This is a modal window': translations['this-is-a-modal-window'],
|
|
140
|
+
'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.'],
|
|
141
|
+
', opens captions settings dialog': translations[',-opens-captions-settings-dialog'],
|
|
142
|
+
', opens subtitles settings dialog': translations[',-opens-subtitles-settings-dialog'],
|
|
143
|
+
', opens descriptions settings dialog': translations[',-opens-descriptions-settings-dialog'],
|
|
144
|
+
', selected': translations[',-selected'],
|
|
145
|
+
'captions settings': translations['captions-settings'],
|
|
146
|
+
'subtitles settings': translations['subtitles-settings'],
|
|
147
|
+
'descriptions settings': translations['descriptions-settings'],
|
|
148
|
+
Text: translations.text,
|
|
149
|
+
White: translations.white,
|
|
150
|
+
Black: translations.black,
|
|
151
|
+
Red: translations.red,
|
|
152
|
+
Green: translations.green,
|
|
153
|
+
Blue: translations.blue,
|
|
154
|
+
Yellow: translations.yellow,
|
|
155
|
+
Magenta: translations.magenta,
|
|
156
|
+
Cyan: translations.cyan,
|
|
157
|
+
Background: translations.background,
|
|
158
|
+
Window: translations.window,
|
|
159
|
+
Transparent: translations.transparent,
|
|
160
|
+
'Semi-Transparent': translations['semi-transparent'],
|
|
161
|
+
Opaque: translations.opaque,
|
|
162
|
+
'Font Size': translations['font-size'],
|
|
163
|
+
'Text Edge Style': translations['text-edge-style'],
|
|
164
|
+
None: translations.none,
|
|
165
|
+
Uniform: translations.uniform,
|
|
166
|
+
'Drop shadow': translations['drop-shadow'],
|
|
167
|
+
'Font Family': translations['font-family'],
|
|
168
|
+
'Proportional Sans-Serif': translations['proportional-sans-serif'],
|
|
169
|
+
'Monospace Sans-Serif': translations['monospace-sans-serif'],
|
|
170
|
+
'Proportional Serif': translations['proportional-serif'],
|
|
171
|
+
'Monospace Serif': translations['monospace-serif'],
|
|
172
|
+
'Small Caps': translations['small-caps'],
|
|
173
|
+
Reset: translations.reset,
|
|
174
|
+
'restore all settings to the default values': translations['restore-all-settings-to-the-default-values'],
|
|
175
|
+
Done: translations.done,
|
|
176
|
+
'Caption Settings Dialog': translations['caption-settings-dialog'],
|
|
177
|
+
'Beginning of dialog window. Escape will cancel and close the window.': translations['beginning-of-dialog-window.-escape-will-cancel-and-close-the-window.'],
|
|
178
|
+
'End of dialog window.': translations['end-of-dialog-window.'],
|
|
179
|
+
'{1} is loading.': translations['{1}-is-loading.'],
|
|
180
|
+
'Exit Picture-in-Picture': translations['exit-picture-in-picture'],
|
|
181
|
+
'Picture-in-Picture': translations['picture-in-picture'],
|
|
182
|
+
Color: translations.color,
|
|
183
|
+
Opacity: translations.opacity,
|
|
184
|
+
'Text Background': translations['text-background'],
|
|
185
|
+
'Caption Area Background': translations['caption-area-background'],
|
|
186
|
+
'Skip forward {1} seconds': translations['skip-forward-{1}-seconds'],
|
|
187
|
+
'Skip backward {1} seconds': translations['skip-backward-{1}-seconds'],
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const preferencesMap = { ck3: {} };
|
|
192
|
+
const STORAGE_KEY = 'bs-ck3';
|
|
193
|
+
/*
|
|
194
|
+
Possible choices:
|
|
195
|
+
false => Accept once
|
|
196
|
+
true => Accept always
|
|
197
|
+
*/
|
|
198
|
+
const rememberChoice = (service, remember) => {
|
|
199
|
+
preferencesMap.ck3[service] = remember;
|
|
200
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(preferencesMap.ck3));
|
|
201
|
+
};
|
|
202
|
+
const isChoiceRemembered = (service) => {
|
|
203
|
+
preferencesMap.ck3 = JSON.parse(localStorage.getItem(STORAGE_KEY) || '{}');
|
|
204
|
+
return Boolean(preferencesMap.ck3[service]) || false;
|
|
205
|
+
};
|
|
206
|
+
const clearAllRememberedChoices = () => {
|
|
207
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
208
|
+
};
|
|
209
|
+
const cookies = {
|
|
210
|
+
rememberChoice,
|
|
211
|
+
isChoiceRemembered,
|
|
212
|
+
clearAllRememberedChoices,
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const hasYoutubeVideo = (options) => options.source?.type === 'video/youtube';
|
|
216
|
+
class VideoPlayerConfigService {
|
|
217
|
+
#languageService = inject(VideoPlayerI18nService);
|
|
218
|
+
async configureTech({ tech }) {
|
|
219
|
+
if (tech === 'youtube') {
|
|
220
|
+
initYoutubePlugin(videojs);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
mergeConfig(o) {
|
|
224
|
+
const options = o;
|
|
225
|
+
const captions = options.captions ? options.captions.map(c => ({ ...c, kind: 'captions' })) : [];
|
|
226
|
+
const chapters = options.chapters ? options.chapters.map(c => ({ ...c, kind: 'chapters' })) : [];
|
|
227
|
+
const isYoutubeVideo = hasYoutubeVideo(options);
|
|
228
|
+
const DEFAULT_CONFIG = this.#languageService.getLanguage();
|
|
229
|
+
const tech = isYoutubeVideo ? 'youtube' : 'html5';
|
|
230
|
+
const techOrder = [tech];
|
|
231
|
+
//https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#preload
|
|
232
|
+
const preload = options.preload ?? 'metadata';
|
|
233
|
+
const config = { ...DEFAULT_CONFIG, ...options, preload, techOrder, tracks: [...captions, ...chapters], tech: 'html5' };
|
|
234
|
+
return isYoutubeVideo
|
|
235
|
+
? {
|
|
236
|
+
...config,
|
|
237
|
+
sources: [o.source],
|
|
238
|
+
tech: 'youtube',
|
|
239
|
+
youtube: { ytControls: 2, rel: 0, fs: 0, modestbranding: 1 },
|
|
240
|
+
}
|
|
241
|
+
: config;
|
|
242
|
+
}
|
|
243
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
244
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerConfigService, providedIn: 'root' }); }
|
|
245
|
+
}
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: VideoPlayerConfigService, decorators: [{
|
|
247
|
+
type: Injectable,
|
|
248
|
+
args: [{ providedIn: 'root' }]
|
|
249
|
+
}] });
|
|
250
|
+
|
|
251
|
+
var ViewType;
|
|
252
|
+
(function (ViewType) {
|
|
253
|
+
ViewType["Default"] = "DEFAULT";
|
|
254
|
+
ViewType["Overlay"] = "OVERLAY";
|
|
255
|
+
})(ViewType || (ViewType = {}));
|
|
256
|
+
/**
|
|
257
|
+
* Video Player
|
|
258
|
+
* @description Component that allows playing a video.
|
|
259
|
+
*/
|
|
260
|
+
class ItVideoPlayerComponent extends ItAbstractComponent {
|
|
261
|
+
#destroyRef;
|
|
262
|
+
constructor(config) {
|
|
263
|
+
super();
|
|
264
|
+
this.config = config;
|
|
265
|
+
this.player = null;
|
|
266
|
+
this.viewTypes = ViewType;
|
|
267
|
+
this.viewType = signal(undefined);
|
|
268
|
+
this.cookieAccepted = signal(false);
|
|
269
|
+
this.i18nService = inject(VideoPlayerI18nService);
|
|
270
|
+
this.#destroyRef = inject(DestroyRef);
|
|
271
|
+
this.ngZone = inject(NgZone);
|
|
272
|
+
this.injector = inject(Injector);
|
|
273
|
+
afterNextRender(() => {
|
|
274
|
+
if (this.viewType() === ViewType.Overlay && cookies.isChoiceRemembered('youtube.com')) {
|
|
275
|
+
this.hideOverlay();
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
this.#destroyRef.onDestroy(() => this.player?.dispose());
|
|
279
|
+
}
|
|
280
|
+
async ngOnInit() {
|
|
281
|
+
const config = this.config.mergeConfig(this.options);
|
|
282
|
+
this.setViewType(config);
|
|
283
|
+
// Avoid running change detections while the script is being loaded.
|
|
284
|
+
await this.ngZone.runOutsideAngular(() => this.config.configureTech(config));
|
|
285
|
+
if (!this.videoPlayerRef) {
|
|
286
|
+
// Note: No need to pipe with `takeUntilDestroyed`; `toObservable` is
|
|
287
|
+
// completed by Angular when the `DestroyRef` from the injector is destroyed.
|
|
288
|
+
toObservable(this.cookieAccepted, { injector: this.injector })
|
|
289
|
+
.pipe(delay(0))
|
|
290
|
+
.subscribe(value => {
|
|
291
|
+
if (value && !this.player) {
|
|
292
|
+
this.initVideoPlayer();
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
this.initVideoPlayer();
|
|
298
|
+
}
|
|
299
|
+
acceptCookieHandler() {
|
|
300
|
+
this.rememberHandler();
|
|
301
|
+
this.hideOverlay();
|
|
302
|
+
this.cookieAccepted.set(true);
|
|
303
|
+
}
|
|
304
|
+
initVideoPlayer() {
|
|
305
|
+
const config = this.config.mergeConfig(this.options);
|
|
306
|
+
this.setVideoAttributes(config);
|
|
307
|
+
this.setVideoPlayer();
|
|
308
|
+
}
|
|
309
|
+
setVideoPlayer() {
|
|
310
|
+
const config = this.config.mergeConfig(this.options);
|
|
311
|
+
const onPlayerReadyCb = () => {
|
|
312
|
+
if (!this.player) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
this.i18nService.init(this.player, this.#destroyRef);
|
|
316
|
+
};
|
|
317
|
+
const element = this.videoPlayerRef?.nativeElement;
|
|
318
|
+
if (!element) {
|
|
319
|
+
throw Error('videoPlayerRef is undefined');
|
|
320
|
+
}
|
|
321
|
+
this.player = this.ngZone.runOutsideAngular(() => videojs(element, config, onPlayerReadyCb));
|
|
322
|
+
}
|
|
323
|
+
setViewType(config) {
|
|
324
|
+
this.viewType.set(config.tech === 'youtube' ? ViewType.Overlay : ViewType.Default);
|
|
325
|
+
this.cookieAccepted.set(this.viewType() === ViewType.Overlay && cookies.isChoiceRemembered('youtube.com'));
|
|
326
|
+
}
|
|
327
|
+
hideOverlay() {
|
|
328
|
+
if (!this.acceptOverlayableRef) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const classes = ['show'];
|
|
332
|
+
this.acceptOverlayableRef.nativeElement.classList.remove(...classes);
|
|
333
|
+
if (!this.acceptOveralyRef) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
this.acceptOveralyRef.nativeElement.classList.remove(...classes);
|
|
337
|
+
this.acceptOveralyRef.nativeElement.setAttribute('aria-hidden', 'true');
|
|
338
|
+
}
|
|
339
|
+
rememberHandler() {
|
|
340
|
+
if (!this.chrRememberRef) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const remember = this.chrRememberRef.nativeElement.checked;
|
|
344
|
+
cookies.rememberChoice('youtube.com', remember);
|
|
345
|
+
}
|
|
346
|
+
setVideoAttributes(options) {
|
|
347
|
+
if (!this.videoPlayerRef) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const v = this.videoPlayerRef.nativeElement;
|
|
351
|
+
const { autoplay, controls, loop, muted, poster, fluid } = options;
|
|
352
|
+
if (autoplay) {
|
|
353
|
+
v.setAttribute('autoplay', autoplay.toString());
|
|
354
|
+
}
|
|
355
|
+
if (controls) {
|
|
356
|
+
v.setAttribute('controls', '');
|
|
357
|
+
}
|
|
358
|
+
if (loop) {
|
|
359
|
+
v.setAttribute('loop', '');
|
|
360
|
+
}
|
|
361
|
+
if (muted) {
|
|
362
|
+
v.setAttribute('muted', '');
|
|
363
|
+
}
|
|
364
|
+
if (poster) {
|
|
365
|
+
v.setAttribute('poster', poster);
|
|
366
|
+
}
|
|
367
|
+
if (fluid) {
|
|
368
|
+
v.setAttribute('fluid', '');
|
|
369
|
+
}
|
|
370
|
+
v.setAttribute('preload', 'none');
|
|
371
|
+
v.setAttribute('playsinline', '');
|
|
372
|
+
}
|
|
373
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerComponent, deps: [{ token: VideoPlayerConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
374
|
+
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()) {
|
|
375
|
+
@case (viewTypes.Default) {
|
|
376
|
+
<div class="row">
|
|
377
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
378
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
379
|
+
</div>
|
|
380
|
+
}
|
|
381
|
+
@case (viewTypes.Overlay) {
|
|
382
|
+
<div #acceptOverlayable class="acceptoverlayable show">
|
|
383
|
+
<div #acceptOveraly class="acceptoverlay acceptoverlay-primary fade show">
|
|
384
|
+
<div class="acceptoverlay-inner">
|
|
385
|
+
<div class="acceptoverlay-icon">
|
|
386
|
+
<svg class="icon icon-xl"><use href="/bootstrap-italia/dist/svg/sprites.svg#it-video"></use></svg>
|
|
387
|
+
</div>
|
|
388
|
+
<p>
|
|
389
|
+
Accetta i cookie di YouTube per vedere il video. Puoi gestire le preferenze nella
|
|
390
|
+
<a href="#" class="text-white">cookie policy</a>.
|
|
391
|
+
</p>
|
|
392
|
+
<div class="acceptoverlay-buttons bg-dark">
|
|
393
|
+
<button type="button" class="btn btn-primary" (click)="acceptCookieHandler()">Accetta</button>
|
|
394
|
+
<div class="form-check">
|
|
395
|
+
<input id="chk-remember{{ id }}" type="checkbox" #chkRemember />
|
|
396
|
+
<label for="chk-remember{{ id }}">Ricorda per tutti i video</label>
|
|
397
|
+
</div>
|
|
398
|
+
</div>
|
|
399
|
+
</div>
|
|
400
|
+
</div>
|
|
401
|
+
@if (cookieAccepted()) {
|
|
402
|
+
<div>
|
|
403
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
404
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
405
|
+
</div>
|
|
406
|
+
}
|
|
407
|
+
</div>
|
|
408
|
+
}
|
|
409
|
+
@default {
|
|
410
|
+
<h1>No video provider</h1>
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
<ng-template #videoTemplate>
|
|
414
|
+
<div>
|
|
415
|
+
<video #videoPlayer class="video-js vjs-theme-bootstrap-italia vjs-fluid vjs-big-play-centered"></video>
|
|
416
|
+
</div>
|
|
417
|
+
</ng-template>
|
|
418
|
+
|
|
419
|
+
<ng-template #transcriptionTemplate>
|
|
420
|
+
<div class="vjs-transcription accordion">
|
|
421
|
+
<div class="accordion-item">
|
|
422
|
+
<h2 class="accordion-header " id="transcription-{{ id }}-head">
|
|
423
|
+
<button
|
|
424
|
+
class="accordion-button collapsed"
|
|
425
|
+
type="button"
|
|
426
|
+
data-bs-toggle="collapse"
|
|
427
|
+
[attr.data-bs-target]="'#transcription-' + id"
|
|
428
|
+
[attr.aria-controls]="'transcription-' + id"
|
|
429
|
+
aria-expanded="true">
|
|
430
|
+
<ng-content select="[transcriptionTitle]">Trascrizione</ng-content>
|
|
431
|
+
</button>
|
|
432
|
+
</h2>
|
|
433
|
+
<div
|
|
434
|
+
id="transcription-{{ id }}"
|
|
435
|
+
class="accordion-collapse collapse"
|
|
436
|
+
role="region"
|
|
437
|
+
[attr.aria-labelledby]="'transcription-' + id + '-head'">
|
|
438
|
+
<div class="accordion-body">
|
|
439
|
+
<ng-content select="[transcriptionText]">-</ng-content>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
</div>
|
|
443
|
+
</div>
|
|
444
|
+
</ng-template> `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
445
|
+
}
|
|
446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerComponent, decorators: [{
|
|
447
|
+
type: Component,
|
|
448
|
+
args: [{
|
|
449
|
+
standalone: true,
|
|
450
|
+
selector: 'it-video-player',
|
|
451
|
+
template: `@switch (viewType()) {
|
|
452
|
+
@case (viewTypes.Default) {
|
|
453
|
+
<div class="row">
|
|
454
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
455
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
456
|
+
</div>
|
|
457
|
+
}
|
|
458
|
+
@case (viewTypes.Overlay) {
|
|
459
|
+
<div #acceptOverlayable class="acceptoverlayable show">
|
|
460
|
+
<div #acceptOveraly class="acceptoverlay acceptoverlay-primary fade show">
|
|
461
|
+
<div class="acceptoverlay-inner">
|
|
462
|
+
<div class="acceptoverlay-icon">
|
|
463
|
+
<svg class="icon icon-xl"><use href="/bootstrap-italia/dist/svg/sprites.svg#it-video"></use></svg>
|
|
464
|
+
</div>
|
|
465
|
+
<p>
|
|
466
|
+
Accetta i cookie di YouTube per vedere il video. Puoi gestire le preferenze nella
|
|
467
|
+
<a href="#" class="text-white">cookie policy</a>.
|
|
468
|
+
</p>
|
|
469
|
+
<div class="acceptoverlay-buttons bg-dark">
|
|
470
|
+
<button type="button" class="btn btn-primary" (click)="acceptCookieHandler()">Accetta</button>
|
|
471
|
+
<div class="form-check">
|
|
472
|
+
<input id="chk-remember{{ id }}" type="checkbox" #chkRemember />
|
|
473
|
+
<label for="chk-remember{{ id }}">Ricorda per tutti i video</label>
|
|
474
|
+
</div>
|
|
475
|
+
</div>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
478
|
+
@if (cookieAccepted()) {
|
|
479
|
+
<div>
|
|
480
|
+
<ng-container *ngTemplateOutlet="videoTemplate"></ng-container>
|
|
481
|
+
<ng-container *ngTemplateOutlet="transcriptionTemplate"></ng-container>
|
|
482
|
+
</div>
|
|
483
|
+
}
|
|
484
|
+
</div>
|
|
485
|
+
}
|
|
486
|
+
@default {
|
|
487
|
+
<h1>No video provider</h1>
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
<ng-template #videoTemplate>
|
|
491
|
+
<div>
|
|
492
|
+
<video #videoPlayer class="video-js vjs-theme-bootstrap-italia vjs-fluid vjs-big-play-centered"></video>
|
|
493
|
+
</div>
|
|
494
|
+
</ng-template>
|
|
495
|
+
|
|
496
|
+
<ng-template #transcriptionTemplate>
|
|
497
|
+
<div class="vjs-transcription accordion">
|
|
498
|
+
<div class="accordion-item">
|
|
499
|
+
<h2 class="accordion-header " id="transcription-{{ id }}-head">
|
|
500
|
+
<button
|
|
501
|
+
class="accordion-button collapsed"
|
|
502
|
+
type="button"
|
|
503
|
+
data-bs-toggle="collapse"
|
|
504
|
+
[attr.data-bs-target]="'#transcription-' + id"
|
|
505
|
+
[attr.aria-controls]="'transcription-' + id"
|
|
506
|
+
aria-expanded="true">
|
|
507
|
+
<ng-content select="[transcriptionTitle]">Trascrizione</ng-content>
|
|
508
|
+
</button>
|
|
509
|
+
</h2>
|
|
510
|
+
<div
|
|
511
|
+
id="transcription-{{ id }}"
|
|
512
|
+
class="accordion-collapse collapse"
|
|
513
|
+
role="region"
|
|
514
|
+
[attr.aria-labelledby]="'transcription-' + id + '-head'">
|
|
515
|
+
<div class="accordion-body">
|
|
516
|
+
<ng-content select="[transcriptionText]">-</ng-content>
|
|
517
|
+
</div>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
</div>
|
|
521
|
+
</ng-template> `,
|
|
522
|
+
imports: [NgTemplateOutlet],
|
|
523
|
+
encapsulation: ViewEncapsulation.None,
|
|
524
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
525
|
+
}]
|
|
526
|
+
}], ctorParameters: () => [{ type: VideoPlayerConfigService }], propDecorators: { options: [{
|
|
527
|
+
type: Input
|
|
528
|
+
}], videoPlayerRef: [{
|
|
529
|
+
type: ViewChild,
|
|
530
|
+
args: ['videoPlayer', { static: false }]
|
|
531
|
+
}], acceptOveralyRef: [{
|
|
532
|
+
type: ViewChild,
|
|
533
|
+
args: ['acceptOveraly', { static: false }]
|
|
534
|
+
}], acceptOverlayableRef: [{
|
|
535
|
+
type: ViewChild,
|
|
536
|
+
args: ['acceptOverlayable', { static: false }]
|
|
537
|
+
}], chrRememberRef: [{
|
|
538
|
+
type: ViewChild,
|
|
539
|
+
args: ['chkRemember', { static: false }]
|
|
540
|
+
}] } });
|
|
541
|
+
|
|
65
542
|
/**
|
|
66
543
|
* Transforms a value (typically a string) to a boolean.
|
|
67
544
|
* Intended to be used as a transform function of an input.
|
|
@@ -1117,7 +1594,6 @@ class ItCarouselComponent {
|
|
|
1117
1594
|
this.trackClass = '';
|
|
1118
1595
|
}
|
|
1119
1596
|
ngAfterViewInit() {
|
|
1120
|
-
this.carousel = CarouselBI.getOrCreateInstance(this.carouselDiv.nativeElement);
|
|
1121
1597
|
this.items?.changes
|
|
1122
1598
|
.pipe(
|
|
1123
1599
|
// When carousel items changes (dynamic add/remove)
|
|
@@ -1129,22 +1605,25 @@ class ItCarouselComponent {
|
|
|
1129
1605
|
}));
|
|
1130
1606
|
this._changeDetectorRef.detectChanges(); // Force update html render
|
|
1131
1607
|
});
|
|
1608
|
+
setTimeout(() => {
|
|
1609
|
+
this.carousel = Carousel.getOrCreateInstance(this.carouselDiv.nativeElement);
|
|
1610
|
+
}, 100);
|
|
1132
1611
|
}
|
|
1133
1612
|
ngOnDestroy() {
|
|
1134
1613
|
this.itemSubscriptions?.forEach(item => item.unsubscribe());
|
|
1135
1614
|
}
|
|
1136
1615
|
/**
|
|
1137
|
-
* Removes
|
|
1616
|
+
* Removes Carousel features
|
|
1138
1617
|
*/
|
|
1139
1618
|
dispose() {
|
|
1140
1619
|
this.carousel?.dispose();
|
|
1141
1620
|
}
|
|
1142
1621
|
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\"
|
|
1622
|
+
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
1623
|
}
|
|
1145
1624
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItCarouselComponent, decorators: [{
|
|
1146
1625
|
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\"
|
|
1626
|
+
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
1627
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { title: [{
|
|
1149
1628
|
type: Input
|
|
1150
1629
|
}], type: [{
|
|
@@ -1978,19 +2457,20 @@ class ItAbstractFormComponent extends ItAbstractComponent {
|
|
|
1978
2457
|
set disabled(isDisabled) {
|
|
1979
2458
|
this.setDisabledState(isDisabled);
|
|
1980
2459
|
}
|
|
1981
|
-
constructor(_translateService, _ngControl) {
|
|
2460
|
+
constructor(_translateService, _ngControl, fgd) {
|
|
1982
2461
|
super();
|
|
1983
2462
|
this._translateService = _translateService;
|
|
1984
2463
|
this._ngControl = _ngControl;
|
|
2464
|
+
this.fgd = fgd;
|
|
1985
2465
|
/**
|
|
1986
2466
|
* Validation color display mode (validation triggered if field is touched or not pristine)
|
|
1987
2467
|
* - <b>true</b>: Always show the validation color
|
|
1988
2468
|
* - <b>false</b>: Never show validation color
|
|
1989
2469
|
* - <b>only-valid</b>: Show only valid validation color
|
|
1990
2470
|
* - <b>only-invalid</b>: Show only invalid validation color
|
|
1991
|
-
* @default <b>
|
|
2471
|
+
* @default <b>false</b>: Do not show the validation color by default
|
|
1992
2472
|
*/
|
|
1993
|
-
this.validationMode =
|
|
2473
|
+
this.validationMode = false;
|
|
1994
2474
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1995
2475
|
this.onChange = (_) => { };
|
|
1996
2476
|
this.onTouched = () => { };
|
|
@@ -2033,6 +2513,7 @@ class ItAbstractFormComponent extends ItAbstractComponent {
|
|
|
2033
2513
|
ngOnInit() {
|
|
2034
2514
|
if (this._ngControl?.control) {
|
|
2035
2515
|
this.control.setValidators(this._ngControl.control.validator);
|
|
2516
|
+
this.setValidationModeWhenInAForm();
|
|
2036
2517
|
}
|
|
2037
2518
|
}
|
|
2038
2519
|
registerOnChange(fn) {
|
|
@@ -2131,7 +2612,16 @@ class ItAbstractFormComponent extends ItAbstractComponent {
|
|
|
2131
2612
|
}
|
|
2132
2613
|
return this.control.getError(errorCode, path);
|
|
2133
2614
|
}
|
|
2134
|
-
|
|
2615
|
+
// This function assurest that validation mode remains complaiant with the Design kit
|
|
2616
|
+
// When the validation mode is `false` and input elements are wrapped in a `FormGroup`
|
|
2617
|
+
// validation mode is automatically set to `true`.
|
|
2618
|
+
setValidationModeWhenInAForm() {
|
|
2619
|
+
const isInAForm = this.fgd?.control instanceof FormGroup;
|
|
2620
|
+
if (isInAForm && this.validationMode == false) {
|
|
2621
|
+
this.validationMode = true;
|
|
2622
|
+
}
|
|
2623
|
+
}
|
|
2624
|
+
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
2625
|
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
2626
|
}
|
|
2137
2627
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAbstractFormComponent, decorators: [{
|
|
@@ -2141,6 +2631,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
2141
2631
|
type: Self
|
|
2142
2632
|
}, {
|
|
2143
2633
|
type: Optional
|
|
2634
|
+
}] }, { type: i1$1.ControlContainer, decorators: [{
|
|
2635
|
+
type: Optional
|
|
2144
2636
|
}] }], propDecorators: { label: [{
|
|
2145
2637
|
type: Input
|
|
2146
2638
|
}], validationMode: [{
|
|
@@ -2285,6 +2777,11 @@ class ItValidators {
|
|
|
2285
2777
|
static get tel() {
|
|
2286
2778
|
return ItValidators.customPattern(PHONE_NUMBER_REGEX, { invalidTel: true });
|
|
2287
2779
|
}
|
|
2780
|
+
static includes(possibleValues) {
|
|
2781
|
+
return formControl => {
|
|
2782
|
+
return possibleValues?.includes(formControl.value) ? null : { invalidSelection: true };
|
|
2783
|
+
};
|
|
2784
|
+
}
|
|
2288
2785
|
/**
|
|
2289
2786
|
* URL validator
|
|
2290
2787
|
*/
|
|
@@ -2481,11 +2978,11 @@ class ItInputComponent extends ItAbstractFormComponent {
|
|
|
2481
2978
|
this.control.setValue(value);
|
|
2482
2979
|
}
|
|
2483
2980
|
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
|
|
2981
|
+
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
2982
|
}
|
|
2486
2983
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItInputComponent, decorators: [{
|
|
2487
2984
|
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
|
|
2985
|
+
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
2986
|
}], propDecorators: { type: [{
|
|
2490
2987
|
type: Input
|
|
2491
2988
|
}], placeholder: [{
|
|
@@ -4467,7 +4964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
4467
4964
|
}]
|
|
4468
4965
|
}], ctorParameters: () => [{ type: i1$2.DomSanitizer }] });
|
|
4469
4966
|
|
|
4470
|
-
class
|
|
4967
|
+
class ItSearchComponent extends ItAbstractFormComponent {
|
|
4471
4968
|
constructor() {
|
|
4472
4969
|
super(...arguments);
|
|
4473
4970
|
/**
|
|
@@ -4489,52 +4986,52 @@ class ItAutocompleteComponent extends ItAbstractFormComponent {
|
|
|
4489
4986
|
*/
|
|
4490
4987
|
this.forceShowLabel = true;
|
|
4491
4988
|
/**
|
|
4492
|
-
* Fired when the
|
|
4989
|
+
* Fired when the Search Item has been selected
|
|
4493
4990
|
*/
|
|
4494
|
-
this.
|
|
4991
|
+
this.searchSelectedEvent = new EventEmitter();
|
|
4495
4992
|
this.showAutocompletion = false;
|
|
4496
4993
|
/** Observable da cui vengono emessi i risultati dell'auto completamento */
|
|
4497
|
-
this.
|
|
4994
|
+
this.searchResults$ = new Observable();
|
|
4498
4995
|
}
|
|
4499
4996
|
ngOnInit() {
|
|
4500
4997
|
super.ngOnInit();
|
|
4501
|
-
this.
|
|
4998
|
+
this.searchResults$ = this.getSearchResults$();
|
|
4502
4999
|
}
|
|
4503
5000
|
/**
|
|
4504
|
-
* Create the
|
|
5001
|
+
* Create the search list
|
|
4505
5002
|
*/
|
|
4506
|
-
|
|
5003
|
+
getSearchResults$() {
|
|
4507
5004
|
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
5005
|
distinctUntilChanged(), // Only if searchValue is distinct in comparison to the last value
|
|
4509
5006
|
switchMap(searchedValue => {
|
|
4510
|
-
if (!this.
|
|
5007
|
+
if (!this.searchData) {
|
|
4511
5008
|
return of({
|
|
4512
5009
|
searchedValue,
|
|
4513
5010
|
relatedEntries: [],
|
|
4514
5011
|
});
|
|
4515
5012
|
}
|
|
4516
|
-
const autoCompleteData$ = Array.isArray(this.
|
|
4517
|
-
return autoCompleteData$.pipe(map(
|
|
5013
|
+
const autoCompleteData$ = Array.isArray(this.searchData) ? of(this.searchData) : this.searchData(searchedValue);
|
|
5014
|
+
return autoCompleteData$.pipe(map(searchData => {
|
|
4518
5015
|
if (!searchedValue || typeof searchedValue === 'number') {
|
|
4519
5016
|
return { searchedValue, relatedEntries: [] };
|
|
4520
5017
|
}
|
|
4521
5018
|
const lowercaseValue = searchedValue.toLowerCase();
|
|
4522
|
-
const relatedEntries =
|
|
5019
|
+
const relatedEntries = searchData.filter(item => item.value?.toLowerCase().includes(lowercaseValue));
|
|
4523
5020
|
return { searchedValue, relatedEntries };
|
|
4524
5021
|
}));
|
|
4525
5022
|
}));
|
|
4526
5023
|
}
|
|
4527
5024
|
onEntryClick(entry, event) {
|
|
4528
|
-
// Se non è stato definito un link associato all'elemento dell'
|
|
5025
|
+
// Se non è stato definito un link associato all'elemento dell'search, probabilmente il desiderata
|
|
4529
5026
|
// non è effettuare la navigazione al default '#', pertanto in tal caso meglio annullare la navigazione.
|
|
4530
5027
|
if (!entry.link) {
|
|
4531
5028
|
event.preventDefault();
|
|
4532
5029
|
}
|
|
4533
|
-
this.
|
|
5030
|
+
this.searchSelectedEvent.next(entry);
|
|
4534
5031
|
this.control.setValue(entry.value);
|
|
4535
5032
|
this.showAutocompletion = false;
|
|
4536
5033
|
}
|
|
4537
|
-
|
|
5034
|
+
searchItemTrackByValueFn(index, item) {
|
|
4538
5035
|
return item.value;
|
|
4539
5036
|
}
|
|
4540
5037
|
onKeyDown() {
|
|
@@ -4544,13 +5041,13 @@ class ItAutocompleteComponent extends ItAbstractFormComponent {
|
|
|
4544
5041
|
const value = this.control.value;
|
|
4545
5042
|
return this.forceShowLabel && (!!value || !!this.placeholder);
|
|
4546
5043
|
}
|
|
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:
|
|
5044
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSearchComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5045
|
+
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
5046
|
}
|
|
4550
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type:
|
|
5047
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSearchComponent, decorators: [{
|
|
4551
5048
|
type: Component,
|
|
4552
|
-
args: [{ standalone: true, selector: 'it-
|
|
4553
|
-
}], propDecorators: {
|
|
5049
|
+
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" }]
|
|
5050
|
+
}], propDecorators: { searchData: [{
|
|
4554
5051
|
type: Input,
|
|
4555
5052
|
args: [{ required: true }]
|
|
4556
5053
|
}], big: [{
|
|
@@ -4565,7 +5062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
4565
5062
|
}], forceShowLabel: [{
|
|
4566
5063
|
type: Input,
|
|
4567
5064
|
args: [{ transform: inputToBoolean }]
|
|
4568
|
-
}],
|
|
5065
|
+
}], searchSelectedEvent: [{
|
|
4569
5066
|
type: Output
|
|
4570
5067
|
}] } });
|
|
4571
5068
|
|
|
@@ -5024,8 +5521,181 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
5024
5521
|
type: Output
|
|
5025
5522
|
}] } });
|
|
5026
5523
|
|
|
5524
|
+
class ItAutocompleteComponent extends ItAbstractFormComponent {
|
|
5525
|
+
constructor() {
|
|
5526
|
+
super(...arguments);
|
|
5527
|
+
/**
|
|
5528
|
+
* Autocomplete elements.
|
|
5529
|
+
* @default []
|
|
5530
|
+
*/
|
|
5531
|
+
this.source = [];
|
|
5532
|
+
/**
|
|
5533
|
+
* Autocomplete if required.
|
|
5534
|
+
* @default false
|
|
5535
|
+
*/
|
|
5536
|
+
this.required = false;
|
|
5537
|
+
/**
|
|
5538
|
+
* Prevents suggestions from appearing if fewer than N characters are typed
|
|
5539
|
+
* @default 0
|
|
5540
|
+
*/
|
|
5541
|
+
this.minLength = 0;
|
|
5542
|
+
/**
|
|
5543
|
+
* Default value
|
|
5544
|
+
*/
|
|
5545
|
+
this.defaultValue = '';
|
|
5546
|
+
/**
|
|
5547
|
+
* Function to set assistive hint label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5548
|
+
*/
|
|
5549
|
+
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';
|
|
5550
|
+
/**
|
|
5551
|
+
* Function to set label in case of no result. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5552
|
+
*/
|
|
5553
|
+
this.noResultsLabel = () => 'Nessun risultato trovato';
|
|
5554
|
+
/**
|
|
5555
|
+
* 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
|
|
5556
|
+
*/
|
|
5557
|
+
this.statusQueryTooShortLabel = minQueryLength => `Digita ${minQueryLength} o più caratteri per mostrare le opzioni di ricerca`;
|
|
5558
|
+
/**
|
|
5559
|
+
* Function to set no results label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5560
|
+
*/
|
|
5561
|
+
this.statusNoResultsLabel = () => 'Nessun risultato di ricerca';
|
|
5562
|
+
/**
|
|
5563
|
+
* Function to set selected option label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5564
|
+
*/
|
|
5565
|
+
this.statusSelectedOptionLabel = (selectedOption, length, index) => `${selectedOption} ${index + 1} di ${length} è sottolineato`;
|
|
5566
|
+
/**
|
|
5567
|
+
* Function to set status results label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
|
|
5568
|
+
*/
|
|
5569
|
+
this.statusResultsLabel = (length, contentSelectedOption) => {
|
|
5570
|
+
const words = {
|
|
5571
|
+
result: length === 1 ? 'risultato' : 'risultati',
|
|
5572
|
+
is: length === 1 ? 'è' : 'sono',
|
|
5573
|
+
available: length === 1 ? 'disponibile' : 'disponibili',
|
|
5574
|
+
};
|
|
5575
|
+
return `${length} ${words.result} ${words.is} ${words.available}. ${contentSelectedOption}`;
|
|
5576
|
+
};
|
|
5577
|
+
/**
|
|
5578
|
+
* Fired when value changes
|
|
5579
|
+
*/
|
|
5580
|
+
this.selected = new EventEmitter();
|
|
5581
|
+
this.value = '';
|
|
5582
|
+
this._interval = 0;
|
|
5583
|
+
this._inputEl = null;
|
|
5584
|
+
}
|
|
5585
|
+
ngOnInit() {
|
|
5586
|
+
super.ngOnInit();
|
|
5587
|
+
if (!this.control.value && !!this.value) {
|
|
5588
|
+
this.writeValue(this.value);
|
|
5589
|
+
this.onChange(this.value);
|
|
5590
|
+
}
|
|
5591
|
+
}
|
|
5592
|
+
clear() {
|
|
5593
|
+
this._inputEl.value = '';
|
|
5594
|
+
}
|
|
5595
|
+
_findInput() {
|
|
5596
|
+
this._interval = setInterval(() => {
|
|
5597
|
+
this._inputEl = document.getElementById(this.id);
|
|
5598
|
+
if (this._inputEl) {
|
|
5599
|
+
clearInterval(this._interval);
|
|
5600
|
+
this._initInputEl();
|
|
5601
|
+
}
|
|
5602
|
+
}, 500);
|
|
5603
|
+
}
|
|
5604
|
+
_setAndCheck(value) {
|
|
5605
|
+
this.value = value == '' ? undefined : value;
|
|
5606
|
+
if (this.control.touched) {
|
|
5607
|
+
this.writeValue(this.value);
|
|
5608
|
+
this.onChange(this.value);
|
|
5609
|
+
}
|
|
5610
|
+
if (this.isValid == false && this.isInvalid == false) {
|
|
5611
|
+
this._inputEl?.classList.remove('just-validate-success-field');
|
|
5612
|
+
this._inputEl?.classList.remove('is-invalid');
|
|
5613
|
+
}
|
|
5614
|
+
else if (this.isValid == true) {
|
|
5615
|
+
this._inputEl?.classList.add('just-validate-success-field');
|
|
5616
|
+
this._inputEl?.classList.remove('is-invalid');
|
|
5617
|
+
}
|
|
5618
|
+
else if (this.isInvalid == true) {
|
|
5619
|
+
this._inputEl?.classList.add('is-invalid');
|
|
5620
|
+
this._inputEl?.classList.remove('just-validate-success-field');
|
|
5621
|
+
}
|
|
5622
|
+
}
|
|
5623
|
+
_initInputEl() {
|
|
5624
|
+
if (this._inputEl) {
|
|
5625
|
+
this._inputEl.onfocus = (ev) => this._setAndCheck(ev.target.value);
|
|
5626
|
+
this._inputEl.onblur = (ev) => this._setAndCheck(ev.target.value);
|
|
5627
|
+
this._inputEl.oninput = (ev) => {
|
|
5628
|
+
this.markAsTouched();
|
|
5629
|
+
this._setAndCheck(ev.target.value);
|
|
5630
|
+
};
|
|
5631
|
+
}
|
|
5632
|
+
}
|
|
5633
|
+
ngAfterViewInit() {
|
|
5634
|
+
if (this.selectAutocompleteEl) {
|
|
5635
|
+
super.ngAfterViewInit();
|
|
5636
|
+
const element = this.selectAutocompleteEl.nativeElement;
|
|
5637
|
+
this.selectAutocomplete = new SelectAutocomplete(element, {
|
|
5638
|
+
id: this.id,
|
|
5639
|
+
name: this.name || this.id,
|
|
5640
|
+
source: this.source,
|
|
5641
|
+
required: this.required,
|
|
5642
|
+
minLength: this.minLength,
|
|
5643
|
+
defaultValue: this.defaultValue,
|
|
5644
|
+
tAssistiveHint: this.assistiveHintLabel,
|
|
5645
|
+
tNoResults: this.noResultsLabel,
|
|
5646
|
+
tStatusQueryTooShort: this.statusQueryTooShortLabel,
|
|
5647
|
+
tStatusNoResults: this.statusNoResultsLabel,
|
|
5648
|
+
tStatusSelectedOption: this.statusSelectedOptionLabel,
|
|
5649
|
+
tStatusResults: this.statusResultsLabel,
|
|
5650
|
+
onConfirm: (selectedElement) => {
|
|
5651
|
+
this.markAsTouched();
|
|
5652
|
+
this._setAndCheck(selectedElement);
|
|
5653
|
+
this.selected.emit(selectedElement);
|
|
5654
|
+
},
|
|
5655
|
+
});
|
|
5656
|
+
this._findInput();
|
|
5657
|
+
}
|
|
5658
|
+
}
|
|
5659
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
5660
|
+
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 }); }
|
|
5661
|
+
}
|
|
5662
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAutocompleteComponent, decorators: [{
|
|
5663
|
+
type: Component,
|
|
5664
|
+
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" }]
|
|
5665
|
+
}], propDecorators: { source: [{
|
|
5666
|
+
type: Input
|
|
5667
|
+
}], required: [{
|
|
5668
|
+
type: Input
|
|
5669
|
+
}], name: [{
|
|
5670
|
+
type: Input
|
|
5671
|
+
}], description: [{
|
|
5672
|
+
type: Input
|
|
5673
|
+
}], minLength: [{
|
|
5674
|
+
type: Input
|
|
5675
|
+
}], defaultValue: [{
|
|
5676
|
+
type: Input
|
|
5677
|
+
}], assistiveHintLabel: [{
|
|
5678
|
+
type: Input
|
|
5679
|
+
}], noResultsLabel: [{
|
|
5680
|
+
type: Input
|
|
5681
|
+
}], statusQueryTooShortLabel: [{
|
|
5682
|
+
type: Input
|
|
5683
|
+
}], statusNoResultsLabel: [{
|
|
5684
|
+
type: Input
|
|
5685
|
+
}], statusSelectedOptionLabel: [{
|
|
5686
|
+
type: Input
|
|
5687
|
+
}], statusResultsLabel: [{
|
|
5688
|
+
type: Input
|
|
5689
|
+
}], selected: [{
|
|
5690
|
+
type: Output
|
|
5691
|
+
}], selectAutocompleteEl: [{
|
|
5692
|
+
type: ViewChild,
|
|
5693
|
+
args: ['selectAutocomplete']
|
|
5694
|
+
}] } });
|
|
5695
|
+
|
|
5027
5696
|
const formComponents = [
|
|
5028
5697
|
ItAutocompleteComponent,
|
|
5698
|
+
ItSearchComponent,
|
|
5029
5699
|
ItCheckboxComponent,
|
|
5030
5700
|
ItInputComponent,
|
|
5031
5701
|
ItPasswordInputComponent,
|
|
@@ -5041,6 +5711,7 @@ const formComponents = [
|
|
|
5041
5711
|
class ItFormModule {
|
|
5042
5712
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
5043
5713
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItFormModule, imports: [ItAutocompleteComponent,
|
|
5714
|
+
ItSearchComponent,
|
|
5044
5715
|
ItCheckboxComponent,
|
|
5045
5716
|
ItInputComponent,
|
|
5046
5717
|
ItPasswordInputComponent,
|
|
@@ -5052,6 +5723,7 @@ class ItFormModule {
|
|
|
5052
5723
|
ItTransferComponent,
|
|
5053
5724
|
ItUploadDragDropComponent,
|
|
5054
5725
|
ItUploadFileListComponent], exports: [ItAutocompleteComponent,
|
|
5726
|
+
ItSearchComponent,
|
|
5055
5727
|
ItCheckboxComponent,
|
|
5056
5728
|
ItInputComponent,
|
|
5057
5729
|
ItPasswordInputComponent,
|
|
@@ -5597,7 +6269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
5597
6269
|
args: [{
|
|
5598
6270
|
selector: 'it-navscroll-list-item',
|
|
5599
6271
|
standalone: true,
|
|
5600
|
-
imports: [RouterLink, RouterLinkActive, RouterLinkWithHref,
|
|
6272
|
+
imports: [RouterLink, RouterLinkActive, RouterLinkWithHref, AsyncPipe],
|
|
5601
6273
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
5602
6274
|
template: `
|
|
5603
6275
|
<a
|
|
@@ -5817,6 +6489,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
5817
6489
|
args: ['class']
|
|
5818
6490
|
}] } });
|
|
5819
6491
|
|
|
6492
|
+
class ItSkiplinkComponent {
|
|
6493
|
+
constructor() {
|
|
6494
|
+
/**
|
|
6495
|
+
* Aria label for `nav` mode
|
|
6496
|
+
* @default 'Scorciatoie di navigazione'
|
|
6497
|
+
*/
|
|
6498
|
+
this.ariaLabel = 'Scorciatoie di navigazione';
|
|
6499
|
+
}
|
|
6500
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6501
|
+
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 }); }
|
|
6502
|
+
}
|
|
6503
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkComponent, decorators: [{
|
|
6504
|
+
type: Component,
|
|
6505
|
+
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" }]
|
|
6506
|
+
}], propDecorators: { ariaLabel: [{
|
|
6507
|
+
type: Input
|
|
6508
|
+
}], nav: [{
|
|
6509
|
+
type: Input,
|
|
6510
|
+
args: [{ transform: inputToBoolean }]
|
|
6511
|
+
}] } });
|
|
6512
|
+
|
|
6513
|
+
class ItSkiplinkItemComponent {
|
|
6514
|
+
constructor(parent) {
|
|
6515
|
+
this.inNav = parent.nav ? true : false;
|
|
6516
|
+
}
|
|
6517
|
+
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 }); }
|
|
6518
|
+
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 }); }
|
|
6519
|
+
}
|
|
6520
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkItemComponent, decorators: [{
|
|
6521
|
+
type: Component,
|
|
6522
|
+
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" }]
|
|
6523
|
+
}], ctorParameters: () => [{ type: ItSkiplinkComponent, decorators: [{
|
|
6524
|
+
type: Host
|
|
6525
|
+
}] }], propDecorators: { href: [{
|
|
6526
|
+
type: Input
|
|
6527
|
+
}], externalLink: [{
|
|
6528
|
+
type: Input,
|
|
6529
|
+
args: [{ transform: inputToBoolean }]
|
|
6530
|
+
}] } });
|
|
6531
|
+
|
|
6532
|
+
const skiplinkComponents = [ItSkiplinkComponent, ItSkiplinkItemComponent];
|
|
6533
|
+
class ItSkiplinkModule {
|
|
6534
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6535
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, imports: [ItSkiplinkComponent, ItSkiplinkItemComponent], exports: [ItSkiplinkComponent, ItSkiplinkItemComponent] }); }
|
|
6536
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, imports: [skiplinkComponents] }); }
|
|
6537
|
+
}
|
|
6538
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItSkiplinkModule, decorators: [{
|
|
6539
|
+
type: NgModule,
|
|
6540
|
+
args: [{
|
|
6541
|
+
imports: skiplinkComponents,
|
|
6542
|
+
exports: skiplinkComponents,
|
|
6543
|
+
}]
|
|
6544
|
+
}] });
|
|
6545
|
+
|
|
5820
6546
|
class ItErrorPageComponent {
|
|
5821
6547
|
constructor(route) {
|
|
5822
6548
|
this.route = route;
|
|
@@ -6088,60 +6814,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
6088
6814
|
}]
|
|
6089
6815
|
}] });
|
|
6090
6816
|
|
|
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
6817
|
/**
|
|
6146
6818
|
* Configures DesignAngularKit library
|
|
6147
6819
|
* @param config the DesignAngularKit config
|
|
@@ -6230,6 +6902,7 @@ const core = [
|
|
|
6230
6902
|
ItTableModule,
|
|
6231
6903
|
ItTooltipDirective,
|
|
6232
6904
|
ItTimelineModule,
|
|
6905
|
+
ItVideoPlayerComponent,
|
|
6233
6906
|
];
|
|
6234
6907
|
/**
|
|
6235
6908
|
* Navigation Components
|
|
@@ -6299,7 +6972,8 @@ class DesignAngularKitModule {
|
|
|
6299
6972
|
ItTabModule,
|
|
6300
6973
|
ItTableModule,
|
|
6301
6974
|
ItTooltipDirective,
|
|
6302
|
-
ItTimelineModule,
|
|
6975
|
+
ItTimelineModule,
|
|
6976
|
+
ItVideoPlayerComponent, // Core components
|
|
6303
6977
|
ItFormModule, ItBackButtonComponent,
|
|
6304
6978
|
ItBackToTopComponent,
|
|
6305
6979
|
ItBreadcrumbsModule,
|
|
@@ -6334,7 +7008,8 @@ class DesignAngularKitModule {
|
|
|
6334
7008
|
ItTabModule,
|
|
6335
7009
|
ItTableModule,
|
|
6336
7010
|
ItTooltipDirective,
|
|
6337
|
-
ItTimelineModule,
|
|
7011
|
+
ItTimelineModule,
|
|
7012
|
+
ItVideoPlayerComponent, // Core components
|
|
6338
7013
|
ItFormModule, ItBackButtonComponent,
|
|
6339
7014
|
ItBackToTopComponent,
|
|
6340
7015
|
ItBreadcrumbsModule,
|
|
@@ -6386,6 +7061,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
6386
7061
|
}]
|
|
6387
7062
|
}] });
|
|
6388
7063
|
|
|
7064
|
+
// See options: https://videojs.com/guides/options
|
|
7065
|
+
|
|
7066
|
+
class ItVideoPlayerModule {
|
|
7067
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7068
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule, imports: [ItVideoPlayerComponent], exports: [ItVideoPlayerComponent] }); }
|
|
7069
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule }); }
|
|
7070
|
+
}
|
|
7071
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItVideoPlayerModule, decorators: [{
|
|
7072
|
+
type: NgModule,
|
|
7073
|
+
args: [{
|
|
7074
|
+
imports: [ItVideoPlayerComponent],
|
|
7075
|
+
exports: [ItVideoPlayerComponent],
|
|
7076
|
+
}]
|
|
7077
|
+
}] });
|
|
7078
|
+
|
|
6389
7079
|
//Qs
|
|
6390
7080
|
//Aria hidden?
|
|
6391
7081
|
//state management with service?
|
|
@@ -6727,5 +7417,5 @@ class ItDateUtils {
|
|
|
6727
7417
|
* Generated bundle index. Do not edit.
|
|
6728
7418
|
*/
|
|
6729
7419
|
|
|
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 };
|
|
7420
|
+
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
7421
|
//# sourceMappingURL=design-angular-kit.mjs.map
|