valtech-components 4.0.419 → 4.0.421

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.
@@ -1 +1 @@
1
- {"version":3,"file":"valtech-components-mini-games.mjs","sources":["../../../mini-games/public-api.ts","../../../mini-games/valtech-components-mini-games.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n BubbleBlitzGameComponent,\n ChessimalsGameComponent,\n I18nService,\n MemoryGameComponent,\n MiniGameDefinition,\n MiniGamesMenuComponent,\n PageContentComponent,\n PageContentMetadata,\n SimonGameComponent,\n} from 'valtech-components';\n\nconst MINI_GAMES_BASE_ROUTE = '/mini-games';\n\nconst MINI_GAMES_PAGE_I18N = {\n es: {\n memoryTitle: 'Memorice Retro',\n memoryDescription: 'Encuentra pares con musica y efectos retro.',\n simonTitle: 'Simon',\n simonDescription: 'Repite luces y sonidos cada vez mas largos.',\n bubbleTitle: 'Burbuja Blitz',\n bubbleDescription: 'Revienta grupos de burbujas y encadena combos.',\n chessimalsTitle: 'Chessimals',\n chessimalsDescription: 'Carrera de peones con cartas de animales.',\n backToSetup: 'Cambiar juego',\n },\n en: {\n memoryTitle: 'Retro Memory',\n memoryDescription: 'Find matching pairs with retro music and effects.',\n simonTitle: 'Simon',\n simonDescription: 'Repeat lights and sounds in longer sequences.',\n bubbleTitle: 'Bubble Blitz',\n bubbleDescription: 'Pop bubble groups and chain combos.',\n chessimalsTitle: 'Chessimals',\n chessimalsDescription: 'Pawn race with animal power cards.',\n backToSetup: 'Change game',\n },\n};\n\n@Component({\n selector: 'val-mini-games-page',\n standalone: true,\n imports: [MiniGamesMenuComponent, PageContentComponent],\n template: `\n <val-page-content [props]=\"pageContentProps\">\n <section content class=\"mini-games-page\">\n <val-mini-games-menu [games]=\"games\" [asModal]=\"false\" (selected)=\"openGame($event)\" />\n </section>\n </val-page-content>\n `,\n styles: [\n `\n .mini-games-page {\n padding: 16px 0 32px;\n }\n `,\n ],\n})\nexport class MiniGamesPageComponent {\n private readonly router = inject(Router);\n private readonly i18n = inject(I18nService);\n\n readonly pageContentProps: PageContentMetadata = {\n homeRoute: '/',\n languageSelector: {},\n fontSizeSelector: {},\n showBackButton: true,\n contentMaxWidth: 'md',\n };\n\n constructor() {\n this.i18n.registerDefaults('MiniGames', MINI_GAMES_PAGE_I18N);\n }\n\n get games(): MiniGameDefinition[] {\n this.i18n.lang();\n return [\n {\n id: 'chessimals',\n title: this.t('chessimalsTitle'),\n description: this.t('chessimalsDescription'),\n icon: '♟️',\n imageSrc: 'assets/games/chessimals/menu-logo.jpg',\n route: `${MINI_GAMES_BASE_ROUTE}/chessimals`,\n },\n {\n id: 'bubble-blitz',\n title: this.t('bubbleTitle'),\n description: this.t('bubbleDescription'),\n icon: '🫧',\n route: `${MINI_GAMES_BASE_ROUTE}/bubble-blitz`,\n },\n {\n id: 'memory',\n title: this.t('memoryTitle'),\n description: this.t('memoryDescription'),\n icon: '🧠',\n route: `${MINI_GAMES_BASE_ROUTE}/memory`,\n },\n {\n id: 'simon',\n title: this.t('simonTitle'),\n description: this.t('simonDescription'),\n icon: '🎛️',\n route: `${MINI_GAMES_BASE_ROUTE}/simon`,\n },\n ];\n }\n\n openGame(game: MiniGameDefinition): void {\n if (game.route) void this.router.navigateByUrl(game.route);\n }\n\n private t(key: string): string {\n return this.i18n.t(key, 'MiniGames');\n }\n}\n\n@Component({\n selector: 'val-mini-game-page-shell',\n standalone: true,\n imports: [PageContentComponent],\n template: `\n <val-page-content [props]=\"pageContentProps\">\n <section content class=\"mini-game-page-shell\">\n <ng-content />\n </section>\n </val-page-content>\n `,\n styles: [\n `\n .mini-game-page-shell {\n display: grid;\n gap: 14px;\n padding: 16px 0 32px;\n }\n `,\n ],\n})\nclass MiniGamePageShellComponent {\n readonly pageContentProps: PageContentMetadata = {\n homeRoute: MINI_GAMES_BASE_ROUTE,\n languageSelector: {},\n fontSizeSelector: {},\n showBackButton: false,\n contentMaxWidth: 'md',\n };\n}\n\n@Component({\n selector: 'val-memory-game-page',\n standalone: true,\n imports: [MemoryGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-memory-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class MemoryGamePageComponent {}\n\n@Component({\n selector: 'val-simon-game-page',\n standalone: true,\n imports: [SimonGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-simon-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class SimonGamePageComponent {}\n\n@Component({\n selector: 'val-bubble-blitz-game-page',\n standalone: true,\n imports: [BubbleBlitzGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-bubble-blitz-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class BubbleBlitzGamePageComponent {}\n\n@Component({\n selector: 'val-chessimals-game-page',\n standalone: true,\n imports: [ChessimalsGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-chessimals-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class ChessimalsGamePageComponent {}\n\n@Component({\n selector: 'val-chessimals-online-game-page',\n standalone: true,\n imports: [ChessimalsGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-chessimals-game [onlineGameId]=\"gameId\" />\n </val-mini-game-page-shell>\n `,\n})\nexport class ChessimalsOnlineGamePageComponent {\n private readonly route = inject(ActivatedRoute);\n readonly gameId = this.route.snapshot.paramMap.get('gameId') ?? '';\n}\n\n@Component({\n selector: 'val-chessimals-projection-game-page',\n standalone: true,\n imports: [ChessimalsGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-chessimals-game [onlineGameId]=\"gameId\" [projectionMode]=\"true\" />\n </val-mini-game-page-shell>\n `,\n})\nexport class ChessimalsProjectionGamePageComponent {\n private readonly route = inject(ActivatedRoute);\n readonly gameId = this.route.snapshot.paramMap.get('gameId') ?? '';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAcA,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAE5C,MAAM,oBAAoB,GAAG;AAC3B,IAAA,EAAE,EAAE;AACF,QAAA,WAAW,EAAE,gBAAgB;AAC7B,QAAA,iBAAiB,EAAE,6CAA6C;AAChE,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,gBAAgB,EAAE,6CAA6C;AAC/D,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,iBAAiB,EAAE,gDAAgD;AACnE,QAAA,eAAe,EAAE,YAAY;AAC7B,QAAA,qBAAqB,EAAE,2CAA2C;AAClE,QAAA,WAAW,EAAE,eAAe;AAC7B,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,iBAAiB,EAAE,mDAAmD;AACtE,QAAA,UAAU,EAAE,OAAO;AACnB,QAAA,gBAAgB,EAAE,+CAA+C;AACjE,QAAA,WAAW,EAAE,cAAc;AAC3B,QAAA,iBAAiB,EAAE,qCAAqC;AACxD,QAAA,eAAe,EAAE,YAAY;AAC7B,QAAA,qBAAqB,EAAE,oCAAoC;AAC3D,QAAA,WAAW,EAAE,aAAa;AAC3B,KAAA;CACF,CAAC;MAqBW,sBAAsB,CAAA;AAYjC,IAAA,WAAA,GAAA;AAXiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEnC,QAAA,IAAA,CAAA,gBAAgB,GAAwB;AAC/C,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,eAAe,EAAE,IAAI;SACtB,CAAC;QAGA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;KAC/D;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO;AACL,YAAA;AACE,gBAAA,EAAE,EAAE,YAAY;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChC,gBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;AAC5C,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,QAAQ,EAAE,uCAAuC;gBACjD,KAAK,EAAE,CAAG,EAAA,qBAAqB,CAAa,WAAA,CAAA;AAC7C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,cAAc;AAClB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;AAC5B,gBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACxC,gBAAA,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAG,EAAA,qBAAqB,CAAe,aAAA,CAAA;AAC/C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;AAC5B,gBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACxC,gBAAA,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,CAAG,EAAA,qBAAqB,CAAS,OAAA,CAAA;AACzC,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,OAAO;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3B,gBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACvC,gBAAA,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,CAAG,EAAA,qBAAqB,CAAQ,MAAA,CAAA;AACxC,aAAA;SACF,CAAC;KACH;AAED,IAAA,QAAQ,CAAC,IAAwB,EAAA;QAC/B,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5D;AAEO,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KACtC;+GAzDU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAfvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;GAMT,EAPS,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,qHAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAgB3C,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAnBlC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EACP,OAAA,EAAA,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,EAC7C,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA,CAAA;;AAqEH,MAqBM,0BAA0B,CAAA;AArBhC,IAAA,WAAA,GAAA;AAsBW,QAAA,IAAA,CAAA,gBAAgB,GAAwB;AAC/C,YAAA,SAAS,EAAE,qBAAqB;AAChC,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,eAAe,EAAE,IAAI;SACtB,CAAC;AACH,KAAA;+GARK,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAjBpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAkB1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBArB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cACxB,IAAI,EAAA,OAAA,EACP,CAAC,oBAAoB,CAAC,EACrB,QAAA,EAAA,CAAA;;;;;;AAMT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,CAAA;;MA+BU,uBAAuB,CAAA;+GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EANxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EALS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,wFAbzB,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAoBnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,0BAA0B,CAAC;AAC1D,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;MAaY,sBAAsB,CAAA;+GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EANvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EALS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,uFAzBxB,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAgCnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;AACzD,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;MAaY,4BAA4B,CAAA;+GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAN7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EALS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,8FArC9B,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FA4CnB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAVxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,wBAAwB,EAAE,0BAA0B,CAAC;AAC/D,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;MAaY,2BAA2B,CAAA;+GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAN5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EALS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,8HAjD7B,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAwDnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;AAC9D,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;MAaY,iCAAiC,CAAA;AAV9C,IAAA,WAAA,GAAA;AAWmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpE,KAAA;+GAHY,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EANlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EALS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,8HA7D7B,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAoEnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAV7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;AAC9D,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;MAgBY,qCAAqC,CAAA;AAVlD,IAAA,WAAA,GAAA;AAWmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpE,KAAA;+GAHY,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qCAAqC,EANtC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;GAIT,EALS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,8HA5E7B,0BAA0B,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAmFnB,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAVjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;AAC9D,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA,CAAA;;;AC/ND;;AAEG;;;;"}
1
+ {"version":3,"file":"valtech-components-mini-games.mjs","sources":["../../../mini-games/public-api.ts","../../../mini-games/valtech-components-mini-games.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n BubbleBlitzGameComponent,\n ChessimalsGameComponent,\n I18nService,\n MemoryGameComponent,\n MiniGameDefinition,\n MiniGamesMenuComponent,\n PageContentComponent,\n PageContentMetadata,\n SimonGameComponent,\n} from 'valtech-components';\n\nconst MINI_GAMES_BASE_ROUTE = '/mini-games';\n\nconst MINI_GAMES_PAGE_I18N = {\n es: {\n memoryTitle: 'Memorice Retro',\n memoryDescription: 'Encuentra pares con musica y efectos retro.',\n simonTitle: 'Simon',\n simonDescription: 'Repite luces y sonidos cada vez mas largos.',\n bubbleTitle: 'Burbuja Blitz',\n bubbleDescription: 'Revienta grupos de burbujas y encadena combos.',\n chessimalsTitle: 'Chessimals',\n chessimalsDescription: 'Carrera de peones con cartas de animales.',\n },\n en: {\n memoryTitle: 'Retro Memory',\n memoryDescription: 'Find matching pairs with retro music and effects.',\n simonTitle: 'Simon',\n simonDescription: 'Repeat lights and sounds in longer sequences.',\n bubbleTitle: 'Bubble Blitz',\n bubbleDescription: 'Pop bubble groups and chain combos.',\n chessimalsTitle: 'Chessimals',\n chessimalsDescription: 'Pawn race with animal power cards.',\n },\n};\n\n@Component({\n selector: 'val-mini-games-page',\n standalone: true,\n imports: [MiniGamesMenuComponent, PageContentComponent],\n template: `\n <val-page-content [props]=\"pageContentProps\">\n <section content class=\"mini-games-page\">\n <val-mini-games-menu [games]=\"games\" [asModal]=\"false\" (selected)=\"openGame($event)\" />\n </section>\n </val-page-content>\n `,\n styles: [\n `\n .mini-games-page {\n padding: 16px 0 32px;\n }\n `,\n ],\n})\nexport class MiniGamesPageComponent {\n private readonly router = inject(Router);\n private readonly i18n = inject(I18nService);\n\n readonly pageContentProps: PageContentMetadata = {\n homeRoute: '/',\n languageSelector: {},\n fontSizeSelector: {},\n showBackButton: true,\n contentMaxWidth: 'md',\n };\n\n constructor() {\n this.i18n.registerDefaults('MiniGames', MINI_GAMES_PAGE_I18N);\n }\n\n get games(): MiniGameDefinition[] {\n this.i18n.lang();\n return [\n {\n id: 'chessimals',\n title: this.t('chessimalsTitle'),\n description: this.t('chessimalsDescription'),\n icon: '♟️',\n imageSrc: 'assets/games/chessimals/menu-logo.jpg',\n route: `${MINI_GAMES_BASE_ROUTE}/chessimals`,\n },\n {\n id: 'bubble-blitz',\n title: this.t('bubbleTitle'),\n description: this.t('bubbleDescription'),\n icon: '🫧',\n route: `${MINI_GAMES_BASE_ROUTE}/bubble-blitz`,\n },\n {\n id: 'memory',\n title: this.t('memoryTitle'),\n description: this.t('memoryDescription'),\n icon: '🧠',\n route: `${MINI_GAMES_BASE_ROUTE}/memory`,\n },\n {\n id: 'simon',\n title: this.t('simonTitle'),\n description: this.t('simonDescription'),\n icon: '🎛️',\n route: `${MINI_GAMES_BASE_ROUTE}/simon`,\n },\n ];\n }\n\n openGame(game: MiniGameDefinition): void {\n if (game.route) void this.router.navigateByUrl(game.route);\n }\n\n private t(key: string): string {\n return this.i18n.t(key, 'MiniGames');\n }\n}\n\n@Component({\n selector: 'val-mini-game-page-shell',\n standalone: true,\n imports: [PageContentComponent],\n template: `\n <val-page-content [props]=\"pageContentProps\">\n <section content class=\"mini-game-page-shell\">\n <ng-content />\n </section>\n </val-page-content>\n `,\n styles: [\n `\n .mini-game-page-shell {\n display: grid;\n gap: 14px;\n padding: 16px 0 32px;\n }\n `,\n ],\n})\nclass MiniGamePageShellComponent {\n readonly pageContentProps: PageContentMetadata = {\n homeRoute: MINI_GAMES_BASE_ROUTE,\n languageSelector: {},\n fontSizeSelector: {},\n showBackButton: false,\n contentMaxWidth: 'md',\n };\n}\n\n@Component({\n selector: 'val-memory-game-page',\n standalone: true,\n imports: [MemoryGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-memory-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class MemoryGamePageComponent {}\n\n@Component({\n selector: 'val-simon-game-page',\n standalone: true,\n imports: [SimonGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-simon-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class SimonGamePageComponent {}\n\n@Component({\n selector: 'val-bubble-blitz-game-page',\n standalone: true,\n imports: [BubbleBlitzGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-bubble-blitz-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class BubbleBlitzGamePageComponent {}\n\n@Component({\n selector: 'val-chessimals-game-page',\n standalone: true,\n imports: [ChessimalsGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-chessimals-game />\n </val-mini-game-page-shell>\n `,\n})\nexport class ChessimalsGamePageComponent {}\n\n@Component({\n selector: 'val-chessimals-online-game-page',\n standalone: true,\n imports: [ChessimalsGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-chessimals-game [onlineGameId]=\"gameId\" />\n </val-mini-game-page-shell>\n `,\n})\nexport class ChessimalsOnlineGamePageComponent {\n private readonly route = inject(ActivatedRoute);\n readonly gameId = this.route.snapshot.paramMap.get('gameId') ?? '';\n}\n\n@Component({\n selector: 'val-chessimals-projection-game-page',\n standalone: true,\n imports: [ChessimalsGameComponent, MiniGamePageShellComponent],\n template: `\n <val-mini-game-page-shell>\n <val-chessimals-game [onlineGameId]=\"gameId\" [projectionMode]=\"true\" />\n </val-mini-game-page-shell>\n `,\n})\nexport class ChessimalsProjectionGamePageComponent {\n private readonly route = inject(ActivatedRoute);\n readonly gameId = this.route.snapshot.paramMap.get('gameId') ?? '';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -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.419';
61
+ const VERSION = '4.0.421';
62
62
 
63
63
  // Control de estado de refresco (singleton a nivel de módulo)
64
64
  let isRefreshing = false;
@@ -63304,6 +63304,62 @@ class RetroAudioService {
63304
63304
  [146.83, 0.18],
63305
63305
  ]);
63306
63306
  }
63307
+ bubblePop(size = 2, combo = 1) {
63308
+ const safeSize = Math.max(2, Math.min(12, Math.round(size)));
63309
+ const safeCombo = Math.max(1, Math.min(9, Math.round(combo)));
63310
+ const base = 520 + safeSize * 18;
63311
+ void this.filteredNoise(0.065, 0.018 + safeSize * 0.0018, 'bandpass', 1200 + safeSize * 85);
63312
+ void this.sweep(base, base * 1.9, 0.09, 'sine', 0.026 + safeSize * 0.0014);
63313
+ window.setTimeout(() => void this.tone(base * 1.25, 0.055, 'triangle', 0.018), 38);
63314
+ if (safeSize >= 5 || safeCombo > 1) {
63315
+ window.setTimeout(() => void this.bubbleCombo(safeCombo), 82);
63316
+ }
63317
+ }
63318
+ bubbleCombo(combo = 1) {
63319
+ const safeCombo = Math.max(1, Math.min(9, Math.round(combo)));
63320
+ const root = 660 + safeCombo * 26;
63321
+ void this.sequence([
63322
+ [root, 0.045],
63323
+ [root * 1.25, 0.055],
63324
+ [root * 1.5, 0.07],
63325
+ ], 'triangle', 0.024 + safeCombo * 0.0016, 42);
63326
+ }
63327
+ bubbleInvalid() {
63328
+ void this.sequence([
63329
+ [246.94, 0.055],
63330
+ [196, 0.085],
63331
+ ], 'sine', 0.034, 54);
63332
+ }
63333
+ bubbleSettle(drop = 1) {
63334
+ const safeDrop = Math.max(1, Math.min(9, Math.round(drop)));
63335
+ void this.filteredNoise(0.055, 0.009 + safeDrop * 0.001, 'lowpass', 360 + safeDrop * 28);
63336
+ void this.tone(164.81 + safeDrop * 8, 0.045, 'triangle', 0.012);
63337
+ }
63338
+ bubbleShuffle() {
63339
+ void this.sequence([
63340
+ [392, 0.04],
63341
+ [523.25, 0.04],
63342
+ [659.25, 0.05],
63343
+ [783.99, 0.07],
63344
+ ], 'sine', 0.024, 38);
63345
+ window.setTimeout(() => void this.filteredNoise(0.16, 0.018, 'bandpass', 950), 28);
63346
+ }
63347
+ bubbleFever() {
63348
+ void this.sweep(392, 1567.98, 0.24, 'triangle', 0.034);
63349
+ window.setTimeout(() => void this.sequence([[987.77, 0.055], [1318.51, 0.085]], 'sine', 0.025, 48), 128);
63350
+ window.setTimeout(() => void this.filteredNoise(0.12, 0.014, 'highpass', 2400), 72);
63351
+ }
63352
+ bubbleFinish() {
63353
+ this.stopMusic();
63354
+ void this.sequence([
63355
+ [523.25, 0.07],
63356
+ [659.25, 0.07],
63357
+ [783.99, 0.08],
63358
+ [1046.5, 0.13],
63359
+ [1318.51, 0.18],
63360
+ ], 'triangle', 0.042, 62);
63361
+ window.setTimeout(() => void this.filteredNoise(0.18, 0.016, 'bandpass', 1800), 110);
63362
+ }
63307
63363
  chessimalsMove() {
63308
63364
  void this.sequence([
63309
63365
  [392, 0.045],
@@ -67598,6 +67654,8 @@ const MODE_CONFIG = {
67598
67654
  },
67599
67655
  };
67600
67656
  const LEADERBOARD_KEY$2 = 'val-mini-games-bubble-blitz-leaderboard:v1';
67657
+ const BUBBLE_POP_MS = 190;
67658
+ const BUBBLE_SETTLE_MS = 310;
67601
67659
  class BubbleBlitzGameComponent {
67602
67660
  constructor() {
67603
67661
  this.i18n = inject(I18nService);
@@ -67616,6 +67674,7 @@ class BubbleBlitzGameComponent {
67616
67674
  this.remaining = signal(MODE_CONFIG.classic.seconds);
67617
67675
  this.fever = signal(0);
67618
67676
  this.selectedGroupKey = signal('');
67677
+ this.animating = signal(false);
67619
67678
  this.leaderboard = signal(this.readLeaderboard());
67620
67679
  this.confirmAction = signal(undefined);
67621
67680
  this.config = computed(() => MODE_CONFIG[this.mode()]);
@@ -67678,6 +67737,7 @@ class BubbleBlitzGameComponent {
67678
67737
  }
67679
67738
  ngOnDestroy() {
67680
67739
  this.stopTimer();
67740
+ this.clearAnimationTimer();
67681
67741
  this.audio.stopMusic();
67682
67742
  }
67683
67743
  t(key) {
@@ -67705,6 +67765,8 @@ class BubbleBlitzGameComponent {
67705
67765
  this.grid.set(this.createBoard());
67706
67766
  this.phase.set('playing');
67707
67767
  this.selectedGroupKey.set('');
67768
+ this.animating.set(false);
67769
+ this.clearAnimationTimer();
67708
67770
  void this.audio.startGameMusic().catch(() => undefined);
67709
67771
  this.startTimer();
67710
67772
  }
@@ -67713,36 +67775,55 @@ class BubbleBlitzGameComponent {
67713
67775
  this.phase.set('home');
67714
67776
  this.grid.set([]);
67715
67777
  this.selectedGroupKey.set('');
67778
+ this.animating.set(false);
67779
+ this.clearAnimationTimer();
67716
67780
  this.remaining.set(this.config().seconds);
67717
67781
  void this.audio.startMenuMusic().catch(() => undefined);
67718
67782
  }
67719
67783
  popGroup(cell) {
67720
- if (this.phase() !== 'playing')
67784
+ if (this.phase() !== 'playing' || this.animating())
67721
67785
  return;
67722
67786
  const group = this.groupFrom(cell, this.grid());
67723
67787
  this.selectedGroupKey.set(group.map((item) => item.id).sort().join('|'));
67724
67788
  if (group.length < 2) {
67725
67789
  this.combo.set(1);
67726
- this.audio.miss();
67790
+ this.audio.bubbleInvalid();
67727
67791
  return;
67728
67792
  }
67793
+ this.animating.set(true);
67794
+ const groupIds = new Set(group.map((item) => item.id));
67795
+ this.grid.update((cells) => cells.map((item) => (groupIds.has(item.id) ? { ...item, state: 'popping', drop: 0 } : { ...item, state: 'idle', drop: 0 })));
67729
67796
  const feverMultiplier = this.feverReady() ? 2 : 1;
67730
67797
  const points = group.length * group.length * this.combo() * feverMultiplier;
67731
67798
  this.score.update((value) => value + points);
67732
67799
  this.popped.update((value) => value + group.length);
67733
- this.fever.set(this.feverReady() ? 0 : Math.min(this.config().feverTarget, this.fever() + group.length));
67800
+ const feverWasReady = this.feverReady();
67801
+ this.fever.set(feverWasReady ? 0 : Math.min(this.config().feverTarget, this.fever() + group.length));
67734
67802
  this.combo.update((value) => {
67735
67803
  const next = Math.min(9, group.length >= 5 ? value + 1 : value);
67736
67804
  this.maxCombo.update((best) => Math.max(best, next));
67737
67805
  return next;
67738
67806
  });
67739
- this.grid.set(this.refillBoard(this.removeGroup(group)));
67740
- this.audio.match();
67741
- if (!this.hasPlayableGroup(this.grid())) {
67742
- this.grid.set(this.createBoard());
67743
- this.combo.set(1);
67744
- this.audio.flip();
67745
- }
67807
+ this.audio.bubblePop(group.length, this.combo());
67808
+ if (!feverWasReady && this.feverReady()) {
67809
+ window.setTimeout(() => this.audio.bubbleFever(), 100);
67810
+ }
67811
+ this.clearAnimationTimer();
67812
+ this.animationTimer = window.setTimeout(() => {
67813
+ const settled = this.refillBoard(this.grid().filter((item) => !groupIds.has(item.id)));
67814
+ this.grid.set(settled);
67815
+ this.audio.bubbleSettle(Math.max(1, ...settled.map((item) => item.drop ?? 0)));
67816
+ this.animationTimer = window.setTimeout(() => {
67817
+ if (!this.hasPlayableGroup(this.grid())) {
67818
+ this.grid.set(this.createBoard().map((item) => ({ ...item, state: 'entering', drop: this.config().rows })));
67819
+ this.combo.set(1);
67820
+ this.audio.bubbleShuffle();
67821
+ this.animationTimer = window.setTimeout(() => this.finishAnimation(), BUBBLE_SETTLE_MS);
67822
+ return;
67823
+ }
67824
+ this.finishAnimation();
67825
+ }, BUBBLE_SETTLE_MS);
67826
+ }, BUBBLE_POP_MS);
67746
67827
  }
67747
67828
  bubbleColor(color) {
67748
67829
  return BUBBLE_COLORS[color];
@@ -67811,13 +67892,25 @@ class BubbleBlitzGameComponent {
67811
67892
  window.clearInterval(this.timer);
67812
67893
  this.timer = undefined;
67813
67894
  }
67895
+ finishAnimation() {
67896
+ this.grid.update((cells) => cells.map((cell) => ({ ...cell, state: 'idle', drop: 0 })));
67897
+ this.selectedGroupKey.set('');
67898
+ this.animating.set(false);
67899
+ this.clearAnimationTimer();
67900
+ }
67901
+ clearAnimationTimer() {
67902
+ if (!this.animationTimer)
67903
+ return;
67904
+ window.clearTimeout(this.animationTimer);
67905
+ this.animationTimer = undefined;
67906
+ }
67814
67907
  finish() {
67815
67908
  if (this.phase() === 'finished')
67816
67909
  return;
67817
67910
  this.stopTimer();
67818
67911
  this.phase.set('finished');
67819
67912
  this.saveScore();
67820
- this.audio.win();
67913
+ this.audio.bubbleFinish();
67821
67914
  }
67822
67915
  createBoard() {
67823
67916
  const cells = [];
@@ -67835,6 +67928,8 @@ class BubbleBlitzGameComponent {
67835
67928
  row,
67836
67929
  col,
67837
67930
  color,
67931
+ state: 'idle',
67932
+ drop: 0,
67838
67933
  };
67839
67934
  }
67840
67935
  randomColor() {
@@ -67869,11 +67964,23 @@ class BubbleBlitzGameComponent {
67869
67964
  for (let col = 0; col < this.config().cols; col += 1) {
67870
67965
  const column = cells
67871
67966
  .filter((cell) => cell.col === col)
67872
- .sort((a, b) => b.row - a.row);
67967
+ .sort((a, b) => a.row - b.row);
67873
67968
  const missing = this.config().rows - column.length;
67874
67969
  const refilled = [
67875
- ...Array.from({ length: missing }, (_, index) => this.createCell(index, col)),
67876
- ...column.map((cell, index) => ({ ...cell, row: missing + index })),
67970
+ ...Array.from({ length: missing }, (_, index) => ({
67971
+ ...this.createCell(index, col),
67972
+ state: 'entering',
67973
+ drop: missing - index,
67974
+ })),
67975
+ ...column.map((cell, index) => {
67976
+ const nextRow = missing + index;
67977
+ return {
67978
+ ...cell,
67979
+ row: nextRow,
67980
+ state: nextRow === cell.row ? 'idle' : 'falling',
67981
+ drop: nextRow - cell.row,
67982
+ };
67983
+ }),
67877
67984
  ];
67878
67985
  next.push(...refilled);
67879
67986
  }
@@ -68002,6 +68109,7 @@ class BubbleBlitzGameComponent {
68002
68109
  <div
68003
68110
  class="bubble-board"
68004
68111
  [class.is-finished]="phase() === 'finished'"
68112
+ [class.is-animating]="animating()"
68005
68113
  [style.--bubble-rows]="config().rows"
68006
68114
  [style.--bubble-cols]="config().cols"
68007
68115
  >
@@ -68010,8 +68118,12 @@ class BubbleBlitzGameComponent {
68010
68118
  type="button"
68011
68119
  class="bubble-cell"
68012
68120
  [class.is-target]="isTargetCell(cell)"
68121
+ [class.is-popping]="cell.state === 'popping'"
68122
+ [class.is-falling]="cell.state === 'falling'"
68123
+ [class.is-entering]="cell.state === 'entering'"
68013
68124
  [style.--bubble-color]="bubbleColor(cell.color)"
68014
- [disabled]="phase() !== 'playing'"
68125
+ [style.--bubble-drop]="cell.drop ?? 0"
68126
+ [disabled]="phase() !== 'playing' || animating()"
68015
68127
  (click)="popGroup(cell)"
68016
68128
  >
68017
68129
  <span>{{ groupSizeLabel(cell) }}</span>
@@ -68080,7 +68192,7 @@ class BubbleBlitzGameComponent {
68080
68192
  />
68081
68193
  </ng-template>
68082
68194
  </ion-modal>
68083
- `, isInline: true, styles: [":host{display:block}.bubble-shell{--bubble-panel: var(--ion-card-background, #ffffff);--bubble-border: var(--ion-border-color, #e6e2ec);--bubble-text: var(--ion-color-dark, #2f2a3a);--bubble-muted: var(--ion-color-medium, #6f6a7a);--bubble-soft: rgba(var(--ion-color-primary-rgb, 255, 0, 178), .08);--bubble-primary: #ff4f9f;--bubble-secondary: #18c7d4;--bubble-accent: #ffca3a;display:grid;gap:18px;max-width:760px;margin:0 auto;color:var(--bubble-text)}:host-context(html.ion-palette-dark) .bubble-shell,:host-context([data-theme=\"dark\"]) .bubble-shell{--bubble-panel: #211f2a;--bubble-border: rgba(255, 255, 255, .13);--bubble-text: #fff8ff;--bubble-muted: rgba(255, 248, 255, .68);--bubble-soft: rgba(255, 255, 255, .07)}.bubble-hero{display:grid;gap:10px;overflow:hidden;border-radius:28px;padding:clamp(28px,7vw,52px);background:radial-gradient(circle at 18% 18%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 82% 24%,rgba(255,202,58,.72),transparent 20%),linear-gradient(135deg,var(--bubble-primary),var(--bubble-secondary));color:#fff;text-align:center}.bubble-hero__badge{display:inline-flex;align-items:center;justify-self:center;gap:.4rem;border-radius:999px;padding:.4rem .75rem;background:#ffffff2e;font-size:.78rem;font-weight:950;text-transform:uppercase}.bubble-hero h1{margin:0;font-size:clamp(2.5rem,12vw,5rem);line-height:.92;font-weight:950}.bubble-hero p,.bubble-howto p,.bubble-leaderboard p,.bubble-result p{margin:0;color:inherit;line-height:1.45}.bubble-panel,.bubble-game,.bubble-leaderboard{display:grid;gap:16px;border:1px solid var(--bubble-border);border-radius:26px;padding:clamp(16px,4vw,24px);background:var(--bubble-panel)}.bubble-howto{display:grid;gap:6px;border-radius:20px;padding:16px;background:var(--bubble-soft)}.bubble-howto h2,.bubble-leaderboard h2{margin:0;color:var(--bubble-text)}.bubble-howto p,.bubble-leaderboard p{color:var(--bubble-muted)}.bubble-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.bubble-modes button{display:grid;gap:6px;min-height:116px;border:1px solid var(--bubble-border);border-radius:22px;padding:14px;background:var(--bubble-panel);color:var(--bubble-text);font:inherit;text-align:left}.bubble-modes button.is-selected{border-color:var(--bubble-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--bubble-primary),transparent 78%)}.bubble-modes strong,.bubble-status strong{font-weight:950}.bubble-modes small,.bubble-status small,.bubble-leaderboard small{color:var(--bubble-muted)}.bubble-primary,.bubble-secondary{min-height:58px;border-radius:999px;font:inherit;font-weight:950}.bubble-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;background:var(--bubble-primary);color:#fff;box-shadow:0 18px 45px color-mix(in srgb,var(--bubble-primary),transparent 72%)}.bubble-secondary{border:1px solid var(--bubble-border);background:transparent;color:var(--bubble-text)}.bubble-menu-actions,.bubble-actions{display:grid;gap:10px}.bubble-actions{position:sticky;bottom:10px;z-index:2;grid-template-columns:repeat(3,minmax(0,1fr));padding-top:12px;background:linear-gradient(to bottom,transparent,var(--bubble-panel) 28%)}.bubble-status{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.bubble-status div{display:grid;gap:2px;border-radius:18px;padding:12px;background:var(--bubble-soft);text-align:center}.bubble-status strong{font-size:1.6rem;line-height:1}.bubble-fever{position:relative;overflow:hidden;min-height:42px;display:grid;place-items:center;border:1px solid var(--bubble-border);border-radius:999px;background:var(--bubble-soft)}.bubble-fever span{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--bubble-accent),var(--bubble-primary));transition:width .18s ease}.bubble-fever strong{position:relative;z-index:1;font-size:.82rem;font-weight:950;text-transform:uppercase}.bubble-fever.is-ready strong{color:#2f2a3a}.bubble-board{display:grid;grid-template-columns:repeat(var(--bubble-cols),minmax(0,1fr));gap:clamp(.28rem,1.3vw,.55rem);width:min(100%,34rem);margin:0 auto;border-radius:28px;padding:clamp(.55rem,2vw,.9rem);background:radial-gradient(circle at 25% 18%,rgba(255,255,255,.7),transparent 20%),linear-gradient(135deg,#18c7d429,#ff4f9f29)}.bubble-cell{position:relative;aspect-ratio:1;border:0;border-radius:999px;background:radial-gradient(circle at 32% 24%,rgba(255,255,255,.86),rgba(255,255,255,.24) 22%,transparent 34%),radial-gradient(circle at 70% 78%,rgba(0,0,0,.18),transparent 38%),var(--bubble-color);box-shadow:inset 0 -.45rem .75rem #00000024,0 .5rem 1.1rem color-mix(in srgb,var(--bubble-color),transparent 72%);transform:scale(.98);transition:filter .14s ease,transform .14s ease,box-shadow .14s ease}.bubble-cell.is-target{filter:saturate(1.18) brightness(1.08);transform:scale(1.05);box-shadow:inset 0 -.45rem .75rem #00000024,0 0 0 .16rem #ffffffc7,0 .75rem 1.5rem color-mix(in srgb,var(--bubble-color),transparent 55%)}.bubble-cell span{position:absolute;inset:auto .12rem .1rem auto;display:grid;place-items:center;min-width:1.15rem;height:1.15rem;border-radius:999px;background:#ffffffd1;color:#2f2a3a;font-size:.66rem;font-weight:950;opacity:0}.bubble-cell.is-target span{opacity:1}.bubble-board.is-finished .bubble-cell{opacity:.55}.bubble-result{display:grid;gap:8px;justify-items:center;border-radius:22px;padding:16px;background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.12);text-align:center}.bubble-result ion-icon{color:var(--ion-color-success, #2dd36f);font-size:2rem}.bubble-result strong{font-size:1.35rem;font-weight:950}.bubble-result p{color:var(--bubble-muted)}.bubble-result div{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:8px 12px;background:var(--bubble-soft)}.bubble-result div span,.bubble-leaderboard li>span{display:grid;place-items:center;width:2.15rem;height:2.15rem;border-radius:999px;background:var(--player-color, var(--bubble-primary))}.bubble-leaderboard__title{display:flex;align-items:center;gap:10px}.bubble-leaderboard__title ion-icon{color:var(--bubble-primary);font-size:1.4rem}.bubble-leaderboard ol{display:grid;gap:8px;margin:0;padding:0;list-style:none}.bubble-leaderboard li{display:grid;grid-template-columns:2.15rem 1fr auto;gap:10px;align-items:center;border-radius:16px;padding:12px;background:var(--bubble-soft)}@media (max-width: 560px){.bubble-modes,.bubble-actions,.bubble-status{grid-template-columns:1fr}.bubble-board{width:100%}}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalLayoutComponent, selector: "val-modal-layout", inputs: ["title", "subtitle", "closeLabel", "showClose", "actions", "actionsAlign", "footer", "footerClass"], outputs: ["close", "actionClick"] }] }); }
68195
+ `, isInline: true, styles: [":host{display:block}.bubble-shell{--bubble-panel: var(--ion-card-background, #ffffff);--bubble-border: var(--ion-border-color, #e6e2ec);--bubble-text: var(--ion-color-dark, #2f2a3a);--bubble-muted: var(--ion-color-medium, #6f6a7a);--bubble-soft: rgba(var(--ion-color-primary-rgb, 255, 0, 178), .08);--bubble-primary: #ff4f9f;--bubble-secondary: #18c7d4;--bubble-accent: #ffca3a;display:grid;gap:18px;max-width:760px;margin:0 auto;color:var(--bubble-text)}:host-context(html.ion-palette-dark) .bubble-shell,:host-context([data-theme=\"dark\"]) .bubble-shell{--bubble-panel: #211f2a;--bubble-border: rgba(255, 255, 255, .13);--bubble-text: #fff8ff;--bubble-muted: rgba(255, 248, 255, .68);--bubble-soft: rgba(255, 255, 255, .07)}.bubble-hero{display:grid;gap:10px;overflow:hidden;border-radius:28px;padding:clamp(28px,7vw,52px);background:radial-gradient(circle at 18% 18%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 82% 24%,rgba(255,202,58,.72),transparent 20%),linear-gradient(135deg,var(--bubble-primary),var(--bubble-secondary));color:#fff;text-align:center}.bubble-hero__badge{display:inline-flex;align-items:center;justify-self:center;gap:.4rem;border-radius:999px;padding:.4rem .75rem;background:#ffffff2e;font-size:.78rem;font-weight:950;text-transform:uppercase}.bubble-hero h1{margin:0;font-size:clamp(2.5rem,12vw,5rem);line-height:.92;font-weight:950}.bubble-hero p,.bubble-howto p,.bubble-leaderboard p,.bubble-result p{margin:0;color:inherit;line-height:1.45}.bubble-panel,.bubble-game,.bubble-leaderboard{display:grid;gap:16px;border:1px solid var(--bubble-border);border-radius:26px;padding:clamp(16px,4vw,24px);background:var(--bubble-panel)}.bubble-howto{display:grid;gap:6px;border-radius:20px;padding:16px;background:var(--bubble-soft)}.bubble-howto h2,.bubble-leaderboard h2{margin:0;color:var(--bubble-text)}.bubble-howto p,.bubble-leaderboard p{color:var(--bubble-muted)}.bubble-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.bubble-modes button{display:grid;gap:6px;min-height:116px;border:1px solid var(--bubble-border);border-radius:22px;padding:14px;background:var(--bubble-panel);color:var(--bubble-text);font:inherit;text-align:left}.bubble-modes button.is-selected{border-color:var(--bubble-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--bubble-primary),transparent 78%)}.bubble-modes strong,.bubble-status strong{font-weight:950}.bubble-modes small,.bubble-status small,.bubble-leaderboard small{color:var(--bubble-muted)}.bubble-primary,.bubble-secondary{min-height:58px;border-radius:999px;font:inherit;font-weight:950}.bubble-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;background:var(--bubble-primary);color:#fff;box-shadow:0 18px 45px color-mix(in srgb,var(--bubble-primary),transparent 72%)}.bubble-secondary{border:1px solid var(--bubble-border);background:transparent;color:var(--bubble-text)}.bubble-menu-actions,.bubble-actions{display:grid;gap:10px}.bubble-actions{position:sticky;bottom:10px;z-index:2;grid-template-columns:repeat(3,minmax(0,1fr));padding-top:12px;background:linear-gradient(to bottom,transparent,var(--bubble-panel) 28%)}.bubble-status{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.bubble-status div{display:grid;gap:2px;border-radius:18px;padding:12px;background:var(--bubble-soft);text-align:center}.bubble-status strong{font-size:1.6rem;line-height:1}.bubble-fever{position:relative;overflow:hidden;min-height:42px;display:grid;place-items:center;border:1px solid var(--bubble-border);border-radius:999px;background:var(--bubble-soft)}.bubble-fever span{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--bubble-accent),var(--bubble-primary));transition:width .18s ease}.bubble-fever strong{position:relative;z-index:1;font-size:.82rem;font-weight:950;text-transform:uppercase}.bubble-fever.is-ready strong{color:#2f2a3a}.bubble-board{--bubble-pop-ms: .19s;--bubble-settle-ms: .31s;display:grid;grid-template-columns:repeat(var(--bubble-cols),minmax(0,1fr));gap:clamp(.28rem,1.3vw,.55rem);width:min(100%,34rem);margin:0 auto;border-radius:28px;padding:clamp(.55rem,2vw,.9rem);background:radial-gradient(circle at 25% 18%,rgba(255,255,255,.7),transparent 20%),linear-gradient(135deg,#18c7d429,#ff4f9f29)}.bubble-board.is-animating{pointer-events:none}.bubble-cell{position:relative;aspect-ratio:1;border:0;border-radius:999px;background:radial-gradient(circle at 32% 24%,rgba(255,255,255,.86),rgba(255,255,255,.24) 22%,transparent 34%),radial-gradient(circle at 70% 78%,rgba(0,0,0,.18),transparent 38%),var(--bubble-color);box-shadow:inset 0 -.45rem .75rem #00000024,0 .5rem 1.1rem color-mix(in srgb,var(--bubble-color),transparent 72%);transform:scale(.98);transition:filter .14s ease,transform .14s ease,box-shadow .14s ease}.bubble-cell.is-popping{animation:bubble-pop var(--bubble-pop-ms, .19s) ease-out forwards}.bubble-cell.is-falling{animation:bubble-fall var(--bubble-settle-ms, .31s) cubic-bezier(.18,.88,.32,1.18) both}.bubble-cell.is-entering{animation:bubble-enter var(--bubble-settle-ms, .31s) cubic-bezier(.18,.88,.32,1.18) both}.bubble-cell.is-target{filter:saturate(1.18) brightness(1.08);transform:scale(1.05);box-shadow:inset 0 -.45rem .75rem #00000024,0 0 0 .16rem #ffffffc7,0 .75rem 1.5rem color-mix(in srgb,var(--bubble-color),transparent 55%)}.bubble-cell span{position:absolute;inset:auto .12rem .1rem auto;display:grid;place-items:center;min-width:1.15rem;height:1.15rem;border-radius:999px;background:#ffffffd1;color:#2f2a3a;font-size:.66rem;font-weight:950;opacity:0}.bubble-cell.is-target span{opacity:1}.bubble-board.is-finished .bubble-cell{opacity:.55}@keyframes bubble-pop{0%{opacity:1;transform:scale(1.04)}52%{opacity:1;transform:scale(1.22);filter:brightness(1.28) saturate(1.28)}to{opacity:0;transform:scale(.18);filter:brightness(1.55) saturate(1.35)}}@keyframes bubble-fall{0%{transform:translateY(calc(var(--bubble-drop, 0) * -100%)) scale(.98)}76%{transform:translateY(0) scale(1.05)}to{transform:translateY(0) scale(.98)}}@keyframes bubble-enter{0%{opacity:0;transform:translateY(calc((var(--bubble-drop, 1) + 1) * -100%)) scale(.58)}72%{opacity:1;transform:translateY(0) scale(1.08)}to{opacity:1;transform:translateY(0) scale(.98)}}.bubble-result{display:grid;gap:8px;justify-items:center;border-radius:22px;padding:16px;background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.12);text-align:center}.bubble-result ion-icon{color:var(--ion-color-success, #2dd36f);font-size:2rem}.bubble-result strong{font-size:1.35rem;font-weight:950}.bubble-result p{color:var(--bubble-muted)}.bubble-result div{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:8px 12px;background:var(--bubble-soft)}.bubble-result div span,.bubble-leaderboard li>span{display:grid;place-items:center;width:2.15rem;height:2.15rem;border-radius:999px;background:var(--player-color, var(--bubble-primary))}.bubble-leaderboard__title{display:flex;align-items:center;gap:10px}.bubble-leaderboard__title ion-icon{color:var(--bubble-primary);font-size:1.4rem}.bubble-leaderboard ol{display:grid;gap:8px;margin:0;padding:0;list-style:none}.bubble-leaderboard li{display:grid;grid-template-columns:2.15rem 1fr auto;gap:10px;align-items:center;border-radius:16px;padding:12px;background:var(--bubble-soft)}@media (max-width: 560px){.bubble-modes,.bubble-actions,.bubble-status{grid-template-columns:1fr}.bubble-board{width:100%}}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: ModalLayoutComponent, selector: "val-modal-layout", inputs: ["title", "subtitle", "closeLabel", "showClose", "actions", "actionsAlign", "footer", "footerClass"], outputs: ["close", "actionClick"] }] }); }
68084
68196
  }
68085
68197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BubbleBlitzGameComponent, decorators: [{
68086
68198
  type: Component,
@@ -68147,6 +68259,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68147
68259
  <div
68148
68260
  class="bubble-board"
68149
68261
  [class.is-finished]="phase() === 'finished'"
68262
+ [class.is-animating]="animating()"
68150
68263
  [style.--bubble-rows]="config().rows"
68151
68264
  [style.--bubble-cols]="config().cols"
68152
68265
  >
@@ -68155,8 +68268,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68155
68268
  type="button"
68156
68269
  class="bubble-cell"
68157
68270
  [class.is-target]="isTargetCell(cell)"
68271
+ [class.is-popping]="cell.state === 'popping'"
68272
+ [class.is-falling]="cell.state === 'falling'"
68273
+ [class.is-entering]="cell.state === 'entering'"
68158
68274
  [style.--bubble-color]="bubbleColor(cell.color)"
68159
- [disabled]="phase() !== 'playing'"
68275
+ [style.--bubble-drop]="cell.drop ?? 0"
68276
+ [disabled]="phase() !== 'playing' || animating()"
68160
68277
  (click)="popGroup(cell)"
68161
68278
  >
68162
68279
  <span>{{ groupSizeLabel(cell) }}</span>
@@ -68225,7 +68342,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68225
68342
  />
68226
68343
  </ng-template>
68227
68344
  </ion-modal>
68228
- `, styles: [":host{display:block}.bubble-shell{--bubble-panel: var(--ion-card-background, #ffffff);--bubble-border: var(--ion-border-color, #e6e2ec);--bubble-text: var(--ion-color-dark, #2f2a3a);--bubble-muted: var(--ion-color-medium, #6f6a7a);--bubble-soft: rgba(var(--ion-color-primary-rgb, 255, 0, 178), .08);--bubble-primary: #ff4f9f;--bubble-secondary: #18c7d4;--bubble-accent: #ffca3a;display:grid;gap:18px;max-width:760px;margin:0 auto;color:var(--bubble-text)}:host-context(html.ion-palette-dark) .bubble-shell,:host-context([data-theme=\"dark\"]) .bubble-shell{--bubble-panel: #211f2a;--bubble-border: rgba(255, 255, 255, .13);--bubble-text: #fff8ff;--bubble-muted: rgba(255, 248, 255, .68);--bubble-soft: rgba(255, 255, 255, .07)}.bubble-hero{display:grid;gap:10px;overflow:hidden;border-radius:28px;padding:clamp(28px,7vw,52px);background:radial-gradient(circle at 18% 18%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 82% 24%,rgba(255,202,58,.72),transparent 20%),linear-gradient(135deg,var(--bubble-primary),var(--bubble-secondary));color:#fff;text-align:center}.bubble-hero__badge{display:inline-flex;align-items:center;justify-self:center;gap:.4rem;border-radius:999px;padding:.4rem .75rem;background:#ffffff2e;font-size:.78rem;font-weight:950;text-transform:uppercase}.bubble-hero h1{margin:0;font-size:clamp(2.5rem,12vw,5rem);line-height:.92;font-weight:950}.bubble-hero p,.bubble-howto p,.bubble-leaderboard p,.bubble-result p{margin:0;color:inherit;line-height:1.45}.bubble-panel,.bubble-game,.bubble-leaderboard{display:grid;gap:16px;border:1px solid var(--bubble-border);border-radius:26px;padding:clamp(16px,4vw,24px);background:var(--bubble-panel)}.bubble-howto{display:grid;gap:6px;border-radius:20px;padding:16px;background:var(--bubble-soft)}.bubble-howto h2,.bubble-leaderboard h2{margin:0;color:var(--bubble-text)}.bubble-howto p,.bubble-leaderboard p{color:var(--bubble-muted)}.bubble-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.bubble-modes button{display:grid;gap:6px;min-height:116px;border:1px solid var(--bubble-border);border-radius:22px;padding:14px;background:var(--bubble-panel);color:var(--bubble-text);font:inherit;text-align:left}.bubble-modes button.is-selected{border-color:var(--bubble-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--bubble-primary),transparent 78%)}.bubble-modes strong,.bubble-status strong{font-weight:950}.bubble-modes small,.bubble-status small,.bubble-leaderboard small{color:var(--bubble-muted)}.bubble-primary,.bubble-secondary{min-height:58px;border-radius:999px;font:inherit;font-weight:950}.bubble-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;background:var(--bubble-primary);color:#fff;box-shadow:0 18px 45px color-mix(in srgb,var(--bubble-primary),transparent 72%)}.bubble-secondary{border:1px solid var(--bubble-border);background:transparent;color:var(--bubble-text)}.bubble-menu-actions,.bubble-actions{display:grid;gap:10px}.bubble-actions{position:sticky;bottom:10px;z-index:2;grid-template-columns:repeat(3,minmax(0,1fr));padding-top:12px;background:linear-gradient(to bottom,transparent,var(--bubble-panel) 28%)}.bubble-status{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.bubble-status div{display:grid;gap:2px;border-radius:18px;padding:12px;background:var(--bubble-soft);text-align:center}.bubble-status strong{font-size:1.6rem;line-height:1}.bubble-fever{position:relative;overflow:hidden;min-height:42px;display:grid;place-items:center;border:1px solid var(--bubble-border);border-radius:999px;background:var(--bubble-soft)}.bubble-fever span{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--bubble-accent),var(--bubble-primary));transition:width .18s ease}.bubble-fever strong{position:relative;z-index:1;font-size:.82rem;font-weight:950;text-transform:uppercase}.bubble-fever.is-ready strong{color:#2f2a3a}.bubble-board{display:grid;grid-template-columns:repeat(var(--bubble-cols),minmax(0,1fr));gap:clamp(.28rem,1.3vw,.55rem);width:min(100%,34rem);margin:0 auto;border-radius:28px;padding:clamp(.55rem,2vw,.9rem);background:radial-gradient(circle at 25% 18%,rgba(255,255,255,.7),transparent 20%),linear-gradient(135deg,#18c7d429,#ff4f9f29)}.bubble-cell{position:relative;aspect-ratio:1;border:0;border-radius:999px;background:radial-gradient(circle at 32% 24%,rgba(255,255,255,.86),rgba(255,255,255,.24) 22%,transparent 34%),radial-gradient(circle at 70% 78%,rgba(0,0,0,.18),transparent 38%),var(--bubble-color);box-shadow:inset 0 -.45rem .75rem #00000024,0 .5rem 1.1rem color-mix(in srgb,var(--bubble-color),transparent 72%);transform:scale(.98);transition:filter .14s ease,transform .14s ease,box-shadow .14s ease}.bubble-cell.is-target{filter:saturate(1.18) brightness(1.08);transform:scale(1.05);box-shadow:inset 0 -.45rem .75rem #00000024,0 0 0 .16rem #ffffffc7,0 .75rem 1.5rem color-mix(in srgb,var(--bubble-color),transparent 55%)}.bubble-cell span{position:absolute;inset:auto .12rem .1rem auto;display:grid;place-items:center;min-width:1.15rem;height:1.15rem;border-radius:999px;background:#ffffffd1;color:#2f2a3a;font-size:.66rem;font-weight:950;opacity:0}.bubble-cell.is-target span{opacity:1}.bubble-board.is-finished .bubble-cell{opacity:.55}.bubble-result{display:grid;gap:8px;justify-items:center;border-radius:22px;padding:16px;background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.12);text-align:center}.bubble-result ion-icon{color:var(--ion-color-success, #2dd36f);font-size:2rem}.bubble-result strong{font-size:1.35rem;font-weight:950}.bubble-result p{color:var(--bubble-muted)}.bubble-result div{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:8px 12px;background:var(--bubble-soft)}.bubble-result div span,.bubble-leaderboard li>span{display:grid;place-items:center;width:2.15rem;height:2.15rem;border-radius:999px;background:var(--player-color, var(--bubble-primary))}.bubble-leaderboard__title{display:flex;align-items:center;gap:10px}.bubble-leaderboard__title ion-icon{color:var(--bubble-primary);font-size:1.4rem}.bubble-leaderboard ol{display:grid;gap:8px;margin:0;padding:0;list-style:none}.bubble-leaderboard li{display:grid;grid-template-columns:2.15rem 1fr auto;gap:10px;align-items:center;border-radius:16px;padding:12px;background:var(--bubble-soft)}@media (max-width: 560px){.bubble-modes,.bubble-actions,.bubble-status{grid-template-columns:1fr}.bubble-board{width:100%}}\n"] }]
68345
+ `, styles: [":host{display:block}.bubble-shell{--bubble-panel: var(--ion-card-background, #ffffff);--bubble-border: var(--ion-border-color, #e6e2ec);--bubble-text: var(--ion-color-dark, #2f2a3a);--bubble-muted: var(--ion-color-medium, #6f6a7a);--bubble-soft: rgba(var(--ion-color-primary-rgb, 255, 0, 178), .08);--bubble-primary: #ff4f9f;--bubble-secondary: #18c7d4;--bubble-accent: #ffca3a;display:grid;gap:18px;max-width:760px;margin:0 auto;color:var(--bubble-text)}:host-context(html.ion-palette-dark) .bubble-shell,:host-context([data-theme=\"dark\"]) .bubble-shell{--bubble-panel: #211f2a;--bubble-border: rgba(255, 255, 255, .13);--bubble-text: #fff8ff;--bubble-muted: rgba(255, 248, 255, .68);--bubble-soft: rgba(255, 255, 255, .07)}.bubble-hero{display:grid;gap:10px;overflow:hidden;border-radius:28px;padding:clamp(28px,7vw,52px);background:radial-gradient(circle at 18% 18%,rgba(255,255,255,.58),transparent 18%),radial-gradient(circle at 82% 24%,rgba(255,202,58,.72),transparent 20%),linear-gradient(135deg,var(--bubble-primary),var(--bubble-secondary));color:#fff;text-align:center}.bubble-hero__badge{display:inline-flex;align-items:center;justify-self:center;gap:.4rem;border-radius:999px;padding:.4rem .75rem;background:#ffffff2e;font-size:.78rem;font-weight:950;text-transform:uppercase}.bubble-hero h1{margin:0;font-size:clamp(2.5rem,12vw,5rem);line-height:.92;font-weight:950}.bubble-hero p,.bubble-howto p,.bubble-leaderboard p,.bubble-result p{margin:0;color:inherit;line-height:1.45}.bubble-panel,.bubble-game,.bubble-leaderboard{display:grid;gap:16px;border:1px solid var(--bubble-border);border-radius:26px;padding:clamp(16px,4vw,24px);background:var(--bubble-panel)}.bubble-howto{display:grid;gap:6px;border-radius:20px;padding:16px;background:var(--bubble-soft)}.bubble-howto h2,.bubble-leaderboard h2{margin:0;color:var(--bubble-text)}.bubble-howto p,.bubble-leaderboard p{color:var(--bubble-muted)}.bubble-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.bubble-modes button{display:grid;gap:6px;min-height:116px;border:1px solid var(--bubble-border);border-radius:22px;padding:14px;background:var(--bubble-panel);color:var(--bubble-text);font:inherit;text-align:left}.bubble-modes button.is-selected{border-color:var(--bubble-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--bubble-primary),transparent 78%)}.bubble-modes strong,.bubble-status strong{font-weight:950}.bubble-modes small,.bubble-status small,.bubble-leaderboard small{color:var(--bubble-muted)}.bubble-primary,.bubble-secondary{min-height:58px;border-radius:999px;font:inherit;font-weight:950}.bubble-primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;background:var(--bubble-primary);color:#fff;box-shadow:0 18px 45px color-mix(in srgb,var(--bubble-primary),transparent 72%)}.bubble-secondary{border:1px solid var(--bubble-border);background:transparent;color:var(--bubble-text)}.bubble-menu-actions,.bubble-actions{display:grid;gap:10px}.bubble-actions{position:sticky;bottom:10px;z-index:2;grid-template-columns:repeat(3,minmax(0,1fr));padding-top:12px;background:linear-gradient(to bottom,transparent,var(--bubble-panel) 28%)}.bubble-status{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.bubble-status div{display:grid;gap:2px;border-radius:18px;padding:12px;background:var(--bubble-soft);text-align:center}.bubble-status strong{font-size:1.6rem;line-height:1}.bubble-fever{position:relative;overflow:hidden;min-height:42px;display:grid;place-items:center;border:1px solid var(--bubble-border);border-radius:999px;background:var(--bubble-soft)}.bubble-fever span{position:absolute;inset:0 auto 0 0;background:linear-gradient(90deg,var(--bubble-accent),var(--bubble-primary));transition:width .18s ease}.bubble-fever strong{position:relative;z-index:1;font-size:.82rem;font-weight:950;text-transform:uppercase}.bubble-fever.is-ready strong{color:#2f2a3a}.bubble-board{--bubble-pop-ms: .19s;--bubble-settle-ms: .31s;display:grid;grid-template-columns:repeat(var(--bubble-cols),minmax(0,1fr));gap:clamp(.28rem,1.3vw,.55rem);width:min(100%,34rem);margin:0 auto;border-radius:28px;padding:clamp(.55rem,2vw,.9rem);background:radial-gradient(circle at 25% 18%,rgba(255,255,255,.7),transparent 20%),linear-gradient(135deg,#18c7d429,#ff4f9f29)}.bubble-board.is-animating{pointer-events:none}.bubble-cell{position:relative;aspect-ratio:1;border:0;border-radius:999px;background:radial-gradient(circle at 32% 24%,rgba(255,255,255,.86),rgba(255,255,255,.24) 22%,transparent 34%),radial-gradient(circle at 70% 78%,rgba(0,0,0,.18),transparent 38%),var(--bubble-color);box-shadow:inset 0 -.45rem .75rem #00000024,0 .5rem 1.1rem color-mix(in srgb,var(--bubble-color),transparent 72%);transform:scale(.98);transition:filter .14s ease,transform .14s ease,box-shadow .14s ease}.bubble-cell.is-popping{animation:bubble-pop var(--bubble-pop-ms, .19s) ease-out forwards}.bubble-cell.is-falling{animation:bubble-fall var(--bubble-settle-ms, .31s) cubic-bezier(.18,.88,.32,1.18) both}.bubble-cell.is-entering{animation:bubble-enter var(--bubble-settle-ms, .31s) cubic-bezier(.18,.88,.32,1.18) both}.bubble-cell.is-target{filter:saturate(1.18) brightness(1.08);transform:scale(1.05);box-shadow:inset 0 -.45rem .75rem #00000024,0 0 0 .16rem #ffffffc7,0 .75rem 1.5rem color-mix(in srgb,var(--bubble-color),transparent 55%)}.bubble-cell span{position:absolute;inset:auto .12rem .1rem auto;display:grid;place-items:center;min-width:1.15rem;height:1.15rem;border-radius:999px;background:#ffffffd1;color:#2f2a3a;font-size:.66rem;font-weight:950;opacity:0}.bubble-cell.is-target span{opacity:1}.bubble-board.is-finished .bubble-cell{opacity:.55}@keyframes bubble-pop{0%{opacity:1;transform:scale(1.04)}52%{opacity:1;transform:scale(1.22);filter:brightness(1.28) saturate(1.28)}to{opacity:0;transform:scale(.18);filter:brightness(1.55) saturate(1.35)}}@keyframes bubble-fall{0%{transform:translateY(calc(var(--bubble-drop, 0) * -100%)) scale(.98)}76%{transform:translateY(0) scale(1.05)}to{transform:translateY(0) scale(.98)}}@keyframes bubble-enter{0%{opacity:0;transform:translateY(calc((var(--bubble-drop, 1) + 1) * -100%)) scale(.58)}72%{opacity:1;transform:translateY(0) scale(1.08)}to{opacity:1;transform:translateY(0) scale(.98)}}.bubble-result{display:grid;gap:8px;justify-items:center;border-radius:22px;padding:16px;background:rgba(var(--ion-color-success-rgb, 45, 211, 111),.12);text-align:center}.bubble-result ion-icon{color:var(--ion-color-success, #2dd36f);font-size:2rem}.bubble-result strong{font-size:1.35rem;font-weight:950}.bubble-result p{color:var(--bubble-muted)}.bubble-result div{display:inline-flex;align-items:center;gap:8px;border-radius:999px;padding:8px 12px;background:var(--bubble-soft)}.bubble-result div span,.bubble-leaderboard li>span{display:grid;place-items:center;width:2.15rem;height:2.15rem;border-radius:999px;background:var(--player-color, var(--bubble-primary))}.bubble-leaderboard__title{display:flex;align-items:center;gap:10px}.bubble-leaderboard__title ion-icon{color:var(--bubble-primary);font-size:1.4rem}.bubble-leaderboard ol{display:grid;gap:8px;margin:0;padding:0;list-style:none}.bubble-leaderboard li{display:grid;grid-template-columns:2.15rem 1fr auto;gap:10px;align-items:center;border-radius:16px;padding:12px;background:var(--bubble-soft)}@media (max-width: 560px){.bubble-modes,.bubble-actions,.bubble-status{grid-template-columns:1fr}.bubble-board{width:100%}}\n"] }]
68229
68346
  }], ctorParameters: () => [], propDecorators: { miniGamesRoute: [{
68230
68347
  type: Input
68231
68348
  }] } });