@rpgjs/client 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/LICENSE +19 -0
- package/dist/Game/AnimationManager.d.ts +1 -1
- package/dist/Game/AnimationManager.js +18 -9
- package/dist/Game/AnimationManager.js.map +1 -1
- package/dist/Game/AnimationManager.spec.d.ts +1 -0
- package/dist/Game/Event.js.map +1 -1
- package/dist/Game/Map.d.ts +9 -1
- package/dist/Game/Map.js +63 -5
- package/dist/Game/Map.js.map +1 -1
- package/dist/Game/Object.d.ts +47 -15
- package/dist/Game/Object.js +82 -38
- package/dist/Game/Object.js.map +1 -1
- package/dist/Game/Player.js.map +1 -1
- package/dist/Game/ProjectileManager.d.ts +89 -0
- package/dist/Game/ProjectileManager.js +179 -0
- package/dist/Game/ProjectileManager.js.map +1 -0
- package/dist/Game/ProjectileManager.spec.d.ts +1 -0
- package/dist/Gui/Gui.d.ts +17 -4
- package/dist/Gui/Gui.js +78 -48
- package/dist/Gui/Gui.js.map +1 -1
- package/dist/Gui/Gui.spec.d.ts +1 -0
- package/dist/Gui/NotificationManager.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/RpgClient.d.ts +110 -15
- package/dist/RpgClientEngine.d.ts +86 -10
- package/dist/RpgClientEngine.js +306 -49
- package/dist/RpgClientEngine.js.map +1 -1
- package/dist/Sound.js.map +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.122.0 → _@oxc-project_runtime@0.130.0}/helpers/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.122.0 → _@oxc-project_runtime@0.130.0}/helpers/decorateMetadata.js +1 -1
- package/dist/components/animations/animation.ce.js +4 -5
- package/dist/components/animations/animation.ce.js.map +1 -1
- package/dist/components/animations/hit.ce.js +19 -25
- package/dist/components/animations/hit.ce.js.map +1 -1
- package/dist/components/animations/index.js +4 -4
- package/dist/components/animations/index.js.map +1 -1
- package/dist/components/character.ce.js +422 -240
- package/dist/components/character.ce.js.map +1 -1
- package/dist/components/dynamics/bar.ce.js +97 -0
- package/dist/components/dynamics/bar.ce.js.map +1 -0
- package/dist/components/dynamics/image.ce.js +24 -0
- package/dist/components/dynamics/image.ce.js.map +1 -0
- package/dist/components/dynamics/parse-value.d.ts +3 -0
- package/dist/components/dynamics/parse-value.js +54 -35
- package/dist/components/dynamics/parse-value.js.map +1 -1
- package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
- package/dist/components/dynamics/shape-utils.d.ts +16 -0
- package/dist/components/dynamics/shape-utils.js +73 -0
- package/dist/components/dynamics/shape-utils.js.map +1 -0
- package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
- package/dist/components/dynamics/shape.ce.js +84 -0
- package/dist/components/dynamics/shape.ce.js.map +1 -0
- package/dist/components/dynamics/text.ce.js +34 -56
- package/dist/components/dynamics/text.ce.js.map +1 -1
- package/dist/components/gui/box.ce.js +6 -8
- package/dist/components/gui/box.ce.js.map +1 -1
- package/dist/components/gui/dialogbox/index.ce.js +56 -62
- package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
- package/dist/components/gui/gameover.ce.js +42 -65
- package/dist/components/gui/gameover.ce.js.map +1 -1
- package/dist/components/gui/hud/hud.ce.js +21 -30
- package/dist/components/gui/hud/hud.ce.js.map +1 -1
- package/dist/components/gui/menu/equip-menu.ce.js +112 -165
- package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/exit-menu.ce.js +8 -6
- package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/items-menu.ce.js +52 -69
- package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/main-menu.ce.js +75 -92
- package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/options-menu.ce.js +5 -4
- package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/skills-menu.ce.js +12 -17
- package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
- package/dist/components/gui/mobile/index.js +2 -2
- package/dist/components/gui/mobile/index.js.map +1 -1
- package/dist/components/gui/mobile/mobile.ce.js +5 -4
- package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
- package/dist/components/gui/notification/notification.ce.js +22 -24
- package/dist/components/gui/notification/notification.ce.js.map +1 -1
- package/dist/components/gui/save-load.ce.js +72 -249
- package/dist/components/gui/save-load.ce.js.map +1 -1
- package/dist/components/gui/shop/shop.ce.js +90 -127
- package/dist/components/gui/shop/shop.ce.js.map +1 -1
- package/dist/components/gui/title-screen.ce.js +45 -70
- package/dist/components/gui/title-screen.ce.js.map +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +1 -0
- package/dist/components/player-components-utils.d.ts +67 -0
- package/dist/components/player-components-utils.js +162 -0
- package/dist/components/player-components-utils.js.map +1 -0
- package/dist/components/player-components-utils.spec.d.ts +1 -0
- package/dist/components/player-components.ce.js +189 -0
- package/dist/components/player-components.ce.js.map +1 -0
- package/dist/components/prebuilt/hp-bar.ce.js +42 -44
- package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
- package/dist/components/prebuilt/light-halo.ce.js +36 -59
- package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
- package/dist/components/scenes/canvas.ce.js +165 -21
- package/dist/components/scenes/canvas.ce.js.map +1 -1
- package/dist/components/scenes/draw-map.ce.js +25 -32
- package/dist/components/scenes/draw-map.ce.js.map +1 -1
- package/dist/components/scenes/event-layer.ce.js +9 -8
- package/dist/components/scenes/event-layer.ce.js.map +1 -1
- package/dist/core/inject.js +1 -1
- package/dist/core/inject.js.map +1 -1
- package/dist/core/setup.js +1 -1
- package/dist/core/setup.js.map +1 -1
- package/dist/decorators/spritesheet.d.ts +1 -0
- package/dist/decorators/spritesheet.js +11 -0
- package/dist/decorators/spritesheet.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +26 -21
- package/dist/module.js +15 -1
- package/dist/module.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.0.1}/node_modules/@signe/di/dist/index.js +7 -117
- package/dist/node_modules/.pnpm/@signe_di@3.0.1/node_modules/@signe/di/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_reactive@3.0.1/node_modules/@signe/reactive/dist/index.js +239 -0
- package/dist/node_modules/.pnpm/@signe_reactive@3.0.1/node_modules/@signe/reactive/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/chunk-EUXUH3YW.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/index.js +696 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/client/index.js +44 -0
- package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/client/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{@signe_sync@2.9.0 → @signe_sync@3.0.1}/node_modules/@signe/sync/dist/index.js +57 -141
- package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +1 -1
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js +27 -27
- package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +1 -1
- package/dist/presets/animation.js.map +1 -1
- package/dist/presets/faceset.js.map +1 -1
- package/dist/presets/icon.js.map +1 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/lpc.js.map +1 -1
- package/dist/presets/rmspritesheet.js.map +1 -1
- package/dist/services/AbstractSocket.js.map +1 -1
- package/dist/services/actionInput.d.ts +12 -0
- package/dist/services/actionInput.js +27 -0
- package/dist/services/actionInput.js.map +1 -0
- package/dist/services/actionInput.spec.d.ts +1 -0
- package/dist/services/keyboardControls.js.map +1 -1
- package/dist/services/loadMap.d.ts +6 -0
- package/dist/services/loadMap.js +1 -1
- package/dist/services/loadMap.js.map +1 -1
- package/dist/services/mmorpg-connection.d.ts +5 -0
- package/dist/services/mmorpg-connection.js +50 -0
- package/dist/services/mmorpg-connection.js.map +1 -0
- package/dist/services/mmorpg-connection.spec.d.ts +1 -0
- package/dist/services/mmorpg.d.ts +10 -4
- package/dist/services/mmorpg.js +56 -33
- package/dist/services/mmorpg.js.map +1 -1
- package/dist/services/pointerContext.d.ts +11 -0
- package/dist/services/pointerContext.js +48 -0
- package/dist/services/pointerContext.js.map +1 -0
- package/dist/services/pointerContext.spec.d.ts +1 -0
- package/dist/services/save.js.map +1 -1
- package/dist/services/save.spec.d.ts +1 -0
- package/dist/services/standalone-message.d.ts +1 -0
- package/dist/services/standalone-message.js +9 -0
- package/dist/services/standalone-message.js.map +1 -0
- package/dist/services/standalone.js +4 -3
- package/dist/services/standalone.js.map +1 -1
- package/dist/services/standalone.spec.d.ts +1 -0
- package/dist/utils/getEntityProp.js +4 -3
- package/dist/utils/getEntityProp.js.map +1 -1
- package/dist/utils/getEntityProp.spec.d.ts +1 -0
- package/dist/utils/readPropValue.d.ts +2 -0
- package/dist/utils/readPropValue.js +13 -0
- package/dist/utils/readPropValue.js.map +1 -0
- package/package.json +13 -14
- package/src/Game/AnimationManager.spec.ts +30 -0
- package/src/Game/AnimationManager.ts +22 -10
- package/src/Game/Map.ts +91 -2
- package/src/Game/Object.ts +148 -69
- package/src/Game/ProjectileManager.spec.ts +338 -0
- package/src/Game/ProjectileManager.ts +324 -0
- package/src/Gui/Gui.spec.ts +273 -0
- package/src/Gui/Gui.ts +105 -50
- package/src/Resource.ts +1 -2
- package/src/RpgClient.ts +125 -17
- package/src/RpgClientEngine.ts +457 -87
- package/src/components/character.ce +441 -32
- package/src/components/dynamics/bar.ce +88 -0
- package/src/components/dynamics/image.ce +21 -0
- package/src/components/dynamics/parse-value.spec.ts +83 -0
- package/src/components/dynamics/parse-value.ts +111 -37
- package/src/components/dynamics/shape-utils.spec.ts +46 -0
- package/src/components/dynamics/shape-utils.ts +61 -0
- package/src/components/dynamics/shape.ce +90 -0
- package/src/components/dynamics/text.ce +35 -149
- package/src/components/gui/dialogbox/index.ce +18 -8
- package/src/components/gui/gameover.ce +2 -1
- package/src/components/gui/menu/equip-menu.ce +2 -1
- package/src/components/gui/menu/exit-menu.ce +2 -1
- package/src/components/gui/menu/items-menu.ce +3 -2
- package/src/components/gui/menu/main-menu.ce +2 -1
- package/src/components/gui/save-load.ce +2 -1
- package/src/components/gui/shop/shop.ce +3 -2
- package/src/components/gui/title-screen.ce +2 -1
- package/src/components/index.ts +2 -1
- package/src/components/player-components-utils.spec.ts +109 -0
- package/src/components/player-components-utils.ts +205 -0
- package/src/components/player-components.ce +222 -0
- package/src/components/prebuilt/hp-bar.ce +4 -3
- package/src/components/prebuilt/light-halo.ce +2 -2
- package/src/components/scenes/canvas.ce +175 -8
- package/src/components/scenes/draw-map.ce +18 -17
- package/src/components/scenes/event-layer.ce +1 -2
- package/src/core/setup.ts +2 -2
- package/src/decorators/spritesheet.ts +8 -0
- package/src/index.ts +4 -0
- package/src/module.ts +18 -1
- package/src/services/actionInput.spec.ts +101 -0
- package/src/services/actionInput.ts +53 -0
- package/src/services/loadMap.ts +2 -0
- package/src/services/mmorpg-connection.spec.ts +99 -0
- package/src/services/mmorpg-connection.ts +69 -0
- package/src/services/mmorpg.ts +68 -36
- package/src/services/pointerContext.spec.ts +36 -0
- package/src/services/pointerContext.ts +84 -0
- package/src/services/save.spec.ts +127 -0
- package/src/services/standalone-message.ts +7 -0
- package/src/services/standalone.spec.ts +34 -0
- package/src/services/standalone.ts +3 -2
- package/src/utils/getEntityProp.spec.ts +96 -0
- package/src/utils/getEntityProp.ts +4 -3
- package/src/utils/readPropValue.ts +16 -0
- package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
- package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
- package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
- package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
- package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
import { inject } from "../../../core/inject.js";
|
|
2
|
+
import { getKeyboardControlBind } from "../../../services/actionInput.js";
|
|
2
3
|
import { RpgClientEngine } from "../../../RpgClientEngine.js";
|
|
3
4
|
import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, signal, useDefineProps, useProps } from "canvasengine";
|
|
4
5
|
//#region src/components/gui/shop/shop.ce
|
|
5
6
|
function component($$props) {
|
|
6
7
|
useProps($$props);
|
|
7
8
|
const defineProps = useDefineProps($$props);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var defaultMessage = "Welcome to my shop!";
|
|
26
|
-
var tabs = [
|
|
9
|
+
const engine = inject(RpgClientEngine);
|
|
10
|
+
const currentPlayer = engine.scene.currentPlayer;
|
|
11
|
+
const keyboardControls = engine.globalConfig.keyboardControls;
|
|
12
|
+
const iconSheet = (iconId) => ({
|
|
13
|
+
definition: engine.getSpriteSheet(iconId),
|
|
14
|
+
playing: "default"
|
|
15
|
+
});
|
|
16
|
+
const goldTerm = engine.globalConfig.goldTerm || "G";
|
|
17
|
+
const selectedItem = signal(0);
|
|
18
|
+
const selectedTab = signal(0);
|
|
19
|
+
const tradeMode = signal("buy");
|
|
20
|
+
const tradeView = signal("mode");
|
|
21
|
+
const selectedModeIndex = signal(0);
|
|
22
|
+
const quantity = signal(1);
|
|
23
|
+
const quantityDialogOpen = signal(false);
|
|
24
|
+
const defaultMessage = "Welcome to my shop!";
|
|
25
|
+
const tabs = [
|
|
27
26
|
{
|
|
28
27
|
id: "item",
|
|
29
28
|
label: "Items"
|
|
@@ -37,77 +36,52 @@ function component($$props) {
|
|
|
37
36
|
label: "Armor"
|
|
38
37
|
}
|
|
39
38
|
];
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return resolveProp(data) || {};
|
|
46
|
-
});
|
|
47
|
-
var shopMessage = computed(function() {
|
|
48
|
-
var message = resolveProp(guiData().message);
|
|
39
|
+
const { data, onInteraction, onFinish } = defineProps();
|
|
40
|
+
const resolveProp = (value) => typeof value === "function" ? value() : value;
|
|
41
|
+
const guiData = computed(() => resolveProp(data) || {});
|
|
42
|
+
const shopMessage = computed(() => {
|
|
43
|
+
const message = resolveProp(guiData().message);
|
|
49
44
|
return message ? String(message) : defaultMessage;
|
|
50
45
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var hasFace = computed(function() {
|
|
55
|
-
var value = face();
|
|
46
|
+
const face = computed(() => resolveProp(guiData().face));
|
|
47
|
+
const hasFace = computed(() => {
|
|
48
|
+
const value = face();
|
|
56
49
|
return value && value.id;
|
|
57
50
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
var activeItems = computed(function() {
|
|
65
|
-
return tradeMode() === "buy" ? buyItems() : sellItems();
|
|
66
|
-
});
|
|
67
|
-
var filteredItems = computed(function() {
|
|
68
|
-
var tab = tabs[selectedTab()];
|
|
69
|
-
var items = activeItems();
|
|
51
|
+
const buyItems = computed(() => guiData().items || []);
|
|
52
|
+
const sellItems = computed(() => guiData().sellItems || []);
|
|
53
|
+
const activeItems = computed(() => tradeMode() === "buy" ? buyItems() : sellItems());
|
|
54
|
+
const filteredItems = computed(() => {
|
|
55
|
+
const tab = tabs[selectedTab()];
|
|
56
|
+
const items = activeItems();
|
|
70
57
|
if (!tab) return [];
|
|
71
|
-
return items.filter(
|
|
72
|
-
return (item === null || item === void 0 ? void 0 : item.type) === tab.id;
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
var currentItem = computed(function() {
|
|
76
|
-
return filteredItems()[selectedItem()];
|
|
58
|
+
return items.filter((item) => item?.type === tab.id);
|
|
77
59
|
});
|
|
78
|
-
|
|
79
|
-
|
|
60
|
+
const currentItem = computed(() => filteredItems()[selectedItem()]);
|
|
61
|
+
const gold = computed(() => currentPlayer()._gold());
|
|
62
|
+
const actionLabel = computed(() => tradeMode() === "buy" ? "Buy" : "Sell");
|
|
63
|
+
const faceSheet = (graphicId, animationName) => ({
|
|
64
|
+
definition: engine.getSpriteSheet(graphicId),
|
|
65
|
+
playing: animationName || "default"
|
|
80
66
|
});
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
});
|
|
84
|
-
var faceSheet = function(graphicId, animationName) {
|
|
85
|
-
return {
|
|
86
|
-
definition: engine.getSpriteSheet(graphicId),
|
|
87
|
-
playing: animationName || "default"
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
var maxQuantity = computed(function() {
|
|
91
|
-
var _a;
|
|
92
|
-
var item = currentItem();
|
|
67
|
+
const maxQuantity = computed(() => {
|
|
68
|
+
const item = currentItem();
|
|
93
69
|
if (!item) return 0;
|
|
94
|
-
|
|
70
|
+
const price = item?.price || 0;
|
|
95
71
|
if (price <= 0) return 0;
|
|
96
72
|
if (tradeMode() === "sell") {
|
|
97
|
-
|
|
73
|
+
const qty = item?.quantity ?? 0;
|
|
98
74
|
return Math.max(0, qty);
|
|
99
75
|
}
|
|
100
76
|
return Math.max(1, Math.floor(gold() / price));
|
|
101
77
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return (((_a = currentItem()) === null || _a === void 0 ? void 0 : _a.price) || 0) * quantity();
|
|
78
|
+
const totalPrice = computed(() => {
|
|
79
|
+
return (currentItem()?.price || 0) * quantity();
|
|
105
80
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
var order = [
|
|
81
|
+
const displayStats = computed(() => {
|
|
82
|
+
const stats = currentItem()?.stats || {};
|
|
83
|
+
const params = guiData().playerParams || {};
|
|
84
|
+
const order = [
|
|
111
85
|
"atk",
|
|
112
86
|
"def",
|
|
113
87
|
"pdef",
|
|
@@ -119,7 +93,7 @@ function component($$props) {
|
|
|
119
93
|
"maxHp",
|
|
120
94
|
"maxSp"
|
|
121
95
|
];
|
|
122
|
-
|
|
96
|
+
const labels = {
|
|
123
97
|
atk: "ATK",
|
|
124
98
|
def: "DEF",
|
|
125
99
|
pdef: "PDEF",
|
|
@@ -131,21 +105,16 @@ function component($$props) {
|
|
|
131
105
|
maxHp: "MAX HP",
|
|
132
106
|
maxSp: "MAX SP"
|
|
133
107
|
};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
var keys = orderedKeys.concat(extraKeys);
|
|
141
|
-
var list = [];
|
|
142
|
-
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
143
|
-
var key = keys_1[_i];
|
|
144
|
-
var delta = stats[key];
|
|
108
|
+
const orderedKeys = order.filter((key) => stats[key] !== void 0);
|
|
109
|
+
const extraKeys = Object.keys(stats).filter((key) => !order.includes(key));
|
|
110
|
+
const keys = orderedKeys.concat(extraKeys);
|
|
111
|
+
const list = [];
|
|
112
|
+
for (const key of keys) {
|
|
113
|
+
const delta = stats[key];
|
|
145
114
|
if (delta === void 0 || delta === 0) continue;
|
|
146
|
-
|
|
115
|
+
let current = params[key];
|
|
147
116
|
if (current === void 0 && key === "def") current = params.pdef;
|
|
148
|
-
|
|
117
|
+
const next = current !== void 0 ? current + delta : void 0;
|
|
149
118
|
list.push({
|
|
150
119
|
key,
|
|
151
120
|
label: labels[key] || key.toUpperCase(),
|
|
@@ -156,15 +125,9 @@ function component($$props) {
|
|
|
156
125
|
}
|
|
157
126
|
return list;
|
|
158
127
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
var navTab = createTabindexNavigator(selectedTab, { count: function() {
|
|
163
|
-
return tabs.length;
|
|
164
|
-
} }, "wrap");
|
|
165
|
-
var navMode = createTabindexNavigator(selectedModeIndex, { count: function() {
|
|
166
|
-
return 2;
|
|
167
|
-
} }, "wrap");
|
|
128
|
+
const nav = createTabindexNavigator(selectedItem, { count: () => filteredItems().length }, "wrap");
|
|
129
|
+
const navTab = createTabindexNavigator(selectedTab, { count: () => tabs.length }, "wrap");
|
|
130
|
+
const navMode = createTabindexNavigator(selectedModeIndex, { count: () => 2 }, "wrap");
|
|
168
131
|
function selectItem(index) {
|
|
169
132
|
return function() {
|
|
170
133
|
selectedItem.set(index);
|
|
@@ -188,11 +151,10 @@ function component($$props) {
|
|
|
188
151
|
};
|
|
189
152
|
}
|
|
190
153
|
function isItemDisabled(item) {
|
|
191
|
-
var _a;
|
|
192
154
|
if (!item) return true;
|
|
193
|
-
|
|
155
|
+
const price = item?.price || 0;
|
|
194
156
|
if (price <= 0) return true;
|
|
195
|
-
if (tradeMode() === "sell") return (
|
|
157
|
+
if (tradeMode() === "sell") return (item?.quantity ?? 0) <= 0;
|
|
196
158
|
return gold() < price;
|
|
197
159
|
}
|
|
198
160
|
function backToMode() {
|
|
@@ -202,9 +164,9 @@ function component($$props) {
|
|
|
202
164
|
}
|
|
203
165
|
function changeQuantity(delta) {
|
|
204
166
|
return function() {
|
|
205
|
-
|
|
167
|
+
const limit = maxQuantity();
|
|
206
168
|
if (limit <= 0) return;
|
|
207
|
-
|
|
169
|
+
const nextValue = Math.max(1, Math.min(limit, quantity() + delta));
|
|
208
170
|
if (nextValue !== quantity()) quantity.set(nextValue);
|
|
209
171
|
};
|
|
210
172
|
}
|
|
@@ -215,7 +177,7 @@ function component($$props) {
|
|
|
215
177
|
}
|
|
216
178
|
function confirmTrade() {
|
|
217
179
|
return function() {
|
|
218
|
-
|
|
180
|
+
const item = currentItem();
|
|
219
181
|
if (!item || isItemDisabled(item)) {
|
|
220
182
|
quantityDialogOpen.set(false);
|
|
221
183
|
return;
|
|
@@ -227,16 +189,16 @@ function component($$props) {
|
|
|
227
189
|
quantityDialogOpen.set(false);
|
|
228
190
|
};
|
|
229
191
|
}
|
|
230
|
-
effect(
|
|
231
|
-
|
|
192
|
+
effect(() => {
|
|
193
|
+
const count = filteredItems().length;
|
|
232
194
|
if (selectedItem() >= count) selectedItem.set(Math.max(0, count - 1));
|
|
233
195
|
});
|
|
234
|
-
|
|
196
|
+
const modeControls = signal({
|
|
235
197
|
left: {
|
|
236
198
|
repeat: true,
|
|
237
199
|
bind: keyboardControls.left,
|
|
238
200
|
throttle: 150,
|
|
239
|
-
keyDown
|
|
201
|
+
keyDown() {
|
|
240
202
|
navMode.next(-1);
|
|
241
203
|
}
|
|
242
204
|
},
|
|
@@ -244,14 +206,14 @@ function component($$props) {
|
|
|
244
206
|
repeat: true,
|
|
245
207
|
bind: keyboardControls.right,
|
|
246
208
|
throttle: 150,
|
|
247
|
-
keyDown
|
|
209
|
+
keyDown() {
|
|
248
210
|
navMode.next(1);
|
|
249
211
|
}
|
|
250
212
|
},
|
|
251
213
|
action: {
|
|
252
|
-
bind: keyboardControls.action,
|
|
253
|
-
keyDown
|
|
254
|
-
|
|
214
|
+
bind: getKeyboardControlBind(keyboardControls.action),
|
|
215
|
+
keyDown() {
|
|
216
|
+
const mode = selectedModeIndex() === 0 ? "buy" : "sell";
|
|
255
217
|
tradeMode.set(mode);
|
|
256
218
|
selectedItem.set(0);
|
|
257
219
|
quantity.set(1);
|
|
@@ -260,18 +222,18 @@ function component($$props) {
|
|
|
260
222
|
},
|
|
261
223
|
escape: {
|
|
262
224
|
bind: keyboardControls.escape,
|
|
263
|
-
keyDown
|
|
225
|
+
keyDown() {
|
|
264
226
|
onFinish();
|
|
265
227
|
}
|
|
266
228
|
},
|
|
267
229
|
gamepad: { enabled: true }
|
|
268
230
|
});
|
|
269
|
-
|
|
231
|
+
const itemControls = signal({
|
|
270
232
|
up: {
|
|
271
233
|
repeat: true,
|
|
272
234
|
bind: keyboardControls.up,
|
|
273
235
|
throttle: 150,
|
|
274
|
-
keyDown
|
|
236
|
+
keyDown() {
|
|
275
237
|
if (quantityDialogOpen()) {
|
|
276
238
|
changeQuantity(1)();
|
|
277
239
|
return;
|
|
@@ -283,7 +245,7 @@ function component($$props) {
|
|
|
283
245
|
repeat: true,
|
|
284
246
|
bind: keyboardControls.down,
|
|
285
247
|
throttle: 150,
|
|
286
|
-
keyDown
|
|
248
|
+
keyDown() {
|
|
287
249
|
if (quantityDialogOpen()) {
|
|
288
250
|
changeQuantity(-1)();
|
|
289
251
|
return;
|
|
@@ -292,16 +254,16 @@ function component($$props) {
|
|
|
292
254
|
}
|
|
293
255
|
},
|
|
294
256
|
action: {
|
|
295
|
-
bind: keyboardControls.action,
|
|
296
|
-
keyDown
|
|
257
|
+
bind: getKeyboardControlBind(keyboardControls.action),
|
|
258
|
+
keyDown() {
|
|
297
259
|
if (quantityDialogOpen()) {
|
|
298
|
-
|
|
299
|
-
if (!
|
|
260
|
+
const item = currentItem();
|
|
261
|
+
if (!item || isItemDisabled(item)) {
|
|
300
262
|
quantityDialogOpen.set(false);
|
|
301
263
|
return;
|
|
302
264
|
}
|
|
303
265
|
onInteraction(tradeMode() === "buy" ? "buyItem" : "sellItem", {
|
|
304
|
-
id:
|
|
266
|
+
id: item.id,
|
|
305
267
|
nb: quantity()
|
|
306
268
|
});
|
|
307
269
|
quantityDialogOpen.set(false);
|
|
@@ -312,7 +274,7 @@ function component($$props) {
|
|
|
312
274
|
},
|
|
313
275
|
escape: {
|
|
314
276
|
bind: keyboardControls.escape,
|
|
315
|
-
keyDown
|
|
277
|
+
keyDown() {
|
|
316
278
|
if (quantityDialogOpen()) {
|
|
317
279
|
quantityDialogOpen.set(false);
|
|
318
280
|
return;
|
|
@@ -322,12 +284,12 @@ function component($$props) {
|
|
|
322
284
|
},
|
|
323
285
|
gamepad: { enabled: true }
|
|
324
286
|
});
|
|
325
|
-
|
|
287
|
+
const tabControls = signal({
|
|
326
288
|
left: {
|
|
327
289
|
repeat: true,
|
|
328
290
|
bind: keyboardControls.left,
|
|
329
291
|
throttle: 150,
|
|
330
|
-
keyDown
|
|
292
|
+
keyDown() {
|
|
331
293
|
if (quantityDialogOpen()) return;
|
|
332
294
|
navTab.next(-1);
|
|
333
295
|
}
|
|
@@ -336,7 +298,7 @@ function component($$props) {
|
|
|
336
298
|
repeat: true,
|
|
337
299
|
bind: keyboardControls.right,
|
|
338
300
|
throttle: 150,
|
|
339
|
-
keyDown
|
|
301
|
+
keyDown() {
|
|
340
302
|
if (quantityDialogOpen()) return;
|
|
341
303
|
navTab.next(1);
|
|
342
304
|
}
|
|
@@ -517,7 +479,7 @@ function component($$props) {
|
|
|
517
479
|
textContent: computed(() => "Qty: x" + currentItem()?.quantity)
|
|
518
480
|
}))
|
|
519
481
|
]),
|
|
520
|
-
h(DOMElement, { element: "div" }, cond(currentItem()?.equipped, () => h(DOMElement, {
|
|
482
|
+
h(DOMElement, { element: "div" }, cond(computed(() => currentItem()?.equipped), () => h(DOMElement, {
|
|
521
483
|
element: "div",
|
|
522
484
|
attrs: { class: "rpg-shop-equipped" },
|
|
523
485
|
textContent: "Already equipped"
|
|
@@ -646,7 +608,8 @@ function component($$props) {
|
|
|
646
608
|
})])
|
|
647
609
|
])))]))]));
|
|
648
610
|
}
|
|
611
|
+
var __ce_component = component;
|
|
649
612
|
//#endregion
|
|
650
|
-
export {
|
|
613
|
+
export { __ce_component as default };
|
|
651
614
|
|
|
652
615
|
//# sourceMappingURL=shop.ce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop.ce.js","names":[],"sources":["../../../../src/components/gui/shop/shop.ce"],"sourcesContent":[" <DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-shop-container rpg-anim-fade-in\">\n <div class=\"rpg-shop-header\">\n <div class=\"rpg-shop-merchant\">\n <div>\n @if (hasFace) {\n <div class=\"rpg-shop-merchant-avatar\">\n <DOMSprite \n sheet={faceSheet(face().id, face().expression)} \n width=\"50px\"\n height=\"50px\"\n objectFit=\"contain\"\n /> \n </div>\n }\n </div>\n <div class=\"rpg-shop-merchant-info\">\n <p>{{ shopMessage() }}</p>\n </div>\n </div>\n <div class=\"rpg-shop-gold\">\n {{ gold() }} {{ goldTerm }}\n </div>\n </div>\n\n <div class=\"rpg-shop-body\">\n <div class=\"rpg-shop-left\">\n @if (tradeView() === 'mode') {\n <div class=\"rpg-shop-content rpg-shop-content-mode\">\n <div class=\"rpg-shop-details rpg-shop-details-mode\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">🛒</div>\n <h2 style=\"margin: 0;\">Choose an action</h2>\n </div>\n <div class=\"rpg-shop-trade\">\n <Navigation tabindex={selectedModeIndex} controls={modeControls}>\n <div class=\"rpg-shop-tabs rpg-shop-trade-tabs\">\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 0}}\n click={selectMode('buy')}\n >Buy</div>\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 1}}\n click={selectMode('sell')}\n >Sell</div>\n </div>\n </Navigation>\n </div>\n </div>\n </div>\n }\n @else {\n <div>\n <Navigation tabindex={selectedTab} controls={tabControls}> \n <div class=\"rpg-shop-tabs\">\n @for ((tab,index) of tabs) {\n <div \n class=\"rpg-shop-tab\" \n class={{active: selectedTab() === index}} \n tabindex={index} \n click={selectTab(index)}\n >{{ tab.label }}</div>\n }\n </div>\n </Navigation>\n\n <div class=\"rpg-shop-content\">\n <div class=\"rpg-shop-grid\">\n <Navigation tabindex={selectedItem} controls={itemControls}> \n @for ((item,index) of filteredItems) { \n <div class=\"rpg-shop-card\" class={{disabled: isItemDisabled(item), selected: selectedItem() === index}} tabindex={index} click={selectItem(index)}>\n <div class=\"rpg-shop-card-icon\">\n @if (item.icon) {\n <DOMSprite \n sheet={iconSheet(item.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <div class=\"rpg-shop-card-name\">{{ item.name }}</div>\n <div class=\"rpg-shop-card-price\">{{ item.price }} {{ goldTerm }}</div>\n @if (item.quantity !== undefined) {\n <div class=\"rpg-shop-card-qty\">x{{ item.quantity }}</div>\n }\n @if (item.equipped) {\n <div class=\"rpg-shop-card-tag\">Equipped</div>\n }\n </div>\n }\n </Navigation>\n </div>\n\n <div class=\"rpg-shop-details\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">\n <DOMSprite \n sheet={iconSheet(currentItem()?.icon)} \n playing=\"default\" \n width=\"80px\"\n height=\"80px\"\n objectFit=\"contain\"\n />\n </div>\n <h2 style=\"margin: 0;\">{{ currentItem()?.name || \"\" }}</h2>\n <p style=\"color: #ffd700; font-weight: bold; margin: 8px 0;\">{{ currentItem()?.price ?? 0 }} {{ goldTerm }}</p>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-details-qty\">Qty: x{{ currentItem()?.quantity }}</div>\n }\n </div>\n <div>\n @if (currentItem()?.equipped) {\n <div class=\"rpg-shop-equipped\">Already equipped</div>\n }\n </div>\n <div class=\"rpg-shop-details-desc\">\n {{ currentItem()?.description || \"\" }}\n </div>\n <div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-shop-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-shop-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-shop-stat-key\">{{ stat.label }}</div>\n <div class=\"rpg-shop-stat-value\">\n {{ stat.delta > 0 ? '+' : '' }}{{ stat.delta }}\n </div>\n @if (stat.current !== undefined) {\n <div class=\"rpg-shop-stat-current\">{{ stat.current }} → {{ stat.next }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n <button class=\"rpg-shop-btn\" click={backToMode()}>Back</button>\n </div>\n </div>\n </div>\n }\n @if (quantityDialogOpen) {\n <div class=\"rpg-shop-modal\">\n <div class=\"rpg-shop-modal-card\">\n <div class=\"rpg-shop-modal-title\">{{ actionLabel }}</div>\n <div class=\"rpg-shop-modal-item\">{{ currentItem()?.name || \"\" }}</div>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-modal-qty\">Available: x{{ currentItem()?.quantity }}</div>\n }\n <div class=\"rpg-shop-quantity\">\n <div class=\"rpg-shop-quantity-label\">Quantity</div>\n <div class=\"rpg-shop-quantity-controls\">\n <button class=\"rpg-shop-btn\" click={changeQuantity(-1)}>-</button>\n <div class=\"rpg-shop-quantity-value\">{{ quantity }}</div>\n <button class=\"rpg-shop-btn\" click={changeQuantity(1)}>+</button>\n </div>\n </div>\n <div class=\"rpg-shop-modal-total\">\n <span>Total</span>\n <span>{{ totalPrice() }} {{ goldTerm }}</span>\n </div>\n <div class=\"rpg-shop-modal-actions\">\n <button class=\"rpg-shop-btn rpg-shop-btn-secondary\" click={closeQuantityDialog()}>Cancel</button>\n <button class=\"rpg-shop-btn\" click={confirmTrade()}>\n {{ actionLabel() }} x{{ quantity() }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </DOMContainer>\n\n<script>\n import { mount, signal, computed, createTabindexNavigator, effect } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine)\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n })\n const goldTerm = engine.globalConfig.goldTerm || 'G'\n\n const selectedItem = signal(0)\n const selectedTab = signal(0)\n const tradeMode = signal('buy')\n const tradeView = signal('mode')\n const selectedModeIndex = signal(0)\n const quantity = signal(1)\n const quantityDialogOpen = signal(false)\n const defaultMessage = 'Welcome to my shop!'\n const tabs = [\n { id: 'item', label: 'Items' },\n { id: 'weapon', label: 'Weapons' },\n { id: 'armor', label: 'Armor' }\n ]\n\n const { data, onInteraction , onFinish } = defineProps()\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value\n const guiData = computed(() => resolveProp(data) || {})\n const shopMessage = computed(() => {\n const message = resolveProp(guiData().message)\n return message ? String(message) : defaultMessage\n })\n const face = computed(() => resolveProp(guiData().face))\n const hasFace = computed(() => {\n const value = face()\n return value && value.id\n })\n const buyItems = computed(() => guiData().items || [])\n const sellItems = computed(() => guiData().sellItems || [])\n const activeItems = computed(() => tradeMode() === 'buy' ? buyItems() : sellItems())\n const filteredItems = computed(() => {\n const tab = tabs[selectedTab()]\n const items = activeItems()\n if (!tab) return []\n return items.filter((item) => item?.type === tab.id)\n })\n const currentItem = computed(() => filteredItems()[selectedItem()])\n const gold = computed(() => currentPlayer()._gold())\n const actionLabel = computed(() => tradeMode() === 'buy' ? 'Buy' : 'Sell')\n const faceSheet = (graphicId, animationName) => ({\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName || \"default\"\n })\n const maxQuantity = computed(() => {\n const item = currentItem()\n if (!item) return 0\n const price = item?.price || 0\n if (price <= 0) return 0\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return Math.max(0, qty)\n }\n return Math.max(1, Math.floor(gold() / price))\n })\n const totalPrice = computed(() => {\n const price = currentItem()?.price || 0\n return price * quantity()\n })\n const displayStats = computed(() => {\n const stats = currentItem()?.stats || {}\n const params = guiData().playerParams || {}\n const order = ['atk', 'def', 'pdef', 'sdef', 'str', 'dex', 'int', 'agi', 'maxHp', 'maxSp']\n const labels = {\n atk: 'ATK',\n def: 'DEF',\n pdef: 'PDEF',\n sdef: 'SDEF',\n str: 'STR',\n dex: 'DEX',\n int: 'INT',\n agi: 'AGI',\n maxHp: 'MAX HP',\n maxSp: 'MAX SP'\n }\n const orderedKeys = order.filter((key) => stats[key] !== undefined)\n const extraKeys = Object.keys(stats).filter((key) => !order.includes(key))\n const keys = orderedKeys.concat(extraKeys)\n const list = []\n for (const key of keys) {\n const delta = stats[key]\n if (delta === undefined || delta === 0) continue\n let current = params[key]\n if (current === undefined && key === 'def') current = params.pdef\n const next = current !== undefined ? current + delta : undefined\n list.push({\n key,\n label: labels[key] || key.toUpperCase(),\n delta,\n current,\n next\n })\n }\n return list\n })\n const nav = createTabindexNavigator(selectedItem, { count: () => filteredItems().length }, 'wrap')\n const navTab = createTabindexNavigator(selectedTab, { count: () => tabs.length }, 'wrap')\n const navMode = createTabindexNavigator(selectedModeIndex, { count: () => 2 }, 'wrap')\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index)\n quantity.set(1)\n if (!isItemDisabled(filteredItems()[index])) {\n quantityDialogOpen.set(true)\n }\n }\n }\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index)\n selectedItem.set(0)\n }\n }\n\n function selectMode(mode) {\n return function() {\n tradeMode.set(mode)\n selectedModeIndex.set(mode === 'buy' ? 0 : 1)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n }\n\n function isItemDisabled(item) {\n if (!item) return true\n const price = item?.price || 0\n if (price <= 0) return true\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return qty <= 0\n }\n return gold() < price\n }\n\n function backToMode() {\n return function() {\n tradeView.set('mode')\n }\n }\n\n function changeQuantity(delta) {\n return function() {\n const limit = maxQuantity()\n if (limit <= 0) return\n const nextValue = Math.max(1, Math.min(limit, quantity() + delta))\n if (nextValue !== quantity()) {\n quantity.set(nextValue)\n }\n }\n }\n\n function closeQuantityDialog() {\n return function() {\n quantityDialogOpen.set(false)\n }\n }\n\n function confirmTrade() {\n return function() {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n }\n }\n\n effect(() => {\n const count = filteredItems().length\n if (selectedItem() >= count) {\n selectedItem.set(Math.max(0, count - 1))\n }\n })\n\n const modeControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n navMode.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n navMode.next(1)\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n const mode = selectedModeIndex() === 0 ? 'buy' : 'sell'\n tradeMode.set(mode)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n onFinish()\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const itemControls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(1)()\n return\n }\n nav.next(-1)\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(-1)()\n return\n }\n nav.next(1)\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (quantityDialogOpen()) {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n return\n }\n const item = currentItem()\n if (!isItemDisabled(item)) {\n quantityDialogOpen.set(true)\n }\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (quantityDialogOpen()) {\n quantityDialogOpen.set(false)\n return\n }\n tradeView.set('mode')\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const tabControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(1)\n }\n },\n gamepad: {\n enabled: true\n }\n })\n</script>\n"],"mappings":";;;;AAWM,SAAwB,UAAM,SAAW;AACxB,UAAS,QAAG;CAC3B,MAAM,cAAc,eAAK,QAAA;CACzB,IAAI,SAAS,OAAG,gBAAA;CACxB,IAAI,gBAAgB,OAAK,MAAA;CACzB,IAAI,mBAAiB,OAAS,aAAW;CACzC,IAAI,YAAY,SAAU,QAAI;AAAA,SAAc;GACxC,YAAY,OAAM,eAAG,OAAA;GACrB,SAAS;GACZ;;CACD,IAAI,WAAW,OAAO,aAAa,YAAY;CAC/C,IAAI,eAAc,OAAG,EAAA;CACrB,IAAI,cAAa,OAAA,EAAA;;CAEjB,IAAI,YAAY,OAAO,OAAK;CAC5B,IAAI,oBAAiB,OAAU,EAAC;CAChC,IAAI,WAAW,OAAM,EAAA;CACrB,IAAI,qBAAqB,OAAO,MAAI;CACpC,IAAI,iBAAiB;CACrB,IAAI,OAAO;EACP;GAAE,IAAI;GAAQ,OAAO;GAAQ;EAC7B;GAAE,IAAI;GAAU,OAAO;GAAW;EAClC;GAAE,IAAI;GAAS,OAAO;GAAG;EAC5B;CACD,IAAI,KAAK,aAAa,EAAE,OAAK,GAAA,MAAW,gBAAU,GAAA,eAAmB,WAAU,GAAA;CAC/E,IAAI,cAAc,SAAU,OAAK;AAAI,SAAO,OAAI,UAAa,aAAY,OAAK,GAAA;;CAC9E,IAAI,UAAU,SAAS,WAAY;AAAE,SAAA,YAAA,KAAA,IAAA,EAAA;GAAA;CACrC,IAAI,cAAc,SAAS,WAAY;EACnC,IAAI,UAAU,YAAY,SAAS,CAAC,QAAQ;AAC5C,SAAO,UAAU,OAAO,QAAQ,GAAG;GACrC;CACF,IAAI,OAAO,SAAS,WAAY;AAAE,SAAG,YAAA,SAAA,CAAA,KAAA;GAAA;CACrC,IAAI,UAAU,SAAS,WAAY;EAC/B,IAAI,QAAQ,MAAM;AAClB,SAAO,SAAS,MAAM;GACxB;CACF,IAAI,WAAW,SAAS,WAAU;AAAG,SAAA,SAAA,CAAA,SAAA,EAAA;GAAA;CACrC,IAAI,YAAY,SAAS,WAAK;AAAA,SAAU,SAAA,CAAA,aAAA,EAAA;GAAA;CACxC,IAAI,cAAc,SAAQ,WAAG;AAAA,SAAA,WAAA,KAAA,QAAA,UAAA,GAAA,WAAA;GAAA;CAC7B,IAAI,gBAAgB,SAAS,WAAA;EACzB,IAAI,MAAM,KAAK,aAAM;EACrB,IAAI,QAAQ,aAAA;AACZ,MAAI,CAAC,IACD,QAAO,EAAE;AACb,SAAO,MAAM,OAAI,SAAW,MAAQ;AAAE,WAAA,SAAa,QAAU,SAAW,KAAG,IAAA,KAAA,IAAA,KAAA,UAAA,IAAA;IAAA;GAC7E;CACF,IAAI,cAAc,SAAS,WAAY;AAAA,SAAS,eAAO,CAAA,cAAA;GAAA;CACvD,IAAI,OAAO,SAAS,WAAY;AAAC,SAAG,eAAA,CAAA,OAAA;GAAA;CACpC,IAAI,cAAc,SAAS,WAAS;AAAK,SAAM,WAAS,KAAA,QAAA,QAAA;GAAA;CACxD,IAAI,YAAY,SAAU,WAAU,eAAgB;AAAA,SAAA;GAChD,YAAY,OAAO,eAAa,UAAU;GAC1C,SAAS,iBAAiB;GAC7B;;CACD,IAAI,cAAc,SAAS,WAAC;EACxB,IAAI;EACJ,IAAI,OAAO,aAAO;YAEd,QAAO;EACX,IAAI,SAAS,SAAQ,QAAS,SAAM,KAAK,IAAK,KAAA,IAAA,KAAA,UAAA;AAC9C,MAAI,SAAS,EACT,QAAO;AACX,MAAI,WAAW,KAAK,QAAQ;GACxB,IAAI,OAAO,KAAK,SAAS,QAAQ,SAAS,KAAK,IAAC,KAAK,IAAK,KAAK,cAAA,QAAA,OAAA,KAAA,IAAA,KAAA;AAC/D,UAAO,KAAK,IAAI,GAAG,IAAI;;AAE3B,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,GAAG,MAAM,CAAC;GAChD;CACF,IAAI,aAAa,SAAS,WAAY;EAClC,IAAI;AAEJ,YADc,KAAK,aAAa,MAAM,QAAQ,OAAE,KAAU,IAAC,KAAO,IAAA,GAAA,UAAA,KACnD,UAAU;GAC3B;CACF,IAAI,eAAe,SAAS,WAAY;EACpC,IAAI;EACJ,IAAI,UAAU,KAAK,aAAa,MAAK,QAAS,OAAM,KAAK,IAAK,KAAK,IAAI,GAAC,UAAY,EAAE;EACtF,IAAI,SAAS,SAAS,CAAC,gBAAgB,EAAE;EACzC,IAAI,QAAQ;GAAC;GAAO;GAAO;GAAQ;GAAM;GAAS;GAAM;GAAK;GAAU;GAAS;GAAQ;EACxF,IAAI,SAAS;GACT,KAAK;GACL,KAAK;GACL,MAAM;GACN,MAAM;GACN,KAAK;GACL,KAAK;GACL,KAAK;;GAEL,OAAO;GACP,OAAO;GACV;EACD,IAAI,cAAc,MAAM,OAAO,SAAE,KAAS;AAAA,UAAA,MAAA,SAAA,KAAA;IAAA;EAC1C,IAAI,YAAY,OAAO,KAAK,MAAM,CAAC,OAAO,SAAU,KAAC;AAAA,UAAa,CAAC,MAAM,SAAC,IAAA;IAAA;EAC1E,IAAI,OAAO,YAAY,OAAO,UAAM;EACpC,IAAI,OAAO,EAAE;AACb,OAAK,IAAI,KAAK,GAAG,SAAS,MAAM,KAAI,OAAQ,QAAI,MAAA;GAC5C,IAAI,MAAM,OAAO;GACjB,IAAI,QAAQ,MAAM;AAClB,OAAI,UAAU,KAAA,KAAY,UAAG,EACzB;GACJ,IAAI,UAAU,OAAO;AACrB,OAAI,YAAY,KAAA,KAAa,QAAA,MACzB,WAAU,OAAO;GACrB,IAAI,OAAO,YAAY,KAAA,IAAC,UAAA,QAAA,KAAA;AACxB,QAAK,KAAK;IACD;IACL,OAAO,OAAO,QAAO,IAAI,aAAc;IAChC;IACE;IACH;IACT,CAAC;;AAEN,SAAO;GACT;CACF,IAAI,MAAM,wBAAuB,cAAI,EAAa,OAAE,WAAY;AAAA,SAAA,eAAA,CAAA;IAAA,EAAA,OAAA;CAChE,IAAI,SAAS,wBAAwB,aAAW,EAAI,OAAK,WAAM;AAAA,SAAA,KAAA;IAAA,EAAA,OAAA;CAC/D,IAAI,UAAU,wBAAwB,mBAAmB,EAAE,OAAG,WAAc;AAAA,SAAA;IAAA,EAAA,OAAA;CAC5E,SAAS,WAAW,OAAO;AACvB,SAAO,WAAY;AACf,gBAAa,IAAI,MAAM;AACvB,YAAS,IAAI,EAAE;AACf,OAAI,CAAC,eAAe,eAAe,CAAC,OAAM,CACtC,oBAAmB,IAAI,KAAK;;;CAIxC,SAAS,UAAU,OAAO;AACtB,SAAO,WAAY;AACf,eAAY,IAAI,MAAM;AACtB,gBAAa,IAAI,EAAE;;;CAG3B,SAAS,WAAW,MAAK;AACrB,SAAO,WAAW;AACd,aAAQ,IAAA,KAAA;AACR,qBAAa,IAAA,SAAkB,QAAE,IAAA,EAAA;AACjC,gBAAa,IAAI,EAAA;AACjB,YAAS,IAAI,EAAE;AACf,aAAU,IAAI,QAAO;;;CAG7B,SAAS,eAAe,MAAM;EAC1B,IAAI;AACJ,MAAI,CAAC,KACD,QAAO;EACX,IAAI,SAAS,SAAS,QAAO,SAAU,KAAK,IAAI,KAAC,IAAQ,KAAC,UAAS;AACnE,MAAI,SAAS,EACT,QAAO;AACX,MAAI,WAAW,KAAK,OAEhB,UADW,KAAK,SAAS,QAAI,SAAA,KAAA,IAAA,KAAA,IAAA,KAAA,cAAA,QAAA,OAAA,KAAA,IAAA,KAAA,MACf;AAElB,SAAO,MAAM,GAAG;;CAEpB,SAAS,aAAa;AAClB,SAAO,WAAY;AACf,aAAU,IAAI,OAAO;;;CAG7B,SAAS,eAAe,OAAO;AAC3B,SAAO,WAAY;GACf,IAAI,QAAQ,aAAS;AACrB,OAAI,SAAS,EACT;GACJ,IAAI,YAAS,KAAA,IAAA,GAAA,KAAA,IAAA,OAAA,UAAA,GAAA,MAAA,CAAA;AACb,OAAI,cAAK,UAAA,CACP,UAAG,IAAA,UAAA;;;CAIb,SAAI,sBAAwB;AACxB,SAAO,WAAW;AAClB,sBAAS,IAAkB,MAAM;;;CAGrC,SAAS,eAAe;AACpB,SAAM,WAAA;GACN,IAAM,OAAS,aAAa;AACxB,OAAA,CAAA,QAAY,eAAO,KAAc,EAAC;AAClC,uBAAiB,IAAA,MAAA;AACpB;;AAGD,iBAAA,WAAA,KAAA,QAAA,YAAA,YAAqB;IAAO,IAAC,KAAA;IAAA,IAAA,UAAA;IAAA,CAAA;AAC7B,sBAAoB,IAAO,MAAC;;;AAGhC,QAAI,WAAM;EACN,IAAA,QAAM,eAAmB,CAAA;AACzB,MAAA,cAAM,IAAA,MACN,cAAM,IAAe,KAAG,IAAA,GAAQ,QAAM,EAAK,CAAA;GAE7C;CACF,IAAI,eAAW,OAAS;EACpB,MAAM;GACN,QAAA;;GAEA,UAAc;;AAER,YAAA,KAAe,GAAA;;GAErB;EACA,OAAI;GACA,QAAO;GACV,MAAA,iBAAA;GACD,UAAa;GACb,SAAa,WAAY;AACrB,YAAY,KAAE,EAAK;;GAEtB;EACD,QAAM;GACN,MAAM,iBAAqB;GAC3B,SAAM,WAAc;IACd,IAAA,OAAa,mBAAkB,KAAA,IAAA,QAAA;AACjC,cAAY,IAAK,KAAA;AACjB,iBAAc,IAAA,EAAA;AACV,aAAM,IAAO,EAAC;AAClB,cAAa,IAAA,QAAa;;GAE9B;EACA,QAAM;GACN,MAAM,iBAAc;GACpB,SAAM,WAAa;AACf,cAAY;;GAEf;EACD,SAAM,EACF,SAAM,MACT;EACJ,CAAC;CACF,IAAI,eAAe,OAAK;EACpB,IAAI;GACA,QAAI;GACJ,MAAI,iBAAmB;GACvB,UAAA;GACA,SAAO,WAAY;AACtB,QAAA,oBAAA,EAAA;AACK,oBAAqB,EAAE,EAAE;AACrB;;AAET,QAAA,KAAA,GAAA;;GAEA;EACD,MAAI;GACA,QAAM;GACN,MAAM,iBAAS;GACf,UAAU;GACV,SAAS,WAAK;AACV,QAAI,oBAAQ,EAAA;AACR,oBAAQ,GAAA,EAAA;AACR;;AAEJ,QAAI,KAAK,EAAC;;GAEjB;EACD,QAAQ;GACJ,MAAA,iBAAA;GACA,SAAM,WAAc;AACpB,QAAM,oBAAmB,EAAK;KACxB,IAAM,SAAC,aAAmB;AAC1B,SAAM,CAAC,UAAC,eAAA,OAAA,EAAA;AACH,yBAAa,IAAA,MAAA;AACd;;AAGF,mBADU,WAAU,KAAA,QAAA,YAAA,YACE;MAAE,IAAI,OAAM;MAAK,IAAC,UAAU;MAAA,CAAM;AAC5D,wBAAuB,IAAE,MAAA;AACrB;;AAGJ,QAAI,CAAA,eADO,aAAa,CACf,CACL,oBAAO,IAAA,KAAA;;GAGlB;EACD,QAAI;GACH,MAAA,iBAAA;GACD,SAAY,WAAA;AACN,QAAM,oBAAG,EAAA;AACT,wBAAU,IAAA,MAAwB;;;AAGrC,cAAe,IAAG,OAAA;;GAEpB;EACD,SAAS,EACL,SAAI,MACP;EACJ,CAAC;CACF,IAAI,cAAA,OAAA;;GAEA,QAAS;GACL,MAAM,iBAAY;GAClB,UAAI;GACJ,SAAI,WAAiB;AACrB,QAAA,oBAAA,CACJ;;;GAGC;EACD,OAAO;GACH,QAAI;GACJ,MAAI,iBAAkB;GACtB,UAAI;GACJ,SAAI,WAAe;AACnB,QAAA,oBAAA,CACJ;;;GAGC;EACD,SAAS,EACL,SAAS,MACZ;EACJ,CAAC;AAEM,QADW,EAAG,cAAI;EAAA,OAAA;EAAA,QAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,uCAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,mBAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,qBAAA;EAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA,KAAA,eAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,4BAAA;EAAA,EAAA,EAAA,WAAA;EAAA,OAAA,eAAA,UAAA,MAAA,CAAA,IAAA,MAAA,CAAA,WAAA,CAAA;EAAA,OAAA;EAAA,QAAA;EAAA,WAAA;EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0BAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,aAAA,eAAA,aAAA,CAAA;EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;EAAA,aAAA,eAAA,MAAA,GAAA,SAAA;EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;EAAA,EAAA,CAAA,KAAA,eAAA,WAAA,KAAA,OAAA,QAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0CAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0CAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,2BAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yBAAA;EAAA,aAAA;EAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,cAAA;EAAA,aAAA;EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kBAAA;EAAA,EAAA,EAAA,YAAA;EAAA,UAAA;EAAA,UAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,qCAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,gBAAA,gBAAA,EAAA,QAAA,mBAAA,KAAA,GAAA,EAAA,CAAA;GAAA,OAAA,WAAA,MAAA;GAAA;EAAA,aAAA;EAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,gBAAA,gBAAA,EAAA,QAAA,mBAAA,KAAA,GAAA,EAAA,CAAA;GAAA,OAAA,WAAA,OAAA;GAAA;EAAA,aAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA,CAAA,EAAA,YAAA;EAAA,UAAA;EAAA,UAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;EAAA,EAAA,KAAA,OAAA,KAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,gBAAA,gBAAA,EAAA,QAAA,aAAA,KAAA,OAAA,EAAA,CAAA;GAAA,UAAA;GAAA,OAAA,UAAA,MAAA;GAAA;EAAA,aAAA,IAAA;EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,oBAAA;EAAA,EAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;EAAA,EAAA,EAAA,YAAA;EAAA,UAAA;EAAA,UAAA;EAAA,EAAA,KAAA,gBAAA,MAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,iBAAA,gBAAA;IAAA,UAAA,eAAA,KAAA;IAAA,UAAA,cAAA,KAAA;IAAA,EAAA,CAAA;GAAA,UAAA;GAAA,OAAA,WAAA,MAAA;GAAA;EAAA,EAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,sBAAA;GAAA,EAAA,KAAA,KAAA,YAAA,EAAA,WAAA;GAAA,OAAA,eAAA,UAAA,KAAA,KAAA,CAAA;GAAA,SAAA;GAAA,OAAA;GAAA,QAAA;GAAA,WAAA;GAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,sBAAA;GAAA,aAAA,KAAA;GAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,uBAAA;GAAA,aAAA,KAAA,QAAA;GAAA,CAAA;EAAA,KAAA,eAAA,KAAA,aAAA,KAAA,EAAA,QAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;GAAA,aAAA,MAAA,KAAA;GAAA,CAAA,CAAA;EAAA,KAAA,KAAA,gBAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;GAAA,aAAA;GAAA,CAAA,CAAA;EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,oBAAA;EAAA,EAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,2BAAA;GAAA,EAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,yBAAA;IAAA,EAAA,EAAA,WAAA;IAAA,OAAA,eAAA,UAAA,aAAA,EAAA,KAAA,CAAA;IAAA,SAAA;IAAA,OAAA;IAAA,QAAA;IAAA,WAAA;IAAA,CAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,cAAA;IAAA,aAAA,eAAA,aAAA,EAAA,QAAA,GAAA;IAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,qDAAA;IAAA,aAAA,eAAA,aAAA,EAAA,SAAA,IAAA,SAAA;IAAA,CAAA;GAAA,KAAA,eAAA,aAAA,EAAA,aAAA,KAAA,EAAA,QAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,wBAAA;IAAA,aAAA,eAAA,WAAA,aAAA,EAAA,SAAA;IAAA,CAAA,CAAA;GAAA,CAAA;EAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA,KAAA,aAAA,EAAA,gBAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;GAAA,aAAA;GAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,yBAAA;GAAA,aAAA,eAAA,aAAA,EAAA,eAAA,GAAA;GAAA,CAAA;EAAA,EAAA,YAAA,EAAA,SAAA,OAAA,EAAA,KAAA,eAAA,cAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,kBAAA;GAAA,EAAA,KAAA,eAAA,MAAA,UAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,CAAA,iBAAA;IAAA,UAAA,KAAA,QAAA;IAAA,UAAA,KAAA,QAAA;IAAA,CAAA,EAAA;GAAA,EAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,qBAAA;IAAA,aAAA,KAAA;IAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,uBAAA;IAAA,aAAA,KAAA,QAAA,IAAA,MAAA,KAAA,KAAA;IAAA,CAAA;GAAA,KAAA,eAAA,KAAA,YAAA,KAAA,EAAA,QAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,yBAAA;IAAA,aAAA,KAAA,UAAA,QAAA,KAAA;IAAA,CAAA,CAAA;GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA;IAAA,OAAA;IAAA,OAAA,YAAA;IAAA;GAAA,aAAA;GAAA,CAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,KAAA,0BAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kBAAA;EAAA,EAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,uBAAA;EAAA,EAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,wBAAA;GAAA,aAAA;GAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,uBAAA;GAAA,aAAA,eAAA,aAAA,EAAA,QAAA,GAAA;GAAA,CAAA;EAAA,KAAA,eAAA,aAAA,EAAA,aAAA,KAAA,EAAA,QAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,sBAAA;GAAA,aAAA,eAAA,iBAAA,aAAA,EAAA,SAAA;GAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;GAAA,EAAA,CAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,2BAAA;GAAA,aAAA;GAAA,CAAA,EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,8BAAA;GAAA,EAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA;KAAA,OAAA;KAAA,OAAA,eAAA,GAAA;KAAA;IAAA,aAAA;IAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,2BAAA;IAAA,aAAA;IAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA;KAAA,OAAA;KAAA,OAAA,eAAA,EAAA;KAAA;IAAA,aAAA;IAAA,CAAA;GAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,wBAAA;GAAA,EAAA,CAAA,EAAA,YAAA;GAAA,SAAA;GAAA,aAAA;GAAA,CAAA,EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,aAAA,eAAA,YAAA,GAAA,SAAA;GAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,0BAAA;GAAA,EAAA,CAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA;IAAA,OAAA;IAAA,OAAA,qBAAA;IAAA;GAAA,aAAA;GAAA,CAAA,EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA;IAAA,OAAA;IAAA,OAAA,cAAA;IAAA;GAAA,aAAA,eAAA,aAAA,GAAA,OAAA,UAAA,CAAA;GAAA,CAAA,CAAA,CAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"shop.ce.js","names":[],"sources":["../../../../src/components/gui/shop/shop.ce"],"sourcesContent":[" <DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-shop-container rpg-anim-fade-in\">\n <div class=\"rpg-shop-header\">\n <div class=\"rpg-shop-merchant\">\n <div>\n @if (hasFace) {\n <div class=\"rpg-shop-merchant-avatar\">\n <DOMSprite \n sheet={faceSheet(face().id, face().expression)} \n width=\"50px\"\n height=\"50px\"\n objectFit=\"contain\"\n /> \n </div>\n }\n </div>\n <div class=\"rpg-shop-merchant-info\">\n <p>{{ shopMessage() }}</p>\n </div>\n </div>\n <div class=\"rpg-shop-gold\">\n {{ gold() }} {{ goldTerm }}\n </div>\n </div>\n\n <div class=\"rpg-shop-body\">\n <div class=\"rpg-shop-left\">\n @if (tradeView() === 'mode') {\n <div class=\"rpg-shop-content rpg-shop-content-mode\">\n <div class=\"rpg-shop-details rpg-shop-details-mode\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">🛒</div>\n <h2 style=\"margin: 0;\">Choose an action</h2>\n </div>\n <div class=\"rpg-shop-trade\">\n <Navigation tabindex={selectedModeIndex} controls={modeControls}>\n <div class=\"rpg-shop-tabs rpg-shop-trade-tabs\">\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 0}}\n click={selectMode('buy')}\n >Buy</div>\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 1}}\n click={selectMode('sell')}\n >Sell</div>\n </div>\n </Navigation>\n </div>\n </div>\n </div>\n }\n @else {\n <div>\n <Navigation tabindex={selectedTab} controls={tabControls}> \n <div class=\"rpg-shop-tabs\">\n @for ((tab,index) of tabs) {\n <div \n class=\"rpg-shop-tab\" \n class={{active: selectedTab() === index}} \n tabindex={index} \n click={selectTab(index)}\n >{{ tab.label }}</div>\n }\n </div>\n </Navigation>\n\n <div class=\"rpg-shop-content\">\n <div class=\"rpg-shop-grid\">\n <Navigation tabindex={selectedItem} controls={itemControls}> \n @for ((item,index) of filteredItems) { \n <div class=\"rpg-shop-card\" class={{disabled: isItemDisabled(item), selected: selectedItem() === index}} tabindex={index} click={selectItem(index)}>\n <div class=\"rpg-shop-card-icon\">\n @if (item.icon) {\n <DOMSprite \n sheet={iconSheet(item.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <div class=\"rpg-shop-card-name\">{{ item.name }}</div>\n <div class=\"rpg-shop-card-price\">{{ item.price }} {{ goldTerm }}</div>\n @if (item.quantity !== undefined) {\n <div class=\"rpg-shop-card-qty\">x{{ item.quantity }}</div>\n }\n @if (item.equipped) {\n <div class=\"rpg-shop-card-tag\">Equipped</div>\n }\n </div>\n }\n </Navigation>\n </div>\n\n <div class=\"rpg-shop-details\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">\n <DOMSprite \n sheet={iconSheet(currentItem()?.icon)} \n playing=\"default\" \n width=\"80px\"\n height=\"80px\"\n objectFit=\"contain\"\n />\n </div>\n <h2 style=\"margin: 0;\">{{ currentItem()?.name || \"\" }}</h2>\n <p style=\"color: #ffd700; font-weight: bold; margin: 8px 0;\">{{ currentItem()?.price ?? 0 }} {{ goldTerm }}</p>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-details-qty\">Qty: x{{ currentItem()?.quantity }}</div>\n }\n </div>\n <div>\n @if (currentItem()?.equipped) {\n <div class=\"rpg-shop-equipped\">Already equipped</div>\n }\n </div>\n <div class=\"rpg-shop-details-desc\">\n {{ currentItem()?.description || \"\" }}\n </div>\n <div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-shop-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-shop-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-shop-stat-key\">{{ stat.label }}</div>\n <div class=\"rpg-shop-stat-value\">\n {{ stat.delta > 0 ? '+' : '' }}{{ stat.delta }}\n </div>\n @if (stat.current !== undefined) {\n <div class=\"rpg-shop-stat-current\">{{ stat.current }} → {{ stat.next }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n <button class=\"rpg-shop-btn\" click={backToMode()}>Back</button>\n </div>\n </div>\n </div>\n }\n @if (quantityDialogOpen) {\n <div class=\"rpg-shop-modal\">\n <div class=\"rpg-shop-modal-card\">\n <div class=\"rpg-shop-modal-title\">{{ actionLabel }}</div>\n <div class=\"rpg-shop-modal-item\">{{ currentItem()?.name || \"\" }}</div>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-modal-qty\">Available: x{{ currentItem()?.quantity }}</div>\n }\n <div class=\"rpg-shop-quantity\">\n <div class=\"rpg-shop-quantity-label\">Quantity</div>\n <div class=\"rpg-shop-quantity-controls\">\n <button class=\"rpg-shop-btn\" click={changeQuantity(-1)}>-</button>\n <div class=\"rpg-shop-quantity-value\">{{ quantity }}</div>\n <button class=\"rpg-shop-btn\" click={changeQuantity(1)}>+</button>\n </div>\n </div>\n <div class=\"rpg-shop-modal-total\">\n <span>Total</span>\n <span>{{ totalPrice() }} {{ goldTerm }}</span>\n </div>\n <div class=\"rpg-shop-modal-actions\">\n <button class=\"rpg-shop-btn rpg-shop-btn-secondary\" click={closeQuantityDialog()}>Cancel</button>\n <button class=\"rpg-shop-btn\" click={confirmTrade()}>\n {{ actionLabel() }} x{{ quantity() }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </DOMContainer>\n\n<script>\n import { mount, signal, computed, createTabindexNavigator, effect } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine)\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n })\n const goldTerm = engine.globalConfig.goldTerm || 'G'\n\n const selectedItem = signal(0)\n const selectedTab = signal(0)\n const tradeMode = signal('buy')\n const tradeView = signal('mode')\n const selectedModeIndex = signal(0)\n const quantity = signal(1)\n const quantityDialogOpen = signal(false)\n const defaultMessage = 'Welcome to my shop!'\n const tabs = [\n { id: 'item', label: 'Items' },\n { id: 'weapon', label: 'Weapons' },\n { id: 'armor', label: 'Armor' }\n ]\n\n const { data, onInteraction , onFinish } = defineProps()\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value\n const guiData = computed(() => resolveProp(data) || {})\n const shopMessage = computed(() => {\n const message = resolveProp(guiData().message)\n return message ? String(message) : defaultMessage\n })\n const face = computed(() => resolveProp(guiData().face))\n const hasFace = computed(() => {\n const value = face()\n return value && value.id\n })\n const buyItems = computed(() => guiData().items || [])\n const sellItems = computed(() => guiData().sellItems || [])\n const activeItems = computed(() => tradeMode() === 'buy' ? buyItems() : sellItems())\n const filteredItems = computed(() => {\n const tab = tabs[selectedTab()]\n const items = activeItems()\n if (!tab) return []\n return items.filter((item) => item?.type === tab.id)\n })\n const currentItem = computed(() => filteredItems()[selectedItem()])\n const gold = computed(() => currentPlayer()._gold())\n const actionLabel = computed(() => tradeMode() === 'buy' ? 'Buy' : 'Sell')\n const faceSheet = (graphicId, animationName) => ({\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName || \"default\"\n })\n const maxQuantity = computed(() => {\n const item = currentItem()\n if (!item) return 0\n const price = item?.price || 0\n if (price <= 0) return 0\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return Math.max(0, qty)\n }\n return Math.max(1, Math.floor(gold() / price))\n })\n const totalPrice = computed(() => {\n const price = currentItem()?.price || 0\n return price * quantity()\n })\n const displayStats = computed(() => {\n const stats = currentItem()?.stats || {}\n const params = guiData().playerParams || {}\n const order = ['atk', 'def', 'pdef', 'sdef', 'str', 'dex', 'int', 'agi', 'maxHp', 'maxSp']\n const labels = {\n atk: 'ATK',\n def: 'DEF',\n pdef: 'PDEF',\n sdef: 'SDEF',\n str: 'STR',\n dex: 'DEX',\n int: 'INT',\n agi: 'AGI',\n maxHp: 'MAX HP',\n maxSp: 'MAX SP'\n }\n const orderedKeys = order.filter((key) => stats[key] !== undefined)\n const extraKeys = Object.keys(stats).filter((key) => !order.includes(key))\n const keys = orderedKeys.concat(extraKeys)\n const list = []\n for (const key of keys) {\n const delta = stats[key]\n if (delta === undefined || delta === 0) continue\n let current = params[key]\n if (current === undefined && key === 'def') current = params.pdef\n const next = current !== undefined ? current + delta : undefined\n list.push({\n key,\n label: labels[key] || key.toUpperCase(),\n delta,\n current,\n next\n })\n }\n return list\n })\n const nav = createTabindexNavigator(selectedItem, { count: () => filteredItems().length }, 'wrap')\n const navTab = createTabindexNavigator(selectedTab, { count: () => tabs.length }, 'wrap')\n const navMode = createTabindexNavigator(selectedModeIndex, { count: () => 2 }, 'wrap')\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index)\n quantity.set(1)\n if (!isItemDisabled(filteredItems()[index])) {\n quantityDialogOpen.set(true)\n }\n }\n }\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index)\n selectedItem.set(0)\n }\n }\n\n function selectMode(mode) {\n return function() {\n tradeMode.set(mode)\n selectedModeIndex.set(mode === 'buy' ? 0 : 1)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n }\n\n function isItemDisabled(item) {\n if (!item) return true\n const price = item?.price || 0\n if (price <= 0) return true\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return qty <= 0\n }\n return gold() < price\n }\n\n function backToMode() {\n return function() {\n tradeView.set('mode')\n }\n }\n\n function changeQuantity(delta) {\n return function() {\n const limit = maxQuantity()\n if (limit <= 0) return\n const nextValue = Math.max(1, Math.min(limit, quantity() + delta))\n if (nextValue !== quantity()) {\n quantity.set(nextValue)\n }\n }\n }\n\n function closeQuantityDialog() {\n return function() {\n quantityDialogOpen.set(false)\n }\n }\n\n function confirmTrade() {\n return function() {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n }\n }\n\n effect(() => {\n const count = filteredItems().length\n if (selectedItem() >= count) {\n selectedItem.set(Math.max(0, count - 1))\n }\n })\n\n const modeControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n navMode.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n navMode.next(1)\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n const mode = selectedModeIndex() === 0 ? 'buy' : 'sell'\n tradeMode.set(mode)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n onFinish()\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const itemControls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(1)()\n return\n }\n nav.next(-1)\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(-1)()\n return\n }\n nav.next(1)\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (quantityDialogOpen()) {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n return\n }\n const item = currentItem()\n if (!isItemDisabled(item)) {\n quantityDialogOpen.set(true)\n }\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (quantityDialogOpen()) {\n quantityDialogOpen.set(false)\n return\n }\n tradeView.set('mode')\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const tabControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(1)\n }\n },\n gamepad: {\n enabled: true\n }\n })\n</script>\n"],"mappings":";;;;;AAYM,SAAS,UAAU,SAAS;CACX,SAAO,OAAG;CACzB,MAAM,cAAU,eAAA,OAAA;CAChB,MAAM,SAAQ,OAAG,eAAA;CACzB,MAAM,gBAAe,OAAI,MAAU;CACnC,MAAM,mBAAmB,OAAK,aAAe;CAC7C,MAAM,aAAa,YAAM;EACrB,YAAY,OAAK,eAAA,MAAA;EACjB,SAAS;CACb;CACA,MAAM,WAAW,OAAI,aAAA,YAAA;CACrB,MAAM,eAAW,OAAA,CAAA;;CAEjB,MAAM,YAAW,OAAO,KAAI;CAC5B,MAAM,YAAW,OAAI,MAAU;CAC/B,MAAM,oBAAe,OAAY,CAAC;CAClC,MAAM,WAAW,OAAO,CAAC;CACzB,MAAM,qBAAmB,OAAS,KAAK;CACvC,MAAM,iBAAiB;CACvB,MAAM,OAAO;EACT;GAAE,IAAI;GAAQ,OAAO;EAAO;EAC5B;GAAE,IAAI;GAAU,OAAM;EAAG;EACzB;GAAE,IAAI;GAAS,OAAM;EAAS;CAClC;CACA,MAAM,EAAE,MAAM,eAAe,aAAa,YAAW;CACrD,MAAM,eAAe,UAAU,OAAM,UAAA,aAAA,MAAA,IAAA;CACrC,MAAM,UAAU,eAAe,YAAS,IAAO,KAAI,CAAA,CAAA;CACnD,MAAM,cAAc,eAAe;EAC/B,MAAM,UAAU,YAAY,QAAQ,EAAA,OAAO;EAC3C,OAAO,UAAU,OAAO,OAAO,IAAE;CACrC,CAAC;CACD,MAAM,OAAO,eAAe,YAAY,QAAO,EAAG,IAAC,CAAI;CACvD,MAAM,UAAU,eAAe;EAC3B,MAAM,QAAQ,KAAK;EACnB,OAAO,SAAS,MAAM;CAC1B,CAAC;CACD,MAAM,WAAW,eAAa,QAAU,EAAA,SAAA,CAAA,CAAA;CACxC,MAAM,YAAY,eAAW,QAAA,EAAA,aAAA,CAAA,CAAA;CAC7B,MAAM,cAAc,eAAS,UAAA,MAAA,QAAA,SAAA,IAAA,UAAA,CAAA;CAC7B,MAAM,gBAAgB,eAAG;EACrB,MAAM,MAAM,KAAA,YAAA;EACZ,MAAM,QAAO,YAAK;EAClB,IAAI,CAAC,KACD,OAAO,CAAC;EACZ,OAAO,MAAM,QAAQ,SAAS,MAAM,SAAS,IAAC,EAAA;CAClD,CAAC;CACD,MAAM,cAAc,eAAa,cAAG,EAAA,aAAA,EAAA;CACpC,MAAM,OAAO,eAAe,cAAc,EAAC,MAAI,CAAI;CACnD,MAAM,cAAc,eAAe,UAAS,MAAO,QAAC,QAAe,MAAG;CACtE,MAAM,aAAa,WAAW,mBAAgB;EAC1C,YAAY,OAAO,eAAa,SAAO;EACvC,SAAS,iBAAiB;CAC9B;CACA,MAAM,cAAc,eAAS;EACzB,MAAM,OAAO,YAAK;aAEd,OAAO;EACX,MAAM,QAAQ,MAAM,SAAK;EACzB,IAAI,SAAS,GACT,OAAO;EACX,IAAI,UAAU,MAAM,QAAQ;GACxB,MAAM,MAAM,MAAM,YAAY;GAC9B,OAAO,KAAK,IAAI,GAAG,GAAG;EAC1B;EACA,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC;CACjD,CAAC;CACD,MAAM,aAAa,eAAe;EAE9B,QADc,YAAY,GAAG,SAAS,KACvB,SAAS;CAC5B,CAAC;CACD,MAAM,eAAe,eAAe;EAChC,MAAM,QAAQ,YAAY,GAAG,SAAS,CAAA;EACtC,MAAM,SAAS,QAAQ,EAAE,gBAAgB,CAAA;EACzC,MAAM,QAAQ;GAAC;GAAO;GAAO;GAAQ;GAAI;GAAW;GAAK;GAAK;GAAU;GAAU;EAAO;EACzF,MAAM,SAAS;GACX,KAAK;GACL,KAAK;GACL,MAAM;GACN,MAAM;GACN,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;;EAEX;EACA,MAAM,cAAc,MAAK,QAAS,QAAM,MAAK,SAAQ,KAAA,CAAO;EAC5D,MAAM,YAAY,OAAO,KAAI,KAAI,EAAA,QAAW,QAAK,CAAA,MAAQ,SAAK,GAAA,CAAA;EAC9D,MAAM,OAAO,YAAY,OAAO,SAAC;EACjC,MAAM,OAAO,CAAC;EACd,KAAK,MAAM,OAAO,MAAM;GACpB,MAAM,QAAQ,MAAM;GACpB,IAAI,UAAU,KAAA,KAAa,UAAK,GAC5B;GACJ,IAAI,UAAU,OAAO;GACrB,IAAI,YAAY,KAAA,KAAa,QAAA,OACzB,UAAU,OAAO;GACrB,MAAM,OAAO,YAAY,KAAA,IAAS,UAAQ,QAAa,KAAA;GACvD,KAAK,KAAK;IACN;IACA,OAAO,OAAO,QAAM,IAAA,YAAA;IACpB;IACA;IACA;GACJ,CAAC;EACL;EACA,OAAO;CACX,CAAC;CACD,MAAM,MAAM,wBAAuB,cAAe,EAAA,aAAe,cAAI,EAAA,OAAA,GAAA,MAAA;CACrE,MAAM,SAAS,wBAAkB,aAAA,EAAA,aAAA,KAAA,OAAA,GAAA,MAAA;CACjC,MAAM,UAAU,wBAAgB,mBAAA,EAAA,aAAA,EAAA,GAAA,MAAA;CAChC,SAAS,WAAW,OAAO;EACvB,OAAO,WAAY;GACf,aAAa,IAAI,KAAK;GACtB,SAAS,IAAI,CAAC;GACd,IAAI,CAAC,eAAe,cAAc,EAAE,MAAK,GACrC,mBAAmB,IAAI,IAAI;EAEnC;CACJ;CACA,SAAS,UAAU,OAAO;EACtB,OAAO,WAAY;GACf,YAAY,IAAI,KAAK;GACrB,aAAa,IAAI,CAAC;EACtB;CACJ;CACA,SAAS,WAAW,MAAM;EACtB,OAAO,WAAY;GACf,UAAU,IAAI,IAAI;GAClB,kBAAiB,IAAA,SAAA,QAAA,IAAA,CAAA;GACjB,aAAa,IAAI,CAAA;GACjB,SAAQ,IAAA,CAAA;GACR,UAAS,IAAI,OAAA;EACjB;CACJ;CACA,SAAS,eAAe,MAAK;EACzB,IAAI,CAAC,MACD,OAAO;EACX,MAAM,QAAQ,MAAM,SAAS;EAC7B,IAAI,SAAS,GACT,OAAO;EACX,IAAI,UAAU,MAAM,QAEhB,QADY,MAAM,YAAW,MACf;EAElB,OAAO,KAAK,IAAI;CACpB;CACA,SAAS,aAAa;EAClB,OAAO,WAAY;GACf,UAAU,IAAI,MAAM;EACxB;CACJ;CACA,SAAS,eAAe,OAAK;EACzB,OAAO,WAAY;GACf,MAAM,QAAQ,YAAW;GACzB,IAAI,SAAS,GACT;GACJ,MAAM,YAAY,KAAI,IAAG,GAAA,KAAA,IAAA,OAAA,SAAA,IAAA,KAAA,CAAA;GACzB,IAAI,cAAc,SAAG,GACjB,SAAS,IAAI,SAAA;EAErB;CACJ;CACA,SAAS,sBAAI;EACT,OAAE,WAAY;;EAEjB;CACD;CACA,SAAI,eAAkB;EAClB,OAAO,WAAE;GACT,MAAS,OAAA,YAAA;;IAEH,mBAAgB,IAAA,KAAA;IAChB;GACN;GAEI,cADe,UAAU,MAAE,QAAA,YAAA,YACR;IAAA,IAAA,KAAc;IAAC,IAAO,SAAA;GAAA,CAAA;GACzC,mBAAiB,IAAA,KAAA;EACrB;CACJ;;EAEI,MAAM,QAAA,cAAsB,EAAC;EAC7B,IAAA,aAAiB,KAAG,OACpB,aAAiB,IAAC,KAAQ,IAAI,GAAA,QAAA,CAAA,CAAA;CAElC,CAAC;CACD,MAAI,eAAiB,OAAO;EACxB,MAAM;GACN,QAAM;GACN,MAAU,iBAAG;GACT,UAAO;GACP,UAAO;IACH,QAAQ,KAAG,EAAA;GACnB;;EAEA,OAAO;;GAEP,MAAM,iBAAqB;GAC3B,UAAc;GACd,UAAM;IACF,QAAM,KAAU,CAAA;GAChB;EACJ;EACA,QAAM;GACN,MAAM,uBAAyB,iBAAA,MAAA;GAC3B,UAAM;IACN,MAAO,OAAS,kBAAM,MAAA,IAAA,QAAA;IACzB,UAAA,IAAA,IAAA;IACK,aAAW,IAAQ,CAAC;IACpB,SAAW,IAAC,CAAA;IACZ,UAAY,IAAE,OAAS;GAC7B;EACA;EACA,QAAI;GACA,MAAK,iBAAa;GAClB,UAAO;IACV,SAAA;GACD;EACA;EACA,SAAM,EACN,SAAM,KACN;CACJ,CAAC;CACD,MAAK,eAAA,OAAA;EACD,IAAA;GACI,QAAM;GACN,MAAK,iBAAa;GAClB,UAAM;GACN,UAAU;IACN,IAAA,mBAAuB,GAAC;KACxB,eAAkB,CAAA,EAAA;KAClB;IACJ;IACA,IAAO,KAAK,EAAG;GAClB;EACD;EACA,MAAI;GACA,QAAO;GACV,MAAA,iBAAA;GACD,UAAM;GACF,UAAM;IACN,IAAM,mBAAmB,GAAA;KACnB,eAAiB,EAAA,EAAI;KACrB;IACF;IACA,IAAI,KAAK,CAAC;GACd;EACJ;EACA,QAAQ;GACJ,MAAI,uBAAU,iBAAA,MAAA;GACd,UAAU;IACN,IAAI,mBAAM,GAAA;KACV,MAAQ,OAAO,YAAA;KACf,IAAQ,CAAA,QAAM,eAAA,IAAA,GAAA;MAClB,mBAAA,IAAA,KAAA;MACM;KACA;KAEA,cADO,UAAmB,MAAA,QAAS,YAAA,YAC3B;MAAA,IAAA,KAAA;MAAA,IAAA,SAAA;KAAA,CAAA;KACT,mBAAmB,IAAA,KAAA;KACpB;IACA;IAEA,IAAI,CAAA,eADS,YACG,CAAA,GAChB,mBAAuB,IAAE,IAAA;GAE7B;EACJ;EACA,QAAQ;GACJ,MAAM,iBAAS;GACf,UAAQ;IACJ,IAAC,mBAAA,GAAA;KACL,mBAAA,IAAA,KAAA;KACO;IACV;IACK,UAAM,IAAA,MAAA;GACZ;EACA;aAEA,SAAS,KACT;CACJ,CAAC;CACD,MAAM,cAAc,OAAE;EAClB,MAAM;GACF,QAAI;GACJ,MAAA,iBAAA;GACD,UAAA;GACH,UAAA;8BAES;IACL,OAAO,KAAS,EAAE;GAClB;EACJ;EACA,OAAI;GACJ,QAAA;;GAEA,UAAS;GACL,UAAO;IACH,IAAA,mBAAkB,GAClB;IACA,OAAA,KAAY,CAAC;GACjB;EACJ;EACA,SAAI,EACJ,SAAA,KAAA;CAEJ,CAAC;CAEO,OADW,EAAA,cAAO;EAAA,OAAA;EAAA,QAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,sCAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kBAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,oBAAA;CAAA,GAAA,CAAA,EAAA,YAAA,EAAA,SAAA,MAAA,GAAA,KAAA,eAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,2BAAA;CAAA,GAAA,EAAA,WAAA;EAAA,OAAA,eAAA,UAAA,KAAA,EAAA,IAAA,KAAA,EAAA,UAAA,CAAA;EAAA,OAAA;EAAA,QAAA;EAAA,WAAA;CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yBAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,aAAA,eAAA,YAAA,CAAA;CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,gBAAA;EAAA,aAAA,eAAA,KAAA,IAAA,QAAA;CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,gBAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,gBAAA;CAAA,GAAA,CAAA,KAAA,eAAA,UAAA,MAAA,MAAA,SAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yCAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yCAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,0BAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,wBAAA;EAAA,aAAA;CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,aAAA;EAAA,aAAA;CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;CAAA,GAAA,EAAA,YAAA;EAAA,UAAA;EAAA,UAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,oCAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,gBAAA,gBAAA,EAAA,QAAA,kBAAA,MAAA,EAAA,EAAA,CAAA;GAAA,OAAA,WAAA,KAAA;EAAA;EAAA,aAAA;CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,gBAAA,gBAAA,EAAA,QAAA,kBAAA,MAAA,EAAA,EAAA,CAAA;GAAA,OAAA,WAAA,MAAA;EAAA;EAAA,aAAA;CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,EAAA,YAAA,EAAA,SAAA,MAAA,GAAA,CAAA,EAAA,YAAA;EAAA,UAAA;EAAA,UAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,gBAAA;CAAA,GAAA,KAAA,OAAA,KAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,gBAAA,gBAAA,EAAA,QAAA,YAAA,MAAA,MAAA,EAAA,CAAA;GAAA,UAAA;GAAA,OAAA,UAAA,KAAA;EAAA;EAAA,aAAA,IAAA;CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,mBAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,gBAAA;CAAA,GAAA,EAAA,YAAA;EAAA,UAAA;EAAA,UAAA;CAAA,GAAA,KAAA,gBAAA,MAAA,UAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA;GAAA,OAAA,CAAA,iBAAA,gBAAA;IAAA,UAAA,eAAA,IAAA;IAAA,UAAA,aAAA,MAAA;GAAA,EAAA,CAAA;GAAA,UAAA;GAAA,OAAA,WAAA,KAAA;EAAA;CAAA,GAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;EAAA,GAAA,KAAA,KAAA,YAAA,EAAA,WAAA;GAAA,OAAA,eAAA,UAAA,KAAA,IAAA,CAAA;GAAA,SAAA;GAAA,OAAA;GAAA,QAAA;GAAA,WAAA;EAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;GAAA,aAAA,KAAA;EAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,sBAAA;GAAA,aAAA,KAAA,QAAA;EAAA,CAAA;EAAA,KAAA,eAAA,KAAA,aAAA,KAAA,CAAA,SAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,oBAAA;GAAA,aAAA,MAAA,KAAA;EAAA,CAAA,CAAA;EAAA,KAAA,KAAA,gBAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,oBAAA;GAAA,aAAA;EAAA,CAAA,CAAA;CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,mBAAA;CAAA,GAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,0BAAA;EAAA,GAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,wBAAA;GAAA,GAAA,EAAA,WAAA;IAAA,OAAA,eAAA,UAAA,YAAA,GAAA,IAAA,CAAA;IAAA,SAAA;IAAA,OAAA;IAAA,QAAA;IAAA,WAAA;GAAA,CAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,aAAA;IAAA,aAAA,eAAA,YAAA,GAAA,QAAA,EAAA;GAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,oDAAA;IAAA,aAAA,eAAA,YAAA,GAAA,SAAA,IAAA,QAAA;GAAA,CAAA;GAAA,KAAA,eAAA,YAAA,GAAA,aAAA,KAAA,CAAA,SAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,uBAAA;IAAA,aAAA,eAAA,WAAA,YAAA,GAAA,QAAA;GAAA,CAAA,CAAA;EAAA,CAAA;EAAA,EAAA,YAAA,EAAA,SAAA,MAAA,GAAA,KAAA,eAAA,YAAA,GAAA,QAAA,SAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,oBAAA;GAAA,aAAA;EAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,wBAAA;GAAA,aAAA,eAAA,YAAA,GAAA,eAAA,EAAA;EAAA,CAAA;EAAA,EAAA,YAAA,EAAA,SAAA,MAAA,GAAA,KAAA,eAAA,aAAA,EAAA,SAAA,CAAA,SAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,iBAAA;EAAA,GAAA,KAAA,eAAA,MAAA,UAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,CAAA,iBAAA;IAAA,UAAA,KAAA,QAAA;IAAA,UAAA,KAAA,QAAA;GAAA,CAAA,EAAA;EAAA,GAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,oBAAA;IAAA,aAAA,KAAA;GAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,sBAAA;IAAA,aAAA,KAAA,QAAA,IAAA,MAAA,KAAA,KAAA;GAAA,CAAA;GAAA,KAAA,eAAA,KAAA,YAAA,KAAA,CAAA,SAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,wBAAA;IAAA,aAAA,KAAA,UAAA,QAAA,KAAA;GAAA,CAAA,CAAA;EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA;IAAA,OAAA;IAAA,OAAA,WAAA;GAAA;GAAA,aAAA;EAAA,CAAA;CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,0BAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iBAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,sBAAA;CAAA,GAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,uBAAA;GAAA,aAAA;EAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,sBAAA;GAAA,aAAA,eAAA,YAAA,GAAA,QAAA,EAAA;EAAA,CAAA;EAAA,KAAA,eAAA,YAAA,GAAA,aAAA,KAAA,CAAA,SAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,qBAAA;GAAA,aAAA,eAAA,iBAAA,YAAA,GAAA,QAAA;EAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,oBAAA;EAAA,GAAA,CAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,0BAAA;GAAA,aAAA;EAAA,CAAA,GAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,6BAAA;EAAA,GAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA;KAAA,OAAA;KAAA,OAAA,eAAA,EAAA;IAAA;IAAA,aAAA;GAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA,EAAA,OAAA,0BAAA;IAAA,aAAA;GAAA,CAAA;GAAA,EAAA,YAAA;IAAA,SAAA;IAAA,OAAA;KAAA,OAAA;KAAA,OAAA,eAAA,CAAA;IAAA;IAAA,aAAA;GAAA,CAAA;EAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,uBAAA;EAAA,GAAA,CAAA,EAAA,YAAA;GAAA,SAAA;GAAA,aAAA;EAAA,CAAA,GAAA,EAAA,YAAA;GAAA,SAAA;GAAA,aAAA,eAAA,WAAA,IAAA,QAAA;EAAA,CAAA,CAAA,CAAA;EAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA,EAAA,OAAA,yBAAA;EAAA,GAAA,CAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA;IAAA,OAAA;IAAA,OAAA,oBAAA;GAAA;GAAA,aAAA;EAAA,CAAA,GAAA,EAAA,YAAA;GAAA,SAAA;GAAA,OAAA;IAAA,OAAA;IAAA,OAAA,aAAA;GAAA;GAAA,aAAA,eAAA,YAAA,IAAA,OAAA,SAAA,CAAA;EAAA,CAAA,CAAA,CAAA;CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACP;AACb;AAEA,IAAM,iBAAiB"}
|