refactor(ext/shared): move View + PopupState to shared/popup-state.ts
Foundation for Plan C Phase 1: shared/state.ts (next task) needs to import PopupState without creating a popup->shared circular dep. popup.ts now re-exports from the new location so existing callers don't break in this task. Task 1.4 will sweep them onto the canonical import path. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
45
extension/src/shared/popup-state.ts
Normal file
45
extension/src/shared/popup-state.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
// State shared between popup and vault surfaces. Kept here (not in popup/) so
|
||||
// shared/state.ts can import without creating a popup→shared circular dep.
|
||||
|
||||
import type {
|
||||
Item,
|
||||
ItemId,
|
||||
ItemType,
|
||||
ManifestEntry,
|
||||
GeneratorRequest,
|
||||
VaultSettings,
|
||||
} from './types';
|
||||
|
||||
export type View =
|
||||
| 'locked'
|
||||
| 'list'
|
||||
| 'detail'
|
||||
| 'add'
|
||||
| 'edit'
|
||||
| 'settings'
|
||||
| 'settings-vault'
|
||||
| 'trash'
|
||||
| 'devices'
|
||||
| 'field-history';
|
||||
|
||||
export interface PopupState {
|
||||
view: View;
|
||||
entries: Array<[ItemId, ManifestEntry]>;
|
||||
selectedId: ItemId | null;
|
||||
selectedItem: Item | null;
|
||||
selectedIndex: number;
|
||||
searchQuery: string;
|
||||
activeGroup: string | null;
|
||||
error: string | null;
|
||||
loading: boolean;
|
||||
// Captured tab snapshot taken at popup-open. Used by fill_credentials
|
||||
// to guard against TOCTOU navigation — the SW re-checks this URL's
|
||||
// hostname against the tab's live URL before forwarding fill_credentials
|
||||
// to the content script. See router/popup-only.ts#handleFillCredentials.
|
||||
capturedTabId: number | null;
|
||||
capturedUrl: string;
|
||||
newType: ItemType | null;
|
||||
vaultSettings: VaultSettings | null;
|
||||
generatorDefaults: GeneratorRequest | null;
|
||||
historyItemId: ItemId | null;
|
||||
}
|
||||
Reference in New Issue
Block a user