@malilion/block-ui-react 0.5.1 → 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.
- package/dist/components/actions/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/components/actions/ContextMenu/ContextMenu.js +4 -2
- package/dist/components/actions/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/components/actions/ContextMenu/ContextMenu.types.d.ts +1 -1
- package/dist/components/actions/ContextMenu/ContextMenu.types.d.ts.map +1 -1
- package/dist/components/cards/AchievementCard/AchievementCard.d.ts.map +1 -1
- package/dist/components/cards/AchievementCard/AchievementCard.js +6 -4
- package/dist/components/cards/AchievementCard/AchievementCard.js.map +1 -1
- package/dist/components/cards/PlayerCard/PlayerCard.d.ts.map +1 -1
- package/dist/components/cards/PlayerCard/PlayerCard.js +7 -5
- package/dist/components/cards/PlayerCard/PlayerCard.js.map +1 -1
- package/dist/components/cards/QuestCard/QuestCard.d.ts.map +1 -1
- package/dist/components/cards/QuestCard/QuestCard.js +9 -7
- package/dist/components/cards/QuestCard/QuestCard.js.map +1 -1
- package/dist/components/cards/ServerBrowser/ServerBrowser.d.ts.map +1 -1
- package/dist/components/cards/ServerBrowser/ServerBrowser.js +27 -25
- package/dist/components/cards/ServerBrowser/ServerBrowser.js.map +1 -1
- package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts +2 -2
- package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts.map +1 -1
- package/dist/components/cards/ServerCard/ServerCard.d.ts.map +1 -1
- package/dist/components/cards/ServerCard/ServerCard.js +10 -8
- package/dist/components/cards/ServerCard/ServerCard.js.map +1 -1
- package/dist/components/cards/WorldBrowser/WorldBrowser.d.ts.map +1 -1
- package/dist/components/cards/WorldBrowser/WorldBrowser.js +20 -18
- package/dist/components/cards/WorldBrowser/WorldBrowser.js.map +1 -1
- package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts +2 -2
- package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts.map +1 -1
- package/dist/components/cards/WorldCard/WorldCard.d.ts.map +1 -1
- package/dist/components/cards/WorldCard/WorldCard.js +16 -6
- package/dist/components/cards/WorldCard/WorldCard.js.map +1 -1
- package/dist/components/crafting/Anvil/Anvil.d.ts.map +1 -1
- package/dist/components/crafting/Anvil/Anvil.js +9 -7
- package/dist/components/crafting/Anvil/Anvil.js.map +1 -1
- package/dist/components/crafting/Anvil/Anvil.types.d.ts +1 -1
- package/dist/components/crafting/Anvil/Anvil.types.d.ts.map +1 -1
- package/dist/components/crafting/BrewingStand/BrewingStand.d.ts.map +1 -1
- package/dist/components/crafting/BrewingStand/BrewingStand.js +11 -20
- package/dist/components/crafting/BrewingStand/BrewingStand.js.map +1 -1
- package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts +1 -1
- package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts.map +1 -1
- package/dist/components/crafting/BrewingStand/BrewingStand.types.js.map +1 -1
- package/dist/components/crafting/CraftingGrid/CraftingGrid.d.ts.map +1 -1
- package/dist/components/crafting/CraftingGrid/CraftingGrid.js +4 -2
- package/dist/components/crafting/CraftingGrid/CraftingGrid.js.map +1 -1
- package/dist/components/crafting/CraftingResult/CraftingResult.d.ts.map +1 -1
- package/dist/components/crafting/CraftingResult/CraftingResult.js +5 -2
- package/dist/components/crafting/CraftingResult/CraftingResult.js.map +1 -1
- package/dist/components/crafting/CraftingResult/CraftingResult.types.d.ts +1 -1
- package/dist/components/crafting/CraftingResult/CraftingResult.types.d.ts.map +1 -1
- package/dist/components/crafting/CraftingTable/CraftingTable.d.ts.map +1 -1
- package/dist/components/crafting/CraftingTable/CraftingTable.js +5 -3
- package/dist/components/crafting/CraftingTable/CraftingTable.js.map +1 -1
- package/dist/components/crafting/CraftingTable/CraftingTable.types.d.ts +2 -2
- package/dist/components/crafting/CraftingTable/CraftingTable.types.d.ts.map +1 -1
- package/dist/components/crafting/EnchantingTable/EnchantingTable.d.ts.map +1 -1
- package/dist/components/crafting/EnchantingTable/EnchantingTable.js +15 -13
- package/dist/components/crafting/EnchantingTable/EnchantingTable.js.map +1 -1
- package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts +1 -1
- package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts.map +1 -1
- package/dist/components/crafting/Furnace/Furnace.d.ts.map +1 -1
- package/dist/components/crafting/Furnace/Furnace.js +11 -16
- package/dist/components/crafting/Furnace/Furnace.js.map +1 -1
- package/dist/components/crafting/Furnace/Furnace.types.d.ts +1 -1
- package/dist/components/crafting/Furnace/Furnace.types.d.ts.map +1 -1
- package/dist/components/crafting/Furnace/Furnace.types.js.map +1 -1
- package/dist/components/crafting/RecipeBook/RecipeBook.d.ts.map +1 -1
- package/dist/components/crafting/RecipeBook/RecipeBook.js +17 -15
- package/dist/components/crafting/RecipeBook/RecipeBook.js.map +1 -1
- package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts +1 -1
- package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts.map +1 -1
- package/dist/components/crafting/TradingUI/TradingUI.d.ts +1 -1
- package/dist/components/crafting/TradingUI/TradingUI.d.ts.map +1 -1
- package/dist/components/crafting/TradingUI/TradingUI.js +14 -13
- package/dist/components/crafting/TradingUI/TradingUI.js.map +1 -1
- package/dist/components/crafting/TradingUI/TradingUI.types.d.ts +1 -1
- package/dist/components/crafting/TradingUI/TradingUI.types.d.ts.map +1 -1
- package/dist/components/crafting/TradingUI/TradingUI.types.js.map +1 -1
- package/dist/components/display/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/display/Avatar/Avatar.js +3 -7
- package/dist/components/display/Avatar/Avatar.js.map +1 -1
- package/dist/components/display/BlockTable/BlockTable.d.ts.map +1 -1
- package/dist/components/display/BlockTable/BlockTable.js +4 -2
- package/dist/components/display/BlockTable/BlockTable.js.map +1 -1
- package/dist/components/display/BlockTable/BlockTable.types.d.ts +1 -1
- package/dist/components/display/BlockTable/BlockTable.types.d.ts.map +1 -1
- package/dist/components/display/SkillTree/SkillTree.d.ts.map +1 -1
- package/dist/components/display/SkillTree/SkillTree.js +16 -15
- package/dist/components/display/SkillTree/SkillTree.js.map +1 -1
- package/dist/components/display/SkillTree/SkillTree.types.d.ts +1 -1
- package/dist/components/display/SkillTree/SkillTree.types.d.ts.map +1 -1
- package/dist/components/feedback/Alert/BlockAlert.d.ts.map +1 -1
- package/dist/components/feedback/Alert/BlockAlert.js +4 -2
- package/dist/components/feedback/Alert/BlockAlert.js.map +1 -1
- package/dist/components/feedback/Alert/BlockAlert.types.d.ts +1 -1
- package/dist/components/feedback/Alert/BlockAlert.types.d.ts.map +1 -1
- package/dist/components/feedback/Alert/BlockAlert.types.js.map +1 -1
- package/dist/components/feedback/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js +5 -3
- package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js.map +1 -1
- package/dist/components/feedback/ConfirmDialog/ConfirmDialog.types.d.ts +2 -2
- package/dist/components/feedback/ConfirmDialog/ConfirmDialog.types.d.ts.map +1 -1
- package/dist/components/feedback/Drawer/Drawer.d.ts.map +1 -1
- package/dist/components/feedback/Drawer/Drawer.js +3 -2
- package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
- package/dist/components/feedback/Loading/BlockLoading.d.ts.map +1 -1
- package/dist/components/feedback/Loading/BlockLoading.js +4 -2
- package/dist/components/feedback/Loading/BlockLoading.js.map +1 -1
- package/dist/components/feedback/Loading/BlockLoading.types.d.ts +1 -1
- package/dist/components/feedback/Loading/BlockLoading.types.d.ts.map +1 -1
- package/dist/components/feedback/Modal/BlockModal.d.ts.map +1 -1
- package/dist/components/feedback/Modal/BlockModal.js +3 -2
- package/dist/components/feedback/Modal/BlockModal.js.map +1 -1
- package/dist/components/feedback/Progress/BlockProgress.d.ts.map +1 -1
- package/dist/components/feedback/Progress/BlockProgress.js +3 -1
- package/dist/components/feedback/Progress/BlockProgress.js.map +1 -1
- package/dist/components/feedback/Toast/Toast.d.ts +1 -1
- package/dist/components/feedback/Toast/Toast.d.ts.map +1 -1
- package/dist/components/feedback/Toast/Toast.js +6 -4
- package/dist/components/feedback/Toast/Toast.js.map +1 -1
- package/dist/components/feedback/Toast/Toast.types.d.ts +1 -1
- package/dist/components/feedback/Toast/Toast.types.d.ts.map +1 -1
- package/dist/components/forms/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/components/forms/NumberInput/NumberInput.js +4 -2
- package/dist/components/forms/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/hud/ArmorBar/ArmorBar.d.ts.map +1 -1
- package/dist/components/hud/ArmorBar/ArmorBar.js +4 -2
- package/dist/components/hud/ArmorBar/ArmorBar.js.map +1 -1
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.d.ts.map +1 -1
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.js +4 -2
- package/dist/components/hud/BiomeIndicator/BiomeIndicator.js.map +1 -1
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.d.ts.map +1 -1
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js +9 -7
- package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js.map +1 -1
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.d.ts.map +1 -1
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.js +7 -11
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.js.map +1 -1
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts +4 -1
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts.map +1 -1
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js +5 -2
- package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js.map +1 -1
- package/dist/components/hud/HealthBar/HealthBar.d.ts.map +1 -1
- package/dist/components/hud/HealthBar/HealthBar.js +4 -2
- package/dist/components/hud/HealthBar/HealthBar.js.map +1 -1
- package/dist/components/hud/HungerBar/HungerBar.d.ts.map +1 -1
- package/dist/components/hud/HungerBar/HungerBar.js +4 -2
- package/dist/components/hud/HungerBar/HungerBar.js.map +1 -1
- package/dist/components/hud/MiniMap/MiniMap.d.ts.map +1 -1
- package/dist/components/hud/MiniMap/MiniMap.js +8 -7
- package/dist/components/hud/MiniMap/MiniMap.js.map +1 -1
- package/dist/components/hud/MiniMap/MiniMap.utils.d.ts +10 -2
- package/dist/components/hud/MiniMap/MiniMap.utils.d.ts.map +1 -1
- package/dist/components/hud/MiniMap/MiniMap.utils.js +12 -15
- package/dist/components/hud/MiniMap/MiniMap.utils.js.map +1 -1
- package/dist/components/hud/PlayerHUD/PlayerHUD.d.ts.map +1 -1
- package/dist/components/hud/PlayerHUD/PlayerHUD.js +4 -2
- package/dist/components/hud/PlayerHUD/PlayerHUD.js.map +1 -1
- package/dist/components/hud/PointsBar/PointsBar.d.ts.map +1 -1
- package/dist/components/hud/PointsBar/PointsBar.js +3 -1
- package/dist/components/hud/PointsBar/PointsBar.js.map +1 -1
- package/dist/components/hud/Scoreboard/Scoreboard.d.ts.map +1 -1
- package/dist/components/hud/Scoreboard/Scoreboard.js +9 -11
- package/dist/components/hud/Scoreboard/Scoreboard.js.map +1 -1
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.d.ts.map +1 -1
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.js +7 -4
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.js.map +1 -1
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js +1 -8
- package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js.map +1 -1
- package/dist/components/hud/XPBar/XPBar.d.ts.map +1 -1
- package/dist/components/hud/XPBar/XPBar.js +6 -4
- package/dist/components/hud/XPBar/XPBar.js.map +1 -1
- package/dist/components/inventory/DurabilityBar/DurabilityBar.d.ts.map +1 -1
- package/dist/components/inventory/DurabilityBar/DurabilityBar.js +4 -2
- package/dist/components/inventory/DurabilityBar/DurabilityBar.js.map +1 -1
- package/dist/components/inventory/Hotbar/Hotbar.d.ts.map +1 -1
- package/dist/components/inventory/Hotbar/Hotbar.js +4 -2
- package/dist/components/inventory/Hotbar/Hotbar.js.map +1 -1
- package/dist/components/inventory/Inventory/Inventory.d.ts.map +1 -1
- package/dist/components/inventory/Inventory/Inventory.js +4 -2
- package/dist/components/inventory/Inventory/Inventory.js.map +1 -1
- package/dist/components/inventory/InventoryGrid/InventoryGrid.d.ts.map +1 -1
- package/dist/components/inventory/InventoryGrid/InventoryGrid.js +4 -2
- package/dist/components/inventory/InventoryGrid/InventoryGrid.js.map +1 -1
- package/dist/components/inventory/InventorySlot/InventorySlot.d.ts.map +1 -1
- package/dist/components/inventory/InventorySlot/InventorySlot.js +3 -1
- package/dist/components/inventory/InventorySlot/InventorySlot.js.map +1 -1
- package/dist/components/inventory/ItemStack/ItemStack.d.ts.map +1 -1
- package/dist/components/inventory/ItemStack/ItemStack.js +3 -1
- package/dist/components/inventory/ItemStack/ItemStack.js.map +1 -1
- package/dist/components/inventory/ItemStack/ItemStack.utils.d.ts +2 -1
- package/dist/components/inventory/ItemStack/ItemStack.utils.d.ts.map +1 -1
- package/dist/components/inventory/ItemStack/ItemStack.utils.js +6 -2
- package/dist/components/inventory/ItemStack/ItemStack.utils.js.map +1 -1
- package/dist/components/inventory/ItemTooltip/ItemTooltip.d.ts.map +1 -1
- package/dist/components/inventory/ItemTooltip/ItemTooltip.js +3 -1
- package/dist/components/inventory/ItemTooltip/ItemTooltip.js.map +1 -1
- package/dist/components/navigation/BlockPagination/BlockPagination.d.ts.map +1 -1
- package/dist/components/navigation/BlockPagination/BlockPagination.js +9 -12
- package/dist/components/navigation/BlockPagination/BlockPagination.js.map +1 -1
- package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts +1 -1
- package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts.map +1 -1
- package/dist/components/navigation/BlockSidebar/BlockSidebar.d.ts.map +1 -1
- package/dist/components/navigation/BlockSidebar/BlockSidebar.js +4 -2
- package/dist/components/navigation/BlockSidebar/BlockSidebar.js.map +1 -1
- package/dist/components/navigation/BlockSidebar/BlockSidebar.types.d.ts +1 -1
- package/dist/components/navigation/BlockSidebar/BlockSidebar.types.d.ts.map +1 -1
- package/dist/components/navigation/BlockStepper/BlockStepper.d.ts.map +1 -1
- package/dist/components/navigation/BlockStepper/BlockStepper.js +4 -2
- package/dist/components/navigation/BlockStepper/BlockStepper.js.map +1 -1
- package/dist/components/navigation/BlockStepper/BlockStepper.types.d.ts +1 -1
- package/dist/components/navigation/BlockStepper/BlockStepper.types.d.ts.map +1 -1
- package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/navigation/Breadcrumb/Breadcrumb.js +4 -2
- package/dist/components/navigation/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/navigation/Breadcrumb/Breadcrumb.types.d.ts +1 -1
- package/dist/components/navigation/Breadcrumb/Breadcrumb.types.d.ts.map +1 -1
- package/dist/components/navigation/HotbarNavigation/HotbarNavigation.d.ts.map +1 -1
- package/dist/components/navigation/HotbarNavigation/HotbarNavigation.js +4 -2
- package/dist/components/navigation/HotbarNavigation/HotbarNavigation.js.map +1 -1
- package/dist/components/navigation/HotbarNavigation/HotbarNavigation.types.d.ts +1 -1
- package/dist/components/navigation/HotbarNavigation/HotbarNavigation.types.d.ts.map +1 -1
- package/dist/components/social/ChatWindow/ChatWindow.d.ts.map +1 -1
- package/dist/components/social/ChatWindow/ChatWindow.js +10 -7
- package/dist/components/social/ChatWindow/ChatWindow.js.map +1 -1
- package/dist/components/social/ChatWindow/ChatWindow.types.d.ts +2 -2
- package/dist/components/social/ChatWindow/ChatWindow.types.d.ts.map +1 -1
- package/dist/components/social/ChatWindow/ChatWindow.types.js.map +1 -1
- package/dist/components/social/CommandConsole/CommandConsole.d.ts.map +1 -1
- package/dist/components/social/CommandConsole/CommandConsole.js +7 -4
- package/dist/components/social/CommandConsole/CommandConsole.js.map +1 -1
- package/dist/components/social/CommandConsole/CommandConsole.types.d.ts +1 -1
- package/dist/components/social/CommandConsole/CommandConsole.types.d.ts.map +1 -1
- package/dist/components/social/CommandConsole/CommandConsole.types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/locale/index.d.ts +4 -0
- package/dist/locale/index.d.ts.map +1 -0
- package/dist/locale/messages.d.ts +289 -0
- package/dist/locale/messages.d.ts.map +1 -0
- package/dist/locale/messages.js +341 -0
- package/dist/locale/messages.js.map +1 -0
- package/dist/locale/zhTW.d.ts +4 -0
- package/dist/locale/zhTW.d.ts.map +1 -0
- package/dist/locale/zhTW.js +331 -0
- package/dist/locale/zhTW.js.map +1 -0
- package/dist/provider/BlockUIProvider.d.ts.map +1 -1
- package/dist/provider/BlockUIProvider.js +10 -3
- package/dist/provider/BlockUIProvider.js.map +1 -1
- package/dist/provider/BlockUIProvider.types.d.ts +9 -0
- package/dist/provider/BlockUIProvider.types.d.ts.map +1 -1
- package/dist/provider/context.d.ts +3 -0
- package/dist/provider/context.d.ts.map +1 -1
- package/dist/provider/context.js +6 -1
- package/dist/provider/context.js.map +1 -1
- package/dist/provider/index.d.ts +1 -1
- package/dist/provider/index.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/actions/ContextMenu/ContextMenu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/actions/ContextMenu/ContextMenu.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D;;;;GAIG;AACH,eAAO,MAAM,WAAW,6GAkGtB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { useAnchoredPosition } from "../../../hooks/useAnchoredPosition.js";
|
|
3
4
|
import { mergeRefs } from "../../../utils/refs.js";
|
|
4
5
|
import { enabledMenuIndexes } from "../BlockMenu/BlockMenu.utils.js";
|
|
@@ -12,7 +13,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
12
13
|
* pointer, or at the focused element with Shift+F10 / the Menu key; keyboard
|
|
13
14
|
* behaviour matches `BlockMenu` and focus returns to where it was.
|
|
14
15
|
*/
|
|
15
|
-
var ContextMenu = forwardRef(function ContextMenu({ children, items, onSelect, label
|
|
16
|
+
var ContextMenu = forwardRef(function ContextMenu({ children, items, onSelect, label, disabled = false, onOpenChange, className, ...rest }, ref) {
|
|
17
|
+
const m = useBlockUIMessages();
|
|
16
18
|
const menuId = useId();
|
|
17
19
|
const areaRef = useRef(null);
|
|
18
20
|
const menuRef = useRef(null);
|
|
@@ -87,7 +89,7 @@ var ContextMenu = forwardRef(function ContextMenu({ children, items, onSelect, l
|
|
|
87
89
|
focusTarget,
|
|
88
90
|
menuRef,
|
|
89
91
|
position,
|
|
90
|
-
label,
|
|
92
|
+
label: label ?? m.contextMenu.label,
|
|
91
93
|
isInside,
|
|
92
94
|
onClose: close,
|
|
93
95
|
onChoose: choose
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.js","names":["styles"],"sources":["../../../../src/components/actions/ContextMenu/ContextMenu.tsx"],"sourcesContent":["import { forwardRef, useId, useRef, useState, type KeyboardEvent, type MouseEvent } from \"react\";\nimport { useAnchoredPosition } from \"../../../hooks/useAnchoredPosition\";\nimport { cx } from \"../../../utils/cx\";\nimport { mergeRefs } from \"../../../utils/refs\";\nimport type { BlockMenuItem } from \"../BlockMenu/BlockMenu.types\";\nimport { enabledMenuIndexes } from \"../BlockMenu/BlockMenu.utils\";\nimport { MenuList, type MenuFocusTarget } from \"../BlockMenu/MenuList\";\nimport styles from \"./ContextMenu.module.css\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\n\ninterface Point {\n x: number;\n y: number;\n}\n\n/**\n * Right-click menu for an area (an inventory slot, a list row). Opens at the\n * pointer, or at the focused element with Shift+F10 / the Menu key; keyboard\n * behaviour matches `BlockMenu` and focus returns to where it was.\n */\nexport const ContextMenu = forwardRef<HTMLDivElement, ContextMenuProps>(function ContextMenu(\n {
|
|
1
|
+
{"version":3,"file":"ContextMenu.js","names":["styles"],"sources":["../../../../src/components/actions/ContextMenu/ContextMenu.tsx"],"sourcesContent":["import { forwardRef, useId, useRef, useState, type KeyboardEvent, type MouseEvent } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { useAnchoredPosition } from \"../../../hooks/useAnchoredPosition\";\nimport { cx } from \"../../../utils/cx\";\nimport { mergeRefs } from \"../../../utils/refs\";\nimport type { BlockMenuItem } from \"../BlockMenu/BlockMenu.types\";\nimport { enabledMenuIndexes } from \"../BlockMenu/BlockMenu.utils\";\nimport { MenuList, type MenuFocusTarget } from \"../BlockMenu/MenuList\";\nimport styles from \"./ContextMenu.module.css\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\n\ninterface Point {\n x: number;\n y: number;\n}\n\n/**\n * Right-click menu for an area (an inventory slot, a list row). Opens at the\n * pointer, or at the focused element with Shift+F10 / the Menu key; keyboard\n * behaviour matches `BlockMenu` and focus returns to where it was.\n */\nexport const ContextMenu = forwardRef<HTMLDivElement, ContextMenuProps>(function ContextMenu(\n { children, items, onSelect, label, disabled = false, onOpenChange, className, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n const menuId = useId();\n const areaRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const returnTo = useRef<HTMLElement | null>(null);\n const point = useRef<Point>({ x: 0, y: 0 });\n const [open, setOpenState] = useState(false);\n const [focusTarget, setFocusTarget] = useState<MenuFocusTarget | null>(null);\n\n // A zero-size \"element\" at the pointer for the shared positioning hook.\n const virtualAnchor = useRef({\n getBoundingClientRect: () =>\n DOMRect.fromRect({ x: point.current.x, y: point.current.y, width: 0, height: 0 }),\n });\n const position = useAnchoredPosition(virtualAnchor, menuRef, open, {\n side: \"bottom\",\n align: \"start\",\n gap: 2,\n });\n\n const setOpen = (next: boolean) => {\n setOpenState(next);\n onOpenChange?.(next);\n };\n\n const openAt = (x: number, y: number) => {\n if (enabledMenuIndexes(items).length === 0) return;\n returnTo.current =\n document.activeElement instanceof HTMLElement ? document.activeElement : null;\n point.current = { x, y };\n setOpen(true);\n setFocusTarget(\"first\");\n };\n\n const close = (returnFocus: boolean) => {\n setOpen(false);\n setFocusTarget(null);\n if (returnFocus) returnTo.current?.focus();\n };\n\n const choose = (item: BlockMenuItem) => {\n close(true);\n item.onSelect?.();\n onSelect?.(item.id);\n };\n\n const onContextMenu = (event: MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n event.preventDefault();\n // Right-clicking does not move focus; remember the clicked control instead when it is focusable.\n const target = (event.target as HTMLElement).closest<HTMLElement>(\n \"button, a[href], input, [tabindex]\",\n );\n target?.focus({ preventScroll: true });\n openAt(event.clientX, event.clientY);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (event.key === \"ContextMenu\" || (event.key === \"F10\" && event.shiftKey)) {\n event.preventDefault();\n const rect = (event.target as HTMLElement).getBoundingClientRect();\n openAt(rect.left + rect.width / 2, rect.top + rect.height / 2);\n }\n };\n\n const isInside = (node: Node | null) => Boolean(node && menuRef.current?.contains(node));\n\n return (\n // The area only listens for right-clicks and the Menu key bubbling up from the controls inside it.\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={mergeRefs(ref, areaRef)}\n className={cx(styles.area, className)}\n data-open={open || undefined}\n onContextMenu={onContextMenu}\n onKeyDown={onKeyDown}\n {...rest}\n >\n {children}\n <MenuList\n id={menuId}\n items={items}\n open={open}\n focusTarget={focusTarget}\n menuRef={menuRef}\n position={position}\n label={label ?? m.contextMenu.label}\n isInside={isInside}\n onClose={close}\n onChoose={choose}\n />\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,IAAa,cAAc,WAA6C,SAAS,YAC/E,EAAE,UAAU,OAAO,UAAU,OAAO,WAAW,OAAO,cAAc,WAAW,GAAG,QAClF,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,SAAS,MAAM;CACrB,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,WAAW,OAA2B,IAAI;CAChD,MAAM,QAAQ,OAAc;EAAE,GAAG;EAAG,GAAG;CAAE,CAAC;CAC1C,MAAM,CAAC,MAAM,gBAAgB,SAAS,KAAK;CAC3C,MAAM,CAAC,aAAa,kBAAkB,SAAiC,IAAI;CAG3E,MAAM,gBAAgB,OAAO,EAC3B,6BACE,QAAQ,SAAS;EAAE,GAAG,MAAM,QAAQ;EAAG,GAAG,MAAM,QAAQ;EAAG,OAAO;EAAG,QAAQ;CAAE,CAAC,EACpF,CAAC;CACD,MAAM,WAAW,oBAAoB,eAAe,SAAS,MAAM;EACjE,MAAM;EACN,OAAO;EACP,KAAK;CACP,CAAC;CAED,MAAM,WAAW,SAAkB;EACjC,aAAa,IAAI;EACjB,eAAe,IAAI;CACrB;CAEA,MAAM,UAAU,GAAW,MAAc;EACvC,IAAI,mBAAmB,KAAK,CAAC,CAAC,WAAW,GAAG;EAC5C,SAAS,UACP,SAAS,yBAAyB,cAAc,SAAS,gBAAgB;EAC3E,MAAM,UAAU;GAAE;GAAG;EAAE;EACvB,QAAQ,IAAI;EACZ,eAAe,OAAO;CACxB;CAEA,MAAM,SAAS,gBAAyB;EACtC,QAAQ,KAAK;EACb,eAAe,IAAI;EACnB,IAAI,aAAa,SAAS,SAAS,MAAM;CAC3C;CAEA,MAAM,UAAU,SAAwB;EACtC,MAAM,IAAI;EACV,KAAK,WAAW;EAChB,WAAW,KAAK,EAAE;CACpB;CAEA,MAAM,iBAAiB,UAAsC;EAC3D,IAAI,UAAU;EACd,MAAM,eAAe;EAKrB,MAHsB,OAAuB,QAC3C,oCAEF,CAAA,EAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;EACrC,OAAO,MAAM,SAAS,MAAM,OAAO;CACrC;CAEA,MAAM,aAAa,UAAyC;EAC1D,IAAI,UAAU;EACd,IAAI,MAAM,QAAQ,iBAAkB,MAAM,QAAQ,SAAS,MAAM,UAAW;GAC1E,MAAM,eAAe;GACrB,MAAM,OAAQ,MAAM,OAAuB,sBAAsB;GACjE,OAAO,KAAK,OAAO,KAAK,QAAQ,GAAG,KAAK,MAAM,KAAK,SAAS,CAAC;EAC/D;CACF;CAEA,MAAM,YAAY,SAAsB,QAAQ,QAAQ,QAAQ,SAAS,SAAS,IAAI,CAAC;CAEvF,OAGE,qBAAC,OAAD;EACE,KAAK,UAAU,KAAK,OAAO;EAC3B,WAAW,GAAGA,2BAAO,MAAM,SAAS;EACpC,aAAW,QAAQ,KAAA;EACJ;EACJ;EACX,GAAI;EANN,UAAA,CAQG,UACD,oBAAC,UAAD;GACE,IAAI;GACG;GACD;GACO;GACJ;GACC;GACV,OAAO,SAAS,EAAE,YAAY;GACpB;GACV,SAAS;GACT,UAAU;EACX,CAAA,CACE;;AAET,CAAC"}
|
|
@@ -6,7 +6,7 @@ export interface ContextMenuProps extends Omit<HTMLAttributes<HTMLDivElement>, "
|
|
|
6
6
|
items: BlockMenuEntry[];
|
|
7
7
|
/** Called with the item id after any item is chosen. */
|
|
8
8
|
onSelect?: (id: string) => void;
|
|
9
|
-
/** Accessible name of the menu. @default "Context menu" */
|
|
9
|
+
/** Accessible name of the menu. @default messages.contextMenu.label ("Context menu") */
|
|
10
10
|
label?: string;
|
|
11
11
|
/** Keep the browser's own menu. */
|
|
12
12
|
disabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.types.d.ts","sourceRoot":"","sources":["../../../../src/components/actions/ContextMenu/ContextMenu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxF,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,
|
|
1
|
+
{"version":3,"file":"ContextMenu.types.d.ts","sourceRoot":"","sources":["../../../../src/components/actions/ContextMenu/ContextMenu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxF,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AchievementCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/AchievementCard/AchievementCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AchievementCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/AchievementCard/AchievementCard.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,+DAA+D;AAC/D,eAAO,MAAM,eAAe,8GAoD3B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { BlockButton } from "../../actions/BlockButton/BlockButton.js";
|
|
3
4
|
import { BlockCard } from "../BlockCard/BlockCard.js";
|
|
4
5
|
import cards_module_default from "../cards.module.js";
|
|
@@ -7,11 +8,12 @@ import { AchievementIcon, LockIcon } from "@malilion/block-ui-icons";
|
|
|
7
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
9
|
//#region src/components/cards/AchievementCard/AchievementCard.tsx
|
|
9
10
|
/** Achievement tile — dimmed with a padlock until unlocked. */
|
|
10
|
-
var AchievementCard = forwardRef(function AchievementCard({ title, description, icon, unlocked = false, unlockedAt, onView, material = "wood", label
|
|
11
|
+
var AchievementCard = forwardRef(function AchievementCard({ title, description, icon, unlocked = false, unlockedAt, onView, material = "wood", label, className, ...rest }, ref) {
|
|
12
|
+
const m = useBlockUIMessages();
|
|
11
13
|
return /* @__PURE__ */ jsxs(BlockCard, {
|
|
12
14
|
ref,
|
|
13
15
|
material,
|
|
14
|
-
label,
|
|
16
|
+
label: label === void 0 ? m.achievementCard.label : label,
|
|
15
17
|
"data-unlocked": unlocked || void 0,
|
|
16
18
|
className: cx(cards_module_default.card, !unlocked && cards_module_default.locked, className),
|
|
17
19
|
footer: onView ? /* @__PURE__ */ jsx(BlockButton, {
|
|
@@ -19,7 +21,7 @@ var AchievementCard = forwardRef(function AchievementCard({ title, description,
|
|
|
19
21
|
variant: "wood",
|
|
20
22
|
onClick: onView,
|
|
21
23
|
disabled: !unlocked,
|
|
22
|
-
children:
|
|
24
|
+
children: m.achievementCard.view
|
|
23
25
|
}) : void 0,
|
|
24
26
|
...rest,
|
|
25
27
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -40,7 +42,7 @@ var AchievementCard = forwardRef(function AchievementCard({ title, description,
|
|
|
40
42
|
})]
|
|
41
43
|
}), /* @__PURE__ */ jsx("p", {
|
|
42
44
|
className: cards_module_default.meta,
|
|
43
|
-
children: unlocked ? unlockedAt ?
|
|
45
|
+
children: unlocked ? unlockedAt ? m.achievementCard.unlockedOn(unlockedAt) : m.achievementCard.unlocked : m.achievementCard.locked
|
|
44
46
|
})]
|
|
45
47
|
});
|
|
46
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AchievementCard.js","names":["styles"],"sources":["../../../../src/components/cards/AchievementCard/AchievementCard.tsx"],"sourcesContent":["import { AchievementIcon, LockIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport type { AchievementCardProps } from \"./AchievementCard.types\";\n\n/** Achievement tile — dimmed with a padlock until unlocked. */\nexport const AchievementCard = forwardRef<HTMLElement, AchievementCardProps>(\n function AchievementCard(\n {\n title,\n description,\n icon,\n unlocked = false,\n unlockedAt,\n onView,\n material = \"wood\",\n label
|
|
1
|
+
{"version":3,"file":"AchievementCard.js","names":["styles"],"sources":["../../../../src/components/cards/AchievementCard/AchievementCard.tsx"],"sourcesContent":["import { AchievementIcon, LockIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport type { AchievementCardProps } from \"./AchievementCard.types\";\n\n/** Achievement tile — dimmed with a padlock until unlocked. */\nexport const AchievementCard = forwardRef<HTMLElement, AchievementCardProps>(\n function AchievementCard(\n {\n title,\n description,\n icon,\n unlocked = false,\n unlockedAt,\n onView,\n material = \"wood\",\n label,\n className,\n ...rest\n },\n ref,\n ) {\n const m = useBlockUIMessages();\n return (\n <BlockCard\n ref={ref}\n material={material}\n label={label === undefined ? m.achievementCard.label : label}\n data-unlocked={unlocked || undefined}\n className={cx(styles.card, !unlocked && styles.locked, className)}\n footer={\n onView ? (\n <BlockButton size=\"sm\" variant=\"wood\" onClick={onView} disabled={!unlocked}>\n {m.achievementCard.view}\n </BlockButton>\n ) : undefined\n }\n {...rest}\n >\n <div className={styles.headline}>\n <span className={styles.iconBox} aria-hidden=\"true\">\n {unlocked ? (icon ?? <AchievementIcon size={32} />) : <LockIcon size={24} />}\n </span>\n <div className={styles.titleBlock}>\n <p className={styles.title}>{title}</p>\n {description ? <p className={styles.description}>{description}</p> : null}\n </div>\n </div>\n <p className={styles.meta}>\n {unlocked\n ? unlockedAt\n ? m.achievementCard.unlockedOn(unlockedAt)\n : m.achievementCard.unlocked\n : m.achievementCard.locked}\n </p>\n </BlockCard>\n );\n },\n);\n"],"mappings":";;;;;;;;;;AAUA,IAAa,kBAAkB,WAC7B,SAAS,gBACP,EACE,OACA,aACA,MACA,WAAW,OACX,YACA,QACA,WAAW,QACX,OACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,OACE,qBAAC,WAAD;EACO;EACK;EACV,OAAO,UAAU,KAAA,IAAY,EAAE,gBAAgB,QAAQ;EACvD,iBAAe,YAAY,KAAA;EAC3B,WAAW,GAAGA,qBAAO,MAAM,CAAC,YAAYA,qBAAO,QAAQ,SAAS;EAChE,QACE,SACE,oBAAC,aAAD;GAAa,MAAK;GAAK,SAAQ;GAAO,SAAS;GAAQ,UAAU,CAAC;GAC/D,UAAA,EAAE,gBAAgB;EACR,CAAA,IACX,KAAA;EAEN,GAAI;EAbN,UAAA,CAeE,qBAAC,OAAD;GAAK,WAAWA,qBAAO;GAAvB,UAAA,CACE,oBAAC,QAAD;IAAM,WAAWA,qBAAO;IAAS,eAAY;IAC1C,UAAA,WAAY,QAAQ,oBAAC,iBAAD,EAAiB,MAAM,GAAK,CAAA,IAAK,oBAAC,UAAD,EAAU,MAAM,GAAK,CAAA;GACvE,CAAA,GACN,qBAAC,OAAD;IAAK,WAAWA,qBAAO;IAAvB,UAAA,CACE,oBAAC,KAAD;KAAG,WAAWA,qBAAO;KAAQ,UAAA;IAAS,CAAA,GACrC,cAAc,oBAAC,KAAD;KAAG,WAAWA,qBAAO;KAAc,UAAA;IAAe,CAAA,IAAI,IAClE;GACF,CAAA,CAAA;EACL,CAAA,GAAA,oBAAC,KAAD;GAAG,WAAWA,qBAAO;GAClB,UAAA,WACG,aACE,EAAE,gBAAgB,WAAW,UAAU,IACvC,EAAE,gBAAgB,WACpB,EAAE,gBAAgB;EACrB,CAAA,CACM;;AAEf,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/PlayerCard/PlayerCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlayerCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/PlayerCard/PlayerCard.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAU1D,oEAAoE;AACpE,eAAO,MAAM,UAAU,yGAiErB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { BlockButton } from "../../actions/BlockButton/BlockButton.js";
|
|
3
4
|
import { XPBar } from "../../hud/XPBar/XPBar.js";
|
|
4
5
|
import { BlockCard } from "../BlockCard/BlockCard.js";
|
|
@@ -16,17 +17,18 @@ var statusVariant = (status) => {
|
|
|
16
17
|
return "stone";
|
|
17
18
|
};
|
|
18
19
|
/** Player summary: avatar, level, status, XP and optional stats. */
|
|
19
|
-
var PlayerCard = forwardRef(function PlayerCard({ name, avatar, level, status, xp, maxXp, stats, onViewProfile, material = "deepslate", label
|
|
20
|
+
var PlayerCard = forwardRef(function PlayerCard({ name, avatar, level, status, xp, maxXp, stats, onViewProfile, material = "deepslate", label, className, ...rest }, ref) {
|
|
21
|
+
const m = useBlockUIMessages();
|
|
20
22
|
return /* @__PURE__ */ jsxs(BlockCard, {
|
|
21
23
|
ref,
|
|
22
24
|
material,
|
|
23
|
-
label,
|
|
25
|
+
label: label === void 0 ? m.playerCard.label : label,
|
|
24
26
|
className: cx(cards_module_default.card, className),
|
|
25
27
|
footer: onViewProfile ? /* @__PURE__ */ jsx(BlockButton, {
|
|
26
28
|
size: "sm",
|
|
27
29
|
variant: "stone",
|
|
28
30
|
onClick: onViewProfile,
|
|
29
|
-
children:
|
|
31
|
+
children: m.playerCard.profile
|
|
30
32
|
}) : void 0,
|
|
31
33
|
...rest,
|
|
32
34
|
children: [
|
|
@@ -45,9 +47,9 @@ var PlayerCard = forwardRef(function PlayerCard({ name, avatar, level, status, x
|
|
|
45
47
|
className: cards_module_default.title,
|
|
46
48
|
children: name
|
|
47
49
|
}),
|
|
48
|
-
level !== void 0 ? /* @__PURE__ */
|
|
50
|
+
level !== void 0 ? /* @__PURE__ */ jsx("p", {
|
|
49
51
|
className: cards_module_default.description,
|
|
50
|
-
children:
|
|
52
|
+
children: m.playerCard.level(String(level))
|
|
51
53
|
}) : null,
|
|
52
54
|
status ? /* @__PURE__ */ jsx(BlockBadge, {
|
|
53
55
|
size: "sm",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerCard.js","names":["styles"],"sources":["../../../../src/components/cards/PlayerCard/PlayerCard.tsx"],"sourcesContent":["import { PlayerIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockBadge } from \"../../display/BlockBadge/BlockBadge\";\nimport type { BlockBadgeVariant } from \"../../display/BlockBadge/BlockBadge.types\";\nimport { XPBar } from \"../../hud/XPBar/XPBar\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport type { PlayerCardProps } from \"./PlayerCard.types\";\n\nconst statusVariant = (status: string): BlockBadgeVariant => {\n const value = status.toLowerCase();\n if (value === \"online\") return \"emerald\";\n if (value === \"offline\") return \"redstone\";\n if (value === \"afk\" || value === \"away\" || value === \"idle\") return \"gold\";\n return \"stone\";\n};\n\n/** Player summary: avatar, level, status, XP and optional stats. */\nexport const PlayerCard = forwardRef<HTMLElement, PlayerCardProps>(function PlayerCard(\n {\n name,\n avatar,\n level,\n status,\n xp,\n maxXp,\n stats,\n onViewProfile,\n material = \"deepslate\",\n label
|
|
1
|
+
{"version":3,"file":"PlayerCard.js","names":["styles"],"sources":["../../../../src/components/cards/PlayerCard/PlayerCard.tsx"],"sourcesContent":["import { PlayerIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockBadge } from \"../../display/BlockBadge/BlockBadge\";\nimport type { BlockBadgeVariant } from \"../../display/BlockBadge/BlockBadge.types\";\nimport { XPBar } from \"../../hud/XPBar/XPBar\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport type { PlayerCardProps } from \"./PlayerCard.types\";\n\nconst statusVariant = (status: string): BlockBadgeVariant => {\n const value = status.toLowerCase();\n if (value === \"online\") return \"emerald\";\n if (value === \"offline\") return \"redstone\";\n if (value === \"afk\" || value === \"away\" || value === \"idle\") return \"gold\";\n return \"stone\";\n};\n\n/** Player summary: avatar, level, status, XP and optional stats. */\nexport const PlayerCard = forwardRef<HTMLElement, PlayerCardProps>(function PlayerCard(\n {\n name,\n avatar,\n level,\n status,\n xp,\n maxXp,\n stats,\n onViewProfile,\n material = \"deepslate\",\n label,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n return (\n <BlockCard\n ref={ref}\n material={material}\n label={label === undefined ? m.playerCard.label : label}\n className={cx(styles.card, className)}\n footer={\n onViewProfile ? (\n <BlockButton size=\"sm\" variant=\"stone\" onClick={onViewProfile}>\n {m.playerCard.profile}\n </BlockButton>\n ) : undefined\n }\n {...rest}\n >\n <div className={styles.headline}>\n <span className={styles.iconBox}>\n {avatar ? <img src={avatar} alt=\"\" /> : <PlayerIcon size={32} />}\n </span>\n <div className={styles.titleBlock}>\n <p className={styles.title}>{name}</p>\n {level !== undefined ? (\n <p className={styles.description}>{m.playerCard.level(String(level))}</p>\n ) : null}\n {status ? (\n <BlockBadge size=\"sm\" dot variant={statusVariant(status)}>\n {status}\n </BlockBadge>\n ) : null}\n </div>\n </div>\n {xp !== undefined && maxXp !== undefined ? <XPBar value={xp} max={maxXp} showValue /> : null}\n {stats && stats.length > 0 ? (\n <dl className={styles.stats}>\n {stats.map((stat) => (\n <div key={stat.label} className={styles.statRow}>\n <dt>\n {stat.icon ? <span aria-hidden=\"true\">{stat.icon}</span> : null}\n {stat.label}\n </dt>\n <dd>{stat.value}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </BlockCard>\n );\n});\n"],"mappings":";;;;;;;;;;;AAYA,IAAM,iBAAiB,WAAsC;CAC3D,MAAM,QAAQ,OAAO,YAAY;CACjC,IAAI,UAAU,UAAU,OAAO;CAC/B,IAAI,UAAU,WAAW,OAAO;CAChC,IAAI,UAAU,SAAS,UAAU,UAAU,UAAU,QAAQ,OAAO;CACpE,OAAO;AACT;;AAGA,IAAa,aAAa,WAAyC,SAAS,WAC1E,EACE,MACA,QACA,OACA,QACA,IACA,OACA,OACA,eACA,WAAW,aACX,OACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,OACE,qBAAC,WAAD;EACO;EACK;EACV,OAAO,UAAU,KAAA,IAAY,EAAE,WAAW,QAAQ;EAClD,WAAW,GAAGA,qBAAO,MAAM,SAAS;EACpC,QACE,gBACE,oBAAC,aAAD;GAAa,MAAK;GAAK,SAAQ;GAAQ,SAAS;GAC7C,UAAA,EAAE,WAAW;EACH,CAAA,IACX,KAAA;EAEN,GAAI;EAZN,UAAA;GAcE,qBAAC,OAAD;IAAK,WAAWA,qBAAO;IAAvB,UAAA,CACE,oBAAC,QAAD;KAAM,WAAWA,qBAAO;KACrB,UAAA,SAAS,oBAAC,OAAD;MAAK,KAAK;MAAQ,KAAI;KAAI,CAAA,IAAI,oBAAC,YAAD,EAAY,MAAM,GAAK,CAAA;IAC3D,CAAA,GACN,qBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAvB,UAAA;MACE,oBAAC,KAAD;OAAG,WAAWA,qBAAO;OAAQ,UAAA;MAAQ,CAAA;MACpC,UAAU,KAAA,IACT,oBAAC,KAAD;OAAG,WAAWA,qBAAO;OAAc,UAAA,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;MAAK,CAAA,IACtE;MACH,SACC,oBAAC,YAAD;OAAY,MAAK;OAAK,KAAA;OAAI,SAAS,cAAc,MAAM;OACpD,UAAA;MACS,CAAA,IACV;KACD;IACF,CAAA,CAAA;;GACJ,OAAO,KAAA,KAAa,UAAU,KAAA,IAAY,oBAAC,OAAD;IAAO,OAAO;IAAI,KAAK;IAAO,WAAA;GAAW,CAAA,IAAI;GACvF,SAAS,MAAM,SAAS,IACvB,oBAAC,MAAD;IAAI,WAAWA,qBAAO;IACnB,UAAA,MAAM,KAAK,SACV,qBAAC,OAAD;KAAsB,WAAWA,qBAAO;KAAxC,UAAA,CACE,qBAAC,MAAD,EAAA,UAAA,CACG,KAAK,OAAO,oBAAC,QAAD;MAAM,eAAY;MAAQ,UAAA,KAAK;KAAW,CAAA,IAAI,MAC1D,KAAK,KACJ,EAAA,CAAA,GACJ,oBAAC,MAAD,EAAA,UAAK,KAAK,MAAU,CAAA,CACjB;IANK,GAAA,KAAK,KAMV,CACN;GACC,CAAA,IACF;EACK;;AAEf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/QuestCard/QuestCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QuestCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/QuestCard/QuestCard.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,iEAAiE;AACjE,eAAO,MAAM,SAAS,wGAuFpB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { BlockButton } from "../../actions/BlockButton/BlockButton.js";
|
|
3
4
|
import { formatNumber } from "../../../utils/number.js";
|
|
4
5
|
import { BlockCard } from "../BlockCard/BlockCard.js";
|
|
@@ -9,13 +10,14 @@ import { CheckIcon, CoinIcon, QuestIcon, XPOrbIcon } from "@malilion/block-ui-ic
|
|
|
9
10
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
11
|
//#region src/components/cards/QuestCard/QuestCard.tsx
|
|
11
12
|
/** Quest with progress, XP / coin rewards and a Claim action. */
|
|
12
|
-
var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0, max = 1, xp, coins, completed, claimed = false, onClaim, icon, material = "grass", label
|
|
13
|
+
var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0, max = 1, xp, coins, completed, claimed = false, onClaim, icon, material = "grass", label, className, ...rest }, ref) {
|
|
14
|
+
const m = useBlockUIMessages();
|
|
13
15
|
const done = completed ?? progress >= max;
|
|
14
16
|
const current = Math.min(progress, max);
|
|
15
17
|
return /* @__PURE__ */ jsxs(BlockCard, {
|
|
16
18
|
ref,
|
|
17
19
|
material,
|
|
18
|
-
label,
|
|
20
|
+
label: label === void 0 ? m.questCard.label : label,
|
|
19
21
|
"data-completed": done || void 0,
|
|
20
22
|
className: cx(cards_module_default.card, className),
|
|
21
23
|
footer: onClaim ? /* @__PURE__ */ jsx(BlockButton, {
|
|
@@ -24,7 +26,7 @@ var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0
|
|
|
24
26
|
disabled: !done || claimed,
|
|
25
27
|
onClick: onClaim,
|
|
26
28
|
startIcon: claimed ? /* @__PURE__ */ jsx(CheckIcon, { size: 16 }) : void 0,
|
|
27
|
-
children: claimed ?
|
|
29
|
+
children: claimed ? m.questCard.claimed : done ? m.questCard.claim : m.questCard.inProgress
|
|
28
30
|
}) : void 0,
|
|
29
31
|
...rest,
|
|
30
32
|
children: [
|
|
@@ -46,7 +48,7 @@ var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0
|
|
|
46
48
|
})]
|
|
47
49
|
}),
|
|
48
50
|
/* @__PURE__ */ jsx(BlockProgress, {
|
|
49
|
-
label:
|
|
51
|
+
label: m.common.progress,
|
|
50
52
|
value: current,
|
|
51
53
|
max,
|
|
52
54
|
variant: done ? "gold" : "grass",
|
|
@@ -57,7 +59,7 @@ var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0
|
|
|
57
59
|
className: cards_module_default.rewards,
|
|
58
60
|
children: [/* @__PURE__ */ jsx("span", {
|
|
59
61
|
className: cards_module_default.rewardsLabel,
|
|
60
|
-
children:
|
|
62
|
+
children: m.questCard.reward
|
|
61
63
|
}), /* @__PURE__ */ jsxs("ul", {
|
|
62
64
|
className: cards_module_default.rewardList,
|
|
63
65
|
children: [xp !== void 0 ? /* @__PURE__ */ jsxs("li", {
|
|
@@ -70,7 +72,7 @@ var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0
|
|
|
70
72
|
" ",
|
|
71
73
|
/* @__PURE__ */ jsx("span", {
|
|
72
74
|
className: cards_module_default.unit,
|
|
73
|
-
children:
|
|
75
|
+
children: m.questCard.xp
|
|
74
76
|
})
|
|
75
77
|
] })]
|
|
76
78
|
}) : null, coins !== void 0 ? /* @__PURE__ */ jsxs("li", {
|
|
@@ -83,7 +85,7 @@ var QuestCard = forwardRef(function QuestCard({ title, description, progress = 0
|
|
|
83
85
|
" ",
|
|
84
86
|
/* @__PURE__ */ jsx("span", {
|
|
85
87
|
className: cards_module_default.unit,
|
|
86
|
-
children:
|
|
88
|
+
children: m.questCard.coins
|
|
87
89
|
})
|
|
88
90
|
] })]
|
|
89
91
|
}) : null]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestCard.js","names":["styles"],"sources":["../../../../src/components/cards/QuestCard/QuestCard.tsx"],"sourcesContent":["import { CheckIcon, CoinIcon, QuestIcon, XPOrbIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { formatNumber } from \"../../../utils/number\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockProgress } from \"../../feedback/Progress/BlockProgress\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport type { QuestCardProps } from \"./QuestCard.types\";\n\n/** Quest with progress, XP / coin rewards and a Claim action. */\nexport const QuestCard = forwardRef<HTMLElement, QuestCardProps>(function QuestCard(\n {\n title,\n description,\n progress = 0,\n max = 1,\n xp,\n coins,\n completed,\n claimed = false,\n onClaim,\n icon,\n material = \"grass\",\n label
|
|
1
|
+
{"version":3,"file":"QuestCard.js","names":["styles"],"sources":["../../../../src/components/cards/QuestCard/QuestCard.tsx"],"sourcesContent":["import { CheckIcon, CoinIcon, QuestIcon, XPOrbIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { formatNumber } from \"../../../utils/number\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockProgress } from \"../../feedback/Progress/BlockProgress\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport type { QuestCardProps } from \"./QuestCard.types\";\n\n/** Quest with progress, XP / coin rewards and a Claim action. */\nexport const QuestCard = forwardRef<HTMLElement, QuestCardProps>(function QuestCard(\n {\n title,\n description,\n progress = 0,\n max = 1,\n xp,\n coins,\n completed,\n claimed = false,\n onClaim,\n icon,\n material = \"grass\",\n label,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const done = completed ?? progress >= max;\n const current = Math.min(progress, max);\n\n return (\n <BlockCard\n ref={ref}\n material={material}\n label={label === undefined ? m.questCard.label : label}\n data-completed={done || undefined}\n className={cx(styles.card, className)}\n footer={\n onClaim ? (\n <BlockButton\n variant={done && !claimed ? \"gold\" : \"stone\"}\n size=\"sm\"\n disabled={!done || claimed}\n onClick={onClaim}\n startIcon={claimed ? <CheckIcon size={16} /> : undefined}\n >\n {claimed ? m.questCard.claimed : done ? m.questCard.claim : m.questCard.inProgress}\n </BlockButton>\n ) : undefined\n }\n {...rest}\n >\n <div className={styles.headline}>\n <span className={styles.iconBox} aria-hidden=\"true\">\n {icon ?? <QuestIcon size={32} />}\n </span>\n <div className={styles.titleBlock}>\n <p className={styles.title}>{title}</p>\n {description ? <p className={styles.description}>{description}</p> : null}\n </div>\n </div>\n <BlockProgress\n label={m.common.progress}\n value={current}\n max={max}\n variant={done ? \"gold\" : \"grass\"}\n showValue\n formatValue={(value, total) => `${formatNumber(value)} / ${formatNumber(total)}`}\n />\n {xp !== undefined || coins !== undefined ? (\n <div className={styles.rewards}>\n <span className={styles.rewardsLabel}>{m.questCard.reward}</span>\n <ul className={styles.rewardList}>\n {xp !== undefined ? (\n <li className={styles.reward}>\n <XPOrbIcon size={16} aria-hidden=\"true\" />\n <span>\n {formatNumber(xp)} <span className={styles.unit}>{m.questCard.xp}</span>\n </span>\n </li>\n ) : null}\n {coins !== undefined ? (\n <li className={styles.reward}>\n <CoinIcon size={16} aria-hidden=\"true\" />\n <span>\n {formatNumber(coins)} <span className={styles.unit}>{m.questCard.coins}</span>\n </span>\n </li>\n ) : null}\n </ul>\n </div>\n ) : null}\n </BlockCard>\n );\n});\n"],"mappings":";;;;;;;;;;;;AAYA,IAAa,YAAY,WAAwC,SAAS,UACxE,EACE,OACA,aACA,WAAW,GACX,MAAM,GACN,IACA,OACA,WACA,UAAU,OACV,SACA,MACA,WAAW,SACX,OACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,OAAO,aAAa,YAAY;CACtC,MAAM,UAAU,KAAK,IAAI,UAAU,GAAG;CAEtC,OACE,qBAAC,WAAD;EACO;EACK;EACV,OAAO,UAAU,KAAA,IAAY,EAAE,UAAU,QAAQ;EACjD,kBAAgB,QAAQ,KAAA;EACxB,WAAW,GAAGA,qBAAO,MAAM,SAAS;EACpC,QACE,UACE,oBAAC,aAAD;GACE,SAAS,QAAQ,CAAC,UAAU,SAAS;GACrC,MAAK;GACL,UAAU,CAAC,QAAQ;GACnB,SAAS;GACT,WAAW,UAAU,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA,IAAI,KAAA;GAE9C,UAAA,UAAU,EAAE,UAAU,UAAU,OAAO,EAAE,UAAU,QAAQ,EAAE,UAAU;EAC7D,CAAA,IACX,KAAA;EAEN,GAAI;EAnBN,UAAA;GAqBE,qBAAC,OAAD;IAAK,WAAWA,qBAAO;IAAvB,UAAA,CACE,oBAAC,QAAD;KAAM,WAAWA,qBAAO;KAAS,eAAY;KAC1C,UAAA,QAAQ,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;IAC3B,CAAA,GACN,qBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAvB,UAAA,CACE,oBAAC,KAAD;MAAG,WAAWA,qBAAO;MAAQ,UAAA;KAAS,CAAA,GACrC,cAAc,oBAAC,KAAD;MAAG,WAAWA,qBAAO;MAAc,UAAA;KAAe,CAAA,IAAI,IAClE;IACF,CAAA,CAAA;;GACL,oBAAC,eAAD;IACE,OAAO,EAAE,OAAO;IAChB,OAAO;IACF;IACL,SAAS,OAAO,SAAS;IACzB,WAAA;IACA,cAAc,OAAO,UAAU,GAAG,aAAa,KAAK,EAAE,KAAK,aAAa,KAAK;GAC9E,CAAA;GACA,OAAO,KAAA,KAAa,UAAU,KAAA,IAC7B,qBAAC,OAAD;IAAK,WAAWA,qBAAO;IAAvB,UAAA,CACE,oBAAC,QAAD;KAAM,WAAWA,qBAAO;KAAe,UAAA,EAAE,UAAU;IAAa,CAAA,GAChE,qBAAC,MAAD;KAAI,WAAWA,qBAAO;KAAtB,UAAA,CACG,OAAO,KAAA,IACN,qBAAC,MAAD;MAAI,WAAWA,qBAAO;MAAtB,UAAA,CACE,oBAAC,WAAD;OAAW,MAAM;OAAI,eAAY;MAAQ,CAAA,GACzC,qBAAC,QAAD,EAAA,UAAA;OACG,aAAa,EAAE;OAAE;OAAC,oBAAC,QAAD;QAAM,WAAWA,qBAAO;QAAO,UAAA,EAAE,UAAU;OAAS,CAAA;MACnE,EAAA,CAAA,CACJ;KACF,CAAA,IAAA,MACH,UAAU,KAAA,IACT,qBAAC,MAAD;MAAI,WAAWA,qBAAO;MAAtB,UAAA,CACE,oBAAC,UAAD;OAAU,MAAM;OAAI,eAAY;MAAQ,CAAA,GACxC,qBAAC,QAAD,EAAA,UAAA;OACG,aAAa,KAAK;OAAE;OAAC,oBAAC,QAAD;QAAM,WAAWA,qBAAO;QAAO,UAAA,EAAE,UAAU;OAAY,CAAA;MACzE,EAAA,CAAA,CACJ;KACF,CAAA,IAAA,IACF;IACD,CAAA,CAAA;GACH,CAAA,IAAA;EACK;;AAEf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerBrowser.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/ServerBrowser/ServerBrowser.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ServerBrowser.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/ServerBrowser/ServerBrowser.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAc,MAAM,uBAAuB,CAAC;AAG5E;;;GAGG;AACH,eAAO,MAAM,aAAa,+GAqFxB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { BlockButton } from "../../actions/BlockButton/BlockButton.js";
|
|
3
4
|
import { BlockInput } from "../../forms/BlockInput/BlockInput.js";
|
|
4
5
|
import { BlockSelect } from "../../forms/BlockSelect/BlockSelect.js";
|
|
@@ -10,25 +11,26 @@ import { forwardRef, useState } from "react";
|
|
|
10
11
|
import { PlusIcon, SearchIcon } from "@malilion/block-ui-icons";
|
|
11
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
13
|
//#region src/components/cards/ServerBrowser/ServerBrowser.tsx
|
|
13
|
-
var SORT_OPTIONS = [
|
|
14
|
-
{
|
|
15
|
-
value: "players",
|
|
16
|
-
label: "Most players"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
value: "ping",
|
|
20
|
-
label: "Lowest ping"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
value: "name",
|
|
24
|
-
label: "Name"
|
|
25
|
-
}
|
|
26
|
-
];
|
|
27
14
|
/**
|
|
28
15
|
* Multiplayer server list: search, sort and an "online only" switch over
|
|
29
16
|
* `ServerCard`s, with optional Refresh and Add server actions.
|
|
30
17
|
*/
|
|
31
|
-
var ServerBrowser = forwardRef(function ServerBrowser({ servers, onJoin, onRefresh, onAddServer, defaultSort = "players", emptyText
|
|
18
|
+
var ServerBrowser = forwardRef(function ServerBrowser({ servers, onJoin, onRefresh, onAddServer, defaultSort = "players", emptyText, label, className, ...rest }, ref) {
|
|
19
|
+
const m = useBlockUIMessages();
|
|
20
|
+
const sortOptions = [
|
|
21
|
+
{
|
|
22
|
+
value: "players",
|
|
23
|
+
label: m.serverBrowser.mostPlayers
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
value: "ping",
|
|
27
|
+
label: m.serverBrowser.lowestPing
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
value: "name",
|
|
31
|
+
label: m.common.name
|
|
32
|
+
}
|
|
33
|
+
];
|
|
32
34
|
const [query, setQuery] = useState("");
|
|
33
35
|
const [onlineOnly, setOnlineOnly] = useState(false);
|
|
34
36
|
const [sort, setSort] = useState(defaultSort);
|
|
@@ -40,7 +42,7 @@ var ServerBrowser = forwardRef(function ServerBrowser({ servers, onJoin, onRefre
|
|
|
40
42
|
return /* @__PURE__ */ jsxs("div", {
|
|
41
43
|
ref,
|
|
42
44
|
role: "region",
|
|
43
|
-
"aria-label": label,
|
|
45
|
+
"aria-label": label ?? m.serverBrowser.label,
|
|
44
46
|
className: cx(browser_module_default.browser, className),
|
|
45
47
|
...rest,
|
|
46
48
|
children: [
|
|
@@ -49,21 +51,21 @@ var ServerBrowser = forwardRef(function ServerBrowser({ servers, onJoin, onRefre
|
|
|
49
51
|
children: [
|
|
50
52
|
/* @__PURE__ */ jsx(BlockInput, {
|
|
51
53
|
type: "search",
|
|
52
|
-
label:
|
|
54
|
+
label: m.serverBrowser.search,
|
|
53
55
|
value: query,
|
|
54
56
|
onChange: (event) => setQuery(event.target.value),
|
|
55
57
|
startIcon: /* @__PURE__ */ jsx(SearchIcon, { size: 16 }),
|
|
56
58
|
wrapperClassName: browser_module_default.search
|
|
57
59
|
}),
|
|
58
60
|
/* @__PURE__ */ jsx(BlockSelect, {
|
|
59
|
-
label:
|
|
61
|
+
label: m.common.sortBy,
|
|
60
62
|
value: sort,
|
|
61
63
|
onChange: (event) => setSort(event.target.value),
|
|
62
|
-
options:
|
|
64
|
+
options: sortOptions,
|
|
63
65
|
wrapperClassName: browser_module_default.filter
|
|
64
66
|
}),
|
|
65
67
|
/* @__PURE__ */ jsx(BlockToggle, {
|
|
66
|
-
label:
|
|
68
|
+
label: m.serverBrowser.onlineOnly,
|
|
67
69
|
checked: onlineOnly,
|
|
68
70
|
onCheckedChange: setOnlineOnly
|
|
69
71
|
}),
|
|
@@ -71,12 +73,12 @@ var ServerBrowser = forwardRef(function ServerBrowser({ servers, onJoin, onRefre
|
|
|
71
73
|
className: browser_module_default.actions,
|
|
72
74
|
children: [onRefresh ? /* @__PURE__ */ jsx(BlockButton, {
|
|
73
75
|
onClick: onRefresh,
|
|
74
|
-
children:
|
|
76
|
+
children: m.serverBrowser.refresh
|
|
75
77
|
}) : null, onAddServer ? /* @__PURE__ */ jsx(BlockButton, {
|
|
76
78
|
variant: "grass",
|
|
77
79
|
startIcon: /* @__PURE__ */ jsx(PlusIcon, { size: 16 }),
|
|
78
80
|
onClick: onAddServer,
|
|
79
|
-
children:
|
|
81
|
+
children: m.serverBrowser.addServer
|
|
80
82
|
}) : null]
|
|
81
83
|
}) : null
|
|
82
84
|
]
|
|
@@ -84,18 +86,18 @@ var ServerBrowser = forwardRef(function ServerBrowser({ servers, onJoin, onRefre
|
|
|
84
86
|
/* @__PURE__ */ jsx("p", {
|
|
85
87
|
className: browser_module_default.count,
|
|
86
88
|
role: "status",
|
|
87
|
-
children:
|
|
89
|
+
children: m.serverBrowser.count(visible.length)
|
|
88
90
|
}),
|
|
89
91
|
visible.length > 0 ? /* @__PURE__ */ jsx("ul", {
|
|
90
92
|
className: browser_module_default.list,
|
|
91
|
-
"aria-label":
|
|
93
|
+
"aria-label": m.serverBrowser.servers,
|
|
92
94
|
children: visible.map(({ id, ...server }) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(ServerCard, {
|
|
93
95
|
...server,
|
|
94
96
|
onJoin: onJoin ? () => onJoin(id) : void 0
|
|
95
97
|
}) }, id))
|
|
96
98
|
}) : /* @__PURE__ */ jsx("p", {
|
|
97
99
|
className: browser_module_default.empty,
|
|
98
|
-
children: emptyText
|
|
100
|
+
children: emptyText === void 0 ? m.serverBrowser.empty : emptyText
|
|
99
101
|
})
|
|
100
102
|
]
|
|
101
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerBrowser.js","names":["styles"],"sources":["../../../../src/components/cards/ServerBrowser/ServerBrowser.tsx"],"sourcesContent":["import { PlusIcon, SearchIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useState } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockInput } from \"../../forms/BlockInput/BlockInput\";\nimport { BlockSelect } from \"../../forms/BlockSelect/BlockSelect\";\nimport { BlockToggle } from \"../../forms/BlockToggle/BlockToggle\";\nimport styles from \"../browser.module.css\";\nimport { ServerCard } from \"../ServerCard/ServerCard\";\nimport type { ServerBrowserProps, ServerSort } from \"./ServerBrowser.types\";\nimport { browseServers } from \"./ServerBrowser.utils\";\n\
|
|
1
|
+
{"version":3,"file":"ServerBrowser.js","names":["styles"],"sources":["../../../../src/components/cards/ServerBrowser/ServerBrowser.tsx"],"sourcesContent":["import { PlusIcon, SearchIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useState } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockInput } from \"../../forms/BlockInput/BlockInput\";\nimport { BlockSelect } from \"../../forms/BlockSelect/BlockSelect\";\nimport { BlockToggle } from \"../../forms/BlockToggle/BlockToggle\";\nimport styles from \"../browser.module.css\";\nimport { ServerCard } from \"../ServerCard/ServerCard\";\nimport type { ServerBrowserProps, ServerSort } from \"./ServerBrowser.types\";\nimport { browseServers } from \"./ServerBrowser.utils\";\n\n/**\n * Multiplayer server list: search, sort and an \"online only\" switch over\n * `ServerCard`s, with optional Refresh and Add server actions.\n */\nexport const ServerBrowser = forwardRef<HTMLDivElement, ServerBrowserProps>(function ServerBrowser(\n {\n servers,\n onJoin,\n onRefresh,\n onAddServer,\n defaultSort = \"players\",\n emptyText,\n label,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const sortOptions = [\n { value: \"players\", label: m.serverBrowser.mostPlayers },\n { value: \"ping\", label: m.serverBrowser.lowestPing },\n { value: \"name\", label: m.common.name },\n ];\n const [query, setQuery] = useState(\"\");\n const [onlineOnly, setOnlineOnly] = useState(false);\n const [sort, setSort] = useState<ServerSort>(defaultSort);\n const visible = browseServers(servers, { query, onlineOnly, sort });\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={label ?? m.serverBrowser.label}\n className={cx(styles.browser, className)}\n {...rest}\n >\n <div className={styles.toolbar}>\n <BlockInput\n type=\"search\"\n label={m.serverBrowser.search}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n startIcon={<SearchIcon size={16} />}\n wrapperClassName={styles.search}\n />\n <BlockSelect\n label={m.common.sortBy}\n value={sort}\n onChange={(event) => setSort(event.target.value as ServerSort)}\n options={sortOptions}\n wrapperClassName={styles.filter}\n />\n <BlockToggle\n label={m.serverBrowser.onlineOnly}\n checked={onlineOnly}\n onCheckedChange={setOnlineOnly}\n />\n {onRefresh || onAddServer ? (\n <div className={styles.actions}>\n {onRefresh ? (\n <BlockButton onClick={onRefresh}>{m.serverBrowser.refresh}</BlockButton>\n ) : null}\n {onAddServer ? (\n <BlockButton variant=\"grass\" startIcon={<PlusIcon size={16} />} onClick={onAddServer}>\n {m.serverBrowser.addServer}\n </BlockButton>\n ) : null}\n </div>\n ) : null}\n </div>\n <p className={styles.count} role=\"status\">\n {m.serverBrowser.count(visible.length)}\n </p>\n {visible.length > 0 ? (\n <ul className={styles.list} aria-label={m.serverBrowser.servers}>\n {visible.map(({ id, ...server }) => (\n <li key={id}>\n <ServerCard {...server} onJoin={onJoin ? () => onJoin(id) : undefined} />\n </li>\n ))}\n </ul>\n ) : (\n <p className={styles.empty}>\n {emptyText === undefined ? m.serverBrowser.empty : emptyText}\n </p>\n )}\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,IAAa,gBAAgB,WAA+C,SAAS,cACnF,EACE,SACA,QACA,WACA,aACA,cAAc,WACd,WACA,OACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,cAAc;EAClB;GAAE,OAAO;GAAW,OAAO,EAAE,cAAc;EAAY;EACvD;GAAE,OAAO;GAAQ,OAAO,EAAE,cAAc;EAAW;EACnD;GAAE,OAAO;GAAQ,OAAO,EAAE,OAAO;EAAK;CACxC;CACA,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CACrC,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,CAAC,MAAM,WAAW,SAAqB,WAAW;CACxD,MAAM,UAAU,cAAc,SAAS;EAAE;EAAO;EAAY;CAAK,CAAC;CAElE,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAY,SAAS,EAAE,cAAc;EACrC,WAAW,GAAGA,uBAAO,SAAS,SAAS;EACvC,GAAI;EALN,UAAA;GAOE,qBAAC,OAAD;IAAK,WAAWA,uBAAO;IAAvB,UAAA;KACE,oBAAC,YAAD;MACE,MAAK;MACL,OAAO,EAAE,cAAc;MACvB,OAAO;MACP,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;MAChD,WAAW,oBAAC,YAAD,EAAY,MAAM,GAAK,CAAA;MAClC,kBAAkBA,uBAAO;KAC1B,CAAA;KACD,oBAAC,aAAD;MACE,OAAO,EAAE,OAAO;MAChB,OAAO;MACP,WAAW,UAAU,QAAQ,MAAM,OAAO,KAAmB;MAC7D,SAAS;MACT,kBAAkBA,uBAAO;KAC1B,CAAA;KACD,oBAAC,aAAD;MACE,OAAO,EAAE,cAAc;MACvB,SAAS;MACT,iBAAiB;KAClB,CAAA;KACA,aAAa,cACZ,qBAAC,OAAD;MAAK,WAAWA,uBAAO;MAAvB,UAAA,CACG,YACC,oBAAC,aAAD;OAAa,SAAS;OAAY,UAAA,EAAE,cAAc;MAAqB,CAAA,IACrE,MACH,cACC,oBAAC,aAAD;OAAa,SAAQ;OAAQ,WAAW,oBAAC,UAAD,EAAU,MAAM,GAAK,CAAA;OAAG,SAAS;OACtE,UAAA,EAAE,cAAc;MACN,CAAA,IACX,IACD;KACH,CAAA,IAAA;IACD;;GACL,oBAAC,KAAD;IAAG,WAAWA,uBAAO;IAAO,MAAK;IAC9B,UAAA,EAAE,cAAc,MAAM,QAAQ,MAAM;GACpC,CAAA;GACF,QAAQ,SAAS,IAChB,oBAAC,MAAD;IAAI,WAAWA,uBAAO;IAAM,cAAY,EAAE,cAAc;IACrD,UAAA,QAAQ,KAAK,EAAE,IAAI,GAAG,aACrB,oBAAC,MAAD,EAAA,UACE,oBAAC,YAAD;KAAY,GAAI;KAAQ,QAAQ,eAAe,OAAO,EAAE,IAAI,KAAA;IAAY,CAAA,EACtE,GAFK,EAEL,CACL;GACC,CAAA,IAEJ,oBAAC,KAAD;IAAG,WAAWA,uBAAO;IAClB,UAAA,cAAc,KAAA,IAAY,EAAE,cAAc,QAAQ;GAClD,CAAA;EAEF;;AAET,CAAC"}
|
|
@@ -14,9 +14,9 @@ export interface ServerBrowserProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
14
14
|
onAddServer?: () => void;
|
|
15
15
|
/** Initial sort. @default "players" */
|
|
16
16
|
defaultSort?: ServerSort;
|
|
17
|
-
/** Shown when no server matches. @default "No servers found" */
|
|
17
|
+
/** Shown when no server matches. @default messages.serverBrowser.empty ("No servers found") */
|
|
18
18
|
emptyText?: ReactNode;
|
|
19
|
-
/** Accessible name. @default "Server browser" */
|
|
19
|
+
/** Accessible name. @default messages.serverBrowser.label ("Server browser") */
|
|
20
20
|
label?: string;
|
|
21
21
|
}
|
|
22
22
|
//# sourceMappingURL=ServerBrowser.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerBrowser.types.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/ServerBrowser/ServerBrowser.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzE,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,uCAAuC;IACvC,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB
|
|
1
|
+
{"version":3,"file":"ServerBrowser.types.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/ServerBrowser/ServerBrowser.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzE,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,kBAAmB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACxE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,uCAAuC;IACvC,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/ServerCard/ServerCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ServerCard.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/ServerCard/ServerCard.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKvE,4EAA4E;AAC5E,eAAO,MAAM,UAAU,yGAyFrB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { BlockButton } from "../../actions/BlockButton/BlockButton.js";
|
|
3
4
|
import { formatNumber } from "../../../utils/number.js";
|
|
4
5
|
import { BlockCard } from "../BlockCard/BlockCard.js";
|
|
@@ -16,13 +17,14 @@ var BARS = {
|
|
|
16
17
|
offline: 0
|
|
17
18
|
};
|
|
18
19
|
/** Server entry with player count, version, ping bars and a Join action. */
|
|
19
|
-
var ServerCard = forwardRef(function ServerCard({ name, onlinePlayers, maxPlayers, version, ping, online = true, motd, icon, onJoin, material = "stone", label
|
|
20
|
+
var ServerCard = forwardRef(function ServerCard({ name, onlinePlayers, maxPlayers, version, ping, online = true, motd, icon, onJoin, material = "stone", label, className, ...rest }, ref) {
|
|
21
|
+
const m = useBlockUIMessages();
|
|
20
22
|
const quality = pingQuality(ping, online);
|
|
21
|
-
const pingText = online && ping !== void 0 ?
|
|
23
|
+
const pingText = online && ping !== void 0 ? m.serverCard.pingValue(String(ping)) : m.serverCard.offline;
|
|
22
24
|
return /* @__PURE__ */ jsxs(BlockCard, {
|
|
23
25
|
ref,
|
|
24
26
|
material,
|
|
25
|
-
label,
|
|
27
|
+
label: label === void 0 ? m.serverCard.label : label,
|
|
26
28
|
"data-online": online || void 0,
|
|
27
29
|
className: cx(cards_module_default.card, className),
|
|
28
30
|
footer: onJoin ? /* @__PURE__ */ jsx(BlockButton, {
|
|
@@ -30,7 +32,7 @@ var ServerCard = forwardRef(function ServerCard({ name, onlinePlayers, maxPlayer
|
|
|
30
32
|
variant: online ? "grass" : "stone",
|
|
31
33
|
disabled: !online,
|
|
32
34
|
onClick: onJoin,
|
|
33
|
-
children:
|
|
35
|
+
children: m.serverCard.join
|
|
34
36
|
}) : void 0,
|
|
35
37
|
...rest,
|
|
36
38
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -53,7 +55,7 @@ var ServerCard = forwardRef(function ServerCard({ name, onlinePlayers, maxPlayer
|
|
|
53
55
|
}),
|
|
54
56
|
/* @__PURE__ */ jsx("span", {
|
|
55
57
|
role: "img",
|
|
56
|
-
"aria-label":
|
|
58
|
+
"aria-label": `${m.serverCard.ping}: ${pingText}`,
|
|
57
59
|
className: ServerCard_module_default.signal,
|
|
58
60
|
"data-quality": quality,
|
|
59
61
|
children: [
|
|
@@ -72,15 +74,15 @@ var ServerCard = forwardRef(function ServerCard({ name, onlinePlayers, maxPlayer
|
|
|
72
74
|
children: [
|
|
73
75
|
/* @__PURE__ */ jsxs("div", {
|
|
74
76
|
className: cards_module_default.statRow,
|
|
75
|
-
children: [/* @__PURE__ */ jsx("dt", { children:
|
|
77
|
+
children: [/* @__PURE__ */ jsx("dt", { children: m.serverCard.online }), /* @__PURE__ */ jsx("dd", { children: online && onlinePlayers !== void 0 ? `${formatNumber(onlinePlayers)}${maxPlayers !== void 0 ? ` / ${formatNumber(maxPlayers)}` : ""}` : "—" })]
|
|
76
78
|
}),
|
|
77
79
|
version ? /* @__PURE__ */ jsxs("div", {
|
|
78
80
|
className: cards_module_default.statRow,
|
|
79
|
-
children: [/* @__PURE__ */ jsx("dt", { children:
|
|
81
|
+
children: [/* @__PURE__ */ jsx("dt", { children: m.serverCard.version }), /* @__PURE__ */ jsx("dd", { children: version })]
|
|
80
82
|
}) : null,
|
|
81
83
|
/* @__PURE__ */ jsxs("div", {
|
|
82
84
|
className: cards_module_default.statRow,
|
|
83
|
-
children: [/* @__PURE__ */ jsx("dt", { children:
|
|
85
|
+
children: [/* @__PURE__ */ jsx("dt", { children: m.serverCard.ping }), /* @__PURE__ */ jsx("dd", { children: pingText })]
|
|
84
86
|
})
|
|
85
87
|
]
|
|
86
88
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerCard.js","names":["styles","serverStyles"],"sources":["../../../../src/components/cards/ServerCard/ServerCard.tsx"],"sourcesContent":["import { GrassBlockIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { formatNumber } from \"../../../utils/number\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport serverStyles from \"./ServerCard.module.css\";\nimport type { PingQuality, ServerCardProps } from \"./ServerCard.types\";\nimport { pingQuality } from \"./ServerCard.utils\";\n\nconst BARS: Record<PingQuality, number> = { good: 4, fair: 3, poor: 1, offline: 0 };\n\n/** Server entry with player count, version, ping bars and a Join action. */\nexport const ServerCard = forwardRef<HTMLElement, ServerCardProps>(function ServerCard(\n {\n name,\n onlinePlayers,\n maxPlayers,\n version,\n ping,\n online = true,\n motd,\n icon,\n onJoin,\n material = \"stone\",\n label
|
|
1
|
+
{"version":3,"file":"ServerCard.js","names":["styles","serverStyles"],"sources":["../../../../src/components/cards/ServerCard/ServerCard.tsx"],"sourcesContent":["import { GrassBlockIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { formatNumber } from \"../../../utils/number\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockCard } from \"../BlockCard/BlockCard\";\nimport styles from \"../cards.module.css\";\nimport serverStyles from \"./ServerCard.module.css\";\nimport type { PingQuality, ServerCardProps } from \"./ServerCard.types\";\nimport { pingQuality } from \"./ServerCard.utils\";\n\nconst BARS: Record<PingQuality, number> = { good: 4, fair: 3, poor: 1, offline: 0 };\n\n/** Server entry with player count, version, ping bars and a Join action. */\nexport const ServerCard = forwardRef<HTMLElement, ServerCardProps>(function ServerCard(\n {\n name,\n onlinePlayers,\n maxPlayers,\n version,\n ping,\n online = true,\n motd,\n icon,\n onJoin,\n material = \"stone\",\n label,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const quality = pingQuality(ping, online);\n const pingText =\n online && ping !== undefined ? m.serverCard.pingValue(String(ping)) : m.serverCard.offline;\n\n return (\n <BlockCard\n ref={ref}\n material={material}\n label={label === undefined ? m.serverCard.label : label}\n data-online={online || undefined}\n className={cx(styles.card, className)}\n footer={\n onJoin ? (\n <BlockButton\n size=\"sm\"\n variant={online ? \"grass\" : \"stone\"}\n disabled={!online}\n onClick={onJoin}\n >\n {m.serverCard.join}\n </BlockButton>\n ) : undefined\n }\n {...rest}\n >\n <div className={styles.headline}>\n <span className={styles.iconBox} aria-hidden=\"true\">\n {icon ?? <GrassBlockIcon size={32} />}\n </span>\n <div className={styles.titleBlock}>\n <p className={styles.title}>{name}</p>\n {motd ? <p className={styles.description}>{motd}</p> : null}\n </div>\n <span\n role=\"img\"\n aria-label={`${m.serverCard.ping}: ${pingText}`}\n className={serverStyles.signal}\n data-quality={quality}\n >\n {[1, 2, 3, 4].map((bar) => (\n <span\n key={bar}\n className={serverStyles.bar}\n data-on={bar <= BARS[quality] || undefined}\n />\n ))}\n </span>\n </div>\n <dl className={styles.stats}>\n <div className={styles.statRow}>\n <dt>{m.serverCard.online}</dt>\n <dd>\n {online && onlinePlayers !== undefined\n ? `${formatNumber(onlinePlayers)}${maxPlayers !== undefined ? ` / ${formatNumber(maxPlayers)}` : \"\"}`\n : \"—\"}\n </dd>\n </div>\n {version ? (\n <div className={styles.statRow}>\n <dt>{m.serverCard.version}</dt>\n <dd>{version}</dd>\n </div>\n ) : null}\n <div className={styles.statRow}>\n <dt>{m.serverCard.ping}</dt>\n <dd>{pingText}</dd>\n </div>\n </dl>\n </BlockCard>\n );\n});\n"],"mappings":";;;;;;;;;;;;AAYA,IAAM,OAAoC;CAAE,MAAM;CAAG,MAAM;CAAG,MAAM;CAAG,SAAS;AAAE;;AAGlF,IAAa,aAAa,WAAyC,SAAS,WAC1E,EACE,MACA,eACA,YACA,SACA,MACA,SAAS,MACT,MACA,MACA,QACA,WAAW,SACX,OACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,UAAU,YAAY,MAAM,MAAM;CACxC,MAAM,WACJ,UAAU,SAAS,KAAA,IAAY,EAAE,WAAW,UAAU,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW;CAErF,OACE,qBAAC,WAAD;EACO;EACK;EACV,OAAO,UAAU,KAAA,IAAY,EAAE,WAAW,QAAQ;EAClD,eAAa,UAAU,KAAA;EACvB,WAAW,GAAGA,qBAAO,MAAM,SAAS;EACpC,QACE,SACE,oBAAC,aAAD;GACE,MAAK;GACL,SAAS,SAAS,UAAU;GAC5B,UAAU,CAAC;GACX,SAAS;GAER,UAAA,EAAE,WAAW;EACH,CAAA,IACX,KAAA;EAEN,GAAI;EAlBN,UAAA,CAoBE,qBAAC,OAAD;GAAK,WAAWA,qBAAO;GAAvB,UAAA;IACE,oBAAC,QAAD;KAAM,WAAWA,qBAAO;KAAS,eAAY;KAC1C,UAAA,QAAQ,oBAAC,gBAAD,EAAgB,MAAM,GAAK,CAAA;IAChC,CAAA;IACN,qBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAvB,UAAA,CACE,oBAAC,KAAD;MAAG,WAAWA,qBAAO;MAAQ,UAAA;KAAQ,CAAA,GACpC,OAAO,oBAAC,KAAD;MAAG,WAAWA,qBAAO;MAAc,UAAA;KAAQ,CAAA,IAAI,IACpD;;IACL,oBAAC,QAAD;KACE,MAAK;KACL,cAAY,GAAG,EAAE,WAAW,KAAK,IAAI;KACrC,WAAWC,0BAAa;KACxB,gBAAc;KAEb,UAAA;MAAC;MAAG;MAAG;MAAG;KAAC,CAAC,CAAC,KAAK,QACjB,oBAAC,QAAD;MAEE,WAAWA,0BAAa;MACxB,WAAS,OAAO,KAAK,YAAY,KAAA;KAClC,GAHM,GAGN,CACF;IACG,CAAA;GACH;EACL,CAAA,GAAA,qBAAC,MAAD;GAAI,WAAWD,qBAAO;GAAtB,UAAA;IACE,qBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAvB,UAAA,CACE,oBAAC,MAAD,EAAA,UAAK,EAAE,WAAW,OAAW,CAAA,GAC7B,oBAAC,MAAD,EAAA,UACG,UAAU,kBAAkB,KAAA,IACzB,GAAG,aAAa,aAAa,IAAI,eAAe,KAAA,IAAY,MAAM,aAAa,UAAU,MAAM,OAC/F,IACF,CAAA,CACD;;IACJ,UACC,qBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAvB,UAAA,CACE,oBAAC,MAAD,EAAA,UAAK,EAAE,WAAW,QAAY,CAAA,GAC9B,oBAAC,MAAD,EAAA,UAAK,QAAY,CAAA,CACd;IACH,CAAA,IAAA;IACJ,qBAAC,OAAD;KAAK,WAAWA,qBAAO;KAAvB,UAAA,CACE,oBAAC,MAAD,EAAA,UAAK,EAAE,WAAW,KAAS,CAAA,GAC3B,oBAAC,MAAD,EAAA,UAAK,SAAa,CAAA,CACf;;GACH;EACK,CAAA,CAAA;;AAEf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorldBrowser.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/WorldBrowser/WorldBrowser.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WorldBrowser.d.ts","sourceRoot":"","sources":["../../../../src/components/cards/WorldBrowser/WorldBrowser.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,sBAAsB,CAAC;AAGzE,oFAAoF;AACpF,eAAO,MAAM,YAAY,8GA2EvB,CAAC"}
|