valtech-components 4.0.426 → 4.0.428

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 (24) hide show
  1. package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +18 -9
  2. package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +18 -9
  3. package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +528 -0
  4. package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
  5. package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +51 -1
  6. package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
  7. package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
  8. package/esm2022/lib/version.mjs +2 -2
  9. package/esm2022/mini-games/public-api.mjs +34 -2
  10. package/esm2022/public-api.mjs +2 -1
  11. package/fesm2022/valtech-components-mini-games.mjs +34 -2
  12. package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
  13. package/fesm2022/valtech-components.mjs +644 -34
  14. package/fesm2022/valtech-components.mjs.map +1 -1
  15. package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
  16. package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +3 -1
  17. package/lib/components/organisms/mini-games/christianity-game.component.d.ts +36 -0
  18. package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
  19. package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
  20. package/lib/components/organisms/mini-games/types.d.ts +45 -0
  21. package/lib/version.d.ts +1 -1
  22. package/mini-games/public-api.d.ts +4 -0
  23. package/package.json +1 -1
  24. package/public-api.d.ts +1 -0
@@ -58,7 +58,7 @@ import fixWebmDuration from 'fix-webm-duration';
58
58
  * Current version of valtech-components.
59
59
  * This is automatically updated during the publish process.
60
60
  */
61
- const VERSION = '4.0.426';
61
+ const VERSION = '4.0.428';
62
62
 
63
63
  // Control de estado de refresco (singleton a nivel de módulo)
64
64
  let isRefreshing = false;
