@vectoriox/iox-ui 4.43.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/vectoriox-iox-ui.mjs +59 -331
- package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
- package/index.d.ts +41 -90
- package/package.json +1 -1
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, HostListener, Output, Input, Directive, NgModule, Injectable, ViewChild, Component, Host, Optional, inject, NgZone,
|
|
2
|
+
import { EventEmitter, HostListener, Output, Input, Directive, NgModule, Injectable, ViewChild, Component, Host, Optional, inject, NgZone, InjectionToken, Inject, ChangeDetectionStrategy, ViewContainerRef, PLATFORM_ID, reflectComponentType, signal, computed } from '@angular/core';
|
|
3
3
|
import * as i2 from '@angular/animations';
|
|
4
4
|
import { style, animate } from '@angular/animations';
|
|
5
|
-
import { Subject, fromEvent
|
|
5
|
+
import { Subject, fromEvent } from 'rxjs';
|
|
6
6
|
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
7
|
-
import * as i1
|
|
7
|
+
import * as i1 from '@angular/common';
|
|
8
8
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
9
9
|
import Lenis from 'lenis';
|
|
10
|
-
import * as i1 from 'ngx-cookie-service';
|
|
11
|
-
import { CookieService } from 'ngx-cookie-service';
|
|
12
|
-
import * as i1$1 from '@angular/common/http';
|
|
13
|
-
import { map } from 'rxjs/operators';
|
|
14
10
|
|
|
15
11
|
class ViewPositionDirective {
|
|
16
12
|
constructor(_elr) {
|
|
@@ -539,324 +535,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
539
535
|
args: [{ providedIn: 'root' }]
|
|
540
536
|
}] });
|
|
541
537
|
|
|
542
|
-
var PrivacyModelEvent;
|
|
543
|
-
(function (PrivacyModelEvent) {
|
|
544
|
-
PrivacyModelEvent[PrivacyModelEvent["OPEN"] = 1] = "OPEN";
|
|
545
|
-
PrivacyModelEvent[PrivacyModelEvent["CLOSE"] = 2] = "CLOSE";
|
|
546
|
-
})(PrivacyModelEvent || (PrivacyModelEvent = {}));
|
|
547
|
-
class PrivacyModalService {
|
|
548
|
-
constructor() {
|
|
549
|
-
this.modalEvent = new Subject();
|
|
550
|
-
this.decisionSubject = null;
|
|
551
|
-
}
|
|
552
|
-
registerModalEvent(func) {
|
|
553
|
-
this.modalEvent.subscribe({
|
|
554
|
-
next: (val) => {
|
|
555
|
-
func(val);
|
|
556
|
-
}
|
|
557
|
-
});
|
|
558
|
-
}
|
|
559
|
-
openModal() {
|
|
560
|
-
this.modalEvent.next(PrivacyModelEvent.OPEN);
|
|
561
|
-
this.decisionSubject = new Subject();
|
|
562
|
-
return this.decisionSubject;
|
|
563
|
-
}
|
|
564
|
-
closeModal() {
|
|
565
|
-
this.modalEvent.next(PrivacyModelEvent.CLOSE);
|
|
566
|
-
}
|
|
567
|
-
notifyDecision(accepted) {
|
|
568
|
-
if (this.decisionSubject) {
|
|
569
|
-
this.decisionSubject.next(accepted);
|
|
570
|
-
this.decisionSubject.complete();
|
|
571
|
-
this.decisionSubject = null;
|
|
572
|
-
}
|
|
573
|
-
this.closeModal();
|
|
574
|
-
}
|
|
575
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: PrivacyModalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
576
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: PrivacyModalService }); }
|
|
577
|
-
}
|
|
578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: PrivacyModalService, decorators: [{
|
|
579
|
-
type: Injectable
|
|
580
|
-
}], ctorParameters: () => [] });
|
|
581
|
-
|
|
582
|
-
class ConsentService {
|
|
583
|
-
constructor(cookieService, httpClient, _privacyModalService, environment) {
|
|
584
|
-
this.cookieService = cookieService;
|
|
585
|
-
this.httpClient = httpClient;
|
|
586
|
-
this._privacyModalService = _privacyModalService;
|
|
587
|
-
this.environment = environment;
|
|
588
|
-
this.WEB_USER = "webUser";
|
|
589
|
-
}
|
|
590
|
-
hasAnalyticsConsent() {
|
|
591
|
-
const cookieValue = this.cookieService.get(this.WEB_USER);
|
|
592
|
-
if (!cookieValue) {
|
|
593
|
-
return false;
|
|
594
|
-
}
|
|
595
|
-
try {
|
|
596
|
-
const parsedCookieValue = JSON.parse(cookieValue);
|
|
597
|
-
return parsedCookieValue.user?.consent?.analyticsConsent === true;
|
|
598
|
-
}
|
|
599
|
-
catch {
|
|
600
|
-
// Invalid JSON or unexpected structure: treat as no consent
|
|
601
|
-
return false;
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
checkAnalyticsConsent() {
|
|
605
|
-
if (this.hasAnalyticsConsent()) {
|
|
606
|
-
// Consent already given, return true immediately as Observable
|
|
607
|
-
return of(true);
|
|
608
|
-
}
|
|
609
|
-
// No consent yet (or invalid/missing cookie) -> show modal
|
|
610
|
-
return this._privacyModalService.openModal();
|
|
611
|
-
}
|
|
612
|
-
checkMarketingConsent() {
|
|
613
|
-
let cookieValue = this.cookieService.get(this.WEB_USER);
|
|
614
|
-
if (!cookieValue) {
|
|
615
|
-
return false;
|
|
616
|
-
}
|
|
617
|
-
let parsedCookieValue = JSON.parse(cookieValue);
|
|
618
|
-
return parsedCookieValue.user?.consent?.marketingConsent;
|
|
619
|
-
}
|
|
620
|
-
setConsent(analytics, marketing) {
|
|
621
|
-
let cookieValue = this.cookieService.get(this.WEB_USER);
|
|
622
|
-
let parsedCookieValue = cookieValue ? JSON.parse(cookieValue) : { user: { consent: {
|
|
623
|
-
anonymousId: this.generateAnonymousId()
|
|
624
|
-
} } };
|
|
625
|
-
parsedCookieValue.user.consent.analyticsConsent = analytics;
|
|
626
|
-
parsedCookieValue.user.consent.marketingConsent = marketing;
|
|
627
|
-
this.cookieService.set(this.WEB_USER, JSON.stringify(parsedCookieValue));
|
|
628
|
-
this.httpClient.post(`${this.environment.HOST}consent`, parsedCookieValue.user.consent)
|
|
629
|
-
.subscribe({
|
|
630
|
-
next: (response) => {
|
|
631
|
-
console.log('Consent updated successfully:', response);
|
|
632
|
-
},
|
|
633
|
-
error: (error) => {
|
|
634
|
-
console.error('Error updating consent:', error);
|
|
635
|
-
}
|
|
636
|
-
});
|
|
637
|
-
}
|
|
638
|
-
generateAnonymousId() {
|
|
639
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
640
|
-
var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
641
|
-
return v.toString(16);
|
|
642
|
-
});
|
|
643
|
-
}
|
|
644
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ConsentService, deps: [{ token: i1.CookieService }, { token: i1$1.HttpClient }, { token: PrivacyModalService }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
645
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ConsentService }); }
|
|
646
|
-
}
|
|
647
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ConsentService, decorators: [{
|
|
648
|
-
type: Injectable
|
|
649
|
-
}], ctorParameters: () => [{ type: i1.CookieService }, { type: i1$1.HttpClient }, { type: PrivacyModalService }, { type: undefined, decorators: [{
|
|
650
|
-
type: Inject,
|
|
651
|
-
args: [ENVIRONMENT]
|
|
652
|
-
}] }] });
|
|
653
|
-
|
|
654
|
-
class PrivacyModalComponent {
|
|
655
|
-
constructor(_privacyModalService, _consentService) {
|
|
656
|
-
this._privacyModalService = _privacyModalService;
|
|
657
|
-
this._consentService = _consentService;
|
|
658
|
-
this.isOpen = false;
|
|
659
|
-
this._privacyModalService.registerModalEvent((event) => {
|
|
660
|
-
if (event == PrivacyModelEvent.CLOSE) {
|
|
661
|
-
this.isOpen = false;
|
|
662
|
-
}
|
|
663
|
-
else {
|
|
664
|
-
this.isOpen = true;
|
|
665
|
-
}
|
|
666
|
-
});
|
|
667
|
-
}
|
|
668
|
-
onAccept() {
|
|
669
|
-
this._consentService.setConsent(true, true);
|
|
670
|
-
this._privacyModalService.notifyDecision(true);
|
|
671
|
-
this.isOpen = false;
|
|
672
|
-
}
|
|
673
|
-
onDecline() {
|
|
674
|
-
this._privacyModalService.notifyDecision(false);
|
|
675
|
-
this.isOpen = false;
|
|
676
|
-
}
|
|
677
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: PrivacyModalComponent, deps: [{ token: PrivacyModalService }, { token: ConsentService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
678
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: PrivacyModalComponent, isStandalone: false, selector: "privacy-modal", ngImport: i0, template: "<div class=\"privacy-modal\" [ngClass]=\"{'open': isOpen, 'closed': !isOpen}\">\n <div class=\"modal-content\">\n <h2>\u05D0\u05E0\u05D7\u05E0\u05D5 \u05E9\u05D5\u05DE\u05E8\u05D9\u05DD \u05E2\u05DC \u05D4\u05E4\u05E8\u05D8\u05D9\u05D5\u05EA \u05E9\u05DC\u05DA</h2>\n <p dir=\"rtl\">\n <span>\n \u05D0\u05E0\u05D7\u05E0\u05D5 \u05DE\u05E9\u05DE\u05E9\u05D9\u05DD \u05D1\u05E7\u05D1\u05E6\u05D9 \n </span>\n <span>Cookies </span>\n <span>\u05DB\u05D3\u05D9 \u05DC\u05E9\u05E4\u05E8 \u05D0\u05EA \u05D7\u05D5\u05D5\u05D9\u05EA \u05D4\u05D2\u05DC\u05D9\u05E9\u05D4 \u05E9\u05DC\u05DA, \u05DC\u05E0\u05EA\u05D7 \u05E9\u05D9\u05DE\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D5\u05DC\u05D4\u05E6\u05D9\u05E2 \u05EA\u05D5\u05DB\u05DF \u05DE\u05D5\u05EA\u05D0\u05DD \u05D0\u05D9\u05E9\u05D9\u05EA.</span>\n <span> \u05DC\u05DE\u05D9\u05D3\u05E2 \u05E0\u05D5\u05E1\u05E3 \u05E2\u05DC \u05D0\u05D9\u05DA \u05D0\u05E0\u05D7\u05E0\u05D5 \u05DE\u05E9\u05EA\u05DE\u05E9\u05D9\u05DD \u05D1\u05DE\u05D9\u05D3\u05E2 \u05E9\u05DC\u05DA, \u05E8\u05D0\u05D4 \u05D0\u05EA <a target=\"_blank\" href=\"/privacy\">\u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05D4\u05E4\u05E8\u05D8\u05D9\u05D5\u05EA </a> \u05E9\u05DC\u05E0\u05D5</span>\n </p>\n\n <div class=\"button-container\">\n <button class=\"accept-button\" (click)=\"onAccept()\">\u05D0\u05E0\u05D9 \u05DE\u05E1\u05DB\u05D9\u05DD</button>\n <button class=\"decline-button\" (click)=\"onDecline()\">\u05D0\u05E0\u05D9 \u05DC\u05D0 \u05DE\u05E1\u05DB\u05D9\u05DD</button>\n </div>\n </div>\n</div>\n", styles: [".privacy-modal{padding:2em;background:#fff;border-radius:8px;position:fixed;z-index:10000000000000;bottom:0;left:0;right:0;height:25vh;display:flex;align-items:center;justify-content:center;transform:translateY(100%);transition:transform .3s ease-in-out}.privacy-modal.open{transform:translateY(0);transition:transform .3s ease-in-out}.modal-content{width:40vw;text-align:right}.privacy-modal h2{margin-top:0;text-align:right;font-size:2.1vw;color:#6b4f3b}.privacy-modal p{font-size:1.3vw;color:#6b4f3b}.button-container{display:flex;justify-content:flex-end;margin-top:20px}.button-container button{border:0;margin-inline-start:15px;font-size:1vw}.button-container .accept-button{background:#6b4f3b;color:#fff;padding:.5em 1em;border-radius:4px;cursor:pointer}.button-container .accept-button:hover{background:#5b4332}.button-container .decline-button{background:transparent;color:#6b4f3b;padding:0;cursor:pointer;border-bottom:1px solid #fff}.button-container .decline-button:hover{border-bottom:1px solid #6b4f3b}@media(max-width:768px){.privacy-modal h2{font-size:8.2vw}.privacy-modal p{font-size:4.2vw}.privacy-modal .modal-content{width:80vw}.privacy-modal .button-container button{font-size:3.2vw}}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
679
|
-
}
|
|
680
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: PrivacyModalComponent, decorators: [{
|
|
681
|
-
type: Component,
|
|
682
|
-
args: [{ selector: 'privacy-modal', standalone: false, template: "<div class=\"privacy-modal\" [ngClass]=\"{'open': isOpen, 'closed': !isOpen}\">\n <div class=\"modal-content\">\n <h2>\u05D0\u05E0\u05D7\u05E0\u05D5 \u05E9\u05D5\u05DE\u05E8\u05D9\u05DD \u05E2\u05DC \u05D4\u05E4\u05E8\u05D8\u05D9\u05D5\u05EA \u05E9\u05DC\u05DA</h2>\n <p dir=\"rtl\">\n <span>\n \u05D0\u05E0\u05D7\u05E0\u05D5 \u05DE\u05E9\u05DE\u05E9\u05D9\u05DD \u05D1\u05E7\u05D1\u05E6\u05D9 \n </span>\n <span>Cookies </span>\n <span>\u05DB\u05D3\u05D9 \u05DC\u05E9\u05E4\u05E8 \u05D0\u05EA \u05D7\u05D5\u05D5\u05D9\u05EA \u05D4\u05D2\u05DC\u05D9\u05E9\u05D4 \u05E9\u05DC\u05DA, \u05DC\u05E0\u05EA\u05D7 \u05E9\u05D9\u05DE\u05D5\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05D5\u05DC\u05D4\u05E6\u05D9\u05E2 \u05EA\u05D5\u05DB\u05DF \u05DE\u05D5\u05EA\u05D0\u05DD \u05D0\u05D9\u05E9\u05D9\u05EA.</span>\n <span> \u05DC\u05DE\u05D9\u05D3\u05E2 \u05E0\u05D5\u05E1\u05E3 \u05E2\u05DC \u05D0\u05D9\u05DA \u05D0\u05E0\u05D7\u05E0\u05D5 \u05DE\u05E9\u05EA\u05DE\u05E9\u05D9\u05DD \u05D1\u05DE\u05D9\u05D3\u05E2 \u05E9\u05DC\u05DA, \u05E8\u05D0\u05D4 \u05D0\u05EA <a target=\"_blank\" href=\"/privacy\">\u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05D4\u05E4\u05E8\u05D8\u05D9\u05D5\u05EA </a> \u05E9\u05DC\u05E0\u05D5</span>\n </p>\n\n <div class=\"button-container\">\n <button class=\"accept-button\" (click)=\"onAccept()\">\u05D0\u05E0\u05D9 \u05DE\u05E1\u05DB\u05D9\u05DD</button>\n <button class=\"decline-button\" (click)=\"onDecline()\">\u05D0\u05E0\u05D9 \u05DC\u05D0 \u05DE\u05E1\u05DB\u05D9\u05DD</button>\n </div>\n </div>\n</div>\n", styles: [".privacy-modal{padding:2em;background:#fff;border-radius:8px;position:fixed;z-index:10000000000000;bottom:0;left:0;right:0;height:25vh;display:flex;align-items:center;justify-content:center;transform:translateY(100%);transition:transform .3s ease-in-out}.privacy-modal.open{transform:translateY(0);transition:transform .3s ease-in-out}.modal-content{width:40vw;text-align:right}.privacy-modal h2{margin-top:0;text-align:right;font-size:2.1vw;color:#6b4f3b}.privacy-modal p{font-size:1.3vw;color:#6b4f3b}.button-container{display:flex;justify-content:flex-end;margin-top:20px}.button-container button{border:0;margin-inline-start:15px;font-size:1vw}.button-container .accept-button{background:#6b4f3b;color:#fff;padding:.5em 1em;border-radius:4px;cursor:pointer}.button-container .accept-button:hover{background:#5b4332}.button-container .decline-button{background:transparent;color:#6b4f3b;padding:0;cursor:pointer;border-bottom:1px solid #fff}.button-container .decline-button:hover{border-bottom:1px solid #6b4f3b}@media(max-width:768px){.privacy-modal h2{font-size:8.2vw}.privacy-modal p{font-size:4.2vw}.privacy-modal .modal-content{width:80vw}.privacy-modal .button-container button{font-size:3.2vw}}\n"] }]
|
|
683
|
-
}], ctorParameters: () => [{ type: PrivacyModalService }, { type: ConsentService }] });
|
|
684
|
-
|
|
685
|
-
class WebSettingsService {
|
|
686
|
-
constructor(httpClient, environment) {
|
|
687
|
-
this.httpClient = httpClient;
|
|
688
|
-
this.environment = environment;
|
|
689
|
-
}
|
|
690
|
-
getSettings() {
|
|
691
|
-
// If the server injected a runtime config (window.__APP_CONFIG) use that first,
|
|
692
|
-
// otherwise fall back to the compile-time environment.HOST.
|
|
693
|
-
const runtimeHost = (typeof window !== 'undefined' && window.__APP_CONFIG && window.__APP_CONFIG.HOST) ? window.__APP_CONFIG.HOST : this.environment.HOST;
|
|
694
|
-
return this.httpClient.get(`${runtimeHost}web/settings`);
|
|
695
|
-
}
|
|
696
|
-
configArrayToObject(arr) {
|
|
697
|
-
return arr.reduce((acc, item) => {
|
|
698
|
-
acc[item.key] = item.value;
|
|
699
|
-
return acc;
|
|
700
|
-
}, {});
|
|
701
|
-
}
|
|
702
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: WebSettingsService, deps: [{ token: i1$1.HttpClient }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
703
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: WebSettingsService }); }
|
|
704
|
-
}
|
|
705
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: WebSettingsService, decorators: [{
|
|
706
|
-
type: Injectable
|
|
707
|
-
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: undefined, decorators: [{
|
|
708
|
-
type: Inject,
|
|
709
|
-
args: [ENVIRONMENT]
|
|
710
|
-
}] }] });
|
|
711
|
-
|
|
712
|
-
class ContentService {
|
|
713
|
-
constructor(httpClient, environment) {
|
|
714
|
-
this.httpClient = httpClient;
|
|
715
|
-
this.environment = environment;
|
|
716
|
-
this.appContent = {};
|
|
717
|
-
}
|
|
718
|
-
getContent(contentName, id) {
|
|
719
|
-
if (this.appContent[contentName] && this.appContent[contentName].length) {
|
|
720
|
-
if (id) {
|
|
721
|
-
return of(this.findOne(this.appContent[contentName], id));
|
|
722
|
-
}
|
|
723
|
-
return of(this.appContent[contentName]);
|
|
724
|
-
}
|
|
725
|
-
return this.httpClient.get(`${this.environment.HOST}${contentName}`).pipe(map((content) => {
|
|
726
|
-
if (contentName == this.environment.contentResource.SERVICES || contentName == this.environment.contentResource.PROJECTS) {
|
|
727
|
-
content = content.map((item) => {
|
|
728
|
-
item.id = item.name.replace(/ /g, "_");
|
|
729
|
-
//item._id= item.name.replace(/ /g,"_");
|
|
730
|
-
return item;
|
|
731
|
-
});
|
|
732
|
-
}
|
|
733
|
-
this.appContent[contentName] = content;
|
|
734
|
-
if (id) {
|
|
735
|
-
return this.findOne(this.appContent[contentName], id);
|
|
736
|
-
}
|
|
737
|
-
return content;
|
|
738
|
-
}));
|
|
739
|
-
}
|
|
740
|
-
findOne(arr, id) {
|
|
741
|
-
for (let i = 0; i < arr.length; i++) {
|
|
742
|
-
if (arr[i].id == id) {
|
|
743
|
-
return arr[i];
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ContentService, deps: [{ token: i1$1.HttpClient }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
748
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ContentService }); }
|
|
749
|
-
}
|
|
750
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ContentService, decorators: [{
|
|
751
|
-
type: Injectable
|
|
752
|
-
}], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: undefined, decorators: [{
|
|
753
|
-
type: Inject,
|
|
754
|
-
args: [ENVIRONMENT]
|
|
755
|
-
}] }] });
|
|
756
|
-
|
|
757
|
-
const ENVIRONMENT = new InjectionToken('environment');
|
|
758
|
-
class CMSClientInfraModule {
|
|
759
|
-
static forRoot(environment) {
|
|
760
|
-
return {
|
|
761
|
-
ngModule: CMSClientInfraModule,
|
|
762
|
-
providers: [
|
|
763
|
-
{ provide: ENVIRONMENT, useValue: environment },
|
|
764
|
-
ConsentService,
|
|
765
|
-
ContentService,
|
|
766
|
-
CookieService,
|
|
767
|
-
WebSettingsService,
|
|
768
|
-
PrivacyModalService
|
|
769
|
-
]
|
|
770
|
-
};
|
|
771
|
-
}
|
|
772
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: CMSClientInfraModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
773
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.31", ngImport: i0, type: CMSClientInfraModule, declarations: [PrivacyModalComponent], imports: [CommonModule], exports: [PrivacyModalComponent] }); }
|
|
774
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: CMSClientInfraModule, imports: [CommonModule] }); }
|
|
775
|
-
}
|
|
776
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: CMSClientInfraModule, decorators: [{
|
|
777
|
-
type: NgModule,
|
|
778
|
-
args: [{
|
|
779
|
-
declarations: [
|
|
780
|
-
PrivacyModalComponent
|
|
781
|
-
],
|
|
782
|
-
imports: [
|
|
783
|
-
CommonModule
|
|
784
|
-
],
|
|
785
|
-
exports: [PrivacyModalComponent]
|
|
786
|
-
}]
|
|
787
|
-
}] });
|
|
788
|
-
|
|
789
|
-
class AnalyticsService {
|
|
790
|
-
constructor(platformId) {
|
|
791
|
-
this.platformId = platformId;
|
|
792
|
-
this.gaScriptId = 'google-analytics-script';
|
|
793
|
-
}
|
|
794
|
-
applyGoogleAnalytics(appId) {
|
|
795
|
-
if (!isPlatformBrowser(this.platformId))
|
|
796
|
-
return;
|
|
797
|
-
// 1. Establish the dataLayer and the CORRECT gtag function stub
|
|
798
|
-
const win = window;
|
|
799
|
-
win.dataLayer = win.dataLayer || [];
|
|
800
|
-
// CRITICAL FIX: The Google library requires the special 'arguments' object,
|
|
801
|
-
// NOT a standard array spread [...args].
|
|
802
|
-
if (!win.gtag) {
|
|
803
|
-
win.gtag = function () {
|
|
804
|
-
win.dataLayer.push(arguments);
|
|
805
|
-
};
|
|
806
|
-
}
|
|
807
|
-
// 2. Queue initial commands immediately (even before script loads)
|
|
808
|
-
win.gtag('js', new Date());
|
|
809
|
-
win.gtag('config', appId);
|
|
810
|
-
// 3. Load the script if not already present
|
|
811
|
-
if (!document.getElementById(this.gaScriptId)) {
|
|
812
|
-
const script = document.createElement('script');
|
|
813
|
-
script.id = this.gaScriptId;
|
|
814
|
-
script.async = true;
|
|
815
|
-
script.src = `https://www.googletagmanager.com/gtag/js?id=${appId}`;
|
|
816
|
-
script.onload = () => {
|
|
817
|
-
console.log('[Analytics] gtag.js script loaded and ready');
|
|
818
|
-
};
|
|
819
|
-
script.onerror = (e) => console.error('[Analytics] gtag.js failed to load', e);
|
|
820
|
-
document.head.appendChild(script);
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
// Helper to send events from your components
|
|
824
|
-
sendEvent(eventName, params = {}) {
|
|
825
|
-
if (isPlatformBrowser(this.platformId) && window.gtag) {
|
|
826
|
-
window.gtag('event', eventName, params);
|
|
827
|
-
}
|
|
828
|
-
}
|
|
829
|
-
// Synchronous page view sender that won't rely on internal ready Promise
|
|
830
|
-
sendPageView(path) {
|
|
831
|
-
if (!isPlatformBrowser(this.platformId))
|
|
832
|
-
return;
|
|
833
|
-
const win = window;
|
|
834
|
-
try {
|
|
835
|
-
if (win && win.gtag) {
|
|
836
|
-
// Prefer gtag when available
|
|
837
|
-
win.gtag('event', 'page_view', { page_path: path });
|
|
838
|
-
return;
|
|
839
|
-
}
|
|
840
|
-
// Fallback: ensure dataLayer exists and push a native arguments-like object
|
|
841
|
-
win.dataLayer = win.dataLayer || [];
|
|
842
|
-
// Use a plain object that resembles gtag's usage if gtag not present
|
|
843
|
-
win.dataLayer.push({ event: 'page_view', page_path: path });
|
|
844
|
-
}
|
|
845
|
-
catch (err) {
|
|
846
|
-
console.warn('[Analytics] sendPageView failed', err);
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: AnalyticsService, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
850
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: AnalyticsService, providedIn: 'root' }); }
|
|
851
|
-
}
|
|
852
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: AnalyticsService, decorators: [{
|
|
853
|
-
type: Injectable,
|
|
854
|
-
args: [{ providedIn: 'root' }]
|
|
855
|
-
}], ctorParameters: () => [{ type: Object, decorators: [{
|
|
856
|
-
type: Inject,
|
|
857
|
-
args: [PLATFORM_ID]
|
|
858
|
-
}] }] });
|
|
859
|
-
|
|
860
538
|
const IS_PREVIEW = new InjectionToken('IS_PREVIEW');
|
|
861
539
|
const IOX_BUILDER_EVENTS = new InjectionToken('IOX_BUILDER_EVENTS');
|
|
862
540
|
|
|
@@ -933,7 +611,7 @@ class CardComponent {
|
|
|
933
611
|
<h2>{{ title }}</h2>
|
|
934
612
|
<p>{{ description }}</p>
|
|
935
613
|
</div>
|
|
936
|
-
`, isInline: true, styles: [".image-wrapper{width:100%;aspect-ratio:1/1;overflow:hidden;margin-bottom:.75rem}\n", ".card-img{width:100%;height:100%;object-fit:cover}\n", "h2{margin:0 0 .5rem;font-size:1.2rem}\n", "p{margin:0}\n"], dependencies: [{ kind: "directive", type: i1
|
|
614
|
+
`, isInline: true, styles: [".image-wrapper{width:100%;aspect-ratio:1/1;overflow:hidden;margin-bottom:.75rem}\n", ".card-img{width:100%;height:100%;object-fit:cover}\n", "h2{margin:0 0 .5rem;font-size:1.2rem}\n", "p{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
937
615
|
}
|
|
938
616
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: CardComponent, decorators: [{
|
|
939
617
|
type: Component,
|
|
@@ -1491,7 +1169,7 @@ class ClientRepeaterComponent {
|
|
|
1491
1169
|
<div class="repeater-root" [ngClass]="['iox-node-' + nodeId]">
|
|
1492
1170
|
<ng-container #childrenHost></ng-container>
|
|
1493
1171
|
</div>
|
|
1494
|
-
`, isInline: true, styles: [".repeater-root{position:relative;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1
|
|
1172
|
+
`, isInline: true, styles: [".repeater-root{position:relative;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
1495
1173
|
}
|
|
1496
1174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ClientRepeaterComponent, decorators: [{
|
|
1497
1175
|
type: Component,
|
|
@@ -2347,7 +2025,7 @@ class ClientSliderContainerComponent {
|
|
|
2347
2025
|
<div *ngIf="enablePagination" class="swiper-pagination"></div>
|
|
2348
2026
|
<div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
|
|
2349
2027
|
</div>
|
|
2350
|
-
`, isInline: true, styles: [".swiper{width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1
|
|
2028
|
+
`, isInline: true, styles: [".swiper{width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
2351
2029
|
}
|
|
2352
2030
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ClientSliderContainerComponent, decorators: [{
|
|
2353
2031
|
type: Component,
|
|
@@ -3134,7 +2812,7 @@ class ClientGalleryComponent {
|
|
|
3134
2812
|
[ngStyle]="slideStyle(i)"></div>
|
|
3135
2813
|
<div class="iox-gallery__overlay"></div>
|
|
3136
2814
|
</div>
|
|
3137
|
-
`, isInline: true, styles: [":host{display:block}.iox-gallery{position:relative;overflow:hidden;box-sizing:border-box}.iox-gallery__img{position:absolute;inset:0;background-size:cover;background-position:center;pointer-events:none;opacity:0;filter:brightness(1.35);-webkit-mask-image:radial-gradient(circle at 50% 50%,rgba(0,0,0,1) 80%,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%);mask-image:radial-gradient(circle at 50% 50%,#000 80%,#0000001a 95%,#0000)}.iox-gallery__overlay{position:absolute;inset:0;pointer-events:none;z-index:3;background:linear-gradient(to bottom,#00000080,#00000026 20% 80%,#00000080)}\n"], dependencies: [{ kind: "directive", type: i1
|
|
2815
|
+
`, isInline: true, styles: [":host{display:block}.iox-gallery{position:relative;overflow:hidden;box-sizing:border-box}.iox-gallery__img{position:absolute;inset:0;background-size:cover;background-position:center;pointer-events:none;opacity:0;filter:brightness(1.35);-webkit-mask-image:radial-gradient(circle at 50% 50%,rgba(0,0,0,1) 80%,rgba(0,0,0,.1) 95%,rgba(0,0,0,0) 100%);mask-image:radial-gradient(circle at 50% 50%,#000 80%,#0000001a 95%,#0000)}.iox-gallery__overlay{position:absolute;inset:0;pointer-events:none;z-index:3;background:linear-gradient(to bottom,#00000080,#00000026 20% 80%,#00000080)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
3138
2816
|
}
|
|
3139
2817
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ClientGalleryComponent, decorators: [{
|
|
3140
2818
|
type: Component,
|
|
@@ -4214,7 +3892,7 @@ class IoxFormComponent {
|
|
|
4214
3892
|
aria-live="assertive"
|
|
4215
3893
|
aria-atomic="true">{{ announcement }}</div>
|
|
4216
3894
|
<ng-container #childrenHost></ng-container>
|
|
4217
|
-
`, isInline: true, styles: [":host{box-sizing:border-box}.iox-form__hp{position:absolute;inset-inline-start:-9999px;width:1px;height:1px;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1
|
|
3895
|
+
`, isInline: true, styles: [":host{box-sizing:border-box}.iox-form__hp{position:absolute;inset-inline-start:-9999px;width:1px;height:1px;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
4218
3896
|
}
|
|
4219
3897
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: IoxFormComponent, decorators: [{
|
|
4220
3898
|
type: Component,
|
|
@@ -5279,6 +4957,56 @@ function partClassName(type, partKey) {
|
|
|
5279
4957
|
return PART_CLASS_NAMES[type]?.[partKey];
|
|
5280
4958
|
}
|
|
5281
4959
|
|
|
4960
|
+
/**
|
|
4961
|
+
* Design-token → CSS compilation, shared by BOTH renderers (flavors plan F0).
|
|
4962
|
+
*
|
|
4963
|
+
* A token row is `{ name, value }` plus, since F0, an optional per-scheme override:
|
|
4964
|
+
* `values.dark`. The shape exists NOW — before any dark-mode UI — because retrofitting it
|
|
4965
|
+
* later means rewriting every org's `designtokens` collection (flavors plan §10 C3).
|
|
4966
|
+
*
|
|
4967
|
+
* ⚠️ The appended-last contract: the dark block REDEFINES custom properties under
|
|
4968
|
+
* `@media (prefers-color-scheme: dark)`. Per the responsive-breakpoints A3 lesson, every
|
|
4969
|
+
* consumer appends it AFTER all of its base rules — the engine pushes it after the page's
|
|
4970
|
+
* css blocks, the builder registry keeps it as its last token rule. Custom properties are
|
|
4971
|
+
* order-insensitive against node rules, but keeping one ordering rule for every @media
|
|
4972
|
+
* block in the product is cheaper than remembering which ones are exempt.
|
|
4973
|
+
*/
|
|
4974
|
+
const usable = (t) => !!t && typeof t.name === 'string' && t.name !== '' &&
|
|
4975
|
+
typeof t.value === 'string' && t.value !== '';
|
|
4976
|
+
/** `{ 'iox-brand': '#2f6f62', … }` — the builder registry's input shape for base values. */
|
|
4977
|
+
function tokensToVarMap(tokens) {
|
|
4978
|
+
const map = {};
|
|
4979
|
+
for (const t of tokens ?? []) {
|
|
4980
|
+
if (usable(t))
|
|
4981
|
+
map[`iox-${t.name}`] = t.value;
|
|
4982
|
+
}
|
|
4983
|
+
return map;
|
|
4984
|
+
}
|
|
4985
|
+
/** Only the tokens that carry a dark override, as `{ 'iox-name': darkValue }`. */
|
|
4986
|
+
function tokensToDarkVarMap(tokens) {
|
|
4987
|
+
const map = {};
|
|
4988
|
+
for (const t of tokens ?? []) {
|
|
4989
|
+
const dark = t?.values?.dark;
|
|
4990
|
+
if (usable(t) && typeof dark === 'string' && dark !== '')
|
|
4991
|
+
map[`iox-${t.name}`] = dark;
|
|
4992
|
+
}
|
|
4993
|
+
return map;
|
|
4994
|
+
}
|
|
4995
|
+
/**
|
|
4996
|
+
* The two CSS blocks a renderer emits. `base` goes FIRST (before node rules), `dark` goes
|
|
4997
|
+
* LAST (after every base rule); either may be '' when there is nothing to say.
|
|
4998
|
+
*/
|
|
4999
|
+
function compileTokenCss(tokens) {
|
|
5000
|
+
const baseVars = Object.entries(tokensToVarMap(tokens))
|
|
5001
|
+
.map(([k, v]) => ` --${k}: ${v};`).join('\n');
|
|
5002
|
+
const darkVars = Object.entries(tokensToDarkVarMap(tokens))
|
|
5003
|
+
.map(([k, v]) => ` --${k}: ${v};`).join('\n');
|
|
5004
|
+
return {
|
|
5005
|
+
base: baseVars ? `:root {\n${baseVars}\n}` : '',
|
|
5006
|
+
dark: darkVars ? `@media (prefers-color-scheme: dark) {\n :root {\n${darkVars}\n }\n}` : '',
|
|
5007
|
+
};
|
|
5008
|
+
}
|
|
5009
|
+
|
|
5282
5010
|
/**
|
|
5283
5011
|
* page-style — the ONE compiler that turns a page's style settings into CSS.
|
|
5284
5012
|
*
|
|
@@ -7116,5 +6844,5 @@ function effectiveTransitionId(anim) {
|
|
|
7116
6844
|
* Generated bundle index. Do not edit.
|
|
7117
6845
|
*/
|
|
7118
6846
|
|
|
7119
|
-
export { AOSService,
|
|
6847
|
+
export { AOSService, BREAKPOINTS, Breakpoint, BreakpointQueryKind, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CONTEXT_ACTION_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ContainerComponent, ContextStore, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DeclarationContext, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IOX_FORM_MESSAGES, IOX_FORM_NAVIGATOR, IOX_FORM_TRANSPORT, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxFieldComponent, IoxFormComponent, IoxFormErrorComponent, IoxFormSuccessComponent, IoxPageComponent, IoxPageModule, IoxSubmitButtonComponent, IoxUiModule, LinkedContainerComponent, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PART_CLASS_NAMES, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, RESERVED_ALIAS_PREFIX, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_RESPONSIVE_TRAITS, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VALIDATION_STATES, VALIDATION_STATE_CLASS, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, activeActions, applyBindingPipes, applyFeel, breakpointDef, breakpointForWidth, breakpointQueryFor, buildDataSourceFilter, buildPartSelector, buildRelatedFilter, buildSwiperBreakpoints, buildTargetedStateSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, compilePageStyle, compileTokenCss, composeVirtualTraits, computeRelative, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, defaultMessageResolver, deriveSeoFromContent, describeSeoFields, effectiveTransitionId, excludeSelf, feelFor, getByPath, getSeoValue, initialSlotValues, isActionEnabled, isContextAction, isInputOverriddenAt, isOverriddenAt, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, mediaQueryFor, mergeSwiperBreakpoints, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, normalizeGalleryImage, normalizeIconClass, parentBreakpoint, parseUrlList, partClassName, planDataSource, planResponsiveRules, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resetSeoField, resolveBoundValue, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSeo, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, setSeoValue, stateNamesIn, stripSuppressedProps, styleKeyToKebab, tokensToDarkVarMap, tokensToVarMap, variableAliases, variableItemsFrom, withContextSlots, wrapInBreakpointQuery, wrapInMediaQuery };
|
|
7120
6848
|
//# sourceMappingURL=vectoriox-iox-ui.mjs.map
|