diff --git a/src/domain/bases/BasesCohortResolver.ts b/src/domain/bases/BasesCohortResolver.ts index 5114aa7..d9ada07 100644 --- a/src/domain/bases/BasesCohortResolver.ts +++ b/src/domain/bases/BasesCohortResolver.ts @@ -1,4 +1,5 @@ -import { App, OpenViewState, TFile, WorkspaceLeaf } from 'obsidian'; +import type { App, OpenViewState, WorkspaceLeaf } from 'obsidian'; +import { TFile } from 'obsidian'; const TIMEOUT_MS = 5_000; diff --git a/src/domain/bases/BasesDiscovery.ts b/src/domain/bases/BasesDiscovery.ts index 9035884..113ef56 100644 --- a/src/domain/bases/BasesDiscovery.ts +++ b/src/domain/bases/BasesDiscovery.ts @@ -1,4 +1,5 @@ -import { App, TFile, parseYaml } from 'obsidian'; +import type { App, TFile} from 'obsidian'; +import { parseYaml } from 'obsidian'; export type BaseViewInfo = { name: string; diff --git a/src/domain/cohort/CohortIntegrity.ts b/src/domain/cohort/CohortIntegrity.ts index 0a0d0d0..961f978 100644 --- a/src/domain/cohort/CohortIntegrity.ts +++ b/src/domain/cohort/CohortIntegrity.ts @@ -1,6 +1,6 @@ -import { App, TFile } from 'obsidian'; +import type { App, TFile } from 'obsidian'; -import { PluginDataStore } from '../../storage/PluginDataStore'; +import type { PluginDataStore } from '../../storage/PluginDataStore'; import { getEloId } from '../../utils/NoteIds'; /** diff --git a/src/domain/cohort/CohortResolver.ts b/src/domain/cohort/CohortResolver.ts index 0414963..d6dc188 100644 --- a/src/domain/cohort/CohortResolver.ts +++ b/src/domain/cohort/CohortResolver.ts @@ -1,6 +1,7 @@ -import { App, TAbstractFile, TFile, TFolder } from 'obsidian'; -import { CohortDefinition, CohortKind, CohortParamsMap, CohortSpec } from '../../types'; +import type { App, TAbstractFile} from 'obsidian'; +import { TFile, TFolder } from 'obsidian'; +import type { CohortDefinition, CohortKind, CohortParamsMap, CohortSpec } from '../../types'; import { normaliseTag } from '../../utils/tags'; import { resolveFilesFromBaseView } from '../bases/BasesCohortResolver'; diff --git a/src/domain/elo/EloEngine.ts b/src/domain/elo/EloEngine.ts index 1d99edd..5245130 100644 --- a/src/domain/elo/EloEngine.ts +++ b/src/domain/elo/EloEngine.ts @@ -1,5 +1,5 @@ import type { EloHeuristicsSettings as EloHeuristics } from '../../settings'; -import { MatchResult } from '../../types'; +import type { MatchResult } from '../../types'; export function expectedScore(rA: number, rB: number): number { return 1 / (1 + Math.pow(10, (rB - rA) / 400)); diff --git a/src/domain/matchmaking/Matchmaker.ts b/src/domain/matchmaking/Matchmaker.ts index a44bf6a..bafd52b 100644 --- a/src/domain/matchmaking/Matchmaker.ts +++ b/src/domain/matchmaking/Matchmaker.ts @@ -1,5 +1,6 @@ -import type { MatchmakingSettings } from '../../settings'; import type { TFile } from 'obsidian'; + +import type { MatchmakingSettings } from '../../settings'; import { pairSig as mkPairSig } from '../../utils/pair'; export type RatingStats = { rating: number; matches: number }; diff --git a/src/main.ts b/src/main.ts index f70b9f2..014ed66 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,16 +1,18 @@ -import { EloSettings, effectiveFrontmatterProperties } from './settings'; -import { Notice, Plugin, TAbstractFile, TFile } from 'obsidian'; -import { computeRankMap, updateCohortFrontmatter } from './utils/FrontmatterStats'; +import type { TAbstractFile} from 'obsidian'; +import { Notice, Plugin, TFile } from 'obsidian'; -import ArenaSession from './ui/ArenaSession'; -import { CohortDefinition } from './types'; -import { CohortPicker } from './ui/CohortPicker'; -import EloSettingsTab from './settings/SettingsTab'; -import { PluginDataStore } from './storage/PluginDataStore'; -import { ensureBaseCohortTarget } from './utils/EnsureBaseCohort'; -import { ensureFolderCohortPath } from './utils/EnsureFolderCohort'; import { reconcileCohortPlayersWithFiles } from './domain/cohort/CohortIntegrity'; import { resolveFilesForCohort } from './domain/cohort/CohortResolver'; +import type { EloSettings} from './settings'; +import { effectiveFrontmatterProperties } from './settings'; +import EloSettingsTab from './settings/SettingsTab'; +import { PluginDataStore } from './storage/PluginDataStore'; +import type { CohortDefinition } from './types'; +import ArenaSession from './ui/ArenaSession'; +import { CohortPicker } from './ui/CohortPicker'; +import { ensureBaseCohortTarget } from './utils/EnsureBaseCohort'; +import { ensureFolderCohortPath } from './utils/EnsureFolderCohort'; +import { computeRankMap, updateCohortFrontmatter } from './utils/FrontmatterStats'; export default class EloPlugin extends Plugin { dataStore: PluginDataStore; diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index abd60d1..a99c393 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -1,22 +1,24 @@ -import { App, Notice, PluginSettingTab, Setting, SliderComponent, setIcon } from 'obsidian'; -import { - DEFAULT_SETTINGS, - FrontmatterPropertiesSettings, - SessionLayoutMode, - effectiveFrontmatterProperties, -} from './settings'; +import type { App, SliderComponent} from 'obsidian'; +import { Notice, PluginSettingTab, setIcon,Setting } from 'obsidian'; + +import { prettyCohortDefinition, resolveFilesForCohort } from '../domain/cohort/CohortResolver'; +import type EloPlugin from '../main'; +import type { CohortData } from '../types'; +import { CohortOptionsModal } from '../ui/CohortOptionsModal'; import { FM_PROP_KEYS, renderStandardFmPropertyRow } from '../ui/FrontmatterPropertyRow'; +import { BasePromiseModal } from '../ui/PromiseModal'; import { computeRankMap, previewCohortFrontmatterPropertyUpdates, updateCohortFrontmatter, } from '../utils/FrontmatterStats'; -import { prettyCohortDefinition, resolveFilesForCohort } from '../domain/cohort/CohortResolver'; - -import { BasePromiseModal } from '../ui/PromiseModal'; -import type { CohortData } from '../types'; -import { CohortOptionsModal } from '../ui/CohortOptionsModal'; -import type EloPlugin from '../main'; +import type { + FrontmatterPropertiesSettings, + SessionLayoutMode} from './settings'; +import { + DEFAULT_SETTINGS, + effectiveFrontmatterProperties, +} from './settings'; type PropKey = keyof FrontmatterPropertiesSettings; diff --git a/src/storage/PluginDataStore.ts b/src/storage/PluginDataStore.ts index 6e4bcfb..251bbf3 100644 --- a/src/storage/PluginDataStore.ts +++ b/src/storage/PluginDataStore.ts @@ -1,4 +1,9 @@ -import { +import type { Plugin } from 'obsidian'; + +import { updateElo } from '../domain/elo/EloEngine'; +import type { EloSettings, SessionLayoutMode } from '../settings'; +import { DEFAULT_SETTINGS } from '../settings'; +import type { CohortData, CohortDefinition, EloStore, @@ -6,10 +11,6 @@ import { PlayerSnapshot, UndoFrame, } from '../types'; -import { DEFAULT_SETTINGS, EloSettings, SessionLayoutMode } from '../settings'; - -import { Plugin } from 'obsidian'; -import { updateElo } from '../domain/elo/EloEngine'; interface PersistedData { version: number; diff --git a/src/ui/ArenaSession.ts b/src/ui/ArenaSession.ts index 871904b..42c536a 100644 --- a/src/ui/ArenaSession.ts +++ b/src/ui/ArenaSession.ts @@ -1,15 +1,17 @@ -import { App, MarkdownView, Notice, TFile, WorkspaceLeaf } from 'obsidian'; -import { ArenaLayoutHandle, ArenaLayoutManager } from './LayoutManager'; -import { MatchResult, ScrollStartMode, UndoFrame } from '../types'; -import { attempt, attemptAsync } from '../utils/safe'; -import { ensureEloId, getEloId } from '../utils/NoteIds'; +import type { App, WorkspaceLeaf } from 'obsidian'; +import { MarkdownView, Notice, TFile } from 'obsidian'; +import { pickNextPairIndices } from '../domain/matchmaking/Matchmaker'; import type EloPlugin from '../main'; import type { FrontmatterPropertiesSettings } from '../settings'; import { effectiveFrontmatterProperties } from '../settings'; -import { pairSig } from '../utils/pair'; -import { pickNextPairIndices } from '../domain/matchmaking/Matchmaker'; +import type { MatchResult, ScrollStartMode, UndoFrame } from '../types'; import { writeFrontmatterStatsForPair } from '../utils/FrontmatterStats'; +import { ensureEloId, getEloId } from '../utils/NoteIds'; +import { pairSig } from '../utils/pair'; +import { attempt, attemptAsync } from '../utils/safe'; +import type { ArenaLayoutHandle} from './LayoutManager'; +import { ArenaLayoutManager } from './LayoutManager'; export default class ArenaSession { private app: App; diff --git a/src/ui/CohortOptionsModal.ts b/src/ui/CohortOptionsModal.ts index 4d438cf..816e193 100644 --- a/src/ui/CohortOptionsModal.ts +++ b/src/ui/CohortOptionsModal.ts @@ -1,10 +1,11 @@ -import { App, Setting } from 'obsidian'; -import { FM_PROP_KEYS, renderStandardFmPropertyRow } from './FrontmatterPropertyRow'; -import type { FrontmatterPropertiesSettings, FrontmatterPropertyConfig } from '../settings'; +import type { App} from 'obsidian'; +import { Setting } from 'obsidian'; -import { BasePromiseModal } from './PromiseModal'; import type EloPlugin from '../main'; +import type { FrontmatterPropertiesSettings, FrontmatterPropertyConfig } from '../settings'; import type { ScrollStartMode } from '../types'; +import { FM_PROP_KEYS, renderStandardFmPropertyRow } from './FrontmatterPropertyRow'; +import { BasePromiseModal } from './PromiseModal'; type Mode = 'create' | 'edit'; diff --git a/src/ui/CohortPicker.ts b/src/ui/CohortPicker.ts index ea4f55d..d0d74e7 100644 --- a/src/ui/CohortPicker.ts +++ b/src/ui/CohortPicker.ts @@ -1,20 +1,21 @@ -import { App, ButtonComponent, FuzzySuggestModal, Notice, Setting, TFile } from 'obsidian'; -import { BasePromiseFuzzyModal, BasePromiseModal } from './PromiseModal'; +import type { App, ButtonComponent, TFile } from 'obsidian'; +import { FuzzySuggestModal, Notice, Setting } from 'obsidian'; + +import { listBaseFiles, readBaseViews } from '../domain/bases/BasesDiscovery'; import { createDefinition, getFileTags, parseCohortKey, prettyCohortDefinition, } from '../domain/cohort/CohortResolver'; -import { listBaseFiles, readBaseViews } from '../domain/bases/BasesDiscovery'; - -import { CohortDefinition } from '../types'; -import { CohortOptionsModal } from './CohortOptionsModal'; import type EloPlugin from '../main'; -import { FolderSelectModal } from './FolderPicker'; import type { FrontmatterPropertiesSettings } from '../settings'; +import type { CohortDefinition } from '../types'; import type { ScrollStartMode } from '../types'; import { normaliseTag } from '../utils/tags'; +import { CohortOptionsModal } from './CohortOptionsModal'; +import { FolderSelectModal } from './FolderPicker'; +import { BasePromiseFuzzyModal, BasePromiseModal } from './PromiseModal'; type Action = 'vault-all' | 'active-folder' | 'pick-folder' | 'tag-dialog' | 'base-dialog'; type Choice = diff --git a/src/ui/FolderPicker.ts b/src/ui/FolderPicker.ts index 68d296d..6fe1c78 100644 --- a/src/ui/FolderPicker.ts +++ b/src/ui/FolderPicker.ts @@ -1,7 +1,7 @@ -import { App, TFolder } from 'obsidian'; +import type { App, TFolder } from 'obsidian'; -import { BasePromiseFuzzyModal } from './PromiseModal'; import { allFolderChoices } from '../domain/cohort/CohortResolver'; +import { BasePromiseFuzzyModal } from './PromiseModal'; export class FolderSelectModal extends BasePromiseFuzzyModal { private folders: TFolder[]; diff --git a/src/ui/FrontmatterPropertyRow.ts b/src/ui/FrontmatterPropertyRow.ts index b8e7f6d..7b035d7 100644 --- a/src/ui/FrontmatterPropertyRow.ts +++ b/src/ui/FrontmatterPropertyRow.ts @@ -1,4 +1,5 @@ -import { Setting, TextComponent, ToggleComponent } from 'obsidian'; +import type { TextComponent, ToggleComponent } from 'obsidian'; +import { Setting } from 'obsidian'; export type FmPropKey = 'rating' | 'rank' | 'matches' | 'wins'; export const FM_PROP_KEYS: readonly FmPropKey[] = ['rating', 'rank', 'matches', 'wins'] as const; diff --git a/src/ui/LayoutManager.ts b/src/ui/LayoutManager.ts index 5b53a30..fe0f34a 100644 --- a/src/ui/LayoutManager.ts +++ b/src/ui/LayoutManager.ts @@ -1,7 +1,8 @@ -import { App, Notice, ViewState, WorkspaceLeaf } from 'obsidian'; -import { attempt, attemptAsync } from '../utils/safe'; +import type { App, ViewState, WorkspaceLeaf } from 'obsidian'; +import { Notice } from 'obsidian'; import type { SessionLayoutMode } from '../settings'; +import { attempt, attemptAsync } from '../utils/safe'; export type ArenaLayoutHandle = { leftLeaf: WorkspaceLeaf; diff --git a/src/ui/PromiseModal.ts b/src/ui/PromiseModal.ts index 642cbd8..f114904 100644 --- a/src/ui/PromiseModal.ts +++ b/src/ui/PromiseModal.ts @@ -1,4 +1,5 @@ -import { App, FuzzySuggestModal, Modal } from 'obsidian'; +import type { App} from 'obsidian'; +import { FuzzySuggestModal, Modal } from 'obsidian'; // Base for standard Modals that return a value via a Promise. export class BasePromiseModal extends Modal { diff --git a/src/ui/ResolveMissingBaseModal.ts b/src/ui/ResolveMissingBaseModal.ts index 5e72afc..e28399c 100644 --- a/src/ui/ResolveMissingBaseModal.ts +++ b/src/ui/ResolveMissingBaseModal.ts @@ -1,6 +1,7 @@ -import { App, Notice, Setting, TFile } from 'obsidian'; +import type { App} from 'obsidian'; +import { Notice, Setting, TFile } from 'obsidian'; -import { listBaseFiles, readBaseViews, type BaseViewInfo } from '../domain/bases/BasesDiscovery'; +import { type BaseViewInfo,listBaseFiles, readBaseViews } from '../domain/bases/BasesDiscovery'; import { BasePromiseFuzzyModal, BasePromiseModal } from './PromiseModal'; type BaseViewChoice = { view: string; label: string }; diff --git a/src/ui/ResolveMissingFolderModal.ts b/src/ui/ResolveMissingFolderModal.ts index ce3423c..18d3cac 100644 --- a/src/ui/ResolveMissingFolderModal.ts +++ b/src/ui/ResolveMissingFolderModal.ts @@ -1,8 +1,9 @@ -import { App, Setting } from 'obsidian'; +import type { App} from 'obsidian'; +import { Setting } from 'obsidian'; -import { BasePromiseModal } from './PromiseModal'; -import { FolderSelectModal } from './FolderPicker'; import { getEloId } from '../utils/NoteIds'; +import { FolderSelectModal } from './FolderPicker'; +import { BasePromiseModal } from './PromiseModal'; type Suggestion = { path: string; diff --git a/src/utils/EnsureBaseCohort.ts b/src/utils/EnsureBaseCohort.ts index c7bc9d8..1d9131d 100644 --- a/src/utils/EnsureBaseCohort.ts +++ b/src/utils/EnsureBaseCohort.ts @@ -1,10 +1,11 @@ -import { App, Notice, TFile } from 'obsidian'; +import type { App} from 'obsidian'; +import { Notice, TFile } from 'obsidian'; -import type { CohortDefinition } from '../types'; -import { PluginDataStore } from '../storage/PluginDataStore'; -import { ResolveMissingBaseModal } from '../ui/ResolveMissingBaseModal'; -import { makeCohortKey } from '../domain/cohort/CohortResolver'; import { readBaseViews } from '../domain/bases/BasesDiscovery'; +import { makeCohortKey } from '../domain/cohort/CohortResolver'; +import type { PluginDataStore } from '../storage/PluginDataStore'; +import type { CohortDefinition } from '../types'; +import { ResolveMissingBaseModal } from '../ui/ResolveMissingBaseModal'; function getBaseFile(app: App, basePath: string): TFile | undefined { const af = app.vault.getAbstractFileByPath(basePath); diff --git a/src/utils/EnsureFolderCohort.ts b/src/utils/EnsureFolderCohort.ts index bbd918a..e96007a 100644 --- a/src/utils/EnsureFolderCohort.ts +++ b/src/utils/EnsureFolderCohort.ts @@ -1,9 +1,10 @@ -import { App, Notice, TFolder } from 'obsidian'; +import type { App} from 'obsidian'; +import { Notice, TFolder } from 'obsidian'; -import { CohortDefinition } from '../types'; -import { PluginDataStore } from '../storage/PluginDataStore'; -import { ResolveMissingFolderModal } from '../ui/ResolveMissingFolderModal'; import { makeCohortKey } from '../domain/cohort/CohortResolver'; +import type { PluginDataStore } from '../storage/PluginDataStore'; +import type { CohortDefinition } from '../types'; +import { ResolveMissingFolderModal } from '../ui/ResolveMissingFolderModal'; export async function ensureFolderCohortPath( app: App, diff --git a/src/utils/FrontmatterStats.ts b/src/utils/FrontmatterStats.ts index dd0e3d1..b4334a4 100644 --- a/src/utils/FrontmatterStats.ts +++ b/src/utils/FrontmatterStats.ts @@ -1,7 +1,8 @@ -import { App, Notice, TFile } from 'obsidian'; +import type { App, TFile } from 'obsidian'; +import { Notice } from 'obsidian'; -import { CohortData } from '../types'; import type { FrontmatterPropertiesSettings } from '../settings'; +import type { CohortData } from '../types'; import { getEloId } from './NoteIds'; type PlayerStats = { diff --git a/src/utils/NoteIds.ts b/src/utils/NoteIds.ts index 7490315..fe3329d 100644 --- a/src/utils/NoteIds.ts +++ b/src/utils/NoteIds.ts @@ -1,4 +1,4 @@ -import { App, TFile } from 'obsidian'; +import type { App, TFile } from 'obsidian'; // Matches HTML comments like: const ELO_ID_COMMENT_BASE = //;