@@ -62455,6 +62455,31 @@ const MINI_GAMES_I18N = {
62455
62455
  bubbleDescription: 'Revienta grupos de burbujas, encadena combos y sube tu puntaje.',
62456
62456
  chessimalsTitle: 'Chessimals',
62457
62457
  chessimalsDescription: 'Una carrera de peones con cartas de animales y poderes tácticos.',
62458
+ christianityTitle: 'Christianity',
62459
+ christianityDescription: 'Un juego de cartas familiar con líderes, ofrendas y decisiones tácticas.',
62460
+ christianityEyebrow: 'MVP de mesa',
62461
+ christianityTable: 'Mesa de Christianity',
62462
+ christianityTurn: 'Turno',
62463
+ christianityOfferings: 'Ofrendas',
62464
+ christianityHand: 'Mano',
62465
+ christianityOpponentBattle: 'Zona de batalla rival',
62466
+ christianityYourBattle: 'Tu zona de batalla',
62467
+ christianitySharedZone: 'Zona compartida',
62468
+ christianityHistory: 'Historia',
62469
+ christianityDeck: 'Mazo',
62470
+ christianityPlace: 'Lugar',
62471
+ christianityEmpty: 'Vacío',
62472
+ christianityYourHand: 'Tu mano',
62473
+ christianityCost: 'Coste',
62474
+ christianityEndTurn: 'Terminar turno',
62475
+ christianityPlayCard: 'Jugar carta',
62476
+ christianityReset: 'Reiniciar mock',
62477
+ christianityWaitTurn: 'Espera el turno rival.',
62478
+ christianityChooseTarget: 'Elige un objetivo para atacar.',
62479
+ christianityReadyToPlay: 'Puedes jugar esta carta.',
62480
+ christianityNeedOfferings: 'Necesitas más ofrendas para jugar esa carta.',
62481
+ christianityChooseCard: 'Elige una carta o un personaje listo para actuar.',
62482
+ christianityHistoryEmpty: 'Todavía no hay cartas en historia.',
62458
62483
  soonTitle: 'Próximamente',
62459
62484
  openGame: 'Jugar',
62460
62485
  close: 'Cerrar',
@@ -62834,6 +62859,31 @@ const MINI_GAMES_I18N = {
62834
62859
  bubbleDescription: 'Pop bubble groups, chain combos, and push your score higher.',
62835
62860
  chessimalsTitle: 'Chessimals',
62836
62861
  chessimalsDescription: 'A pawn race with animal cards and tactical powers.',
62862
+ christianityTitle: 'Christianity',
62863
+ christianityDescription: 'A family card game with leaders, offerings, and tactical choices.',
62864
+ christianityEyebrow: 'Table MVP',
62865
+ christianityTable: 'Christianity table',
62866
+ christianityTurn: 'Turn',
62867
+ christianityOfferings: 'Offerings',
62868
+ christianityHand: 'Hand',
62869
+ christianityOpponentBattle: 'Opponent battle zone',
62870
+ christianityYourBattle: 'Your battle zone',
62871
+ christianitySharedZone: 'Shared zone',
62872
+ christianityHistory: 'History',
62873
+ christianityDeck: 'Deck',
62874
+ christianityPlace: 'Place',
62875
+ christianityEmpty: 'Empty',
62876
+ christianityYourHand: 'Your hand',
62877
+ christianityCost: 'Cost',
62878
+ christianityEndTurn: 'End turn',
62879
+ christianityPlayCard: 'Play card',
62880
+ christianityReset: 'Reset mock',
62881
+ christianityWaitTurn: 'Wait for the opponent turn.',
62882
+ christianityChooseTarget: 'Choose a target to attack.',
62883
+ christianityReadyToPlay: 'You can play this card.',
62884
+ christianityNeedOfferings: 'You need more offerings to play that card.',
62885
+ christianityChooseCard: 'Choose a card or a ready character.',
62886
+ christianityHistoryEmpty: 'There are no cards in history yet.',
62837
62887
  soonTitle: 'Coming soon',
62838
62888
  openGame: 'Play',
62839
62889
  close: 'Close',
@@ -64311,6 +64361,7 @@ class ChessimalsGameComponent {
64311
64361
  });
64312
64362
  this.botThinking = signal(false);
64313
64363
  this.confirmAction = signal(undefined);
64364
+ this.confirmedAction = signal(undefined);
64314
64365
  this.onlineJoinCode = signal('');
64315
64366
  this.onlineLoading = signal(false);
64316
64367
  this.onlineAction = signal(undefined);
@@ -65085,13 +65136,12 @@ class ChessimalsGameComponent {
65085
65136
  closeConfirmModal() {
65086
65137
  this.confirmAction.set(undefined);
65087
65138
  }
65088
- confirmPendingAction(token) {
65089
- if (token !== 'confirm') {
65090
- this.closeConfirmModal();
65091
- return;
65092
- }
65093
- const action = this.confirmAction();
65139
+ handleConfirmModalDismissed() {
65094
65140
  this.confirmAction.set(undefined);
65141
+ const action = this.confirmedAction();
65142
+ this.confirmedAction.set(undefined);
65143
+ if (!action)
65144
+ return;
65095
65145
  if (action === 'restart') {
65096
65146
  this.restartGame();
65097
65147
  return;
@@ -65108,6 +65158,15 @@ class ChessimalsGameComponent {
65108
65158
  this.resignGame();
65109
65159
  }
65110
65160
  }
65161
+ confirmPendingAction(token) {
65162
+ if (token !== 'confirm') {
65163
+ this.closeConfirmModal();
65164
+ return;
65165
+ }
65166
+ const action = this.confirmAction();
65167
+ this.confirmedAction.set(action);
65168
+ this.confirmAction.set(undefined);
65169
+ }
65111
65170
  resignGame() {
65112
65171
  const game = this.game();
65113
65172
  if (game.status === 'finished')
@@ -66955,7 +67014,7 @@ class ChessimalsGameComponent {
66955
67014
  <ion-modal
66956
67015
  [isOpen]="!!confirmAction()"
66957
67016
  cssClass="val-modal-adaptive"
66958
- (didDismiss)="closeConfirmModal()"
67017
+ (didDismiss)="handleConfirmModalDismissed()"
66959
67018
  >
66960
67019
  <ng-template>
66961
67020
  <val-modal-layout
@@ -67796,7 +67855,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
67796
67855
  <ion-modal
67797
67856
  [isOpen]="!!confirmAction()"
67798
67857
  cssClass="val-modal-adaptive"
67799
- (didDismiss)="closeConfirmModal()"
67858
+ (didDismiss)="handleConfirmModalDismissed()"
67800
67859
  >
67801
67860
  <ng-template>
67802
67861
  <val-modal-layout
@@ -67822,6 +67881,530 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
67822
67881
  type: Input
67823
67882
  }] } });
67824
67883
 
67884
+ const STARTER_CARDS = {
67885
+ p_scout: { id: 'p_scout', name: 'Scout', cost: 1, attack: 1, life: 1 },
67886
+ p_guard: { id: 'p_guard', name: 'Guard', cost: 2, attack: 1, life: 3 },
67887
+ p_warrior: { id: 'p_warrior', name: 'Warrior', cost: 2, attack: 2, life: 2 },
67888
+ p_elder: { id: 'p_elder', name: 'Elder', cost: 3, attack: 2, life: 4 },
67889
+ p_champion: { id: 'p_champion', name: 'Champion', cost: 4, attack: 4, life: 4 },
67890
+ };
67891
+ const STARTING_GAME = {
67892
+ gameId: 'mock-christianity',
67893
+ status: 'in_progress',
67894
+ mode: 'local_pass',
67895
+ turnOwner: 'P1',
67896
+ revision: 0,
67897
+ turnCount: 1,
67898
+ sharedDeckCount: 12,
67899
+ historyZone: [],
67900
+ players: {
67901
+ P1: {
67902
+ seat: 'P1',
67903
+ displayName: 'Jugador',
67904
+ leaderName: 'Adam',
67905
+ leaderHp: 15,
67906
+ leaderMaxHp: 15,
67907
+ maxOfferings: 3,
67908
+ offeringPoints: 3,
67909
+ hand: ['p_scout', 'p_warrior', 'p_guard', 'p_elder'],
67910
+ battleZone: [],
67911
+ },
67912
+ P2: {
67913
+ seat: 'P2',
67914
+ displayName: 'Rival',
67915
+ leaderName: 'Noah',
67916
+ leaderHp: 15,
67917
+ leaderMaxHp: 15,
67918
+ maxOfferings: 3,
67919
+ offeringPoints: 3,
67920
+ handCount: 4,
67921
+ battleZone: [
67922
+ {
67923
+ instanceId: 'opp_001',
67924
+ cardId: 'p_scout',
67925
+ name: 'Scout',
67926
+ owner: 'P2',
67927
+ controller: 'P2',
67928
+ attack: 1,
67929
+ currentHp: 1,
67930
+ maxHp: 1,
67931
+ canAttack: false,
67932
+ },
67933
+ ],
67934
+ },
67935
+ },
67936
+ log: ['Partida iniciada.'],
67937
+ };
67938
+ class ChristianityGameComponent {
67939
+ constructor() {
67940
+ this.i18n = inject(I18nService);
67941
+ this.game = signal(structuredClone(STARTING_GAME));
67942
+ this.selectedHandCard = signal(null);
67943
+ this.selectedAttacker = signal(null);
67944
+ this.showHistory = signal(false);
67945
+ this.player = computed(() => this.game().players.P1);
67946
+ this.opponent = computed(() => this.game().players.P2);
67947
+ this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
67948
+ this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
67949
+ this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
67950
+ this.statusText = computed(() => {
67951
+ const attacker = this.selectedAttacker();
67952
+ const handCard = this.selectedHandCard();
67953
+ if (!this.isOwnTurn()) {
67954
+ return this.t('christianityWaitTurn');
67955
+ }
67956
+ if (attacker) {
67957
+ return this.t('christianityChooseTarget');
67958
+ }
67959
+ if (handCard) {
67960
+ const card = this.cardDefinition(handCard);
67961
+ return this.canPlay(card) ? this.t('christianityReadyToPlay') : this.t('christianityNeedOfferings');
67962
+ }
67963
+ return this.t('christianityChooseCard');
67964
+ });
67965
+ this.i18n.registerDefaults('MiniGames', MINI_GAMES_I18N);
67966
+ }
67967
+ t(key) {
67968
+ this.i18n.lang();
67969
+ return this.i18n.t(key, 'MiniGames');
67970
+ }
67971
+ cardDefinition(cardId) {
67972
+ return STARTER_CARDS[cardId] ?? STARTER_CARDS['p_scout'];
67973
+ }
67974
+ battleSlots(seat) {
67975
+ const cards = this.game().players[seat].battleZone;
67976
+ return Array.from({ length: 5 }, (_, index) => ({
67977
+ trackId: cards[index]?.instanceId ?? `${seat}-empty-${index}`,
67978
+ card: cards[index],
67979
+ }));
67980
+ }
67981
+ offeringCards(player) {
67982
+ return Array.from({ length: Math.max(0, player.maxOfferings) });
67983
+ }
67984
+ canPlay(card) {
67985
+ return this.isOwnTurn() && this.player().offeringPoints >= card.cost && this.player().battleZone.length < 5;
67986
+ }
67987
+ canPlaySelected() {
67988
+ const selected = this.selectedHandCard();
67989
+ return !!selected && this.canPlay(this.cardDefinition(selected));
67990
+ }
67991
+ selectHandCard(cardId) {
67992
+ this.selectedAttacker.set(null);
67993
+ this.selectedHandCard.set(this.selectedHandCard() === cardId ? null : cardId);
67994
+ }
67995
+ playSelectedCard() {
67996
+ const cardId = this.selectedHandCard();
67997
+ if (!cardId)
67998
+ return;
67999
+ const card = this.cardDefinition(cardId);
68000
+ if (!this.canPlay(card))
68001
+ return;
68002
+ this.game.update(game => {
68003
+ const next = structuredClone(game);
68004
+ const player = next.players.P1;
68005
+ const handIndex = player.hand?.indexOf(cardId) ?? -1;
68006
+ if (handIndex < 0 || !player.hand)
68007
+ return game;
68008
+ player.hand.splice(handIndex, 1);
68009
+ player.offeringPoints -= card.cost;
68010
+ player.battleZone.push({
68011
+ instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
68012
+ cardId: card.id,
68013
+ name: card.name,
68014
+ owner: 'P1',
68015
+ controller: 'P1',
68016
+ attack: card.attack,
68017
+ currentHp: card.life,
68018
+ maxHp: card.life,
68019
+ canAttack: false,
68020
+ });
68021
+ next.revision++;
68022
+ next.log = [`${card.name} entra en batalla.`, ...next.log].slice(0, 4);
68023
+ return next;
68024
+ });
68025
+ this.selectedHandCard.set(null);
68026
+ }
68027
+ selectAttacker(card) {
68028
+ this.selectedHandCard.set(null);
68029
+ if (!this.isOwnTurn() || !card.canAttack)
68030
+ return;
68031
+ this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
68032
+ }
68033
+ attackLeader() {
68034
+ const attacker = this.selectedAttacker();
68035
+ if (!attacker)
68036
+ return;
68037
+ this.game.update(game => {
68038
+ const next = structuredClone(game);
68039
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
68040
+ if (!liveAttacker || !liveAttacker.canAttack)
68041
+ return game;
68042
+ next.players.P2.leaderHp = Math.max(0, next.players.P2.leaderHp - liveAttacker.attack);
68043
+ liveAttacker.canAttack = false;
68044
+ next.revision++;
68045
+ next.log = [`${liveAttacker.name} ataca al lider rival.`, ...next.log].slice(0, 4);
68046
+ return next;
68047
+ });
68048
+ this.selectedAttacker.set(null);
68049
+ }
68050
+ attackCharacter(target) {
68051
+ const attacker = this.selectedAttacker();
68052
+ if (!attacker)
68053
+ return;
68054
+ this.game.update(game => {
68055
+ const next = structuredClone(game);
68056
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
68057
+ const liveTarget = next.players.P2.battleZone.find(card => card.instanceId === target.instanceId);
68058
+ if (!liveAttacker || !liveTarget || !liveAttacker.canAttack)
68059
+ return game;
68060
+ liveTarget.currentHp -= liveAttacker.attack;
68061
+ liveAttacker.currentHp -= liveTarget.attack;
68062
+ liveAttacker.canAttack = false;
68063
+ this.cleanupDestroyed(next.players.P1, next);
68064
+ this.cleanupDestroyed(next.players.P2, next);
68065
+ next.revision++;
68066
+ next.log = [`${liveAttacker.name} combate contra ${liveTarget.name}.`, ...next.log].slice(0, 4);
68067
+ return next;
68068
+ });
68069
+ this.selectedAttacker.set(null);
68070
+ }
68071
+ endTurn() {
68072
+ this.selectedHandCard.set(null);
68073
+ this.selectedAttacker.set(null);
68074
+ this.game.update(game => {
68075
+ const next = structuredClone(game);
68076
+ next.turnOwner = next.turnOwner === 'P1' ? 'P2' : 'P1';
68077
+ next.turnCount++;
68078
+ const current = next.players[next.turnOwner];
68079
+ current.maxOfferings = Math.min(10, current.maxOfferings + 1);
68080
+ current.offeringPoints = current.maxOfferings;
68081
+ current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
68082
+ next.revision++;
68083
+ next.log = [`Turno de ${current.displayName}.`, ...next.log].slice(0, 4);
68084
+ return next;
68085
+ });
68086
+ }
68087
+ resetMock() {
68088
+ this.game.set(structuredClone(STARTING_GAME));
68089
+ this.selectedHandCard.set(null);
68090
+ this.selectedAttacker.set(null);
68091
+ }
68092
+ historyNames() {
68093
+ return this.game()
68094
+ .historyZone.map(cardId => this.cardDefinition(cardId).name)
68095
+ .join(', ');
68096
+ }
68097
+ cleanupDestroyed(player, game) {
68098
+ const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
68099
+ if (!destroyed.length)
68100
+ return;
68101
+ game.historyZone.push(...destroyed.map(card => card.cardId));
68102
+ player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
68103
+ }
68104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
68105
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChristianityGameComponent, isStandalone: true, selector: "val-christianity-game", ngImport: i0, template: `
68106
+ <main class="christianity-shell">
68107
+ <section class="christianity-header">
68108
+ <div>
68109
+ <p>{{ t('christianityEyebrow') }}</p>
68110
+ <h1>{{ t('christianityTitle') }}</h1>
68111
+ </div>
68112
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
68113
+ <span>{{ t('christianityTurn') }}</span>
68114
+ <strong>{{ currentPlayer().displayName }}</strong>
68115
+ </div>
68116
+ </section>
68117
+
68118
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68119
+ <section class="christianity-player christianity-player--opponent">
68120
+ <div class="christianity-player__summary">
68121
+ <div class="christianity-leader">
68122
+ <span>{{ opponent().leaderName }}</span>
68123
+ <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68124
+ </div>
68125
+ <div class="christianity-offerings">
68126
+ <span>{{ t('christianityOfferings') }}</span>
68127
+ <strong>{{ opponent().offeringPoints }}/{{ opponent().maxOfferings }}</strong>
68128
+ <div class="christianity-offering-cards" aria-hidden="true">
68129
+ @for (_ of offeringCards(opponent()); track $index) {
68130
+ <i [class.is-used]="$index >= opponent().offeringPoints"></i>
68131
+ }
68132
+ </div>
68133
+ </div>
68134
+ <div class="christianity-hidden-hand">
68135
+ <span>{{ t('christianityHand') }}</span>
68136
+ <strong>{{ opponentHandCount() }}</strong>
68137
+ </div>
68138
+ </div>
68139
+ <div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
68140
+ @for (slot of battleSlots('P2'); track slot.trackId) {
68141
+ @if (slot.card) {
68142
+ <button
68143
+ type="button"
68144
+ class="christianity-card christianity-card--battle"
68145
+ [class.is-target]="selectedAttacker()"
68146
+ (click)="attackCharacter(slot.card)"
68147
+ >
68148
+ <span>{{ slot.card.name }}</span>
68149
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68150
+ </button>
68151
+ } @else {
68152
+ <span class="christianity-slot"></span>
68153
+ }
68154
+ }
68155
+ </div>
68156
+ </section>
68157
+
68158
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68159
+ <button type="button" class="christianity-pile" (click)="showHistory.set(!showHistory())">
68160
+ <span>{{ t('christianityHistory') }}</span>
68161
+ <strong>{{ game().historyZone.length }}</strong>
68162
+ </button>
68163
+ <div class="christianity-deck" aria-live="polite">
68164
+ <span>{{ t('christianityDeck') }}</span>
68165
+ <strong>{{ game().sharedDeckCount }}</strong>
68166
+ </div>
68167
+ <div class="christianity-place">
68168
+ <span>{{ t('christianityPlace') }}</span>
68169
+ <strong>{{ t('christianityEmpty') }}</strong>
68170
+ </div>
68171
+ </section>
68172
+
68173
+ <section class="christianity-player">
68174
+ <div class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
68175
+ @for (slot of battleSlots('P1'); track slot.trackId) {
68176
+ @if (slot.card) {
68177
+ <button
68178
+ type="button"
68179
+ class="christianity-card christianity-card--battle"
68180
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68181
+ [class.is-exhausted]="!slot.card.canAttack"
68182
+ (click)="selectAttacker(slot.card)"
68183
+ >
68184
+ <span>{{ slot.card.name }}</span>
68185
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68186
+ </button>
68187
+ } @else {
68188
+ <span class="christianity-slot"></span>
68189
+ }
68190
+ }
68191
+ </div>
68192
+ <div class="christianity-player__summary">
68193
+ <div class="christianity-offerings">
68194
+ <span>{{ t('christianityOfferings') }}</span>
68195
+ <strong>{{ player().offeringPoints }}/{{ player().maxOfferings }}</strong>
68196
+ <div class="christianity-offering-cards" aria-hidden="true">
68197
+ @for (_ of offeringCards(player()); track $index) {
68198
+ <i [class.is-used]="$index >= player().offeringPoints"></i>
68199
+ }
68200
+ </div>
68201
+ </div>
68202
+ <button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
68203
+ <span>{{ player().leaderName }}</span>
68204
+ <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68205
+ </button>
68206
+ <button type="button" class="christianity-end-turn" (click)="endTurn()">
68207
+ {{ t('christianityEndTurn') }}
68208
+ </button>
68209
+ </div>
68210
+ </section>
68211
+ </section>
68212
+
68213
+ <section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
68214
+ @for (cardId of player().hand ?? []; track cardId + $index) {
68215
+ @let card = cardDefinition(cardId);
68216
+ <button
68217
+ type="button"
68218
+ class="christianity-card christianity-card--hand"
68219
+ [class.is-selected]="selectedHandCard() === cardId"
68220
+ [class.is-disabled]="!canPlay(card)"
68221
+ (click)="selectHandCard(cardId)"
68222
+ >
68223
+ <small>{{ t('christianityCost') }} {{ card.cost }}</small>
68224
+ <span>{{ card.name }}</span>
68225
+ <strong>{{ card.attack }} / {{ card.life }}</strong>
68226
+ </button>
68227
+ }
68228
+ </section>
68229
+
68230
+ <section class="christianity-actions" aria-live="polite">
68231
+ <p>{{ statusText() }}</p>
68232
+ <div>
68233
+ <button type="button" [disabled]="!selectedHandCard() || !canPlaySelected()" (click)="playSelectedCard()">
68234
+ {{ t('christianityPlayCard') }}
68235
+ </button>
68236
+ <button type="button" (click)="resetMock()">
68237
+ {{ t('christianityReset') }}
68238
+ </button>
68239
+ </div>
68240
+ </section>
68241
+
68242
+ @if (showHistory()) {
68243
+ <section class="christianity-history">
68244
+ <h2>{{ t('christianityHistory') }}</h2>
68245
+ @if (game().historyZone.length) {
68246
+ <p>{{ historyNames() }}</p>
68247
+ } @else {
68248
+ <p>{{ t('christianityHistoryEmpty') }}</p>
68249
+ }
68250
+ </section>
68251
+ }
68252
+ </main>
68253
+ `, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(5,minmax(3.8rem,1fr));overflow-x:auto}}\n"] }); }
68254
+ }
68255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
68256
+ type: Component,
68257
+ args: [{ selector: 'val-christianity-game', standalone: true, template: `
68258
+ <main class="christianity-shell">
68259
+ <section class="christianity-header">
68260
+ <div>
68261
+ <p>{{ t('christianityEyebrow') }}</p>
68262
+ <h1>{{ t('christianityTitle') }}</h1>
68263
+ </div>
68264
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
68265
+ <span>{{ t('christianityTurn') }}</span>
68266
+ <strong>{{ currentPlayer().displayName }}</strong>
68267
+ </div>
68268
+ </section>
68269
+
68270
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
68271
+ <section class="christianity-player christianity-player--opponent">
68272
+ <div class="christianity-player__summary">
68273
+ <div class="christianity-leader">
68274
+ <span>{{ opponent().leaderName }}</span>
68275
+ <strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
68276
+ </div>
68277
+ <div class="christianity-offerings">
68278
+ <span>{{ t('christianityOfferings') }}</span>
68279
+ <strong>{{ opponent().offeringPoints }}/{{ opponent().maxOfferings }}</strong>
68280
+ <div class="christianity-offering-cards" aria-hidden="true">
68281
+ @for (_ of offeringCards(opponent()); track $index) {
68282
+ <i [class.is-used]="$index >= opponent().offeringPoints"></i>
68283
+ }
68284
+ </div>
68285
+ </div>
68286
+ <div class="christianity-hidden-hand">
68287
+ <span>{{ t('christianityHand') }}</span>
68288
+ <strong>{{ opponentHandCount() }}</strong>
68289
+ </div>
68290
+ </div>
68291
+ <div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
68292
+ @for (slot of battleSlots('P2'); track slot.trackId) {
68293
+ @if (slot.card) {
68294
+ <button
68295
+ type="button"
68296
+ class="christianity-card christianity-card--battle"
68297
+ [class.is-target]="selectedAttacker()"
68298
+ (click)="attackCharacter(slot.card)"
68299
+ >
68300
+ <span>{{ slot.card.name }}</span>
68301
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68302
+ </button>
68303
+ } @else {
68304
+ <span class="christianity-slot"></span>
68305
+ }
68306
+ }
68307
+ </div>
68308
+ </section>
68309
+
68310
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
68311
+ <button type="button" class="christianity-pile" (click)="showHistory.set(!showHistory())">
68312
+ <span>{{ t('christianityHistory') }}</span>
68313
+ <strong>{{ game().historyZone.length }}</strong>
68314
+ </button>
68315
+ <div class="christianity-deck" aria-live="polite">
68316
+ <span>{{ t('christianityDeck') }}</span>
68317
+ <strong>{{ game().sharedDeckCount }}</strong>
68318
+ </div>
68319
+ <div class="christianity-place">
68320
+ <span>{{ t('christianityPlace') }}</span>
68321
+ <strong>{{ t('christianityEmpty') }}</strong>
68322
+ </div>
68323
+ </section>
68324
+
68325
+ <section class="christianity-player">
68326
+ <div class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
68327
+ @for (slot of battleSlots('P1'); track slot.trackId) {
68328
+ @if (slot.card) {
68329
+ <button
68330
+ type="button"
68331
+ class="christianity-card christianity-card--battle"
68332
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
68333
+ [class.is-exhausted]="!slot.card.canAttack"
68334
+ (click)="selectAttacker(slot.card)"
68335
+ >
68336
+ <span>{{ slot.card.name }}</span>
68337
+ <strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
68338
+ </button>
68339
+ } @else {
68340
+ <span class="christianity-slot"></span>
68341
+ }
68342
+ }
68343
+ </div>
68344
+ <div class="christianity-player__summary">
68345
+ <div class="christianity-offerings">
68346
+ <span>{{ t('christianityOfferings') }}</span>
68347
+ <strong>{{ player().offeringPoints }}/{{ player().maxOfferings }}</strong>
68348
+ <div class="christianity-offering-cards" aria-hidden="true">
68349
+ @for (_ of offeringCards(player()); track $index) {
68350
+ <i [class.is-used]="$index >= player().offeringPoints"></i>
68351
+ }
68352
+ </div>
68353
+ </div>
68354
+ <button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
68355
+ <span>{{ player().leaderName }}</span>
68356
+ <strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
68357
+ </button>
68358
+ <button type="button" class="christianity-end-turn" (click)="endTurn()">
68359
+ {{ t('christianityEndTurn') }}
68360
+ </button>
68361
+ </div>
68362
+ </section>
68363
+ </section>
68364
+
68365
+ <section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
68366
+ @for (cardId of player().hand ?? []; track cardId + $index) {
68367
+ @let card = cardDefinition(cardId);
68368
+ <button
68369
+ type="button"
68370
+ class="christianity-card christianity-card--hand"
68371
+ [class.is-selected]="selectedHandCard() === cardId"
68372
+ [class.is-disabled]="!canPlay(card)"
68373
+ (click)="selectHandCard(cardId)"
68374
+ >
68375
+ <small>{{ t('christianityCost') }} {{ card.cost }}</small>
68376
+ <span>{{ card.name }}</span>
68377
+ <strong>{{ card.attack }} / {{ card.life }}</strong>
68378
+ </button>
68379
+ }
68380
+ </section>
68381
+
68382
+ <section class="christianity-actions" aria-live="polite">
68383
+ <p>{{ statusText() }}</p>
68384
+ <div>
68385
+ <button type="button" [disabled]="!selectedHandCard() || !canPlaySelected()" (click)="playSelectedCard()">
68386
+ {{ t('christianityPlayCard') }}
68387
+ </button>
68388
+ <button type="button" (click)="resetMock()">
68389
+ {{ t('christianityReset') }}
68390
+ </button>
68391
+ </div>
68392
+ </section>
68393
+
68394
+ @if (showHistory()) {
68395
+ <section class="christianity-history">
68396
+ <h2>{{ t('christianityHistory') }}</h2>
68397
+ @if (game().historyZone.length) {
68398
+ <p>{{ historyNames() }}</p>
68399
+ } @else {
68400
+ <p>{{ t('christianityHistoryEmpty') }}</p>
68401
+ }
68402
+ </section>
68403
+ }
68404
+ </main>
68405
+ `, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(5,minmax(3.8rem,1fr));overflow-x:auto}}\n"] }]
68406
+ }], ctorParameters: () => [] });
68407
+
67825
68408
  addIcons({ refreshOutline, sparklesOutline, trophyOutline });
