export type RendererDom = { subtitleRoot: HTMLElement; subtitleContainer: HTMLElement; overlay: HTMLElement; controllerStatusToast: HTMLDivElement; overlayErrorToast: HTMLDivElement; secondarySubContainer: HTMLElement; secondarySubRoot: HTMLElement; jimakuModal: HTMLDivElement; jimakuTitleInput: HTMLInputElement; jimakuSeasonInput: HTMLInputElement; jimakuEpisodeInput: HTMLInputElement; jimakuSearchButton: HTMLButtonElement; jimakuCloseButton: HTMLButtonElement; jimakuStatus: HTMLDivElement; jimakuEntriesSection: HTMLDivElement; jimakuEntriesList: HTMLUListElement; jimakuFilesSection: HTMLDivElement; jimakuFilesList: HTMLUListElement; jimakuBroadenButton: HTMLButtonElement; kikuModal: HTMLDivElement; kikuCard1: HTMLDivElement; kikuCard2: HTMLDivElement; kikuCard1Expression: HTMLDivElement; kikuCard2Expression: HTMLDivElement; kikuCard1Sentence: HTMLDivElement; kikuCard2Sentence: HTMLDivElement; kikuCard1Meta: HTMLDivElement; kikuCard2Meta: HTMLDivElement; kikuConfirmButton: HTMLButtonElement; kikuCancelButton: HTMLButtonElement; kikuDeleteDuplicateCheckbox: HTMLInputElement; kikuSelectionStep: HTMLDivElement; kikuPreviewStep: HTMLDivElement; kikuPreviewJson: HTMLPreElement; kikuPreviewCompactButton: HTMLButtonElement; kikuPreviewFullButton: HTMLButtonElement; kikuPreviewError: HTMLDivElement; kikuBackButton: HTMLButtonElement; kikuFinalConfirmButton: HTMLButtonElement; kikuFinalCancelButton: HTMLButtonElement; kikuHint: HTMLDivElement; runtimeOptionsModal: HTMLDivElement; runtimeOptionsClose: HTMLButtonElement; runtimeOptionsList: HTMLUListElement; runtimeOptionsStatus: HTMLDivElement; subsyncModal: HTMLDivElement; subsyncCloseButton: HTMLButtonElement; subsyncEngineAlass: HTMLInputElement; subsyncEngineFfsubsync: HTMLInputElement; subsyncSourceLabel: HTMLLabelElement; subsyncSourceSelect: HTMLSelectElement; subsyncRunButton: HTMLButtonElement; subsyncStatus: HTMLDivElement; controllerSelectModal: HTMLDivElement; controllerSelectClose: HTMLButtonElement; controllerSelectPicker: HTMLSelectElement; controllerSelectSummary: HTMLDivElement; controllerSelectStatus: HTMLDivElement; controllerConfigList: HTMLDivElement; controllerSelectSave: HTMLButtonElement; controllerDebugModal: HTMLDivElement; controllerDebugClose: HTMLButtonElement; controllerDebugCopy: HTMLButtonElement; controllerDebugToast: HTMLDivElement; controllerDebugStatus: HTMLDivElement; controllerDebugSummary: HTMLDivElement; controllerDebugAxes: HTMLPreElement; controllerDebugButtons: HTMLPreElement; controllerDebugButtonIndices: HTMLPreElement; subtitleSidebarModal: HTMLDivElement; subtitleSidebarContent: HTMLDivElement; subtitleSidebarClose: HTMLButtonElement; subtitleSidebarStatus: HTMLDivElement; subtitleSidebarList: HTMLUListElement; sessionHelpModal: HTMLDivElement; sessionHelpClose: HTMLButtonElement; sessionHelpShortcut: HTMLDivElement; sessionHelpWarning: HTMLDivElement; sessionHelpStatus: HTMLDivElement; sessionHelpFilter: HTMLInputElement; sessionHelpContent: HTMLDivElement; }; function getRequiredElement(id: string): T { const element = document.getElementById(id); if (!element) { throw new Error(`Missing required DOM element #${id}`); } return element as T; } export function resolveRendererDom(): RendererDom { return { subtitleRoot: getRequiredElement('subtitleRoot'), subtitleContainer: getRequiredElement('subtitleContainer'), overlay: getRequiredElement('overlay'), controllerStatusToast: getRequiredElement('controllerStatusToast'), overlayErrorToast: getRequiredElement('overlayErrorToast'), secondarySubContainer: getRequiredElement('secondarySubContainer'), secondarySubRoot: getRequiredElement('secondarySubRoot'), jimakuModal: getRequiredElement('jimakuModal'), jimakuTitleInput: getRequiredElement('jimakuTitle'), jimakuSeasonInput: getRequiredElement('jimakuSeason'), jimakuEpisodeInput: getRequiredElement('jimakuEpisode'), jimakuSearchButton: getRequiredElement('jimakuSearch'), jimakuCloseButton: getRequiredElement('jimakuClose'), jimakuStatus: getRequiredElement('jimakuStatus'), jimakuEntriesSection: getRequiredElement('jimakuEntriesSection'), jimakuEntriesList: getRequiredElement('jimakuEntries'), jimakuFilesSection: getRequiredElement('jimakuFilesSection'), jimakuFilesList: getRequiredElement('jimakuFiles'), jimakuBroadenButton: getRequiredElement('jimakuBroaden'), kikuModal: getRequiredElement('kikuFieldGroupingModal'), kikuCard1: getRequiredElement('kikuCard1'), kikuCard2: getRequiredElement('kikuCard2'), kikuCard1Expression: getRequiredElement('kikuCard1Expression'), kikuCard2Expression: getRequiredElement('kikuCard2Expression'), kikuCard1Sentence: getRequiredElement('kikuCard1Sentence'), kikuCard2Sentence: getRequiredElement('kikuCard2Sentence'), kikuCard1Meta: getRequiredElement('kikuCard1Meta'), kikuCard2Meta: getRequiredElement('kikuCard2Meta'), kikuConfirmButton: getRequiredElement('kikuConfirmButton'), kikuCancelButton: getRequiredElement('kikuCancelButton'), kikuDeleteDuplicateCheckbox: getRequiredElement('kikuDeleteDuplicate'), kikuSelectionStep: getRequiredElement('kikuSelectionStep'), kikuPreviewStep: getRequiredElement('kikuPreviewStep'), kikuPreviewJson: getRequiredElement('kikuPreviewJson'), kikuPreviewCompactButton: getRequiredElement('kikuPreviewCompact'), kikuPreviewFullButton: getRequiredElement('kikuPreviewFull'), kikuPreviewError: getRequiredElement('kikuPreviewError'), kikuBackButton: getRequiredElement('kikuBackButton'), kikuFinalConfirmButton: getRequiredElement('kikuFinalConfirmButton'), kikuFinalCancelButton: getRequiredElement('kikuFinalCancelButton'), kikuHint: getRequiredElement('kikuHint'), runtimeOptionsModal: getRequiredElement('runtimeOptionsModal'), runtimeOptionsClose: getRequiredElement('runtimeOptionsClose'), runtimeOptionsList: getRequiredElement('runtimeOptionsList'), runtimeOptionsStatus: getRequiredElement('runtimeOptionsStatus'), subsyncModal: getRequiredElement('subsyncModal'), subsyncCloseButton: getRequiredElement('subsyncClose'), subsyncEngineAlass: getRequiredElement('subsyncEngineAlass'), subsyncEngineFfsubsync: getRequiredElement('subsyncEngineFfsubsync'), subsyncSourceLabel: getRequiredElement('subsyncSourceLabel'), subsyncSourceSelect: getRequiredElement('subsyncSourceSelect'), subsyncRunButton: getRequiredElement('subsyncRun'), subsyncStatus: getRequiredElement('subsyncStatus'), controllerSelectModal: getRequiredElement('controllerSelectModal'), controllerSelectClose: getRequiredElement('controllerSelectClose'), controllerSelectPicker: getRequiredElement('controllerSelectPicker'), controllerSelectSummary: getRequiredElement('controllerSelectSummary'), controllerSelectStatus: getRequiredElement('controllerSelectStatus'), controllerConfigList: getRequiredElement('controllerConfigList'), controllerSelectSave: getRequiredElement('controllerSelectSave'), controllerDebugModal: getRequiredElement('controllerDebugModal'), controllerDebugClose: getRequiredElement('controllerDebugClose'), controllerDebugCopy: getRequiredElement('controllerDebugCopy'), controllerDebugToast: getRequiredElement('controllerDebugToast'), controllerDebugStatus: getRequiredElement('controllerDebugStatus'), controllerDebugSummary: getRequiredElement('controllerDebugSummary'), controllerDebugAxes: getRequiredElement('controllerDebugAxes'), controllerDebugButtons: getRequiredElement('controllerDebugButtons'), controllerDebugButtonIndices: getRequiredElement( 'controllerDebugButtonIndices', ), subtitleSidebarModal: getRequiredElement('subtitleSidebarModal'), subtitleSidebarContent: getRequiredElement('subtitleSidebarContent'), subtitleSidebarClose: getRequiredElement('subtitleSidebarClose'), subtitleSidebarStatus: getRequiredElement('subtitleSidebarStatus'), subtitleSidebarList: getRequiredElement('subtitleSidebarList'), sessionHelpModal: getRequiredElement('sessionHelpModal'), sessionHelpClose: getRequiredElement('sessionHelpClose'), sessionHelpShortcut: getRequiredElement('sessionHelpShortcut'), sessionHelpWarning: getRequiredElement('sessionHelpWarning'), sessionHelpStatus: getRequiredElement('sessionHelpStatus'), sessionHelpFilter: getRequiredElement('sessionHelpFilter'), sessionHelpContent: getRequiredElement('sessionHelpContent'), }; }