valtech-components 4.0.540 → 4.0.542
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/molecules/picker-v2/picker-v2.component.mjs +8 -4
- package/esm2022/lib/components/organisms/bottom-nav/side-nav-adapter.mjs +11 -0
- package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +45 -6
- package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +18 -1
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +804 -801
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/mini-games-menu.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +97 -9
- package/esm2022/lib/components/organisms/mini-games/retro-audio.service.mjs +27 -1
- package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +3 -3
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/lib/components/organisms/toolbar/types.mjs +1 -1
- package/esm2022/lib/services/forms/form-schema-builder.service.mjs +84 -1
- package/esm2022/lib/services/forms/types.mjs +8 -2
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/mini-games/public-api.mjs +2 -8
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components-mini-games.mjs +1 -7
- package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
- package/fesm2022/valtech-components.mjs +1107 -829
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/picker-v2/picker-v2.component.d.ts +2 -2
- package/lib/components/organisms/bottom-nav/side-nav-adapter.d.ts +7 -0
- package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +4 -0
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +32 -1
- package/lib/components/organisms/mini-games/retro-audio.service.d.ts +2 -0
- package/lib/components/organisms/mini-games/types.d.ts +2 -0
- package/lib/components/organisms/toolbar/types.d.ts +2 -0
- package/lib/services/forms/form-schema-builder.service.d.ts +15 -1
- package/lib/services/forms/types.d.ts +4 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/src/lib/assets/games/README.md +149 -0
- package/src/lib/assets/games/chessimals/brand/README.md +23 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon-192.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon-512.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon-capacitor.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-app-icon.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-emblem.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-favicon.png +0 -0
- package/src/lib/assets/games/chessimals/brand/chessimals-wordmark.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/ambusher.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/endgame.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/explorer.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/guardian.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/hunter.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/impulsive.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/jumper.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/locksmith.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/matriarch.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/oracle.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/predator.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/runner.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/sentinel.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/sprinter.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/storm.png +0 -0
- package/src/lib/assets/games/chessimals/challenge-avatars/strategist.png +0 -0
- package/src/lib/assets/games/chessimals/powers/README.md +12 -0
- package/src/lib/assets/games/chessimals/powers/bull-power.png +0 -0
- package/src/lib/assets/games/chessimals/powers/eagle-power.png +0 -0
- package/src/lib/assets/games/chessimals/powers/kangaroo-power.png +0 -0
- package/src/lib/assets/games/chessimals/powers/lion-power.png +0 -0
|
@@ -24,8 +24,8 @@ export declare class PickerV2Component {
|
|
|
24
24
|
selectionChange: EventEmitter<string>;
|
|
25
25
|
private host;
|
|
26
26
|
readonly open: import("@angular/core").WritableSignal<boolean>;
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
selectedOption(): PickerV2Option | undefined;
|
|
28
|
+
displayText(): string;
|
|
29
29
|
toggle(): void;
|
|
30
30
|
select(option: PickerV2Option): void;
|
|
31
31
|
onDocumentClick(event: MouseEvent): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SideNavItem } from '../../templates/page-wrapper/types';
|
|
2
|
+
import { BottomNavMetadata } from './types';
|
|
3
|
+
export interface SideNavFromBottomNavOptions {
|
|
4
|
+
translate?: (key: string, namespace?: string) => string;
|
|
5
|
+
exact?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function buildSideNavItemsFromBottomNav(config: BottomNavMetadata, options?: SideNavFromBottomNavOptions): SideNavItem[];
|
|
@@ -32,7 +32,11 @@ export declare class ChessimalsChallengeProgressService {
|
|
|
32
32
|
private runsPath;
|
|
33
33
|
private readLocalActiveRun;
|
|
34
34
|
private writeLocalActiveRun;
|
|
35
|
+
private clearLocalActiveRun;
|
|
35
36
|
private localActiveRunKey;
|
|
37
|
+
private newestActiveRun;
|
|
38
|
+
private runProgressScore;
|
|
39
|
+
private runTime;
|
|
36
40
|
private withoutUndefined;
|
|
37
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChessimalsChallengeProgressService, never>;
|
|
38
42
|
static ɵprov: i0.ɵɵInjectableDeclaration<ChessimalsChallengeProgressService>;
|
|
@@ -114,7 +114,7 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
114
114
|
readonly botProfiles: ChessimalsBotProfile[];
|
|
115
115
|
readonly challengeLadder: ChessimalsChallengeBot[];
|
|
116
116
|
readonly animals: ChessimalsAnimalView[];
|
|
117
|
-
readonly valtechComponentsVersion = "4.0.
|
|
117
|
+
readonly valtechComponentsVersion = "4.0.542";
|
|
118
118
|
readonly screen: import("@angular/core").WritableSignal<"home" | "challenge" | "path" | "game">;
|
|
119
119
|
readonly selectedBoardSize: import("@angular/core").WritableSignal<ChessimalsBoardSize>;
|
|
120
120
|
readonly selectedLocalMode: import("@angular/core").WritableSignal<ChessimalsLocalMode>;
|
|
@@ -135,9 +135,12 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
135
135
|
readonly turnSecondsRemaining: import("@angular/core").WritableSignal<number>;
|
|
136
136
|
readonly selectedPieceId: import("@angular/core").WritableSignal<string>;
|
|
137
137
|
readonly selectedAnimal: import("@angular/core").WritableSignal<ChessimalsAnimalType>;
|
|
138
|
+
readonly isPlayOptionsModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
138
139
|
readonly isRulesModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
139
140
|
readonly isSettingsModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
140
141
|
readonly isAboutModalOpen: import("@angular/core").WritableSignal<boolean>;
|
|
142
|
+
private pendingSoloGameStart;
|
|
143
|
+
private pendingAboutFeedbackNavigation;
|
|
141
144
|
readonly tutorialMode: import("@angular/core").WritableSignal<boolean>;
|
|
142
145
|
readonly isBoardOrienting: import("@angular/core").WritableSignal<boolean>;
|
|
143
146
|
readonly movingPiece: import("@angular/core").WritableSignal<ChessimalsMovingPieceView>;
|
|
@@ -178,6 +181,7 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
178
181
|
readonly selectedBotProfile: import("@angular/core").Signal<ChessimalsBotProfile>;
|
|
179
182
|
readonly gameBotProfile: import("@angular/core").Signal<ChessimalsBotProfile>;
|
|
180
183
|
readonly activeChallengeBot: import("@angular/core").Signal<ChessimalsChallengeBot>;
|
|
184
|
+
readonly resumableChallengeRun: import("@angular/core").Signal<ChessimalsChallengeRun>;
|
|
181
185
|
set onlineGameId(value: string | null | undefined);
|
|
182
186
|
miniGamesRoute: string;
|
|
183
187
|
projectionMode: boolean;
|
|
@@ -245,6 +249,7 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
245
249
|
readonly confirmTitle: import("@angular/core").Signal<string>;
|
|
246
250
|
readonly confirmBody: import("@angular/core").Signal<string>;
|
|
247
251
|
readonly confirmActions: import("@angular/core").Signal<ButtonMetadata[]>;
|
|
252
|
+
readonly playOptionsActions: import("@angular/core").Signal<ButtonMetadata[]>;
|
|
248
253
|
readonly rulesActions: import("@angular/core").Signal<ButtonMetadata[]>;
|
|
249
254
|
readonly aboutActions: import("@angular/core").Signal<ButtonMetadata[]>;
|
|
250
255
|
readonly actionHint: import("@angular/core").Signal<string>;
|
|
@@ -255,12 +260,17 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
255
260
|
private shortUserId;
|
|
256
261
|
private rangeValueToNumber;
|
|
257
262
|
startChallenge(): void;
|
|
263
|
+
requestNewChallenge(): void;
|
|
258
264
|
openChallengeView(): void;
|
|
259
265
|
backToHome(): void;
|
|
266
|
+
private cancelActiveGameplayFeedback;
|
|
260
267
|
private createNewChallengeRun;
|
|
268
|
+
private resetChallengeSessionState;
|
|
261
269
|
resumeChallenge(run?: ChessimalsChallengeRun): void;
|
|
262
270
|
continueChallenge(): void;
|
|
263
271
|
private startChallengeRound;
|
|
272
|
+
private enterChallengeRound;
|
|
273
|
+
private isResumableChallengeRun;
|
|
264
274
|
startGame(): void;
|
|
265
275
|
private handleChallengeRoundFinished;
|
|
266
276
|
private abandonChallengeIfNeeded;
|
|
@@ -272,6 +282,7 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
272
282
|
restartGame(): void;
|
|
273
283
|
exitTutorial(): void;
|
|
274
284
|
resetToModeSetup(): void;
|
|
285
|
+
private returnChallengeToMenu;
|
|
275
286
|
resetToGamesMenu(): void;
|
|
276
287
|
private resetFinishedLocalGameForNextVisit;
|
|
277
288
|
requestRestartGame(): void;
|
|
@@ -282,6 +293,12 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
282
293
|
handleConfirmModalDismissed(): void;
|
|
283
294
|
confirmPendingAction(token?: string): void;
|
|
284
295
|
private resignGame;
|
|
296
|
+
openPlayOptionsModal(): void;
|
|
297
|
+
closePlayOptionsModal(): void;
|
|
298
|
+
handlePlayOptionsModalDismissed(): void;
|
|
299
|
+
handlePlayOptionsAction(event: {
|
|
300
|
+
action?: ButtonMetadata;
|
|
301
|
+
}): void;
|
|
285
302
|
openRulesModal(): void;
|
|
286
303
|
closeRulesModal(): void;
|
|
287
304
|
openSettingsModal(): void;
|
|
@@ -289,6 +306,10 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
289
306
|
openPathView(): void;
|
|
290
307
|
openAboutModal(): void;
|
|
291
308
|
closeAboutModal(): void;
|
|
309
|
+
handleAboutModalDismissed(): void;
|
|
310
|
+
handleAboutAction(event: {
|
|
311
|
+
action?: ButtonMetadata;
|
|
312
|
+
}): void;
|
|
292
313
|
setMusicVolume(value: number | RangeValue): void;
|
|
293
314
|
setSfxVolume(value: number | RangeValue): void;
|
|
294
315
|
private tutorialExpectedMove;
|
|
@@ -306,6 +327,9 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
306
327
|
private isPromotionMove;
|
|
307
328
|
private animateMove;
|
|
308
329
|
private applyAnimatedMove;
|
|
330
|
+
private activeGameForRun;
|
|
331
|
+
private persistActiveChallengeGame;
|
|
332
|
+
private cloneChallengeGame;
|
|
309
333
|
private playPowerUnlockSound;
|
|
310
334
|
private queueBotTurnIfNeeded;
|
|
311
335
|
private playBotTurn;
|
|
@@ -397,10 +421,14 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
397
421
|
botProfileDescription(profile: ChessimalsBotProfile): string;
|
|
398
422
|
botProfileTendency(profile: ChessimalsBotProfile): string;
|
|
399
423
|
botProfileAvatar(profileId: ChessimalsBotProfileId): string;
|
|
424
|
+
botProfileAvatarSrc(profileId: ChessimalsBotProfileId): string;
|
|
400
425
|
challengeBotProfile(bot: ChessimalsChallengeBot): ChessimalsBotProfile | undefined;
|
|
401
426
|
challengeOpeningBot(): ChessimalsChallengeBot;
|
|
402
427
|
challengeMenuBot(): ChessimalsChallengeBot;
|
|
403
428
|
challengeMenuRoundLabel(): string;
|
|
429
|
+
challengeMenuLivesLabel(): string;
|
|
430
|
+
challengeMenuClearedRound(): number;
|
|
431
|
+
private challengeMenuRun;
|
|
404
432
|
challengeBotName(bot: ChessimalsChallengeBot): string;
|
|
405
433
|
challengeBotDifficultyLabel(bot: ChessimalsChallengeBot): string;
|
|
406
434
|
challengeBotStyleLine(bot: ChessimalsChallengeBot): string;
|
|
@@ -412,6 +440,7 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
412
440
|
showChallengeIntro(): void;
|
|
413
441
|
dismissChallengeIntro(): void;
|
|
414
442
|
challengeLiveAvatar(): string;
|
|
443
|
+
challengeLiveAvatarSrc(): string;
|
|
415
444
|
challengeLiveRivalName(): string;
|
|
416
445
|
challengeLiveRivalLine(): string;
|
|
417
446
|
challengeLiveStreakLabel(): string;
|
|
@@ -422,10 +451,12 @@ export declare class ChessimalsGameComponent implements OnInit, OnDestroy {
|
|
|
422
451
|
challengeOutcomeTitle(): string;
|
|
423
452
|
challengeOutcomeBody(): string;
|
|
424
453
|
challengeSummaryAvatar(): string;
|
|
454
|
+
challengeSummaryAvatarSrc(): string;
|
|
425
455
|
challengeRoundStageLabel(): string;
|
|
426
456
|
challengeRivalVoiceLabel(): string;
|
|
427
457
|
challengeRivalVoiceTitle(): string;
|
|
428
458
|
challengeRivalVoiceBody(): string;
|
|
459
|
+
private challengeVoiceText;
|
|
429
460
|
challengeNextRivalLabel(): string;
|
|
430
461
|
challengeContinueLabel(): string;
|
|
431
462
|
challengeNextRivalHint(): string;
|
|
@@ -10,6 +10,7 @@ export declare class RetroAudioService {
|
|
|
10
10
|
private pausedMelody?;
|
|
11
11
|
private suspendTimer?;
|
|
12
12
|
private readonly activeSamples;
|
|
13
|
+
private readonly activeBufferSources;
|
|
13
14
|
private sampleMusic?;
|
|
14
15
|
private sampleMusicConfig?;
|
|
15
16
|
private sampleMusicSource?;
|
|
@@ -91,6 +92,7 @@ export declare class RetroAudioService {
|
|
|
91
92
|
private sampleMusicVolume;
|
|
92
93
|
private sampleVolume;
|
|
93
94
|
private applyActiveSampleVolumes;
|
|
95
|
+
private stopActiveSamples;
|
|
94
96
|
private connectSampleMusic;
|
|
95
97
|
private disconnectSampleMusicGraph;
|
|
96
98
|
private tone;
|
|
@@ -58,6 +58,7 @@ export interface ChessimalsBotProfile {
|
|
|
58
58
|
id: ChessimalsBotProfileId;
|
|
59
59
|
difficulty: ChessimalsBotDifficulty;
|
|
60
60
|
avatar: string;
|
|
61
|
+
avatarSrc?: string;
|
|
61
62
|
labelKey: string;
|
|
62
63
|
descriptionKey: string;
|
|
63
64
|
}
|
|
@@ -107,6 +108,7 @@ export interface ChessimalsChallengeRun {
|
|
|
107
108
|
currentStreak: number;
|
|
108
109
|
botLadder: string[];
|
|
109
110
|
roundResults: ChessimalsChallengeRoundResult[];
|
|
111
|
+
activeGame?: ChessimalsGameState;
|
|
110
112
|
startedAt: string;
|
|
111
113
|
lastEventAt?: string;
|
|
112
114
|
updatedAt: string;
|
|
@@ -10,6 +10,7 @@ import { FontSizeSelectorMetadata } from '../../molecules/font-size-selector/typ
|
|
|
10
10
|
* Metadatos para la barra de herramientas.
|
|
11
11
|
* @property withBack Si muestra botón de retroceso.
|
|
12
12
|
* @property withMenu (opcional) Si muestra botón de menú.
|
|
13
|
+
* @property menuId (opcional) ID del menú Ionic que abre el botón de menú.
|
|
13
14
|
* @property backText (opcional) Texto del botón de retroceso.
|
|
14
15
|
* @property withActions Si muestra acciones.
|
|
15
16
|
* @property color (opcional) Color de fondo.
|
|
@@ -21,6 +22,7 @@ import { FontSizeSelectorMetadata } from '../../molecules/font-size-selector/typ
|
|
|
21
22
|
export type ToolbarMetadata = {
|
|
22
23
|
withBack: boolean;
|
|
23
24
|
withMenu?: boolean;
|
|
25
|
+
menuId?: string;
|
|
24
26
|
backText?: string;
|
|
25
27
|
withActions: boolean;
|
|
26
28
|
color?: Color;
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { ValidatorFn } from '@angular/forms';
|
|
2
2
|
import { ComponentState, FormMetadata, InputMetadata, InputType } from '../../components/types';
|
|
3
|
-
import { FieldSchemaDef } from './types';
|
|
3
|
+
import { CanonicalFieldAliases, FieldSchemaDef, FormSchemaConfig } from './types';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class FormSchemaBuilderService {
|
|
6
6
|
private i18n;
|
|
7
7
|
buildForm(schema: FieldSchemaDef[], i18nNamespace: string, formName: string, submitLabelKey?: string, state?: ComponentState): FormMetadata;
|
|
8
8
|
protected buildField(def: FieldSchemaDef, i18nNamespace: string, state: ComponentState): InputMetadata;
|
|
9
|
+
createFieldSchema(field: Partial<FieldSchemaDef> & Pick<FieldSchemaDef, 'name' | 'label'>, order: number): FieldSchemaDef;
|
|
10
|
+
createFormSchemaConfig(input: {
|
|
11
|
+
schemaId: string;
|
|
12
|
+
schemaVersion?: string;
|
|
13
|
+
labelEs?: string;
|
|
14
|
+
labelEn?: string;
|
|
15
|
+
fields: FieldSchemaDef[];
|
|
16
|
+
canonicalAliases?: CanonicalFieldAliases;
|
|
17
|
+
}): FormSchemaConfig;
|
|
18
|
+
buildCanonicalMap(fields: FieldSchemaDef[], aliases?: CanonicalFieldAliases): Record<string, string>;
|
|
19
|
+
toToken(value: string): string;
|
|
20
|
+
uniqueFieldName(value: string, existingFields: Array<Pick<FieldSchemaDef, 'name'>>): string;
|
|
9
21
|
protected parseValidators(def: FieldSchemaDef): ValidatorFn[];
|
|
22
|
+
defaultValidatorsFor(type: string, required: boolean): string[];
|
|
23
|
+
private normalizeOptions;
|
|
10
24
|
protected parseInputType(typeStr: string): InputType;
|
|
11
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormSchemaBuilderService, never>;
|
|
12
26
|
static ɵprov: i0.ɵɵInjectableDeclaration<FormSchemaBuilderService>;
|
|
@@ -33,3 +33,7 @@ export interface FormSchemaConfig {
|
|
|
33
33
|
canonicalMap?: Record<string, string>;
|
|
34
34
|
fieldSchema: FieldSchemaDef[];
|
|
35
35
|
}
|
|
36
|
+
export interface CanonicalFieldAliases {
|
|
37
|
+
[canonicalName: string]: string[];
|
|
38
|
+
}
|
|
39
|
+
export declare const DEFAULT_CANONICAL_FIELD_ALIASES: CanonicalFieldAliases;
|
package/lib/version.d.ts
CHANGED
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -288,6 +288,7 @@ export * from './lib/components/organisms/terminal-404/terminal-404.component';
|
|
|
288
288
|
export * from './lib/components/organisms/terminal-404/types';
|
|
289
289
|
export * from './lib/components/organisms/bottom-nav/bottom-nav.component';
|
|
290
290
|
export * from './lib/components/organisms/bottom-nav/types';
|
|
291
|
+
export * from './lib/components/organisms/bottom-nav/side-nav-adapter';
|
|
291
292
|
export * from './lib/components/organisms/avatar-upload/avatar-upload.component';
|
|
292
293
|
export * from './lib/components/organisms/avatar-upload/types';
|
|
293
294
|
export * from './lib/components/organisms/profile-view/profile-view.component';
|
|
@@ -525,3 +526,4 @@ export { TypingIndicatorComponent } from './lib/components/molecules/typing-indi
|
|
|
525
526
|
export { ChatWindowComponent } from './lib/components/organisms/chat-window/chat-window.component';
|
|
526
527
|
export * from './lib/components/organisms/chat-window/types';
|
|
527
528
|
export { ThreadPanelComponent } from './lib/components/organisms/thread-panel/thread-panel.component';
|
|
529
|
+
export * from './lib/services/forms';
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Game Art Assets
|
|
2
|
+
|
|
3
|
+
Guia breve para generar, limpiar y guardar arte raster para mini juegos.
|
|
4
|
+
|
|
5
|
+
## Cuando usar este flujo
|
|
6
|
+
|
|
7
|
+
Usar `image_gen` para assets visuales de juego que deban sentirse hechos a medida:
|
|
8
|
+
|
|
9
|
+
- avatares de rivales o jugadores;
|
|
10
|
+
- cartas, fichas, piezas, power-ups o insignias;
|
|
11
|
+
- fondos, escenas, tableros decorativos o banners internos;
|
|
12
|
+
- sprites o sprite sheets simples.
|
|
13
|
+
|
|
14
|
+
No usar este flujo para iconos que ya pertenezcan al sistema visual, SVGs deterministas, diagramas simples o UI que pueda resolverse mejor con CSS/HTML.
|
|
15
|
+
|
|
16
|
+
## Flujo recomendado
|
|
17
|
+
|
|
18
|
+
1. Generar el asset con `image_gen`.
|
|
19
|
+
2. Si se necesita transparencia, pedir fondo chroma plano.
|
|
20
|
+
3. Copiar el resultado desde `$CODEX_HOME/generated_images/...` al workspace.
|
|
21
|
+
4. Remover chroma localmente.
|
|
22
|
+
5. Recortar, centrar y normalizar tamanos.
|
|
23
|
+
6. Revisar sobre fondo claro y oscuro.
|
|
24
|
+
7. Guardar solo los assets finales usados por la app.
|
|
25
|
+
8. Conectar el asset con fallback textual o emoji si aplica.
|
|
26
|
+
|
|
27
|
+
## Prompt base para transparencia
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
Create the requested game asset on a perfectly flat solid #00ff00 chroma-key background for background removal.
|
|
31
|
+
The background must be one uniform color with no shadows, gradients, texture, reflections, floor plane, or lighting variation.
|
|
32
|
+
Keep the subject fully separated from the background with crisp edges and generous padding.
|
|
33
|
+
Do not use #00ff00 anywhere in the subject.
|
|
34
|
+
No cast shadow, no contact shadow, no reflection, no watermark, and no text unless explicitly requested.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Para sujetos verdes, usar otro chroma improbable, por ejemplo `#ff00ff`.
|
|
38
|
+
|
|
39
|
+
## Remover chroma
|
|
40
|
+
|
|
41
|
+
Preferir el helper instalado por Codex:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
python "${CODEX_HOME:-$HOME/.codex}/skills/.system/imagegen/scripts/remove_chroma_key.py" \
|
|
45
|
+
--input <source.png> \
|
|
46
|
+
--out <final.png> \
|
|
47
|
+
--auto-key border \
|
|
48
|
+
--soft-matte \
|
|
49
|
+
--transparent-threshold 12 \
|
|
50
|
+
--opaque-threshold 220 \
|
|
51
|
+
--despill
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Si el borde queda con halo, reintentar una vez con:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
python "${CODEX_HOME:-$HOME/.codex}/skills/.system/imagegen/scripts/remove_chroma_key.py" \
|
|
58
|
+
--input <source.png> \
|
|
59
|
+
--out <final.png> \
|
|
60
|
+
--auto-key border \
|
|
61
|
+
--soft-matte \
|
|
62
|
+
--transparent-threshold 12 \
|
|
63
|
+
--opaque-threshold 220 \
|
|
64
|
+
--edge-contract 1 \
|
|
65
|
+
--despill
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Sprite sheets
|
|
69
|
+
|
|
70
|
+
Para varios personajes, suele funcionar mejor pedir una sprite sheet consistente:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
Create 8 cute pixel art rival avatar portraits in a single 4x2 sprite sheet.
|
|
74
|
+
Each cell must have the same size, consistent outline thickness, same lighting and generous padding.
|
|
75
|
+
No text, no letters, no numbers, no watermark.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Despues recortar cada celda, remover chroma, centrar en un canvas cuadrado y exportar cada item con nombre semantico:
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
explorer.png
|
|
82
|
+
guardian.png
|
|
83
|
+
hunter.png
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Ubicacion
|
|
87
|
+
|
|
88
|
+
Guardar assets finales en:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
frontend/valtech-components/src/lib/assets/games/<game-id>/
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Ejemplo:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
frontend/valtech-components/src/lib/assets/games/chessimals/challenge-avatars/explorer.png
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Para marcas oficiales de un juego, usar un subdirectorio `brand`:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
frontend/valtech-components/src/lib/assets/games/chessimals/brand/chessimals-emblem.png
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
No dejar archivos fuente temporales, hojas generadas o variantes descartadas en el repo salvo que sean necesarios para mantenimiento.
|
|
107
|
+
|
|
108
|
+
## Validacion visual
|
|
109
|
+
|
|
110
|
+
Antes de conectar el asset:
|
|
111
|
+
|
|
112
|
+
- revisar esquinas transparentes;
|
|
113
|
+
- revisar que no exista halo del chroma;
|
|
114
|
+
- probar sobre fondo claro y oscuro;
|
|
115
|
+
- verificar que se lea bien al tamano real de UI;
|
|
116
|
+
- comprobar que no se pueda arrastrar desde la interfaz (`draggable="false"` y CSS anti-drag si aplica);
|
|
117
|
+
- mantener `alt=""` cuando el asset sea decorativo y ya exista texto visible con el nombre.
|
|
118
|
+
|
|
119
|
+
## Conexion en Angular
|
|
120
|
+
|
|
121
|
+
Preferir rutas relativas servidas como assets:
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
avatarSrc: 'assets/games/chessimals/challenge-avatars/explorer.png'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
En template, mantener fallback:
|
|
128
|
+
|
|
129
|
+
```html
|
|
130
|
+
@if (avatarSrc; as src) {
|
|
131
|
+
<img [src]="src" alt="" draggable="false" />
|
|
132
|
+
} @else {
|
|
133
|
+
{{ fallbackAvatar }}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Caso de referencia
|
|
138
|
+
|
|
139
|
+
Chessimals usa este flujo para los avatares pixel art del modo Desafio:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
frontend/valtech-components/src/lib/assets/games/chessimals/challenge-avatars/
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Documentacion ampliada:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
docs/frontend/mini-games-art-assets.md
|
|
149
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Chessimals Brand Assets
|
|
2
|
+
|
|
3
|
+
Assets oficiales de marca para Chessimals.
|
|
4
|
+
|
|
5
|
+
## Archivos
|
|
6
|
+
|
|
7
|
+
- `chessimals-wordmark.png`: palabra CHESSIMALS transparente. Usar cuando ya exista otro elemento visual fuerte cerca.
|
|
8
|
+
- `chessimals-emblem.png`: escudo transparente con las cuatro caritas. Usar como icono, card de selector, about o marca compacta.
|
|
9
|
+
- `chessimals-app-icon.png`: icono maestro 1024x1024 para app stores, PWA o superficies grandes.
|
|
10
|
+
- `chessimals-app-icon-capacitor.png`: fuente 1024x1024 RGB, opaca y sin borde transparente para generar assets con Capacitor.
|
|
11
|
+
- `chessimals-app-icon-512.png`: icono 512x512 para manifiestos PWA.
|
|
12
|
+
- `chessimals-app-icon-192.png`: icono 192x192 para manifiestos PWA.
|
|
13
|
+
- `chessimals-favicon.png`: favicon PNG 64x64.
|
|
14
|
+
|
|
15
|
+
## Reglas
|
|
16
|
+
|
|
17
|
+
- No volver a usar `logo.jpg` o `menu-logo.jpg` para superficies nuevas.
|
|
18
|
+
- Componer emblema y wordmark en HTML/CSS cuando se necesite una portada o splash.
|
|
19
|
+
- Usar `chessimals-app-icon.png` como fuente maestra si se necesitan nuevos tamanos de icono.
|
|
20
|
+
- Usar `chessimals-app-icon-capacitor.png` para `@capacitor/assets`; no usar PNGs transparentes como fuente de iconos nativos.
|
|
21
|
+
- Mantener `alt=""` cuando el logo acompane texto visible de Chessimals.
|
|
22
|
+
- Usar `draggable="false"` o CSS anti-drag si aparece en superficies interactivas.
|
|
23
|
+
- Si se genera una nueva version, preservar estos nombres solo cuando se reemplace oficialmente el asset.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Chessimals Power Assets
|
|
2
|
+
|
|
3
|
+
Official UI assets for the animal power cards.
|
|
4
|
+
|
|
5
|
+
- `eagle-power.png`: diagonal flight power.
|
|
6
|
+
- `bull-power.png`: straight charge power.
|
|
7
|
+
- `kangaroo-power.png`: jump power.
|
|
8
|
+
- `lion-power.png`: wide board power.
|
|
9
|
+
|
|
10
|
+
Each asset is a transparent 512x512 PNG generated from the current Chessimals
|
|
11
|
+
brand direction. Keep new power assets text-free so labels can remain localized
|
|
12
|
+
in the Angular UI.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|