@malilion/block-ui-react 0.5.0 → 0.6.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.
Files changed (257) hide show
  1. package/dist/components/actions/ContextMenu/ContextMenu.d.ts.map +1 -1
  2. package/dist/components/actions/ContextMenu/ContextMenu.js +4 -2
  3. package/dist/components/actions/ContextMenu/ContextMenu.js.map +1 -1
  4. package/dist/components/actions/ContextMenu/ContextMenu.types.d.ts +1 -1
  5. package/dist/components/actions/ContextMenu/ContextMenu.types.d.ts.map +1 -1
  6. package/dist/components/cards/AchievementCard/AchievementCard.d.ts.map +1 -1
  7. package/dist/components/cards/AchievementCard/AchievementCard.js +6 -4
  8. package/dist/components/cards/AchievementCard/AchievementCard.js.map +1 -1
  9. package/dist/components/cards/PlayerCard/PlayerCard.d.ts.map +1 -1
  10. package/dist/components/cards/PlayerCard/PlayerCard.js +7 -5
  11. package/dist/components/cards/PlayerCard/PlayerCard.js.map +1 -1
  12. package/dist/components/cards/QuestCard/QuestCard.d.ts.map +1 -1
  13. package/dist/components/cards/QuestCard/QuestCard.js +9 -7
  14. package/dist/components/cards/QuestCard/QuestCard.js.map +1 -1
  15. package/dist/components/cards/ServerBrowser/ServerBrowser.d.ts.map +1 -1
  16. package/dist/components/cards/ServerBrowser/ServerBrowser.js +27 -25
  17. package/dist/components/cards/ServerBrowser/ServerBrowser.js.map +1 -1
  18. package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts +2 -2
  19. package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts.map +1 -1
  20. package/dist/components/cards/ServerCard/ServerCard.d.ts.map +1 -1
  21. package/dist/components/cards/ServerCard/ServerCard.js +10 -8
  22. package/dist/components/cards/ServerCard/ServerCard.js.map +1 -1
  23. package/dist/components/cards/WorldBrowser/WorldBrowser.d.ts.map +1 -1
  24. package/dist/components/cards/WorldBrowser/WorldBrowser.js +20 -18
  25. package/dist/components/cards/WorldBrowser/WorldBrowser.js.map +1 -1
  26. package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts +2 -2
  27. package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts.map +1 -1
  28. package/dist/components/cards/WorldCard/WorldCard.d.ts.map +1 -1
  29. package/dist/components/cards/WorldCard/WorldCard.js +16 -6
  30. package/dist/components/cards/WorldCard/WorldCard.js.map +1 -1
  31. package/dist/components/crafting/Anvil/Anvil.d.ts.map +1 -1
  32. package/dist/components/crafting/Anvil/Anvil.js +9 -7
  33. package/dist/components/crafting/Anvil/Anvil.js.map +1 -1
  34. package/dist/components/crafting/Anvil/Anvil.types.d.ts +1 -1
  35. package/dist/components/crafting/Anvil/Anvil.types.d.ts.map +1 -1
  36. package/dist/components/crafting/BrewingStand/BrewingStand.d.ts.map +1 -1
  37. package/dist/components/crafting/BrewingStand/BrewingStand.js +11 -20
  38. package/dist/components/crafting/BrewingStand/BrewingStand.js.map +1 -1
  39. package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts +1 -1
  40. package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts.map +1 -1
  41. package/dist/components/crafting/BrewingStand/BrewingStand.types.js.map +1 -1
  42. package/dist/components/crafting/CraftingGrid/CraftingGrid.d.ts.map +1 -1
  43. package/dist/components/crafting/CraftingGrid/CraftingGrid.js +4 -2
  44. package/dist/components/crafting/CraftingGrid/CraftingGrid.js.map +1 -1
  45. package/dist/components/crafting/CraftingResult/CraftingResult.d.ts.map +1 -1
  46. package/dist/components/crafting/CraftingResult/CraftingResult.js +5 -2
  47. package/dist/components/crafting/CraftingResult/CraftingResult.js.map +1 -1
  48. package/dist/components/crafting/CraftingResult/CraftingResult.types.d.ts +1 -1
  49. package/dist/components/crafting/CraftingResult/CraftingResult.types.d.ts.map +1 -1
  50. package/dist/components/crafting/CraftingTable/CraftingTable.d.ts.map +1 -1
  51. package/dist/components/crafting/CraftingTable/CraftingTable.js +5 -3
  52. package/dist/components/crafting/CraftingTable/CraftingTable.js.map +1 -1
  53. package/dist/components/crafting/CraftingTable/CraftingTable.types.d.ts +2 -2
  54. package/dist/components/crafting/CraftingTable/CraftingTable.types.d.ts.map +1 -1
  55. package/dist/components/crafting/EnchantingTable/EnchantingTable.d.ts.map +1 -1
  56. package/dist/components/crafting/EnchantingTable/EnchantingTable.js +15 -13
  57. package/dist/components/crafting/EnchantingTable/EnchantingTable.js.map +1 -1
  58. package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts +1 -1
  59. package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts.map +1 -1
  60. package/dist/components/crafting/Furnace/Furnace.d.ts.map +1 -1
  61. package/dist/components/crafting/Furnace/Furnace.js +11 -16
  62. package/dist/components/crafting/Furnace/Furnace.js.map +1 -1
  63. package/dist/components/crafting/Furnace/Furnace.types.d.ts +1 -1
  64. package/dist/components/crafting/Furnace/Furnace.types.d.ts.map +1 -1
  65. package/dist/components/crafting/Furnace/Furnace.types.js.map +1 -1
  66. package/dist/components/crafting/RecipeBook/RecipeBook.d.ts.map +1 -1
  67. package/dist/components/crafting/RecipeBook/RecipeBook.js +17 -15
  68. package/dist/components/crafting/RecipeBook/RecipeBook.js.map +1 -1
  69. package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts +1 -1
  70. package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts.map +1 -1
  71. package/dist/components/crafting/TradingUI/TradingUI.d.ts +1 -1
  72. package/dist/components/crafting/TradingUI/TradingUI.d.ts.map +1 -1
  73. package/dist/components/crafting/TradingUI/TradingUI.js +14 -13
  74. package/dist/components/crafting/TradingUI/TradingUI.js.map +1 -1
  75. package/dist/components/crafting/TradingUI/TradingUI.types.d.ts +1 -1
  76. package/dist/components/crafting/TradingUI/TradingUI.types.d.ts.map +1 -1
  77. package/dist/components/crafting/TradingUI/TradingUI.types.js.map +1 -1
  78. package/dist/components/display/Avatar/Avatar.d.ts.map +1 -1
  79. package/dist/components/display/Avatar/Avatar.js +3 -7
  80. package/dist/components/display/Avatar/Avatar.js.map +1 -1
  81. package/dist/components/display/BlockTable/BlockTable.d.ts.map +1 -1
  82. package/dist/components/display/BlockTable/BlockTable.js +4 -2
  83. package/dist/components/display/BlockTable/BlockTable.js.map +1 -1
  84. package/dist/components/display/BlockTable/BlockTable.types.d.ts +1 -1
  85. package/dist/components/display/BlockTable/BlockTable.types.d.ts.map +1 -1
  86. package/dist/components/display/SkillTree/SkillTree.d.ts.map +1 -1
  87. package/dist/components/display/SkillTree/SkillTree.js +16 -15
  88. package/dist/components/display/SkillTree/SkillTree.js.map +1 -1
  89. package/dist/components/display/SkillTree/SkillTree.types.d.ts +1 -1
  90. package/dist/components/display/SkillTree/SkillTree.types.d.ts.map +1 -1
  91. package/dist/components/feedback/Alert/BlockAlert.d.ts.map +1 -1
  92. package/dist/components/feedback/Alert/BlockAlert.js +4 -2
  93. package/dist/components/feedback/Alert/BlockAlert.js.map +1 -1
  94. package/dist/components/feedback/Alert/BlockAlert.types.d.ts +1 -1
  95. package/dist/components/feedback/Alert/BlockAlert.types.d.ts.map +1 -1
  96. package/dist/components/feedback/Alert/BlockAlert.types.js.map +1 -1
  97. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
  98. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js +5 -3
  99. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js.map +1 -1
  100. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.types.d.ts +2 -2
  101. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.types.d.ts.map +1 -1
  102. package/dist/components/feedback/Drawer/Drawer.d.ts.map +1 -1
  103. package/dist/components/feedback/Drawer/Drawer.js +3 -2
  104. package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
  105. package/dist/components/feedback/Loading/BlockLoading.d.ts.map +1 -1
  106. package/dist/components/feedback/Loading/BlockLoading.js +4 -2
  107. package/dist/components/feedback/Loading/BlockLoading.js.map +1 -1
  108. package/dist/components/feedback/Loading/BlockLoading.types.d.ts +1 -1
  109. package/dist/components/feedback/Loading/BlockLoading.types.d.ts.map +1 -1
  110. package/dist/components/feedback/Modal/BlockModal.d.ts.map +1 -1
  111. package/dist/components/feedback/Modal/BlockModal.js +3 -2
  112. package/dist/components/feedback/Modal/BlockModal.js.map +1 -1
  113. package/dist/components/feedback/Progress/BlockProgress.d.ts.map +1 -1
  114. package/dist/components/feedback/Progress/BlockProgress.js +3 -1
  115. package/dist/components/feedback/Progress/BlockProgress.js.map +1 -1
  116. package/dist/components/feedback/Toast/Toast.d.ts +1 -1
  117. package/dist/components/feedback/Toast/Toast.d.ts.map +1 -1
  118. package/dist/components/feedback/Toast/Toast.js +6 -4
  119. package/dist/components/feedback/Toast/Toast.js.map +1 -1
  120. package/dist/components/feedback/Toast/Toast.types.d.ts +1 -1
  121. package/dist/components/feedback/Toast/Toast.types.d.ts.map +1 -1
  122. package/dist/components/forms/NumberInput/NumberInput.d.ts.map +1 -1
  123. package/dist/components/forms/NumberInput/NumberInput.js +4 -2
  124. package/dist/components/forms/NumberInput/NumberInput.js.map +1 -1
  125. package/dist/components/hud/ArmorBar/ArmorBar.d.ts.map +1 -1
  126. package/dist/components/hud/ArmorBar/ArmorBar.js +4 -2
  127. package/dist/components/hud/ArmorBar/ArmorBar.js.map +1 -1
  128. package/dist/components/hud/BiomeIndicator/BiomeIndicator.d.ts.map +1 -1
  129. package/dist/components/hud/BiomeIndicator/BiomeIndicator.js +4 -2
  130. package/dist/components/hud/BiomeIndicator/BiomeIndicator.js.map +1 -1
  131. package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.d.ts.map +1 -1
  132. package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js +9 -7
  133. package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js.map +1 -1
  134. package/dist/components/hud/DayNightIndicator/DayNightIndicator.d.ts.map +1 -1
  135. package/dist/components/hud/DayNightIndicator/DayNightIndicator.js +7 -11
  136. package/dist/components/hud/DayNightIndicator/DayNightIndicator.js.map +1 -1
  137. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts +4 -1
  138. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts.map +1 -1
  139. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js +5 -2
  140. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js.map +1 -1
  141. package/dist/components/hud/HealthBar/HealthBar.d.ts.map +1 -1
  142. package/dist/components/hud/HealthBar/HealthBar.js +4 -2
  143. package/dist/components/hud/HealthBar/HealthBar.js.map +1 -1
  144. package/dist/components/hud/HungerBar/HungerBar.d.ts.map +1 -1
  145. package/dist/components/hud/HungerBar/HungerBar.js +4 -2
  146. package/dist/components/hud/HungerBar/HungerBar.js.map +1 -1
  147. package/dist/components/hud/MiniMap/MiniMap.d.ts.map +1 -1
  148. package/dist/components/hud/MiniMap/MiniMap.js +8 -7
  149. package/dist/components/hud/MiniMap/MiniMap.js.map +1 -1
  150. package/dist/components/hud/MiniMap/MiniMap.utils.d.ts +10 -2
  151. package/dist/components/hud/MiniMap/MiniMap.utils.d.ts.map +1 -1
  152. package/dist/components/hud/MiniMap/MiniMap.utils.js +12 -15
  153. package/dist/components/hud/MiniMap/MiniMap.utils.js.map +1 -1
  154. package/dist/components/hud/PlayerHUD/PlayerHUD.d.ts.map +1 -1
  155. package/dist/components/hud/PlayerHUD/PlayerHUD.js +4 -2
  156. package/dist/components/hud/PlayerHUD/PlayerHUD.js.map +1 -1
  157. package/dist/components/hud/PointsBar/PointsBar.d.ts.map +1 -1
  158. package/dist/components/hud/PointsBar/PointsBar.js +3 -1
  159. package/dist/components/hud/PointsBar/PointsBar.js.map +1 -1
  160. package/dist/components/hud/Scoreboard/Scoreboard.d.ts.map +1 -1
  161. package/dist/components/hud/Scoreboard/Scoreboard.js +9 -11
  162. package/dist/components/hud/Scoreboard/Scoreboard.js.map +1 -1
  163. package/dist/components/hud/WeatherIndicator/WeatherIndicator.d.ts.map +1 -1
  164. package/dist/components/hud/WeatherIndicator/WeatherIndicator.js +7 -4
  165. package/dist/components/hud/WeatherIndicator/WeatherIndicator.js.map +1 -1
  166. package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js +1 -8
  167. package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js.map +1 -1
  168. package/dist/components/hud/XPBar/XPBar.d.ts.map +1 -1
  169. package/dist/components/hud/XPBar/XPBar.js +6 -4
  170. package/dist/components/hud/XPBar/XPBar.js.map +1 -1
  171. package/dist/components/inventory/DurabilityBar/DurabilityBar.d.ts.map +1 -1
  172. package/dist/components/inventory/DurabilityBar/DurabilityBar.js +4 -2
  173. package/dist/components/inventory/DurabilityBar/DurabilityBar.js.map +1 -1
  174. package/dist/components/inventory/Hotbar/Hotbar.d.ts.map +1 -1
  175. package/dist/components/inventory/Hotbar/Hotbar.js +4 -2
  176. package/dist/components/inventory/Hotbar/Hotbar.js.map +1 -1
  177. package/dist/components/inventory/Inventory/Inventory.d.ts.map +1 -1
  178. package/dist/components/inventory/Inventory/Inventory.js +4 -2
  179. package/dist/components/inventory/Inventory/Inventory.js.map +1 -1
  180. package/dist/components/inventory/InventoryGrid/InventoryGrid.d.ts.map +1 -1
  181. package/dist/components/inventory/InventoryGrid/InventoryGrid.js +4 -2
  182. package/dist/components/inventory/InventoryGrid/InventoryGrid.js.map +1 -1
  183. package/dist/components/inventory/InventorySlot/InventorySlot.d.ts.map +1 -1
  184. package/dist/components/inventory/InventorySlot/InventorySlot.js +3 -1
  185. package/dist/components/inventory/InventorySlot/InventorySlot.js.map +1 -1
  186. package/dist/components/inventory/ItemStack/ItemStack.d.ts.map +1 -1
  187. package/dist/components/inventory/ItemStack/ItemStack.js +3 -1
  188. package/dist/components/inventory/ItemStack/ItemStack.js.map +1 -1
  189. package/dist/components/inventory/ItemStack/ItemStack.utils.d.ts +2 -1
  190. package/dist/components/inventory/ItemStack/ItemStack.utils.d.ts.map +1 -1
  191. package/dist/components/inventory/ItemStack/ItemStack.utils.js +6 -2
  192. package/dist/components/inventory/ItemStack/ItemStack.utils.js.map +1 -1
  193. package/dist/components/inventory/ItemTooltip/ItemTooltip.d.ts.map +1 -1
  194. package/dist/components/inventory/ItemTooltip/ItemTooltip.js +3 -1
  195. package/dist/components/inventory/ItemTooltip/ItemTooltip.js.map +1 -1
  196. package/dist/components/navigation/BlockPagination/BlockPagination.d.ts.map +1 -1
  197. package/dist/components/navigation/BlockPagination/BlockPagination.js +9 -12
  198. package/dist/components/navigation/BlockPagination/BlockPagination.js.map +1 -1
  199. package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts +1 -1
  200. package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts.map +1 -1
  201. package/dist/components/navigation/BlockSidebar/BlockSidebar.d.ts.map +1 -1
  202. package/dist/components/navigation/BlockSidebar/BlockSidebar.js +4 -2
  203. package/dist/components/navigation/BlockSidebar/BlockSidebar.js.map +1 -1
  204. package/dist/components/navigation/BlockSidebar/BlockSidebar.types.d.ts +1 -1
  205. package/dist/components/navigation/BlockSidebar/BlockSidebar.types.d.ts.map +1 -1
  206. package/dist/components/navigation/BlockStepper/BlockStepper.d.ts.map +1 -1
  207. package/dist/components/navigation/BlockStepper/BlockStepper.js +4 -2
  208. package/dist/components/navigation/BlockStepper/BlockStepper.js.map +1 -1
  209. package/dist/components/navigation/BlockStepper/BlockStepper.types.d.ts +1 -1
  210. package/dist/components/navigation/BlockStepper/BlockStepper.types.d.ts.map +1 -1
  211. package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  212. package/dist/components/navigation/Breadcrumb/Breadcrumb.js +4 -2
  213. package/dist/components/navigation/Breadcrumb/Breadcrumb.js.map +1 -1
  214. package/dist/components/navigation/Breadcrumb/Breadcrumb.types.d.ts +1 -1
  215. package/dist/components/navigation/Breadcrumb/Breadcrumb.types.d.ts.map +1 -1
  216. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.d.ts.map +1 -1
  217. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.js +4 -2
  218. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.js.map +1 -1
  219. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.types.d.ts +1 -1
  220. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.types.d.ts.map +1 -1
  221. package/dist/components/social/ChatWindow/ChatWindow.d.ts.map +1 -1
  222. package/dist/components/social/ChatWindow/ChatWindow.js +10 -7
  223. package/dist/components/social/ChatWindow/ChatWindow.js.map +1 -1
  224. package/dist/components/social/ChatWindow/ChatWindow.types.d.ts +2 -2
  225. package/dist/components/social/ChatWindow/ChatWindow.types.d.ts.map +1 -1
  226. package/dist/components/social/ChatWindow/ChatWindow.types.js.map +1 -1
  227. package/dist/components/social/CommandConsole/CommandConsole.d.ts.map +1 -1
  228. package/dist/components/social/CommandConsole/CommandConsole.js +7 -4
  229. package/dist/components/social/CommandConsole/CommandConsole.js.map +1 -1
  230. package/dist/components/social/CommandConsole/CommandConsole.types.d.ts +1 -1
  231. package/dist/components/social/CommandConsole/CommandConsole.types.d.ts.map +1 -1
  232. package/dist/components/social/CommandConsole/CommandConsole.types.js.map +1 -1
  233. package/dist/index.d.ts +1 -0
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +5 -3
  236. package/dist/locale/index.d.ts +4 -0
  237. package/dist/locale/index.d.ts.map +1 -0
  238. package/dist/locale/messages.d.ts +289 -0
  239. package/dist/locale/messages.d.ts.map +1 -0
  240. package/dist/locale/messages.js +341 -0
  241. package/dist/locale/messages.js.map +1 -0
  242. package/dist/locale/zhTW.d.ts +4 -0
  243. package/dist/locale/zhTW.d.ts.map +1 -0
  244. package/dist/locale/zhTW.js +331 -0
  245. package/dist/locale/zhTW.js.map +1 -0
  246. package/dist/provider/BlockUIProvider.d.ts.map +1 -1
  247. package/dist/provider/BlockUIProvider.js +10 -3
  248. package/dist/provider/BlockUIProvider.js.map +1 -1
  249. package/dist/provider/BlockUIProvider.types.d.ts +9 -0
  250. package/dist/provider/BlockUIProvider.types.d.ts.map +1 -1
  251. package/dist/provider/context.d.ts +3 -0
  252. package/dist/provider/context.d.ts.map +1 -1
  253. package/dist/provider/context.js +6 -1
  254. package/dist/provider/context.js.map +1 -1
  255. package/dist/provider/index.d.ts +1 -1
  256. package/dist/provider/index.d.ts.map +1 -1
  257. package/package.json +4 -4
