valtech-components 2.0.946 → 2.0.948

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.
Files changed (29) hide show
  1. package/esm2022/lib/components/organisms/fun-modal/fun-modal.component.mjs +135 -0
  2. package/esm2022/lib/components/organisms/fun-modal/types.mjs +8 -0
  3. package/esm2022/lib/components/organisms/share-profile-modal/share-profile-modal.component.mjs +221 -0
  4. package/esm2022/lib/components/organisms/share-profile-modal/types.mjs +10 -0
  5. package/esm2022/lib/services/content/index.mjs +1 -1
  6. package/esm2022/lib/services/content-platform/config.mjs +40 -0
  7. package/esm2022/lib/services/content-platform/content.service.mjs +138 -0
  8. package/esm2022/lib/services/content-platform/index.mjs +10 -0
  9. package/esm2022/lib/services/content-platform/types.mjs +19 -0
  10. package/esm2022/lib/services/requests/request-firestore.service.mjs +55 -0
  11. package/esm2022/lib/services/requests/types.mjs +1 -1
  12. package/esm2022/lib/version.mjs +2 -2
  13. package/esm2022/public-api.mjs +10 -1
  14. package/fesm2022/valtech-components.mjs +597 -13
  15. package/fesm2022/valtech-components.mjs.map +1 -1
  16. package/lib/components/organisms/fun-modal/fun-modal.component.d.ts +44 -0
  17. package/lib/components/organisms/fun-modal/types.d.ts +37 -0
  18. package/lib/components/organisms/share-profile-modal/share-profile-modal.component.d.ts +49 -0
  19. package/lib/components/organisms/share-profile-modal/types.d.ts +45 -0
  20. package/lib/services/content/index.d.ts +1 -1
  21. package/lib/services/content-platform/config.d.ts +38 -0
  22. package/lib/services/content-platform/content.service.d.ts +70 -0
  23. package/lib/services/content-platform/index.d.ts +10 -0
  24. package/lib/services/content-platform/types.d.ts +117 -0
  25. package/lib/services/requests/request-firestore.service.d.ts +28 -0
  26. package/lib/services/requests/types.d.ts +4 -0
  27. package/lib/version.d.ts +1 -1
  28. package/package.json +1 -1
  29. package/public-api.d.ts +6 -0
