@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.
- 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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { TradingUIProps } from "./TradingUI.types";
|
|
2
2
|
/**
|
|
3
3
|
* Villager trading: a keyboard-navigable list of offers (WAI-ARIA listbox)
|
|
4
4
|
* beside the selected offer's payment and result slots, plus the villager's level.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingUI.d.ts","sourceRoot":"","sources":["../../../../src/components/crafting/TradingUI/TradingUI.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TradingUI.d.ts","sourceRoot":"","sources":["../../../../src/components/crafting/TradingUI/TradingUI.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;;GAGG;AACH,eAAO,MAAM,SAAS,2GAwKpB,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
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 { useControllableState } from "../../../hooks/useControllableState.js";
|
|
4
5
|
import { clamp } from "../../../utils/number.js";
|
|
5
6
|
import { InventorySlot } from "../../inventory/InventorySlot/InventorySlot.js";
|
|
6
7
|
import TradingUI_module_default from "./TradingUI.module.js";
|
|
7
|
-
import { villagerLevels } from "./TradingUI.types.js";
|
|
8
8
|
import { isSoldOut } from "./TradingUI.utils.js";
|
|
9
9
|
import { forwardRef, useId, useRef } from "react";
|
|
10
10
|
import { ArrowIcon, CloseIcon } from "@malilion/block-ui-icons";
|
|
@@ -14,7 +14,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
14
14
|
* Villager trading: a keyboard-navigable list of offers (WAI-ARIA listbox)
|
|
15
15
|
* beside the selected offer's payment and result slots, plus the villager's level.
|
|
16
16
|
*/
|
|
17
|
-
var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onValueChange, onTrade, profession, level, levelProgress, label
|
|
17
|
+
var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onValueChange, onTrade, profession, level, levelProgress, label, className, ...rest }, ref) {
|
|
18
|
+
const m = useBlockUIMessages();
|
|
18
19
|
const baseId = useId();
|
|
19
20
|
const [selectedId, setSelectedId] = useControllableState({
|
|
20
21
|
value,
|
|
@@ -44,12 +45,12 @@ var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onV
|
|
|
44
45
|
return /* @__PURE__ */ jsxs("div", {
|
|
45
46
|
ref,
|
|
46
47
|
role: "group",
|
|
47
|
-
"aria-label": label,
|
|
48
|
+
"aria-label": label ?? m.tradingUI.label,
|
|
48
49
|
className: cx(TradingUI_module_default.trading, className),
|
|
49
50
|
...rest,
|
|
50
51
|
children: [/* @__PURE__ */ jsx("ul", {
|
|
51
52
|
role: "listbox",
|
|
52
|
-
"aria-label":
|
|
53
|
+
"aria-label": m.tradingUI.trades,
|
|
53
54
|
className: TradingUI_module_default.list,
|
|
54
55
|
onKeyDown,
|
|
55
56
|
children: trades.map((trade, index) => {
|
|
@@ -97,7 +98,7 @@ var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onV
|
|
|
97
98
|
]
|
|
98
99
|
}), /* @__PURE__ */ jsxs("span", {
|
|
99
100
|
className: "block-visually-hidden",
|
|
100
|
-
children: [trade.label, out ?
|
|
101
|
+
children: [trade.label, out ? m.tradingUI.soldOutSuffix : ""]
|
|
101
102
|
})]
|
|
102
103
|
}, trade.id);
|
|
103
104
|
})
|
|
@@ -116,11 +117,11 @@ var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onV
|
|
|
116
117
|
children: [
|
|
117
118
|
levelIndex + 1,
|
|
118
119
|
" · ",
|
|
119
|
-
|
|
120
|
+
m.tradingUI.levels[levelIndex]
|
|
120
121
|
]
|
|
121
122
|
}), levelProgress !== void 0 && levelIndex < 4 ? /* @__PURE__ */ jsx("div", {
|
|
122
123
|
role: "progressbar",
|
|
123
|
-
"aria-label":
|
|
124
|
+
"aria-label": m.tradingUI.progressTo(m.tradingUI.levels[levelIndex + 1] ?? ""),
|
|
124
125
|
"aria-valuemin": 0,
|
|
125
126
|
"aria-valuemax": 100,
|
|
126
127
|
"aria-valuenow": Math.round(clamp(levelProgress, 0, 100)),
|
|
@@ -136,15 +137,15 @@ var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onV
|
|
|
136
137
|
children: [
|
|
137
138
|
/* @__PURE__ */ jsxs("div", {
|
|
138
139
|
role: "group",
|
|
139
|
-
"aria-label":
|
|
140
|
+
"aria-label": m.tradingUI.payment,
|
|
140
141
|
className: TradingUI_module_default.payment,
|
|
141
142
|
children: [/* @__PURE__ */ jsx(InventorySlot, {
|
|
142
143
|
size: "lg",
|
|
143
|
-
label: selected ? void 0 :
|
|
144
|
+
label: selected ? void 0 : m.common.emptyNamed(m.tradingUI.payment),
|
|
144
145
|
children: selected?.cost
|
|
145
146
|
}), /* @__PURE__ */ jsx(InventorySlot, {
|
|
146
147
|
size: "lg",
|
|
147
|
-
label: selected?.cost2 ? void 0 :
|
|
148
|
+
label: selected?.cost2 ? void 0 : m.common.emptyNamed(m.tradingUI.secondPayment),
|
|
148
149
|
children: selected?.cost2
|
|
149
150
|
})]
|
|
150
151
|
}),
|
|
@@ -156,10 +157,10 @@ var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onV
|
|
|
156
157
|
}),
|
|
157
158
|
/* @__PURE__ */ jsx("div", {
|
|
158
159
|
role: "group",
|
|
159
|
-
"aria-label":
|
|
160
|
+
"aria-label": m.common.result,
|
|
160
161
|
children: /* @__PURE__ */ jsx(InventorySlot, {
|
|
161
162
|
size: "lg",
|
|
162
|
-
label: selected ? void 0 :
|
|
163
|
+
label: selected ? void 0 : m.common.emptyNamed(m.common.result),
|
|
163
164
|
children: selected?.result
|
|
164
165
|
})
|
|
165
166
|
})
|
|
@@ -169,7 +170,7 @@ var TradingUI = forwardRef(function TradingUI({ trades, value, defaultValue, onV
|
|
|
169
170
|
variant: "emerald",
|
|
170
171
|
disabled: !selected || soldOut,
|
|
171
172
|
onClick: () => selected && onTrade(selected.id),
|
|
172
|
-
children: soldOut ?
|
|
173
|
+
children: soldOut ? m.tradingUI.soldOut : m.tradingUI.trade
|
|
173
174
|
}) : null
|
|
174
175
|
]
|
|
175
176
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingUI.js","names":["styles"],"sources":["../../../../src/components/crafting/TradingUI/TradingUI.tsx"],"sourcesContent":["import { ArrowIcon, CloseIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, useRef, type CSSProperties, type KeyboardEvent } from \"react\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { cx } from \"../../../utils/cx\";\nimport { clamp } from \"../../../utils/number\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { InventorySlot } from \"../../inventory/InventorySlot/InventorySlot\";\nimport styles from \"./TradingUI.module.css\";\nimport { villagerLevels, type TradingUIProps } from \"./TradingUI.types\";\nimport { isSoldOut } from \"./TradingUI.utils\";\n\n/**\n * Villager trading: a keyboard-navigable list of offers (WAI-ARIA listbox)\n * beside the selected offer's payment and result slots, plus the villager's level.\n */\nexport const TradingUI = forwardRef<HTMLDivElement, TradingUIProps>(function TradingUI(\n {\n trades,\n value,\n defaultValue,\n onValueChange,\n onTrade,\n profession,\n level,\n levelProgress,\n label = \"Trading\",\n className,\n ...rest\n },\n ref,\n) {\n const baseId = useId();\n const [selectedId, setSelectedId] = useControllableState({\n value,\n defaultValue: defaultValue ?? trades[0]?.id ?? \"\",\n onChange: onValueChange,\n });\n const optionRefs = useRef(new Map<string, HTMLLIElement>());\n const selected = trades.find((trade) => trade.id === selectedId);\n const soldOut = selected ? isSoldOut(selected) : false;\n const levelIndex = level !== undefined ? clamp(Math.round(level), 1, 5) - 1 : undefined;\n\n const select = (id: string, focus = false) => {\n setSelectedId(id);\n if (focus) optionRefs.current.get(id)?.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLUListElement>) => {\n const index = trades.findIndex((trade) => trade.id === selectedId);\n let next: number | null = null;\n if (event.key === \"ArrowDown\") next = Math.min(index + 1, trades.length - 1);\n else if (event.key === \"ArrowUp\") next = Math.max(index - 1, 0);\n else if (event.key === \"Home\") next = 0;\n else if (event.key === \"End\") next = trades.length - 1;\n if (next === null) return;\n event.preventDefault();\n const trade = trades[next];\n if (trade) select(trade.id, true);\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label}\n className={cx(styles.trading, className)}\n {...rest}\n >\n <ul role=\"listbox\" aria-label=\"Trades\" className={styles.list} onKeyDown={onKeyDown}>\n {trades.map((trade, index) => {\n const isSelected = trade.id === selectedId;\n const out = isSoldOut(trade);\n const tabbable = isSelected || (!selected && index === 0);\n return (\n <li\n key={trade.id}\n ref={(element) => {\n if (element) optionRefs.current.set(trade.id, element);\n else optionRefs.current.delete(trade.id);\n }}\n id={`${baseId}-${trade.id}`}\n role=\"option\"\n aria-selected={isSelected}\n tabIndex={tabbable ? 0 : -1}\n data-sold-out={out || undefined}\n className={styles.offer}\n onClick={() => select(trade.id)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n select(trade.id);\n }\n }}\n >\n <span className={styles.offerItems} aria-hidden=\"true\">\n <span className={styles.mini}>{trade.cost}</span>\n {trade.cost2 ? <span className={styles.mini}>{trade.cost2}</span> : null}\n <span className={styles.offerArrow}>\n {out ? <CloseIcon size={16} /> : <ArrowIcon size={16} />}\n </span>\n <span className={styles.mini}>{trade.result}</span>\n </span>\n <span className=\"block-visually-hidden\">\n {trade.label}\n {out ? \" (sold out)\" : \"\"}\n </span>\n </li>\n );\n })}\n </ul>\n <div className={styles.detail}>\n {profession || levelIndex !== undefined ? (\n <div className={styles.villager}>\n {profession ? <p className={styles.profession}>{profession}</p> : null}\n {levelIndex !== undefined ? (\n <div className={styles.level}>\n <span className={styles.levelName}>\n {levelIndex + 1} · {villagerLevels[levelIndex]}\n </span>\n {levelProgress !== undefined && levelIndex < 4 ? (\n <div\n role=\"progressbar\"\n aria-label={`Progress to ${villagerLevels[levelIndex + 1]}`}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(clamp(levelProgress, 0, 100))}\n className={styles.levelBar}\n style={\n { \"--block-trade-xp\": `${clamp(levelProgress, 0, 100)}%` } as CSSProperties\n }\n >\n <span className={styles.levelFill} />\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className={styles.exchange} aria-live=\"polite\">\n <div role=\"group\" aria-label=\"Payment\" className={styles.payment}>\n <InventorySlot size=\"lg\" label={selected ? undefined : \"Payment: empty\"}>\n {selected?.cost}\n </InventorySlot>\n <InventorySlot size=\"lg\" label={selected?.cost2 ? undefined : \"Second payment: empty\"}>\n {selected?.cost2}\n </InventorySlot>\n </div>\n <span className={styles.arrow} data-sold-out={soldOut || undefined} aria-hidden=\"true\">\n {soldOut ? <CloseIcon size={32} /> : <ArrowIcon size={32} />}\n </span>\n <div role=\"group\" aria-label=\"Result\">\n <InventorySlot size=\"lg\" label={selected ? undefined : \"Result: empty\"}>\n {selected?.result}\n </InventorySlot>\n </div>\n </div>\n {onTrade ? (\n <BlockButton\n variant=\"emerald\"\n disabled={!selected || soldOut}\n onClick={() => selected && onTrade(selected.id)}\n >\n {soldOut ? \"Sold out\" : \"Trade\"}\n </BlockButton>\n ) : null}\n </div>\n </div>\n );\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TradingUI.js","names":["styles"],"sources":["../../../../src/components/crafting/TradingUI/TradingUI.tsx"],"sourcesContent":["import { ArrowIcon, CloseIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, useRef, type CSSProperties, type KeyboardEvent } from \"react\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { clamp } from \"../../../utils/number\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { InventorySlot } from \"../../inventory/InventorySlot/InventorySlot\";\nimport styles from \"./TradingUI.module.css\";\nimport type { TradingUIProps } from \"./TradingUI.types\";\nimport { isSoldOut } from \"./TradingUI.utils\";\n\n/**\n * Villager trading: a keyboard-navigable list of offers (WAI-ARIA listbox)\n * beside the selected offer's payment and result slots, plus the villager's level.\n */\nexport const TradingUI = forwardRef<HTMLDivElement, TradingUIProps>(function TradingUI(\n {\n trades,\n value,\n defaultValue,\n onValueChange,\n onTrade,\n profession,\n level,\n levelProgress,\n label,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const baseId = useId();\n const [selectedId, setSelectedId] = useControllableState({\n value,\n defaultValue: defaultValue ?? trades[0]?.id ?? \"\",\n onChange: onValueChange,\n });\n const optionRefs = useRef(new Map<string, HTMLLIElement>());\n const selected = trades.find((trade) => trade.id === selectedId);\n const soldOut = selected ? isSoldOut(selected) : false;\n const levelIndex = level !== undefined ? clamp(Math.round(level), 1, 5) - 1 : undefined;\n\n const select = (id: string, focus = false) => {\n setSelectedId(id);\n if (focus) optionRefs.current.get(id)?.focus();\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLUListElement>) => {\n const index = trades.findIndex((trade) => trade.id === selectedId);\n let next: number | null = null;\n if (event.key === \"ArrowDown\") next = Math.min(index + 1, trades.length - 1);\n else if (event.key === \"ArrowUp\") next = Math.max(index - 1, 0);\n else if (event.key === \"Home\") next = 0;\n else if (event.key === \"End\") next = trades.length - 1;\n if (next === null) return;\n event.preventDefault();\n const trade = trades[next];\n if (trade) select(trade.id, true);\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label ?? m.tradingUI.label}\n className={cx(styles.trading, className)}\n {...rest}\n >\n <ul\n role=\"listbox\"\n aria-label={m.tradingUI.trades}\n className={styles.list}\n onKeyDown={onKeyDown}\n >\n {trades.map((trade, index) => {\n const isSelected = trade.id === selectedId;\n const out = isSoldOut(trade);\n const tabbable = isSelected || (!selected && index === 0);\n return (\n <li\n key={trade.id}\n ref={(element) => {\n if (element) optionRefs.current.set(trade.id, element);\n else optionRefs.current.delete(trade.id);\n }}\n id={`${baseId}-${trade.id}`}\n role=\"option\"\n aria-selected={isSelected}\n tabIndex={tabbable ? 0 : -1}\n data-sold-out={out || undefined}\n className={styles.offer}\n onClick={() => select(trade.id)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n select(trade.id);\n }\n }}\n >\n <span className={styles.offerItems} aria-hidden=\"true\">\n <span className={styles.mini}>{trade.cost}</span>\n {trade.cost2 ? <span className={styles.mini}>{trade.cost2}</span> : null}\n <span className={styles.offerArrow}>\n {out ? <CloseIcon size={16} /> : <ArrowIcon size={16} />}\n </span>\n <span className={styles.mini}>{trade.result}</span>\n </span>\n <span className=\"block-visually-hidden\">\n {trade.label}\n {out ? m.tradingUI.soldOutSuffix : \"\"}\n </span>\n </li>\n );\n })}\n </ul>\n <div className={styles.detail}>\n {profession || levelIndex !== undefined ? (\n <div className={styles.villager}>\n {profession ? <p className={styles.profession}>{profession}</p> : null}\n {levelIndex !== undefined ? (\n <div className={styles.level}>\n <span className={styles.levelName}>\n {levelIndex + 1} · {m.tradingUI.levels[levelIndex]}\n </span>\n {levelProgress !== undefined && levelIndex < 4 ? (\n <div\n role=\"progressbar\"\n aria-label={m.tradingUI.progressTo(m.tradingUI.levels[levelIndex + 1] ?? \"\")}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(clamp(levelProgress, 0, 100))}\n className={styles.levelBar}\n style={\n { \"--block-trade-xp\": `${clamp(levelProgress, 0, 100)}%` } as CSSProperties\n }\n >\n <span className={styles.levelFill} />\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className={styles.exchange} aria-live=\"polite\">\n <div role=\"group\" aria-label={m.tradingUI.payment} className={styles.payment}>\n <InventorySlot\n size=\"lg\"\n label={selected ? undefined : m.common.emptyNamed(m.tradingUI.payment)}\n >\n {selected?.cost}\n </InventorySlot>\n <InventorySlot\n size=\"lg\"\n label={selected?.cost2 ? undefined : m.common.emptyNamed(m.tradingUI.secondPayment)}\n >\n {selected?.cost2}\n </InventorySlot>\n </div>\n <span className={styles.arrow} data-sold-out={soldOut || undefined} aria-hidden=\"true\">\n {soldOut ? <CloseIcon size={32} /> : <ArrowIcon size={32} />}\n </span>\n <div role=\"group\" aria-label={m.common.result}>\n <InventorySlot\n size=\"lg\"\n label={selected ? undefined : m.common.emptyNamed(m.common.result)}\n >\n {selected?.result}\n </InventorySlot>\n </div>\n </div>\n {onTrade ? (\n <BlockButton\n variant=\"emerald\"\n disabled={!selected || soldOut}\n onClick={() => selected && onTrade(selected.id)}\n >\n {soldOut ? m.tradingUI.soldOut : m.tradingUI.trade}\n </BlockButton>\n ) : null}\n </div>\n </div>\n );\n});\n"],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ export interface TradingUIProps extends Omit<HTMLAttributes<HTMLDivElement>, "de
|
|
|
30
30
|
level?: number;
|
|
31
31
|
/** Progress to the next level, 0–100. */
|
|
32
32
|
levelProgress?: number;
|
|
33
|
-
/** Accessible name. @default "Trading" */
|
|
33
|
+
/** Accessible name. @default locale `tradingUI.label` ("Trading") */
|
|
34
34
|
label?: string;
|
|
35
35
|
}
|
|
36
36
|
//# sourceMappingURL=TradingUI.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingUI.types.d.ts","sourceRoot":"","sources":["../../../../src/components/crafting/TradingUI/TradingUI.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,qEAAsE,CAAC;AAElG,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1F,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"TradingUI.types.d.ts","sourceRoot":"","sources":["../../../../src/components/crafting/TradingUI/TradingUI.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,qEAAsE,CAAC;AAElG,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1F,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradingUI.types.js","names":[],"sources":["../../../../src/components/crafting/TradingUI/TradingUI.types.ts"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\n\nexport interface Trade {\n id: string;\n /** Price, usually an `<ItemStack />` (e.g. emeralds). */\n cost: ReactNode;\n /** Optional second price item. */\n cost2?: ReactNode;\n /** What the player receives. */\n result: ReactNode;\n /** Accessible summary, e.g. \"12 emeralds for a diamond sword\". */\n label: string;\n /** Times traded so far. */\n uses?: number;\n /** Uses before the trade sells out. */\n maxUses?: number;\n}\n\nexport const villagerLevels = [\"Novice\", \"Apprentice\", \"Journeyman\", \"Expert\", \"Master\"] as const;\n\nexport interface TradingUIProps extends Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\"> {\n trades: Trade[];\n /** Controlled selected trade id. */\n value?: string;\n /** Initially selected trade id. @default the first trade */\n defaultValue?: string;\n onValueChange?: (id: string) => void;\n /** Called when the player confirms the selected trade. */\n onTrade?: (id: string) => void;\n /** Villager profession shown in the header, e.g. \"Armorer\". */\n profession?: ReactNode;\n /** Villager level 1–5 (Novice … Master). */\n level?: number;\n /** Progress to the next level, 0–100. */\n levelProgress?: number;\n /** Accessible name. @default \"Trading\" */\n label?: string;\n}\n"],"mappings":";AAkBA,IAAa,iBAAiB;CAAC;CAAU;CAAc;CAAc;CAAU;AAAQ"}
|
|
1
|
+
{"version":3,"file":"TradingUI.types.js","names":[],"sources":["../../../../src/components/crafting/TradingUI/TradingUI.types.ts"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\n\nexport interface Trade {\n id: string;\n /** Price, usually an `<ItemStack />` (e.g. emeralds). */\n cost: ReactNode;\n /** Optional second price item. */\n cost2?: ReactNode;\n /** What the player receives. */\n result: ReactNode;\n /** Accessible summary, e.g. \"12 emeralds for a diamond sword\". */\n label: string;\n /** Times traded so far. */\n uses?: number;\n /** Uses before the trade sells out. */\n maxUses?: number;\n}\n\nexport const villagerLevels = [\"Novice\", \"Apprentice\", \"Journeyman\", \"Expert\", \"Master\"] as const;\n\nexport interface TradingUIProps extends Omit<HTMLAttributes<HTMLDivElement>, \"defaultValue\"> {\n trades: Trade[];\n /** Controlled selected trade id. */\n value?: string;\n /** Initially selected trade id. @default the first trade */\n defaultValue?: string;\n onValueChange?: (id: string) => void;\n /** Called when the player confirms the selected trade. */\n onTrade?: (id: string) => void;\n /** Villager profession shown in the header, e.g. \"Armorer\". */\n profession?: ReactNode;\n /** Villager level 1–5 (Novice … Master). */\n level?: number;\n /** Progress to the next level, 0–100. */\n levelProgress?: number;\n /** Accessible name. @default locale `tradingUI.label` (\"Trading\") */\n label?: string;\n}\n"],"mappings":";AAkBA,IAAa,iBAAiB;CAAC;CAAU;CAAc;CAAc;CAAU;AAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/display/Avatar/Avatar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../../src/components/display/Avatar/Avatar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,MAAM,yGAkCjB,CAAC"}
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import Avatar_module_default from "./Avatar.module.js";
|
|
3
4
|
import { avatarMaterial, initials } from "./Avatar.utils.js";
|
|
4
5
|
import { forwardRef, useState } from "react";
|
|
5
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
7
|
//#region src/components/display/Avatar/Avatar.tsx
|
|
7
|
-
var STATUS_TEXT = {
|
|
8
|
-
online: "online",
|
|
9
|
-
away: "away",
|
|
10
|
-
busy: "busy",
|
|
11
|
-
offline: "offline"
|
|
12
|
-
};
|
|
13
8
|
/**
|
|
14
9
|
* Square block avatar: a pixelated face image, or initials on a material
|
|
15
10
|
* colour picked from the name, with an optional presence dot.
|
|
16
11
|
*/
|
|
17
12
|
var Avatar = forwardRef(function Avatar({ name, src, icon, size = "md", status, decorative = false, className, ...rest }, ref) {
|
|
13
|
+
const m = useBlockUIMessages();
|
|
18
14
|
const [failedSrc, setFailedSrc] = useState(void 0);
|
|
19
15
|
const showImage = src !== void 0 && src !== failedSrc;
|
|
20
|
-
const accessibleName = status ? `${name} (${
|
|
16
|
+
const accessibleName = status ? `${name} (${m.avatar.statuses[status]})` : name;
|
|
21
17
|
return /* @__PURE__ */ jsxs("span", {
|
|
22
18
|
ref,
|
|
23
19
|
role: decorative ? void 0 : "img",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","names":["styles"],"sources":["../../../../src/components/display/Avatar/Avatar.tsx"],"sourcesContent":["import { forwardRef, useState } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./Avatar.module.css\";\nimport type { AvatarProps } from \"./Avatar.types\";\nimport { avatarMaterial, initials } from \"./Avatar.utils\";\n\
|
|
1
|
+
{"version":3,"file":"Avatar.js","names":["styles"],"sources":["../../../../src/components/display/Avatar/Avatar.tsx"],"sourcesContent":["import { forwardRef, useState } from \"react\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./Avatar.module.css\";\nimport type { AvatarProps } from \"./Avatar.types\";\nimport { avatarMaterial, initials } from \"./Avatar.utils\";\n\n/**\n * Square block avatar: a pixelated face image, or initials on a material\n * colour picked from the name, with an optional presence dot.\n */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { name, src, icon, size = \"md\", status, decorative = false, className, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n const [failedSrc, setFailedSrc] = useState<string | undefined>(undefined);\n const showImage = src !== undefined && src !== failedSrc;\n const accessibleName = status ? `${name} (${m.avatar.statuses[status]})` : name;\n\n return (\n <span\n ref={ref}\n role={decorative ? undefined : \"img\"}\n aria-label={decorative ? undefined : accessibleName}\n aria-hidden={decorative || undefined}\n data-size={size}\n data-material={avatarMaterial(name)}\n className={cx(styles.avatar, className)}\n {...rest}\n >\n {showImage ? (\n <img src={src} alt=\"\" className={styles.image} onError={() => setFailedSrc(src)} />\n ) : icon ? (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : (\n <span className={styles.initials} aria-hidden=\"true\">\n {initials(name)}\n </span>\n )}\n {status ? <span className={styles.status} data-status={status} aria-hidden=\"true\" /> : null}\n </span>\n );\n});\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,SAAS,WAAyC,SAAS,OACtE,EAAE,MAAM,KAAK,MAAM,OAAO,MAAM,QAAQ,aAAa,OAAO,WAAW,GAAG,QAC1E,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,CAAC,WAAW,gBAAgB,SAA6B,KAAA,CAAS;CACxE,MAAM,YAAY,QAAQ,KAAA,KAAa,QAAQ;CAC/C,MAAM,iBAAiB,SAAS,GAAG,KAAK,IAAI,EAAE,OAAO,SAAS,QAAQ,KAAK;CAE3E,OACE,qBAAC,QAAD;EACO;EACL,MAAM,aAAa,KAAA,IAAY;EAC/B,cAAY,aAAa,KAAA,IAAY;EACrC,eAAa,cAAc,KAAA;EAC3B,aAAW;EACX,iBAAe,eAAe,IAAI;EAClC,WAAW,GAAGA,sBAAO,QAAQ,SAAS;EACtC,GAAI;EARN,UAAA,CAUG,YACC,oBAAC,OAAD;GAAU;GAAK,KAAI;GAAG,WAAWA,sBAAO;GAAO,eAAe,aAAa,GAAG;EAAI,CAAA,IAChF,OACF,oBAAC,QAAD;GAAM,WAAWA,sBAAO;GAAM,eAAY;GACvC,UAAA;EACG,CAAA,IAEN,oBAAC,QAAD;GAAM,WAAWA,sBAAO;GAAU,eAAY;GAC3C,UAAA,SAAS,IAAI;EACV,CAAA,GAEP,SAAS,oBAAC,QAAD;GAAM,WAAWA,sBAAO;GAAQ,eAAa;GAAQ,eAAY;EAAQ,CAAA,IAAI,IACnF;;AAEV,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockTable.d.ts","sourceRoot":"","sources":["../../../../src/components/display/BlockTable/BlockTable.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockTable.d.ts","sourceRoot":"","sources":["../../../../src/components/display/BlockTable/BlockTable.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AAiJ1E;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAkC,CAAC,CAAC,EACzD,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,gBAAgB,CAAC,KACxD,YAAY,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { useControllableState } from "../../../hooks/useControllableState.js";
|
|
3
4
|
import BlockTable_module_default from "./BlockTable.module.js";
|
|
4
5
|
import { nextSort, readField, sortRows } from "./BlockTable.utils.js";
|
|
@@ -10,7 +11,8 @@ var ARIA_SORT = {
|
|
|
10
11
|
asc: "ascending",
|
|
11
12
|
desc: "descending"
|
|
12
13
|
};
|
|
13
|
-
function BlockTableInner({ columns, rows, getRowKey = (_row, index) => index, caption, hideCaption = false, sort, defaultSort = null, onSortChange, manualSort = false, striped = false, size = "md", stickyHeader = false, emptyState
|
|
14
|
+
function BlockTableInner({ columns, rows, getRowKey = (_row, index) => index, caption, hideCaption = false, sort, defaultSort = null, onSortChange, manualSort = false, striped = false, size = "md", stickyHeader = false, emptyState, wrapperClassName, className, ...rest }, ref) {
|
|
15
|
+
const m = useBlockUIMessages();
|
|
14
16
|
const captionId = useId();
|
|
15
17
|
const [activeSort, setSort] = useControllableState({
|
|
16
18
|
value: sort,
|
|
@@ -63,7 +65,7 @@ function BlockTableInner({ columns, rows, getRowKey = (_row, index) => index, ca
|
|
|
63
65
|
/* @__PURE__ */ jsx("tbody", { children: visibleRows.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
|
|
64
66
|
colSpan: columns.length,
|
|
65
67
|
className: BlockTable_module_default.empty,
|
|
66
|
-
children: emptyState
|
|
68
|
+
children: emptyState ?? m.blockTable.empty
|
|
67
69
|
}) }) : visibleRows.map((row, index) => /* @__PURE__ */ jsx("tr", {
|
|
68
70
|
className: BlockTable_module_default.row,
|
|
69
71
|
children: columns.map((column) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockTable.js","names":["styles"],"sources":["../../../../src/components/display/BlockTable/BlockTable.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronUpIcon } from \"@malilion/block-ui-icons\";\nimport {\n forwardRef,\n useId,\n type CSSProperties,\n type ForwardedRef,\n type ReactElement,\n type RefAttributes,\n} from \"react\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./BlockTable.module.css\";\nimport type { BlockTableProps, BlockTableSort } from \"./BlockTable.types\";\nimport { nextSort, readField, sortRows } from \"./BlockTable.utils\";\n\nconst ARIA_SORT = { asc: \"ascending\", desc: \"descending\" } as const;\n\nfunction BlockTableInner<T>(\n {\n columns,\n rows,\n getRowKey = (_row, index) => index,\n caption,\n hideCaption = false,\n sort,\n defaultSort = null,\n onSortChange,\n manualSort = false,\n striped = false,\n size = \"md\",\n stickyHeader = false,\n emptyState
|
|
1
|
+
{"version":3,"file":"BlockTable.js","names":["styles"],"sources":["../../../../src/components/display/BlockTable/BlockTable.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronUpIcon } from \"@malilion/block-ui-icons\";\nimport {\n forwardRef,\n useId,\n type CSSProperties,\n type ForwardedRef,\n type ReactElement,\n type RefAttributes,\n} from \"react\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./BlockTable.module.css\";\nimport type { BlockTableProps, BlockTableSort } from \"./BlockTable.types\";\nimport { nextSort, readField, sortRows } from \"./BlockTable.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\nconst ARIA_SORT = { asc: \"ascending\", desc: \"descending\" } as const;\n\nfunction BlockTableInner<T>(\n {\n columns,\n rows,\n getRowKey = (_row, index) => index,\n caption,\n hideCaption = false,\n sort,\n defaultSort = null,\n onSortChange,\n manualSort = false,\n striped = false,\n size = \"md\",\n stickyHeader = false,\n emptyState,\n wrapperClassName,\n className,\n ...rest\n }: BlockTableProps<T>,\n ref: ForwardedRef<HTMLTableElement>,\n) {\n const m = useBlockUIMessages();\n const captionId = useId();\n const [activeSort, setSort] = useControllableState<BlockTableSort | null>({\n value: sort,\n defaultValue: defaultSort,\n onChange: onSortChange,\n });\n const visibleRows = manualSort ? rows : sortRows(rows, columns, activeSort);\n const hasWidths = columns.some((column) => column.width);\n\n return (\n <div\n role=\"region\"\n aria-labelledby={captionId}\n // The wrapper scrolls horizontally on narrow screens, so keyboard users must be able to focus it.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n className={cx(styles.wrapper, stickyHeader && styles.sticky, wrapperClassName)}\n >\n <table\n ref={ref}\n data-size={size}\n data-striped={striped || undefined}\n className={cx(styles.table, className)}\n {...rest}\n >\n <caption\n id={captionId}\n className={cx(styles.caption, hideCaption && \"block-visually-hidden\")}\n >\n {caption}\n </caption>\n {hasWidths ? (\n <colgroup>\n {columns.map((column) => (\n <col\n key={column.key}\n className={column.width ? styles.col : undefined}\n style={\n column.width\n ? ({ \"--block-table-col-width\": column.width } as CSSProperties)\n : undefined\n }\n />\n ))}\n </colgroup>\n ) : null}\n <thead>\n <tr>\n {columns.map((column) => {\n const direction = activeSort?.key === column.key ? activeSort.direction : undefined;\n return (\n <th\n key={column.key}\n scope=\"col\"\n data-align={column.align ?? \"start\"}\n aria-sort={column.sortable && direction ? ARIA_SORT[direction] : undefined}\n className={styles.headerCell}\n >\n {column.sortable ? (\n <button\n type=\"button\"\n className={styles.sortButton}\n data-direction={direction}\n onClick={() => setSort(nextSort(activeSort, column.key))}\n >\n <span>{column.header}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {direction === \"desc\" ? (\n <ChevronDownIcon size={16} />\n ) : (\n <ChevronUpIcon size={16} />\n )}\n </span>\n </button>\n ) : (\n column.header\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {visibleRows.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className={styles.empty}>\n {emptyState ?? m.blockTable.empty}\n </td>\n </tr>\n ) : (\n visibleRows.map((row, index) => (\n <tr key={getRowKey(row, index)} className={styles.row}>\n {columns.map((column) => {\n const content = column.cell\n ? column.cell(row, index)\n : readField(row, column.key);\n const Cell = column.rowHeader ? \"th\" : \"td\";\n return (\n <Cell\n key={column.key}\n scope={column.rowHeader ? \"row\" : undefined}\n data-align={column.align ?? \"start\"}\n className={cx(styles.cell, column.rowHeader && styles.rowHeader)}\n >\n {content}\n </Cell>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\n/**\n * Data table with a block frame, optional sorting (click a header to cycle\n * ascending → descending → unsorted), striping and a horizontal scroll region.\n */\nexport const BlockTable = forwardRef(BlockTableInner) as <T>(\n props: BlockTableProps<T> & RefAttributes<HTMLTableElement>,\n) => ReactElement;\n"],"mappings":";;;;;;;;;AAgBA,IAAM,YAAY;CAAE,KAAK;CAAa,MAAM;AAAa;AAEzD,SAAS,gBACP,EACE,SACA,MACA,aAAa,MAAM,UAAU,OAC7B,SACA,cAAc,OACd,MACA,cAAc,MACd,cACA,aAAa,OACb,UAAU,OACV,OAAO,MACP,eAAe,OACf,YACA,kBACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,YAAY,MAAM;CACxB,MAAM,CAAC,YAAY,WAAW,qBAA4C;EACxE,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CACD,MAAM,cAAc,aAAa,OAAO,SAAS,MAAM,SAAS,UAAU;CAC1E,MAAM,YAAY,QAAQ,MAAM,WAAW,OAAO,KAAK;CAEvD,OACE,oBAAC,OAAD;EACE,MAAK;EACL,mBAAiB;EAGjB,UAAU;EACV,WAAW,GAAGA,0BAAO,SAAS,gBAAgBA,0BAAO,QAAQ,gBAAgB;EAE7E,UAAA,qBAAC,SAAD;GACO;GACL,aAAW;GACX,gBAAc,WAAW,KAAA;GACzB,WAAW,GAAGA,0BAAO,OAAO,SAAS;GACrC,GAAI;GALN,UAAA;IAOE,oBAAC,WAAD;KACE,IAAI;KACJ,WAAW,GAAGA,0BAAO,SAAS,eAAe,uBAAuB;KAEnE,UAAA;IACM,CAAA;IACR,YACC,oBAAC,YAAD,EAAA,UACG,QAAQ,KAAK,WACZ,oBAAC,OAAD;KAEE,WAAW,OAAO,QAAQA,0BAAO,MAAM,KAAA;KACvC,OACE,OAAO,QACF,EAAE,2BAA2B,OAAO,MAAM,IAC3C,KAAA;IAEP,GAPM,OAAO,GAOb,CACF,EACO,CAAA,IACR;IACJ,oBAAC,SAAD,EAAA,UACE,oBAAC,MAAD,EAAA,UACG,QAAQ,KAAK,WAAW;KACvB,MAAM,YAAY,YAAY,QAAQ,OAAO,MAAM,WAAW,YAAY,KAAA;KAC1E,OACE,oBAAC,MAAD;MAEE,OAAM;MACN,cAAY,OAAO,SAAS;MAC5B,aAAW,OAAO,YAAY,YAAY,UAAU,aAAa,KAAA;MACjE,WAAWA,0BAAO;MAEjB,UAAA,OAAO,WACN,qBAAC,UAAD;OACE,MAAK;OACL,WAAWA,0BAAO;OAClB,kBAAgB;OAChB,eAAe,QAAQ,SAAS,YAAY,OAAO,GAAG,CAAC;OAJzD,UAAA,CAME,oBAAC,QAAD,EAAA,UAAO,OAAO,OAAa,CAAA,GAC3B,oBAAC,QAAD;QAAM,WAAWA,0BAAO;QAAU,eAAY;QAC3C,UAAA,cAAc,SACb,oBAAC,iBAAD,EAAiB,MAAM,GAAK,CAAA,IAE5B,oBAAC,eAAD,EAAe,MAAM,GAAK,CAAA;OAExB,CAAA,CACA;MAER,CAAA,IAAA,OAAO;KAEP,GAzBG,OAAO,GAyBV;IAER,CAAC,EACC,CAAA,EACC,CAAA;IACP,oBAAC,SAAD,EAAA,UACG,YAAY,WAAW,IACtB,oBAAC,MAAD,EAAA,UACE,oBAAC,MAAD;KAAI,SAAS,QAAQ;KAAQ,WAAWA,0BAAO;KAC5C,UAAA,cAAc,EAAE,WAAW;IAC1B,CAAA,EACF,CAAA,IAEJ,YAAY,KAAK,KAAK,UACpB,oBAAC,MAAD;KAAgC,WAAWA,0BAAO;KAC/C,UAAA,QAAQ,KAAK,WAAW;MACvB,MAAM,UAAU,OAAO,OACnB,OAAO,KAAK,KAAK,KAAK,IACtB,UAAU,KAAK,OAAO,GAAG;MAC7B,MAAM,OAAO,OAAO,YAAY,OAAO;MACvC,OACE,oBAAC,MAAD;OAEE,OAAO,OAAO,YAAY,QAAQ,KAAA;OAClC,cAAY,OAAO,SAAS;OAC5B,WAAW,GAAGA,0BAAO,MAAM,OAAO,aAAaA,0BAAO,SAAS;OAE9D,UAAA;MACG,GANC,OAAO,GAMR;KAEV,CAAC;IACC,GAjBK,UAAU,KAAK,KAAK,CAiBzB,CACL,EAEE,CAAA;GACF;;CACJ,CAAA;AAET;;;;;AAMA,IAAa,aAAa,WAAW,eAAe"}
|
|
@@ -41,7 +41,7 @@ export interface BlockTableProps<T> extends Omit<TableHTMLAttributes<HTMLTableEl
|
|
|
41
41
|
size?: "sm" | "md";
|
|
42
42
|
/** Keep the header visible while the page scrolls. */
|
|
43
43
|
stickyHeader?: boolean;
|
|
44
|
-
/** Shown in place of rows when `rows` is empty. @default "No data" */
|
|
44
|
+
/** Shown in place of rows when `rows` is empty. @default messages.blockTable.empty ("No data") */
|
|
45
45
|
emptyState?: ReactNode;
|
|
46
46
|
/** Class for the scroll container around the table. */
|
|
47
47
|
wrapperClassName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockTable.types.d.ts","sourceRoot":"","sources":["../../../../src/components/display/BlockTable/BlockTable.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,CAAC;IAClB,mDAAmD;IACnD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAC5C,uBAAuB;IACvB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,IAAI,CAC9C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,UAAU,CACX;IACC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,sDAAsD;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IAC3C,+DAA+D;IAC/D,OAAO,EAAE,SAAS,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"BlockTable.types.d.ts","sourceRoot":"","sources":["../../../../src/components/display/BlockTable/BlockTable.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,CAAC;IAClB,mDAAmD;IACnD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAC5C,uBAAuB;IACvB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,IAAI,CAC9C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,UAAU,CACX;IACC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,sDAAsD;IACtD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IAC3C,+DAA+D;IAC/D,OAAO,EAAE,SAAS,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kGAAkG;IAClG,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillTree.d.ts","sourceRoot":"","sources":["../../../../src/components/display/SkillTree/SkillTree.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"SkillTree.d.ts","sourceRoot":"","sources":["../../../../src/components/display/SkillTree/SkillTree.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;GAIG;AACH,eAAO,MAAM,SAAS,2GAqIpB,CAAC"}
|
|
@@ -1,21 +1,18 @@
|
|
|
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 SkillTree_module_default from "./SkillTree.module.js";
|
|
4
5
|
import { gridSize, skillState } from "./SkillTree.utils.js";
|
|
5
6
|
import { forwardRef, useId, useState } from "react";
|
|
6
7
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
//#region src/components/display/SkillTree/SkillTree.tsx
|
|
8
|
-
var STATE_TEXT = {
|
|
9
|
-
locked: "locked",
|
|
10
|
-
available: "available",
|
|
11
|
-
unlocked: "unlocked"
|
|
12
|
-
};
|
|
13
9
|
/**
|
|
14
10
|
* Skill tree: nodes on a grid joined to their prerequisites. Unlocked skills
|
|
15
11
|
* glow, available ones can be bought with skill points, locked ones show what
|
|
16
12
|
* they need. Selecting a node shows its details and Unlock button.
|
|
17
13
|
*/
|
|
18
|
-
var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlock, defaultValue, label
|
|
14
|
+
var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlock, defaultValue, label, className, ...rest }, ref) {
|
|
15
|
+
const m = useBlockUIMessages();
|
|
19
16
|
const detailId = useId();
|
|
20
17
|
const [selectedId, setSelectedId] = useState(defaultValue ?? skills[0]?.id ?? "");
|
|
21
18
|
const unlockedSet = new Set(unlocked);
|
|
@@ -38,13 +35,17 @@ var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlo
|
|
|
38
35
|
return /* @__PURE__ */ jsxs("div", {
|
|
39
36
|
ref,
|
|
40
37
|
role: "group",
|
|
41
|
-
"aria-label": label,
|
|
38
|
+
"aria-label": label ?? m.skillTree.label,
|
|
42
39
|
className: cx(SkillTree_module_default.tree, className),
|
|
43
40
|
...rest,
|
|
44
41
|
children: [
|
|
45
42
|
points !== void 0 ? /* @__PURE__ */ jsxs("p", {
|
|
46
43
|
className: SkillTree_module_default.points,
|
|
47
|
-
children: [
|
|
44
|
+
children: [
|
|
45
|
+
m.skillTree.points,
|
|
46
|
+
" ",
|
|
47
|
+
/* @__PURE__ */ jsx("strong", { children: points })
|
|
48
|
+
]
|
|
48
49
|
}) : null,
|
|
49
50
|
/* @__PURE__ */ jsxs("div", {
|
|
50
51
|
className: SkillTree_module_default.board,
|
|
@@ -67,7 +68,7 @@ var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlo
|
|
|
67
68
|
}, key))
|
|
68
69
|
}), /* @__PURE__ */ jsx("ul", {
|
|
69
70
|
className: SkillTree_module_default.nodes,
|
|
70
|
-
"aria-label":
|
|
71
|
+
"aria-label": m.skillTree.skills,
|
|
71
72
|
children: skills.map((skill) => {
|
|
72
73
|
const state = skillState(skill, unlockedSet);
|
|
73
74
|
return /* @__PURE__ */ jsx("li", {
|
|
@@ -82,7 +83,7 @@ var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlo
|
|
|
82
83
|
"data-state": state,
|
|
83
84
|
"aria-pressed": skill.id === selectedId,
|
|
84
85
|
"aria-controls": detailId,
|
|
85
|
-
"aria-label": `${skill.label}, ${
|
|
86
|
+
"aria-label": `${skill.label}, ${m.skillTree.states[state]}`,
|
|
86
87
|
onClick: () => setSelectedId(skill.id),
|
|
87
88
|
children: /* @__PURE__ */ jsx("span", {
|
|
88
89
|
className: SkillTree_module_default.icon,
|
|
@@ -98,7 +99,7 @@ var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlo
|
|
|
98
99
|
id: detailId,
|
|
99
100
|
className: SkillTree_module_default.detail,
|
|
100
101
|
"aria-live": "polite",
|
|
101
|
-
"aria-label":
|
|
102
|
+
"aria-label": m.skillTree.details,
|
|
102
103
|
children: selected ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
103
104
|
/* @__PURE__ */ jsxs("p", {
|
|
104
105
|
className: SkillTree_module_default.name,
|
|
@@ -108,7 +109,7 @@ var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlo
|
|
|
108
109
|
/* @__PURE__ */ jsx("span", {
|
|
109
110
|
className: SkillTree_module_default.state,
|
|
110
111
|
"data-state": selectedState,
|
|
111
|
-
children: selectedState
|
|
112
|
+
children: selectedState ? m.skillTree.states[selectedState] : null
|
|
112
113
|
})
|
|
113
114
|
]
|
|
114
115
|
}),
|
|
@@ -116,16 +117,16 @@ var SkillTree = forwardRef(function SkillTree({ skills, unlocked, points, onUnlo
|
|
|
116
117
|
className: SkillTree_module_default.description,
|
|
117
118
|
children: selected.description
|
|
118
119
|
}) : null,
|
|
119
|
-
missing.length > 0 ? /* @__PURE__ */
|
|
120
|
+
missing.length > 0 ? /* @__PURE__ */ jsx("p", {
|
|
120
121
|
className: SkillTree_module_default.requires,
|
|
121
|
-
children:
|
|
122
|
+
children: m.skillTree.requires(missing.join(", "))
|
|
122
123
|
}) : null,
|
|
123
124
|
selectedState === "available" && onUnlock ? /* @__PURE__ */ jsx(BlockButton, {
|
|
124
125
|
variant: "emerald",
|
|
125
126
|
size: "sm",
|
|
126
127
|
disabled: !affordable,
|
|
127
128
|
onClick: () => onUnlock(selected.id),
|
|
128
|
-
children: affordable ?
|
|
129
|
+
children: affordable ? m.skillTree.unlock(selectedCost) : m.skillTree.needs(selectedCost)
|
|
129
130
|
}) : null
|
|
130
131
|
] }) : null
|
|
131
132
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillTree.js","names":["styles","_Fragment"],"sources":["../../../../src/components/display/SkillTree/SkillTree.tsx"],"sourcesContent":["import { forwardRef, useId, useState, type CSSProperties } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport styles from \"./SkillTree.module.css\";\nimport type { SkillTreeProps } from \"./SkillTree.types\";\nimport { gridSize, skillState } from \"./SkillTree.utils\";\
|
|
1
|
+
{"version":3,"file":"SkillTree.js","names":["styles","_Fragment"],"sources":["../../../../src/components/display/SkillTree/SkillTree.tsx"],"sourcesContent":["import { forwardRef, useId, useState, type CSSProperties } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport styles from \"./SkillTree.module.css\";\nimport type { SkillTreeProps } from \"./SkillTree.types\";\nimport { gridSize, skillState } from \"./SkillTree.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/**\n * Skill tree: nodes on a grid joined to their prerequisites. Unlocked skills\n * glow, available ones can be bought with skill points, locked ones show what\n * they need. Selecting a node shows its details and Unlock button.\n */\nexport const SkillTree = forwardRef<HTMLDivElement, SkillTreeProps>(function SkillTree(\n { skills, unlocked, points, onUnlock, defaultValue, label, className, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n const detailId = useId();\n const [selectedId, setSelectedId] = useState(defaultValue ?? skills[0]?.id ?? \"\");\n const unlockedSet = new Set(unlocked);\n const byId = new Map(skills.map((skill) => [skill.id, skill]));\n const { rows, columns } = gridSize(skills);\n const selected = byId.get(selectedId);\n const selectedState = selected ? skillState(selected, unlockedSet) : undefined;\n const selectedCost = selected?.cost ?? 1;\n const affordable = points === undefined || points >= selectedCost;\n const missing =\n selected && selectedState === \"locked\"\n ? (selected.requires ?? [])\n .filter((id) => !unlockedSet.has(id))\n .map((id) => byId.get(id)?.label ?? id)\n : [];\n\n // Connector centres in grid units (0.5 = middle of the first cell).\n const edges = skills.flatMap((skill) =>\n (skill.requires ?? []).flatMap((id) => {\n const from = byId.get(id);\n return from\n ? [{ key: `${id}-${skill.id}`, from, to: skill, lit: unlockedSet.has(skill.id) }]\n : [];\n }),\n );\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={label ?? m.skillTree.label}\n className={cx(styles.tree, className)}\n {...rest}\n >\n {points !== undefined ? (\n <p className={styles.points}>\n {m.skillTree.points} <strong>{points}</strong>\n </p>\n ) : null}\n <div\n className={styles.board}\n style={{ \"--block-skill-rows\": rows, \"--block-skill-columns\": columns } as CSSProperties}\n >\n <svg\n className={styles.lines}\n viewBox={`0 0 ${columns} ${rows}`}\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n {edges.map(({ key, from, to, lit }) => (\n <line\n key={key}\n x1={from.column - 0.5}\n y1={from.row - 0.5}\n x2={to.column - 0.5}\n y2={to.row - 0.5}\n data-lit={lit || undefined}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </svg>\n <ul className={styles.nodes} aria-label={m.skillTree.skills}>\n {skills.map((skill) => {\n const state = skillState(skill, unlockedSet);\n return (\n <li\n key={skill.id}\n className={styles.cell}\n style={\n {\n \"--block-skill-row\": skill.row,\n \"--block-skill-col\": skill.column,\n } as CSSProperties\n }\n >\n <button\n type=\"button\"\n className={styles.node}\n data-state={state}\n aria-pressed={skill.id === selectedId}\n aria-controls={detailId}\n aria-label={`${skill.label}, ${m.skillTree.states[state]}`}\n onClick={() => setSelectedId(skill.id)}\n >\n <span className={styles.icon} aria-hidden=\"true\">\n {skill.icon}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n <section\n id={detailId}\n className={styles.detail}\n aria-live=\"polite\"\n aria-label={m.skillTree.details}\n >\n {selected ? (\n <>\n <p className={styles.name}>\n {selected.label}{\" \"}\n <span className={styles.state} data-state={selectedState}>\n {selectedState ? m.skillTree.states[selectedState] : null}\n </span>\n </p>\n {selected.description ? (\n <p className={styles.description}>{selected.description}</p>\n ) : null}\n {missing.length > 0 ? (\n <p className={styles.requires}>{m.skillTree.requires(missing.join(\", \"))}</p>\n ) : null}\n {selectedState === \"available\" && onUnlock ? (\n <BlockButton\n variant=\"emerald\"\n size=\"sm\"\n disabled={!affordable}\n onClick={() => onUnlock(selected.id)}\n >\n {affordable ? m.skillTree.unlock(selectedCost) : m.skillTree.needs(selectedCost)}\n </BlockButton>\n ) : null}\n </>\n ) : null}\n </section>\n </div>\n );\n});\n"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export interface SkillTreeProps extends Omit<HTMLAttributes<HTMLDivElement>, "de
|
|
|
23
23
|
onUnlock?: (id: string) => void;
|
|
24
24
|
/** Initially selected skill id. */
|
|
25
25
|
defaultValue?: string;
|
|
26
|
-
/** Accessible name. @default "Skill tree" */
|
|
26
|
+
/** Accessible name. @default messages.skillTree.label ("Skill tree") */
|
|
27
27
|
label?: string;
|
|
28
28
|
}
|
|
29
29
|
//# sourceMappingURL=SkillTree.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillTree.types.d.ts","sourceRoot":"","sources":["../../../../src/components/display/SkillTree/SkillTree.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1F,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"SkillTree.types.d.ts","sourceRoot":"","sources":["../../../../src/components/display/SkillTree/SkillTree.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC1F,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockAlert.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Alert/BlockAlert.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgB,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockAlert.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Alert/BlockAlert.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAgB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAWxE;;;GAGG;AACH,eAAO,MAAM,UAAU,4GAsDrB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import BlockAlert_module_default from "./BlockAlert.module.js";
|
|
3
4
|
import { alertMaterial } from "./BlockAlert.utils.js";
|
|
4
5
|
import { forwardRef, useId } from "react";
|
|
@@ -15,7 +16,8 @@ var defaultIcons = {
|
|
|
15
16
|
* Inline status message. `warning`/`error` use `role="alert"`; `success`/`info`
|
|
16
17
|
* use `role="status"` so screen readers announce them politely.
|
|
17
18
|
*/
|
|
18
|
-
var BlockAlert = forwardRef(function BlockAlert({ variant = "info", title, children, icon, onClose, closeLabel
|
|
19
|
+
var BlockAlert = forwardRef(function BlockAlert({ variant = "info", title, children, icon, onClose, closeLabel, action, className, role, ...rest }, ref) {
|
|
20
|
+
const m = useBlockUIMessages();
|
|
19
21
|
const titleId = useId();
|
|
20
22
|
return /* @__PURE__ */ jsxs("div", {
|
|
21
23
|
ref,
|
|
@@ -49,7 +51,7 @@ var BlockAlert = forwardRef(function BlockAlert({ variant = "info", title, child
|
|
|
49
51
|
onClose ? /* @__PURE__ */ jsx("button", {
|
|
50
52
|
type: "button",
|
|
51
53
|
className: BlockAlert_module_default.close,
|
|
52
|
-
"aria-label": closeLabel,
|
|
54
|
+
"aria-label": closeLabel ?? m.common.dismiss,
|
|
53
55
|
onClick: onClose,
|
|
54
56
|
children: /* @__PURE__ */ jsx(CloseIcon, { size: 16 })
|
|
55
57
|
}) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockAlert.js","names":["styles"],"sources":["../../../../src/components/feedback/Alert/BlockAlert.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon, ErrorIcon, InfoIcon, WarningIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./BlockAlert.module.css\";\nimport type { AlertVariant, BlockAlertProps } from \"./BlockAlert.types\";\nimport { alertMaterial } from \"./BlockAlert.utils\";\n\nconst defaultIcons: Record<AlertVariant, ReactNode> = {\n success: <CheckIcon size={20} />,\n info: <InfoIcon size={20} />,\n warning: <WarningIcon size={20} />,\n error: <ErrorIcon size={20} />,\n};\n\n/**\n * Inline status message. `warning`/`error` use `role=\"alert\"`; `success`/`info`\n * use `role=\"status\"` so screen readers announce them politely.\n */\nexport const BlockAlert = forwardRef<HTMLDivElement, BlockAlertProps>(function BlockAlert(\n {\n variant = \"info\",\n title,\n children,\n icon,\n onClose,\n closeLabel
|
|
1
|
+
{"version":3,"file":"BlockAlert.js","names":["styles"],"sources":["../../../../src/components/feedback/Alert/BlockAlert.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon, ErrorIcon, InfoIcon, WarningIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, type ReactNode } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport styles from \"./BlockAlert.module.css\";\nimport type { AlertVariant, BlockAlertProps } from \"./BlockAlert.types\";\nimport { alertMaterial } from \"./BlockAlert.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\nconst defaultIcons: Record<AlertVariant, ReactNode> = {\n success: <CheckIcon size={20} />,\n info: <InfoIcon size={20} />,\n warning: <WarningIcon size={20} />,\n error: <ErrorIcon size={20} />,\n};\n\n/**\n * Inline status message. `warning`/`error` use `role=\"alert\"`; `success`/`info`\n * use `role=\"status\"` so screen readers announce them politely.\n */\nexport const BlockAlert = forwardRef<HTMLDivElement, BlockAlertProps>(function BlockAlert(\n {\n variant = \"info\",\n title,\n children,\n icon,\n onClose,\n closeLabel,\n action,\n className,\n role,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const titleId = useId();\n const assertive = variant === \"warning\" || variant === \"error\";\n return (\n <div\n ref={ref}\n role={role ?? (assertive ? \"alert\" : \"status\")}\n aria-labelledby={title ? titleId : undefined}\n data-variant={variant}\n data-material={alertMaterial[variant]}\n className={cx(styles.alert, className)}\n {...rest}\n >\n {icon !== false ? (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon ?? defaultIcons[variant]}\n </span>\n ) : null}\n <div className={styles.body}>\n {title ? (\n <p id={titleId} className={styles.title}>\n {title}\n </p>\n ) : null}\n {children ? <div className={styles.description}>{children}</div> : null}\n </div>\n {action ? <div className={styles.action}>{action}</div> : null}\n {onClose ? (\n <button\n type=\"button\"\n className={styles.close}\n aria-label={closeLabel ?? m.common.dismiss}\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </button>\n ) : null}\n </div>\n );\n});\n"],"mappings":";;;;;;;;AAQA,IAAM,eAAgD;CACpD,SAAS,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;CAC/B,MAAM,oBAAC,UAAD,EAAU,MAAM,GAAK,CAAA;CAC3B,SAAS,oBAAC,aAAD,EAAa,MAAM,GAAK,CAAA;CACjC,OAAO,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;AAC/B;;;;;AAMA,IAAa,aAAa,WAA4C,SAAS,WAC7E,EACE,UAAU,QACV,OACA,UACA,MACA,SACA,YACA,QACA,WACA,MACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,UAAU,MAAM;CAEtB,OACE,qBAAC,OAAD;EACO;EACL,MAAM,SAJQ,YAAY,aAAa,YAAY,UAIxB,UAAU;EACrC,mBAAiB,QAAQ,UAAU,KAAA;EACnC,gBAAc;EACd,iBAAe,cAAc;EAC7B,WAAW,GAAGA,0BAAO,OAAO,SAAS;EACrC,GAAI;EAPN,UAAA;GASG,SAAS,QACR,oBAAC,QAAD;IAAM,WAAWA,0BAAO;IAAM,eAAY;IACvC,UAAA,QAAQ,aAAa;GAClB,CAAA,IACJ;GACJ,qBAAC,OAAD;IAAK,WAAWA,0BAAO;IAAvB,UAAA,CACG,QACC,oBAAC,KAAD;KAAG,IAAI;KAAS,WAAWA,0BAAO;KAC/B,UAAA;IACA,CAAA,IACD,MACH,WAAW,oBAAC,OAAD;KAAK,WAAWA,0BAAO;KAAc;IAAc,CAAA,IAAI,IAChE;;GACJ,SAAS,oBAAC,OAAD;IAAK,WAAWA,0BAAO;IAAS,UAAA;GAAY,CAAA,IAAI;GACzD,UACC,oBAAC,UAAD;IACE,MAAK;IACL,WAAWA,0BAAO;IAClB,cAAY,cAAc,EAAE,OAAO;IACnC,SAAS;IAET,UAAA,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;GAChB,CAAA,IACN;EACD;;AAET,CAAC"}
|
|
@@ -11,7 +11,7 @@ export interface BlockAlertProps extends Omit<HTMLAttributes<HTMLDivElement>, "t
|
|
|
11
11
|
icon?: ReactNode | false;
|
|
12
12
|
/** Renders a dismiss button when provided. */
|
|
13
13
|
onClose?: () => void;
|
|
14
|
-
/** Accessible label for the dismiss button. @default "Dismiss" */
|
|
14
|
+
/** Accessible label for the dismiss button. @default messages.common.dismiss ("Dismiss") */
|
|
15
15
|
closeLabel?: string;
|
|
16
16
|
/** Extra actions (e.g. a button) shown after the text. */
|
|
17
17
|
action?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockAlert.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Alert/BlockAlert.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,eAAO,MAAM,aAAa,kDAAmD,CAAC;AAE9E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,sBAAsB;IACtB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACzB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"BlockAlert.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Alert/BlockAlert.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,eAAO,MAAM,aAAa,kDAAmD,CAAC;AAE9E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,sBAAsB;IACtB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACzB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockAlert.types.js","names":[],"sources":["../../../../src/components/feedback/Alert/BlockAlert.types.ts"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\n\nexport const alertVariants = [\"success\", \"info\", \"warning\", \"error\"] as const;\n\nexport type AlertVariant = (typeof alertVariants)[number];\n\nexport interface BlockAlertProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** @default \"info\" */\n variant?: AlertVariant;\n title?: ReactNode;\n /** Description content. */\n children?: ReactNode;\n /** Custom icon, or `false` to hide it. Defaults to the variant icon. */\n icon?: ReactNode | false;\n /** Renders a dismiss button when provided. */\n onClose?: () => void;\n /** Accessible label for the dismiss button. @default \"Dismiss\" */\n closeLabel?: string;\n /** Extra actions (e.g. a button) shown after the text. */\n action?: ReactNode;\n}\n"],"mappings":";AAEA,IAAa,gBAAgB;CAAC;CAAW;CAAQ;CAAW;AAAO"}
|
|
1
|
+
{"version":3,"file":"BlockAlert.types.js","names":[],"sources":["../../../../src/components/feedback/Alert/BlockAlert.types.ts"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\n\nexport const alertVariants = [\"success\", \"info\", \"warning\", \"error\"] as const;\n\nexport type AlertVariant = (typeof alertVariants)[number];\n\nexport interface BlockAlertProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** @default \"info\" */\n variant?: AlertVariant;\n title?: ReactNode;\n /** Description content. */\n children?: ReactNode;\n /** Custom icon, or `false` to hide it. Defaults to the variant icon. */\n icon?: ReactNode | false;\n /** Renders a dismiss button when provided. */\n onClose?: () => void;\n /** Accessible label for the dismiss button. @default messages.common.dismiss (\"Dismiss\") */\n closeLabel?: string;\n /** Extra actions (e.g. a button) shown after the text. */\n action?: ReactNode;\n}\n"],"mappings":";AAEA,IAAa,gBAAgB;CAAC;CAAW;CAAQ;CAAW;AAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/ConfirmDialog/ConfirmDialog.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/ConfirmDialog/ConfirmDialog.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,OAAmB,EACnB,SAAS,EACT,QAAQ,EACR,OAAe,EACf,IAAI,EACJ,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,+BAwCpB"}
|