67826
68409
  const BUBBLE_COLORS = {
67827
68410
  rose: '#ff4f9f',
@@ -67878,6 +68461,7 @@ class BubbleBlitzGameComponent {
67878
68461
  this.animating = signal(false);
67879
68462
  this.leaderboard = signal(this.readLeaderboard());
67880
68463
  this.confirmAction = signal(undefined);
68464
+ this.confirmedAction = signal(undefined);
67881
68465
  this.config = computed(() => MODE_CONFIG[this.mode()]);
67882
68466
  this.feverReady = computed(() => this.fever() >= this.config().feverTarget);
67883
68467
  this.feverProgress = computed(() => Math.min(100, Math.round((this.fever() / this.config().feverTarget) * 100)));
@@ -68057,13 +68641,12 @@ class BubbleBlitzGameComponent {
68057
68641
  closeConfirmModal() {
68058
68642
  this.confirmAction.set(undefined);
68059
68643
  }
68060
- confirmPendingAction(token) {
68061
- if (token !== 'confirm') {
68062
- this.closeConfirmModal();
68063
- return;
68064
- }
68065
- const action = this.confirmAction();
68644
+ handleConfirmModalDismissed() {
68066
68645
  this.confirmAction.set(undefined);
68646
+ const action = this.confirmedAction();
68647
+ this.confirmedAction.set(undefined);
68648
+ if (!action)
68649
+ return;
68067
68650
  if (action === 'restart') {
68068
68651
  this.start();
68069
68652
  return;
@@ -68076,6 +68659,15 @@ class BubbleBlitzGameComponent {
68076
68659
  this.resetToGamesMenu();
68077
68660
  }
68078
68661
  }
68662
+ confirmPendingAction(token) {
68663
+ if (token !== 'confirm') {
68664
+ this.closeConfirmModal();
68665
+ return;
68666
+ }
68667
+ const action = this.confirmAction();
68668
+ this.confirmedAction.set(action);
68669
+ this.confirmAction.set(undefined);
68670
+ }
68079
68671
  startTimer() {
68080
68672
  this.stopTimer();
68081
68673
  this.timer = window.setInterval(() => {
@@ -68379,7 +68971,7 @@ class BubbleBlitzGameComponent {
68379
68971
  <ion-modal
68380
68972
  [isOpen]="!!confirmAction()"
68381
68973
  cssClass="val-modal-adaptive"
68382
- (didDismiss)="closeConfirmModal()"
68974
+ (didDismiss)="handleConfirmModalDismissed()"
68383
68975
  >
68384
68976
  <ng-template>
68385
68977
  <val-modal-layout
@@ -68529,7 +69121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68529
69121
  <ion-modal
68530
69122
  [isOpen]="!!confirmAction()"
68531
69123
  cssClass="val-modal-adaptive"
68532
- (didDismiss)="closeConfirmModal()"
69124
+ (didDismiss)="handleConfirmModalDismissed()"
68533
69125
  >
68534
69126
  <ng-template>
68535
69127
  <val-modal-layout
@@ -68593,6 +69185,7 @@ class MemoryGameComponent {
68593
69185
  this.lockBoard = signal(false);
68594
69186
  this.leaderboard = signal(this.readLeaderboard());
68595
69187
  this.confirmAction = signal(undefined);
69188
+ this.confirmedAction = signal(undefined);
68596
69189
  this.profileConfig = computed(() => PROFILE_CONFIG[this.profile()]);
68597
69190
  this.pairCount = computed(() => this.profileConfig().pairs);
68598
69191
  this.boardClass = computed(() => `memory-board ${this.profileConfig().boardClass}`);
@@ -68730,13 +69323,12 @@ class MemoryGameComponent {
68730
69323
  closeConfirmModal() {
68731
69324
  this.confirmAction.set(undefined);
68732
69325
  }
68733
- confirmPendingAction(token) {
68734
- if (token !== 'confirm') {
68735
- this.closeConfirmModal();
68736
- return;
68737
- }
68738
- const action = this.confirmAction();
69326
+ handleConfirmModalDismissed() {
68739
69327
  this.confirmAction.set(undefined);
69328
+ const action = this.confirmedAction();
69329
+ this.confirmedAction.set(undefined);
69330
+ if (!action)
69331
+ return;
68740
69332
  if (action === 'restart') {
68741
69333
  this.start();
68742
69334
  return;
@@ -68749,6 +69341,15 @@ class MemoryGameComponent {
68749
69341
  this.resetToGamesMenu();
68750
69342
  }
68751
69343
  }
69344
+ confirmPendingAction(token) {
69345
+ if (token !== 'confirm') {
69346
+ this.closeConfirmModal();
69347
+ return;
69348
+ }
69349
+ const action = this.confirmAction();
69350
+ this.confirmedAction.set(action);
69351
+ this.confirmAction.set(undefined);
69352
+ }
68752
69353
  flip(card) {
68753
69354
  if (this.lockBoard() || card.flipped || card.matched || this.won() || this.failed())
68754
69355
  return;
@@ -69063,7 +69664,7 @@ class MemoryGameComponent {
69063
69664
  <ion-modal
69064
69665
  [isOpen]="!!confirmAction()"
69065
69666
  cssClass="val-modal-adaptive"
69066
- (didDismiss)="closeConfirmModal()"
69667
+ (didDismiss)="handleConfirmModalDismissed()"
69067
69668
  >
69068
69669
  <ng-template>
69069
69670
  <val-modal-layout
@@ -69221,7 +69822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
69221
69822
  <ion-modal
69222
69823
  [isOpen]="!!confirmAction()"
69223
69824
  cssClass="val-modal-adaptive"
69224
- (didDismiss)="closeConfirmModal()"
69825
+ (didDismiss)="handleConfirmModalDismissed()"
69225
69826
  >
69226
69827
  <ng-template>
69227
69828
  <val-modal-layout
@@ -69567,6 +70168,7 @@ class SimonGameComponent {
69567
70168
  this.activePad = signal(undefined);
69568
70169
  this.leaderboard = signal(this.readLeaderboard());
69569
70170
  this.confirmAction = signal(undefined);
70171
+ this.confirmedAction = signal(undefined);
69570
70172
  this.modeConfig = computed(() => SIMON_MODES[this.mode()]);
69571
70173
  this.bestRound = computed(() => this.modeLeaderboard()[0]?.round ?? 0);
69572
70174
  this.modeLeaderboard = computed(() => this.leaderboard()
@@ -69666,13 +70268,12 @@ class SimonGameComponent {
69666
70268
  closeConfirmModal() {
69667
70269
  this.confirmAction.set(undefined);
69668
70270
  }
69669
- confirmPendingAction(token) {
69670
- if (token !== 'confirm') {
69671
- this.closeConfirmModal();
69672
- return;
69673
- }
69674
- const action = this.confirmAction();
70271
+ handleConfirmModalDismissed() {
69675
70272
  this.confirmAction.set(undefined);
70273
+ const action = this.confirmedAction();
70274
+ this.confirmedAction.set(undefined);
70275
+ if (!action)
70276
+ return;
69676
70277
  if (action === 'restart') {
69677
70278
  this.start();
69678
70279
  return;
@@ -69685,6 +70286,15 @@ class SimonGameComponent {
69685
70286
  this.resetToGamesMenu();
69686
70287
  }
69687
70288
  }
70289
+ confirmPendingAction(token) {
70290
+ if (token !== 'confirm') {
70291
+ this.closeConfirmModal();
70292
+ return;
70293
+ }
70294
+ const action = this.confirmAction();
70295
+ this.confirmedAction.set(action);
70296
+ this.confirmAction.set(undefined);
70297
+ }
69688
70298
  tap(pad) {
69689
70299
  if (this.phase() !== 'waiting' || !this.acceptingInput)
69690
70300
  return;
@@ -69928,7 +70538,7 @@ class SimonGameComponent {
69928
70538
  <ion-modal
69929
70539
  [isOpen]="!!confirmAction()"
69930
70540
  cssClass="val-modal-adaptive"
69931
- (didDismiss)="closeConfirmModal()"
70541
+ (didDismiss)="handleConfirmModalDismissed()"
69932
70542
  >
69933
70543
  <ng-template>
69934
70544
  <val-modal-layout
@@ -70058,7 +70668,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
70058
70668
  <ion-modal
70059
70669
  [isOpen]="!!confirmAction()"
70060
70670
  cssClass="val-modal-adaptive"
70061
- (didDismiss)="closeConfirmModal()"
70671
+ (didDismiss)="handleConfirmModalDismissed()"
70062
70672
  >
70063
70673
  <ng-template>
70064
70674
  <val-modal-layout
@@ -85374,5 +85984,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
85374
85984
  * Generated bundle index. Do not edit.
85375
85985
  */
85376
85986
 
85377
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, BubbleBlitzGameComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHESSIMALS_BOT_PROFILES, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChessimalsGameComponent, ChessimalsOnlineService, ChipGroupComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentReactionModalComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_POST_UPDATE_GRACE_MS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DatasetPaginationService, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, EntityFeedService, ExpandableTextComponent, ExternalBrowserService, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSchemaBuilderService, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, KNOWN_ROUTES, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LiveReadFallbackService, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, META_SCHEMA_VERSION, METRIC_CARD_DEFAULTS, MINI_GAME_PLAYER_AVATARS, MINI_GAME_PLAYER_COLORS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MediaViewerModalComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MemoryGameComponent, MenuComponent, MessageBubbleComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, MiniGamePlayerProfileService, MiniGamesMenuComponent, ModalLayoutComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OperationReferenceComponent, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneDisplayComponent, PhoneFormatService, PhoneInputComponent, PickerV2Component, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PricingTableComponent, ProcessLinksPipe, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestService, RetroAudioService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SectionHeaderComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SessionTransitionOverlayComponent, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimonGameComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UsageMetersComponent, UsageService, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, WorkflowService, applyChessimalsMove, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, chooseChessimalsBotMove, collections, connectPageRefresh, createChessimalsGame, createChessimalsReviewState, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialDatasetState, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, datasetPageFromLegacyCursor, docs, errorLoggingInterceptor, extractPathParams, formatClockTime, formatDateSeparator, formatRelativeTime, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getChessimalsAllLegalMoves, getChessimalsLegalMoves, getChessimalsPieceAt, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isKnownRoute, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, positionKey, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechChat, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationClickActions, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resignChessimalsGame, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle, validateRoutes };
85987
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AboutViewComponent, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, ApiKeyCreateModalComponent, ApiKeyService, ApiKeysModalComponent, ApiKeysViewComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, BubbleBlitzGameComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHESSIMALS_BOT_PROFILES, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, ChatComposerComponent, ChatInputComponent, ChatWindowComponent, CheckInputComponent, CheckboxRadioInputComponent, ChessimalsGameComponent, ChessimalsOnlineService, ChipGroupComponent, ChristianityGameComponent, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentLoaderComponent, ContentReactionComponent, ContentReactionModalComponent, ContentService, ContentTransformer, ConversationListItemComponent, ConversationService, CookieBannerComponent, CookieSettingsComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_BUTTON_PRESETS, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LOGIN_LOGO, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_POST_UPDATE_GRACE_MS, DEFAULT_PRESETS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DatasetPaginationService, DateInputComponent, DatePickerComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmptyStateComponent, EntityCardComponent, EntityFeedService, ExpandableTextComponent, ExternalBrowserService, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FieldListComponent, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeSelectorComponent, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormFieldComponent, FormSchemaBuilderService, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HapticsService, HasPermissionDirective, HeaderActionsService, HeaderComponent, HintComponent, HorizontalScrollComponent, HrefComponent, HtmlViewerModalComponent, I18nService, IMAGE_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, IONIC_COLORS$5 as IONIC_COLORS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, KNOWN_ROUTES, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGGED_IN_HINT_COOKIE, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LanguageSelectorV2Component, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LiveReadFallbackService, LoadMoreComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, META_SCHEMA_VERSION, METRIC_CARD_DEFAULTS, MINI_GAME_PLAYER_AVATARS, MINI_GAME_PLAYER_COLORS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MediaViewerModalComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MemoryGameComponent, MenuComponent, MessageBubbleComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, MiniGamePlayerProfileService, MiniGamesMenuComponent, ModalLayoutComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationPreferencesViewComponent, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OperationReferenceComponent, OptionCardsComponent, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, POST_UPDATE_TS_KEY, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PdfService, PermissionCatalogService, PermissionSelectorComponent, PermissionsModalComponent, PermissionsViewComponent, PhoneDisplayComponent, PhoneFormatService, PhoneInputComponent, PickerV2Component, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PricingTableComponent, ProcessLinksPipe, ProfileContentComponent, ProfileModalComponent, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QrScannerComponent, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, ReactionBarComponent, ReactionsService, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestFormComponent, RequestModalComponent, RequestService, RetroAudioService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SectionHeaderComponent, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SessionTransitionOverlayComponent, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimonGameComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SplashComponent, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, ThreadPanelComponent, TicketCardComponent, TicketCardImageService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, TypingIndicatorComponent, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UsageMetersComponent, UsageService, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_CHAT_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_REACTIONS_CONFIG, VALTECH_SETTINGS_MENU_LINKS, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VALTECH_WHATSAPP_CONFIG, VERSION, ValtechErrorService, VerifyViewComponent, WhatsappFabComponent, WhatsappService, WizardComponent, WizardFooterComponent, WorkflowService, applyChessimalsMove, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, button, canSubmitRequestType, chooseChessimalsBotMove, collections, connectPageRefresh, createChessimalsGame, createChessimalsReviewState, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialDatasetState, createInitialPaginationState, createNumberFromToField, createPageState, createPermissionLabeler, createRefreshableStream, createTitleProps, datasetPageFromLegacyCursor, docs, errorLoggingInterceptor, extractPathParams, formatClockTime, formatDateSeparator, formatRelativeTime, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getChessimalsAllLegalMoves, getChessimalsLegalMoves, getChessimalsPieceAt, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, groupPermissionsByScope, guestGuard, hasEmulators, iconButton, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isIonicColor, isKnownRoute, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, positionKey, provideLegalContent, provideSplashScreen, provideValtechAboutRoutes, provideValtechAccountRoutes, provideValtechAds, provideValtechApiKeysRoutes, provideValtechAppConfig, provideValtechAppVersion, provideValtechAppVersionHttp, provideValtechAuth, provideValtechAuthInterceptor, provideValtechChat, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationClickActions, provideValtechNotificationPreferencesRoutes, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPermissionsRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechReactions, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, provideValtechWhatsapp, query, rbacGuard, renderPatternSvgInner, replaceSpecialChars, requestSubmitMode, resignChessimalsGame, resolveColor, resolveInputDefaultValue, resolveIonicColor, resolveWebBaseUrl, roleGuard, selectableRequestTypes, storagePaths, superAdminGuard, toArticle, validateRoutes };
85378
85988
  //# sourceMappingURL=valtech-components.mjs.map