Add progressive web app companion for cross-platform access

Vite + TypeScript PWA that mirrors the Android app's core features:
- Pre-processed shelter data (build-time UTM33N→WGS84 conversion)
- Leaflet map with shelter markers, user location, and offline tiles
- Canvas compass arrow (ported from DirectionArrowView.kt)
- IndexedDB shelter cache with 7-day staleness check
- Service worker with CacheFirst tiles and precached app shell
- i18n for en, nb, nn (ported from Android strings.xml)
- iOS/Android compass handling with low-pass filter
- Respects user map interaction (no auto-snap on pan/zoom)
- Build revision cache-breaker for reliable SW updates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2026-03-08 17:41:38 +01:00
commit e8428de775
12051 changed files with 1799735 additions and 0 deletions

View file

@ -0,0 +1,41 @@
export type UIOptions = {
width: number;
wrap?: boolean;
rows?: string[];
};
export type Column = {
text: string;
width?: number;
align?: 'right' | 'left' | 'center';
padding?: number[];
border?: boolean;
};
export type ColumnArray = Column[] & {
span?: boolean;
};
export type Line = {
hidden?: boolean;
text: string;
span?: boolean;
};
export declare class UI {
width: number;
wrap: boolean;
rows: ColumnArray[];
constructor(opts: UIOptions);
span(...args: ColumnArray): void;
resetOutput(): void;
div(...args: (Column | string)[]): ColumnArray;
shouldApplyLayoutDSL(...args: (Column | string)[]): boolean;
applyLayoutDSL(str: string): ColumnArray;
colFromString(text: string): Column;
measurePadding(str: string): number[];
toString(): string;
rowToString(row: ColumnArray, lines: Line[]): Line[];
renderInline(source: string, previousLine: Line): string;
rasterize(row: ColumnArray): string[][];
negatePadding(col: Column): number;
columnWidths(row: ColumnArray): number[];
}
export declare const cliui: (opts?: Partial<UIOptions>) => UI;
//# sourceMappingURL=index.d.ts.map