@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.
Files changed (257) hide show
  1. package/dist/components/actions/ContextMenu/ContextMenu.d.ts.map +1 -1
  2. package/dist/components/actions/ContextMenu/ContextMenu.js +4 -2
  3. package/dist/components/actions/ContextMenu/ContextMenu.js.map +1 -1
  4. package/dist/components/actions/ContextMenu/ContextMenu.types.d.ts +1 -1
  5. package/dist/components/actions/ContextMenu/ContextMenu.types.d.ts.map +1 -1
  6. package/dist/components/cards/AchievementCard/AchievementCard.d.ts.map +1 -1
  7. package/dist/components/cards/AchievementCard/AchievementCard.js +6 -4
  8. package/dist/components/cards/AchievementCard/AchievementCard.js.map +1 -1
  9. package/dist/components/cards/PlayerCard/PlayerCard.d.ts.map +1 -1
  10. package/dist/components/cards/PlayerCard/PlayerCard.js +7 -5
  11. package/dist/components/cards/PlayerCard/PlayerCard.js.map +1 -1
  12. package/dist/components/cards/QuestCard/QuestCard.d.ts.map +1 -1
  13. package/dist/components/cards/QuestCard/QuestCard.js +9 -7
  14. package/dist/components/cards/QuestCard/QuestCard.js.map +1 -1
  15. package/dist/components/cards/ServerBrowser/ServerBrowser.d.ts.map +1 -1
  16. package/dist/components/cards/ServerBrowser/ServerBrowser.js +27 -25
  17. package/dist/components/cards/ServerBrowser/ServerBrowser.js.map +1 -1
  18. package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts +2 -2
  19. package/dist/components/cards/ServerBrowser/ServerBrowser.types.d.ts.map +1 -1
  20. package/dist/components/cards/ServerCard/ServerCard.d.ts.map +1 -1
  21. package/dist/components/cards/ServerCard/ServerCard.js +10 -8
  22. package/dist/components/cards/ServerCard/ServerCard.js.map +1 -1
  23. package/dist/components/cards/WorldBrowser/WorldBrowser.d.ts.map +1 -1
  24. package/dist/components/cards/WorldBrowser/WorldBrowser.js +20 -18
  25. package/dist/components/cards/WorldBrowser/WorldBrowser.js.map +1 -1
  26. package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts +2 -2
  27. package/dist/components/cards/WorldBrowser/WorldBrowser.types.d.ts.map +1 -1
  28. package/dist/components/cards/WorldCard/WorldCard.d.ts.map +1 -1
  29. package/dist/components/cards/WorldCard/WorldCard.js +16 -6
  30. package/dist/components/cards/WorldCard/WorldCard.js.map +1 -1
  31. package/dist/components/crafting/Anvil/Anvil.d.ts.map +1 -1
  32. package/dist/components/crafting/Anvil/Anvil.js +9 -7
  33. package/dist/components/crafting/Anvil/Anvil.js.map +1 -1
  34. package/dist/components/crafting/Anvil/Anvil.types.d.ts +1 -1
  35. package/dist/components/crafting/Anvil/Anvil.types.d.ts.map +1 -1
  36. package/dist/components/crafting/BrewingStand/BrewingStand.d.ts.map +1 -1
  37. package/dist/components/crafting/BrewingStand/BrewingStand.js +11 -20
  38. package/dist/components/crafting/BrewingStand/BrewingStand.js.map +1 -1
  39. package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts +1 -1
  40. package/dist/components/crafting/BrewingStand/BrewingStand.types.d.ts.map +1 -1
  41. package/dist/components/crafting/BrewingStand/BrewingStand.types.js.map +1 -1
  42. package/dist/components/crafting/CraftingGrid/CraftingGrid.d.ts.map +1 -1
  43. package/dist/components/crafting/CraftingGrid/CraftingGrid.js +4 -2
  44. package/dist/components/crafting/CraftingGrid/CraftingGrid.js.map +1 -1
  45. package/dist/components/crafting/CraftingResult/CraftingResult.d.ts.map +1 -1
  46. package/dist/components/crafting/CraftingResult/CraftingResult.js +5 -2
  47. package/dist/components/crafting/CraftingResult/CraftingResult.js.map +1 -1
  48. package/dist/components/crafting/CraftingResult/CraftingResult.types.d.ts +1 -1
  49. package/dist/components/crafting/CraftingResult/CraftingResult.types.d.ts.map +1 -1
  50. package/dist/components/crafting/CraftingTable/CraftingTable.d.ts.map +1 -1
  51. package/dist/components/crafting/CraftingTable/CraftingTable.js +5 -3
  52. package/dist/components/crafting/CraftingTable/CraftingTable.js.map +1 -1
  53. package/dist/components/crafting/CraftingTable/CraftingTable.types.d.ts +2 -2
  54. package/dist/components/crafting/CraftingTable/CraftingTable.types.d.ts.map +1 -1
  55. package/dist/components/crafting/EnchantingTable/EnchantingTable.d.ts.map +1 -1
  56. package/dist/components/crafting/EnchantingTable/EnchantingTable.js +15 -13
  57. package/dist/components/crafting/EnchantingTable/EnchantingTable.js.map +1 -1
  58. package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts +1 -1
  59. package/dist/components/crafting/EnchantingTable/EnchantingTable.types.d.ts.map +1 -1
  60. package/dist/components/crafting/Furnace/Furnace.d.ts.map +1 -1
  61. package/dist/components/crafting/Furnace/Furnace.js +11 -16
  62. package/dist/components/crafting/Furnace/Furnace.js.map +1 -1
  63. package/dist/components/crafting/Furnace/Furnace.types.d.ts +1 -1
  64. package/dist/components/crafting/Furnace/Furnace.types.d.ts.map +1 -1
  65. package/dist/components/crafting/Furnace/Furnace.types.js.map +1 -1
  66. package/dist/components/crafting/RecipeBook/RecipeBook.d.ts.map +1 -1
  67. package/dist/components/crafting/RecipeBook/RecipeBook.js +17 -15
  68. package/dist/components/crafting/RecipeBook/RecipeBook.js.map +1 -1
  69. package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts +1 -1
  70. package/dist/components/crafting/RecipeBook/RecipeBook.types.d.ts.map +1 -1
  71. package/dist/components/crafting/TradingUI/TradingUI.d.ts +1 -1
  72. package/dist/components/crafting/TradingUI/TradingUI.d.ts.map +1 -1
  73. package/dist/components/crafting/TradingUI/TradingUI.js +14 -13
  74. package/dist/components/crafting/TradingUI/TradingUI.js.map +1 -1
  75. package/dist/components/crafting/TradingUI/TradingUI.types.d.ts +1 -1
  76. package/dist/components/crafting/TradingUI/TradingUI.types.d.ts.map +1 -1
  77. package/dist/components/crafting/TradingUI/TradingUI.types.js.map +1 -1
  78. package/dist/components/display/Avatar/Avatar.d.ts.map +1 -1
  79. package/dist/components/display/Avatar/Avatar.js +3 -7
  80. package/dist/components/display/Avatar/Avatar.js.map +1 -1
  81. package/dist/components/display/BlockTable/BlockTable.d.ts.map +1 -1
  82. package/dist/components/display/BlockTable/BlockTable.js +4 -2
  83. package/dist/components/display/BlockTable/BlockTable.js.map +1 -1
  84. package/dist/components/display/BlockTable/BlockTable.types.d.ts +1 -1
  85. package/dist/components/display/BlockTable/BlockTable.types.d.ts.map +1 -1
  86. package/dist/components/display/SkillTree/SkillTree.d.ts.map +1 -1
  87. package/dist/components/display/SkillTree/SkillTree.js +16 -15
  88. package/dist/components/display/SkillTree/SkillTree.js.map +1 -1
  89. package/dist/components/display/SkillTree/SkillTree.types.d.ts +1 -1
  90. package/dist/components/display/SkillTree/SkillTree.types.d.ts.map +1 -1
  91. package/dist/components/feedback/Alert/BlockAlert.d.ts.map +1 -1
  92. package/dist/components/feedback/Alert/BlockAlert.js +4 -2
  93. package/dist/components/feedback/Alert/BlockAlert.js.map +1 -1
  94. package/dist/components/feedback/Alert/BlockAlert.types.d.ts +1 -1
  95. package/dist/components/feedback/Alert/BlockAlert.types.d.ts.map +1 -1
  96. package/dist/components/feedback/Alert/BlockAlert.types.js.map +1 -1
  97. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.d.ts.map +1 -1
  98. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js +5 -3
  99. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js.map +1 -1
  100. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.types.d.ts +2 -2
  101. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.types.d.ts.map +1 -1
  102. package/dist/components/feedback/Drawer/Drawer.d.ts.map +1 -1
  103. package/dist/components/feedback/Drawer/Drawer.js +3 -2
  104. package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
  105. package/dist/components/feedback/Loading/BlockLoading.d.ts.map +1 -1
  106. package/dist/components/feedback/Loading/BlockLoading.js +4 -2
  107. package/dist/components/feedback/Loading/BlockLoading.js.map +1 -1
  108. package/dist/components/feedback/Loading/BlockLoading.types.d.ts +1 -1
  109. package/dist/components/feedback/Loading/BlockLoading.types.d.ts.map +1 -1
  110. package/dist/components/feedback/Modal/BlockModal.d.ts.map +1 -1
  111. package/dist/components/feedback/Modal/BlockModal.js +3 -2
  112. package/dist/components/feedback/Modal/BlockModal.js.map +1 -1
  113. package/dist/components/feedback/Progress/BlockProgress.d.ts.map +1 -1
  114. package/dist/components/feedback/Progress/BlockProgress.js +3 -1
  115. package/dist/components/feedback/Progress/BlockProgress.js.map +1 -1
  116. package/dist/components/feedback/Toast/Toast.d.ts +1 -1
  117. package/dist/components/feedback/Toast/Toast.d.ts.map +1 -1
  118. package/dist/components/feedback/Toast/Toast.js +6 -4
  119. package/dist/components/feedback/Toast/Toast.js.map +1 -1
  120. package/dist/components/feedback/Toast/Toast.types.d.ts +1 -1
  121. package/dist/components/feedback/Toast/Toast.types.d.ts.map +1 -1
  122. package/dist/components/forms/NumberInput/NumberInput.d.ts.map +1 -1
  123. package/dist/components/forms/NumberInput/NumberInput.js +4 -2
  124. package/dist/components/forms/NumberInput/NumberInput.js.map +1 -1
  125. package/dist/components/hud/ArmorBar/ArmorBar.d.ts.map +1 -1
  126. package/dist/components/hud/ArmorBar/ArmorBar.js +4 -2
  127. package/dist/components/hud/ArmorBar/ArmorBar.js.map +1 -1
  128. package/dist/components/hud/BiomeIndicator/BiomeIndicator.d.ts.map +1 -1
  129. package/dist/components/hud/BiomeIndicator/BiomeIndicator.js +4 -2
  130. package/dist/components/hud/BiomeIndicator/BiomeIndicator.js.map +1 -1
  131. package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.d.ts.map +1 -1
  132. package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js +9 -7
  133. package/dist/components/hud/CoordinatesHUD/CoordinatesHUD.js.map +1 -1
  134. package/dist/components/hud/DayNightIndicator/DayNightIndicator.d.ts.map +1 -1
  135. package/dist/components/hud/DayNightIndicator/DayNightIndicator.js +7 -11
  136. package/dist/components/hud/DayNightIndicator/DayNightIndicator.js.map +1 -1
  137. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts +4 -1
  138. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.d.ts.map +1 -1
  139. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js +5 -2
  140. package/dist/components/hud/DayNightIndicator/DayNightIndicator.utils.js.map +1 -1
  141. package/dist/components/hud/HealthBar/HealthBar.d.ts.map +1 -1
  142. package/dist/components/hud/HealthBar/HealthBar.js +4 -2
  143. package/dist/components/hud/HealthBar/HealthBar.js.map +1 -1
  144. package/dist/components/hud/HungerBar/HungerBar.d.ts.map +1 -1
  145. package/dist/components/hud/HungerBar/HungerBar.js +4 -2
  146. package/dist/components/hud/HungerBar/HungerBar.js.map +1 -1
  147. package/dist/components/hud/MiniMap/MiniMap.d.ts.map +1 -1
  148. package/dist/components/hud/MiniMap/MiniMap.js +8 -7
  149. package/dist/components/hud/MiniMap/MiniMap.js.map +1 -1
  150. package/dist/components/hud/MiniMap/MiniMap.utils.d.ts +10 -2
  151. package/dist/components/hud/MiniMap/MiniMap.utils.d.ts.map +1 -1
  152. package/dist/components/hud/MiniMap/MiniMap.utils.js +12 -15
  153. package/dist/components/hud/MiniMap/MiniMap.utils.js.map +1 -1
  154. package/dist/components/hud/PlayerHUD/PlayerHUD.d.ts.map +1 -1
  155. package/dist/components/hud/PlayerHUD/PlayerHUD.js +4 -2
  156. package/dist/components/hud/PlayerHUD/PlayerHUD.js.map +1 -1
  157. package/dist/components/hud/PointsBar/PointsBar.d.ts.map +1 -1
  158. package/dist/components/hud/PointsBar/PointsBar.js +3 -1
  159. package/dist/components/hud/PointsBar/PointsBar.js.map +1 -1
  160. package/dist/components/hud/Scoreboard/Scoreboard.d.ts.map +1 -1
  161. package/dist/components/hud/Scoreboard/Scoreboard.js +9 -11
  162. package/dist/components/hud/Scoreboard/Scoreboard.js.map +1 -1
  163. package/dist/components/hud/WeatherIndicator/WeatherIndicator.d.ts.map +1 -1
  164. package/dist/components/hud/WeatherIndicator/WeatherIndicator.js +7 -4
  165. package/dist/components/hud/WeatherIndicator/WeatherIndicator.js.map +1 -1
  166. package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js +1 -8
  167. package/dist/components/hud/WeatherIndicator/WeatherIndicator.utils.js.map +1 -1
  168. package/dist/components/hud/XPBar/XPBar.d.ts.map +1 -1
  169. package/dist/components/hud/XPBar/XPBar.js +6 -4
  170. package/dist/components/hud/XPBar/XPBar.js.map +1 -1
  171. package/dist/components/inventory/DurabilityBar/DurabilityBar.d.ts.map +1 -1
  172. package/dist/components/inventory/DurabilityBar/DurabilityBar.js +4 -2
  173. package/dist/components/inventory/DurabilityBar/DurabilityBar.js.map +1 -1
  174. package/dist/components/inventory/Hotbar/Hotbar.d.ts.map +1 -1
  175. package/dist/components/inventory/Hotbar/Hotbar.js +4 -2
  176. package/dist/components/inventory/Hotbar/Hotbar.js.map +1 -1
  177. package/dist/components/inventory/Inventory/Inventory.d.ts.map +1 -1
  178. package/dist/components/inventory/Inventory/Inventory.js +4 -2
  179. package/dist/components/inventory/Inventory/Inventory.js.map +1 -1
  180. package/dist/components/inventory/InventoryGrid/InventoryGrid.d.ts.map +1 -1
  181. package/dist/components/inventory/InventoryGrid/InventoryGrid.js +4 -2
  182. package/dist/components/inventory/InventoryGrid/InventoryGrid.js.map +1 -1
  183. package/dist/components/inventory/InventorySlot/InventorySlot.d.ts.map +1 -1
  184. package/dist/components/inventory/InventorySlot/InventorySlot.js +3 -1
  185. package/dist/components/inventory/InventorySlot/InventorySlot.js.map +1 -1
  186. package/dist/components/inventory/ItemStack/ItemStack.d.ts.map +1 -1
  187. package/dist/components/inventory/ItemStack/ItemStack.js +3 -1
  188. package/dist/components/inventory/ItemStack/ItemStack.js.map +1 -1
  189. package/dist/components/inventory/ItemStack/ItemStack.utils.d.ts +2 -1
  190. package/dist/components/inventory/ItemStack/ItemStack.utils.d.ts.map +1 -1
  191. package/dist/components/inventory/ItemStack/ItemStack.utils.js +6 -2
  192. package/dist/components/inventory/ItemStack/ItemStack.utils.js.map +1 -1
  193. package/dist/components/inventory/ItemTooltip/ItemTooltip.d.ts.map +1 -1
  194. package/dist/components/inventory/ItemTooltip/ItemTooltip.js +3 -1
  195. package/dist/components/inventory/ItemTooltip/ItemTooltip.js.map +1 -1
  196. package/dist/components/navigation/BlockPagination/BlockPagination.d.ts.map +1 -1
  197. package/dist/components/navigation/BlockPagination/BlockPagination.js +9 -12
  198. package/dist/components/navigation/BlockPagination/BlockPagination.js.map +1 -1
  199. package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts +1 -1
  200. package/dist/components/navigation/BlockPagination/BlockPagination.types.d.ts.map +1 -1
  201. package/dist/components/navigation/BlockSidebar/BlockSidebar.d.ts.map +1 -1
  202. package/dist/components/navigation/BlockSidebar/BlockSidebar.js +4 -2
  203. package/dist/components/navigation/BlockSidebar/BlockSidebar.js.map +1 -1
  204. package/dist/components/navigation/BlockSidebar/BlockSidebar.types.d.ts +1 -1
  205. package/dist/components/navigation/BlockSidebar/BlockSidebar.types.d.ts.map +1 -1
  206. package/dist/components/navigation/BlockStepper/BlockStepper.d.ts.map +1 -1
  207. package/dist/components/navigation/BlockStepper/BlockStepper.js +4 -2
  208. package/dist/components/navigation/BlockStepper/BlockStepper.js.map +1 -1
  209. package/dist/components/navigation/BlockStepper/BlockStepper.types.d.ts +1 -1
  210. package/dist/components/navigation/BlockStepper/BlockStepper.types.d.ts.map +1 -1
  211. package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  212. package/dist/components/navigation/Breadcrumb/Breadcrumb.js +4 -2
  213. package/dist/components/navigation/Breadcrumb/Breadcrumb.js.map +1 -1
  214. package/dist/components/navigation/Breadcrumb/Breadcrumb.types.d.ts +1 -1
  215. package/dist/components/navigation/Breadcrumb/Breadcrumb.types.d.ts.map +1 -1
  216. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.d.ts.map +1 -1
  217. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.js +4 -2
  218. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.js.map +1 -1
  219. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.types.d.ts +1 -1
  220. package/dist/components/navigation/HotbarNavigation/HotbarNavigation.types.d.ts.map +1 -1
  221. package/dist/components/social/ChatWindow/ChatWindow.d.ts.map +1 -1
  222. package/dist/components/social/ChatWindow/ChatWindow.js +10 -7
  223. package/dist/components/social/ChatWindow/ChatWindow.js.map +1 -1
  224. package/dist/components/social/ChatWindow/ChatWindow.types.d.ts +2 -2
  225. package/dist/components/social/ChatWindow/ChatWindow.types.d.ts.map +1 -1
  226. package/dist/components/social/ChatWindow/ChatWindow.types.js.map +1 -1
  227. package/dist/components/social/CommandConsole/CommandConsole.d.ts.map +1 -1
  228. package/dist/components/social/CommandConsole/CommandConsole.js +7 -4
  229. package/dist/components/social/CommandConsole/CommandConsole.js.map +1 -1
  230. package/dist/components/social/CommandConsole/CommandConsole.types.d.ts +1 -1
  231. package/dist/components/social/CommandConsole/CommandConsole.types.d.ts.map +1 -1
  232. package/dist/components/social/CommandConsole/CommandConsole.types.js.map +1 -1
  233. package/dist/index.d.ts +1 -0
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.js +5 -3
  236. package/dist/locale/index.d.ts +4 -0
  237. package/dist/locale/index.d.ts.map +1 -0
  238. package/dist/locale/messages.d.ts +289 -0
  239. package/dist/locale/messages.d.ts.map +1 -0
  240. package/dist/locale/messages.js +341 -0
  241. package/dist/locale/messages.js.map +1 -0
  242. package/dist/locale/zhTW.d.ts +4 -0
  243. package/dist/locale/zhTW.d.ts.map +1 -0
  244. package/dist/locale/zhTW.js +331 -0
  245. package/dist/locale/zhTW.js.map +1 -0
  246. package/dist/provider/BlockUIProvider.d.ts.map +1 -1
  247. package/dist/provider/BlockUIProvider.js +10 -3
  248. package/dist/provider/BlockUIProvider.js.map +1 -1
  249. package/dist/provider/BlockUIProvider.types.d.ts +9 -0
  250. package/dist/provider/BlockUIProvider.types.d.ts.map +1 -1
  251. package/dist/provider/context.d.ts +3 -0
  252. package/dist/provider/context.d.ts.map +1 -1
  253. package/dist/provider/context.js +6 -1
  254. package/dist/provider/context.js.map +1 -1
  255. package/dist/provider/index.d.ts +1 -1
  256. package/dist/provider/index.d.ts.map +1 -1
  257. package/package.json +4 -4
