LiveAtlas/src/index.d.ts

368 lines
8.4 KiB
TypeScript
Raw Normal View History

2021-07-25 14:12:40 +00:00
/*
2022-02-21 21:50:31 +00:00
* Copyright 2022 James Lyne
2021-07-25 14:12:40 +00:00
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
2021-05-27 13:30:56 +00:00
import {State} from "@/store";
import {DynmapUrlConfig} from "@/dynmap";
import LiveAtlasMapDefinition from "@/model/LiveAtlasMapDefinition";
2022-01-16 21:18:48 +00:00
import {
Coords,
DoneCallback, FitBoundsOptions,
InternalTiles, LatLng,
2022-01-16 21:18:48 +00:00
PathOptions,
PointTuple,
PolylineOptions
} from "leaflet";
2021-07-25 13:53:45 +00:00
import {CoordinatesControlOptions} from "@/leaflet/control/CoordinatesControl";
import {ClockControlOptions} from "@/leaflet/control/ClockControl";
import {LogoControlOptions} from "@/leaflet/control/LogoControl";
import {globalMessages, serverMessages} from "../messages";
import {LiveAtlasMarkerType} from "@/util/markers";
import {LiveAtlasTileLayer, LiveAtlasTileLayerOptions} from "@/leaflet/tileLayer/LiveAtlasTileLayer";
2021-05-15 19:25:03 +00:00
declare module "*.png" {
const value: any;
export = value;
}
declare module '*.vue' {
2021-07-19 15:40:30 +00:00
import type {DefineComponent} from 'vue'
const component: DefineComponent<{}, {}, any>
2021-05-15 19:25:03 +00:00
export default component
2020-12-20 16:01:15 +00:00
}
declare global {
// noinspection JSUnusedGlobalSymbols
interface Window {
liveAtlasConfig: LiveAtlasGlobalConfig,
}
2021-09-10 14:32:48 +00:00
declare const process : {
env: {
VITE_APP_VERSION: string
2021-09-10 14:32:48 +00:00
}
}
}
export interface ProcessEnv {
[key: string]: string | undefined
}
2021-07-19 15:40:30 +00:00
interface Coordinate {
x: number;
y: number;
z: number;
}
interface Coordinate2D {
x: number;
y: number;
}
2021-07-19 15:40:30 +00:00
interface LiveAtlasLocation {
x: number;
y: number;
z: number;
world?: string;
}
2022-01-16 21:18:48 +00:00
interface LiveAtlasBounds {
min: Coordinate;
max: Coordinate;
world?: string;
}
interface LiveAtlasMapViewTarget {
location: LiveAtlasLocation | LiveAtlasBounds;
map?: string;
zoom?: number;
options?: FitBoundsOptions;
}
interface LiveAtlasGlobalConfig {
servers: Map<string, LiveAtlasServerDefinition>;
messages: LiveAtlasGlobalMessageConfig;
ui: LiveAtlasUIConfig;
2021-12-09 18:26:57 +00:00
version?: number;
}
interface LiveAtlasServerDefinition {
2021-07-25 01:02:42 +00:00
id: string;
label?: string;
2021-07-29 17:06:19 +00:00
dynmap?: DynmapUrlConfig;
pl3xmap?: string;
squaremap?: string;
2022-02-21 21:50:31 +00:00
overviewer?: string;
2021-05-20 15:13:25 +00:00
}
// Messages defined directly in LiveAtlas and used for all servers
type LiveAtlasGlobalMessageConfig = {
[K in typeof globalMessages[number]]: string;
2021-05-25 18:26:14 +00:00
}
// Messages defined by dynmap configuration responses and can vary per server
type LiveAtlasServerMessageConfig = {
[K in typeof serverMessages[number]]: string;
}
type LiveAtlasMessageConfig = LiveAtlasGlobalMessageConfig & LiveAtlasServerMessageConfig;
interface LiveAtlasUIConfig {
playersAboveMarkers: boolean;
2021-07-21 15:19:18 +00:00
playersSearch: boolean;
compactPlayerMarkers: boolean;
2022-02-20 19:34:52 +00:00
disableContextMenu: boolean;
2022-04-01 12:27:17 +00:00
disableMarkerUI: boolean;
}
export type LiveAtlasUIElement = 'layers' | 'chat' | LiveAtlasSidebarSection;
2021-08-30 21:27:41 +00:00
export type LiveAtlasUIModal = 'login' | 'settings';
2022-01-17 15:15:00 +00:00
export type LiveAtlasSidebarSection = 'servers' | 'players' | 'maps' | 'markers';
2021-07-21 16:27:24 +00:00
export type LiveAtlasDimension = 'overworld' | 'nether' | 'end';
export type LiveAtlasSidebarSectionState = {
collapsed?: boolean;
}
interface LiveAtlasPlayer {
name: string;
displayName: string;
uuid?: string;
armor: number;
health: number;
sort: number;
hidden: boolean;
location: LiveAtlasLocation;
yaw?: number;
}
interface LiveAtlasSortedPlayers extends Array<LiveAtlasPlayer> {
dirty?: boolean;
}
2021-07-19 15:40:30 +00:00
interface LiveAtlasWorldDefinition {
2021-07-19 15:40:30 +00:00
name: string;
2021-07-24 19:12:18 +00:00
displayName: string;
2021-07-21 16:27:24 +00:00
dimension: LiveAtlasDimension;
seaLevel: number;
maps: Set<LiveAtlasMapDefinition>;
2021-07-19 15:40:30 +00:00
}
interface LiveAtlasProjection {
locationToLatLng(location: Coordinate): LatLng;
latLngToLocation(latLng: LatLng, y: number): Coordinate;
}
2021-07-19 15:40:30 +00:00
interface LiveAtlasWorldState {
raining: boolean;
thundering: boolean;
timeOfDay: number;
}
interface LiveAtlasParsedUrl {
world?: string;
map?: string;
location?: Coordinate;
zoom?: number;
legacy: boolean;
}
interface LiveAtlasMapProvider {
loadServerConfiguration(): Promise<void>;
populateWorld(world: LiveAtlasWorldDefinition): Promise<void>;
populateMap(map: LiveAtlasMapDefinition): Promise<void>;
startUpdates(): void;
stopUpdates(): void;
createTileLayer(options: LiveAtlasTileLayerOptions): LiveAtlasTileLayer;
sendChatMessage(message: string): void;
2021-08-30 21:27:41 +00:00
login(formData: FormData): void;
logout(): void;
register(formData: FormData): void;
}
2021-07-24 03:06:19 +00:00
2022-02-25 18:05:36 +00:00
interface LiveAtlasOverlay {
2021-07-24 03:06:19 +00:00
id: string,
label: string;
hidden: boolean;
priority: number;
minZoom?: number;
maxZoom?: number;
2022-02-25 18:05:36 +00:00
}
interface LiveAtlasMarkerSet extends LiveAtlasOverlay {
2021-07-24 03:06:19 +00:00
showLabels?: boolean;
}
2022-02-25 18:05:36 +00:00
interface LiveAtlasTileLayerOverlay extends LiveAtlasOverlay {
tileLayerOptions: LiveAtlasTileLayerOptions;
}
interface LiveAtlasMarker {
id: string;
type: LiveAtlasMarkerType;
tooltip: string;
2022-01-14 13:54:27 +00:00
tooltipHTML?: string;
popup?: string;
2022-01-14 13:54:27 +00:00
isPopupHTML?: boolean;
location: Coordinate;
minZoom?: number;
maxZoom?: number;
}
interface LiveAtlasPointMarker extends LiveAtlasMarker {
type: LiveAtlasMarkerType.POINT;
iconUrl: string;
iconSize?: PointTuple;
2022-02-24 22:53:26 +00:00
iconAnchor?: PointTuple;
2021-07-24 03:06:19 +00:00
}
interface LiveAtlasPathMarker extends LiveAtlasMarker {
style: PathOptions;
2022-01-16 21:18:48 +00:00
bounds: LiveAtlasBounds;
2021-07-24 03:06:19 +00:00
}
interface LiveAtlasLineMarker extends LiveAtlasPathMarker {
type: LiveAtlasMarkerType.LINE;
points: Coordinate[];
style: PolylineOptions;
}
interface LiveAtlasAreaMarker extends LiveAtlasLineMarker {
type: LiveAtlasMarkerType.AREA;
outline: boolean;
2022-01-16 21:18:48 +00:00
points: Coordinate[] | Coordinate[][];
}
interface LiveAtlasCircleMarker extends LiveAtlasPathMarker {
type: LiveAtlasMarkerType.CIRCLE;
2021-07-24 03:06:19 +00:00
radius: PointTuple;
}
interface PlayerImageQueueEntry {
cacheKey: string;
name: string;
uuid?: string;
size: LiveAtlasPlayerImageSize;
image: HTMLImageElement;
}
2021-07-25 13:53:45 +00:00
interface LiveAtlasServerConfig {
defaultMap?: string;
defaultWorld?: string;
defaultZoom: number;
followMap?: string;
2021-07-28 22:52:51 +00:00
followZoom?: number;
2021-07-25 13:53:45 +00:00
title: string;
expandUI: boolean;
}
interface LiveAtlasComponentConfig {
markers: {
showLabels: boolean;
};
players: {
markers?: LiveAtlasPlayerMarkerConfig;
showImages: boolean;
grayHiddenPlayers: boolean;
imageUrl: (entry: PlayerImageQueueEntry) => string;
};
2021-07-25 13:53:45 +00:00
coordinatesControl?: CoordinatesControlOptions;
clockControl?: ClockControlOptions;
linkControl: boolean;
layerControl: boolean;
logoControls: Array<LogoControlOptions>;
chatBox?: LiveAtlasChatBoxConfig;
chatSending?: LiveAtlasChatSendingConfig;
chatBalloons: boolean;
login: boolean;
}
interface LiveAtlasPartialComponentConfig {
markers?: {
showLabels: boolean;
};
players?: {
markers?: LiveAtlasPlayerMarkerConfig;
showImages?: boolean;
grayHiddenPlayers?: boolean;
imageUrl?: (entry: PlayerImageQueueEntry) => string;
};
coordinatesControl?: CoordinatesControlOptions;
clockControl?: ClockControlOptions;
linkControl?: boolean;
layerControl?: boolean;
logoControls?: Array<LogoControlOptions>;
chatBox?: LiveAtlasChatBoxConfig;
chatSending?: LiveAtlasChatSendingConfig;
chatBalloons?: boolean;
login?: boolean;
}
2021-07-25 13:53:45 +00:00
interface LiveAtlasPlayerMarkerConfig {
hideByDefault: boolean;
layerName: string;
layerPriority: number;
imageSize: LiveAtlasPlayerImageSize;
2021-07-25 13:53:45 +00:00
showHealth: boolean;
2021-09-28 17:54:51 +00:00
showArmor: boolean;
showYaw: boolean;
2021-07-25 13:53:45 +00:00
}
export type LiveAtlasPlayerImageSize = 'none' | 'small' | 'large' | 'body';
2021-07-25 13:53:45 +00:00
interface LiveAtlasChatBoxConfig {
allowUrlName: boolean;
showPlayerFaces: boolean;
messageLifetime: number;
messageHistory: number;
}
interface LiveAtlasChatSendingConfig {
loginRequired: boolean;
maxLength: number;
cooldown: number;
}
interface LiveAtlasChat {
type: 'chat' | 'playerjoin' | 'playerleave';
playerAccount?: string;
playerName?: string;
channel?: string;
message?: string;
source?: string;
timestamp: number;
}
export interface LiveAtlasInternalTiles extends InternalTiles {
[key: string]: LiveAtlasTile;
}
export interface LiveAtlasTile {
active?: boolean;
coords: Coords;
current: boolean;
el: LiveAtlasTileElement;
loaded?: Date;
retain?: boolean;
complete: boolean;
}
export interface LiveAtlasTileElement extends HTMLImageElement {
tileName?: string;
url: string;
callback: DoneCallback;
abortController: AbortController;
}