valtech-components 2.0.298 → 2.0.299
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/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +24 -13
- package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +3 -3
- package/esm2022/lib/examples/reactive-components-demo.component.mjs +303 -0
- package/esm2022/lib/examples/reactivity-test.component.mjs +200 -0
- package/esm2022/lib/examples/selector-examples.component.mjs +37 -11
- package/esm2022/lib/services/lang-provider/content.mjs +69 -1
- package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +2 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components.mjs +617 -26
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/examples/reactive-components-demo.component.d.ts +45 -0
- package/lib/examples/reactivity-test.component.d.ts +27 -0
- package/lib/examples/selector-examples.component.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/esm2022/lib/services/lang-provider/components/display-demo.mjs +0 -86
- package/lib/services/lang-provider/components/display-demo.d.ts +0 -3
|
@@ -5,7 +5,7 @@ import * as i1 from '@angular/common';
|
|
|
5
5
|
import { CommonModule, NgStyle, AsyncPipe, NgFor, NgClass } from '@angular/common';
|
|
6
6
|
import { addIcons } from 'ionicons';
|
|
7
7
|
import { addOutline, addCircleOutline, alertOutline, alertCircleOutline, arrowBackOutline, arrowForwardOutline, arrowDownOutline, checkmarkCircleOutline, ellipsisHorizontalOutline, notificationsOutline, openOutline, closeOutline, chatbubblesOutline, shareOutline, heart, heartOutline, homeOutline, eyeOffOutline, eyeOutline, scanOutline, chevronDownOutline, chevronForwardOutline, checkmarkOutline, clipboardOutline, copyOutline, filterOutline, locationOutline, calendarOutline, businessOutline, logoTwitter, logoInstagram, logoLinkedin, logoYoutube, logoTiktok, logoFacebook, createOutline, trashOutline, playOutline, refreshOutline, documentTextOutline, lockClosedOutline, informationCircleOutline, logoNpm, chevronDown, language, globe, chevronBackOutline } from 'ionicons/icons';
|
|
8
|
-
import { map, BehaviorSubject, distinctUntilChanged, Subscription, of } from 'rxjs';
|
|
8
|
+
import { map, BehaviorSubject, distinctUntilChanged, Subscription, of, combineLatest } from 'rxjs';
|
|
9
9
|
import { Router, RouterLink } from '@angular/router';
|
|
10
10
|
import { Browser } from '@capacitor/browser';
|
|
11
11
|
import * as i1$1 from '@angular/platform-browser';
|
|
@@ -911,7 +911,7 @@ class LangService {
|
|
|
911
911
|
console.warn(`LangService: Content "${className}.${key}" not available in "${lang}".`, `Using "${result.actualLang}" instead. Available languages:`, this.availableLanguages);
|
|
912
912
|
}
|
|
913
913
|
return result.content || fallback || `[${className}.${key}]`;
|
|
914
|
-
}), distinctUntilChanged());
|
|
914
|
+
}), distinctUntilChanged((prev, curr) => prev === curr));
|
|
915
915
|
}
|
|
916
916
|
/**
|
|
917
917
|
* Get reactive content for multiple keys at once.
|
|
@@ -3883,7 +3883,7 @@ class PopoverSelectorComponent {
|
|
|
3883
3883
|
</ion-select-option>
|
|
3884
3884
|
</ion-select>
|
|
3885
3885
|
</div>
|
|
3886
|
-
`, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.popover-selector-container{display:inline-block;width:auto}.popover-selector-container .selector-label{display:block;margin-bottom:8px;font-weight:600;color:var(--ion-color-dark, #1a1a1a)}.popover-selector-select{display:inline-block;width:auto}.popover-selector-select .selector-trigger{--background: transparent;--background-hover: transparent;--background-activated: transparent;--background-focused: transparent;--box-shadow: none;--border-radius: 24px;display:inline-flex;align-items:center;min-width:auto;width:auto;height:auto;min-height:40px;padding:10px 16px;margin:0;background:var(--ion-color-light, #f8f9fa);border:none;border-radius:24px;box-shadow:0 2px 8px #00000014;transition:all .2s ease}.popover-selector-select .selector-trigger:hover:not([disabled]){background:var(--ion-color-light-shade, #e9ecef);transform:translateY(-1px);box-shadow:0 4px 12px #0000001f}.popover-selector-select .selector-trigger:active{transform:translateY(0);box-shadow:0 2px 6px #00000026}.popover-selector-select .selector-trigger:focus-visible{outline:2px solid var(--ion-color-primary, #3880ff);outline-offset:2px}.popover-selector-select .selector-trigger .trigger-text{display:inline-block;margin:0 8px 0 0;font-weight:600;font-size:14px;color:var(--ion-color-dark, #1a1a1a);white-space:nowrap;line-height:1.4}.popover-selector-select .selector-trigger .chevron-icon{font-size:16px;color:var(--ion-color-medium, #92949c);transition:transform .2s ease;margin-left:4px}.popover-selector-select .selector-trigger ion-icon[slot=start]{margin-right:8px;font-size:16px;color:var(--ion-color-medium-shade, #808289)}.popover-selector-select .selector-trigger.select-expanded{background:var(--ion-color-light-shade, #e9ecef)}.popover-selector-select .selector-trigger.select-expanded .chevron-icon{transform:rotate(180deg);color:var(--ion-color-primary, #3880ff)}.popover-selector-select .selector-trigger[disabled]{opacity:.6;pointer-events:none;background:var(--ion-color-light-tint, #f4f5f8);box-shadow:none;transform:none}.option-content{display:flex;align-items:center;gap:12px;padding:6px 0}.option-content .option-icon{font-size:18px;width:18px;height:18px;opacity:.8;color:var(--ion-color-medium-shade, #808289)}.option-content span{font-weight:500;color:var(--ion-color-dark, #1a1a1a);line-height:1.4}.popover-selector-container.size-small .selector-trigger{min-height:32px;padding:6px 12px;border-radius:18px}.popover-selector-container.size-small .selector-trigger .trigger-text{font-size:12px}.popover-selector-container.size-small .selector-trigger .chevron-icon,.popover-selector-container.size-small .selector-trigger ion-icon[slot=start]{font-size:14px}.popover-selector-container.size-large .selector-trigger{min-height:48px;padding:14px 20px;border-radius:28px}.popover-selector-container.size-large .selector-trigger .trigger-text{font-size:16px}.popover-selector-container.size-large .selector-trigger .chevron-icon,.popover-selector-container.size-large .selector-trigger ion-icon[slot=start]{font-size:18px}@media (max-width: 768px){.popover-selector-container .selector-trigger{min-height:38px;padding:9px 14px}.popover-selector-container .selector-trigger .trigger-text{font-size:13px}}@media (prefers-color-scheme: dark){.popover-selector-container .selector-label{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger{background:var(--ion-color-dark-tint, #383a3e)}.popover-selector-container .selector-trigger:hover:not([disabled]){background:var(--ion-color-dark-shade, #2f2f2f)}.popover-selector-container .selector-trigger .trigger-text{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger .chevron-icon,.popover-selector-container .selector-trigger ion-icon[slot=start]{color:var(--ion-color-light-shade, #d7d8da)}.popover-selector-container .selector-trigger.select-expanded{background:var(--ion-color-dark-shade, #2f2f2f)}}ion-select{border-radius:8px;padding
|
|
3886
|
+
`, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.popover-selector-container{display:inline-block;width:auto}.popover-selector-container .selector-label{display:block;margin-bottom:8px;font-weight:600;color:var(--ion-color-dark, #1a1a1a)}.popover-selector-select{display:inline-block;width:auto}.popover-selector-select .selector-trigger{--background: transparent;--background-hover: transparent;--background-activated: transparent;--background-focused: transparent;--box-shadow: none;--border-radius: 24px;display:inline-flex;align-items:center;min-width:auto;width:auto;height:auto;min-height:40px;padding:10px 16px;margin:0;background:var(--ion-color-light, #f8f9fa);border:none;border-radius:24px;box-shadow:0 2px 8px #00000014;transition:all .2s ease}.popover-selector-select .selector-trigger:hover:not([disabled]){background:var(--ion-color-light-shade, #e9ecef);transform:translateY(-1px);box-shadow:0 4px 12px #0000001f}.popover-selector-select .selector-trigger:active{transform:translateY(0);box-shadow:0 2px 6px #00000026}.popover-selector-select .selector-trigger:focus-visible{outline:2px solid var(--ion-color-primary, #3880ff);outline-offset:2px}.popover-selector-select .selector-trigger .trigger-text{display:inline-block;margin:0 8px 0 0;font-weight:600;font-size:14px;color:var(--ion-color-dark, #1a1a1a);white-space:nowrap;line-height:1.4}.popover-selector-select .selector-trigger .chevron-icon{font-size:16px;color:var(--ion-color-medium, #92949c);transition:transform .2s ease;margin-left:4px}.popover-selector-select .selector-trigger ion-icon[slot=start]{margin-right:8px;font-size:16px;color:var(--ion-color-medium-shade, #808289)}.popover-selector-select .selector-trigger.select-expanded{background:var(--ion-color-light-shade, #e9ecef)}.popover-selector-select .selector-trigger.select-expanded .chevron-icon{transform:rotate(180deg);color:var(--ion-color-primary, #3880ff)}.popover-selector-select .selector-trigger[disabled]{opacity:.6;pointer-events:none;background:var(--ion-color-light-tint, #f4f5f8);box-shadow:none;transform:none}.option-content{display:flex;align-items:center;gap:12px;padding:6px 0}.option-content .option-icon{font-size:18px;width:18px;height:18px;opacity:.8;color:var(--ion-color-medium-shade, #808289)}.option-content span{font-weight:500;color:var(--ion-color-dark, #1a1a1a);line-height:1.4}.popover-selector-container.size-small .selector-trigger{min-height:32px;padding:6px 12px;border-radius:18px}.popover-selector-container.size-small .selector-trigger .trigger-text{font-size:12px}.popover-selector-container.size-small .selector-trigger .chevron-icon,.popover-selector-container.size-small .selector-trigger ion-icon[slot=start]{font-size:14px}.popover-selector-container.size-large .selector-trigger{min-height:48px;padding:14px 20px;border-radius:28px}.popover-selector-container.size-large .selector-trigger .trigger-text{font-size:16px}.popover-selector-container.size-large .selector-trigger .chevron-icon,.popover-selector-container.size-large .selector-trigger ion-icon[slot=start]{font-size:18px}@media (max-width: 768px){.popover-selector-container .selector-trigger{min-height:38px;padding:9px 14px}.popover-selector-container .selector-trigger .trigger-text{font-size:13px}}@media (prefers-color-scheme: dark){.popover-selector-container .selector-label{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger{background:var(--ion-color-dark-tint, #383a3e)}.popover-selector-container .selector-trigger:hover:not([disabled]){background:var(--ion-color-dark-shade, #2f2f2f)}.popover-selector-container .selector-trigger .trigger-text{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger .chevron-icon,.popover-selector-container .selector-trigger ion-icon[slot=start]{color:var(--ion-color-light-shade, #d7d8da)}.popover-selector-container .selector-trigger.select-expanded{background:var(--ion-color-dark-shade, #2f2f2f)}}ion-select{border-radius:8px;padding:.625rem;border:.125rem solid var(--ion-color-light)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "expandedIcon", "fill", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }] }); }
|
|
3887
3887
|
}
|
|
3888
3888
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverSelectorComponent, decorators: [{
|
|
3889
3889
|
type: Component,
|
|
@@ -3925,7 +3925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3925
3925
|
</ion-select-option>
|
|
3926
3926
|
</ion-select>
|
|
3927
3927
|
</div>
|
|
3928
|
-
`, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.popover-selector-container{display:inline-block;width:auto}.popover-selector-container .selector-label{display:block;margin-bottom:8px;font-weight:600;color:var(--ion-color-dark, #1a1a1a)}.popover-selector-select{display:inline-block;width:auto}.popover-selector-select .selector-trigger{--background: transparent;--background-hover: transparent;--background-activated: transparent;--background-focused: transparent;--box-shadow: none;--border-radius: 24px;display:inline-flex;align-items:center;min-width:auto;width:auto;height:auto;min-height:40px;padding:10px 16px;margin:0;background:var(--ion-color-light, #f8f9fa);border:none;border-radius:24px;box-shadow:0 2px 8px #00000014;transition:all .2s ease}.popover-selector-select .selector-trigger:hover:not([disabled]){background:var(--ion-color-light-shade, #e9ecef);transform:translateY(-1px);box-shadow:0 4px 12px #0000001f}.popover-selector-select .selector-trigger:active{transform:translateY(0);box-shadow:0 2px 6px #00000026}.popover-selector-select .selector-trigger:focus-visible{outline:2px solid var(--ion-color-primary, #3880ff);outline-offset:2px}.popover-selector-select .selector-trigger .trigger-text{display:inline-block;margin:0 8px 0 0;font-weight:600;font-size:14px;color:var(--ion-color-dark, #1a1a1a);white-space:nowrap;line-height:1.4}.popover-selector-select .selector-trigger .chevron-icon{font-size:16px;color:var(--ion-color-medium, #92949c);transition:transform .2s ease;margin-left:4px}.popover-selector-select .selector-trigger ion-icon[slot=start]{margin-right:8px;font-size:16px;color:var(--ion-color-medium-shade, #808289)}.popover-selector-select .selector-trigger.select-expanded{background:var(--ion-color-light-shade, #e9ecef)}.popover-selector-select .selector-trigger.select-expanded .chevron-icon{transform:rotate(180deg);color:var(--ion-color-primary, #3880ff)}.popover-selector-select .selector-trigger[disabled]{opacity:.6;pointer-events:none;background:var(--ion-color-light-tint, #f4f5f8);box-shadow:none;transform:none}.option-content{display:flex;align-items:center;gap:12px;padding:6px 0}.option-content .option-icon{font-size:18px;width:18px;height:18px;opacity:.8;color:var(--ion-color-medium-shade, #808289)}.option-content span{font-weight:500;color:var(--ion-color-dark, #1a1a1a);line-height:1.4}.popover-selector-container.size-small .selector-trigger{min-height:32px;padding:6px 12px;border-radius:18px}.popover-selector-container.size-small .selector-trigger .trigger-text{font-size:12px}.popover-selector-container.size-small .selector-trigger .chevron-icon,.popover-selector-container.size-small .selector-trigger ion-icon[slot=start]{font-size:14px}.popover-selector-container.size-large .selector-trigger{min-height:48px;padding:14px 20px;border-radius:28px}.popover-selector-container.size-large .selector-trigger .trigger-text{font-size:16px}.popover-selector-container.size-large .selector-trigger .chevron-icon,.popover-selector-container.size-large .selector-trigger ion-icon[slot=start]{font-size:18px}@media (max-width: 768px){.popover-selector-container .selector-trigger{min-height:38px;padding:9px 14px}.popover-selector-container .selector-trigger .trigger-text{font-size:13px}}@media (prefers-color-scheme: dark){.popover-selector-container .selector-label{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger{background:var(--ion-color-dark-tint, #383a3e)}.popover-selector-container .selector-trigger:hover:not([disabled]){background:var(--ion-color-dark-shade, #2f2f2f)}.popover-selector-container .selector-trigger .trigger-text{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger .chevron-icon,.popover-selector-container .selector-trigger ion-icon[slot=start]{color:var(--ion-color-light-shade, #d7d8da)}.popover-selector-container .selector-trigger.select-expanded{background:var(--ion-color-dark-shade, #2f2f2f)}}ion-select{border-radius:8px;padding
|
|
3928
|
+
`, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.popover-selector-container{display:inline-block;width:auto}.popover-selector-container .selector-label{display:block;margin-bottom:8px;font-weight:600;color:var(--ion-color-dark, #1a1a1a)}.popover-selector-select{display:inline-block;width:auto}.popover-selector-select .selector-trigger{--background: transparent;--background-hover: transparent;--background-activated: transparent;--background-focused: transparent;--box-shadow: none;--border-radius: 24px;display:inline-flex;align-items:center;min-width:auto;width:auto;height:auto;min-height:40px;padding:10px 16px;margin:0;background:var(--ion-color-light, #f8f9fa);border:none;border-radius:24px;box-shadow:0 2px 8px #00000014;transition:all .2s ease}.popover-selector-select .selector-trigger:hover:not([disabled]){background:var(--ion-color-light-shade, #e9ecef);transform:translateY(-1px);box-shadow:0 4px 12px #0000001f}.popover-selector-select .selector-trigger:active{transform:translateY(0);box-shadow:0 2px 6px #00000026}.popover-selector-select .selector-trigger:focus-visible{outline:2px solid var(--ion-color-primary, #3880ff);outline-offset:2px}.popover-selector-select .selector-trigger .trigger-text{display:inline-block;margin:0 8px 0 0;font-weight:600;font-size:14px;color:var(--ion-color-dark, #1a1a1a);white-space:nowrap;line-height:1.4}.popover-selector-select .selector-trigger .chevron-icon{font-size:16px;color:var(--ion-color-medium, #92949c);transition:transform .2s ease;margin-left:4px}.popover-selector-select .selector-trigger ion-icon[slot=start]{margin-right:8px;font-size:16px;color:var(--ion-color-medium-shade, #808289)}.popover-selector-select .selector-trigger.select-expanded{background:var(--ion-color-light-shade, #e9ecef)}.popover-selector-select .selector-trigger.select-expanded .chevron-icon{transform:rotate(180deg);color:var(--ion-color-primary, #3880ff)}.popover-selector-select .selector-trigger[disabled]{opacity:.6;pointer-events:none;background:var(--ion-color-light-tint, #f4f5f8);box-shadow:none;transform:none}.option-content{display:flex;align-items:center;gap:12px;padding:6px 0}.option-content .option-icon{font-size:18px;width:18px;height:18px;opacity:.8;color:var(--ion-color-medium-shade, #808289)}.option-content span{font-weight:500;color:var(--ion-color-dark, #1a1a1a);line-height:1.4}.popover-selector-container.size-small .selector-trigger{min-height:32px;padding:6px 12px;border-radius:18px}.popover-selector-container.size-small .selector-trigger .trigger-text{font-size:12px}.popover-selector-container.size-small .selector-trigger .chevron-icon,.popover-selector-container.size-small .selector-trigger ion-icon[slot=start]{font-size:14px}.popover-selector-container.size-large .selector-trigger{min-height:48px;padding:14px 20px;border-radius:28px}.popover-selector-container.size-large .selector-trigger .trigger-text{font-size:16px}.popover-selector-container.size-large .selector-trigger .chevron-icon,.popover-selector-container.size-large .selector-trigger ion-icon[slot=start]{font-size:18px}@media (max-width: 768px){.popover-selector-container .selector-trigger{min-height:38px;padding:9px 14px}.popover-selector-container .selector-trigger .trigger-text{font-size:13px}}@media (prefers-color-scheme: dark){.popover-selector-container .selector-label{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger{background:var(--ion-color-dark-tint, #383a3e)}.popover-selector-container .selector-trigger:hover:not([disabled]){background:var(--ion-color-dark-shade, #2f2f2f)}.popover-selector-container .selector-trigger .trigger-text{color:var(--ion-color-light, #f4f5f8)}.popover-selector-container .selector-trigger .chevron-icon,.popover-selector-container .selector-trigger ion-icon[slot=start]{color:var(--ion-color-light-shade, #d7d8da)}.popover-selector-container .selector-trigger.select-expanded{background:var(--ion-color-dark-shade, #2f2f2f)}}ion-select{border-radius:8px;padding:.625rem;border:.125rem solid var(--ion-color-light)!important}\n"] }]
|
|
3929
3929
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
3930
3930
|
type: Input
|
|
3931
3931
|
}], selectionChange: [{
|
|
@@ -4059,12 +4059,13 @@ class LanguageSelectorComponent {
|
|
|
4059
4059
|
}
|
|
4060
4060
|
}
|
|
4061
4061
|
initializePopoverProps() {
|
|
4062
|
-
// Subscribe to language state changes to update popover props
|
|
4063
|
-
const languageSubscription =
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4062
|
+
// Subscribe to language state changes and content changes to update popover props
|
|
4063
|
+
const languageSubscription = combineLatest([
|
|
4064
|
+
this.availableLanguages$,
|
|
4065
|
+
this.currentLanguage$,
|
|
4066
|
+
this.langService.currentLang$, // This will trigger updates when language changes
|
|
4067
|
+
]).subscribe(([availableLanguages, currentLanguage]) => {
|
|
4068
|
+
this.updatePopoverProps(availableLanguages, currentLanguage);
|
|
4068
4069
|
});
|
|
4069
4070
|
this.subscriptions.add(languageSubscription);
|
|
4070
4071
|
// Subscribe to label changes
|
|
@@ -4106,12 +4107,22 @@ class LanguageSelectorComponent {
|
|
|
4106
4107
|
};
|
|
4107
4108
|
}
|
|
4108
4109
|
getLanguageDisplayName(languageCode) {
|
|
4109
|
-
// Use custom names if provided
|
|
4110
|
-
|
|
4111
|
-
|
|
4110
|
+
// Use custom names if provided
|
|
4111
|
+
if (this.props.customLanguageNames?.[languageCode]) {
|
|
4112
|
+
const customName = this.props.customLanguageNames[languageCode];
|
|
4113
|
+
const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';
|
|
4114
|
+
return flag ? `${flag} ${customName}` : customName;
|
|
4115
|
+
}
|
|
4116
|
+
// Use reactive content for translated language names
|
|
4117
|
+
// Note: This will use the current language since getLanguageDisplayName is called during subscription updates
|
|
4118
|
+
const translatedName = this.langService.getText('_global', `languageName_${languageCode}`);
|
|
4112
4119
|
const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';
|
|
4113
|
-
|
|
4114
|
-
|
|
4120
|
+
if (translatedName && translatedName !== `languageName_${languageCode}`) {
|
|
4121
|
+
return flag ? `${flag} ${translatedName}` : translatedName;
|
|
4122
|
+
}
|
|
4123
|
+
// Fallback to default names, then to code
|
|
4124
|
+
const defaultName = this.defaultLanguageNames[languageCode] || languageCode.toUpperCase();
|
|
4125
|
+
return flag ? `${flag} ${defaultName}` : defaultName;
|
|
4115
4126
|
}
|
|
4116
4127
|
/**
|
|
4117
4128
|
* Handle language selection change.
|
|
@@ -8906,6 +8917,492 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
8906
8917
|
`, styles: [".multi-lang-demo{padding:20px;max-width:800px}.language-info,.content-examples,.warning-info,.component-analysis{margin:20px 0;padding:15px;border:1px solid var(--ion-color-light, #f4f5f8);border-radius:8px;background:var(--ion-color-light-tint, #f5f6f9)}.button-group{display:flex;gap:10px;flex-wrap:wrap}.button-group button{padding:8px 16px;border:1px solid var(--ion-color-primary, #3880ff);background:#fff;color:var(--ion-color-primary, #3880ff);border-radius:4px;cursor:pointer;transition:all .2s}.button-group button:hover{background:var(--ion-color-primary-tint, #4992ff);color:#fff}.button-group button.active{background:var(--ion-color-primary, #3880ff);color:#fff}.example-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px;margin-top:10px}.analysis-results{margin-top:10px;padding:10px;background:#fff;border-radius:4px}h2{color:var(--ion-color-primary, #3880ff)}h3{color:var(--ion-color-dark, #222428);margin-bottom:10px}\n"] }]
|
|
8907
8918
|
}], ctorParameters: () => [{ type: ContentService }, { type: LangService }] });
|
|
8908
8919
|
|
|
8920
|
+
/**
|
|
8921
|
+
* Simple demo component showcasing reactive content patterns
|
|
8922
|
+
* for buttons and alert boxes.
|
|
8923
|
+
*
|
|
8924
|
+
* Demonstrates:
|
|
8925
|
+
* - Button components with reactive text
|
|
8926
|
+
* - Alert boxes with reactive content
|
|
8927
|
+
* - Language switching
|
|
8928
|
+
* - Static vs reactive content patterns
|
|
8929
|
+
*/
|
|
8930
|
+
class ReactiveComponentsDemoComponent {
|
|
8931
|
+
constructor(contentService, langService) {
|
|
8932
|
+
this.contentService = contentService;
|
|
8933
|
+
this.langService = langService;
|
|
8934
|
+
this.subscriptions = new Subscription();
|
|
8935
|
+
}
|
|
8936
|
+
ngOnInit() {
|
|
8937
|
+
this.initializeContent();
|
|
8938
|
+
this.initializeComponents();
|
|
8939
|
+
}
|
|
8940
|
+
ngOnDestroy() {
|
|
8941
|
+
this.subscriptions.unsubscribe();
|
|
8942
|
+
}
|
|
8943
|
+
initializeContent() {
|
|
8944
|
+
// Page-level content
|
|
8945
|
+
this.pageTitle$ = this.contentService.fromContent({
|
|
8946
|
+
className: 'reactiveDemo',
|
|
8947
|
+
key: 'title',
|
|
8948
|
+
fallback: 'Reactive Components Demo',
|
|
8949
|
+
});
|
|
8950
|
+
this.languageLabel$ = this.contentService.fromContent({
|
|
8951
|
+
className: '_global',
|
|
8952
|
+
key: 'language',
|
|
8953
|
+
fallback: 'Language',
|
|
8954
|
+
});
|
|
8955
|
+
this.buttonSectionTitle$ = this.contentService.fromContent({
|
|
8956
|
+
className: 'reactiveDemo',
|
|
8957
|
+
key: 'buttons.title',
|
|
8958
|
+
fallback: 'Reactive Buttons',
|
|
8959
|
+
});
|
|
8960
|
+
this.alertSectionTitle$ = this.contentService.fromContent({
|
|
8961
|
+
className: 'reactiveDemo',
|
|
8962
|
+
key: 'alerts.title',
|
|
8963
|
+
fallback: 'Reactive Alerts',
|
|
8964
|
+
});
|
|
8965
|
+
// Language state
|
|
8966
|
+
this.currentLanguage$ = this.langService.currentLang$;
|
|
8967
|
+
this.availableLanguages$ = this.langService.currentLang$.pipe(map(() => this.langService.availableLangs));
|
|
8968
|
+
}
|
|
8969
|
+
initializeComponents() {
|
|
8970
|
+
// Reactive buttons with common actions
|
|
8971
|
+
this.saveButton = {
|
|
8972
|
+
color: 'primary',
|
|
8973
|
+
fill: 'solid',
|
|
8974
|
+
type: 'button',
|
|
8975
|
+
state: ComponentStates.ENABLED,
|
|
8976
|
+
textConfig: {
|
|
8977
|
+
className: '_global',
|
|
8978
|
+
key: 'save',
|
|
8979
|
+
fallback: 'Save',
|
|
8980
|
+
},
|
|
8981
|
+
handler: () => this.handleSave(),
|
|
8982
|
+
};
|
|
8983
|
+
this.cancelButton = {
|
|
8984
|
+
color: 'medium',
|
|
8985
|
+
fill: 'outline',
|
|
8986
|
+
type: 'button',
|
|
8987
|
+
state: ComponentStates.ENABLED,
|
|
8988
|
+
textConfig: {
|
|
8989
|
+
className: '_global',
|
|
8990
|
+
key: 'cancel',
|
|
8991
|
+
fallback: 'Cancel',
|
|
8992
|
+
},
|
|
8993
|
+
handler: () => this.handleCancel(),
|
|
8994
|
+
};
|
|
8995
|
+
// Static button for comparison
|
|
8996
|
+
this.staticButton = {
|
|
8997
|
+
color: 'tertiary',
|
|
8998
|
+
fill: 'outline',
|
|
8999
|
+
type: 'button',
|
|
9000
|
+
state: ComponentStates.ENABLED,
|
|
9001
|
+
text: 'Static Button', // Static text
|
|
9002
|
+
handler: () => this.handleStatic(),
|
|
9003
|
+
};
|
|
9004
|
+
// Reactive alert boxes
|
|
9005
|
+
this.warningAlert = {
|
|
9006
|
+
box: {
|
|
9007
|
+
color: 'warning',
|
|
9008
|
+
rounded: true,
|
|
9009
|
+
bordered: false,
|
|
9010
|
+
icon: 'warning',
|
|
9011
|
+
},
|
|
9012
|
+
icon: {
|
|
9013
|
+
name: 'warning',
|
|
9014
|
+
color: 'warning',
|
|
9015
|
+
size: 'medium',
|
|
9016
|
+
},
|
|
9017
|
+
textConfig: {
|
|
9018
|
+
className: 'reactiveDemo',
|
|
9019
|
+
key: 'alerts.warning',
|
|
9020
|
+
fallback: 'This is a warning message',
|
|
9021
|
+
},
|
|
9022
|
+
textStyle: {
|
|
9023
|
+
size: 'medium',
|
|
9024
|
+
bold: false,
|
|
9025
|
+
},
|
|
9026
|
+
};
|
|
9027
|
+
this.successAlert = {
|
|
9028
|
+
box: {
|
|
9029
|
+
color: 'success',
|
|
9030
|
+
rounded: true,
|
|
9031
|
+
bordered: false,
|
|
9032
|
+
icon: 'checkmark-circle',
|
|
9033
|
+
},
|
|
9034
|
+
icon: {
|
|
9035
|
+
name: 'checkmark-circle',
|
|
9036
|
+
color: 'success',
|
|
9037
|
+
size: 'medium',
|
|
9038
|
+
},
|
|
9039
|
+
textConfig: {
|
|
9040
|
+
className: 'reactiveDemo',
|
|
9041
|
+
key: 'alerts.success',
|
|
9042
|
+
fallback: 'Operation completed successfully!',
|
|
9043
|
+
},
|
|
9044
|
+
textStyle: {
|
|
9045
|
+
size: 'medium',
|
|
9046
|
+
bold: true,
|
|
9047
|
+
},
|
|
9048
|
+
};
|
|
9049
|
+
// Static alert for comparison
|
|
9050
|
+
this.staticAlert = {
|
|
9051
|
+
box: {
|
|
9052
|
+
color: 'dark',
|
|
9053
|
+
rounded: true,
|
|
9054
|
+
bordered: false,
|
|
9055
|
+
icon: 'information-circle',
|
|
9056
|
+
},
|
|
9057
|
+
icon: {
|
|
9058
|
+
name: 'information-circle',
|
|
9059
|
+
color: 'dark',
|
|
9060
|
+
size: 'medium',
|
|
9061
|
+
},
|
|
9062
|
+
text: 'This is a static alert message', // Static text
|
|
9063
|
+
textStyle: {
|
|
9064
|
+
size: 'medium',
|
|
9065
|
+
bold: false,
|
|
9066
|
+
},
|
|
9067
|
+
};
|
|
9068
|
+
}
|
|
9069
|
+
// Event handlers
|
|
9070
|
+
changeLanguage(language) {
|
|
9071
|
+
this.langService.setLang(language);
|
|
9072
|
+
}
|
|
9073
|
+
handleSave() {
|
|
9074
|
+
console.log('Save button clicked');
|
|
9075
|
+
}
|
|
9076
|
+
handleCancel() {
|
|
9077
|
+
console.log('Cancel button clicked');
|
|
9078
|
+
}
|
|
9079
|
+
handleStatic() {
|
|
9080
|
+
console.log('Static button clicked');
|
|
9081
|
+
}
|
|
9082
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactiveComponentsDemoComponent, deps: [{ token: ContentService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9083
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReactiveComponentsDemoComponent, isStandalone: true, selector: "val-reactive-components-demo", ngImport: i0, template: `
|
|
9084
|
+
<div class="reactive-components-demo">
|
|
9085
|
+
<ion-card>
|
|
9086
|
+
<ion-card-header>
|
|
9087
|
+
<ion-card-title>{{ pageTitle$ | async }}</ion-card-title>
|
|
9088
|
+
</ion-card-header>
|
|
9089
|
+
|
|
9090
|
+
<ion-card-content>
|
|
9091
|
+
<!-- Language Selector -->
|
|
9092
|
+
<ion-item>
|
|
9093
|
+
<ion-label>{{ languageLabel$ | async }}</ion-label>
|
|
9094
|
+
<ion-select
|
|
9095
|
+
interface="popover"
|
|
9096
|
+
[value]="currentLanguage$ | async"
|
|
9097
|
+
(ionChange)="changeLanguage($event.detail.value)"
|
|
9098
|
+
>
|
|
9099
|
+
<ion-select-option *ngFor="let lang of availableLanguages$ | async" [value]="lang">
|
|
9100
|
+
{{ lang | uppercase }}
|
|
9101
|
+
</ion-select-option>
|
|
9102
|
+
</ion-select>
|
|
9103
|
+
</ion-item>
|
|
9104
|
+
|
|
9105
|
+
<!-- Reactive Buttons Demo -->
|
|
9106
|
+
<div class="section">
|
|
9107
|
+
<h3>{{ buttonSectionTitle$ | async }}</h3>
|
|
9108
|
+
|
|
9109
|
+
<!-- Common action buttons with reactive text -->
|
|
9110
|
+
<div class="button-grid">
|
|
9111
|
+
<val-button [props]="saveButton"></val-button>
|
|
9112
|
+
<val-button [props]="cancelButton"></val-button>
|
|
9113
|
+
<val-button [props]="staticButton"></val-button>
|
|
9114
|
+
</div>
|
|
9115
|
+
</div>
|
|
9116
|
+
|
|
9117
|
+
<!-- Reactive Alert Boxes Demo -->
|
|
9118
|
+
<div class="section">
|
|
9119
|
+
<h3>{{ alertSectionTitle$ | async }}</h3>
|
|
9120
|
+
|
|
9121
|
+
<!-- Alert with reactive content -->
|
|
9122
|
+
<val-alert-box [props]="warningAlert"></val-alert-box>
|
|
9123
|
+
<val-alert-box [props]="successAlert"></val-alert-box>
|
|
9124
|
+
<val-alert-box [props]="staticAlert"></val-alert-box>
|
|
9125
|
+
</div>
|
|
9126
|
+
|
|
9127
|
+
<!-- Analysis -->
|
|
9128
|
+
<div class="section">
|
|
9129
|
+
<h3>Analysis</h3>
|
|
9130
|
+
<div class="analysis-info">
|
|
9131
|
+
<p><strong>Current Language:</strong> {{ currentLanguage$ | async | uppercase }}</p>
|
|
9132
|
+
<p><strong>Available Languages:</strong> {{ (availableLanguages$ | async)?.join(', ') | uppercase }}</p>
|
|
9133
|
+
</div>
|
|
9134
|
+
</div>
|
|
9135
|
+
</ion-card-content>
|
|
9136
|
+
</ion-card>
|
|
9137
|
+
</div>
|
|
9138
|
+
`, isInline: true, styles: [".reactive-components-demo{padding:16px}.section{margin:24px 0}.button-grid{display:flex;gap:12px;flex-wrap:wrap;margin:16px 0}.analysis-info{background:var(--ion-color-light);padding:16px;border-radius:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "expandedIcon", "fill", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: AlertBoxComponent, selector: "val-alert-box", inputs: ["props"] }] }); }
|
|
9139
|
+
}
|
|
9140
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactiveComponentsDemoComponent, decorators: [{
|
|
9141
|
+
type: Component,
|
|
9142
|
+
args: [{ selector: 'val-reactive-components-demo', standalone: true, imports: [
|
|
9143
|
+
CommonModule,
|
|
9144
|
+
IonCard,
|
|
9145
|
+
IonCardContent,
|
|
9146
|
+
IonCardHeader,
|
|
9147
|
+
IonCardTitle,
|
|
9148
|
+
IonSelect,
|
|
9149
|
+
IonSelectOption,
|
|
9150
|
+
IonItem,
|
|
9151
|
+
IonLabel,
|
|
9152
|
+
ButtonComponent,
|
|
9153
|
+
AlertBoxComponent,
|
|
9154
|
+
], template: `
|
|
9155
|
+
<div class="reactive-components-demo">
|
|
9156
|
+
<ion-card>
|
|
9157
|
+
<ion-card-header>
|
|
9158
|
+
<ion-card-title>{{ pageTitle$ | async }}</ion-card-title>
|
|
9159
|
+
</ion-card-header>
|
|
9160
|
+
|
|
9161
|
+
<ion-card-content>
|
|
9162
|
+
<!-- Language Selector -->
|
|
9163
|
+
<ion-item>
|
|
9164
|
+
<ion-label>{{ languageLabel$ | async }}</ion-label>
|
|
9165
|
+
<ion-select
|
|
9166
|
+
interface="popover"
|
|
9167
|
+
[value]="currentLanguage$ | async"
|
|
9168
|
+
(ionChange)="changeLanguage($event.detail.value)"
|
|
9169
|
+
>
|
|
9170
|
+
<ion-select-option *ngFor="let lang of availableLanguages$ | async" [value]="lang">
|
|
9171
|
+
{{ lang | uppercase }}
|
|
9172
|
+
</ion-select-option>
|
|
9173
|
+
</ion-select>
|
|
9174
|
+
</ion-item>
|
|
9175
|
+
|
|
9176
|
+
<!-- Reactive Buttons Demo -->
|
|
9177
|
+
<div class="section">
|
|
9178
|
+
<h3>{{ buttonSectionTitle$ | async }}</h3>
|
|
9179
|
+
|
|
9180
|
+
<!-- Common action buttons with reactive text -->
|
|
9181
|
+
<div class="button-grid">
|
|
9182
|
+
<val-button [props]="saveButton"></val-button>
|
|
9183
|
+
<val-button [props]="cancelButton"></val-button>
|
|
9184
|
+
<val-button [props]="staticButton"></val-button>
|
|
9185
|
+
</div>
|
|
9186
|
+
</div>
|
|
9187
|
+
|
|
9188
|
+
<!-- Reactive Alert Boxes Demo -->
|
|
9189
|
+
<div class="section">
|
|
9190
|
+
<h3>{{ alertSectionTitle$ | async }}</h3>
|
|
9191
|
+
|
|
9192
|
+
<!-- Alert with reactive content -->
|
|
9193
|
+
<val-alert-box [props]="warningAlert"></val-alert-box>
|
|
9194
|
+
<val-alert-box [props]="successAlert"></val-alert-box>
|
|
9195
|
+
<val-alert-box [props]="staticAlert"></val-alert-box>
|
|
9196
|
+
</div>
|
|
9197
|
+
|
|
9198
|
+
<!-- Analysis -->
|
|
9199
|
+
<div class="section">
|
|
9200
|
+
<h3>Analysis</h3>
|
|
9201
|
+
<div class="analysis-info">
|
|
9202
|
+
<p><strong>Current Language:</strong> {{ currentLanguage$ | async | uppercase }}</p>
|
|
9203
|
+
<p><strong>Available Languages:</strong> {{ (availableLanguages$ | async)?.join(', ') | uppercase }}</p>
|
|
9204
|
+
</div>
|
|
9205
|
+
</div>
|
|
9206
|
+
</ion-card-content>
|
|
9207
|
+
</ion-card>
|
|
9208
|
+
</div>
|
|
9209
|
+
`, styles: [".reactive-components-demo{padding:16px}.section{margin:24px 0}.button-grid{display:flex;gap:12px;flex-wrap:wrap;margin:16px 0}.analysis-info{background:var(--ion-color-light);padding:16px;border-radius:8px}\n"] }]
|
|
9210
|
+
}], ctorParameters: () => [{ type: ContentService }, { type: LangService }] });
|
|
9211
|
+
|
|
9212
|
+
/**
|
|
9213
|
+
* Test component to diagnose reactive content behavior.
|
|
9214
|
+
* Compares fromContent vs fromMultipleContent reactivity.
|
|
9215
|
+
*/
|
|
9216
|
+
class ReactivityTestComponent {
|
|
9217
|
+
constructor() {
|
|
9218
|
+
this.contentService = inject(ContentService);
|
|
9219
|
+
this.langService = inject(LangService);
|
|
9220
|
+
// Observable for current language
|
|
9221
|
+
this.currentLang$ = this.langService.currentLang$;
|
|
9222
|
+
// Single key content observables (using fromContent)
|
|
9223
|
+
this.singleWelcome$ = this.contentService.fromContent({
|
|
9224
|
+
className: 'testReactivity',
|
|
9225
|
+
key: 'welcomeMessage',
|
|
9226
|
+
fallback: 'Welcome',
|
|
9227
|
+
});
|
|
9228
|
+
this.singleSave$ = this.contentService.fromContent({
|
|
9229
|
+
className: 'testReactivity',
|
|
9230
|
+
key: 'saveButton',
|
|
9231
|
+
fallback: 'Save',
|
|
9232
|
+
});
|
|
9233
|
+
this.singleCancel$ = this.contentService.fromContent({
|
|
9234
|
+
className: 'testReactivity',
|
|
9235
|
+
key: 'cancelButton',
|
|
9236
|
+
fallback: 'Cancel',
|
|
9237
|
+
});
|
|
9238
|
+
// Multiple keys content observable (using fromMultipleContent)
|
|
9239
|
+
this.multipleContent$ = this.contentService.fromMultipleContent('testReactivity', [
|
|
9240
|
+
'welcomeMessage',
|
|
9241
|
+
'saveButton',
|
|
9242
|
+
'cancelButton',
|
|
9243
|
+
]);
|
|
9244
|
+
// Direct LangService tests
|
|
9245
|
+
this.directSingle$ = this.langService.getContent('testReactivity', 'welcomeMessage', 'Welcome');
|
|
9246
|
+
this.directMultiple$ = this.langService.getMultipleContent('testReactivity', ['welcomeMessage']);
|
|
9247
|
+
// Update counters
|
|
9248
|
+
this.singleUpdateCount = 0;
|
|
9249
|
+
this.multipleUpdateCount = 0;
|
|
9250
|
+
this.directSingleUpdateCount = 0;
|
|
9251
|
+
this.directMultipleUpdateCount = 0;
|
|
9252
|
+
}
|
|
9253
|
+
ngOnInit() {
|
|
9254
|
+
// Subscribe to observables to count updates
|
|
9255
|
+
this.singleWelcome$.subscribe(() => {
|
|
9256
|
+
this.singleUpdateCount++;
|
|
9257
|
+
console.log('Single key updated:', this.singleUpdateCount);
|
|
9258
|
+
});
|
|
9259
|
+
this.multipleContent$.subscribe(() => {
|
|
9260
|
+
this.multipleUpdateCount++;
|
|
9261
|
+
console.log('Multiple keys updated:', this.multipleUpdateCount);
|
|
9262
|
+
});
|
|
9263
|
+
this.directSingle$.subscribe(() => {
|
|
9264
|
+
this.directSingleUpdateCount++;
|
|
9265
|
+
console.log('Direct single updated:', this.directSingleUpdateCount);
|
|
9266
|
+
});
|
|
9267
|
+
this.directMultiple$.subscribe(() => {
|
|
9268
|
+
this.directMultipleUpdateCount++;
|
|
9269
|
+
console.log('Direct multiple updated:', this.directMultipleUpdateCount);
|
|
9270
|
+
});
|
|
9271
|
+
}
|
|
9272
|
+
switchToSpanish() {
|
|
9273
|
+
this.langService.setLang('es');
|
|
9274
|
+
}
|
|
9275
|
+
switchToEnglish() {
|
|
9276
|
+
this.langService.setLang('en');
|
|
9277
|
+
}
|
|
9278
|
+
switchToFrench() {
|
|
9279
|
+
this.langService.setLang('fr');
|
|
9280
|
+
}
|
|
9281
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactivityTestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9282
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReactivityTestComponent, isStandalone: true, selector: "val-reactivity-test", ngImport: i0, template: `
|
|
9283
|
+
<div style="padding: 20px; border: 1px solid #ccc; margin: 10px;">
|
|
9284
|
+
<h3>Reactivity Test Component</h3>
|
|
9285
|
+
|
|
9286
|
+
<!-- Current Language -->
|
|
9287
|
+
<div style="margin-bottom: 20px;"><strong>Current Language:</strong> {{ currentLang$ | async }}</div>
|
|
9288
|
+
|
|
9289
|
+
<!-- Language Switch Buttons -->
|
|
9290
|
+
<div style="margin-bottom: 20px;">
|
|
9291
|
+
<button (click)="switchToSpanish()" style="margin-right: 10px;">Switch to ES</button>
|
|
9292
|
+
<button (click)="switchToEnglish()" style="margin-right: 10px;">Switch to EN</button>
|
|
9293
|
+
<button (click)="switchToFrench()">Switch to FR</button>
|
|
9294
|
+
</div>
|
|
9295
|
+
|
|
9296
|
+
<!-- Single Key Tests -->
|
|
9297
|
+
<div style="margin-bottom: 20px;">
|
|
9298
|
+
<h4>Single Key Tests (fromContent)</h4>
|
|
9299
|
+
<div><strong>welcomeMessage (fromContent):</strong> {{ singleWelcome$ | async }}</div>
|
|
9300
|
+
<div><strong>saveButton (fromContent):</strong> {{ singleSave$ | async }}</div>
|
|
9301
|
+
<div><strong>cancelButton (fromContent):</strong> {{ singleCancel$ | async }}</div>
|
|
9302
|
+
</div>
|
|
9303
|
+
|
|
9304
|
+
<!-- Multiple Keys Test -->
|
|
9305
|
+
<div style="margin-bottom: 20px;">
|
|
9306
|
+
<h4>Multiple Keys Test (fromMultipleContent)</h4>
|
|
9307
|
+
<div>
|
|
9308
|
+
<strong>welcomeMessage (multiple):</strong>
|
|
9309
|
+
{{ (multipleContent$ | async)?.['welcomeMessage'] || 'Loading...' }}
|
|
9310
|
+
</div>
|
|
9311
|
+
<div>
|
|
9312
|
+
<strong>saveButton (multiple):</strong> {{ (multipleContent$ | async)?.['saveButton'] || 'Loading...' }}
|
|
9313
|
+
</div>
|
|
9314
|
+
<div>
|
|
9315
|
+
<strong>cancelButton (multiple):</strong> {{ (multipleContent$ | async)?.['cancelButton'] || 'Loading...' }}
|
|
9316
|
+
</div>
|
|
9317
|
+
</div>
|
|
9318
|
+
|
|
9319
|
+
<!-- Direct LangService Tests -->
|
|
9320
|
+
<div style="margin-bottom: 20px;">
|
|
9321
|
+
<h4>Direct LangService Tests</h4>
|
|
9322
|
+
<div><strong>welcomeMessage (direct single):</strong> {{ directSingle$ | async }}</div>
|
|
9323
|
+
<div>
|
|
9324
|
+
<strong>welcomeMessage (direct multiple):</strong>
|
|
9325
|
+
{{ (directMultiple$ | async)?.['welcomeMessage'] || 'Loading...' }}
|
|
9326
|
+
</div>
|
|
9327
|
+
</div>
|
|
9328
|
+
|
|
9329
|
+
<!-- Update Counter -->
|
|
9330
|
+
<div>
|
|
9331
|
+
<h4>Update Counters</h4>
|
|
9332
|
+
<div><strong>Single key updates:</strong> {{ singleUpdateCount }}</div>
|
|
9333
|
+
<div><strong>Multiple keys updates:</strong> {{ multipleUpdateCount }}</div>
|
|
9334
|
+
<div><strong>Direct single updates:</strong> {{ directSingleUpdateCount }}</div>
|
|
9335
|
+
<div><strong>Direct multiple updates:</strong> {{ directMultipleUpdateCount }}</div>
|
|
9336
|
+
</div>
|
|
9337
|
+
</div>
|
|
9338
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
|
|
9339
|
+
}
|
|
9340
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactivityTestComponent, decorators: [{
|
|
9341
|
+
type: Component,
|
|
9342
|
+
args: [{
|
|
9343
|
+
selector: 'val-reactivity-test',
|
|
9344
|
+
standalone: true,
|
|
9345
|
+
imports: [CommonModule],
|
|
9346
|
+
template: `
|
|
9347
|
+
<div style="padding: 20px; border: 1px solid #ccc; margin: 10px;">
|
|
9348
|
+
<h3>Reactivity Test Component</h3>
|
|
9349
|
+
|
|
9350
|
+
<!-- Current Language -->
|
|
9351
|
+
<div style="margin-bottom: 20px;"><strong>Current Language:</strong> {{ currentLang$ | async }}</div>
|
|
9352
|
+
|
|
9353
|
+
<!-- Language Switch Buttons -->
|
|
9354
|
+
<div style="margin-bottom: 20px;">
|
|
9355
|
+
<button (click)="switchToSpanish()" style="margin-right: 10px;">Switch to ES</button>
|
|
9356
|
+
<button (click)="switchToEnglish()" style="margin-right: 10px;">Switch to EN</button>
|
|
9357
|
+
<button (click)="switchToFrench()">Switch to FR</button>
|
|
9358
|
+
</div>
|
|
9359
|
+
|
|
9360
|
+
<!-- Single Key Tests -->
|
|
9361
|
+
<div style="margin-bottom: 20px;">
|
|
9362
|
+
<h4>Single Key Tests (fromContent)</h4>
|
|
9363
|
+
<div><strong>welcomeMessage (fromContent):</strong> {{ singleWelcome$ | async }}</div>
|
|
9364
|
+
<div><strong>saveButton (fromContent):</strong> {{ singleSave$ | async }}</div>
|
|
9365
|
+
<div><strong>cancelButton (fromContent):</strong> {{ singleCancel$ | async }}</div>
|
|
9366
|
+
</div>
|
|
9367
|
+
|
|
9368
|
+
<!-- Multiple Keys Test -->
|
|
9369
|
+
<div style="margin-bottom: 20px;">
|
|
9370
|
+
<h4>Multiple Keys Test (fromMultipleContent)</h4>
|
|
9371
|
+
<div>
|
|
9372
|
+
<strong>welcomeMessage (multiple):</strong>
|
|
9373
|
+
{{ (multipleContent$ | async)?.['welcomeMessage'] || 'Loading...' }}
|
|
9374
|
+
</div>
|
|
9375
|
+
<div>
|
|
9376
|
+
<strong>saveButton (multiple):</strong> {{ (multipleContent$ | async)?.['saveButton'] || 'Loading...' }}
|
|
9377
|
+
</div>
|
|
9378
|
+
<div>
|
|
9379
|
+
<strong>cancelButton (multiple):</strong> {{ (multipleContent$ | async)?.['cancelButton'] || 'Loading...' }}
|
|
9380
|
+
</div>
|
|
9381
|
+
</div>
|
|
9382
|
+
|
|
9383
|
+
<!-- Direct LangService Tests -->
|
|
9384
|
+
<div style="margin-bottom: 20px;">
|
|
9385
|
+
<h4>Direct LangService Tests</h4>
|
|
9386
|
+
<div><strong>welcomeMessage (direct single):</strong> {{ directSingle$ | async }}</div>
|
|
9387
|
+
<div>
|
|
9388
|
+
<strong>welcomeMessage (direct multiple):</strong>
|
|
9389
|
+
{{ (directMultiple$ | async)?.['welcomeMessage'] || 'Loading...' }}
|
|
9390
|
+
</div>
|
|
9391
|
+
</div>
|
|
9392
|
+
|
|
9393
|
+
<!-- Update Counter -->
|
|
9394
|
+
<div>
|
|
9395
|
+
<h4>Update Counters</h4>
|
|
9396
|
+
<div><strong>Single key updates:</strong> {{ singleUpdateCount }}</div>
|
|
9397
|
+
<div><strong>Multiple keys updates:</strong> {{ multipleUpdateCount }}</div>
|
|
9398
|
+
<div><strong>Direct single updates:</strong> {{ directSingleUpdateCount }}</div>
|
|
9399
|
+
<div><strong>Direct multiple updates:</strong> {{ directMultipleUpdateCount }}</div>
|
|
9400
|
+
</div>
|
|
9401
|
+
</div>
|
|
9402
|
+
`,
|
|
9403
|
+
}]
|
|
9404
|
+
}] });
|
|
9405
|
+
|
|
8909
9406
|
/**
|
|
8910
9407
|
* Ejemplo de uso de los componentes popover-selector y language-selector
|
|
8911
9408
|
*/
|
|
@@ -8957,7 +9454,9 @@ class SelectorExamplesComponent {
|
|
|
8957
9454
|
fill: 'outline',
|
|
8958
9455
|
showCheckmark: true,
|
|
8959
9456
|
};
|
|
8960
|
-
// ✅ Ejemplos de Language Selector
|
|
9457
|
+
// ✅ Ejemplos de Language Selector (con soporte multiidioma)
|
|
9458
|
+
// Los nombres de idiomas se obtienen automáticamente del sistema de contenido
|
|
9459
|
+
// y se muestran traducidos según el idioma actual de la aplicación
|
|
8961
9460
|
this.basicLanguageSelector = {
|
|
8962
9461
|
showLabel: true,
|
|
8963
9462
|
label: 'Idioma',
|
|
@@ -8965,6 +9464,7 @@ class SelectorExamplesComponent {
|
|
|
8965
9464
|
size: 'default',
|
|
8966
9465
|
fill: 'outline',
|
|
8967
9466
|
};
|
|
9467
|
+
// Con banderas y nombres traducidos automáticamente
|
|
8968
9468
|
this.flagLanguageSelector = {
|
|
8969
9469
|
showLabel: true,
|
|
8970
9470
|
label: 'Language / Idioma',
|
|
@@ -8973,6 +9473,7 @@ class SelectorExamplesComponent {
|
|
|
8973
9473
|
size: 'large',
|
|
8974
9474
|
fill: 'solid',
|
|
8975
9475
|
};
|
|
9476
|
+
// Con nombres personalizados (sobrescribe las traducciones automáticas)
|
|
8976
9477
|
this.customLanguageSelector = {
|
|
8977
9478
|
showLabel: true,
|
|
8978
9479
|
labelConfig: {
|
|
@@ -8992,6 +9493,14 @@ class SelectorExamplesComponent {
|
|
|
8992
9493
|
de: 'Deutsch',
|
|
8993
9494
|
},
|
|
8994
9495
|
};
|
|
9496
|
+
// Compacto sin etiqueta, solo banderas y nombres traducidos
|
|
9497
|
+
this.compactLanguageSelector = {
|
|
9498
|
+
showLabel: false,
|
|
9499
|
+
showFlags: true,
|
|
9500
|
+
color: 'tertiary',
|
|
9501
|
+
size: 'small',
|
|
9502
|
+
fill: 'clear',
|
|
9503
|
+
};
|
|
8995
9504
|
}
|
|
8996
9505
|
// ✅ Event Handlers
|
|
8997
9506
|
onCategoryChange(category) {
|
|
@@ -9004,7 +9513,9 @@ class SelectorExamplesComponent {
|
|
|
9004
9513
|
console.log('Notifications changed:', notifications);
|
|
9005
9514
|
}
|
|
9006
9515
|
onLanguageChange(language) {
|
|
9007
|
-
console.log('Language changed:', language);
|
|
9516
|
+
console.log('Language changed to:', language);
|
|
9517
|
+
// La aplicación automáticamente actualizará todos los nombres de idiomas
|
|
9518
|
+
// según la nueva configuración de idioma seleccionada
|
|
9008
9519
|
}
|
|
9009
9520
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectorExamplesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9010
9521
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SelectorExamplesComponent, isStandalone: true, selector: "app-selector-examples", ngImport: i0, template: `
|
|
@@ -9036,23 +9547,29 @@ class SelectorExamplesComponent {
|
|
|
9036
9547
|
|
|
9037
9548
|
<!-- Language Selector -->
|
|
9038
9549
|
<div class="section">
|
|
9039
|
-
<h3>Selector de Idioma</h3>
|
|
9550
|
+
<h3>Selector de Idioma (Multiidioma)</h3>
|
|
9551
|
+
<p>Los nombres de idiomas se muestran traducidos según el idioma actual:</p>
|
|
9040
9552
|
|
|
9041
9553
|
<div class="example-group">
|
|
9042
|
-
<h4>Selector Básico:</h4>
|
|
9554
|
+
<h4>Selector Básico (nombres traducidos):</h4>
|
|
9043
9555
|
<val-language-selector [props]="basicLanguageSelector"> </val-language-selector>
|
|
9044
9556
|
</div>
|
|
9045
9557
|
|
|
9046
9558
|
<div class="example-group">
|
|
9047
|
-
<h4>Selector con Banderas:</h4>
|
|
9559
|
+
<h4>Selector con Banderas (nombres traducidos):</h4>
|
|
9048
9560
|
<val-language-selector [props]="flagLanguageSelector"> </val-language-selector>
|
|
9049
9561
|
</div>
|
|
9050
9562
|
|
|
9051
9563
|
<div class="example-group">
|
|
9052
|
-
<h4>Selector Personalizado:</h4>
|
|
9564
|
+
<h4>Selector Personalizado (nombres propios):</h4>
|
|
9053
9565
|
<val-language-selector [props]="customLanguageSelector" (languageChange)="onLanguageChange($event)">
|
|
9054
9566
|
</val-language-selector>
|
|
9055
9567
|
</div>
|
|
9568
|
+
|
|
9569
|
+
<div class="example-group">
|
|
9570
|
+
<h4>Selector Compacto:</h4>
|
|
9571
|
+
<val-language-selector [props]="compactLanguageSelector"> </val-language-selector>
|
|
9572
|
+
</div>
|
|
9056
9573
|
</div>
|
|
9057
9574
|
</div>
|
|
9058
9575
|
`, isInline: true, styles: [".selector-examples{padding:20px;max-width:800px;margin:0 auto}.section{margin:30px 0;padding:20px;border:1px solid var(--ion-color-light);border-radius:8px;background:var(--ion-color-step-50)}.section h3{margin:0 0 20px;color:var(--ion-color-primary)}.example-group{margin:20px 0;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}.example-group h4{margin:0 0 15px;color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "component", type: PopoverSelectorComponent, selector: "val-popover-selector", inputs: ["props"], outputs: ["selectionChange"] }, { kind: "component", type: LanguageSelectorComponent, selector: "val-language-selector", inputs: ["props"], outputs: ["languageChange"] }] }); }
|
|
@@ -9088,23 +9605,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
9088
9605
|
|
|
9089
9606
|
<!-- Language Selector -->
|
|
9090
9607
|
<div class="section">
|
|
9091
|
-
<h3>Selector de Idioma</h3>
|
|
9608
|
+
<h3>Selector de Idioma (Multiidioma)</h3>
|
|
9609
|
+
<p>Los nombres de idiomas se muestran traducidos según el idioma actual:</p>
|
|
9092
9610
|
|
|
9093
9611
|
<div class="example-group">
|
|
9094
|
-
<h4>Selector Básico:</h4>
|
|
9612
|
+
<h4>Selector Básico (nombres traducidos):</h4>
|
|
9095
9613
|
<val-language-selector [props]="basicLanguageSelector"> </val-language-selector>
|
|
9096
9614
|
</div>
|
|
9097
9615
|
|
|
9098
9616
|
<div class="example-group">
|
|
9099
|
-
<h4>Selector con Banderas:</h4>
|
|
9617
|
+
<h4>Selector con Banderas (nombres traducidos):</h4>
|
|
9100
9618
|
<val-language-selector [props]="flagLanguageSelector"> </val-language-selector>
|
|
9101
9619
|
</div>
|
|
9102
9620
|
|
|
9103
9621
|
<div class="example-group">
|
|
9104
|
-
<h4>Selector Personalizado:</h4>
|
|
9622
|
+
<h4>Selector Personalizado (nombres propios):</h4>
|
|
9105
9623
|
<val-language-selector [props]="customLanguageSelector" (languageChange)="onLanguageChange($event)">
|
|
9106
9624
|
</val-language-selector>
|
|
9107
9625
|
</div>
|
|
9626
|
+
|
|
9627
|
+
<div class="example-group">
|
|
9628
|
+
<h4>Selector Compacto:</h4>
|
|
9629
|
+
<val-language-selector [props]="compactLanguageSelector"> </val-language-selector>
|
|
9630
|
+
</div>
|
|
9108
9631
|
</div>
|
|
9109
9632
|
</div>
|
|
9110
9633
|
`, styles: [".selector-examples{padding:20px;max-width:800px;margin:0 auto}.section{margin:30px 0;padding:20px;border:1px solid var(--ion-color-light);border-radius:8px;background:var(--ion-color-step-50)}.section h3{margin:0 0 20px;color:var(--ion-color-primary)}.example-group{margin:20px 0;padding:15px;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}.example-group h4{margin:0 0 15px;color:var(--ion-color-medium)}\n"] }]
|
|
@@ -9161,6 +9684,18 @@ const globalContentData = {
|
|
|
9161
9684
|
language: 'Idioma',
|
|
9162
9685
|
// Common confirmations
|
|
9163
9686
|
areYouSure: '¿Estás seguro?',
|
|
9687
|
+
// Language names (translated) - flat keys for type compatibility
|
|
9688
|
+
languageName_es: 'Español',
|
|
9689
|
+
languageName_en: 'Inglés',
|
|
9690
|
+
languageName_fr: 'Francés',
|
|
9691
|
+
languageName_de: 'Alemán',
|
|
9692
|
+
languageName_pt: 'Portugués',
|
|
9693
|
+
languageName_it: 'Italiano',
|
|
9694
|
+
languageName_zh: 'Chino',
|
|
9695
|
+
languageName_ja: 'Japonés',
|
|
9696
|
+
languageName_ko: 'Coreano',
|
|
9697
|
+
languageName_ru: 'Ruso',
|
|
9698
|
+
languageName_ar: 'Árabe',
|
|
9164
9699
|
deleteConfirmation: '¿Estás seguro de que deseas eliminar {itemName}?',
|
|
9165
9700
|
unsavedChanges: 'Tienes cambios sin guardar. ¿Deseas continuar?',
|
|
9166
9701
|
// Common placeholders
|
|
@@ -9193,8 +9728,21 @@ const globalContentData = {
|
|
|
9193
9728
|
success: 'Success',
|
|
9194
9729
|
warning: 'Warning',
|
|
9195
9730
|
info: 'Information',
|
|
9731
|
+
language: 'Language',
|
|
9196
9732
|
// Common confirmations
|
|
9197
9733
|
areYouSure: 'Are you sure?',
|
|
9734
|
+
// Language names (translated) - flat keys for type compatibility
|
|
9735
|
+
languageName_es: 'Spanish',
|
|
9736
|
+
languageName_en: 'English',
|
|
9737
|
+
languageName_fr: 'French',
|
|
9738
|
+
languageName_de: 'German',
|
|
9739
|
+
languageName_pt: 'Portuguese',
|
|
9740
|
+
languageName_it: 'Italian',
|
|
9741
|
+
languageName_zh: 'Chinese',
|
|
9742
|
+
languageName_ja: 'Japanese',
|
|
9743
|
+
languageName_ko: 'Korean',
|
|
9744
|
+
languageName_ru: 'Russian',
|
|
9745
|
+
languageName_ar: 'Arabic',
|
|
9198
9746
|
deleteConfirmation: 'Are you sure you want to delete {itemName}?',
|
|
9199
9747
|
unsavedChanges: 'You have unsaved changes. Do you want to continue?',
|
|
9200
9748
|
// Common placeholders
|
|
@@ -9215,6 +9763,19 @@ const globalContentData = {
|
|
|
9215
9763
|
success: 'Succès',
|
|
9216
9764
|
// Common confirmations
|
|
9217
9765
|
areYouSure: 'Êtes-vous sûr?',
|
|
9766
|
+
// Language names (translated) - flat keys for type compatibility
|
|
9767
|
+
languageName_es: 'Espagnol',
|
|
9768
|
+
languageName_en: 'Anglais',
|
|
9769
|
+
languageName_fr: 'Français',
|
|
9770
|
+
languageName_de: 'Allemand',
|
|
9771
|
+
languageName_pt: 'Portugais',
|
|
9772
|
+
languageName_it: 'Italien',
|
|
9773
|
+
languageName_zh: 'Chinois',
|
|
9774
|
+
languageName_ja: 'Japonais',
|
|
9775
|
+
languageName_ko: 'Coréen',
|
|
9776
|
+
languageName_ru: 'Russe',
|
|
9777
|
+
languageName_ar: 'Arabe',
|
|
9778
|
+
language: 'Langue',
|
|
9218
9779
|
},
|
|
9219
9780
|
de: {
|
|
9220
9781
|
// Common buttons - Another example of partial translation
|
|
@@ -9227,12 +9788,42 @@ const globalContentData = {
|
|
|
9227
9788
|
error: 'Fehler',
|
|
9228
9789
|
// Common confirmations
|
|
9229
9790
|
areYouSure: 'Sind Sie sicher?',
|
|
9791
|
+
// Language names (translated) - flat keys for type compatibility
|
|
9792
|
+
languageName_es: 'Spanisch',
|
|
9793
|
+
languageName_en: 'Englisch',
|
|
9794
|
+
languageName_fr: 'Französisch',
|
|
9795
|
+
languageName_de: 'Deutsch',
|
|
9796
|
+
languageName_pt: 'Portugiesisch',
|
|
9797
|
+
languageName_it: 'Italienisch',
|
|
9798
|
+
languageName_zh: 'Chinesisch',
|
|
9799
|
+
languageName_ja: 'Japanisch',
|
|
9800
|
+
languageName_ko: 'Koreanisch',
|
|
9801
|
+
languageName_ru: 'Russisch',
|
|
9802
|
+
languageName_ar: 'Arabisch',
|
|
9803
|
+
language: 'Sprache',
|
|
9230
9804
|
},
|
|
9231
9805
|
};
|
|
9232
9806
|
const GlobalContent = new TextContent(globalContentData);
|
|
9233
9807
|
const content = {
|
|
9234
9808
|
_global: GlobalContent,
|
|
9235
9809
|
LangSettings,
|
|
9810
|
+
testReactivity: new TextContent({
|
|
9811
|
+
es: {
|
|
9812
|
+
welcomeMessage: '¡Bienvenido!',
|
|
9813
|
+
saveButton: 'Guardar',
|
|
9814
|
+
cancelButton: 'Cancelar',
|
|
9815
|
+
},
|
|
9816
|
+
en: {
|
|
9817
|
+
welcomeMessage: 'Welcome!',
|
|
9818
|
+
saveButton: 'Save',
|
|
9819
|
+
cancelButton: 'Cancel',
|
|
9820
|
+
},
|
|
9821
|
+
fr: {
|
|
9822
|
+
welcomeMessage: 'Bienvenue!',
|
|
9823
|
+
saveButton: 'Enregistrer',
|
|
9824
|
+
cancelButton: 'Annuler',
|
|
9825
|
+
},
|
|
9826
|
+
}),
|
|
9236
9827
|
};
|
|
9237
9828
|
|
|
9238
9829
|
/**
|
|
@@ -9290,5 +9881,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
9290
9881
|
* Generated bundle index. Do not edit.
|
|
9291
9882
|
*/
|
|
9292
9883
|
|
|
9293
|
-
export { ActionType, AlertBoxComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentContentHelper, ComponentStates, ComprehensiveLinkTestComponent, ContentLoaderComponent, ContentService, CustomContentDemoComponent, DateInputComponent, DisplayComponent, DisplayDemoComponent, DisplayExampleComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, GlobalContent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InputType, ItemListComponent, LANGUAGES, LangService, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessingExampleComponent, LinkProcessorService, LinksCakeComponent, ListContentHelper, LocalStorageService, MOTION, MultiLanguageDemoComponent, NavigationService, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PopoverSelectorComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressStatusComponent, PrompterComponent, RadioInputComponent, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SelectSearchComponent, SelectorExamplesComponent, SimpleComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, TextComponent, TextContent, TextInputComponent, ThemeOption, ThemeService, TitleBlockComponent, TitleComponent, ToastService, ToolbarActionType, ToolbarComponent, ValtechConfigService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, content, createComponentContentHelper, createContentHelper, createReactiveProps, createTextProps, createTitleProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, maxLength, replaceSpecialChars, resolveColor, resolveInputDefaultValue, shouldUseReactiveContent };
|
|
9884
|
+
export { ActionType, AlertBoxComponent, AvatarComponent, BannerComponent, BaseDefault, BoxComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CardSection, CardType, CheckInputComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CommentInputComponent, ComponentContentHelper, ComponentStates, ComprehensiveLinkTestComponent, ContentLoaderComponent, ContentService, CustomContentDemoComponent, DateInputComponent, DisplayComponent, DisplayDemoComponent, DisplayExampleComponent, DividerComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FileInputComponent, FooterComponent, FormComponent, FormFooterComponent, GlobalContent, HeaderComponent, HintComponent, HourInputComponent, HrefComponent, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InputType, ItemListComponent, LANGUAGES, LangService, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessingExampleComponent, LinkProcessorService, LinksCakeComponent, ListContentHelper, LocalStorageService, MOTION, MultiLanguageDemoComponent, NavigationService, NoContentComponent, NotesBoxComponent, NumberInputComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PasswordInputComponent, PinInputComponent, PopoverSelectorComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProgressBarComponent, ProgressStatusComponent, PrompterComponent, RadioInputComponent, ReactiveComponentsDemoComponent, ReactivityTestComponent, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SelectSearchComponent, SelectorExamplesComponent, SimpleComponent, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, TextComponent, TextContent, TextInputComponent, ThemeOption, ThemeService, TitleBlockComponent, TitleComponent, ToastService, ToolbarActionType, ToolbarComponent, ValtechConfigService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, content, createComponentContentHelper, createContentHelper, createReactiveProps, createTextProps, createTitleProps, fromContent, fromContentWithInterpolation, fromMultipleContent, globalContentData, goToTop, interpolateContent, isAtEnd, maxLength, replaceSpecialChars, resolveColor, resolveInputDefaultValue, shouldUseReactiveContent };
|
|
9294
9885
|
//# sourceMappingURL=valtech-components.mjs.map
|