gitextract_ukmc1mmn/ ├── .dockerignore ├── .eslintignore ├── .eslintrc.json ├── .github/ │ └── workflows/ │ ├── main.yml │ └── node.js.yml ├── .gitignore ├── .nvmrc ├── .prettierrc.json ├── .travis.yml ├── .vscode/ │ └── launch.json ├── CONTRIBUTING.md ├── Dockerfile ├── Gruntfile.js ├── PRIVACY.md ├── Procfile ├── README.md ├── _config.yml ├── about.md ├── babel.config.json ├── client/ │ ├── .baseDir.ts │ ├── .eslintrc.json │ ├── Account/ │ │ ├── Account.ts │ │ ├── AccountClient.test.ts │ │ └── AccountClient.ts │ ├── App.tsx │ ├── AutosavedEncounterTest.test.tsx │ ├── CombatFooter/ │ │ └── CombatFooter.tsx │ ├── Combatant/ │ │ ├── Combatant.test.ts │ │ ├── Combatant.ts │ │ ├── CombatantDetails.tsx │ │ ├── CombatantViewModel.ts │ │ ├── GetOrRollMaximumHP.test.ts │ │ ├── GetOrRollMaximumHP.ts │ │ ├── IndexLabeling.test.ts │ │ ├── MultipleCombatantDetails.tsx │ │ ├── Tag.ts │ │ ├── ToPlayerViewCombatantState.ts │ │ └── linkComponentToObservables.tsx │ ├── Commands/ │ │ ├── BuildCombatantCommandList.ts │ │ ├── BuildEncounterCommandList.ts │ │ ├── CombatantCommander.test.ts │ │ ├── CombatantCommander.tsx │ │ ├── Command.test.ts │ │ ├── Command.ts │ │ ├── CommandButton.tsx │ │ ├── DefaultKeybindings.ts │ │ ├── EncounterCommander.test.ts │ │ ├── EncounterCommander.ts │ │ ├── GetLegacyKeyBinding.ts │ │ ├── LibrariesCommander.ts │ │ ├── PromptQueue.test.ts │ │ ├── PromptQueue.ts │ │ ├── ToggleFullscreen.ts │ │ ├── Toolbar.test.tsx │ │ └── Toolbar.tsx │ ├── Components/ │ │ ├── Button.tsx │ │ ├── ErrorBoundary.tsx │ │ ├── Info.tsx │ │ ├── LoadingIndicator.tsx │ │ ├── Overlay.tsx │ │ ├── StatBlock.test.tsx │ │ ├── StatBlock.tsx │ │ ├── StatBlockHeader.tsx │ │ └── Tabs.tsx │ ├── Encounter/ │ │ ├── AutoPopulatedNotes.ts │ │ ├── AutoRerollInitiativeOption.test.ts │ │ ├── Encounter.test.ts │ │ ├── Encounter.ts │ │ ├── EncounterFlow.ts │ │ ├── LegacyEncounter.test.ts │ │ └── UpdateLegacySavedEncounter.ts │ ├── Environment.ts │ ├── GetContextualCommandSuggestion.tsx │ ├── Importers/ │ │ ├── DnDAppFilesImporter.ts │ │ ├── Importer.ts │ │ ├── Open5eImporter.ts │ │ ├── SpellImporter.test.ts │ │ ├── SpellImporter.ts │ │ ├── StatBlockImporter.test.ts │ │ └── StatBlockImporter.ts │ ├── Index.ts │ ├── InitiativeList/ │ │ ├── CombatantRow.tsx │ │ ├── CommandContext.tsx │ │ ├── InitiativeList.test.tsx │ │ ├── InitiativeList.tsx │ │ ├── InitiativeListHeader.tsx │ │ ├── InitiativeListHost.tsx │ │ ├── RestoreCombatants.tsx │ │ └── Tags.tsx │ ├── LauncherViewModel.ts │ ├── Layout/ │ │ ├── BannerHost.tsx │ │ ├── CenterColumn.tsx │ │ ├── LeftColumn.tsx │ │ ├── RightColumn.tsx │ │ ├── SelectedCombatants.tsx │ │ ├── ThreeColumnLayout.tsx │ │ ├── ToolbarHost.tsx │ │ ├── VerticalResizer.tsx │ │ ├── centerColumnView.tsx │ │ └── interfacePriorityClass.tsx │ ├── Library/ │ │ ├── Components/ │ │ │ ├── BuildListingTree.test.tsx │ │ │ ├── BuildListingTree.tsx │ │ │ ├── Folder.tsx │ │ │ ├── LibraryFilter.tsx │ │ │ ├── ListingButton.tsx │ │ │ ├── ListingRow.tsx │ │ │ ├── PaneHeader.tsx │ │ │ └── SpellDetails.tsx │ │ ├── FilterCache.test.ts │ │ ├── FilterCache.ts │ │ ├── Libraries.ts │ │ ├── Listing.ts │ │ ├── Manager/ │ │ │ ├── ActiveLibrary.tsx │ │ │ ├── DeletePrompt.tsx │ │ │ ├── EditorView.tsx │ │ │ ├── LibraryManager.tsx │ │ │ ├── LibraryManagerRow.tsx │ │ │ ├── LibraryManagerToolbar.tsx │ │ │ ├── ListingSelectionContext.ts │ │ │ ├── MovePrompt.tsx │ │ │ ├── SelectedItemsManager.tsx │ │ │ ├── SelectedItemsView.tsx │ │ │ ├── SelectedItemsViewForActiveTab.tsx │ │ │ └── useSelection.ts │ │ ├── ReferencePane/ │ │ │ ├── EncounterLibraryReferencePane.tsx │ │ │ ├── LibraryReferencePane.tsx │ │ │ ├── LibraryReferencePanes.tsx │ │ │ ├── PersistentCharacterLibraryReferencePane.tsx │ │ │ ├── SpellLibraryReferencePane.tsx │ │ │ └── StatBlockLibraryReferencePane.tsx │ │ ├── StatBlockLibrary.test.tsx │ │ └── useLibrary.ts │ ├── MockAccountClient.tsx │ ├── PersistentCharacter/ │ │ └── PersistentCharacter.test.tsx │ ├── PlayerView/ │ │ ├── CSSFrom.ts │ │ ├── PlayerView.test.tsx │ │ ├── PlayerViewClient.ts │ │ ├── PlayerViewCombatantState.test.tsx │ │ ├── PlayerViewEncounterState.test.tsx │ │ ├── ReactPlayerView.tsx │ │ ├── TurnTimer.test.tsx │ │ └── components/ │ │ ├── CombatFooter.tsx │ │ ├── CombatStatsPopup.tsx │ │ ├── CustomStyles.tsx │ │ ├── DamageSuggestor.tsx │ │ ├── PlayerView.tsx │ │ ├── PlayerViewCombatant.tsx │ │ ├── PlayerViewCombatantHeader.tsx │ │ ├── PortraitModal.tsx │ │ ├── SpentReactionIndicator.tsx │ │ └── TagSuggestor.tsx │ ├── Prompts/ │ │ ├── AcceptDamagePrompt.tsx │ │ ├── AcceptTagPrompt.tsx │ │ ├── ApplyDamagePrompt.tsx │ │ ├── ApplyHealingPrompt.tsx │ │ ├── ApplyTemporaryHPPrompt.tsx │ │ ├── CombatStatsPrompt.tsx │ │ ├── ConcentrationPrompt.tsx │ │ ├── ConditionReferencePrompt.tsx │ │ ├── EditAliasPrompt.tsx │ │ ├── EditInitiativePrompt.tsx │ │ ├── InitiativePrompt.tsx │ │ ├── LinkInitiativePrompt.tsx │ │ ├── MoveEncounterPrompt.tsx │ │ ├── PendingPrompts.tsx │ │ ├── PlayerViewPrompt.tsx │ │ ├── PrivacyPolicyPrompt.tsx │ │ ├── QuickAddPrompt.tsx │ │ ├── QuickEditStatBlockPrompt.tsx │ │ ├── RollDicePrompt.tsx │ │ ├── SaveEncounterPrompt.tsx │ │ ├── SpellPrompt.tsx │ │ ├── StandardPromptLayout.tsx │ │ ├── TagPrompt.tsx │ │ └── UpdateNotesPrompt.tsx │ ├── Reducers/ │ │ ├── Actions.ts │ │ ├── CombatantActions.tsx │ │ ├── CombatantsReducer.test.tsx │ │ ├── CombatantsReducer.tsx │ │ ├── EncounterActions.tsx │ │ ├── EncounterReducer.test.tsx │ │ ├── EncounterReducer.tsx │ │ ├── GetCombatantsSorted.tsx │ │ └── InitializeCombatantFromStatBlock.tsx │ ├── Rules/ │ │ ├── Conditions.ts │ │ ├── Dice.ts │ │ ├── RollResult.ts │ │ ├── RollResults.test.ts │ │ ├── Rules.test.ts │ │ └── Rules.ts │ ├── Settings/ │ │ ├── Settings.test.ts │ │ ├── Settings.ts │ │ ├── SettingsContext.ts │ │ ├── Tips.ts │ │ └── components/ │ │ ├── About.tsx │ │ ├── AccountSettings.tsx │ │ ├── AccountSyncSettings.tsx │ │ ├── ColorBlock.tsx │ │ ├── CommandInfo.ts │ │ ├── CommandsSettings.tsx │ │ ├── ContentSettings.tsx │ │ ├── DisplaysToggle.tsx │ │ ├── Dropdown.tsx │ │ ├── EpicInitiativeSettings.tsx │ │ ├── FileUploadButton.tsx │ │ ├── LocalDataSettings.tsx │ │ ├── OptionsSettings.tsx │ │ ├── SettingsPane.tsx │ │ ├── StatBlockCustomFields.tsx │ │ ├── StylesChooser.tsx │ │ ├── TipCarousel.tsx │ │ └── Toggle.tsx │ ├── StatBlockEditor/ │ │ ├── ConvertStringsToNumbersWhereNeeded.tsx │ │ ├── EnumToggle.tsx │ │ ├── SavedEncounterEditor.tsx │ │ ├── SpellEditor.tsx │ │ ├── StatBlockEditor.test.tsx │ │ ├── StatBlockEditor.tsx │ │ └── components/ │ │ ├── AutoHideField.tsx │ │ ├── AutocompleteTextInput.tsx │ │ ├── IdentityFields.tsx │ │ ├── KeywordField.tsx │ │ ├── NameAndModifierField.tsx │ │ ├── PowerField.tsx │ │ ├── SortableList.tsx │ │ ├── StatBlockEditorFields.tsx │ │ ├── TextField.tsx │ │ ├── UseDragDrop.tsx │ │ └── useFocus.ts │ ├── TextEnricher/ │ │ ├── Counter.tsx │ │ ├── TextEnricher.test.tsx │ │ └── TextEnricher.tsx │ ├── TrackerViewModel.tsx │ ├── Tutorial/ │ │ ├── NotifyTutorialOfAction.ts │ │ ├── Tutorial.tsx │ │ └── TutorialSteps.ts │ ├── Utility/ │ │ ├── CustomBindingHandlers.ts │ │ ├── GetAlphaSortableLevelString.ts │ │ ├── LegacySynchronousLocalStore.ts │ │ ├── Metrics.ts │ │ ├── RemovableArrayValue.ts │ │ ├── Store.test.ts │ │ ├── Store.ts │ │ ├── TextAssets.ts │ │ ├── TransferLocalStorage.ts │ │ ├── useAsyncListing.tsx │ │ ├── useRequest.ts │ │ └── useStoreBackedState.ts │ ├── Widgets/ │ │ ├── CombatTimer.ts │ │ ├── DifficultyCalculator.test.ts │ │ ├── DifficultyCalculator.ts │ │ ├── EventLog.ts │ │ └── GetTimerReadout.ts │ ├── jest.config.js │ ├── test/ │ │ ├── InitializeTestSettings.ts │ │ ├── adapterSetup.ts │ │ ├── buildEncounter.ts │ │ └── mocksSetup.ts │ ├── tsconfig.eslint.json │ └── tsconfig.json ├── common/ │ ├── ClientEnvironment.ts │ ├── CombatStats.ts │ ├── CombatantState.ts │ ├── CommandSetting.ts │ ├── DurationTiming.ts │ ├── EncounterState.ts │ ├── Listable.ts │ ├── PatreonPost.ts │ ├── PersistentCharacter.ts │ ├── PlayerViewCombatantState.ts │ ├── PlayerViewSettings.ts │ ├── PlayerViewState.ts │ ├── SavedEncounter.ts │ ├── Settings.ts │ ├── Spell.ts │ ├── StatBlock.ts │ ├── Toolbox.ts │ ├── ValidateEncounterId.ts │ └── jest.config.js ├── html/ │ ├── landing.html │ ├── playerview.html │ ├── tracker.html │ └── transferlocalstorage.html ├── lesscss/ │ ├── base/ │ │ ├── colors.less │ │ ├── responsive.less │ │ └── typography.less │ ├── components/ │ │ ├── buttons.less │ │ ├── cards.less │ │ ├── combat-footer.less │ │ ├── combatants.less │ │ ├── libraries.less │ │ ├── library-manager.less │ │ ├── listing.less │ │ ├── overlay.less │ │ ├── prompts.less │ │ ├── settings.less │ │ ├── spell-editor.less │ │ ├── spell.less │ │ ├── statblock-editor.less │ │ ├── statblock.less │ │ ├── styles-chooser.less │ │ ├── tabs.less │ │ ├── toolbar.less │ │ └── tutorial.less │ ├── improved-initiative.less │ ├── layout/ │ │ ├── base.less │ │ └── forms.less │ ├── pages/ │ │ ├── landing.less │ │ ├── player-view.less │ │ └── tracker.less │ └── utilities/ │ ├── animations.less │ └── helpers.less ├── license ├── ogl_creatures.json ├── ogl_spells.json ├── package.json ├── public/ │ ├── .well-known/ │ │ └── assetlinks.json │ ├── BingSiteAuth.xml │ ├── manifest.json │ ├── robots.txt │ └── sample_players.json ├── server/ │ ├── .baseDir.ts │ ├── InMemoryPlayerViewManager.ts │ ├── RedisPlayerViewManager.ts │ ├── api_response_declined_pledge.json │ ├── api_response_epic_account.json │ ├── api_response_no_pledge.json │ ├── configureAffiliateRoutes.ts │ ├── configureBasicRulesContent.ts │ ├── configureImportRoutes.ts │ ├── configureOpen5eContent.ts │ ├── dbconnection.test.ts │ ├── dbconnection.ts │ ├── getDbConnectionString.ts │ ├── jest.config.js │ ├── library.ts │ ├── metrics.ts │ ├── patreon.ts │ ├── playerviewmanager.test.ts │ ├── playerviewmanager.ts │ ├── routes.ts │ ├── server.ts │ ├── session.ts │ ├── sockets.ts │ ├── storageroutes.ts │ ├── tsconfig.json │ └── user.ts ├── test-post.html ├── test_cases.txt ├── thanks.ts ├── web.config ├── webpack.config.base.js ├── webpack.config.dev.js └── webpack.config.prod.js