@malilion/block-ui-react 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/cards/ServerBrowser/ServerBrowser.d.ts +7 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.d.ts.map +1 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.js +106 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.js.map +1 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts +22 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts.map +1 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.utils.d.ts +8 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.utils.d.ts.map +1 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.utils.js +16 -0
- package/dist/components/cards/ServerBrowser/ServerBrowser.utils.js.map +1 -0
- package/dist/components/cards/ServerBrowser/index.d.ts +4 -0
- package/dist/components/cards/ServerBrowser/index.d.ts.map +1 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.d.ts +4 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.d.ts.map +1 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.js +101 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.js.map +1 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts +22 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts.map +1 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.utils.d.ts +10 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.utils.d.ts.map +1 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.utils.js +12 -0
- package/dist/components/cards/WorldBrowser/WorldBrowser.utils.js.map +1 -0
- package/dist/components/cards/WorldBrowser/index.d.ts +4 -0
- package/dist/components/cards/WorldBrowser/index.d.ts.map +1 -0
- package/dist/components/cards/browser.module.js +23 -0
- package/dist/components/cards/browser.module.js.map +1 -0
- package/dist/components/cards/index.d.ts +2 -0
- package/dist/components/cards/index.d.ts.map +1 -1
- package/dist/components/crafting/Anvil/Anvil.d.ts +7 -0
- package/dist/components/crafting/Anvil/Anvil.d.ts.map +1 -0
- package/dist/components/crafting/Anvil/Anvil.js +94 -0
- package/dist/components/crafting/Anvil/Anvil.js.map +1 -0
- package/dist/components/crafting/Anvil/Anvil.module.js +21 -0
- package/dist/components/crafting/Anvil/Anvil.module.js.map +1 -0
- package/dist/components/crafting/Anvil/Anvil.types.d.ts +25 -0
- package/dist/components/crafting/Anvil/Anvil.types.d.ts.map +1 -0
- package/dist/components/crafting/Anvil/Anvil.utils.d.ts +3 -0
- package/dist/components/crafting/Anvil/Anvil.utils.d.ts.map +1 -0
- package/dist/components/crafting/Anvil/Anvil.utils.js +11 -0
- package/dist/components/crafting/Anvil/Anvil.utils.js.map +1 -0
- package/dist/components/crafting/Anvil/index.d.ts +5 -0
- package/dist/components/crafting/Anvil/index.d.ts.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.d.ts +7 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.d.ts.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.js +116 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.js.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.module.js +29 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.module.js.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts +22 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.types.js +11 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.types.js.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.utils.d.ts +6 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.utils.d.ts.map +1 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.utils.js +13 -0
- package/dist/components/crafting/BrewingStand/BrewingStand.utils.js.map +1 -0
- package/dist/components/crafting/BrewingStand/index.d.ts +5 -0
- package/dist/components/crafting/BrewingStand/index.d.ts.map +1 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.d.ts +7 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.d.ts.map +1 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.js +105 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.js.map +1 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.module.js +32 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.module.js.map +1 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts +29 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts.map +1 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.utils.d.ts +11 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.utils.d.ts.map +1 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.utils.js +14 -0
- package/dist/components/crafting/EnchantingTable/EnchantingTable.utils.js.map +1 -0
- package/dist/components/crafting/EnchantingTable/index.d.ts +3 -0
- package/dist/components/crafting/EnchantingTable/index.d.ts.map +1 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.d.ts +7 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.d.ts.map +1 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.js +149 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.js.map +1 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.module.js +39 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.module.js.map +1 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts +36 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts.map +1 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.utils.d.ts +9 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.utils.d.ts.map +1 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.utils.js +21 -0
- package/dist/components/crafting/RecipeBook/RecipeBook.utils.js.map +1 -0
- package/dist/components/crafting/RecipeBook/index.d.ts +4 -0
- package/dist/components/crafting/RecipeBook/index.d.ts.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.d.ts +7 -0
- package/dist/components/crafting/TradingUI/TradingUI.d.ts.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.js +181 -0
- package/dist/components/crafting/TradingUI/TradingUI.js.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.module.js +39 -0
- package/dist/components/crafting/TradingUI/TradingUI.module.js.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.types.d.ts +36 -0
- package/dist/components/crafting/TradingUI/TradingUI.types.d.ts.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.types.js +12 -0
- package/dist/components/crafting/TradingUI/TradingUI.types.js.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.utils.d.ts +3 -0
- package/dist/components/crafting/TradingUI/TradingUI.utils.d.ts.map +1 -0
- package/dist/components/crafting/TradingUI/TradingUI.utils.js +8 -0
- package/dist/components/crafting/TradingUI/TradingUI.utils.js.map +1 -0
- package/dist/components/crafting/TradingUI/index.d.ts +4 -0
- package/dist/components/crafting/TradingUI/index.d.ts.map +1 -0
- package/dist/components/crafting/index.d.ts +5 -0
- package/dist/components/crafting/index.d.ts.map +1 -1
- package/dist/components/display/SkillTree/SkillTree.d.ts +8 -0
- package/dist/components/display/SkillTree/SkillTree.d.ts.map +1 -0
- package/dist/components/display/SkillTree/SkillTree.js +138 -0
- package/dist/components/display/SkillTree/SkillTree.js.map +1 -0
- package/dist/components/display/SkillTree/SkillTree.module.js +33 -0
- package/dist/components/display/SkillTree/SkillTree.module.js.map +1 -0
- package/dist/components/display/SkillTree/SkillTree.types.d.ts +29 -0
- package/dist/components/display/SkillTree/SkillTree.types.d.ts.map +1 -0
- package/dist/components/display/SkillTree/SkillTree.utils.d.ts +8 -0
- package/dist/components/display/SkillTree/SkillTree.utils.d.ts.map +1 -0
- package/dist/components/display/SkillTree/SkillTree.utils.js +16 -0
- package/dist/components/display/SkillTree/SkillTree.utils.js.map +1 -0
- package/dist/components/display/SkillTree/index.d.ts +4 -0
- package/dist/components/display/SkillTree/index.d.ts.map +1 -0
- package/dist/components/display/index.d.ts +1 -0
- package/dist/components/display/index.d.ts.map +1 -1
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.d.ts +4 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.d.ts.map +1 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.js +39 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.js.map +1 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.module.js +11 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.module.js.map +1 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.types.d.ts +16 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.types.d.ts.map +1 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.types.js +18 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.types.js.map +1 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.utils.d.ts +8 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.utils.d.ts.map +1 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.utils.js +55 -0
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.utils.js.map +1 -0
- package/dist/components/hud/BiomeIndicator/index.d.ts +4 -0
- package/dist/components/hud/BiomeIndicator/index.d.ts.map +1 -0
- package/dist/components/hud/BossBar/BossBar.d.ts +4 -0
- package/dist/components/hud/BossBar/BossBar.d.ts.map +1 -0
- package/dist/components/hud/BossBar/BossBar.js +56 -0
- package/dist/components/hud/BossBar/BossBar.js.map +1 -0
- package/dist/components/hud/BossBar/BossBar.module.js +19 -0
- package/dist/components/hud/BossBar/BossBar.module.js.map +1 -0
- package/dist/components/hud/BossBar/BossBar.types.d.ts +22 -0
- package/dist/components/hud/BossBar/BossBar.types.d.ts.map +1 -0
- package/dist/components/hud/BossBar/BossBar.types.js +21 -0
- package/dist/components/hud/BossBar/BossBar.types.js.map +1 -0
- package/dist/components/hud/BossBar/index.d.ts +4 -0
- package/dist/components/hud/BossBar/index.d.ts.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.d.ts +4 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.d.ts.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js +96 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.module.js +17 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.module.js.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.types.d.ts +19 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.types.d.ts.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.types.js +11 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.types.js.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.utils.d.ts +7 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.utils.d.ts.map +1 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.utils.js +24 -0
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.utils.js.map +1 -0
- package/dist/components/hud/CoordinatesHUD/index.d.ts +4 -0
- package/dist/components/hud/CoordinatesHUD/index.d.ts.map +1 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.d.ts +4 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.d.ts.map +1 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.js +70 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.js.map +1 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.module.js +19 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.module.js.map +1 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.types.d.ts +17 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.types.d.ts.map +1 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts +15 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts.map +1 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js +43 -0
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js.map +1 -0
- package/dist/components/hud/DayNightIndicator/index.d.ts +4 -0
- package/dist/components/hud/DayNightIndicator/index.d.ts.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.d.ts +8 -0
- package/dist/components/hud/MiniMap/MiniMap.d.ts.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.js +76 -0
- package/dist/components/hud/MiniMap/MiniMap.js.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.module.js +17 -0
- package/dist/components/hud/MiniMap/MiniMap.module.js.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.types.d.ts +43 -0
- package/dist/components/hud/MiniMap/MiniMap.types.d.ts.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.types.js +26 -0
- package/dist/components/hud/MiniMap/MiniMap.types.js.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.utils.d.ts +14 -0
- package/dist/components/hud/MiniMap/MiniMap.utils.d.ts.map +1 -0
- package/dist/components/hud/MiniMap/MiniMap.utils.js +47 -0
- package/dist/components/hud/MiniMap/MiniMap.utils.js.map +1 -0
- package/dist/components/hud/MiniMap/index.d.ts +5 -0
- package/dist/components/hud/MiniMap/index.d.ts.map +1 -0
- package/dist/components/hud/Scoreboard/Scoreboard.d.ts +7 -0
- package/dist/components/hud/Scoreboard/Scoreboard.d.ts.map +1 -0
- package/dist/components/hud/Scoreboard/Scoreboard.js +89 -0
- package/dist/components/hud/Scoreboard/Scoreboard.js.map +1 -0
- package/dist/components/hud/Scoreboard/Scoreboard.module.js +25 -0
- package/dist/components/hud/Scoreboard/Scoreboard.module.js.map +1 -0
- package/dist/components/hud/Scoreboard/Scoreboard.types.d.ts +23 -0
- package/dist/components/hud/Scoreboard/Scoreboard.types.d.ts.map +1 -0
- package/dist/components/hud/Scoreboard/Scoreboard.utils.d.ts +5 -0
- package/dist/components/hud/Scoreboard/Scoreboard.utils.d.ts.map +1 -0
- package/dist/components/hud/Scoreboard/Scoreboard.utils.js +15 -0
- package/dist/components/hud/Scoreboard/Scoreboard.utils.js.map +1 -0
- package/dist/components/hud/Scoreboard/index.d.ts +3 -0
- package/dist/components/hud/Scoreboard/index.d.ts.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.d.ts +4 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.d.ts.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.js +52 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.js.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.module.js +15 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.module.js.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.types.d.ts +17 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.types.d.ts.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.types.js +12 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.types.js.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.d.ts +5 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.d.ts.map +1 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js +22 -0
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js.map +1 -0
- package/dist/components/hud/WeatherIndicator/index.d.ts +4 -0
- package/dist/components/hud/WeatherIndicator/index.d.ts.map +1 -0
- package/dist/components/hud/hudChip.module.js +15 -0
- package/dist/components/hud/hudChip.module.js.map +1 -0
- package/dist/components/hud/index.d.ts +7 -0
- package/dist/components/hud/index.d.ts.map +1 -1
- package/dist/components/social/ChatWindow/ChatWindow.d.ts +8 -0
- package/dist/components/social/ChatWindow/ChatWindow.d.ts.map +1 -0
- package/dist/components/social/ChatWindow/ChatWindow.js +146 -0
- package/dist/components/social/ChatWindow/ChatWindow.js.map +1 -0
- package/dist/components/social/ChatWindow/ChatWindow.module.js +27 -0
- package/dist/components/social/ChatWindow/ChatWindow.module.js.map +1 -0
- package/dist/components/social/ChatWindow/ChatWindow.types.d.ts +29 -0
- package/dist/components/social/ChatWindow/ChatWindow.types.d.ts.map +1 -0
- package/dist/components/social/ChatWindow/ChatWindow.types.js +12 -0
- package/dist/components/social/ChatWindow/ChatWindow.types.js.map +1 -0
- package/dist/components/social/ChatWindow/index.d.ts +4 -0
- package/dist/components/social/ChatWindow/index.d.ts.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.d.ts +7 -0
- package/dist/components/social/CommandConsole/CommandConsole.d.ts.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.js +187 -0
- package/dist/components/social/CommandConsole/CommandConsole.js.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.module.js +31 -0
- package/dist/components/social/CommandConsole/CommandConsole.module.js.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.types.d.ts +28 -0
- package/dist/components/social/CommandConsole/CommandConsole.types.d.ts.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.types.js +11 -0
- package/dist/components/social/CommandConsole/CommandConsole.types.js.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.utils.d.ts +4 -0
- package/dist/components/social/CommandConsole/CommandConsole.utils.d.ts.map +1 -0
- package/dist/components/social/CommandConsole/CommandConsole.utils.js +11 -0
- package/dist/components/social/CommandConsole/CommandConsole.utils.js.map +1 -0
- package/dist/components/social/CommandConsole/index.d.ts +5 -0
- package/dist/components/social/CommandConsole/index.d.ts.map +1 -0
- package/dist/components/social/index.d.ts +3 -0
- package/dist/components/social/index.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -1
- package/dist/styles.css +2055 -486
- package/package.json +4 -4
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MiniMapProps } from "./MiniMap.types";
|
|
2
|
+
/**
|
|
3
|
+
* Top-down mini map: terrain pixels centred on the player, a heading arrow,
|
|
4
|
+
* markers and a compass "N". Screen readers get the heading and each marker's
|
|
5
|
+
* distance and direction as text.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MiniMap: import("react").ForwardRefExoticComponent<MiniMapProps & import("react").RefAttributes<HTMLElement>>;
|
|
8
|
+
//# sourceMappingURL=MiniMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/MiniMap/MiniMap.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;;;GAIG;AACH,eAAO,MAAM,OAAO,sGAsElB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import MiniMap_module_default from "./MiniMap.module.js";
|
|
3
|
+
import { compassName, describeMarker, terrainRuns } from "./MiniMap.utils.js";
|
|
4
|
+
import { forwardRef, useId } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/hud/MiniMap/MiniMap.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Top-down mini map: terrain pixels centred on the player, a heading arrow,
|
|
9
|
+
* markers and a compass "N". Screen readers get the heading and each marker's
|
|
10
|
+
* distance and direction as text.
|
|
11
|
+
*/
|
|
12
|
+
var MiniMap = forwardRef(function MiniMap({ tiles, heading = 0, markers = [], shape = "square", size = "md", label = "Mini map", className, ...rest }, ref) {
|
|
13
|
+
const captionId = useId();
|
|
14
|
+
const rows = Math.max(1, tiles.length);
|
|
15
|
+
const columns = Math.max(1, ...tiles.map((row) => row.length));
|
|
16
|
+
const cx0 = columns / 2;
|
|
17
|
+
const cy0 = rows / 2;
|
|
18
|
+
return /* @__PURE__ */ jsxs("figure", {
|
|
19
|
+
ref,
|
|
20
|
+
"aria-labelledby": captionId,
|
|
21
|
+
"data-shape": shape,
|
|
22
|
+
"data-size": size,
|
|
23
|
+
className: cx(MiniMap_module_default.map, className),
|
|
24
|
+
...rest,
|
|
25
|
+
children: [
|
|
26
|
+
/* @__PURE__ */ jsxs("svg", {
|
|
27
|
+
className: MiniMap_module_default.svg,
|
|
28
|
+
viewBox: `0 0 ${columns} ${rows}`,
|
|
29
|
+
shapeRendering: "crispEdges",
|
|
30
|
+
"aria-hidden": "true",
|
|
31
|
+
children: [
|
|
32
|
+
terrainRuns(tiles).map((run) => /* @__PURE__ */ jsx("rect", {
|
|
33
|
+
x: run.x,
|
|
34
|
+
y: run.y,
|
|
35
|
+
width: run.width,
|
|
36
|
+
height: 1,
|
|
37
|
+
"data-terrain": run.terrain
|
|
38
|
+
}, `${run.x}-${run.y}`)),
|
|
39
|
+
markers.map((marker) => /* @__PURE__ */ jsx("rect", {
|
|
40
|
+
className: MiniMap_module_default.marker,
|
|
41
|
+
"data-kind": marker.kind ?? "poi",
|
|
42
|
+
x: cx0 + marker.x - .75,
|
|
43
|
+
y: cy0 + marker.y - .75,
|
|
44
|
+
width: 1.5,
|
|
45
|
+
height: 1.5
|
|
46
|
+
}, marker.id)),
|
|
47
|
+
/* @__PURE__ */ jsx("polygon", {
|
|
48
|
+
className: MiniMap_module_default.player,
|
|
49
|
+
points: `${cx0},${cy0 - 1.6} ${cx0 + 1.1},${cy0 + 1.1} ${cx0},${cy0 + .5} ${cx0 - 1.1},${cy0 + 1.1}`,
|
|
50
|
+
transform: `rotate(${heading} ${cx0} ${cy0})`
|
|
51
|
+
})
|
|
52
|
+
]
|
|
53
|
+
}),
|
|
54
|
+
/* @__PURE__ */ jsx("span", {
|
|
55
|
+
className: MiniMap_module_default.north,
|
|
56
|
+
"aria-hidden": "true",
|
|
57
|
+
children: "N"
|
|
58
|
+
}),
|
|
59
|
+
/* @__PURE__ */ jsxs("figcaption", {
|
|
60
|
+
id: captionId,
|
|
61
|
+
className: "block-visually-hidden",
|
|
62
|
+
children: [
|
|
63
|
+
label,
|
|
64
|
+
". Facing ",
|
|
65
|
+
compassName(heading),
|
|
66
|
+
".",
|
|
67
|
+
markers.length > 0 ? ` ${markers.map(describeMarker).join(". ")}.` : ""
|
|
68
|
+
]
|
|
69
|
+
})
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//#endregion
|
|
74
|
+
export { MiniMap };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=MiniMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.js","names":["styles"],"sources":["../../../../src/components/hud/MiniMap/MiniMap.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./MiniMap.module.css\";\nimport type { MiniMapProps } from \"./MiniMap.types\";\nimport { compassName, describeMarker, terrainRuns } from \"./MiniMap.utils\";\n\n/**\n * Top-down mini map: terrain pixels centred on the player, a heading arrow,\n * markers and a compass \"N\". Screen readers get the heading and each marker's\n * distance and direction as text.\n */\nexport const MiniMap = forwardRef<HTMLElement, MiniMapProps>(function MiniMap(\n {\n tiles,\n heading = 0,\n markers = [],\n shape = \"square\",\n size = \"md\",\n label = \"Mini map\",\n className,\n ...rest\n },\n ref,\n) {\n const captionId = useId();\n const rows = Math.max(1, tiles.length);\n const columns = Math.max(1, ...tiles.map((row) => row.length));\n const cx0 = columns / 2;\n const cy0 = rows / 2;\n\n return (\n <figure\n ref={ref}\n aria-labelledby={captionId}\n data-shape={shape}\n data-size={size}\n className={cx(styles.map, className)}\n {...rest}\n >\n <svg\n className={styles.svg}\n viewBox={`0 0 ${columns} ${rows}`}\n shapeRendering=\"crispEdges\"\n aria-hidden=\"true\"\n >\n {terrainRuns(tiles).map((run) => (\n <rect\n key={`${run.x}-${run.y}`}\n x={run.x}\n y={run.y}\n width={run.width}\n height={1}\n data-terrain={run.terrain}\n />\n ))}\n {markers.map((marker) => (\n <rect\n key={marker.id}\n className={styles.marker}\n data-kind={marker.kind ?? \"poi\"}\n x={cx0 + marker.x - 0.75}\n y={cy0 + marker.y - 0.75}\n width={1.5}\n height={1.5}\n />\n ))}\n <polygon\n className={styles.player}\n points={`${cx0},${cy0 - 1.6} ${cx0 + 1.1},${cy0 + 1.1} ${cx0},${cy0 + 0.5} ${cx0 - 1.1},${cy0 + 1.1}`}\n transform={`rotate(${heading} ${cx0} ${cy0})`}\n />\n </svg>\n <span className={styles.north} aria-hidden=\"true\">\n N\n </span>\n <figcaption id={captionId} className=\"block-visually-hidden\">\n {label}. Facing {compassName(heading)}.\n {markers.length > 0 ? ` ${markers.map(describeMarker).join(\". \")}.` : \"\"}\n </figcaption>\n </figure>\n );\n});\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,UAAU,WAAsC,SAAS,QACpE,EACE,OACA,UAAU,GACV,UAAU,CAAC,GACX,QAAQ,UACR,OAAO,MACP,QAAQ,YACR,WACA,GAAG,QAEL,KACA;CACA,MAAM,YAAY,MAAM;CACxB,MAAM,OAAO,KAAK,IAAI,GAAG,MAAM,MAAM;CACrC,MAAM,UAAU,KAAK,IAAI,GAAG,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;CAC7D,MAAM,MAAM,UAAU;CACtB,MAAM,MAAM,OAAO;CAEnB,OACE,qBAAC,UAAD;EACO;EACL,mBAAiB;EACjB,cAAY;EACZ,aAAW;EACX,WAAW,GAAGA,uBAAO,KAAK,SAAS;EACnC,GAAI;EANN,UAAA;GAQE,qBAAC,OAAD;IACE,WAAWA,uBAAO;IAClB,SAAS,OAAO,QAAQ,GAAG;IAC3B,gBAAe;IACf,eAAY;IAJd,UAAA;KAMG,YAAY,KAAK,CAAC,CAAC,KAAK,QACvB,oBAAC,QAAD;MAEE,GAAG,IAAI;MACP,GAAG,IAAI;MACP,OAAO,IAAI;MACX,QAAQ;MACR,gBAAc,IAAI;KACnB,GANM,GAAG,IAAI,EAAE,GAAG,IAAI,GAMtB,CACF;KACA,QAAQ,KAAK,WACZ,oBAAC,QAAD;MAEE,WAAWA,uBAAO;MAClB,aAAW,OAAO,QAAQ;MAC1B,GAAG,MAAM,OAAO,IAAI;MACpB,GAAG,MAAM,OAAO,IAAI;MACpB,OAAO;MACP,QAAQ;KACT,GAPM,OAAO,EAOb,CACF;KACD,oBAAC,WAAD;MACE,WAAWA,uBAAO;MAClB,QAAQ,GAAG,IAAI,GAAG,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,IAAI,GAAG,MAAM,GAAI,GAAG,MAAM,IAAI,GAAG,MAAM;MAChG,WAAW,UAAU,QAAQ,GAAG,IAAI,GAAG,IAAI;KAC5C,CAAA;IACE;;GACL,oBAAC,QAAD;IAAM,WAAWA,uBAAO;IAAO,eAAY;IAAO,UAAA;GAE5C,CAAA;GACN,qBAAC,cAAD;IAAY,IAAI;IAAW,WAAU;IAArC,UAAA;KACG;KAAM;KAAU,YAAY,OAAO;KAAE;KACrC,QAAQ,SAAS,IAAI,IAAI,QAAQ,IAAI,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,KAAK;IAC5D;;EACN;;AAEZ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/components/hud/MiniMap/MiniMap.module.css
|
|
2
|
+
var map = "block-map-QzhiQ";
|
|
3
|
+
var svg = "block-svg-VlTbt";
|
|
4
|
+
var marker = "block-marker-ovenA";
|
|
5
|
+
var player = "block-player-4KZP-";
|
|
6
|
+
var north = "block-north-lfYMy";
|
|
7
|
+
var MiniMap_module_default = {
|
|
8
|
+
map,
|
|
9
|
+
svg,
|
|
10
|
+
marker,
|
|
11
|
+
player,
|
|
12
|
+
north
|
|
13
|
+
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { MiniMap_module_default as default, map, marker, north, player, svg };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=MiniMap.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.module.js","names":[],"sources":["../../../../src/components/hud/MiniMap/MiniMap.module.css"],"sourcesContent":[".map {\n --map-size: 128px;\n position: relative;\n width: var(--map-size);\n height: var(--map-size);\n margin: 0;\n flex-shrink: 0;\n overflow: hidden;\n background-color: var(--block-black);\n border: var(--block-border-width) solid var(--block-border);\n box-shadow: var(--block-shadow-bevel);\n}\n\n.map[data-size=\"sm\"] {\n --map-size: 96px;\n}\n\n.map[data-size=\"lg\"] {\n --map-size: 192px;\n}\n\n.map[data-shape=\"round\"] {\n border-radius: 50%;\n}\n\n.svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.svg [data-terrain=\"grass\"] {\n fill: var(--block-grass);\n}\n\n.svg [data-terrain=\"forest\"] {\n fill: var(--block-grass-dark);\n}\n\n.svg [data-terrain=\"dirt\"] {\n fill: var(--block-dirt);\n}\n\n.svg [data-terrain=\"sand\"] {\n fill: var(--block-sand);\n}\n\n.svg [data-terrain=\"water\"] {\n fill: var(--block-water);\n}\n\n.svg [data-terrain=\"stone\"] {\n fill: var(--block-stone);\n}\n\n.svg [data-terrain=\"snow\"] {\n fill: var(--block-white);\n}\n\n.svg [data-terrain=\"lava\"] {\n fill: var(--block-lava);\n}\n\n.svg [data-terrain=\"unknown\"] {\n fill: var(--block-black);\n}\n\n.marker {\n stroke: var(--block-black);\n stroke-width: 0.3;\n}\n\n.marker[data-kind=\"home\"] {\n fill: var(--block-gold-light);\n}\n\n.marker[data-kind=\"player\"] {\n fill: var(--block-diamond-light);\n}\n\n.marker[data-kind=\"death\"] {\n fill: var(--block-redstone-light);\n}\n\n.marker[data-kind=\"poi\"] {\n fill: var(--block-amethyst-light);\n}\n\n.player {\n fill: var(--block-white);\n stroke: var(--block-black);\n stroke-width: 0.3;\n stroke-linejoin: round;\n}\n\n.north {\n position: absolute;\n top: 2px;\n left: 50%;\n transform: translateX(-50%);\n font-family: var(--block-font-display);\n font-size: var(--block-font-size-xs);\n font-weight: var(--block-font-weight-bold);\n line-height: 1;\n color: var(--block-redstone-light);\n text-shadow: var(--block-shadow-text);\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Terrain codes for `tiles`: `g` grass, `f` forest, `d` dirt, `s` sand,
|
|
4
|
+
* `w` water, `t` stone, `n` snow, `l` lava, `.` unexplored.
|
|
5
|
+
*/
|
|
6
|
+
export declare const miniMapTerrain: {
|
|
7
|
+
readonly g: "grass";
|
|
8
|
+
readonly f: "forest";
|
|
9
|
+
readonly d: "dirt";
|
|
10
|
+
readonly s: "sand";
|
|
11
|
+
readonly w: "water";
|
|
12
|
+
readonly t: "stone";
|
|
13
|
+
readonly n: "snow";
|
|
14
|
+
readonly l: "lava";
|
|
15
|
+
readonly ".": "unknown";
|
|
16
|
+
};
|
|
17
|
+
export type MiniMapTerrainCode = keyof typeof miniMapTerrain;
|
|
18
|
+
export declare const miniMapMarkerKinds: readonly ["home", "player", "death", "poi"];
|
|
19
|
+
export type MiniMapMarkerKind = (typeof miniMapMarkerKinds)[number];
|
|
20
|
+
export interface MiniMapMarker {
|
|
21
|
+
id: string;
|
|
22
|
+
/** Tiles east (+) / west (−) of the player. */
|
|
23
|
+
x: number;
|
|
24
|
+
/** Tiles south (+) / north (−) of the player. */
|
|
25
|
+
y: number;
|
|
26
|
+
label: string;
|
|
27
|
+
/** @default "poi" */
|
|
28
|
+
kind?: MiniMapMarkerKind;
|
|
29
|
+
}
|
|
30
|
+
export interface MiniMapProps extends HTMLAttributes<HTMLElement> {
|
|
31
|
+
/** Rows of terrain codes (see `miniMapTerrain`), centred on the player. */
|
|
32
|
+
tiles: string[];
|
|
33
|
+
/** Player heading in degrees, 0 = north, clockwise. @default 0 */
|
|
34
|
+
heading?: number;
|
|
35
|
+
markers?: MiniMapMarker[];
|
|
36
|
+
/** @default "square" */
|
|
37
|
+
shape?: "square" | "round";
|
|
38
|
+
/** 96 / 128 / 192 px. @default "md" */
|
|
39
|
+
size?: "sm" | "md" | "lg";
|
|
40
|
+
/** Accessible name. @default "Mini map" */
|
|
41
|
+
label?: string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=MiniMap.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.types.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/MiniMap/MiniMap.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;CAUjB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE7D,eAAO,MAAM,kBAAkB,6CAA8C,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,CAAC,EAAE,MAAM,CAAC;IACV,iDAAiD;IACjD,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,WAAW,CAAC;IAC/D,2EAA2E;IAC3E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,wBAAwB;IACxB,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,uCAAuC;IACvC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/components/hud/MiniMap/MiniMap.types.ts
|
|
2
|
+
/**
|
|
3
|
+
* Terrain codes for `tiles`: `g` grass, `f` forest, `d` dirt, `s` sand,
|
|
4
|
+
* `w` water, `t` stone, `n` snow, `l` lava, `.` unexplored.
|
|
5
|
+
*/
|
|
6
|
+
var miniMapTerrain = {
|
|
7
|
+
g: "grass",
|
|
8
|
+
f: "forest",
|
|
9
|
+
d: "dirt",
|
|
10
|
+
s: "sand",
|
|
11
|
+
w: "water",
|
|
12
|
+
t: "stone",
|
|
13
|
+
n: "snow",
|
|
14
|
+
l: "lava",
|
|
15
|
+
".": "unknown"
|
|
16
|
+
};
|
|
17
|
+
var miniMapMarkerKinds = [
|
|
18
|
+
"home",
|
|
19
|
+
"player",
|
|
20
|
+
"death",
|
|
21
|
+
"poi"
|
|
22
|
+
];
|
|
23
|
+
//#endregion
|
|
24
|
+
export { miniMapMarkerKinds, miniMapTerrain };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=MiniMap.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.types.js","names":[],"sources":["../../../../src/components/hud/MiniMap/MiniMap.types.ts"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\n\n/**\n * Terrain codes for `tiles`: `g` grass, `f` forest, `d` dirt, `s` sand,\n * `w` water, `t` stone, `n` snow, `l` lava, `.` unexplored.\n */\nexport const miniMapTerrain = {\n g: \"grass\",\n f: \"forest\",\n d: \"dirt\",\n s: \"sand\",\n w: \"water\",\n t: \"stone\",\n n: \"snow\",\n l: \"lava\",\n \".\": \"unknown\",\n} as const;\n\nexport type MiniMapTerrainCode = keyof typeof miniMapTerrain;\n\nexport const miniMapMarkerKinds = [\"home\", \"player\", \"death\", \"poi\"] as const;\n\nexport type MiniMapMarkerKind = (typeof miniMapMarkerKinds)[number];\n\nexport interface MiniMapMarker {\n id: string;\n /** Tiles east (+) / west (−) of the player. */\n x: number;\n /** Tiles south (+) / north (−) of the player. */\n y: number;\n label: string;\n /** @default \"poi\" */\n kind?: MiniMapMarkerKind;\n}\n\nexport interface MiniMapProps extends HTMLAttributes<HTMLElement> {\n /** Rows of terrain codes (see `miniMapTerrain`), centred on the player. */\n tiles: string[];\n /** Player heading in degrees, 0 = north, clockwise. @default 0 */\n heading?: number;\n markers?: MiniMapMarker[];\n /** @default \"square\" */\n shape?: \"square\" | \"round\";\n /** 96 / 128 / 192 px. @default \"md\" */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Accessible name. @default \"Mini map\" */\n label?: string;\n}\n"],"mappings":";;;;;AAMA,IAAa,iBAAiB;CAC5B,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,KAAK;AACP;AAIA,IAAa,qBAAqB;CAAC;CAAQ;CAAU;CAAS;AAAK"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type MiniMapMarker } from "./MiniMap.types";
|
|
2
|
+
/** 8-way compass name for a clockwise angle from north. */
|
|
3
|
+
export declare function compassName(degrees: number): string;
|
|
4
|
+
/** "Home: 12 blocks north-east" style description of a marker. */
|
|
5
|
+
export declare function describeMarker(marker: MiniMapMarker): string;
|
|
6
|
+
export interface TerrainRun {
|
|
7
|
+
terrain: string;
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
width: number;
|
|
11
|
+
}
|
|
12
|
+
/** Merges horizontal runs of the same terrain into single rectangles. */
|
|
13
|
+
export declare function terrainRuns(tiles: string[]): TerrainRun[];
|
|
14
|
+
//# sourceMappingURL=MiniMap.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/MiniMap/MiniMap.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AAa9F,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAK5D;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAazD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { miniMapTerrain } from "./MiniMap.types.js";
|
|
2
|
+
//#region src/components/hud/MiniMap/MiniMap.utils.ts
|
|
3
|
+
var DIRECTIONS = [
|
|
4
|
+
"north",
|
|
5
|
+
"north-east",
|
|
6
|
+
"east",
|
|
7
|
+
"south-east",
|
|
8
|
+
"south",
|
|
9
|
+
"south-west",
|
|
10
|
+
"west",
|
|
11
|
+
"north-west"
|
|
12
|
+
];
|
|
13
|
+
/** 8-way compass name for a clockwise angle from north. */
|
|
14
|
+
function compassName(degrees) {
|
|
15
|
+
return DIRECTIONS[Math.round((degrees % 360 + 360) % 360 / 45) % 8] ?? "north";
|
|
16
|
+
}
|
|
17
|
+
/** "Home: 12 blocks north-east" style description of a marker. */
|
|
18
|
+
function describeMarker(marker) {
|
|
19
|
+
const distance = Math.round(Math.hypot(marker.x, marker.y));
|
|
20
|
+
if (distance === 0) return `${marker.label}: here`;
|
|
21
|
+
const angle = Math.atan2(marker.x, -marker.y) * 180 / Math.PI;
|
|
22
|
+
return `${marker.label}: ${distance} ${distance === 1 ? "block" : "blocks"} ${compassName(angle)}`;
|
|
23
|
+
}
|
|
24
|
+
/** Merges horizontal runs of the same terrain into single rectangles. */
|
|
25
|
+
function terrainRuns(tiles) {
|
|
26
|
+
const runs = [];
|
|
27
|
+
tiles.forEach((row, y) => {
|
|
28
|
+
let x = 0;
|
|
29
|
+
while (x < row.length) {
|
|
30
|
+
const code = row[x];
|
|
31
|
+
let width = 1;
|
|
32
|
+
while (row[x + width] === code) width += 1;
|
|
33
|
+
runs.push({
|
|
34
|
+
terrain: miniMapTerrain[code] ?? "unknown",
|
|
35
|
+
x,
|
|
36
|
+
y,
|
|
37
|
+
width
|
|
38
|
+
});
|
|
39
|
+
x += width;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return runs;
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { compassName, describeMarker, terrainRuns };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=MiniMap.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiniMap.utils.js","names":[],"sources":["../../../../src/components/hud/MiniMap/MiniMap.utils.ts"],"sourcesContent":["import { miniMapTerrain, type MiniMapMarker, type MiniMapTerrainCode } from \"./MiniMap.types\";\n\nconst DIRECTIONS = [\n \"north\",\n \"north-east\",\n \"east\",\n \"south-east\",\n \"south\",\n \"south-west\",\n \"west\",\n \"north-west\",\n];\n\n/** 8-way compass name for a clockwise angle from north. */\nexport function compassName(degrees: number): string {\n const index = Math.round((((degrees % 360) + 360) % 360) / 45) % 8;\n return DIRECTIONS[index] ?? \"north\";\n}\n\n/** \"Home: 12 blocks north-east\" style description of a marker. */\nexport function describeMarker(marker: MiniMapMarker): string {\n const distance = Math.round(Math.hypot(marker.x, marker.y));\n if (distance === 0) return `${marker.label}: here`;\n const angle = (Math.atan2(marker.x, -marker.y) * 180) / Math.PI;\n return `${marker.label}: ${distance} ${distance === 1 ? \"block\" : \"blocks\"} ${compassName(angle)}`;\n}\n\nexport interface TerrainRun {\n terrain: string;\n x: number;\n y: number;\n width: number;\n}\n\n/** Merges horizontal runs of the same terrain into single rectangles. */\nexport function terrainRuns(tiles: string[]): TerrainRun[] {\n const runs: TerrainRun[] = [];\n tiles.forEach((row, y) => {\n let x = 0;\n while (x < row.length) {\n const code = row[x] as MiniMapTerrainCode;\n let width = 1;\n while (row[x + width] === code) width += 1;\n runs.push({ terrain: miniMapTerrain[code] ?? \"unknown\", x, y, width });\n x += width;\n }\n });\n return runs;\n}\n"],"mappings":";;AAEA,IAAM,aAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,SAAgB,YAAY,SAAyB;CAEnD,OAAO,WADO,KAAK,OAAS,UAAU,MAAO,OAAO,MAAO,EAAE,IAAI,MACrC;AAC9B;;AAGA,SAAgB,eAAe,QAA+B;CAC5D,MAAM,WAAW,KAAK,MAAM,KAAK,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;CAC1D,IAAI,aAAa,GAAG,OAAO,GAAG,OAAO,MAAM;CAC3C,MAAM,QAAS,KAAK,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAO,KAAK;CAC7D,OAAO,GAAG,OAAO,MAAM,IAAI,SAAS,GAAG,aAAa,IAAI,UAAU,SAAS,GAAG,YAAY,KAAK;AACjG;;AAUA,SAAgB,YAAY,OAA+B;CACzD,MAAM,OAAqB,CAAC;CAC5B,MAAM,SAAS,KAAK,MAAM;EACxB,IAAI,IAAI;EACR,OAAO,IAAI,IAAI,QAAQ;GACrB,MAAM,OAAO,IAAI;GACjB,IAAI,QAAQ;GACZ,OAAO,IAAI,IAAI,WAAW,MAAM,SAAS;GACzC,KAAK,KAAK;IAAE,SAAS,eAAe,SAAS;IAAW;IAAG;IAAG;GAAM,CAAC;GACrE,KAAK;EACP;CACF,CAAC;CACD,OAAO;AACT"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MiniMap } from "./MiniMap";
|
|
2
|
+
export { miniMapMarkerKinds, miniMapTerrain } from "./MiniMap.types";
|
|
3
|
+
export { compassName, describeMarker } from "./MiniMap.utils";
|
|
4
|
+
export type { MiniMapMarker, MiniMapMarkerKind, MiniMapProps, MiniMapTerrainCode, } from "./MiniMap.types";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/MiniMap/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ScoreboardProps } from "./Scoreboard.types";
|
|
2
|
+
/**
|
|
3
|
+
* Sidebar scoreboard: an objective title over name / score rows, sorted by
|
|
4
|
+
* score. A captioned table, so screen readers announce each name with its score.
|
|
5
|
+
*/
|
|
6
|
+
export declare const Scoreboard: import("react").ForwardRefExoticComponent<ScoreboardProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
7
|
+
//# sourceMappingURL=Scoreboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scoreboard.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/Scoreboard/Scoreboard.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4GAgErB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { formatNumber } from "../../../utils/number.js";
|
|
3
|
+
import Scoreboard_module_default from "./Scoreboard.module.js";
|
|
4
|
+
import { entryKey, sortEntries } from "./Scoreboard.utils.js";
|
|
5
|
+
import { forwardRef, useId } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/hud/Scoreboard/Scoreboard.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Sidebar scoreboard: an objective title over name / score rows, sorted by
|
|
10
|
+
* score. A captioned table, so screen readers announce each name with its score.
|
|
11
|
+
*/
|
|
12
|
+
var Scoreboard = forwardRef(function Scoreboard({ title, entries, sort = "desc", maxEntries = 15, highlightId, showRank = false, emptyText = "No scores yet", className, ...rest }, ref) {
|
|
13
|
+
const captionId = useId();
|
|
14
|
+
const sorted = sortEntries(entries, sort);
|
|
15
|
+
const visible = sorted.slice(0, Math.max(0, maxEntries));
|
|
16
|
+
const hidden = sorted.length - visible.length;
|
|
17
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
18
|
+
ref,
|
|
19
|
+
className: cx(Scoreboard_module_default.scoreboard, className),
|
|
20
|
+
...rest,
|
|
21
|
+
children: [/* @__PURE__ */ jsxs("table", {
|
|
22
|
+
className: Scoreboard_module_default.table,
|
|
23
|
+
"aria-labelledby": captionId,
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsx("caption", {
|
|
26
|
+
id: captionId,
|
|
27
|
+
className: Scoreboard_module_default.title,
|
|
28
|
+
children: title
|
|
29
|
+
}),
|
|
30
|
+
/* @__PURE__ */ jsx("thead", {
|
|
31
|
+
className: "block-visually-hidden",
|
|
32
|
+
children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
33
|
+
showRank ? /* @__PURE__ */ jsx("th", {
|
|
34
|
+
scope: "col",
|
|
35
|
+
children: "Rank"
|
|
36
|
+
}) : null,
|
|
37
|
+
/* @__PURE__ */ jsx("th", {
|
|
38
|
+
scope: "col",
|
|
39
|
+
children: "Name"
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ jsx("th", {
|
|
42
|
+
scope: "col",
|
|
43
|
+
children: "Score"
|
|
44
|
+
})
|
|
45
|
+
] })
|
|
46
|
+
}),
|
|
47
|
+
/* @__PURE__ */ jsx("tbody", { children: visible.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
|
|
48
|
+
colSpan: showRank ? 3 : 2,
|
|
49
|
+
className: Scoreboard_module_default.empty,
|
|
50
|
+
children: emptyText
|
|
51
|
+
}) }) : visible.map((entry, index) => {
|
|
52
|
+
const key = entryKey(entry, index);
|
|
53
|
+
const highlighted = highlightId !== void 0 && key === highlightId;
|
|
54
|
+
return /* @__PURE__ */ jsxs("tr", {
|
|
55
|
+
className: Scoreboard_module_default.row,
|
|
56
|
+
"data-highlighted": highlighted || void 0,
|
|
57
|
+
"aria-current": highlighted ? "true" : void 0,
|
|
58
|
+
children: [
|
|
59
|
+
showRank ? /* @__PURE__ */ jsx("td", {
|
|
60
|
+
className: Scoreboard_module_default.rank,
|
|
61
|
+
children: index + 1
|
|
62
|
+
}) : null,
|
|
63
|
+
/* @__PURE__ */ jsx("th", {
|
|
64
|
+
scope: "row",
|
|
65
|
+
className: Scoreboard_module_default.name,
|
|
66
|
+
children: entry.name
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ jsx("td", {
|
|
69
|
+
className: Scoreboard_module_default.score,
|
|
70
|
+
children: formatNumber(entry.score)
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
}, key);
|
|
74
|
+
}) })
|
|
75
|
+
]
|
|
76
|
+
}), hidden > 0 ? /* @__PURE__ */ jsxs("p", {
|
|
77
|
+
className: Scoreboard_module_default.more,
|
|
78
|
+
children: [
|
|
79
|
+
"+",
|
|
80
|
+
hidden,
|
|
81
|
+
" more"
|
|
82
|
+
]
|
|
83
|
+
}) : null]
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//#endregion
|
|
87
|
+
export { Scoreboard };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=Scoreboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scoreboard.js","names":["styles"],"sources":["../../../../src/components/hud/Scoreboard/Scoreboard.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { formatNumber } from \"../../../utils/number\";\nimport styles from \"./Scoreboard.module.css\";\nimport type { ScoreboardProps } from \"./Scoreboard.types\";\nimport { entryKey, sortEntries } from \"./Scoreboard.utils\";\n\n/**\n * Sidebar scoreboard: an objective title over name / score rows, sorted by\n * score. A captioned table, so screen readers announce each name with its score.\n */\nexport const Scoreboard = forwardRef<HTMLDivElement, ScoreboardProps>(function Scoreboard(\n {\n title,\n entries,\n sort = \"desc\",\n maxEntries = 15,\n highlightId,\n showRank = false,\n emptyText = \"No scores yet\",\n className,\n ...rest\n },\n ref,\n) {\n const captionId = useId();\n const sorted = sortEntries(entries, sort);\n const visible = sorted.slice(0, Math.max(0, maxEntries));\n const hidden = sorted.length - visible.length;\n\n return (\n <div ref={ref} className={cx(styles.scoreboard, className)} {...rest}>\n <table className={styles.table} aria-labelledby={captionId}>\n <caption id={captionId} className={styles.title}>\n {title}\n </caption>\n <thead className=\"block-visually-hidden\">\n <tr>\n {showRank ? <th scope=\"col\">Rank</th> : null}\n <th scope=\"col\">Name</th>\n <th scope=\"col\">Score</th>\n </tr>\n </thead>\n <tbody>\n {visible.length === 0 ? (\n <tr>\n <td colSpan={showRank ? 3 : 2} className={styles.empty}>\n {emptyText}\n </td>\n </tr>\n ) : (\n visible.map((entry, index) => {\n const key = entryKey(entry, index);\n const highlighted = highlightId !== undefined && key === highlightId;\n return (\n <tr\n key={key}\n className={styles.row}\n data-highlighted={highlighted || undefined}\n aria-current={highlighted ? \"true\" : undefined}\n >\n {showRank ? <td className={styles.rank}>{index + 1}</td> : null}\n <th scope=\"row\" className={styles.name}>\n {entry.name}\n </th>\n <td className={styles.score}>{formatNumber(entry.score)}</td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n {hidden > 0 ? <p className={styles.more}>+{hidden} more</p> : null}\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,aAAa,WAA4C,SAAS,WAC7E,EACE,OACA,SACA,OAAO,QACP,aAAa,IACb,aACA,WAAW,OACX,YAAY,iBACZ,WACA,GAAG,QAEL,KACA;CACA,MAAM,YAAY,MAAM;CACxB,MAAM,SAAS,YAAY,SAAS,IAAI;CACxC,MAAM,UAAU,OAAO,MAAM,GAAG,KAAK,IAAI,GAAG,UAAU,CAAC;CACvD,MAAM,SAAS,OAAO,SAAS,QAAQ;CAEvC,OACE,qBAAC,OAAD;EAAU;EAAK,WAAW,GAAGA,0BAAO,YAAY,SAAS;EAAG,GAAI;EAAhE,UAAA,CACE,qBAAC,SAAD;GAAO,WAAWA,0BAAO;GAAO,mBAAiB;GAAjD,UAAA;IACE,oBAAC,WAAD;KAAS,IAAI;KAAW,WAAWA,0BAAO;KACvC,UAAA;IACM,CAAA;IACT,oBAAC,SAAD;KAAO,WAAU;KACf,UAAA,qBAAC,MAAD,EAAA,UAAA;MACG,WAAW,oBAAC,MAAD;OAAI,OAAM;OAAM,UAAA;MAAQ,CAAA,IAAI;MACxC,oBAAC,MAAD;OAAI,OAAM;OAAM,UAAA;MAAQ,CAAA;MACxB,oBAAC,MAAD;OAAI,OAAM;OAAM,UAAA;MAAS,CAAA;KACvB,EAAA,CAAA;IACC,CAAA;IACP,oBAAC,SAAD,EAAA,UACG,QAAQ,WAAW,IAClB,oBAAC,MAAD,EAAA,UACE,oBAAC,MAAD;KAAI,SAAS,WAAW,IAAI;KAAG,WAAWA,0BAAO;KAC9C,UAAA;IACC,CAAA,EACF,CAAA,IAEJ,QAAQ,KAAK,OAAO,UAAU;KAC5B,MAAM,MAAM,SAAS,OAAO,KAAK;KACjC,MAAM,cAAc,gBAAgB,KAAA,KAAa,QAAQ;KACzD,OACE,qBAAC,MAAD;MAEE,WAAWA,0BAAO;MAClB,oBAAkB,eAAe,KAAA;MACjC,gBAAc,cAAc,SAAS,KAAA;MAJvC,UAAA;OAMG,WAAW,oBAAC,MAAD;QAAI,WAAWA,0BAAO;QAAO,UAAA,QAAQ;OAAM,CAAA,IAAI;OAC3D,oBAAC,MAAD;QAAI,OAAM;QAAM,WAAWA,0BAAO;QAC/B,UAAA,MAAM;OACL,CAAA;OACJ,oBAAC,MAAD;QAAI,WAAWA,0BAAO;QAAQ,UAAA,aAAa,MAAM,KAAK;OAAM,CAAA;MAC1D;KAVG,GAAA,GAUH;IAER,CAAC,EAEE,CAAA;GACF;EACN,CAAA,GAAA,SAAS,IAAI,qBAAC,KAAD;GAAG,WAAWA,0BAAO;GAArB,UAAA;IAA2B;IAAE;IAAO;GAAQ;EAAI,CAAA,IAAA,IAC3D;;AAET,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/components/hud/Scoreboard/Scoreboard.module.css
|
|
2
|
+
var scoreboard = "block-scoreboard-2KTaQ";
|
|
3
|
+
var table = "block-table-4kliz";
|
|
4
|
+
var title = "block-title-6zX-U";
|
|
5
|
+
var row = "block-row-gK5cA";
|
|
6
|
+
var rank = "block-rank-TJ44y";
|
|
7
|
+
var name = "block-name-H8EuJ";
|
|
8
|
+
var score = "block-score-C7mhx";
|
|
9
|
+
var empty = "block-empty-1FO3R";
|
|
10
|
+
var more = "block-more-3TTcW";
|
|
11
|
+
var Scoreboard_module_default = {
|
|
12
|
+
scoreboard,
|
|
13
|
+
table,
|
|
14
|
+
title,
|
|
15
|
+
row,
|
|
16
|
+
rank,
|
|
17
|
+
name,
|
|
18
|
+
score,
|
|
19
|
+
empty,
|
|
20
|
+
more
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { Scoreboard_module_default as default, empty, more, name, rank, row, score, scoreboard, table, title };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=Scoreboard.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scoreboard.module.js","names":[],"sources":["../../../../src/components/hud/Scoreboard/Scoreboard.module.css"],"sourcesContent":[".scoreboard {\n display: inline-flex;\n flex-direction: column;\n min-width: 180px;\n max-width: 100%;\n padding: var(--block-space-1) var(--block-space-2) var(--block-space-2);\n font-family: var(--block-font-display);\n font-size: var(--block-font-size-sm);\n color: var(--block-text-primary);\n text-shadow: var(--block-shadow-text);\n background-color: color-mix(in srgb, var(--block-obsidian-dark) 82%, transparent);\n border: var(--block-border-width-thin) solid var(--block-black);\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.title {\n padding: var(--block-space-1) 0 var(--block-space-2);\n font-size: var(--block-font-size-md);\n font-weight: var(--block-font-weight-bold);\n text-align: center;\n color: var(--block-gold-light);\n overflow-wrap: anywhere;\n}\n\n.row > * {\n padding: 2px 0;\n vertical-align: baseline;\n}\n\n.rank {\n width: 1%;\n padding-right: var(--block-space-2);\n color: var(--block-text-secondary);\n font-variant-numeric: tabular-nums;\n text-align: right;\n}\n\n.name {\n font-weight: var(--block-font-weight-regular);\n text-align: left;\n overflow-wrap: anywhere;\n}\n\n.score {\n padding-left: var(--block-space-4);\n text-align: right;\n white-space: nowrap;\n color: var(--block-redstone-light);\n font-variant-numeric: tabular-nums;\n}\n\n.row[data-highlighted] > * {\n background-color: color-mix(in srgb, var(--block-emerald) 30%, transparent);\n}\n\n.row[data-highlighted] .name {\n color: var(--block-emerald-light);\n}\n\n.empty {\n padding: var(--block-space-2) 0;\n text-align: center;\n color: var(--block-text-secondary);\n}\n\n.more {\n margin: var(--block-space-1) 0 0;\n font-size: var(--block-font-size-xs);\n text-align: right;\n color: var(--block-text-secondary);\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface ScoreboardEntry {
|
|
3
|
+
/** Stable key; defaults to `name` when it is a string. */
|
|
4
|
+
id?: string;
|
|
5
|
+
name: ReactNode;
|
|
6
|
+
score: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ScoreboardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
9
|
+
/** Objective shown in the header — also the table caption. */
|
|
10
|
+
title: ReactNode;
|
|
11
|
+
entries: ScoreboardEntry[];
|
|
12
|
+
/** `desc` puts the highest score first. `none` keeps the given order. @default "desc" */
|
|
13
|
+
sort?: "desc" | "asc" | "none";
|
|
14
|
+
/** Rows shown after sorting; the rest are summarised. @default 15 */
|
|
15
|
+
maxEntries?: number;
|
|
16
|
+
/** Entry id (or string name) to highlight, e.g. the current player. */
|
|
17
|
+
highlightId?: string;
|
|
18
|
+
/** Show a rank number before each name. */
|
|
19
|
+
showRank?: boolean;
|
|
20
|
+
/** Text when there are no entries. @default "No scores yet" */
|
|
21
|
+
emptyText?: ReactNode;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Scoreboard.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scoreboard.types.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/Scoreboard/Scoreboard.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,8DAA8D;IAC9D,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ScoreboardEntry } from "./Scoreboard.types";
|
|
2
|
+
export declare function entryKey(entry: ScoreboardEntry, index: number): string;
|
|
3
|
+
/** Sorted copy (stable), highest first for `desc`. */
|
|
4
|
+
export declare function sortEntries(entries: ScoreboardEntry[], sort: "desc" | "asc" | "none"): ScoreboardEntry[];
|
|
5
|
+
//# sourceMappingURL=Scoreboard.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scoreboard.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/Scoreboard/Scoreboard.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,EAAE,EAC1B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAC5B,eAAe,EAAE,CAInB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/components/hud/Scoreboard/Scoreboard.utils.ts
|
|
2
|
+
function entryKey(entry, index) {
|
|
3
|
+
if (entry.id !== void 0) return entry.id;
|
|
4
|
+
return typeof entry.name === "string" ? entry.name : String(index);
|
|
5
|
+
}
|
|
6
|
+
/** Sorted copy (stable), highest first for `desc`. */
|
|
7
|
+
function sortEntries(entries, sort) {
|
|
8
|
+
if (sort === "none") return entries;
|
|
9
|
+
const sign = sort === "desc" ? -1 : 1;
|
|
10
|
+
return [...entries].sort((a, b) => (a.score - b.score) * sign);
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { entryKey, sortEntries };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=Scoreboard.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scoreboard.utils.js","names":[],"sources":["../../../../src/components/hud/Scoreboard/Scoreboard.utils.ts"],"sourcesContent":["import type { ScoreboardEntry } from \"./Scoreboard.types\";\n\nexport function entryKey(entry: ScoreboardEntry, index: number): string {\n if (entry.id !== undefined) return entry.id;\n return typeof entry.name === \"string\" ? entry.name : String(index);\n}\n\n/** Sorted copy (stable), highest first for `desc`. */\nexport function sortEntries(\n entries: ScoreboardEntry[],\n sort: \"desc\" | \"asc\" | \"none\",\n): ScoreboardEntry[] {\n if (sort === \"none\") return entries;\n const sign = sort === \"desc\" ? -1 : 1;\n return [...entries].sort((a, b) => (a.score - b.score) * sign);\n}\n"],"mappings":";AAEA,SAAgB,SAAS,OAAwB,OAAuB;CACtE,IAAI,MAAM,OAAO,KAAA,GAAW,OAAO,MAAM;CACzC,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO,OAAO,KAAK;AACnE;;AAGA,SAAgB,YACd,SACA,MACmB;CACnB,IAAI,SAAS,QAAQ,OAAO;CAC5B,MAAM,OAAO,SAAS,SAAS,KAAK;CACpC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,IAAI;AAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/Scoreboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WeatherIndicatorProps } from "./WeatherIndicator.types";
|
|
2
|
+
/** Current weather read-out with a pixel icon and an optional time remaining. */
|
|
3
|
+
export declare const WeatherIndicator: import("react").ForwardRefExoticComponent<WeatherIndicatorProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
4
|
+
//# sourceMappingURL=WeatherIndicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WeatherIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/WeatherIndicator/WeatherIndicator.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGtE,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,kHA8B5B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import hudChip_module_default from "../hudChip.module.js";
|
|
3
|
+
import WeatherIndicator_module_default from "./WeatherIndicator.module.js";
|
|
4
|
+
import { WEATHER_LABEL, weatherIcon } from "./WeatherIndicator.utils.js";
|
|
5
|
+
import { forwardRef } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/components/hud/WeatherIndicator/WeatherIndicator.tsx
|
|
8
|
+
/** Current weather read-out with a pixel icon and an optional time remaining. */
|
|
9
|
+
var WeatherIndicator = forwardRef(function WeatherIndicator({ weather, name, remaining, night = false, announce = false, size = "md", className, ...rest }, ref) {
|
|
10
|
+
const Icon = weatherIcon(weather, night);
|
|
11
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
12
|
+
ref,
|
|
13
|
+
role: announce ? "status" : void 0,
|
|
14
|
+
"data-weather": weather,
|
|
15
|
+
"data-size": size,
|
|
16
|
+
className: cx(hudChip_module_default.chip, WeatherIndicator_module_default.weather, className),
|
|
17
|
+
...rest,
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ jsx("span", {
|
|
20
|
+
className: cx(hudChip_module_default.icon, WeatherIndicator_module_default.icon),
|
|
21
|
+
"aria-hidden": "true",
|
|
22
|
+
children: /* @__PURE__ */ jsx(Icon, { size: size === "lg" ? 24 : 16 })
|
|
23
|
+
}),
|
|
24
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
25
|
+
/* @__PURE__ */ jsx("span", {
|
|
26
|
+
className: hudChip_module_default.label,
|
|
27
|
+
children: "Weather"
|
|
28
|
+
}),
|
|
29
|
+
" ",
|
|
30
|
+
/* @__PURE__ */ jsx("span", {
|
|
31
|
+
className: WeatherIndicator_module_default.name,
|
|
32
|
+
children: name ?? WEATHER_LABEL[weather]
|
|
33
|
+
})
|
|
34
|
+
] }),
|
|
35
|
+
remaining !== void 0 ? /* @__PURE__ */ jsxs("span", {
|
|
36
|
+
className: hudChip_module_default.label,
|
|
37
|
+
children: [
|
|
38
|
+
"· ",
|
|
39
|
+
/* @__PURE__ */ jsx("span", {
|
|
40
|
+
className: hudChip_module_default.value,
|
|
41
|
+
children: remaining
|
|
42
|
+
}),
|
|
43
|
+
" left"
|
|
44
|
+
]
|
|
45
|
+
}) : null
|
|
46
|
+
]
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//#endregion
|
|
50
|
+
export { WeatherIndicator };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=WeatherIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WeatherIndicator.js","names":["chip","styles"],"sources":["../../../../src/components/hud/WeatherIndicator/WeatherIndicator.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./WeatherIndicator.module.css\";\nimport type { WeatherIndicatorProps } from \"./WeatherIndicator.types\";\nimport { WEATHER_LABEL, weatherIcon } from \"./WeatherIndicator.utils\";\n\n/** Current weather read-out with a pixel icon and an optional time remaining. */\nexport const WeatherIndicator = forwardRef<HTMLDivElement, WeatherIndicatorProps>(\n function WeatherIndicator(\n { weather, name, remaining, night = false, announce = false, size = \"md\", className, ...rest },\n ref,\n ) {\n const Icon = weatherIcon(weather, night);\n return (\n <div\n ref={ref}\n role={announce ? \"status\" : undefined}\n data-weather={weather}\n data-size={size}\n className={cx(chip.chip, styles.weather, className)}\n {...rest}\n >\n <span className={cx(chip.icon, styles.icon)} aria-hidden=\"true\">\n <Icon size={size === \"lg\" ? 24 : 16} />\n </span>\n <span>\n <span className={chip.label}>Weather</span>{\" \"}\n <span className={styles.name}>{name ?? WEATHER_LABEL[weather]}</span>\n </span>\n {remaining !== undefined ? (\n <span className={chip.label}>\n · <span className={chip.value}>{remaining}</span> left\n </span>\n ) : null}\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;AAQA,IAAa,mBAAmB,WAC9B,SAAS,iBACP,EAAE,SAAS,MAAM,WAAW,QAAQ,OAAO,WAAW,OAAO,OAAO,MAAM,WAAW,GAAG,QACxF,KACA;CACA,MAAM,OAAO,YAAY,SAAS,KAAK;CACvC,OACE,qBAAC,OAAD;EACO;EACL,MAAM,WAAW,WAAW,KAAA;EAC5B,gBAAc;EACd,aAAW;EACX,WAAW,GAAGA,uBAAK,MAAMC,gCAAO,SAAS,SAAS;EAClD,GAAI;EANN,UAAA;GAQE,oBAAC,QAAD;IAAM,WAAW,GAAGD,uBAAK,MAAMC,gCAAO,IAAI;IAAG,eAAY;IACvD,UAAA,oBAAC,MAAD,EAAM,MAAM,SAAS,OAAO,KAAK,GAAK,CAAA;GAClC,CAAA;GACN,qBAAC,QAAD,EAAA,UAAA;IACE,oBAAC,QAAD;KAAM,WAAWD,uBAAK;KAAO,UAAA;IAAa,CAAA;IAAE;IAC5C,oBAAC,QAAD;KAAM,WAAWC,gCAAO;KAAO,UAAA,QAAQ,cAAc;IAAe,CAAA;GAChE,EAAA,CAAA;GACL,cAAc,KAAA,IACb,qBAAC,QAAD;IAAM,WAAWD,uBAAK;IAAtB,UAAA;KAA6B;KACzB,oBAAC,QAAD;MAAM,WAAWA,uBAAK;MAAQ,UAAA;KAAgB,CAAA;KAAC;IAC7C;GACJ,CAAA,IAAA;EACD;;AAET,CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/components/hud/WeatherIndicator/WeatherIndicator.module.css
|
|
2
|
+
var weather = "block-weather-7zqS2";
|
|
3
|
+
var icon = "block-icon-sAoQZ";
|
|
4
|
+
var name = "block-name-GjdrU";
|
|
5
|
+
var WeatherIndicator_module_default = {
|
|
6
|
+
weather,
|
|
7
|
+
icon,
|
|
8
|
+
"block-weather-drift": "block-block-weather-drift-CfW9y",
|
|
9
|
+
"block-weather-flash": "block-block-weather-flash-vbjyP",
|
|
10
|
+
name
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { WeatherIndicator_module_default as default, icon, name, weather };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=WeatherIndicator.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WeatherIndicator.module.js","names":[],"sources":["../../../../src/components/hud/WeatherIndicator/WeatherIndicator.module.css"],"sourcesContent":[".weather[data-weather=\"rain\"] .icon,\n.weather[data-weather=\"snow\"] .icon {\n animation: block-weather-drift 1.2s steps(2, end) infinite;\n}\n\n.weather[data-weather=\"thunder\"] .icon {\n animation: block-weather-flash 2.4s steps(1, end) infinite;\n}\n\n.weather[data-weather=\"thunder\"] .name {\n color: var(--block-gold-light);\n}\n\n.weather[data-weather=\"snow\"] .name {\n color: var(--block-diamond-light);\n}\n\n/* Two-frame pixel drift; reduced motion stops it (base.css). */\n@keyframes block-weather-drift {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(2px);\n }\n}\n\n@keyframes block-weather-flash {\n 0%,\n 90% {\n filter: none;\n }\n 92% {\n filter: brightness(1.8);\n }\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export declare const weatherTypes: readonly ["clear", "cloudy", "rain", "thunder", "snow"];
|
|
3
|
+
export type WeatherType = (typeof weatherTypes)[number];
|
|
4
|
+
export interface WeatherIndicatorProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
weather: WeatherType;
|
|
6
|
+
/** Display text. Defaults to "Clear", "Cloudy", "Rain", "Thunderstorm" or "Snow". */
|
|
7
|
+
name?: ReactNode;
|
|
8
|
+
/** Time left for this weather, e.g. "4 min". */
|
|
9
|
+
remaining?: ReactNode;
|
|
10
|
+
/** Show the moon instead of the sun for clear weather. */
|
|
11
|
+
night?: boolean;
|
|
12
|
+
/** Announce weather changes politely to screen readers (`role="status"`). */
|
|
13
|
+
announce?: boolean;
|
|
14
|
+
/** @default "md" */
|
|
15
|
+
size?: "sm" | "md" | "lg";
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=WeatherIndicator.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WeatherIndicator.types.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/WeatherIndicator/WeatherIndicator.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,eAAO,MAAM,YAAY,yDAA0D,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC3E,OAAO,EAAE,WAAW,CAAC;IACrB,qFAAqF;IACrF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B"}
|