mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 19:01:08 +00:00
118 lines
3.0 KiB
TypeScript
118 lines
3.0 KiB
TypeScript
import { useState, useEffect } from "react";
|
|
import { PMTiles } from "../../js/index";
|
|
import { styled } from "./stitches.config";
|
|
|
|
import Inspector from "./Inspector";
|
|
import MaplibreMap from "./MaplibreMap";
|
|
import Metadata from "./Metadata";
|
|
|
|
import { MagnifyingGlassIcon, ImageIcon } from "@radix-ui/react-icons";
|
|
import * as ToolbarPrimitive from "@radix-ui/react-toolbar";
|
|
|
|
const StyledToolbar = styled(ToolbarPrimitive.Root, {
|
|
display: "flex",
|
|
height: "$4",
|
|
width: "100%",
|
|
boxSizing: "border-box",
|
|
minWidth: "max-content",
|
|
backgroundColor: "white",
|
|
boxShadow: `0 2px 10px "black"`,
|
|
});
|
|
|
|
const itemStyles = {
|
|
all: "unset",
|
|
flex: "0 0 auto",
|
|
color: "$black",
|
|
display: "inline-flex",
|
|
padding: "0 $1 0 $1",
|
|
fontSize: "$2",
|
|
alignItems: "center",
|
|
"&:hover": { backgroundColor: "$hover", color: "$white" },
|
|
"&:focus": { position: "relative", boxShadow: `0 0 0 2px blue` },
|
|
};
|
|
|
|
const StyledLink = styled(
|
|
ToolbarPrimitive.Link,
|
|
{
|
|
...itemStyles,
|
|
backgroundColor: "transparent",
|
|
color: "black",
|
|
display: "inline-flex",
|
|
justifyContent: "center",
|
|
alignItems: "center",
|
|
},
|
|
{
|
|
"&:hover": {
|
|
backgroundColor: "$hover",
|
|
color: "$white",
|
|
cursor: "pointer",
|
|
},
|
|
}
|
|
);
|
|
|
|
const StyledToggleGroup = styled(ToolbarPrimitive.ToggleGroup, {
|
|
display: "inline-flex",
|
|
borderRadius: 4,
|
|
});
|
|
|
|
const StyledToggleItem = styled(ToolbarPrimitive.ToggleItem, {
|
|
...itemStyles,
|
|
boxShadow: 0,
|
|
backgroundColor: "white",
|
|
marginLeft: 2,
|
|
cursor: "pointer",
|
|
"&:first-child": { marginLeft: 0 },
|
|
"&[data-state=on]": { backgroundColor: "$primary", color: "$primaryText" },
|
|
});
|
|
|
|
const Toolbar = StyledToolbar;
|
|
const ToolbarLink = StyledLink;
|
|
const ToolbarToggleGroup = StyledToggleGroup;
|
|
const ToolbarToggleItem = StyledToggleItem;
|
|
|
|
function Loader(props: { file: PMTiles; mapHashPassed: boolean }) {
|
|
let [tab, setTab] = useState("maplibre");
|
|
|
|
let view;
|
|
if (tab === "maplibre") {
|
|
view = (
|
|
<MaplibreMap file={props.file} mapHashPassed={props.mapHashPassed} />
|
|
);
|
|
} else if (tab === "inspector") {
|
|
view = <Inspector file={props.file} />;
|
|
} else {
|
|
view = <Metadata file={props.file} />;
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<Toolbar aria-label="Formatting options">
|
|
<ToolbarToggleGroup
|
|
type="single"
|
|
defaultValue="center"
|
|
aria-label="Text alignment"
|
|
value={tab}
|
|
onValueChange={setTab}
|
|
>
|
|
<ToolbarToggleItem value="maplibre" aria-label="Right aligned">
|
|
Map View
|
|
</ToolbarToggleItem>
|
|
<ToolbarToggleItem value="inspector" aria-label="Left aligned">
|
|
<MagnifyingGlassIcon /> Tile Inspector
|
|
</ToolbarToggleItem>
|
|
<ToolbarToggleItem value="metadata" aria-label="Left aligned">
|
|
Metadata
|
|
</ToolbarToggleItem>
|
|
</ToolbarToggleGroup>
|
|
<ToolbarLink css={{ marginRight: 10 }}>
|
|
{props.file.source.getKey()}
|
|
</ToolbarLink>
|
|
</Toolbar>
|
|
|
|
{view}
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default Loader;
|