@@ -1,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 = "Confirm", cancelText = "Cancel", variant = "default", onConfirm, onCancel, loading = false, icon, children, className }) {
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 = \"Confirm\",\n cancelText = \"Cancel\",\n variant = \"default\",\n onConfirm,\n onCancel,\n loading = false,\n icon,\n children,\n className,\n}: ConfirmDialogProps) {\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}\n </BlockButton>\n <BlockButton\n ref={confirmRef}\n variant={danger ? \"redstone\" : \"grass\"}\n onClick={onConfirm}\n loading={loading}\n >\n {confirmText}\n </BlockButton>\n </>\n }\n >\n {children}\n </BlockModal>\n );\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,cAAc,EAC5B,MACA,OACA,aACA,cAAc,WACd,aAAa,UACb,UAAU,WACV,WACA,UACA,UAAU,OACV,MACA,UACA,aACqB;CACrB,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;EACU,CAAA,GACb,oBAAC,aAAD;GACE,KAAK;GACL,SAAS,SAAS,aAAa;GAC/B,SAAS;GACA;GAER,UAAA;EACU,CAAA,CACb,EAAA,CAAA;EAGH;CACS,CAAA;AAEhB"}
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,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,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
+ {"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,wGAsEjB,CAAC"}
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": "Close",
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 type=\"button\" className={styles.close} aria-label=\"Close\" onClick={onClose}>\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,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;MAAQ,MAAK;MAAS,WAAWA,sBAAO;MAAO,cAAW;MAAQ,SAAS;MACzE,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
+ {"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;AAE9D,kGAAkG;AAClG,eAAO,MAAM,YAAY,8GAkCvB,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 = "Loading…", variant = "blocks", progress, hideLabel = false, size = "md", className, ...rest }, ref) {
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 {\n label = \"Loading…\",\n variant = \"blocks\",\n progress,\n hideLabel = false,\n size = \"md\",\n className,\n ...rest\n },\n ref,\n) {\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\")}>{label}</span>\n </div>\n );\n});\n"],"mappings":";;;;;;;AAOA,IAAa,eAAe,WAA8C,SAAS,aACjF,EACE,QAAQ,YACR,UAAU,UACV,UACA,YAAY,OACZ,OAAO,MACP,WACA,GAAG,QAEL,KACA;CACA,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;GAAI,UAAA;EAAY,CAAA,CACnF;;AAET,CAAC"}
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,4DAA4D;IAC5D,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
+ {"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,4GAwFrB,CAAC"}
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": "Close",
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 type=\"button\" className={styles.close} aria-label=\"Close\" onClick={onClose}>\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,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;MAAQ,MAAK;MAAS,WAAWA,0BAAO;MAAO,cAAW;MAAQ,SAAS;MACzE,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
+ {"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;AAIhE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,+GA0DxB,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 ?? "Progress",
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 ?? \"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":";;;;;;AAMA,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,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;GAC9C,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"}
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, }: BlockToasterProps): import("react").ReactPortal | null;
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;AAyDpE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAA2B,EAC3B,KAAuB,EACvB,SAAS,GACV,EAAE,iBAAiB,sCAgBnB"}
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: "Dismiss notification",
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 = "Notifications", className }) {
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=\"Dismiss notification\"\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({\n limit = DEFAULT_TOAST_LIMIT,\n label = \"Notifications\",\n className,\n}: BlockToasterProps) {\n const records = useToasts();\n const container = usePortalContainer();\n const visible = records.slice(-limit);\n\n const region = (\n <section aria-label={label} 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,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,YAAW;GACX,WAAWA,qBAAO;GAEjB,UAAA,OAAO;EACE,CAAA;CACV,CAAA;AAER;;;;;AAMA,SAAgB,aAAa,EAC3B,QAAA,GACA,QAAQ,iBACR,aACoB;CACpB,MAAM,UAAU,UAAU;CAC1B,MAAM,YAAY,mBAAmB;CACrC,MAAM,UAAU,QAAQ,MAAM,CAAC,KAAK;CAEpC,MAAM,SACJ,oBAAC,WAAD;EAAS,cAAY;EAAO,WAAW,GAAGA,qBAAO,QAAQ,SAAS;EAChE,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"}
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,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
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;AAG5D;;;;GAIG;AACH,eAAO,MAAM,WAAW,+GAmItB,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": "Decrease",
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": "Increase",
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=\"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=\"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":"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"}
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":"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"}
@@ -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;AAEtD,+DAA+D;AAC/D,eAAO,MAAM,QAAQ,0GAiBnB,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 = "Armor", ...rest }, ref) {
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 = \"Armor\", ...rest },\n ref,\n) {\n return (\n <PointsBar\n ref={ref}\n value={value}\n max={max}\n showText={showText}\n iconSize={iconSize}\n label={label}\n lowThreshold={0}\n icon={<ArmorIcon size={iconSize} />}\n {...rest}\n />\n );\n});\n"],"mappings":";;;;;;AAMA,IAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,OAAO,MAAM,IAAI,WAAW,OAAO,WAAW,IAAI,QAAQ,SAAS,GAAG,QACxE,KACA;CACA,OACE,oBAAC,WAAD;EACO;EACE;EACF;EACK;EACA;EACH;EACP,cAAc;EACd,MAAM,oBAAC,WAAD,EAAW,MAAM,SAAW,CAAA;EAClC,GAAI;CACL,CAAA;AAEL,CAAC"}
1
+ {"version":3,"file":"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;AAGlE,iFAAiF;AACjF,eAAO,MAAM,cAAc,gHA0B1B,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: "Biome"
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}>Biome</span>{\" \"}\n <span className={styles.name}>{name ?? biomeLabel(type)}</span>\n </span>\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;AAQA,IAAa,iBAAiB,WAC5B,SAAS,eACP,EAAE,MAAM,MAAM,MAAM,WAAW,OAAO,OAAO,MAAM,WAAW,GAAG,QACjE,KACA;CACA,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;IAAO,UAAA;GAAW,CAAA;GAAE;GAC1C,oBAAC,QAAD;IAAM,WAAWC,8BAAO;IAAO,UAAA,QAAQ,WAAW,IAAI;GAAQ,CAAA;EAC1D,EAAA,CAAA,CACH;;AAET,CACF"}
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;AAGlE,+EAA+E;AAC/E,eAAO,MAAM,cAAc,gHAiF1B,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"}