@@ -1,4 +1,5 @@
1
1
  import { cx } from "../../../utils/cx.js";
2
+ import { useBlockUIMessages } from "../../../provider/context.js";
2
3
  import hudChip_module_default from "../hudChip.module.js";
3
4
  import CoordinatesHUD_module_default from "./CoordinatesHUD.module.js";
4
5
  import { FACING_AXIS, coordinatesText, formatCoordinate } from "./CoordinatesHUD.utils.js";
@@ -7,7 +8,8 @@ import { CheckIcon, CompassIcon } from "@malilion/block-ui-icons";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
9
  //#region src/components/hud/CoordinatesHUD/CoordinatesHUD.tsx
9
10
  /** Debug-screen style XYZ read-out with an optional facing and copy button. */
10
- var CoordinatesHUD = forwardRef(function CoordinatesHUD({ x, y, z, facing, precision = 0, copyable = false, size = "md", label = "Coordinates", className, ...rest }, ref) {
11
+ var CoordinatesHUD = forwardRef(function CoordinatesHUD({ x, y, z, facing, precision = 0, copyable = false, size = "md", label, className, ...rest }, ref) {
12
+ const m = useBlockUIMessages();
11
13
  const [copied, setCopied] = useState(false);
12
14
  const timer = useRef(void 0);
13
15
  useEffect(() => () => clearTimeout(timer.current), []);
@@ -24,7 +26,7 @@ var CoordinatesHUD = forwardRef(function CoordinatesHUD({ x, y, z, facing, preci
24
26
  return /* @__PURE__ */ jsxs("div", {
25
27
  ref,
26
28
  role: "group",
27
- "aria-label": label,
29
+ "aria-label": label ?? m.coordinatesHUD.label,
28
30
  "data-size": size,
29
31
  className: cx(hudChip_module_default.chip, CoordinatesHUD_module_default.coordinates, className),
30
32
  ...rest,
@@ -60,10 +62,10 @@ var CoordinatesHUD = forwardRef(function CoordinatesHUD({ x, y, z, facing, preci
60
62
  children: [
61
63
  /* @__PURE__ */ jsx("span", {
62
64
  className: hudChip_module_default.label,
63
- children: "Facing"
65
+ children: m.coordinatesHUD.facing
64
66
  }),
65
67
  " ",
66
- facing,
68
+ m.coordinatesHUD.facings[facing],
67
69
  " ",
68
70
  /* @__PURE__ */ jsxs("span", {
69
71
  className: hudChip_module_default.label,
@@ -79,13 +81,13 @@ var CoordinatesHUD = forwardRef(function CoordinatesHUD({ x, y, z, facing, preci
79
81
  type: "button",
80
82
  className: CoordinatesHUD_module_default.copy,
81
83
  onClick: copy,
82
- "aria-label": copied ? "Coordinates copied" : "Copy coordinates",
83
- children: copied ? /* @__PURE__ */ jsx(CheckIcon, { size: 16 }) : "Copy"
84
+ "aria-label": copied ? m.coordinatesHUD.copied : m.coordinatesHUD.copyLabel,
85
+ children: copied ? /* @__PURE__ */ jsx(CheckIcon, { size: 16 }) : m.coordinatesHUD.copy
84
86
  }) : null,
85
87
  copyable ? /* @__PURE__ */ jsx("span", {
86
88
  className: "block-visually-hidden",
87
89
  role: "status",
88
- children: copied ? "Coordinates copied" : ""
90
+ children: copied ? m.coordinatesHUD.copied : ""
89
91
  }) : null
90
92
  ]
91
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CoordinatesHUD.js","names":["chip","styles"],"sources":["../../../../src/components/hud/CoordinatesHUD/CoordinatesHUD.tsx"],"sourcesContent":["import { CheckIcon, CompassIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./CoordinatesHUD.module.css\";\nimport type { CoordinatesHUDProps } from \"./CoordinatesHUD.types\";\nimport { FACING_AXIS, coordinatesText, formatCoordinate } from \"./CoordinatesHUD.utils\";\n\n/** Debug-screen style XYZ read-out with an optional facing and copy button. */\nexport const CoordinatesHUD = forwardRef<HTMLDivElement, CoordinatesHUDProps>(\n function CoordinatesHUD(\n {\n x,\n y,\n z,\n facing,\n precision = 0,\n copyable = false,\n size = \"md\",\n label = \"Coordinates\",\n className,\n ...rest\n },\n ref,\n ) {\n const [copied, setCopied] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(timer.current), []);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(coordinatesText(x, y, z, precision));\n setCopied(true);\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setCopied(false), 2000);\n } catch {\n setCopied(false);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label}\n data-size={size}\n className={cx(chip.chip, styles.coordinates, className)}\n {...rest}\n >\n <span className={chip.icon} aria-hidden=\"true\">\n <CompassIcon size={size === \"lg\" ? 24 : 16} />\n </span>\n <span className={styles.axes}>\n {(\n [\n [\"X\", x],\n [\"Y\", y],\n [\"Z\", z],\n ] as const\n ).map(([axis, value]) => (\n <span key={axis} className={styles.axis}>\n <span className={chip.label}>{axis}</span>{\" \"}\n <span className={chip.value}>{formatCoordinate(value, precision)}</span>\n </span>\n ))}\n </span>\n {facing ? (\n <span className={styles.facing}>\n <span className={chip.label}>Facing</span> {facing}{\" \"}\n <span className={chip.label}>({FACING_AXIS[facing]})</span>\n </span>\n ) : null}\n {copyable ? (\n <button\n type=\"button\"\n className={styles.copy}\n onClick={copy}\n aria-label={copied ? \"Coordinates copied\" : \"Copy coordinates\"}\n >\n {copied ? <CheckIcon size={16} /> : \"Copy\"}\n </button>\n ) : null}\n {copyable ? (\n <span className=\"block-visually-hidden\" role=\"status\">\n {copied ? \"Coordinates copied\" : \"\"}\n </span>\n ) : null}\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;;AASA,IAAa,iBAAiB,WAC5B,SAAS,eACP,EACE,GACA,GACA,GACA,QACA,YAAY,GACZ,WAAW,OACX,OAAO,MACP,QAAQ,eACR,WACA,GAAG,QAEL,KACA;CACA,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,QAAQ,OAAkD,KAAA,CAAS;CACzE,sBAAsB,aAAa,MAAM,OAAO,GAAG,CAAC,CAAC;CAErD,MAAM,OAAO,YAAY;EACvB,IAAI;GACF,MAAM,UAAU,UAAU,UAAU,gBAAgB,GAAG,GAAG,GAAG,SAAS,CAAC;GACvE,UAAU,IAAI;GACd,aAAa,MAAM,OAAO;GAC1B,MAAM,UAAU,iBAAiB,UAAU,KAAK,GAAG,GAAI;EACzD,QAAQ;GACN,UAAU,KAAK;EACjB;CACF;CAEA,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY;EACZ,aAAW;EACX,WAAW,GAAGA,uBAAK,MAAMC,8BAAO,aAAa,SAAS;EACtD,GAAI;EANN,UAAA;GAQE,oBAAC,QAAD;IAAM,WAAWD,uBAAK;IAAM,eAAY;IACtC,UAAA,oBAAC,aAAD,EAAa,MAAM,SAAS,OAAO,KAAK,GAAK,CAAA;GACzC,CAAA;GACN,oBAAC,QAAD;IAAM,WAAWC,8BAAO;IAEpB,UAAA;KACE,CAAC,KAAK,CAAC;KACP,CAAC,KAAK,CAAC;KACP,CAAC,KAAK,CAAC;IACT,CAAC,CACD,KAAK,CAAC,MAAM,WACZ,qBAAC,QAAD;KAAiB,WAAWA,8BAAO;KAAnC,UAAA;MACE,oBAAC,QAAD;OAAM,WAAWD,uBAAK;OAAQ,UAAA;MAAW,CAAA;MAAE;MAC3C,oBAAC,QAAD;OAAM,WAAWA,uBAAK;OAAQ,UAAA,iBAAiB,OAAO,SAAS;MAAQ,CAAA;KACnE;IAHK,GAAA,IAGL,CACP;GACG,CAAA;GACL,SACC,qBAAC,QAAD;IAAM,WAAWC,8BAAO;IAAxB,UAAA;KACE,oBAAC,QAAD;MAAM,WAAWD,uBAAK;MAAO,UAAA;KAAY,CAAA;KAAC;KAAE;KAAQ;KACpD,qBAAC,QAAD;MAAM,WAAWA,uBAAK;MAAtB,UAAA;OAA6B;OAAE,YAAY;OAAQ;MAAO;;IACtD;GACJ,CAAA,IAAA;GACH,WACC,oBAAC,UAAD;IACE,MAAK;IACL,WAAWC,8BAAO;IAClB,SAAS;IACT,cAAY,SAAS,uBAAuB;IAE3C,UAAA,SAAS,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA,IAAI;GAC9B,CAAA,IACN;GACH,WACC,oBAAC,QAAD;IAAM,WAAU;IAAwB,MAAK;IAC1C,UAAA,SAAS,uBAAuB;GAC7B,CAAA,IACJ;EACD;;AAET,CACF"}
1
+ {"version":3,"file":"CoordinatesHUD.js","names":["chip","styles"],"sources":["../../../../src/components/hud/CoordinatesHUD/CoordinatesHUD.tsx"],"sourcesContent":["import { CheckIcon, CompassIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./CoordinatesHUD.module.css\";\nimport type { CoordinatesHUDProps } from \"./CoordinatesHUD.types\";\nimport { FACING_AXIS, coordinatesText, formatCoordinate } from \"./CoordinatesHUD.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Debug-screen style XYZ read-out with an optional facing and copy button. */\nexport const CoordinatesHUD = forwardRef<HTMLDivElement, CoordinatesHUDProps>(\n function CoordinatesHUD(\n { x, y, z, facing, precision = 0, copyable = false, size = \"md\", label, className, ...rest },\n ref,\n ) {\n const m = useBlockUIMessages();\n const [copied, setCopied] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(timer.current), []);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(coordinatesText(x, y, z, precision));\n setCopied(true);\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setCopied(false), 2000);\n } catch {\n setCopied(false);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label ?? m.coordinatesHUD.label}\n data-size={size}\n className={cx(chip.chip, styles.coordinates, className)}\n {...rest}\n >\n <span className={chip.icon} aria-hidden=\"true\">\n <CompassIcon size={size === \"lg\" ? 24 : 16} />\n </span>\n <span className={styles.axes}>\n {(\n [\n [\"X\", x],\n [\"Y\", y],\n [\"Z\", z],\n ] as const\n ).map(([axis, value]) => (\n <span key={axis} className={styles.axis}>\n <span className={chip.label}>{axis}</span>{\" \"}\n <span className={chip.value}>{formatCoordinate(value, precision)}</span>\n </span>\n ))}\n </span>\n {facing ? (\n <span className={styles.facing}>\n <span className={chip.label}>{m.coordinatesHUD.facing}</span>{\" \"}\n {m.coordinatesHUD.facings[facing]}{\" \"}\n <span className={chip.label}>({FACING_AXIS[facing]})</span>\n </span>\n ) : null}\n {copyable ? (\n <button\n type=\"button\"\n className={styles.copy}\n onClick={copy}\n aria-label={copied ? m.coordinatesHUD.copied : m.coordinatesHUD.copyLabel}\n >\n {copied ? <CheckIcon size={16} /> : m.coordinatesHUD.copy}\n </button>\n ) : null}\n {copyable ? (\n <span className=\"block-visually-hidden\" role=\"status\">\n {copied ? m.coordinatesHUD.copied : \"\"}\n </span>\n ) : null}\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;;;AAUA,IAAa,iBAAiB,WAC5B,SAAS,eACP,EAAE,GAAG,GAAG,GAAG,QAAQ,YAAY,GAAG,WAAW,OAAO,OAAO,MAAM,OAAO,WAAW,GAAG,QACtF,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,QAAQ,OAAkD,KAAA,CAAS;CACzE,sBAAsB,aAAa,MAAM,OAAO,GAAG,CAAC,CAAC;CAErD,MAAM,OAAO,YAAY;EACvB,IAAI;GACF,MAAM,UAAU,UAAU,UAAU,gBAAgB,GAAG,GAAG,GAAG,SAAS,CAAC;GACvE,UAAU,IAAI;GACd,aAAa,MAAM,OAAO;GAC1B,MAAM,UAAU,iBAAiB,UAAU,KAAK,GAAG,GAAI;EACzD,QAAQ;GACN,UAAU,KAAK;EACjB;CACF;CAEA,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY,SAAS,EAAE,eAAe;EACtC,aAAW;EACX,WAAW,GAAGA,uBAAK,MAAMC,8BAAO,aAAa,SAAS;EACtD,GAAI;EANN,UAAA;GAQE,oBAAC,QAAD;IAAM,WAAWD,uBAAK;IAAM,eAAY;IACtC,UAAA,oBAAC,aAAD,EAAa,MAAM,SAAS,OAAO,KAAK,GAAK,CAAA;GACzC,CAAA;GACN,oBAAC,QAAD;IAAM,WAAWC,8BAAO;IAEpB,UAAA;KACE,CAAC,KAAK,CAAC;KACP,CAAC,KAAK,CAAC;KACP,CAAC,KAAK,CAAC;IACT,CAAC,CACD,KAAK,CAAC,MAAM,WACZ,qBAAC,QAAD;KAAiB,WAAWA,8BAAO;KAAnC,UAAA;MACE,oBAAC,QAAD;OAAM,WAAWD,uBAAK;OAAQ,UAAA;MAAW,CAAA;MAAE;MAC3C,oBAAC,QAAD;OAAM,WAAWA,uBAAK;OAAQ,UAAA,iBAAiB,OAAO,SAAS;MAAQ,CAAA;KACnE;IAHK,GAAA,IAGL,CACP;GACG,CAAA;GACL,SACC,qBAAC,QAAD;IAAM,WAAWC,8BAAO;IAAxB,UAAA;KACE,oBAAC,QAAD;MAAM,WAAWD,uBAAK;MAAQ,UAAA,EAAE,eAAe;KAAa,CAAA;KAAE;KAC7D,EAAE,eAAe,QAAQ;KAAS;KACnC,qBAAC,QAAD;MAAM,WAAWA,uBAAK;MAAtB,UAAA;OAA6B;OAAE,YAAY;OAAQ;MAAO;;IACtD;GACJ,CAAA,IAAA;GACH,WACC,oBAAC,UAAD;IACE,MAAK;IACL,WAAWC,8BAAO;IAClB,SAAS;IACT,cAAY,SAAS,EAAE,eAAe,SAAS,EAAE,eAAe;IAE/D,UAAA,SAAS,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA,IAAI,EAAE,eAAe;GAC/C,CAAA,IACN;GACH,WACC,oBAAC,QAAD;IAAM,WAAU;IAAwB,MAAK;IAC1C,UAAA,SAAS,EAAE,eAAe,SAAS;GAChC,CAAA,IACJ;EACD;;AAET,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"DayNightIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKxE,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,mHA0D7B,CAAC"}
1
+ {"version":3,"file":"DayNightIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAIxE,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,mHAmD7B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { cx } from "../../../utils/cx.js";
2
+ import { useBlockUIMessages } from "../../../provider/context.js";
2
3
  import hudChip_module_default from "../hudChip.module.js";
3
4
  import DayNightIndicator_module_default from "./DayNightIndicator.module.js";
4
5
  import { arcPosition, dayPhase, formatClock } from "./DayNightIndicator.utils.js";
@@ -6,22 +7,17 @@ import { forwardRef } from "react";
6
7
  import { MoonIcon, SunIcon } from "@malilion/block-ui-icons";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
9
  //#region src/components/hud/DayNightIndicator/DayNightIndicator.tsx
9
- var PHASE_LABEL = {
10
- dawn: "Dawn",
11
- day: "Day",
12
- dusk: "Dusk",
13
- night: "Night"
14
- };
15
10
  /** Day / night read-out: a pixel arc with the sun or moon, the day counter and the clock. */
16
- var DayNightIndicator = forwardRef(function DayNightIndicator({ time, day, format = "24h", showDial = true, size = "md", label = "Time of day", className, ...rest }, ref) {
11
+ var DayNightIndicator = forwardRef(function DayNightIndicator({ time, day, format = "24h", showDial = true, size = "md", label, className, ...rest }, ref) {
12
+ const m = useBlockUIMessages();
17
13
  const phase = dayPhase(time);
18
- const clock = formatClock(time, format);
14
+ const clock = formatClock(time, format, m.dayNightIndicator);
19
15
  const { body, progress, height } = arcPosition(time);
20
16
  const Body = body === "sun" ? SunIcon : MoonIcon;
21
17
  return /* @__PURE__ */ jsxs("div", {
22
18
  ref,
23
19
  role: "group",
24
- "aria-label": label,
20
+ "aria-label": label ?? m.dayNightIndicator.label,
25
21
  "data-phase": phase,
26
22
  "data-size": size,
27
23
  className: cx(hudChip_module_default.chip, DayNightIndicator_module_default.dayNight, className),
@@ -44,7 +40,7 @@ var DayNightIndicator = forwardRef(function DayNightIndicator({ time, day, forma
44
40
  day !== void 0 ? /* @__PURE__ */ jsxs("span", { children: [
45
41
  /* @__PURE__ */ jsx("span", {
46
42
  className: hudChip_module_default.label,
47
- children: "Day"
43
+ children: m.dayNightIndicator.day
48
44
  }),
49
45
  " ",
50
46
  /* @__PURE__ */ jsx("span", {
@@ -58,7 +54,7 @@ var DayNightIndicator = forwardRef(function DayNightIndicator({ time, day, forma
58
54
  }),
59
55
  /* @__PURE__ */ jsx("span", {
60
56
  className: DayNightIndicator_module_default.phase,
61
- children: PHASE_LABEL[phase]
57
+ children: m.dayNightIndicator.phases[phase]
62
58
  })
63
59
  ]
64
60
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"DayNightIndicator.js","names":["chip","styles"],"sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.tsx"],"sourcesContent":["import { MoonIcon, SunIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, type CSSProperties } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./DayNightIndicator.module.css\";\nimport type { DayNightIndicatorProps } from \"./DayNightIndicator.types\";\nimport { arcPosition, dayPhase, formatClock } from \"./DayNightIndicator.utils\";\n\nconst PHASE_LABEL = { dawn: \"Dawn\", day: \"Day\", dusk: \"Dusk\", night: \"Night\" } as const;\n\n/** Day / night read-out: a pixel arc with the sun or moon, the day counter and the clock. */\nexport const DayNightIndicator = forwardRef<HTMLDivElement, DayNightIndicatorProps>(\n function DayNightIndicator(\n {\n time,\n day,\n format = \"24h\",\n showDial = true,\n size = \"md\",\n label = \"Time of day\",\n className,\n ...rest\n },\n ref,\n ) {\n const phase = dayPhase(time);\n const clock = formatClock(time, format);\n const { body, progress, height } = arcPosition(time);\n const Body = body === \"sun\" ? SunIcon : MoonIcon;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label}\n data-phase={phase}\n data-size={size}\n className={cx(chip.chip, styles.dayNight, className)}\n {...rest}\n >\n {showDial ? (\n <span\n className={styles.dial}\n aria-hidden=\"true\"\n style={\n {\n \"--block-dial-x\": progress.toFixed(3),\n \"--block-dial-y\": height.toFixed(3),\n } as CSSProperties\n }\n >\n <span className={styles.horizon} />\n <span className={styles.body} data-body={body}>\n <Body size={16} />\n </span>\n </span>\n ) : null}\n <span className={styles.text}>\n {day !== undefined ? (\n <span>\n <span className={chip.label}>Day</span> <span className={chip.value}>{day}</span>\n </span>\n ) : null}\n <span className={chip.value}>{clock}</span>\n <span className={styles.phase}>{PHASE_LABEL[phase]}</span>\n </span>\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;AAQA,IAAM,cAAc;CAAE,MAAM;CAAQ,KAAK;CAAO,MAAM;CAAQ,OAAO;AAAQ;;AAG7E,IAAa,oBAAoB,WAC/B,SAAS,kBACP,EACE,MACA,KACA,SAAS,OACT,WAAW,MACX,OAAO,MACP,QAAQ,eACR,WACA,GAAG,QAEL,KACA;CACA,MAAM,QAAQ,SAAS,IAAI;CAC3B,MAAM,QAAQ,YAAY,MAAM,MAAM;CACtC,MAAM,EAAE,MAAM,UAAU,WAAW,YAAY,IAAI;CACnD,MAAM,OAAO,SAAS,QAAQ,UAAU;CAExC,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY;EACZ,cAAY;EACZ,aAAW;EACX,WAAW,GAAGA,uBAAK,MAAMC,iCAAO,UAAU,SAAS;EACnD,GAAI;EAPN,UAAA,CASG,WACC,qBAAC,QAAD;GACE,WAAWA,iCAAO;GAClB,eAAY;GACZ,OACE;IACE,kBAAkB,SAAS,QAAQ,CAAC;IACpC,kBAAkB,OAAO,QAAQ,CAAC;GACpC;GAPJ,UAAA,CAUE,oBAAC,QAAD,EAAM,WAAWA,iCAAO,QAAU,CAAA,GAClC,oBAAC,QAAD;IAAM,WAAWA,iCAAO;IAAM,aAAW;IACvC,UAAA,oBAAC,MAAD,EAAM,MAAM,GAAK,CAAA;GACb,CAAA,CACF;EACJ,CAAA,IAAA,MACJ,qBAAC,QAAD;GAAM,WAAWA,iCAAO;GAAxB,UAAA;IACG,QAAQ,KAAA,IACP,qBAAC,QAAD,EAAA,UAAA;KACE,oBAAC,QAAD;MAAM,WAAWD,uBAAK;MAAO,UAAA;KAAS,CAAA;KAAC;KAAC,oBAAC,QAAD;MAAM,WAAWA,uBAAK;MAAQ,UAAA;KAAU,CAAA;IAC5E,EAAA,CAAA,IACJ;IACJ,oBAAC,QAAD;KAAM,WAAWA,uBAAK;KAAQ,UAAA;IAAY,CAAA;IAC1C,oBAAC,QAAD;KAAM,WAAWC,iCAAO;KAAQ,UAAA,YAAY;IAAa,CAAA;GACrD;EACH,CAAA,CAAA;;AAET,CACF"}
1
+ {"version":3,"file":"DayNightIndicator.js","names":["chip","styles"],"sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.tsx"],"sourcesContent":["import { MoonIcon, SunIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, type CSSProperties } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./DayNightIndicator.module.css\";\nimport type { DayNightIndicatorProps } from \"./DayNightIndicator.types\";\nimport { arcPosition, dayPhase, formatClock } from \"./DayNightIndicator.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Day / night read-out: a pixel arc with the sun or moon, the day counter and the clock. */\nexport const DayNightIndicator = forwardRef<HTMLDivElement, DayNightIndicatorProps>(\n function DayNightIndicator(\n { time, day, format = \"24h\", showDial = true, size = \"md\", label, className, ...rest },\n ref,\n ) {\n const m = useBlockUIMessages();\n const phase = dayPhase(time);\n const clock = formatClock(time, format, m.dayNightIndicator);\n const { body, progress, height } = arcPosition(time);\n const Body = body === \"sun\" ? SunIcon : MoonIcon;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label ?? m.dayNightIndicator.label}\n data-phase={phase}\n data-size={size}\n className={cx(chip.chip, styles.dayNight, className)}\n {...rest}\n >\n {showDial ? (\n <span\n className={styles.dial}\n aria-hidden=\"true\"\n style={\n {\n \"--block-dial-x\": progress.toFixed(3),\n \"--block-dial-y\": height.toFixed(3),\n } as CSSProperties\n }\n >\n <span className={styles.horizon} />\n <span className={styles.body} data-body={body}>\n <Body size={16} />\n </span>\n </span>\n ) : null}\n <span className={styles.text}>\n {day !== undefined ? (\n <span>\n <span className={chip.label}>{m.dayNightIndicator.day}</span>{\" \"}\n <span className={chip.value}>{day}</span>\n </span>\n ) : null}\n <span className={chip.value}>{clock}</span>\n <span className={styles.phase}>{m.dayNightIndicator.phases[phase]}</span>\n </span>\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;;;AAUA,IAAa,oBAAoB,WAC/B,SAAS,kBACP,EAAE,MAAM,KAAK,SAAS,OAAO,WAAW,MAAM,OAAO,MAAM,OAAO,WAAW,GAAG,QAChF,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,QAAQ,SAAS,IAAI;CAC3B,MAAM,QAAQ,YAAY,MAAM,QAAQ,EAAE,iBAAiB;CAC3D,MAAM,EAAE,MAAM,UAAU,WAAW,YAAY,IAAI;CACnD,MAAM,OAAO,SAAS,QAAQ,UAAU;CAExC,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY,SAAS,EAAE,kBAAkB;EACzC,cAAY;EACZ,aAAW;EACX,WAAW,GAAGA,uBAAK,MAAMC,iCAAO,UAAU,SAAS;EACnD,GAAI;EAPN,UAAA,CASG,WACC,qBAAC,QAAD;GACE,WAAWA,iCAAO;GAClB,eAAY;GACZ,OACE;IACE,kBAAkB,SAAS,QAAQ,CAAC;IACpC,kBAAkB,OAAO,QAAQ,CAAC;GACpC;GAPJ,UAAA,CAUE,oBAAC,QAAD,EAAM,WAAWA,iCAAO,QAAU,CAAA,GAClC,oBAAC,QAAD;IAAM,WAAWA,iCAAO;IAAM,aAAW;IACvC,UAAA,oBAAC,MAAD,EAAM,MAAM,GAAK,CAAA;GACb,CAAA,CACF;EACJ,CAAA,IAAA,MACJ,qBAAC,QAAD;GAAM,WAAWA,iCAAO;GAAxB,UAAA;IACG,QAAQ,KAAA,IACP,qBAAC,QAAD,EAAA,UAAA;KACE,oBAAC,QAAD;MAAM,WAAWD,uBAAK;MAAQ,UAAA,EAAE,kBAAkB;KAAU,CAAA;KAAE;KAC9D,oBAAC,QAAD;MAAM,WAAWA,uBAAK;MAAQ,UAAA;KAAU,CAAA;IACpC,EAAA,CAAA,IACJ;IACJ,oBAAC,QAAD;KAAM,WAAWA,uBAAK;KAAQ,UAAA;IAAY,CAAA;IAC1C,oBAAC,QAAD;KAAM,WAAWC,iCAAO;KAAQ,UAAA,EAAE,kBAAkB,OAAO;IAAa,CAAA;GACpE;EACH,CAAA,CAAA;;AAET,CACF"}
@@ -2,7 +2,10 @@ import type { DayPhase } from "./DayNightIndicator.types";
2
2
  /** Wraps any number of hours into [0, 24). */
3
3
  export declare function normalizeTime(time: number): number;
4
4
  export declare function dayPhase(time: number): DayPhase;
5
- export declare function formatClock(time: number, format: "24h" | "12h"): string;
5
+ export declare function formatClock(time: number, format: "24h" | "12h", suffixes?: {
6
+ am: string;
7
+ pm: string;
8
+ }): string;
6
9
  /**
7
10
  * Where the sun (06:00–18:00) or moon (18:00–06:00) sits on the arc:
8
11
  * `progress` 0 → 1 runs left to right, `height` 0 → 1 → 0 rises and sets.
@@ -1 +1 @@
1
- {"version":3,"file":"DayNightIndicator.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAYvE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IACzC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAKA"}
1
+ {"version":3,"file":"DayNightIndicator.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM/C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,GAAG,KAAK,EACrB,QAAQ,GAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAA2B,GAC5D,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IACzC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAKA"}
@@ -10,7 +10,10 @@ function dayPhase(time) {
10
10
  if (t >= 17 && t < 19) return "dusk";
11
11
  return "night";
12
12
  }
13
- function formatClock(time, format) {
13
+ function formatClock(time, format, suffixes = {
14
+ am: "AM",
15
+ pm: "PM"
16
+ }) {
14
17
  const t = normalizeTime(time);
15
18
  let hours = Math.floor(t);
16
19
  let minutes = Math.round((t - hours) * 60);
@@ -20,7 +23,7 @@ function formatClock(time, format) {
20
23
  }
21
24
  const mm = String(minutes).padStart(2, "0");
22
25
  if (format === "24h") return `${String(hours).padStart(2, "0")}:${mm}`;
23
- const suffix = hours < 12 ? "AM" : "PM";
26
+ const suffix = hours < 12 ? suffixes.am : suffixes.pm;
24
27
  return `${hours % 12 === 0 ? 12 : hours % 12}:${mm} ${suffix}`;
25
28
  }
26
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DayNightIndicator.utils.js","names":[],"sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.utils.ts"],"sourcesContent":["import type { DayPhase } from \"./DayNightIndicator.types\";\n\n/** Wraps any number of hours into [0, 24). */\nexport function normalizeTime(time: number): number {\n return ((time % 24) + 24) % 24;\n}\n\nexport function dayPhase(time: number): DayPhase {\n const t = normalizeTime(time);\n if (t >= 5 && t < 7) return \"dawn\";\n if (t >= 7 && t < 17) return \"day\";\n if (t >= 17 && t < 19) return \"dusk\";\n return \"night\";\n}\n\nexport function formatClock(time: number, format: \"24h\" | \"12h\"): string {\n const t = normalizeTime(time);\n let hours = Math.floor(t);\n let minutes = Math.round((t - hours) * 60);\n if (minutes === 60) {\n minutes = 0;\n hours = (hours + 1) % 24;\n }\n const mm = String(minutes).padStart(2, \"0\");\n if (format === \"24h\") return `${String(hours).padStart(2, \"0\")}:${mm}`;\n const suffix = hours < 12 ? \"AM\" : \"PM\";\n return `${hours % 12 === 0 ? 12 : hours % 12}:${mm} ${suffix}`;\n}\n\n/**\n * Where the sun (06:00–18:00) or moon (18:00–06:00) sits on the arc:\n * `progress` 0 → 1 runs left to right, `height` 0 → 1 → 0 rises and sets.\n */\nexport function arcPosition(time: number): {\n body: \"sun\" | \"moon\";\n progress: number;\n height: number;\n} {\n const t = normalizeTime(time);\n const body = t >= 6 && t < 18 ? \"sun\" : \"moon\";\n const progress = (((t - 6 + 24) % 24) % 12) / 12;\n return { body, progress, height: Math.sin(Math.PI * progress) };\n}\n"],"mappings":";;AAGA,SAAgB,cAAc,MAAsB;CAClD,QAAS,OAAO,KAAM,MAAM;AAC9B;AAEA,SAAgB,SAAS,MAAwB;CAC/C,MAAM,IAAI,cAAc,IAAI;CAC5B,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO;CAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO;CAC7B,IAAI,KAAK,MAAM,IAAI,IAAI,OAAO;CAC9B,OAAO;AACT;AAEA,SAAgB,YAAY,MAAc,QAA+B;CACvE,MAAM,IAAI,cAAc,IAAI;CAC5B,IAAI,QAAQ,KAAK,MAAM,CAAC;CACxB,IAAI,UAAU,KAAK,OAAO,IAAI,SAAS,EAAE;CACzC,IAAI,YAAY,IAAI;EAClB,UAAU;EACV,SAAS,QAAQ,KAAK;CACxB;CACA,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,SAAS,GAAG,GAAG;CAC1C,IAAI,WAAW,OAAO,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,GAAG;CAClE,MAAM,SAAS,QAAQ,KAAK,OAAO;CACnC,OAAO,GAAG,QAAQ,OAAO,IAAI,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG;AACxD;;;;;AAMA,SAAgB,YAAY,MAI1B;CACA,MAAM,IAAI,cAAc,IAAI;CAC5B,MAAM,OAAO,KAAK,KAAK,IAAI,KAAK,QAAQ;CACxC,MAAM,YAAc,IAAI,IAAI,MAAM,KAAM,KAAM;CAC9C,OAAO;EAAE;EAAM;EAAU,QAAQ,KAAK,IAAI,KAAK,KAAK,QAAQ;CAAE;AAChE"}
1
+ {"version":3,"file":"DayNightIndicator.utils.js","names":[],"sources":["../../../../src/components/hud/DayNightIndicator/DayNightIndicator.utils.ts"],"sourcesContent":["import type { DayPhase } from \"./DayNightIndicator.types\";\n\n/** Wraps any number of hours into [0, 24). */\nexport function normalizeTime(time: number): number {\n return ((time % 24) + 24) % 24;\n}\n\nexport function dayPhase(time: number): DayPhase {\n const t = normalizeTime(time);\n if (t >= 5 && t < 7) return \"dawn\";\n if (t >= 7 && t < 17) return \"day\";\n if (t >= 17 && t < 19) return \"dusk\";\n return \"night\";\n}\n\nexport function formatClock(\n time: number,\n format: \"24h\" | \"12h\",\n suffixes: { am: string; pm: string } = { am: \"AM\", pm: \"PM\" },\n): string {\n const t = normalizeTime(time);\n let hours = Math.floor(t);\n let minutes = Math.round((t - hours) * 60);\n if (minutes === 60) {\n minutes = 0;\n hours = (hours + 1) % 24;\n }\n const mm = String(minutes).padStart(2, \"0\");\n if (format === \"24h\") return `${String(hours).padStart(2, \"0\")}:${mm}`;\n const suffix = hours < 12 ? suffixes.am : suffixes.pm;\n return `${hours % 12 === 0 ? 12 : hours % 12}:${mm} ${suffix}`;\n}\n\n/**\n * Where the sun (06:00–18:00) or moon (18:00–06:00) sits on the arc:\n * `progress` 0 → 1 runs left to right, `height` 0 → 1 → 0 rises and sets.\n */\nexport function arcPosition(time: number): {\n body: \"sun\" | \"moon\";\n progress: number;\n height: number;\n} {\n const t = normalizeTime(time);\n const body = t >= 6 && t < 18 ? \"sun\" : \"moon\";\n const progress = (((t - 6 + 24) % 24) % 12) / 12;\n return { body, progress, height: Math.sin(Math.PI * progress) };\n}\n"],"mappings":";;AAGA,SAAgB,cAAc,MAAsB;CAClD,QAAS,OAAO,KAAM,MAAM;AAC9B;AAEA,SAAgB,SAAS,MAAwB;CAC/C,MAAM,IAAI,cAAc,IAAI;CAC5B,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO;CAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO;CAC7B,IAAI,KAAK,MAAM,IAAI,IAAI,OAAO;CAC9B,OAAO;AACT;AAEA,SAAgB,YACd,MACA,QACA,WAAuC;CAAE,IAAI;CAAM,IAAI;AAAK,GACpD;CACR,MAAM,IAAI,cAAc,IAAI;CAC5B,IAAI,QAAQ,KAAK,MAAM,CAAC;CACxB,IAAI,UAAU,KAAK,OAAO,IAAI,SAAS,EAAE;CACzC,IAAI,YAAY,IAAI;EAClB,UAAU;EACV,SAAS,QAAQ,KAAK;CACxB;CACA,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,SAAS,GAAG,GAAG;CAC1C,IAAI,WAAW,OAAO,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE,GAAG;CAClE,MAAM,SAAS,QAAQ,KAAK,SAAS,KAAK,SAAS;CACnD,OAAO,GAAG,QAAQ,OAAO,IAAI,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG;AACxD;;;;;AAMA,SAAgB,YAAY,MAI1B;CACA,MAAM,IAAI,cAAc,IAAI;CAC5B,MAAM,OAAO,KAAK,KAAK,IAAI,KAAK,QAAQ;CACxC,MAAM,YAAc,IAAI,IAAI,MAAM,KAAM,KAAM;CAC9C,OAAO;EAAE;EAAM;EAAU,QAAQ,KAAK,IAAI,KAAK,KAAK,QAAQ;CAAE;AAChE"}
@@ -1 +1 @@
1
- {"version":3,"file":"HealthBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/HealthBar/HealthBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,mFAAmF;AACnF,eAAO,MAAM,SAAS,2GAiBpB,CAAC"}
1
+ {"version":3,"file":"HealthBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/HealthBar/HealthBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,mFAAmF;AACnF,eAAO,MAAM,SAAS,2GAkBpB,CAAC"}
@@ -1,17 +1,19 @@
1
+ import { useBlockUIMessages } from "../../../provider/context.js";
1
2
  import { PointsBar } from "../PointsBar/PointsBar.js";
2
3
  import { forwardRef } from "react";
3
4
  import { HeartIcon } from "@malilion/block-ui-icons";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region src/components/hud/HealthBar/HealthBar.tsx
6
7
  /** Hearts — two health points per heart. Hearts bob when health is low (≤ 20%). */
7
- var HealthBar = forwardRef(function HealthBar({ value, max = 20, showText = false, iconSize = 16, label = "Health", ...rest }, ref) {
8
+ var HealthBar = forwardRef(function HealthBar({ value, max = 20, showText = false, iconSize = 16, label, ...rest }, ref) {
9
+ const m = useBlockUIMessages();
8
10
  return /* @__PURE__ */ jsx(PointsBar, {
9
11
  ref,
10
12
  value,
11
13
  max,
12
14
  showText,
13
15
  iconSize,
14
- label,
16
+ label: label ?? m.hud.health,
15
17
  lowThreshold: .2,
16
18
  icon: /* @__PURE__ */ jsx(HeartIcon, { size: iconSize }),
17
19
  ...rest
@@ -1 +1 @@
1
- {"version":3,"file":"HealthBar.js","names":[],"sources":["../../../../src/components/hud/HealthBar/HealthBar.tsx"],"sourcesContent":["import { HeartIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { PointsBar } from \"../PointsBar/PointsBar\";\nimport type { HealthBarProps } from \"./HealthBar.types\";\n\n/** Hearts — two health points per heart. Hearts bob when health is low (≤ 20%). */\nexport const HealthBar = forwardRef<HTMLDivElement, HealthBarProps>(function HealthBar(\n { value, max = 20, showText = false, iconSize = 16, label = \"Health\", ...rest },\n ref,\n) {\n return (\n <PointsBar\n ref={ref}\n value={value}\n max={max}\n showText={showText}\n iconSize={iconSize}\n label={label}\n lowThreshold={0.2}\n icon={<HeartIcon size={iconSize} />}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;AAMA,IAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,OAAO,MAAM,IAAI,WAAW,OAAO,WAAW,IAAI,QAAQ,UAAU,GAAG,QACzE,KACA;CACA,OACE,oBAAC,WAAD;EACO;EACE;EACF;EACK;EACA;EACH;EACP,cAAc;EACd,MAAM,oBAAC,WAAD,EAAW,MAAM,SAAW,CAAA;EAClC,GAAI;CACL,CAAA;AAEL,CAAC"}
1
+ {"version":3,"file":"HealthBar.js","names":[],"sources":["../../../../src/components/hud/HealthBar/HealthBar.tsx"],"sourcesContent":["import { HeartIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { PointsBar } from \"../PointsBar/PointsBar\";\nimport type { HealthBarProps } from \"./HealthBar.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Hearts — two health points per heart. Hearts bob when health is low (≤ 20%). */\nexport const HealthBar = forwardRef<HTMLDivElement, HealthBarProps>(function HealthBar(\n { value, max = 20, showText = false, iconSize = 16, label, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n return (\n <PointsBar\n ref={ref}\n value={value}\n max={max}\n showText={showText}\n iconSize={iconSize}\n label={label ?? m.hud.health}\n lowThreshold={0.2}\n icon={<HeartIcon size={iconSize} />}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;;AAOA,IAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,OAAO,MAAM,IAAI,WAAW,OAAO,WAAW,IAAI,OAAO,GAAG,QAC9D,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,OACE,oBAAC,WAAD;EACO;EACE;EACF;EACK;EACA;EACV,OAAO,SAAS,EAAE,IAAI;EACtB,cAAc;EACd,MAAM,oBAAC,WAAD,EAAW,MAAM,SAAW,CAAA;EAClC,GAAI;CACL,CAAA;AAEL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HungerBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/HungerBar/HungerBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,+DAA+D;AAC/D,eAAO,MAAM,SAAS,2GAiBpB,CAAC"}
1
+ {"version":3,"file":"HungerBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/HungerBar/HungerBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,+DAA+D;AAC/D,eAAO,MAAM,SAAS,2GAkBpB,CAAC"}
@@ -1,17 +1,19 @@
1
+ import { useBlockUIMessages } from "../../../provider/context.js";
1
2
  import { PointsBar } from "../PointsBar/PointsBar.js";
2
3
  import { forwardRef } from "react";
3
4
  import { FoodIcon } from "@malilion/block-ui-icons";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  //#region src/components/hud/HungerBar/HungerBar.tsx
6
7
  /** Hunger points shown as drumsticks — two points per icon. */
7
- var HungerBar = forwardRef(function HungerBar({ value, max = 20, showText = false, iconSize = 16, label = "Hunger", ...rest }, ref) {
8
+ var HungerBar = forwardRef(function HungerBar({ value, max = 20, showText = false, iconSize = 16, label, ...rest }, ref) {
9
+ const m = useBlockUIMessages();
8
10
  return /* @__PURE__ */ jsx(PointsBar, {
9
11
  ref,
10
12
  value,
11
13
  max,
12
14
  showText,
13
15
  iconSize,
14
- label,
16
+ label: label ?? m.hud.hunger,
15
17
  lowThreshold: .2,
16
18
  icon: /* @__PURE__ */ jsx(FoodIcon, { size: iconSize }),
17
19
  ...rest
@@ -1 +1 @@
1
- {"version":3,"file":"HungerBar.js","names":[],"sources":["../../../../src/components/hud/HungerBar/HungerBar.tsx"],"sourcesContent":["import { FoodIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { PointsBar } from \"../PointsBar/PointsBar\";\nimport type { HungerBarProps } from \"./HungerBar.types\";\n\n/** Hunger points shown as drumsticks — two points per icon. */\nexport const HungerBar = forwardRef<HTMLDivElement, HungerBarProps>(function HungerBar(\n { value, max = 20, showText = false, iconSize = 16, label = \"Hunger\", ...rest },\n ref,\n) {\n return (\n <PointsBar\n ref={ref}\n value={value}\n max={max}\n showText={showText}\n iconSize={iconSize}\n label={label}\n lowThreshold={0.2}\n icon={<FoodIcon size={iconSize} />}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;AAMA,IAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,OAAO,MAAM,IAAI,WAAW,OAAO,WAAW,IAAI,QAAQ,UAAU,GAAG,QACzE,KACA;CACA,OACE,oBAAC,WAAD;EACO;EACE;EACF;EACK;EACA;EACH;EACP,cAAc;EACd,MAAM,oBAAC,UAAD,EAAU,MAAM,SAAW,CAAA;EACjC,GAAI;CACL,CAAA;AAEL,CAAC"}
1
+ {"version":3,"file":"HungerBar.js","names":[],"sources":["../../../../src/components/hud/HungerBar/HungerBar.tsx"],"sourcesContent":["import { FoodIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { PointsBar } from \"../PointsBar/PointsBar\";\nimport type { HungerBarProps } from \"./HungerBar.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Hunger points shown as drumsticks — two points per icon. */\nexport const HungerBar = forwardRef<HTMLDivElement, HungerBarProps>(function HungerBar(\n { value, max = 20, showText = false, iconSize = 16, label, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n return (\n <PointsBar\n ref={ref}\n value={value}\n max={max}\n showText={showText}\n iconSize={iconSize}\n label={label ?? m.hud.hunger}\n lowThreshold={0.2}\n icon={<FoodIcon size={iconSize} />}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;;AAOA,IAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,OAAO,MAAM,IAAI,WAAW,OAAO,WAAW,IAAI,OAAO,GAAG,QAC9D,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,OACE,oBAAC,WAAD;EACO;EACE;EACF;EACK;EACA;EACV,OAAO,SAAS,EAAE,IAAI;EACtB,cAAc;EACd,MAAM,oBAAC,UAAD,EAAU,MAAM,SAAW,CAAA;EACjC,GAAI;CACL,CAAA;AAEL,CAAC"}
@@ -1 +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"}
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;AAIpD;;;;GAIG;AACH,eAAO,MAAM,OAAO,sGAgElB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { cx } from "../../../utils/cx.js";
2
+ import { useBlockUIMessages } from "../../../provider/context.js";
2
3
  import MiniMap_module_default from "./MiniMap.module.js";
3
4
  import { compassName, describeMarker, terrainRuns } from "./MiniMap.utils.js";
4
5
  import { forwardRef, useId } from "react";
@@ -9,7 +10,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
9
10
  * markers and a compass "N". Screen readers get the heading and each marker's
10
11
  * distance and direction as text.
11
12
  */
12
- var MiniMap = forwardRef(function MiniMap({ tiles, heading = 0, markers = [], shape = "square", size = "md", label = "Mini map", className, ...rest }, ref) {
13
+ var MiniMap = forwardRef(function MiniMap({ tiles, heading = 0, markers = [], shape = "square", size = "md", label, className, ...rest }, ref) {
14
+ const m = useBlockUIMessages();
13
15
  const captionId = useId();
14
16
  const rows = Math.max(1, tiles.length);
15
17
  const columns = Math.max(1, ...tiles.map((row) => row.length));
@@ -54,17 +56,16 @@ var MiniMap = forwardRef(function MiniMap({ tiles, heading = 0, markers = [], sh
54
56
  /* @__PURE__ */ jsx("span", {
55
57
  className: MiniMap_module_default.north,
56
58
  "aria-hidden": "true",
57
- children: "N"
59
+ children: m.miniMap.northShort
58
60
  }),
59
61
  /* @__PURE__ */ jsxs("figcaption", {
60
62
  id: captionId,
61
63
  className: "block-visually-hidden",
62
64
  children: [
63
- label,
64
- ". Facing ",
65
- compassName(heading),
66
- ".",
67
- markers.length > 0 ? ` ${markers.map(describeMarker).join(". ")}.` : ""
65
+ label ?? m.miniMap.label,
66
+ ". ",
67
+ m.miniMap.facing(compassName(heading, m)),
68
+ markers.length > 0 ? ` ${markers.map((marker) => describeMarker(marker, m)).join(". ")}.` : ""
68
69
  ]
69
70
  })
70
71
  ]
@@ -1 +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"}
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\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\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 { tiles, heading = 0, markers = [], shape = \"square\", size = \"md\", label, className, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\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 {m.miniMap.northShort}\n </span>\n <figcaption id={captionId} className=\"block-visually-hidden\">\n {label ?? m.miniMap.label}. {m.miniMap.facing(compassName(heading, m))}\n {markers.length > 0\n ? ` ${markers.map((marker) => describeMarker(marker, m)).join(\". \")}.`\n : \"\"}\n </figcaption>\n </figure>\n );\n});\n"],"mappings":";;;;;;;;;;;;AAYA,IAAa,UAAU,WAAsC,SAAS,QACpE,EAAE,OAAO,UAAU,GAAG,UAAU,CAAC,GAAG,QAAQ,UAAU,OAAO,MAAM,OAAO,WAAW,GAAG,QACxF,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,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;IACxC,UAAA,EAAE,QAAQ;GACP,CAAA;GACN,qBAAC,cAAD;IAAY,IAAI;IAAW,WAAU;IAArC,UAAA;KACG,SAAS,EAAE,QAAQ;KAAM;KAAG,EAAE,QAAQ,OAAO,YAAY,SAAS,CAAC,CAAC;KACpE,QAAQ,SAAS,IACd,IAAI,QAAQ,KAAK,WAAW,eAAe,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,KAClE;IACM;;EACN;;AAEZ,CAAC"}
@@ -1,8 +1,15 @@
1
+ import { type BlockUIMessages } from "../../../locale/messages";
1
2
  import { type MiniMapMarker } from "./MiniMap.types";
3
+ /**
4
+ * Locale for the helpers below. They are public and often passed straight to
5
+ * `Array#map`, which supplies the index as the second argument, so a number
6
+ * (or anything that is not a locale) falls back to English.
7
+ */
8
+ type MessagesArg = BlockUIMessages | number;
2
9
  /** 8-way compass name for a clockwise angle from north. */
3
- export declare function compassName(degrees: number): string;
10
+ export declare function compassName(degrees: number, messages?: MessagesArg): string;
4
11
  /** "Home: 12 blocks north-east" style description of a marker. */
5
- export declare function describeMarker(marker: MiniMapMarker): string;
12
+ export declare function describeMarker(marker: MiniMapMarker, messages?: MessagesArg): string;
6
13
  export interface TerrainRun {
7
14
  terrain: string;
8
15
  x: number;
@@ -11,4 +18,5 @@ export interface TerrainRun {
11
18
  }
12
19
  /** Merges horizontal runs of the same terrain into single rectangles. */
13
20
  export declare function terrainRuns(tiles: string[]): TerrainRun[];
21
+ export {};
14
22
  //# sourceMappingURL=MiniMap.utils.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"MiniMap.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/MiniMap/MiniMap.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAkB,KAAK,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AAE9F;;;;GAIG;AACH,KAAK,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC;AAM5C,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,CAI3E;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,CAMpF;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"}
@@ -1,25 +1,22 @@
1
+ import { enMessages } from "../../../locale/messages.js";
1
2
  import { miniMapTerrain } from "./MiniMap.types.js";
2
3
  //#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
- ];
4
+ function resolveMessages(messages) {
5
+ return typeof messages === "object" && messages !== null ? messages : enMessages;
6
+ }
13
7
  /** 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";
8
+ function compassName(degrees, messages) {
9
+ const index = Math.round((degrees % 360 + 360) % 360 / 45) % 8;
10
+ const { directions } = resolveMessages(messages).miniMap;
11
+ return directions[index] ?? directions[0];
16
12
  }
17
13
  /** "Home: 12 blocks north-east" style description of a marker. */
18
- function describeMarker(marker) {
14
+ function describeMarker(marker, messages) {
15
+ const m = resolveMessages(messages);
19
16
  const distance = Math.round(Math.hypot(marker.x, marker.y));
20
- if (distance === 0) return `${marker.label}: here`;
17
+ if (distance === 0) return m.miniMap.here(marker.label);
21
18
  const angle = Math.atan2(marker.x, -marker.y) * 180 / Math.PI;
22
- return `${marker.label}: ${distance} ${distance === 1 ? "block" : "blocks"} ${compassName(angle)}`;
19
+ return m.miniMap.distance(marker.label, distance, compassName(angle, m));
23
20
  }
24
21
  /** Merges horizontal runs of the same terrain into single rectangles. */
25
22
  function terrainRuns(tiles) {
@@ -1 +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"}
1
+ {"version":3,"file":"MiniMap.utils.js","names":[],"sources":["../../../../src/components/hud/MiniMap/MiniMap.utils.ts"],"sourcesContent":["import { enMessages, type BlockUIMessages } from \"../../../locale/messages\";\nimport { miniMapTerrain, type MiniMapMarker, type MiniMapTerrainCode } from \"./MiniMap.types\";\n\n/**\n * Locale for the helpers below. They are public and often passed straight to\n * `Array#map`, which supplies the index as the second argument, so a number\n * (or anything that is not a locale) falls back to English.\n */\ntype MessagesArg = BlockUIMessages | number;\n\nfunction resolveMessages(messages: MessagesArg | undefined): BlockUIMessages {\n return typeof messages === \"object\" && messages !== null ? messages : enMessages;\n}\n\n/** 8-way compass name for a clockwise angle from north. */\nexport function compassName(degrees: number, messages?: MessagesArg): string {\n const index = Math.round((((degrees % 360) + 360) % 360) / 45) % 8;\n const { directions } = resolveMessages(messages).miniMap;\n return directions[index] ?? directions[0];\n}\n\n/** \"Home: 12 blocks north-east\" style description of a marker. */\nexport function describeMarker(marker: MiniMapMarker, messages?: MessagesArg): string {\n const m = resolveMessages(messages);\n const distance = Math.round(Math.hypot(marker.x, marker.y));\n if (distance === 0) return m.miniMap.here(marker.label);\n const angle = (Math.atan2(marker.x, -marker.y) * 180) / Math.PI;\n return m.miniMap.distance(marker.label, distance, compassName(angle, m));\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":";;;AAUA,SAAS,gBAAgB,UAAoD;CAC3E,OAAO,OAAO,aAAa,YAAY,aAAa,OAAO,WAAW;AACxE;;AAGA,SAAgB,YAAY,SAAiB,UAAgC;CAC3E,MAAM,QAAQ,KAAK,OAAS,UAAU,MAAO,OAAO,MAAO,EAAE,IAAI;CACjE,MAAM,EAAE,eAAe,gBAAgB,QAAQ,CAAC,CAAC;CACjD,OAAO,WAAW,UAAU,WAAW;AACzC;;AAGA,SAAgB,eAAe,QAAuB,UAAgC;CACpF,MAAM,IAAI,gBAAgB,QAAQ;CAClC,MAAM,WAAW,KAAK,MAAM,KAAK,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;CAC1D,IAAI,aAAa,GAAG,OAAO,EAAE,QAAQ,KAAK,OAAO,KAAK;CACtD,MAAM,QAAS,KAAK,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAO,KAAK;CAC7D,OAAO,EAAE,QAAQ,SAAS,OAAO,OAAO,UAAU,YAAY,OAAO,CAAC,CAAC;AACzE;;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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerHUD.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/PlayerHUD/PlayerHUD.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,SAAS,wGA0CpB,CAAC"}
1
+ {"version":3,"file":"PlayerHUD.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/PlayerHUD/PlayerHUD.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;GAGG;AACH,eAAO,MAAM,SAAS,wGAgDpB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { cx } from "../../../utils/cx.js";
2
+ import { useBlockUIMessages } from "../../../provider/context.js";
2
3
  import { HealthBar } from "../HealthBar/HealthBar.js";
3
4
  import { ArmorBar } from "../ArmorBar/ArmorBar.js";
4
5
  import { HungerBar } from "../HungerBar/HungerBar.js";
@@ -11,11 +12,12 @@ import { jsx, jsxs } from "react/jsx-runtime";
11
12
  * Survival HUD: armor above health on the left, hunger on the right and the
12
13
  * XP bar with level underneath.
13
14
  */
14
- var PlayerHUD = forwardRef(function PlayerHUD({ player, iconSize = 16, showText = false, label = "Player status", className, ...rest }, ref) {
15
+ var PlayerHUD = forwardRef(function PlayerHUD({ player, iconSize = 16, showText = false, label, className, ...rest }, ref) {
16
+ const m = useBlockUIMessages();
15
17
  const { health, maxHealth = 20, armor, maxArmor = 20, hunger, maxHunger = 20, level, xp, maxXp } = player;
16
18
  return /* @__PURE__ */ jsxs("section", {
17
19
  ref,
18
- "aria-label": label,
20
+ "aria-label": label ?? m.hud.playerStatus,
19
21
  className: cx(PlayerHUD_module_default.hud, className),
20
22
  ...rest,
21
23
  children: [/* @__PURE__ */ jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerHUD.js","names":["styles"],"sources":["../../../../src/components/hud/PlayerHUD/PlayerHUD.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { ArmorBar } from \"../ArmorBar/ArmorBar\";\nimport { HealthBar } from \"../HealthBar/HealthBar\";\nimport { HungerBar } from \"../HungerBar/HungerBar\";\nimport { XPBar } from \"../XPBar/XPBar\";\nimport styles from \"./PlayerHUD.module.css\";\nimport type { PlayerHUDProps } from \"./PlayerHUD.types\";\n\n/**\n * Survival HUD: armor above health on the left, hunger on the right and the\n * XP bar with level underneath.\n */\nexport const PlayerHUD = forwardRef<HTMLElement, PlayerHUDProps>(function PlayerHUD(\n { player, iconSize = 16, showText = false, label = \"Player status\", className, ...rest },\n ref,\n) {\n const {\n health,\n maxHealth = 20,\n armor,\n maxArmor = 20,\n hunger,\n maxHunger = 20,\n level,\n xp,\n maxXp,\n } = player;\n\n return (\n <section ref={ref} aria-label={label} className={cx(styles.hud, className)} {...rest}>\n <div className={styles.bars}>\n <div className={styles.left}>\n {armor !== undefined ? (\n <ArmorBar value={armor} max={maxArmor} iconSize={iconSize} showText={showText} />\n ) : null}\n <HealthBar value={health} max={maxHealth} iconSize={iconSize} showText={showText} />\n </div>\n {hunger !== undefined ? (\n <div className={styles.right}>\n <HungerBar\n value={hunger}\n max={maxHunger}\n iconSize={iconSize}\n showText={showText}\n direction=\"rtl\"\n />\n </div>\n ) : null}\n </div>\n {xp !== undefined && maxXp !== undefined ? (\n <XPBar value={xp} max={maxXp} level={level} showValue={showText} />\n ) : null}\n </section>\n );\n});\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAa,YAAY,WAAwC,SAAS,UACxE,EAAE,QAAQ,WAAW,IAAI,WAAW,OAAO,QAAQ,iBAAiB,WAAW,GAAG,QAClF,KACA;CACA,MAAM,EACJ,QACA,YAAY,IACZ,OACA,WAAW,IACX,QACA,YAAY,IACZ,OACA,IACA,UACE;CAEJ,OACE,qBAAC,WAAD;EAAc;EAAK,cAAY;EAAO,WAAW,GAAGA,yBAAO,KAAK,SAAS;EAAG,GAAI;EAAhF,UAAA,CACE,qBAAC,OAAD;GAAK,WAAWA,yBAAO;GAAvB,UAAA,CACE,qBAAC,OAAD;IAAK,WAAWA,yBAAO;IAAvB,UAAA,CACG,UAAU,KAAA,IACT,oBAAC,UAAD;KAAU,OAAO;KAAO,KAAK;KAAoB;KAAoB;IAAW,CAAA,IAC9E,MACJ,oBAAC,WAAD;KAAW,OAAO;KAAQ,KAAK;KAAqB;KAAoB;IAAW,CAAA,CAChF;GACJ,CAAA,GAAA,WAAW,KAAA,IACV,oBAAC,OAAD;IAAK,WAAWA,yBAAO;IACrB,UAAA,oBAAC,WAAD;KACE,OAAO;KACP,KAAK;KACK;KACA;KACV,WAAU;IACX,CAAA;GACE,CAAA,IACH,IACD;EACJ,CAAA,GAAA,OAAO,KAAA,KAAa,UAAU,KAAA,IAC7B,oBAAC,OAAD;GAAO,OAAO;GAAI,KAAK;GAAc;GAAO,WAAW;EAAW,CAAA,IAChE,IACG;;AAEb,CAAC"}
1
+ {"version":3,"file":"PlayerHUD.js","names":["styles"],"sources":["../../../../src/components/hud/PlayerHUD/PlayerHUD.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { ArmorBar } from \"../ArmorBar/ArmorBar\";\nimport { HealthBar } from \"../HealthBar/HealthBar\";\nimport { HungerBar } from \"../HungerBar/HungerBar\";\nimport { XPBar } from \"../XPBar/XPBar\";\nimport styles from \"./PlayerHUD.module.css\";\nimport type { PlayerHUDProps } from \"./PlayerHUD.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/**\n * Survival HUD: armor above health on the left, hunger on the right and the\n * XP bar with level underneath.\n */\nexport const PlayerHUD = forwardRef<HTMLElement, PlayerHUDProps>(function PlayerHUD(\n { player, iconSize = 16, showText = false, label, className, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n const {\n health,\n maxHealth = 20,\n armor,\n maxArmor = 20,\n hunger,\n maxHunger = 20,\n level,\n xp,\n maxXp,\n } = player;\n\n return (\n <section\n ref={ref}\n aria-label={label ?? m.hud.playerStatus}\n className={cx(styles.hud, className)}\n {...rest}\n >\n <div className={styles.bars}>\n <div className={styles.left}>\n {armor !== undefined ? (\n <ArmorBar value={armor} max={maxArmor} iconSize={iconSize} showText={showText} />\n ) : null}\n <HealthBar value={health} max={maxHealth} iconSize={iconSize} showText={showText} />\n </div>\n {hunger !== undefined ? (\n <div className={styles.right}>\n <HungerBar\n value={hunger}\n max={maxHunger}\n iconSize={iconSize}\n showText={showText}\n direction=\"rtl\"\n />\n </div>\n ) : null}\n </div>\n {xp !== undefined && maxXp !== undefined ? (\n <XPBar value={xp} max={maxXp} level={level} showValue={showText} />\n ) : null}\n </section>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;AAcA,IAAa,YAAY,WAAwC,SAAS,UACxE,EAAE,QAAQ,WAAW,IAAI,WAAW,OAAO,OAAO,WAAW,GAAG,QAChE,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,EACJ,QACA,YAAY,IACZ,OACA,WAAW,IACX,QACA,YAAY,IACZ,OACA,IACA,UACE;CAEJ,OACE,qBAAC,WAAD;EACO;EACL,cAAY,SAAS,EAAE,IAAI;EAC3B,WAAW,GAAGA,yBAAO,KAAK,SAAS;EACnC,GAAI;EAJN,UAAA,CAME,qBAAC,OAAD;GAAK,WAAWA,yBAAO;GAAvB,UAAA,CACE,qBAAC,OAAD;IAAK,WAAWA,yBAAO;IAAvB,UAAA,CACG,UAAU,KAAA,IACT,oBAAC,UAAD;KAAU,OAAO;KAAO,KAAK;KAAoB;KAAoB;IAAW,CAAA,IAC9E,MACJ,oBAAC,WAAD;KAAW,OAAO;KAAQ,KAAK;KAAqB;KAAoB;IAAW,CAAA,CAChF;GACJ,CAAA,GAAA,WAAW,KAAA,IACV,oBAAC,OAAD;IAAK,WAAWA,yBAAO;IACrB,UAAA,oBAAC,WAAD;KACE,OAAO;KACP,KAAK;KACK;KACA;KACV,WAAU;IACX,CAAA;GACE,CAAA,IACH,IACD;EACJ,CAAA,GAAA,OAAO,KAAA,KAAa,UAAU,KAAA,IAC7B,oBAAC,OAAD;GAAO,OAAO;GAAI,KAAK;GAAc;GAAO,WAAW;EAAW,CAAA,IAChE,IACG;;AAEb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PointsBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/PointsBar/PointsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKxE,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,SAAS,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC3B;AAID;;;GAGG;AACH,eAAO,MAAM,SAAS,2GAsDpB,CAAC"}
1
+ {"version":3,"file":"PointsBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/PointsBar/PointsBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMxE,MAAM,WAAW,cAAe,SAAQ,cAAc,CAAC,cAAc,CAAC;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,SAAS,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC3B;AAID;;;GAGG;AACH,eAAO,MAAM,SAAS,2GAuDpB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { cx } from "../../../utils/cx.js";
2
+ import { useBlockUIMessages } from "../../../provider/context.js";
2
3
  import { clamp } from "../../../utils/number.js";
3
4
  import PointsBar_module_default from "./PointsBar.module.js";
4
5
  import { forwardRef } from "react";
@@ -9,6 +10,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
9
10
  * each worth two points, exposed as a single `meter`.
10
11
  */
11
12
  var PointsBar = forwardRef(function PointsBar({ value, max = 20, icon, label, showText = false, iconSize = 16, lowThreshold = 0, direction = "ltr", className, ...rest }, ref) {
13
+ const m = useBlockUIMessages();
12
14
  const safeMax = Math.max(0, max);
13
15
  const current = clamp(value, 0, safeMax);
14
16
  const units = Math.ceil(safeMax / 2);
@@ -24,7 +26,7 @@ var PointsBar = forwardRef(function PointsBar({ value, max = 20, icon, label, sh
24
26
  "aria-valuemin": 0,
25
27
  "aria-valuemax": safeMax,
26
28
  "aria-valuenow": current,
27
- "aria-valuetext": `${current} of ${safeMax}`,
29
+ "aria-valuetext": m.common.amount(String(current), String(safeMax)),
28
30
  "data-low": low || void 0,
29
31
  "data-direction": direction,
30
32
  "data-icon-size": iconSize,
@@ -1 +1 @@
1
- {"version":3,"file":"PointsBar.js","names":["styles"],"sources":["../../../../src/components/hud/PointsBar/PointsBar.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { clamp } from \"../../../utils/number\";\nimport styles from \"./PointsBar.module.css\";\n\nexport interface PointsBarProps extends HTMLAttributes<HTMLDivElement> {\n value: number;\n /** Points; every icon represents 2 points. @default 20 */\n max?: number;\n /** Icon for one unit (rendered full, half or empty). */\n icon: ReactNode;\n /** Accessible name, e.g. \"Health\". */\n label: string;\n /** Show `value / max` next to the icons. */\n showText?: boolean;\n /** Pixel size of each icon. @default 16 */\n iconSize?: number;\n /** Highlight when `value / max` drops to or below this ratio. @default 0 */\n lowThreshold?: number;\n /** Visual direction. Hunger fills right-to-left in many games. @default \"ltr\" */\n direction?: \"ltr\" | \"rtl\";\n}\n\ntype Fill = \"full\" | \"half\" | \"empty\";\n\n/**\n * Internal base for HealthBar / ArmorBar / HungerBar: a row of pixel icons,\n * each worth two points, exposed as a single `meter`.\n */\nexport const PointsBar = forwardRef<HTMLDivElement, PointsBarProps>(function PointsBar(\n {\n value,\n max = 20,\n icon,\n label,\n showText = false,\n iconSize = 16,\n lowThreshold = 0,\n direction = \"ltr\",\n className,\n ...rest\n },\n ref,\n) {\n const safeMax = Math.max(0, max);\n const current = clamp(value, 0, safeMax);\n const units = Math.ceil(safeMax / 2);\n const low = safeMax > 0 && current / safeMax <= lowThreshold;\n const fills: Fill[] = Array.from({ length: units }, (_, i) => {\n const points = clamp(current - i * 2, 0, 2);\n return points >= 2 ? \"full\" : points >= 1 ? \"half\" : \"empty\";\n });\n\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={current}\n aria-valuetext={`${current} of ${safeMax}`}\n data-low={low || undefined}\n data-direction={direction}\n data-icon-size={iconSize}\n className={cx(styles.bar, className)}\n {...rest}\n >\n <span className={styles.icons} aria-hidden=\"true\">\n {fills.map((fill, index) => (\n <span key={index} className={styles.unit} data-fill={fill}>\n <span className={styles.empty}>{icon}</span>\n {fill !== \"empty\" ? <span className={styles.full}>{icon}</span> : null}\n </span>\n ))}\n </span>\n {showText ? (\n <span className={styles.text} aria-hidden=\"true\">\n {current} / {safeMax}\n </span>\n ) : null}\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;AA6BA,IAAa,YAAY,WAA2C,SAAS,UAC3E,EACE,OACA,MAAM,IACN,MACA,OACA,WAAW,OACX,WAAW,IACX,eAAe,GACf,YAAY,OACZ,WACA,GAAG,QAEL,KACA;CACA,MAAM,UAAU,KAAK,IAAI,GAAG,GAAG;CAC/B,MAAM,UAAU,MAAM,OAAO,GAAG,OAAO;CACvC,MAAM,QAAQ,KAAK,KAAK,UAAU,CAAC;CACnC,MAAM,MAAM,UAAU,KAAK,UAAU,WAAW;CAChD,MAAM,QAAgB,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,MAAM;EAC5D,MAAM,SAAS,MAAM,UAAU,IAAI,GAAG,GAAG,CAAC;EAC1C,OAAO,UAAU,IAAI,SAAS,UAAU,IAAI,SAAS;CACvD,CAAC;CAED,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY;EACZ,iBAAe;EACf,iBAAe;EACf,iBAAe;EACf,kBAAgB,GAAG,QAAQ,MAAM;EACjC,YAAU,OAAO,KAAA;EACjB,kBAAgB;EAChB,kBAAgB;EAChB,WAAW,GAAGA,yBAAO,KAAK,SAAS;EACnC,GAAI;EAZN,UAAA,CAcE,oBAAC,QAAD;GAAM,WAAWA,yBAAO;GAAO,eAAY;GACxC,UAAA,MAAM,KAAK,MAAM,UAChB,qBAAC,QAAD;IAAkB,WAAWA,yBAAO;IAAM,aAAW;IAArD,UAAA,CACE,oBAAC,QAAD;KAAM,WAAWA,yBAAO;KAAQ,UAAA;IAAW,CAAA,GAC1C,SAAS,UAAU,oBAAC,QAAD;KAAM,WAAWA,yBAAO;KAAO,UAAA;IAAW,CAAA,IAAI,IAC9D;GAHK,GAAA,KAGL,CACP;EACG,CAAA,GACL,WACC,qBAAC,QAAD;GAAM,WAAWA,yBAAO;GAAM,eAAY;GAA1C,UAAA;IACG;IAAQ;IAAI;GACT;EACJ,CAAA,IAAA,IACD;;AAET,CAAC"}
1
+ {"version":3,"file":"PointsBar.js","names":["styles"],"sources":["../../../../src/components/hud/PointsBar/PointsBar.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { clamp } from \"../../../utils/number\";\nimport styles from \"./PointsBar.module.css\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\nexport interface PointsBarProps extends HTMLAttributes<HTMLDivElement> {\n value: number;\n /** Points; every icon represents 2 points. @default 20 */\n max?: number;\n /** Icon for one unit (rendered full, half or empty). */\n icon: ReactNode;\n /** Accessible name, e.g. \"Health\". */\n label: string;\n /** Show `value / max` next to the icons. */\n showText?: boolean;\n /** Pixel size of each icon. @default 16 */\n iconSize?: number;\n /** Highlight when `value / max` drops to or below this ratio. @default 0 */\n lowThreshold?: number;\n /** Visual direction. Hunger fills right-to-left in many games. @default \"ltr\" */\n direction?: \"ltr\" | \"rtl\";\n}\n\ntype Fill = \"full\" | \"half\" | \"empty\";\n\n/**\n * Internal base for HealthBar / ArmorBar / HungerBar: a row of pixel icons,\n * each worth two points, exposed as a single `meter`.\n */\nexport const PointsBar = forwardRef<HTMLDivElement, PointsBarProps>(function PointsBar(\n {\n value,\n max = 20,\n icon,\n label,\n showText = false,\n iconSize = 16,\n lowThreshold = 0,\n direction = \"ltr\",\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const safeMax = Math.max(0, max);\n const current = clamp(value, 0, safeMax);\n const units = Math.ceil(safeMax / 2);\n const low = safeMax > 0 && current / safeMax <= lowThreshold;\n const fills: Fill[] = Array.from({ length: units }, (_, i) => {\n const points = clamp(current - i * 2, 0, 2);\n return points >= 2 ? \"full\" : points >= 1 ? \"half\" : \"empty\";\n });\n\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={current}\n aria-valuetext={m.common.amount(String(current), String(safeMax))}\n data-low={low || undefined}\n data-direction={direction}\n data-icon-size={iconSize}\n className={cx(styles.bar, className)}\n {...rest}\n >\n <span className={styles.icons} aria-hidden=\"true\">\n {fills.map((fill, index) => (\n <span key={index} className={styles.unit} data-fill={fill}>\n <span className={styles.empty}>{icon}</span>\n {fill !== \"empty\" ? <span className={styles.full}>{icon}</span> : null}\n </span>\n ))}\n </span>\n {showText ? (\n <span className={styles.text} aria-hidden=\"true\">\n {current} / {safeMax}\n </span>\n ) : null}\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;;AA8BA,IAAa,YAAY,WAA2C,SAAS,UAC3E,EACE,OACA,MAAM,IACN,MACA,OACA,WAAW,OACX,WAAW,IACX,eAAe,GACf,YAAY,OACZ,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,UAAU,KAAK,IAAI,GAAG,GAAG;CAC/B,MAAM,UAAU,MAAM,OAAO,GAAG,OAAO;CACvC,MAAM,QAAQ,KAAK,KAAK,UAAU,CAAC;CACnC,MAAM,MAAM,UAAU,KAAK,UAAU,WAAW;CAChD,MAAM,QAAgB,MAAM,KAAK,EAAE,QAAQ,MAAM,IAAI,GAAG,MAAM;EAC5D,MAAM,SAAS,MAAM,UAAU,IAAI,GAAG,GAAG,CAAC;EAC1C,OAAO,UAAU,IAAI,SAAS,UAAU,IAAI,SAAS;CACvD,CAAC;CAED,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY;EACZ,iBAAe;EACf,iBAAe;EACf,iBAAe;EACf,kBAAgB,EAAE,OAAO,OAAO,OAAO,OAAO,GAAG,OAAO,OAAO,CAAC;EAChE,YAAU,OAAO,KAAA;EACjB,kBAAgB;EAChB,kBAAgB;EAChB,WAAW,GAAGA,yBAAO,KAAK,SAAS;EACnC,GAAI;EAZN,UAAA,CAcE,oBAAC,QAAD;GAAM,WAAWA,yBAAO;GAAO,eAAY;GACxC,UAAA,MAAM,KAAK,MAAM,UAChB,qBAAC,QAAD;IAAkB,WAAWA,yBAAO;IAAM,aAAW;IAArD,UAAA,CACE,oBAAC,QAAD;KAAM,WAAWA,yBAAO;KAAQ,UAAA;IAAW,CAAA,GAC1C,SAAS,UAAU,oBAAC,QAAD;KAAM,WAAWA,yBAAO;KAAO,UAAA;IAAW,CAAA,IAAI,IAC9D;GAHK,GAAA,KAGL,CACP;EACG,CAAA,GACL,WACC,qBAAC,QAAD;GAAM,WAAWA,yBAAO;GAAM,eAAY;GAA1C,UAAA;IACG;IAAQ;IAAI;GACT;EACJ,CAAA,IAAA,IACD;;AAET,CAAC"}
@@ -1 +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"}
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;AAI1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4GAiErB,CAAC"}