@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,3 +1,4 @@
|
|
|
1
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
1
2
|
import { BlockButton } from "../../actions/BlockButton/BlockButton.js";
|
|
2
3
|
import { BlockModal } from "../Modal/BlockModal.js";
|
|
3
4
|
import { useRef } from "react";
|
|
@@ -7,7 +8,8 @@ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
8
|
* Confirmation built on `BlockModal` with `role="alertdialog"`. For the
|
|
8
9
|
* `danger` variant the safe action (Cancel) receives focus first.
|
|
9
10
|
*/
|
|
10
|
-
function ConfirmDialog({ open, title, description, confirmText
|
|
11
|
+
function ConfirmDialog({ open, title, description, confirmText, cancelText, variant = "default", onConfirm, onCancel, loading = false, icon, children, className }) {
|
|
12
|
+
const m = useBlockUIMessages();
|
|
11
13
|
const cancelRef = useRef(null);
|
|
12
14
|
const confirmRef = useRef(null);
|
|
13
15
|
const danger = variant === "danger";
|
|
@@ -30,13 +32,13 @@ function ConfirmDialog({ open, title, description, confirmText = "Confirm", canc
|
|
|
30
32
|
variant: "stone",
|
|
31
33
|
onClick: onCancel,
|
|
32
34
|
disabled: loading,
|
|
33
|
-
children: cancelText
|
|
35
|
+
children: cancelText ?? m.confirmDialog.cancel
|
|
34
36
|
}), /* @__PURE__ */ jsx(BlockButton, {
|
|
35
37
|
ref: confirmRef,
|
|
36
38
|
variant: danger ? "redstone" : "grass",
|
|
37
39
|
onClick: onConfirm,
|
|
38
40
|
loading,
|
|
39
|
-
children: confirmText
|
|
41
|
+
children: confirmText ?? m.confirmDialog.confirm
|
|
40
42
|
})] }),
|
|
41
43
|
children
|
|
42
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.js","names":["_Fragment"],"sources":["../../../../src/components/feedback/ConfirmDialog/ConfirmDialog.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockModal } from \"../Modal/BlockModal\";\nimport type { ConfirmDialogProps } from \"./ConfirmDialog.types\";\n\n/**\n * Confirmation built on `BlockModal` with `role=\"alertdialog\"`. For the\n * `danger` variant the safe action (Cancel) receives focus first.\n */\nexport function ConfirmDialog({\n open,\n title,\n description,\n confirmText
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","names":["_Fragment"],"sources":["../../../../src/components/feedback/ConfirmDialog/ConfirmDialog.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport { BlockButton } from \"../../actions/BlockButton/BlockButton\";\nimport { BlockModal } from \"../Modal/BlockModal\";\nimport type { ConfirmDialogProps } from \"./ConfirmDialog.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/**\n * Confirmation built on `BlockModal` with `role=\"alertdialog\"`. For the\n * `danger` variant the safe action (Cancel) receives focus first.\n */\nexport function ConfirmDialog({\n open,\n title,\n description,\n confirmText,\n cancelText,\n variant = \"default\",\n onConfirm,\n onCancel,\n loading = false,\n icon,\n children,\n className,\n}: ConfirmDialogProps) {\n const m = useBlockUIMessages();\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const danger = variant === \"danger\";\n\n return (\n <BlockModal\n open={open}\n onClose={onCancel}\n title={title}\n description={description}\n role=\"alertdialog\"\n size=\"sm\"\n icon={icon}\n hideCloseButton\n closeOnOverlayClick={!loading}\n closeOnEscape={!loading}\n initialFocusRef={danger ? cancelRef : confirmRef}\n className={className}\n data-variant={variant}\n footer={\n <>\n <BlockButton ref={cancelRef} variant=\"stone\" onClick={onCancel} disabled={loading}>\n {cancelText ?? m.confirmDialog.cancel}\n </BlockButton>\n <BlockButton\n ref={confirmRef}\n variant={danger ? \"redstone\" : \"grass\"}\n onClick={onConfirm}\n loading={loading}\n >\n {confirmText ?? m.confirmDialog.confirm}\n </BlockButton>\n </>\n }\n >\n {children}\n </BlockModal>\n );\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,cAAc,EAC5B,MACA,OACA,aACA,aACA,YACA,UAAU,WACV,WACA,UACA,UAAU,OACV,MACA,UACA,aACqB;CACrB,MAAM,IAAI,mBAAmB;CAC7B,MAAM,YAAY,OAA0B,IAAI;CAChD,MAAM,aAAa,OAA0B,IAAI;CACjD,MAAM,SAAS,YAAY;CAE3B,OACE,oBAAC,YAAD;EACQ;EACN,SAAS;EACF;EACM;EACb,MAAK;EACL,MAAK;EACC;EACN,iBAAA;EACA,qBAAqB,CAAC;EACtB,eAAe,CAAC;EAChB,iBAAiB,SAAS,YAAY;EAC3B;EACX,gBAAc;EACd,QACE,qBAAAA,YAAA,EAAA,UAAA,CACE,oBAAC,aAAD;GAAa,KAAK;GAAW,SAAQ;GAAQ,SAAS;GAAU,UAAU;GACvE,UAAA,cAAc,EAAE,cAAc;EACpB,CAAA,GACb,oBAAC,aAAD;GACE,KAAK;GACL,SAAS,SAAS,aAAa;GAC/B,SAAS;GACA;GAER,UAAA,eAAe,EAAE,cAAc;EACrB,CAAA,CACb,EAAA,CAAA;EAGH;CACS,CAAA;AAEhB"}
|
|
@@ -3,9 +3,9 @@ export interface ConfirmDialogProps {
|
|
|
3
3
|
open: boolean;
|
|
4
4
|
title: ReactNode;
|
|
5
5
|
description?: ReactNode;
|
|
6
|
-
/** @default "Confirm" */
|
|
6
|
+
/** @default messages.confirmDialog.confirm ("Confirm") */
|
|
7
7
|
confirmText?: string;
|
|
8
|
-
/** @default "Cancel" */
|
|
8
|
+
/** @default messages.confirmDialog.cancel ("Cancel") */
|
|
9
9
|
cancelText?: string;
|
|
10
10
|
/** `danger` uses a redstone confirm button and focuses Cancel first. @default "default" */
|
|
11
11
|
variant?: "default" | "danger";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmDialog.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/ConfirmDialog/ConfirmDialog.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/ConfirmDialog/ConfirmDialog.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"Drawer.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,MAAM,wGA4EjB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
-
import { usePortalContainer } from "../../../provider/context.js";
|
|
2
|
+
import { useBlockUIMessages, usePortalContainer } from "../../../provider/context.js";
|
|
3
3
|
import { mergeRefs } from "../../../utils/refs.js";
|
|
4
4
|
import { useFocusTrap } from "../../../hooks/useFocusTrap.js";
|
|
5
5
|
import { useScrollLock } from "../../../hooks/useScrollLock.js";
|
|
@@ -14,6 +14,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
14
14
|
* like `BlockModal`: focus trap, Escape, overlay click and focus restoration.
|
|
15
15
|
*/
|
|
16
16
|
var Drawer = forwardRef(function Drawer({ open, onClose, title, children, footer, side = "right", size = "md", closeOnOverlayClick = true, closeOnEscape = true, initialFocusRef, className, ...rest }, ref) {
|
|
17
|
+
const m = useBlockUIMessages();
|
|
17
18
|
const container = usePortalContainer();
|
|
18
19
|
const panelRef = useRef(null);
|
|
19
20
|
const titleId = useId();
|
|
@@ -55,7 +56,7 @@ var Drawer = forwardRef(function Drawer({ open, onClose, title, children, footer
|
|
|
55
56
|
}), /* @__PURE__ */ jsx("button", {
|
|
56
57
|
type: "button",
|
|
57
58
|
className: Drawer_module_default.close,
|
|
58
|
-
"aria-label":
|
|
59
|
+
"aria-label": m.common.close,
|
|
59
60
|
onClick: onClose,
|
|
60
61
|
children: /* @__PURE__ */ jsx(CloseIcon, { size: 16 })
|
|
61
62
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer.js","names":["styles"],"sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["import { CloseIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, useRef, type KeyboardEvent, type MouseEvent } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../../../hooks/useFocusTrap\";\nimport { useScrollLock } from \"../../../hooks/useScrollLock\";\nimport { usePortalContainer } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { mergeRefs } from \"../../../utils/refs\";\nimport styles from \"./Drawer.module.css\";\nimport type { DrawerProps } from \"./Drawer.types\";\n\n/**\n * Panel that slides in from an edge (inventory, settings, mobile menu). Modal\n * like `BlockModal`: focus trap, Escape, overlay click and focus restoration.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n open,\n onClose,\n title,\n children,\n footer,\n side = \"right\",\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n initialFocusRef,\n className,\n ...rest\n },\n ref,\n) {\n const container = usePortalContainer();\n const panelRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n\n useFocusTrap(panelRef, open && container !== null, { initialFocus: initialFocusRef });\n useScrollLock(open);\n\n if (!open || !container) return null;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n event.stopPropagation();\n onClose();\n }\n };\n\n const handleOverlayClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && event.target === event.currentTarget) onClose();\n };\n\n return createPortal(\n <div\n role=\"presentation\"\n className={styles.overlay}\n data-side={side}\n onMouseDown={handleOverlayClick}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={mergeRefs(panelRef, ref)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n data-side={side}\n data-size={size}\n className={cx(styles.drawer, className)}\n {...rest}\n >\n <div className={styles.header}>\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n <button
|
|
1
|
+
{"version":3,"file":"Drawer.js","names":["styles"],"sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["import { CloseIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, useRef, type KeyboardEvent, type MouseEvent } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../../../hooks/useFocusTrap\";\nimport { useScrollLock } from \"../../../hooks/useScrollLock\";\nimport { useBlockUIMessages, usePortalContainer } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { mergeRefs } from \"../../../utils/refs\";\nimport styles from \"./Drawer.module.css\";\nimport type { DrawerProps } from \"./Drawer.types\";\n\n/**\n * Panel that slides in from an edge (inventory, settings, mobile menu). Modal\n * like `BlockModal`: focus trap, Escape, overlay click and focus restoration.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n open,\n onClose,\n title,\n children,\n footer,\n side = \"right\",\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n initialFocusRef,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const container = usePortalContainer();\n const panelRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n\n useFocusTrap(panelRef, open && container !== null, { initialFocus: initialFocusRef });\n useScrollLock(open);\n\n if (!open || !container) return null;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n event.stopPropagation();\n onClose();\n }\n };\n\n const handleOverlayClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && event.target === event.currentTarget) onClose();\n };\n\n return createPortal(\n <div\n role=\"presentation\"\n className={styles.overlay}\n data-side={side}\n onMouseDown={handleOverlayClick}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={mergeRefs(panelRef, ref)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n tabIndex={-1}\n data-side={side}\n data-size={size}\n className={cx(styles.drawer, className)}\n {...rest}\n >\n <div className={styles.header}>\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n <button\n type=\"button\"\n className={styles.close}\n aria-label={m.common.close}\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </button>\n </div>\n <div className={styles.body}>{children}</div>\n {footer ? <div className={styles.footer}>{footer}</div> : null}\n </div>\n </div>,\n container,\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;AAeA,IAAa,SAAS,WAAwC,SAAS,OACrE,EACE,MACA,SACA,OACA,UACA,QACA,OAAO,SACP,OAAO,MACP,sBAAsB,MACtB,gBAAgB,MAChB,iBACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,YAAY,mBAAmB;CACrC,MAAM,WAAW,OAAuB,IAAI;CAC5C,MAAM,UAAU,MAAM;CAEtB,aAAa,UAAU,QAAQ,cAAc,MAAM,EAAE,cAAc,gBAAgB,CAAC;CACpF,cAAc,IAAI;CAElB,IAAI,CAAC,QAAQ,CAAC,WAAW,OAAO;CAEhC,MAAM,iBAAiB,UAAyC;EAC9D,IAAI,MAAM,QAAQ,YAAY,eAAe;GAC3C,MAAM,gBAAgB;GACtB,QAAQ;EACV;CACF;CAEA,MAAM,sBAAsB,UAAsC;EAChE,IAAI,uBAAuB,MAAM,WAAW,MAAM,eAAe,QAAQ;CAC3E;CAEA,OAAO,aACL,oBAAC,OAAD;EACE,MAAK;EACL,WAAWA,sBAAO;EAClB,aAAW;EACX,aAAa;EACb,WAAW;EAEX,UAAA,qBAAC,OAAD;GACE,KAAK,UAAU,UAAU,GAAG;GAC5B,MAAK;GACL,cAAW;GACX,mBAAiB;GACjB,UAAU;GACV,aAAW;GACX,aAAW;GACX,WAAW,GAAGA,sBAAO,QAAQ,SAAS;GACtC,GAAI;GATN,UAAA;IAWE,qBAAC,OAAD;KAAK,WAAWA,sBAAO;KAAvB,UAAA,CACE,oBAAC,MAAD;MAAI,IAAI;MAAS,WAAWA,sBAAO;MAChC,UAAA;KACC,CAAA,GACJ,oBAAC,UAAD;MACE,MAAK;MACL,WAAWA,sBAAO;MAClB,cAAY,EAAE,OAAO;MACrB,SAAS;MAET,UAAA,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;KAChB,CAAA,CACL;;IACL,oBAAC,OAAD;KAAK,WAAWA,sBAAO;KAAO;IAAc,CAAA;IAC3C,SAAS,oBAAC,OAAD;KAAK,WAAWA,sBAAO;KAAS,UAAA;IAAY,CAAA,IAAI;GACvD;;CACF,CAAA,GACL,SACF;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockLoading.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Loading/BlockLoading.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockLoading.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Loading/BlockLoading.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,kGAAkG;AAClG,eAAO,MAAM,YAAY,8GA6BvB,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { BlockProgress } from "../Progress/BlockProgress.js";
|
|
3
4
|
import BlockLoading_module_default from "./BlockLoading.module.js";
|
|
4
5
|
import { forwardRef } from "react";
|
|
5
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
7
|
//#region src/components/feedback/Loading/BlockLoading.tsx
|
|
7
8
|
/** Loading indicator — stepping pixel blocks or a loading bar — inside a polite status region. */
|
|
8
|
-
var BlockLoading = forwardRef(function BlockLoading({ label
|
|
9
|
+
var BlockLoading = forwardRef(function BlockLoading({ label, variant = "blocks", progress, hideLabel = false, size = "md", className, ...rest }, ref) {
|
|
10
|
+
const m = useBlockUIMessages();
|
|
9
11
|
return /* @__PURE__ */ jsxs("div", {
|
|
10
12
|
ref,
|
|
11
13
|
role: "status",
|
|
@@ -25,7 +27,7 @@ var BlockLoading = forwardRef(function BlockLoading({ label = "Loading…", vari
|
|
|
25
27
|
className: BlockLoading_module_default.bar
|
|
26
28
|
}), /* @__PURE__ */ jsx("span", {
|
|
27
29
|
className: cx(BlockLoading_module_default.label, hideLabel && "block-visually-hidden"),
|
|
28
|
-
children: label
|
|
30
|
+
children: label ?? m.common.loading
|
|
29
31
|
})]
|
|
30
32
|
});
|
|
31
33
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockLoading.js","names":["styles"],"sources":["../../../../src/components/feedback/Loading/BlockLoading.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockProgress } from \"../Progress/BlockProgress\";\nimport styles from \"./BlockLoading.module.css\";\nimport type { BlockLoadingProps } from \"./BlockLoading.types\";\n\n/** Loading indicator — stepping pixel blocks or a loading bar — inside a polite status region. */\nexport const BlockLoading = forwardRef<HTMLDivElement, BlockLoadingProps>(function BlockLoading(\n {
|
|
1
|
+
{"version":3,"file":"BlockLoading.js","names":["styles"],"sources":["../../../../src/components/feedback/Loading/BlockLoading.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockProgress } from \"../Progress/BlockProgress\";\nimport styles from \"./BlockLoading.module.css\";\nimport type { BlockLoadingProps } from \"./BlockLoading.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Loading indicator — stepping pixel blocks or a loading bar — inside a polite status region. */\nexport const BlockLoading = forwardRef<HTMLDivElement, BlockLoadingProps>(function BlockLoading(\n { label, variant = \"blocks\", progress, hideLabel = false, size = \"md\", className, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n data-variant={variant}\n data-size={size}\n className={cx(styles.loading, className)}\n {...rest}\n >\n {variant === \"blocks\" ? (\n <span className={styles.blocks} aria-hidden=\"true\">\n {Array.from({ length: 4 }, (_, index) => (\n <span key={index} className={styles.block} />\n ))}\n </span>\n ) : (\n <BlockProgress value={progress} variant=\"water\" aria-hidden=\"true\" className={styles.bar} />\n )}\n <span className={cx(styles.label, hideLabel && \"block-visually-hidden\")}>\n {label ?? m.common.loading}\n </span>\n </div>\n );\n});\n"],"mappings":";;;;;;;;AAQA,IAAa,eAAe,WAA8C,SAAS,aACjF,EAAE,OAAO,UAAU,UAAU,UAAU,YAAY,OAAO,OAAO,MAAM,WAAW,GAAG,QACrF,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,OACE,qBAAC,OAAD;EACO;EACL,MAAK;EACL,aAAU;EACV,gBAAc;EACd,aAAW;EACX,WAAW,GAAGA,4BAAO,SAAS,SAAS;EACvC,GAAI;EAPN,UAAA,CASG,YAAY,WACX,oBAAC,QAAD;GAAM,WAAWA,4BAAO;GAAQ,eAAY;GACzC,UAAA,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,UAC7B,oBAAC,QAAD,EAAkB,WAAWA,4BAAO,MAAQ,GAAjC,KAAiC,CAC7C;EACG,CAAA,IAEN,oBAAC,eAAD;GAAe,OAAO;GAAU,SAAQ;GAAQ,eAAY;GAAO,WAAWA,4BAAO;EAAM,CAAA,GAE7F,oBAAC,QAAD;GAAM,WAAW,GAAGA,4BAAO,OAAO,aAAa,uBAAuB;GACnE,UAAA,SAAS,EAAE,OAAO;EACf,CAAA,CACH;;AAET,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { HTMLAttributes } from "react";
|
|
2
2
|
export interface BlockLoadingProps extends HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
/** Status text (announced politely). @default "Loading…" */
|
|
3
|
+
/** Status text (announced politely). @default messages.common.loading ("Loading…") */
|
|
4
4
|
label?: string;
|
|
5
5
|
/** `blocks` — stepping pixel blocks; `bar` — indeterminate or determinate bar. @default "blocks" */
|
|
6
6
|
variant?: "blocks" | "bar";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockLoading.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Loading/BlockLoading.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACvE,
|
|
1
|
+
{"version":3,"file":"BlockLoading.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Loading/BlockLoading.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACvE,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oGAAoG;IACpG,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockModal.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Modal/BlockModal.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"BlockModal.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Modal/BlockModal.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4GA8FrB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
-
import { usePortalContainer } from "../../../provider/context.js";
|
|
2
|
+
import { useBlockUIMessages, usePortalContainer } from "../../../provider/context.js";
|
|
3
3
|
import { mergeRefs } from "../../../utils/refs.js";
|
|
4
4
|
import { useFocusTrap } from "../../../hooks/useFocusTrap.js";
|
|
5
5
|
import { useScrollLock } from "../../../hooks/useScrollLock.js";
|
|
@@ -14,6 +14,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
14
14
|
* restoration and `aria-modal` dialog semantics (PRD §45).
|
|
15
15
|
*/
|
|
16
16
|
var BlockModal = forwardRef(function BlockModal({ open, onClose, title, description, children, footer, size = "md", closeOnOverlayClick = true, closeOnEscape = true, hideCloseButton = false, initialFocusRef, role = "dialog", icon, className, ...rest }, ref) {
|
|
17
|
+
const m = useBlockUIMessages();
|
|
17
18
|
const container = usePortalContainer();
|
|
18
19
|
const dialogRef = useRef(null);
|
|
19
20
|
const titleId = useId();
|
|
@@ -55,7 +56,7 @@ var BlockModal = forwardRef(function BlockModal({ open, onClose, title, descript
|
|
|
55
56
|
}), hideCloseButton ? null : /* @__PURE__ */ jsx("button", {
|
|
56
57
|
type: "button",
|
|
57
58
|
className: BlockModal_module_default.close,
|
|
58
|
-
"aria-label":
|
|
59
|
+
"aria-label": m.common.close,
|
|
59
60
|
onClick: onClose,
|
|
60
61
|
children: /* @__PURE__ */ jsx(CloseIcon, { size: 16 })
|
|
61
62
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockModal.js","names":["styles"],"sources":["../../../../src/components/feedback/Modal/BlockModal.tsx"],"sourcesContent":["import { CloseIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, useRef, type KeyboardEvent, type MouseEvent } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../../../hooks/useFocusTrap\";\nimport { useScrollLock } from \"../../../hooks/useScrollLock\";\nimport { usePortalContainer } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { mergeRefs } from \"../../../utils/refs\";\nimport styles from \"./BlockModal.module.css\";\nimport type { BlockModalProps } from \"./BlockModal.types\";\n\n/**\n * Accessible modal dialog: focus trap, `Escape` to close, overlay, focus\n * restoration and `aria-modal` dialog semantics (PRD §45).\n */\nexport const BlockModal = forwardRef<HTMLDivElement, BlockModalProps>(function BlockModal(\n {\n open,\n onClose,\n title,\n description,\n children,\n footer,\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n hideCloseButton = false,\n initialFocusRef,\n role = \"dialog\",\n icon,\n className,\n ...rest\n },\n ref,\n) {\n const container = usePortalContainer();\n const dialogRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n useFocusTrap(dialogRef, open && container !== null, { initialFocus: initialFocusRef });\n\n useScrollLock(open);\n\n if (!open || !container) return null;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n event.stopPropagation();\n onClose();\n }\n };\n\n const handleOverlayClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && event.target === event.currentTarget) onClose();\n };\n\n return createPortal(\n <div\n role=\"presentation\"\n className={styles.overlay}\n onMouseDown={handleOverlayClick}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={mergeRefs(dialogRef, ref)}\n role={role}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n data-size={size}\n className={cx(styles.dialog, className)}\n {...rest}\n >\n <div className={styles.header}>\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n {hideCloseButton ? null : (\n <button
|
|
1
|
+
{"version":3,"file":"BlockModal.js","names":["styles"],"sources":["../../../../src/components/feedback/Modal/BlockModal.tsx"],"sourcesContent":["import { CloseIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useId, useRef, type KeyboardEvent, type MouseEvent } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFocusTrap } from \"../../../hooks/useFocusTrap\";\nimport { useScrollLock } from \"../../../hooks/useScrollLock\";\nimport { useBlockUIMessages, usePortalContainer } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { mergeRefs } from \"../../../utils/refs\";\nimport styles from \"./BlockModal.module.css\";\nimport type { BlockModalProps } from \"./BlockModal.types\";\n\n/**\n * Accessible modal dialog: focus trap, `Escape` to close, overlay, focus\n * restoration and `aria-modal` dialog semantics (PRD §45).\n */\nexport const BlockModal = forwardRef<HTMLDivElement, BlockModalProps>(function BlockModal(\n {\n open,\n onClose,\n title,\n description,\n children,\n footer,\n size = \"md\",\n closeOnOverlayClick = true,\n closeOnEscape = true,\n hideCloseButton = false,\n initialFocusRef,\n role = \"dialog\",\n icon,\n className,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const container = usePortalContainer();\n const dialogRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n useFocusTrap(dialogRef, open && container !== null, { initialFocus: initialFocusRef });\n\n useScrollLock(open);\n\n if (!open || !container) return null;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\" && closeOnEscape) {\n event.stopPropagation();\n onClose();\n }\n };\n\n const handleOverlayClick = (event: MouseEvent<HTMLDivElement>) => {\n if (closeOnOverlayClick && event.target === event.currentTarget) onClose();\n };\n\n return createPortal(\n <div\n role=\"presentation\"\n className={styles.overlay}\n onMouseDown={handleOverlayClick}\n onKeyDown={handleKeyDown}\n >\n <div\n ref={mergeRefs(dialogRef, ref)}\n role={role}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n data-size={size}\n className={cx(styles.dialog, className)}\n {...rest}\n >\n <div className={styles.header}>\n <h2 id={titleId} className={styles.title}>\n {title}\n </h2>\n {hideCloseButton ? null : (\n <button\n type=\"button\"\n className={styles.close}\n aria-label={m.common.close}\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </button>\n )}\n </div>\n <div className={styles.body}>\n {icon ? (\n <div className={styles.icon} aria-hidden=\"true\">\n {icon}\n </div>\n ) : null}\n {description ? (\n <div id={descriptionId} className={styles.description}>\n {description}\n </div>\n ) : null}\n {children}\n </div>\n {footer ? <div className={styles.footer}>{footer}</div> : null}\n </div>\n </div>,\n container,\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;AAeA,IAAa,aAAa,WAA4C,SAAS,WAC7E,EACE,MACA,SACA,OACA,aACA,UACA,QACA,OAAO,MACP,sBAAsB,MACtB,gBAAgB,MAChB,kBAAkB,OAClB,iBACA,OAAO,UACP,MACA,WACA,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,YAAY,mBAAmB;CACrC,MAAM,YAAY,OAAuB,IAAI;CAC7C,MAAM,UAAU,MAAM;CACtB,MAAM,gBAAgB,MAAM;CAE5B,aAAa,WAAW,QAAQ,cAAc,MAAM,EAAE,cAAc,gBAAgB,CAAC;CAErF,cAAc,IAAI;CAElB,IAAI,CAAC,QAAQ,CAAC,WAAW,OAAO;CAEhC,MAAM,iBAAiB,UAAyC;EAC9D,IAAI,MAAM,QAAQ,YAAY,eAAe;GAC3C,MAAM,gBAAgB;GACtB,QAAQ;EACV;CACF;CAEA,MAAM,sBAAsB,UAAsC;EAChE,IAAI,uBAAuB,MAAM,WAAW,MAAM,eAAe,QAAQ;CAC3E;CAEA,OAAO,aACL,oBAAC,OAAD;EACE,MAAK;EACL,WAAWA,0BAAO;EAClB,aAAa;EACb,WAAW;EAEX,UAAA,qBAAC,OAAD;GACE,KAAK,UAAU,WAAW,GAAG;GACvB;GACN,cAAW;GACX,mBAAiB;GACjB,oBAAkB,cAAc,gBAAgB,KAAA;GAChD,UAAU;GACV,aAAW;GACX,WAAW,GAAGA,0BAAO,QAAQ,SAAS;GACtC,GAAI;GATN,UAAA;IAWE,qBAAC,OAAD;KAAK,WAAWA,0BAAO;KAAvB,UAAA,CACE,oBAAC,MAAD;MAAI,IAAI;MAAS,WAAWA,0BAAO;MAChC,UAAA;KACC,CAAA,GACH,kBAAkB,OACjB,oBAAC,UAAD;MACE,MAAK;MACL,WAAWA,0BAAO;MAClB,cAAY,EAAE,OAAO;MACrB,SAAS;MAET,UAAA,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;KAChB,CAAA,CAEP;;IACL,qBAAC,OAAD;KAAK,WAAWA,0BAAO;KAAvB,UAAA;MACG,OACC,oBAAC,OAAD;OAAK,WAAWA,0BAAO;OAAM,eAAY;OACtC,UAAA;MACE,CAAA,IACH;MACH,cACC,oBAAC,OAAD;OAAK,IAAI;OAAe,WAAWA,0BAAO;OACvC,UAAA;MACE,CAAA,IACH;MACH;KACE;;IACJ,SAAS,oBAAC,OAAD;KAAK,WAAWA,0BAAO;KAAS,UAAA;IAAY,CAAA,IAAI;GACvD;;CACF,CAAA,GACL,SACF;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Progress/BlockProgress.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Progress/BlockProgress.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAKhE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,+GA2DxB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { ratio } from "../../../utils/number.js";
|
|
3
4
|
import BlockProgress_module_default from "./BlockProgress.module.js";
|
|
4
5
|
import { forwardRef, useId } from "react";
|
|
@@ -7,6 +8,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
8
|
var percentFormat = (value, max) => `${Math.round(ratio(value, max) * 100)}%`;
|
|
8
9
|
/** Segmented pixel progress bar. Omit `value` for an indeterminate bar. */
|
|
9
10
|
var BlockProgress = forwardRef(function BlockProgress({ value, max = 100, variant = "grass", label, showValue = false, size = "md", formatValue = percentFormat, className, "aria-label": ariaLabel, ...rest }, ref) {
|
|
11
|
+
const m = useBlockUIMessages();
|
|
10
12
|
const labelId = useId();
|
|
11
13
|
const indeterminate = value === void 0;
|
|
12
14
|
const current = indeterminate ? 0 : Math.max(0, Math.min(value, max));
|
|
@@ -28,7 +30,7 @@ var BlockProgress = forwardRef(function BlockProgress({ value, max = 100, varian
|
|
|
28
30
|
ref,
|
|
29
31
|
role: "progressbar",
|
|
30
32
|
"aria-labelledby": label ? labelId : void 0,
|
|
31
|
-
"aria-label": label ? void 0 : ariaLabel ??
|
|
33
|
+
"aria-label": label ? void 0 : ariaLabel ?? m.common.progress,
|
|
32
34
|
"aria-valuemin": indeterminate ? void 0 : 0,
|
|
33
35
|
"aria-valuemax": indeterminate ? void 0 : max,
|
|
34
36
|
"aria-valuenow": indeterminate ? void 0 : current,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockProgress.js","names":["styles"],"sources":["../../../../src/components/feedback/Progress/BlockProgress.tsx"],"sourcesContent":["import { forwardRef, useId, type CSSProperties } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { ratio } from \"../../../utils/number\";\nimport styles from \"./BlockProgress.module.css\";\nimport type { BlockProgressProps } from \"./BlockProgress.types\";\n\nconst percentFormat = (value: number, max: number) => `${Math.round(ratio(value, max) * 100)}%`;\n\n/** Segmented pixel progress bar. Omit `value` for an indeterminate bar. */\nexport const BlockProgress = forwardRef<HTMLDivElement, BlockProgressProps>(function BlockProgress(\n {\n value,\n max = 100,\n variant = \"grass\",\n label,\n showValue = false,\n size = \"md\",\n formatValue = percentFormat,\n className,\n \"aria-label\": ariaLabel,\n ...rest\n },\n ref,\n) {\n const labelId = useId();\n const indeterminate = value === undefined;\n const current = indeterminate ? 0 : Math.max(0, Math.min(value, max));\n const text = indeterminate ? undefined : formatValue(current, max);\n\n return (\n <div className={cx(styles.root, className)}>\n {label || (showValue && text) ? (\n <div className={styles.header}>\n {label ? (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n ) : null}\n {showValue && text ? (\n <span className={styles.value} aria-hidden=\"true\">\n {text}\n </span>\n ) : null}\n </div>\n ) : null}\n <div\n ref={ref}\n role=\"progressbar\"\n aria-labelledby={label ? labelId : undefined}\n aria-label={label ? undefined : (ariaLabel ??
|
|
1
|
+
{"version":3,"file":"BlockProgress.js","names":["styles"],"sources":["../../../../src/components/feedback/Progress/BlockProgress.tsx"],"sourcesContent":["import { forwardRef, useId, type CSSProperties } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport { ratio } from \"../../../utils/number\";\nimport styles from \"./BlockProgress.module.css\";\nimport type { BlockProgressProps } from \"./BlockProgress.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\nconst percentFormat = (value: number, max: number) => `${Math.round(ratio(value, max) * 100)}%`;\n\n/** Segmented pixel progress bar. Omit `value` for an indeterminate bar. */\nexport const BlockProgress = forwardRef<HTMLDivElement, BlockProgressProps>(function BlockProgress(\n {\n value,\n max = 100,\n variant = \"grass\",\n label,\n showValue = false,\n size = \"md\",\n formatValue = percentFormat,\n className,\n \"aria-label\": ariaLabel,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const labelId = useId();\n const indeterminate = value === undefined;\n const current = indeterminate ? 0 : Math.max(0, Math.min(value, max));\n const text = indeterminate ? undefined : formatValue(current, max);\n\n return (\n <div className={cx(styles.root, className)}>\n {label || (showValue && text) ? (\n <div className={styles.header}>\n {label ? (\n <span id={labelId} className={styles.label}>\n {label}\n </span>\n ) : null}\n {showValue && text ? (\n <span className={styles.value} aria-hidden=\"true\">\n {text}\n </span>\n ) : null}\n </div>\n ) : null}\n <div\n ref={ref}\n role=\"progressbar\"\n aria-labelledby={label ? labelId : undefined}\n aria-label={label ? undefined : (ariaLabel ?? m.common.progress)}\n aria-valuemin={indeterminate ? undefined : 0}\n aria-valuemax={indeterminate ? undefined : max}\n aria-valuenow={indeterminate ? undefined : current}\n aria-valuetext={text}\n aria-busy={indeterminate || undefined}\n data-material={variant}\n data-size={size}\n data-indeterminate={indeterminate || undefined}\n className={styles.track}\n style={{ \"--block-progress\": `${ratio(current, max) * 100}%` } as CSSProperties}\n {...rest}\n >\n <span className={styles.fill} />\n <span className={styles.segments} />\n </div>\n </div>\n );\n});\n"],"mappings":";;;;;;;AAOA,IAAM,iBAAiB,OAAe,QAAgB,GAAG,KAAK,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;;AAG7F,IAAa,gBAAgB,WAA+C,SAAS,cACnF,EACE,OACA,MAAM,KACN,UAAU,SACV,OACA,YAAY,OACZ,OAAO,MACP,cAAc,eACd,WACA,cAAc,WACd,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,UAAU,MAAM;CACtB,MAAM,gBAAgB,UAAU,KAAA;CAChC,MAAM,UAAU,gBAAgB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,OAAO,GAAG,CAAC;CACpE,MAAM,OAAO,gBAAgB,KAAA,IAAY,YAAY,SAAS,GAAG;CAEjE,OACE,qBAAC,OAAD;EAAK,WAAW,GAAGA,6BAAO,MAAM,SAAS;EAAzC,UAAA,CACG,SAAU,aAAa,OACtB,qBAAC,OAAD;GAAK,WAAWA,6BAAO;GAAvB,UAAA,CACG,QACC,oBAAC,QAAD;IAAM,IAAI;IAAS,WAAWA,6BAAO;IAClC,UAAA;GACG,CAAA,IACJ,MACH,aAAa,OACZ,oBAAC,QAAD;IAAM,WAAWA,6BAAO;IAAO,eAAY;IACxC,UAAA;GACG,CAAA,IACJ,IACD;EACH,CAAA,IAAA,MACJ,qBAAC,OAAD;GACO;GACL,MAAK;GACL,mBAAiB,QAAQ,UAAU,KAAA;GACnC,cAAY,QAAQ,KAAA,IAAa,aAAa,EAAE,OAAO;GACvD,iBAAe,gBAAgB,KAAA,IAAY;GAC3C,iBAAe,gBAAgB,KAAA,IAAY;GAC3C,iBAAe,gBAAgB,KAAA,IAAY;GAC3C,kBAAgB;GAChB,aAAW,iBAAiB,KAAA;GAC5B,iBAAe;GACf,aAAW;GACX,sBAAoB,iBAAiB,KAAA;GACrC,WAAWA,6BAAO;GAClB,OAAO,EAAE,oBAAoB,GAAG,MAAM,SAAS,GAAG,IAAI,IAAI,GAAG;GAC7D,GAAI;GAfN,UAAA,CAiBE,oBAAC,QAAD,EAAM,WAAWA,6BAAO,KAAO,CAAA,GAC/B,oBAAC,QAAD,EAAM,WAAWA,6BAAO,SAAW,CAAA,CAChC;EACF,CAAA,CAAA;;AAET,CAAC"}
|
|
@@ -3,5 +3,5 @@ import type { BlockToasterProps } from "./Toast.types";
|
|
|
3
3
|
* Renders the stack of toasts created with `toast.*()` inside an ARIA live
|
|
4
4
|
* region. Hover or focus pauses auto-close; `Escape` dismisses the focused toast.
|
|
5
5
|
*/
|
|
6
|
-
export declare function BlockToaster({ limit, label, className
|
|
6
|
+
export declare function BlockToaster({ limit, label, className }: BlockToasterProps): import("react").ReactPortal | null;
|
|
7
7
|
//# sourceMappingURL=Toast.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Toast/Toast.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Toast/Toast.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,eAAe,CAAC;AA0DpE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAA2B,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,iBAAiB,sCAiBhG"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
-
import { usePortalContainer } from "../../../provider/context.js";
|
|
2
|
+
import { useBlockUIMessages, usePortalContainer } from "../../../provider/context.js";
|
|
3
3
|
import { BlockAlert } from "../Alert/BlockAlert.js";
|
|
4
4
|
import { toast } from "./store.js";
|
|
5
5
|
import Toast_module_default from "./Toast.module.js";
|
|
@@ -9,6 +9,7 @@ import { createPortal } from "react-dom";
|
|
|
9
9
|
import { jsx } from "react/jsx-runtime";
|
|
10
10
|
//#region src/components/feedback/Toast/Toast.tsx
|
|
11
11
|
function ToastItem({ record }) {
|
|
12
|
+
const m = useBlockUIMessages();
|
|
12
13
|
const [paused, setPaused] = useState(false);
|
|
13
14
|
const remaining = useRef(record.duration);
|
|
14
15
|
const startedAt = useRef(0);
|
|
@@ -49,7 +50,7 @@ function ToastItem({ record }) {
|
|
|
49
50
|
title: record.title,
|
|
50
51
|
action: record.action,
|
|
51
52
|
onClose: close,
|
|
52
|
-
closeLabel:
|
|
53
|
+
closeLabel: m.toast.dismiss,
|
|
53
54
|
className: Toast_module_default.toast,
|
|
54
55
|
children: record.message
|
|
55
56
|
})
|
|
@@ -59,12 +60,13 @@ function ToastItem({ record }) {
|
|
|
59
60
|
* Renders the stack of toasts created with `toast.*()` inside an ARIA live
|
|
60
61
|
* region. Hover or focus pauses auto-close; `Escape` dismisses the focused toast.
|
|
61
62
|
*/
|
|
62
|
-
function BlockToaster({ limit = 5, label
|
|
63
|
+
function BlockToaster({ limit = 5, label, className }) {
|
|
64
|
+
const m = useBlockUIMessages();
|
|
63
65
|
const records = useToasts();
|
|
64
66
|
const container = usePortalContainer();
|
|
65
67
|
const visible = records.slice(-limit);
|
|
66
68
|
const region = /* @__PURE__ */ jsx("section", {
|
|
67
|
-
"aria-label": label,
|
|
69
|
+
"aria-label": label ?? m.toast.region,
|
|
68
70
|
className: cx(Toast_module_default.region, className),
|
|
69
71
|
children: /* @__PURE__ */ jsx("ol", {
|
|
70
72
|
className: Toast_module_default.list,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","names":["styles"],"sources":["../../../../src/components/feedback/Toast/Toast.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type KeyboardEvent } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalContainer } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockAlert } from \"../Alert/BlockAlert\";\nimport { DEFAULT_TOAST_LIMIT, toast } from \"./store\";\nimport styles from \"./Toast.module.css\";\nimport type { BlockToasterProps, ToastRecord } from \"./Toast.types\";\nimport { useToasts } from \"./useToasts\";\n\nfunction ToastItem({ record }: { record: ToastRecord }) {\n const [paused, setPaused] = useState(false);\n const remaining = useRef(record.duration);\n const startedAt = useRef(0);\n const persistent = !Number.isFinite(record.duration) || record.duration <= 0;\n const close = useCallback(() => toast.dismiss(record.id), [record.id]);\n\n useEffect(() => {\n remaining.current = record.duration;\n }, [record.duration]);\n\n useEffect(() => {\n if (persistent || paused) return undefined;\n startedAt.current = Date.now();\n const timer = window.setTimeout(close, remaining.current);\n return () => {\n window.clearTimeout(timer);\n remaining.current -= Date.now() - startedAt.current;\n };\n }, [persistent, paused, close]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLLIElement>) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n close();\n }\n };\n\n return (\n // Pausing auto-dismiss on hover/focus is standard toast UX\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <li\n className={styles.item}\n data-toast-id={record.id}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={() => setPaused(false)}\n onKeyDown={onKeyDown}\n >\n <BlockAlert\n variant={record.variant}\n title={record.title}\n action={record.action}\n onClose={close}\n closeLabel
|
|
1
|
+
{"version":3,"file":"Toast.js","names":["styles"],"sources":["../../../../src/components/feedback/Toast/Toast.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type KeyboardEvent } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useBlockUIMessages, usePortalContainer } from \"../../../provider/context\";\nimport { cx } from \"../../../utils/cx\";\nimport { BlockAlert } from \"../Alert/BlockAlert\";\nimport { DEFAULT_TOAST_LIMIT, toast } from \"./store\";\nimport styles from \"./Toast.module.css\";\nimport type { BlockToasterProps, ToastRecord } from \"./Toast.types\";\nimport { useToasts } from \"./useToasts\";\n\nfunction ToastItem({ record }: { record: ToastRecord }) {\n const m = useBlockUIMessages();\n const [paused, setPaused] = useState(false);\n const remaining = useRef(record.duration);\n const startedAt = useRef(0);\n const persistent = !Number.isFinite(record.duration) || record.duration <= 0;\n const close = useCallback(() => toast.dismiss(record.id), [record.id]);\n\n useEffect(() => {\n remaining.current = record.duration;\n }, [record.duration]);\n\n useEffect(() => {\n if (persistent || paused) return undefined;\n startedAt.current = Date.now();\n const timer = window.setTimeout(close, remaining.current);\n return () => {\n window.clearTimeout(timer);\n remaining.current -= Date.now() - startedAt.current;\n };\n }, [persistent, paused, close]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLLIElement>) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n close();\n }\n };\n\n return (\n // Pausing auto-dismiss on hover/focus is standard toast UX\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <li\n className={styles.item}\n data-toast-id={record.id}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={() => setPaused(false)}\n onKeyDown={onKeyDown}\n >\n <BlockAlert\n variant={record.variant}\n title={record.title}\n action={record.action}\n onClose={close}\n closeLabel={m.toast.dismiss}\n className={styles.toast}\n >\n {record.message}\n </BlockAlert>\n </li>\n );\n}\n\n/**\n * Renders the stack of toasts created with `toast.*()` inside an ARIA live\n * region. Hover or focus pauses auto-close; `Escape` dismisses the focused toast.\n */\nexport function BlockToaster({ limit = DEFAULT_TOAST_LIMIT, label, className }: BlockToasterProps) {\n const m = useBlockUIMessages();\n const records = useToasts();\n const container = usePortalContainer();\n const visible = records.slice(-limit);\n\n const region = (\n <section aria-label={label ?? m.toast.region} className={cx(styles.region, className)}>\n <ol className={styles.list} aria-live=\"polite\" aria-relevant=\"additions text\">\n {visible.map((record) => (\n <ToastItem key={record.id} record={record} />\n ))}\n </ol>\n </section>\n );\n\n return container ? createPortal(region, container) : null;\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAS,UAAU,EAAE,UAAmC;CACtD,MAAM,IAAI,mBAAmB;CAC7B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAC1C,MAAM,YAAY,OAAO,OAAO,QAAQ;CACxC,MAAM,YAAY,OAAO,CAAC;CAC1B,MAAM,aAAa,CAAC,OAAO,SAAS,OAAO,QAAQ,KAAK,OAAO,YAAY;CAC3E,MAAM,QAAQ,kBAAkB,MAAM,QAAQ,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;CAErE,gBAAgB;EACd,UAAU,UAAU,OAAO;CAC7B,GAAG,CAAC,OAAO,QAAQ,CAAC;CAEpB,gBAAgB;EACd,IAAI,cAAc,QAAQ,OAAO,KAAA;EACjC,UAAU,UAAU,KAAK,IAAI;EAC7B,MAAM,QAAQ,OAAO,WAAW,OAAO,UAAU,OAAO;EACxD,aAAa;GACX,OAAO,aAAa,KAAK;GACzB,UAAU,WAAW,KAAK,IAAI,IAAI,UAAU;EAC9C;CACF,GAAG;EAAC;EAAY;EAAQ;CAAK,CAAC;CAE9B,MAAM,aAAa,UAAwC;EACzD,IAAI,MAAM,QAAQ,UAAU;GAC1B,MAAM,gBAAgB;GACtB,MAAM;EACR;CACF;CAEA,OAGE,oBAAC,MAAD;EACE,WAAWA,qBAAO;EAClB,iBAAe,OAAO;EACtB,oBAAoB,UAAU,IAAI;EAClC,oBAAoB,UAAU,KAAK;EACnC,eAAe,UAAU,IAAI;EAC7B,cAAc,UAAU,KAAK;EAClB;EAEX,UAAA,oBAAC,YAAD;GACE,SAAS,OAAO;GAChB,OAAO,OAAO;GACd,QAAQ,OAAO;GACf,SAAS;GACT,YAAY,EAAE,MAAM;GACpB,WAAWA,qBAAO;GAEjB,UAAA,OAAO;EACE,CAAA;CACV,CAAA;AAER;;;;;AAMA,SAAgB,aAAa,EAAE,QAAA,GAA6B,OAAO,aAAgC;CACjG,MAAM,IAAI,mBAAmB;CAC7B,MAAM,UAAU,UAAU;CAC1B,MAAM,YAAY,mBAAmB;CACrC,MAAM,UAAU,QAAQ,MAAM,CAAC,KAAK;CAEpC,MAAM,SACJ,oBAAC,WAAD;EAAS,cAAY,SAAS,EAAE,MAAM;EAAQ,WAAW,GAAGA,qBAAO,QAAQ,SAAS;EAClF,UAAA,oBAAC,MAAD;GAAI,WAAWA,qBAAO;GAAM,aAAU;GAAS,iBAAc;GAC1D,UAAA,QAAQ,KAAK,WACZ,oBAAC,WAAD,EAAmC,OAAS,GAA5B,OAAO,EAAqB,CAC7C;EACC,CAAA;CACG,CAAA;CAGX,OAAO,YAAY,aAAa,QAAQ,SAAS,IAAI;AACvD"}
|
|
@@ -22,7 +22,7 @@ export interface ToastRecord {
|
|
|
22
22
|
export interface BlockToasterProps {
|
|
23
23
|
/** Maximum toasts kept on screen; older ones are dropped. @default 5 */
|
|
24
24
|
limit?: number;
|
|
25
|
-
/** Accessible name of the notification region. @default "Notifications" */
|
|
25
|
+
/** Accessible name of the notification region. @default messages.toast.region ("Notifications") */
|
|
26
26
|
label?: string;
|
|
27
27
|
className?: string;
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Toast/Toast.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"Toast.types.d.ts","sourceRoot":"","sources":["../../../../src/components/feedback/Toast/Toast.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/NumberInput/NumberInput.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../../../src/components/forms/NumberInput/NumberInput.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI5D;;;;GAIG;AACH,eAAO,MAAM,WAAW,+GAoItB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import { Field } from "../Field/Field.js";
|
|
3
4
|
import control_module_default from "../Field/control.module.js";
|
|
4
5
|
import { useControllableState } from "../../../hooks/useControllableState.js";
|
|
@@ -14,6 +15,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
14
15
|
* clamped and rounded when committed (step, Enter or blur).
|
|
15
16
|
*/
|
|
16
17
|
var NumberInput = forwardRef(function NumberInput({ id, label, error, success, helperText, value, defaultValue = null, onValueChange, min, max, step = 1, disabled, required, className, wrapperClassName, onBlur, onKeyDown, "aria-describedby": ariaDescribedBy, ...rest }, ref) {
|
|
18
|
+
const m = useBlockUIMessages();
|
|
17
19
|
const [current, setCurrent] = useControllableState({
|
|
18
20
|
value,
|
|
19
21
|
defaultValue,
|
|
@@ -69,7 +71,7 @@ var NumberInput = forwardRef(function NumberInput({ id, label, error, success, h
|
|
|
69
71
|
/* @__PURE__ */ jsx("button", {
|
|
70
72
|
type: "button",
|
|
71
73
|
tabIndex: -1,
|
|
72
|
-
"aria-label":
|
|
74
|
+
"aria-label": m.numberInput.decrease,
|
|
73
75
|
"aria-controls": inputId,
|
|
74
76
|
disabled: disabled || atMin,
|
|
75
77
|
className: NumberInput_module_default.button,
|
|
@@ -104,7 +106,7 @@ var NumberInput = forwardRef(function NumberInput({ id, label, error, success, h
|
|
|
104
106
|
/* @__PURE__ */ jsx("button", {
|
|
105
107
|
type: "button",
|
|
106
108
|
tabIndex: -1,
|
|
107
|
-
"aria-label":
|
|
109
|
+
"aria-label": m.numberInput.increase,
|
|
108
110
|
"aria-controls": inputId,
|
|
109
111
|
disabled: disabled || atMax,
|
|
110
112
|
className: NumberInput_module_default.button,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.js","names":["styles","control"],"sources":["../../../../src/components/forms/NumberInput/NumberInput.tsx"],"sourcesContent":["import { MinusIcon, PlusIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useState, type KeyboardEvent } from \"react\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { cx } from \"../../../utils/cx\";\nimport { Field } from \"../Field/Field\";\nimport control from \"../Field/control.module.css\";\nimport styles from \"./NumberInput.module.css\";\nimport type { NumberInputProps } from \"./NumberInput.types\";\nimport { normalizeNumber, parseNumber, stepPrecision } from \"./NumberInput.utils\";\n\n/**\n * Number field with − / + buttons, following the WAI-ARIA spinbutton pattern:\n * ↑ / ↓ step, Page Up / Down step ×10, Home / End jump to min / max. Values are\n * clamped and rounded when committed (step, Enter or blur).\n */\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n {\n id,\n label,\n error,\n success,\n helperText,\n value,\n defaultValue = null,\n onValueChange,\n min,\n max,\n step = 1,\n disabled,\n required,\n className,\n wrapperClassName,\n onBlur,\n onKeyDown,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n },\n ref,\n) {\n const [current, setCurrent] = useControllableState<number | null>({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n const [draft, setDraft] = useState<string | null>(null);\n const precision = stepPrecision(step);\n const format = (n: number | null) => (n === null ? \"\" : n.toFixed(precision));\n\n const commit = (next: number | null) => {\n const normalized = next === null ? null : normalizeNumber(next, { min, max, step });\n setDraft(null);\n if (normalized !== current) setCurrent(normalized);\n };\n\n const base = () => {\n const parsed = draft !== null ? parseNumber(draft) : current;\n return parsed ?? min ?? 0;\n };\n const stepBy = (amount: number) => {\n if (disabled) return;\n commit(base() + amount);\n };\n\n const atMin = current !== null && min !== undefined && current <= min;\n const atMax = current !== null && max !== undefined && current >= max;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n let handled = true;\n if (event.key === \"ArrowUp\") stepBy(step);\n else if (event.key === \"ArrowDown\") stepBy(-step);\n else if (event.key === \"PageUp\") stepBy(step * 10);\n else if (event.key === \"PageDown\") stepBy(-step * 10);\n else if (event.key === \"Home\" && min !== undefined) commit(min);\n else if (event.key === \"End\" && max !== undefined) commit(max);\n else if (event.key === \"Enter\" && draft !== null) commit(parseNumber(draft));\n else handled = false;\n if (handled) event.preventDefault();\n };\n\n return (\n <Field\n id={id}\n label={label}\n error={error}\n success={success}\n helperText={helperText}\n disabled={disabled}\n required={required}\n className={wrapperClassName}\n >\n {({ inputId, describedBy, invalid }) => (\n <div className={styles.wrapper}>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label
|
|
1
|
+
{"version":3,"file":"NumberInput.js","names":["styles","control"],"sources":["../../../../src/components/forms/NumberInput/NumberInput.tsx"],"sourcesContent":["import { MinusIcon, PlusIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef, useState, type KeyboardEvent } from \"react\";\nimport { useControllableState } from \"../../../hooks/useControllableState\";\nimport { cx } from \"../../../utils/cx\";\nimport { Field } from \"../Field/Field\";\nimport control from \"../Field/control.module.css\";\nimport styles from \"./NumberInput.module.css\";\nimport type { NumberInputProps } from \"./NumberInput.types\";\nimport { normalizeNumber, parseNumber, stepPrecision } from \"./NumberInput.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/**\n * Number field with − / + buttons, following the WAI-ARIA spinbutton pattern:\n * ↑ / ↓ step, Page Up / Down step ×10, Home / End jump to min / max. Values are\n * clamped and rounded when committed (step, Enter or blur).\n */\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(function NumberInput(\n {\n id,\n label,\n error,\n success,\n helperText,\n value,\n defaultValue = null,\n onValueChange,\n min,\n max,\n step = 1,\n disabled,\n required,\n className,\n wrapperClassName,\n onBlur,\n onKeyDown,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n },\n ref,\n) {\n const m = useBlockUIMessages();\n const [current, setCurrent] = useControllableState<number | null>({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n const [draft, setDraft] = useState<string | null>(null);\n const precision = stepPrecision(step);\n const format = (n: number | null) => (n === null ? \"\" : n.toFixed(precision));\n\n const commit = (next: number | null) => {\n const normalized = next === null ? null : normalizeNumber(next, { min, max, step });\n setDraft(null);\n if (normalized !== current) setCurrent(normalized);\n };\n\n const base = () => {\n const parsed = draft !== null ? parseNumber(draft) : current;\n return parsed ?? min ?? 0;\n };\n const stepBy = (amount: number) => {\n if (disabled) return;\n commit(base() + amount);\n };\n\n const atMin = current !== null && min !== undefined && current <= min;\n const atMax = current !== null && max !== undefined && current >= max;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n let handled = true;\n if (event.key === \"ArrowUp\") stepBy(step);\n else if (event.key === \"ArrowDown\") stepBy(-step);\n else if (event.key === \"PageUp\") stepBy(step * 10);\n else if (event.key === \"PageDown\") stepBy(-step * 10);\n else if (event.key === \"Home\" && min !== undefined) commit(min);\n else if (event.key === \"End\" && max !== undefined) commit(max);\n else if (event.key === \"Enter\" && draft !== null) commit(parseNumber(draft));\n else handled = false;\n if (handled) event.preventDefault();\n };\n\n return (\n <Field\n id={id}\n label={label}\n error={error}\n success={success}\n helperText={helperText}\n disabled={disabled}\n required={required}\n className={wrapperClassName}\n >\n {({ inputId, describedBy, invalid }) => (\n <div className={styles.wrapper}>\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={m.numberInput.decrease}\n aria-controls={inputId}\n disabled={disabled || atMin}\n className={styles.button}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => stepBy(-step)}\n >\n <MinusIcon size={16} />\n </button>\n <input\n ref={ref}\n id={inputId}\n type=\"text\"\n role=\"spinbutton\"\n inputMode={precision > 0 || (min !== undefined && min < 0) ? \"decimal\" : \"numeric\"}\n autoComplete=\"off\"\n value={draft ?? format(current)}\n aria-valuenow={current ?? undefined}\n aria-valuemin={min}\n aria-valuemax={max}\n disabled={disabled}\n required={required}\n aria-invalid={invalid || undefined}\n aria-describedby={cx(describedBy, ariaDescribedBy) || undefined}\n className={cx(control.control, styles.input, className)}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={(event) => {\n if (draft !== null) commit(parseNumber(draft));\n onBlur?.(event);\n }}\n onKeyDown={handleKeyDown}\n {...rest}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={m.numberInput.increase}\n aria-controls={inputId}\n disabled={disabled || atMax}\n className={styles.button}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => stepBy(step)}\n >\n <PlusIcon size={16} />\n </button>\n </div>\n )}\n </Field>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,IAAa,cAAc,WAA+C,SAAS,YACjF,EACE,IACA,OACA,OACA,SACA,YACA,OACA,eAAe,MACf,eACA,KACA,KACA,OAAO,GACP,UACA,UACA,WACA,kBACA,QACA,WACA,oBAAoB,iBACpB,GAAG,QAEL,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,CAAC,SAAS,cAAc,qBAAoC;EAChE;EACA;EACA,UAAU;CACZ,CAAC;CACD,MAAM,CAAC,OAAO,YAAY,SAAwB,IAAI;CACtD,MAAM,YAAY,cAAc,IAAI;CACpC,MAAM,UAAU,MAAsB,MAAM,OAAO,KAAK,EAAE,QAAQ,SAAS;CAE3E,MAAM,UAAU,SAAwB;EACtC,MAAM,aAAa,SAAS,OAAO,OAAO,gBAAgB,MAAM;GAAE;GAAK;GAAK;EAAK,CAAC;EAClF,SAAS,IAAI;EACb,IAAI,eAAe,SAAS,WAAW,UAAU;CACnD;CAEA,MAAM,aAAa;EAEjB,QADe,UAAU,OAAO,YAAY,KAAK,IAAI,YACpC,OAAO;CAC1B;CACA,MAAM,UAAU,WAAmB;EACjC,IAAI,UAAU;EACd,OAAO,KAAK,IAAI,MAAM;CACxB;CAEA,MAAM,QAAQ,YAAY,QAAQ,QAAQ,KAAA,KAAa,WAAW;CAClE,MAAM,QAAQ,YAAY,QAAQ,QAAQ,KAAA,KAAa,WAAW;CAElE,MAAM,iBAAiB,UAA2C;EAChE,YAAY,KAAK;EACjB,IAAI,MAAM,kBAAkB;EAC5B,IAAI,UAAU;EACd,IAAI,MAAM,QAAQ,WAAW,OAAO,IAAI;OACnC,IAAI,MAAM,QAAQ,aAAa,OAAO,CAAC,IAAI;OAC3C,IAAI,MAAM,QAAQ,UAAU,OAAO,OAAO,EAAE;OAC5C,IAAI,MAAM,QAAQ,YAAY,OAAO,CAAC,OAAO,EAAE;OAC/C,IAAI,MAAM,QAAQ,UAAU,QAAQ,KAAA,GAAW,OAAO,GAAG;OACzD,IAAI,MAAM,QAAQ,SAAS,QAAQ,KAAA,GAAW,OAAO,GAAG;OACxD,IAAI,MAAM,QAAQ,WAAW,UAAU,MAAM,OAAO,YAAY,KAAK,CAAC;OACtE,UAAU;EACf,IAAI,SAAS,MAAM,eAAe;CACpC;CAEA,OACE,oBAAC,OAAD;EACM;EACG;EACA;EACE;EACG;EACF;EACA;EACV,WAAW;EAET,WAAA,EAAE,SAAS,aAAa,cACxB,qBAAC,OAAD;GAAK,WAAWA,2BAAO;GAAvB,UAAA;IACE,oBAAC,UAAD;KACE,MAAK;KACL,UAAU;KACV,cAAY,EAAE,YAAY;KAC1B,iBAAe;KACf,UAAU,YAAY;KACtB,WAAWA,2BAAO;KAClB,cAAc,UAAU,MAAM,eAAe;KAC7C,eAAe,OAAO,CAAC,IAAI;KAE3B,UAAA,oBAAC,WAAD,EAAW,MAAM,GAAK,CAAA;IAChB,CAAA;IACR,oBAAC,SAAD;KACO;KACL,IAAI;KACJ,MAAK;KACL,MAAK;KACL,WAAW,YAAY,KAAM,QAAQ,KAAA,KAAa,MAAM,IAAK,YAAY;KACzE,cAAa;KACb,OAAO,SAAS,OAAO,OAAO;KAC9B,iBAAe,WAAW,KAAA;KAC1B,iBAAe;KACf,iBAAe;KACL;KACA;KACV,gBAAc,WAAW,KAAA;KACzB,oBAAkB,GAAG,aAAa,eAAe,KAAK,KAAA;KACtD,WAAW,GAAGC,uBAAQ,SAASD,2BAAO,OAAO,SAAS;KACtD,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;KAChD,SAAS,UAAU;MACjB,IAAI,UAAU,MAAM,OAAO,YAAY,KAAK,CAAC;MAC7C,SAAS,KAAK;KAChB;KACA,WAAW;KACX,GAAI;IACL,CAAA;IACD,oBAAC,UAAD;KACE,MAAK;KACL,UAAU;KACV,cAAY,EAAE,YAAY;KAC1B,iBAAe;KACf,UAAU,YAAY;KACtB,WAAWA,2BAAO;KAClB,cAAc,UAAU,MAAM,eAAe;KAC7C,eAAe,OAAO,IAAI;KAE1B,UAAA,oBAAC,UAAD,EAAU,MAAM,GAAK,CAAA;IACf,CAAA;GACL;;CAEF,CAAA;AAEX,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArmorBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/ArmorBar/ArmorBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ArmorBar.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/ArmorBar/ArmorBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,0GAkBnB,CAAC"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
1
2
|
import { PointsBar } from "../PointsBar/PointsBar.js";
|
|
2
3
|
import { forwardRef } from "react";
|
|
3
4
|
import { ArmorIcon } from "@malilion/block-ui-icons";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
5
6
|
//#region src/components/hud/ArmorBar/ArmorBar.tsx
|
|
6
7
|
/** Armor points shown as chestplates — two points per icon. */
|
|
7
|
-
var ArmorBar = forwardRef(function ArmorBar({ value, max = 20, showText = false, iconSize = 16, label
|
|
8
|
+
var ArmorBar = forwardRef(function ArmorBar({ value, max = 20, showText = false, iconSize = 16, label, ...rest }, ref) {
|
|
9
|
+
const m = useBlockUIMessages();
|
|
8
10
|
return /* @__PURE__ */ jsx(PointsBar, {
|
|
9
11
|
ref,
|
|
10
12
|
value,
|
|
11
13
|
max,
|
|
12
14
|
showText,
|
|
13
15
|
iconSize,
|
|
14
|
-
label,
|
|
16
|
+
label: label ?? m.hud.armor,
|
|
15
17
|
lowThreshold: 0,
|
|
16
18
|
icon: /* @__PURE__ */ jsx(ArmorIcon, { size: iconSize }),
|
|
17
19
|
...rest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArmorBar.js","names":[],"sources":["../../../../src/components/hud/ArmorBar/ArmorBar.tsx"],"sourcesContent":["import { ArmorIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { PointsBar } from \"../PointsBar/PointsBar\";\nimport type { ArmorBarProps } from \"./ArmorBar.types\";\n\n/** Armor points shown as chestplates — two points per icon. */\nexport const ArmorBar = forwardRef<HTMLDivElement, ArmorBarProps>(function ArmorBar(\n { value, max = 20, showText = false, iconSize = 16, label
|
|
1
|
+
{"version":3,"file":"ArmorBar.js","names":[],"sources":["../../../../src/components/hud/ArmorBar/ArmorBar.tsx"],"sourcesContent":["import { ArmorIcon } from \"@malilion/block-ui-icons\";\nimport { forwardRef } from \"react\";\nimport { PointsBar } from \"../PointsBar/PointsBar\";\nimport type { ArmorBarProps } from \"./ArmorBar.types\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Armor points shown as chestplates — two points per icon. */\nexport const ArmorBar = forwardRef<HTMLDivElement, ArmorBarProps>(function ArmorBar(\n { value, max = 20, showText = false, iconSize = 16, label, ...rest },\n ref,\n) {\n const m = useBlockUIMessages();\n return (\n <PointsBar\n ref={ref}\n value={value}\n max={max}\n showText={showText}\n iconSize={iconSize}\n label={label ?? m.hud.armor}\n lowThreshold={0}\n icon={<ArmorIcon size={iconSize} />}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;;AAOA,IAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,OAAO,MAAM,IAAI,WAAW,OAAO,WAAW,IAAI,OAAO,GAAG,QAC9D,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,OACE,oBAAC,WAAD;EACO;EACE;EACF;EACK;EACA;EACV,OAAO,SAAS,EAAE,IAAI;EACtB,cAAc;EACd,MAAM,oBAAC,WAAD,EAAW,MAAM,SAAW,CAAA;EAClC,GAAI;CACL,CAAA;AAEL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BiomeIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/BiomeIndicator/BiomeIndicator.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"BiomeIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/BiomeIndicator/BiomeIndicator.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,iFAAiF;AACjF,eAAO,MAAM,cAAc,gHA6B1B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cx } from "../../../utils/cx.js";
|
|
2
|
+
import { useBlockUIMessages } from "../../../provider/context.js";
|
|
2
3
|
import hudChip_module_default from "../hudChip.module.js";
|
|
3
4
|
import BiomeIndicator_module_default from "./BiomeIndicator.module.js";
|
|
4
5
|
import { BIOMES, biomeLabel } from "./BiomeIndicator.utils.js";
|
|
@@ -7,6 +8,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
8
|
//#region src/components/hud/BiomeIndicator/BiomeIndicator.tsx
|
|
8
9
|
/** Current biome read-out: a pixel icon, an accent stripe and the biome name. */
|
|
9
10
|
var BiomeIndicator = forwardRef(function BiomeIndicator({ type, name, icon, announce = false, size = "md", className, ...rest }, ref) {
|
|
11
|
+
const m = useBlockUIMessages();
|
|
10
12
|
const { icon: Icon, material } = BIOMES[type];
|
|
11
13
|
return /* @__PURE__ */ jsxs("div", {
|
|
12
14
|
ref,
|
|
@@ -23,12 +25,12 @@ var BiomeIndicator = forwardRef(function BiomeIndicator({ type, name, icon, anno
|
|
|
23
25
|
}), /* @__PURE__ */ jsxs("span", { children: [
|
|
24
26
|
/* @__PURE__ */ jsx("span", {
|
|
25
27
|
className: hudChip_module_default.label,
|
|
26
|
-
children:
|
|
28
|
+
children: m.biomeIndicator.biome
|
|
27
29
|
}),
|
|
28
30
|
" ",
|
|
29
31
|
/* @__PURE__ */ jsx("span", {
|
|
30
32
|
className: BiomeIndicator_module_default.name,
|
|
31
|
-
children: name ?? biomeLabel(type)
|
|
33
|
+
children: name ?? m.biomeIndicator.names[type] ?? biomeLabel(type)
|
|
32
34
|
})
|
|
33
35
|
] })]
|
|
34
36
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BiomeIndicator.js","names":["chip","styles"],"sources":["../../../../src/components/hud/BiomeIndicator/BiomeIndicator.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./BiomeIndicator.module.css\";\nimport type { BiomeIndicatorProps } from \"./BiomeIndicator.types\";\nimport { BIOMES, biomeLabel } from \"./BiomeIndicator.utils\";\n\n/** Current biome read-out: a pixel icon, an accent stripe and the biome name. */\nexport const BiomeIndicator = forwardRef<HTMLDivElement, BiomeIndicatorProps>(\n function BiomeIndicator(\n { type, name, icon, announce = false, size = \"md\", className, ...rest },\n ref,\n ) {\n const { icon: Icon, material } = BIOMES[type];\n return (\n <div\n ref={ref}\n role={announce ? \"status\" : undefined}\n data-biome={type}\n data-material={material}\n data-size={size}\n className={cx(chip.chip, styles.biome, className)}\n {...rest}\n >\n <span className={chip.icon} aria-hidden=\"true\">\n {icon ?? <Icon size={size === \"lg\" ? 24 : 16} />}\n </span>\n <span>\n <span className={chip.label}>
|
|
1
|
+
{"version":3,"file":"BiomeIndicator.js","names":["chip","styles"],"sources":["../../../../src/components/hud/BiomeIndicator/BiomeIndicator.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cx } from \"../../../utils/cx\";\nimport chip from \"../hudChip.module.css\";\nimport styles from \"./BiomeIndicator.module.css\";\nimport type { BiomeIndicatorProps } from \"./BiomeIndicator.types\";\nimport { BIOMES, biomeLabel } from \"./BiomeIndicator.utils\";\nimport { useBlockUIMessages } from \"../../../provider/context\";\n\n/** Current biome read-out: a pixel icon, an accent stripe and the biome name. */\nexport const BiomeIndicator = forwardRef<HTMLDivElement, BiomeIndicatorProps>(\n function BiomeIndicator(\n { type, name, icon, announce = false, size = \"md\", className, ...rest },\n ref,\n ) {\n const m = useBlockUIMessages();\n const { icon: Icon, material } = BIOMES[type];\n return (\n <div\n ref={ref}\n role={announce ? \"status\" : undefined}\n data-biome={type}\n data-material={material}\n data-size={size}\n className={cx(chip.chip, styles.biome, className)}\n {...rest}\n >\n <span className={chip.icon} aria-hidden=\"true\">\n {icon ?? <Icon size={size === \"lg\" ? 24 : 16} />}\n </span>\n <span>\n <span className={chip.label}>{m.biomeIndicator.biome}</span>{\" \"}\n <span className={styles.name}>\n {name ?? m.biomeIndicator.names[type] ?? biomeLabel(type)}\n </span>\n </span>\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;;AASA,IAAa,iBAAiB,WAC5B,SAAS,eACP,EAAE,MAAM,MAAM,MAAM,WAAW,OAAO,OAAO,MAAM,WAAW,GAAG,QACjE,KACA;CACA,MAAM,IAAI,mBAAmB;CAC7B,MAAM,EAAE,MAAM,MAAM,aAAa,OAAO;CACxC,OACE,qBAAC,OAAD;EACO;EACL,MAAM,WAAW,WAAW,KAAA;EAC5B,cAAY;EACZ,iBAAe;EACf,aAAW;EACX,WAAW,GAAGA,uBAAK,MAAMC,8BAAO,OAAO,SAAS;EAChD,GAAI;EAPN,UAAA,CASE,oBAAC,QAAD;GAAM,WAAWD,uBAAK;GAAM,eAAY;GACrC,UAAA,QAAQ,oBAAC,MAAD,EAAM,MAAM,SAAS,OAAO,KAAK,GAAK,CAAA;EAC3C,CAAA,GACN,qBAAC,QAAD,EAAA,UAAA;GACE,oBAAC,QAAD;IAAM,WAAWA,uBAAK;IAAQ,UAAA,EAAE,eAAe;GAAY,CAAA;GAAE;GAC7D,oBAAC,QAAD;IAAM,WAAWC,8BAAO;IACrB,UAAA,QAAQ,EAAE,eAAe,MAAM,SAAS,WAAW,IAAI;GACpD,CAAA;EACF,EAAA,CAAA,CACH;;AAET,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinatesHUD.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/CoordinatesHUD/CoordinatesHUD.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"CoordinatesHUD.d.ts","sourceRoot":"","sources":["../../../../src/components/hud/CoordinatesHUD/CoordinatesHUD.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,+EAA+E;AAC/E,eAAO,MAAM,cAAc,gHAwE1B,CAAC"}
|