@@ -0,0 +1,135 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, computed, EventEmitter, Input, Output } from '@angular/core';
3
+ import { IonModal } from '@ionic/angular/standalone';
4
+ import { ModalShellComponent } from '../../molecules/modal-shell/modal-shell.component';
5
+ import { DisplayComponent } from '../../atoms/display/display.component';
6
+ import { TitleComponent } from '../../atoms/title/title.component';
7
+ import { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';
8
+ import { FUN_MODAL_DEFAULTS } from './types';
9
+ import * as i0 from "@angular/core";
10
+ const IONIC_COLORS = ['primary', 'secondary', 'tertiary', 'success', 'warning', 'danger', 'light', 'medium', 'dark'];
11
+ /**
12
+ * `val-fun-modal` — modal moderno tipo promo/onboarding: imagen o ilustración
13
+ * arriba, título, cuerpo y botones de acción, con redondeo personalizable.
14
+ * Sigue la Regla #5 (header canónico vía `val-modal-shell`).
15
+ *
16
+ * El padre controla `[isOpen]` y reacciona a `(dismissed)` / `(action)`.
17
+ *
18
+ * @example
19
+ * ```html
20
+ * <val-fun-modal
21
+ * [isOpen]="isOpen()"
22
+ * [props]="{
23
+ * image: '/promo.png',
24
+ * title: '¿Cómo se conecta Lucas con los Salmos?',
25
+ * subtitle: 'Pulsa la referencia cruzada para descubrirlo.',
26
+ * actions: { position: 'center', columned: false, buttons: [
27
+ * { text: 'Probar ahora', color: 'primary', shape: 'round', type: 'button', state: 'ENABLED', token: 'try' }
28
+ * ] }
29
+ * }"
30
+ * (action)="onAction($event)"
31
+ * (dismissed)="isOpen.set(false)"
32
+ * />
33
+ * ```
34
+ */
35
+ export class FunModalComponent {
36
+ constructor() {
37
+ this._isOpen = false;
38
+ /** Configuración del modal. */
39
+ this.props = {};
40
+ /** Emite cuando el user cierra el modal (botón Cerrar o backdrop). */
41
+ this.dismissed = new EventEmitter();
42
+ /** Emite con el token del botón de acción presionado. */
43
+ this.action = new EventEmitter();
44
+ this.config = computed(() => ({
45
+ ...FUN_MODAL_DEFAULTS,
46
+ ...this.props,
47
+ }));
48
+ }
49
+ /** Controla la visibilidad del modal. */
50
+ set isOpen(value) {
51
+ this._isOpen = value;
52
+ }
53
+ get isOpen() {
54
+ return this._isOpen;
55
+ }
56
+ getBackground() {
57
+ const color = this.config().backgroundColor;
58
+ if (!color)
59
+ return null;
60
+ return IONIC_COLORS.includes(color) ? `var(--ion-color-${color})` : color;
61
+ }
62
+ close() {
63
+ this._isOpen = false;
64
+ this.dismissed.emit();
65
+ }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FunModalComponent, isStandalone: true, selector: "val-fun-modal", inputs: { isOpen: "isOpen", props: "props" }, outputs: { dismissed: "dismissed", action: "action" }, ngImport: i0, template: `
68
+ <ion-modal [isOpen]="isOpen" [style.--border-radius.px]="config().borderRadius" (didDismiss)="close()">
69
+ <ng-template>
70
+ <val-modal-shell [title]="''" [closeLabel]="config().closeLabel || ''" (close)="close()">
71
+ <div class="fun-modal" [style.background]="getBackground()">
72
+ @if (config().image) {
73
+ <div class="fun-modal__media" [style.border-radius.px]="config().imageRadius">
74
+ <img [src]="config().image" [alt]="config().imageAlt || config().title" />
75
+ </div>
76
+ } @else if (config().emoji) {
77
+ <div class="fun-modal__emoji">{{ config().emoji }}</div>
78
+ }
79
+
80
+ <val-display [props]="{ content: config().title, size: 'small', color: 'dark' }" />
81
+ @if (config().subtitle) {
82
+ <val-title [props]="{ content: config().subtitle, size: 'large', color: '', bold: false }" />
83
+ }
84
+
85
+ @if (config().actions; as actions) {
86
+ <div class="fun-modal__actions">
87
+ <val-button-group [props]="actions" (onClick)="action.emit($event)"></val-button-group>
88
+ </div>
89
+ }
90
+ </div>
91
+ </val-modal-shell>
92
+ </ng-template>
93
+ </ion-modal>
94
+ `, isInline: true, styles: [".fun-modal{display:flex;flex-direction:column;align-items:center;gap:1.25rem;padding:.5rem 0;text-align:center}.fun-modal__media{width:100%;overflow:hidden;aspect-ratio:16/10;background:var(--ion-color-light, #f4f5f8)}.fun-modal__media img{width:100%;height:100%;object-fit:cover;display:block}.fun-modal__emoji{font-size:3.5rem;line-height:1}.fun-modal__actions{width:100%;margin-top:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalShellComponent, selector: "val-modal-shell", inputs: ["title", "subtitle", "closeLabel", "showClose"], outputs: ["close"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }] }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunModalComponent, decorators: [{
97
+ type: Component,
98
+ args: [{ selector: 'val-fun-modal', standalone: true, imports: [CommonModule, IonModal, ModalShellComponent, DisplayComponent, TitleComponent, ButtonGroupComponent], template: `
99
+ <ion-modal [isOpen]="isOpen" [style.--border-radius.px]="config().borderRadius" (didDismiss)="close()">
100
+ <ng-template>
101
+ <val-modal-shell [title]="''" [closeLabel]="config().closeLabel || ''" (close)="close()">
102
+ <div class="fun-modal" [style.background]="getBackground()">
103
+ @if (config().image) {
104
+ <div class="fun-modal__media" [style.border-radius.px]="config().imageRadius">
105
+ <img [src]="config().image" [alt]="config().imageAlt || config().title" />
106
+ </div>
107
+ } @else if (config().emoji) {
108
+ <div class="fun-modal__emoji">{{ config().emoji }}</div>
109
+ }
110
+
111
+ <val-display [props]="{ content: config().title, size: 'small', color: 'dark' }" />
112
+ @if (config().subtitle) {
113
+ <val-title [props]="{ content: config().subtitle, size: 'large', color: '', bold: false }" />
114
+ }
115
+
116
+ @if (config().actions; as actions) {
117
+ <div class="fun-modal__actions">
118
+ <val-button-group [props]="actions" (onClick)="action.emit($event)"></val-button-group>
119
+ </div>
120
+ }
121
+ </div>
122
+ </val-modal-shell>
123
+ </ng-template>
124
+ </ion-modal>
125
+ `, styles: [".fun-modal{display:flex;flex-direction:column;align-items:center;gap:1.25rem;padding:.5rem 0;text-align:center}.fun-modal__media{width:100%;overflow:hidden;aspect-ratio:16/10;background:var(--ion-color-light, #f4f5f8)}.fun-modal__media img{width:100%;height:100%;object-fit:cover;display:block}.fun-modal__emoji{font-size:3.5rem;line-height:1}.fun-modal__actions{width:100%;margin-top:.25rem}\n"] }]
126
+ }], propDecorators: { isOpen: [{
127
+ type: Input
128
+ }], props: [{
129
+ type: Input
130
+ }], dismissed: [{
131
+ type: Output
132
+ }], action: [{
133
+ type: Output
134
+ }] } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvZnVuLW1vZGFsL2Z1bi1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFvQixrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFFL0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXJIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQW1DSCxNQUFNLE9BQU8saUJBQWlCO0lBbEM5QjtRQW1DVSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBV3hCLCtCQUErQjtRQUN0QixVQUFLLEdBQThCLEVBQUUsQ0FBQztRQUUvQyxzRUFBc0U7UUFDNUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDL0MseURBQXlEO1FBQy9DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRTlDLFdBQU0sR0FBRyxRQUFRLENBQ2YsR0FBRyxFQUFFLENBQ0gsQ0FBQztZQUNDLEdBQUcsa0JBQWtCO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLEtBQUs7U0FDZCxDQUFpRCxDQUNyRCxDQUFDO0tBWUg7SUFuQ0MseUNBQXlDO0lBQ3pDLElBQ0ksTUFBTSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBa0JELGFBQWE7UUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM1RSxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0FyQ1UsaUJBQWlCO21HQUFqQixpQkFBaUIsOEtBOUJsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJULG1kQTVCUyxZQUFZLCtCQUFFLFFBQVEsc0RBQUUsbUJBQW1CLDBJQUFFLGdCQUFnQiwyRUFBRSxjQUFjLHlFQUFFLG9CQUFvQjs7NEZBK0JsRyxpQkFBaUI7a0JBbEM3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsQ0FBQyxZQUNwRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJUOzhCQVFHLE1BQU07c0JBRFQsS0FBSztnQkFTRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0ksU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJb25Nb2RhbCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5pbXBvcnQgeyBNb2RhbFNoZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL21vZGFsLXNoZWxsL21vZGFsLXNoZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGdW5Nb2RhbE1ldGFkYXRhLCBGVU5fTU9EQUxfREVGQVVMVFMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgSU9OSUNfQ09MT1JTID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0ZXJ0aWFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnZGFuZ2VyJywgJ2xpZ2h0JywgJ21lZGl1bScsICdkYXJrJ107XG5cbi8qKlxuICogYHZhbC1mdW4tbW9kYWxgIOKAlCBtb2RhbCBtb2Rlcm5vIHRpcG8gcHJvbW8vb25ib2FyZGluZzogaW1hZ2VuIG8gaWx1c3RyYWNpw7NuXG4gKiBhcnJpYmEsIHTDrXR1bG8sIGN1ZXJwbyB5IGJvdG9uZXMgZGUgYWNjacOzbiwgY29uIHJlZG9uZGVvIHBlcnNvbmFsaXphYmxlLlxuICogU2lndWUgbGEgUmVnbGEgIzUgKGhlYWRlciBjYW7Ds25pY28gdsOtYSBgdmFsLW1vZGFsLXNoZWxsYCkuXG4gKlxuICogRWwgcGFkcmUgY29udHJvbGEgYFtpc09wZW5dYCB5IHJlYWNjaW9uYSBhIGAoZGlzbWlzc2VkKWAgLyBgKGFjdGlvbilgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWZ1bi1tb2RhbFxuICogICBbaXNPcGVuXT1cImlzT3BlbigpXCJcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICBpbWFnZTogJy9wcm9tby5wbmcnLFxuICogICAgIHRpdGxlOiAnwr9Dw7NtbyBzZSBjb25lY3RhIEx1Y2FzIGNvbiBsb3MgU2FsbW9zPycsXG4gKiAgICAgc3VidGl0bGU6ICdQdWxzYSBsYSByZWZlcmVuY2lhIGNydXphZGEgcGFyYSBkZXNjdWJyaXJsby4nLFxuICogICAgIGFjdGlvbnM6IHsgcG9zaXRpb246ICdjZW50ZXInLCBjb2x1bW5lZDogZmFsc2UsIGJ1dHRvbnM6IFtcbiAqICAgICAgIHsgdGV4dDogJ1Byb2JhciBhaG9yYScsIGNvbG9yOiAncHJpbWFyeScsIHNoYXBlOiAncm91bmQnLCB0eXBlOiAnYnV0dG9uJywgc3RhdGU6ICdFTkFCTEVEJywgdG9rZW46ICd0cnknIH1cbiAqICAgICBdIH1cbiAqICAgfVwiXG4gKiAgIChhY3Rpb24pPVwib25BY3Rpb24oJGV2ZW50KVwiXG4gKiAgIChkaXNtaXNzZWQpPVwiaXNPcGVuLnNldChmYWxzZSlcIlxuICogLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZnVuLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uTW9kYWwsIE1vZGFsU2hlbGxDb21wb25lbnQsIERpc3BsYXlDb21wb25lbnQsIFRpdGxlQ29tcG9uZW50LCBCdXR0b25Hcm91cENvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzT3BlblwiIFtzdHlsZS4tLWJvcmRlci1yYWRpdXMucHhdPVwiY29uZmlnKCkuYm9yZGVyUmFkaXVzXCIgKGRpZERpc21pc3MpPVwiY2xvc2UoKVwiPlxuICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICA8dmFsLW1vZGFsLXNoZWxsIFt0aXRsZV09XCInJ1wiIFtjbG9zZUxhYmVsXT1cImNvbmZpZygpLmNsb3NlTGFiZWwgfHwgJydcIiAoY2xvc2UpPVwiY2xvc2UoKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdW4tbW9kYWxcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRCYWNrZ3JvdW5kKClcIj5cbiAgICAgICAgICAgIEBpZiAoY29uZmlnKCkuaW1hZ2UpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ1bi1tb2RhbF9fbWVkaWFcIiBbc3R5bGUuYm9yZGVyLXJhZGl1cy5weF09XCJjb25maWcoKS5pbWFnZVJhZGl1c1wiPlxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb25maWcoKS5pbWFnZVwiIFthbHRdPVwiY29uZmlnKCkuaW1hZ2VBbHQgfHwgY29uZmlnKCkudGl0bGVcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNvbmZpZygpLmVtb2ppKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdW4tbW9kYWxfX2Vtb2ppXCI+e3sgY29uZmlnKCkuZW1vamkgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHZhbC1kaXNwbGF5IFtwcm9wc109XCJ7IGNvbnRlbnQ6IGNvbmZpZygpLnRpdGxlLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnIH1cIiAvPlxuICAgICAgICAgICAgQGlmIChjb25maWcoKS5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IGNvbmZpZygpLnN1YnRpdGxlLCBzaXplOiAnbGFyZ2UnLCBjb2xvcjogJycsIGJvbGQ6IGZhbHNlIH1cIiAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGNvbmZpZygpLmFjdGlvbnM7IGFzIGFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ1bi1tb2RhbF9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uLWdyb3VwIFtwcm9wc109XCJhY3Rpb25zXCIgKG9uQ2xpY2spPVwiYWN0aW9uLmVtaXQoJGV2ZW50KVwiPjwvdmFsLWJ1dHRvbi1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmFsLW1vZGFsLXNoZWxsPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2lvbi1tb2RhbD5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZnVuLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZ1bk1vZGFsQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgLyoqIENvbnRyb2xhIGxhIHZpc2liaWxpZGFkIGRlbCBtb2RhbC4gKi9cbiAgQElucHV0KClcbiAgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlO1xuICB9XG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgfVxuXG4gIC8qKiBDb25maWd1cmFjacOzbiBkZWwgbW9kYWwuICovXG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPEZ1bk1vZGFsTWV0YWRhdGE+ID0ge307XG5cbiAgLyoqIEVtaXRlIGN1YW5kbyBlbCB1c2VyIGNpZXJyYSBlbCBtb2RhbCAoYm90w7NuIENlcnJhciBvIGJhY2tkcm9wKS4gKi9cbiAgQE91dHB1dCgpIGRpc21pc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXRlIGNvbiBlbCB0b2tlbiBkZWwgYm90w7NuIGRlIGFjY2nDs24gcHJlc2lvbmFkby4gKi9cbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGNvbmZpZyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICAuLi5GVU5fTU9EQUxfREVGQVVMVFMsXG4gICAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICB9KSBhcyBGdW5Nb2RhbE1ldGFkYXRhICYgdHlwZW9mIEZVTl9NT0RBTF9ERUZBVUxUU1xuICApO1xuXG4gIGdldEJhY2tncm91bmQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmNvbmZpZygpLmJhY2tncm91bmRDb2xvcjtcbiAgICBpZiAoIWNvbG9yKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gSU9OSUNfQ09MT1JTLmluY2x1ZGVzKGNvbG9yKSA/IGB2YXIoLS1pb24tY29sb3ItJHtjb2xvcn0pYCA6IGNvbG9yO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5kaXNtaXNzZWQuZW1pdCgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Default values for FunModalMetadata.
3
+ */
4
+ export const FUN_MODAL_DEFAULTS = {
5
+ borderRadius: 28,
6
+ imageRadius: 16,
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Z1bi1tb2RhbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQ0E7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FDN0I7SUFDRSxZQUFZLEVBQUUsRUFBRTtJQUNoQixXQUFXLEVBQUUsRUFBRTtDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnV0dG9uR3JvdXBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvdHlwZXMnO1xuXG4vKipcbiAqIE1ldGFkYXRhIGZvciB2YWwtZnVuLW1vZGFsLlxuICpcbiAqIE1vZGFsIG1vZGVybm8gdGlwbyBwcm9tby9vbmJvYXJkaW5nOiBpbWFnZW4gbyBpbHVzdHJhY2nDs24gYXJyaWJhLCB0w610dWxvLFxuICogY3VlcnBvIHkgYm90b25lcyBkZSBhY2Npw7NuLCBjb24gcmVkb25kZW8gcGVyc29uYWxpemFibGUuIFNpZ3VlIGxhIFJlZ2xhICM1XG4gKiAoaGVhZGVyIGNhbsOzbmljbyB2w61hIGB2YWwtbW9kYWwtc2hlbGxgKS5cbiAqXG4gKiBDb250ZW50LWRyaXZlbiDigJQgcGFzYXIgc3RyaW5ncyB5YSByZXN1ZWx0b3MuIEJvdG9uZXMgcmV1c2FuXG4gKiBgQnV0dG9uR3JvdXBNZXRhZGF0YWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuTW9kYWxNZXRhZGF0YSB7XG4gIC8qKiBJbWFnZW4gLyBpbHVzdHJhY2nDs24gbW9zdHJhZGEgYXJyaWJhIGRlbCB0w610dWxvICovXG4gIGltYWdlPzogc3RyaW5nO1xuICAvKiogQWx0IGRlIGxhIGltYWdlbiAqL1xuICBpbWFnZUFsdD86IHN0cmluZztcbiAgLyoqIEVtb2ppIGRlY29yYXRpdm8gKGFsdGVybmF0aXZhIGEgbGEgaW1hZ2VuKSAqL1xuICBlbW9qaT86IHN0cmluZztcblxuICAvKiogVMOtdHVsbyBwcmluY2lwYWwgKHZhbC1kaXNwbGF5KSAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogQ3VlcnBvIC8gc3VidMOtdHVsbyAodmFsLXRpdGxlKSAqL1xuICBzdWJ0aXRsZT86IHN0cmluZztcblxuICAvKiogQm90b25lcyBkZSBhY2Npw7NuIChyZXVzYSB2YWwtYnV0dG9uLWdyb3VwKSAqL1xuICBhY3Rpb25zPzogQnV0dG9uR3JvdXBNZXRhZGF0YTtcblxuICAvKiogUmVkb25kZW8gZGVsIG1vZGFsIGVuIHB4LiBEZWZhdWx0OiAyOCAqL1xuICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XG4gIC8qKiBSZWRvbmRlbyBkZSBsYSBpbWFnZW4gZW4gcHguIERlZmF1bHQ6IDE2ICovXG4gIGltYWdlUmFkaXVzPzogbnVtYmVyO1xuICAvKiogQ29sb3IgZGUgZm9uZG8gZGVsIG1vZGFsIChJb25pYyBjb2xvciBvIENTUykuIERlZmF1bHQ6IHN1cmZhY2UgKi9cbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAvKiogTGFiZWwgZGVsIGJvdMOzbiBkZSBjaWVycmUuIERlZmF1bHQ6IGkxOG4gYF9nbG9iYWwuY2xvc2VgICovXG4gIGNsb3NlTGFiZWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmYXVsdCB2YWx1ZXMgZm9yIEZ1bk1vZGFsTWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBGVU5fTU9EQUxfREVGQVVMVFM6IFJlcXVpcmVkPFBpY2s8RnVuTW9kYWxNZXRhZGF0YSwgJ2JvcmRlclJhZGl1cycgfCAnaW1hZ2VSYWRpdXMnPj4gPVxuICB7XG4gICAgYm9yZGVyUmFkaXVzOiAyOCxcbiAgICBpbWFnZVJhZGl1czogMTYsXG4gIH07XG4iXX0=
@@ -0,0 +1,221 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, computed, EventEmitter, inject, Input, Output, signal } from '@angular/core';
3
+ import { IonModal, IonSpinner } from '@ionic/angular/standalone';
4
+ import { ModalShellComponent } from '../../molecules/modal-shell/modal-shell.component';
5
+ import { DisplayComponent } from '../../atoms/display/display.component';
6
+ import { UserAvatarComponent } from '../../atoms/user-avatar/user-avatar.component';
7
+ import { QrCodeComponent } from '../../atoms/qr-code/qr-code.component';
8
+ import { ShareButtonsComponent } from '../../molecules/share-buttons/share-buttons.component';
9
+ import { QrGeneratorService } from '../../../services/qr-generator/qr-generator.service';
10
+ import { I18nService } from '../../../services/i18n';
11
+ import { SHARE_PROFILE_MODAL_DEFAULTS } from './types';
12
+ import * as i0 from "@angular/core";
13
+ /**
14
+ * Defaults i18n (es/en). Auto-registrados en el constructor si el consumer no
15
+ * proveyó el namespace `ShareProfileModal`. Garantiza que nunca haya una key
16
+ * faltante (ver nota en valtech-components/CLAUDE.md sobre el storm de CD).
17
+ */
18
+ const SHARE_PROFILE_MODAL_I18N = {
19
+ es: {
20
+ title: 'Compartir perfil',
21
+ caption: 'Escanea el código QR para añadirme como contacto',
22
+ },
23
+ en: {
24
+ title: 'Share profile',
25
+ caption: 'Scan the QR code to add me as a contact',
26
+ },
27
+ };
28
+ /**
29
+ * `val-share-profile-modal` — modal reutilizable para compartir un perfil (o
30
+ * cualquier entidad) vía QR + URL. Sigue la Regla #5 (header canónico vía
31
+ * `val-modal-shell`).
32
+ *
33
+ * Self-contained: genera el QR con `QrGeneratorService` a partir de `url` al
34
+ * abrirse. El padre solo controla `[isOpen]` y reacciona a `(dismissed)`.
35
+ *
36
+ * @example
37
+ * ```html
38
+ * <val-share-profile-modal
39
+ * [isOpen]="isOpen()"
40
+ * [props]="{ name: 'Víctor Valenzuela', url: 'https://app.myvaltech.com/u/victor', avatarUrl: '/me.jpg' }"
41
+ * (dismissed)="isOpen.set(false)"
42
+ * />
43
+ * ```
44
+ */
45
+ export class ShareProfileModalComponent {
46
+ /** Controla la visibilidad. Al pasar de cerrado a abierto genera el QR. */
47
+ set isOpen(value) {
48
+ const opening = value && !this._isOpen;
49
+ this._isOpen = value;
50
+ if (opening) {
51
+ this.generateQr();
52
+ }
53
+ }
54
+ get isOpen() {
55
+ return this._isOpen;
56
+ }
57
+ constructor() {
58
+ this.qrGenerator = inject(QrGeneratorService);
59
+ this.i18n = inject(I18nService);
60
+ this._isOpen = false;
61
+ /** Configuración del modal. */
62
+ this.props = {};
63
+ /** Emite cuando el user cierra el modal (botón Cerrar o backdrop). */
64
+ this.dismissed = new EventEmitter();
65
+ /** Emite al completar una acción de compartir. */
66
+ this.shared = new EventEmitter();
67
+ this._qr = signal(null);
68
+ this.qr = this._qr.asReadonly();
69
+ this._qrError = signal(false);
70
+ this.qrError = this._qrError.asReadonly();
71
+ this.config = computed(() => ({
72
+ ...SHARE_PROFILE_MODAL_DEFAULTS,
73
+ ...this.props,
74
+ }));
75
+ this.displayName = computed(() => this.config().title || this.config().name || this.t('title'));
76
+ this.caption = computed(() => this.config().caption || this.t('caption'));
77
+ if (!this.i18n.hasNamespace('ShareProfileModal')) {
78
+ this.i18n.registerContent('ShareProfileModal', SHARE_PROFILE_MODAL_I18N);
79
+ }
80
+ }
81
+ t(key) {
82
+ this.i18n.lang();
83
+ return this.i18n.t(key, 'ShareProfileModal');
84
+ }
85
+ async generateQr() {
86
+ const url = this.config().url;
87
+ if (!url)
88
+ return;
89
+ this._qr.set(null);
90
+ this._qrError.set(false);
91
+ try {
92
+ // Formato SVG: lo genera qr-code-styling sin canvas.toBlob (que cuelga en
93
+ // algunos contextos de bundler/Storybook). Renderiza igual de nítido.
94
+ const result = await this.qrGenerator.generate({ data: url, width: this.config().qrSize, format: 'svg' });
95
+ this._qr.set(result);
96
+ }
97
+ catch {
98
+ // QR opcional — si falla, mostramos la URL como fallback (no spinner eterno).
99
+ this._qr.set(null);
100
+ this._qrError.set(true);
101
+ }
102
+ }
103
+ close() {
104
+ this._isOpen = false;
105
+ this.dismissed.emit();
106
+ }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ShareProfileModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
108
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ShareProfileModalComponent, isStandalone: true, selector: "val-share-profile-modal", inputs: { isOpen: "isOpen", props: "props" }, outputs: { dismissed: "dismissed", shared: "shared" }, ngImport: i0, template: `
109
+ <ion-modal [isOpen]="isOpen" [style.--border-radius.px]="config().borderRadius" (didDismiss)="close()">
110
+ <ng-template>
111
+ <val-modal-shell [title]="''" [closeLabel]="config().closeLabel || ''" (close)="close()">
112
+ <div class="share-profile">
113
+ <val-user-avatar
114
+ [props]="{ name: config().name, avatarUrl: config().avatarUrl, email: config().email, size: 'xlarge' }"
115
+ />
116
+ <val-display [props]="{ content: displayName(), size: 'small', color: 'dark' }" />
117
+
118
+ <div class="share-profile__qr">
119
+ @if (qr(); as qrResult) {
120
+ <val-qr-code
121
+ [props]="{
122
+ qr: qrResult,
123
+ theme: config().qrTheme,
124
+ displaySize: config().qrSize,
125
+ alt: config().name,
126
+ }"
127
+ />
128
+ } @else if (qrError()) {
129
+ <p class="share-profile__qr-error">{{ config().url }}</p>
130
+ } @else {
131
+ <div class="share-profile__qr-loading" [style.height.px]="config().qrSize">
132
+ <ion-spinner name="crescent"></ion-spinner>
133
+ </div>
134
+ }
135
+ </div>
136
+
137
+ <p class="share-profile__caption">{{ caption() }}</p>
138
+
139
+ <val-share-buttons
140
+ [props]="{
141
+ shareData: { title: config().shareTitle || config().name, text: config().shareText, url: config().url },
142
+ platforms: config().platforms,
143
+ layout: 'horizontal',
144
+ variant: 'icon-only',
145
+ usePlatformColors: false,
146
+ }"
147
+ (shareComplete)="shared.emit($event)"
148
+ />
149
+ </div>
150
+ </val-modal-shell>
151
+ </ng-template>
152
+ </ion-modal>
153
+ `, isInline: true, styles: [".share-profile{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:.5rem 0 1rem;text-align:center}.share-profile__name{margin:0;font-size:1.5rem;font-weight:700;line-height:1.2;color:var(--ion-text-color)}.share-profile__qr{display:flex;justify-content:center}.share-profile__qr-loading{display:flex;align-items:center;justify-content:center;min-width:120px}.share-profile__qr-error{margin:0;padding:1rem;max-width:28ch;word-break:break-all;font-size:.9rem;font-weight:600;color:var(--ion-color-medium-shade)}.share-profile__caption{margin:0;max-width:32ch;font-size:.95rem;line-height:1.45;color:var(--ion-color-medium-shade)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: ModalShellComponent, selector: "val-modal-shell", inputs: ["title", "subtitle", "closeLabel", "showClose"], outputs: ["close"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: QrCodeComponent, selector: "val-qr-code", inputs: ["props"], outputs: ["actionComplete", "imageLoad", "imageError"] }, { kind: "component", type: ShareButtonsComponent, selector: "val-share-buttons", inputs: ["props"], outputs: ["shareComplete"] }] }); }
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ShareProfileModalComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'val-share-profile-modal', standalone: true, imports: [
158
+ CommonModule,
159
+ IonModal,
160
+ IonSpinner,
161
+ ModalShellComponent,
162
+ DisplayComponent,
163
+ UserAvatarComponent,
164
+ QrCodeComponent,
165
+ ShareButtonsComponent,
166
+ ], template: `
167
+ <ion-modal [isOpen]="isOpen" [style.--border-radius.px]="config().borderRadius" (didDismiss)="close()">
168
+ <ng-template>
169
+ <val-modal-shell [title]="''" [closeLabel]="config().closeLabel || ''" (close)="close()">
170
+ <div class="share-profile">
171
+ <val-user-avatar
172
+ [props]="{ name: config().name, avatarUrl: config().avatarUrl, email: config().email, size: 'xlarge' }"
173
+ />
174
+ <val-display [props]="{ content: displayName(), size: 'small', color: 'dark' }" />
175
+
176
+ <div class="share-profile__qr">
177
+ @if (qr(); as qrResult) {
178
+ <val-qr-code
179
+ [props]="{
180
+ qr: qrResult,
181
+ theme: config().qrTheme,
182
+ displaySize: config().qrSize,
183
+ alt: config().name,
184
+ }"
185
+ />
186
+ } @else if (qrError()) {
187
+ <p class="share-profile__qr-error">{{ config().url }}</p>
188
+ } @else {
189
+ <div class="share-profile__qr-loading" [style.height.px]="config().qrSize">
190
+ <ion-spinner name="crescent"></ion-spinner>
191
+ </div>
192
+ }
193
+ </div>
194
+
195
+ <p class="share-profile__caption">{{ caption() }}</p>
196
+
197
+ <val-share-buttons
198
+ [props]="{
199
+ shareData: { title: config().shareTitle || config().name, text: config().shareText, url: config().url },
200
+ platforms: config().platforms,
201
+ layout: 'horizontal',
202
+ variant: 'icon-only',
203
+ usePlatformColors: false,
204
+ }"
205
+ (shareComplete)="shared.emit($event)"
206
+ />
207
+ </div>
208
+ </val-modal-shell>
209
+ </ng-template>
210
+ </ion-modal>
211
+ `, styles: [".share-profile{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:.5rem 0 1rem;text-align:center}.share-profile__name{margin:0;font-size:1.5rem;font-weight:700;line-height:1.2;color:var(--ion-text-color)}.share-profile__qr{display:flex;justify-content:center}.share-profile__qr-loading{display:flex;align-items:center;justify-content:center;min-width:120px}.share-profile__qr-error{margin:0;padding:1rem;max-width:28ch;word-break:break-all;font-size:.9rem;font-weight:600;color:var(--ion-color-medium-shade)}.share-profile__caption{margin:0;max-width:32ch;font-size:.95rem;line-height:1.45;color:var(--ion-color-medium-shade)}\n"] }]
212
+ }], ctorParameters: () => [], propDecorators: { isOpen: [{
213
+ type: Input
214
+ }], props: [{
215
+ type: Input
216
+ }], dismissed: [{
217
+ type: Output
218
+ }], shared: [{
219
+ type: Output
220
+ }] } });
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtcHJvZmlsZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3NoYXJlLXByb2ZpbGUtbW9kYWwvc2hhcmUtcHJvZmlsZS1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFHekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBNkIsNEJBQTRCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBRWxGOzs7O0dBSUc7QUFDSCxNQUFNLHdCQUF3QixHQUFHO0lBQy9CLEVBQUUsRUFBRTtRQUNGLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsT0FBTyxFQUFFLGtEQUFrRDtLQUM1RDtJQUNELEVBQUUsRUFBRTtRQUNGLEtBQUssRUFBRSxlQUFl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IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbk1vZGFsLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5cbmltcG9ydCB7IE1vZGFsU2hlbGxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbW9kYWwtc2hlbGwvbW9kYWwtc2hlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy91c2VyLWF2YXRhci91c2VyLWF2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXJDb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvcXItY29kZS9xci1jb2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZUJ1dHRvbnNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2hhcmUtYnV0dG9ucy9zaGFyZS1idXR0b25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRckdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9xci1nZW5lcmF0b3IvcXItZ2VuZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXJSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9xci1nZW5lcmF0b3IvdHlwZXMnO1xuaW1wb3J0IHsgU2hhcmVFdmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zaGFyZS1idXR0b25zL3R5cGVzJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBTaGFyZVByb2ZpbGVNb2RhbE1ldGFkYXRhLCBTSEFSRV9QUk9GSUxFX01PREFMX0RFRkFVTFRTIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRGVmYXVsdHMgaTE4biAoZXMvZW4pLiBBdXRvLXJlZ2lzdHJhZG9zIGVuIGVsIGNvbnN0cnVjdG9yIHNpIGVsIGNvbnN1bWVyIG5vXG4gKiBwcm92ZXnDsyBlbCBuYW1lc3BhY2UgYFNoYXJlUHJvZmlsZU1vZGFsYC4gR2FyYW50aXphIHF1ZSBudW5jYSBoYXlhIHVuYSBrZXlcbiAqIGZhbHRhbnRlICh2ZXIgbm90YSBlbiB2YWx0ZWNoLWNvbXBvbmVudHMvQ0xBVURFLm1kIHNvYnJlIGVsIHN0b3JtIGRlIENEKS5cbiAqL1xuY29uc3QgU0hBUkVfUFJPRklMRV9NT0RBTF9JMThOID0ge1xuICBlczoge1xuICAgIHRpdGxlOiAnQ29tcGFydGlyIHBlcmZpbCcsXG4gICAgY2FwdGlvbjogJ0VzY2FuZWEgZWwgY8OzZGlnbyBRUiBwYXJhIGHDsWFkaXJtZSBjb21vIGNvbnRhY3RvJyxcbiAgfSxcbiAgZW46IHtcbiAgICB0aXRsZTogJ1NoYXJlIHByb2ZpbGUnLFxuICAgIGNhcHRpb246ICdTY2FuIHRoZSBRUiBjb2RlIHRvIGFkZCBtZSBhcyBhIGNvbnRhY3QnLFxuICB9LFxufTtcblxuLyoqXG4gKiBgdmFsLXNoYXJlLXByb2ZpbGUtbW9kYWxgIOKAlCBtb2RhbCByZXV0aWxpemFibGUgcGFyYSBjb21wYXJ0aXIgdW4gcGVyZmlsIChvXG4gKiBjdWFscXVpZXIgZW50aWRhZCkgdsOtYSBRUiArIFVSTC4gU2lndWUgbGEgUmVnbGEgIzUgKGhlYWRlciBjYW7Ds25pY28gdsOtYVxuICogYHZhbC1tb2RhbC1zaGVsbGApLlxuICpcbiAqIFNlbGYtY29udGFpbmVkOiBnZW5lcmEgZWwgUVIgY29uIGBRckdlbmVyYXRvclNlcnZpY2VgIGEgcGFydGlyIGRlIGB1cmxgIGFsXG4gKiBhYnJpcnNlLiBFbCBwYWRyZSBzb2xvIGNvbnRyb2xhIGBbaXNPcGVuXWAgeSByZWFjY2lvbmEgYSBgKGRpc21pc3NlZClgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dmFsLXNoYXJlLXByb2ZpbGUtbW9kYWxcbiAqICAgW2lzT3Blbl09XCJpc09wZW4oKVwiXG4gKiAgIFtwcm9wc109XCJ7IG5hbWU6ICdWw61jdG9yIFZhbGVuenVlbGEnLCB1cmw6ICdodHRwczovL2FwcC5teXZhbHRlY2guY29tL3UvdmljdG9yJywgYXZhdGFyVXJsOiAnL21lLmpwZycgfVwiXG4gKiAgIChkaXNtaXNzZWQpPVwiaXNPcGVuLnNldChmYWxzZSlcIlxuICogLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtc2hhcmUtcHJvZmlsZS1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uTW9kYWwsXG4gICAgSW9uU3Bpbm5lcixcbiAgICBNb2RhbFNoZWxsQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVXNlckF2YXRhckNvbXBvbmVudCxcbiAgICBRckNvZGVDb21wb25lbnQsXG4gICAgU2hhcmVCdXR0b25zQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24tbW9kYWwgW2lzT3Blbl09XCJpc09wZW5cIiBbc3R5bGUuLS1ib3JkZXItcmFkaXVzLnB4XT1cImNvbmZpZygpLmJvcmRlclJhZGl1c1wiIChkaWREaXNtaXNzKT1cImNsb3NlKClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgPHZhbC1tb2RhbC1zaGVsbCBbdGl0bGVdPVwiJydcIiBbY2xvc2VMYWJlbF09XCJjb25maWcoKS5jbG9zZUxhYmVsIHx8ICcnXCIgKGNsb3NlKT1cImNsb3NlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhcmUtcHJvZmlsZVwiPlxuICAgICAgICAgICAgPHZhbC11c2VyLWF2YXRhclxuICAgICAgICAgICAgICBbcHJvcHNdPVwieyBuYW1lOiBjb25maWcoKS5uYW1lLCBhdmF0YXJVcmw6IGNvbmZpZygpLmF2YXRhclVybCwgZW1haWw6IGNvbmZpZygpLmVtYWlsLCBzaXplOiAneGxhcmdlJyB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgY29udGVudDogZGlzcGxheU5hbWUoKSwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJyB9XCIgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoYXJlLXByb2ZpbGVfX3FyXCI+XG4gICAgICAgICAgICAgIEBpZiAocXIoKTsgYXMgcXJSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICA8dmFsLXFyLWNvZGVcbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgIHFyOiBxclJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGNvbmZpZygpLnFyVGhlbWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTaXplOiBjb25maWcoKS5xclNpemUsXG4gICAgICAgICAgICAgICAgICAgIGFsdDogY29uZmlnKCkubmFtZSxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHFyRXJyb3IoKSkge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic2hhcmUtcHJvZmlsZV9fcXItZXJyb3JcIj57eyBjb25maWcoKS51cmwgfX08L3A+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGFyZS1wcm9maWxlX19xci1sb2FkaW5nXCIgW3N0eWxlLmhlaWdodC5weF09XCJjb25maWcoKS5xclNpemVcIj5cbiAgICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzaGFyZS1wcm9maWxlX19jYXB0aW9uXCI+e3sgY2FwdGlvbigpIH19PC9wPlxuXG4gICAgICAgICAgICA8dmFsLXNoYXJlLWJ1dHRvbnNcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaGFyZURhdGE6IHsgdGl0bGU6IGNvbmZpZygpLnNoYXJlVGl0bGUgfHwgY29uZmlnKCkubmFtZSwgdGV4dDogY29uZmlnKCkuc2hhcmVUZXh0LCB1cmw6IGNvbmZpZygpLnVybCB9LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtczogY29uZmlnKCkucGxhdGZvcm1zLFxuICAgICAgICAgICAgICAgIGxheW91dDogJ2hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnQ6ICdpY29uLW9ubHknLFxuICAgICAgICAgICAgICAgIHVzZVBsYXRmb3JtQ29sb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIChzaGFyZUNvbXBsZXRlKT1cInNoYXJlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92YWwtbW9kYWwtc2hlbGw+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvaW9uLW1vZGFsPlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9zaGFyZS1wcm9maWxlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlUHJvZmlsZU1vZGFsQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBxckdlbmVyYXRvciA9IGluamVjdChRckdlbmVyYXRvclNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBDb250cm9sYSBsYSB2aXNpYmlsaWRhZC4gQWwgcGFzYXIgZGUgY2VycmFkbyBhIGFiaWVydG8gZ2VuZXJhIGVsIFFSLiAqL1xuICBASW5wdXQoKVxuICBzZXQgaXNPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3Qgb3BlbmluZyA9IHZhbHVlICYmICF0aGlzLl9pc09wZW47XG4gICAgdGhpcy5faXNPcGVuID0gdmFsdWU7XG4gICAgaWYgKG9wZW5pbmcpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVRcigpO1xuICAgIH1cbiAgfVxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW47XG4gIH1cblxuICAvKiogQ29uZmlndXJhY2nDs24gZGVsIG1vZGFsLiAqL1xuICBASW5wdXQoKSBwcm9wczogUGFydGlhbDxTaGFyZVByb2ZpbGVNb2RhbE1ldGFkYXRhPiA9IHt9O1xuXG4gIC8qKiBFbWl0ZSBjdWFuZG8gZWwgdXNlciBjaWVycmEgZWwgbW9kYWwgKGJvdMOzbiBDZXJyYXIgbyBiYWNrZHJvcCkuICovXG4gIEBPdXRwdXQoKSBkaXNtaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0ZSBhbCBjb21wbGV0YXIgdW5hIGFjY2nDs24gZGUgY29tcGFydGlyLiAqL1xuICBAT3V0cHV0KCkgc2hhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxTaGFyZUV2ZW50PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3FyID0gc2lnbmFsPFFyUmVzdWx0IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHFyID0gdGhpcy5fcXIuYXNSZWFkb25seSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3FyRXJyb3IgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBxckVycm9yID0gdGhpcy5fcXJFcnJvci5hc1JlYWRvbmx5KCk7XG5cbiAgY29uZmlnID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICh7XG4gICAgICAgIC4uLlNIQVJFX1BST0ZJTEVfTU9EQUxfREVGQVVMVFMsXG4gICAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICB9KSBhcyBTaGFyZVByb2ZpbGVNb2RhbE1ldGFkYXRhICYgdHlwZW9mIFNIQVJFX1BST0ZJTEVfTU9EQUxfREVGQVVMVFNcbiAgKTtcblxuICBkaXNwbGF5TmFtZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkudGl0bGUgfHwgdGhpcy5jb25maWcoKS5uYW1lIHx8IHRoaXMudCgndGl0bGUnKSk7XG4gIGNhcHRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmNhcHRpb24gfHwgdGhpcy50KCdjYXB0aW9uJykpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZSgnU2hhcmVQcm9maWxlTW9kYWwnKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyQ29udGVudCgnU2hhcmVQcm9maWxlTW9kYWwnLCBTSEFSRV9QUk9GSUxFX01PREFMX0kxOE4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnU2hhcmVQcm9maWxlTW9kYWwnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVRcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZygpLnVybDtcbiAgICBpZiAoIXVybCkgcmV0dXJuO1xuICAgIHRoaXMuX3FyLnNldChudWxsKTtcbiAgICB0aGlzLl9xckVycm9yLnNldChmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvcm1hdG8gU1ZHOiBsbyBnZW5lcmEgcXItY29kZS1zdHlsaW5nIHNpbiBjYW52YXMudG9CbG9iIChxdWUgY3VlbGdhIGVuXG4gICAgICAvLyBhbGd1bm9zIGNvbnRleHRvcyBkZSBidW5kbGVyL1N0b3J5Ym9vaykuIFJlbmRlcml6YSBpZ3VhbCBkZSBuw610aWRvLlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xckdlbmVyYXRvci5nZW5lcmF0ZSh7IGRhdGE6IHVybCwgd2lkdGg6IHRoaXMuY29uZmlnKCkucXJTaXplLCBmb3JtYXQ6ICdzdmcnIH0pO1xuICAgICAgdGhpcy5fcXIuc2V0KHJlc3VsdCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBRUiBvcGNpb25hbCDigJQgc2kgZmFsbGEsIG1vc3RyYW1vcyBsYSBVUkwgY29tbyBmYWxsYmFjayAobm8gc3Bpbm5lciBldGVybm8pLlxuICAgICAgdGhpcy5fcXIuc2V0KG51bGwpO1xuICAgICAgdGhpcy5fcXJFcnJvci5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5kaXNtaXNzZWQuZW1pdCgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Default values for ShareProfileModalMetadata.
3
+ */
4
+ export const SHARE_PROFILE_MODAL_DEFAULTS = {
5
+ platforms: ['copy', 'native', 'whatsapp'],
6
+ qrTheme: 'default',
7
+ qrSize: 220,
8
+ borderRadius: 24,
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3NoYXJlLXByb2ZpbGUtbW9kYWwvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaURBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBRXJDO0lBQ0YsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUM7SUFDekMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsTUFBTSxFQUFFLEdBQUc7SUFDWCxZQUFZLEVBQUUsRUFBRTtDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2hhcmVQbGF0Zm9ybSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zaGFyZS1idXR0b25zL3R5cGVzJztcbmltcG9ydCB7IFFyRGlzcGxheVRoZW1lIH0gZnJvbSAnLi4vLi4vYXRvbXMvcXItY29kZS90eXBlcyc7XG5cbi8qKlxuICogTWV0YWRhdGEgZm9yIHZhbC1zaGFyZS1wcm9maWxlLW1vZGFsLlxuICpcbiAqIFJldXNhYmxlIG1vZGFsIHRvIHNoYXJlIGEgcHJvZmlsZSAob3IgYW55IGVudGl0eSkgdmlhIFFSICsgVVJMOiBhdmF0YXIsXG4gKiBuYW1lLCBhIFFSIGNvZGUgZW5jb2RpbmcgdGhlIFVSTCwgYW4gb3B0aW9uYWwgY2FwdGlvbiBhbmQgc2hhcmUgYnV0dG9uc1xuICogKGNvcHkgbGluayAvIG5hdGl2ZSAvIHNvY2lhbCkuXG4gKlxuICogQ29udGVudC1kcml2ZW46IGBuYW1lYCArIGB1cmxgIGFyZSByZXF1aXJlZDsgdGhlIHJlc3QgaXMgb3B0aW9uYWwuIFN0YXRpY1xuICogY2hyb21lIHRleHQgKGNhcHRpb24sIGJ1dHRvbiBoaW50cykgYXV0by1yZWdpc3RyYSBkZWZhdWx0cyBpMThuXG4gKiAobmFtZXNwYWNlIGBTaGFyZVByb2ZpbGVNb2RhbGApIOKAlCBvdmVycmlkZSBwYXNhbmRvIGxvcyBjYW1wb3MgZGlyZWN0b3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVQcm9maWxlTW9kYWxNZXRhZGF0YSB7XG4gIC8qKiBEaXNwbGF5IG5hbWUgc2hvd24gdW5kZXIgdGhlIGF2YXRhciAoYW5kIGRlZmF1bHQgbW9kYWwgdGl0bGUpICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFVSTCBlbmNvZGVkIGluIHRoZSBRUiBhbmQgc2hhcmVkIGJ5IHRoZSBidXR0b25zICovXG4gIHVybDogc3RyaW5nO1xuXG4gIC8qKiBBdmF0YXIgaW1hZ2UgVVJMIChmYWxscyBiYWNrIHRvIGluaXRpYWxzIG9mIGBuYW1lYCkgKi9cbiAgYXZhdGFyVXJsPzogc3RyaW5nO1xuICAvKiogRW1haWwg4oCUIHVzZWQgZm9yIHRoZSBhdmF0YXIgaW5pdGlhbHMvY29sb3Igd2hlbiBubyBhdmF0YXJVcmwgKi9cbiAgZW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqIE1vZGFsIHRpdGxlICh2YWwtZGlzcGxheSkuIERlZmF1bHQ6IGBuYW1lYCAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIENhcHRpb24gdW5kZXIgdGhlIFFSLiBEZWZhdWx0OiBpMThuIGBTaGFyZVByb2ZpbGVNb2RhbC5jYXB0aW9uYCAqL1xuICBjYXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBUaXRsZSB1c2VkIGJ5IHRoZSBuYXRpdmUgc2hhcmUgc2hlZXQuIERlZmF1bHQ6IGBuYW1lYCAqL1xuICBzaGFyZVRpdGxlPzogc3RyaW5nO1xuICAvKiogVGV4dCB1c2VkIGJ5IHRoZSBuYXRpdmUgc2hhcmUgc2hlZXQgLyBzb2NpYWwgbWVzc2FnZXMgKi9cbiAgc2hhcmVUZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBQbGF0Zm9ybXMgc2hvd24gaW4gdGhlIHNoYXJlIGJ1dHRvbnMuIERlZmF1bHQ6IFsnY29weScsICduYXRpdmUnLCAnd2hhdHNhcHAnXSAqL1xuICBwbGF0Zm9ybXM/OiBTaGFyZVBsYXRmb3JtW107XG5cbiAgLyoqIFFSIHZpc3VhbCB0aGVtZS4gRGVmYXVsdDogJ2RlZmF1bHQnICovXG4gIHFyVGhlbWU/OiBRckRpc3BsYXlUaGVtZTtcbiAgLyoqIFFSIHNpemUgaW4gcGl4ZWxzLiBEZWZhdWx0OiAyMjAgKi9cbiAgcXJTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBNb2RhbCBjb3JuZXIgcm91bmRpbmcgaW4gcHguIERlZmF1bHQ6IDI0ICovXG4gIGJvcmRlclJhZGl1cz86IG51bWJlcjtcbiAgLyoqIENsb3NlIGJ1dHRvbiBsYWJlbC4gRGVmYXVsdDogaTE4biBgX2dsb2JhbC5jbG9zZWAgKi9cbiAgY2xvc2VMYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlcyBmb3IgU2hhcmVQcm9maWxlTW9kYWxNZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNIQVJFX1BST0ZJTEVfTU9EQUxfREVGQVVMVFM6IFJlcXVpcmVkPFxuICBQaWNrPFNoYXJlUHJvZmlsZU1vZGFsTWV0YWRhdGEsICdwbGF0Zm9ybXMnIHwgJ3FyVGhlbWUnIHwgJ3FyU2l6ZScgfCAnYm9yZGVyUmFkaXVzJz5cbj4gPSB7XG4gIHBsYXRmb3JtczogWydjb3B5JywgJ25hdGl2ZScsICd3aGF0c2FwcCddLFxuICBxclRoZW1lOiAnZGVmYXVsdCcsXG4gIHFyU2l6ZTogMjIwLFxuICBib3JkZXJSYWRpdXM6IDI0LFxufTtcbiJdfQ==
@@ -48,4 +48,4 @@ export { ContentTransformer, toArticle } from './transformer';
48
48
  export { BlogPostBuilder, blogPost } from './content-types/blog';
49
49
  export { DocsBuilder, docs } from './content-types/documentation';
50
50
  export { NewsBuilder, news } from './content-types/news';
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2NvbnRlbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUFxQkgsY0FBYztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFBWSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUE2QixXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0YsT0FBTyxFQUFlLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGVudCBUeXBlcyBNb2R1bGVcbiAqXG4gKiBQcm92aWRlcyBhIGZsZXhpYmxlIGNvbnRlbnQgYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCB0cmFuc2Zvcm1zXG4gKiBzdHJ1Y3R1cmVkIGNvbnRlbnQgZG9jdW1lbnRzIGludG8gQXJ0aWNsZU1ldGFkYXRhIGZvciByZW5kZXJpbmdcbiAqIHdpdGggdGhlIHZhbC1hcnRpY2xlIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVXNpbmcgQmxvZ1Bvc3RCdWlsZGVyXG4gKiBpbXBvcnQgeyBibG9nUG9zdCB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3QgcG9zdCA9IGJsb2dQb3N0KClcbiAqICAgLnRpdGxlKCdNeSBGaXJzdCBQb3N0JylcbiAqICAgLmF1dGhvcignSm9obiBEb2UnKVxuICogICAuaGVhZGluZygnSW50cm9kdWN0aW9uJylcbiAqICAgLnBhcmFncmFwaCgnV2VsY29tZSB0byBteSBibG9nLi4uJylcbiAqICAgLnRvQXJ0aWNsZSgpO1xuICpcbiAqIC8vIFVzaW5nIERvY3NCdWlsZGVyXG4gKiBpbXBvcnQgeyBkb2NzIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCBwYWdlID0gZG9jcygpXG4gKiAgIC50aXRsZSgnSW5zdGFsbGF0aW9uJylcbiAqICAgLnNlY3Rpb24oJ0dldHRpbmcgU3RhcnRlZCcpXG4gKiAgIC5jb2RlKCducG0gaW5zdGFsbCB2YWx0ZWNoLWNvbXBvbmVudHMnLCAnYmFzaCcpXG4gKiAgIC50b0FydGljbGUoKTtcbiAqXG4gKiAvLyBVc2luZyBOZXdzQnVpbGRlclxuICogaW1wb3J0IHsgbmV3cyB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3QgYXJ0aWNsZSA9IG5ld3MoKVxuICogICAuaGVhZGxpbmUoJ0JyZWFraW5nIE5ld3MnKVxuICogICAuc3VtbWFyeSgnSW1wb3J0YW50IGFubm91bmNlbWVudC4uLicpXG4gKiAgIC5icmVha2luZygpXG4gKiAgIC50b0FydGljbGUoKTtcbiAqXG4gKiAvLyBGcm9tIEpTT04vQVBJIHJlc3BvbnNlXG4gKiBpbXBvcnQgeyBDb250ZW50VHJhbnNmb3JtZXIsIEJsb2dQb3N0IH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCBqc29uOiBCbG9nUG9zdCA9IGF3YWl0IGZldGNoKCcvYXBpL3Bvc3RzLzEnKS50aGVuKHIgPT4gci5qc29uKCkpO1xuICogY29uc3QgYXJ0aWNsZSA9IENvbnRlbnRUcmFuc2Zvcm1lci50b0FydGljbGUoanNvbik7XG4gKiBgYGBcbiAqL1xuXG4vLyBCYXNlIHR5cGVzXG5leHBvcnQge1xuICBDb250ZW50QXV0aG9yLFxuICBDb250ZW50TWV0YSxcbiAgQ29udGVudENvbmZpZyxcbiAgQ29udGVudERvY3VtZW50LFxuICBDb250ZW50QmxvY2ssXG4gIEhlYWRpbmdCbG9jayxcbiAgUGFyYWdyYXBoQmxvY2ssXG4gIFF1b3RlQmxvY2ssXG4gIENvZGVCbG9jayxcbiAgTGlzdEJsb2NrLFxuICBJbWFnZUJsb2NrLFxuICBDYWxsb3V0QmxvY2ssXG4gIERpdmlkZXJCbG9jayxcbiAgQnV0dG9uQmxvY2ssXG4gIENvbW1hbmRCbG9jayxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFRyYW5zZm9ybWVyXG5leHBvcnQgeyBDb250ZW50VHJhbnNmb3JtZXIsIHRvQXJ0aWNsZSB9IGZyb20gJy4vdHJhbnNmb3JtZXInO1xuXG4vLyBDb250ZW50IHR5cGVzXG5leHBvcnQgeyBCbG9nUG9zdCwgQmxvZ1Bvc3RCdWlsZGVyLCBibG9nUG9zdCB9IGZyb20gJy4vY29udGVudC10eXBlcy9ibG9nJztcbmV4cG9ydCB7IERvY3VtZW50YXRpb24sIERvY05hdkxpbmssIERvY3NCdWlsZGVyLCBkb2NzIH0gZnJvbSAnLi9jb250ZW50LXR5cGVzL2RvY3VtZW50YXRpb24nO1xuZXhwb3J0IHsgTmV3c0FydGljbGUsIE5ld3NCdWlsZGVyLCBuZXdzIH0gZnJvbSAnLi9jb250ZW50LXR5cGVzL25ld3MnO1xuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2NvbnRlbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUF3QkgsY0FBYztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFBWSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUE2QixXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0YsT0FBTyxFQUFlLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGVudCBUeXBlcyBNb2R1bGVcbiAqXG4gKiBQcm92aWRlcyBhIGZsZXhpYmxlIGNvbnRlbnQgYWJzdHJhY3Rpb24gbGF5ZXIgdGhhdCB0cmFuc2Zvcm1zXG4gKiBzdHJ1Y3R1cmVkIGNvbnRlbnQgZG9jdW1lbnRzIGludG8gQXJ0aWNsZU1ldGFkYXRhIGZvciByZW5kZXJpbmdcbiAqIHdpdGggdGhlIHZhbC1hcnRpY2xlIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVXNpbmcgQmxvZ1Bvc3RCdWlsZGVyXG4gKiBpbXBvcnQgeyBibG9nUG9zdCB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3QgcG9zdCA9IGJsb2dQb3N0KClcbiAqICAgLnRpdGxlKCdNeSBGaXJzdCBQb3N0JylcbiAqICAgLmF1dGhvcignSm9obiBEb2UnKVxuICogICAuaGVhZGluZygnSW50cm9kdWN0aW9uJylcbiAqICAgLnBhcmFncmFwaCgnV2VsY29tZSB0byBteSBibG9nLi4uJylcbiAqICAgLnRvQXJ0aWNsZSgpO1xuICpcbiAqIC8vIFVzaW5nIERvY3NCdWlsZGVyXG4gKiBpbXBvcnQgeyBkb2NzIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCBwYWdlID0gZG9jcygpXG4gKiAgIC50aXRsZSgnSW5zdGFsbGF0aW9uJylcbiAqICAgLnNlY3Rpb24oJ0dldHRpbmcgU3RhcnRlZCcpXG4gKiAgIC5jb2RlKCducG0gaW5zdGFsbCB2YWx0ZWNoLWNvbXBvbmVudHMnLCAnYmFzaCcpXG4gKiAgIC50b0FydGljbGUoKTtcbiAqXG4gKiAvLyBVc2luZyBOZXdzQnVpbGRlclxuICogaW1wb3J0IHsgbmV3cyB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogY29uc3QgYXJ0aWNsZSA9IG5ld3MoKVxuICogICAuaGVhZGxpbmUoJ0JyZWFraW5nIE5ld3MnKVxuICogICAuc3VtbWFyeSgnSW1wb3J0YW50IGFubm91bmNlbWVudC4uLicpXG4gKiAgIC5icmVha2luZygpXG4gKiAgIC50b0FydGljbGUoKTtcbiAqXG4gKiAvLyBGcm9tIEpTT04vQVBJIHJlc3BvbnNlXG4gKiBpbXBvcnQgeyBDb250ZW50VHJhbnNmb3JtZXIsIEJsb2dQb3N0IH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCBqc29uOiBCbG9nUG9zdCA9IGF3YWl0IGZldGNoKCcvYXBpL3Bvc3RzLzEnKS50aGVuKHIgPT4gci5qc29uKCkpO1xuICogY29uc3QgYXJ0aWNsZSA9IENvbnRlbnRUcmFuc2Zvcm1lci50b0FydGljbGUoanNvbik7XG4gKiBgYGBcbiAqL1xuXG4vLyBCYXNlIHR5cGVzXG4vLyBOT1RBOiBlbCBgQ29udGVudERvY3VtZW50PFQ+YCBibG9jay1iYXNlZCAoYnVpbGRlcikgc2UgcmVleHBvcnRhIGNvbW9cbi8vIGBDb250ZW50QnVpbGRlckRvY3VtZW50YCBwYXJhIG5vIGNvbGlzaW9uYXIgY29uIGVsIGBDb250ZW50RG9jdW1lbnRgIGZsYXRcbi8vIGNhbsOzbmljbyBkZSBsYSBwbGF0YWZvcm1hIGRlIGNvbnRlbmlkbyAoYHNlcnZpY2VzL2NvbnRlbnQtcGxhdGZvcm1gLCBBRFItMDIwKS5cbmV4cG9ydCB7XG4gIENvbnRlbnRBdXRob3IsXG4gIENvbnRlbnRNZXRhLFxuICBDb250ZW50Q29uZmlnLFxuICBDb250ZW50RG9jdW1lbnQgYXMgQ29udGVudEJ1aWxkZXJEb2N1bWVudCxcbiAgQ29udGVudEJsb2NrLFxuICBIZWFkaW5nQmxvY2ssXG4gIFBhcmFncmFwaEJsb2NrLFxuICBRdW90ZUJsb2NrLFxuICBDb2RlQmxvY2ssXG4gIExpc3RCbG9jayxcbiAgSW1hZ2VCbG9jayxcbiAgQ2FsbG91dEJsb2NrLFxuICBEaXZpZGVyQmxvY2ssXG4gIEJ1dHRvbkJsb2NrLFxuICBDb21tYW5kQmxvY2ssXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBUcmFuc2Zvcm1lclxuZXhwb3J0IHsgQ29udGVudFRyYW5zZm9ybWVyLCB0b0FydGljbGUgfSBmcm9tICcuL3RyYW5zZm9ybWVyJztcblxuLy8gQ29udGVudCB0eXBlc1xuZXhwb3J0IHsgQmxvZ1Bvc3QsIEJsb2dQb3N0QnVpbGRlciwgYmxvZ1Bvc3QgfSBmcm9tICcuL2NvbnRlbnQtdHlwZXMvYmxvZyc7XG5leHBvcnQgeyBEb2N1bWVudGF0aW9uLCBEb2NOYXZMaW5rLCBEb2NzQnVpbGRlciwgZG9jcyB9IGZyb20gJy4vY29udGVudC10eXBlcy9kb2N1bWVudGF0aW9uJztcbmV4cG9ydCB7IE5ld3NBcnRpY2xlLCBOZXdzQnVpbGRlciwgbmV3cyB9IGZyb20gJy4vY29udGVudC10eXBlcy9uZXdzJztcbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
2
+ /**
3
+ * Token de inyección para la configuración de la plataforma de contenido.
4
+ */
5
+ export const VALTECH_CONTENT_CONFIG = new InjectionToken('ValtechContentConfig');
6
+ /**
7
+ * Provee la plataforma de contenido (`ContentService`) a la aplicación Angular.
8
+ *
9
+ * Wire en el `main.ts` de la app consumer. El origen es **híbrido** (ADR-020):
10
+ * el backend siempre está disponible vía `apiUrl`; las `staticSources` son
11
+ * opcionales — factories lazy generadas build-time por `scripts/build-content.ts`
12
+ * (mismo patrón que `provideLegalContent`). Cada locale queda code-split por el
13
+ * `import()` dinámico.
14
+ *
15
+ * @param config - Configuración de contenido (`apiUrl`, `appId`, `staticSources?`).
16
+ * @returns EnvironmentProviders para usar en `bootstrapApplication`.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // main.ts — solo backend
21
+ * provideValtechContent({
22
+ * apiUrl: environment.apiUrl,
23
+ * appId: 'showcase',
24
+ * });
25
+ *
26
+ * // main.ts — híbrido (estático curado + backend)
27
+ * provideValtechContent({
28
+ * apiUrl: environment.apiUrl,
29
+ * appId: 'web',
30
+ * staticSources: {
31
+ * es: () => import('./app/generated/content-store.es').then(m => m.CONTENT_STORE_ES),
32
+ * en: () => import('./app/generated/content-store.en').then(m => m.CONTENT_STORE_EN),
33
+ * },
34
+ * });
35
+ * ```
36
+ */
37
+ export function provideValtechContent(config) {
38
+ return makeEnvironmentProviders([{ provide: VALTECH_CONTENT_CONFIG, useValue: config }]);
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb250ZW50LXBsYXRmb3JtL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCxzQkFBc0IsQ0FDdkIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBNEI7SUFDaEUsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBJbmplY3Rpb25Ub2tlbiwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWx0ZWNoQ29udGVudENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRva2VuIGRlIGlueWVjY2nDs24gcGFyYSBsYSBjb25maWd1cmFjacOzbiBkZSBsYSBwbGF0YWZvcm1hIGRlIGNvbnRlbmlkby5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTFRFQ0hfQ09OVEVOVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VmFsdGVjaENvbnRlbnRDb25maWc+KFxuICAnVmFsdGVjaENvbnRlbnRDb25maWcnXG4pO1xuXG4vKipcbiAqIFByb3ZlZSBsYSBwbGF0YWZvcm1hIGRlIGNvbnRlbmlkbyAoYENvbnRlbnRTZXJ2aWNlYCkgYSBsYSBhcGxpY2FjacOzbiBBbmd1bGFyLlxuICpcbiAqIFdpcmUgZW4gZWwgYG1haW4udHNgIGRlIGxhIGFwcCBjb25zdW1lci4gRWwgb3JpZ2VuIGVzICoqaMOtYnJpZG8qKiAoQURSLTAyMCk6XG4gKiBlbCBiYWNrZW5kIHNpZW1wcmUgZXN0w6EgZGlzcG9uaWJsZSB2w61hIGBhcGlVcmxgOyBsYXMgYHN0YXRpY1NvdXJjZXNgIHNvblxuICogb3BjaW9uYWxlcyDigJQgZmFjdG9yaWVzIGxhenkgZ2VuZXJhZGFzIGJ1aWxkLXRpbWUgcG9yIGBzY3JpcHRzL2J1aWxkLWNvbnRlbnQudHNgXG4gKiAobWlzbW8gcGF0csOzbiBxdWUgYHByb3ZpZGVMZWdhbENvbnRlbnRgKS4gQ2FkYSBsb2NhbGUgcXVlZGEgY29kZS1zcGxpdCBwb3IgZWxcbiAqIGBpbXBvcnQoKWAgZGluw6FtaWNvLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmFjacOzbiBkZSBjb250ZW5pZG8gKGBhcGlVcmxgLCBgYXBwSWRgLCBgc3RhdGljU291cmNlcz9gKS5cbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzIHBhcmEgdXNhciBlbiBgYm9vdHN0cmFwQXBwbGljYXRpb25gLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBtYWluLnRzIOKAlCBzb2xvIGJhY2tlbmRcbiAqIHByb3ZpZGVWYWx0ZWNoQ29udGVudCh7XG4gKiAgIGFwaVVybDogZW52aXJvbm1lbnQuYXBpVXJsLFxuICogICBhcHBJZDogJ3Nob3djYXNlJyxcbiAqIH0pO1xuICpcbiAqIC8vIG1haW4udHMg4oCUIGjDrWJyaWRvIChlc3TDoXRpY28gY3VyYWRvICsgYmFja2VuZClcbiAqIHByb3ZpZGVWYWx0ZWNoQ29udGVudCh7XG4gKiAgIGFwaVVybDogZW52aXJvbm1lbnQuYXBpVXJsLFxuICogICBhcHBJZDogJ3dlYicsXG4gKiAgIHN0YXRpY1NvdXJjZXM6IHtcbiAqICAgICBlczogKCkgPT4gaW1wb3J0KCcuL2FwcC9nZW5lcmF0ZWQvY29udGVudC1zdG9yZS5lcycpLnRoZW4obSA9PiBtLkNPTlRFTlRfU1RPUkVfRVMpLFxuICogICAgIGVuOiAoKSA9PiBpbXBvcnQoJy4vYXBwL2dlbmVyYXRlZC9jb250ZW50LXN0b3JlLmVuJykudGhlbihtID0+IG0uQ09OVEVOVF9TVE9SRV9FTiksXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVZhbHRlY2hDb250ZW50KGNvbmZpZzogVmFsdGVjaENvbnRlbnRDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW3sgcHJvdmlkZTogVkFMVEVDSF9DT05URU5UX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9XSk7XG59XG4iXX0=