├── .editorconfig ├── .env.development.local ├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── cypress.yml │ ├── jest.yml │ └── update-release-version.yml ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc.yaml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── _redirects ├── cypress.config.ts ├── cypress ├── e2e │ ├── Expeditions │ │ ├── creationAndRunThrough.cy.ts │ │ ├── expeditionspage.cy.ts │ │ └── seeds.cy.ts │ ├── Settings │ │ ├── SupplySetups │ │ │ └── creationAndRunThrough.cy.ts │ │ └── settingsPage.cy.ts │ └── landingpage.cy.ts ├── fixtures │ └── example.json ├── plugins │ └── index.js ├── support │ ├── commands.js │ └── e2e.js └── tsconfig.json ├── dataParser ├── README.md ├── aeonsEnd.js ├── buriedSecrets.js ├── data.csv ├── index.js ├── intoTheWild.js ├── legacy.js ├── outerDark.js ├── package.json ├── promos.js ├── shatteredDreams.js ├── theAncients.js ├── theDepths.js ├── theNameless.js ├── theNewAge.js ├── theVoid.js └── warEternal.js ├── docker ├── Dockerfile ├── docker-compose.yml └── nginx.conf ├── docs ├── .nojekyll ├── CustomExpeditions │ ├── API.md │ ├── Example.md │ ├── FAQ.md │ ├── README.md │ ├── Types.md │ ├── _sidebar.md │ └── expeditions-preview.png ├── README.md ├── Seeds.md ├── _sidebar.md ├── android-icon-96x96.png └── index.html ├── expeditions ├── intoTheWild.json ├── newAge.json └── outcasts.json ├── package.json ├── public ├── images │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-512x512.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── index.html └── manifest.json ├── src ├── Redux │ ├── Store │ │ ├── Expeditions │ │ │ ├── Expeditions │ │ │ │ ├── __test__ │ │ │ │ │ ├── __fixtures__ │ │ │ │ │ │ └── expeditions.ts │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ └── reducer.test.ts │ │ │ │ ├── actions.ts │ │ │ │ ├── helpers │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── calcBattleScore.test.ts │ │ │ │ │ │ ├── convertExpeditionFromConfig.test.ts │ │ │ │ │ │ └── convertExpeditionToConfig.test.ts │ │ │ │ │ ├── convertExpeditionFromConfig.ts │ │ │ │ │ ├── convertExpeditionToConfig.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── migrations │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __fixtures__ │ │ │ │ │ │ │ └── oldStyleExpedition.ts │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── migrations.test.ts.snap │ │ │ │ │ │ ├── migrateToExpeditionDSL.test.ts │ │ │ │ │ │ └── migrations.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrateToExpeditionDSL.ts │ │ │ │ │ └── migrateToSettingsSnapshot.ts │ │ │ │ ├── reducer.ts │ │ │ │ ├── reducerHelpers │ │ │ │ │ ├── acceptLoss.ts │ │ │ │ │ ├── acceptRewards.ts │ │ │ │ │ ├── createExpedition.ts │ │ │ │ │ ├── deleteExpedition.ts │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ ├── finishBattle.ts │ │ │ │ │ ├── finishExpedition.ts │ │ │ │ │ ├── generateRewards.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── loseBattle.ts │ │ │ │ │ ├── migrateAfterFetch.ts │ │ │ │ │ ├── resolveNarrative.ts │ │ │ │ │ ├── rollBattle.ts │ │ │ │ │ ├── rollLoss.ts │ │ │ │ │ ├── shareExpedition.ts │ │ │ │ │ ├── startBattle.ts │ │ │ │ │ └── winBattle.ts │ │ │ │ ├── selectors.ts │ │ │ │ ├── sideEffects │ │ │ │ │ ├── createBattle │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ ├── createBattle.test.ts │ │ │ │ │ │ │ ├── getStillAvailableNemesisIds.test.ts │ │ │ │ │ │ │ ├── getUpgdaredBasicNemesisIdsByBattleTier.test.ts │ │ │ │ │ │ │ ├── getUpgradedBasicNemesisCardsResult.test.ts │ │ │ │ │ │ │ ├── rollNemesisId.test.ts │ │ │ │ │ │ │ └── rollNewUpgradedNemesisCards.test.ts │ │ │ │ │ │ ├── getStillAvailableNemesisIds.ts │ │ │ │ │ │ ├── getUpgradedBasicNemesisCardsResult.ts │ │ │ │ │ │ ├── getUpgradedBasicNemesisIdsByBattleTier.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── rollNemesisId.ts │ │ │ │ │ │ └── rollNewUpgradedNemesisCards.ts │ │ │ │ │ ├── createExpeditionConfig │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── createExpeditionConfig.test.ts.snap │ │ │ │ │ │ │ ├── createExpeditionConfig.test.ts │ │ │ │ │ │ │ ├── createSupplyIds.test.ts │ │ │ │ │ │ │ ├── createTreasureIds.test.ts │ │ │ │ │ │ │ └── generateBattles.test.ts │ │ │ │ │ │ ├── createSupplyIds.ts │ │ │ │ │ │ ├── createTreasureIds.ts │ │ │ │ │ │ ├── generateBattles.ts │ │ │ │ │ │ ├── handleExistingConfig.ts │ │ │ │ │ │ ├── handleWithoutConfig.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── createRewards │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── createSettingsSnapshot │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ ├── createSettingsSnapshot.test.ts.snap │ │ │ │ │ │ │ │ ├── handleExistingSettingsSnapshot.test.ts.snap │ │ │ │ │ │ │ │ └── handleNewSettingsSnapshot.test.ts.snap │ │ │ │ │ │ │ ├── createSettingsSnapshot.test.ts │ │ │ │ │ │ │ ├── determineUsedExpansions.test.ts │ │ │ │ │ │ │ ├── handleExistingSettingsSnapshot.test.ts │ │ │ │ │ │ │ └── handleNewSettingsSnapshot.test.ts │ │ │ │ │ │ ├── determineUsedExpansions.ts │ │ │ │ │ │ ├── handleExistingSettingsSnapshot.ts │ │ │ │ │ │ ├── handleNewSettingsSnapshot.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── helpers.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rollLossRewards │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ ├── handleBanner.test.ts │ │ │ │ │ │ │ ├── handleMage.test.ts │ │ │ │ │ │ │ ├── handleRewardType.test.ts │ │ │ │ │ │ │ ├── handleSupply.test.ts │ │ │ │ │ │ │ └── handleTreasure.test.ts │ │ │ │ │ │ ├── handleBanner.ts │ │ │ │ │ │ ├── handleMage.ts │ │ │ │ │ │ ├── handleSupply.ts │ │ │ │ │ │ ├── handleTreasure.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── rollWinRewards │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ ├── __fixtures__ │ │ │ │ │ │ │ │ └── expeditionState.ts │ │ │ │ │ │ │ ├── rollSupplyRewards.test.ts │ │ │ │ │ │ │ ├── rollTreasureIdsByLevel.test.ts │ │ │ │ │ │ │ └── rollWinRewards.test.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── rollSupplyRewards.ts │ │ │ │ │ │ └── rollTreasureIdsByLevel.ts │ │ │ │ │ └── shareExpedition │ │ │ │ │ │ └── index.ts │ │ │ │ └── types.ts │ │ │ ├── Variants.ts │ │ │ └── index.ts │ │ ├── MainContentLoading │ │ │ ├── __test__ │ │ │ │ └── reducer.test.ts │ │ │ └── index.ts │ │ ├── Randomizer │ │ │ ├── BasicNemesisCards │ │ │ │ ├── RandomCards │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ ├── actions.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reducer.ts │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ ├── drawMinions.test.ts │ │ │ │ │ │ │ ├── drawPowersAndAttacks.test.ts │ │ │ │ │ │ │ ├── getBasicNemesisCardsByTier.test.ts │ │ │ │ │ │ │ ├── getRandomBasicNemesisCardsByTier.test.ts │ │ │ │ │ │ │ └── getRandomMinionAmount.test.ts │ │ │ │ │ │ ├── createDeck.ts │ │ │ │ │ │ ├── helpers.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ └── types.ts │ │ │ │ └── index.ts │ │ │ ├── FriendFoe │ │ │ │ └── index.ts │ │ │ ├── Mages │ │ │ │ ├── Count │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Recruited │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── Nemesis │ │ │ │ ├── __test__ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ └── selectors.test.ts │ │ │ │ └── index.ts │ │ │ ├── Supply │ │ │ │ ├── LockedCards │ │ │ │ │ └── index.ts │ │ │ │ ├── RandomSetup │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── Settings │ │ │ ├── Accordions.ts │ │ │ ├── Expansions │ │ │ │ ├── Banners │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggleBanner.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── BasicNemesisCards │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggleCard.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── Cards │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── deselectCards.ts │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggleCard.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── Expansions │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggleExpansion.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── Foes │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggleFoe.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── Friends │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggleFriend.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── GlobalLanguage │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ ├── actions.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reducer.ts │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── select.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Languages │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ ├── actions.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── reducer.ts │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── select.ts │ │ │ │ │ ├── selectors.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── Mages │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggle.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── Nemeses │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggle.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── Treasures │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggle.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── UpgradedBasicNemesisCards │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── ids │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── selected │ │ │ │ │ │ ├── __test__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── reducer.test.ts.snap │ │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ │ └── selectors.test.ts │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── reducer.ts │ │ │ │ │ │ ├── reducerHelpers │ │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggle.ts │ │ │ │ │ │ ├── selectors.ts │ │ │ │ │ │ ├── sideEffects.ts │ │ │ │ │ │ └── types.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── types.ts │ │ │ ├── SupplySetups │ │ │ │ ├── __test__ │ │ │ │ │ ├── helpers.test.ts │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ └── selectors.test.ts │ │ │ │ ├── actions.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── migrations │ │ │ │ │ ├── index.ts │ │ │ │ │ └── migrateToPredefinedWithIds.ts │ │ │ │ ├── reducer.ts │ │ │ │ ├── reducerHelpers │ │ │ │ │ ├── cancelEditSetup.ts │ │ │ │ │ ├── deleteCustomSetup.ts │ │ │ │ │ ├── editCustomSetup.ts │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── migrateAfterFetch.ts │ │ │ │ │ ├── saveCustomSetup.ts │ │ │ │ │ ├── toggleAll.ts │ │ │ │ │ └── toggleSetup.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── types.ts │ │ │ ├── __test__ │ │ │ │ └── Accordions.test.ts │ │ │ └── index.ts │ │ ├── Snackbars │ │ │ ├── __test__ │ │ │ │ ├── reducer.test.ts │ │ │ │ └── selectors.test.ts │ │ │ ├── actions.ts │ │ │ ├── index.ts │ │ │ ├── reducer.ts │ │ │ ├── selectors.ts │ │ │ └── types.ts │ │ ├── TurnOrder │ │ │ ├── ActiveGame │ │ │ │ ├── __test__ │ │ │ │ │ ├── helpers.test.ts │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ └── selectors.test.ts │ │ │ │ ├── actions.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── reducer.ts │ │ │ │ ├── reducerHelpers │ │ │ │ │ ├── addToBottom.ts │ │ │ │ │ ├── addToTop.ts │ │ │ │ │ ├── draw.ts │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── newRound.ts │ │ │ │ │ ├── resetGame.ts │ │ │ │ │ ├── shuffleIntoDeck.ts │ │ │ │ │ └── startGame.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── types.ts │ │ │ ├── Configuration │ │ │ │ ├── __test__ │ │ │ │ │ ├── helpers.test.ts │ │ │ │ │ ├── reducer.test.ts │ │ │ │ │ └── selectors.test.ts │ │ │ │ ├── actions.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── helpers.ts │ │ │ │ ├── index.ts │ │ │ │ ├── reducer.ts │ │ │ │ ├── reducerHelpers │ │ │ │ │ ├── fetchFromDb.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── selectPlayerCount.ts │ │ │ │ │ ├── selectSetup.ts │ │ │ │ │ └── setMode.ts │ │ │ │ ├── selectors.ts │ │ │ │ └── types.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ └── selectors.ts │ ├── __test__ │ │ └── helpers │ │ │ ├── __snapshots__ │ │ │ ├── createCardList.test.ts.snap │ │ │ ├── createIdList.test.ts.snap │ │ │ ├── createMageList.test.ts.snap │ │ │ └── createTurnOrderCardList.test.ts.snap │ │ │ ├── createArrayWithDefaultValues.test.ts │ │ │ ├── createCardList.test.ts │ │ │ ├── createIdList.test.ts │ │ │ ├── createMageList.test.ts │ │ │ ├── createSlotList.test.ts │ │ │ ├── createTurnOrderCardList.test.ts │ │ │ ├── filterByCost.test.ts │ │ │ └── getOperationString.test.ts │ ├── configureStore.ts │ └── helpers.ts ├── __fixtures__ │ ├── exampleExpeditionConfig.ts │ └── rootState.ts ├── aer-data │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── package.json │ ├── src │ │ ├── DE │ │ │ ├── aeonsEnd │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── buriedSecrets │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── index.ts │ │ │ ├── intoTheWild │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── legacy │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── outerDark │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── promos │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── shatteredDreams │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── theAncients │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theDepths │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theNameless │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theNewAge │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theVoid │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ └── warEternal │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ ├── ENG │ │ │ ├── PFPromos │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── TDPromos │ │ │ │ ├── banners.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ └── treasures.ts │ │ │ ├── aeonsEnd │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── buriedSecrets │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── community │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── evolutions │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── index.ts │ │ │ ├── intoTheWild │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── legacy │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── legacyOfGravehold │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── origins │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── outcasts │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── outerDark │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── pastAndFuture │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── promos │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── returnToGravehold │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── shatteredDreams │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── southernVillage │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── talesOfOldGravehold │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theAbyss │ │ │ │ ├── banners.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── foes.ts │ │ │ │ ├── friends.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── theAncients │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theCaverns │ │ │ │ ├── banners.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── foes.ts │ │ │ │ ├── friends.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── theDepths │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theDescent │ │ │ │ ├── banners.ts │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── foes.ts │ │ │ │ ├── friends.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theNameless │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theNewAge │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theRuins │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theVoid │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ └── warEternal │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ ├── FR │ │ │ ├── aeonsEnd │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── buriedSecrets │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── index.ts │ │ │ ├── legacy │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── outcasts │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── outerDark │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── shatteredDreams │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── theDepths │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theNameless │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theVoid │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ └── warEternal │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ ├── PL │ │ │ ├── aeonsEnd │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── buriedSecrets │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── index.ts │ │ │ ├── intoTheWild │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── legacy │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── outerDark │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── promos │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── shatteredDreams │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ └── treasures.ts │ │ │ ├── theAncients │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theDepths │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theNameless │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ ├── theNewAge │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ ├── nemeses.ts │ │ │ │ ├── treasures.ts │ │ │ │ └── upgradedBasicNemesisCards.ts │ │ │ ├── theVoid │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ │ └── warEternal │ │ │ │ ├── basicNemesisCards.ts │ │ │ │ ├── cards.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mages.ts │ │ │ │ └── nemeses.ts │ │ ├── createNormalizedData.ts │ │ ├── index.ts │ │ ├── marketSetups.ts │ │ └── turnOrderSetups.ts │ ├── tsconfig.cjs.json │ ├── tsconfig.json │ └── yarn.lock ├── aer-types │ ├── .npmignore │ ├── README.md │ ├── package.json │ ├── tsconfig.json │ ├── tsconfig.standalone.json │ └── types │ │ ├── data.ts │ │ ├── expeditions.ts │ │ ├── index.ts │ │ ├── market.ts │ │ ├── settings.ts │ │ └── turnOrder.ts ├── components │ ├── App │ │ ├── MainApp.tsx │ │ ├── Wrapper.tsx │ │ ├── appStyles.ts │ │ └── index.tsx │ ├── atoms │ │ ├── A.tsx │ │ ├── Ability.tsx │ │ ├── Button.tsx │ │ ├── Card.tsx │ │ ├── Effect.tsx │ │ ├── H1.tsx │ │ ├── H2.tsx │ │ ├── Heading.tsx │ │ ├── IconButton.tsx │ │ ├── Keyword.tsx │ │ ├── Keywords.tsx │ │ ├── Li.tsx │ │ ├── ModalBodyWrapper.tsx │ │ ├── ModalFooterWrapper.tsx │ │ ├── P.tsx │ │ ├── SectionHeadline.tsx │ │ ├── SelectField.tsx │ │ └── ShuffleButton.tsx │ ├── molecules │ │ ├── AdditionalInfo.tsx │ │ ├── AmountPicker.tsx │ │ ├── BackLink │ │ │ ├── Link.tsx │ │ │ └── index.tsx │ │ ├── BasicNemesisCardInformation │ │ │ └── index.tsx │ │ ├── BasicNemesisCardModal │ │ │ └── index.tsx │ │ ├── BottomNavigation │ │ │ ├── Link.tsx │ │ │ ├── StyledLink.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── CheckboxWithControls.tsx │ │ ├── CheckboxWithDetails.tsx │ │ ├── CopyButton.tsx │ │ ├── DeleteButton.tsx │ │ ├── EditButton.tsx │ │ ├── ExpansionPanel │ │ │ ├── ExpansionPanelDetails.tsx │ │ │ ├── StyledExpansionPanel.tsx │ │ │ ├── StyledExpansionPanelSummary.tsx │ │ │ └── index.tsx │ │ ├── FoeInformation │ │ │ └── index.tsx │ │ ├── FoeModal │ │ │ └── index.tsx │ │ ├── FriendInformation │ │ │ └── index.tsx │ │ ├── FriendModal │ │ │ └── index.tsx │ │ ├── FriendOrFoeAttackTile │ │ │ ├── Body.tsx │ │ │ ├── Name.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── InfoItem │ │ │ ├── Info.tsx │ │ │ ├── InfoLabel.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── Label.tsx │ │ ├── Link.tsx │ │ ├── ListWrapper │ │ │ └── index.tsx │ │ ├── LockButton │ │ │ ├── Button.tsx │ │ │ └── index.tsx │ │ ├── MageInformation │ │ │ └── index.tsx │ │ ├── MageList │ │ │ ├── MageGridWrapper.tsx │ │ │ ├── MageTile │ │ │ │ ├── Body.tsx │ │ │ │ ├── ExpansionName.tsx │ │ │ │ ├── Name.tsx │ │ │ │ ├── NameLine.tsx │ │ │ │ ├── Title.tsx │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── MageModal │ │ │ └── index.tsx │ │ ├── MarketSelect │ │ │ ├── MarketOptionsWrapper.tsx │ │ │ └── index.tsx │ │ ├── MarketTile │ │ │ ├── Body.tsx │ │ │ ├── CostOperation.tsx │ │ │ ├── Name.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── Modal │ │ │ ├── Backdrop.tsx │ │ │ ├── Body.tsx │ │ │ ├── CloseButton.tsx │ │ │ ├── Content.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ ├── Title.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── Navigation.tsx │ │ ├── NemesisCardTile │ │ │ ├── Body.tsx │ │ │ ├── Name.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── NemesisInformation │ │ │ ├── AdditionalInfo.tsx │ │ │ └── index.tsx │ │ ├── NemesisModal │ │ │ └── index.tsx │ │ ├── NoSelectedExpansions.tsx │ │ ├── PlayerCountSelection.tsx │ │ ├── Prompt.tsx │ │ ├── ShareButton.tsx │ │ ├── ShowDetailsButton │ │ │ ├── Button.tsx │ │ │ └── index.tsx │ │ ├── Snackbars │ │ │ ├── Snackbar.tsx │ │ │ ├── __styled__ │ │ │ │ ├── CloseButton.tsx │ │ │ │ ├── Content.tsx │ │ │ │ └── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── SupplyCardInformation │ │ │ └── index.tsx │ │ ├── SupplyList │ │ │ ├── ListWrapper.tsx │ │ │ └── index.tsx │ │ ├── SupplyModal │ │ │ └── index.tsx │ │ ├── SupplyPreview │ │ │ ├── SupplyName.tsx │ │ │ ├── TileList.tsx │ │ │ ├── TileListItem.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── SupplySelection │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── Tile │ │ │ ├── Content.tsx │ │ │ ├── Icon.tsx │ │ │ ├── TypeIcon.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── Tooltip.tsx │ │ ├── TreasureInformation │ │ │ └── index.tsx │ │ ├── TreasureList │ │ │ ├── TreasureGridWrapper.tsx │ │ │ ├── TreasureTile │ │ │ │ ├── Body.tsx │ │ │ │ ├── Name.tsx │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── TreasureModal │ │ │ └── index.tsx │ │ ├── UniqueStarter │ │ │ ├── Body.tsx │ │ │ ├── Name.tsx │ │ │ ├── UniqueStartersWrapper.tsx │ │ │ └── index.tsx │ │ └── UpgradedBasicNemesisCardList │ │ │ ├── UpgradedBasicNemesisCardGridWrapper.tsx │ │ │ └── index.tsx │ ├── organisms │ │ ├── Content │ │ │ ├── HeaderPlaceholder.tsx │ │ │ ├── Routing.tsx │ │ │ ├── Wrapper.tsx │ │ │ └── index.tsx │ │ ├── DrawerMenu │ │ │ ├── AppInfo.tsx │ │ │ ├── Drawer.tsx │ │ │ ├── GitHubLink.tsx │ │ │ ├── GitHubLogo.tsx │ │ │ ├── Header.tsx │ │ │ ├── github-logo.svg │ │ │ └── index.tsx │ │ └── TopBar │ │ │ ├── AppBar.tsx │ │ │ ├── MenuButton │ │ │ └── index.tsx │ │ │ ├── Title.tsx │ │ │ └── index.tsx │ └── pages │ │ ├── About │ │ └── index.tsx │ │ ├── Expeditions │ │ ├── Controls.tsx │ │ ├── Copy.tsx │ │ ├── CreationDialog │ │ │ ├── BigPocketSelect.tsx │ │ │ ├── ConfigImport │ │ │ │ ├── ConfigTextField.tsx │ │ │ │ ├── ContentWrapper.tsx │ │ │ │ ├── FileUpload.tsx │ │ │ │ ├── ImportButton.tsx │ │ │ │ ├── expeditionJsonSchema.ts │ │ │ │ └── index.tsx │ │ │ ├── CreateButton.tsx │ │ │ ├── FormLabel.tsx │ │ │ ├── FriendFoeSelect.tsx │ │ │ ├── MarketSelect.tsx │ │ │ ├── NameInput.tsx │ │ │ ├── SeedInput.tsx │ │ │ ├── UniqueMageNamesSelect.tsx │ │ │ ├── VariantSelect.tsx │ │ │ └── index.tsx │ │ ├── Delete.tsx │ │ ├── Expedition │ │ │ ├── Barracks │ │ │ │ ├── Banished.tsx │ │ │ │ ├── Banner.tsx │ │ │ │ ├── BarracksContent.tsx │ │ │ │ ├── Mages.tsx │ │ │ │ ├── Supply.tsx │ │ │ │ ├── Treasure.tsx │ │ │ │ ├── UpgradedBasicNemeses.tsx │ │ │ │ └── index.tsx │ │ │ ├── Branch │ │ │ │ ├── BannerReward.tsx │ │ │ │ ├── Battle │ │ │ │ │ ├── BattleLost │ │ │ │ │ │ ├── LossRewardTypeSelection │ │ │ │ │ │ │ ├── ConfirmButton.tsx │ │ │ │ │ │ │ ├── RewardSelect.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BattleStarted │ │ │ │ │ │ ├── BattleLostButton.tsx │ │ │ │ │ │ ├── BattleWonButton.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BattleTile │ │ │ │ │ │ ├── Body.tsx │ │ │ │ │ │ ├── Name.tsx │ │ │ │ │ │ ├── Unlocked.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BattleWon │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── BeforeBattle │ │ │ │ │ │ ├── BattleOverview.tsx │ │ │ │ │ │ ├── StartBattleButton.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── SpecialRules.tsx │ │ │ │ │ ├── handleBattleClick.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── useStateModals.ts │ │ │ │ ├── BodyWrapper.tsx │ │ │ │ ├── BranchWrapper.tsx │ │ │ │ ├── ExpeditionFinished │ │ │ │ │ ├── FinishExpeditionButton.tsx │ │ │ │ │ ├── WinOverview.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Locked.tsx │ │ │ │ ├── MageReward.tsx │ │ │ │ ├── Narrative │ │ │ │ │ ├── NarrativeTile │ │ │ │ │ │ ├── Unlocked.tsx │ │ │ │ │ │ ├── UnlockedIcon.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── NarrativeUnlocked │ │ │ │ │ │ ├── DecisionButton.tsx │ │ │ │ │ │ ├── Decisions.tsx │ │ │ │ │ │ ├── Text.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── handleNarrativeClick.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── Reward │ │ │ │ │ ├── RewardTile │ │ │ │ │ │ ├── Unlocked.tsx │ │ │ │ │ │ ├── UnlockedIcon.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RewardUnlocked │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── handleRewardClick.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── RewardScreen │ │ │ │ │ ├── ContinueButton.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── SupplyReward.tsx │ │ │ │ ├── TreasureReward.tsx │ │ │ │ ├── Unlocked.tsx │ │ │ │ ├── helpers.ts │ │ │ │ └── index.tsx │ │ │ ├── Header │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ExpeditionList.tsx │ │ ├── ExpeditionTile │ │ │ ├── Body.tsx │ │ │ ├── List.tsx │ │ │ ├── Name.tsx │ │ │ └── index.tsx │ │ ├── FormControl.tsx │ │ ├── Input.tsx │ │ ├── List.tsx │ │ ├── ListItem.tsx │ │ ├── OverviewEntry.tsx │ │ ├── Select.tsx │ │ ├── Share.tsx │ │ └── index.tsx │ │ ├── Randomizer │ │ ├── BasicNemesisCards │ │ │ ├── BasicNemesisCardList │ │ │ │ ├── BasicNemesisCardGridWrapper.tsx │ │ │ │ └── index.tsx │ │ │ ├── EmptyHint.tsx │ │ │ ├── Tier.tsx │ │ │ └── index.tsx │ │ ├── FriendFoe │ │ │ ├── EmptyHint.tsx │ │ │ ├── FoeTile.tsx │ │ │ ├── FriendTile.tsx │ │ │ ├── NoSelectedFriendFoeModuleMaterial.tsx │ │ │ ├── TileBody.tsx │ │ │ └── index.tsx │ │ ├── Mages │ │ │ ├── EmptyMageListHint.tsx │ │ │ ├── MageCountPicker.tsx │ │ │ └── index.tsx │ │ ├── Nemeses │ │ │ ├── EmptyNemesisHint.tsx │ │ │ ├── NemesisTile │ │ │ │ ├── Body.tsx │ │ │ │ ├── ExpansionName.tsx │ │ │ │ ├── Name.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Supply │ │ │ └── index.tsx │ │ └── index.tsx │ │ ├── Settings │ │ ├── Expansions │ │ │ ├── ActiveSets │ │ │ │ ├── DeselectByKeyword │ │ │ │ │ ├── KeywordButton.tsx │ │ │ │ │ ├── helpers.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── ExpansionList │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Mini.tsx │ │ │ │ ├── Promos.tsx │ │ │ │ ├── Standalones.tsx │ │ │ │ ├── Wrapper.tsx │ │ │ │ ├── helpers.ts │ │ │ │ └── index.tsx │ │ │ ├── ContentCustomization │ │ │ │ ├── Banners │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── BasicNemesisCards.tsx │ │ │ │ ├── CardListItem │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Foes │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Friends │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Gems.tsx │ │ │ │ ├── Mages │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Nemeses │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── NemesisCardListItem │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Relics.tsx │ │ │ │ ├── SelectWithTooltipWrapper.tsx │ │ │ │ ├── Spells.tsx │ │ │ │ ├── TreasureListItem │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Treasures.tsx │ │ │ │ ├── UpgradedBasicNemesisCards.tsx │ │ │ │ ├── UpgradedNemesisCardListItem │ │ │ │ │ ├── Checkbox.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Language │ │ │ ├── GameLanguageSelection │ │ │ │ └── GameLanguageSelection.tsx │ │ │ └── index.tsx │ │ ├── Supply │ │ │ ├── CheckboxWithPreview │ │ │ │ ├── PreviewWrapper.tsx │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ ├── CustomSetupEdit │ │ │ │ ├── BluePrint.tsx │ │ │ │ ├── BluePrintList.tsx │ │ │ │ ├── BluePrintWrapper.tsx │ │ │ │ ├── CancelButton.tsx │ │ │ │ ├── InputField.tsx │ │ │ │ ├── ListWrapper.tsx │ │ │ │ ├── MainControls.tsx │ │ │ │ ├── MainControlsWrapper.tsx │ │ │ │ ├── SelectField.tsx │ │ │ │ ├── SelectFieldsWrapper.tsx │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ ├── CustomSetups │ │ │ │ ├── Checkbox.tsx │ │ │ │ ├── CheckboxWithPreviewControls.tsx │ │ │ │ ├── SetupCreation.tsx │ │ │ │ └── index.tsx │ │ │ ├── PredefinedSetups │ │ │ │ └── index.tsx │ │ │ ├── SetupSelection │ │ │ │ ├── Wrapper.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ │ └── TurnOrder │ │ ├── ActiveGame.tsx │ │ ├── CardNameDisplay.tsx │ │ ├── ConfigurationCardDisplay.tsx │ │ ├── DiscardTable │ │ ├── Cell.tsx │ │ ├── Row.tsx │ │ ├── RowWrapper.tsx │ │ ├── Table.tsx │ │ └── index.tsx │ │ ├── ModeSelection.tsx │ │ ├── RoundCount │ │ ├── Wrapper.tsx │ │ └── index.tsx │ │ ├── SetupSelection.tsx │ │ ├── TurnOrderConfiguration.tsx │ │ └── index.tsx ├── fonts │ └── Roboto-Regular.woff2 ├── global.d.ts ├── globalstyles.ts ├── helpers │ ├── __test__ │ │ ├── byCost.test.ts │ │ └── sortByCardType.test.ts │ └── index.ts ├── hooks │ ├── useExpansionHandling.tsx │ └── useModal.tsx ├── index.tsx ├── mainTheme.ts ├── react-app-env.d.ts └── serviceWorker.js ├── tsconfig.json └── yarn.lock /.env.development.local: -------------------------------------------------------------------------------- 1 | REACT_APP_HOST=0.0.0.0 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | 3 | *.png binary 4 | *.jpg binary -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v16.13.1 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/Redux/configureStore.ts 2 | tsconfig.json 3 | -------------------------------------------------------------------------------- /.prettierrc.yaml: -------------------------------------------------------------------------------- 1 | trailingComma: 'es5' 2 | semi: false 3 | tabWidth: 2 4 | singleQuote: true 5 | -------------------------------------------------------------------------------- /_redirects: -------------------------------------------------------------------------------- 1 | /* /index.html 200 2 | -------------------------------------------------------------------------------- /cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'cypress' 2 | 3 | export default defineConfig({ 4 | e2e: { 5 | // We've imported your old cypress plugins here. 6 | // You may want to clean this up later by importing these. 7 | setupNodeEvents(on, config) { 8 | return require('./cypress/plugins/index.js')(on, config) 9 | }, 10 | baseUrl: 'http://localhost:3000', 11 | }, 12 | }) 13 | -------------------------------------------------------------------------------- /cypress/e2e/Settings/settingsPage.cy.ts: -------------------------------------------------------------------------------- 1 | describe('Settings page', () => { 2 | beforeEach(() => { 3 | // @ts-ignore disable-line 4 | cy.cleanupIndexedDB().visit('settings') 5 | }) 6 | 7 | after(() => { 8 | // @ts-ignore disable-line 9 | cy.cleanupIndexedDB() 10 | }) 11 | 12 | it('successfully loads', () => { 13 | cy.get('h6').contains('Settings') 14 | }) 15 | }) 16 | -------------------------------------------------------------------------------- /cypress/e2e/landingpage.cy.ts: -------------------------------------------------------------------------------- 1 | describe('The landing page "/"', () => { 2 | it('successfully loads', () => { 3 | cy.visit('/') 4 | }) 5 | 6 | it('redirects to the nemesis randomizer', () => { 7 | cy.visit('/') 8 | cy.location().should((loc) => { 9 | expect(loc.href).to.eq('http://localhost:3000/randomizer/nemesis') 10 | }) 11 | 12 | cy.get('h6').contains('Nemesis') 13 | }) 14 | }) 15 | -------------------------------------------------------------------------------- /cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /cypress/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "baseUrl": "../node_modules", 5 | "target": "es5", 6 | "lib": ["es5", "dom"], 7 | "types": ["cypress"] 8 | }, 9 | "include": [ 10 | "**/*.ts" 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /dataParser/README.md: -------------------------------------------------------------------------------- 1 | # Data parser dir 2 | 3 | This directory is not used directly inside this project. 4 | Its sole purpose is to create a csv file which others can use to reference card texts. 5 | -------------------------------------------------------------------------------- /dataParser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "csv-parser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "objects-to-csv": "^1.3.5" 13 | }, 14 | "devDependencies": { 15 | "@babel/cli": "^7.6.4", 16 | "@babel/core": "^7.6.4", 17 | "@babel/node": "^7.6.3" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16-alpine as build 2 | WORKDIR /base 3 | COPY . . 4 | RUN yarn install 5 | RUN yarn run build 6 | 7 | 8 | FROM nginx:stable-alpine 9 | 10 | RUN chown -R nginx:nginx /var/cache/nginx && \ 11 | chown -R nginx:nginx /var/log/nginx && \ 12 | chown -R nginx:nginx /etc/nginx/conf.d 13 | RUN touch /var/run/nginx.pid && \ 14 | chown -R nginx:nginx /var/run/nginx.pid 15 | USER nginx 16 | 17 | COPY --from=build /base/build /usr/share/nginx/html 18 | COPY docker/nginx.conf /etc/nginx/conf.d/default.conf 19 | 20 | EXPOSE 8080 21 | ENTRYPOINT ["nginx", "-g", "daemon off;"] 22 | -------------------------------------------------------------------------------- /docker/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | 3 | listen 8080; 4 | 5 | location / { 6 | root /usr/share/nginx/html; 7 | index index.html index.htm; 8 | try_files $uri $uri/ /index.html; 9 | } 10 | 11 | error_page 500 502 503 504 /50x.html; 12 | 13 | location = /50x.html { 14 | root /usr/share/nginx/html; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/docs/.nojekyll -------------------------------------------------------------------------------- /docs/CustomExpeditions/_sidebar.md: -------------------------------------------------------------------------------- 1 | - [Overview](./README.md) 2 | - [API](./API.md) 3 | - [Types](./Types.md) 4 | - [Example](./Example.md) 5 | - [FAQ](./FAQ.md) 6 | -------------------------------------------------------------------------------- /docs/CustomExpeditions/expeditions-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/docs/CustomExpeditions/expeditions-preview.png -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # AER - Aeons End Randomizer 2 | 3 | This is the user documentation for AER. 4 | If you are looking for contribution or development guidelines, visit the 5 | [GitHub page](https://github.com/on3iro/aeons-end-randomizer). 6 | -------------------------------------------------------------------------------- /docs/Seeds.md: -------------------------------------------------------------------------------- 1 | # Seeds 2 | 3 | The seed makes each expeditions rolls completely deterministic. By importing/copying an existing expedition and re-using its seed each roll will be exactly the same as in the original provided that all parameters are unchanged and you perform exactly the same actions. That way you can try to beat your highscore or let other players enjoy a particular expedition by sharing your configuration. 4 | -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | - [Home](./README.md) 2 | - [Custom Expeditions](./CustomExpeditions/README.md) 3 | - [Seeds](./Seeds.md) 4 | -------------------------------------------------------------------------------- /docs/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/docs/android-icon-96x96.png -------------------------------------------------------------------------------- /public/images/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-144x144.png -------------------------------------------------------------------------------- /public/images/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-192x192.png -------------------------------------------------------------------------------- /public/images/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-36x36.png -------------------------------------------------------------------------------- /public/images/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-48x48.png -------------------------------------------------------------------------------- /public/images/android-icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-512x512.png -------------------------------------------------------------------------------- /public/images/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-72x72.png -------------------------------------------------------------------------------- /public/images/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/android-icon-96x96.png -------------------------------------------------------------------------------- /public/images/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-114x114.png -------------------------------------------------------------------------------- /public/images/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-120x120.png -------------------------------------------------------------------------------- /public/images/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-144x144.png -------------------------------------------------------------------------------- /public/images/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-152x152.png -------------------------------------------------------------------------------- /public/images/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-180x180.png -------------------------------------------------------------------------------- /public/images/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-57x57.png -------------------------------------------------------------------------------- /public/images/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-60x60.png -------------------------------------------------------------------------------- /public/images/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-72x72.png -------------------------------------------------------------------------------- /public/images/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-76x76.png -------------------------------------------------------------------------------- /public/images/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon-precomposed.png -------------------------------------------------------------------------------- /public/images/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/apple-icon.png -------------------------------------------------------------------------------- /public/images/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /public/images/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/favicon-16x16.png -------------------------------------------------------------------------------- /public/images/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/favicon-32x32.png -------------------------------------------------------------------------------- /public/images/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/favicon-96x96.png -------------------------------------------------------------------------------- /public/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/favicon.ico -------------------------------------------------------------------------------- /public/images/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/ms-icon-144x144.png -------------------------------------------------------------------------------- /public/images/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/ms-icon-150x150.png -------------------------------------------------------------------------------- /public/images/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/ms-icon-310x310.png -------------------------------------------------------------------------------- /public/images/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/public/images/ms-icon-70x70.png -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './convertExpeditionToConfig' 2 | export * from './convertExpeditionFromConfig' 3 | 4 | export const calcBattleScore = (tries: number) => { 5 | switch (tries) { 6 | case 1: { 7 | return 6 8 | } 9 | 10 | case 2: { 11 | return 4 12 | } 13 | 14 | case 3: { 15 | return 2 16 | } 17 | 18 | default: { 19 | return 0 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | 6 | // export type State = import('./types').State 7 | // export type Action = import('./types').Action 8 | -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/reducerHelpers/fetchFromDb.ts: -------------------------------------------------------------------------------- 1 | import { loop, Cmd } from 'redux-loop' 2 | import { get as getFromDb } from 'idb-keyval' 3 | import { State, Action } from '../types' 4 | import { actions } from '../actions' 5 | 6 | import { EXPEDITIONS_DB_KEY } from './helpers' 7 | 8 | export const fetchFromDB = (state: State, _: Action) => { 9 | return loop( 10 | state, 11 | Cmd.run(getFromDb, { 12 | args: [EXPEDITIONS_DB_KEY], 13 | successActionCreator: actions.fetchFromDBSuccessful, 14 | failActionCreator: actions.fetchFromDBFailed, 15 | }) 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/reducerHelpers/loseBattle.ts: -------------------------------------------------------------------------------- 1 | import { State } from '../types' 2 | import { actions } from '../actions' 3 | 4 | import { updateBattle } from './helpers' 5 | 6 | export const loseBattle = ( 7 | state: State, 8 | action: ReturnType 9 | ) => { 10 | const { battle } = action.payload 11 | return updateBattle(state, battle, { status: 'lost' }) 12 | } 13 | -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/reducerHelpers/startBattle.ts: -------------------------------------------------------------------------------- 1 | import { State } from '../types' 2 | import { actions } from '../actions' 3 | 4 | import { updateBattle } from './helpers' 5 | 6 | export const startBattle = ( 7 | state: State, 8 | action: ReturnType 9 | ) => { 10 | const { battle } = action.payload 11 | return updateBattle(state, battle, { 12 | tries: battle.tries + 1, 13 | status: 'started', 14 | }) 15 | } 16 | -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/sideEffects/createBattle/getStillAvailableNemesisIds.ts: -------------------------------------------------------------------------------- 1 | import * as types from 'aer-types/types' 2 | 3 | export const getStillAvailableNemesisIds = ( 4 | availableNemeses: Array<{ 5 | id: string 6 | expeditionRating: types.ExpeditionRating 7 | }>, 8 | previousNemeses: string[], 9 | nemesisTier: types.NemesisTier 10 | ) => { 11 | return availableNemeses 12 | .filter((nemesis) => nemesis.expeditionRating === nemesisTier) 13 | .map((nemesis) => nemesis.id) 14 | .filter((nemesisId) => !previousNemeses.includes(nemesisId)) 15 | } 16 | -------------------------------------------------------------------------------- /src/Redux/Store/Expeditions/Expeditions/sideEffects/index.ts: -------------------------------------------------------------------------------- 1 | export * from './createExpeditionConfig' 2 | export { createBattle } from './createBattle' 3 | export * from './rollWinRewards' 4 | export * from './rollLossRewards' 5 | export * from './shareExpedition' 6 | export * from './createRewards' 7 | -------------------------------------------------------------------------------- /src/Redux/Store/Randomizer/BasicNemesisCards/RandomCards/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Randomizer/BasicNemesisCards/RandomCards/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './createDeck' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Randomizer/BasicNemesisCards/RandomCards/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RandomCardsStateSlice } from './types' 2 | 3 | const getBasicNemesisCards = (state: RandomCardsStateSlice) => 4 | state.Randomizer.BasicNemesisCards.RandomCards 5 | 6 | export const selectors = { 7 | getBasicNemesisCards, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Randomizer/Mages/Count/__test__/selectors.test.ts: -------------------------------------------------------------------------------- 1 | import { MagesCountStateSlice, selectors } from '..' 2 | 3 | const mockMagesCount: MagesCountStateSlice = { 4 | Randomizer: { 5 | Mages: { 6 | Count: 2, 7 | }, 8 | }, 9 | } 10 | 11 | describe('Randomizer | Mages | Count | selectors', () => { 12 | test('getCount()', () => { 13 | const result = selectors.getCount(mockMagesCount) 14 | 15 | expect(result).toBe(2) 16 | }) 17 | }) 18 | -------------------------------------------------------------------------------- /src/Redux/Store/Randomizer/Nemesis/__test__/selectors.test.ts: -------------------------------------------------------------------------------- 1 | import { NemesisStateSlice, selectors } from '..' 2 | 3 | const mockNemesis: NemesisStateSlice = { 4 | Randomizer: { 5 | Nemesis: { 6 | id: 'TheWailing', 7 | }, 8 | }, 9 | } 10 | 11 | describe('Randomizer | Nemesis | selectors', () => { 12 | test('getNemesis()', () => { 13 | const expected = { 14 | id: 'TheWailing', 15 | } 16 | 17 | const result = selectors.getNemesis(mockNemesis) 18 | 19 | expect(result).toEqual(expected) 20 | }) 21 | }) 22 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/constants.ts: -------------------------------------------------------------------------------- 1 | export const BANNERS_DB_KEY = 'banners-3.27' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.bannerIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { BannerIdsStateSlice } from './types' 2 | 3 | const getIds = (state: BannerIdsStateSlice) => state.Settings.Expansions.Banners.ids 4 | 5 | export const selectors = { 6 | getIds, 7 | } 8 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type BannerIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Banners: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleBanner' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedBannersStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedBannersStateSlice) => 5 | state.Settings.Expansions.Banners.selected 6 | 7 | const getId = (_: unknown, props: { id: string }) => 8 | props.id 9 | 10 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 11 | selectedIds.includes(id) 12 | ) 13 | 14 | export const selectors = { 15 | getSelected, 16 | getIsSelected, 17 | } 18 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Banners/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { BANNERS_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedBannersFromDB = () => getFromDb(BANNERS_DB_KEY) 6 | 7 | export const setSelectedBannersToDB = (selectedBanners: State) => 8 | setToDb(BANNERS_DB_KEY, selectedBanners) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/constants.ts: -------------------------------------------------------------------------------- 1 | export const BASIC_NEMESIS_CARDS_DB_KEY = 'basicNemesisCards-1.9' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/content/constants.ts: -------------------------------------------------------------------------------- 1 | export const BASIC_NEMESIS_CARDS_DB_KEY = 'basicNemesisCards-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/ids/constants.ts: -------------------------------------------------------------------------------- 1 | export const BASIC_NEMESIS_CARDS_DB_KEY = 'basicNemesisCards-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = 8 | AERData.normalizedData.ENG.basicNemesisCardIds 9 | 10 | export const Reducer: LoopReducer = ( 11 | state: State = initialState, 12 | action: Action 13 | ) => { 14 | switch (action.type) { 15 | default: { 16 | return state 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { BasicNemesisCardIdsStateSlice } from './types' 2 | 3 | const getIds = (state: BasicNemesisCardIdsStateSlice) => 4 | state.Settings.Expansions.BasicNemesisCards.ids 5 | 6 | export const selectors = { 7 | getIds, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type BasicNemesisCardIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | BasicNemesisCards: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleCard' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/BasicNemesisCards/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { BASIC_NEMESIS_CARDS_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedBasicNemesisCardsFromDB = () => 6 | getFromDb(BASIC_NEMESIS_CARDS_DB_KEY) 7 | 8 | export const setSelectedBasicNemesisCardsToDB = ( 9 | selectedBasicNemesisCards: State 10 | ) => setToDb(BASIC_NEMESIS_CARDS_DB_KEY, selectedBasicNemesisCards) 11 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/constants.ts: -------------------------------------------------------------------------------- 1 | export const CARDS_DB_KEY = 'cards-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.cardIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { CardIdsStateSlice } from './types' 2 | 3 | const getIds = (state: CardIdsStateSlice) => state.Settings.Expansions.Cards.ids 4 | 5 | export const selectors = { 6 | getIds, 7 | } 8 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type CardIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Cards: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleCard' 2 | export * from './deselectCards' 3 | export * from './fetchFromDb' 4 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedCardsStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedCardsStateSlice) => 5 | state.Settings.Expansions.Cards.selected 6 | 7 | const getId = (_: unknown, props: { cardId: string }) => props.cardId 8 | 9 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 10 | selectedIds.includes(id) 11 | ) 12 | 13 | export const selectors = { 14 | getSelected, 15 | getIsSelected, 16 | } 17 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Cards/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { CARDS_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedCardsFromDB = () => getFromDb(CARDS_DB_KEY) 6 | 7 | export const setSelectedCardsToDB = (selectedCards: State) => 8 | setToDb(CARDS_DB_KEY, selectedCards) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/constants.ts: -------------------------------------------------------------------------------- 1 | export const EXPANSIONS_DB_KEY = 'expansions-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.expansionIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { ExpansionIdsStateSlice } from './types' 2 | 3 | const getIds = (state: ExpansionIdsStateSlice) => 4 | state.Settings.Expansions.Expansions.ids 5 | 6 | export const selectors = { 7 | getIds, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type ExpansionIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Expansions: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleExpansion' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Expansions/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedExpansionsStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedExpansionsStateSlice) => 5 | state.Settings.Expansions.Expansions.selected 6 | 7 | const getId = (_: unknown, props: { expansionId: string }) => props.expansionId 8 | 9 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 10 | selectedIds.includes(id) 11 | ) 12 | 13 | export const selectors = { 14 | getSelected, 15 | getIsSelected, 16 | } 17 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/constants.ts: -------------------------------------------------------------------------------- 1 | export const FOES_DB_KEY = 'foes-3.27' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.foeIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { FoeIdsStateSlice } from './types' 2 | 3 | const getIds = (state: FoeIdsStateSlice) => state.Settings.Expansions.Foes.ids 4 | 5 | export const selectors = { 6 | getIds, 7 | } 8 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type FoeIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Foes: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleFoe' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedFoesStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedFoesStateSlice) => 5 | state.Settings.Expansions.Foes.selected 6 | 7 | const getId = (_: unknown, props: { id: string }) => 8 | props.id 9 | 10 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 11 | selectedIds.includes(id) 12 | ) 13 | 14 | export const selectors = { 15 | getSelected, 16 | getIsSelected, 17 | } 18 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Foes/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { FOES_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedFoesFromDB = () => getFromDb(FOES_DB_KEY) 6 | 7 | export const setSelectedFoesToDB = (selectedFoes: State) => 8 | setToDb(FOES_DB_KEY, selectedFoes) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/constants.ts: -------------------------------------------------------------------------------- 1 | export const FRIENDS_DB_KEY = 'friends-3.27' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.friendIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { FriendIdsStateSlice } from './types' 2 | 3 | const getIds = (state: FriendIdsStateSlice) => state.Settings.Expansions.Friends.ids 4 | 5 | export const selectors = { 6 | getIds, 7 | } 8 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type FriendIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Friends: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleFriend' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedFriendsStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedFriendsStateSlice) => 5 | state.Settings.Expansions.Friends.selected 6 | 7 | const getId = (_: unknown, props: { id: string }) => 8 | props.id 9 | 10 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 11 | selectedIds.includes(id) 12 | ) 13 | 14 | export const selectors = { 15 | getSelected, 16 | getIsSelected, 17 | } 18 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Friends/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { FRIENDS_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedFriendsFromDB = () => getFromDb(FRIENDS_DB_KEY) 6 | 7 | export const setSelectedFriendsToDB = (selectedFriends: State) => 8 | setToDb(FRIENDS_DB_KEY, selectedFriends) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/GlobalLanguage/constants.ts: -------------------------------------------------------------------------------- 1 | export const GLOBAL_LANGUAGE_DB_KEY = 'global-language-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/GlobalLanguage/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/GlobalLanguage/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './select' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/GlobalLanguage/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedGlobalLanguageStateSlice } from './types' 2 | 3 | const getGlobalLanguageOfExpansions = ( 4 | state: SelectedGlobalLanguageStateSlice 5 | ) => state.Settings.Expansions.GlobalLanguage 6 | 7 | export const selectors = { 8 | getGlobalLanguageOfExpansions, 9 | } 10 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Languages/constants.ts: -------------------------------------------------------------------------------- 1 | export const LANGUAGE_DB_KEY = 'language-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Languages/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Languages/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './select' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/constants.ts: -------------------------------------------------------------------------------- 1 | export const MAGES_DB_KEY = 'mages-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.mageIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { MageIdsStateSlice } from './types' 2 | 3 | const getIds = (state: MageIdsStateSlice) => state.Settings.Expansions.Mages.ids 4 | 5 | export const selectors = { 6 | getIds, 7 | } 8 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type MageIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Mages: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggle' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedMagesStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedMagesStateSlice) => 5 | state.Settings.Expansions.Mages.selected 6 | 7 | const getId = (_: unknown, props: { id: string }) => props.id 8 | 9 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 10 | selectedIds.includes(id) 11 | ) 12 | 13 | export const selectors = { 14 | getSelected, 15 | getIsSelected, 16 | } 17 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Mages/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { MAGES_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedMagesFromDB = () => getFromDb(MAGES_DB_KEY) 6 | 7 | export const setSelectedMagesToDB = (selectedMages: State) => 8 | setToDb(MAGES_DB_KEY, selectedMages) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/constants.ts: -------------------------------------------------------------------------------- 1 | export const NEMESES_DB_KEY = 'nemeses-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.nemesisIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { NemesisIdsStateSlice } from './types' 2 | 3 | const getIds = (state: NemesisIdsStateSlice) => 4 | state.Settings.Expansions.Nemeses.ids 5 | 6 | export const selectors = { 7 | getIds, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type NemesisIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Nemeses: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggle' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedNemesesStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedNemesesStateSlice) => 5 | state.Settings.Expansions.Nemeses.selected 6 | 7 | const getId = (_: unknown, props: { id: string }) => props.id 8 | 9 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 10 | selectedIds.includes(id) 11 | ) 12 | 13 | export const selectors = { 14 | getSelected, 15 | getIsSelected, 16 | } 17 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Nemeses/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { NEMESES_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedNemesesFromDB = () => getFromDb(NEMESES_DB_KEY) 6 | 7 | export const setSelectedNemesesToDB = (selectedNemeses: State) => 8 | setToDb(NEMESES_DB_KEY, selectedNemeses) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/constants.ts: -------------------------------------------------------------------------------- 1 | export const TREASURES_DB_KEY = 'treasures-1.8' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = AERData.normalizedData.ENG.treasureIds 8 | 9 | export const Reducer: LoopReducer = ( 10 | state: State = initialState, 11 | action: Action 12 | ) => { 13 | switch (action.type) { 14 | default: { 15 | return state 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { TreasureIdsStateSlice } from './types' 2 | 3 | const getIds = (state: TreasureIdsStateSlice) => 4 | state.Settings.Expansions.Treasures.ids 5 | 6 | export const selectors = { 7 | getIds, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type TreasureIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | Treasures: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggle' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/selected/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SelectedTreasuresStateSlice } from './types' 2 | import { createSelector } from 'reselect' 3 | 4 | const getSelected = (state: SelectedTreasuresStateSlice) => 5 | state.Settings.Expansions.Treasures.selected 6 | 7 | const getId = (_: unknown, props: { id: string }) => props.id 8 | 9 | const getIsSelected = createSelector([getSelected, getId], (selectedIds, id) => 10 | selectedIds.includes(id) 11 | ) 12 | 13 | export const selectors = { 14 | getSelected, 15 | getIsSelected, 16 | } 17 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/Treasures/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { TREASURES_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedTreasuresFromDB = () => getFromDb(TREASURES_DB_KEY) 6 | 7 | export const setSelectedTreasuresToDB = (selectedTreasures: State) => 8 | setToDb(TREASURES_DB_KEY, selectedTreasures) 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/constants.ts: -------------------------------------------------------------------------------- 1 | export const UPGRADED_BASIC_NEMESIS_CARDS_DB_KEY = 2 | 'upgradedBasicNemesisCards-1.8' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/content/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/content/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/ids/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | export const actions = { 4 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 5 | } 6 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/ids/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/ids/reducer.ts: -------------------------------------------------------------------------------- 1 | import { LoopReducer } from 'redux-loop' 2 | 3 | import AERData from 'aer-data/src/index' 4 | 5 | import { Action, State } from './types' 6 | 7 | export const initialState: State = 8 | AERData.normalizedData.ENG.upgradedBasicNemesisCardIds 9 | 10 | export const Reducer: LoopReducer = ( 11 | state: State = initialState, 12 | action: Action 13 | ) => { 14 | switch (action.type) { 15 | default: { 16 | return state 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/ids/selectors.ts: -------------------------------------------------------------------------------- 1 | import { UpgradedBasicNemesisCardIdsStateSlice } from './types' 2 | 3 | const getIds = (state: UpgradedBasicNemesisCardIdsStateSlice) => 4 | state.Settings.Expansions.UpgradedBasicNemesisCards.ids 5 | 6 | export const selectors = { 7 | getIds, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/ids/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type State = string[] 6 | 7 | export enum ActionTypes {} 8 | 9 | export type Action = ActionsUnion 10 | 11 | export type UpgradedBasicNemesisCardIdsStateSlice = { 12 | Settings: { 13 | Expansions: { 14 | UpgradedBasicNemesisCards: { 15 | ids: string[] 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/selected/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/selected/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggle' 2 | export * from './fetchFromDb' 3 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/UpgradedBasicNemesisCards/selected/sideEffects.ts: -------------------------------------------------------------------------------- 1 | import { get as getFromDb, set as setToDb } from 'idb-keyval' 2 | import { UPGRADED_BASIC_NEMESIS_CARDS_DB_KEY } from '../constants' 3 | import { State } from './types' 4 | 5 | export const getSelectedUpgradedBasicNemesisCardsFromDB = () => 6 | getFromDb(UPGRADED_BASIC_NEMESIS_CARDS_DB_KEY) 7 | 8 | export const setSelectedUpgradedBasicNemesisCardsToDB = ( 9 | selectedUpgradedBasicNemesisCards: State 10 | ) => 11 | setToDb( 12 | UPGRADED_BASIC_NEMESIS_CARDS_DB_KEY, 13 | selectedUpgradedBasicNemesisCards 14 | ) 15 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/Expansions/types.ts: -------------------------------------------------------------------------------- 1 | import AERData from 'aer-data/src/index' 2 | 3 | export const LANGUAGE_KEYS = Object.keys(AERData.normalizedData) 4 | export type LanguageKey = keyof typeof AERData.normalizedData 5 | 6 | export type GlobalLanguageKey = LanguageKey | 'CUSTOM' 7 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/SupplySetups/constants.ts: -------------------------------------------------------------------------------- 1 | const SUPPLY_DB_KEY = 'supplySetups-1.6' // FIXME this is a quickfix, see https://github.com/on3iro/aeons-end-randomizer/issues/138 2 | 3 | export { SUPPLY_DB_KEY } 4 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/SupplySetups/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/SupplySetups/reducerHelpers/editCustomSetup.ts: -------------------------------------------------------------------------------- 1 | import { State } from '../types' 2 | import { actions } from '../actions' 3 | 4 | export const editCustomSetup = ( 5 | state: State, 6 | action: ReturnType 7 | ) => { 8 | const id = action.payload 9 | 10 | return { 11 | ...state, 12 | Custom: { 13 | ...state.Custom, 14 | setups: { 15 | ...state.Custom.setups, 16 | [id]: { 17 | ...state.Custom.setups[id], 18 | isDirty: true, 19 | }, 20 | }, 21 | }, 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Redux/Store/Settings/SupplySetups/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './toggleAll' 2 | export * from './toggleSetup' 3 | export * from './saveCustomSetup' 4 | export * from './editCustomSetup' 5 | export * from './cancelEditSetup' 6 | export * from './deleteCustomSetup' 7 | export * from './fetchFromDb' 8 | export * from './migrateAfterFetch' 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Snackbars/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@martin_hotell/rex-tils' 2 | 3 | import { ActionTypes, Snackbar } from './types' 4 | 5 | export const actions = { 6 | noOp: () => createAction('@@REDUX_LOOP/ENFORCE_DEFAULT_HANDLING'), 7 | queue: (snackbarContent: Snackbar) => 8 | createAction(ActionTypes.QUEUE, snackbarContent), 9 | dequeue: () => createAction(ActionTypes.DEQUEUE), 10 | } 11 | -------------------------------------------------------------------------------- /src/Redux/Store/Snackbars/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/Snackbars/selectors.ts: -------------------------------------------------------------------------------- 1 | import { SnackbarsStateSlice } from './types' 2 | 3 | const selectFirstSnackbarElement = (state: SnackbarsStateSlice) => 4 | state.Snackbars.queue[0] 5 | 6 | export const selectors = { 7 | selectFirstSnackbarElement, 8 | } 9 | -------------------------------------------------------------------------------- /src/Redux/Store/Snackbars/types.ts: -------------------------------------------------------------------------------- 1 | import { ActionsUnion } from '@martin_hotell/rex-tils' 2 | 3 | import { actions } from './actions' 4 | 5 | export type SnackbarType = 'default' | 'error' | 'success' 6 | 7 | export type Snackbar = { 8 | type: SnackbarType 9 | message: string 10 | } 11 | 12 | export type State = { 13 | queue: Snackbar[] 14 | } 15 | 16 | export enum ActionTypes { 17 | QUEUE = 'Snackbars/QUEUE', 18 | DEQUEUE = 'Snackbars/DEQUEUE', 19 | } 20 | 21 | export type Action = ActionsUnion 22 | 23 | export type SnackbarsStateSlice = { 24 | Snackbars: State 25 | } 26 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/ActiveGame/constants.ts: -------------------------------------------------------------------------------- 1 | export const TURNORDER_GAME_DB_KEY = '2-4-turnOrderGameState' 2 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/ActiveGame/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/ActiveGame/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './draw' 2 | export * from './newRound' 3 | export * from './addToTop' 4 | export * from './addToBottom' 5 | export * from './shuffleIntoDeck' 6 | export * from './startGame' 7 | export * from './resetGame' 8 | export * from './fetchFromDb' 9 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/ActiveGame/reducerHelpers/resetGame.ts: -------------------------------------------------------------------------------- 1 | import { newStateWithDBWrite } from '../helpers' 2 | 3 | export const resetGame = () => { 4 | return newStateWithDBWrite({ 5 | started: false, 6 | deck: [], 7 | discard: [], 8 | round: 1, 9 | }) 10 | } 11 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/Configuration/constants.ts: -------------------------------------------------------------------------------- 1 | import AERData from 'aer-data/src/index' 2 | 3 | const INITIAL_MODE = 'Default' 4 | const INITIAL_PLAYER_SETUP = AERData.turnordersetups['onePlayer'] 5 | const INITIAL_VARIATION = INITIAL_PLAYER_SETUP.variations['default'] 6 | 7 | const TURNORDER_CONFIG_DB_KEY = '2-4-turnOrderConfiguration' 8 | 9 | export { 10 | INITIAL_MODE, 11 | INITIAL_PLAYER_SETUP, 12 | INITIAL_VARIATION, 13 | TURNORDER_CONFIG_DB_KEY, 14 | } 15 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/Configuration/index.ts: -------------------------------------------------------------------------------- 1 | export { actions } from './actions' 2 | export { initialState, Reducer } from './reducer' 3 | export { selectors } from './selectors' 4 | export * from './types' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/Configuration/reducerHelpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './setMode' 2 | export * from './selectPlayerCount' 3 | export * from './selectSetup' 4 | export * from './fetchFromDb' 5 | -------------------------------------------------------------------------------- /src/Redux/Store/TurnOrder/Configuration/reducerHelpers/selectSetup.ts: -------------------------------------------------------------------------------- 1 | import { State } from '../types' 2 | import { newStateWithDBWrite } from '../helpers' 3 | import { actions } from '../actions' 4 | 5 | export const selectSetup = ( 6 | state: State, 7 | action: ReturnType 8 | ) => { 9 | const setup = state.SelectedPlayerCount.variations[action.payload] 10 | 11 | if (!setup) return state 12 | 13 | const newState = { 14 | ...state, 15 | SelectedSetup: setup, 16 | } 17 | 18 | return newStateWithDBWrite(newState) 19 | } 20 | -------------------------------------------------------------------------------- /src/Redux/__test__/helpers/createArrayWithDefaultValues.test.ts: -------------------------------------------------------------------------------- 1 | import { createArrayWithDefaultValues } from '../../helpers' 2 | 3 | describe('createArrayWithDefaultValues()', () => { 4 | test.each([ 5 | [1, 'noop', ['noop']], 6 | [2, { foo: 'bar' }, [{ foo: 'bar' }, { foo: 'bar' }]], 7 | [3, 'EMPTY', ['EMPTY', 'EMPTY', 'EMPTY']], 8 | ])('createArrayWithDefaultValues(%d, %o)', (size, defaultValue, expected) => { 9 | expect(createArrayWithDefaultValues(size, defaultValue)).toEqual(expected) 10 | }) 11 | }) 12 | -------------------------------------------------------------------------------- /src/aer-data/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aer-data", 3 | "version": "3.10.1-fixup", 4 | "description": "Data for aeons-end-randomizer", 5 | "main": "dist/cjs/index.js", 6 | "module": "dist/index.js", 7 | "repository": "https://github.com/on3iro/aer-data", 8 | "author": "Theo Salzmann", 9 | "license": "MIT", 10 | "private": false, 11 | "scripts": { 12 | "tsc": "tsc -p tsconfig.json && tsc -p tsconfig.cjs.json" 13 | }, 14 | "keywords": [ 15 | "aeons-end-ranzomizer", 16 | "aer", 17 | "data" 18 | ], 19 | "devDependencies": {} 20 | } 21 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/aeonsEnd/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const aeonsEndData: IExpansion = { 9 | id: 'AE', 10 | name: 'Aeons End', 11 | wave: 'W1-BA - Aeons End', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/buriedSecrets/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const buriedSecretsData: IExpansion = { 9 | id: 'BS', 10 | name: 'Gefährliches Wissen', 11 | wave: 'W3-E1 - Legacy', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/buriedSecrets/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/buriedSecrets/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/intoTheWild/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const intoTheWildData: IExpansion = { 9 | id: 'IW', 10 | name: 'In die Wildnis', 11 | wave: 'W4 - Ein neues Zeitalter', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/intoTheWild/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'IW', 6 | name: 'Nekroschwarm', 7 | id: 'Necroswarm', 8 | health: 70, 9 | difficulty: 7, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/legacy/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const legacyData: IExpansion = { 9 | id: 'Legacy', 10 | name: 'Legacy', 11 | wave: 'W3 - Legacy', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/outerDark/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const outerDarkData: IExpansion = { 9 | id: 'OD', 10 | name: 'Hinter der Finsternis', 11 | wave: 'W2-E1 - Für die Ewigkeit', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/outerDark/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'OD', 6 | name: 'Dreimaltoter Prophet', 7 | id: 'ThriceDeadProphet', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'OD', 15 | name: 'Traum-Händler', 16 | id: 'Wraithmonger', 17 | health: 70, 18 | difficulty: 6, 19 | expeditionRating: 4, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/promos/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/promos/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/shatteredDreams/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const shatteredDreamsData: IExpansion = { 9 | id: 'SD', 10 | name: 'Zerschmetterte Hoffnung', 11 | wave: 'W4 - Ein neues Zeitalter', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/shatteredDreams/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'SD', 6 | name: 'Donnerkreisch', 7 | id: 'TheWailing', 8 | health: 50, 9 | difficulty: 6, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theAncients/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | import { upgradedBasicNemesisCards } from './upgradedBasicNemesisCards' 8 | 9 | export const theAncientsData: IExpansion = { 10 | id: 'TA', 11 | name: 'Die Zeitlosen', 12 | wave: 'W4 - Ein neues Zeitalter', 13 | type: 'mini', 14 | nemeses, 15 | mages, 16 | cards, 17 | treasures, 18 | upgradedBasicNemesisCards, 19 | } 20 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theAncients/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TA', 6 | name: 'Der Wanderer', 7 | id: 'TheWanderer', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theDepths/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theDepthsData: IExpansion = { 8 | id: 'Depths', 9 | name: 'Aus den Tiefen', 10 | wave: 'W1-E1 - Aeons End', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theDepths/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Depths', 6 | name: 'Horden-Muhme', 7 | id: 'HordeCrone', 8 | health: 60, 9 | difficulty: 6, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theNameless/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theNamelessData: IExpansion = { 8 | id: 'Nameless', 9 | name: 'Das Namenlose', 10 | wave: 'W1-E2 - Aeons End', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theNameless/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Nameless', 6 | name: 'Lord des Verderbens', 7 | id: 'BlightLord', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'Nameless', 15 | name: 'Der Wegbereiter', 16 | id: 'WaywardOne', 17 | health: 60, 18 | difficulty: 7, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theVoid/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theVoidData: IExpansion = { 8 | id: 'TV', 9 | name: 'Die Leere', 10 | wave: 'W2-E2 - Für die Ewigkeit', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/theVoid/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TV', 6 | name: 'Ritter des Schreckens', 7 | id: 'KnightOfShackles', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 1, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'TV', 15 | name: 'Dornen-Maid', 16 | id: 'MaidenOfThorns', 17 | health: 80, 18 | difficulty: 4, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/DE/warEternal/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const warEternalData: IExpansion = { 9 | id: 'WE', 10 | name: 'Für die Ewigkeit', 11 | wave: 'W2-BA - Für die Ewigkeit', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/PFPromos/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { cards } from './cards' 4 | import { treasures } from './treasures' 5 | import { upgradedBasicNemesisCards } from './upgradedBasicNemesisCards' 6 | 7 | export const pastAndFuturePromosData: IExpansion = { 8 | id: 'PFPromo', 9 | name: 'Promos for Past and Future', 10 | wave: 'W7 - Past And Future', 11 | type: 'promo', 12 | mages: [], 13 | nemeses: [], 14 | cards, 15 | treasures, 16 | upgradedBasicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/TDPromos/banners.ts: -------------------------------------------------------------------------------- 1 | import { ICard } from '../../../../aer-types/types' 2 | 3 | export const banners: ICard[] = [ 4 | { 5 | name: 'Banner of Vitality', 6 | id: 'BannerOfVitality', 7 | type: 'Gem', 8 | cost: 0, 9 | expansion: 'TDPromo', 10 | keywords: [], 11 | effect: ` 12 |

13 | Gain 1 Æ. 14 | OR 15 | You may suffer 1 damage. If you do, 16 | shuffle the friend's turn order card in the 17 | discard pile into the turn order deck. 18 |

19 | `, 20 | }, 21 | ] -------------------------------------------------------------------------------- /src/aer-data/src/ENG/TDPromos/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { cards } from './cards' 4 | import { treasures } from './treasures' 5 | import { banners } from './banners' 6 | 7 | export const theDescentPromosData: IExpansion = { 8 | id: 'TDPromo', 9 | name: 'Promos for The Descent', 10 | wave: 'W8 - The Descent', 11 | type: 'promo', 12 | mages: [], 13 | nemeses: [], 14 | cards, 15 | treasures, 16 | banners, 17 | } -------------------------------------------------------------------------------- /src/aer-data/src/ENG/aeonsEnd/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const aeonsEndData: IExpansion = { 9 | id: 'AE', 10 | name: 'Aeons End', 11 | wave: 'W1 - Aeons End', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/buriedSecrets/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const buriedSecretsData: IExpansion = { 9 | id: 'BS', 10 | name: 'Buried Secrets', 11 | wave: 'W3 - Legacy', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/buriedSecrets/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/buriedSecrets/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/community/cards.ts: -------------------------------------------------------------------------------- 1 | import { ICard } from '../../../../aer-types/types' 2 | 3 | export const cards: ICard[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/community/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const communityData: IExpansion = { 8 | id: 'community', 9 | name: 'Community', 10 | wave: 'Others', 11 | type: 'promo', 12 | mages, 13 | nemeses, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/community/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/evolutions/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const evolutionsData: IExpansion = { 9 | id: 'EVO', 10 | name: 'Evolution', 11 | wave: 'W7 - Past And Future', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/evolutions/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'EVO', 6 | name: 'Clouded Mesmer', 7 | id: 'CloudedMesmer', 8 | health: 60, 9 | difficulty: 7, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/intoTheWild/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const intoTheWildData: IExpansion = { 9 | id: 'IW', 10 | name: 'Into The Wild', 11 | wave: 'W4 - The New Age', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/intoTheWild/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'IW', 6 | name: 'Necroswarm', 7 | id: 'Necroswarm', 8 | health: 70, 9 | difficulty: 7, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/legacy/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const legacyData: IExpansion = { 9 | id: 'Legacy', 10 | name: 'Legacy', 11 | wave: 'W3 - Legacy', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/origins/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const originsData: IExpansion = { 9 | id: 'ORI', 10 | name: 'Origins', 11 | wave: 'W7 - Past and Future', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/origins/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'ORI', 6 | name: 'The Endless Decay', 7 | id: 'TheEndlessDecay', 8 | health: 70, 9 | difficulty: 5, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/outerDark/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const outerDarkData: IExpansion = { 9 | id: 'OD', 10 | name: 'Outer Dark', 11 | wave: 'W2 - War Eternal', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/outerDark/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'OD', 6 | name: 'Thrice Dead Prophet', 7 | id: 'ThriceDeadProphet', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'OD', 15 | name: 'Wraithmonger', 16 | id: 'Wraithmonger', 17 | health: 70, 18 | difficulty: 6, 19 | expeditionRating: 4, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/pastAndFuture/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const pastAndFutureData: IExpansion = { 9 | id: 'PAF', 10 | name: 'Past And Future', 11 | wave: 'W7 - Past And Future', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/promos/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/promos/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/returnToGravehold/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const returnToGraveholdData: IExpansion = { 9 | id: 'RTG', 10 | name: 'Return To Gravehold', 11 | wave: 'W5 - Outcasts', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/returnToGravehold/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'RTG', 6 | name: 'Burrower', 7 | id: 'Burrower', 8 | health: 80, 9 | difficulty: 8, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'RTG', 15 | name: 'Fortress', 16 | id: 'Fortress', 17 | health: 90, 18 | difficulty: 5, 19 | expeditionRating: 2, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/shatteredDreams/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const shatteredDreamsData: IExpansion = { 9 | id: 'SD', 10 | name: 'Shattered Dreams', 11 | wave: 'W4 - The New Age', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/shatteredDreams/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'SD', 6 | name: 'The Wailing', 7 | id: 'TheWailing', 8 | health: 50, 9 | difficulty: 6, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/southernVillage/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const southernVillageData: IExpansion = { 9 | id: 'SV', 10 | name: 'Southern Village', 11 | wave: 'W5 - Outcasts', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/southernVillage/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'SV', 6 | name: 'The Burning Kor', 7 | id: 'TheBurningKor', 8 | health: 60, 9 | difficulty: 7, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/talesOfOldGravehold/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const talesOfOldGraveholdData: IExpansion = { 8 | id: 'TOG', 9 | name: 'Tales of Old Gravehold', 10 | wave: 'W8 - The Descent', 11 | type: 'mini', 12 | mages, 13 | cards, 14 | nemeses, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/talesOfOldGravehold/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theAbyss/banners.ts: -------------------------------------------------------------------------------- 1 | import { ICard } from '../../../../aer-types/types' 2 | 3 | export const banners: ICard[] = [ 4 | { 5 | name: 'Banner of Transference', 6 | id: 'BannerOfTransference', 7 | type: 'Gem', 8 | cost: 0, 9 | expansion: 'AB', 10 | keywords: [], 11 | effect: ` 12 |

13 | Gain 1 Æ. 14 | OR 15 | You may suffer 1 damage. If you 16 | do, the friend gains 2 charges. 17 |

18 | `, 19 | }, 20 | ] -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theAbyss/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | import { friends } from './friends' 8 | import { foes } from './foes' 9 | import { banners } from './banners' 10 | 11 | export const theAbyssData: IExpansion = { 12 | id: 'AB', 13 | name: 'The Abyss', 14 | wave: 'W8 - The Descent', 15 | type: 'mini', 16 | nemeses, 17 | mages, 18 | cards, 19 | treasures, 20 | friends, 21 | foes, 22 | banners, 23 | } -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theAbyss/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'AB', 6 | name: 'The Reliquary', 7 | id: 'TheReliquary', 8 | health: 70, 9 | difficulty: 6, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theAncients/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | import { upgradedBasicNemesisCards } from './upgradedBasicNemesisCards' 8 | 9 | export const theAncientsData: IExpansion = { 10 | id: 'TA', 11 | name: 'The Ancients', 12 | wave: 'W4 - The New Age', 13 | type: 'mini', 14 | nemeses, 15 | mages, 16 | cards, 17 | treasures, 18 | upgradedBasicNemesisCards, 19 | } 20 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theAncients/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TA', 6 | name: 'The Wanderer', 7 | id: 'TheWanderer', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theCaverns/banners.ts: -------------------------------------------------------------------------------- 1 | import { ICard } from '../../../../aer-types/types' 2 | 3 | export const banners: ICard[] = [ 4 | { 5 | name: 'Banner of Overcharge', 6 | id: 'BannerOfOvercharge', 7 | type: 'Spell', 8 | cost: 0, 9 | expansion: 'TC', 10 | keywords: [], 11 | effect: ` 12 |

13 | While prepped, once per turn, 14 | you may discard a card in hand. If 15 | you do, the friend gains 1 charge.
16 | Cast: Deal 1 damage. 17 |

18 | `, 19 | }, 20 | ] -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theCaverns/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TC', 6 | name: 'Absorbing Wraith', 7 | id: 'AbsorbingWraith', 8 | health: 85, 9 | difficulty: 8, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | ] -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theDepths/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theDepthsData: IExpansion = { 8 | id: 'Depths', 9 | name: 'The Depths', 10 | wave: 'W1 - Aeons End', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theDepths/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Depths', 6 | name: 'Horde-Crone', 7 | id: 'HordeCrone', 8 | health: 60, 9 | difficulty: 6, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theNameless/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theNamelessData: IExpansion = { 8 | id: 'Nameless', 9 | name: 'The Nameless', 10 | wave: 'W1 - Aeons End', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theNameless/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Nameless', 6 | name: 'Blight Lord', 7 | id: 'BlightLord', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'Nameless', 15 | name: 'Wayward One', 16 | id: 'WaywardOne', 17 | health: 60, 18 | difficulty: 7, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theRuins/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theRuinsData: IExpansion = { 8 | id: 'RU', 9 | name: 'The Ruins', 10 | wave: 'W6 - The Legacy of Gravehold', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theRuins/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theRuins/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theVoid/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theVoidData: IExpansion = { 8 | id: 'TV', 9 | name: 'The Void', 10 | wave: 'W2 - War Eternal', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/theVoid/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TV', 6 | name: 'Knight Of Shackles', 7 | id: 'KnightOfShackles', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 1, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'TV', 15 | name: 'Maiden Of Thorns', 16 | id: 'MaidenOfThorns', 17 | health: 80, 18 | difficulty: 4, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/ENG/warEternal/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const warEternalData: IExpansion = { 9 | id: 'WE', 10 | name: 'War Eternal', 11 | wave: 'W2 - War Eternal', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/aeonsEnd/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const aeData: IExpansion = { 9 | id: 'AE', 10 | name: "Aeon's End", 11 | wave: "W1 - Aeon's End", 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/buriedSecrets/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const buriedSecretsData: IExpansion = { 9 | id: 'BS', 10 | name: 'Secrets Enfouis', 11 | wave: 'W3 - Legacy', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/buriedSecrets/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/buriedSecrets/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/legacy/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const legacyData: IExpansion = { 9 | id: 'Legacy', 10 | name: 'Legacy', 11 | wave: 'W3 - Legacy', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/outerDark/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const outerDarkData: IExpansion = { 9 | id: 'OD', 10 | name: 'Ténèbres d\'Ailleurs', 11 | wave: 'W2 - Guerre éternelle', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/outerDark/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'OD', 6 | name: 'Prophète aux Trois Trépas', 7 | id: 'ThriceDeadProphet', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'OD', 15 | name: 'Maître des Spectres', 16 | id: 'Wraithmonger', 17 | health: 70, 18 | difficulty: 6, 19 | expeditionRating: 4, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/shatteredDreams/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const shatteredDreamsData: IExpansion = { 9 | id: 'SD', 10 | name: 'Rêves brisés', 11 | wave: 'W4 - Une Ére Nouvelle', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/shatteredDreams/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'SD', 6 | name: 'La Lamentation', 7 | id: 'TheWailing', 8 | health: 50, 9 | difficulty: 6, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theDepths/basicNemesisCards.ts: -------------------------------------------------------------------------------- 1 | import { BasicNemesisCard } from '../../../../aer-types/types' 2 | 3 | export const basicNemesisCards: BasicNemesisCard[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theDepths/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const depthsData: IExpansion = { 9 | id: 'Depths', 10 | name: 'Les Profondeurs', 11 | wave: "W1 - Aeon's End", 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theDepths/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Depths', 6 | name: 'La Mégère', 7 | id: 'HordeCrone', 8 | health: 60, 9 | difficulty: 6, 10 | additionalInfo: '', 11 | expeditionRating: 2, 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theNameless/basicNemesisCards.ts: -------------------------------------------------------------------------------- 1 | import { BasicNemesisCard } from '../../../../aer-types/types' 2 | 3 | export const basicNemesisCards: BasicNemesisCard[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theNameless/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const namelessData: IExpansion = { 9 | id: 'Nameless', 10 | name: 'Les Sans-Noms', 11 | wave: "W1 - Aeon's End", 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theNameless/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Nameless', 6 | name: 'Seigneur de la Désolation', 7 | id: 'BlightLord', 8 | health: 70, 9 | difficulty: 4, 10 | additionalInfo: '', 11 | expeditionRating: 2, 12 | }, 13 | { 14 | expansion: 'Nameless', 15 | name: "L'Egaré", 16 | id: 'WaywardOne', 17 | health: 60, 18 | difficulty: 7, 19 | additionalInfo: '', 20 | expeditionRating: 3, 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theVoid/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theVoidData: IExpansion = { 8 | id: 'TV', 9 | name: 'Le Vide', 10 | wave: 'W2 - Guerre éternelle', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/theVoid/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TV', 6 | name: 'Chevalier des Entraves', 7 | id: 'KnightOfShackles', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 1, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'TV', 15 | name: 'Demoiselle des Épines', 16 | id: 'MaidenOfThorns', 17 | health: 80, 18 | difficulty: 4, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/warEternal/basicNemesisCards.ts: -------------------------------------------------------------------------------- 1 | import { BasicNemesisCard } from '../../../../aer-types/types' 2 | 3 | export const basicNemesisCards: BasicNemesisCard[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/warEternal/cards.ts: -------------------------------------------------------------------------------- 1 | import { ICard } from '../../../../aer-types/types' 2 | 3 | export const cards: ICard[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/warEternal/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const weData: IExpansion = { 9 | id: 'WE', 10 | name: 'Guerre éternelle', 11 | wave: 'W2 - Guerre éternelle', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/warEternal/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/FR/warEternal/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/aeonsEnd/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const aeonsEndData: IExpansion = { 9 | id: 'AE', 10 | name: 'Aeons End', 11 | wave: 'W1 - Aeons End', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/buriedSecrets/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const buriedSecretsData: IExpansion = { 9 | id: 'BS', 10 | name: 'Pogrzebane Sekrety', 11 | wave: 'W3 - Legacy', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/buriedSecrets/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/buriedSecrets/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/intoTheWild/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const intoTheWildData: IExpansion = { 9 | id: 'IW', 10 | name: 'Tajemnica Dziczy', 11 | wave: 'W4 - Nowy Początek', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/intoTheWild/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'IW', 6 | name: 'Zgorzelec', 7 | id: 'Necroswarm', 8 | health: 70, 9 | difficulty: 7, 10 | expeditionRating: 4, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/legacy/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const legacyData: IExpansion = { 9 | id: 'Legacy', 10 | name: 'Legacy', 11 | wave: 'W3 - Legacy', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/outerDark/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const outerDarkData: IExpansion = { 9 | id: 'OD', 10 | name: 'Niezbadany Mrok', 11 | wave: 'W2 - Wieczna Wojna', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/outerDark/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'OD', 6 | name: 'Trzykroć-Martwy Prorok', 7 | id: 'ThriceDeadProphet', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'OD', 15 | name: 'Snopijca', 16 | id: 'Wraithmonger', 17 | health: 70, 18 | difficulty: 6, 19 | expeditionRating: 4, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/promos/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | import { basicNemesisCards } from './basicNemesisCards' 8 | 9 | export const promosData: IExpansion = { 10 | id: 'promos', 11 | name: 'Promos', 12 | wave: 'Dalej', 13 | type: 'promo', 14 | mages, 15 | nemeses, 16 | cards, 17 | treasures, 18 | basicNemesisCards, 19 | } 20 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/promos/mages.ts: -------------------------------------------------------------------------------- 1 | import { Mage } from '../../../../aer-types/types' 2 | 3 | export const mages: Mage[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/promos/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [] 4 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/shatteredDreams/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | 8 | export const shatteredDreamsData: IExpansion = { 9 | id: 'SD', 10 | name: 'Strzaskane Marzenia', 11 | wave: 'W4 - Nowy Początek', 12 | type: 'mini', 13 | nemeses, 14 | mages, 15 | cards, 16 | treasures, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/shatteredDreams/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'SD', 6 | name: 'Onyksowy Wrzaskacz', 7 | id: 'TheWailing', 8 | health: 50, 9 | difficulty: 6, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theAncients/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { treasures } from './treasures' 7 | import { upgradedBasicNemesisCards } from './upgradedBasicNemesisCards' 8 | 9 | export const theAncientsData: IExpansion = { 10 | id: 'TA', 11 | name: 'Starożytni', 12 | wave: 'W4 - Nowy Początek', 13 | type: 'mini', 14 | nemeses, 15 | mages, 16 | cards, 17 | treasures, 18 | upgradedBasicNemesisCards, 19 | } 20 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theAncients/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TA', 6 | name: 'Tułacz', 7 | id: 'TheWanderer', 8 | health: 40, 9 | difficulty: 5, 10 | expeditionRating: 3, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theDepths/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theDepthsData: IExpansion = { 8 | id: 'Depths', 9 | name: 'Czeluście', 10 | wave: 'W1 - Aeons End', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theDepths/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Depths', 6 | name: 'Wiedźma Hordy', 7 | id: 'HordeCrone', 8 | health: 60, 9 | difficulty: 6, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | ] 14 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theNameless/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theNamelessData: IExpansion = { 8 | id: 'Nameless', 9 | name: 'Bezimienni', 10 | wave: 'W1 - Aeons End', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theNameless/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'Nameless', 6 | name: 'Władca Plagi', 7 | id: 'BlightLord', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 2, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'Nameless', 15 | name: 'Marnotrawny', 16 | id: 'WaywardOne', 17 | health: 60, 18 | difficulty: 7, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theVoid/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | 7 | export const theVoidData: IExpansion = { 8 | id: 'TV', 9 | name: 'Otchłań', 10 | wave: 'W2 - Wieczna Wojna', 11 | type: 'mini', 12 | nemeses, 13 | mages, 14 | cards, 15 | } 16 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/theVoid/nemeses.ts: -------------------------------------------------------------------------------- 1 | import { Nemesis } from '../../../../aer-types/types' 2 | 3 | export const nemeses: Nemesis[] = [ 4 | { 5 | expansion: 'TV', 6 | name: 'Rycerz Kajdan', 7 | id: 'KnightOfShackles', 8 | health: 70, 9 | difficulty: 4, 10 | expeditionRating: 1, 11 | additionalInfo: '', 12 | }, 13 | { 14 | expansion: 'TV', 15 | name: 'Panna Cierni', 16 | id: 'MaidenOfThorns', 17 | health: 80, 18 | difficulty: 4, 19 | expeditionRating: 3, 20 | additionalInfo: '', 21 | }, 22 | ] 23 | -------------------------------------------------------------------------------- /src/aer-data/src/PL/warEternal/index.ts: -------------------------------------------------------------------------------- 1 | import { IExpansion } from '../../../../aer-types/types' 2 | 3 | import { nemeses } from './nemeses' 4 | import { mages } from './mages' 5 | import { cards } from './cards' 6 | import { basicNemesisCards } from './basicNemesisCards' 7 | 8 | export const warEternalData: IExpansion = { 9 | id: 'WE', 10 | name: 'Wieczna Wojna', 11 | wave: 'W2 - Wieczna Wojna', 12 | type: 'standalone', 13 | nemeses, 14 | mages, 15 | cards, 16 | basicNemesisCards, 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-data/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "CommonJS", 5 | "outDir": "./dist/cjs" 6 | }, 7 | "references": [{ "path": "../aer-types/" }] 8 | } 9 | -------------------------------------------------------------------------------- /src/aer-data/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/aer-types/README.md: -------------------------------------------------------------------------------- 1 | # aer-types 2 | 3 | Type definitions for https://github.com/on3iro/aeons-end-randomizer 4 | 5 | ## Installation 6 | 7 | ```bash 8 | yarn add aer-types 9 | ``` 10 | -------------------------------------------------------------------------------- /src/aer-types/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aer-types", 3 | "version": "3.10.0", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "tsc": "tsc -p tsconfig.standalone.json" 9 | }, 10 | "keywords": [ 11 | "aeons-end-ranzomizer", 12 | "aer", 13 | "types" 14 | ], 15 | "author": "Theo Salzmann", 16 | "license": "MIT" 17 | } 18 | -------------------------------------------------------------------------------- /src/aer-types/tsconfig.standalone.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "composite": false 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/aer-types/types/settings.ts: -------------------------------------------------------------------------------- 1 | export type ToggleType = 'select' | 'deselect' 2 | -------------------------------------------------------------------------------- /src/components/App/Wrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | const Wrapper = styled('div')` 4 | height: 100%; 5 | padding-bottom: 72px; 6 | ` 7 | 8 | export default Wrapper 9 | -------------------------------------------------------------------------------- /src/components/atoms/A.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import { Link } from 'react-router-dom' 3 | 4 | const A = styled(Link)` 5 | text-decoration: none; 6 | ` 7 | 8 | export default A 9 | -------------------------------------------------------------------------------- /src/components/atoms/Button.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import MuiButton from '@material-ui/core/Button' 4 | 5 | const Button = styled(MuiButton)`` 6 | 7 | export default React.memo(Button) 8 | -------------------------------------------------------------------------------- /src/components/atoms/Card.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | import MuiCard from '@material-ui/core/Card' 3 | 4 | const Card = styled(MuiCard)` 5 | margin-top: 24px; 6 | ` 7 | 8 | export default Card 9 | -------------------------------------------------------------------------------- /src/components/atoms/H1.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | import Typography from '@material-ui/core/Typography' 4 | 5 | const H1 = styled(Typography)` 6 | font-size: 1.6rem; 7 | ` 8 | 9 | export default H1 10 | -------------------------------------------------------------------------------- /src/components/atoms/H2.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | import Typography from '@material-ui/core/Typography' 4 | 5 | const H2 = styled(Typography)` 6 | font-size: 1.4rem; 7 | ` 8 | 9 | export default H2 10 | -------------------------------------------------------------------------------- /src/components/atoms/Heading.tsx: -------------------------------------------------------------------------------- 1 | import Typography from '@material-ui/core/Typography' 2 | import styled from 'styled-components/macro' 3 | 4 | const Heading = styled(Typography)` 5 | font-size: ${props => props.theme.heading.fontSize}; 6 | ` 7 | 8 | export default Heading 9 | -------------------------------------------------------------------------------- /src/components/atoms/IconButton.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import MuiIconButton from '@material-ui/core/IconButton' 3 | 4 | const IconButton = styled(MuiIconButton)`` 5 | 6 | export default IconButton 7 | -------------------------------------------------------------------------------- /src/components/atoms/Keywords.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | 4 | type Props = { 5 | inCheckboxList?: boolean 6 | } 7 | 8 | // TODO refactor 9 | // we should probably have a keywords molecule instead which would also take care 10 | // of the rendering of keywords. This component here would then just be its wrapper 11 | // div. 12 | const Keywords = styled(({ inCheckboxList, ...rest }) =>
)< 13 | Props 14 | >` 15 | margin: ${props => (props.inCheckboxList ? '0 -4px 16px 28px' : '16px -4px')}; 16 | ` 17 | 18 | export default Keywords 19 | -------------------------------------------------------------------------------- /src/components/atoms/Li.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | import Typography from '@material-ui/core/Typography' 4 | 5 | const Li = styled(Typography)` 6 | font-size: 1rem; 7 | ` 8 | 9 | export default Li 10 | -------------------------------------------------------------------------------- /src/components/atoms/ModalBodyWrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | type Props = { 4 | hasFooter?: boolean 5 | } 6 | 7 | const ModalBodyWrapper = styled('div')` 8 | margin: auto; 9 | height: ${props => (props.hasFooter ? 'calc(100% - 64px)' : '100%')}; 10 | width: 100%; 11 | padding: 24px; 12 | position: relative; 13 | overflow-y: auto; 14 | 15 | > *:first-child { 16 | margin-top: 0; 17 | } 18 | ` 19 | 20 | export default ModalBodyWrapper 21 | -------------------------------------------------------------------------------- /src/components/atoms/ModalFooterWrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | const ModalFooterWrapper = styled('div')` 4 | margin: auto; 5 | height: 64px; 6 | width: 100%; 7 | padding: 0 24px; 8 | position: relative; 9 | display: flex; 10 | justify-content: flex-end; 11 | align-items: center; 12 | border-top: 1px solid rgba(0, 0, 0, 0.1); 13 | margin-top: -1px; 14 | 15 | button { 16 | width: 100%; 17 | } 18 | 19 | button + button { 20 | margin-left: 16px; 21 | } 22 | ` 23 | 24 | export default ModalFooterWrapper 25 | -------------------------------------------------------------------------------- /src/components/atoms/P.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | import Typography from '@material-ui/core/Typography' 4 | 5 | const P = styled(Typography)` 6 | margin: 10px 0; 7 | font-size: 1rem; 8 | ` 9 | 10 | export default P 11 | -------------------------------------------------------------------------------- /src/components/atoms/SectionHeadline.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import H2 from './H2' 4 | 5 | type Props = { 6 | themeColor: string 7 | } 8 | 9 | const SectionHeadline = styled(({ themeColor, ...rest }) =>

)< 10 | Props 11 | >` 12 | color: ${props => props.themeColor}; 13 | font-weight: 300; 14 | margin: 16px 0 8px; 15 | 16 | + div { 17 | margin-top: 0; 18 | } 19 | ` 20 | 21 | export default SectionHeadline 22 | -------------------------------------------------------------------------------- /src/components/atoms/SelectField.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import MuiSelect from '@material-ui/core/Select' 4 | import MuiFormControl from '@material-ui/core/FormControl' 5 | 6 | export const Wrapper = styled(MuiFormControl)` 7 | width: 50%; 8 | ` 9 | 10 | export const Select = styled(MuiSelect)` 11 | margin: 0 8px 16px; 12 | ` 13 | 14 | const SelectField = (props: any) => ( 15 | 16 | 17 | 18 | ) 19 | 20 | export default React.memo(SelectField) 21 | -------------------------------------------------------------------------------- /src/components/pages/Settings/Supply/CustomSetupEdit/SelectFieldsWrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const SelectFieldsWrapper = styled('div')` 4 | display: flex; 5 | margin: 0 -8px; 6 | ` 7 | 8 | export default SelectFieldsWrapper 9 | -------------------------------------------------------------------------------- /src/components/pages/Settings/Supply/CustomSetupEdit/Wrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const Wrapper = styled.div` 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: space-between; 7 | border: 1px solid rgba(0, 0, 0, 0.12); 8 | 9 | padding: 16px; 10 | margin: 8px 0; 11 | ` 12 | 13 | export default Wrapper 14 | -------------------------------------------------------------------------------- /src/components/pages/Settings/Supply/CustomSetups/CheckboxWithPreviewControls.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const CheckboxWithPreviewControls = styled('div')` 4 | float: right; 5 | ` 6 | 7 | export default CheckboxWithPreviewControls 8 | -------------------------------------------------------------------------------- /src/components/pages/Settings/Supply/SetupSelection/Wrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import FormControl from '@material-ui/core/FormControl' 3 | 4 | const SetupSelectionWrapper = styled(FormControl)` 5 | width: 100%; 6 | ` 7 | 8 | export default SetupSelectionWrapper 9 | -------------------------------------------------------------------------------- /src/components/pages/Settings/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import Expansions from './Expansions' 4 | import Supply from './Supply' 5 | import Language from './Language' 6 | 7 | const Settings = () => ( 8 | 9 | 10 | 11 | 12 | 13 | ) 14 | 15 | export default React.memo(Settings) 16 | -------------------------------------------------------------------------------- /src/components/pages/TurnOrder/ConfigurationCardDisplay.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import Typography from '@material-ui/core/Typography' 3 | 4 | import { TurnOrderCardType } from 'aer-types/types' 5 | 6 | type Props = { 7 | type: TurnOrderCardType 8 | } 9 | 10 | const ConfigurationCardDisplay = styled(Typography)` 11 | display: block; 12 | padding: 5px 10px; 13 | margin-bottom: 2px; 14 | 15 | color: #fff; 16 | background: ${(props) => 17 | props.theme.colors.turnOrderCards[props.type].normal}; 18 | ` 19 | 20 | export default ConfigurationCardDisplay 21 | -------------------------------------------------------------------------------- /src/components/pages/TurnOrder/DiscardTable/Cell.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | import MuiTableCell from '@material-ui/core/TableCell' 3 | 4 | const Cell = styled(MuiTableCell)` 5 | padding: 4px 8px; 6 | 7 | &:first-child { 8 | padding-left: 16px; 9 | } 10 | 11 | &:last-child { 12 | padding-right: 8px; 13 | } 14 | ` 15 | 16 | Cell.displayName = 'Cell' 17 | 18 | export default Cell 19 | -------------------------------------------------------------------------------- /src/components/pages/TurnOrder/DiscardTable/Table.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | import MuiTable from '@material-ui/core/Table' 3 | 4 | const Table = styled(MuiTable)` 5 | margin-top: 24px; 6 | border-collapse: collapse; 7 | ` 8 | 9 | export default Table 10 | -------------------------------------------------------------------------------- /src/components/pages/TurnOrder/RoundCount/Wrapper.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/macro' 2 | 3 | const Wrapper = styled('div')` 4 | height: 42px; 5 | display: flex; 6 | align-items: center; 7 | float: right; 8 | ` 9 | 10 | export default Wrapper 11 | -------------------------------------------------------------------------------- /src/components/pages/TurnOrder/RoundCount/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import InfoItem from 'components/molecules/InfoItem' 4 | import Wrapper from './Wrapper' 5 | 6 | type Props = { 7 | count: number 8 | } 9 | 10 | const RoundCount = ({ count }: Props) => { 11 | return ( 12 | 13 | 14 | 15 | ) 16 | } 17 | 18 | export default React.memo(RoundCount) 19 | -------------------------------------------------------------------------------- /src/fonts/Roboto-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/on3iro/aeons-end-randomizer/e9ac3328e3c86323150766444fcd67f0ab04b243/src/fonts/Roboto-Regular.woff2 -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | type ShareData = { 2 | title?: string 3 | text?: string 4 | url?: string 5 | } 6 | 7 | interface Navigator { 8 | share?: (data?: ShareData) => Promise 9 | } 10 | -------------------------------------------------------------------------------- /src/globalstyles.ts: -------------------------------------------------------------------------------- 1 | import { createGlobalStyle } from 'styled-components/macro' 2 | 3 | // @ts-ignore 4 | import RobotoWoff2 from './fonts/Roboto/Roboto-Regular.woff2' 5 | 6 | const GlobalStyles = createGlobalStyle` 7 | 8 | @font-face { 9 | font-family: 'Roboto'; 10 | src: url(${RobotoWoff2}) format('woff2'); 11 | } 12 | ` 13 | 14 | export default GlobalStyles 15 | -------------------------------------------------------------------------------- /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | --------------------------------------------------------------------------------